|
マクロ仕様において破壊的変更を伴わずに正式に64bit整数をサポートする方法とし
て、通常の32bit数値変数を
2個使って64bit整数の代わりとする方法を用いてもよいのでは、と思いました。つま
り、64bitのうち0〜31bitの
下位32bitと32〜64bitの上位32bitの2個の独立した数値変数で1つのペアとすること
です。この場合、新たに以下の
例のような文/関数を新設して演算処理などを行うことになるでしょう。
四則演算。
単項+ (文) : unaryplusint64 #lower, #upper, #lowerReturn, #upperReturn ;
単項- (文) : negateint64 #lower, #upper, #lowerReturn, #upperReturn ;
+ (文) : addint64 #lowerleft, #upperleft, #lowerright, #upperright,
#lowerReturn, #upperReturn ;
- (文) : subtractint64 #lowerleft, #upperleft, #lowerright, #upperright,
#lowerReturn, #upperReturn ;
* (文) : multiplyint64 #lowerleft, #upperleft, #lowerright, #upperright,
#lowerReturn, #upperReturn ;
/ (文) : divideint64 #lowerleft, #upperleft, #lowerright, #upperright,
#lowerReturn, #upperReturn ;
% (文) : moduloint64 #lowerleft, #upperleft, #lowerright, #upperright,
#lowerReturn, #upperReturn ;
bit操作。
^ (文) : notint64 #lower, #upper, #lowerReturn, #upperReturn ;
| (文) : orint64 #lowerleft, #upperleft, #lowerright, #upperright, #lowerRe
turn, #upperReturn ;
& (文) : andint64 #lowerleft, #upperleft, #lowerright, #upperright, #lowerRe
turn, #upperReturn ;
比較。戻り値は1か0。
<= (関数) : #result = lessthanorequalint64( #lowerleft, #upperleft, #lowe
rright, #upperright ) ;
>= (関数) : #result = greaterthanorequalint64( #lowerleft, #upperleft, #lowe
>rright, #upperright ) ;
< (関数) : #result = lessthanint64( #lowerleft, #upperleft, #lowe
rright, #upperright ) ;
> (関数) : #result = greaterthanint64( #lowerleft, #upperleft, #lowe
>rright, #upperright ) ;
!= (関数) : #result = notequalint64( #lowerleft, #upperleft, #lowe
rright, #upperright ) ;
= (関数) : #result = equalint64( #lowerleft, #upperleft, #lowe
rright, #upperright ) ;
変換。
Int32=>Int64 (文) : int32toint64 #int32, #lowerReturn, #upperReturn ;
Int64=>Int32 (関数) : #int32 = int64toint32( #lower, #upper ) ;
文字列=>Int64 (文) : valint64 $str, #lowerReturn, #upperReturn ;
Int64=>10進数文字列 (関数) : $dec = strint64( #lower, #upper ) ;
Int64=>16進数文字列 (関数) : $hex = hexint64( #lower, #upper ) ;
文字数。
文字数計算 (文) : charcountint64 #mode, #lowerReturn, #upperRetur
n ; // #modeはcharcount( n1 ) 関数のn1と同じ。
文字位置=>行/桁 (文) : positiontolinecolumn #lowerposition, #upperposition,
#lowerlineReturn, #upperlineReturn, #lowercolumnReturn, #uppercolumnReturn ;
行/桁=>文字位置 (文) : linecolumntoposition #lowerline, #upperline, #lowerco
lumn, #uppercolumn, #lowerpositionReturn, #upperpositionReturn ;
カーソル。
x (文) : xint64 #lowerReturn, #upperReturn ;
y (文) : yint64 #lowerReturn, #upperReturn ;
column (文) : columnint64 #lowerReturn, #upperReturn ;
lineno (文) : linenoint64 #lowerReturn, #upperReturn ;
tabcolumn (文) : tabcolumnint64 #lowerReturn, #upperReturn ;
xview (文) : xviewint64 #lowerReturn, #upperReturn ;
prevposx (文) : prevposxint64 #lowerReturn, #upperReturn ;
prevposy (文) : prevposyint64 #lowerReturn, #upperReturn ;
mousecolumn (文) : mousecolumnint64 #lowerReturn, #upperReturn ;
mouselineno (文) : mouselinenoint64 #lowerReturn, #upperReturn ;
columntox (文) : columntoxint64 #lowerc, #upperc, #lowerl, #upperl, #
lowerReturn, #upperReturn ;
linenotoy (文) : linenotoyint64 #lowerc, #upperc, #lowerl, #upperl, #
lowerReturn, #upperReturn ;
xtocolumn (文) : xtocolumnint64 #lowerx, #upperx, #lowery, #uppery, #
lowerReturn, #upperReturn ;
ytolineno (文) : ytolinenoint64 #lowerx, #upperx, #lowery, #uppery, #
lowerReturn, #upperReturn ;
up (文) : upint64 #lower, #upper ;
down (文) : downint64 #lower, #upper ;
right (文) : rightint64 #lower, #upper ;
left (文) : leftint64 #lower, #upper ;
shiftup (文) : shiftupint64 #lower, #upper ;
shiftdown (文) : shiftdownint64 #lower, #upper ;
shiftright (文) : shiftrightint64 #lower, #upper ;
shiftleft (文) : shiftleftint64 #lower, #upper ;
moveto (文) : movetoint64 #lowerx, #upperx, #lowery, #uppery ;
movetoview (文) : movetoviewint64 #lowerx, #upperx, #lowery, #uppery ;
movetolineno (文) : movetolinenoint64 #lower桁番号, #upper桁番号, #lower行
番号, #upper行番号 ;
moveto2 (文) : moveto2int64 #lowercolumn, #uppercolumn, #lowerlin
eno, #upperlineno ;
テキスト。
linecount (文) : linecountint64 #lowerReturn, #upperReturn ;
linecount2 (文) : linecount2int64 #lowerReturn, #upperReturn ;
linelen (文) : linelenint64 #lowerReturn, #upperReturn ;
linelen2 (文) : linelen2int64 #lowerReturn, #upperReturn ;
gettext (関数) : $str = gettextint64( #lowerx1, #upperx1, #lowery1,#uppe
ry1, #lowerx2, #upperx2, #lowery2, #uppery2, #n1 [ , #n2 ] ) ;
gettext2 (関数) : $str = gettext2int64( #lowerc1, #upperc1, #lowerl1,#uppe
rl1, #lowerc2, #upperc2, #lowerl2, #upperl2, #n1 [ , #n2 ] ) ;
範囲選択。
seltopx (文) : seltopxint64 #lowerReturn, #upperReturn ;
seltopy (文) : seltopyint64 #lowerReturn, #upperReturn ;
selendx (文) : selendxint64 #lowerReturn, #upperReturn ;
selendy (文) : selendyint64 #lowerReturn, #upperReturn ;
seltopcolumn (文) : seltopcolumnint64 #lowerReturn, #upperReturn ;
seltoplineno (文) : seltoplinenoint64 #lowerReturn, #upperReturn ;
selendcolumn (文) : selendcolumnint64 #lowerReturn, #upperReturn ;
selendlineno (文) : selendlinenoint64 #lowerReturn, #upperReturn ;
selopenx (文) : selopenxint64 #lowerReturn, #upperReturn ;
selopeny (文) : selopenyint64 #lowerReturn, #upperReturn ;
クリップボード。
selectcolumn (文) : selectcolumnint64 #lower区切り1, #upper区切り1, #lower区
切り2, #upper区切り2 [ , #lower行1, #upper行1, #lower行2, #upper行2 ] ;
ウィンドウ。
screentopy (文) : screentopyint64 #lowerReturn, #upperReturn ;
screenleftx (文) : screenleftxint64 #lowerReturn, #upperReturn ;
検索。
foundtopx (文) : foundtopxint64 #lowerReturn, #upperRetu
rn ;
foundtopy (文) : foundtopyint64 #lowerReturn, #upperRetu
rn ;
foundendx (文) : foundendxint64 #lowerReturn, #upperRetu
rn ;
foundendy (文) : foundendyint64 #lowerReturn, #upperRetu
rn ;
colormarker (文) : colormarkerint64 #文字色, #背景色, #スタ
イル, #種類, #ユーザーデータ, $レイヤー名, #lower開始行, #upper開始行, #lowe
r開始桁, #upper開始桁, #lower終了行, #upper終了行, #lower終了桁, #upper終了桁 ;
deletecolormarker (文) : deletecolormarkerint64 $レイヤー名, #ユーザー
データ, #lower開始行, #upper開始行, #lower開始桁, #upper開始桁, #lower終了行,
#upper終了行, #lower終了桁, #upper終了桁 ;
colormarkerallfound (文) : colormarkerallfoundint64 #文字色, #背景色, #スタ
イル, #種類, #ユーザーデータ, $レイヤー名, #lower開始行, #upper開始行, #lowe
r開始桁, #upper開始桁, #lower終了行, #upper終了行, #lower終了桁, #upper終了桁 ;
colormarkersnapshot (文) : colormarkersnapshotint64 #lower開始行, #upper開始
行, #lower開始桁, #upper開始桁, #lower終了行, #upper終了行, #lower終了桁, #u
pper終了桁, $レイヤー名 ;
設定。
width (文) : widthint64 #lowerReturn, #upperReturn ;
formwidth (文) : formwidthint64 #lowerReturn, #upperReturn ;
レジストリ。
writeininum (文) : writeininumint64 $INIファイル名, $セクション名, $キー名,
#lower, #upper ;
writeininumw (文) : writeininumwint64 $INIファイル名, $セクション名, $キー名,
#lower, #upper ;
getininum (文) : getininumint64 $INIファイル名, $セクション名, $キー名,
#lowerReturn, #upperReturn ;
getininumw (文) : getininumwint64 $INIファイル名, $セクション名, $キー名,
#lowerReturn, #upperReturn ;
writeregnum (文) : writeregnumint64 $値の名前, #lower, #upper ;
// REG_QWORD値用。
getregnum (文) : getregnumint64 $値の名前, #lowerReturn, #upperReturn
; // REG_QWORD値用。
アウトライン。
rangeedittop (文) : rangeedittopint64 #lowerReturn, #upperReturn ;
rangeeditend (文) : rangeeditendint64 #lowerReturn, #upperReturn ;
outlineitemcount (文) : outlineitemcountint64 #lowerReturn, #upperReturn ;
マクロ制御。
enabledraw (文) : enabledrawint64 #lowery, #uppery, #lowerx, #upperx ;
※パラメーターの#lower〜は下位32bit、#upper〜は上位32bit、〜Returnは出力値を
受け取る変数。
この例は主に文字数や文字の座標(lineno/columnなど)を64bit化した場合に、既存の
文/関数/キーワードと
同等のものを用意したものです。命名は既存のものに末尾にint64を付けています。
また、元々1個の数値を
返していた関数/キーワードは一度に#lower〜と#upper〜との2値を返さないといけな
いため、getlinecount()の
nReturnと同様な参照渡しパラメーターで値を受け取る文として再定義しました。
これはあくまで当方で思いついた一例ですので、もっとスマートな方法があるかもし
れません。
|
|