搜索
bottom↓
回复: 11
打印 上一主题 下一主题

LWIP2.03 如何使用makefsdata脚本将网页转换成C文件?

[复制链接]

出0入0汤圆

跳转到指定楼层
1
发表于 2019-9-12 10:32:37 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
想在LWIP上实现HTTP服务器,使用HTTPD提供功能时,必须要将网页文件装换成数组,
比较新的版本的lwIP都是提供脚本进行转换,有没人用过这个脚本转换过?

脚本的使用说明,看得不是很明白。说明如下:
This directory contains a script ('makefsdata') to create C code suitable for
httpd for given html pages (or other files) in a directory.

There is also a plain C console application doing the same and extended a bit.

Usage: htmlgen [targetdir] [-s] [-i]s
   targetdir: relative or absolute path to files to convert
   switch -s: toggle processing of subdirectories (default is on)
   switch -e: exclude HTTP header from file (header is created at runtime, default is on)
   switch -11: include HTTP 1.1 header (1.0 is default)

  if targetdir not specified, makefsdata will attempt to
  process files in subdirectory 'fs'.

运行CMD命令进入到该脚本的目录下时,输入makefsdata  index.html -i
提示
makefsdata' 不是内部或外部命令,也不是可运行的程序
或批处理文件。

哪位高人用过,指点下

出0入0汤圆

2
 楼主| 发表于 2019-9-12 10:33:56 | 只看该作者
打开makefsdata 脚本,内容如下:
#!/usr/bin/perl

open(OUTPUT, "> fsdata.c");

chdir("fs");
open(FILES, "find . -type f |");

while($file = <FILES>) {

    # Do not include files in CVS directories nor backup files.
    if($file =~ /(CVS|~)/) {
            next;
    }
   
    chop($file);
   
    open(HEADER, "> /tmp/header") || die $!;
    if($file =~ /404/) {
        print(HEADER "HTTP/1.0 404 File not found\r\n");
    } else {
        print(HEADER "HTTP/1.0 200 OK\r\n");
    }
    print(HEADER "Server: lwIP/pre-0.6 (http://www.sics.se/~adam/lwip/)\r\n");
    if($file =~ /\.html$/) {
        print(HEADER "Content-type: text/html\r\n");
    } elsif($file =~ /\.gif$/) {
        print(HEADER "Content-type: image/gif\r\n");
    } elsif($file =~ /\.png$/) {
        print(HEADER "Content-type: image/png\r\n");
    } elsif($file =~ /\.jpg$/) {
        print(HEADER "Content-type: image/jpeg\r\n");
    } elsif($file =~ /\.class$/) {
        print(HEADER "Content-type: application/octet-stream\r\n");
    } elsif($file =~ /\.ram$/) {
        print(HEADER "Content-type: audio/x-pn-realaudio\r\n");   
    } else {
        print(HEADER "Content-type: text/plain\r\n");
    }
    print(HEADER "\r\n");
    close(HEADER);

    unless($file =~ /\.plain$/ || $file =~ /cgi/) {
        system("cat /tmp/header $file > /tmp/file");
    } else {
        system("cp $file /tmp/file");
    }
   
    open(FILE, "/tmp/file");
    unlink("/tmp/file");
    unlink("/tmp/header");

    $file =~ s/\.//;
    $fvar = $file;
    $fvar =~ s-/-_-g;
    $fvar =~ s-\.-_-g;
    print(OUTPUT "static const unsigned char data".$fvar."[] = {\n");
    print(OUTPUT "\t/* $file */\n\t");
    for($j = 0; $j < length($file); $j++) {
        printf(OUTPUT "%#02x, ", unpack("C", substr($file, $j, 1)));
    }
    printf(OUTPUT "0,\n");
   
   
    $i = 0;
    while(read(FILE, $data, 1)) {
        if($i == 0) {
            print(OUTPUT "\t");
        }
        printf(OUTPUT "%#02x, ", unpack("C", $data));
        $i++;
        if($i == 10) {
            print(OUTPUT "\n");
            $i = 0;
        }
    }
    print(OUTPUT "};\n\n");
    close(FILE);
    push(@fvars, $fvar);
    push(@files, $file);
}

for($i = 0; $i < @fvars; $i++) {
    $file = $files[$i];
    $fvar = $fvars[$i];

    if($i == 0) {
        $prevfile = "NULL";
    } else {
        $prevfile = "file" . $fvars[$i - 1];
    }
    print(OUTPUT "const struct fsdata_file file".$fvar."[] = {{$prevfile, data$fvar, ");
    print(OUTPUT "data$fvar + ". (length($file) + 1) .", ");
    print(OUTPUT "sizeof(data$fvar) - ". (length($file) + 1) ."}};\n\n");
}

print(OUTPUT "#define FS_ROOT file$fvars[$i - 1]\n\n");
print(OUTPUT "#define FS_NUMFILES $i\n");

出0入0汤圆

3
发表于 2019-9-12 10:45:03 | 只看该作者
应该是htmlgen?

出0入0汤圆

4
 楼主| 发表于 2019-9-12 10:52:35 | 只看该作者

运行脚本应该就是makefsdata ,我用的是win 10 环境

出0入0汤圆

5
 楼主| 发表于 2019-9-12 11:00:07 | 只看该作者
我怀疑是不是要在Windows上装perl编译器

出0入0汤圆

6
 楼主| 发表于 2019-9-12 11:49:31 | 只看该作者
装了个ActivePerl,将makefsdata 的后缀名改成pl,运行该脚本,提示输入参数不正确

出0入22汤圆

7
发表于 2019-9-12 14:47:24 来自手机 | 只看该作者
还有这样的工具?我都是用c#自己写了一个。把目录下的htm全部转换成c数组。

出0入0汤圆

8
 楼主| 发表于 2019-9-12 15:09:53 | 只看该作者
zxq6 发表于 2019-9-12 14:47
还有这样的工具?我都是用c#自己写了一个。把目录下的htm全部转换成c数组。 ...

LWIP httpd目录下提供了这么一个perl脚本,按固定格式生产的C代码,

出0入0汤圆

9
发表于 2019-9-12 19:47:06 | 只看该作者
我看了一下,目录下还有一个makefsdata.c文件,你试试编译一下,应该比perl方便

出0入0汤圆

10
发表于 2019-9-12 20:24:11 来自手机 | 只看该作者
renpeng009672 发表于 2019-9-12 10:45
应该是htmlgen?

我咋也只看到htmlgen?

出0入0汤圆

11
 楼主| 发表于 2019-9-12 21:55:39 | 只看该作者
renpeng009672 发表于 2019-9-12 19:47
我看了一下,目录下还有一个makefsdata.c文件,你试试编译一下,应该比perl方便 ...

makefsdata.c是 脚本生成的文件,原来有些网页生成的文件在那,

出0入10汤圆

12
发表于 2020-3-13 23:21:41 | 只看该作者
正点原子的 LWIP扩展例程 有详细的使用办法
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-19 09:15

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表