This repository has been archived by the owner on May 22, 2021. It is now read-only.
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
5 changed files
with
183 additions
and
117 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Original file line | Diff line number | Diff line change |
---|---|---|---|
@@ -1,81 +1,2 @@ | |||
# Copyright (C) 2012 Kenichi Kamiya | require_relative 'mswindows/commandprompt' | ||
|
require_relative 'mswindows/ping' | ||
require 'striuct' | |||
|
|||
module MSWindows | |||
|
|||
module CommandPrompt | |||
module_function | |||
|
|||
def change_width!(size) | |||
`mode con cols=#{size}` | |||
end | |||
|
|||
def change_charset!(type) | |||
num = {ascii: 437, shiftjis: 932}[type] || raise(ArgumentError) | |||
|
|||
`chcp #{num}` | |||
end | |||
|
|||
end | |||
|
|||
module Ping | |||
|
|||
class RecordRoute < Striuct | |||
|
|||
class << self | |||
|
|||
def parse(str) | |||
define {|pr| | |||
source = str.dup | |||
source.slice!(/^Pinging.+:\n/) | |||
pr.summary = source.slice!(/^((?:Reply|Request|Destination).+)\n/, 1) | |||
source.slice!(/\n+/) | |||
source.slice!(/^Ping statistics.*?\n/) | |||
|
|||
1.upto 9 do |i| | |||
pr[:"route#{i}"] = ( | |||
if source.slice!(/^\s+(?:Route:)?\s*(\S+)\s*(?:->)?\s*$/) | |||
$1 | |||
else | |||
nil | |||
end | |||
) | |||
end | |||
|
|||
unless source.empty? | |||
pr.rest = source.gsub("\n", '\n') | |||
end | |||
} | |||
end | |||
|
|||
end | |||
|
|||
member :summary, String | |||
member :route1, OR(nil, String) | |||
member :route2, OR(nil, String) | |||
member :route3, OR(nil, String) | |||
member :route4, OR(nil, String) | |||
member :route5, OR(nil, String) | |||
member :route6, OR(nil, String) | |||
member :route7, OR(nil, String) | |||
member :route8, OR(nil, String) | |||
member :route9, OR(nil, String) | |||
member :rest, OR(nil, String) | |||
close_member | |||
|
|||
def hops | |||
1.upto(9).map{|n|self[:"route#{n}"]} | |||
end | |||
|
|||
alias_method :route, :hops | |||
|
|||
def pass? | |||
!!route1 | |||
end | |||
|
|||
end | |||
|
|||
end | |||
|
|||
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Original file line | Diff line number | Diff line change |
---|---|---|---|
@@ -0,0 +1,75 @@ | |||
# Copyright (C) 2012 Kenichi Kamiya | |||
|
|||
module MSWindows | |||
|
|||
class CommandPrompt | |||
|
|||
CHAR_SETS = { | |||
ascii: 437, | |||
shiftjis: 932 | |||
}.freeze | |||
|
|||
class << self | |||
|
|||
# @return [CommandPrompt] | |||
def open | |||
instance = new | |||
first_charset = instance.charset | |||
|
|||
begin | |||
instance.charset = :ascii | |||
first_widh = instance.width | |||
yield instance | |||
ensure | |||
instance.width = first_widh | |||
instance.charset = first_charset | |||
instance | |||
end | |||
end | |||
|
|||
end | |||
|
|||
# @return [Integer] | |||
def width | |||
raise 'Invalid charset' unless charset == :ascii | |||
Integer `mode con /status`.slice(/\bColumns:\s*(\d+)/, 1) | |||
end | |||
|
|||
# @param [Integer] size | |||
# @return [Integer] size | |||
def width=(size) | |||
`mode con cols=#{size}` | |||
size | |||
end | |||
|
|||
# @return [Integer] | |||
def codepage | |||
Integer `mode con cp /status`.slice(/:\s*(\d+)/, 1) | |||
end | |||
|
|||
# @param [Integer] integer | |||
# @return [Integer] integer | |||
def codepage=(integer) | |||
`chcp #{integer}` | |||
integer | |||
end | |||
|
|||
# @return [Symbol] | |||
def charset | |||
charset_for codepage | |||
end | |||
|
|||
# @param [Symbol] type | |||
def charset=(type) | |||
self.codepage = CHAR_SETS.fetch(type) | |||
end | |||
|
|||
# @param [Integer] cp | |||
# @return [Symbol] | |||
def charset_for(cp) | |||
CHAR_SETS.key(cp) || raise(ArgumentError) | |||
end | |||
|
|||
end | |||
|
|||
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Original file line | Diff line number | Diff line change |
---|---|---|---|
@@ -0,0 +1,66 @@ | |||
# Copyright (C) 2012 Kenichi Kamiya | |||
|
|||
require 'striuct' | |||
|
|||
module MSWindows | |||
|
|||
module Ping | |||
|
|||
class RecordRoute < Striuct | |||
|
|||
class << self | |||
|
|||
def parse(str) | |||
define {|pr| | |||
source = str.dup | |||
source.slice!(/^Pinging.+:\n/) | |||
pr.summary = source.slice!(/^((?:Reply|Request|Destination).+)\n/, 1) | |||
source.slice!(/\n+/) | |||
source.slice!(/^Ping statistics.*?\n/) | |||
|
|||
1.upto 9 do |i| | |||
pr[:"route#{i}"] = ( | |||
if source.slice!(/^\s+(?:Route:)?\s*(\S+)\s*(?:->)?\s*$/) | |||
$1 | |||
else | |||
nil | |||
end | |||
) | |||
end | |||
|
|||
unless source.empty? | |||
pr.rest = source.gsub("\n", '\n') | |||
end | |||
} | |||
end | |||
|
|||
end | |||
|
|||
member :summary, String | |||
member :route1, OR(nil, String) | |||
member :route2, OR(nil, String) | |||
member :route3, OR(nil, String) | |||
member :route4, OR(nil, String) | |||
member :route5, OR(nil, String) | |||
member :route6, OR(nil, String) | |||
member :route7, OR(nil, String) | |||
member :route8, OR(nil, String) | |||
member :route9, OR(nil, String) | |||
member :rest, OR(nil, String) | |||
close_member | |||
|
|||
def hops | |||
1.upto(9).map{|n|self[:"route#{n}"]} | |||
end | |||
|
|||
alias_method :route, :hops | |||
|
|||
def pass? | |||
!!route1 | |||
end | |||
|
|||
end | |||
|
|||
end | |||
|
|||
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters