hinekure.net が http://hspdev-wiki.net/ から自動クローリングした結果を表示しています。画像やリソースなどのリンクが切れています。予めご了承ください。
HSP3CLmod - HSP開発wiki
トップ    編集凍結 差分バックアップ添付複製名前変更リロード   新規一覧単語検索最終更新   最終更新のRSS

Module

 HSP3.0 

HSP3CLmod

コンソール用 画面制御 モジュールです。

モジュールソース

Everything is expanded.Everything is shortened.
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
-
|
-
|
|
|
|
|
!
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
-
|
|
|
!
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
-
|
-
|
!
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
-
|
|
|
|
-
|
|
|
|
|
!
|
!
 
 
 
 
 
 
 
 
 
 
 
 
 
 
-
|
|
|
|
-
-
|
|
|
!
!
|
!
 
 
 
 /*
	コンソール用 画面制御 モジュール -- hsp3clmod.as
 
	■ 追加命令 < !=公開命令 / ?=非公開命令(内部命令) >
	 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
	[!] clInit        標準入出力の準備        命令型
	[!] clTitle       タイトル変更            命令型
	[!] clClear       画面初期化              命令型
	[!] clPos         カレントポジション設定  命令型
	[!] clColor       カラー設定              命令型
	[!] clCursorx     カーソルX座標           システム変数型
	[!] clCursory     カーソルY座標           システム変数型
	[!] clGetCursor   カーソルサイズ取得      命令型
	[!] clSetCursor   カーソル形状設定        命令型
	[!] clScreenx     画面横幅                システム変数型
	[!] clScreeny     画面縦幅                システム変数型
	[!] clWidth       画面サイズ変更          命令型
	[!] clGetMouse    マウス座標取得          命令型
	[!] clGetkey      キー押下取得            関数型
 
	[?] clGetEvents   イベント取得            関数型
 */
 
