zoukankan      html  css  js  c++  java
  • Texas Instruments matrix-gui-2.0 hacking -- generate.php

    <?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.
     *
    */
    function get_contents($field_name,$filestring)
    {    
        # stripos(string,find,start)
        # 返回字符串在另一个字符串中第一次出现的位置。
        # ------------------------------------------
        # | 参数    |   描述                       |
        # ------------------------------------------
        # | string    |   必需。规定被搜索的字符串。 |
        # | find    |   必需。规定要查找的字符。   |
        # | start    |   可选。规定开始搜索的位置。 |
        # ------------------------------------------
        # 如果没有找到该字符串,则返回 false。
        $pos =     stripos($filestring,$field_name."=");
        
        if($pos != false)       
        {
            $pos += strlen($field_name."=");
            # 找到当前行结束的地方
            $newlinepos = stripos($filestring,"
    ",$pos);
            if($newlinepos == -1)
                $newlinepos = stripos($filestring,"
    ",$pos);
    
            # substr(string,start,length)
            # ---------------------------------------------------
            # | 参数   |  描述                                  |
            # ---------------------------------------------------
            # | string |  必需。规定要返回其中一部分的字符串。  |
            # | start  |  必需。规定在字符串的何处开始。        |
            # ---------------------------------------------------
            $returnedstring = substr($filestring,$pos,$newlinepos-$pos);
            return $returnedstring;
        } 
        return -1;
    }
    
    # 每个app都有一个这样的对应文件
    system("find  -name '*.desktop' -print > catdesktop.txt");
    
    if(filesize("catdesktop.txt") == 0)
    {
        echo "No .desktop files found";
        return;
    }
    
    # 读取文件
    $handle = fopen("catdesktop.txt", "rb");
    $contents = fread($handle,filesize("catdesktop.txt"));
    fclose($handle);
    # unlink() 函数删除文件。
    # 若成功,则返回 true,失败则返回 false。
    unlink('catdesktop.txt');
    
    # 函数把字符串打散为数组。
    # explode(separator,string,limit)
    # ---------------------------------------------------------------------------------
    # | 参数        |   描述                                                          |
    # |--------------------------------------------------------------------------------
    # | separator    |   必需。规定在哪里分割字符串。                                  | 
    # |-------------------------------------------------------------------------------|
    # | string        |   必需。要分割的字符串。                                        | 
    # |-------------------------------------------------------------------------------|
    # | limit        |   可选。规定所返回的数组元素的数目。                            | 
    # |             |   可能的值:                                                    | 
    # |             |   大于 0 - 返回包含最多 limit 个元素的数组                      | 
    # |             |   小于 0 - 返回包含除了最后的 -limit 个元素以外的所有元素的数组 | 
    # |             |   0 - 返回包含一个元素的数组                                    | 
    # ---------------------------------------------------------------------------------
    $contents = explode("
    ",$contents);
    
    # 这里strlen($contents[$x])>0限制了数据之间不能出现空行
    for($x = 0;$x<count($contents)&&strlen($contents[$x])>0;$x++)
    {
        # 从这里可以看出catdesktop.txt文件里是一些文件路径的配置
        $handle = fopen($contents[$x], "rb");
        $dotdesktop = fread($handle,filesize($contents[$x]));
        fclose($handle);
        
        # 应用名
        $top["Name"] = get_contents("Name",$dotdesktop);
    
        # 序号
        if(get_contents("X-MATRIX-DisplayPriority",$dotdesktop)!=-1)
            $top["Order"] = get_contents("X-MATRIX-DisplayPriority",$dotdesktop);
        else
            $top["Order"] = 999;
    
        # 图标的绝对路径
        $icon_path = get_contents("Icon",$dotdesktop);
        $webserver_root = "/usr/share/matrix-gui-2.0/";
        # 获取Icon的相对路径 
        $top["Icon"] = substr($icon_path,strlen($webserver_root));
    
        # 类型
        $type = strtolower(get_contents("Type",$dotdesktop));
        $top["Type"] = $type;
    
        # 分类
        $category = get_contents("Categories",$dotdesktop);
        $category =  trim(strtolower($category));
    
        if($type == "directory")
        {
            $top["Category"] = get_contents("X-MATRIX-CategoryTarget",$dotdesktop);
    
        }elseif($type == "application")
        {
            # 可执行程序的执行命令
            $top["Exec"] = get_contents("Exec",$dotdesktop);
    
            # 可执行程序的类型
            $top["ProgramType"] = get_contents("ProgramType",$dotdesktop);
            
            # 连接描述
            $top["Description_Link"] = get_contents("X-MATRIX-Description",$dotdesktop);
    
            # 锁
            $top["Lock"] = get_contents("X-MATRIX-LOCK",$dotdesktop);
        } 
    
        # 非分类放在主菜单中,其他的放在对应的分类中
        # 这里采用PHP的动态添加数组成员的方法
        if($category == -1)
            $application["main_menu"]["apps"][] = $top;    
        else
            $application[$category]["apps"][] = $top;
    
        # 用来销毁变量的,但很多时候,这个函数只把变量给销毁了,内存中存放的该变量的值
        # 仍然没有销毁,也就是没能达到我们想要的释放内存的效果。
        unset($top);
    }
    
    # 主要是完成数字大小的比较
    function cmp($a, $b)
    {
        if($a["Order"] < $b["Order"])
            return -1;
        elseif($a["Order"] == $b["Order"])
            return 0;
        elseif($a["Order"] > $b["Order"])
            return 1;
    }
    
    foreach ($application as $key => $value) {
        # 使用用户自定义的函数对数组排序,自动的函数名叫cmp,
        # 其实就是前面那个数字比较函数
        usort($application[$key]["apps"], "cmp");
    }
    
    # 将php对象编码成json对象,写到json.txt文件里面去
    $ourFileName = "json.txt";
    # die() 函数输出一条消息,并退出当前脚本。
    # 该函数是 exit() 函数的别名。
    $ourFileHandle = fopen($ourFileName, 'w') or die("can't open file");
    fwrite($ourFileHandle,json_encode($application));
    fclose($ourFileHandle);
    ?>
  • 相关阅读:
    开源的excel读取库libxls在windows下的编译,且支持中文,全网首发
    UTF8与GBK、GB2312等其他字符编码的相互转换
    深入理解Netty框架
    论一道编程面试题解法
    JVM调优总结-Xms -Xmx -Xmn -Xss
    Linux上安装jdk1.8和配置环境变量
    .NET GC垃圾回收器
    T4 模板
    Vue 环境搭建
    Spring Cloud 入门系列(一)
  • 原文地址:https://www.cnblogs.com/zengjfgit/p/4585190.html
Copyright © 2011-2022 走看看