<?php
/*
* Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/
*
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* 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.
*
* Neither the name of Texas Instruments Incorporated nor the names of
* its contributors may be used to endorse or promote products derived
* from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "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 COPYRIGHT
* OWNER 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.
*
*/ # 函数规定报告哪个错误,该函数设置当前脚本的错误报告级别
# 该函数返回旧的错误报告级别
error_reporting(E_ALL); # 加载那些需要的函数
require("helper_functions.php"); $i = ;
$lock_string = "";
$currently_locked = false; $var = read_desktop_file(); # 加载json对象 if($var==null)
{
echo "Json.txt file is empty or doesn't exist.";
return;
} $submenu = isset($_GET["submenu"]) == true ? $_GET["submenu"] : "main_menu" ; # $link = "run_script.php?&submenu=".urlencode($submenu)."&app=".urlencode($app_title);
# 获取对应的app
$found_app = get_application($var,$submenu,$_GET["app"]); # 查看当前的json.txt文件,其中的Lock字段的内容都是-
# 所以这一部分的其中很多内容可以不分析
$lock_list = $found_app["Lock"]; //Verify that there is a lock specified for this application
# 应用有锁
if($lock_list != - )
{
//Convert the string into an array.
//This might be backwards*********CHECKOUT********
# explode(): 把字符串分割为数组
$lock_list_array = explode($lock_list," "); //Check if the lock list only has one lock. If so add to the array
//Since index 0 will be empty
if(count($lock_list_array) == )
$lock_list_array[] = $lock_list; //Check to see if any of the locks exist.
for($x = ;$x<count($lock_list_array);$x++)
{
# 这里貌似是锁文件,是否存在的意思
if(file_exists ("lock/".$lock_list_array[$x])==true)
{
$currently_locked = true;
break;
}
}
}
else
$lock_list = ""; # 就当前的json.txt文件而言,都是采用这种方式 if($currently_locked==false)
{
$script_link = $found_app["Exec"]; # strval(): 用于获取变量对应的字符串值
# rand(): 返回随机整数
$random_string = strval(rand());
$random_string .= strval(rand()); # addslashes(): 在指定的预定义字符前添加反斜杠
$script_command = "./execute_command.sh \"".addslashes($script_link). "\" ".$random_string.".txt ".$lock_list; # 获取系统执行结果最后一行
# system()第二个参数:如果提供的return_var参数,则外部命令执行后的
# 返回状态将会被设置到此变量中
$last_line = system($script_command." > /dev/null 2>/dev/null & ", $retval);
} # 菜单标题采用app的名字
$menu_title = $found_app["Name"];
?> <!-- 这里需要区分web的程序还是gui程序 -->
<!-- 这里是没有锁,并且是程序类型不是web,也就是说gui程序会走接下来的这种方式 -->
<?php if($currently_locked==false && $found_app["ProgramType"]!="web"){ ?>
<!-- 加入菜单 -->
<?php include "menubar.php"; ?>
<div id="container"></div> <script>
<?php echo "var uri_link = \"$random_string\";"; ?> // 仅仅是一个随机数 var fail_count = ; // 这个函数的主要功能好像是,获取app的输出内容显示到网页上来,
// 但这个函数是有时间限制的,如果在规定的时间内不能获取到相应的数据,
// 那么就会提示出错了
function update()
{
//This is a fix for IE browsers. IE likes to cache Ajax results. Therefore, adding a random string will prevent the browser from caching the Ajax request.
// 防止浏览器缓存页面导致不访问web服务器
var uri = "tmp/"+uri_link+".txt?rand="+Math.round((Math.random()*))+Math.round((Math.random()*))+Math.round((Math.random()*)); $.get(uri, function(data)
{
fail_count = ;
data = jQuery.trim(data); //The execute_command script adds the text "_?!!MATRIX_SCRIPT_COMPLETED!!?_" to the end of the file to mark that the command is done executing
// 获取系统返回的数据,并查找字符串
var script_complete = data.indexOf("_?!!MATRIX_SCRIPT_COMPLETED!!?_");
if(script_complete != -)
{
//Just replace the end of file text to Script Complete which
data = data.replace("_?!!MATRIX_SCRIPT_COMPLETED!!?_", "Script Complete");
} <?php
//GUI applications shouldn't have any output that needs to be displayed. Therefore, don't include the code that will update the HTML container
//with the program's output. This prevents some flickering problems that occur in some GUI applications even if the HTML container is being passed no information.
// GUI程序没有任何输出需要显示,所以不需要将程序输出显示出来,
// 这里主要是为了防止一些无输出的问题
if($found_app["ProgramType"]!="gui"){ ?>
$('#container').html("<pre>"+data+"</pre>");
$('#container').scrollTop(document.getElementById("container").scrollHeight);
<?php } ?> if(script_complete != -)
{
//Display the exit and back button.
$('#main_menu_link').removeClass("hide_link");
$('#back_link').removeClass("hide_link"); <?php if($found_app["ProgramType"]=="gui"){ ?>
$('#back_link').click(); // 这里为什么会需要自动点击返回?
<?php } ?>
}
else
setTimeout("update()",); })
//If a file cant be read or some other error related to trying to retrieve this file then JQuery executes the error function.
//This sometimes occurs when the browser tries to read the output file before output file is even created.
.error(function()
{
//This function will attempt to read the file 3 times with an increase delay for each attempt. If the file still hasn't
//been able to be read then an error is displayed and the Exit and Back Link is enabled. fail_count++;
if(fail_count==)
{
$('#container').html("Failed to read output file");
$('#main_menu_link').removeClass("hide_link");
$('#back_link').removeClass("hide_link");
}
else
{
//Every time it fails wait a signifcantly longer amount of time
setTimeout("update()",fail_count*);
}
}); } //Wait 500ms before trying to read the application output
// 从这里开始开始调用前面的update()函数
setTimeout("update()",);
</script>
<?php }if($currently_locked==false && $found_app["ProgramType"]=="web"){ ?>
<?php include "menubar.php"; ?> <script>
$('#main_menu_link').removeClass("hide_link");
$('#back_link').removeClass("hide_link"); $("#menubar").outerHeight(true)
$("#menubar").outerWidth(true) // 在后面给调用
function scrollbarWidth() {
var $inner = jQuery('<div style="width: 100%; height:200px;">test</div>'),
$outer = jQuery('<div style="width:200px;height:150px; position: absolute; top: 0; left: 0; visibility: hidden; overflow:hidden;"></div>').append($inner),
inner = $inner[],
outer = $outer[]; jQuery('body').append(outer);
var width1 = inner.offsetWidth;
$outer.css('overflow', 'scroll');
var width2 = outer.clientWidth;
$outer.remove(); return (width1 - width2);
} $("#html5-frame").width($("#menubar").width()-scrollbarWidth());
$("#html5-frame").height($(window).height() - $("#menubar").outerHeight(true)-scrollbarWidth()) </script>
<!-- 用一个框架来显示一些东西 -->
<iframe id = "html5-frame" src = "<?php echo $found_app["Exec"]; ?>"scrolling = "auto" style = "padding:5px;"> <!-- 就目前的json.txt文本内容而言,currently_locked一直都是等于false -->
<?php }if($currently_locked==true){?>
<?php include "menubar.php"; ?>
This program can't run since a program is already running that contains a lock that this program is trying to use
<script>
//Display the back and exit button since the application couldn't run
$('#main_menu_link').removeClass("hide_link");
$('#back_link').removeClass("hide_link");
</script> <?php } ?>

Texas Instruments matrix-gui-2.0 hacking -- run_script.php的更多相关文章

  1. Texas Instruments matrix-gui-2.0 hacking -- app_description.php

    <?php /* * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/ * * * Redistrib ...

  2. Texas Instruments matrix-gui-2.0 hacking -- submenu.php

    <?php /* * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/ * * * Redistrib ...

  3. Texas Instruments matrix-gui-2.0 hacking -- index.php

    <?php /* * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/ * * * Redistrib ...

  4. Texas Instruments matrix-gui-2.0 hacking -- execute_command.sh

    #!/bin/sh #Copyright (C) Texas Instruments Incorporated - http://www.ti.com/ # # # Redistribution an ...

  5. Texas Instruments matrix-gui-2.0 hacking -- menubar.php

    <?php /* * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/ * * * Redistrib ...

  6. Texas Instruments matrix-gui-2.0 hacking -- generate.php

    <?php /* * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/ * * * Redistrib ...

  7. 【LeetCode每天一题】Set Matrix Zeroes(设置0矩阵)

    Given a m x n matrix, if an element is 0, set its entire row and column to 0. Do it in-place. Exampl ...

  8. Texas Instruments matrix-gui-2.0 hacking -- json.txt

    { "main_menu": { "apps": [ { "Name":"Profiling", ", &qu ...

  9. Texas Instruments matrix-gui-2.0 hacking -- helper_functions.php

    <?php # PHP_SELF: 但前正在执行脚本的文件名,与document root相关 # QUERY_STRING: 查询(query)的字符串 $cachefile = " ...

随机推荐

  1. Jmeter 中多线程并发和循环控制器

    今天遇到一个场景, 给一个手机号发送短信验证码,通过正确输入短信验证码即登录并获得token,进行其他操作. 短信验证码是4位,即9999个组合, 接口没有对验证次数做校验,所以可以一直一直尝试通过验 ...

  2. 使用 XPath 选择器

    在前面的内容中,我们掌握了一些 CSS 选择器和它们的使用方法,以及 rvest 包中用于提取网页内容的函数.一般来说,CSS 选择器足够满足绝大部分的 HTML 节点匹配的需要.但是,当需要根据某些 ...

  3. Python将某文件夹及其子文件夹下某种格式的文件移动到另一个指定的文件下

    主要是理解好上面的1~3点的内容,理解三个返回值所代表的意思.如果不清楚的话,可以在代码的for循环的第一句注释输出看看各个代表的是什么 再者就是对 shutil.copy(file_path,new ...

  4. MySQL修改时间函数 1.addDate(date , INTERVAL expr unit) 2.date_format(date,’%Y-%m-%d’) 3.str_to_date(date,’%Y-%m-%d’) 4.DATE_SUB(NOW(), INTERVAL 48 HOUR)

    MySQL修改时间函数: 1. addDate(date,INTERVAL expr unit)   interval 代表时间间隔 : SELECT NOW();           2018-06 ...

  5. eclipse启动时弹出Failed to create the Java Virtual Machine

    eclipse启动时弹出Failed to create the Java Virtual Machine 一.现象 今天装eclipse的时候出现Failed to create the Java ...

  6. Web端主流框架,jquery、angular、react、vue

    不得不说,前端技术发展非常迅速,时不多久就有一个新的东西冒出来,并且迅速膨胀发展,让旁观者眼花缭乱,让开发者目眩神迷,但总体上来说,这波互联网大浪潮带动了前端技术的大发展,给曾经那些苦苦挣扎于DOM操 ...

  7. codeforces 555a//Case of Matryoshkas// Codeforces Round #310(Div. 1)

    题意:1-n的数字,大的在小的后面,以这种规则已经形成的几个串,现在要转为一个串,可用的操作是在末尾拆或添加,问要操作几次? 模拟了很久还是失败,看题解才知道是数学.看来这种只要结果的题,模拟很不合算 ...

  8. Confluence 6 为站点启用匿名用户访问

    如果你希望你的站点能够被所有人看到,包括不需要登录就可以访问的用户.你必须为你的站点启用匿名用户访问权限才可以. 希望启用匿名用户访问你的站点: 在屏幕的右上角单击 控制台按钮 ,然后选择 Gener ...

  9. Liebig's Barrels CodeForces - 985C (贪心)

    链接 大意:给定$nk$块木板, 要制作$n$个$k$块板的桶, 要求任意两桶容积差不超过$l$, 每个桶的容积为最短木板长, 输出$n$个桶的最大容积和 假设最短板长$m$, 显然最后桶的体积都在$ ...

  10. json 的样式与应用 - C#/.NET

    本文采用问答的方式来写 问题一:什么是 json ? json是一种轻量级的数据交换格式,非常适合服务器与JavaScript交互.(它和XML一样,都是用来处理交互数据的) 问题二:json 长什么 ...