root/lang/hsp/misc/unused_variable_lister/unused_variable_lister.hsp @ 18343

Revision 18343, 4.0 kB (checked in by fujidig, 5 years ago)

スクリプトファイルを指定しても大丈夫なように変更

Line 
1// Unused Variable Lister
2// �����Ă��Ȃ��ÓI�ϐ��������
3// �t�@�C���I��C�A���O��HSP �̃I�u�W�F�N�g�t�@�C��(obj)���X�N���v�g�t�@�C��(*.hsp)��肵�Ă�������
4// �I�u�W�F�N�g�t�@�C����start.ax �ł̓f�o�b�O�����t��������̂�obj ��肵�Ă��������B
5
6// ���ӓ_:
7// �u�����Ă��Ȃ�����sdim �Ƃ� dupptr �ł����ƕϐ�����Ă����悤�ȕϐ�����肵�Ă��܂��܂�
8
9// TODO:
10// - �딻���Ȃ������// - �����Ă��Ȃ����̕ϐ�����ŎQ�Ƃ��Ă������t�@�C�����ƍs�ԍ���͂���
11#module
12#defcfunc get_ds var ds, int offset
13    dupptr ret, varptr(ds) + offset, 1, 2
14    return ret
15#defcfunc get_type_name int type
16    if 0 == types {
17        types = "TYPE_MARK", "TYPE_VAR", "TYPE_STRING", "TYPE_DNUM", "TYPE_INUM", "TYPE_STRUCT", "TYPE_XLABEL", "TYPE_LABEL", "TYPE_INTCMD", "TYPE_EXTCMD", "TYPE_EXTSYSVAR", "TYPE_CMPCMD", "TYPE_MODCMD", "TYPE_INTFUNC", "TYPE_SYSVAR", "TYPE_PROGCMD", "TYPE_DLLFUNC", "TYPE_DLLCTRL", "TYPE_USERDEF"
18    }
19    return types.type+"("+type+")"
20#global
21
22#include "hspcmp.as"
23
24#define TYPE_MARK 0
25#define TYPE_VAR 1
26#define TYPE_STRING 2
27#define TYPE_DNUM 3
28#define TYPE_INUM 4
29#define TYPE_STRUCT 5
30#define TYPE_XLABEL 6
31#define TYPE_LABEL 7
32#define TYPE_INTCMD 8
33#define TYPE_EXTCMD 9
34#define TYPE_EXTSYSVAR 10
35#define TYPE_CMPCMD 11
36#define TYPE_MODCMD 12
37#define TYPE_INTFUNC 13
38#define TYPE_SYSVAR 14
39#define TYPE_PROGCMD 15
40#define TYPE_DLLFUNC 16
41#define TYPE_DLLCTRL 17
42#define TYPE_USERDEF 18
43
44dialog "*", 16, "HSP obj file / script file"
45if stat == 0 : end
46obj_file_path = refstr
47ext = getpath(obj_file_path, 2+16)
48if ext == ".hsp" or ext == ".as" {
49    script_file_name = getpath(obj_file_path, 8)
50    obj_file_path = "obj"
51    hsc_ini script_file_name
52    hsc_objname obj_file_path
53    hsc_comp 1, 0
54    if stat {
55        title "�R���p�C���Ɏ��s���܂���"
56        hsc3_messize size
57        sdim error_message, size + 1
58        hsc_getmes error_message
59        mesbox error_message, 640, 480
60        stop
61    }
62}
63exist obj_file_path
64if strsize < 0 {
65    dialog "�I�u�W�F�N�g�t�@�C�� " + obj_file_path + "�����݂��܂���    end
66}
67sdim ax, strsize
68bload obj_file_path, ax
69if lpeek(ax) != 0x33505348 { // header magic number check
70    dialog "�s���ȃI�u�W�F�N�g�t�@�C���ł�", 1
71    end
72}
73
74max_val   = lpeek(ax,  8)
75
76pt_cs     = lpeek(ax, 16)
77max_cs    = lpeek(ax, 20)
78pt_ds     = lpeek(ax, 24)
79max_ds    = lpeek(ax, 28)
80pt_ot     = lpeek(ax, 32)
81max_ot    = lpeek(ax, 36)
82pt_dinfo  = lpeek(ax, 40)
83max_dinfo = lpeek(ax, 44)
84
85sdim cs,    max_cs
86sdim ds,    max_ds
87sdim ot,    max_ot
88sdim dinfo, max_dinfo
89memcpy cs,    ax, max_cs,    0, pt_cs
90memcpy ds,    ax, max_ds,    0, pt_ds
91memcpy ot,    ax, max_ot,    0, pt_ot
92memcpy dinfo, ax, max_dinfo, 0, pt_dinfo
93
94sdim varnames,, max_val
95i = 0
96repeat max_dinfo
97    ofs = peek(dinfo,cnt)
98    if ofs == 255 : break
99    if ofs == 254 {
100        continue cnt + 1 + 3 + 2
101    }
102    if ofs == 253 {
103        varnames.i = get_ds(ds, lpeek(dinfo, cnt + 1) & 0x00ffffff)
104        i ++
105        continue cnt + 1 + 3 + 2
106    }
107    if ofs == 252 {
108        continue cnt + 1 + 2
109    }
110loop
111
112dim var_used_flags, max_val
113repeat max_cs
114    c = wpeek(cs, cnt)
115    sz = 2
116    type = c & 0x1fff
117    ex1 = (c & 0x2000) != 0
118    ex2 = (c & 0x4000) != 0
119    if c & 0x8000 {
120        code = lpeek(cs, cnt + sz)
121        sz += 4
122    } else {
123        code = wpeek(cs, cnt + sz)
124        sz += 2
125    }
126    if type == TYPE_CMPCMD {
127        sz += 2
128    }
129    if ex1 and type == TYPE_VAR {
130        var_used_flags.code = 1
131    }
132    continue cnt + sz
133loop
134
135unused_variables_count = 0
136unused_variables = 0
137repeat max_val
138    if var_used_flags.cnt : continue
139    unused_variables.unused_variables_count = cnt
140    unused_variables_count ++
141loop
142
143if unused_variables_count {
144    mes "���g�p�ϐ���+ unused_variables_count + " �Œ��‚��܂���"
145} else {
146    mes "���g�p�ϐ��͌��‚����������"
147}
148repeat unused_variables_count
149    mes varnames(unused_variables.cnt)
150loop
Note: See TracBrowser for help on using the browser.