[#8257] Re: Smalltalk [Re: design patterns] — 助田 雅紀 <masaki.suketa@...>

助田です。

11 messages 1998/06/09
[#8259] Re: Smalltalk [Re: design patterns] — KIMURA Koichi <kkimura@...> 1998/06/10

[#8262] TkGrid do not exist? — Hiramatu Yoshifumi <hiramatu@...>

平松です。

26 messages 1998/06/10
[#8266] Re: TkGrid do not exist? — matz@... (Yukihiro Matsumoto) 1998/06/10

まつもと ゆきひろです

[#8269] Re: TkGrid do not exist? — NAGAI Hidetoshi <nagai@...> 1998/06/10

永井@知能.九工大です.

[#8271] Re: TkGrid do not exist? — NAGAI Hidetoshi <nagai@...> 1998/06/10

永井@知能.九工大です.

[#8375] new MethodIndex — keiju@... (Keiju ISHITSUKA)

けいじゅ@日本ラショナルソフトウェアです.

21 messages 1998/06/16
[#8447] new MethodIndex — TEI meiki <tei@...> 1998/06/20

こんにちは、鄭です。

[#8448] new MethodIndex — TEI meiki <tei@...> 1998/06/20

再び、鄭です。_o_

[#8418] how to use delegate — gotoken@... (GOTO Kentaro)

ごとけんです

18 messages 1998/06/18
[#8419] Re: how to use delegate — matz@... (Yukihiro Matsumoto) 1998/06/19

まつもと ゆきひろです

[#8420] Re: how to use delegate — gotoken@... (GOTO Kentaro) 1998/06/19

ごとけんです

[#8421] Re: how to use delegate — matz@... (Yukihiro Matsumoto) 1998/06/19

まつもと ゆきひろです

[#8521] hash sort — "Kazuhiro Yoshida" <s95l980@...>

もりきゅうです。

34 messages 1998/06/26
[#8523] hash sort — gotoken@... (GOTO Kentaro) 1998/06/26

ごとけんです

[#8533] Re: hash sort — WATANABE Hirofumi <watanabe@...> 1998/06/26

わたなべです.

[#8534] Re: hash sort — gotoken@... (GOTO Kentaro) 1998/06/26

ごとけんです

[#8536] Re: hash sort — Sinichiro Dezawa <dezawa@...> 1998/06/26

出沢です

[#8538] Re: hash sort — gotoken@... (GOTO Kentaro) 1998/06/26

ごとけんです

[#8539] Re: hash sort — TAKAHASHI Masayoshi <maki@...> 1998/06/26

高橋です。

[#8541] Re: hash sort — gotoken@... (GOTO Kentaro) 1998/06/26

ごとけんです

[#8546] Re: hash sort — Tadayoshi Funaba <tadf@...> 1998/06/26

ふなばです。

[ruby-list:8395] hd.rb 1.8 patch

From: TEI meiki <tei@...>
Date: 1998-06-17 12:47:01 UTC
List: ruby-list #8395
こんにちは、鄭です。

仕事柄、big-endianと little-endian の世界をいったり来たりする事が
多いのですが、little-endianのデータファイルの hex dump を
big-endian のマシンで見たい、、、といった場面が最近とみにおおくて、
ついに big/little両用の hex dump ツールが欲しくなり、
WATANABE さんの、hd.rb (1.8) を改造してみました。
スクリプト言語で書いてあるとこういう時に楽ですね。
しかも ruby は触っていて楽しいし。(^_^)

# unpack('N4') ってことは、WATANABEさんは、big-endian の世界の人なのかしら :-)

--- hd.rb.org18	Wed Jun 17 21:35:13 1998
+++ hd.rb	Tue Jun 16 09:06:23 1998
@@ -14,6 +14,12 @@
  -[0-9]+  offset
  -0[0-7]+          octal
  -0x[0-9a-fA-F]+   hex
+ -byte     byte size dump
+ -short    short word size dump
+ -long     long word size dump
+ -big      big-endian dump
+ -little   little-endian dump
+ -native   native-endian dump
  -s     sjis/input code
  -e     euc /input code
  -S     sjis/output code
@@ -22,31 +28,50 @@
   exit 1
 end
 
+$endian = :native
+$datasize = 4
+
+Dumpformat = {
+  4 => "%08x  %08x %08x %08x %08x  ",
+  2 => "%08x  "+"%04x %04x %04x %04x  "*2,
+  1 => "%08x  "+"%02x %02x %02x %02x  "*4
+}
+
+Unpackformat = {
+  4 => { :native => "L", :big => "N", :little => "V" },
+  2 => { :native => "S", :big => "n", :little => "v" },
+  1 => { :native => "C", :big => "C", :little => "C" },
+}
+
 def hd(f, offset)
+  unpackformat = Unpackformat[$datasize][$endian]
+  dumpformat = Dumpformat[$datasize]
   f.pos = offset if offset > 0 and f != STDIN
 
   while $_ = f.read(16) and $_.length == 16
-    bin = $_.unpack('N4')
+    bin = $_.unpack(unpackformat+"*")
 
-    printf("%8.8x  %8.8x %8.8x %8.8x %8.8x", offset, *bin);
-    print '  ', $_.tr("\000-\037\177", '.').bin_to_str, "\n";
+    printf(dumpformat, offset, *bin);
+    print $_.tr("\000-\037\177", '.').bin_to_str, "\n";
 
     offset += 16
   end
 
   if $_ and $_.length > 0
-    bin = $_.unpack('C*')
-
-    bin.each_index { |i|
-      bin[i] = sprintf('%2.2x', bin[i])
-    }
-
-    for i in bin.length .. 16 - 1
-      bin.push('  ')
+    printf("%08x  ", offset);
+    leftbins = $_
+    lastline = ""
+    datasize = $datasize
+
+    while leftbins and leftbins.length > 0
+      while leftbins.length < datasize 
+	datasize /= 2
     end
-
-    printf("%8.8x  %s%s%s%s %s%s%s%s %s%s%s%s %s%s%s%s", offset, *bin);
-    print '  ', $_.tr("\000-\037\177", '.').bin_to_str, "\n";
+      bin, leftbins = leftbins.unpack(Unpackformat[datasize][$endian]+"a*")
+      lastline += sprintf("%0#{datasize*2}x", bin) + " "
+    end
+    print lastline, " "*([0,52,42,0,37][$datasize]-lastline.length)
+    print $_.tr("\000-\037\177", '.').bin_to_str, "\n";
   end
 end
 
@@ -73,7 +98,19 @@
 
 while $_ = ARGV[0] and /^-/
   ARGV.shift
-  if /[se]/i
+  if $_ == "-byte"
+    $datasize = 1
+  elsif $_ == "-short"
+    $datasize = 2
+  elsif $_ == "-long"
+    $datasize = 4
+  elsif $_ == "-big"
+    $endian = :big
+  elsif $_ == "-little"
+    $endian = :little
+  elsif $_ == "-native"
+    $endian = :native
+  elsif /[se]/i
     $in_kanji_code   = if /s/; Kconv::SJIS elsif /e/; Kconv::EUC end
     $out_kanji_code  = if /S/; Kconv::SJIS elsif /E/; Kconv::EUC end
   elsif /^-0([0-7]+)$/

-- 
                         ┌─鄭  明毅───────────────────┐
                         └──tei@harmony.co.jp──tei@mirage.linc.or.jp─┘

In This Thread

Prev Next