-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathhsp3struct.h
573 lines (485 loc) · 15.1 KB
/
hsp3struct.h
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
//
// Structure for HSP
//
#ifndef __hsp3struct_h
#define __hsp3struct_h
#include "hspvar_core.h"
/*
rev 43
mingw : error : HSPERROR が未定義
に対処
*/
#include "hsp3debug.h"
// command type
#define TYPE_MARK 0
#define TYPE_VAR 1
#define TYPE_STRING 2
#define TYPE_DNUM 3
#define TYPE_INUM 4
#define TYPE_STRUCT 5
#define TYPE_XLABEL 6
#define TYPE_LABEL 7
#define TYPE_INTCMD 8
#define TYPE_EXTCMD 9
#define TYPE_EXTSYSVAR 10
#define TYPE_CMPCMD 11
#define TYPE_MODCMD 12
#define TYPE_INTFUNC 13
#define TYPE_SYSVAR 14
#define TYPE_PROGCMD 15
#define TYPE_DLLFUNC 16
#define TYPE_DLLCTRL 17
#define TYPE_USERDEF 18
#define TYPE_ERROR -1
#define TYPE_CALCERROR -2
#define PARAM_OK 0
#define PARAM_SPLIT -1
#define PARAM_END -2
#define PARAM_DEFAULT -3
#define PARAM_ENDSPLIT -4
#define HSP3_FUNC_MAX 18
#define HSP3_TYPE_USER 18
#define EXFLG_1 0x2000
#define EXFLG_2 0x4000
#define CSTYPE 0x1fff
typedef struct HSPHED
{
// HSP3.0 header structure
//
char h1; // magic code1
char h2; // magic code2
char h3; // magic code3
char h4; // magic code4
int version; // version number info
int max_val; // max count of VAL Object
int allsize; // total file size
int pt_cs; // ptr to Code Segment
int max_cs; // size of CS
int pt_ds; // ptr to Data Segment
int max_ds; // size of DS
int pt_ot; // ptr to Object Temp
int max_ot; // size of OT
int pt_dinfo; // ptr to Debug Info
int max_dinfo; // size of DI
int pt_linfo; // ptr to LibInfo(2.3)
int max_linfo; // size of LibInfo(2.3)
int pt_finfo; // ptr to FuncInfo(2.3)
int max_finfo; // size of FuncInfo(2.3)
int pt_minfo; // ptr to ModInfo(2.5)
int max_minfo; // size of ModInfo(2.5)
int pt_finfo2; // ptr to FuncInfo2(2.5)
int max_finfo2; // size of FuncInfo2(2.5)
int pt_hpidat; // ptr to HPIDAT(3.0)
short max_hpi; // size of HPIDAT(3.0)
short max_varhpi; // Num of Vartype Plugins(3.0)
int bootoption; // bootup options
int runtime; // ptr to runtime name
} HSPHED;
//#define HSPHED_BOOTOPT_WINHIDE 2 // 起動時ウインドゥ非表示
//#define HSPHED_BOOTOPT_DIRSAVE 4 // 起動時カレントディレクトリ変更なし
#define HSPHED_BOOTOPT_DEBUGWIN 1 // 起動時デバッグウインドゥ表示
//#define HSPHED_BOOTOPT_SAVER 0x100 // スクリーンセーバー
#define HSPHED_BOOTOPT_RUNTIME 0x1000 // 動的ランタイムを有効にする
#define HPIDAT_FLAG_TYPEFUNC 0
#define HPIDAT_FLAG_VARFUNC 1
#define HPIDAT_FLAG_DLLFUNC 2
typedef struct HPIDAT {
short flag; // flag info
short option;
int libname; // lib name index (DS)
int funcname; // function name index (DS)
void *libptr; // lib handle
} HPIDAT;
#define LIBDAT_FLAG_NONE 0
#define LIBDAT_FLAG_DLL 1
#define LIBDAT_FLAG_DLLINIT 2
#define LIBDAT_FLAG_MODULE 3
#define LIBDAT_FLAG_COMOBJ 4
typedef struct LIBDAT {
int flag; // initalize flag
int nameidx; // function name index (DS)
// Interface IID ( Com Object )
void *hlib; // Lib handle
int clsid; // CLSID (DS) ( Com Object )
} LIBDAT;
// multi parameter type
#define MPTYPE_NONE 0
#define MPTYPE_VAR 1
#define MPTYPE_STRING 2
#define MPTYPE_DNUM 3
#define MPTYPE_INUM 4
#define MPTYPE_STRUCT 5
#define MPTYPE_LABEL 7
#define MPTYPE_LOCALVAR -1
#define MPTYPE_ARRAYVAR -2
#define MPTYPE_SINGLEVAR -3
#define MPTYPE_FLOAT -4
#define MPTYPE_STRUCTTAG -5
#define MPTYPE_LOCALSTRING -6
#define MPTYPE_MODULEVAR -7
#define MPTYPE_PPVAL -8
#define MPTYPE_PBMSCR -9
#define MPTYPE_PVARPTR -10
#define MPTYPE_IMODULEVAR -11
#define MPTYPE_IOBJECTVAR -12
#define MPTYPE_LOCALWSTR -13
#define MPTYPE_FLEXSPTR -14
#define MPTYPE_FLEXWPTR -15
#define MPTYPE_PTR_REFSTR -16
#define MPTYPE_PTR_EXINFO -17
#define MPTYPE_PTR_DPMINFO -18
#define MPTYPE_NULLPTR -19
#define MPTYPE_TMODULEVAR -20
//#define MPTYPE_PTR_HWND -14
//#define MPTYPE_PTR_HDC -15
//#define MPTYPE_PTR_HINST -16
#define STRUCTPRM_SUBID_STACK -1
#define STRUCTPRM_SUBID_STID -2
#define STRUCTPRM_SUBID_DLL -3
#define STRUCTPRM_SUBID_DLLINIT -4
#define STRUCTPRM_SUBID_OLDDLL -5
#define STRUCTPRM_SUBID_OLDDLLINIT -6
#define STRUCTPRM_SUBID_COMOBJ -7
#define STRUCTCODE_THISMOD -1
#define TYPE_OFFSET_COMOBJ 0x1000
typedef struct STRUCTPRM {
short mptype; // Parameter type
short subid; // struct index
int offset; // offset from top
} STRUCTPRM;
// DLL function flags
#define STRUCTDAT_OT_NONE 0
#define STRUCTDAT_OT_CLEANUP 1
#define STRUCTDAT_OT_STATEMENT 2
#define STRUCTDAT_OT_FUNCTION 4
// Module function flags
#define STRUCTDAT_INDEX_FUNC -1
#define STRUCTDAT_INDEX_CFUNC -2
#define STRUCTDAT_INDEX_STRUCT -3
#define STRUCTDAT_FUNCFLAG_CLEANUP 0x10000
// function,module specific data
typedef struct STRUCTDAT {
short index; // base LIBDAT index
short subid; // struct index
int prmindex; // STRUCTPRM index(MINFO)
int prmmax; // number of STRUCTPRM
int nameidx; // name index (DS)
int size; // struct size (stack)
int otindex; // OT index(Module) / cleanup flag(Dll)
union {
void *proc; // proc address
int funcflag; // function flags(Module)
};
} STRUCTDAT;
// Var Data for Multi Parameter
typedef struct MPVarData {
PVal *pval;
APTR aptr;
} MPVarData;
// Var Data for Module Function
typedef struct MPModVarData {
short subid;
short magic;
PVal *pval;
APTR aptr;
} MPModVarData;
#define MODVAR_MAGICCODE 0x55aa
#define IRQ_FLAG_NONE 0
#define IRQ_FLAG_DISABLE 1
#define IRQ_FLAG_ENABLE 2
#define IRQ_OPT_GOTO 0
#define IRQ_OPT_GOSUB 1
#define IRQ_OPT_CALLBACK 2
// Stack info for DLL Parameter
typedef struct MPStack {
char *prmbuf;
char **prmstk;
int curstk;
void *vptr;
} MPStack;
typedef struct IRQDAT {
short flag; // flag
short opt; // option value
int custom; // custom message value
int custom2; // custom message value2
int iparam; // iparam option
unsigned short *ptr; // jump ptr
void (*callback)(struct IRQDAT *,int,int); // IRQ callback function
} IRQDAT;
typedef struct HSPCTX HSPCTX;
// Plugin info data (3.0 compatible)
typedef struct HSPEXINFO30
{
// HSP internal info data (2.6)
//
short ver; // Version Code
short min; // Minor Version
//
int *er; // Not Use
char *pstr; // String Buffer (master)
char *stmp; // String Buffer (sub)
PVal **mpval; // Master PVAL
//
int *actscr; // Active Window ID
int *nptype; // Next Parameter Type
int *npval; // Next Parameter Value
int *strsize; // StrSize Buffer
char *refstr; // RefStr Buffer
//
void *(*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 );
// HSP internal info data (3.0)
//
int *npexflg; // Next Parameter ExFlg
HSPCTX *hspctx; // HSP context ptr
// Enhanced data (3.0)
//
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 );
} HSPEXINFO30;
// Plugin info data (3.1 or later)
typedef struct HSPEXINFO
{
// HSP internal info data (2.6)
//
short ver; // Version Code
short min; // Minor Version
//
int *er; // Not Use
char *pstr; // String Buffer (master)
char *stmp; // String Buffer (sub)
PVal **mpval; // Master PVAL
//
int *actscr; // Active Window ID
int *nptype; // Next Parameter Type
int *npval; // Next Parameter Value
int *strsize; // StrSize Buffer
char *refstr; // RefStr Buffer
//
void *(*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 );
// HSP internal info data (3.0)
//
int *npexflg; // Next Parameter ExFlg
HSPCTX *hspctx; // HSP context ptr
// Enhanced data (3.0)
//
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 );
// Enhanced data (3.1)
//
char *(*HspFunc_varname)( int id );
int (*HspFunc_seekvar)( const char *name );
} HSPEXINFO;
#define HSP3_REPEAT_MAX 32
typedef struct LOOPDAT {
int time; // loop times left
int cnt; // count
int step; // count add value
unsigned short *pt; // loop start ptr
} LOOPDAT;
// 実行モード
enum
{
RUNMODE_RUN = 0,
RUNMODE_WAIT,
RUNMODE_AWAIT,
RUNMODE_STOP,
RUNMODE_END,
RUNMODE_ERROR,
RUNMODE_RETURN,
RUNMODE_INTJUMP,
RUNMODE_ASSERT,
RUNMODE_LOGMES,
RUNMODE_EXITRUN,
RUNMODE_MAX
};
struct HSPCTX
{
// HSP Context
//
HSPHED *hsphed; // HSP object file header
unsigned short *mcs; // current code segment ptr
unsigned short *mem_mcs; // code segment ptr
char *mem_mds; // data segment ptr
unsigned char *mem_di; // Debug info ptr
int *mem_ot; // object temp segment ptr
IRQDAT *mem_irq; // IRQ data ptr
int irqmax; // IRQ data count
int iparam; // IRQ Info data1
int wparam; // IRQ Info data2
int lparam; // IRQ Info data3
PVal *mem_var; // var storage index
HSPEXINFO30 exinfo; // HSP function data(3.0)
int runmode; // HSP execute mode
int waitcount; // counter for wait
int waitbase; // wait sleep base
int waittick; // next tick for await
int lasttick; // previous tick
int sublev; // subroutine level
LOOPDAT mem_loop[HSP3_REPEAT_MAX]; // repeat loop info
int looplev; // repeat loop level
HSPERROR err; // error code
int hspstat; // HSP status
int stat; // sysvar 'stat'
int strsize; // sysvar 'strsize'
char *refstr; // RefStr Buffer
char *fnbuffer; // buffer for FILENAME
void *instance; // Instance Handle (windows)
int intwnd_id; // Window ID (interrupt)
PVal *note_pval; // MemNote pval
APTR note_aptr; // MemNote aptr
PVal *notep_pval; // MemNote pval (previous)
APTR notep_aptr; // MemNote aptr (previous)
char *stmp; // String temporary buffer
void *prmstack; // Current parameter stack area
LIBDAT *mem_linfo; // Library info
STRUCTPRM *mem_minfo; // Parameter info
STRUCTDAT *mem_finfo; // Function/Struct info
int retval_level; // subroutine level (return code)
int endcode; // End result code
void (*msgfunc) (HSPCTX *); // Message Callback Proc.
void *wnd_parent; // Parent Window Handle
double refdval; // sysvar 'refdval'
char *cmdline; // Command Line Parameters
HSPEXINFO *exinfo2; // HSP function data(3.1)
};
#define HSPCTX_REFSTR_MAX 4096
#define HSPCTX_CMDLINE_MAX 1024
#define HSPSTAT_NORMAL 0
#define HSPSTAT_DEBUG 1
#define HSPSTAT_SSAVER 2
#define TYPE_EX_SUBROUTINE 0x100 // gosub用のスタックタイプ
#define TYPE_EX_CUSTOMFUNC 0x101 // deffunc呼び出し用のスタックタイプ
#define TYPE_EX_ENDOFPARAM 0x200 // パラメーター終端(HSPtoC)
#define TYPE_EX_ARRAY_VARS 0x201 // 配列要素付き変数用スタックタイプ(HSPtoC)
typedef struct
{
// Subroutine Context
//
int stacklev; // サブルーチン開始時のスタックレベル
unsigned short *mcsret; // 呼び出し元PCポインタ(復帰用)
STRUCTDAT *param; // 引数パラメーターリスト
void *oldtack; // 以前のスタックアドレス
} HSPROUTINE;
// コールバックのオプション
//
#define HSPEVENT_ENABLE_COMMAND 1 // 1ステップ実行時
#define HSPEVENT_ENABLE_HSPIRQ 2 // HSP内での割り込み発生時
#define HSPEVENT_ENABLE_GETKEY 4 // キーチェック時
#define HSPEVENT_ENABLE_FILE 8 // ファイル入出力時
#define HSPEVENT_ENABLE_MEDIA 16 // メディア入出力時
#define HSPEVENT_ENABLE_PICLOAD 32 // picload命令実行時
typedef struct {
// 型ごとの情報
// (*の項目は、親アプリケーションで設定されます)
//
short type; // *型タイプ値
short option; // *オプション情報
HSPCTX *hspctx; // *HSP Context構造体へのポインタ
HSPEXINFO *hspexinfo; // *HSPEXINFO構造体へのポインタ
// ファンクション情報
//
int (* cmdfunc) (int); // コマンド受け取りファンクション
void *(* reffunc) (int *,int); // 参照受け取りファンクション
int (* termfunc) (int); // 終了受け取りファンクション
// イベントコールバックファンクション
//
int (* msgfunc) (int,int,int); // Windowメッセージコールバック
int (* eventfunc) (int,int,int,void *); // HSPイベントコールバック
} HSP3TYPEINFO;
// HSP割り込みID
enum
{
HSPIRQ_ONEXIT = 0,
HSPIRQ_ONERROR,
HSPIRQ_ONKEY,
HSPIRQ_ONCLICK,
HSPIRQ_USERDEF,
HSPIRQ_MAX
};
// HSPイベントID
enum
{
HSPEVENT_NONE = 0,
HSPEVENT_COMMAND,
HSPEVENT_HSPIRQ,
HSPEVENT_GETKEY,
HSPEVENT_STICK,
HSPEVENT_FNAME,
HSPEVENT_FREAD,
HSPEVENT_FWRITE,
HSPEVENT_FEXIST,
HSPEVENT_FDELETE,
HSPEVENT_FMKDIR,
HSPEVENT_FCHDIR,
HSPEVENT_FCOPY,
HSPEVENT_FDIRLIST1,
HSPEVENT_FDIRLIST2,
HSPEVENT_GETPICSIZE,
HSPEVENT_PICLOAD,
HSPEVENT_MAX
};
#endif