#runtime "hsp3cl"
#module "H3CLmod"
    // 必要なものをローカルネームで定義
    #uselib "kernel32.dll"
    #cfunc _GetStdHandle "GetStdHandle" int
    #func _FillConsoleOutputAttribute "FillConsoleOutputAttribute" int,int,int,int,sptr
    #func _FillConsoleOutputCharacter "FillConsoleOutputCharacterA" int,int,int,int,sptr
    #func _FlushConsoleInputBuffer "FlushConsoleInputBuffer" int
    #func _GetConsoleCursorInfo "GetConsoleCursorInfo" int,sptr
    #func _GetConsoleScreenBufferInfo "GetConsoleScreenBufferInfo" int,sptr
    #func _GetNumberOfConsoleInputEvents "GetNumberOfConsoleInputEvents" int,sptr
    #func _PeekConsoleInput "PeekConsoleInputA" int,sptr,int,sptr
    #func _ReadConsoleInput "ReadConsoleInputA" int,sptr,int,sptr
    #func _SetConsoleCursorInfo "SetConsoleCursorInfo" int,sptr
    #func _SetConsoleCursorPosition "SetConsoleCursorPosition" int, int
    #func _SetConsoleScreenBufferSize "SetConsoleScreenBufferSize" int,int
    #func _SetConsoleTextAttribute "SetConsoleTextAttribute" int, int
    #func _SetConsoleTitle "SetConsoleTitleA" sptr
    #func _SetConsoleWindowInfo "SetConsoleWindowInfo" int,int,sptr
 
    #define H3CLmod_CANNOTUSE "'HSP3CLmod' has not been initialized, Bye..."
    #define H3CLmod_ATTRB      p1|p2<<4|(p3&1)<<3|(p3&2)<<6
    #define ctype _MAX(%1,%2) (%1*(%1>=%2)|%2*(%1<=%2)) ; 最大値を返す
    #define ctype _MIN(%1,%2) (%1*(%1>=%2)|%2*(%1>=%2)) ; 最小値を返す
 
    ;=================================================================
    ; clInit                                          [モジュール準備]
    ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    ; 標準入出力のハンドルを取得してhsp3clmodの命令を使えるようにします。
    ; statには成功すると0以外、失敗すると0が代入されます。
    ;=================================================================
    #deffunc clInit
        mref clstat,64    ; stat
        mref clrefstr, 65 ; refstr
        STDIN  = _GetStdHandle(-10)
        STDOUT = _GetStdHandle(-11)
        if STDIN = -1 | STDOUT = -1{
            clstat = 0
        }else{
            clstat   = 1
            clInited = 1  ; initialized
            evtIRCD  = "" ; イベントバッファ(可変長)
            evtCount = 0  ; イベントバッファにあるイベント数
            evtPtr   = -1 ; イベントへのポインタ(index)
        }
        return
 
    ;=================================================================
    ; clTitle p1                                    [キャプション変更]
    ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    ; タイトルバーにp1で指定した文字列を表示します。
    ; statには成功すると0以外、失敗すると0が代入されます。
    ;=================================================================
    #deffunc clTitle str p1
        if clInited=0: mes H3CLmod_CANNOTUSE: stop
 
        _SetConsoleTitle p1
        return
 
    ;=================================================================
    ; clClear p1, p2, p3                                  [画面初期化]
    ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    ; 画面を初期化します。
    ; p1,p2は以下の色番号を指定できます。
    ;	0=黒/1=青/2=緑/3=空/4=赤/5=紫/6=黄/7=白
    ; p3にはハイライトの有無を以下の組み合わせて指定できます。
    ;	1=文字/2=背景
    ; statには成功すると0以外、失敗すると0が代入されます。
    ;=================================================================
    #deffunc _clClear int p1, int p2, int p3
        if clInited=0: mes H3CLmod_CANNOTUSE: stop
 
        dim csbi,6
        _GetConsoleScreenBufferInfo STDOUT, varptr(csbi)
        if stat!0{
            _FillConsoleOutputCharacter STDOUT, ' ', wpeek(csbi,0)*wpeek(csbi,2), 0, varptr(nchar)
            _FillConsoleOutputAttribute STDOUT, H3CLmod_ATTRB, nchar, 0, varptr(nchar)
            _SetConsoleCursorPosition STDOUT, 0
        }
        return
    #define global clClear(%1=7,%2=0,%3=0) _clClear %1,%2,%3
 
    ;=================================================================
    ; clPos p1, p2                            [カレントポジション設定]
    ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    ; p1,p2 : カレントポジションのX,Y座標(ただし座標は列・行単位)
    ; statには成功すると0以外、失敗すると0が代入されます。
    ;=================================================================
    #deffunc clPos int p1, int p2
        if clInited=0: mes H3CLmod_CANNOTUSE: stop
 
        _SetConsoleCursorPosition STDOUT, ($FFFF&p1)|(p2<<16)
        return
 
    ;=================================================================
    ; clColor p1, p2, p3                                  [カラー設定]
    ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    ; 表示文字列の色と背景色を指定した色に設定します。
    ; p1,p2は以下の色番号を指定します。
    ;	0=黒/1=青/2=緑/3=空/4=赤/5=紫/6=黄/7=白
    ; p3にはハイライトの有無を以下の組み合わせて指定できます。
    ;	1=文字/2=背景
    ; statには成功すると0以外、失敗すると0が代入されます。
    ;=================================================================
    #deffunc _clColor int p1,int p2, int p3
        if clInited=0: mes H3CLmod_CANNOTUSE: stop
 
        _SetConsoleTextAttribute STDOUT, H3CLmod_ATTRB
        return
    #define global clColor(%1,%2=0,%3=0) _clColor %1, %2, %3
 
    ;=================================================================
    ; clCursorx                                      [カーソルのX座標]
    ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    ; 現在のカーソル(カレントポジション)のX座標を返します。
    ; statには成功すると0以外、失敗すると0が代入されます。
    ;=================================================================
    #defcfunc _clCursorx
        if clInited=0: mes H3CLmod_CANNOTUSE: stop
        
        dim csbi,6
        _GetConsoleScreenBufferInfo STDOUT, varptr(csbi)
        return wpeek(csbi,4)
    #define global clCursorx _clCursorx()
 
    ;=================================================================
    ; clCursory                                      [カーソルのY座標]
    ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    ; 現在のカーソル(カレントポジション)のY座標を返します。
    ; statには成功すると0以外、失敗すると0が代入されます。
    ;=================================================================
    #defcfunc _clCursory
        if clInited=0: mes H3CLmod_CANNOTUSE: stop
        
        dim csbi,6
        _GetConsoleScreenBufferInfo STDOUT, varptr(csbi)
        return wpeek(csbi,6)
    #define global clCursory _clCursory()
 
    ;=================================================================
    ; clGetCursor p1                                [カーソルのサイズ]
    ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    ; カーソルのサイズをp1で指定した変数に代入します。
    ;=================================================================
    #deffunc clGetCursor var p1
        if clInited=0: mes H3CLmod_CANNOTUSE: stop
        
        dim cci,2
        _GetConsoleCursorInfo STDOUT, varptr(cci)
        p1 = cci.0
        return
 
    ;=================================================================
    ; clSetCursor p1                                  [カーソルの設定]
    ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    ; 以下の値を指定することでカーソルの形状を変更します。
    ; -1     : カーソルを非表示にします。
    ; 0      : カーソルを表示します。(省略時)
    ; 1〜100 : カーソルのサイズを変更します。(強制表示)
    ; statには成功すると0以外、失敗すると0が代入されます。
    ;=================================================================
    #deffunc _clSetCursor int p1
        if clInited=0: mes H3CLmod_CANNOTUSE: stop
        
        dim cci,2
        _GetConsoleCursorInfo STDOUT, varptr(cci)
        if stat = 0: return
        poke cci, 4, p1>=0                        ; 可視設定
        if p1>0: lpoke cci, 0, limit(p1,1,100)    ; サイズ設定
        _SetConsoleCursorInfo STDOUT, varptr(cci)
        return
    #define global clSetCursor(%1=0) _clSetCursor %1
 
    ;=================================================================
    ; clScreenx                                           [画面の横幅]
    ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    ; 表示されている画面の横幅を文字セル単位で返します。
    ; statには成功すると0以外、失敗すると0が代入されます。
    ;=================================================================
    #defcfunc _clScreenx
        if clInited=0: mes H3CLmod_CANNOTUSE: stop
 
        dim csbi,6
        _GetConsoleScreenBufferInfo STDOUT, varptr(csbi)
        return wpeek(csbi,14)
    #define global clScreenx _clScreenx()
 
    ;=================================================================
    ; clScreeny                                           [画面の縦幅]
    ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    ; 表示されている画面の縦幅を文字セル単位で返します。
    ; statには成功すると0以外、失敗すると0が代入されます。
    ;=================================================================
    #defcfunc _clScreeny
        if clInited=0: mes H3CLmod_CANNOTUSE: stop
 
        dim csbi,6
        _GetConsoleScreenBufferInfo STDOUT, varptr(csbi)
        return wpeek(csbi,16)
    #define global clScreeny _clScreeny()
 
    ;=================================================================
    ; clWidth p1, p2                                  [画面サイズ設定]
    ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    ; 画面をp1,p2で指定したサイズに変更します。
    ; スクリーンバッファより大きいサイズを指定した場合は自動的にスクリーン
    ; バッファに収まる大きさで変更します。
    ; statには成功すると0以外、失敗すると0が代入されます。
    ;=================================================================
    #deffunc clWidth int p1, int p2
        if clInited=0: mes H3CLmod_CANNOTUSE: stop
        
        dim smrc,2: dim csbi,6
        _GetConsoleScreenBufferInfo STDOUT, varptr(csbi)
        if stat=0: return
        wpoke smrc, 4, limit(p1,0,wpeek(csbi,18)-1)
        wpoke smrc, 6, limit(p2,0,wpeek(csbi,20)-1)
        _SetConsoleWindowInfo STDOUT,1,varptr(smrc)
        return
 
    ;=================================================================
    ; clGetEvents                                       [イベント取得]
    ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    ; 標準入力からイベントを読み込むために内部で使用される命令。
    ; 通常は外部から呼び出す必要はありません。(ないハズ)
    ; 取得したイベントは標準入力バッファから破棄されます。
    ; 読み込んだイベントはevtIRCDを参照することで得られます。
    ; イベント取得に成功すると実際に読み込んだイベントの数を返します。
    ; 失敗、及びイベントを読み込まなかった場合は0を返します。
    ;=================================================================
    #defcfunc clGetEvents
        if clInited=0: mes H3CLmod_CANNOTUSE: stop
 
        // 標準入力バッファのイベント数(取るまで抜けないのは問題アリ・・・)
        repeat
            _GetNumberOfConsoleInputEvents STDIN, varptr(nEvents)
            if stat=0 | nEvents!0: break     ; 失敗/空ならリターン
        loop
        if stat=0: return 0
 
        if evtPtr = -1{
            newCount = 0                     ; イベント破棄
        }else{
            newCount = evtCount - evtPtr - 1 ; 残りのイベント数
        }
 
        // イベントバッファを伸張
        memexpand evtIRCD, (newCount+nEvents)*20
 
        // 内部イベント破棄
        memcpy evtIRCD, evtIRCD, newCount*20, 0, (evtPtr+1)*20
 
        // 標準入力バッファからイベント読み込み
        _ReadConsoleInput STDIN, varptr(evtIRCD)+newCount*20, nEvents, varptr(nSucce)
        if stat=0 | nSucce=0: return 0
 
        evtCount = newCount+nSucce           ; 実際にバッファにあるイベントの数
        evtPtr = -1
        return nSucce
 
    ;=================================================================
    ; clGetMouse p1, p2                                   [マウス座標]
    ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    ; 画面上のマウスの座標を指定した変数に代入します。
    ; マウス座標の取得に成功するとstatに0以外が代入されます。
    ; 失敗すると0が代入されます。
    ;=================================================================
    #deffunc clGetMouse var p1, var p2
        if clInited=0: mes H3CLmod_CANNOTUSE: stop
 
        clstat = 0
        // 入力バッファからイベント取得(evtPtrをバッファ先頭にクリア)
        if clGetEvents(){
            // 新しいイベントからチェック(のつもり)
            repeat evtCount+1
                i = evtCount-1-cnt
                if i<0: break
                if wpeek(evtIRCD,20*i)=$0002{
                    p1 = wpeek(evtIRCD,20*i+4)
                    p2 = wpeek(evtIRCD,20*i+6)
                    evtPtr = i ; 取得したイベントの位置
                    clstat = 1
                    break
                }
            loop
        }
        return
 
    ;=================================================================
    ; clGetkey( p1 )                                    [キー入力取得]
    ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    ; p1にはキーの状態を取得したいキーコードを指定します。
    ; 指定したキーが押されていれば1、押されていなければ0を返します。
    ; 取得に失敗すると-1を返します。
    ;=================================================================
    #defcfunc clGetkey int p1
        if clInited=0: mes H3CLmod_CANNOTUSE: stop
 
        clstat = -1
        // 入力バッファからイベント取得(evtPtrをバッファ先頭にクリア)
        if clGetEvents(){
            // 新しいイベントからチェック(のつもり)
            repeat evtCount+1
                i = evtCount-1-cnt
                if i<0: clstat=0: break
                if wpeek(evtIRCD,20*i)=$0001{
                    if p1=wpeek(evtIRCD,20*i+10){
                        clstat = 1
                        evtPtr = i
                        break
                    }
                }
            loop
        }
        return clstat
 
