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
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
|
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
!
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
!
-
|
|
!
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
!
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
!
| %index
*(*HspFunc_varname)
指定したIDの変数名を取得します。
%prm
( int id )
int id:
%inst
char *(*HspFunc_varname)( int id )
指定したIDの変数名を取得します。
IDは、0から始まり変数IDの最大個数(HSPHED構造体のmax_valメンバ)が有効です。
この関数は、HSPオブジェクトに変数名情報が格納されている場合にのみ
取得することができます。それ以外の場合は、常に「""」が返されます。
(変数名情報は、#cmpopt命令により設定することが可能です。)
%sample
%href
%group
内部情報の取得と設定
%index
(*HspFunc_seekvar)
指定した変数名を持つ変数IDを取得します。
%prm
( const char *name )
const char *name:
%inst
int (*HspFunc_seekvar)( const char *name )
指定した変数名を持つ変数IDを取得します。
IDは、0から始まり変数IDの最大個数(HSPHED構造体のmax_valメンバ)を持っています。
該当する変数名がなかった場合は、-1を返します。
この関数は、HSPオブジェクトに変数名情報が格納されている場合にのみ
取得することができます。それ以外の場合は、常に-1が返されます。
(変数名情報は、#cmpopt命令により設定することが可能です。)
%sample
%href
%group
内部情報の取得と設定
%index
hsp3sdk_init
SDK初期化
%prm
( HSP3TYPEINFO *info )
HSP3TYPEINFO *info:
%inst
SDK初期化
%sample
%href
%group
system data
%index
bms_send
ウインドゥ画面の更新
%prm
( BMSCR *bm, int x, int y, int sx, int sy )
BMSCR *bm:
int x:
int y:
int sx:
int sy:
%inst
ウインドゥ画面の更新
%sample
%href
%group
system data
%index
PVAL構造体
PVAL構造体
%prm
%inst
PVal構造体は、変数に保存されるデータを示すための情報が含まれています。
hspvar_core.hに以下のように定義されています。
typedef struct
{
short flag short mode int len[5] int size char *pt
void *master short autoresize short arraycnt int offset int arraymul} PVal
----------------------------------------
先頭部分のフィールドは、HSP2.5以降のPVAL2構造体と完全な互換性があります。
HSP3.0から拡張されたフィールドによって、多くの機能が拡張されています。
PVal構造体に関わる処理はすべて、ストレージコアファンクションを介して
行なうため、直接それぞれのフィールドを操作することはまれです。
それぞれのフィールド詳細は以下の通りです。
--------------------
short flag
変数の型が格納されています。
以下のいずれか、または拡張されたVarTypeの値になります。
#define HSPVAR_FLAG_STR 2 #define HSPVAR_FLAG_DOUBLE 3 #define HSPVAR_FLAG_INT 4
--------------------
short mode
変数が作成されたモードが格納されています。
以下のいずれかの値になります。
#define HSPVAR_MODE_NONE -1 #define HSPVAR_MODE_MALLOC 1 #define HSPVAR_MODE_CLONE 2
--------------------
int len[5]
配列のサイズについての情報が格納されています。
dim p1,p2,p3,p4とした場合に、p1がlen[1]に、p2がlen[2]に、
p3がlen[3]に、p4がlen[4]の値となり保持されています。
--------------------
int size
変数が確保したメモリ全体のサイズが格納されています。
--------------------
char *pt
実際の変数の内容が記憶されているメモリへのポインタです。
通常は、配列変数であれば、ここで指定されたアドレスから連続的な
空間が配列のために確保されています。
文字列など一部の型では、違っている場合もあるため、必ず
変数が保持する値の操作は、ストレージコアファンクションを介して
行なうようにしてください。
--------------------
short autoresizeshort arraycntint offsetint arraymulvoid *master
以上のフィールドは、ストレージコアファンクション側が任意に
利用することができます。主に、可変長配列に関する情報が格納されて
います。
%sample
%href
APTR型
HspVarProc構造体
%group
構造体
%index
APTR型
配列要素
%prm
%inst
■配列変数の取得と設定
変数名を取得するcode_getvaにより、配列要素も同時に取得されます。
基本的に変数名は、PValポインタとして、配列要素は、APTRの値として
取得されます。
APTRの値が0の場合は、配列要素が指定されていないことを示しています。
APTRは配列要素のインデックスを示しています。
上限は、すべての次元を1次元に直した上での最大インデックス値になります。
1次元配列であれば、APTRの0,1,2…がそのまま配列要素と同じだと
考えて問題ありません。
code_getvaで取得されるAPTRは範囲チェックされているので、
通常の使用ではプラグイン側で範囲チェックを行なう必要はありません。
もし、プラグイン側で任意に配列要素を設定したい場合には、
HspFunc_array関数を使用します。
次のような形で要素指定を行なうことが可能です。
(APTRの値=pval->offsetの値です)
HspVarCoreReset( pval ) HspFunc_array( pval, 0 ) HspFunc_array( pval, 0 ) HspFunc_array( pval, 0 ) HspFunc_array( pval, 0 )
また、配列の拡張はHspFunc_redim関数で行なうことが可能です。
void (*HspFunc_redim)( PVal *pval, int lenid, int len )
この関数では、指定した変数の配列を拡張します。
pval変数の、指定した次元数lenid(1〜4)に対してlenの大きさに拡張します。
%sample
%href
PVAL構造体
HspVarProc構造体
%group
構造体
%index
HspVarProc構造体
ストレージコアファンクション
%prm
%inst
HspVarProc構造体は、変数に格納されるタイプごとの情報を格納するための
ものです。この構造体に設定されたcorefunc(ストレージコアファンクション)
によって、新しい型を管理することができるようになります。
hspvar_core.hに以下のように定義されています。
typedef struct
{
short flag short aftertype short version unsigned short support short basesize short opt
char *vartype_name char *user
void *(*Cnv)( void *buffer, int flag ) void *(*CnvCustom)( void *buffer, int flag ) PDAT *(*GetPtr)( PVal *pval )
void *(*ArrayObjectRead)( PVal *pval, int *mptype ) void (*ArrayObject)( PVal *pval ) void (*ObjectWrite)( PVal *pval, void *data, int type ) void (*ObjectMethod)( PVal *pval )
void (*Alloc)( PVal *pval, PVal *pval2 ) void (*Free)( PVal *pval )
int (*GetSize)( void *pdat )
void *(*GetBlockSize)( PVal *pval, PDAT *pdat, int *size )
void (*AllocBlock)( PVal *pval, PDAT *pdat, int size )
void (*Set)( PVal *pval, PDAT *pdat, void *in )
void (*AddI)( PDAT *pval, void *val ) void (*SubI)( PDAT *pval, void *val ) void (*MulI)( PDAT *pval, void *val ) void (*DivI)( PDAT *pval, void *val ) void (*ModI)( PDAT *pval, void *val )
void (*AndI)( PDAT *pval, void *val ) void (*OrI)( PDAT *pval, void *val ) void (*XorI)( PDAT *pval, void *val )
void (*EqI)( PDAT *pval, void *val ) void (*NeI)( PDAT *pval, void *val ) void (*GtI)( PDAT *pval, void *val ) void (*LtI)( PDAT *pval, void *val ) void (*GtEqI)( PDAT *pval, void *val ) void (*LtEqI)( PDAT *pval, void *val )
void (*RrI)( PDAT *pval, void *val ) void (*LrI)( PDAT *pval, void *val )} HspVarProc
----------------------------------------
[個別解説]
--------------------
short flag
型ごとに割り振られたID番号が設定されています。
HSPVAR_FLAG_INT等も型タイプ値を示しています。
タイプ値は、PVal構造体のflagフィールドに設定されます。
--------------------
short aftertype
演算後にタイプが変更される演算子を持つ場合は、このフィールドで
演算後のタイプ値をシステムに通知します。
--------------------
short versionunsigned short supportshort basesizeshort optchar *vartype_namechar *user
ストレージコアファンクションの初期化時に型の持つ情報を設定する
必要があります。これらの情報をもとに、内部動作が決定されます。
supportは、以下の中から複数の内容を選択して設定します。
HSPVAR_SUPPORT_STORAGE HSPVAR_SUPPORT_FLEXSTORAGE HSPVAR_SUPPORT_FIXEDARRAY HSPVAR_SUPPORT_FLEXARRAY HSPVAR_SUPPORT_ARRAYOBJ HSPVAR_SUPPORT_FLEXSIZE HSPVAR_SUPPORT_CLONE HSPVAR_SUPPORT_USER1 HSPVAR_SUPPORT_USER2
変数初期化時に、PVal構造体のsupportフィールドに内容がコピーされます。
vartype_nameは、型を名前で識別するための情報です。
英小文字で設定しておく必要があり、他の型と名前が重複しないように
配慮する必要があります。
ユーザーデータ及びユーザーフラグは、ストレージコアファンクション側が
自由に使用できるフラグ情報です。
--------------------
PDAT *(*GetPtr)( PVal *pval )
PValが示すデータの実態がある先頭ポインタを返します。
(PDAT*は、実態データのポインタを示しています。)
配列変数をサポートしている場合は、オフセット情報(PVal->offset)を
もとにデータの実態ポインタを求める必要があります。
--------------------
void *(*ArrayObjectRead)( PVal *pval, int *mptype )void (*ArrayObject)( PVal *pval )void (*ObjectWrite)( PVal *pval, void *data, int type )void (*ObjectMethod)( PVal *pval )
型が連想配列サポートをしている時(HSPVAR_SUPPORT_ARRAYOBJ)に、
配列指定のために呼び出されます。
HSP3コアは、変数名の次にある中間コードをパースする段階で、この
関数を呼び出します。ArrayObject、ArrayObjectRead関数は、適切に中間コードを
パースして値を戻してやる必要があります。
ArrayObjectは、変数代入やパラメーターの変数指定時に配列指定がされている
時に呼び出されます。システムは、ArrayObjectで配列内容をチェックした後、
代入が行なわれる場合には、ObjectWriteを呼び出します。
ObjectWrite関数は、配列要素に従って適切な値を変数に代入する必要があります。
ArrayObjectReadは、変数の内容参照が行なわれる時に呼び出されます。
この時、戻す値の型タイプ(HSPVAR_FLAG_*)を(*mptype)に代入し、
データの実態ポインタを返値として渡します。
戻す値の型タイプが自分自身の型でいい場合は、(*mptype)はそのままで構いません。
中間コードのパースについては、命令や関数と同様にHSPEXINFO構造体にある
関数を利用して値を取得することが可能です。
ObjectMethod関数は、mcall命令によりメソッド呼び出しが行なわれた時に実行
されるものです。それぞれの型に固有の実行機構を用意することができます。
--------------------
void *(*Cnv)( void *buffer, int flag )
flagでリクエストされた型から、自分の型への変換を行なうための
関数になります。flagでリクエストされるのは、組み込み型となる
HSPVAR_FLAG_INT、HSPVAR_FLAG_DOUBLE、HSPVAR_FLAG_STRだけで
それ以外はHSPVAR_ERROR_TYPEMISSのエラーを発生させて構いません。
bufferは、リクエストされた型を持つデータのポインタとなります。
これを変換したものを、返値として戻す必要があります。
bufferの内容は、変更しないでください。
--------------------
void *(*CnvCustom)( void *buffer, int flag )
自分の型からflagでリクエストされた型への変換を行なうための
関数になります。flagでリクエストされるのは、組み込み型となる
HSPVAR_FLAG_INT、HSPVAR_FLAG_DOUBLE、HSPVAR_FLAG_STRだけで
それ以外はHSPVAR_ERROR_TYPEMISSのエラーを発生させて構いません。
bufferは、リクエストされた型を持つデータのポインタとなります。
これを変換したものを、返値として戻す必要があります。
bufferの内容は、変更しないでください。
この関数は、組み込み型の値に対して新規に作成された型の演算を
行なおうとした時に型変換のために呼び出されます。
--------------------
void (*Copy)( void *in, void *out )
型のサイズに合わせてinの内容をoutにコピーします。
--------------------
void (*Alloc)( PVal *pval, PVal *pval2 )
pval変数が必要とするサイズを確保し初期化を行ないます。
pval2がNULLの場合は、新規データになります。
pval2が指定されている場合は、pval2の内容を継承して再確保を
行なうことを示しています。この場合、pval2のsize、ptをもとに
内容をコピーするようにしてください。また、ptの解放も同時に
行なう必要があります。
例:
if ( pval2 != NULL ) {
memcpy( pt, pval->pt, pval->size ) free( pval->pt ) }
--------------------
void (*Free)( PVal *pval )
pvalが確保しているメモリを解放します。
多くの場合、HSP3コアが自動的に呼び出しを行ないます。
--------------------
int (*GetSize)( void *pdat )
pdatが示す内容のサイズ(バイト数)を返します。
この関数は、1要素のデータサイズが可変長(basesizeが-1)の時に
呼び出されます。通常は、basesizeと同じサイズを戻しておいて
下さい。
--------------------
void *(*GetBlockSize)( PVal *pval, PDAT *pdat, int *size )
変数バッファ(バイナリ)のポインタとサイズを返します。
要素が可変長の場合は該当する1配列のバイナリのみが対象となり、
要素が固定長(int,double等)の場合は全配列バイナリを返します。
また、(*size)にメモリ確保サイズを返します。
--------------------
void (*AllocBlock)( PVal *pval, PDAT *pdat, int size )
バイナリデータ用にメモリブロックを確保します。
要素が可変長(str等)の場合にブロックサイズを強制的に確保する際に
使用されます。通常、固定長の場合は何もしなくて構いません。
--------------------
void (*Set)( PVal *pval, PDAT *pdat, void *in )void (*AddI)( PDAT *pdat, void *val )void (*SubI)( PDAT *pdat, void *val )void (*MulI)( PDAT *pdat, void *val )void (*DivI)( PDAT *pdat, void *val )void (*ModI)( PDAT *pdat, void *val )
void (*AndI)( PDAT *pdat, void *val )void (*OrI)( PDAT *pdat, void *val )void (*XorI)( PDAT *pdat, void *val )
void (*EqI)( PDAT *pdat, void *val )void (*NeI)( PDAT *pdat, void *val )void (*GtI)( PDAT *pdat, void *val )void (*LtI)( PDAT *pdat, void *val )void (*GtEqI)( PDAT *pdat, void *val )void (*LtEqI)( PDAT *pdat, void *val )
void (*RrI)( PDAT *pdat, void *val )void (*LrI)( PDAT *pdat, void *val )
それぞれの演算子に対応した演算用関数です。
PDATで渡されるデータは、自分との型の一致が保障されます。
演算用関数は、pdatとvalの演算結果をpdatに返します。
%sample
%href
PVAL構造体
APTR型
HSPVAR_FLAG_*
%group
構造体
%index
HSPEXINFO構造体
HSP内部情報データ
%prm
%inst
パラメーターの取得方法は、HSP2.6のSDKで採用された$202タイプで
使用されていたHSPEXINFO構造体と互換性があります。
HSP3でも同様に、HSPEXINFO構造体を使用しており、以下のような内容に
なっています。
typedef struct HSPEXINFO
{
short vershort minint *erchar *pstrchar *stmpPVal **mpvalint *actscrint *nptypeint *npvalint *strsizechar *refstrvoid *(*HspFunc_prm_getv)( void )int (*HspFunc_prm_geti)( void )int (*HspFunc_prm_getdi)( const int defval )char *(*HspFunc_prm_gets)( void )char *(*HspFunc_prm_getds)( const char *defstr )int (*HspFunc_val_realloc)( PVal *pv, int size, int mode )int (*HspFunc_fread)( char *fname, void *readmem, int rlen, int seekofs )int (*HspFunc_fsize)( char *fname )void *(*HspFunc_getbmscr)( int wid )int (*HspFunc_getobj)( int wid, int id, void *inf )int (*HspFunc_setobj)( int wid, int id, const void *inf )
int *npexflgvoid *hspctx
int (*HspFunc_addobj)( int wid )void (*HspFunc_puterror)( HSPERROR error )HspVarProc *(*HspFunc_getproc)( int type )HspVarProc *(*HspFunc_seekproc)( const char *name )
void (*HspFunc_prm_next)( void )int (*HspFunc_prm_get)( void )double (*HspFunc_prm_getd)( void )double (*HspFunc_prm_getdd)( double defval )unsigned short *(*HspFunc_prm_getlb)( void )PVal *(*HspFunc_prm_getpval)( void )APTR (*HspFunc_prm_getva)( PVal **pval )void (*HspFunc_prm_setva)( PVal *pval, APTR aptr, int type, const void *ptr )char *(*HspFunc_malloc)( int size )void (*HspFunc_free)( void *ptr )char *(*HspFunc_expand)( char *ptr, int size )IRQDAT *(*HspFunc_addirq)( void )int (*HspFunc_hspevent)( int event, int prm1, int prm2, void *prm3 )void (*HspFunc_registvar)( int flag, HSPVAR_COREFUNC func )void (*HspFunc_setpc)( const unsigned short *pc )void (*HspFunc_call)( const unsigned short *pc )void (*HspFunc_mref)( PVal *pval, int prm )
void (*HspFunc_dim)( PVal *pval, int flag, int len0, int len1, int len2, int len3, int len4 )void (*HspFunc_redim)( PVal *pval, int lenid, int len )void (*HspFunc_array)( PVal *pval, int offset )
char *(*HspFunc_varname)( int id )int (*HspFunc_seekvar)( const char *name )
} HSPEXINFO
HSP2.6から拡張されたり、削除されたフィールドもありますが、
パラメーターの取得など多くの点で同様の内容になっています。
HSPEXINFO構造体は、hsp3plugin.hの中でexinfoという名前で定義されています。
プラグインの中で、「exinfo->HspFunc_prm_geti()問題ありません。この項で説明してきた関数(code_geti)は、exinfoから該当する
関数を呼び出すためのマクロになっているだけです。
過去に作成したHSP2.6用のプラグインを3.0用に移植する場合には、この点に
留意すればある程度作業が軽減されると思います。
%sample
%href
%group
構造体
%index
HSPCTX構造体
基本的な動作に関する情報
%prm
%inst
HSPCTX構造体は、HSPの基本的な動作に関する情報を格納しています。
プラグインからもctxという名前で参照することが可能です。
typedef struct HSPCTX
{
HSPHED *hsphedunsigned short *mcsunsigned short *mem_mcschar *mem_mdsunsigned char *mem_diint *mem_ot
IRQDAT *mem_irqint irqmaxint iparamint wparamint lparam
PVal *mem_varHSPEXINFO30 exinfoint runmodeint waitcountint waitbaseint waittickint lasttickint sublevLOOPDAT mem_loop[HSP3_REPEAT_MAX]int looplevHSPERROR errint hspstatint statint strsizechar *refstrchar *fnbuffervoid *instanceint intwnd_idPVal *note_pvalAPTR note_aptrPVal *notep_pvalAPTR notep_aptrchar *stmp
void *prmstackLIBDAT *mem_linfoSTRUCTPRM *mem_minfoSTRUCTDAT *mem_finfoint retval_levelint endcodevoid (*msgfunc) (HSPCTX *)void *wnd_parentdouble refdvalchar *cmdline
HSPEXINFO *exinfo2
} HSPCTX
----------------------------------------
以下は、各フィールドの詳細です。
--------------------
HSPHED *hsphed
HSPオブジェクトファイル(axファイル)のヘッダポインタを格納します。
--------------------
unsigned short *mcsunsigned short *mem_mcs
実行中のコード位置と、中間コードが格納されているポインタを格納します。
--------------------
char *mem_mds
各種データが保存されている領域(data segment)ポインタを格納します。
--------------------
unsigned char *mem_di
デバッグ情報が保存されている領域(Debug info)ポインタを格納します。
--------------------
int *mem_ot
ラベル情報が保存されている領域(OT segment)ポインタを格納します。
--------------------
IRQDAT *mem_irqint irqmax
HSP内部の割り込み要因(IRQDAT)の情報を格納します。
irqmaxには、格納されているIRQDATの数が入ります。
--------------------
int iparamint wparamint lparam
システム変数iparam,wparam,lparamの内容を保持します。
--------------------
PVal *mem_var
グローバル変数の情報が保存されているポインタを格納します。
--------------------
HSPEXINFO30 exinfo
HSPEXINFO30構造体を格納しています。
このデータは、HSP3.0互換のために用意されているもので、
通常は、exinfo2メンバを参照してHSPEXINFO構造体を利用してください。
--------------------
int runmode
実行モードを格納します。
--------------------
int waitcount
wait/await命令のカウンタを格納します。
--------------------
int waitbase
await命令のSleep時間単位を格納します。
--------------------
int waittickint lasttick
await命令での次回tickと、前回のtick数を格納します。
--------------------
int sublev
サブルーチンのネスト数を格納します。
--------------------
LOOPDAT mem_loop[HSP3_REPEAT_MAX]int looplev
repeat〜loop命令で使用する情報を格納します。
--------------------
HSPERROR err
エラー発生時のエラーコードを格納します。
--------------------
int hspstat
システム変数hspstatの内容を格納します。
--------------------
int stat
システム変数statの内容を格納します。
--------------------
int strsize
システム変数strsizeの内容を格納します。
--------------------
char *refstr
システム変数refstrの内容を格納します。
--------------------
void *instance
Windowsのインスタンスハンドルを格納します。
--------------------
char *fnbuffer
割り込み時に使用されるファイル名の一次記憶バッファのポインタ。
--------------------
void *intwnd_save
Windowsメッセージが送られたウインドゥのハンドルを保存しています。
--------------------
PVal *note_pvalAPTR note_aptr
メモリノートパッド命令(notesel)で選択されている変数の情報を保存しています。
--------------------
PVal *notep_pvalAPTR notep_aptr
notesel命令で選択される前の情報を保存しています。
--------------------
char *stmp
関数の戻り値や、命令解釈時の文字列一時退避に使用できる領域です。
strbuf(sb〜)系のライブラリで扱うことができる文字列ポインタです。
--------------------
void *prmstack
サブルーチンやユーザー定義命令内で参照されるスタックパラメーターを格納します。
スタックパラメーターには、複数の情報が多重に保存されています。
--------------------
LIBDAT *mem_linfo
外部DLLやCOMなどの情報を管理するLIBDAT構造体のポインタを格納します。
--------------------
STRUCTPRM *mem_minfo
外部DLLやCOMなどの引数情報を管理するSTRUCTPRM構造体のポインタを格納します。
--------------------
STRUCTDAT *mem_finfo
モジュール変数やユーザー定義命令パラメーターの情報を管理するSTRUCTDAT構造体の
ポインタを格納します。
--------------------
int retval_level割り込み発生時のサブルーチンネストレベルを格納します。
この値は、システムが管理しています。
--------------------
int endcode
スクリプト終了時にシステムに渡されるレザルトコードを格納します。
--------------------
void (*msgfunc) (HSPCTX *)
ウィンドウメッセージを処理する関数のポインタを格納します。
--------------------
void *wnd_parent
HSPウィンドウ生成時に渡される親ウィンドウ情報が格納されます。
--------------------
double refdval
システム変数refdvalの内容を格納します。
--------------------
char *cmdline
コマンドラインパラメーターを格納します。
--------------------
HSPEXINFO *exinfo2
HSPEXINFO構造体へのポインタを格納します。
このメンバは、HSP3.1以降のみ利用可能です。
%sample
%href
LIBDAT構造体
%group
構造体
|