From 8f3971cf767f90163fb41a02587cda9aeb87c155 Mon Sep 17 00:00:00 2001 From: hummypkg Date: Thu, 9 Jun 2011 21:16:30 +0000 Subject: [PATCH] updates git-svn-id: file:///root/webif/svn/humax/pkg/src/webif@171 2a923420-c742-0410-a762-8d5b09965624 --- var/mongoose/cgi-bin/epg_info.jim | 10 +- var/mongoose/cgi-bin/epg_search.jim | 3 +- var/mongoose/cgi-bin/epg_service.jim | 14 +- var/mongoose/cgi-bin/settings.jim | 81 + var/mongoose/html/css/style.css | 6 + var/mongoose/html/img/channels/301.jpg | 1 + var/mongoose/html/img/channels/4Music.jpg | 1 + var/mongoose/html/img/channels/5 USA.jpg | 1 + var/mongoose/html/img/channels/5*.jpg | 1 + .../html/img/channels/Absolute Radio.jpg | 1 + .../html/img/channels/BBC 6 Music.jpg | 1 + .../html/img/channels/BBC Asian Net..jpg | 1 + var/mongoose/html/img/channels/BBC FOUR.jpg | 1 + var/mongoose/html/img/channels/BBC HD.jpg | 1 + var/mongoose/html/img/channels/BBC NEWS.jpg | 1 + var/mongoose/html/img/channels/BBC ONE.jpg | 1 + var/mongoose/html/img/channels/BBC One HD.jpg | 1 + .../html/img/channels/BBC Parliament.jpg | 1 + var/mongoose/html/img/channels/BBC R1X.jpg | 1 + var/mongoose/html/img/channels/BBC R5L.jpg | 1 + var/mongoose/html/img/channels/BBC R5SX.jpg | 1 + .../html/img/channels/BBC Radio 1.jpg | 1 + .../html/img/channels/BBC Radio 2.jpg | 1 + .../html/img/channels/BBC Radio 3.jpg | 1 + .../html/img/channels/BBC Radio 4 Ex.jpg | 1 + .../html/img/channels/BBC Radio 4.jpg | 1 + var/mongoose/html/img/channels/BBC THREE.jpg | 1 + var/mongoose/html/img/channels/BBC TWO.jpg | 1 + .../html/img/channels/BBC World Sv..jpg | 1 + var/mongoose/html/img/channels/Big Deal.jpg | 1 + .../html/img/channels/CBBC Channel.jpg | 1 + var/mongoose/html/img/channels/CBeebies.jpg | 1 + var/mongoose/html/img/channels/CITV.jpg | 1 + var/mongoose/html/img/channels/COMMUNITY.jpg | 1 + var/mongoose/html/img/channels/Capital FM.jpg | 1 + var/mongoose/html/img/channels/Challenge.jpg | 1 + .../html/img/channels/Channel 4 HD.jpg | 1 + .../html/img/channels/Channel 4+1.jpg | 1 + var/mongoose/html/img/channels/Channel 4.jpg | 1 + var/mongoose/html/img/channels/Channel 5.jpg | 1 + var/mongoose/html/img/channels/Clirlun.jpg | 1 + .../html/img/channels/Create & Craft.jpg | 1 + var/mongoose/html/img/channels/Dave ja vu.jpg | 1 + var/mongoose/html/img/channels/Dave.jpg | 1 + var/mongoose/html/img/channels/Daystar.jpg | 1 + var/mongoose/html/img/channels/E4+1.jpg | 1 + var/mongoose/html/img/channels/E4.jpg | 1 + var/mongoose/html/img/channels/ESPN.jpg | 1 + var/mongoose/html/img/channels/Film4.jpg | 1 + var/mongoose/html/img/channels/Gems TV.gif | 1 + var/mongoose/html/img/channels/Gems TV.jpg | 1 + var/mongoose/html/img/channels/Heart.jpg | 1 + var/mongoose/html/img/channels/Home.jpg | 1 + var/mongoose/html/img/channels/ITV1 +1.jpg | 1 + var/mongoose/html/img/channels/ITV1 HD.jpg | 1 + var/mongoose/html/img/channels/ITV1.jpg | 1 + var/mongoose/html/img/channels/ITV2 +1.jpg | 1 + var/mongoose/html/img/channels/ITV2.jpg | 1 + var/mongoose/html/img/channels/ITV3.jpg | 1 + var/mongoose/html/img/channels/ITV4.jpg | 1 + .../html/img/channels/Ideal World.jpg | 1 + var/mongoose/html/img/channels/Kerrang!.jpg | 1 + var/mongoose/html/img/channels/Kiss.jpg | 1 + var/mongoose/html/img/channels/Magic.jpg | 1 + var/mongoose/html/img/channels/More 4.jpg | 1 + var/mongoose/html/img/channels/Pick TV+1.jpg | 1 + var/mongoose/html/img/channels/Pick TV.jpg | 1 + .../html/img/channels/Premier Radio.jpg | 1 + var/mongoose/html/img/channels/Q.jpg | 1 + var/mongoose/html/img/channels/QUEST.jpg | 1 + var/mongoose/html/img/channels/QVC Beauty.jpg | 1 + var/mongoose/html/img/channels/QVC.jpg | 1 + .../html/img/channels/Rocks & Co 1.jpg | 1 + .../html/img/channels/Russia Today.jpg | 1 + var/mongoose/html/img/channels/S4C.jpg | 1 + .../html/img/channels/SMOOTH RADIO.jpg | 1 + var/mongoose/html/img/channels/Sky News.jpg | 1 + .../html/img/channels/Sky Sports 1.jpg | 1 + .../html/img/channels/Sky Sports 2.jpg | 1 + var/mongoose/html/img/channels/Sky Text.jpg | 1 + .../html/img/channels/Smash Hits!.jpg | 1 + .../html/img/channels/Teletext Hols.jpg | 1 + .../html/img/channels/Television X.jpg | 1 + .../html/img/channels/The Hits Radio.jpg | 1 + var/mongoose/html/img/channels/U105.jpg | 1 + var/mongoose/html/img/channels/VIVA.jpg | 1 + var/mongoose/html/img/channels/Yesterday.jpg | 1 + var/mongoose/html/img/channels/bid tv.jpg | 1 + var/mongoose/html/img/channels/cam/espn.jpg | Bin 0 -> 7513 bytes .../cam/harmonyOne_88X150_SkySportsOne.jpg | Bin 0 -> 34265 bytes .../cam/harmonyOne_88X150_SkySportsThree.jpg | Bin 0 -> 34672 bytes .../cam/harmonyOne_88X150_SkySportsTwo.jpg | Bin 0 -> 34657 bytes .../html/img/channels/cam/home_uktv.jpg | Bin 0 -> 8999 bytes .../html/img/channels/cam/rocks_and_co.jpg | Bin 0 -> 2987 bytes .../img/channels/freeview/4-MUSIC_logo.jpg | Bin 0 -> 1992 bytes .../html/img/channels/freeview/4HD_logo.jpg | Bin 0 -> 1918 bytes .../html/img/channels/freeview/5-USA_logo.jpg | Bin 0 -> 2184 bytes .../img/channels/freeview/Absolute_logo.jpg | Bin 0 -> 2361 bytes .../img/channels/freeview/BBC-1-HD_logo.jpg | Bin 0 -> 2171 bytes .../img/channels/freeview/BBC-FOUR_logo.jpg | Bin 0 -> 2072 bytes .../img/channels/freeview/BBC-HD_logo.jpg | Bin 0 -> 1804 bytes .../img/channels/freeview/BBC-NEWS_logo.jpg | Bin 0 -> 2337 bytes .../channels/freeview/BBC-PARLIAMENT_logo.jpg | Bin 0 -> 2099 bytes .../channels/freeview/BBC-RADIO-3_logo.jpg | Bin 0 -> 2462 bytes .../channels/freeview/BBC-RADIO-4_logo.jpg | Bin 0 -> 2355 bytes .../freeview/BBC-RADIO-5-live-sports_logo.jpg | Bin 0 -> 2226 bytes .../freeview/BBC-RADIO-5-live_logo.jpg | Bin 0 -> 2102 bytes .../freeview/BBC-RADIO-6-music_logo.jpg | Bin 0 -> 2108 bytes .../channels/freeview/BBC-RADIO-A_logo.jpg | Bin 0 -> 2311 bytes .../channels/freeview/BBC-RED-BUTTON_logo.jpg | Bin 0 -> 2523 bytes .../freeview/BBC-Radio-1Xtra_logo.jpg | Bin 0 -> 2132 bytes .../channels/freeview/BBC-Radio-1_logo.jpg | Bin 0 -> 2128 bytes .../channels/freeview/BBC-Radio-2_logo.jpg | Bin 0 -> 2268 bytes .../freeview/BBC-Radio-4-Extra_logo.jpg | Bin 0 -> 1825 bytes .../freeview/BBC-WORLD-SERVICE_logo.jpg | Bin 0 -> 2214 bytes .../img/channels/freeview/BBC-one_logo.jpg | Bin 0 -> 2098 bytes .../img/channels/freeview/BBC-three_logo.jpg | Bin 0 -> 1962 bytes .../img/channels/freeview/BBC-two_logo.jpg | Bin 0 -> 2059 bytes .../img/channels/freeview/Big-Deal_logo.jpg | Bin 0 -> 2705 bytes .../img/channels/freeview/CBeebies_logo.jpg | Bin 0 -> 2346 bytes .../channels/freeview/Capital-Radio_logo.jpg | Bin 0 -> 2604 bytes .../channels/freeview/Challenge-TV_logo.jpg | Bin 0 -> 1905 bytes .../html/img/channels/freeview/Citv_logo.jpg | Bin 0 -> 1836 bytes .../freeview/Create-and-Craft_logo.jpg | Bin 0 -> 2095 bytes .../img/channels/freeview/Dave-Ja-Vu_logo.jpg | Bin 0 -> 1794 bytes .../html/img/channels/freeview/Dave_logo.jpg | Bin 0 -> 1992 bytes .../img/channels/freeview/Daystar_logo.jpg | Bin 0 -> 2047 bytes .../html/img/channels/freeview/E4-1_logo.jpg | Bin 0 -> 2104 bytes .../html/img/channels/freeview/E4_logo.jpg | Bin 0 -> 1824 bytes .../img/channels/freeview/FILM-4_logo.jpg | Bin 0 -> 1754 bytes .../html/img/channels/freeview/Five_logo.jpg | Bin 0 -> 2537 bytes .../img/channels/freeview/ITV1-1_logo.jpg | Bin 0 -> 1869 bytes .../img/channels/freeview/ITV1-HD_logo.jpg | Bin 0 -> 1889 bytes .../channels/freeview/KERRAND!-Radio_logo.jpg | Bin 0 -> 2540 bytes .../img/channels/freeview/KISS-Radio_logo.jpg | Bin 0 -> 1964 bytes .../img/channels/freeview/MORE-4_logo.jpg | Bin 0 -> 1847 bytes .../img/channels/freeview/Pick-TV_logo.jpg | Bin 0 -> 2021 bytes .../freeview/Premier-CHRISTIAN-RADIO_logo.jpg | Bin 0 -> 2355 bytes .../img/channels/freeview/Q-Radio_logo.jpg | Bin 0 -> 2028 bytes .../img/channels/freeview/QVC-Beauty_logo.jpg | Bin 0 -> 1853 bytes .../html/img/channels/freeview/QVC_logo.jpg | Bin 0 -> 1963 bytes .../html/img/channels/freeview/Quest_logo.jpg | Bin 0 -> 1863 bytes .../channels/freeview/Russia-Today_logo.jpg | Bin 0 -> 1762 bytes .../html/img/channels/freeview/S4-C_logo.jpg | Bin 0 -> 2031 bytes .../channels/freeview/S4C-Clirlun_logo.jpg | Bin 0 -> 1855 bytes .../img/channels/freeview/SKY-NEWS_logo.jpg | Bin 0 -> 2011 bytes .../freeview/Teletext-holidays_logo.jpg | Bin 0 -> 2578 bytes .../img/channels/freeview/U105.8_logo.jpg | Bin 0 -> 1962 bytes .../html/img/channels/freeview/VIVA_logo.jpg | Bin 0 -> 2019 bytes .../img/channels/freeview/Yesterday_logo.jpg | Bin 0 -> 1788 bytes .../channels/freeview/alsmallchannel_logo.jpg | Bin 0 -> 1374 bytes .../img/channels/freeview/bid-tv_logo.jpg | Bin 0 -> 1888 bytes .../html/img/channels/freeview/cbbc_logo.jpg | Bin 0 -> 2199 bytes .../channels/freeview/channel-4-1_logo.jpg | Bin 0 -> 1742 bytes .../img/channels/freeview/channel-4_logo.jpg | Bin 0 -> 1793 bytes .../freeview/community-channel_logo.jpg | Bin 0 -> 2332 bytes .../html/img/channels/freeview/five_logo.jpg | Bin 0 -> 2153 bytes .../channels/freeview/heart-Radio_logo.jpg | Bin 0 -> 2338 bytes .../img/channels/freeview/heat-Radio_logo.jpg | Bin 0 -> 2363 bytes .../channels/freeview/ideal-WORLD_logo.jpg | Bin 0 -> 1896 bytes .../html/img/channels/freeview/itv-1_logo.jpg | Bin 0 -> 2053 bytes .../img/channels/freeview/itv-2-1_logo.jpg | Bin 0 -> 1947 bytes .../html/img/channels/freeview/itv-2_logo.jpg | Bin 0 -> 2079 bytes .../html/img/channels/freeview/itv-3_logo.jpg | Bin 0 -> 2265 bytes .../html/img/channels/freeview/itv-4_logo.jpg | Bin 0 -> 2107 bytes .../img/channels/freeview/logo_tn_gems.gif | Bin 0 -> 4069 bytes .../img/channels/freeview/logo_tn_tvx.jpg | Bin 0 -> 5213 bytes .../channels/freeview/magic-Radio_logo.jpg | Bin 0 -> 1684 bytes .../channels/freeview/price-drop-tv_logo.jpg | Bin 0 -> 1560 bytes .../img/channels/freeview/skytext_logo.jpg | Bin 0 -> 2066 bytes .../channels/freeview/smash!-Radio_logo.jpg | Bin 0 -> 2273 bytes .../channels/freeview/smooth-RADIO_logo.jpg | Bin 0 -> 2320 bytes .../img/channels/freeview/talkSPORT_logo.jpg | Bin 0 -> 2467 bytes .../html/img/channels/freeview/teleg_logo.jpg | Bin 0 -> 1817 bytes .../img/channels/freeview/the-hits_logo.jpg | Bin 0 -> 1971 bytes var/mongoose/html/img/channels/heat.jpg | 1 + var/mongoose/html/img/channels/mk | 113 + .../html/img/channels/price-drop tv.jpg | 1 + var/mongoose/html/img/channels/talkSPORT.jpg | 1 + var/mongoose/html/index.shtml | 27 + var/mongoose/html/jimref.html | 6984 +++++++++++++++++ var/mongoose/html/js/jquery.form.js | 899 +++ var/mongoose/html/lib/footer.jim | 19 +- var/mongoose/html/lib/footer.shtml | 8 - var/mongoose/html/lib/header.jim | 6 +- var/mongoose/html/lib/header.shtml | 2 +- var/mongoose/html/lib/topbar.jim | 4 +- var/mongoose/html/lib/topbar.shtml | 2 +- var/mongoose/include/epg.jim | 8 +- var/mongoose/include/model.jim | 15 + var/mongoose/include/sched.jim | 26 +- var/mongoose/lib/epg.class | 8 + 192 files changed, 8283 insertions(+), 38 deletions(-) create mode 100755 var/mongoose/cgi-bin/settings.jim create mode 120000 var/mongoose/html/img/channels/301.jpg create mode 120000 var/mongoose/html/img/channels/4Music.jpg create mode 120000 var/mongoose/html/img/channels/5 USA.jpg create mode 120000 var/mongoose/html/img/channels/5*.jpg create mode 120000 var/mongoose/html/img/channels/Absolute Radio.jpg create mode 120000 var/mongoose/html/img/channels/BBC 6 Music.jpg create mode 120000 var/mongoose/html/img/channels/BBC Asian Net..jpg create mode 120000 var/mongoose/html/img/channels/BBC FOUR.jpg create mode 120000 var/mongoose/html/img/channels/BBC HD.jpg create mode 120000 var/mongoose/html/img/channels/BBC NEWS.jpg create mode 120000 var/mongoose/html/img/channels/BBC ONE.jpg create mode 120000 var/mongoose/html/img/channels/BBC One HD.jpg create mode 120000 var/mongoose/html/img/channels/BBC Parliament.jpg create mode 120000 var/mongoose/html/img/channels/BBC R1X.jpg create mode 120000 var/mongoose/html/img/channels/BBC R5L.jpg create mode 120000 var/mongoose/html/img/channels/BBC R5SX.jpg create mode 120000 var/mongoose/html/img/channels/BBC Radio 1.jpg create mode 120000 var/mongoose/html/img/channels/BBC Radio 2.jpg create mode 120000 var/mongoose/html/img/channels/BBC Radio 3.jpg create mode 120000 var/mongoose/html/img/channels/BBC Radio 4 Ex.jpg create mode 120000 var/mongoose/html/img/channels/BBC Radio 4.jpg create mode 120000 var/mongoose/html/img/channels/BBC THREE.jpg create mode 120000 var/mongoose/html/img/channels/BBC TWO.jpg create mode 120000 var/mongoose/html/img/channels/BBC World Sv..jpg create mode 120000 var/mongoose/html/img/channels/Big Deal.jpg create mode 120000 var/mongoose/html/img/channels/CBBC Channel.jpg create mode 120000 var/mongoose/html/img/channels/CBeebies.jpg create mode 120000 var/mongoose/html/img/channels/CITV.jpg create mode 120000 var/mongoose/html/img/channels/COMMUNITY.jpg create mode 120000 var/mongoose/html/img/channels/Capital FM.jpg create mode 120000 var/mongoose/html/img/channels/Challenge.jpg create mode 120000 var/mongoose/html/img/channels/Channel 4 HD.jpg create mode 120000 var/mongoose/html/img/channels/Channel 4+1.jpg create mode 120000 var/mongoose/html/img/channels/Channel 4.jpg create mode 120000 var/mongoose/html/img/channels/Channel 5.jpg create mode 120000 var/mongoose/html/img/channels/Clirlun.jpg create mode 120000 var/mongoose/html/img/channels/Create & Craft.jpg create mode 120000 var/mongoose/html/img/channels/Dave ja vu.jpg create mode 120000 var/mongoose/html/img/channels/Dave.jpg create mode 120000 var/mongoose/html/img/channels/Daystar.jpg create mode 120000 var/mongoose/html/img/channels/E4+1.jpg create mode 120000 var/mongoose/html/img/channels/E4.jpg create mode 120000 var/mongoose/html/img/channels/ESPN.jpg create mode 120000 var/mongoose/html/img/channels/Film4.jpg create mode 120000 var/mongoose/html/img/channels/Gems TV.gif create mode 120000 var/mongoose/html/img/channels/Gems TV.jpg create mode 120000 var/mongoose/html/img/channels/Heart.jpg create mode 120000 var/mongoose/html/img/channels/Home.jpg create mode 120000 var/mongoose/html/img/channels/ITV1 +1.jpg create mode 120000 var/mongoose/html/img/channels/ITV1 HD.jpg create mode 120000 var/mongoose/html/img/channels/ITV1.jpg create mode 120000 var/mongoose/html/img/channels/ITV2 +1.jpg create mode 120000 var/mongoose/html/img/channels/ITV2.jpg create mode 120000 var/mongoose/html/img/channels/ITV3.jpg create mode 120000 var/mongoose/html/img/channels/ITV4.jpg create mode 120000 var/mongoose/html/img/channels/Ideal World.jpg create mode 120000 var/mongoose/html/img/channels/Kerrang!.jpg create mode 120000 var/mongoose/html/img/channels/Kiss.jpg create mode 120000 var/mongoose/html/img/channels/Magic.jpg create mode 120000 var/mongoose/html/img/channels/More 4.jpg create mode 120000 var/mongoose/html/img/channels/Pick TV+1.jpg create mode 120000 var/mongoose/html/img/channels/Pick TV.jpg create mode 120000 var/mongoose/html/img/channels/Premier Radio.jpg create mode 120000 var/mongoose/html/img/channels/Q.jpg create mode 120000 var/mongoose/html/img/channels/QUEST.jpg create mode 120000 var/mongoose/html/img/channels/QVC Beauty.jpg create mode 120000 var/mongoose/html/img/channels/QVC.jpg create mode 120000 var/mongoose/html/img/channels/Rocks & Co 1.jpg create mode 120000 var/mongoose/html/img/channels/Russia Today.jpg create mode 120000 var/mongoose/html/img/channels/S4C.jpg create mode 120000 var/mongoose/html/img/channels/SMOOTH RADIO.jpg create mode 120000 var/mongoose/html/img/channels/Sky News.jpg create mode 120000 var/mongoose/html/img/channels/Sky Sports 1.jpg create mode 120000 var/mongoose/html/img/channels/Sky Sports 2.jpg create mode 120000 var/mongoose/html/img/channels/Sky Text.jpg create mode 120000 var/mongoose/html/img/channels/Smash Hits!.jpg create mode 120000 var/mongoose/html/img/channels/Teletext Hols.jpg create mode 120000 var/mongoose/html/img/channels/Television X.jpg create mode 120000 var/mongoose/html/img/channels/The Hits Radio.jpg create mode 120000 var/mongoose/html/img/channels/U105.jpg create mode 120000 var/mongoose/html/img/channels/VIVA.jpg create mode 120000 var/mongoose/html/img/channels/Yesterday.jpg create mode 120000 var/mongoose/html/img/channels/bid tv.jpg create mode 100644 var/mongoose/html/img/channels/cam/espn.jpg create mode 100644 var/mongoose/html/img/channels/cam/harmonyOne_88X150_SkySportsOne.jpg create mode 100644 var/mongoose/html/img/channels/cam/harmonyOne_88X150_SkySportsThree.jpg create mode 100644 var/mongoose/html/img/channels/cam/harmonyOne_88X150_SkySportsTwo.jpg create mode 100644 var/mongoose/html/img/channels/cam/home_uktv.jpg create mode 100644 var/mongoose/html/img/channels/cam/rocks_and_co.jpg create mode 100644 var/mongoose/html/img/channels/freeview/4-MUSIC_logo.jpg create mode 100644 var/mongoose/html/img/channels/freeview/4HD_logo.jpg create mode 100644 var/mongoose/html/img/channels/freeview/5-USA_logo.jpg create mode 100644 var/mongoose/html/img/channels/freeview/Absolute_logo.jpg create mode 100644 var/mongoose/html/img/channels/freeview/BBC-1-HD_logo.jpg create mode 100644 var/mongoose/html/img/channels/freeview/BBC-FOUR_logo.jpg create mode 100644 var/mongoose/html/img/channels/freeview/BBC-HD_logo.jpg create mode 100644 var/mongoose/html/img/channels/freeview/BBC-NEWS_logo.jpg create mode 100644 var/mongoose/html/img/channels/freeview/BBC-PARLIAMENT_logo.jpg create mode 100644 var/mongoose/html/img/channels/freeview/BBC-RADIO-3_logo.jpg create mode 100644 var/mongoose/html/img/channels/freeview/BBC-RADIO-4_logo.jpg create mode 100644 var/mongoose/html/img/channels/freeview/BBC-RADIO-5-live-sports_logo.jpg create mode 100644 var/mongoose/html/img/channels/freeview/BBC-RADIO-5-live_logo.jpg create mode 100644 var/mongoose/html/img/channels/freeview/BBC-RADIO-6-music_logo.jpg create mode 100644 var/mongoose/html/img/channels/freeview/BBC-RADIO-A_logo.jpg create mode 100644 var/mongoose/html/img/channels/freeview/BBC-RED-BUTTON_logo.jpg create mode 100644 var/mongoose/html/img/channels/freeview/BBC-Radio-1Xtra_logo.jpg create mode 100644 var/mongoose/html/img/channels/freeview/BBC-Radio-1_logo.jpg create mode 100644 var/mongoose/html/img/channels/freeview/BBC-Radio-2_logo.jpg create mode 100644 var/mongoose/html/img/channels/freeview/BBC-Radio-4-Extra_logo.jpg create mode 100644 var/mongoose/html/img/channels/freeview/BBC-WORLD-SERVICE_logo.jpg create mode 100644 var/mongoose/html/img/channels/freeview/BBC-one_logo.jpg create mode 100644 var/mongoose/html/img/channels/freeview/BBC-three_logo.jpg create mode 100644 var/mongoose/html/img/channels/freeview/BBC-two_logo.jpg create mode 100644 var/mongoose/html/img/channels/freeview/Big-Deal_logo.jpg create mode 100644 var/mongoose/html/img/channels/freeview/CBeebies_logo.jpg create mode 100644 var/mongoose/html/img/channels/freeview/Capital-Radio_logo.jpg create mode 100644 var/mongoose/html/img/channels/freeview/Challenge-TV_logo.jpg create mode 100644 var/mongoose/html/img/channels/freeview/Citv_logo.jpg create mode 100644 var/mongoose/html/img/channels/freeview/Create-and-Craft_logo.jpg create mode 100644 var/mongoose/html/img/channels/freeview/Dave-Ja-Vu_logo.jpg create mode 100644 var/mongoose/html/img/channels/freeview/Dave_logo.jpg create mode 100644 var/mongoose/html/img/channels/freeview/Daystar_logo.jpg create mode 100644 var/mongoose/html/img/channels/freeview/E4-1_logo.jpg create mode 100644 var/mongoose/html/img/channels/freeview/E4_logo.jpg create mode 100644 var/mongoose/html/img/channels/freeview/FILM-4_logo.jpg create mode 100644 var/mongoose/html/img/channels/freeview/Five_logo.jpg create mode 100644 var/mongoose/html/img/channels/freeview/ITV1-1_logo.jpg create mode 100644 var/mongoose/html/img/channels/freeview/ITV1-HD_logo.jpg create mode 100644 var/mongoose/html/img/channels/freeview/KERRAND!-Radio_logo.jpg create mode 100644 var/mongoose/html/img/channels/freeview/KISS-Radio_logo.jpg create mode 100644 var/mongoose/html/img/channels/freeview/MORE-4_logo.jpg create mode 100644 var/mongoose/html/img/channels/freeview/Pick-TV_logo.jpg create mode 100644 var/mongoose/html/img/channels/freeview/Premier-CHRISTIAN-RADIO_logo.jpg create mode 100644 var/mongoose/html/img/channels/freeview/Q-Radio_logo.jpg create mode 100644 var/mongoose/html/img/channels/freeview/QVC-Beauty_logo.jpg create mode 100644 var/mongoose/html/img/channels/freeview/QVC_logo.jpg create mode 100644 var/mongoose/html/img/channels/freeview/Quest_logo.jpg create mode 100644 var/mongoose/html/img/channels/freeview/Russia-Today_logo.jpg create mode 100644 var/mongoose/html/img/channels/freeview/S4-C_logo.jpg create mode 100644 var/mongoose/html/img/channels/freeview/S4C-Clirlun_logo.jpg create mode 100644 var/mongoose/html/img/channels/freeview/SKY-NEWS_logo.jpg create mode 100644 var/mongoose/html/img/channels/freeview/Teletext-holidays_logo.jpg create mode 100644 var/mongoose/html/img/channels/freeview/U105.8_logo.jpg create mode 100644 var/mongoose/html/img/channels/freeview/VIVA_logo.jpg create mode 100644 var/mongoose/html/img/channels/freeview/Yesterday_logo.jpg create mode 100644 var/mongoose/html/img/channels/freeview/alsmallchannel_logo.jpg create mode 100644 var/mongoose/html/img/channels/freeview/bid-tv_logo.jpg create mode 100644 var/mongoose/html/img/channels/freeview/cbbc_logo.jpg create mode 100644 var/mongoose/html/img/channels/freeview/channel-4-1_logo.jpg create mode 100644 var/mongoose/html/img/channels/freeview/channel-4_logo.jpg create mode 100644 var/mongoose/html/img/channels/freeview/community-channel_logo.jpg create mode 100644 var/mongoose/html/img/channels/freeview/five_logo.jpg create mode 100644 var/mongoose/html/img/channels/freeview/heart-Radio_logo.jpg create mode 100644 var/mongoose/html/img/channels/freeview/heat-Radio_logo.jpg create mode 100644 var/mongoose/html/img/channels/freeview/ideal-WORLD_logo.jpg create mode 100644 var/mongoose/html/img/channels/freeview/itv-1_logo.jpg create mode 100644 var/mongoose/html/img/channels/freeview/itv-2-1_logo.jpg create mode 100644 var/mongoose/html/img/channels/freeview/itv-2_logo.jpg create mode 100644 var/mongoose/html/img/channels/freeview/itv-3_logo.jpg create mode 100644 var/mongoose/html/img/channels/freeview/itv-4_logo.jpg create mode 100644 var/mongoose/html/img/channels/freeview/logo_tn_gems.gif create mode 100644 var/mongoose/html/img/channels/freeview/logo_tn_tvx.jpg create mode 100644 var/mongoose/html/img/channels/freeview/magic-Radio_logo.jpg create mode 100644 var/mongoose/html/img/channels/freeview/price-drop-tv_logo.jpg create mode 100644 var/mongoose/html/img/channels/freeview/skytext_logo.jpg create mode 100644 var/mongoose/html/img/channels/freeview/smash!-Radio_logo.jpg create mode 100644 var/mongoose/html/img/channels/freeview/smooth-RADIO_logo.jpg create mode 100644 var/mongoose/html/img/channels/freeview/talkSPORT_logo.jpg create mode 100644 var/mongoose/html/img/channels/freeview/teleg_logo.jpg create mode 100644 var/mongoose/html/img/channels/freeview/the-hits_logo.jpg create mode 120000 var/mongoose/html/img/channels/heat.jpg create mode 100755 var/mongoose/html/img/channels/mk create mode 120000 var/mongoose/html/img/channels/price-drop tv.jpg create mode 120000 var/mongoose/html/img/channels/talkSPORT.jpg create mode 100644 var/mongoose/html/jimref.html create mode 100644 var/mongoose/html/js/jquery.form.js create mode 100755 var/mongoose/include/model.jim diff --git a/var/mongoose/cgi-bin/epg_info.jim b/var/mongoose/cgi-bin/epg_info.jim index e987d11..1aa4eaa 100755 --- a/var/mongoose/cgi-bin/epg_info.jim +++ b/var/mongoose/cgi-bin/epg_info.jim @@ -65,7 +65,7 @@ if {[$record get series_crid] != ""} { Series CRID - [$record get channel_crid][$record get series_crid] @@ -79,7 +79,7 @@ if {[$record get rec_crid] != ""} { if {$rec != ""} { puts "Recommends - [$rec get name] ([$rec get channel_crid][$rec get event_crid]) @@ -91,10 +91,16 @@ if {[$record get rec_crid] != ""} { puts " + [$record channel_icon] [join [$record icon_set] " "] + + + + Show raw EPG info + " epg cleanup diff --git a/var/mongoose/cgi-bin/epg_search.jim b/var/mongoose/cgi-bin/epg_search.jim index 452fbac..d1b2b8a 100755 --- a/var/mongoose/cgi-bin/epg_search.jim +++ b/var/mongoose/cgi-bin/epg_search.jim @@ -111,7 +111,7 @@ puts { - + @@ -134,6 +134,7 @@ foreach record [lsort -command rsort $records] { [clock format [$record get start] -format "%a %d %b %Y"]
[clock format [$record get start] -format "%H:%M %Z"]" puts "" + puts "" puts "
DateChannelChannel Programme Synopsis
[$record get channel_num][$record channel_icon 50] [$record get channel_name] diff --git a/var/mongoose/cgi-bin/epg_service.jim b/var/mongoose/cgi-bin/epg_service.jim index 40a28b3..a29b0b1 100755 --- a/var/mongoose/cgi-bin/epg_service.jim +++ b/var/mongoose/cgi-bin/epg_service.jim @@ -28,10 +28,18 @@ 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] +set tr [lindex $records 0] +set channel_num [$tr get channel_num] +set channel_name [$tr get channel_name] -puts "

Channel: $channel_num - $channel_name

" +puts " +
+ [$tr channel_icon 0 {vertical-align:middle}] + + $channel_num - $channel_name + +
+" puts { diff --git a/var/mongoose/cgi-bin/settings.jim b/var/mongoose/cgi-bin/settings.jim new file mode 100755 index 0000000..6e4d907 --- /dev/null +++ b/var/mongoose/cgi-bin/settings.jim @@ -0,0 +1,81 @@ +#!/mod/bin/jimsh + +package require cgi + +puts "Content-Type: text/html" +puts "" + +cgi_input +#cgi_dump + +# Set variables + +if {[catch {set fd [open "/var/lib/humaxtv/hostname" r]}]} { + set hostname "humax" +} else { + set hostname [string trim [read $fd]] + close $fd +} + +# Handle updates + +if {[dict exists $_cgi hostname]} { + set nhostname [string trim [dict get $_cgi hostname]] + if {$nhostname eq $hostname} { + puts "Hostname is already '$hostname'." + } elseif [string is alnum -strict $hostname] { + set fd [open "/var/lib/humaxtv/hostname" w] + puts $fd $nhostname + close $fd + exec hostname -F /var/lib/humaxtv/hostname + puts "Hostname successfully updated, reboot recommended." + } else { + puts "Invalid hostname." + } + exit +} + +source /mod/var/mongoose/html/lib/header.jim +puts {} + +puts { + +} + +puts " +

Settings

+ +
+ + + + +
Hostname + +
+
+ +
+ More coming soon... +
+
+" +source /mod/var/mongoose/html/lib/footer.jim + diff --git a/var/mongoose/html/css/style.css b/var/mongoose/html/css/style.css index 093c0d1..606af88 100644 --- a/var/mongoose/html/css/style.css +++ b/var/mongoose/html/css/style.css @@ -168,6 +168,12 @@ pre } */ +.blood +{ + color: #ff4000; + background: transparent; +} + .footnote { color: #ff4000; diff --git a/var/mongoose/html/img/channels/301.jpg b/var/mongoose/html/img/channels/301.jpg new file mode 120000 index 0000000..08f348f --- /dev/null +++ b/var/mongoose/html/img/channels/301.jpg @@ -0,0 +1 @@ +freeview/BBC-RED-BUTTON_logo.jpg \ No newline at end of file diff --git a/var/mongoose/html/img/channels/4Music.jpg b/var/mongoose/html/img/channels/4Music.jpg new file mode 120000 index 0000000..54dd0d8 --- /dev/null +++ b/var/mongoose/html/img/channels/4Music.jpg @@ -0,0 +1 @@ +freeview/4-MUSIC_logo.jpg \ No newline at end of file diff --git a/var/mongoose/html/img/channels/5 USA.jpg b/var/mongoose/html/img/channels/5 USA.jpg new file mode 120000 index 0000000..872a539 --- /dev/null +++ b/var/mongoose/html/img/channels/5 USA.jpg @@ -0,0 +1 @@ +freeview/5-USA_logo.jpg \ No newline at end of file diff --git a/var/mongoose/html/img/channels/5*.jpg b/var/mongoose/html/img/channels/5*.jpg new file mode 120000 index 0000000..baeb9ce --- /dev/null +++ b/var/mongoose/html/img/channels/5*.jpg @@ -0,0 +1 @@ +freeview/Five_logo.jpg \ No newline at end of file diff --git a/var/mongoose/html/img/channels/Absolute Radio.jpg b/var/mongoose/html/img/channels/Absolute Radio.jpg new file mode 120000 index 0000000..e5a7bd7 --- /dev/null +++ b/var/mongoose/html/img/channels/Absolute Radio.jpg @@ -0,0 +1 @@ +freeview/Absolute_logo.jpg \ No newline at end of file diff --git a/var/mongoose/html/img/channels/BBC 6 Music.jpg b/var/mongoose/html/img/channels/BBC 6 Music.jpg new file mode 120000 index 0000000..a52a259 --- /dev/null +++ b/var/mongoose/html/img/channels/BBC 6 Music.jpg @@ -0,0 +1 @@ +freeview/BBC-RADIO-6-music_logo.jpg \ No newline at end of file diff --git a/var/mongoose/html/img/channels/BBC Asian Net..jpg b/var/mongoose/html/img/channels/BBC Asian Net..jpg new file mode 120000 index 0000000..ed7889c --- /dev/null +++ b/var/mongoose/html/img/channels/BBC Asian Net..jpg @@ -0,0 +1 @@ +freeview/BBC-RADIO-A_logo.jpg \ No newline at end of file diff --git a/var/mongoose/html/img/channels/BBC FOUR.jpg b/var/mongoose/html/img/channels/BBC FOUR.jpg new file mode 120000 index 0000000..e27a810 --- /dev/null +++ b/var/mongoose/html/img/channels/BBC FOUR.jpg @@ -0,0 +1 @@ +freeview/BBC-FOUR_logo.jpg \ No newline at end of file diff --git a/var/mongoose/html/img/channels/BBC HD.jpg b/var/mongoose/html/img/channels/BBC HD.jpg new file mode 120000 index 0000000..a1ff255 --- /dev/null +++ b/var/mongoose/html/img/channels/BBC HD.jpg @@ -0,0 +1 @@ +freeview/BBC-HD_logo.jpg \ No newline at end of file diff --git a/var/mongoose/html/img/channels/BBC NEWS.jpg b/var/mongoose/html/img/channels/BBC NEWS.jpg new file mode 120000 index 0000000..4672675 --- /dev/null +++ b/var/mongoose/html/img/channels/BBC NEWS.jpg @@ -0,0 +1 @@ +freeview/BBC-NEWS_logo.jpg \ No newline at end of file diff --git a/var/mongoose/html/img/channels/BBC ONE.jpg b/var/mongoose/html/img/channels/BBC ONE.jpg new file mode 120000 index 0000000..bf9f2e8 --- /dev/null +++ b/var/mongoose/html/img/channels/BBC ONE.jpg @@ -0,0 +1 @@ +freeview/BBC-one_logo.jpg \ No newline at end of file diff --git a/var/mongoose/html/img/channels/BBC One HD.jpg b/var/mongoose/html/img/channels/BBC One HD.jpg new file mode 120000 index 0000000..942449e --- /dev/null +++ b/var/mongoose/html/img/channels/BBC One HD.jpg @@ -0,0 +1 @@ +freeview/BBC-1-HD_logo.jpg \ No newline at end of file diff --git a/var/mongoose/html/img/channels/BBC Parliament.jpg b/var/mongoose/html/img/channels/BBC Parliament.jpg new file mode 120000 index 0000000..1efe342 --- /dev/null +++ b/var/mongoose/html/img/channels/BBC Parliament.jpg @@ -0,0 +1 @@ +freeview/BBC-PARLIAMENT_logo.jpg \ No newline at end of file diff --git a/var/mongoose/html/img/channels/BBC R1X.jpg b/var/mongoose/html/img/channels/BBC R1X.jpg new file mode 120000 index 0000000..e8b21d0 --- /dev/null +++ b/var/mongoose/html/img/channels/BBC R1X.jpg @@ -0,0 +1 @@ +freeview/BBC-Radio-1Xtra_logo.jpg \ No newline at end of file diff --git a/var/mongoose/html/img/channels/BBC R5L.jpg b/var/mongoose/html/img/channels/BBC R5L.jpg new file mode 120000 index 0000000..97206e7 --- /dev/null +++ b/var/mongoose/html/img/channels/BBC R5L.jpg @@ -0,0 +1 @@ +freeview/BBC-RADIO-5-live_logo.jpg \ No newline at end of file diff --git a/var/mongoose/html/img/channels/BBC R5SX.jpg b/var/mongoose/html/img/channels/BBC R5SX.jpg new file mode 120000 index 0000000..9ed83e6 --- /dev/null +++ b/var/mongoose/html/img/channels/BBC R5SX.jpg @@ -0,0 +1 @@ +freeview/BBC-RADIO-5-live-sports_logo.jpg \ No newline at end of file diff --git a/var/mongoose/html/img/channels/BBC Radio 1.jpg b/var/mongoose/html/img/channels/BBC Radio 1.jpg new file mode 120000 index 0000000..26dc450 --- /dev/null +++ b/var/mongoose/html/img/channels/BBC Radio 1.jpg @@ -0,0 +1 @@ +freeview/BBC-Radio-1_logo.jpg \ No newline at end of file diff --git a/var/mongoose/html/img/channels/BBC Radio 2.jpg b/var/mongoose/html/img/channels/BBC Radio 2.jpg new file mode 120000 index 0000000..23fe042 --- /dev/null +++ b/var/mongoose/html/img/channels/BBC Radio 2.jpg @@ -0,0 +1 @@ +freeview/BBC-Radio-2_logo.jpg \ No newline at end of file diff --git a/var/mongoose/html/img/channels/BBC Radio 3.jpg b/var/mongoose/html/img/channels/BBC Radio 3.jpg new file mode 120000 index 0000000..b98ce60 --- /dev/null +++ b/var/mongoose/html/img/channels/BBC Radio 3.jpg @@ -0,0 +1 @@ +freeview/BBC-RADIO-3_logo.jpg \ No newline at end of file diff --git a/var/mongoose/html/img/channels/BBC Radio 4 Ex.jpg b/var/mongoose/html/img/channels/BBC Radio 4 Ex.jpg new file mode 120000 index 0000000..58d9234 --- /dev/null +++ b/var/mongoose/html/img/channels/BBC Radio 4 Ex.jpg @@ -0,0 +1 @@ +freeview/BBC-Radio-4-Extra_logo.jpg \ No newline at end of file diff --git a/var/mongoose/html/img/channels/BBC Radio 4.jpg b/var/mongoose/html/img/channels/BBC Radio 4.jpg new file mode 120000 index 0000000..2169452 --- /dev/null +++ b/var/mongoose/html/img/channels/BBC Radio 4.jpg @@ -0,0 +1 @@ +freeview/BBC-RADIO-4_logo.jpg \ No newline at end of file diff --git a/var/mongoose/html/img/channels/BBC THREE.jpg b/var/mongoose/html/img/channels/BBC THREE.jpg new file mode 120000 index 0000000..80e9d30 --- /dev/null +++ b/var/mongoose/html/img/channels/BBC THREE.jpg @@ -0,0 +1 @@ +freeview/BBC-three_logo.jpg \ No newline at end of file diff --git a/var/mongoose/html/img/channels/BBC TWO.jpg b/var/mongoose/html/img/channels/BBC TWO.jpg new file mode 120000 index 0000000..e0f8316 --- /dev/null +++ b/var/mongoose/html/img/channels/BBC TWO.jpg @@ -0,0 +1 @@ +freeview/BBC-two_logo.jpg \ No newline at end of file diff --git a/var/mongoose/html/img/channels/BBC World Sv..jpg b/var/mongoose/html/img/channels/BBC World Sv..jpg new file mode 120000 index 0000000..7fdfe72 --- /dev/null +++ b/var/mongoose/html/img/channels/BBC World Sv..jpg @@ -0,0 +1 @@ +freeview/BBC-WORLD-SERVICE_logo.jpg \ No newline at end of file diff --git a/var/mongoose/html/img/channels/Big Deal.jpg b/var/mongoose/html/img/channels/Big Deal.jpg new file mode 120000 index 0000000..6d75fa4 --- /dev/null +++ b/var/mongoose/html/img/channels/Big Deal.jpg @@ -0,0 +1 @@ +freeview/Big-Deal_logo.jpg \ No newline at end of file diff --git a/var/mongoose/html/img/channels/CBBC Channel.jpg b/var/mongoose/html/img/channels/CBBC Channel.jpg new file mode 120000 index 0000000..affddc2 --- /dev/null +++ b/var/mongoose/html/img/channels/CBBC Channel.jpg @@ -0,0 +1 @@ +freeview/cbbc_logo.jpg \ No newline at end of file diff --git a/var/mongoose/html/img/channels/CBeebies.jpg b/var/mongoose/html/img/channels/CBeebies.jpg new file mode 120000 index 0000000..a66d72c --- /dev/null +++ b/var/mongoose/html/img/channels/CBeebies.jpg @@ -0,0 +1 @@ +freeview/CBeebies_logo.jpg \ No newline at end of file diff --git a/var/mongoose/html/img/channels/CITV.jpg b/var/mongoose/html/img/channels/CITV.jpg new file mode 120000 index 0000000..aeb5832 --- /dev/null +++ b/var/mongoose/html/img/channels/CITV.jpg @@ -0,0 +1 @@ +freeview/Citv_logo.jpg \ No newline at end of file diff --git a/var/mongoose/html/img/channels/COMMUNITY.jpg b/var/mongoose/html/img/channels/COMMUNITY.jpg new file mode 120000 index 0000000..73b7f9d --- /dev/null +++ b/var/mongoose/html/img/channels/COMMUNITY.jpg @@ -0,0 +1 @@ +freeview/community-channel_logo.jpg \ No newline at end of file diff --git a/var/mongoose/html/img/channels/Capital FM.jpg b/var/mongoose/html/img/channels/Capital FM.jpg new file mode 120000 index 0000000..1e6bda6 --- /dev/null +++ b/var/mongoose/html/img/channels/Capital FM.jpg @@ -0,0 +1 @@ +freeview/Capital-Radio_logo.jpg \ No newline at end of file diff --git a/var/mongoose/html/img/channels/Challenge.jpg b/var/mongoose/html/img/channels/Challenge.jpg new file mode 120000 index 0000000..f769390 --- /dev/null +++ b/var/mongoose/html/img/channels/Challenge.jpg @@ -0,0 +1 @@ +freeview/Challenge-TV_logo.jpg \ No newline at end of file diff --git a/var/mongoose/html/img/channels/Channel 4 HD.jpg b/var/mongoose/html/img/channels/Channel 4 HD.jpg new file mode 120000 index 0000000..0545b68 --- /dev/null +++ b/var/mongoose/html/img/channels/Channel 4 HD.jpg @@ -0,0 +1 @@ +freeview/4HD_logo.jpg \ No newline at end of file diff --git a/var/mongoose/html/img/channels/Channel 4+1.jpg b/var/mongoose/html/img/channels/Channel 4+1.jpg new file mode 120000 index 0000000..7cf2946 --- /dev/null +++ b/var/mongoose/html/img/channels/Channel 4+1.jpg @@ -0,0 +1 @@ +freeview/channel-4-1_logo.jpg \ No newline at end of file diff --git a/var/mongoose/html/img/channels/Channel 4.jpg b/var/mongoose/html/img/channels/Channel 4.jpg new file mode 120000 index 0000000..a08052c --- /dev/null +++ b/var/mongoose/html/img/channels/Channel 4.jpg @@ -0,0 +1 @@ +freeview/channel-4_logo.jpg \ No newline at end of file diff --git a/var/mongoose/html/img/channels/Channel 5.jpg b/var/mongoose/html/img/channels/Channel 5.jpg new file mode 120000 index 0000000..6c5082b --- /dev/null +++ b/var/mongoose/html/img/channels/Channel 5.jpg @@ -0,0 +1 @@ +freeview/five_logo.jpg \ No newline at end of file diff --git a/var/mongoose/html/img/channels/Clirlun.jpg b/var/mongoose/html/img/channels/Clirlun.jpg new file mode 120000 index 0000000..73bc35e --- /dev/null +++ b/var/mongoose/html/img/channels/Clirlun.jpg @@ -0,0 +1 @@ +freeview/S4C-Clirlun_logo.jpg \ No newline at end of file diff --git a/var/mongoose/html/img/channels/Create & Craft.jpg b/var/mongoose/html/img/channels/Create & Craft.jpg new file mode 120000 index 0000000..166c883 --- /dev/null +++ b/var/mongoose/html/img/channels/Create & Craft.jpg @@ -0,0 +1 @@ +freeview/Create-and-Craft_logo.jpg \ No newline at end of file diff --git a/var/mongoose/html/img/channels/Dave ja vu.jpg b/var/mongoose/html/img/channels/Dave ja vu.jpg new file mode 120000 index 0000000..e713dcd --- /dev/null +++ b/var/mongoose/html/img/channels/Dave ja vu.jpg @@ -0,0 +1 @@ +freeview/Dave-Ja-Vu_logo.jpg \ No newline at end of file diff --git a/var/mongoose/html/img/channels/Dave.jpg b/var/mongoose/html/img/channels/Dave.jpg new file mode 120000 index 0000000..247ab35 --- /dev/null +++ b/var/mongoose/html/img/channels/Dave.jpg @@ -0,0 +1 @@ +freeview/Dave_logo.jpg \ No newline at end of file diff --git a/var/mongoose/html/img/channels/Daystar.jpg b/var/mongoose/html/img/channels/Daystar.jpg new file mode 120000 index 0000000..24c3e5e --- /dev/null +++ b/var/mongoose/html/img/channels/Daystar.jpg @@ -0,0 +1 @@ +freeview/Daystar_logo.jpg \ No newline at end of file diff --git a/var/mongoose/html/img/channels/E4+1.jpg b/var/mongoose/html/img/channels/E4+1.jpg new file mode 120000 index 0000000..1c3e8e1 --- /dev/null +++ b/var/mongoose/html/img/channels/E4+1.jpg @@ -0,0 +1 @@ +freeview/E4-1_logo.jpg \ No newline at end of file diff --git a/var/mongoose/html/img/channels/E4.jpg b/var/mongoose/html/img/channels/E4.jpg new file mode 120000 index 0000000..421c117 --- /dev/null +++ b/var/mongoose/html/img/channels/E4.jpg @@ -0,0 +1 @@ +freeview/E4_logo.jpg \ No newline at end of file diff --git a/var/mongoose/html/img/channels/ESPN.jpg b/var/mongoose/html/img/channels/ESPN.jpg new file mode 120000 index 0000000..fb717fa --- /dev/null +++ b/var/mongoose/html/img/channels/ESPN.jpg @@ -0,0 +1 @@ +cam/espn.jpg \ No newline at end of file diff --git a/var/mongoose/html/img/channels/Film4.jpg b/var/mongoose/html/img/channels/Film4.jpg new file mode 120000 index 0000000..51480f9 --- /dev/null +++ b/var/mongoose/html/img/channels/Film4.jpg @@ -0,0 +1 @@ +freeview/FILM-4_logo.jpg \ No newline at end of file diff --git a/var/mongoose/html/img/channels/Gems TV.gif b/var/mongoose/html/img/channels/Gems TV.gif new file mode 120000 index 0000000..10e0a68 --- /dev/null +++ b/var/mongoose/html/img/channels/Gems TV.gif @@ -0,0 +1 @@ +freeview/logo_tn_gems.gif \ No newline at end of file diff --git a/var/mongoose/html/img/channels/Gems TV.jpg b/var/mongoose/html/img/channels/Gems TV.jpg new file mode 120000 index 0000000..c0f1c0e --- /dev/null +++ b/var/mongoose/html/img/channels/Gems TV.jpg @@ -0,0 +1 @@ +Gems TV.gif \ No newline at end of file diff --git a/var/mongoose/html/img/channels/Heart.jpg b/var/mongoose/html/img/channels/Heart.jpg new file mode 120000 index 0000000..e78ae49 --- /dev/null +++ b/var/mongoose/html/img/channels/Heart.jpg @@ -0,0 +1 @@ +freeview/heart-Radio_logo.jpg \ No newline at end of file diff --git a/var/mongoose/html/img/channels/Home.jpg b/var/mongoose/html/img/channels/Home.jpg new file mode 120000 index 0000000..d92b365 --- /dev/null +++ b/var/mongoose/html/img/channels/Home.jpg @@ -0,0 +1 @@ +cam/home_uktv.jpg \ No newline at end of file diff --git a/var/mongoose/html/img/channels/ITV1 +1.jpg b/var/mongoose/html/img/channels/ITV1 +1.jpg new file mode 120000 index 0000000..77d6106 --- /dev/null +++ b/var/mongoose/html/img/channels/ITV1 +1.jpg @@ -0,0 +1 @@ +freeview/ITV1-1_logo.jpg \ No newline at end of file diff --git a/var/mongoose/html/img/channels/ITV1 HD.jpg b/var/mongoose/html/img/channels/ITV1 HD.jpg new file mode 120000 index 0000000..fbbeeae --- /dev/null +++ b/var/mongoose/html/img/channels/ITV1 HD.jpg @@ -0,0 +1 @@ +freeview/ITV1-HD_logo.jpg \ No newline at end of file diff --git a/var/mongoose/html/img/channels/ITV1.jpg b/var/mongoose/html/img/channels/ITV1.jpg new file mode 120000 index 0000000..7cf28c5 --- /dev/null +++ b/var/mongoose/html/img/channels/ITV1.jpg @@ -0,0 +1 @@ +freeview/itv-1_logo.jpg \ No newline at end of file diff --git a/var/mongoose/html/img/channels/ITV2 +1.jpg b/var/mongoose/html/img/channels/ITV2 +1.jpg new file mode 120000 index 0000000..26ff3db --- /dev/null +++ b/var/mongoose/html/img/channels/ITV2 +1.jpg @@ -0,0 +1 @@ +freeview/itv-2-1_logo.jpg \ No newline at end of file diff --git a/var/mongoose/html/img/channels/ITV2.jpg b/var/mongoose/html/img/channels/ITV2.jpg new file mode 120000 index 0000000..c4b0439 --- /dev/null +++ b/var/mongoose/html/img/channels/ITV2.jpg @@ -0,0 +1 @@ +freeview/itv-2_logo.jpg \ No newline at end of file diff --git a/var/mongoose/html/img/channels/ITV3.jpg b/var/mongoose/html/img/channels/ITV3.jpg new file mode 120000 index 0000000..c2c214c --- /dev/null +++ b/var/mongoose/html/img/channels/ITV3.jpg @@ -0,0 +1 @@ +freeview/itv-3_logo.jpg \ No newline at end of file diff --git a/var/mongoose/html/img/channels/ITV4.jpg b/var/mongoose/html/img/channels/ITV4.jpg new file mode 120000 index 0000000..2f19195 --- /dev/null +++ b/var/mongoose/html/img/channels/ITV4.jpg @@ -0,0 +1 @@ +freeview/itv-4_logo.jpg \ No newline at end of file diff --git a/var/mongoose/html/img/channels/Ideal World.jpg b/var/mongoose/html/img/channels/Ideal World.jpg new file mode 120000 index 0000000..dc6c0a2 --- /dev/null +++ b/var/mongoose/html/img/channels/Ideal World.jpg @@ -0,0 +1 @@ +freeview/ideal-WORLD_logo.jpg \ No newline at end of file diff --git a/var/mongoose/html/img/channels/Kerrang!.jpg b/var/mongoose/html/img/channels/Kerrang!.jpg new file mode 120000 index 0000000..3323f6d --- /dev/null +++ b/var/mongoose/html/img/channels/Kerrang!.jpg @@ -0,0 +1 @@ +freeview/KERRAND!-Radio_logo.jpg \ No newline at end of file diff --git a/var/mongoose/html/img/channels/Kiss.jpg b/var/mongoose/html/img/channels/Kiss.jpg new file mode 120000 index 0000000..03b9cd9 --- /dev/null +++ b/var/mongoose/html/img/channels/Kiss.jpg @@ -0,0 +1 @@ +freeview/KISS-Radio_logo.jpg \ No newline at end of file diff --git a/var/mongoose/html/img/channels/Magic.jpg b/var/mongoose/html/img/channels/Magic.jpg new file mode 120000 index 0000000..c8a4d0d --- /dev/null +++ b/var/mongoose/html/img/channels/Magic.jpg @@ -0,0 +1 @@ +freeview/magic-Radio_logo.jpg \ No newline at end of file diff --git a/var/mongoose/html/img/channels/More 4.jpg b/var/mongoose/html/img/channels/More 4.jpg new file mode 120000 index 0000000..0933bfc --- /dev/null +++ b/var/mongoose/html/img/channels/More 4.jpg @@ -0,0 +1 @@ +freeview/MORE-4_logo.jpg \ No newline at end of file diff --git a/var/mongoose/html/img/channels/Pick TV+1.jpg b/var/mongoose/html/img/channels/Pick TV+1.jpg new file mode 120000 index 0000000..097db72 --- /dev/null +++ b/var/mongoose/html/img/channels/Pick TV+1.jpg @@ -0,0 +1 @@ +freeview/Pick-TV_logo.jpg \ No newline at end of file diff --git a/var/mongoose/html/img/channels/Pick TV.jpg b/var/mongoose/html/img/channels/Pick TV.jpg new file mode 120000 index 0000000..097db72 --- /dev/null +++ b/var/mongoose/html/img/channels/Pick TV.jpg @@ -0,0 +1 @@ +freeview/Pick-TV_logo.jpg \ No newline at end of file diff --git a/var/mongoose/html/img/channels/Premier Radio.jpg b/var/mongoose/html/img/channels/Premier Radio.jpg new file mode 120000 index 0000000..d32b728 --- /dev/null +++ b/var/mongoose/html/img/channels/Premier Radio.jpg @@ -0,0 +1 @@ +freeview/Premier-CHRISTIAN-RADIO_logo.jpg \ No newline at end of file diff --git a/var/mongoose/html/img/channels/Q.jpg b/var/mongoose/html/img/channels/Q.jpg new file mode 120000 index 0000000..16c08d0 --- /dev/null +++ b/var/mongoose/html/img/channels/Q.jpg @@ -0,0 +1 @@ +freeview/Q-Radio_logo.jpg \ No newline at end of file diff --git a/var/mongoose/html/img/channels/QUEST.jpg b/var/mongoose/html/img/channels/QUEST.jpg new file mode 120000 index 0000000..c92f30e --- /dev/null +++ b/var/mongoose/html/img/channels/QUEST.jpg @@ -0,0 +1 @@ +freeview/Quest_logo.jpg \ No newline at end of file diff --git a/var/mongoose/html/img/channels/QVC Beauty.jpg b/var/mongoose/html/img/channels/QVC Beauty.jpg new file mode 120000 index 0000000..84409ad --- /dev/null +++ b/var/mongoose/html/img/channels/QVC Beauty.jpg @@ -0,0 +1 @@ +freeview/QVC-Beauty_logo.jpg \ No newline at end of file diff --git a/var/mongoose/html/img/channels/QVC.jpg b/var/mongoose/html/img/channels/QVC.jpg new file mode 120000 index 0000000..6bf3049 --- /dev/null +++ b/var/mongoose/html/img/channels/QVC.jpg @@ -0,0 +1 @@ +freeview/QVC_logo.jpg \ No newline at end of file diff --git a/var/mongoose/html/img/channels/Rocks & Co 1.jpg b/var/mongoose/html/img/channels/Rocks & Co 1.jpg new file mode 120000 index 0000000..abf1e92 --- /dev/null +++ b/var/mongoose/html/img/channels/Rocks & Co 1.jpg @@ -0,0 +1 @@ +cam/rocks_and_co.jpg \ No newline at end of file diff --git a/var/mongoose/html/img/channels/Russia Today.jpg b/var/mongoose/html/img/channels/Russia Today.jpg new file mode 120000 index 0000000..b5df533 --- /dev/null +++ b/var/mongoose/html/img/channels/Russia Today.jpg @@ -0,0 +1 @@ +freeview/Russia-Today_logo.jpg \ No newline at end of file diff --git a/var/mongoose/html/img/channels/S4C.jpg b/var/mongoose/html/img/channels/S4C.jpg new file mode 120000 index 0000000..b77eb14 --- /dev/null +++ b/var/mongoose/html/img/channels/S4C.jpg @@ -0,0 +1 @@ +freeview/S4-C_logo.jpg \ No newline at end of file diff --git a/var/mongoose/html/img/channels/SMOOTH RADIO.jpg b/var/mongoose/html/img/channels/SMOOTH RADIO.jpg new file mode 120000 index 0000000..a52cb12 --- /dev/null +++ b/var/mongoose/html/img/channels/SMOOTH RADIO.jpg @@ -0,0 +1 @@ +freeview/smooth-RADIO_logo.jpg \ No newline at end of file diff --git a/var/mongoose/html/img/channels/Sky News.jpg b/var/mongoose/html/img/channels/Sky News.jpg new file mode 120000 index 0000000..8407f30 --- /dev/null +++ b/var/mongoose/html/img/channels/Sky News.jpg @@ -0,0 +1 @@ +freeview/SKY-NEWS_logo.jpg \ No newline at end of file diff --git a/var/mongoose/html/img/channels/Sky Sports 1.jpg b/var/mongoose/html/img/channels/Sky Sports 1.jpg new file mode 120000 index 0000000..d4d082a --- /dev/null +++ b/var/mongoose/html/img/channels/Sky Sports 1.jpg @@ -0,0 +1 @@ +cam/harmonyOne_88X150_SkySportsOne.jpg \ No newline at end of file diff --git a/var/mongoose/html/img/channels/Sky Sports 2.jpg b/var/mongoose/html/img/channels/Sky Sports 2.jpg new file mode 120000 index 0000000..03f4834 --- /dev/null +++ b/var/mongoose/html/img/channels/Sky Sports 2.jpg @@ -0,0 +1 @@ +cam/harmonyOne_88X150_SkySportsTwo.jpg \ No newline at end of file diff --git a/var/mongoose/html/img/channels/Sky Text.jpg b/var/mongoose/html/img/channels/Sky Text.jpg new file mode 120000 index 0000000..4bab1a1 --- /dev/null +++ b/var/mongoose/html/img/channels/Sky Text.jpg @@ -0,0 +1 @@ +freeview/skytext_logo.jpg \ No newline at end of file diff --git a/var/mongoose/html/img/channels/Smash Hits!.jpg b/var/mongoose/html/img/channels/Smash Hits!.jpg new file mode 120000 index 0000000..021df36 --- /dev/null +++ b/var/mongoose/html/img/channels/Smash Hits!.jpg @@ -0,0 +1 @@ +freeview/smash!-Radio_logo.jpg \ No newline at end of file diff --git a/var/mongoose/html/img/channels/Teletext Hols.jpg b/var/mongoose/html/img/channels/Teletext Hols.jpg new file mode 120000 index 0000000..982222f --- /dev/null +++ b/var/mongoose/html/img/channels/Teletext Hols.jpg @@ -0,0 +1 @@ +freeview/Teletext-holidays_logo.jpg \ No newline at end of file diff --git a/var/mongoose/html/img/channels/Television X.jpg b/var/mongoose/html/img/channels/Television X.jpg new file mode 120000 index 0000000..3cd6245 --- /dev/null +++ b/var/mongoose/html/img/channels/Television X.jpg @@ -0,0 +1 @@ +freeview/logo_tn_tvx.jpg \ No newline at end of file diff --git a/var/mongoose/html/img/channels/The Hits Radio.jpg b/var/mongoose/html/img/channels/The Hits Radio.jpg new file mode 120000 index 0000000..ce530dc --- /dev/null +++ b/var/mongoose/html/img/channels/The Hits Radio.jpg @@ -0,0 +1 @@ +freeview/the-hits_logo.jpg \ No newline at end of file diff --git a/var/mongoose/html/img/channels/U105.jpg b/var/mongoose/html/img/channels/U105.jpg new file mode 120000 index 0000000..6a31416 --- /dev/null +++ b/var/mongoose/html/img/channels/U105.jpg @@ -0,0 +1 @@ +freeview/U105.8_logo.jpg \ No newline at end of file diff --git a/var/mongoose/html/img/channels/VIVA.jpg b/var/mongoose/html/img/channels/VIVA.jpg new file mode 120000 index 0000000..3839cb4 --- /dev/null +++ b/var/mongoose/html/img/channels/VIVA.jpg @@ -0,0 +1 @@ +freeview/VIVA_logo.jpg \ No newline at end of file diff --git a/var/mongoose/html/img/channels/Yesterday.jpg b/var/mongoose/html/img/channels/Yesterday.jpg new file mode 120000 index 0000000..54e505c --- /dev/null +++ b/var/mongoose/html/img/channels/Yesterday.jpg @@ -0,0 +1 @@ +freeview/Yesterday_logo.jpg \ No newline at end of file diff --git a/var/mongoose/html/img/channels/bid tv.jpg b/var/mongoose/html/img/channels/bid tv.jpg new file mode 120000 index 0000000..4db24d3 --- /dev/null +++ b/var/mongoose/html/img/channels/bid tv.jpg @@ -0,0 +1 @@ +freeview/bid-tv_logo.jpg \ No newline at end of file diff --git a/var/mongoose/html/img/channels/cam/espn.jpg b/var/mongoose/html/img/channels/cam/espn.jpg new file mode 100644 index 0000000000000000000000000000000000000000..424e9be71ce89db5105ab07173ef70a4d25dd0e5 GIT binary patch literal 7513 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 vor=qDSZu^|l=~Pz=~$zzTXH`Fv4 literal 0 HcmV?d00001 diff --git a/var/mongoose/html/img/channels/cam/harmonyOne_88X150_SkySportsOne.jpg b/var/mongoose/html/img/channels/cam/harmonyOne_88X150_SkySportsOne.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a90e3ddc37e079cfd3a2ef0c502d94e2dcd46727 GIT binary patch literal 34265 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 Yv3tXGV*efYSKfLumx!1bf>&PsAFNN*?*IS* literal 0 HcmV?d00001 diff --git a/var/mongoose/html/img/channels/cam/harmonyOne_88X150_SkySportsThree.jpg b/var/mongoose/html/img/channels/cam/harmonyOne_88X150_SkySportsThree.jpg new file mode 100644 index 0000000000000000000000000000000000000000..eb30e5f069ac14b0d9aa6a8644744be154e9e9c0 GIT binary patch literal 34672 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 VHf_v3!*Xot$s%A~tah#E{{SF~dk_Es literal 0 HcmV?d00001 diff --git a/var/mongoose/html/img/channels/cam/home_uktv.jpg b/var/mongoose/html/img/channels/cam/home_uktv.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4c080de518541b6162a222dd70156897eb895789 GIT binary patch literal 8999 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 literal 0 HcmV?d00001 diff --git a/var/mongoose/html/img/channels/freeview/4HD_logo.jpg b/var/mongoose/html/img/channels/freeview/4HD_logo.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0f340121fc0f7129dce2df245f4a974b2444361b GIT binary patch literal 1918 zcmbW#c{tST9suxn%#1PCY%LCEhRK!`1|iLr1~V#4mMjrr3=Kj^ma-lRDKp`QlQX%9 zWEm>A!|8A}!(y)(mT8APS8D3m_saj1oqQpin3@T0~S_PC{HvOnje=tdyLR0!CR$K~WKl z*HOo+XsaqJY8Yv1AJ!!h2pDx^vm<&(b@T~(Uz5PlXtcPP_+AN#y?QuBoZkN&&`TgK z0t|sG9Hs(|HMndPVaioeG%2;H7)WE-OG4=pRh!<=vM_i7KioOz)l$?^9_HFu&+jnvq%)5E{ z1ts6J9+dvAth}POuAbe{_~hxcA6~s~ZEOGWO-D~}U;n`1&@g9miaR|s`^((?0&ivY z)7tvR=GN!0E*OCS!4iyr!2Zo8EpQ1T5O4(Qs|zL+CFpQz1QMq!EMsnu^1dXiqIX?H z?s(4qnijOGzQeM-Pgu9;ZaiUfKkqB;ciDdjOZ>lN|A76|#R1}Qn4oxYX+Q+)&xy9R zafbcl@5b`)A19}i)dSWa5{H?X)fqYj;_vQg^b)7#sSxmxg@Czy@O8W+zw0psiVuWr ze`=mI@4cuC0cFGY8}kW2R1F^B7RzBI=57vbyRBT9d5zxAN6o5^pp@6_Gw#fsaJ)xr zedn&~V;ZLxnWNHJ7n$B*EiacF{Nz|Fqka*ywb}@QW*ffzY>~{iXL?0LRpq`1O?@At zT7@7`$;e3Y$b#X+my926x5{?XC+U=ErIP%Eg^a$5@^*U{li1pslO2rsXk&Izgj$f; zp{-9z{4d$dWu9%l>`KhWl8Y&|Tqo(F=g9czLewt8VY00CZQDeP;1*Z;JIbcMhm0s=pi+$##GJBgJLSWHZqQ>jw8J<#Ua{K#$dDw)Zj zTfV0P@5+kNsK&8-KE}ET*GyHp=2^&{_SyH63QzG`cUdE5+D@G^KkClSt{HuwLDzcQ zPXkZ zeF$WqZ63vRJdvR7T8v>ZLF2RL$E&v@=)+^hk6PbG@ye~Gzo{rgVJI_ehonZmJQsS< z&KTm-N4mx|E5|p{s`S#Pf9YSzO%QM^aL&ke@EW+uxdYBe%zKO{hjE&}B>VAg9LRA~ zp+&BO*PJd2c#cD_wRLeh#VlGajfqsxI~A^7eRM_RC2jBYM5Iz$52NyiZ2_gzhZa-N zUX>oC{2vu^GjKTxfm=?+UqWraAe^2FDs;N=yR$U6l(iX_ztM~Ht5~AWWO1J4@J|NW z+-5nCO_$U4PuY!${skf0>EYK7+XgNw%CO)`SrXCHdx!+{$MA3@5pQbk@9HGd!e3@|FiS$3bM0rMXeo@Y&t*+dNW?DRYKK& zSkE(KJZJp+=vvbRpTk;qc#NT-mC5ests1Tv%=#o v1SfBuyLGJY;+Txrj|rK_Irk2B`|hL(?t?}CWw54^l+aVwO(LAkhlYOxK{sh2 literal 0 HcmV?d00001 diff --git a/var/mongoose/html/img/channels/freeview/5-USA_logo.jpg b/var/mongoose/html/img/channels/freeview/5-USA_logo.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b4aeb47d67feb8ab5587ef8e876098cae8c3d395 GIT binary patch literal 2184 zcmbW$cT|&E769-sBq2b87zBX~B|wml5<(Lp0}P1}6@yCeh@luD3J3y5f*=MM1zZ%A z8G}lbUIdh8Bj~Im5mAt00O>A83B|xS(b=000p!0Nets>|Gpek2<^T#nO%&hD8O_u(8HQd$2k&r$ZxXSVt!^*6FYV85?Vc z*EPU0VggQvM#p2VvF4^y;0M4SkPsI~h{Gii2!y1hgcM3n8ihonlw^0v$f;n|R8=s_ z%2=F{HdezxQ(0NZT-RWaF@Zo()3&s>!0$6MA>h9kfk;Y9qL3&>X=z2gy0SX{e-5w{ zKuZ8-fCm(!0f?a?P&5R53aE*YaLA7U{uvN4C=4!+kdTx@iV_;P17Z*;R15}%!(lK{ zc9Q5FfT7{C>c+O>JE#E&4Tc;(Ih!M)X;=G5-lcaDXA*ddB`LL2K~V{#wM$z^SC3$7 zW^Q4**Zvm=5_!L)(~+acT;1F~JcEu0pP+?=hMkU%i9Hh+e>UYpYTCv0OYEH7tAES8 zc0IqK==Pnv#U-U><#qK9jrW_HTOK@q^7L63xBK}E-kZL+{qNon4D!duCq7M1P0!3O zEr0pCB3NBp-}vr=0MNf!qVq4qI}?~Ua6fp0$*$CJMD+;zk{*z?~_6zo?4RhmUlBxxHEgQnl?B57H@yUKiNv8cP#KgAeBKIJ88Q}DAE0` zJ+9}|9Pjf*1#Gu%bZ^xRQfooA;0EHF#i^6>|Oj=<`cv3r(tKf80Z3TtK}6*d?3 zD)L@$yTS#5ME2_|OUG~oc;>o#It^X2xvZ~uAGhGXLN&=B^bJcPEnYa&jGBpHnOYB> zN6dMvrF?!>KX$)h-E|7xS{Hw>+1LWAxm1vGZVXUPyj*?`iHplK8Kxdtk(wZ*B9rGNN)mCkCiP`aFfcDJmEj`jm#$ zXDIYyU^(U|Vp+Qlst?4fuC&Qqru%tPLcY%I)VWyc_#q>c+Li|ai-NmfMfgysyC+rF3 zGL@*}y6WStJRxHIVTh@W&wZhRp+%?y_{r=(K zN?P1;p})>Vao4Da5S8|2)u~_G!V(Ngt4~?s@v_LQm_`LL-9qzHtQkT@K<|+c8Z&qh zm`G~Eq;a%TJ9#-?$m<{D3#=|Q8zh_ush49?DC2H8U32h5xaVp7 zGeY`9_V!LR*9zyGuT*YIXc)yfjmnr7+EJPps-m9tPVR%dFk+Inrm+Ek(7E8LeP|QaJnz^e%jnZ{Ecn%8{;ZWsY#*p*v=(~XYKiS zAK|hQL#+XKBl5ZamUBKzYcaPKhNpa!H%E;bAaHB4iO_~P*!wy|KbWK`t^Vo5th1@v z$>+RE(?9fatF?b0iPJm6x3Z$>U;p@aK4Ry_2>+3;AbH^Y1P8_uSXTU06VVvgXn2I5 zIXd>D=H=Tv9It4tKu7c{@=T&?1*k2YD1M;*vs@Gah) ztxvWk{~B6AW($e;;%-psnD9+6>fst+dmKfo);kAkLFc4HGx>1(NXUpb@3Y|oJ!aVc zXiM7uf^c1!Ui~ieb;#fzMh-r~ElJy{ObcMxs2+6O=UC}%lgkJSO8E4OMavvJY}PRp z)CVUfS9TXI<)kbrnR=?VpuBokczb!qsu6t+= z2wZsZWGik61V;5i;29MJBx5cLms&ue-3 zz5szNIja9djYwIK-`8ox&1GU&5&i7j2W0aJVi#Md#^;JneZ;V=UpF($Zt$j|5P!~I Z7*do0AApW@aZ{Py$1pm@mvV{Vz@MC#*)#wE literal 0 HcmV?d00001 diff --git a/var/mongoose/html/img/channels/freeview/Absolute_logo.jpg b/var/mongoose/html/img/channels/freeview/Absolute_logo.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3b89c7980716fb07d9a92d13dce480c39ebd8c8e GIT binary patch literal 2361 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 L%03Xt0zdv8lnnr7 literal 0 HcmV?d00001 diff --git a/var/mongoose/html/img/channels/freeview/BBC-FOUR_logo.jpg b/var/mongoose/html/img/channels/freeview/BBC-FOUR_logo.jpg new file mode 100644 index 0000000000000000000000000000000000000000..78ed4130ded3d1e075b2591a9e433d55813f1108 GIT binary patch literal 2072 zcmbW1cTm&W8ir3ANhl({EF}~TMOp|Tf<_mC1wjc-1ul%RQl)K(C>@b1vH~l(z^WkK zxzZ77QblwGF#;j9g&-w>5=lfU`Q5O)vv=nHb?^PooHO&ydCz<1Ipu@s(C^@&t(A=x zfWZKO@f(16z|6wY@|5#A$749ZA9Vu5F8krG8tCfdG^mt-5I>xatu@Zp!O|Lc)tI1p z1Q$-dbR{6-I_@~m#7GdD1Qq}zAb=J?VbEwa7K;%SmJ|^d5)zgZmk^aylvh?#lvhx| zsq5l#sz=lm6f{gUkLVi^i9}_*>G7ikb6rCsVc!IX#bSkpgk?oUWC znjW(_ZE0owgN?0|vy1Eb3m4sde!T4K=N}MAiJ)GMymmb*>1J|DYFc_mPVO&v^YZWg zT2S(+w5+_MvZ}hip|Pp?Y0I_51~_*`%#5`jeTbHU(|{EiSqqErk7#7~jYm%=4f35giV z@3V{Ry0L18jvG?mKaB`Vs}tuAvG>vbAp7sYZv0bMT9Q79N3a`@!?4BS=j}eSnvv-ZyJq%C46QL_qcIKGxA!~iZhW@6wW6{|14>H z7QrQftJ?HWbFb?GrM+dbS!45b$qwAHu=|7yxC ziW+NvT;(2PR^L=hTYp&So~NSI|Ne2?>*0;chr&U#ih;{{{ggKzwV$Rhcv_J-@?bMv z+>s#m@>&=^pIZ>E62yVO%4Ki!~1)#wkuao1Z-xBO;7r6DDI}HJjntd}{WIZc4y1Z*yr^a9j{tU0EAMISAX1g;W z|FKxSJ35BeRevPK*n!}@5Fz!Ht=bdp!MIjq@7hw^nuyFyI^mR>rx`enSC=R2ZP$TvMRlIRCeAZoFLIqlT# zDYKzXFBP}YNw{88fQw9!DP|qJe|KQliAFnrgEkQLkG?JWkW#o^eH|r8gNIl?uAMO! zL#_&niYvSvtxA-?a>BmW86-2SKD~8{_#_k9>Y7~XUu*N-$`%AxiwpFbq!|y+aZ{xm z3HlR{Sq0yIC@R=)-v3&$7Tt`yGsP5hirdXRSE}&(9W4GqUX@7#*N0zOq~o_H_bbjd>fWW+e$t~1`Pz-TwvTQVUZ#SN&S`wPP zJ-0%w_)DO%FOZ1Q8b7z&u`;{GKasB)>75cmOFU1`?9Mkl1jH;QFX+A;?$JA_{4It? z`n2|7*HV91nGJ(L{u@IcZx8}~WJ_tGI?~*^Ye~F#;_%MS{xZ)=OUV&}A2jhV=i9>F literal 0 HcmV?d00001 diff --git a/var/mongoose/html/img/channels/freeview/BBC-HD_logo.jpg b/var/mongoose/html/img/channels/freeview/BBC-HD_logo.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7ebfc1192c858519c4272b7449b4c44efacc780a GIT binary patch literal 1804 zcmbW0X;jl!8pdxH64u55vL=&Y2nK;v2&)1CBOq9gkb;OM5o;t8+ak)&(6G1wQ)+=x z1T7Y<2oZ`{0*aELEU7Y7B!~nnVNqzPNC1%tnt%V)IWypf~_oefPcg;_7*aq=Oj3CkWWr=rf(+Gl8?oI!6yfY1d&6+ z0)ogX?k@I@KrKi^XE~^mO$NO^pl<3=A!eO>m|} zE7ISHRs;gsmcEg^!I45B&^+uNH#@t!x{@|}`FOf`(;2QVYfTV(dU}Qih89Lf7A`gf z8<)Qe?JBnqvA!RqSi8^8tPbpVM#p^#{l zjt&|PS7*WZ0FBo%wsH2yn1t`gZb&qB$tkYVrEF`uv!4A>ZOi!dXs({VnYo3f71eGd z&3==so4bdn*A~|HfWV*~!66?YO~*|Kxx71fu%zg%;rwoY{Y$7XR$>y4XjcRRbfdt^V|yFVZwd^GfUSTQm_G5PHI z)by{anfZmqS4*##HE&kdxDWvK9t%F-gZ&Q|9_B)#(I_-_jSGQHg*OV1*0FKM82g7~ z_a~ZcaLLg%-Bw)HbVrZEV5`@Edi0^bnXT(Mb$$))53)Z8mivE^{Riy7TqD2`g@8W~ zg$GQ~bS(KuYbmWV4E+`OAZ@D3ql}{EQXwGeqmFma%HAa3y0DUPihNp;|D#!u3B z5pkwE#ghwyl`>CB+xsqT&fy442ow~JL7=5i>o#lB_d0Z6%*e#Z(9;a*Q$cOy$em*Qza;*;QgcBPI{UAywm&Avd47Rg^&Lb^Q@Tetwp2_V5*svU=32$c zl;i`IJ`N6%^W4_D;dduj!_IyZd*^lu2n%9mJBTk%#z_f3Ts$Bjwx^tXz--tz;LREr z77P&0IRmlsrFeg{<&;kA^KxH_%vk5d zwmbG#KXPl7{LzA3oV7F3#H%tJi-tN+Odo-Ebw!A#=G}C@y1+m!2`#xIkMUVTzTS2Waf12*5Credt~?rD=3pOr+_ zskn{14s{ec2VU5XI}U%M_m!~i>5cIP@Y=( zIPuJr!TmYRn!{~n zC|D6m*mjZzQNe|uNnz@g%c-?74+uk5)bejx3?4Fg`nf1{%qd#>e4^Kw0}%t(FM^e0b~K&;Jg089fgHAqfKc)rH6xMG|~kHf&Cn z!zTR3g#9Ua_VSt2i*Q1v*M;+@;eMO~2R#Q;QgcQF6f@mmG literal 0 HcmV?d00001 diff --git a/var/mongoose/html/img/channels/freeview/BBC-NEWS_logo.jpg b/var/mongoose/html/img/channels/freeview/BBC-NEWS_logo.jpg new file mode 100644 index 0000000000000000000000000000000000000000..93d0dfb81dff732f4badb516b8d2bc0475a7fa1a GIT binary patch literal 2337 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 literal 0 HcmV?d00001 diff --git a/var/mongoose/html/img/channels/freeview/BBC-RADIO-3_logo.jpg b/var/mongoose/html/img/channels/freeview/BBC-RADIO-3_logo.jpg new file mode 100644 index 0000000000000000000000000000000000000000..452e40b1bf504adbfc6c49db81f2b8ef1fbf5dbc GIT binary patch literal 2462 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 literal 0 HcmV?d00001 diff --git a/var/mongoose/html/img/channels/freeview/BBC-RED-BUTTON_logo.jpg b/var/mongoose/html/img/channels/freeview/BBC-RED-BUTTON_logo.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8159da4b7f15cf95676c7c53ce7c02ccc94e8faf GIT binary patch literal 2523 zcmbW&c{JPE9suwgArZ@1gLpxxCDvAIDWzy@ZB-Xkm{JWz5Tj}trD+*js#T1=(-vbb zYKzofyJ?HDG}OM7+NKp+LdkE^nRnhh=l%8G``&Z!ANSsK&-Zh`=iCd8LNh?v#=_bH zz+eEtI1NB-aP-7^b2EFp^M*Jt4^8q9o?f^RZLLE%d~lEt#S3R`V~MjlYi@}P(Icp8 z-~xl){d}(fh%?6N>+(V4-~`}BAdm zqLvCyLE``xi`Q4xIHawkqa&wcV0?sNq;*(_@a+&73WXBj7myMZlp@GuiNN3@FsK8_agaQ)zXJR-U|eu+9t4sX#mCRtKobUBFgTox8_vVS&CS^z z$yo>7B0Qq<+GYr`bM8omKykwDq#WJ@$17XW=Lgmm4_~D@aUgnV(;9Ii%(AZIW;Xk zBQq;E@7Mf-!lL4ms_GhAE&WAZeOr4+XIFR6Z?6W2hTk$qM&FIi&dtAHSp2ZGyu#er z{QPBWo3*q1%>@JSzge8|Z`gmhL^v)kZf-a?@|z3B70T&w5pEuNZG@=VIi!1_m;&K8 zulVt#oXS?zfy3w5(O0ew@JT4@%qlUz(f*SCcd)4cOZG3=zg=TM01o364=w^sz*et` zT~#DuV5)C2Gv~NyzM{t&pCzK0(&d5`vj!1rPhFhif{tfzIw%nG_W z(45BR`WV)EqFnY>2?@6>MfayGytf{NDxS1Q$ z{*WLkaL8c0_)~-()A^mJeRNys#lX%Fx~Yw&Lu*|@6)#j0*)$kwSh}sB9f{-QNZM0F zR@TUEtRnZnqTfFeY}RB&cgY?~v>x{V{Fxr+@i0Rn*srMPeI?r=E-!+}ikY*ua4}Z5 z87%N_^}%+mB;nY~Bpf&^VO)FasQcj5!LKt8M9rr%@`>yn^n&yAM57z-h5a|gr$mR{ z>6b>h+Gbu22+V6Vw60j59`Ty76P^moYu&0Z+dZBx+8E!4R%=lgKBBlA{=0aHg^zxwp6dZqPTwlNogDKXr>}A6u4UP$iJzU9h=qvW!&qJ)b{3t-_ zh9hxeoer#O%E9Yy{9#eNS~_1<%bfehZR%{F`z2wygd8tCdcQfuXgYk7rC!RqhH@WZ zH)#AZ$P(H|8z-x%gdvaH(+DeDOobhv!$~r=T3Wl5~Ex*m!9Yp^E$to74=CZiOwgaxP_oKdajdAB-(Sk#^%SV zSDo@R6oySQ>8$4U?xC#sfLK?JY;9W9Eepam1IUzzV%^INqaP8%>GsrK`9oOwzJJ#Le zE)b)nvdUApB36maS_^G)@LV>i%a%2nG$8*3_1japOw~SDDEERrA zcfa;&GoEo}Sf1u1!lwLn)R-$A2 zOc|qj+hZlpGf1JoGR(t^FEAnS_Bf5K(*D|>a}&D1oOi+KB8DG4cGX5@{I(eM(}bxX zma?XXV#|zKV;SnDZSkvQ@QDbHL9f7K}|vpULjR(`S*G z0+qXaw&=;huqNkXH|wzH9AWoKY$fbo8F zj^DkQ2E7HCb}|9Qo%E@j7ILv!z>YpSv7FUcn6J5-sg+Z6{oR4b<#5%}4|Otu)&a9J z`gSh{m1;Ig($1$VmDfHI=5H7nr6fK2ngu$B8g2J!^H!wF`c0kU8fs1H4O0cTqdxsV zn9d|Hn#==cFX`JcZ5La-%h0_OuHO%o>uGDCB1o}EFke=OQ_g>T%!pod_tbBwhqNaJ%`Lrk|TD`(v{&=&EkxgPz{yFUTc C0heR| literal 0 HcmV?d00001 diff --git a/var/mongoose/html/img/channels/freeview/BBC-Radio-1Xtra_logo.jpg b/var/mongoose/html/img/channels/freeview/BBC-Radio-1Xtra_logo.jpg new file mode 100644 index 0000000000000000000000000000000000000000..eee84819d48f719a7d01f2e9b9e4395c2dfafae2 GIT binary patch literal 2132 zcmbW%c{tSH9tZF*wO6( z3kdS|lv=ND#M2P|r2Ufpcd+FDOZHFLzg&Yr1`ZQn9vlm(VBs0nxhme^ zKlgCAGS5WB|Cu}B0?v*ev0WSAPKU1 zNT%4;Noq^O)GX@Jv8ja=p^jsl>~HjJ%1RljV`gii+4BiU%E@^zZwNduR9l>3rP(Z) zq=@_iA<%f>ktc2ShQMjCeOz{vTy5Rh`zE2=(d9ESn zDco0I?d!PQ49ChUt)dajQH~>NsNs+qu{p3i?Xu=W{uraO_nVH2bd%hvJYjQi@ne0A zbe=u7Ix=;R7DT3weDPBn9O}Ym?Igv%1uhrX+Dz+z-q+q*#?)M5mea!6TdEI9-CFWQ zh!S6*I|qC2#ohn-#;2%&c=6*z*F)<+!2&$dx@@Rn-6@ONzQt4saE!euF}__HU3xr1 z%|@P?mB||C*K7L54mF%!WkY~Ze@&esj4tbHS7>B3tD=O(>0Ded=Zvq?gNeMp!p!i6 zc`}w=41T2euw);pQIl6TQ@(5(jk8K;_62C2jg@Ll#9Kd$Vq=V)cK@cZRO}n)uWN8} zpdefImBrHm){-3AdM;k4R;ZU7Upf+!JK*;{d|;Hah-FB)4cZ4Bo>DPiz$F&nT&hty z8Sp0h%4hY=uU9=ZbFN^C8tL}M!^Y(rr&duZsC?5_`Vm1n?ZfXAwryei^aFPZ=T*&$ z&Y7^tEp%^#uHxmH_z`LuOFPh!Z2c zR(F9pF+5RmnlDUBX%8#&8+LP?JhAmE1PEo+Rg&I#Pw+4tl5 z8A%+ae2Y&`b#-xJj=b?0AW^FS{0H}IO~HOZv#oD@0S9lY_1+T3BsC{6`+SEgpIu1|mZ?G8bIKACqOFqjJ&tds~(h&KOmv6cc=ZFC^?t zm0=W_H+3xBAE&vi-;mqdo1pB=wD?@aHL1KaIy&@4HMlEX2Jev6vlA$c)PC~W{VmsB z!8|{hokh7fbB`B$U)o-=far;bt8z_OH2T%%+onX{14Ns%w7r<(|0=cau_*SP_!a9w z;E4+aFfkb`!iNxO@Pt6t%`D1>Am=j_xs|G4TPvX^!W}sf$n#WNd(5I(t(-wJl4l!tcV?>abz?fDYC<+rjI)D+UR)m5`ffkOT0Mw)Qku Ohr6OyQD!a`8u&YCP{{27 literal 0 HcmV?d00001 diff --git a/var/mongoose/html/img/channels/freeview/BBC-Radio-1_logo.jpg b/var/mongoose/html/img/channels/freeview/BBC-Radio-1_logo.jpg new file mode 100644 index 0000000000000000000000000000000000000000..549812e068a3c52db658f10c29676cfcb4e6ee5d GIT binary patch literal 2128 zcmbW$dpy(o9|!QyF3fBW$}M3tgqX5M$`Bf+9GBCYR({GQ4JDVkuOgy#VL2#uD3??x zl|)fV8qviqO-dX_rIL-X`K^7=>ijN`$M3J-@AvvVKA%56pZDYacsw8P#|L@^{Q)$* zJ!l>P1_J=5SOAg(NB01#>lWXD_4tS|V&wkt2z;Wg&1$>_JD#;K0#Eby#C!WuJ@JY5 zBui_2EPGcpD>Mxwk4CvIP-N*4kU`r8Zzm76Brte#$vE~YHE5UV*_K-{~V|V zXsQ5vunhqt0JtU$p$UWd0H;7I!F~k%BQQ7usicfjL91dE1@#&L4nrW|NQ9CS5~--> zDBb~5Q)!8@t*i1<|6M3TtQIMQcR|I(t@fdIK(EMjO-NiOT2)6^Z<)T?3Udp~m1H~n zwGQjnyKkg=czV&if7wFc$_U)X3=Iq49kGWM8K1yTOiE5kJ)D(&Bq#SM_f)~Jg+;}u z&ybnaDPf~1zCQ`}RR(Xl5KWbO(QUWPM zMazwMq4pu#WKDobJ0z}GRmYS(Y9{_p`yu=9V444y>|d~dyIun<0;U)qLKC=v`KaWC zvm8QSTF2*dwI#c0g}T-ZC*K3NK1_%{^K;8K#lb?f+V`VOzggu-&KWyvijM6d)Hg-x z?6n^sx&U_`^Srozpw!2(@G-YEO>c~3i1DNGEowSw_C*PFH*a3cG63ROM@@#Q-A8CG zXKCg=l!VD}(Kv}5*IDIBI7hncq2ipy=qkB6nPi0SGd|*Yu)*Ds=g0fqYe$&(9Xj^D ztJzWHC7^nL%q%}ShZ(dY$i7eVabbmYdUW&CWhPHwcU5X366q=34irB}oEw!@HN-c| z9PSEyQ_;?CkrQ~gKH;RZw;}LglU)0WjNp!YWN5i9F@Lvk--tBw+m-2)_gJBSoIqdy zl5>`l6JCGAffc+6>n|NC#Mf4_e=3eZbjNF-)2Jqza<5c;^od<4(~#qsw3|MmKNBIa zxtyf_d<$3lxXpQ$;9gMr0JC1`)%a|`CEs728vLpM_+f!QrYr7Z+T2+ba16<+E0wu2sUpp1& zuF+-U`}gs!^k`Z~$7JA~|C%%R$F{%q?tWCF(f53?lm*wD!iLa5L!pS$!nk5N=kPeS ztDnN+EcsB!bPQ^XiPC=eJF%+v)Y`4ByfSG-#yeVZ?Rpu=z#=b@xfrFw?Nh zgU9pSGd;&5_e9qa1@t2VJwX6-1222nHy~C}*=t}nT%UqX6;$iolXGeyP#Co{z2PML zb#^FX-^}({aCpRy*igf{@^R|o+o*ua9@O2iqE*Ddg%sOlAV|C{`i?`Sq@Q93t{?O0 z8@;RR&uWMr%E%yXxX{wRUg+ddJ;Y+Nhm5Gtv#<6{lTzYZuiib{8LfGIyp;0+v8wg; ziT0{Wni>C7{KSr@NQU=$Ox9Msi$VMglT23=uC!uoI=51c%9}1ov2RLS?xjmndypu$mGh)Rh&g zZJ$(^bG=8cnj~!yFmvC!=njGMQ+JpfILk$KK?O|FX4?LV>e~3|XTH|w;ng$v1KK?U z=VaJfm%6#D@1M?wyqS9xvB;>PZ|sVwm@J!7t%JZdGz89b>*)#IQl)JW7(haxhswN6 zcBN|hA@rMlBo9YB(_Mt0I^8r`mkN?Fp_#rTIKM%e%Jr)yjWNq5j=th+S&QuHFB88s z50826p#zG)S<3QFs)MjDw5Ci-J?OXh`p zVu;}FA+4S2JFWVfap~rbCGQM_`TOj&b8JJ^*v^-F1z{TN)~A^ zrt%+eIjOA<0ZxQV%^v$|%t35fJ_PhF${!|fSg5TX4W7~V M;98c4bwh)H0(!l;LI3~& literal 0 HcmV?d00001 diff --git a/var/mongoose/html/img/channels/freeview/BBC-Radio-2_logo.jpg b/var/mongoose/html/img/channels/freeview/BBC-Radio-2_logo.jpg new file mode 100644 index 0000000000000000000000000000000000000000..73e18efade3031d4ed1f9b1300c75508613f82ee GIT binary patch literal 2268 zcmbW!c{tSj9tZH>7>pTPBjX^;7=%cSZ7`bXj4c(i%_L%S7}?jMMN!65h-e|CgbWT{ zVzO_^Ne+V?Bxda5+CyXJs&k)v?{ogT_rAZ+_xsQH{rx`A>-lhpxf8$vYjZ1e00aU6 z(Eb9r9KiUbJ>Jyeti2J^`_fV0ATMuZgtn#@QZ+o39N>+#vbI24+u|*d5&CE~4Pc;Fx~9K>x0K5v z8lC(ZZ*E~}Wqr=U(aG6`KqOuA`o-Ia>>C;u9uY~2ijKQ=JD!@5n3SGzKQrsW!$*$` zo;@#oQB+*=vg*~}s%u`?*3nzr+B-VmcD?KFXABGueH{K{WRl66nx2`Rn_pO6Ti@8+ z`ntWd``rZsz<;v#&p%;*al!XpJiNSMUdVSBh$nJ?gW8Z8k|FZDmM8!oYTm2AI zHgjqA78X6^d%` zBs6e<+%;ZT|~ozXFdeFtl) zdvGHPbWNZ_wxMq`J2gIQ*YNl1Ecz)7=|I{29fG}cK;-o=hd*MA$IgH-W%BSj;^uf| z=_sL%Mo#&<7`pY_6~iZ*8Sn5gqV^lr?sgGs@EjgoWs+=FyRy|l+WMsCS6=q|{<>lU zDQLmSv4%m5nf>sYvv+LUSz#sPOcMhur6GOCz-~;Bz4pt3qD(rExlGBFcUjoTR;5UC zQFVJ<7Rh{xW3D3Lf5o}{^>Sg=wWweihb&iZs`K5OALrSg3+=8;}} zN^&WOc1849n+G%ZFtM?t_Nv|FXgtjEq6#Ov6<~MbeWN1MJCza@!aUNtLHu?87R_Qx zHe1fQq|_bnBP?7(x%-)+z3AgQa6WqpC`+$CnR%vs^A44YL=D+f&zXpy&?vF$a>9Um38?k9|I|!j=xH&*;%| zR}07;wn`?u@XU8jn{IR=62mJlKgcq|^xfXupkJtRT@cAuBrD6SB{_PEDtL9@NsEx) zFwxl_Z;5Oh+C%_n4vP7zG!;nURyBnQKd~@Mkk41le?EKf`{!E|Nwj6YpilN&q zri4F#&DUR|sd#LJ?CwW*4zHy!KFGOsjhrxbXi2-729>`Zjjp0nR(*-kf;a&8W6mK$__T#BryS7?g#dn$fqQ)Tx$ zVu4ynd7H4-h#EKa#`Y>Hs%0g6da5INc zp4u*Vw5FQzmHa^KY|saBp;@2hU{3VMCzWLt!j!1$>^!3&{C$fV+-KY;`JwtTiNjUY z!MQT`bN!tjKI?m)ulmA_uc3DREzE1)jy7{x7-^E%f*mxC~ZEw!A zZ&a8MZC>^lJiYEJ!arQ#W+2xb4O{(Wws!g3yMQA9{;ofckGG99U|S3BV)_Es7`r<; zgbQlcv{GfC#l5R3+0C!tpB{`8a}d>o6p{ASuh$&|$8?3TI1Slcz>K(f`L$+77@`-a zpOm6JS~9om&5osUfyLOEIaHbBh5r~@DUD@{7qYMf!q;+}04Yy0CVYM&e4-NPOelYm<-Z%(0A1CftoAOt3726 zS(QQ&zgxg0!3cb_N@ysdhqiEQ!q?zd?hTtUPW7uoio5OL?5PH?nFFel1eZrL(V<<4 zK6`pcxpmOTx=an@<|eY!izms)1sFs@!-^?aT`r&z#hLs2cHZ=P#7jF8{%70bXR!Q> zAcEtU$@wD=1MmsvqS2tN#lWHl+s-S{D^Rc_h=>`4!fLxDH%po(HGky-xdyne-CSVR z!H($Cp)bGkz$K>lP~NxcnC+LizZCGXU&yOoH@QHT^N%-o&Bs-%aBJNx&W`(PL6XK# zmrgT{b@D#-a)GO$F2cyOZDhtJ_Q-Kyy!=C?nhh-9-G%+qK~&I1iDP( pafK$;nDg70*wpPlJWS0eEoWLKqDyW|AFIwWEAGSFqinc;`~zaW6h{C6 literal 0 HcmV?d00001 diff --git a/var/mongoose/html/img/channels/freeview/BBC-Radio-4-Extra_logo.jpg b/var/mongoose/html/img/channels/freeview/BBC-Radio-4-Extra_logo.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ceb20829feb53b0db786a0ad422ef53907612824 GIT binary patch literal 1825 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 literal 0 HcmV?d00001 diff --git a/var/mongoose/html/img/channels/freeview/BBC-one_logo.jpg b/var/mongoose/html/img/channels/freeview/BBC-one_logo.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f92f8712bb366f81380d612b28af95da99263f12 GIT binary patch literal 2098 zcmbW%c{J4h9tZH>n8A!Cge+mkk|kRhgm9TG!&4$7TV%;FWH5}BU6w>12`QS0B+u~J zB9f)-QJ9QN zCk+fyr!6e4tkE{-9WhQ9oLyXfd@uW9{R41>@Cah$)u?MpHmc?^1M6d~9Oc%s1(?HUTD> zir)J2I?_;azBzQ9YCUW!@!oE42RzqFgo&k@Zoz=`Mk-A@nJd{G$qI@p3r-;)AQ_nIzO#?4{CGXs;6Ea27PHR;~OcMfBG z#JsK~H!FC7xN`Dt-!@G*c+=AD%5f(8A*{XO*Mx0Hb8`I#6iyqQ zVls=p+ZPpLXs7vO8&{uCMU}ms+o6wMY0JxTO2L!W%UgFwdSMNICV~+9K=4@W2IEt!uiMqS7nl z+ZlyK1jE5?+@C4%{u1Teb+3rH5RmmfaD8^sBN;C4^A41+ep~B-5(`DT${jN;Ze;47 zOxVVu_#{jzZfgoIyi0gP4JgA&DiA*sYE`&KH;EE}VBihL+4NZ%s^afz9w)$WXqB?7 zq}a#w->|$IzUx`G0yhby+6plV{95ZT7jRq6n_Rf9{nhp#)!B;-_(3xZXlz4i2WY8g zZD;!LIxWaEbPK`&?|z*%#{}nm&09CQzgz8nAgIc7ImssUA~yJamjm3_Gc~SBwNh8Y zJ#^CD;tso?iobDBwY#UO9bPP|AMcfi7euZI8k z2PijLwv*V$#Mt&c{;ZBI87F51K{ZZ@W2=C9__dY}+lMrLMLEaV>OM00`f4x@{bah7 zzFXz*rbmXyIh!Sz>^Ve>O!@ z|Ds~#K|MQT+qYOPfI5zb-?-!=l%%Ti4>M`#USJU;KdtAcuK&8lgGupX!TR6{0|?3N zcEgB%)`5|4^cS7ZVfA;|h|`m?kA&S7>niQYxVkkl*kN0(0X5rXDW8M;{iQ#q2%byC zdHO1b7Cs%+7}mBxwD+q%U#+5~yY^u?;k&0MW%Fb{^J3i8Tyc&`!Koah%AOQ&OEe4M zNv^-1a}XMfJy0$wtms}E?ZVijO?xv|BCVLNs67(>=}-bOZn@NSXPDirT(KSc8CMh0 z!bAzA;sp*Gl9>CZ3-%;_57J&Bp8a>h=_TnNL&mq9`{xFCWm7wMdYGoQ{?r6 z?IsIQztZ;g$e62+sBJ%#UGxx&7#&jN(cuz(w=b1dNDSliBM90O@@ wJAtYRJnFgE27%L4aq!JaDsvytRBXX1SN(=`#QSs&exg+N4Sfw{rm`mf1!r){wEzGB literal 0 HcmV?d00001 diff --git a/var/mongoose/html/img/channels/freeview/BBC-three_logo.jpg b/var/mongoose/html/img/channels/freeview/BBC-three_logo.jpg new file mode 100644 index 0000000000000000000000000000000000000000..022615ef9e6d334972b1b29f862c7e07ab3dc40a GIT binary patch literal 1962 zcmbW%c{J2}9|!Q?m>FX%)r3N1%n+`njIoR*WgqF0y-9RwqM6Falh4mNgrXfLvwxBnF{bdZMn3A7R|kmBowCR$mbtQEF>%;A|ip4la|B%nlAVDD*fDZ+Mq99-kAj?C-A%7I`?}G3_VQ_wg08&thH&A^5;DbP+d@v{+4ukQg zZ}Iv732;Oj9e9Hl6dV#7cIWQBpQ2-8BJ&8ynF`d{C*w6-zYJAUh9_74nx92y?^GBG(d{dH!RJ-7Vr z`^xIt`o`wgo(lp%|77vrKVkplLh)RDFc=hu*mFVnf_WE;g2Cl9_z#}8MYvN%F}O$p zG2^5smCZ=3rrnabM?kOOA$j~4h2=fkAF}@s7WKDe|AGD2H3A4jA-vCnq5vacAS=|Y z<+jy0!hru|wPbAuz0(;4-oz_3x4v&$%$+%>=~T3A^=@R&9R$=0_Bw>a4i9yjWu{`n za4M+HxFU{gSEfE=+)$I8ZNj?d$C8MIXGgtz{A5-{p=VOj)lGa%KDhV!sZN#1l)n5B z+QQ&g`p(iS>ysOiI?f<@Qpk5~6L8%1imhq13J4qkA|Ew6L}2>W)oz+auy6F1zZh*d z>iZ4%ocLqXO2DZ$5tUdYY?li+uBVc;_&R3~=KRP%*`;oY z+z|S5g?9yzRK}Vk2Ta&GRd$V?R4)R7TTKsf=Oxulr`wnb`u#dDJigJlW?5a&6V=aZ zE2OR!AqcG(vEh#r4n~z0@z=Aef90%}a2oAPDQlQEWF8l%fg#9QNGcjO7rfM9 zQ2mp%r;hjsW|iRBgADR}p+|M{xqW5BV=_jzUkfE&)fPsX0pTo3ALpQ`K9`K`do=%8 zK_$2)_VFrTwoYR8dWQAKLm!l8ITT6v4Nj>jySKCE49Oymk&`nX?tmK}elXZu%4_svA$){Rn~dXEl?wAS@9*@m3NV*F0Z4(G`{!c0F!?jiqFFiP2+myG84ox>uU)#bl#s0%CNCxpu90nwA_y z>A00Wzb>(FU`6fbEa#HhAkIM5#w501p>?Mn1d7VHKiKGJ;`a}8DT~ZTS-ueJy!kE zi8-m-E_jGL^pENfMD_DK-i733Yu4coDLlK)%IQtpLLz}{FlnINzFk^$UpM@I6hr+K z!N|?K=3#NOkJ!A*iQ`PDVc9X2IyFzyWnK486x*TD*FI08*e)Ka6X7x@)mhk0HAr?n z*{VvMN!b(=LmNJX9Z(D`sI zLW|O-*RptbX@k~nYNJ7QICLh)+yt)vp?EzZBxO`*m%Coc2jRS@SmOWmF*B@kn!h5(uQN zHLZ`*m+`iiR=zD~$K%g|KxeoOm(#S772Aj`&D{)n$y*?!AP}1uhv>#=FY!O8Pfv92 za_PIr^8BL1nn55vTb9cKfsHJsyvdoQBR6#hZMGYS=qv^ZOn76Lm=}z`t@1VzT^0ml z^5TN`g$f%9(|D=JFVJ_k>ARSWh{Hb7yKYq=z}*0WZ8I@j>i2e=4aa)c_6`LE)|YwN RajPRr1@C=`4Hv=Te*tgugsuPp literal 0 HcmV?d00001 diff --git a/var/mongoose/html/img/channels/freeview/BBC-two_logo.jpg b/var/mongoose/html/img/channels/freeview/BBC-two_logo.jpg new file mode 100644 index 0000000000000000000000000000000000000000..055f196fec549cd93c7f2f99d4e398f936a4990d GIT binary patch literal 2059 zcmbW%dop31Z%y@-pFoqGu@yes?nLWrn(h} zBWMwI2pR^OIGip;&%nr-OeW)XcI`1I?IxO#Nk59f&}cM93ZuMbi!w}Eh!~RsFML=FgRQc0T&lXAVk@T zqH}oDqFR;>*(t3Ae)*| z%y(JX**olYbaHmt?|tB)kFVdM<0pbohMb~?($2)j(HZe)FQlYiOuKaXN@muL?3`bI zy_s87eEUwx-O{r12Q{^I^$ia>jZdDoJ!|jabw2OyI>V)Vj#er*1_%-%fvn3%w=XJZb>=Lcqn z*L)q$Sr}Baq~(^bth}C~xt-)FRtq%HI36ZYvQ(<3>hx1qADQ#$%9%&6DAc*DSZNxI zFZLFT$P(BUj|d|I*olc&>k#-tlEEdn(Oa~H*rt%XcPe}SZW{I?S&-xx zf_V_b$HdGmjHf4@kt-N(Fdoem(2MU(wm_i%p3v0gh`)!bVHI<3k$GMFh44EB-dlIq zOok5eCO##0-tLc8@AGJa0JlqMI)feWHBE30_6(05%cFC$O@cxoz~Ez+4qFkmMLP&s zyzeXccDvsrv2kIHI2ibbehdeJCbwn#;hS}|T>5DL|n)4*J8A z1f@;MB0TWd+f5p;yrf6|KviY5t4Y?q-n3Nxqxj`QyP#oPo+j&By7?6TmNng$d3JWL zIw#-i4S^pOWv>{aJyhgWnNp=7V`MTLTE|VVB5z!X2`QeI=}M;D#-Na;cnUt%brb^9 zzF}q-RfXldUxWp#jZK>Mx}kSZyq4}RV>q@htd=;>2Iqar4dz&#=upv788YdBm+jHp zXv}H!mfX0+FW@u&pq#Bb3e_mH?nIv zW0!Ikp*DUx)10urKJV%pZeQA|U&1bYV(HT`klN(a=*|Beks_c`P6r7Bg~LpXWEEy_ zAq1+fZVD{dj1!`*r;C{u6}Z;Opp)h>e%9CAupqT5+PuT^jG3MA)+=F3*rjSd+ns;! zcbU!CE)No;xHL!X=*N{t6XHrji>4CSXZX0#=0 zde}7f?_<`Q#BH}?uge`w%BYZ5dbir-WXOqxW%BVqnZY5DURX+ofa;+CrkQakUHMI6 zeF9_L`Wyr#S*yo{*cOK2VOQyA^%R48@@F^Zk^+3bOm%2@R5!uaCVSq}@UY6IU7J6zA2fXCF7G>Y=z41N z&C^*!{`S7LOnQQvRo?~8SUP7_eH=CSw}|n@6w9W-0~f7FnfLZ*wFnWJN9#H!PGz>;dhdLObi7Y% zN~Eit+s63dY^9p^Bnj(ygt$At@4jYNYqv!F#|39WXx^s>_O@!z7qULbKQ&G0VyKwT z-6&tuNAstMOWQcJCD~dj`kZ4@xKZ{U?!ay0DEVawQSQB(*dHb6k$lMN3|6Z*du6^VdATaSZf zwYmNEN62#a8ly&3MpXTB2_A%Y2m=hbbD|sLr;5@~x@+ylr!{gQ@XJ;F##ace=2BN< wEAeab)jt}g=t|L*b1wtBHJM{aLLsm?e_Zq$SM*u{+W{+2x6pOaAB5ii1BDE)CIA2c literal 0 HcmV?d00001 diff --git a/var/mongoose/html/img/channels/freeview/Big-Deal_logo.jpg b/var/mongoose/html/img/channels/freeview/Big-Deal_logo.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7d598a3454e7c6d76104f50cb5d2e852181ce615 GIT binary patch literal 2705 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 YC2@~{CptP~$**yeN~H-ISkB1b0Z}S9l>h($ literal 0 HcmV?d00001 diff --git a/var/mongoose/html/img/channels/freeview/Capital-Radio_logo.jpg b/var/mongoose/html/img/channels/freeview/Capital-Radio_logo.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0a2413a826771a4e62be9a055f0349b74f8748f6 GIT binary patch literal 2604 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 literal 0 HcmV?d00001 diff --git a/var/mongoose/html/img/channels/freeview/Challenge-TV_logo.jpg b/var/mongoose/html/img/channels/freeview/Challenge-TV_logo.jpg new file mode 100644 index 0000000000000000000000000000000000000000..46fdc57523bd8a18f955b3cab2807603776c3467 GIT binary patch literal 1905 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 literal 0 HcmV?d00001 diff --git a/var/mongoose/html/img/channels/freeview/Dave-Ja-Vu_logo.jpg b/var/mongoose/html/img/channels/freeview/Dave-Ja-Vu_logo.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6b3132f379ff9d6174c15979551a6577f8594351 GIT binary patch literal 1794 zcmbW0c~Fzr8ph9;1d^~x00l9S1j42PC4>-U69q!Rg+)~CfLB2xs32efY17mNr9r3! z0m)Sqif93Ai3GfGQQ1Q)iwdY=vFwG4h_VXF*N?Vy?@a&dz0a9*{&?SKo_Bup&VgUS zKLc$aFOC<0AOIlb09Xl}b_963@7)uymCOydjyiReOHQ!0*+RDD#YaYS$s8Xx*~ib5 zO-^9at!U&}-r*CGr_YdG$PV^ua4*;aaH^_URTUf-i^bz{Y8rZ)8tUpA>veS3=ouN3 zjExM5L^9RJf^0%FB@!(itY}+o84L!=!qJ6Aceb%(&{snsJRYy1u3@05X+WnCDfItY z@Do750VW7WLnZ)4fY1a8ZUiI*QU&^5;7>s)G)6@gi^Hp_BL=B9KtX6U3WHWr!C(+K zAL#=OK}CmR>#nNne;8{Lt4BYZS%5R$US790;Mses-I2I+c(rx<2I~#Y%q=XfHZts) z4lKv5J3KtS*xnqUz`a5H_8$m77#4msf_p47D*iMtAu;Jp^7#uX7cZrLEfi&4&Cbca zmM1R!w&-^8ox9(aNFG#3E2|#IMz6EG?iTU8x*f9&B{T@(6Q zoZj}#g7P}Nsa?SPwMXKfsjZ_j2F+$x(S9fUdtm4OFS7rD{g+D)G|&*TJTw8gf%16X zsj4i?d_T-(pp`UM;E-#o3^jwnqc*d_rl}Ui>6r1Lkh?k_ZT!=2qhm44Z@bpq4avw2 zgu$BzKd0`*WR&d2oYS-CABL4m@jdg>FSmyFA-x_L7~VJS=1_0Z(gKbfrcMZWFcAE6 zC8|g~P;8g(HLZj})na!rwIr^!=PQY|@BOH6SzXhD_ms!YC7dCne{c<@3rdXJVz*;> zNkA!Eh)H4l%rybF;O3z4K%pqphXBL`iB`q%0Cgwd{Y17WX`Q zUwiv<&P?C0^X0WqkJFqAvo!8?W?f#>{DY0iH~q*likB$ZBHSaiDCY^P8V34Fi3hr( z8Q~S>qCJ~;3#~SgH?rE@9iKFDj*Uq9`hL%OUN63_uw0C^x^4Cj5MJKDZZZb)xw-imSm@&TIJY_w_ zOT$P`<~sGYNz2KH7lb!TYZL|BI@V{KZxHY-I_g*MjC~5)be2Xp7-e&yQ3GxEU}(*q zsL=hXqy|YpCpNKoLR0gHW$%!M@S`hLG1ae53O`q|Z%LY;A78ff(65XOp448d+0`_D zBO$C$El;a+TYJKIz9xvTZqA_X&d;ezE-)gGHao6)Uq4@{ZICrg&R z#h)rm%;Q=79d+{Tfr5DF_=6X6B6u2YSMU}$bG~!1MW8ehTB=K!i=IPhq$K7l6v%+o uV$yjf83s4o?3Bt@7&Q8OLJ1ZtRxr>Obd2R8(cv%{+SGfjP;9;ve*GK#Mk^5j literal 0 HcmV?d00001 diff --git a/var/mongoose/html/img/channels/freeview/Dave_logo.jpg b/var/mongoose/html/img/channels/freeview/Dave_logo.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7e0ee078adf389f47a03f43787850899685cf470 GIT binary patch literal 1992 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 H4!!ypw8xcf literal 0 HcmV?d00001 diff --git a/var/mongoose/html/img/channels/freeview/E4-1_logo.jpg b/var/mongoose/html/img/channels/freeview/E4-1_logo.jpg new file mode 100644 index 0000000000000000000000000000000000000000..70c1e8aea955e7b7ce3b6f181f5dd3ba189adacd GIT binary patch literal 2104 zcmbW%c{tQt9{}((yD_60OqOT{BgUGsOtQ?y#T|Nc$;5b5q#?4DZO}!wTvM_Yac`8+ zjS!^}+J{LSlO!2LL@!ZsEn|Ln>b}pr{q?@@_dMtPan5%Xf z0ASJrAPKN?@Nl&Abo1Cw4mw~Ma+niDjx{mbO4f~u3Jwnaa}gT>0o;uYoaI2>L@USYkWx+-b2x~iHQnPQ|v z)-=#kQ`4nW4Yrz?nVFGvEN!;Ytc^^~XkQnBVX;^|4zDaHr%cmO)1dv&0o?%v8DIg} z2$&{-6JQ7e40-@aQX~rYEx_Lc21g)KXp9V27AKw1v;n|j2m~C7K%tOG>Fh-5I6x9m z@){;~Xa#qFjOGzVT1wsp87=#UyF`zkIg082$W*NCMkQqxRqZW0x>P+ga|`-5%k2)| zJ32Z4z;xN=$=dDZ&Grd6zzGaG7#tE69TUrqi%&>P&p4j>a~3bZ;PjcoqO-*%Vmx?IyZ0jYp@~jFZI_Ikj!n=a^#0x_ilaB@^ zYsO2SVVAri@a){}wUvEy_4N6@?NtZ&Tg<2T`<%LbxMTm+?x@qL14j|5^yIbyO4>10 zq;sbPLkYU4^c`1od^~xqPpD>AQCGkA(-YRlzMh#Gf9W1=bCZV~Bt*ok*Xx&K(j;rV zcV_L8!!A7j3a#N-a}!2 zf`0DEik7{rm4C0ucy)xuHaxGckt10qnwMVU)cD|PaA#-9lbR=V=Zo!F+| z@=BWBH>Jn8=99LX^K`M+jp4cc5AKL7JF_?ERklDN$J565jzo(;HkhF<_+Y&gxl)vA zNIJ`Tk=D8xVMJArf&iSwI989GN7lS$oS^@BNC^T#*Xc8%LMxz=p?nNxy{@eINv!{6 zY6t}CwGy_vMM5A&te!ZJ@oj#&(4w7a?c(!xS8o6MwTE92C&$j;+1!_;H8{0#@ui?D z&K?4e4<6eJqg3o@DbL|<{iTQc7B&rOn+>X4-A}UYjka=S={K6K8{&9jM2^LG$X zIB@RzD#7@aq4>LwLjHeV?B4*h_;l|Rj4dWXX@ZGd&) z)t|OR539eo5Xs%TX0eiSn$});Uis>t=0Fr}`zozpnN=DND+4RD{Cxb0z+@2_NHj??!aH{3kk}*M-a$X zboaZZ86nRuTMlBZePZy-!xH*ho$2EYK2P_mZ?5gN@FDqqUCG(@uYWZZ(~=y-2g^^O V1`r~CXGU@tOI5cjtAGIw`~mG~t?mE- literal 0 HcmV?d00001 diff --git a/var/mongoose/html/img/channels/freeview/E4_logo.jpg b/var/mongoose/html/img/channels/freeview/E4_logo.jpg new file mode 100644 index 0000000000000000000000000000000000000000..96d025fb43a37b51f7f7b03e0d267b40c0d09796 GIT binary patch literal 1824 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 Cei?26 literal 0 HcmV?d00001 diff --git a/var/mongoose/html/img/channels/freeview/Five_logo.jpg b/var/mongoose/html/img/channels/freeview/Five_logo.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a346825c33aff25ace2f47a358a41b4028513aa8 GIT binary patch literal 2537 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 ODo&KqBZ@4b(O&@@@m-Vv literal 0 HcmV?d00001 diff --git a/var/mongoose/html/img/channels/freeview/ITV1-HD_logo.jpg b/var/mongoose/html/img/channels/freeview/ITV1-HD_logo.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e9daabaf23ef195fae840f42047db01feb77ba49 GIT binary patch literal 1889 zcmbW%cTm$=9suwc5(p_QQo#mn303!1N=e^@yET*P@sWKwbp^TJoDU;pXP-(1Q3OBVY^-p%}i zTYoJqD!Wr&@k3=*bxp(l#s^K!Ee~6}dwTo&2L^{8KYuYcJ~25p&6}N@Us!yzw7l|m zedELC*7lBIckh!62H?N5MCQol7z2UyTl?BCC=0j<2n5POzy=qaq2(=nS_c7+ zUfjpc&RNH8dglIa0P9r+1klY6u+ZEW(UhgfeBr@yfp<)$F9b%4I}i5!+h=r-mguvk zLg)}Ud7bsDUWkKF@jff46K!ccZU-zpVu%rK5zq&LOK9$qMtC_10iLIaj`_?));{}wm6ULow zm_JOZ+Nmwth$HkAUF0}r3N6o?t+b}(a9`h3bWKGSM7a)CHfc;nr**_jTU$;(ojk=JVL;A;l53{MtAi_0(%=<~>eh z9GYQqt2^~%kAkt@6Bg+^mx1K^`#41+m?vcHQ?rRdc>{Z#EBdu?djwI zr?()5i18ju?4r4C`f7mt%8XXyNB^0XXX6fxl!u#X?U$WQ;jQgVkE?t6@3S|vj}F*G zxtVNi#rR)b2+`u0(ReTrM){Riv+TLM7gzXpX^)n_?=?R++4GvRw8Gkqq>X)9sWV$W z9MITFC@5N9~UmULa~#{6CSO*oJ=RUsCo^z6du`_w`a(c%=#z!Lp#+KbhPhvdF;aX zq`);hy|b-@qwVA%i-wvTl1VuwV}^m5&e!M6CVWs`yxUC@Us_yxNE9NX_~uWztfffL zfNJVh9o;9x@p4uW=z@R?_l%!yUDPopH?7C@gYdRk>o6jx+W45KVc~e>HmzBxP{-~j zX?5B6Dq#9YSXH%ZJ+trb{9u)N3g>9TI+Zy8m73{MBL?CG>RT;NqT)34RGSf>Q3Rm;x< zhbmWeFo8|GPQ~u?Biwj%D_Y$dzY)Dk%Mb4ELi&&11*2yZvS!;XxvDsg_CMsk3#G-I zE#)|b3G%uo(h2J(S+yP)th^Xx6d~t?$wRF2cOQ6d5>;w#D_-6urK$y2Wb^V8&mGT- ziH&Qgq{f`js7&tG!G|xXJs1+0+D#aBP~QYmXF{_}c`doVdAZ9T6&K$7lvjPPBv(_@ zF`B^De)K5%X~-RZ&oO@1xsasJL_@5>d;xzzWgPkJ?l;Xh>BZ%r1)lPaL;O)XIvHNI z^GiU3kDp!=LE)8)t0l)O@aM;TbSMpxXfu4m8ri($^GmS%R<4hnd2vu>*6Q8WyR%=_ zVjPu9HE4&y#W4u16-=>4lsO+4S^aDsDHHX7J6{vHin=~~m$*2XkQbY!>c3G=CJowD!|X!`Fe4NNTn literal 0 HcmV?d00001 diff --git a/var/mongoose/html/img/channels/freeview/KERRAND!-Radio_logo.jpg b/var/mongoose/html/img/channels/freeview/KERRAND!-Radio_logo.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b648e532a3b64b60cf88d5e024360b135e08099d GIT binary patch literal 2540 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 literal 0 HcmV?d00001 diff --git a/var/mongoose/html/img/channels/freeview/KISS-Radio_logo.jpg b/var/mongoose/html/img/channels/freeview/KISS-Radio_logo.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8455b2bdf398114be98b8b744def34d1566ed8e1 GIT binary patch literal 1964 zcmbW%XH?T!769-Ul8}TV(iub&dKD!E5GfHDs)Im=77>s(l%aQ2$N&OkW?Vo71WTj~ z2o54fkfKNv5J5nsN*k&z7?fbhe}l7Uch7#>-TTgaU*0|Up5MFYJm@tv2lm@q+E@Y@ z3;-B+0f++(%}ExfPWGf@xB$OH!4duexHxUCBRJLA=%BCwoQN{yAWffI5b%L&*{!xQt z=HFXbT3OrJ{^;cF;_5~|}*|ZDk8JWLcq+ZUwl9yj_wXmq9 zw5+_M@^)4Ay@vaZ59kk@nme9$c6ImkKI?lqGCKBZ{Po1-{KDeWpUW$&YwL{7Pt2{) zU$$90doCD&|Ha~-f5HC4CCqj4AP{f_YR?7ZiRW&(Fajy3%`0N+i1LmUmB*)`#msVw z>z`m0bVwh?eWHf>BoqnrN{l_)H`#v&OZ~rO|AhU^H3;4#pLa5{uel*i28VA~zd#dJqD$dSdIqgxn)?ph-a@R3AVd(vG7W;M1nSAKhLAfl>ws@)1 zkNG(+I!hUHw3*7?O%3G-Wgpz`4~rUOe}F)?Gi^7*eiz}~Tvb8oRe!;GsKQBA8>dIU zp0JPC7w$-(TICJ2q5J8*bPc%1wj47VuI{Q-IG^9&^qAQFW=@+`v`~HSQPtsa<>sr) zHrF2|*_nEIWR_Kt96W?x)L+f~wN^dr?w><35&hA4bAeFBx`^shMVhx~-aG|qRe@+7 zb@p#ruNw1#fGEeR){kx2GP2N~KN)z%vwuKGc2VXQbL$HmdDh%Dx6o%@?U))lIiNlF zjG8UKuuA+Coh@pzu%mkT*8QYezxDSQ_8oaRNYN&f5~!UP%QV9GzKPC#AJ^~H(19}Q-;q%m)bJ>(?cpUmX)yUZZ;zH zlPUHF%qMkHj%mMpet|$5>t^{6b`}N}L7{gy*>|^Dl5aZoHU!>9hQ^00n%d_oQVic4 zx&|WBa(hns*HsieCr|<&(u*`DsIlOe=+q?J9U4$iqy=fu)cavj1-DKTTZ(CyZecqk(~yuyhPg| zeO4liqxwkhxv$H>jScChoH3nY<_i{*41sY31cof4h$6aP4QttJ!}J$XQ?%VK?gMA_ zj(hyukT<8S43oEwk@l*!_oq>8XOW3dh55y-juE3;zl1Uy1)qCz z(|0Pftqf4FS}7fE3U(B`feZY-$I038Oz*dp?xt()8Ir-6#?j*3A=`AKgI&PHc6gWU z!O_Lm2aV*uhz>Q=eXXNuX**5}l^I=T!$r&PG3@6N1V(~%!4<5=>?E6MtY_hJrpt0Z zd!K=9ql>lgw0pl@r_7Dg>x;zRWM_itZpABumL_>EJjr6RF9}^?{qy6oz$8+Gt7=j{ z+Ba|^gK(*BQymD+J0n|M7;jS*FA|%nV##Lrm8zp0<7BF0)Sk`OZ}^SM*;Hi;1++A($+gkZo-`E6%NabaeJyuLWM&p!~ literal 0 HcmV?d00001 diff --git a/var/mongoose/html/img/channels/freeview/MORE-4_logo.jpg b/var/mongoose/html/img/channels/freeview/MORE-4_logo.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b61a774ddf38c4a7a7d670d563f1f85b49b4a1d3 GIT binary patch literal 1847 zcmbW!X;hQP8VB$3RFGh30fB_gR84^rA|i``K_L=RN+?BE zfs0^R#6T6| zK%>(D2m}BiTLS>4zyVuVyF(0TS1W?QuQ4~+&z}%sYO?d%B= z`$+mmgphD{V8B@(fkLn_M}tFvEr5i>5pY=~0)arGkZ6puJVs6qvs+PVr!szzx*C3u zswzR-M310pq@}7#w9q%&Yf2`Q)%7eX`$-2)%*dqeOCTr|3L}S6k(XB?X{c(D{^x*A z02T@C1H7ORO+W?m4(5! zs-w5g0T@8?x_fwfdHeYKee2H&;D((IkBB_Si@Fqd`AYnE3BuI0^o-1F zS=l)Sg+;|TOKyovE32w&YU}EMYWU@0OKV$uN9V7-Py70xJ%2GUI65{y@n&*r`t83K zmzLjukbGQOUE6j+0O%*y*7^zdZ!YYXO9lpm!Vudoh)m?xgkoW`8m4f?LoNt*h>|8L z7O8BLBC2RcX_>h$;Jyj%LGRKgkLoOL)BceCcQC>KCHo8Zw`&lr|;QT>=r33Gkz{;OgTK-btoD~`OaRbPJdsnu|2OWoRu`0B+2Zx`rB@qsSi_4%%) z{UB(NOT2d~f|)l)%)UPzDVKlqlwd{FeLu(Ev6ruNhvnz*@O=rQbbrN%Vbz0E@;z>L zi%GX7h4^AgMu0+gZBfdNCcPU35U`pZY5R@e^`rX7S&zg35Li;G27x=BARt12MBE9i zQgW@St0e0`m=j*STUdA`@8p+aCT%nFzW~13aMZUHvW{eC1 z_wD@LTN-E7N_E31>R*AtRc8KXu=6I2Sz30J-(m1XTCXP+81&N%(1vDS{m&f)_=?r% z7K+G|i4nt(qn+9FthwazV?&7-%_$V)cZ09J6OQI*y5;I4%AK48g;RODxw;}fahKa} z+I2f8XOB%TulDwNYmxXR>!l@6&9;*QKL>rmOuW}Qcfr(8`7!I*%OfeNp*9(A$x|-Z zt?1d40XJgRXr7Or)bS9x{Dh{Gf6`w$3c9`>=w5HF`C;!6BkY7Bj>^0LVDbWkNt<{z zxDif^j^BuTN1dtUPuny$&$PaqEfPo`v$aWWL0F5!>lXtrUHUq&aGV!67g$ieOKf;p zyZ-7W4VLdMJVLYatJ)tqG?vu9D&75xnvx{vc)N!VBeiUL?UB`FR$Yj`ZGEB0a`0j8 zd5L(UJXFz5m>%KZYZH>oD45H3@@~JKa7wK@!R$Xj<=&qiiyXxd11PsVeyYlHNU1ul zxML=-y~MneBgH?TpA#j!Uu->tsjy6W;Tt!+bkQm;@7Pdd6cg9!fk0v z4%6nuFxy@dt((HjJ-N%}LQdOL$KaBaDb18vg3s!n@m975Expt>no17#2_{dwT=zUv z(#725hG4m2$Dgp}yU0oSj+1ZhDgKOI3IBL|eSQZwQ}YimaeQ-X+R&TH1u}*kmlW@8=e_MtgNf7 zyF6BJtjdkM%<{!V^}SlS=E;BZS^oMP{z@san0@o1RB>kK>UbCkTqp+toc)H*Gxg=R zDe3A7sezDq_v<8Uqr23lU$-|FOC#5wrHH*7Yle%S+6*((`N_&IwnFYB=MnewyR8D% zRC`V2TZ_M!M(*eB7%Lpo6ZV~s>Tj^On4q=^4cJZ!?!rplTrJ1YW-kTns-R)T6CL~{ io55V;4N{El2B)C3b@(b}Ht?Ls#$}fRAt&1m9QYk`S33>> literal 0 HcmV?d00001 diff --git a/var/mongoose/html/img/channels/freeview/Pick-TV_logo.jpg b/var/mongoose/html/img/channels/freeview/Pick-TV_logo.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c5941efa9d64c8f38355f55e8ae180239183ad76 GIT binary patch literal 2021 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 C>6jw` literal 0 HcmV?d00001 diff --git a/var/mongoose/html/img/channels/freeview/QVC-Beauty_logo.jpg b/var/mongoose/html/img/channels/freeview/QVC-Beauty_logo.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2bce23eb128a3df5889473275142aaad8c90377d GIT binary patch literal 1853 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 literal 0 HcmV?d00001 diff --git a/var/mongoose/html/img/channels/freeview/Quest_logo.jpg b/var/mongoose/html/img/channels/freeview/Quest_logo.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1fc9753466259b47aae21cda73ccb208928341b2 GIT binary patch literal 1863 zcmbW$c~H~W76${h^;J^MM8d!ZRfq2_t)z?ckcb?p83vv=FEX!LQ`Nn z)!D@vz+eEt#0Nkku+PEW$&Tjcz84n~_!aYXPza7~w%ZhkXT^m@h2UJM6dd)469vb% zB>zD+Xej- zC?J6)@P@;5fP?}Jt^k9&fR-331^c7GUj>tZOG-&2kSG~haYOTVAOVBJB_!ceQj(J5 z?nLoFkW`RT)Hbt|RyukLp%bG_NXacl>e|;oz_<@B>Y4k;rlMq2cBrbU>l+y2cNq~a zEUm0bdmS8|oGAxgsK;n@4^J=e;{ky|!6Bhx%(!?K`%J>wa~Hn7cquJCgL5VCDmTC2 zT47PyPdCbMR@~xMHZ(Rh-)Xsfuk~M@UEL3Rdi(mH@rOsAzj!%1HvML1R`7Q2-TeEd z<&{srt*)(aeE#Bs0r;OR@%tz2zg!ApmxQDwToUoc1(P@9(962zFay+vcnXJ)-Y*ePx;B<944nlmCFgZATHEIoO%4C&B1@gu8rElQLWs)a$@1 z%`mI$REb-s-8T+vTZo_Q#m(^9U%%+{4|Atiyjg%u{&ypnY6bZLF!yf9^NF?RzXehSZBm^1hn*n*8vGqVg;* zPbm%K!1=LbjasLVB=K_`B}y(*pu zA={=Xv&C(&UUuDoVwihB7|sJ&Pm3CFO2w1h&X_sr6J1L^`$vY>6S6-PPx2t}G(0n} zJcL8T$i!B-KJkq{WFBGF%nB?wzO|uAPK!<&s<@^qn6jR0{h{P}iI*>y0D}RgI%E2rED5~ z%i`&L$+Ao%1Zq(b_>t4%vpi5)?YMA^7Zo{D+hKn2&D6Z}_35u!9YQ!ayUU~ACMP{4 z+|rMGP|fcMXfHv zIgvLKhWEnSXL2gJ5NK@`b}kTWi!UUvt_k5Oe2awmO^tN@ERQhMgCnNa-ErKdzlrR{iNv=73eECc@XVr9= zuFfoaclKIQZS||kV^vK{w%m4Z+aAn=&>5PZ(F{)hT!~0=Tz*3kCtkeU>qAb=;9~jp zL*jMj4sI=X%us~-ceGae=R_NROJy9B9RZAPwxP(|2LhAEA`6X#vMvY=7-w$^k{@#L zvJD1HnuUlpan_`+kg4*bhH)b<$w3%ecK&DW$l%ddy^b6Rs9$WhW|Z}9$cqCdKBRmM Rh~hw?{Ad{`w9p(H{T;_aL2Cd2 literal 0 HcmV?d00001 diff --git a/var/mongoose/html/img/channels/freeview/Russia-Today_logo.jpg b/var/mongoose/html/img/channels/freeview/Russia-Today_logo.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2cd9d8805da2debdffb388b666171fbec57f9c96 GIT binary patch literal 1762 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 literal 0 HcmV?d00001 diff --git a/var/mongoose/html/img/channels/freeview/SKY-NEWS_logo.jpg b/var/mongoose/html/img/channels/freeview/SKY-NEWS_logo.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b50342ac0cdb4b1b81f36be0901a1d6bbd1d7649 GIT binary patch literal 2011 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 literal 0 HcmV?d00001 diff --git a/var/mongoose/html/img/channels/freeview/U105.8_logo.jpg b/var/mongoose/html/img/channels/freeview/U105.8_logo.jpg new file mode 100644 index 0000000000000000000000000000000000000000..01b2e4b006dd82554879d37328cd1cb2b178dac7 GIT binary patch literal 1962 zcmbW$c`)1C9suxPBoQG>5>ZtoL@#Qq*jh_dG(p;0Vk>R6ibi7BT58MXY8AD%c-lT{ zt6FL+TGV}2)b>j4YqdeEt~+B7F7kVE`{uow_t$&xd**y+&YbV}JM)<{2OI~#0OB;N zB^7``006>Y0LTLj&FB;pduzG@f#IRf3h-nQLbNna5R`*&GW{3?OPV=>W#i`7?lj21Eb~g9{>rkisJTf_ia400M;yz@TtA492gH z;@<->G#n$ZWg>{RbwelwN|0jG^M#0}HLW=Mz>1>w^`Ka!u;gK>BhtryQc_kquA{4` zfAW-p*;xwJ+`^J(XYb(XbkW(x-NW++!;8tfc`G<1H0*ZxFL8J7#@|aw%y{rHGb{Tq zIgbhoi;AC>JTEP)eOXuE@alDA)4R6zj`y8i-93Xt!y}_(;}esd*}3_z-xj_v{uP(15U{q7LWS>H+Of*?$L%{l8@Yg8kby380`5{^LQ>02$zZAY0c) zkp^b^KIP<_S|(U3d2!3h6IuB6IbRTn&fZfVBG2O(AaEHA0wy?CjG_bY@6{lXchrA( z<8K^uu4nw-_7wYbF$f6PQ=l~#iw*eouRmIk>kU<~7y3T)_BFSi^k@C$*w?%jTGfnJ z?nzTgzDwf)5p-AYfv}{upv#NeT^a9Mzul9qRbC!?6`4w#8t?0F$&nctpUxPvHn;bV z@Vv46^!=M*e|InP*HN)uu4>MpuBGmkhQmSM0+6xpBQ5qIU^Hf*KZ?VMUq)dJA0@Q5 zPNb-l9%hBK6~DQ<^|q|`(isCY{QjCMl~$r|;;21;SN;h#Z>y`KY&^TgedKH(qi`{A zP531UR3bs(X=1&@t^OUjGYE{qK;R?ArBuhf4+PMAl+u~)9^UY$e%bmbx%Re-ckHjB z8W42r@c6bojPAaGy;Ebvu2!2#(AO05gkRyN+(_{%`)rh9hdZ4@W(s z;%M?MajCg-U#j;k`mHj17G3J!CzWWaVBFtPgO130G{AzpJ*H9bSf$bGZIlb$L0z31HKx&FNm zMC5Q?K|Omk-i?vJn5{jzr01(Z{c^sh^yqDTiEC!{X7aNcX0&YG(1u8|6*i10TxKPL zVV}>tcWL_qcQ%(A?Gy9FDbpaKXUvdjT3lJc{q>XKACg678TJMZ&Ci&k z(pP6X{05`mE@T)-#kW}WRmPC^WOQ%4)MhRa4v z;1|l@(P+EOkCSm6q-AfJ_p*@~XAdh%|IHnHuiY>dNAReg+jyaBOkc8PON9AN$j$c~ zOixkcm4ce$p(_hK0hXrZ<*?6Yn*MASA#Prz{9-RrjIn@E5v8moooi`Ytq6}bQ=0I- zp4O{^V5&8nE;KHX?*!YmI+i;&Xk)$BJ1C0Ful|~5hLb+@gz4S0Tp8~@D@wF`>@w`j z87g_m!cKIH_WVqj$InbhTz`~hkX&_N+WV+F?U;A>jV5Md9fs-@8+WK^1!3!&w&_Ca z99NxLxXOLFb4tc>bPuzav6JgO`#Sgv%R=*R=JToBlabXs0R*OgHb-&86d)&uG@yGW zA24JFD(FQ*l?ekDwrR$9SQf0J%z%=f>8i%$NV{??ogJTay47a7%V225qe&%LUu}Pf zq$AgH<&6`(Fxe)p{C-TT%VQp9No;5CCJ01UfdGyoQK2)=es{%<|6~2w%b6fB`y2$~ zn%a0_(;)C!6$CnLDUu>JFJ_wsrPln&2NlvuJd8JRqPh?9)Pa9eeyY(m)t<%RIrsC2 zrmjAJ>{{=a{$WRKwIEULu!mU1)T^`EYxp^vh7u7rDlhGzrJyzB%vMbe=js}cny6CX I(GO1i15NU58~^|S literal 0 HcmV?d00001 diff --git a/var/mongoose/html/img/channels/freeview/VIVA_logo.jpg b/var/mongoose/html/img/channels/freeview/VIVA_logo.jpg new file mode 100644 index 0000000000000000000000000000000000000000..50e33da75732e445f6bd9660f5a77f9dbd7645fb GIT binary patch literal 2019 zcmbV~c{tSj9>>44Fh&^rG7U2rOJ&KBi7=LfP+6kIR*X!kdnH@4jLIogM;daY#L;5w zbR-l`)9(V{yJ3BZz z02B%U6mkFzfgN@p_BNib9_AEQkbcO?BP>dkk-=7qZe;kezq2S#&W;pkH+x4)lqqeK z9wjU?;KZ?r7>Xr@zD*qd1nhvAs3=ZUL=1<+;qhYP67rG~8#YL&$jTAqRf%LZRU(N* zp&IB=H1sq{BwhL@y{$$jCMIMZGt2EX3j<>l+K&(v9*>vUAfYTNsZ3KRsnh;v!F51J z448t07?cJ;%b+kaD7X=j5l9i#p923B3XQ>vh~mWX;u{b{g)~5;Fc>rzBO-#uBJOyk z53n*Kvg$@QqH^v5IE^rQ+S&AcF-_aDdIgUU^Hk%&Q|IvFib~2VL@jL{-A$WKwwcnm zo0;4FWbfd()5&?Sr`Nvy2M&5OgN_8VjvfmMkBE$lJ{@!BeA3SsE+(g>UgKnBUeEf+ zjqG0w?%ch1zp$wIQTgMF$|p~&o;AE|Y-)bh()zliv#a|fx2Lyncw}^Jd}4BHdWN^K zxWr#x5v;EL;6ee+Usy=}3+z9*WDqVi7K_2+esH1C(a6QfU`5o8L}hKk!Np)a0dm_Fc|e?Ux1WDYIU<$Ue{El_H{5(Pscm`t`rEJ}zOD3@Z@JZNS38{e*RT^v)ip06mivc#2cjV*LLM!nm@ePDqaZZq5^7viSZF5xqo z?WAmop$?G(iv^4Z_7R?TNlCwhwM$Xp<9(`6NH50ggvaS4?9@P)oKUI8RmX_fj{5?d znClFi;4R7=6eJ9+H<)u%3d&p#^xW@J_iAp*tTS*dk$`F|raND%6%6%WS5Dvet^W7o zJVLe=d>^cn%#VP z!|hLNysqC0+I~JST2FE^^g8siNN9Py^LcD(KUJ}o)UgrLAyzA2OIbTDO~gYo>wBdpdjWD%glXo*XigAS^o4ng2a>(F+-qNaKfDfm9^VIR(0IB z(QB7ixE#OFuY+<~247=2K30aj+Pfpuhv}E(x7JCu1ibs4duQxsZf2{Kj<;xh_}#b9 z?q4jOOxQQmO+r3-hMe%rC4o;e^0bfH!a(sG4CeMHx{OHr&0g!R zaOn&sChdH_+*fQ4j8k7-vvr~_TC1&&vX!TZD=8QA`ACCtYT4wzZdyV zcEKRIL`_$~9e$%PK0_vau4&F=F3c|1y&=jqk3N+;f7PgG|GPbWzk$SUb3(rnRXdG2 z->zVsz<<0&Se`n&^f1l*W6JOs)yNCy4$0oYzM_FI$>aVCi=UO4QUjFCiSf%DK&HmV!%MgUS6bkW1I#L zg}k*HLl82daWA1B2GZ>Ii5p065DZ3ie@(2GgXED3jLF4aNcbZ*Phs}4`))aHHr)FM D^g5nx literal 0 HcmV?d00001 diff --git a/var/mongoose/html/img/channels/freeview/Yesterday_logo.jpg b/var/mongoose/html/img/channels/freeview/Yesterday_logo.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2dc57fe774465f82bfa618d743bbe059be2e5414 GIT binary patch literal 1788 zcmbW!do+}390&0C_0D)_Fq+ZG(8#!yk^2~?Nux$j+sT9dxyw zQYx2SBs6lV+>5PAF=Vz`%#3@Q3K^`~X?M@=IeYex-Tgl2`~36#&U2p6c@zVRAppx} zxv>Bc1OQOE0L2R6xZT@@>FepenG_Lb8F?%`f|O`$WkVt-#2<-?Ai1%3kl4Fjc90Ss zC}tKUPD04hBiv*XgG94eQwV|W07_LARz;#<7)GN}Y8rTqhPt|juGZ>Rczr#Cb^3Zl zBFV(clw@RKOeB(NW)?QKR4UcLl+M^h*KX(LhCneS8dCmq6psNM z3UB~|AkYXM^Yg>Cq=aZ*hFJJZc3Hk?K4-SurCDPHc@rlXzA3n~` z&3{^uFMf7`0Q5Ucx&IFPn+vCOsUQ##0{-j*RgNnQ;SfkeTU9Nl7aYP_ZA3{$;hl4D zR5hcG?Yw2$2jhCw)|gO-*T4Tv`%U)mU?=~V>`&NVu0cQp0+pW!;ef5cOv%mD%L_k} zZ=MGJ-Y!8x<#f>O$1S?|>aH>^pD!nC{LIbGNtbyfl{tK4cFBupw`bzVl@mf?AY@~3 z*caxei>1u8seS!t8|j)wLuU`Y?Dlkvxm}x(q0Mp^n`eJ|c5vSUBcN5JeSZApL`|Ka z)igFe5rg&L7zc(Q(6r+-rpAZ!mrB|Fas?19gS)~WJ`~tY!hY3D)cM^fN-vszToWh< zZaikNUZMzPi%z`qNv|uTvUjiFO77bU+19wW^z1U54kmrsytJn02dCCD&yb==yC+%p_!6gj}7Q0(`PU~J8opfpBJ!sS_Z@nvbwi0Kri*Kjp zR|G@_kFBJP67R(1k2J-4zef!EUej~k(^sSuJ1>o0zc-8+Ew7t4vuF&cn7l+YI3Vld zN5ygleEK6_sRw#6fI+Viwu*EL`bSL9ysM~@U8JRiE}3K^gO7$e!Cq-odz~_e&8U3r z{=Jb-U~grNW~F6&lO!P3IIvslwrhx(Ao0Kc+P0zRXv4eyl4+|OVoR3LM?k8PDFC4* zHSf+Shl|ZHZ*X)S%l=eaxf~onUv7k1>$dVDn%(<`rN=?5*)~7v;JkAiu|7pxe0W>@ z<$^_+dzxiqeWd(yj?@pnoWX2{31dxBlZ!FM(Ic@MQS~WlcM3!p2iLKxjH2!8cL_fE zIgFB(rx_RWmcLH9Uig5WxZi?TFYBABv~LjFXXRQ&zex?th0U+YpS1gX>Ly>qX119X z=WBJ}`=CFTP=~2K=fP?2fbl6UP-XB!0=K)|ak{cH>RxapM*aJ><}s+9v!&oeM|59+m#ax5`^Rr9E}lk6xJ>2%Q{lXXqZMJQ-~ke5~9YB}07 zq8aK*iR+AU2Rwjjy0LvwfV_(ConaGdpucQYkk{XkD|a-qS*_9jN_;_%_&zy0;F|ad!UpOAjytRLdM$4%`oA+hA_1P|rX?qqI0P zFI~aY%U!`Mz|~!$%*;qrN1?DZF(ct*k%^gw zm5rT)lZzXuV5!ybuCbyfklv2NYT)dO*k--U8zvSsBz*#4rQl} z2StM}eo!$^Dr(~75)+q@lu}hw*U;25F*P%{u(Wb^admU|@bn4}2@MO6h>S{3Nli=7 z$jmA(DJ?6nsH|#kX>Duo=8f2KE_o9%~}YXK;@p{B?_ghnW!=dCYgU9 zaCp`(U-ubT7j9L#^_GI4k7Yqju{QK%&Y!a9i=ficf$YYkq z@ehXQ9@H}P6u!y|G?|~f&G5vAPHvlZ{~6vI-r9Hb_OB4L&pNl7{MAl85~}-D8vOgG zNL`mlq!5WY&HBG(RBQKI)_Dvi92LQFk=c_f0Z!XY$$57M^M%Q=a?@A1uFeeG)gt-n zow5)^RZn00osxAggQkeBI&sWYS$(n4d(X@7pM2JP^KkB=H@r$u8s|KyDh^5gFmIyj zsng#IR_?s}FotE~9D&F-BR|gf_qsGSPv#tZD85T=^5H0*zP?+j+n&@Ldidn#Fiw2m zV6Wx&;aJCuSGRIle literal 0 HcmV?d00001 diff --git a/var/mongoose/html/img/channels/freeview/bid-tv_logo.jpg b/var/mongoose/html/img/channels/freeview/bid-tv_logo.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ed43acf981cc7e843b3eea9a01a2a015b4cfebfa GIT binary patch literal 1888 zcmbW%cU03!9suwONk{^r1VK7UGzek@Nf4xM3|y$^Lps3~1?57K1wjNR0I?c zxCJ3g7ZF%s4P=ofi_!v!6wv@8qN0QrYJL~>-rc+XYwy1E=KIIYcjmp%n*xnOd?4>& zV{ZdsFaTiU1|ShIw{~IB-JD#^2&}UQgTnk-go}pyhX}fn5rN;a2=)%P1c&1cTf#+S z%6>B8e5CKWzzZ=1OM=N^DQE&%1GJnMS_-QugO!%Xsw(V~Q`A($YiX)! zXb?#HI)pvsy&4+2Ci}^U42_J8@H(cJM<^EhR3pmgO<))d1}lwKk&#iM5H*OD|2d#X z0EY&~fC-1~0TMVE90!9s0A7ql!oCFfSHL9T2&5zmjggWT7u3rG2^btMfq)~C2!yyg zRy+?7IHUs6kS@8)*%!6vydotbqY%B@h^9i5N6e(QcRI5hlh_|){w>)AJRZ|C0$ zmX=pm*M#dEo1a}U0RPGo=dZBexo~2a1Ofp^pgy}`5>es~$03kJLrDd?Gs^e;u050l zw4zl;VNEM$FV$sH$uFEIwVPx#r7ieO`y%^eu*CmM_HWpKT;l)>hlvjljsrBX)=P7$ zjivBj_D$v#TG^-B>jbP-(#Ep!%QGPmxO!(>cZl{{i3NdgcR_%z6qG=67xg@VK!JMb z)=JBi?V5ke_WDHJt6~U9)idBVcJmGR<=L-G^^Aw^#m)7-673kQyT2*Rjjy5KBSTdhq-Q^|AL7F%j9$ z*No8!S-ZKxW{Iv2?}mh_PpRJL)Fx*qum6-58W=v9*=BA0qP!n@)AYzn)l*B`4jz zN$saBARBEJ9O@ykNoT*yHaoe%cYH6zgh;TdraG$pFzSox=7_0JDg1_YVI@5zDl#U7 zeS$-J9v+k4oMc7)z=VKaW!3sAkwVM3tk6+3GK?dnEXY}e`|>wn(yAhP>9Xx(;PSG2 zRJCgJNb#c6vE>s$~s{Q+uF- z*N!E&d>i}e(ttoNCGrB-bMXF0Z%iH%`@w>}u`@m~WYk{5OwFG@k(QT3%INN1>!N{WDT}SYNkdr9q8kU9g{bSGA3DLurP~ z^MRFEs)+6px7tcu!TAJNY~#6Eot*54h0zV~?acB&)!W?s=%+FpAJU!}v$k68@ZT3d zBVcL4nxCIzl6ZQt@5i#IEESHjr-^}lwquHv8!IE8`e-n&zQLYu3Y8DYCvte- zWhy3GV=wH&0pduFaUY&q(n|r(2K&drg#*L&mLpU>10)g*2?V{)x5O{R}0-er`12V?= z#XDYc{ptlp8$bu&o4vQZC>iu(w3ggh&E0M zihdv~pFKA1NQD4-PW+s0*N2Z)dpFv>*-lyKF?LJWqDDd{iX1oO1Z5{&lUkCUev7-V Y=zO|~aCvlev3f&_%~0e~SkTx%0nWlwVgLXD literal 0 HcmV?d00001 diff --git a/var/mongoose/html/img/channels/freeview/cbbc_logo.jpg b/var/mongoose/html/img/channels/freeview/cbbc_logo.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b85521dd1e42b249a1b62d4ad8cadd63451efb6d GIT binary patch literal 2199 zcmbW!c{tSj9tZH>m>J9IsL|L+@WVp<5HNUHK?sM;X?qBzu_xJgJ|M-4C&*%BRo)0(#jsx5657-?5 zAP@k6Y%Ks30DG-m$(HU;u6xiy0Xsv^1O}mFjIg`WdeM==r-RUT_BLpHXR-}ChJf2) zh>nOpb}Be34sC%pH9>+SfE6GrEG!}n7Zni^K_Ent;<6IrVq)To(lU~=s!Hl=s!A#< zXl<-6TGLQVMMckahv9A`JRYyEYi?nN+lMvA<9;-OAP@*~F>wV62?d;niU#g42YdlY zi2?+G0)=P-LQ)W@6a;(?sBa71-r^%`5nc2Dd&)nse zf2^+Y`0E=#To3^I2W#v61NJ{IsV$cf3>Psgvvdw9>RqE|n4<*VDz z&uf;lVv|RXFuaROdU6IZSzi}~uexwntX&9OoS?Oe412h}&aN(&73KgSX?*Bf*4U%gFy z!&K*eNlZONXZJ_drU|}NCjx(#p3u#yU4Yqa?9Ize`ZBD@fj9Vw{ef zRR2)?=RwGR^b}a0Q(ru!kTK!V!&oz`kRkW7_WJpQfIG`{7rZ}7`fDb&U>rzb9q8ao zQo5_K6Sc{`);1mv*U~F(4~r@{RE#05c}m!3@z^oUhmMAMI@KWk5ub!2H#Tr8G1Ns& zjCC!IVk<_wT~(ovIIp*{t3$s11dmZmM21yXoobzKirHQ>QvD(U1zmZNH<+5NTf4{=)vhj{3$yBdn?F_?k!>8?0RlYj3oVeo6v?WF{k=c{2tO?m8N zAEJCq`1E`=hCOlsVyD`Pe0RNmIM!mJp&y@~kcb-oOcxpoHga#DQrW!StHfVokLzw4i@d|A=bO4AGdS4w`_p9=!$a^lAL-3`&Q($v%F*du%WY|ZXRb*;lG zATS66fo`(*eYzthr~6ask`?RqW1D@|xyq4oC|7HRjm%QT2cFL*&Y$KMOl;VroBlEUl4^;~k zZ_Q}zM$9kn?MIEGuenmfrh4eH1zsgBzOw7Nrs79qU@JbJ>f6GnO^=f z=P4Nek>a@4=beFd=Ix9K5V$Za*Bv};Qk$iw*|Ps*15y?;2h16qb#tFG`Rex4r4)m| z6&hOmbw1KV_KM1&v7c7n%tEd9+Xcf-m%#AAaIw}i-ev;`WPOLiYFYCH_7Mo=n-Y0! z5a7DI*ta;QZDKg;D{Zra^&RwRNLG2*+0JaH@%tqn{xtS-*A%gh as`to`rg~6j6PIAM8LCg+aW9|?eE%;NpX6i! literal 0 HcmV?d00001 diff --git a/var/mongoose/html/img/channels/freeview/channel-4-1_logo.jpg b/var/mongoose/html/img/channels/freeview/channel-4-1_logo.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d399e15473175e033e4051dc0e907ee35dbdafe4 GIT binary patch literal 1742 zcmbW#c~sI#902e^Kn`h(6jQPQ!BC?^1T{-tOC&6_Oz_Bd(=e^J^1{r`CECjDSw0HqIsLCA-~1kxBGVg+THKGnLlRcJMVqI^Mx9qcVLE> zC(jeWU;x1M13)^kbcHX+-OtC@nH(-$uq`qyoE&Gja533h6ti__IGN|gC3~&qaLI8F zOdAF{N)+>R#^Ow-;f#!M<};0_o6I4S=FTBn zSdeK8>10a=)xyHs(T1_uj>Te;=u2Fjn9CO0vzU{Qz%UpL&Io5VZJHUAVnJd4=YZ}3 zJQ_HFKsd}27~o-WJPaxaBs~%d`x4-ffEmCMNJA7FgEi7$D4GEbU~sqr0**u?5c=DR z`g4H5BWF_V+zpM_g`g~>OqdesMKpD}>OR4@wx4Dn8oeKbHJxQ8Q;COOZ^1Rmj@df??fkB&vVOzo@wr-1w6~*n2-;?m;frE#V4ksTu@zY6}{8ZZM zGnX>ngmEIdu>8donF&q3cGf1uq zwyiq4Y0W_mqbF%qd}*JAFD%{{d&uo`yC6ljCg@(5DxGGBYh^*;7fzU<{BHML<-8ad z(rO4C=ci9Z`b;4B%A9O*m2HjgCSAAR_9gEU)-%jqz6o{3DZ82xSt*orJmv%*1KRDf zfufI@I--nHvY$INqlX7`Nkj%yp3)9qVWW#hxbA`dt&4*&bQ%O$_$Teay<(6v~Y2%=)(Q`tzQSGrf<@WVw;*fx+3D zron4eEAJbno6Rfvmt-GG(h~Tx;?`?T~(|-GsQ6-8m)~Do^mQ*k;Nk&(_OT z-JwAbmC5I7xPR{fr6zq4TL6Jv3RVqm`gh1Zq*b(YIM`@hZfgO%ha!4vxxw^gdB7omxD&Zum>?+ZV)wqOs?4%l zlu#c>-Z7t7$C|%NZ2fqXG7sHcmJ-$X>nDX~oRcjz<_L48Ds>rkF{;71!Y3<;7m^Y9 zYPDZA&MU>Qf2CRLtyI%4;>YtUMOpSr%Nw^WE&I%bLq?I9O0J2OjjPA7VH+a5E}JVk z>qz|cxoqriY>?h@Bxb4_{M432+fMEa_Sx?h$sO@+C({a2(@L*#6{+~@mI+qC&#u;W zEb?vpS*v5IyUa(}S$in7tQ^AO!|BgR0^$yHW^_`${y z2rSzv?vp{F^)dtwl$7b>n<4OaJ_IV(aZHU=iV8VO7Z^ObrDM+?Jzp`pSj{cT8?DtJ z=9>->q@fSY^F8eg#Ya6vO3s-~US1I&b57VyN+VJ_`d5 literal 0 HcmV?d00001 diff --git a/var/mongoose/html/img/channels/freeview/channel-4_logo.jpg b/var/mongoose/html/img/channels/freeview/channel-4_logo.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7a67296a77659c966aa22c98be38b98bf6cc0e7c GIT binary patch literal 1793 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 literal 0 HcmV?d00001 diff --git a/var/mongoose/html/img/channels/freeview/five_logo.jpg b/var/mongoose/html/img/channels/freeview/five_logo.jpg new file mode 100644 index 0000000000000000000000000000000000000000..52c6107322f03a13f95cfabcba6a76c3a9a43203 GIT binary patch literal 2153 zcmbW%XH=6}8VB$8O=xs0S5;` zsiFou8NOwWV|2H`H6o9)3FN1kVd2H~iV6r7{$VG8cz zKEjS&xQIxLxX}Zjs^MQ|IE4^6FbPwrLt|#~bf3 zA(Hl4SXx;hJapKB@-5ZT{TSWjJ5R6U{sDofgMt}n&R>YUcquA6CO#oCDLExI?Z!{p zH*<1t-Ojsv?>@V<>;Z@S=yA=Hr@UvibuXG*THD$?I$!qm_Vo`8z8M;xn4Fq^|C?~; z!|dGr!s62M%IezsR~H0;{>74>f5HC4g_gQxU@#~Q{?!GMxg_0CG)z{{Tu#OADBLeX zRiAJbfw9jjscu3V>~#~VojTVouWm@3Fq->H`&0Jc!Q%ce**{_bat#BDP>8g7P&8l* zEc0z?k1p@)AALP?yTsnJ1&Nm_2Z7U`EI|fOyzVQycLW4}q!)|BX<`_?4wmJnI zAJX`H4+tdE`PV7EA-c2kT9!B(-=OUds;5do^!WRM`MUcNoS@SO0P8$ahW|+xHtMOC zm6`6ClZPMdZ{r0rcEXI$>57Z*;FS>--b3t>qEfG%U(VitTcck&wicZqGuEm^u+lW$ zdgy7kGHk^>(S6ZQ@EfJ4HhDF*f>@uRc?R{RBF}%R^I@YX-m4QwdW4+leGf~x@7W4L3TA^Ksb1`mL0SGrw73?OJ&2v_q;5Ma?&0h)H4vk zEmtCKbQsP%Klif><>u8*>mRY@P$$p5S_PPeb#WU_G5nk2_zr^{jS-)@r$@MtOWIwL ztql1k4hX0oiAd1|~X zZz2FoP`#0E9lt21kPM&9aD05QT5biLS1-=I3hr9dOAkWd0f8R|=w~}etGV3?0*7AP zX|*5_IH3vxc50zqM)AD-V-ToBg20_Lo?CDxYO;a5&Pvck+)CzW+lNOh{Aw`|ovV_q z@>}h>p{29kPErw=Me9p!pC?WAPx*UCp1pFj88fBLr-r@_`<*uvgKx&lGaB?Y(}&r- zV(tCv=KNfkkc?PVn<*BRZyJEWH&vV0@gSh)Rg5U_(nT@jtZHj7!ruUmU79_OqL5N{ z#R;F$*_BD^&;Gomsb7z|0^`cDk(DorH`rTW=G&Ynw9|9^JZy$t)4Gp~cRh8EeyrL$ z3Kfm!PB_~y3tZ-fN#yRv0wLU>Z!mSRBC2;n+?tt1UcSxsbyjq$V=_~(1ybBlypqk2 zoy=?M6{Ih3)r3`PCmGYR+sSEC8t$&*m zPARLyL?C&Fm&BQjQ14n{Q|b(uSGLrCdyL;&y%i1V%j#o|8A>dx3O{~4Ge=ADMX{@& z<$88c5WK8*6O9ReZ3APUE}E{ii3Rv-ax(9u zmyNn8Lzq%|Gp)u$o)v4Q!y58+UsskSMeJQ(I9kSOa7xUfCvm*h*TQLImO^D(G3@x=Q z;`+AKo0kT|ToS3V1BaQ^(MQavq6@Dpds~)WJ)0CL5p|Z?Dr(Wsb(d^6jRvp_Z9>VK zuf!zH#0jQu8nz%1qm)a(#{!6SY%$nFN}zd?^fsNX6J|EOAcDKcc&$o)L#aH!dD@CU!25L z|41cT@G22Fm+!)+5rV0_*+K8>OruNKM;=|w=cl)`~8d287-%LNsQW< qtcJ&-tT^8eR>n8$1^Cr~%|r~nU>X&>jf~xtkQ~!?+}+LshyDQD-`V^C literal 0 HcmV?d00001 diff --git a/var/mongoose/html/img/channels/freeview/heart-Radio_logo.jpg b/var/mongoose/html/img/channels/freeview/heart-Radio_logo.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1220a4758467a57ec20dcf23674d6c068c57d42a GIT binary patch literal 2338 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 literal 0 HcmV?d00001 diff --git a/var/mongoose/html/img/channels/freeview/ideal-WORLD_logo.jpg b/var/mongoose/html/img/channels/freeview/ideal-WORLD_logo.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1d8377cae08aed2cfe660948f670dd3417a4d755 GIT binary patch literal 1896 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 UU@werv>(g$C}z_NEZ~t}0Z)0wn*aa+ literal 0 HcmV?d00001 diff --git a/var/mongoose/html/img/channels/freeview/itv-2-1_logo.jpg b/var/mongoose/html/img/channels/freeview/itv-2-1_logo.jpg new file mode 100644 index 0000000000000000000000000000000000000000..26b444474f4e8ced528eb4bc0c05f7a839579b8c GIT binary patch literal 1947 zcmbW%c{JPU8VB$<5+asXY(=#~tRq*6*s8c?B4|x56ZR3t3H<`( zTpXPp0SpEJOf&!_1lA57#FJm2@i>m5g#9HdHk^V|OdKub+sOD!7#oa*nG`e)9Dt;R1X4m=5{X2jP?AzIin21&(lV;@3I`RBsA(KM zqNc8n(KgbiQN2IAaq6fuNyhWn+myVPs0ce-446P$(H`85LPs6}+apCjL(s z^dmq^0(0OChiL&ZGz^Z0LES(@gcOJUR^ZQwR=+0Zr(y?6~JrF=+5RZT}%Pv77R zf|3UszmPe)D#P zzqz%&^Zvu`$4{SKFaZCZC0c)n{f`SRa)}`ja0K$R3noSvO*k4Mu4y76f6^Tp5~rYr zzbdI{pIzG2iNczCY$%0Z9FbDiCUAB5pJ~6z{uu1q|0Vkm?7uD!kb%QQj|WEsJJ3X> z#Wvs3f8d751P2nAN-grS!XO<8v=8fWd)E2{@iEKfz-sv~hm+&&7MEi7R>u!k2WI7a zLSU}T&6-V566?ReV?8puIWH6z)$7*%{dmxf=xhQ4YK>U7vvvtC!{fXf^DTo00mj|^ zsPdxOO4D18>p}=L?~ZM++0OfP_*;iw^FrKOyZYlm&1DidqvIf_)25s6q#Igr+s*)P z(-Z#1_Pm*E$E9s0_Gt_&Q@lv!l1xnRnzHiW=*K5Mj5=whF5l+pZ`1w<#wD z-g`wyP{K~-AZxZY{KgYb>M?gp$9%@^Hbl1GHeq{Ii+755`d`T}bHiZAirDNYQVa_Hm~_saNH{}{{`>OnD9Z`enHXB_>?*)%IT0cAq znI+#p=DTS3k4%}?D5vR$-%4A_tcrOgM@ zZU#E$kRB+;f}@kYhOPYZAo_Kdrl8w*}>G{0&Y0*JxrG18&R%eYrNw`GQE zdM@DTI`excJ*Gi%WZrO#-5e z`KIno8;i4fJ+|jUv*bM)`hQ#C_mwo9A-yUeeMXL~Z^k>s>Rl+SdHxl0yD@%}#TR?A zXVJ%5t5zYmWq+4sc%*Avt8KHL#%C~tyM?;X*b6F=gF9|ji*99@I8J+dZJL6W>tTE% z_li)pGG>UDM1EdVSYP3WHP&};{ekz4uPe!@0JY#9M`u+9HB?^G1CyPv7mqNmvHN1?iZVQg!Jw zgLB?y_P%KY+Qs!DxJRD5D>lT{>DTvzGt92EV^iJ6enl1@Mqz1~+;1+*>MZwY$OXu# z^82jlc9n4f0XgJI?M9bev#+G2OCNf95m*Q1f`V7v=4Kud_(~l6c}pwRoqEApUSMxU z)y$Nj07vb0Z-4V{m$K8KG+Xy{oZRJ6r(;mZ`rfjtC2I%HI>44Ti#AcMTdDo%RP^ad ztuECv*`bq@J6lRULG`upaB8q z!*sFLo9#;HtAs(@>wCMR6r$rCinS$5Ns1BdGlW{{`qGcgcZoc>Xsd`K5Qr{dR%%=q rVjxgFY$_BEK%m>52usl0H-LZ~q|g?5r8q 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 TKc0;D7G@l%IDfp<40`h$vgh2T literal 0 HcmV?d00001 diff --git a/var/mongoose/html/img/channels/freeview/logo_tn_gems.gif b/var/mongoose/html/img/channels/freeview/logo_tn_gems.gif new file mode 100644 index 0000000000000000000000000000000000000000..dbc6b564f27b5b2890d31770de672e8961efa477 GIT binary patch literal 4069 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 F{TH%zo7MmT literal 0 HcmV?d00001 diff --git a/var/mongoose/html/img/channels/freeview/magic-Radio_logo.jpg b/var/mongoose/html/img/channels/freeview/magic-Radio_logo.jpg new file mode 100644 index 0000000000000000000000000000000000000000..61752ffe58fd21d19e76814b724c33e99ec5cb96 GIT binary patch literal 1684 zcmbW$cU03y902h9kqtqN1Qi65AP{DdkPty30tO6Jz(80J2Qp%!qR4bLfCIsSAVbkI zi?XBy2`Gva0j;BmibMqgF*0fmP*B#dQTy8W`d8cUy}Li|zIX3F@4g4WfZu@m?yg){ z06_pi$_C&$u)>AMaq{)z*^>ofmZF{E0&<)+Z5i1lHd+`dAamW_$nM@8H*%aU-PD2{ z6&tcm7_*z~KxQ#j;g`S#V9{s{8imDRFgP4m6;D*htEu6&7iek_^>j%3dOEtgWJ4O2 zY+$ieSJ#APYO&0k!C;W6b`HzwD`_?i`j91e$9!!K4>UreXyQt1CV;G2Me1-2j% z0T}=l0)!wya5Eq&ktpbEfIkCLK_F3R3>K%Vrc98|2PzN(p@Kx9P)MXQd%toWAPJ}i z6l*86=DHA!K@^dmlu?9T>MXgX#cTg)XtQ}&GEQ~jqQ%-eM#fYVQ!@tBmbKi@-eon% z)ol&e-N%>j=N}Ll6dD#DA=n}mMaRU(#V73EbKu~i!zo8n(=tzGW#{CcK9g5m@?+`w z3uWaMwU_Fo^$nM=G~T|`e7B{w?cV(-9Z#P+S1*JMd2aesD-JIyV0M#N?;X zQ(s&VKzw5<$8WHIxCly@3KEGxV!pT_m3U=G5RfQ}HF|;5I!s8ErU5+(OLWdClH9^A zwc&l#+Pte>b)g}n*GTb&_Eq-pV9EbW_807Lmki($kn-^m1i%Ip57}O|`|0i7k6xcC za^|LTsaqy0*WP1u~)K<89X zx{p_TU8rMWZhX;szFTOtiDhDd^1@SA^S?*pQ*6W*?IRQxp#^eaUtK5s z-e%#3=%_fCzfmI;SQwdwL$Q*vg{Hjn(B z39X*{hdS~U>ZI1ZW_`_P)i2d*0No%)p{R_kOCNUR<_{G`e-O=@Ge+(j=dIO0dckD7 z*<&*46?NkzCrHMMy!rUM$%-k#OmYTV^rDG(tBV5Y0jC}s)&Mu8?8U$>i!E;ab(I0~nT-Ic2hkKkI&K;u}^KVjX zv`6e_9>#6=cGy^#Yh~r^aBlaN#_TiBqeP9uiYEqRqgDfc-IZMLKpwyC?Yw!Sl4_eo zw5O+o=t+-W_5=rmIQ7zXr)8eqlaMvHur`dY| literal 0 HcmV?d00001 diff --git a/var/mongoose/html/img/channels/freeview/price-drop-tv_logo.jpg b/var/mongoose/html/img/channels/freeview/price-drop-tv_logo.jpg new file mode 100644 index 0000000000000000000000000000000000000000..abdd6720dfba65a8553e2288f94d713c7dbaa959 GIT binary patch literal 1560 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 literal 0 HcmV?d00001 diff --git a/var/mongoose/html/img/channels/freeview/smash!-Radio_logo.jpg b/var/mongoose/html/img/channels/freeview/smash!-Radio_logo.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ee2c976d617d25b1b2ab880936d107ab7fcd1413 GIT binary patch literal 2273 zcmbW$XHb({8VB$SI*MH)6hXP-7!qR4-HE>Zizi^OSZ%Y=D7cNgyR9#Kk2P|3b^}7P5U4B!Yy~jeNI2xr0{&4DAt($kj1UnO6WP99#5>YiTdyTU1Syatc*FP{gG(0jfIW_%x=F8VV zzHyh9S5|pz>->$ME(ieqi?zM}1^W+|?6yk?27|&7KV1-^!0ic@g~3&Hgyqca5a)d5 zck4!qAkC8=mAw{K)w5qjo&T*z46R0-Q0M-n{VDtJU{U{c+1j5s|G}xqR6b%I2ad545&iZS-!)=94+O-Rm9rTBat#PHS_x37ju;}|(?wym*l4fAMACfH zv5hECj9V|d>sO^Stu85*);{v*4rNuu{|$Y303EUX2ja&jX2RB#`49xsok$Bq&zNUB z1d6?Lz2rXC#xzUW4mzu}HggoVSQrMG<~nagwB|^C3%1TJ$jqxqw7KMZ=lMOgLPrHY zgwPksEDYbq>vJ#2IY^J58*G2_nUOrCUc*B@y)Rb87PZQ3w=<+Efa zpj`LG#CK@mdnG)cuX2Yb%i0cWR;w>Kt=j2je$`*o9%cmNU)~m#Ku1w_@J^pd;fwL_ zy0=X3ihFg|KCZjr#e?y#`szUCU#**>AKKQoy~!E3<=p&o8(~PF&ZfMOM{fo9K|O@f&8i{wEjJz7zE%F zjqEx9jFKv=xLu--@0f%Mr>k|{hRQ6`-6Ek~!UM(r?A)P?#r2!f(}^iVzOznvYEgZ9 z^~S5VuAY&H4?^o4m|x~|vP!}=+gXpjxZlJEjN;z;`pP7H>cmR2vvryiNJg~sLaWJ} zIPYSul9!DiS5_=i8)9gzA~P+0d%a^H@~tfH7N#`M^H9BCU2wP4Tx;rjRSk?C-+DgF zcD)=pf~0e1$62p}I9x6|g*ww&+}e|mRP&psu1vmoPqJK3Fi}NUhgu5fu!xc-c4M5& z0r3*k8m9&eHezkc+Tz=K;!zmd+Z7I>VY!elHAv~3;%Zc}v1RPl2|POD3&b}z){P;-HYvJCe-uZzBVaAk;C6hoI8;{lxch$V2pO+rUFYtwf)?+B z43%5j3=LmSM#}8117#EM&vrz&Yy{UEIpkj$hk6+>d6`t4rZoZw^BWwzPt(dup=aMD zQ2WAn4L%uM*-Wpi&<{*Y-|y)swfN~+#)pAedE!(Vz_+4X-+V}CX2eAy;$NmdrN9_=RiDBU>OaR2?%>>_6;$Q?G`1p(zcQtv|g&dJyKGAMr-B zTTqJ=L}~U@`Yr08lAokiZ*BkSiSBe9yK3!{|6)V^jB8a8f_I^1jlwQm{iGPu=RHwu zO}Iq2C*WJ(5r-vMmKo0vPR)miZDhv=8fRZ|v0kFghQHj($vWgP;7_31mZGUGMpK#U zC%S(mY6e*)B@2(G#IHPWbY)QT;}o*7aPB_R%KvY5Mi} z0Mr7()>JhG6`Q>$ba|XEy|1#Nw6tGx!}I>T$7qi^cJq7XvFPiHD!9Tt$@Jybg^0l)Y$j+`QX(O z*Sq}`4JdQbA~htR5l*?LwzMi~K4UeTvAm|#ZSzLT)XxP~j0^58jQRaTd3PK74DZZh zy(2uAX?wRQJ~GiIOCUEZ&7blEfzT2VK#`Hph(i(0?&mr1G^ZH-+;h7eB$Qki1t{GQuic-7_IKDiW~tSGi9g$ z%8R3#wS<`>Bc1lW!8q6W#O$9YwLhX;qXh~i6#>zX9Q8eNfl6&|oYrI_PaW;d0f+w% DNuMU` literal 0 HcmV?d00001 diff --git a/var/mongoose/html/img/channels/freeview/smooth-RADIO_logo.jpg b/var/mongoose/html/img/channels/freeview/smooth-RADIO_logo.jpg new file mode 100644 index 0000000000000000000000000000000000000000..18e1bf0304125c96bf65b9be2658ed46fd3bfc7d GIT binary patch literal 2320 zcmbW!XH?T!8VBHiNJ0ojrHY{>G?D5M5<0TN1PG`I(u=4_Z_>-E5mXp@8$m!sKn5@r zK>{cpLT}Oq1i{dYAV{QyWN_Rwd(M8^-S?h*KivDCd*0{#7#|q3z$pV=yeV2(nkZ!~D`N`K0a%!sVa!k#7z_r7v#_%BaImwnv7h1MKFK45Kne>X1O-vz@{%Y~ zSusJubIMY(zbIfZ7^I}CrV3g^UJ---@d*eHhqJS>^K)?UqeTQo(EoEWngC7~Knbt{ zgG2!)P7s(A#2^F6VzWrnf9S=o*oNT&cM5E#q^0Yjk>$Z_|*<97hU z3FQ(|xX8?Hd=n<>!-Eb>%3%@HE^p>F8Qc z^D9nQPakh^&D6}?!qUpx;kKibvx}>npMOALP;f}-!$*%JB7cjDPEPs#Nov~D^o-oR zm-&Ab6c)XzcvDHLs;+tauBDaS*51+C)jc#kGCDT?VPbObGi82ZacOyF_3QS|w_WP@ zz5Rn9E)W3z$vQrN!v4d>dF*0>K)?{#4;P3j=y-!UAy5$oX0D6Iu$w;IqUbOd9_^%@ z@@BZ0qRAHTE#E;_K5@*P#Md9RzhwU%Ed2kH{SEuKYZ71wgO0-ka{^ibwNJ~a;vRZ% zrhhs;M;jl7mvo^LwI))LI}}d_a6gSEBV#g}t-Ynb>O-#R@^*;RqtiW_}C4amJ_ zC^=jxbi{^x=<`QDqqY#Stv+{F#b>s;(T}AJl=Z(6)_YFwf30EwjfQj{f|Dg-Ag=o8 zz<#T69h;?iEf()U@Vrw%59x%{^o-4CEGc&Vt9hgGP^V#Qv~{`ZN)>Wv;pY(2O2fs3 zrT$O!qw{-aa(eB;!o#4$D*d^88zDyIb~Y4@$RdsK+?RB)&6_Adf$irWp86 z2wZD5E7~G|$!Hm%-$NZw;y{yzl~*FS*I-A7ycFvMvJuZJ^ihzpRXZVKMj^Ye!aeKl zC@C|o_n_^ty1s`2#Cg0fBdX`5jHi}%eqWK@h%^jt+zd0jUG=~}LhEqe;t`Ix7u^M+ z9+c*me`%-4pt)E2aRCTqo50h8_$e}HUP}kkJu2|YcgJPD8rmzz$mEHS(Gzx|#=fMX z^-%Fdvf^*U^nKnZ*6VAcFkSXyG{0cDrn_jl-V?Hw`PUM!-U)39PB+U+Q$tb1qBWMmb|05s^dSj1qa=ljs}b zFjb;cbavy&%d31;ppwgIv!M!Q&$b+BF*fN{^vYH#@6PE{O;63_-t#pVK@bp4qeyCqHRs+Sv;^L{^MXd_d``sw0QLzdI|RvEkV zy^YedoNF1BfIhURytk-RylIkho2;{p=t1nSlXupOg(XUN8>A$Rr{0dQA#B#J1DRK1jy%Ss z#lGKoQAlel%V2StPR2aSiP?cPsk04So?!EE*cOQ}xVCwBibu0DzN6CMGu zg?wDMK4H?{-sj!P?dtz6fhQSmWK`N&1;EL?va&P8S6RXpb9zO78*5lDB z{?rPcSD1d+7V77l$DfuQLhJJn%7$xLxl381s_L!`@T@lGeI}N*Y@XqQQB4y3{P?uK zNv~6X&o&Lxt;c>?60c3wcZk5h49@E(J4sk9tFeaVg9~_<`H;+{iSEq9HT7RLwVlk7 zk>K6Z>dSk2b5lYk!CqK6%pOaXJld`~!WS=Ge-`?2kTNHf!0+iq_f+-IQSWj)VLojt z>}xZui7zqpMojn0Q_4qfC*l_17djGB?%Ze$dVz8ns;3Sc3|H3BYS{$->9}%O*s`=; z&}BPBE=^L+k8c>%>kEn`AKb8#FY%r=LuU<5J-ffNIiD2oW4pVsUY*k8qY;76ztz7) z%8=pDVe5=j^niqF9 zkr*46V4X?lT06N<@nZmY%NPJJjyEgnawJV+47t<3MBlfkODF6Z7HciV4IFJZ(#&{_ zZ`300THPQlJo#}!F|Ll5O`uiOFn|UNnoDjBbb>oLxt9U-s4{@fBs!MceXL|iwNZqQ vF~)_jhwWwtE+^As3fXb74B+ifjvECCD# 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 literal 0 HcmV?d00001 diff --git a/var/mongoose/html/img/channels/freeview/the-hits_logo.jpg b/var/mongoose/html/img/channels/freeview/the-hits_logo.jpg new file mode 100644 index 0000000000000000000000000000000000000000..18f0c4c3edb86d4e59e59dc87861dbd86b3a1959 GIT binary patch literal 1971 zcmbW%X*Ane9|!P%B$0%uu|zecVyoQ{J0-P77;9}&w6+OqDH^p5DKo9sQpKPxQ^Xc) z8;Zv>)2dP#?P$kRYf+&^TT7H!>;I(fbDrm%=hZXwz31K+_x|oZ=X3747aRj$1K-%$ zkZb@51OOns27m{EiKVNxxto)#F^&?X5q3V9f{WAE)WRuKV?!e;IFcO^XXk89#Kr03 zRn&3ORR8eM3kf(=oPnMII0;w+NPd0;kiNJtVdDd^Oav|}t8LCN=Hic#ix$VH=9VMnEtp*x*MT(!oq(7$lz_xx$s<_B<4VdZs=9jm z28Kq)mR8m_L|c;GDK~cyPcO1}U{LV)l#tM{*bCISi}4AGKmK(2O8V7n8F~3X7ZeuV zymgyiQCU@8!>FxmZn@vu*8Y!Jrik#21FS7p+miD(~|AGD2H36WZ5Z>iMMF0Z8?I$=j zC*udEpHJN?w;)|3DTQ$B3FCz_ALk-KAf;$ud5AENp@4vo7zmhS!crC75B|6Z0;NZz z_BJ|aiQM4y{q0HGOce+Sv|2-%wo7d?AK!f4s;WQKKwEe|bMWcgZTGi~+n1Q;4eB7U zFetpoB|I)mI%*CAn)hfkOwWn>2arHBdlUb`>2LR5yOTA_q-Apsb}%uURo6#6)3gtmdm)4Y0KtkbZfAg$*3a$xx#x3t5B zHWOE?ZsnXc(sN|F+<&Q&G8C*;C~CI?Tqlk&FO-Tm-My%vQ%g3z%&|C8GjGT;e9;=6 zBFP-3N=E5UYB-N|h00P?550};#T&7nITdw;73LJ%ORv<_y&}Jh^T-Vy@*$odOBgZ< zIMVBM?BHd(Kf9CAV_aCA!fjiEE~mDi?R#!=$H}qa$$M;DMFPF=9OIAW*c#s*S1rR= z4akL2xbfa_yHo<)ISo7^KDFv?Y{(#NaV(gSUji4WTTljjbk&-N(D)99UvdQSP`EBfoOdcO^$QgDDmLU3}EO!S{;Aj)PQ_ zqY0g(wVuHN#PcyGR0L*8V#_`$5I)E!5i)X8*csU`JT>O}X{Ni*=mC_N(U&q66`MT& z%A#1K>5Q3kZ}evE`v7lNt>c2C$K{+{7Vw(ZQoJA;gDqt7rzdmT=i0Aj!{i02k zEcCw+Fw@}$&54XLqdzzqqD7izY}nTx3-Q2QEBT=^H7jwhtVUQklw$v*W8t9Da+ze- zcLtb!Cta08dU+m+cW9N?QAu;BE%_^w>iZEd6ep#bWk=>uCz2s z%4MDQy&PYe0KmIdPEZfF!UkvpKK;q%GY(X&gFoLBd|jbv;Gdjfv7OP7O>aA+o4=5~ zStvqxvf^E=x#{3!%c_3Ym6_`3l9blL54IIvbIy!Qs*FWoQFZ=G9f{PoC3ouQ_F$69 zi1j(rbaQA=FNI8DXR0Ns#rvtH4fHZ>-Fr{68XZ6YMNQx5bnsrMCkSNFGd!^2gjr4A zhjPb&u=NxKIBvAZzWyL^B9gXR00L|VJrh1Q#C`?^0rjRYQ`qd^T!LtC3Rs`kJLjy$ zy)=I>?kS`kkY9kn4>=r0v0rOsZvT!jhn}H+I7ql*vfZj^U1rX?twxZBF1-N)SY>)w V+{rB_bN0+S#wJ6B9`phn{};#xc2WQU literal 0 HcmV?d00001 diff --git a/var/mongoose/html/img/channels/heat.jpg b/var/mongoose/html/img/channels/heat.jpg new file mode 120000 index 0000000..8a42da6 --- /dev/null +++ b/var/mongoose/html/img/channels/heat.jpg @@ -0,0 +1 @@ +freeview/heat-Radio_logo.jpg \ No newline at end of file diff --git a/var/mongoose/html/img/channels/mk b/var/mongoose/html/img/channels/mk new file mode 100755 index 0000000..7ccb14f --- /dev/null +++ b/var/mongoose/html/img/channels/mk @@ -0,0 +1,113 @@ +#!/bin/sh + +rm -f *.jpg *.png *.gif + +mk() +{ + img=$1 + chan=$2 + loc=${3:-freeview} + typ=`echo $1 | awk -F. '{print $NF}'` + [ -n "$chan" ] && ln -s $loc/"$img" "$chan.$typ" + [ "$typ" != "jpg" ] && ln -s "$chan.$typ" "$chan.jpg" + + echo "$img" +} + +mk BBC-one_logo.jpg "BBC ONE" +mk BBC-two_logo.jpg "BBC TWO" +mk BBC-three_logo.jpg "BBC THREE" +mk BBC-FOUR_logo.jpg "BBC FOUR" +mk BBC-1-HD_logo.jpg "BBC One HD" +mk BBC-HD_logo.jpg "BBC HD" +mk BBC-NEWS_logo.jpg "BBC NEWS" +mk BBC-PARLIAMENT_logo.jpg "BBC Parliament" +mk BBC-RED-BUTTON_logo.jpg "301" +mk CBeebies_logo.jpg "CBeebies" +mk cbbc_logo.jpg "CBBC Channel" + +mk itv-1_logo.jpg "ITV1" +mk ITV1-1_logo.jpg "ITV1 +1" +mk itv-2_logo.jpg "ITV2" +mk itv-2-1_logo.jpg "ITV2 +1" +mk itv-3_logo.jpg "ITV3" +mk itv-4_logo.jpg "ITV4" +mk Citv_logo.jpg "CITV" +mk ITV1-HD_logo.jpg "ITV1 HD" + +mk channel-4_logo.jpg "Channel 4" +mk channel-4-1_logo.jpg "Channel 4+1" +mk MORE-4_logo.jpg "More 4" +mk E4_logo.jpg "E4" +mk E4-1_logo.jpg "E4+1" +mk FILM-4_logo.jpg "Film4" +mk 4-MUSIC_logo.jpg "4Music" +mk 4HD_logo.jpg "Channel 4 HD" +mk S4-C_logo.jpg "S4C" +mk S4C-Clirlun_logo.jpg "Clirlun" + +mk five_logo.jpg "Channel 5" +mk Five_logo.jpg "5*" +mk 5-USA_logo.jpg "5 USA" + +mk Big-Deal_logo.jpg "Big Deal" +mk Challenge-TV_logo.jpg "Challenge" +mk Create-and-Craft_logo.jpg "Create & Craft" +mk Dave_logo.jpg "Dave" +mk Dave-Ja-Vu_logo.jpg "Dave ja vu" + +mk Pick-TV_logo.jpg "Pick TV" +mk Pick-TV_logo.jpg "Pick TV+1" +mk Yesterday_logo.jpg "Yesterday" +mk QVC_logo.jpg "QVC" +mk QVC-Beauty_logo.jpg "QVC Beauty" +mk VIVA_logo.jpg "VIVA" +mk ideal-WORLD_logo.jpg "Ideal World" +mk bid-tv_logo.jpg "bid tv" +mk price-drop-tv_logo.jpg "price-drop tv" +mk Quest_logo.jpg "QUEST" +mk Daystar_logo.jpg "Daystar" +mk SKY-NEWS_logo.jpg "Sky News" +mk Russia-Today_logo.jpg "Russia Today" +mk community-channel_logo.jpg "COMMUNITY" +mk Teletext-holidays_logo.jpg "Teletext Hols" +mk skytext_logo.jpg "Sky Text" +mk alsmallchannel_logo.jpg +mk teleg_logo.jpg + +mk BBC-Radio-1_logo.jpg "BBC Radio 1" +mk BBC-Radio-2_logo.jpg "BBC Radio 2" +mk BBC-RADIO-3_logo.jpg "BBC Radio 3" +mk BBC-RADIO-4_logo.jpg "BBC Radio 4" +mk BBC-RADIO-5-live-sports_logo.jpg "BBC R5SX" +mk BBC-RADIO-5-live_logo.jpg "BBC R5L" +mk BBC-RADIO-6-music_logo.jpg "BBC 6 Music" +mk BBC-RADIO-A_logo.jpg "BBC Asian Net." +mk BBC-Radio-1Xtra_logo.jpg "BBC R1X" +mk BBC-Radio-4-Extra_logo.jpg "BBC Radio 4 Ex" +mk BBC-WORLD-SERVICE_logo.jpg "BBC World Sv." + +mk Absolute_logo.jpg "Absolute Radio" +mk Capital-Radio_logo.jpg "Capital FM" +mk KERRAND!-Radio_logo.jpg "Kerrang!" +mk KISS-Radio_logo.jpg "Kiss" +mk heart-Radio_logo.jpg "Heart" +mk heat-Radio_logo.jpg "heat" +mk magic-Radio_logo.jpg "Magic" +mk smash!-Radio_logo.jpg "Smash Hits!" +mk smooth-RADIO_logo.jpg "SMOOTH RADIO" +mk talkSPORT_logo.jpg "talkSPORT" +mk the-hits_logo.jpg "The Hits Radio" +mk Premier-CHRISTIAN-RADIO_logo.jpg "Premier Radio" +mk Q-Radio_logo.jpg "Q" +mk U105.8_logo.jpg "U105" + +mk logo_tn_tvx.jpg "Television X" +mk logo_tn_gems.gif "Gems TV" + +mk harmonyOne_88X150_SkySportsOne.jpg "Sky Sports 1" cam +mk harmonyOne_88X150_SkySportsTwo.jpg "Sky Sports 2" cam +mk rocks_and_co.jpg "Rocks & Co 1" cam +mk espn.jpg "ESPN" cam +mk home_uktv.jpg "Home" cam + diff --git a/var/mongoose/html/img/channels/price-drop tv.jpg b/var/mongoose/html/img/channels/price-drop tv.jpg new file mode 120000 index 0000000..478017c --- /dev/null +++ b/var/mongoose/html/img/channels/price-drop tv.jpg @@ -0,0 +1 @@ +freeview/price-drop-tv_logo.jpg \ No newline at end of file diff --git a/var/mongoose/html/img/channels/talkSPORT.jpg b/var/mongoose/html/img/channels/talkSPORT.jpg new file mode 120000 index 0000000..a264eb9 --- /dev/null +++ b/var/mongoose/html/img/channels/talkSPORT.jpg @@ -0,0 +1 @@ +freeview/talkSPORT_logo.jpg \ No newline at end of file diff --git a/var/mongoose/html/index.shtml b/var/mongoose/html/index.shtml index f986080..102919b 100644 --- a/var/mongoose/html/index.shtml +++ b/var/mongoose/html/index.shtml @@ -83,5 +83,32 @@ $(document).ready(function() { + + + + diff --git a/var/mongoose/html/jimref.html b/var/mongoose/html/jimref.html new file mode 100644 index 0000000..fbe5fbd --- /dev/null +++ b/var/mongoose/html/jimref.html @@ -0,0 +1,6984 @@ + + + + + +Jim Tcl(n) + + + + + +
+
+

SYNOPSIS

+
+
+
+
cc <source> -ljim
+
+

or

+
+
+
jimsh [<scriptfile>]
+jimsh -e '<immediate-script>'
+jimsh --version
+
+
Quick Index
+
+
+
+

INTRODUCTION

+
+

Jim is a reimplementation of Tcl, combining some features from +earlier, smaller versions of Tcl (6.x) as well as more modern +features from later versions of Tcl (7.x, 8.x). It also has some some +entirely new features not available in any version of Tcl.

+

This version is about double the size of "tinytcl" (6.8), depending upon +the features selected, but is significantly faster and has many new features.

+

Note that most of this man page is the original 6.8 Tcl man page, with +changes made for differences with Jim.

+

The major differences with Tcl 8.5/8.6 are:

+
    +
  1. +

    +Object-based I/O (aio), but with a Tcl-compatibility layer +

    +
  2. +
  3. +

    +I/O: Support for sockets and pipes including udp, unix domain sockets and IPv6 +

    +
  4. +
  5. +

    +Integers are 64bit +

    +
  6. +
  7. +

    +Support for references (ref/getref/setref) and garbage collection +

    +
  8. +
  9. +

    +Builtin dictionary type (dict) with some limitations compared to Tcl 8.6 +

    +
  10. +
  11. +

    +env command to access environment variables +

    +
  12. +
  13. +

    +os.fork, os.wait, os.uptime, rand +

    +
  14. +
  15. +

    +Much better error reporting. info stacktrace as a replacement for errorInfo, errorCode +

    +
  16. +
  17. +

    +Support for "static" variables in procedures +

    +
  18. +
  19. +

    +Namespaces are not support +

    +
  20. +
  21. +

    +Variable traces are not supported +

    +
  22. +
  23. +

    +Direct command line editing rather than the history command +

    +
  24. +
  25. +

    +Expression shorthand syntax: $(…) +

    +
  26. +
  27. +

    +The binary command is not supported +

    +
  28. +
+
+
+
+

RECENT CHANGES

+
+
+

Changes between 0.70 and 0.71

+
    +
  1. +

    +Allow args to be renamed in procs +

    +
  2. +
  3. +

    +Add $(…) shorthand syntax for expressions +

    +
  4. +
  5. +

    +Add automatic reference variables in procs with &var syntax +

    +
  6. +
  7. +

    +Support jimsh --version +

    +
  8. +
  9. +

    +Additional variables in tcl_platform() +

    +
  10. +
  11. +

    +local procs now push existing commands and upcall can call them +

    +
  12. +
+
+
+

Changes between 0.63 and 0.70

+
    +
  1. +

    +platform_tcl() settings are now automatically determined +

    +
  2. +
  3. +

    +Add aio $handle filename +

    +
  4. +
  5. +

    +Add info channels +

    +
  6. +
  7. +

    +The bio extension is gone. Now aio supports copyto. +

    +
  8. +
  9. +

    +Add exists command +

    +
  10. +
  11. +

    +Add the pure-Tcl oo extension +

    +
  12. +
  13. +

    +The exec command now only uses vfork(), not fork() +

    +
  14. +
  15. +

    +Unit test framework is less verbose and more Tcl-compatible +

    +
  16. +
  17. +

    +Optional UTF-8 support +

    +
  18. +
  19. +

    +Optional built-in regexp engines for better Tcl compatibility and UTF-8 support +

    +
  20. +
  21. +

    +Command line editing in interactive mode, e.g. jimsh +

    +
  22. +
+
+
+
+
+

TCL INTRODUCTION

+
+

Tcl stands for tool command language and is pronounced tickle. +It is actually two things: a language and a library.

+

First, Tcl is a simple textual language, intended primarily for +issuing commands to interactive programs such as text editors, +debuggers, illustrators, and shells. It has a simple syntax and is also +programmable, so Tcl users can write command procedures to provide more +powerful commands than those in the built-in set.

+

Second, Tcl is a library package that can be embedded in application +programs. The Tcl library consists of a parser for the Tcl language, +routines to implement the Tcl built-in commands, and procedures that +allow each application to extend Tcl with additional commands specific +to that application. The application program generates Tcl commands and +passes them to the Tcl parser for execution. Commands may be generated +by reading characters from an input source, or by associating command +strings with elements of the application’s user interface, such as menu +entries, buttons, or keystrokes.

+

When the Tcl library receives commands it parses them into component +fields and executes built-in commands directly. For commands implemented +by the application, Tcl calls back to the application to execute the +commands. In many cases commands will invoke recursive invocations of the +Tcl interpreter by passing in additional strings to execute (procedures, +looping commands, and conditional commands all work in this way).

+

An application program gains three advantages by using Tcl for its command +language. First, Tcl provides a standard syntax: once users know Tcl, +they will be able to issue commands easily to any Tcl-based application. +Second, Tcl provides programmability. All a Tcl application needs +to do is to implement a few application-specific low-level commands. +Tcl provides many utility commands plus a general programming interface +for building up complex command procedures. By using Tcl, applications +need not re-implement these features.

+

Third, Tcl can be used as a common language for communicating between +applications. Inter-application communication is not built into the +Tcl core described here, but various add-on libraries, such as the Tk +toolkit, allow applications to issue commands to each other. This makes +it possible for applications to work together in much more powerful ways +than was previously possible.

+

Fourth, Jim Tcl includes a command processor, jimsh, which can be +used to run standalone Tcl scripts, or to run Tcl commands interactively.

+

This manual page focuses primarily on the Tcl language. It describes +the language syntax and the built-in commands that will be available +in any application based on Tcl. The individual library procedures are +described in more detail in separate manual pages, one per procedure.

+
+
+
+

JIMSH COMMAND INTERPRETER

+
+

A simple, but powerful command processor, jimsh, is part of Jim Tcl. +It may be invoked in interactive mode as:

+
+
+
jimsh
+
+

or to process the Tcl script in a file with:

+
+
+
jimsh filename
+
+

It may also be invoked to execute an immediate script with:

+
+
+
jimsh -e "script"
+
+
+

Interactive Mode

+

Interactive mode reads Tcl commands from standard input, evaluates +those commands and prints the results.

+
+
+
$ jimsh
+Welcome to Jim version 0.71, Copyright (c) 2005-8 Salvatore Sanfilippo
+. info version
+0.71
+. lsort [info commands p*]
+package parray pid popen proc puts pwd
+. foreach i {a b c} {
+{> puts $i
+{> }
+a
+b
+c
+. bad
+invalid command name "bad"
+[error] . exit
+$
+
+

If jimsh is configured with line editing (it is by default) and a VT-100-compatible +terminal is detected, Emacs-style line editing commands are available, including: +arrow keys, ^W to erase a word, ^U to erase the line, ^R for reverse incremental search +in history. Additionally, the h command may be used to display the command history.

+

Command line history is automatically saved and loaded from ~/.jim_history

+

In interactive mode, jimsh automatically runs the script ~/.jimrc at startup +if it exists.

+
+
+
+
+

INTERPRETERS

+
+

The central data structure in Tcl is an interpreter (C type Jim_Interp). +An interpreter consists of a set of command bindings, a set of variable +values, and a few other miscellaneous pieces of state. Each Tcl command +is interpreted in the context of a particular interpreter.

+

Some Tcl-based applications will maintain multiple interpreters +simultaneously, each associated with a different widget or portion of +the application. Interpreters are relatively lightweight structures. +They can be created and deleted quickly, so application programmers should +feel free to use multiple interpreters if that simplifies the application.

+
+
+
+

DATA TYPES

+
+

Tcl supports only one type of data: strings. All commands, all arguments +to commands, all command results, and all variable values are strings.

+

Where commands require numeric arguments or return numeric results, +the arguments and results are passed as strings. Many commands expect +their string arguments to have certain formats, but this interpretation +is up to the individual commands. For example, arguments often contain +Tcl command strings, which may get executed as part of the commands. +The easiest way to understand the Tcl interpreter is to remember that +everything is just an operation on a string. In many cases Tcl constructs +will look similar to more structured constructs from other languages. +However, the Tcl constructs are not structured at all; they are just +strings of characters, and this gives them a different behaviour than +the structures they may look like.

+

Although the exact interpretation of a Tcl string depends on who is doing +the interpretation, there are three common forms that strings take: +commands, expressions, and lists. The major sections below discuss +these three forms in more detail.

+
+
+
+

BASIC COMMAND SYNTAX

+
+

The Tcl language has syntactic similarities to both the Unix shells +and Lisp. However, the interpretation of commands is different +in Tcl than in either of those other two systems. +A Tcl command string consists of one or more commands separated +by newline characters or semi-colons. +Each command consists of a collection of fields separated by +white space (spaces or tabs). +The first field must be the name of a command, and the +additional fields, if any, are arguments that will be passed to +that command. For example, the command:

+
+
+
set a 22
+
+

has three fields: the first, set, is the name of a Tcl command, and +the last two, a and 22, will be passed as arguments to +the set command. The command name may refer either to a built-in +Tcl command, an application-specific command bound in with the library +procedure Jim_CreateCommand, or a command procedure defined with the +proc built-in command.

+

Arguments are passed literally as text strings. Individual commands may +interpret those strings in any fashion they wish. The set command, +for example, will treat its first argument as the name of a variable +and its second argument as a string value to assign to that variable. +For other commands arguments may be interpreted as integers, lists, +file names, or Tcl commands.

+

Command names should normally be typed completely (e.g. no abbreviations). +However, if the Tcl interpreter cannot locate a command it invokes a +special command named unknown which attempts to find or create the +command.

+

For example, at many sites unknown will search through library +directories for the desired command and create it as a Tcl procedure if +it is found. The unknown command often provides automatic completion +of abbreviated commands, but usually only for commands that were typed +interactively.

+

It’s probably a bad idea to use abbreviations in command scripts and +other forms that will be re-used over time: changes to the command set +may cause abbreviations to become ambiguous, resulting in scripts that +no longer work.

+
+
+
+

COMMENTS

+
+

If the first non-blank character in a command is #, then everything +from the # up through the next newline character is treated as +a comment and ignored. When comments are embedded inside nested +commands (e.g. fields enclosed in braces) they must have properly-matched +braces (this is necessary because when Tcl parses the top-level command +it doesn’t yet know that the nested field will be used as a command so +it cannot process the nested comment character as a comment).

+
+
+
+

GROUPING ARGUMENTS WITH DOUBLE-QUOTES

+
+

Normally each argument field ends at the next white space, but +double-quotes may be used to create arguments with embedded space.

+

If an argument field begins with a double-quote, then the argument isn’t +terminated by white space (including newlines) or a semi-colon (see below +for information on semi-colons); instead it ends at the next double-quote +character. The double-quotes are not included in the resulting argument. +For example, the command

+
+
+
set a "This is a single argument"
+
+

will pass two arguments to set: a and This is a single argument.

+

Within double-quotes, command substitutions, variable substitutions, +and backslash substitutions still occur, as described below. If the +first character of a command field is not a quote, then quotes receive +no special interpretation in the parsing of that field.

+
+
+
+

GROUPING ARGUMENTS WITH BRACES

+
+

Curly braces may also be used for grouping arguments. They are similar +to quotes except for two differences. First, they nest; this makes them +easier to use for complicated arguments like nested Tcl command strings. +Second, the substitutions described below for commands, variables, and +backslashes do not occur in arguments enclosed in braces, so braces +can be used to prevent substitutions where they are undesirable.

+

If an argument field begins with a left brace, then the argument ends +at the matching right brace. Tcl will strip off the outermost layer +of braces and pass the information between the braces to the command +without any further modification. For example, in the command

+
+
+
set a {xyz a {b c d}}
+
+

the set command will receive two arguments: a +and xyz a {b c d}.

+

When braces or quotes are in effect, the matching brace or quote need +not be on the same line as the starting quote or brace; in this case +the newline will be included in the argument field along with any other +characters up to the matching brace or quote. For example, the eval +command takes one argument, which is a command string; eval invokes +the Tcl interpreter to execute the command string. The command

+
+
+
eval {
+  set a 22
+  set b 33
+}
+
+

will assign the value 22 to a and 33 to b.

+

If the first character of a command field is not a left +brace, then neither left nor right +braces in the field will be treated specially (except as part of +variable substitution; see below).

+
+
+
+

COMMAND SUBSTITUTION WITH BRACKETS

+
+

If an open bracket occurs in a field of a command, then command +substitution occurs (except for fields enclosed in braces). All of the +text up to the matching close bracket is treated as a Tcl command and +executed immediately. Then the result of that command is substituted +for the bracketed text. For example, consider the command

+
+
+
set a [set b]
+
+

When the set command has only a single argument, it is the name of a +variable and set returns the contents of that variable. In this case, +if variable b has the value foo, then the command above is equivalent +to the command

+
+
+
set a foo
+
+

Brackets can be used in more complex ways. For example, if the variable +b has the value foo and the variable c has the value gorp, +then the command

+
+
+
set a xyz[set b].[set c]
+
+

is equivalent to the command

+
+
+
set a xyzfoo.gorp
+
+

A bracketed command may contain multiple commands separated by newlines +or semi-colons in the usual fashion. In this case the value of the last +command is used for substitution. For example, the command

+
+
+
set a x[set b 22
+expr $b+2]x
+
+

is equivalent to the command

+
+
+
set a x24x
+
+

If a field is enclosed in braces then the brackets and the characters +between them are not interpreted specially; they are passed through to +the argument verbatim.

+
+
+
+

VARIABLE SUBSTITUTION WITH $

+
+

The dollar sign ($) may be used as a special shorthand form for +substituting variable values. If $ appears in an argument that isn’t +enclosed in braces then variable substitution will occur. The characters +after the $, up to the first character that isn’t a number, letter, +or underscore, are taken as a variable name and the string value of that +variable is substituted for the name.

+

For example, if variable foo has the value test, then the command

+
+
+
set a $foo.c
+
+

is equivalent to the command

+
+
+
set a test.c
+
+

There are two special forms for variable substitution. If the next +character after the name of the variable is an open parenthesis, then +the variable is assumed to be an array name, and all of the characters +between the open parenthesis and the next close parenthesis are taken as +an index into the array. Command substitutions and variable substitutions +are performed on the information between the parentheses before it is +used as an index.

+

For example, if the variable x is an array with one element named +first and value 87 and another element named 14 and value more, +then the command

+
+
+
set a xyz$x(first)zyx
+
+

is equivalent to the command

+
+
+
set a xyz87zyx
+
+

If the variable index has the value 14, then the command

+
+
+
set a xyz$x($index)zyx
+
+

is equivalent to the command

+
+
+
set a xyzmorezyx
+
+

For more information on arrays, see VARIABLES AND ARRAYS below.

+

The second special form for variables occurs when the dollar sign is +followed by an open curly brace. In this case the variable name consists +of all the characters up to the next curly brace.

+

Array references are not possible in this form: the name between braces +is assumed to refer to a scalar variable. For example, if variable +foo has the value test, then the command

+
+
+
set a abc${foo}bar
+
+

is equivalent to the command

+
+
+
set a abctestbar
+
+

Variable substitution does not occur in arguments that are enclosed in +braces: the dollar sign and variable name are passed through to the +argument verbatim.

+

The dollar sign abbreviation is simply a shorthand form. $a is +completely equivalent to [set a]; it is provided as a convenience +to reduce typing.

+
+
+
+

SEPARATING COMMANDS WITH SEMI-COLONS

+
+

Normally, each command occupies one line (the command is terminated by a +newline character). However, semi-colon (;) is treated as a command +separator character; multiple commands may be placed on one line by +separating them with a semi-colon. Semi-colons are not treated as +command separators if they appear within curly braces or double-quotes.

+
+
+
+

BACKSLASH SUBSTITUTION

+
+

Backslashes may be used to insert non-printing characters into command +fields and also to insert special characters like braces and brackets +into fields without them being interpreted specially as described above.

+

The backslash sequences understood by the Tcl interpreter are +listed below. In each case, the backslash +sequence is replaced by the given character:

+
+
+\b +
+
+

+ Backspace (0x8) +

+
+
+\f +
+
+

+ Form feed (0xc) +

+
+
+\n +
+
+

+ Newline (0xa) +

+
+
+\r +
+
+

+ Carriage-return (0xd). +

+
+
+\t +
+
+

+ Tab (0x9). +

+
+
+\v +
+
+

+ Vertical tab (0xb). +

+
+
+\{ +
+
+

+ Left brace ({). +

+
+
+\} +
+
+

+ Right brace (}). +

+
+
+\[ +
+
+

+ Open bracket ([). +

+
+
+\] +
+
+

+ Close bracket (]). +

+
+
+\$ +
+
+

+ Dollar sign ($). +

+
+
+\<space> +
+
+

+ Space ( ): doesn’t terminate argument. +

+
+
+\; +
+
+

+ Semi-colon: doesn’t terminate command. +

+
+
+\" +
+
+

+ Double-quote. +

+
+
+\<newline> +
+
+

+ Nothing: this joins two lines together + into a single line. This backslash feature is unique in that + it will be applied even when the sequence occurs within braces. +

+
+
+\\ +
+
+

+ Backslash (\). +

+
+
+\ddd +
+
+

+ The digits ddd (one, two, or three of them) give the octal value of + the character. Note that Jim supports null characters in strings. +

+
+
+\unnnn +
+
+

+ The hex digits nnnn (between one and four of them) give a unicode codepoint. + The UTF-8 encoding of the codepoint is inserted. +

+
+
+

For example, in the command

+
+
+
set a \{x\[\ yz\141
+
+

the second argument to set will be {x[ yza.

+

If a backslash is followed by something other than one of the options +described above, then the backslash is transmitted to the argument +field without any special processing, and the Tcl scanner continues +normal processing with the next character. For example, in the +command

+
+
+
set \*a \\\{foo
+
+

The first argument to set will be \*a and the second +argument will be \{foo.

+

If an argument is enclosed in braces, then backslash sequences inside +the argument are parsed but no substitution occurs (except for +backslash-newline): the backslash +sequence is passed through to the argument as is, without making +any special interpretation of the characters in the backslash sequence. +In particular, backslashed braces are not counted in locating the +matching right brace that terminates the argument. +For example, in the +command

+
+
+
set a {\{abc}
+
+

the second argument to set will be \{abc.

+

This backslash mechanism is not sufficient to generate absolutely +any argument structure; it only covers the +most common cases. To produce particularly complicated arguments +it is probably easiest to use the format command along with +command substitution.

+
+
+
+

STRING AND LIST INDEX SPECIFICATIONS

+
+

Many string and list commands take one or more index parameters which +specify a position in the string relative to the start or end of the string/list.

+

The index may be one of the following forms:

+
+
+integer +
+
+

+ A simple integer, where 0 refers to the first element of the string + or list. +

+
+
+integer+integer or +
+
+integer-integer +
+
+

+ The sum or difference of the two integers. e.g. 2+3 refers to the 5th element. + This is useful when used with (e.g.) $i+1 rather than the more verbose + [expr {$i+1}] +

+
+
+end +
+
+

+ The last element of the string or list. +

+
+
+end-integer +
+
+

+ The nth-from-last element of the string or list. +

+
+
+
+
+
+

COMMAND SUMMARY

+
+
    +
  1. +

    +A command is just a string. +

    +
  2. +
  3. +

    +Within a string commands are separated by newlines or semi-colons + (unless the newline or semi-colon is within braces or brackets + or is backslashed). +

    +
  4. +
  5. +

    +A command consists of fields. The first field is the name of the command. + The other fields are strings that are passed to that command as arguments. +

    +
  6. +
  7. +

    +Fields are normally separated by white space. +

    +
  8. +
  9. +

    +Double-quotes allow white space and semi-colons to appear within + a single argument. + Command substitution, variable substitution, and backslash substitution + still occur inside quotes. +

    +
  10. +
  11. +

    +Braces defer interpretation of special characters. + If a field begins with a left brace, then it consists of everything + between the left brace and the matching right brace. The + braces themselves are not included in the argument. + No further processing is done on the information between the braces + except that backslash-newline sequences are eliminated. +

    +
  12. +
  13. +

    +If a field doesn’t begin with a brace then backslash, + variable, and command substitution are done on the field. Only a + single level of processing is done: the results of one substitution + are not scanned again for further substitutions or any other + special treatment. Substitution can + occur on any field of a command, including the command name + as well as the arguments. +

    +
  14. +
  15. +

    +If the first non-blank character of a command is a #, everything + from the # up through the next newline is treated as a comment + and ignored. +

    +
  16. +
+
+
+
+

EXPRESSIONS

+
+

The second major interpretation applied to strings in Tcl is +as expressions. Several commands, such as expr, for, +and if, treat one or more of their arguments as expressions +and call the Tcl expression processors (Jim_ExprLong, +Jim_ExprBoolean, etc.) to evaluate them.

+

The operators permitted in Tcl expressions are a subset of +the operators permitted in C expressions, and they have the +same meaning and precedence as the corresponding C operators. +Expressions almost always yield numeric results +(integer or floating-point values). +For example, the expression

+
+
+
8.2 + 6
+
+

evaluates to 14.2.

+

Tcl expressions differ from C expressions in the way that +operands are specified, and in that Tcl expressions support +non-numeric operands and string comparisons.

+

A Tcl expression consists of a combination of operands, operators, +and parentheses.

+

White space may be used between the operands and operators and +parentheses; it is ignored by the expression processor. +Where possible, operands are interpreted as integer values.

+

Integer values may be specified in decimal (the normal case), in octal (if the +first character of the operand is 0), or in hexadecimal (if the first +two characters of the operand are 0x).

+

If an operand does not have one of the integer formats given +above, then it is treated as a floating-point number if that is +possible. Floating-point numbers may be specified in any of the +ways accepted by an ANSI-compliant C compiler (except that the +f, F, l, and L suffixes will not be permitted in +most installations). For example, all of the +following are valid floating-point numbers: 2.1, 3., 6e4, 7.91e+16.

+

If no numeric interpretation is possible, then an operand is left +as a string (and only a limited set of operators may be applied to +it).

+
    +
  1. +

    +Operands may be specified in any of the following ways: +

    +
  2. +
  3. +

    +As a numeric value, either integer or floating-point. +

    +
  4. +
  5. +

    +As a Tcl variable, using standard $ notation. +The variable’s value will be used as the operand. +

    +
  6. +
  7. +

    +As a string enclosed in double-quotes. +The expression parser will perform backslash, variable, and +command substitutions on the information between the quotes, +and use the resulting value as the operand +

    +
  8. +
  9. +

    +As a string enclosed in braces. +The characters between the open brace and matching close brace +will be used as the operand without any substitutions. +

    +
  10. +
  11. +

    +As a Tcl command enclosed in brackets. +The command will be executed and its result will be used as +the operand. +

    +
  12. +
+

Where substitutions occur above (e.g. inside quoted strings), they +are performed by the expression processor. +However, an additional layer of substitution may already have +been performed by the command parser before the expression +processor was called.

+

As discussed below, it is usually best to enclose expressions +in braces to prevent the command parser from performing substitutions +on the contents.

+

For some examples of simple expressions, suppose the variable a has +the value 3 and the variable b has the value 6. Then the expression +on the left side of each of the lines below will evaluate to the value +on the right side of the line:

+
+
+
$a + 3.1                6.1
+2 + "$a.$b"             5.6
+4*[llength "6 2"]       8
+{word one} < "word $a"  0
+
+

The valid operators are listed below, grouped in decreasing order +of precedence:

+
+
+int() double() round() abs() +
+
+

+ Unary functions. + int() converts the numeric argument to an integer by truncating down. + double() converts the numeric argument to floating point. + round() converts the numeric argument to the closest integer value. + abs() takes the absolute value of the numeric argument. +

+
+
+sin() cos() tan() asin() acos() atan() sinh() cosh() tanh() ceil() floor() exp() log() log10() sqrt() +
+
+

+ Unary math functions. + If Jim is compiled with math support, these functions are available. +

+
+
+- + ~ ! +
+
+

+ Unary minus, unary plus, bit-wise NOT, logical NOT. None of these operands + may be applied to string operands, and bit-wise NOT may be + applied only to integers. +

+
+
+** +
+
+

+ Power. e.g. pow(). If Jim is compiled with math support, supports doubles and + integers. Otherwise supports integers only. +

+
+
+* / % +
+
+

+ Multiply, divide, remainder. None of these operands may be + applied to string operands, and remainder may be applied only + to integers. +

+
+
++ - +
+
+

+ Add and subtract. Valid for any numeric operands. +

+
+
+<< >> <<< >>> +
+
+

+ Left and right shift, left and right rotate. Valid for integer operands only. +

+
+
+< > <= >= +
+
+

+ Boolean less, greater, less than or equal, and greater than or equal. + Each operator produces 1 if the condition is true, 0 otherwise. + These operators may be applied to strings as well as numeric operands, + in which case string comparison is used. +

+
+
+== != +
+
+

+ Boolean equal and not equal. Each operator produces a zero/one result. + Valid for all operand types. Note that values will be converted to integers + if possible, then floating point types, and finally strings will be compared. + It is recommended that eq and ne should be used for string comparison. +

+
+
+eq ne +
+
+

+ String equal and not equal. Uses the string value directly without + attempting to convert to a number first. +

+
+
+in ni +
+
+

+ String in list and not in list. For in, result is 1 if the left operand (as a string) + is contained in the right operand (as a list), or 0 otherwise. The result for + {$a ni $list} is equivalent to {!($a in $list)}. +

+
+
+& +
+
+

+ Bit-wise AND. Valid for integer operands only. +

+
+
+| +
+
+

+ Bit-wise OR. Valid for integer operands only. +

+
+
+^ +
+
+

+ Bit-wise exclusive OR. Valid for integer operands only. +

+
+
+&& +
+
+

+ Logical AND. Produces a 1 result if both operands are non-zero, 0 otherwise. + Valid for numeric operands only (integers or floating-point). +

+
+
+|| +
+
+

+ Logical OR. Produces a 0 result if both operands are zero, 1 otherwise. + Valid for numeric operands only (integers or floating-point). +

+
+
+x ? y : z +
+
+

+ If-then-else, as in C. If x + evaluates to non-zero, then the result is the value of y. + Otherwise the result is the value of z. + The x operand must have a numeric value, while y and z can + be of any type. +

+
+
+

See the C manual for more details on the results +produced by each operator. +All of the binary operators group left-to-right within the same +precedence level. For example, the expression

+
+
+
4*2 < 7
+
+

evaluates to 0.

+

The &&, ||, and ?: operators have lazy +evaluation, just as in C, +which means that operands are not evaluated if they are +not needed to determine the outcome. For example, in

+
+
+
$v ? [a] : [b]
+
+

only one of [a] or [b] will actually be evaluated, +depending on the value of $v.

+

All internal computations involving integers are done with the C +type long long if available, or long otherwise, and all internal +computations involving floating-point are done with the C type +double.

+

When converting a string to floating-point, exponent overflow is +detected and results in a Tcl error. +For conversion to integer from string, detection of overflow depends +on the behaviour of some routines in the local C library, so it should +be regarded as unreliable. +In any case, overflow and underflow are generally not detected +reliably for intermediate results.

+

Conversion among internal representations for integer, floating-point, +and string operands is done automatically as needed. +For arithmetic computations, integers are used until some +floating-point number is introduced, after which floating-point is used. +For example,

+
+
+
5 / 4
+
+

yields the result 1, while

+
+
+
5 / 4.0
+5 / ( [string length "abcd"] + 0.0 )
+
+

both yield the result 1.25.

+

String values may be used as operands of the comparison operators, +although the expression evaluator tries to do comparisons as integer +or floating-point when it can. +If one of the operands of a comparison is a string and the other +has a numeric value, the numeric operand is converted back to +a string using the C sprintf format specifier +%d for integers and %g for floating-point values. +For example, the expressions

+
+
+
"0x03" > "2"
+"0y" < "0x12"
+
+

both evaluate to 1. The first comparison is done using integer +comparison, and the second is done using string comparison after +the second operand is converted to the string 18.

+

In general it is safest to enclose an expression in braces when +entering it in a command: otherwise, if the expression contains +any white space then the Tcl interpreter will split it +among several arguments. For example, the command

+
+
+
expr $a + $b
+
+

results in three arguments being passed to expr: $a, ++, and $b. In addition, if the expression isn’t in braces +then the Tcl interpreter will perform variable and command substitution +immediately (it will happen in the command parser rather than in +the expression parser). In many cases the expression is being +passed to a command that will evaluate the expression later (or +even many times if, for example, the expression is to be used to +decide when to exit a loop). Usually the desired goal is to re-do +the variable or command substitutions each time the expression is +evaluated, rather than once and for all at the beginning. For example, +the command

+
+
+
for {set i 1} $i<=10 {incr i} {...}        *** WRONG ***
+
+

is probably intended to iterate over all values of i from 1 to 10. +After each iteration of the body of the loop, for will pass +its second argument to the expression evaluator to see whether or not +to continue processing. Unfortunately, in this case the value of i +in the second argument will be substituted once and for all when the +for command is parsed. If i was 0 before the for +command was invoked then for’s second argument will be 0<=10 +which will always evaluate to 1, even though i eventually +becomes greater than 10. In the above case the loop will never +terminate. Instead, the expression should be placed in braces:

+
+
+
for {set i 1} {$i<=10} {incr i} {...}      *** RIGHT ***
+
+

This causes the substitution of i +to be delayed; it will be re-done each time the expression is +evaluated, which is the desired result.

+
+
+
+

LISTS

+
+

The third major way that strings are interpreted in Tcl is as lists. +A list is just a string with a list-like structure +consisting of fields separated by white space. For example, the +string

+
+
+
Al Sue Anne John
+
+

is a list with four elements or fields. +Lists have the same basic structure as command strings, except +that a newline character in a list is treated as a field separator +just like space or tab. Conventions for braces and quotes +and backslashes are the same for lists as for commands. For example, +the string

+
+
+
a b\ c {d e {f g h}}
+
+

is a list with three elements: a, b c, and d e {f g h}.

+

Whenever an element is extracted from a list, the same rules about +braces and quotes and backslashes are applied as for commands. Thus in +the example above when the third element is extracted from the list, +the result is

+
+
+
d e {f g h}
+
+

(when the field was extracted, all that happened was to strip off +the outermost layer of braces). Command substitution and +variable substitution are never +made on a list (at least, not by the list-processing commands; the +list can always be passed to the Tcl interpreter for evaluation).

+

The Tcl commands concat, foreach, lappend, lindex, linsert, +list, llength, lrange, lreplace, lsearch, and lsort allow +you to build lists, extract elements from them, search them, and perform +other list-related functions.

+

Advanced list commands include lrepeat, lreverse, lmap, lassign, lset.

+
+
+
+

LIST EXPANSION

+
+

A new addition to Tcl 8.5 is the ability to expand a list into separate +arguments. Support for this feature is also available in Jim.

+

Consider the following attempt to exec a list:

+
+
+
set cmd {ls -l}
+exec $cmd
+
+

This will attempt to exec the a command named "ls -l", which will clearly not +work. Typically eval and concat are required to solve this problem, however +it can be solved much more easily with {*}.

+
+
+
exec {*}$cmd
+
+

This will expand the following argument into individual elements and then evaluate +the resulting command.

+

Note that the official Tcl syntax is {*}, however {expand} is retained +for backward compatibility with experimental versions of this feature.

+
+
+
+

REGULAR EXPRESSIONS

+
+

Tcl provides two commands that support string matching using regular +expressions, regexp and regsub, as well as switch -regexp and +lsearch -regexp.

+

Regular expressions may be implemented one of two ways. Either using the system’s C library +POSIX regular expression support, or using the built-in regular expression engine. +The differences between these are described below.

+

NOTE Tcl 7.x and 8.x use perl-style Advanced Regular Expressions (ARE).

+
+

POSIX Regular Expressions

+

If the system supports POSIX regular expressions, and UTF-8 support is not enabled, +this support will be used by default. The type of regular expressions supported are +Extended Regular Expressions (ERE) rather than Basic Regular Expressions (BRE). +See REG_EXTENDED in the documentation.

+

Using the system-supported POSIX regular expressions will typically +make for the smallest code size, but some features such as UTF-8 +and \w, \d, \s are not supported.

+

See regex(3) and regex(7) for full details.

+
+
+

Jim built-in Regular Expressions

+

The Jim built-in regulare expression engine may be selected with ./configure --with-jim-regexp +or it will be selected automatically if UTF-8 support is enabled.

+

This engine supports UTF-8 as well as some ARE features. The differences with both Tcl 7.x/8.x +and POSIX are highlighted below.

+
    +
  1. +

    +UTF-8 strings and patterns are both supported +

    +
  2. +
  3. +

    +Supported character classes: [:alnum:], [:digit:] and [:space:] +

    +
  4. +
  5. +

    +Supported shorthand character classes: \w = +[:alnum:], \d = [:digit:], \s = [:space:] +

    +
  6. +
  7. +

    +Character classes apply to ASCII characters only +

    +
  8. +
  9. +

    +Supported constraint escapes: \m = \< = start of word, \M = \> = end of word +

    +
  10. +
  11. +

    +Backslash escapes may be used within regular expressions, such as \n = newline, \uNNNN = unicode +

    +
  12. +
  13. +

    +No support for the ? non-greedy quantifier. e.g. *? +

    +
  14. +
+
+
+
+
+

COMMAND RESULTS

+
+

Each command produces two results: a code and a string. The +code indicates whether the command completed successfully or not, +and the string gives additional information. The valid codes are +defined in jim.h, and are:

+
+
+JIM_OK(0) +
+
+

+ This is the normal return code, and indicates that the command completed + successfully. The string gives the command’s return value. +

+
+
+JIM_ERR(1) +
+
+

+ Indicates that an error occurred; the string gives a message describing + the error. +

+
+
+JIM_RETURN(2) +
+
+

+ Indicates that the return command has been invoked, and that the + current procedure (or top-level command or source command) + should return immediately. The + string gives the return value for the procedure or command. +

+
+
+JIM_BREAK(3) +
+
+

+ Indicates that the break command has been invoked, so the + innermost loop should abort immediately. The string should always + be empty. +

+
+
+JIM_CONTINUE(4) +
+
+

+ Indicates that the continue command has been invoked, so the + innermost loop should go on to the next iteration. The string + should always be empty. +

+
+
+JIM_SIGNAL(5) +
+
+

+ Indicates that a signal was caught while executing a commands. + The string contains the name of the signal caught. + See the signal and catch commands. +

+
+
+JIM_EXIT(6) +
+
+

+ Indicates that the command called the exit command. + The string contains the exit code. +

+
+
+

Tcl programmers do not normally need to think about return codes, +since JIM_OK is almost always returned. If anything else is returned +by a command, then the Tcl interpreter immediately stops processing +commands and returns to its caller. If there are several nested +invocations of the Tcl interpreter in progress, then each nested +command will usually return the error to its caller, until eventually +the error is reported to the top-level application code. The +application will then display the error message for the user.

+

In a few cases, some commands will handle certain error conditions +themselves and not return them upwards. For example, the for +command checks for the JIM_BREAK code; if it occurs, then for +stops executing the body of the loop and returns JIM_OK to its +caller. The for command also handles JIM_CONTINUE codes and the +procedure interpreter handles JIM_RETURN codes. The catch +command allows Tcl programs to catch errors and handle them without +aborting command interpretation any further.

+

The info returncodes command may be used to programmatically map between +return codes and names.

+
+
+
+

PROCEDURES

+
+

Tcl allows you to extend the command interface by defining +procedures. A Tcl procedure can be invoked just like any other Tcl +command (it has a name and it receives one or more arguments). +The only difference is that its body isn’t a piece of C code linked +into the program; it is a string containing one or more other +Tcl commands.

+

The proc command is used to create a new Tcl command procedure:

+

proc name args ?statics? body

+

The new command is name name, and it replaces any existing command +there may have been by that name. Whenever the new command is +invoked, the contents of body will be executed by the Tcl +interpreter.

+

args specifies the formal arguments to the procedure. +It consists of a list, possibly empty, of the following +argument specifiers:

+
+
+name +
+
+

+ Required Argument - A simple argument name. +

+
+
+name default +
+
+

+ Optional Argument - A two-element list consisting of the + argument name, followed by the default value, which will + be used if the corresponding argument is not supplied. +

+
+
+&name +
+
+

+ Reference Argument - The caller is expected to pass the name of + an existing variable. An implicit upvar 1 origname name is done + to make the variable available in the proc scope. +

+
+
+args +
+
+

+ Variable Argument - The special name args, which is + assigned all remaining arguments (including none). The + variable argument may only be specified once. Note that + the syntax args newname may be used to retain the special + behaviour of args with a different local name. In this case, + the variable is named newname rather than args. +

+
+
+

Arguments must be provided in the following order, any of which +may be omitted:

+
    +
  1. +

    +Required Arguments (Left) +

    +
  2. +
  3. +

    +Optional Arguments +

    +
  4. +
  5. +

    +Variable Argument +

    +
  6. +
  7. +

    +Required Arguments (Right) +

    +
  8. +
+

When the command is invoked, a local variable will be created for each of +the formal arguments to the procedure; its value will be the value +of corresponding argument in the invoking command or the argument’s +default value.

+

Arguments with default values need not be specified in a procedure +invocation. However, there must be enough actual arguments for all +required arguments, and there must not be any extra actual arguments +(unless the Variable Argument is specified).

+

Actual arguments are assigned to formal arguments as follows:

+
    +
  1. +

    +Left Required Arguments are assigned from the left +

    +
  2. +
  3. +

    +Right Required Arguments are assigned from the right +

    +
  4. +
  5. +

    +Default Arguments are assigned from the left, following the Left Required Arguments. +

    +
  6. +
  7. +

    +A list is formed from any remaining arguments, which are then + are assigned to the args Variable Argument (if specified). The list will be empty + if there are no remaining arguments. +

    +
  8. +
+

When body is being executed, variable names normally refer to local +variables, which are created automatically when referenced and deleted +when the procedure returns. One local variable is automatically created +for each of the procedure’s arguments. Global variables can be +accessed by invoking the global command or via the :: prefix.

+
+

New in Jim

+

In addition to procedure arguments, Jim procedures may declare static variables. +These variables scoped to the procedure and initialised at procedure definition. +Either from the static variable definition, or from the enclosing scope.

+

Consider the following example:

+
+
+
jim> set a 1
+jim> proc a {} {a {b 2}} {
+    set c 1
+    puts "$a $b $c"
+    incr a
+    incr b
+    incr c
+}
+jim> a
+1 2 1
+jim> a
+2 3 1
+
+

The static variable a has no initialiser, so it is initialised from +the enclosing scope with the value 1. (Note that it is an error if there +is no variable with the same name in the enclosing scope). However b +has an initialiser, so it is initialised to 2.

+

Unlike a local variable, the value of a static variable is retained across +invocations of the procedure.

+

See the proc command for information on +how to define procedures and what happens when they are invoked.

+
+
+
+
+

VARIABLES - SCALARS AND ARRAYS

+
+

Tcl allows the definition of variables and the use of their values +either through $-style variable substitution, the set +command, or a few other mechanisms.

+

Variables need not be declared: a new variable will automatically +be created each time a new variable name is used.

+

Tcl supports two types of variables: scalars and arrays. +A scalar variable has a single value, whereas an array variable +can have any number of elements, each with a name (called +its index) and a value.

+

Array indexes may be arbitrary strings; they need not be numeric. +Parentheses are used refer to array elements in Tcl commands. +For example, the command

+
+
+
set x(first) 44
+
+

will modify the element of x whose index is first +so that its new value is 44.

+

Two-dimensional arrays can be simulated in Tcl by using indexes +that contain multiple concatenated values. +For example, the commands

+
+
+
set a(2,3) 1
+set a(3,6) 2
+
+

set the elements of a whose indexes are 2,3 and 3,6.

+

In general, array elements may be used anywhere in Tcl that scalar +variables may be used.

+

If an array is defined with a particular name, then there may +not be a scalar variable with the same name.

+

Similarly, if there is a scalar variable with a particular +name then it is not possible to make array references to the +variable.

+

To convert a scalar variable to an array or vice versa, remove +the existing variable with the unset command.

+

The array command provides several features for dealing +with arrays, such as querying the names of all the elements of +the array and converting between an array and a list.

+

Variables may be either global or local. If a variable +name is used when a procedure isn’t being executed, then it +automatically refers to a global variable. Variable names used +within a procedure normally refer to local variables associated with that +invocation of the procedure. Local variables are deleted whenever +a procedure exits. Either global command may be used to request +that a name refer to a global variable for the duration of the current +procedure (this is somewhat analogous to extern in C), or the variable +may be explicitly scoped with the :: prefix. For example

+
+
+
set a 1
+set b 2
+proc p {} {
+    set c 3
+    global a
+
+
+
+
    puts "$a $::b $c"
+}
+p
+
+

will output:

+
+
+
1 2 3
+
+
+
+
+

ARRAYS AS LISTS IN JIM

+
+

Unlike Tcl, Jim can automatically convert between a list (with an even +number of elements) and an array value. This is similar to the way Tcl +can convert between a string and a list.

+

For example:

+
+
+
set a {1 one 2 two}
+puts $a(2)
+
+

will output:

+
+
+
two
+
+

Thus array set is equivalent to set when the variable does not +exist or is empty.

+

The reverse is also true where an array will be converted into +a list.

+
+
+
set a(1) one; set a(2) two
+puts $a
+
+

will output:

+
+
+
1 one 2 two
+
+
+
+
+

DICTIONARY VALUES

+
+

Tcl 8.5 introduced the dict command, and Jim Tcl has added a version +of this command. Dictionaries provide efficient access to key-value +pairs, just like arrays, but dictionaries are pure values. This +means that you can pass them to a procedure just as a list or a +string. Tcl dictionaries are therefore much more like Tcl lists, +except that they represent a mapping from keys to values, rather +than an ordered sequence.

+

You can nest dictionaries, so that the value for a particular key +consists of another dictionary. That way you can elegantly build +complicated data structures, such as hierarchical databases. You +can also combine dictionaries with other Tcl data structures. For +instance, you can build a list of dictionaries that themselves +contain lists.

+

Dictionaries are values that contain an efficient, order-preserving +mapping from arbitrary keys to arbitrary values. Each key in the +dictionary maps to a single value. They have a textual format that +is exactly that of any list with an even number of elements, with +each mapping in the dictionary being represented as two items in +the list. When a command takes a dictionary and produces a new +dictionary based on it (either returning it or writing it back into +the variable that the starting dictionary was read from) the new +dictionary will have the same order of keys, modulo any deleted +keys and with new keys added on to the end. When a string is +interpreted as a dictionary and it would otherwise have duplicate +keys, only the last value for a particular key is used; the others +are ignored, meaning that, "apple banana" and "apple carrot apple +banana" are equivalent dictionaries (with different string +representations).

+

Note that in Jim, arrays are implemented as dictionaries. +Thus automatic conversion between lists and dictionaries applies +as it does for arrays.

+
+
+
jim> dict set a 1 one
+1 one
+jim> dict set a 2 two
+1 one 2 two
+jim> puts $a
+1 one 2 two
+jim> puts $a(2)
+two
+jim> dict set a 3 T three
+1 one 2 two 3 {T three}
+
+

See the dict command for more details.

+
+
+
+

GARBAGE COLLECTION, REFERENCES, LAMBDA

+
+

Unlike Tcl, Jim has some sophisticated support for functional programming. +These are described briefly below.

+

More information may be found at http://wiki.tcl.tk/13847

+
+

References

+

A reference can be thought of as holding a value with one level of indirection, +where the value may be garbage collected when unreferenced. +Consider the following example:

+
+
+
jim> set r [ref "One String" test]
+<reference.<test___>.00000000000000000000>
+jim> getref $r
+One String
+
+

The operation ref creates a references to the value specified by the +first argument. (The second argument is a "type" used for documentation purposes).

+

The operation getref is the dereferencing operation which retrieves the value +stored in the reference.

+
+
+
jim> setref $r "New String"
+New String
+jim> getref $r
+New String
+
+

The operation setref replaces the value stored by the reference. If the old value +is no longer accessible by any reference, it will eventually be automatically be garbage +collected.

+
+
+

Garbage Collection

+

Normally, all values in Tcl are passed by value. As such values are copied and released +automatically as necessary.

+

With the introduction of references, it is possible to create values whose lifetime +transcend their scope. To support this, case, the Jim system will periodically identify +and discard objects which are no longer accessible by any reference.

+

The collect command may be used to force garbage collection. Consider a reference created +with a finalizer:

+
+
+
jim> proc f {ref value} { puts "Finaliser called for $ref,$value" }
+jim> set r [ref "One String" test f]
+<reference.<test___>.00000000000
+jim> collect
+0
+jim> set r ""
+jim> collect
+Finaliser called for <reference.<test___>.00000000000,One String
+1
+
+

Note that once the reference, r, was modified so that it no longer +contained a reference to the value, the garbage collector discarded +the value (after calling the finalizer).

+

The finalizer for a reference may be examined or changed with the finalize command

+
+
+
jim> finalize $r
+f
+jim> finalize $r newf
+newf
+
+
+
+

Lambda

+

Jim provides a garbage collected lambda function. This is a procedure +which is able to create an anonymous procedure. Consider:

+
+
+
jim> set f [lambda {a} {{x 0}} { incr x $a }]
+jim> $f 1
+1
+jim> $f 2
+3
+jim> set f ""
+
+

This create an anonymous procedure (with the name stored in f), with a static variable +which is incremented by the supplied value and the result returned.

+

Once the procedure name is no longer accessible, it will automatically be deleted +when the garbage collector runs.

+

The procedure may also be delete immediately by renaming it "". e.g.

+
+
+
jim> rename $f ""
+
+
+
+
+
+

UTF-8 AND UNICODE

+
+

If Jim is built with UTF-8 support enabled (configure --enable-utf), +then most string-related commands become UTF-8 aware. These include, +but are not limited to, string match, split, glob, scan and +format.

+

UTF-8 encoding has many advantages, but one of the complications is that +characters can take a variable number of bytes. Thus the addition of +string bytelength which returns the number of bytes in a string, +while string length returns the number of characters.

+

If UTF-8 support is not enabled, all commands treat bytes as characters +and string bytelength returns the same value as string length.

+

Note that even if UTF-8 support is not enabled, the \uNNNN syntax +is still available to embed UTF-8 sequences.

+
+

String Matching

+

Commands such as string match, lsearch -glob, array names and others use string +pattern matching rules. These commands support UTF-8. For example:

+
+
+
string match a\[\ua0-\ubf\]b "a\u00a3b"
+
+
+
+

format and scan

+

format %c allows a unicode codepoint to be be encoded. For example, the following will return +a string with two bytes and one character. The same as \ub5

+
+
+
format %c 0xb5
+
+

format respects widths as character widths, not byte widths. For example, the following will +return a string with three characters, not three bytes.

+
+
+
format %.3s \ub5\ub6\ub7\ub8
+
+

Similarly, scan … %c allows a UTF-8 to be decoded to a unicode codepoint. The following will set +a to 181 (0xb5) and b to 65 (0x41).

+
+
+
scan \u00b5A %c%c a b
+
+

scan %s will also accept a character class, including unicode ranges.

+
+
+

String Classes

+

string is has not been extended to classify UTF-8 characters. Therefore, the following +will return 0, even though the string may be considered to be alphabetic.

+
+
+
string is alpha \ub5Test
+
+

This does not affect the string classes ascii, control, digit, double, integer or xdigit.

+
+
+

Case Mapping and Conversion

+

Jim provides a simplified unicode case mapping. This means that case conversion +and comparison will not increase or decrease the number of characters in a string.

+

string toupper will convert any lowercase letters to their uppercase equivalent. +Any character which is not a letter or has no uppercase equivalent is left unchanged. +Similarly for string tolower.

+

Commands which perform case insensitive matches, such as string compare -nocase +and lsearch -nocase fold both strings to uppercase before comparison.

+
+
+

Invalid UTF-8 Sequences

+

Some UTF-8 character sequences are invalid, such as those beginning with 0xff, +those which represent character sequences longer than 3 bytes (greater than U+FFFF), +and those which end prematurely, such as a lone 0xc2.

+

In these situations, the offending bytes are treated as single characters. For example, +the following returns 2.

+
+
+
string bytelength \xff\xff
+
+
+
+

Regular Expressions

+

If UTF-8 support is enabled, the built-in regular expression engine will be +selected which supports UTF-8 strings and patterns.

+

See REGULAR EXPRESSIONS

+
+
+
+
+

BUILT-IN COMMANDS

+
+

The Tcl library provides the following built-in commands, which will +be available in any application using Tcl. In addition to these +built-in commands, there may be additional commands defined by each +application, plus commands defined as Tcl procedures.

+

In the command syntax descriptions below, words in boldface are +literals that you type verbatim to Tcl.

+

Words in italics are meta-symbols; they serve as names for any of +a range of values that you can type.

+

Optional arguments or groups of arguments are indicated by enclosing them +in ?question-marks?.

+

Ellipses () indicate that any number of additional +arguments or groups of arguments may appear, in the same format +as the preceding argument(s).

+ +
+

alarm

+

alarm seconds

+

Delivers the SIGALRM signal to the process after the given +number of seconds. If the platform supports ualarm(3) then +the argument may be a floating point value. Otherwise it must +be an integer.

+

Note that unless a signal handler for SIGALRM has been installed +(see signal), the process will exit on this signal.

+
+
+

alias

+

alias name args…

+

Creates a single word alias (proc) for one or more words. For example, +the following creates an alias for the command info exists.

+
+
+
alias e info exists
+if {[e var]} {
+  ...
+}
+
+

alias returns name, allowing it to be used with 'local.

+

See also proc, curry, lambda, local.

+
+
+

append

+

append varName value ?value value …?

+

Append all of the value arguments to the current value +of variable varName. If varName doesn’t exist, +it is given a value equal to the concatenation of all the +value arguments.

+

This command provides an efficient way to build up long +variables incrementally. +For example, append a $b is much more efficient than +set a $a$b if $a is long.

+
+
+

array

+

array option arrayName ?arg arg …?

+

This command performs one of several operations on the +variable given by arrayName.

+

Note that in general, if the named array does not exist, the array command behaves +as though the array exists but is empty.

+

The option argument determines what action is carried out by the +command. The legal options (which may be abbreviated) are:

+
+
+array exists arrayName +
+
+

+ Returns 1 if arrayName is an array variable, 0 if there is + no variable by that name. This command is essentially + identical to info exists +

+
+
+array get arrayName ?pattern? +
+
+

+ Returns a list containing pairs of elements. The first + element in each pair is the name of an element in arrayName + and the second element of each pair is the value of the + array element. The order of the pairs is undefined. If + pattern is not specified, then all of the elements of the + array are included in the result. If pattern is specified, + then only those elements whose names match pattern (using + the matching rules of string match) are included. If arrayName + isn’t the name of an array variable, or if the array contains + no elements, then an empty list is returned. +

+
+
+array names arrayName ?pattern? +
+
+

+ Returns a list containing the names of all of the elements + in the array that match pattern. If pattern is omitted then + the command returns all of the element names in the array. + If pattern is specified, then only those elements whose + names match pattern (using the matching rules of string + match) are included. If there are no (matching) elements + in the array, or if arrayName isn’t the name of an array + variable, then an empty string is returned. +

+
+
+array set arrayName list +
+
+

+ Sets the values of one or more elements in arrayName. list + must have a form like that returned by array get, consisting + of an even number of elements. Each odd-numbered element + in list is treated as an element name within arrayName, and + the following element in list is used as a new value for + that array element. If the variable arrayName does not + already exist and list is empty, arrayName is created with + an empty array value. +

+
+
+array size arrayName +
+
+

+ Returns the number of elements in the array. If arrayName + isn’t the name of an array then 0 is returned. +

+
+
+array unset arrayName ?pattern? +
+
+

+ Unsets all of the elements in the array that match pattern + (using the matching rules of string match). If arrayName + isn’t the name of an array variable or there are no matching + elements in the array, no error will be raised. If pattern + is omitted and arrayName is an array variable, then the + command unsets the entire array. The command always returns + an empty string. +

+
+
+
+
+

break

+

break

+

This command may be invoked only inside the body of a loop command +such as for or foreach or while. It returns a JIM_BREAK code +to signal the innermost containing loop command to return immediately.

+
+
+

case

+

case string ?in? patList body ?patList body …?

+

case string ?in? {patList body ?patList body …?}

+

Note that the switch command should generally be preferred unless compatibility +with Tcl 6.x is desired.

+

Match string against each of the patList arguments +in order. If one matches, then evaluate the following body argument +by passing it recursively to the Tcl interpreter, and return the result +of that evaluation. Each patList argument consists of a single +pattern or list of patterns. Each pattern may contain any of the wild-cards +described under string match.

+

If a patList argument is default, the corresponding body will be +evaluated if no patList matches string. If no patList argument +matches string and no default is given, then the case command returns +an empty string.

+

Two syntaxes are provided.

+

The first uses a separate argument for each of the patterns and commands; +this form is convenient if substitutions are desired on some of the +patterns or commands.

+

The second form places all of the patterns and commands together into +a single argument; the argument must have proper list structure, with +the elements of the list being the patterns and commands.

+

The second form makes it easy to construct multi-line case commands, +since the braces around the whole list make it unnecessary to include a +backslash at the end of each line.

+

Since the patList arguments are in braces in the second form, +no command or variable substitutions are performed on them; this makes +the behaviour of the second form different than the first form in some +cases.

+

Below are some examples of case commands:

+
+
+
case abc in {a b} {format 1} default {format 2} a* {format 3}
+
+

will return 3,

+
+
+
case a in {
+    {a b} {format 1}
+    default {format 2}
+    a* {format 3}
+}
+
+

will return 1, and

+
+
+
case xyz {
+    {a b}
+        {format 1}
+    default
+        {format 2}
+    a*
+        {format 3}
+}
+
+

will return 2.

+
+
+

catch

+

catch ?-?no?code …? ?--? command ?resultVarName? ?optionsVarName?

+

The catch command may be used to prevent errors from aborting +command interpretation. Catch evaluates command, and returns a +JIM_OK code, regardless of any errors that might occur while +executing command (with the possible exception of JIM_SIGNAL - +see below).

+

The return value from catch is a decimal string giving the code +returned by the Tcl interpreter after executing command. This +will be 0 (JIM_OK) if there were no errors in command; otherwise +it will have a non-zero value corresponding to one of the exceptional +return codes (see jim.h for the definitions of code values, or the +info returncodes command).

+

If the resultVarName argument is given, then it gives the name +of a variable; catch will set the value of the variable to the +string returned from command (either a result or an error message).

+

If the optionsVarName argument is given, then it gives the name +of a variable; catch will set the value of the variable to a +dictionary. For any return code other than JIM_RETURN, the value +for the key -code will be set to the return code. For JIM_RETURN +it will be set to the code given in return -code. Additionally, +for the return code JIM_ERR, the value of the key -errorinfo +will contain the current stack trace (the same result as info +stacktrace), the value of the key -errorcode will contain the +same value as the global variable $::errorCode, and the value of +the key -level will be the current return level (see return +-level). This can be useful to rethrow an error:

+
+
+
if {[catch {...} msg opts]} {
+    ...maybe do something with the error...
+    incr opts(-level)
+    return {*}$opts $msg
+}
+
+

Normally catch will not catch any of the codes JIM_EXIT, JIM_EVAL or JIM_SIGNAL. +The set of codes which will be caught may be modified by specifying the one more codes before +command.

+

e.g. To catch JIM_EXIT but not JIM_BREAK or JIM_CONTINUE

+
+
+
catch -exit -nobreak -nocontinue -- { ... }
+
+

The use of -- is optional. It signifies that no more return code options follow.

+

Note that if a signal marked as signal handle is caught with catch -signal, the return value +(stored in resultVarName) is name of the signal caught.

+
+
+

cd

+

cd dirName

+

Change the current working directory to dirName.

+

Returns an empty string.

+

This command can potentially be disruptive to an application, so it may +be removed in some applications.

+
+
+

clock

+
+
+clock seconds +
+
+

+ Returns the current time as seconds since the epoch. +

+
+
+clock format seconds ?-format format? +
+
+

+ Format the given time (seconds since the epoch) according to the given + format. See strftime(3) for supported formats. + If no format is supplied, "%c" is used. +

+
+
+clock scan str -format format +
+
+

+ Scan the given time string using the given format string. + See strptime(3) for supported formats. +

+
+
+
+
+

close

+

close fileId

+

fileId close

+

Closes the file given by fileId. +fileId must be the return value from a previous invocation +of the open command; after this command, it should not be +used anymore.

+
+
+

collect

+

collect

+

Normally reference garbage collection is automatically performed periodically. +However it may be run immediately with the collect command.

+

See GARBAGE COLLECTION, REFERENCES, LAMBDA for more detail.

+
+
+

concat

+

concat arg ?arg …?

+

This command treats each argument as a list and concatenates them +into a single list. It permits any number of arguments. For example, +the command

+
+
+
concat a b {c d e} {f {g h}}
+
+

will return

+
+
+
a b c d e f {g h}
+
+

as its result.

+
+
+

continue

+

continue

+

This command may be invoked only inside the body of a loop command such +as for or foreach or while. It returns a JIM_CONTINUE code to +signal the innermost containing loop command to skip the remainder of +the loop’s body but continue with the next iteration of the loop.

+
+
+

curry

+

alias args…

+

Similar to alias except it creates an anonymous procedure (lambda) instead of +a named procedure.

+

the following creates a local, unnamed alias for the command info exists.

+
+
+
set e [local curry info exists]
+if {[$e var]} {
+  ...
+}
+
+

curry returns the name of the procedure.

+

See also proc, alias, lambda, local.

+
+
+

dict

+

dict option ?arg arg …?

+

Performs one of several operations on dictionary values.

+

The option argument determines what action is carried out by the +command. The legal options are:

+
+
+dict create ?key value …?+ +
+
+

+ Create and return a new dictionary value that contains each of + the key/value mappings listed as arguments (keys and values + alternating, with each key being followed by its associated + value.) +

+
+
+dict exists dictionary key ?key …?+ +
+
+

+ Returns a boolean value indicating whether the given key (or path + of keys through a set of nested dictionaries) exists in the given + dictionary value. This returns a true value exactly when dict get + on that path will succeed. +

+
+
+dict get dictionary ?key …?+ +
+
+

+ Given a dictionary value (first argument) and a key (second argument), + this will retrieve the value for that key. Where several keys are + supplied, the behaviour of the command shall be as if the result + of dict get $dictVal $key was passed as the first argument to + dict get with the remaining arguments as second (and possibly + subsequent) arguments. This facilitates lookups in nested dictionaries. + If no keys are provided, dict would return a list containing pairs + of elements in a man- ner similar to array get. That is, the first + element of each pair would be the key and the second element would + be the value for that key. It is an error to attempt to retrieve + a value for a key that is not present in the dictionary. +

+
+
+dict keys dictionary ?pattern?+ +
+
+

+ Returns a list of the keys in the dictionary. + If pattern is specified, then only those keys whose + names match pattern (using the matching rules of string + match) are included. +

+
+
+dict keys dictionary ?pattern?+ +
+
+

+ Returns a list of the keys in the dictionary. + If pattern is specified, then only those keys whose + names match pattern (using the matching rules of string + match) are included. +

+
+
+dict set dictionaryName key ?key …? value+ +
+
+

+ This operation takes the name of a variable containing a dictionary + value and places an updated dictionary value in that variable + containing a mapping from the given key to the given value. When + multiple keys are present, this operation creates or updates a chain + of nested dictionaries. +

+
+
+dict unset dictionaryName key ?key …? value+ +
+
+

+ This operation (the companion to dict set) takes the name of a + variable containing a dictionary value and places an updated + dictionary value in that variable that does not contain a mapping + for the given key. Where multiple keys are present, this describes + a path through nested dictionaries to the mapping to remove. At + least one key must be specified, but the last key on the key-path + need not exist. All other components on the path must exist. +

+
+
+
+
+

env

+

env ?name? ?default?

+

If name is supplied, returns the value of name from the initial +environment (see getenv(3)). An error is returned if name does not +exist in the environment, unless default is supplied - in which case +that value is returned instead.

+

If no arguments are supplied, returns a list of all environment variables +and their values as {name value …}

+

See also the global variable ::env

+
+
+

eof

+

eof fileId

+

fileId eof

+

Returns 1 if an end-of-file condition has occurred on fileId, +0 otherwise.

+

fileId must have been the return value from a previous call to open, +or it may be stdin, stdout, or stderr to refer to one of the +standard I/O channels.

+
+
+

error

+

error message ?stacktrace?

+

Returns a JIM_ERR code, which causes command interpretation to be +unwound. message is a string that is returned to the application +to indicate what went wrong.

+

If the stacktrace argument is provided and is non-empty, +it is used to initialize the stacktrace.

+

This feature is most useful in conjunction with the catch command: +if a caught error cannot be handled successfully, stacktrace can be used +to return a stack trace reflecting the original point of occurrence +of the error:

+
+
+
catch {...} errMsg
+...
+error $errMsg [info stacktrace]
+
+

See also errorInfo, info stacktrace, catch and return

+
+
+

errorInfo

+

errorInfo error ?stacktrace?

+

Returns a human-readable representation of the given error message and stack trace. +Typical usage is:

+
+
+
if {[catch {...} error]} {
+    puts stderr [errorInfo $error [info stacktrace]]
+    exit 1
+}
+
+

See also error.

+
+
+

eval

+

eval arg ?arg …?

+

eval takes one or more arguments, which together comprise a Tcl +command (or collection of Tcl commands separated by newlines in the +usual way). eval concatenates all its arguments in the same +fashion as the concat command, passes the concatenated string to the +Tcl interpreter recursively, and returns the result of that +evaluation (or any error generated by it).

+
+
+

exec

+

exec arg ?arg …?

+

This command treats its arguments as the specification +of one or more UNIX commands to execute as subprocesses. +The commands take the form of a standard shell pipeline; +| arguments separate commands in the +pipeline and cause standard output of the preceding command +to be piped into standard input of the next command (or |& for +both standard output and standard error).

+

Under normal conditions the result of the exec command +consists of the standard output produced by the last command +in the pipeline.

+

If any of the commands in the pipeline exit abnormally or +are killed or suspended, then exec will return an error +and the error message will include the pipeline’s output followed by +error messages describing the abnormal terminations.

+

If any of the commands writes to its standard error file, +then exec will return an error, and the error message +will include the pipeline’s output, followed by messages +about abnormal terminations (if any), followed by the standard error +output.

+

If the last character of the result or error message +is a newline then that character is deleted from the result +or error message for consistency with normal +Tcl return values.

+

An arg may have one of the following special forms:

+
+
+>filename +
+
+

+ The standard output of the last command in the pipeline + is redirected to the file. In this situation exec + will normally return an empty string. +

+
+
+>>filename +
+
+

+ As above, but append to the file. +

+
+
+>@fileId +
+
+

+ The standard output of the last command in the pipeline is + redirected to the given (writable) file descriptor (e.g. stdout, + stderr, or the result of open). In this situation exec + will normally return an empty string. +

+
+
+2>filename +
+
+

+ The standard error of the last command in the pipeline + is redirected to the file. +

+
+
+2>>filename +
+
+

+ As above, but append to the file. +

+
+
+2>@fileId +
+
+

+ The standard error of the last command in the pipeline is + redirected to the given (writable) file descriptor. +

+
+
+2>@1 +
+
+

+ The standard error of the last command in the pipeline is + redirected to the same file descriptor as the standard output. +

+
+
+>&filename +
+
+

+ Both the standard output and standard error of the last command + in the pipeline is redirected to the file. +

+
+
+>>&filename +
+
+

+ As above, but append to the file. +

+
+
+<filename +
+
+

+ The standard input of the first command in the pipeline + is taken from the file. +

+
+
+<<string +
+
+

+ The standard input of the first command is taken as the + given immediate value. +

+
+
+<@fileId +
+
+

+ The standard input of the first command in the pipeline + is taken from the given (readable) file descriptor. +

+
+
+

If there is no redirection of standard input, standard error +or standard output, these are connected to the corresponding +input or output of the application.

+

If the last arg is & then the command will be +executed in background. +In this case the standard output from the last command +in the pipeline will +go to the application’s standard output unless +redirected in the command, and error output from all +the commands in the pipeline will go to the application’s +standard error file. The return value of exec in this case +is a list of process ids (pids) in the pipeline.

+

Each arg becomes one word for a command, except for +|, <, <<, >, and & arguments, and the +arguments that follow <, <<, and >.

+

The first word in each command is taken as the command name; +the directories in the PATH environment variable are searched for +an executable by the given name.

+

No glob expansion or other shell-like substitutions +are performed on the arguments to commands.

+

If the command fails, the global $::errorCode (and the -errorcode +option in catch) will be set to a list, as follows:

+
+
+CHILDKILLED pid sigName msg +
+
+

+ This format is used when a child process has been killed + because of a signal. The pid element will be the process’s + identifier (in decimal). The sigName element will be the + symbolic name of the signal that caused the process to + terminate; it will be one of the names from the include + file signal.h, such as SIGPIPE. The msg element will be a + short human-readable message describing the signal, such + as "write on pipe with no readers" for SIGPIPE. +

+
+
+CHILDSUSP pid sigName msg +
+
+

+ This format is used when a child process has been suspended + because of a signal. The pid element will be the process’s + identifier, in decimal. The sigName element will be the + symbolic name of the signal that caused the process to + suspend; this will be one of the names from the include + file signal.h, such as SIGTTIN. The msg element will be a + short human-readable message describing the signal, such + as "background tty read" for SIGTTIN. +

+
+
+CHILDSTATUS pid code +
+
+

+ This format is used when a child process has exited with a + non-zero exit status. The pid element will be the process’s + identifier (in decimal) and the code element will be the + exit code returned by the process (also in decimal). +

+
+
+

The environment for the executed command is set from $::env (unless +this variable is unset, in which case the original environment is used).

+
+
+

exists

+

exists ?-var|-proc|-command? name

+

Checks the existence of the given variable, procedure or command +respectively and returns 1 if it exists or 0 if not. This command +provides a more simplified/convenient version of info exists, +info procs and info commands.

+

If the type is omitted, a type of -var is used. The type may be abbreviated.

+
+
+

exit

+

exit ?returnCode?

+

Terminate the process, returning returnCode to the +parent as the exit status.

+

If returnCode isn’t specified then it defaults +to 0.

+

Note that exit can be caught with catch.

+
+
+

expr

+

expr arg

+

Calls the expression processor to evaluate arg, and returns +the result as a string. See the section EXPRESSIONS above.

+

Note that Jim supports a shorthand syntax for expr as $(…) +The following two are identical.

+
+
+
set x [expr {3 * 2 + 1}]
+set x $(3 * 2 + 1)
+
+
+
+

file

+

file option name ?arg arg …?

+

Operate on a file or a file name. name is the name of a file.

+

Option indicates what to do with the file name. Any unique +abbreviation for option is acceptable. The valid options are:

+
+
+file atime name +
+
+

+ Return a decimal string giving the time at which file name + was last accessed. The time is measured in the standard UNIX + fashion as seconds from a fixed starting time (often January 1, 1970). + If the file doesn’t exist or its access time cannot be queried then an + error is generated. +

+
+
+file copy ?-force? source target +
+
+

+ Copies file source to file target. The source file must exist. + The target file must not exist, unless -force is specified. +

+
+
+file delete name … +
+
+

+ Deletes file or directory name. If the file or directory doesn’t exist, nothing happens. + If it can’t be deleted, an error is generated. Non-empty directories will not be deleted. +

+
+
+file dirname name +
+
+

+ Return all of the characters in name up to but not including + the last slash character. If there are no slashes in name + then return . (a single dot). If the last slash in name is its first + character, then return /. +

+
+
+file executable name +
+
+

+ Return 1 if file name is executable by + the current user, 0 otherwise. +

+
+
+file exists name +
+
+

+ Return 1 if file name exists and the current user has + search privileges for the directories leading to it, 0 otherwise. +

+
+
+file extension name +
+
+

+ Return all of the characters in name after and including the + last dot in name. If there is no dot in name then return + the empty string. +

+
+
+file isdirectory name +
+
+

+ Return 1 if file name is a directory, + 0 otherwise. +

+
+
+file isfile name +
+
+

+ Return 1 if file name is a regular file, + 0 otherwise. +

+
+
+file join arg arg … +
+
+

+ Joins multiple path components. Note that if any components is + an absolute path, the preceding components are ignored. + Thus file join /tmp /root returns /root. +

+
+
+file lstat name varName +
+
+

+ Same as stat option (see below) except uses the lstat + kernel call instead of stat. This means that if name + refers to a symbolic link the information returned in varName + is for the link rather than the file it refers to. On systems that + don’t support symbolic links this option behaves exactly the same + as the stat option. +

+
+
+file mkdir dir1 ?dir2? … +
+
+

+ Creates each directory specified. For each pathname dir specified, + this command will create all non-existing parent directories + as well as dir itself. If an existing directory is specified, + then no action is taken and no error is returned. Trying to + overwrite an existing file with a directory will result in an + error. Arguments are processed in the order specified, halting + at the first error, if any. +

+
+
+file mtime name +
+
+

+ Return a decimal string giving the time at which file name + was last modified. The time is measured in the standard UNIX + fashion as seconds from a fixed starting time (often January 1, 1970). + If the file doesn’t exist or its modified time cannot be queried then an + error is generated. +

+
+
+file normalize name +
+
+

+ Return the normalized path of name. See realpath(3). +

+
+
+file owned name +
+
+

+ Return 1 if file name is owned by the current user, + 0 otherwise. +

+
+
+file readable name +
+
+

+ Return 1 if file name is readable by + the current user, 0 otherwise. +

+
+
+file readlink name +
+
+

+ Returns the value of the symbolic link given by name (i.e. the + name of the file it points to). If + name isn’t a symbolic link or its value cannot be read, then + an error is returned. On systems that don’t support symbolic links + this option is undefined. +

+
+
+file rename oldname newname +
+
+

+ Renames the file from the old name to the new name. +

+
+
+file rootname name +
+
+

+ Return all of the characters in name up to but not including + the last . character in the name. If name doesn’t contain + a dot, then return name. +

+
+
+file size name +
+
+

+ Return a decimal string giving the size of file name in bytes. + If the file doesn’t exist or its size cannot be queried then an + error is generated. +

+
+
+file stat name varName +
+
+

+ Invoke the stat kernel call on name, and use the + variable given by varName to hold information returned from + the kernel call. + VarName is treated as an array variable, + and the following elements of that variable are set: atime, + ctime, dev, gid, ino, mode, mtime, + nlink, size, type, uid. + Each element except type is a decimal string with the value of + the corresponding field from the stat return structure; see the + manual entry for stat for details on the meanings of the values. + The type element gives the type of the file in the same form + returned by the command file type. + This command returns an empty string. +

+
+
+file tail name +
+
+

+ Return all of the characters in name after the last slash. + If name contains no slashes then return name. +

+
+
+file tempfile ?template? +
+
+

+ Creates and returns the name of a unique temporary file. If template is omitted, a + default template will be used to place the file in /tmp. See mkstemp(3) for + the format of the template and security concerns. +

+
+
+file type name +
+
+

+ Returns a string giving the type of file name, which will be + one of file, directory, characterSpecial, + blockSpecial, fifo, link, or socket. +

+
+
+file writable name +
+
+

+ Return 1 if file name is writable by + the current user, 0 otherwise. +

+
+
+

The file commands that return 0/1 results are often used in +conditional or looping commands, for example:

+
+
+
if {![file exists foo]} then {error {bad file name}} else {...}
+
+
+
+

finalize

+

finalize reference ?command?

+

If command is omitted, returns the finalizer command for the given reference.

+

Otherwise, sets a new finalizer command for the given reference. command may be +the empty string to remove the current finalizer.

+

The reference must be a valid reference create with the ref +command.

+

See GARBAGE COLLECTION, REFERENCES, LAMBDA for more detail.

+
+
+

flush

+

flush fileId

+

fileId flush

+

Flushes any output that has been buffered for fileId. fileId must +have been the return value from a previous call to open, or it may be +stdout or stderr to access one of the standard I/O streams; it must +refer to a file that was opened for writing. This command returns an +empty string.

+
+
+

for

+

for start test next body

+

For is a looping command, similar in structure to the C for statement. +The start, next, and body arguments must be Tcl command strings, +and test is an expression string.

+

The for command first invokes the Tcl interpreter to execute start. +Then it repeatedly evaluates test as an expression; if the result is +non-zero it invokes the Tcl interpreter on body, then invokes the Tcl +interpreter on next, then repeats the loop. The command terminates +when test evaluates to 0.

+

If a continue command is invoked within body then any remaining +commands in the current execution of body are skipped; processing +continues by invoking the Tcl interpreter on next, then evaluating +test, and so on.

+

If a break command is invoked within body or next, then the for +command will return immediately.

+

The operation of break and continue are similar to the corresponding +statements in C.

+

For returns an empty string.

+
+
+

foreach

+

foreach varName list body

+

foreach varList list ?varList2 list2 …? body

+

In this command, varName is the name of a variable, list +is a list of values to assign to varName, and body is a +collection of Tcl commands.

+

For each field in list (in order from left to right),foreach assigns +the contents of the field to varName (as if the lindex command +had been used to extract the field), then calls the Tcl interpreter to +execute body.

+

If instead of being a simple name, varList is used, multiple assignments +are made each time through the loop, one for each element of varList.

+

For example, if there are two elements in varList and six elements in +the list, the loop will be executed three times.

+

If the length of the list doesn’t evenly divide by the number of elements +in varList, the value of the remaining variables in the last iteration +of the loop are undefined.

+

The break and continue statements may be invoked inside body, +with the same effect as in the for command.

+

foreach returns an empty string.

+
+
+

format

+

format formatString ?arg arg …?

+

This command generates a formatted string in the same way as the +C sprintf procedure (it uses sprintf in its +implementation). FormatString indicates how to format +the result, using % fields as in sprintf, and the additional +arguments, if any, provide values to be substituted into the result.

+

All of the sprintf options are valid; see the sprintf +man page for details. Each arg must match the expected type +from the % field in formatString; the format command +converts each argument to the correct type (floating, integer, etc.) +before passing it to sprintf for formatting.

+

The only unusual conversion is for %c; in this case the argument +must be a decimal string, which will then be converted to the corresponding +ASCII character value.

+

Format does backslash substitution on its formatString +argument, so backslash sequences in formatString will be handled +correctly even if the argument is in braces.

+

The return value from format is the formatted string.

+
+
+

getref

+

getref reference

+

Returns the string associated with reference. The reference must +be a valid reference create with the ref command.

+

See GARBAGE COLLECTION, REFERENCES, LAMBDA for more detail.

+
+
+

gets

+

gets fileId ?varName?

+

fileId gets ?varName?

+

Reads the next line from the file given by fileId and discards +the terminating newline character.

+

If varName is specified, then the line is placed in the variable +by that name and the return value is a count of the number of characters +read (not including the newline).

+

If the end of the file is reached before reading +any characters then -1 is returned and varName is set to an +empty string.

+

If varName is not specified then the return value will be +the line (minus the newline character) or an empty string if +the end of the file is reached before reading any characters.

+

An empty string will also be returned if a line contains no characters +except the newline, so eof may have to be used to determine +what really happened.

+

If the last character in the file is not a newline character, then +gets behaves as if there were an additional newline character +at the end of the file.

+

fileId must be stdin or the return value from a previous +call to open; it must refer to a file that was opened +for reading.

+
+
+

glob

+

glob ?-nocomplain? pattern ?pattern …?

+

This command performs filename globbing, using csh rules. The returned +value from glob is the list of expanded filenames.

+

If -nocomplain is specified as the first argument then an empty +list may be returned; otherwise an error is returned if the expanded +list is empty. The -nocomplain argument must be provided +exactly: an abbreviation will not be accepted.

+
+
+

global

+

global varName ?varName …?

+

This command is ignored unless a Tcl procedure is being interpreted. +If so, then it declares each given varName to be a global variable +rather than a local one. For the duration of the current procedure +(and only while executing in the current procedure), any reference to +varName will be bound to a global variable instead +of a local one.

+

An alternative to using global is to use the :: prefix +to explicitly name a variable in the global scope.

+
+
+

if

+

if expr1 ?then? body1 elseif expr2 ?then? body2 elseif … ?else? ?bodyN?

+

The if command evaluates expr1 as an expression (in the same way +that expr evaluates its argument). The value of the expression must +be numeric; if it is non-zero then body1 is executed by passing it to +the Tcl interpreter.

+

Otherwise expr2 is evaluated as an expression and if it is non-zero +then body2 is executed, and so on.

+

If none of the expressions evaluates to non-zero then bodyN is executed.

+

The then and else arguments are optional noise words to make the +command easier to read.

+

There may be any number of elseif clauses, including zero. bodyN +may also be omitted as long as else is omitted too.

+

The return value from the command is the result of the body script that +was executed, or an empty string if none of the expressions was non-zero +and there was no bodyN.

+
+
+

incr

+

incr varName ?increment?

+

Increment the value stored in the variable whose name is varName. +The value of the variable must be integral.

+

If increment is supplied then its value (which must be an +integer) is added to the value of variable varName; otherwise +1 is added to varName.

+

The new value is stored as a decimal string in variable varName +and also returned as result.

+

If the variable does not exist, the variable is implicitly created +and set to 0 first.

+
+
+

info

+
+
+info option ?arg arg …? +
+
+

+Provide information about various internals to the Tcl interpreter. +The legal option's (which may be abbreviated) are: +

+
+
+info args procname +
+
+

+ Returns a list containing the names of the arguments to procedure + procname, in order. Procname must be the name of a + Tcl command procedure. +

+
+
+info body procname +
+
+

+ Returns the body of procedure procname. Procname must be + the name of a Tcl command procedure. +

+
+
+info channels +
+
+

+ Returns a list of all open aio channels. +

+
+
+info channels +
+
+

+ Returns a list of all open file handles from open or socket +

+
+
+info commands ?pattern? +
+
+

+ If pattern isn’t specified, returns a list of names of all the + Tcl commands, including both the built-in commands written in C and + the command procedures defined using the proc command. + If pattern is specified, only those names matching pattern + are returned. Matching is determined using the same rules as for + string match. +

+
+
+info complete command +
+
+

+ Returns 1 if command is a complete Tcl command in the sense of + having no unclosed quotes, braces, brackets or array element names, + If the command doesn’t appear to be complete then 0 is returned. + This command is typically used in line-oriented input environments + to allow users to type in commands that span multiple lines; if the + command isn’t complete, the script can delay evaluating it until additional + lines have been typed to complete the command. +

+
+
+info exists varName +
+
+

+ Returns 1 if the variable named varName exists in the + current context (either as a global or local variable), returns 0 + otherwise. +

+
+
+info frame ?number? +
+
+

+ If number is not specified, this command returns a number + which is the same result as info level - the current stack frame level. + If number is specified, then the result is a list consisting of the procedure, + filename and line number for the procedure call at level number on the stack. + If number is positive then it selects a particular stack level (1 refers + to the top-most active procedure, 2 to the procedure it called, and + so on); otherwise it gives a level relative to the current level + (0 refers to the current procedure, -1 to its caller, and so on). + The level has an identical meaning to info level. +

+
+
+info globals ?pattern? +
+
+

+ If pattern isn’t specified, returns a list of all the names + of currently-defined global variables. + If pattern is specified, only those names matching pattern + are returned. Matching is determined using the same rules as for + string match. +

+
+
+info hostname +
+
+

+ An alias for os.gethostname for compatibility with Tcl 6.x +

+
+
+info level ?number? +
+
+

+ If number is not specified, this command returns a number + giving the stack level of the invoking procedure, or 0 if the + command is invoked at top-level. If number is specified, + then the result is a list consisting of the name and arguments for the + procedure call at level number on the stack. If number + is positive then it selects a particular stack level (1 refers + to the top-most active procedure, 2 to the procedure it called, and + so on); otherwise it gives a level relative to the current level + (0 refers to the current procedure, -1 to its caller, and so on). + See the uplevel command for more information on what stack + levels mean. +

+
+
+info locals ?pattern? +
+
+

+ If pattern isn’t specified, returns a list of all the names + of currently-defined local variables, including arguments to the + current procedure, if any. Variables defined with the global + and upvar commands will not be returned. If pattern is + specified, only those names matching pattern are returned. + Matching is determined using the same rules as for string match. +

+
+
+info nameofexecutable +
+
+

+ Returns the name of the binary file from which the application + was invoked, either + as a path relative to the current directory or as a full + path. If the path can’t be determined, returns the empty + string. +

+
+
+info procs ?pattern? +
+
+

+ If pattern isn’t specified, returns a list of all the + names of Tcl command procedures. + If pattern is specified, only those names matching pattern + are returned. Matching is determined using the same rules as for + string match. +

+
+
+info references +
+
+

+ Returns a list of all references which have not yet been garbage + collected. +

+
+
+info returncodes ?code? +
+
+

+ Returns a list representing the mapping of standard return codes + to names. e.g. {0 ok 1 error 2 return …}. If a code is given, + instead returns the name for the given code. +

+
+
+info script +
+
+

+ If a Tcl script file is currently being evaluated (i.e. there is a + call to Jim_EvalFile active or there is an active invocation + of the source command), then this command returns the name + of the innermost file being processed. Otherwise the command returns an + empty string. +

+
+
+info source script +
+
+

+ Returns the original source location of the given script as a list of + {filename linenumber}. If the source location can’t be determined, the + list {{} 0} is returned. +

+
+
+info stacktrace +
+
+

+ After an error is caught with catch, returns the stack trace as a list + of {procedure filename line …}. +

+
+
+info version +
+
+

+ Returns the version number for this version of Jim in the form x.yy. +

+
+
+info vars ?pattern? +
+
+

+ If pattern isn’t specified, + returns a list of all the names of currently-visible variables, including + both locals and currently-visible globals. + If pattern is specified, only those names matching pattern + are returned. Matching is determined using the same rules as for + string match. +

+
+
+
+
+

join

+

join list ?joinString?

+

The list argument must be a valid Tcl list. This command returns the +string formed by joining all of the elements of list together with +joinString separating each adjacent pair of elements.

+

The joinString argument defaults to a space character.

+
+
+

kill

+

kill ?SIG|-0? pid

+

Sends the given signal to the process identified by pid.

+

The signal may be specified by name or number in one of the following forms:

+
    +
  • +

    +TERM +

    +
  • +
  • +

    +SIGTERM +

    +
  • +
  • +

    +-TERM +

    +
  • +
  • +

    +15 +

    +
  • +
  • +

    +-15 +

    +
  • +
+

The signal name may be in either upper or lower case.

+

The special signal name -0 simply checks that a signal could be sent.

+

If no signal is specified, SIGTERM is used.

+

An error is raised if the signal could not be delivered.

+
+
+

lambda

+

lambda args ?statics? body

+

The lambda command is identical to proc, except rather than +creating a named procedure, it creates an anonymous procedure and returns +the name of the procedure.

+

See proc and GARBAGE COLLECTION, REFERENCES, LAMBDA for more detail.

+
+
+

lappend

+

lappend varName value ?value value …?

+

Treat the variable given by varName as a list and append each of +the value arguments to that list as a separate element, with spaces +between elements.

+

If varName doesn’t exist, it is created as a list with elements given +by the value arguments. lappend is similar to append except that +each value is appended as a list element rather than raw text.

+

This command provides a relatively efficient way to build up large lists. +For example, lappend a $b is much more efficient than

+
+
+
set a [concat $a [list $b]]
+
+

when $a is long.

+
+
+

lassign

+

lassign list varName ?varName? …

+

This command treats the value list as a list and assigns successive elements from that list to +the variables given by the varName arguments in order. If there are more variable names than +list elements, the remaining variables are set to the empty string. If there are more list ele- +ments than variables, a list of unassigned elements is returned.

+
+
+
jim> lassign {1 2 3} a b; puts a=$a,b=$b
+3
+a=1,b=2
+
+
+
+

local

+

local args

+

Executes it’s arguments as a command (per eval) and considers the return +value to be a procedure name, which is marked as having local scope. +This means that when the current procedure exits, the specified +procedure is deleted. This can be useful with lambda or simply +local procedures.

+

In addition, if a command already exists with the same name, +the existing command will be kept rather than deleted, and may be called +via upcall. The previous command will be restored when the current +command is deleted. See upcall for more details.

+

In this example, a local procedure is created. Note that the procedure +continues to have global scope while it is active.

+
+
+
proc outer {} {
+  # proc ... returns "inner" which is marked local
+  local proc inner {} {
+    # will be deleted when 'outer' exits
+  }
+
+
+
+
  inner
+  ...
+}
+
+

In this example, the lambda is deleted at the end of the procedure rather +than waiting until garbage collection.

+
+
+
proc outer {} {
+  set x [lambda inner {args} {
+    # will be deleted when 'outer' exits
+  }]
+  # Use 'function' here which simply returns $x
+  local function $x
+
+
+
+
  $x ...
+  ...
+}
+
+
+
+

lindex

+

lindex list index

+

Treats list as a Tcl list and returns element index from it +(0 refers to the first element of the list). +See STRING AND LIST INDEX SPECIFICATIONS for all allowed forms for index.

+

In extracting the element, lindex observes the same rules concerning +braces and quotes and backslashes as the Tcl command interpreter; however, +variable substitution and command substitution do not occur.

+

If index is negative or greater than or equal to the number of elements +in value, then an empty string is returned.

+
+
+

linsert

+

linsert list index element ?element element …?

+

This command produces a new list from list by inserting all +of the element arguments just before the element index +of list. Each element argument will become +a separate element of the new list. If index is less than +or equal to zero, then the new elements are inserted at the +beginning of the list. If index is greater than or equal +to the number of elements in the list, then the new elements are +appended to the list.

+

See STRING AND LIST INDEX SPECIFICATIONS for all allowed forms for index.

+
+
+

list

+

list arg ?arg …?

+

This command returns a list comprised of all the arguments, arg. Braces +and backslashes get added as necessary, so that the index command +may be used on the result to re-extract the original arguments, and also +so that eval may be used to execute the resulting list, with +arg1 comprising the command’s name and the other args comprising +its arguments. List produces slightly different results than +concat: concat removes one level of grouping before forming +the list, while list works directly from the original arguments. +For example, the command

+
+
+
list a b {c d e} {f {g h}}
+
+

will return

+
+
+
a b {c d e} {f {g h}}
+
+

while concat with the same arguments will return

+
+
+
a b c d e f {g h}
+
+
+
+

llength

+

llength list

+

Treats list as a list and returns a decimal string giving +the number of elements in it.

+
+
+

lset

+

lset varName ?index ..? newValue

+

Sets an element in a list.

+

The lset command accepts a parameter, varName, which it interprets +as the name of a variable containing a Tcl list. It also accepts +zero or more indices into the list. Finally, it accepts a new value +for an element of varName. If no indices are presented, the command +takes the form:

+
+
+
lset varName newValue
+
+

In this case, newValue replaces the old value of the variable +varName.

+

When presented with a single index, the lset command +treats the content of the varName variable as a Tcl list. It addresses +the index’th element in it (0 refers to the first element of the +list). When interpreting the list, lset observes the same rules +concerning braces and quotes and backslashes as the Tcl command +interpreter; however, variable substitution and command substitution +do not occur. The command constructs a new list in which the +designated element is replaced with newValue. This new list is +stored in the variable varName, and is also the return value from +the lset command.

+

If index is negative or greater than or equal to the number of +elements in $varName, then an error occurs.

+

See STRING AND LIST INDEX SPECIFICATIONS for all allowed forms for index.

+

If additional index arguments are supplied, then each argument is +used in turn to address an element within a sublist designated by +the previous indexing operation, allowing the script to alter +elements in sublists. The command,

+
+
+
lset a 1 2 newValue
+
+

replaces element 2 of sublist 1 with newValue.

+

The integer appearing in each index argument must be greater than +or equal to zero. The integer appearing in each index argument must +be strictly less than the length of the corresponding list. In other +words, the lset command cannot change the size of a list. If an +index is outside the permitted range, an error is reported.

+
+
+

lmap

+

lmap varName list body

+

lmap varList list ?varList2 list2 …? body

+

lmap is a "collecting foreach" which returns a list of its results.

+

For example:

+
+
+
jim> lmap i {1 2 3 4 5} {expr $i*$i}
+1 4 9 16 25
+jim> lmap a {1 2 3} b {A B C} {list $a $b}
+{1 A} {2 B} {3 C}
+
+

If the body invokes continue, no value is added for this iteration. +If the body invokes break, the loop ends and no more values are added.

+
+
+

load

+

load filename

+

Loads the dynamic extension, filename. Generally the filename should have +the extension .so. The initialisation function for the module must be based +on the name of the file. For example loading hwaccess.so will invoke +the initialisation function, Jim_hwaccessInit. Normally the load command +should not be used directly. Instead it is invoked automatically by package require.

+
+
+

lrange

+

lrange list first last

+

List must be a valid Tcl list. This command will return a new +list consisting of elements first through last, inclusive.

+

See STRING AND LIST INDEX SPECIFICATIONS for all allowed forms for first and last.

+

If last is greater than or equal to the number of elements +in the list, then it is treated as if it were end.

+

If first is greater than last then an empty string +is returned.

+

Note: lrange list first first does not always produce the +same result as lindex list first (although it often does +for simple fields that aren’t enclosed in braces); it does, however, +produce exactly the same results as list [lindex list first]

+
+
+

lreplace

+

lreplace list first last ?element element …?

+

Returns a new list formed by replacing one or more elements of +list with the element arguments.

+

First gives the index in list of the first element +to be replaced.

+

If first is less than zero then it refers to the first +element of list; the element indicated by first +must exist in the list.

+

Last gives the index in list of the last element +to be replaced; it must be greater than or equal to first.

+

See STRING AND LIST INDEX SPECIFICATIONS for all allowed forms for first and last.

+

The element arguments specify zero or more new arguments to +be added to the list in place of those that were deleted.

+

Each element argument will become a separate element of +the list.

+

If no element arguments are specified, then the elements +between first and last are simply deleted.

+
+
+

lrepeat

+

lrepeat number element1 ?element2 …?

+

Build a list by repeating elements number times (which must be +a positive integer).

+
+
+
jim> lrepeat 3 a b
+a b a b a b
+
+
+
+

lreverse

+

lreverse list

+

Returns the list in reverse order.

+
+
+
jim> lreverse {1 2 3}
+3 2 1
+
+
+
+

lsearch

+

lsearch ?options? list pattern

+

This command searches the elements list to see if one of them matches pattern. If so, the +command returns the index of the first matching element (unless the options -all, -inline or -bool are +specified.) If not, the command returns -1. The option arguments indicates how the elements of +the list are to be matched against pattern and must have one of the values below:

+

Note that this command is different from Tcl in that default match type is -exact rather than -glob.

+
+
+-exact +
+
+

+ pattern is a literal string that is compared for exact equality against each list element. + This is the default. +

+
+
+-glob +
+
+

+ pattern is a glob-style pattern which is matched against each list element using the same + rules as the string match command. +

+
+
+-regexp +
+
+

+ pattern is treated as a regular expression and matched against each list element using + the rules described by regexp. +

+
+
+-all +
+
+

+ Changes the result to be the list of all matching indices (or all matching values if + -inline is specified as well). If indices are returned, the indices will be in numeric + order. If values are returned, the order of the values will be the order of those values + within the input list. +

+
+
+-inline +
+
+

+ The matching value is returned instead of its index (or an empty string if no value + matches). If -all is also specified, then the result of the command is the list of all + values that matched. The -inline and -bool options are mutually exclusive. +

+
+
+-bool +
+
+

+ Changes the result to 1 if a match was found, or 0 otherwise. If -all is also specified, + the result will be a list of 0 and 1 for each element of the list depending upon whether + the corresponding element matches. The -inline and -bool options are mutually exclusive. +

+
+
+-not +
+
+

+ This negates the sense of the match, returning the index (or value + if -inline is specified) of the first non-matching value in the + list. If -bool is also specified, the 0 will be returned if a + match is found, or 1 otherwise. If -all is also specified, + non-matches will be returned rather than matches. +

+
+
+-nocase +
+
+

+ Causes comparisons to be handled in a case-insensitive manner. +

+
+
+
+
+

lsort

+

lsort ?-index listindex? ?-integer|-command cmdname? ?-decreasing|-increasing? list

+

Sort the elements of list, returning a new list in sorted order. +By default, ASCII sorting is used, with the result in increasing order.

+

If -integer is specified, numeric sorting is used.

+

If -command cmdname is specified, cmdname is treated as a command +name. For each comparison, cmdname $value1 $value2 is called which +should compare the values and return an integer less than, equal +to, or greater than zero if the $value1 is to be considered less +than, equal to, or greater than $value2, respectively.

+

If -decreasing is specified, the resulting list is in the opposite +order to what it would be otherwise. -increasing is the default.

+

If -index listindex is specified, each element of the list is treated as a list and +the given index is extracted from the list for comparison. The list index may +be any valid list index, such as 1, end or end-2.

+

If -index listindex is specified, each element of the list is treated as a list and +the given index is extracted from the list for comparison. The list index may +be any valid list index, such as 1, end or end-2.

+
+
+

open

+

open fileName ?access?

+

open |command-pipeline ?access?

+

Opens a file and returns an identifier +that may be used in future invocations +of commands like read, puts, and close. +fileName gives the name of the file to open.

+

The access argument indicates the way in which the file is to be accessed. +It may have any of the following values:

+
+
+r +
+
+

+ Open the file for reading only; the file must already exist. +

+
+
+r+ +
+
+

+ Open the file for both reading and writing; the file must + already exist. +

+
+
+w +
+
+

+ Open the file for writing only. Truncate it if it exists. If it doesn’t + exist, create a new file. +

+
+
+w+ +
+
+

+ Open the file for reading and writing. Truncate it if it exists. + If it doesn’t exist, create a new file. +

+
+
+a +
+
+

+ Open the file for writing only. The file must already exist, and the file + is positioned so that new data is appended to the file. +

+
+
+a+ +
+
+

+ Open the file for reading and writing. If the file doesn’t + exist, create a new empty file. Set the initial access position + to the end of the file. +

+
+
+

Access defaults to r.

+

If a file is opened for both reading and writing, then seek +must be invoked between a read and a write, or vice versa.

+

If the first character of fileName is "|" then the remaining +characters of fileName are treated as a list of arguments that +describe a command pipeline to invoke, in the same style as the +arguments for exec. In this case, the channel identifier returned +by open may be used to write to the command’s input pipe or read +from its output pipe, depending on the value of access. If write-only +access is used (e.g. access is w), then standard output for the +pipeline is directed to the current standard output unless overridden +by the command. If read-only access is used (e.g. access is r), +standard input for the pipeline is taken from the current standard +input unless overridden by the command.

+

The pid command may be used to return the process ids of the commands +forming the command pipeline.

+

See also socket, pid, exec

+
+
+

package

+

package provide name ?version?

+

Indicates that the current script provides the package named name. +If no version is specified, 1.0 is used.

+

Any script which provides a package may include this statement +as the first statement, although it is not required.

+

package require name ?version?*

+

Searches for the package with the given name by examining each path +in $::auto_path and trying to load $path/$name.so as a dynamic extension, +or $path/$name.tcl as a script package.

+

The first such file which is found is considered to provide the the package. +(The version number is ignored).

+

If $name.so exists, it is loaded with the load command, +otherwise if $name.tcl exists it is loaded with the source command.

+

If load or source fails, package require will fail immediately. +No further attempt will be made to locate the file.

+
+
+

pid

+

pid

+

pid fileId

+

The first form returns the process identifier of the current process.

+

The second form accepts a handle returned by open and returns a list +of the process ids forming the pipeline in the same form as exec … &. +If fileId represents a regular file handle rather than a command pipeline, +the empty string is returned instead.

+

See also open, exec

+
+
+

proc

+

proc name args ?statics? body

+

The proc command creates a new Tcl command procedure, name. +When the new command is invoked, the contents of body will be executed. +Tcl interpreter. args specifies the formal arguments to the procedure. +If specified, static, declares static variables which are bound to the +procedure.

+

See PROCEDURES for detailed information about Tcl procedures.

+

The proc command returns name (which is useful with local).

+

When a procedure is invoked, the procedure’s return value is the +value specified in a return command. If the procedure doesn’t +execute an explicit return, then its return value is the value +of the last command executed in the procedure’s body.

+

If an error occurs while executing the procedure body, then the +procedure-as-a-whole will return that same error.

+
+
+

puts

+

puts ?-nonewline? ?fileId? string

+

fileId puts ?-nonewline? string

+

Writes the characters given by string to the file given +by fileId. fileId must have been the return +value from a previous call to open, or it may be +stdout or stderr to refer to one of the standard I/O +channels; it must refer to a file that was opened for +writing.

+

In the first form, if no fileId is specified then it defaults to stdout. +puts normally outputs a newline character after string, +but this feature may be suppressed by specifying the -nonewline +switch.

+

Output to files is buffered internally by Tcl; the flush +command may be used to force buffered characters to be output.

+
+
+

pwd

+

pwd

+

Returns the path name of the current working directory.

+
+
+

rand

+

rand ?min? ?max?

+

Returns a random integer between min (defaults to 0) and max +(defaults to the maximum integer).

+

If only one argument is given, it is interpreted as max.

+
+
+

range

+

range ?start? end ?step?

+

Returns a list of integers starting at start (defaults to 0) +and ranging up to but not including end in steps of step defaults to 1).

+
+
+
jim> range 5
+0 1 2 3 4
+jim> range 2 5
+2 3 4
+jim> range 2 10 4
+2 6
+jim> range 7 4 -2
+7 5
+
+
+
+

read

+

read ?-nonewline? fileId

+

fileId read ?-nonewline?

+

read fileId numBytes

+

fileId read numBytes

+

In the first form, all of the remaining bytes are read from the file +given by fileId; they are returned as the result of the command. +If the -nonewline switch is specified then the last +character of the file is discarded if it is a newline.

+

In the second form, the extra argument specifies how many bytes to read; +exactly this many bytes will be read and returned, unless there are fewer than +numBytes bytes left in the file; in this case, all the remaining +bytes are returned.

+

fileId must be stdin or the return value from a previous call +to open; it must refer to a file that was opened for reading.

+
+
+

regexp

+

regexp ?-nocase? ?-line? ?-indices? ?-start offset? ?-all? ?-inline? ?--? exp string ?matchVar? ?subMatchVar subMatchVar …?

+

Determines whether the regular expression exp matches part or +all of string and returns 1 if it does, 0 if it doesn’t.

+

See REGULAR EXPRESSIONS above for complete information on the +syntax of exp and how it is matched against string.

+

If additional arguments are specified after string then they +are treated as the names of variables to use to return +information about which part(s) of string matched exp. +matchVar will be set to the range of string that +matched all of exp. The first subMatchVar will contain +the characters in string that matched the leftmost parenthesized +subexpression within exp, the next subMatchVar will +contain the characters that matched the next parenthesized +subexpression to the right in exp, and so on.

+

Normally, matchVar and the each subMatchVar are set to hold the +matching characters from string, however see -indices and +-inline below.

+

If there are more values for subMatchVar than parenthesized subexpressions +within exp, or if a particular subexpression in exp doesn’t +match the string (e.g. because it was in a portion of the expression +that wasn’t matched), then the corresponding subMatchVar will be +set to "-1 -1" if -indices has been specified or to an empty +string otherwise.

+

The following switches modify the behaviour of regexp

+
+
+-nocase +
+
+

+ Causes upper-case and lower-case characters to be treated as + identical during the matching process. +

+
+
+-line +
+
+

+ Use newline-sensitive matching. By default, newline + is a completely ordinary character with no special meaning in + either REs or strings. With this flag, [ bracket expressions + and . never match newline, a anchor matches the null + string after any newline in the string in addition to its normal + function, and the $ anchor matches the null string before any + newline in the string in addition to its normal function. +

+
+
+-indices +
+
+

+ Changes what is stored in the subMatchVars. Instead of + storing the matching characters from string, each variable + will contain a list of two decimal strings giving the indices + in string of the first and last characters in the matching + range of characters. +

+
+
+-start offset +
+
+

+ Specifies a character index offset into the string at which to start + matching the regular expression. If -indices is + specified, the indices will be indexed starting from the + absolute beginning of the input string. offset will be + constrained to the bounds of the input string. +

+
+
+-all +
+
+

+ Causes the regular expression to be matched as many times as possible + in the string, returning the total number of matches found. If this + is specified with match variables, they will contain information + for the last match only. +

+
+
+-inline +
+
+

+ Causes the command to return, as a list, the data that would otherwise + be placed in match variables. When using -inline, match variables + may not be specified. If used with -all, the list will be concatenated + at each iteration, such that a flat list is always returned. For + each match iteration, the command will append the overall match + data, plus one element for each subexpression in the regular + expression. +

+
+
+-- +
+
+

+ Marks the end of switches. The argument following this one will be + treated as exp even if it starts with a -. +

+
+
+
+
+

regsub

+

regsub ?-nocase? ?-all? ?-line? ?-start offset? ?--? exp string subSpec ?varName?

+

This command matches the regular expression exp against +string using the rules described in REGULAR EXPRESSIONS +above.

+

If varName is specified, the commands stores string to varName +with the substitutions detailed below, and returns the number of +substitutions made (normally 1 unless -all is specified). +This is 0 if there were no matches.

+

If varName is not specified, the substituted string will be returned +instead.

+

When copying string, the portion of string that +matched exp is replaced with subSpec. +If subSpec contains a & or \0, then it is replaced +in the substitution with the portion of string that +matched exp.

+

If subSpec contains a \n, where n is a digit +between 1 and 9, then it is replaced in the substitution with +the portion of string that matched the n-th +parenthesized subexpression of exp. +Additional backslashes may be used in subSpec to prevent special +interpretation of & or \0 or \n or +backslash.

+

The use of backslashes in subSpec tends to interact badly +with the Tcl parser’s use of backslashes, so it’s generally +safest to enclose subSpec in braces if it includes +backslashes.

+

The following switches modify the behaviour of regsub

+
+
+-nocase +
+
+

+ Upper-case characters in string are converted to lower-case + before matching against exp; however, substitutions + specified by subSpec use the original unconverted form + of string. +

+
+
+-all +
+
+

+ All ranges in string that match exp are found and substitution + is performed for each of these ranges, rather than only the + first. The & and \n sequences are handled for + each substitution using the information from the corresponding + match. +

+
+
+-line +
+
+

+ Use newline-sensitive matching. By default, newline + is a completely ordinary character with no special meaning in + either REs or strings. With this flag, [ bracket expressions + and . never match newline, a anchor matches the null + string after any newline in the string in addition to its normal + function, and the $ anchor matches the null string before any + newline in the string in addition to its normal function. +

+
+
+-start offset +
+
+

+ Specifies a character index offset into the string at which to + start matching the regular expression. offset will be + constrained to the bounds of the input string. +

+
+
+-- +
+
+

+ Marks the end of switches. The argument following this one will be + treated as exp even if it starts with a -. +

+
+
+
+
+

ref

+

ref string tag ?finalizer?

+

Create a new reference containing string of type tag. +If finalizer is specified, it is a command which will be invoked +when the a garbage collection cycle runs and this reference is +no longer accessible.

+

The finalizer is invoked as:

+
+
+
+finalizer 'reference string'+
+
+

See GARBAGE COLLECTION, REFERENCES, LAMBDA for more detail.

+
+
+

rename

+

rename oldName newName

+

Rename the command that used to be called oldName so that it +is now called newName. If newName is an empty string +(e.g. {}) then oldName is deleted. The rename command +returns an empty string as result.

+
+
+

return

+

return ?-code code? ?-errorinfo stacktrace? ?-errorcode errorcode? ?-level n? ?value?

+

Return immediately from the current procedure (or top-level command +or source command), with value as the return value. If value +is not specified, an empty string will be returned as result.

+

If -code is specified (as either a number or ok, error, break, +continue, signal, return or exit), this code will be used instead +of JIM_OK. This is generally useful when implementing flow of control +commands.

+

If -level is specified and greater than 1, it has the effect of delaying +the new return code from -code. This is useful when rethrowing an error +from catch. See the implementation of try/catch in tclcompat.tcl for +an example of how this is done.

+

Note: The following options are only used when -code is JIM_ERR.

+

If -errorinfo is specified (as returned from info stacktrace) +it is used to initialize the stacktrace.

+

If -errorcode is specified, it is used to set the global variable $::errorCode.

+
+
+

scan

+

scan string format varName1 ?varName2 …?

+

This command parses fields from an input string in the same fashion +as the C sscanf procedure. String gives the input to be parsed +and format indicates how to parse it, using % fields as in +sscanf. All of the sscanf options are valid; see the sscanf +man page for details. Each varName gives the name of a variable; +when a field is scanned from string, the result is converted back +into a string and assigned to the corresponding varName. The +only unusual conversion is for %c. For %c conversions a single +character value is converted to a decimal string, which is then +assigned to the corresponding varName; no field width may be +specified for this conversion.

+
+
+

seek

+

seek fileId offset ?origin?

+

fileId seek offset ?origin?

+

Change the current access position for fileId. +The offset and origin arguments specify the position at +which the next read or write will occur for fileId. +offset must be a number (which may be negative) and origin +must be one of the following:

+
+
+start +
+
+

+ The new access position will be offset bytes from the start + of the file. +

+
+
+current +
+
+

+ The new access position will be offset bytes from the current + access position; a negative offset moves the access position + backwards in the file. +

+
+
+end +
+
+

+ The new access position will be offset bytes from the end of + the file. A negative offset places the access position before + the end-of-file, and a positive offset places the access position + after the end-of-file. +

+
+
+

The origin argument defaults to start.

+

fileId must have been the return value from a previous call to +open, or it may be stdin, stdout, or stderr to refer to one +of the standard I/O channels.

+

This command returns an empty string.

+
+
+

set

+

set varName ?value?

+

Returns the value of variable varName.

+

If value is specified, then set the value of varName to value, +creating a new variable if one doesn’t already exist, and return +its value.

+

If varName contains an open parenthesis and ends with a +close parenthesis, then it refers to an array element: the characters +before the open parenthesis are the name of the array, and the characters +between the parentheses are the index within the array. +Otherwise varName refers to a scalar variable.

+

If no procedure is active, then varName refers to a global +variable.

+

If a procedure is active, then varName refers to a parameter +or local variable of the procedure, unless the global command +has been invoked to declare varName to be global.

+

The :: prefix may also be used to explicitly reference a variable +in the global scope.

+
+
+

setref

+

setref reference string

+

Store a new string in reference, replacing the existing string. +The reference must be a valid reference create with the ref +command.

+

See GARBAGE COLLECTION, REFERENCES, LAMBDA for more detail.

+
+
+

signal

+

Command for signal handling.

+

See kill for the different forms which may be used to specify signals.

+

Commands which return a list of signal names do so using the canonical form: +"SIGINT SIGTERM".

+
+
+signal handle ?signals …? +
+
+

+ If no signals are given, returns a list of all signals which are currently + being handled. + If signals are specified, these are added to the list of signals currently + being handled. +

+
+
+signal ignore ?signals …? +
+
+

+ If no signals are given, returns a lists all signals which are currently + being ignored. + If signals are specified, these are added to the list of signals + currently being ignored. These signals are still delivered, but + are not considered by catch -signal or try -signal. Use + signal check to determine which signals have occurred but + been ignored. +

+
+
+signal default ?signals …? +
+
+

+ If no signals are given, returns a lists all signals which are currently have + the default behaviour. + If signals are specified, these are added to the list of signals which have + the default behaviour. +

+
+
+signal check ?-clear? ?signals …? +
+
+

+ Returns a list of signals which have been delivered to the process + but are ignored. If signals are specified, only that set of signals will + be checked, otherwise all signals will be checked. + If -clear is specified, any signals returned are removed and will not be + returned by subsequent calls to signal check unless delivered again. +

+
+
+signal throw ?signal? +
+
+

+ Raises the given signal, which defaults to SIGINT if not specified. + The behaviour is identical to: +

+
+
+
kill signal [pid]
+
+
+
+

Note that signal handle and signal ignore represent two forms of signal +handling. signal handle is used in conjunction with catch -signal or try -signal +to immediately abort execution when the signal is delivered. Alternatively, signal ignore +is used in conjunction with signal check to handle signal synchronously. Consider the +two examples below.

+

Prevent a processing from taking too long

+
+
+
signal handle SIGALRM
+alarm 20
+try -signal {
+    .. possibly long running process ..
+    alarm 0
+} on signal {sig} {
+    puts stderr "Process took too long"
+}
+
+

Handle SIGHUP to reconfigure:

+
+
+
signal ignore SIGHUP
+while {1} {
+    ... handle configuration/reconfiguration ...
+    while {[signal check -clear SIGHUP] eq ""} {
+        ... do processing ..
+    }
+    # Received SIGHUP, so reconfigure
+}
+
+
+
+

sleep

+

sleep seconds

+

Pauses for the given number of seconds, which may be a floating +point value less than one to sleep for less than a second, or an +integer to sleep for one or more seconds.

+
+
+

source

+

source fileName

+

Read file fileName and pass the contents to the Tcl interpreter +as a sequence of commands to execute in the normal fashion. The return +value of source is the return value of the last command executed +from the file. If an error occurs in executing the contents of the +file, then the source command will return that error.

+

If a return command is invoked from within the file, the remainder of +the file will be skipped and the source command will return +normally with the result from the return command.

+
+
+

split

+

split string ?splitChars?

+

Returns a list created by splitting string at each character +that is in the splitChars argument.

+

Each element of the result list will consist of the +characters from string between instances of the +characters in splitChars.

+

Empty list elements will be generated if string contains +adjacent characters in splitChars, or if the first or last +character of string is in splitChars.

+

If splitChars is an empty string then each character of +string becomes a separate element of the result list.

+

SplitChars defaults to the standard white-space characters. +For example,

+
+
+
split "comp.unix.misc" .
+
+

returns "comp unix misc" and

+
+
+
split "Hello world" {}
+
+

returns "H e l l o { } w o r l d".

+
+
+

stackdump

+

stackdump stacktrace

+

Creates a human readable representation of a stack trace.

+
+
+

stacktrace

+

stacktrace

+

Returns a live stack trace as a list of proc file line proc file line …. +Iteratively uses info frame to create the stack trace. This stack trace is in the +same form as produced by catch and info stacktrace

+

See also stackdump.

+
+
+

string

+

string option arg ?arg …?

+

Perform one of several string operations, depending on option. +The legal options (which may be abbreviated) are:

+
+
+*string bytelength string +
+
+

+ Returns the length of the string in bytes. This will return + the same value as string length if UTF-8 support is not enabled, + or if the string is composed entirely of ASCII characters. + See UTF-8 AND UNICODE. +

+
+
+string compare ?-nocase? string1 string2 +
+
+

+ Perform a character-by-character comparison of strings string1 and + string2 in the same way as the C strcmp procedure. Return + -1, 0, or 1, depending on whether string1 is lexicographically + less than, equal to, or greater than string2. + Performs a case-insensitive comparison if -nocase is specified. +

+
+
+string equal ?-nocase? string1 string2 +
+
+

+ Returns 1 if the strings are equal, or 0 otherwise. + Performs a case-insensitive comparison if -nocase is specified. +

+
+
+string first string1 string2 ?firstIndex? +
+
+

+ Search string2 for a sequence of characters that exactly match + the characters in string1. If found, return the index of the + first character in the first such match within string2. If not + found, return -1. If firstIndex is specified, matching will start + from firstIndex of string1. +

+
+
+ +
+
+

+ See STRING AND LIST INDEX SPECIFICATIONS for all allowed forms for firstIndex. +

+
+
+string index string charIndex +
+
+

+ Returns the charIndex'th character of the string + argument. A charIndex of 0 corresponds to the first + character of the string. + If charIndex is less than 0 or greater than + or equal to the length of the string then an empty string is + returned. +

+
+
+ +
+
+

+ See STRING AND LIST INDEX SPECIFICATIONS for all allowed forms for charIndex. +

+
+
+string is class ?-strict? string +
+
+

+ Returns 1 if string is a valid member of the specified character + class, otherwise returns 0. If -strict is specified, then an + empty string returns 0, otherwise an empty string will return 1 + on any class. The following character classes are recognized + (the class name can be abbreviated): +

+
+
+alnum +
+
+

+Any alphabet or digit character. +

+
+
+alpha +
+
+

+Any alphabet character. +

+
+
+ascii +
+
+

+Any character with a value less than 128 (those that are in the 7-bit ascii range). +

+
+
+control +
+
+

+Any control character. +

+
+
+digit +
+
+

+Any digit character. +

+
+
+double +
+
+

+Any of the valid forms for a double in Tcl, with optional surrounding whitespace. + In case of under/overflow in the value, 0 is returned. +

+
+
+graph +
+
+

+Any printing character, except space. +

+
+
+integer +
+
+

+Any of the valid string formats for an integer value in Tcl, with optional surrounding whitespace. +

+
+
+lower +
+
+

+Any lower case alphabet character. +

+
+
+print +
+
+

+Any printing character, including space. +

+
+
+punct +
+
+

+Any punctuation character. +

+
+
+space +
+
+

+Any space character. +

+
+
+upper +
+
+

+Any upper case alphabet character. +

+
+
+xdigit +
+
+

+Any hexadecimal digit character ([0-9A-Fa-f]). +

+
+
+
+
+ +
+
+

+ Note that string classification does not respect UTF-8. See UTF-8 AND UNICODE +

+
+
+string last string1 string2 ?lastIndex? +
+
+

+ Search string2 for a sequence of characters that exactly match + the characters in string1. If found, return the index of the + first character in the last such match within string2. If there + is no match, then return -1. If lastIndex is specified, only characters + up to lastIndex of string2 will be considered in the match. +

+
+
+ +
+
+

+ See STRING AND LIST INDEX SPECIFICATIONS for all allowed forms for lastIndex. +

+
+
+string length string +
+
+

+ Returns a decimal string giving the number of characters in string. + If UTF-8 support is enabled, this may be different than the number of bytes. + See UTF-8 AND UNICODE +

+
+
+string match ?-nocase? pattern string +
+
+

+ See if pattern matches string; return 1 if it does, 0 + if it doesn’t. Matching is done in a fashion similar to that + used by the C-shell. For the two strings to match, their contents + must be identical except that the following special sequences + may appear in pattern: +

+
+
+* +
+
+

+ Matches any sequence of characters in string, + including a null string. +

+
+
+? +
+
+

+ Matches any single character in string. +

+
+
+[chars] +
+
+

+ Matches any character in the set given by chars. + If a sequence of the form x-y appears in chars, + then any character between x and y, inclusive, + will match. +

+
+
+\x +
+
+

+ Matches the single character x. This provides a way of + avoiding the special interpretation of the characters `\*?[]\` + in pattern. +

+
+
+
+
+ +
+
+

+ Performs a case-insensitive comparison if -nocase is specified. +

+
+
+string range string first last +
+
+

+ Returns a range of consecutive characters from string, starting + with the character whose index is first and ending with the + character whose index is last. An index of 0 refers to the + first character of the string. +

+
+
+ +
+
+

+ See STRING AND LIST INDEX SPECIFICATIONS for all allowed forms for first and last. +

+
+
+ +
+
+

+ If first is less than zero then it is treated as if it were zero, and + if last is greater than or equal to the length of the string then + it is treated as if it were end. If first is greater than + last then an empty string is returned. +

+
+
+string repeat string count +
+
+

+ Returns a new string consisting of string repeated count times. +

+
+
+string reverse string +
+
+

+ Returns a string that is the same length as string but + with its characters in the reverse order. +

+
+
+string tolower string +
+
+

+ Returns a value equal to string except that all upper case + letters have been converted to lower case. +

+
+
+string toupper string +
+
+

+ Returns a value equal to string except that all lower case + letters have been converted to upper case. +

+
+
+string trim string ?chars? +
+
+

+ Returns a value equal to string except that any leading + or trailing characters from the set given by chars are + removed. + If chars is not specified then white space is removed + (spaces, tabs, newlines, and carriage returns). +

+
+
+string trimleft string ?chars? +
+
+

+ Returns a value equal to string except that any + leading characters from the set given by chars are + removed. + If chars is not specified then white space is removed + (spaces, tabs, newlines, and carriage returns). +

+
+
+string trimright string ?chars? +
+
+

+ Returns a value equal to string except that any + trailing characters from the set given by chars are + removed. + If chars is not specified then white space is removed + (spaces, tabs, newlines, and carriage returns). + Null characters are always removed. +

+
+
+
+
+

subst

+

subst ?-nobackslashes? ?-nocommands? ?-novariables? string

+

This command performs variable substitutions, command substitutions, +and backslash substitutions on its string argument and returns the +fully-substituted result. The substitutions are performed in exactly +the same way as for Tcl commands. As a result, the string argument +is actually substituted twice, once by the Tcl parser in the usual +fashion for Tcl commands, and again by the subst command.

+

If any of the -nobackslashes, -nocommands, or -novariables are +specified, then the corresponding substitutions are not performed. +For example, if -nocommands is specified, no command substitution +is performed: open and close brackets are treated as ordinary +characters with no special interpretation.

+

Note: when it performs its substitutions, subst does not give any +special treatment to double quotes or curly braces. For example, +the following script returns xyz {44}, not xyz {$a}.

+
+
+
set a 44
+subst {xyz {$a}}
+
+
+
+

switch

+

switch ?options? string pattern body ?pattern body …?

+

switch ?options? string {pattern body ?pattern body …?}

+

The switch command matches its string argument against each of +the pattern arguments in order. As soon as it finds a pattern that +matches string it evaluates the following body and returns the +result of that evaluation. If the last pattern argument is default +then it matches anything. If no pattern argument matches string and +no default is given, then the switch command returns an empty string. +If the initial arguments to switch start with - then they are treated +as options. The following options are currently supported:

+
+
+-exact +
+
+

+ Use exact matching when comparing string to a + pattern. This is the default. +

+
+
+-glob +
+
+

+ When matching string to the patterns, use glob-style + matching (i.e. the same as implemented by the string + match command). +

+
+
+-regexp +
+
+

+ When matching string to the patterns, use regular + expression matching (i.e. the same as implemented + by the regexp command). +

+
+
+-command commandname +
+
+

+ When matching string to the patterns, use the given command, which + must be a single word. The command is invoked as + commandname pattern string, or commandname -nocase pattern string + and must return 1 if matched, or 0 if not. +

+
+
+-- +
+
+

+ Marks the end of options. The argument following + this one will be treated as string even if it starts + with a -. +

+
+
+

Two syntaxes are provided for the pattern and body arguments. The +first uses a separate argument for each of the patterns and commands; +this form is convenient if substitutions are desired on some of the +patterns or commands. The second form places all of the patterns +and commands together into a single argument; the argument must +have proper list structure, with the elements of the list being the +patterns and commands. The second form makes it easy to construct +multi-line switch commands, since the braces around the whole list +make it unnecessary to include a backslash at the end of each line. +Since the pattern arguments are in braces in the second form, no +command or variable substitutions are performed on them; this makes +the behaviour of the second form different than the first form in +some cases.

+

If a body is specified as - it means that the body for the next +pattern should also be used as the body for this pattern (if the +next pattern also has a body of “-” then the body after that is +used, and so on). This feature makes it possible to share a single +body among several patterns.

+

Below are some examples of switch commands:

+
+
+
switch abc a - b {format 1} abc {format 2} default {format 3}
+
+

will return 2,

+
+
+
switch -regexp aaab {
+       ^a.*b$ -
+       b {format 1}
+       a* {format 2}
+       default {format 3}
+}
+
+

will return 1, and

+
+
+
switch xyz {
+       a -
+       b {format 1}
+       a* {format 2}
+       default {format 3}
+}
+
+

will return 3.

+
+
+

tailcall

+

tailcall cmd ?arg…?

+

The tailcall command provides an optimised way of invoking a command whilst replacing +the current call frame. This is similar to exec in Bourne Shell.

+

The following are identical except the first immediately replaces the current call frame.

+
+
+
tailcall a b c
+
+
+
+
return [uplevel 1 a b c]
+
+

tailcall is useful for a dispatch mechanism:

+
+
+
proc a {cmd args} {
+  tailcall sub_$cmd {*}$args
+}
+proc sub_cmd1 ...
+proc sub_cmd2 ...
+
+
+
+

tell

+

tell fileId

+

fileId tell

+

Returns a decimal string giving the current access position in +fileId.

+

fileId must have been the return value from a previous call to +open, or it may be stdin, stdout, or stderr to refer to one +of the standard I/O channels.

+
+
+

throw

+

throw code ?msg?

+

This command throws an exception (return) code along with an optional message. +This command is mostly for convenient usage with try.

+

The command throw break is equivalent to break. +The command throw 20 message can be caught with an on 20 … clause to try.

+
+
+

time

+

time command ?count?

+

This command will call the Tcl interpreter count +times to execute command (or once if count isn’t +specified). It will then return a string of the form

+
+
+
503 microseconds per iteration
+
+

which indicates the average amount of time required per iteration, +in microseconds.

+

Time is measured in elapsed time, not CPU time.

+
+
+

try

+

try ?catchopts? tryscript ?on returncodes {?resultvar? ?optsvar?} handlerscript …? ?finally finalscript?

+

The try command is provided as a convenience for exception handling.

+

This interpeter first evaluates tryscript under the effect of the catch +options catchopts (e.g. -signal -noexit --, see catch).

+

It then evaluates the script for the first matching on handler +(there many be zero or more) based on the return code from the try +section. For example a normal JIM_ERR error will be matched by +an on error handler.

+

Finally, any finalscript is evaluated.

+

The result of this command is the result of tryscript, except in the +case where an exception occurs in a matching on handler script or the finally script, +in which case the result is this new exception.

+

The specified returncodes is a list of return codes either as names (ok, error, break, etc.) +or as integers.

+

If resultvar and optsvar are specified, they are set as for catch before evaluating +the matching handler.

+

For example:

+
+
+
set f [open input]
+try -signal {
+    process $f
+} on {continue break} {} {
+    error "Unexpected break/continue"
+} on error {msg opts} {
+    puts "Dealing with error"
+    return {*}$opts $msg
+} on signal sig {
+    puts "Got signal: $sig"
+} finally {
+    $f close
+}
+
+

If break, continue or error are raised, they are dealt with by the matching +handler.

+

In any case, the file will be closed via the finally clause.

+

See also throw, catch, return, error.

+
+
+

unknown

+

unknown cmdName ?arg arg …?

+

This command doesn’t actually exist as part of Tcl, but Tcl will +invoke it if it does exist.

+

If the Tcl interpreter encounters a command name for which there +is not a defined command, then Tcl checks for the existence of +a command named unknown.

+

If there is no such command, then the interpreter returns an +error.

+

If the unknown command exists, then it is invoked with +arguments consisting of the fully-substituted name and arguments +for the original non-existent command.

+

The unknown command typically does things like searching +through library directories for a command procedure with the name +cmdName, or expanding abbreviated command names to full-length, +or automatically executing unknown commands as UNIX sub-processes.

+

In some cases (such as expanding abbreviations) unknown will +change the original command slightly and then (re-)execute it. +The result of the unknown command is used as the result for +the original non-existent command.

+
+
+

unset

+

unset ?-nocomplain? ?--? ?name name …?

+

Remove variables. +Each name is a variable name, specified in any of the +ways acceptable to the set command.

+

If a name refers to an element of an array, then that +element is removed without affecting the rest of the array.

+

If a name consists of an array name with no parenthesized +index, then the entire array is deleted.

+

The unset command returns an empty string as result.

+

An error occurs if any of the variables doesn’t exist, unless -nocomplain +is specified. The -- argument may be specified to stop option processing +in case the variable name may be -nocomplain.

+
+
+

upcall

+

upcall command ?args …?

+

May be used from within a proc defined as local proc in order to call +the previous, hidden version of the same command.

+

If there is no previous definition of the command, an error is returned.

+
+
+

uplevel

+

uplevel ?level? command ?command …?

+

All of the command arguments are concatenated as if they had +been passed to concat; the result is then evaluated in the +variable context indicated by level. Uplevel returns +the result of that evaluation. If level is an integer, then +it gives a distance (up the procedure calling stack) to move before +executing the command. If level consists of # followed by +a number then the number gives an absolute level number. If level +is omitted then it defaults to 1. Level cannot be +defaulted if the first command argument starts with a digit or #.

+

For example, suppose that procedure a was invoked +from top-level, and that it called b, and that b called c. +Suppose that c invokes the uplevel command. If level +is 1 or #2 or omitted, then the command will be executed +in the variable context of b. If level is 2 or #1 +then the command will be executed in the variable context of a.

+

If level is 3 or #0 then the command will be executed +at top-level (only global variables will be visible). +The uplevel command causes the invoking procedure to disappear +from the procedure calling stack while the command is being executed. +In the above example, suppose c invokes the command

+
+
+
uplevel 1 {set x 43; d}
+
+

where d is another Tcl procedure. The set command will +modify the variable x in b’s context, and 'd will execute +at level 3, as if called from b. If it in turn executes +the command

+
+
+
uplevel {set x 42}
+
+

then the set command will modify the same variable x in b’s +context: the procedure 'c does not appear to be on the call stack +when d is executing. The command info level may +be used to obtain the level of the current procedure.

+

Uplevel makes it possible to implement new control +constructs as Tcl procedures (for example, uplevel could +be used to implement the while construct as a Tcl procedure).

+
+
+

upvar

+

upvar ?level? otherVar myVar ?otherVar myVar …?

+

This command arranges for one or more local variables in the current +procedure to refer to variables in an enclosing procedure call or +to global variables.

+

Level may have any of the forms permitted for the uplevel +command, and may be omitted if the first letter of the first otherVar +isn’t # or a digit (it defaults to 1).

+

For each otherVar argument, upvar makes the variable +by that name in the procedure frame given by level (or at +global level, if level is #0) accessible +in the current procedure by the name given in the corresponding +myVar argument.

+

The variable named by otherVar need not exist at the time of the +call; it will be created the first time myVar is referenced, just like +an ordinary variable.

+

Upvar may only be invoked from within procedures.

+

Upvar returns an empty string.

+

The upvar command simplifies the implementation of call-by-name +procedure calling and also makes it easier to build new control constructs +as Tcl procedures. +For example, consider the following procedure:

+
+
+
proc add2 name {
+    upvar $name x
+    set x [expr $x+2]
+}
+
+

Add2 is invoked with an argument giving the name of a variable, +and it adds two to the value of that variable. +Although add2 could have been implemented using uplevel +instead of upvar, upvar makes it simpler for add2 +to access the variable in the caller’s procedure frame.

+
+
+

while

+

while test body

+

The while command evaluates test as an expression +(in the same way that expr evaluates its argument). +The value of the expression must be numeric; if it is non-zero +then body is executed by passing it to the Tcl interpreter.

+

Once body has been executed then test is evaluated +again, and the process repeats until eventually test +evaluates to a zero numeric value. Continue +commands may be executed inside body to terminate the current +iteration of the loop, and break +commands may be executed inside body to cause immediate +termination of the while command.

+

The while command always returns an empty string.

+
+
+
+
+

OPTIONAL-EXTENSIONS

+
+

The following extensions may or may not be available depending upon +what options were selected when Jim Tcl was built.

+
+

posix: os.fork, os.wait, os.gethostname, os.getids, os.uptime

+
+
+os.fork +
+
+

+ Invokes fork(2) and returns the result. +

+
+
+os.wait -nohang pid +
+
+

+ Invokes waitpid(2), with WNOHANG if -nohang is specified. + Returns a list of 3 elements. +

+
+
+
{0 none 0} if -nohang is specified, and the process is still alive.
+
+
+
+
{-1 error <error-description>} if the process does not exist or has already been waited for.
+
+
+
+
{<pid> exit <exit-status>} if the process exited normally.
+
+
+
+
{<pid> signal <signal-number>} if the process terminated on a signal.
+
+
+
+
{<pid> other 0} otherwise (core dump, stopped, continued, etc.)
+
+
+
+os.gethostname +
+
+

+ Invokes gethostname(3) and returns the result. +

+
+
+os.getids +
+
+

+ Returns the various user/group ids for the current process. +

+
+
+
jim> os.getids
+uid 1000 euid 1000 gid 100 egid 100
+
+
+
+os.uptime +
+
+

+ Returns the number of seconds since system boot. See description of uptime in sysinfo(2). +

+
+
+
+
+
+
+

ANSI I/O (aio) and EVENTLOOP API

+
+

Jim provides an alternative object-based API for I/O.

+

See open and socket for commands which return an I/O handle.

+
+

aio

+
+
+$handle read ?-nonewline? ?len? +
+
+

+ Read and return bytes from the stream. To eof if no len. +

+
+
+$handle gets ?var? +
+
+

+ Read one line and return it or store it in the var +

+
+
+$handle puts ?-nonewline? str +
+
+

+ Write the string, with newline unless -nonewline +

+
+
+$handle copyto tofd ?size? +
+
+

+ Copy bytes to the file descriptor tofd. If size is specified, at most + that many bytes will be copied. Otherwise copying continues until the end + of the input file. Returns the number of bytes actually copied. +

+
+
+$handle flush +
+
+

+ Flush the stream +

+
+
+$handle filename +
+
+

+ Returns the original filename associated with the handle. + Handles returned by socket give the socket type instead of a filename. +

+
+
+$handle eof +
+
+

+ Returns 1 if stream is at eof +

+
+
+$handle close +
+
+

+ Closes the stream +

+
+
+$handle seek offset ?start|current|end? +
+
+

+ Seeks in the stream (default current) +

+
+
+$handle tell +
+
+

+ Returns the current seek position +

+
+
+$handle filename +
+
+

+ Returns the original filename used when opening the file. + If the handle was returned from socket, the type of the + handle is returned instead. +

+
+
+$handle ndelay ?0|1? +
+
+

+ Set O_NDELAY (if arg). Returns current/new setting. + Note that in general ANSI I/O interacts badly with non-blocking I/O. + Use with care. +

+
+
+$handle accept +
+
+

+ Server socket only: Accept a connection and return stream +

+
+
+$handle sendto str ?hostname:?port +
+
+

+ Sends the string, str, to the given address via the socket using sendto(2). + This is intended for udp sockets and may give an error or behave in unintended + ways for other handle types. + Returns the number of bytes written. +

+
+
+$handle recvfrom maxlen ?addrvar? +
+
+

+ Receives a message from the handle via recvfrom(2) and returns it. + At most maxlen bytes are read. + If addrvar is specified, the sending address of the message is stored in + the named variable in the form addr:port. See socket for details. +

+
+
+
+
+

eventloop: after, vwait, update

+

The following commands allow a script to be invoked when the given condition occurs. +If no script is given, returns the current script. If the given script is the empty, the +handler is removed.

+
+
+$handle readable ?readable-script? +
+
+

+ Sets or returns the script for when the socket is readable. +

+
+
+$handle writable ?writable-script? +
+
+

+ Sets or returns the script for when the socket is writable. +

+
+
+$handle onexception ?exception-script? +
+
+

+ Sets or returns the script for when when oob data received. +

+
+
+

For compatibility with Tcl, these may be prefixed with fileevent. e.g.

+
+
+ +
+
+

+ fileevent $handle readable +

+
+
+

Time-based execution is also available via the eventloop API.

+
+
+after ms +
+
+

+ Sleeps for the given number of milliseconds. No events are + processed during this time. +

+
+
+after ms|idle script ?script …? +
+
+

+ The scripts are concatenated and executed after the given + number of milliseconds have elapsed. If idle is specified, + the script will run the next time the event loop is processed + with vwait or update. The script is only run once and + then removed. Returns an event id. +

+
+
+after cancel id|command +
+
+

+ Cancels an after event with the given event id or matching + command (script). Returns the number of milliseconds + remaining until the event would have fired. Returns the + empty string if no matching event is found. +

+
+
+after info ?id? +
+
+

+ If id is not given, returns a list of current after + events. If id is given, returns a list containing the + associated script and either timer or idle to indicated + the type of the event. An error occurs if id does not + match an event. +

+
+
+vwait variable +
+
+

+ A call to vwait is enters the eventloop. vwait processes + events until the named (global) variable changes or all + event handlers are removed. The variable need not exist + beforehand. If there are no event handlers defined, vwait + returns immediately. +

+
+
+update ?idletasks? +
+
+

+ A call to update enters the eventloop to process expired events, but + no new events. If idletasks is specified, only expired time events are handled, + not file events. + Returns once handlers have been run for all expired events. +

+
+
+

Scripts are executed at the global scope. If an error occurs during a handler script, +an attempt is made to call (the user-defined command) bgerror with the details of the error. +If the bgerror commands does not exist, it is printed to stderr instead.

+

If a file event handler script generates an error, the handler is automatically removed +to prevent infinite errors. (A time event handler is always removed after execution).

+
+
+bgerror error +
+
+

+ Called when an event handler script generates an error. +

+
+
+
+
+

socket

+

Various socket types may be created.

+
+
+socket unix path +
+
+

+ A unix domain socket client. +

+
+
+socket unix.server path +
+
+

+ A unix domain socket server. +

+
+
+socket ?-ipv6? stream addr:port +
+
+

+ A TCP socket client. +

+
+
+*socket ?-ipv6? stream.server ?addr:?port +
+
+

+ A TCP socket server (addr defaults to 0.0.0.0 for IPv4 or [::] for IPv6). +

+
+
+socket ?-ipv6? dgram ?addr:port? +
+
+

+ A UDP socket client. If the address is not specified, + the client socket will be unbound and sendto must be used + to indicated the destination. +

+
+
+socket ?-ipv6? dgram.server addr:port +
+
+

+ A UDP socket server. +

+
+
+socket pipe +
+
+

+ A pipe. Note that unlike all other socket types, this command returns + a list of two channels: {read write} +

+
+
+

This command creates a socket connected (client) or bound (server) to the given +address.

+

The returned value is channel and may generally be used with the various file I/O +commands (gets, puts, read, etc.), either as object-based syntax or Tcl-compatible syntax.

+
+
+
set f [socket stream www.google.com:80]
+aio.sockstream1
+$f puts -nonewline "GET / HTTP/1.0\r\n\r\n"
+$f gets
+HTTP/1.0 302 Found
+$f close
+
+

Server sockets, however support only accept, which is most useful in conjunction with +the EVENTLOOP API.

+
+
+
set f [socket stream.server 80]
+$f readable {
+    set client [$f accept]
+    $client gets $buf
+    ...
+    $client puts -nonewline "HTTP/1.1 404 Not found\r\n"
+    $client close
+}
+vwait done
+
+

The address, addr, can be given in one of the following forms:

+
    +
  1. +

    +For IPv4 socket types, an IPv4 address such as 192.168.1.1 +

    +
  2. +
  3. +

    +For IPv6 socket types, an IPv6 address such as [fe80::1234] or [::] +

    +
  4. +
  5. +

    +A hostname +

    +
  6. +
+

Note that on many systems, listening on an IPv6 address such as [::] will +also accept requests via IPv4.

+

Where a hostname is specified, the first returned address is used +which matches the socket type is used.

+

The special type pipe isn’t really a socket.

+
+
+
lassign [socket pipe] r w
+
+
+
+
# Must close $w after exec
+exec ps >@$w &
+$w close
+
+
+
+
$r readable ...
+
+
+
+

syslog

+

syslog ?options? ?priority? message

+

This command sends message to system syslog facility with given +priority. Valid priorities are:

+
+
+
emerg, alert, crit, err, error, warning, notice, info, debug
+
+

If a message is specified, but no priority is specified, then a +priority of info is used.

+

By default, facility user is used and the value of global tcl variable +argv0 is used as ident string. However, any of the following options +may be specified before priority to control these parameters:

+
+
+-facility value +
+
+

+ Use specified facility instead of user. The following + values for facility are recognized: +

+
+
+
authpriv, cron, daemon, kernel, lpr, mail, news, syslog, user,
+uucp, local0-local7
+
+
+
+-ident string +
+
+

+ Use given string instead of argv0 variable for ident string. +

+
+
+-options integer +
+
+

+ Set syslog options such as LOG_CONS, LOG_NDELAY. You should + use numeric values of those from your system syslog.h file, + because I haven’t got time to implement yet another hash + table. +

+
+
+
+
+
+
+

BUILT-IN VARIABLES

+
+

The following global variables are created automatically +by the Tcl library.

+
+
+env +
+
+

+ This variable is set by Jim as an array + whose elements are the environment variables for the process. + Reading an element will return the value of the corresponding + environment variable. + This array is initialised at startup from the env command. + It may be modified and will affect the environment passed to + commands invoked with exec. +

+
+
+platform_tcl +
+
+

+ This variable is set by Jim as an array containing information + about the platform on which Jim was built. Currently this includes + os and platform. +

+
+
+auto_path +
+
+

+ This variable contains a list of paths to search for packages. + It defaults to a location based on where jim is installed + (e.g. /usr/local/lib/jim), but may be changed by jimsh + or the embedding application. Note that jimsh will consider + the environment variable $JIMLIB to be a list of colon-separated + list of paths to add to auto_path. +

+
+
+errorCode +
+
+

+ This variable holds the value of the -errorcode return + option set by the most recent error that occurred in this + interpreter. This list value represents additional information + about the error in a form that is easy to process with + programs. The first element of the list identifies a general + class of errors, and determines the format of the rest of + the list. The following formats for -errorcode return options + are used by the Tcl core; individual applications may define + additional formats. Currently only exec sets this variable. + Otherwise it will be NONE. +

+
+
+

The following global variables are set by jimsh.

+
+
+tcl_interactive +
+
+

+ This variable is set to 1 if jimsh is started in interactive mode + or 0 otherwise. +

+
+
+tcl_platform +
+
+

+ This variable is set by Jim as an array containing information + about the platform upon which Jim was built. The following is an + example of the contents of this array. +

+
+
+
tcl_platform(byteOrder)   = littleEndian
+tcl_platform(os)          = Darwin
+tcl_platform(platform)    = unix
+tcl_platform(pointerSize) = 8
+tcl_platform(threaded)    = 0
+tcl_platform(wordSize)    = 8
+
+
+
+argv0 +
+
+

+ If jimsh is invoked to run a script, this variable contains the name + of the script. +

+
+
+argv +
+
+

+ If jimsh is invoked to run a script, this variable contains a list + of any arguments supplied to the script. +

+
+
+argc +
+
+

+ If jimsh is invoked to run a script, this variable contains the number + of arguments supplied to the script. +

+
+
+jim_argv0 +
+
+

+ The value of argv[0] when jimsh was invoked. +

+
+
+
+
+
+

CHANGES IN PREVIOUS RELEASES

+
+
+

In v0.63

+
    +
  1. +

    +source now checks that a script is complete (.i.e. not missing a brace) +

    +
  2. +
  3. +

    +info complete now uses the real parser and so is 100% accurate +

    +
  4. +
  5. +

    +Better access to live stack frames with info frame, stacktrace and stackdump +

    +
  6. +
  7. +

    +tailcall no longer loses stack trace information +

    +
  8. +
  9. +

    +Add alias and curry +

    +
  10. +
  11. +

    +lambda, alias and curry are implemented via tailcall for efficiency +

    +
  12. +
  13. +

    +local allows procedures to be deleted automatically at the end of the current procedure +

    +
  14. +
  15. +

    +udp sockets are now supported for both clients and servers. +

    +
  16. +
  17. +

    +vfork-based exec is now working correctly +

    +
  18. +
  19. +

    +Add file tempfile +

    +
  20. +
  21. +

    +Add socket pipe +

    +
  22. +
  23. +

    +Enhance try … on … finally to be more Tcl 8.6 compatible +

    +
  24. +
  25. +

    +It is now possible to return from within try +

    +
  26. +
  27. +

    +IPv6 support is now included +

    +
  28. +
  29. +

    +Add string is +

    +
  30. +
  31. +

    +Event handlers works better if an error occurs. eof handler has been removed. +

    +
  32. +
  33. +

    +exec now sets $::errorCode, and catch sets opts(-errorcode) for exit status +

    +
  34. +
  35. +

    +Command pipelines via open "|…" are now supported +

    +
  36. +
  37. +

    +pid can now return pids of a command pipeline +

    +
  38. +
  39. +

    +Add info references +

    +
  40. +
  41. +

    +Add support for after ms, after idle, after info, update +

    +
  42. +
  43. +

    +exec now sets environment based on $::env +

    +
  44. +
  45. +

    +Add dict keys +

    +
  46. +
  47. +

    +Add support for lsort -index +

    +
  48. +
+
+
+

In v0.62

+
    +
  1. +

    +Add support to exec for >&, >>&, |&, 2>@1 +

    +
  2. +
  3. +

    +Fix exec error messages when special token (e.g. >) is the last token +

    +
  4. +
  5. +

    +Fix subst handling of backslash escapes. +

    +
  6. +
  7. +

    +Allow abbreviated options for subst +

    +
  8. +
  9. +

    +Add support for return, break, continue in subst +

    +
  10. +
  11. +

    +Many expr bug fixes +

    +
  12. +
  13. +

    +Add support for functions in expr (e.g. int(), abs()), and also in, ni list operations +

    +
  14. +
  15. +

    +The variable name argument to regsub is now optional +

    +
  16. +
  17. +

    +Add support for unset -nocomplain +

    +
  18. +
  19. +

    +Add support for list commands: lassign, lrepeat +

    +
  20. +
  21. +

    +Fully-functional lsearch is now implemented +

    +
  22. +
  23. +

    +Add info nameofexecutable and info returncodes +

    +
  24. +
  25. +

    +Allow catch to determine what return codes are caught +

    +
  26. +
  27. +

    +Allow incr to increment an unset variable by first setting to 0 +

    +
  28. +
  29. +

    +Allow args and optional arguments to the left or required arguments in proc +

    +
  30. +
  31. +

    +Add file copy +

    +
  32. +
  33. +

    +Add try … finally command +

    +
  34. +
+
+
+
+
+

LICENCE

+
+
+
+
Copyright 2005 Salvatore Sanfilippo <antirez@invece.org>
+Copyright 2005 Clemens Hintze <c.hintze@gmx.net>
+Copyright 2005 patthoyts - Pat Thoyts <patthoyts@users.sf.net>
+Copyright 2008 oharboe - Oyvind Harboe - oyvind.harboe@zylin.com
+Copyright 2008 Andrew Lunn <andrew@lunn.ch>
+Copyright 2008 Duane Ellis <openocd@duaneellis.com>
+Copyright 2008 Uwe Klein <uklein@klein-messgeraete.de>
+Copyright 2009 Steve Bennett <steveb@workware.net.au>
+
+
+
+
Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+1. Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above
+   copyright notice, this list of conditions and the following
+   disclaimer in the documentation and/or other materials
+   provided with the distribution.
+
+
+
+
THIS SOFTWARE IS PROVIDED BY THE JIM TCL PROJECT ``AS IS'' AND ANY
+EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+JIM TCL PROJECT OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+
+
+
The views and conclusions contained in the software and documentation
+are those of the authors and should not be interpreted as representing
+official policies, either expressed or implied, of the Jim Tcl Project.
+
+
+
+
+

+ + + diff --git a/var/mongoose/html/js/jquery.form.js b/var/mongoose/html/js/jquery.form.js new file mode 100644 index 0000000..d75a267 --- /dev/null +++ b/var/mongoose/html/js/jquery.form.js @@ -0,0 +1,899 @@ +/*! + * jQuery Form Plugin + * version: 2.81 (04-JUN-2011) + * @requires jQuery v1.3.2 or later + * + * Examples and documentation at: http://malsup.com/jquery/form/ + * Dual licensed under the MIT and GPL licenses: + * http://www.opensource.org/licenses/mit-license.php + * http://www.gnu.org/licenses/gpl.html + */ +;(function($) { + +/* + Usage Note: + ----------- + Do not use both ajaxSubmit and ajaxForm on the same form. These + functions are intended to be exclusive. Use ajaxSubmit if you want + to bind your own submit handler to the form. For example, + + $(document).ready(function() { + $('#myForm').bind('submit', function(e) { + e.preventDefault(); // <-- important + $(this).ajaxSubmit({ + target: '#output' + }); + }); + }); + + Use ajaxForm when you want the plugin to manage all the event binding + for you. For example, + + $(document).ready(function() { + $('#myForm').ajaxForm({ + target: '#output' + }); + }); + + When using ajaxForm, the ajaxSubmit function will be invoked for you + at the appropriate time. +*/ + +/** + * ajaxSubmit() provides a mechanism for immediately submitting + * an HTML form using AJAX. + */ +$.fn.ajaxSubmit = function(options) { + // fast fail if nothing selected (http://dev.jquery.com/ticket/2752) + if (!this.length) { + log('ajaxSubmit: skipping submit process - no element selected'); + return this; + } + + if (typeof options == 'function') { + options = { success: options }; + } + + var action = this.attr('action'); + var url = (typeof action === 'string') ? $.trim(action) : ''; + url = url || window.location.href || ''; + if (url) { + // clean url (don't include hash vaue) + url = (url.match(/^([^#]+)/)||[])[1]; + } + + options = $.extend(true, { + url: url, + success: $.ajaxSettings.success, + type: this[0].getAttribute('method') || 'GET', // IE7 massage (see issue 57) + iframeSrc: /^https/i.test(window.location.href || '') ? 'javascript:false' : 'about:blank' + }, options); + + // hook for manipulating the form data before it is extracted; + // convenient for use with rich editors like tinyMCE or FCKEditor + var veto = {}; + this.trigger('form-pre-serialize', [this, options, veto]); + if (veto.veto) { + log('ajaxSubmit: submit vetoed via form-pre-serialize trigger'); + return this; + } + + // provide opportunity to alter form data before it is serialized + if (options.beforeSerialize && options.beforeSerialize(this, options) === false) { + log('ajaxSubmit: submit aborted via beforeSerialize callback'); + return this; + } + + var n,v,a = this.formToArray(options.semantic); + if (options.data) { + options.extraData = options.data; + for (n in options.data) { + if(options.data[n] instanceof Array) { + for (var k in options.data[n]) { + a.push( { name: n, value: options.data[n][k] } ); + } + } + else { + v = options.data[n]; + v = $.isFunction(v) ? v() : v; // if value is fn, invoke it + a.push( { name: n, value: v } ); + } + } + } + + // give pre-submit callback an opportunity to abort the submit + if (options.beforeSubmit && options.beforeSubmit(a, this, options) === false) { + log('ajaxSubmit: submit aborted via beforeSubmit callback'); + return this; + } + + // fire vetoable 'validate' event + this.trigger('form-submit-validate', [a, this, options, veto]); + if (veto.veto) { + log('ajaxSubmit: submit vetoed via form-submit-validate trigger'); + return this; + } + + var q = $.param(a); + + if (options.type.toUpperCase() == 'GET') { + options.url += (options.url.indexOf('?') >= 0 ? '&' : '?') + q; + options.data = null; // data is null for 'get' + } + else { + options.data = q; // data is the query string for 'post' + } + + var $form = this, callbacks = []; + if (options.resetForm) { + callbacks.push(function() { $form.resetForm(); }); + } + if (options.clearForm) { + callbacks.push(function() { $form.clearForm(); }); + } + + // perform a load on the target only if dataType is not provided + if (!options.dataType && options.target) { + var oldSuccess = options.success || function(){}; + callbacks.push(function(data) { + var fn = options.replaceTarget ? 'replaceWith' : 'html'; + $(options.target)[fn](data).each(oldSuccess, arguments); + }); + } + else if (options.success) { + callbacks.push(options.success); + } + + options.success = function(data, status, xhr) { // jQuery 1.4+ passes xhr as 3rd arg + var context = options.context || options; // jQuery 1.4+ supports scope context + for (var i=0, max=callbacks.length; i < max; i++) { + callbacks[i].apply(context, [data, status, xhr || $form, $form]); + } + }; + + // are there files to upload? + var fileInputs = $('input:file', this).length > 0; + var mp = 'multipart/form-data'; + var multipart = ($form.attr('enctype') == mp || $form.attr('encoding') == mp); + + // options.iframe allows user to force iframe mode + // 06-NOV-09: now defaulting to iframe mode if file input is detected + if (options.iframe !== false && (fileInputs || options.iframe || multipart)) { + // hack to fix Safari hang (thanks to Tim Molendijk for this) + // see: http://groups.google.com/group/jquery-dev/browse_thread/thread/36395b7ab510dd5d + if (options.closeKeepAlive) { + $.get(options.closeKeepAlive, function() { fileUpload(a); }); + } + else { + fileUpload(a); + } + } + else { + $.ajax(options); + } + + // fire 'notify' event + this.trigger('form-submit-notify', [this, options]); + return this; + + + // private function for handling file uploads (hat tip to YAHOO!) + function fileUpload(a) { + var form = $form[0], i, s, g, id, $io, io, xhr, sub, n, timedOut, timeoutHandle; + + if (a) { + // ensure that every serialized input is still enabled + for (i=0; i < a.length; i++) { + $(form[a[i].name]).attr('disabled', false); + } + } + + if ($(':input[name=submit],:input[id=submit]', form).length) { + // if there is an input with a name or id of 'submit' then we won't be + // able to invoke the submit fn on the form (at least not x-browser) + alert('Error: Form elements must not have name or id of "submit".'); + return; + } + + s = $.extend(true, {}, $.ajaxSettings, options); + s.context = s.context || s; + id = 'jqFormIO' + (new Date().getTime()); + if (s.iframeTarget) { + $io = $(s.iframeTarget); + n = $io.attr('name'); + if (n == null) + $io.attr('name', id); + else + id = n; + } + else { + $io = $('