#global
(2006-01-03 (火) 10:50:25更新)

サンプル

コメント

  • コンソール用に位置指定などの命令作ってみました。が、「俺はこういう命名の仕方はしないな!」とか「値を取得するのにしょっちゅう関数呼び出しはパフォーマンス悪いわ!」などあると思います。値の更新命令を追加してもいいと思いましたが、HSP同様にカーソル位置などはシステム変数的に使えるようにと思ったりしてこんな感じに・・・。
    何かアドバイス等ありましたらよろしくお願いします。 -- kz3 2005-12-28 (水) 03:31:20
  • とりうる値の範囲チェックはあまりやっていません。やったほうがいいとは思いつつ、どういった仕様(エラーの通知など)にしようか(!)迷います。 -- kz3 2005-12-28 (水) 03:35:52
  • マウス座標取得サンプルですが[デバッグウィンドウを表示]にチェックが入っているとコンソール画面に初期フォーカスが当たらないのが原因なのかエラーが起きます。(ごめんなさい・・・)
    確認する際はデバッグモードOFFでお願いします。
    またWin32 コンソールアプリなどCでも組んだことがないのでおかしいところあるかも知れません。(イベント絡み)
    重ね重ねお願いしますが、アドバイス等ありましたらよろしくお願いします。 -- kz3 2005-12-28 (水) 12:35:07
  • この辺の処理・・・本当はHSP側で処理した方がいいとは思います・・・。まぁコンソールでマウスとかあまり使わない・・・ -- kz3 2005-12-28 (水) 12:37:52
  • 面白いですし、勉強になりました。 -- くに 2005-12-28 (水) 22:48:15
  • clGetMouse?でマウスイベントを処理したからって他のイベントを消すのは良くない。マウスイベントだけ消せないものか・・・−−; -- kz3 2005-12-29 (木) 14:07:30
  • 15年前にこんなのがあったら大ヒットでしたね。 Cで画面制御を作ったことはあるけど。 -- hiroki? 2005-12-29 (木) 14:20:43
  • うむ・・・GUI強し。 -- kz3 2005-12-29 (木) 14:29:01
  • clGetkey()をコーディング中ですがclGetMouse?と併用すると相性悪いんですよね・・・それもそのハズ。clGetMouse?はイベントがあったらマウスイベント取れるまで抜けてこないから・・・。別の方法を考えねば。 -- kz3 2005-12-29 (木) 14:37:44
  • 今では死語ですが、昔エスケープ文字が流行りましたね。あれを思い出し懐かしく思いました。 歳がバレる? -- hiroki? 2005-12-29 (木) 14:40:17
  • いやバレません。分かりません^^;最初、それでやろうとして、でもエスケープシーケンス、HSPでは使えないようです;; -- kz3 2005-12-29 (木) 14:42:51
  • バイナリにして出力したらどうなるかな・・・。 -- kz3 2005-12-29 (木) 14:43:22
  • アラートできました。^^;
      1
      2
      3
      4
    
     
     
     
     
    
        #runtime "hsp3cl"
        a = ""
        wpoke a, 0, $0707 ; ピーッピーッと鳴るハズです。
        mes a
    aが数値型だと数値として表示されるので文字列型にします。 -- kz3
  • ESC[0m 形式のエスケープ文字で遊んでいたら、2000,XPでは使用出来ないそうな。 表示しないからおかしいなと思った。(-_-;) -- hiroki? 2005-12-29 (木) 15:11:12
  • どういうわけか、同じコードなのにあとになってそこそこ取得できているようなのでclGetkey()をUPします。 -- kz3 2005-12-29 (木) 18:22:30
  • 入力バッファはキューで出来ているんだろうか・・・。と思ったらイベントを捨てずに溜めていっているので ircd のサイズが増える一方でした。これはダメです。 -- kz3 2005-12-29 (木) 18:34:11
  • 自分で入力をバッファリングすればいいのか・・・ -- kz3 2005-12-29 (木) 18:43:32
  • 2000ではエスケープシーケンスはたしかドライバ(DOSのね)を読み込まないと使えなかったと -- Shark++ 2005-12-29 (木) 22:48:32
  • 起きてみたら凄いことになってたけど・・・汗。ansi.sysを読み込むようにsysファイルを書き換えるようですね。
    ここでは使わない方向で考えてみます。 -- kz3 2005-12-31 (土) 08:49:12
  • clGetkey()でキー押下拾えてないじゃん?と言われそう。はい、そーなんです・・・。そもそもキー押下とはなにか。押した状態ですね^^;離したら離したですね。その両方のイベントがバッファに送られます。では何もしなかったら?つまり・・・「離した」イベントがあったらつまりそれはキーが押下されていたってことで1を返していいのかな。と思ってちょっと修正かけてみる。 -- kz3 2006-01-03 (火) 10:30:20
  • 反応がイマイチ・・・。 -- kz3 2006-01-03 (火) 10:51:28

URL B I U SIZE Black Maroon Green Olive Navy Purple Teal Gray Silver Red Lime Yellow Blue Fuchsia Aqua White

トップ    編集凍結 差分バックアップ添付複製名前変更リロード   新規一覧単語検索最終更新   最終更新のRSS
Last-modified: 2011-07-05 (火) 21:08:02 (886d)