⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 html2db.pl

📁 web51的开发库
💻 PL
字号:
#! /usr/bin/perl##  Convert html (text) source to a51 asm (db) source#$verinfo = "1.01";sub usage {  print STDERR "usage: $ego [-cpurom] [-cpueeprom ] [-eeprom]\n";  print STDERR "         [-html] [-plain] [-jpeg] [-gif] [-png] [-app] [-noheader]\n";  print STDERR "         [-index VALUE] [-dir DIR_SEGMENT] [-body BODY_SEGMENT]\n";  print STDERR "         [-offset VALUE] [-noconverthtml] [-appendlf] [-keeplf]\n";  print STDERR "         [-binutils] [-version] [-help] file\n";  exit 1;}sub version {  print STDERR "$ego version $verinfo\n";  exit 1;}sub printDB {  local ($file, $co) = @_;  $co =~ s/\\'/'/;  $co =~ s/\r//;  if (length $co gt 0) {    if (length $co eq 1) {      if ($co eq "'") {	if ($binutils) { print $file "\t.byte\t\''''\n"; }        else { print $file "\tDB\t\''''\n"; }      } else{	if ($binutils) { print $file "\t.byte\t\'$co\'\n"; }        else { print $file "\tDB\t\'$co\'\n"; }      }    } else {      if ($binutils) {	$co =~ s/"/\\\"/g;        print $file "\t.ascii\t\"$co\"\n";      } else {        $co =~ s/"/",22h,"/g;        print $file "\tDB\t\"$co\"\n";      }    }  }  if ($appendlf) {    if ($binutils) { print $file "\t.byte\t0x0A\n"; }    else { print $file "\tDB\t0Ah\n"; }  }}sub process_define {  local ($file, $co) = @_;  if ($binutils eq 0) {    if ($co =~ /^#:C[(]([_a-zA-Z0-9]+)[)]/) {#external code      $co = $1;      print $file "extrn\tCODE($co)\n";    } elsif ($co =~ /^#:D[(]([_a-zA-Z0-9]+)[)]/) {#external data      $co = $1;      print $file "extrn\tDATA($co)\n";    } elsif ($co =~ /^#:X[(]([_a-zA-Z0-9]+)[)]/) {#external data      $co = $1;      print $file "extrn\tXDATA($co)\n";    } elsif ($co =~ /^#:Y[(]([_a-zA-Z0-9]+)[)]/) {#external data      $co = $1;      print $file "extrn\tIDATA($co)\n";    } elsif ($co =~ /^#:N[(]([_a-zA-Z0-9]+)[)]/) {#external number      $co = $1;      print $file "extrn\tNUMBER($co)\n";    } elsif ($co =~ /^#:H[(]([_a-zA-Z0-9]+)[)]/) {#header - directory      $directory = $1;    } elsif ($co =~ /^#:I[(]([_a-zA-Z0-9]+)[)]/) {#index - directory      $indexdirectory = $1;    } elsif ($co =~ /^#:B[(]([_a-zA-Z0-9]+)[)]/) {#body      $body = $1;    }  } else {    if ($co =~ /^#:H[(]([_a-zA-Z0-9]+)[)]/) {#header - directory      $directory = $1;    } elsif ($co =~ /^#:I[(]([_a-zA-Z0-9]+)[)]/) {#index - directory      $indexdirectory = $1;    } elsif ($co =~ /^#:B[(]([_a-zA-Z0-9]+)[)]/) {#body      $body = $1;    }  }}sub printBYTE {  local ($file, $co) = @_;#print STDERR "$co ";#    $co =~ !s/^('\w')$/low($1)/;    if ($binutils) {#     $co = "0xFF & $co";#     $co =~ s/^0xFF & ('\w')$/$1/;    } else {      $co = "low($co)";      $co =~ s/^low\(('\w')\)$/$1/;    }    print $file "$co";#print STDERR "$co\n";}sub process_cgi_call {  local ($file, $str) = @_;#CGI call 'mac.cgi'  while ($str =~ /^((\\')|[^']*)'([_a-z0-9]+)\.cgi'(.*)$/i) {    $substr1 = $1;	#([^']*)    $substr2 = $3;	#([_a-z0-9]+)    $str     = $4;	#(.*)    &printDB ($file, $substr1);    if ($binutils) { print $file "\t.ascii\t\"'$substr2.cgi'\"\n"; }    else { print $file "\tDB\t\"'$substr2.cgi'\"\n"; }  }#CGI call 'mac.cgi?X'  while ($str =~ /^((\\')|[^']*)'([_a-z0-9]+)\.cgi[?]('\w'|[_a-z0-9]+)'(.*)$/i) {    $substr1 = $1;	#([^']*)    $substr2 = $3;	#([_a-z0-9]+\.cgi)    $substr3 = $4;	#([_a-z0-9]+)    $str     = $5;	#(.*)    &printDB ($file, $substr1);    if ($binutils) { print $file "\t.ascii\t\"'$substr2.cgi?\"\n\t.byte\t"; }    else { print $file "\tDB\t\"'$substr2.cgi?\","; }    &printBYTE ($file ,$substr3);    print $file "\n";  }#CGI call '?mac.cgi'text1{text2}  while ($str =~ /^((\\')|[^']*)'[?]([_a-z0-9]+)\.cgi'(.*)$/i) {    $substr1 = $1;	#([^?]*)    $substr2 = $3;	#([_a-z0-9]+)    $str     = $4;	#(.*)    &printDB ($file, $substr1);    if ($binutils) { print $file "\t.ascii\t\"'?$substr2.cgi'\"\n"; }    else { print $file "\tDB\t\"'?$substr2.cgi'\"\n"; }  }#CGI call '?mac.cgi?X'text1{text2}  while ($str =~ /^((\\')|[^']*)'[?]([_a-z0-9]+)\.cgi[?]('\w'|[_a-z0-9]+)'(.*)$/i) {    $substr1 = $1;	#([^?]*)    $substr2 = $3;	#([_a-z0-9]+\.cgi)    $substr3 = $4;	#([_a-z0-9]+)    $str     = $5;	#(.*)    &printDB ($file, $substr1);    if ($binutils) { print $file "\t.ascii\t\"'?$substr2.cgi?\"\n\t.byte\t"; }    else { print $file "\tDB\t\"'?$substr2.cgi?\","; }    &printBYTE ($file ,$substr3);    print $file "\n";  }  return ($str);}$ego = $0;$ego =~ s/.*[\/\\]//;$rommode = 0;$binmode = 99;$convert = 1;$appendlf = 0;$keeplf = 0;$binutils = 0;$directory = "";$body = "";$indexdirectory = "";$offset = "";while ($ARGV[0] =~ /^-/ && $ARGV[0] ne '-') {    $opt = shift;    if ($opt eq '-cpurom') {        $rommode = 1;	if ($binutils eq 0) {          if ($directory eq "") { $directory = "CPU_DIR"; }          if ($body eq "") { $body = "CPU_FILES"; }        } else {          if ($directory eq "") { $directory = "cpu_dir"; }          if ($body eq "") { $body = "cpu_files"; }        }    } elsif ($opt eq '-cpueeprom') {        $rommode = 2;	if ($binutils eq 0) {          if ($directory eq "") { $directory = "EE_DIR"; }          if ($body eq "") { $body = "EE_FILES"; }	  if ($offset eq "") { $offset = "0E000h"; } #-2000h        } else {          if ($directory eq "") { $directory = "ee_dir"; }          if ($body eq "") { $body = "ee_files"; }        }    } elsif ($opt eq '-eeprom') {        $rommode = 3;	if ($binutils eq 0) {          if ($directory eq "") { $directory = "I2C_DIR"; }          if ($body eq "") { $body = "I2C_FILES"; }	  if ($offset eq "") { $offset = "8000h"; }        } else {          if ($directory eq "") { $directory = "i2c_dir"; }          if ($body eq "") { $body = "i2c_files"; }	  if ($offset eq "") { $offset = "0x8000"; }        }    } elsif ($opt eq '-html') {        $binmode = 1;		#text/html    } elsif ($opt eq '-plain') {        $binmode = 2;		#text/plain    } elsif ($opt eq '-jpeg') {        $binmode = 3;		#image/jpeg    } elsif ($opt eq '-gif') {        $binmode = 4;		#image/gif    } elsif ($opt eq '-png') {        $binmode = 5;		#image/png    } elsif ($opt eq '-app') {        $binmode = 6;		#application/octet-stream    } elsif ($opt eq '-noheader') {        $binmode = 0;		#without header    } elsif ($opt eq '-noconverthtml') {        $convert = 0;		#no convert html    } elsif ($opt eq '-appendlf') {        $appendlf = 1;		#don't purge NL from html code - mode 1    } elsif ($opt eq '-keeplf') {        $keeplf = 1;		#don't purge NL from html code - mode 2    } elsif ($opt eq '-dir') {        $opt = shift;        $directory = $opt;    } elsif ($opt eq '-body') {        $opt = shift;        $body = $opt;    } elsif ($opt eq '-index') {        $opt = shift;        $indexdirectory = $opt;    } elsif ($opt eq '-offset') {        $opt = shift;        $offset = $opt;    } elsif ($opt eq '-version') {        &version;    } elsif ($opt eq '-help') {        &usage;    } elsif ($opt eq '-binutils') {        $binutils = 1;    } else {        &usage;    }}$l0 = length $ARGV[0];$name = $ARGV[0];if ($l0 eq 0) { &usage; }@names = split (/\./, $name);if (scalar @names gt 1) {  $filetype = pop @names;  $filetype =~ tr/a-z/A-Z/;  $oname = join (".", @names);} else {  $filetype = "999";  $oname = $names[0];}if ($binmode eq 99) {    if ($filetype eq 'HTML') {        $binmode = 1;    } elsif ($filetype eq 'HTM') {        $binmode = 1;    } elsif ($filetype eq 'JS') {        $binmode = 1;    } elsif ($filetype eq 'TXT') {        $binmode = 2;    } elsif ($filetype eq 'JPG') {        $binmode = 3;    } elsif ($filetype eq 'JPEG') {        $binmode = 3;    } elsif ($filetype eq 'GIF') {        $binmode = 4;    } elsif ($filetype eq 'PNG') {        $binmode = 5;    } elsif ($filetype eq 'CLASS') {        $binmode = 6;    } elsif ($filetype eq 'CLA') {        $binmode = 6;    }}if ($binutils) { $oname = $oname.".asm"; }else { $oname = $oname.".a51"; }$NAME = "<".$name;unless (open NAME) {    print STDERR "Missing input file $name\n";    return;}$ONAME = ">".$oname;unless (open ONAME) {    print STDERR "Cannot open output file $oname\n";    return;}$prolog = 1;if ($binmode eq 99) {  print STDERR "WARNING !!! missing -html/plain/jpeg/gif/png/app, using html mode\n";  $binmode =1;}if ((($binmode eq 2) || ($binmode eq 1)) && ($convert ne 0)) {  while (<NAME>) {    $str = $_;    $str =~ s/[\n]/\r/g;	# map mew-line to CR    if ($str =~ /^#:[BCDHINXY][(][_a-zA-Z0-9]+[)]/) {      &process_define (ONAME, $str);      $str = "";    } else {      if ($prolog eq 1) {        if ($binutils) {          print ONAME "\n\t.section\t$directory, #alloc\n\n";          print ONAME "\t.word\t'", join ("'+'", split (//, $name)), "'\n";        } else {          print ONAME "\n$directory\tSEGMENT\tCODE\n\tRSEG\t$directory\n\n";          print ONAME "\tDW\t'", join ("'+'", split (//, $name)), "'\n";        }        if ($binmode eq 1) {	  if ($binutils) { print ONAME "\t.byte\t1\t;text/html\n"; }          else { print ONAME "\tDB\t1\t;text/html\n"; }        } else {	  if ($binutils) { print ONAME "\t.byte\t2\t;text/plain\n"; }          else { print ONAME "\tDB\t2\t;text/plain\n"; }        }        if($offset eq "") {	  if ($binutils) { print ONAME "\t.byte\t0\t;reserved\n\t.word\tbegin0\n\t.word\tend0\n\n"; }          else { print ONAME "\tDB\t0\t;reserved\n\tDW\tbegin0\n\tDW\tend0\n\n"; }	} else {	  if ($binutils) { print ONAME "\t.byte\t0\t;reserved\n\t.word\tbegin0 + $offset\n\t.word\tend0 + $offset\n\n"; }          else { print ONAME "\tDB\t0\t;reserved\n\tDW\tbegin0 + $offset\n\tDW\tend0 + $offset\n\n"; }	}        if ($indexdirectory ne "") {	  if ($binutils) { print ONAME "\t.word\t$indexdirectory\n"; }          else { print ONAME "\tDW\t$indexdirectory\n"; }          if ($binmode eq 1) {	    if ($binutils) { print ONAME "\t.byte\t1\t;text/html\n"; }            else { print ONAME "\tDB\t1\t;text/html\n"; }          } else {	    if ($binutils) { print ONAME "\t.byte\t2\t;text/plain\n"; }            else { print ONAME "\tDB\t2\t;text/plain\n"; }          }          if($offset eq "") {	    if ($binutils) { print ONAME "\t.byte\t0\t;reserved\n\t.word\tbegin0\n\t.word\tend0\n\n"; }            else { print ONAME "\tDB\t0\t;reserved\n\tDW\tbegin0\n\tDW\tend0\n\n"; }          } else {	    if ($binutils) { print ONAME "\t.byte\t0\t;reserved\n\t.word\tbegin0 + $offset\n\t.word\tend0 + $offset\n\n"; }            else { print ONAME "\tDB\t0\t;reserved\n\tDW\tbegin0 + $offset\n\tDW\tend0 + $offset\n\n"; }          }        }	if ($binutils) { print ONAME "\t.section\t$body, #alloc\n\n"; }        else { print ONAME "$body\tSEGMENT\tCODE\n\tRSEG\t$body\n\n"; }        print ONAME "begin0:\n";        $prolog = 0;      }      while (1) {        ($retstr) = &process_cgi_call (ONAME, $str);        last if ($retstr eq $str);        $str = $retstr;      }    }    &printDB (ONAME, $str);    if ($keeplf) {      if ($binutils) { print ONAME "\t.byte\t0x0A\n"; }      else { print ONAME "\tDB\t0Ah\n"; }      }    }  if ($binutils) { print ONAME "end0:\n\t;; end\n"; }  else { print ONAME "end0:\n\tend\n"; }} else {  if ($binutils) {    print ONAME "\n\t.section\t$directory, #alloc\n\n";    print ONAME "\t.word\t'", join ("'+'", split (//, $name)), "'\n";  } else {    print ONAME "\n$directory\tSEGMENT\tCODE\n\tRSEG\t$directory\n\n";    print ONAME "\tDW\t'", join ("'+'", split (//, $name)), "'\n";  }  if ($binutils) {    if ($binmode eq 3) {      print ONAME "\t.byte\t3\t;image/jpeg\n";    } elsif ($binmode eq 4) {      print ONAME "\t.byte\t4\t;image/gif\n";    } elsif ($binmode eq 5) {      print ONAME "\t.byte\t5\t;image/png\n";    } elsif ($binmode eq 6) {      print ONAME "\t.byte\t6\t;application/octet-stream\n";    } elsif ($binmode eq 0) {      print ONAME "\t.byte\t0\t;without header\n";    }  } else {    if ($binmode eq 3) {      print ONAME "\tDB\t3\t;image/jpeg\n";    } elsif ($binmode eq 4) {      print ONAME "\tDB\t4\t;image/gif\n";    } elsif ($binmode eq 5) {      print ONAME "\tDB\t5\t;image/png\n";    } elsif ($binmode eq 6) {      print ONAME "\tDB\t6\t;application/octet-stream\n";    } elsif ($binmode eq 0) {      print ONAME "\tDB\t0\t;without header\n";    }  }  if($offset eq "") {    if ($binutils) { print ONAME "\t.byte\t0\t;reserved\n\t.word\tbegin0\n\t.word\tend0\n\n"; }    else { print ONAME "\tDB\t0\t;reserved\n\tDW\tbegin0\n\tDW\tend0\n\n"; }  } else {    if ($binutils) { print ONAME "\t.byte\t0\t;reserved\n\t.word\tbegin0 + $offset\n\t.word\tend0 + $offset\n\n"; }    else { print ONAME "\tDB\t0\t;reserved\n\tDW\tbegin0 + $offset\n\tDW\tend0 + $offset\n\n"; }  }  if ($indexdirectory ne "") {    if ($binutils) { print ONAME "\t.word\t$indexdirectory\n"; }    else { print ONAME "\tDW\t$indexdirectory\n"; }    if ($binutils) {      if ($binmode eq 2) {        print ONAME "\t.byte\t2\t;text/plain\n";      } elsif ($binmode eq 3) {        print ONAME "\t.byte\t3\t;image/jpeg\n";      } elsif ($binmode eq 4) {        print ONAME "\t.byte\t4\t;image/gif\n";      } elsif ($binmode eq 5) {        print ONAME "\t.byte\t5\t;image/png\n";      } elsif ($binmode eq 6) {        print ONAME "\t.byte\t6\t;application/octet-stream\n";      }    } else {      if ($binmode eq 2) {        print ONAME "\tDB\t2\t;text/plain\n";      } elsif ($binmode eq 3) {        print ONAME "\tDB\t3\t;image/jpeg\n";      } elsif ($binmode eq 4) {        print ONAME "\tDB\t4\t;image/gif\n";      } elsif ($binmode eq 5) {        print ONAME "\tDB\t5\t;image/png\n";      } elsif ($binmode eq 6) {        print ONAME "\tDB\t6\t;application/octet-stream\n";      }    }    if($offset eq "") {      if ($binutils) { print ONAME "\t.byte\t0\t;reserved\n\t.word\tbegin0\n\t.word\tend0\n\n"; }      else { print ONAME "\tDB\t0\t;reserved\n\tDW\tbegin0\n\tDW\tend0\n\n"; }    } else {      if ($binutils) { print ONAME "\t.byte\t0\t;reserved\n\t.word\tbegin0 + $offset\n\t.word\tend0 + $offset\n\n"; }      else {print ONAME "\tDB\t0\t;reserved\n\tDW\tbegin0 + $offset\n\tDW\tend0 + $offset\n\n"; }    }  }  if ($binutils) { print ONAME "\t.section\t$body, #alloc\n\n"; }  else { print ONAME "$body\tSEGMENT\tCODE\n\tRSEG\t$body\n\n"; }  print ONAME "begin0:\n";  binmode(NAME) ;  while (1) {    sysread(NAME,$buf,8);    if (length($buf) != 0) {      if ($binutils) { print ONAME "\t.byte\t"; }      else { print ONAME "\tDB\t"; }      for ($i=0 ; $i<(length($buf) - 1) ; $i++)  {	if ($binutils) { printf ONAME "0x%02X, ",unpack("C",substr($buf,$i,1)) ; }        else { printf ONAME "0%02Xh, ",unpack("C",substr($buf,$i,1)) ; }      }      if ($binutils) { printf ONAME "0x%02X\n",unpack("C",substr($buf,$i,1)) ; }      else { printf ONAME "0%02Xh\n",unpack("C",substr($buf,$i,1)) ; }    } else { last; }  }  if ($binutils) { print ONAME "end0:\n\t;; end\n"; }  else { print ONAME "end0:\n\tend\n"; }}close NAME;close ONAME;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -