VC6 Tips / VC++用のHファイルとCPPファイルを切り替えるMacro part3

VC++用のマクロ集ってどこかにないかナァ〜

それはともかく 今の所、見つからないから自作に頼るとして・・・、
昔、作ったCPP HPP C H Changer*1がcppファイルの時 hを表示したり hppファイルの時、 cファイルを表示したりと、ちょっと不具合が見つかったので只今修正中。

確か・・・、C言語でいうreturn は。。。 あれ?
Function定義して・・・、RETURN??あれ?

あーなーる。
多分これでOKかなぁ〜・・・
多分・・・

あれ?明示的に値を返すときってどうするんだ?
多分・・・、最後に計算した値が返るから、とりあえず変数宣言して値を代入でOKかな〜?


'-------------------------------------------------------------
'FILE DESCRIPTION:
'VBSなるものは良くわからないのでこんな冗長なスクリプトになって
'しまいましたq(T▽Tq)(pT▽T)p 
'だれか良い解説、リファレンスサイトを教えてください
' o_ _)o))懇願
'------------------------------------------------------------


Function GenericOpenPrio2(fs,s1,s2)
if fs.FileExists(s2) then
Documents.Open s2, "Text" '開く
elseif fs.FileExists(s1) then
Documents.Open s1, "Text"
else
c = FALSE
Exit Function
end if
c = TRUE
Exit Function
End Function


Function GenericOpenPrio1(fs,s1,s2)
if fs.FileExists(s1) then
Documents.Open s1, "Text" '開く
elseif fs.FileExists(s2) then
Documents.Open s2, "Text"
else
c = FALSE
Exit Function
end if
c = TRUE
Exit Function
End Function



Sub COpen2(sn,fs,cppll)
cl = len(sn)
s1 = left(sn,cl - cppll) + ".cpp"
s2 = left(sn,cl - cppll) + ".c"

if fs.FileExists(s2) then
Documents.Open s2, "Text" '開く
elseif fs.FileExists(s1) then
Documents.Open s1, "Text"
end if
'msgbox "cpp2" + sn + " "+ s1 + " " + s2
End Sub

Sub CppOpen2(sn,fs,cppll)
cl = len(sn)
s1 = left(sn,cl - cppll) + ".cpp"
s2 = left(sn,cl - cppll) + ".c"

if fs.FileExists(s1) then
Documents.Open s1, "Text" '開く
elseif fs.FileExists(s2) then
Documents.Open s2, "Text"
end if
'msgbox "cpp2" + sn + " "+ s1 + " " + s2
End Sub

Sub HOpen2(sn,fs,cppll)
cl = len(sn)
s1 = left(sn,cl - cppll) + ".hpp"
s2 = left(sn,cl - cppll) + ".h"

if fs.FileExists(s2) then
Documents.Open s2, "Text" '開く
elseif fs.FileExists(s1) then
Documents.Open s1, "Text"
end if
'msgbox "hpp2" + sn + " " + s1 + " " + s2
End Sub

Sub HppOpen2(sn,fs,cppll)
cl = len(sn)
s1 = left(sn,cl - cppll) + ".hpp"
s2 = left(sn,cl - cppll) + ".h"

if fs.FileExists(s1) then
Documents.Open s1, "Text" '開く
elseif fs.FileExists(s2) then
Documents.Open s2, "Text"
end if
'msgbox "hpp2" + sn + " " + s1 + " " + s2
End Sub

Sub FOX_OPEN(sn,s1,s2,fs,ic,icpp,ih,ihpp)
sn = ActiveDocument.Path + "\" + "..\"
If ih=".h" then
sn = sn + "src\" + ActiveDocument.Name
Call COpen2(sn,fs,len(ih))

ElseIf ihpp=".hpp" then '現在がHPPなら
sn = sn + "src\" + ActiveDocument.Name
Call CppOpen2(sn,fs,len(ihpp))

ElseIf icpp=".cpp" then '現在が Cpp なら
sn = sn + "include\" + ActiveDocument.Name
Call HppOpen2(sn,fs,len(icpp))

ElseIf ic=".c" then '現在が C なら
sn = sn + "include\" + ActiveDocument.Name
Call HOpen2(sn,fs,len(ic))
End if

End Sub

Sub OpenOpen(sn,s1,s2,fs,ic,icpp,ih,ihpp)
Dim res
If ih=".h" then
res = GenericOpenPrio2(fs,s1,s2)


ElseIf ihpp=".hpp" then '現在がHPPなら
res = GenericOpenPrio1(fs,s1,s2)


ElseIf icpp=".cpp" then '現在が Cpp なら
res = GenericOpenPrio1(fs,s1,s2)


ElseIf ic=".c" then '現在が C なら
res = GenericOpenPrio2(fs,s1,s2)

End If

if res then
call FOX_OPEN(sn,s1,s2,fs,ic,icpp,ih,ihpp)
end if

'MsgBox s1+" "+s2

End Sub

Sub CppOpen(sn,fs,cl,cppll,ic,icpp,ih,ihpp)
s1 = left(sn,cl - cppll) + ".cpp"
s2 = left(sn,cl - cppll) + ".c"
Call OpenOpen(sn,s1,s2,fs,ic,icpp,ih,ihpp)
End Sub


Sub HppOpen(sn,fs,cl,cppll,ic,icpp,ih,ihpp)
s1 = left(sn,cl - cppll) + ".hpp"
s2 = left(sn,cl - cppll) + ".h"
Call OpenOpen(sn,s1,s2,fs,ic,icpp,ih,ihpp)
End Sub


Sub CppHChanger2()
'DESCRIPTION: cpp と h を ボタンひとつで切り替えるやつです

sn = ActiveDocument.FullName
'現在編集中のファイル名
cl = len(sn) '現在のファイル名の文字数

icpp = right(sn , 4)
ihpp = right(sn , 4)
ic = right(sn , 2)
ih = right(sn , 2)

Dim fs
Set fs =CreateObject("Scripting.FileSystemObject")


'ChangeSub(ih,ihpp,icpp,ic,fs,cl,sn)
'現在が H なら
If ih=".h" then
Call CppOpen(sn,fs,cl,len(ih),ic,icpp,ih,ihpp)

ElseIf ihpp=".hpp" then '現在がHPPなら
Call CppOpen(sn,fs,cl,len(ihpp),ic,icpp,ih,ihpp)

ElseIf icpp=".cpp" then '現在が Cpp なら
Call HppOpen(sn,fs,cl,len(icpp),ic,icpp,ih,ihpp)

ElseIf ic=".c" then '現在が C なら
Call HppOpen(sn,fs,cl,len(ic),ic,icpp,ih,ihpp)
end if


'TODO: Put macro code here
End Sub