Added source files C--.

git-svn-id: svn://kolibrios.org@6446 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
GerdtR
2016-06-13 02:07:22 +00:00
parent 393851c2ba
commit 6bd5a354f5
38 changed files with 57942 additions and 0 deletions
+104
View File
@@ -0,0 +1,104 @@
Compiler = gcc
Linker = kos32-ld
Includes = -I d:\TEMP\mprog\kos\includes
Compiler_Options = -c -fno-exceptions -D_KOS_
Exe_file = cmm.kex
Path_Libs = -Ld:/TEMP/Dev-Cpp/lib/kos
#-Ld:/TEMP/Dev-Cpp/lib/gcc/mingw32/3.4.2 -Ld:/TEMP/Dev-Cpp/lib/gcc -Ld:/TEMP/Dev-Cpp/lib -Ld:/TEMP/Dev-Cpp/lib
Add_Libs =
Link_Libs = -lc -lgcc
My_Libs = main.o port.o toka.o tokb.o tokc.o toke.o tokr.o errors.o debug.o outobj.o outpe.o disasm.o switch.o outle.o pointer.o new_type.o class.o res.o optreg.o libobj.o
####################
## Makefile rules ##
####################
all : $(Exe_file)
$(Exe_file) : $(My_Libs)
$(Linker) -o cmm.kex -static -nostdlib -T static.lds --stack 0x100000 $(Path_Libs) $(Add_Libs) $(My_Libs) $(Link_Libs)
objcopy cmm.kex -O binary
kpack cmm.kex
clean:
rm *.o
# next are the exceptions that don't have to be compiled with the /zu option
# since they will never be called from a interrupt. hey.. I _tried_ to find
# a clean solution..
main.o : main.cpp
$(Compiler) $(Compiler_Options) $<
toka.o : toka.cpp
$(Compiler) $(Compiler_Options) $<
tokb.o : tokb.cpp
$(Compiler) $(Compiler_Options) $<
tokc.o : tokc.cpp
$(Compiler) $(Compiler_Options) $<
toke.o : toke.cpp
$(Compiler) $(Compiler_Options) $<
tokr.o : tokr.cpp
$(Compiler) $(Compiler_Options) $<
errors.o :errors.cpp
$(Compiler) $(Compiler_Options) $<
debug.o : debug.cpp
$(Compiler) $(Compiler_Options) $<
outobj.o : outobj.cpp
$(Compiler) $(Compiler_Options) $<
outpe.o : outpe.cpp
$(Compiler) $(Compiler_Options) $<
disasm.o : disasm.cpp
$(Compiler) $(Compiler_Options) $<
switch.o : switch.cpp
$(Compiler) $(Compiler_Options) $<
outle.o : outle.cpp
$(Compiler) $(Compiler_Options) $<
pointer.o : pointer.cpp
$(Compiler) $(Compiler_Options) $<
new_type.o : new_type.cpp
$(Compiler) $(Compiler_Options) $<
class.o : class.cpp
$(Compiler) $(Compiler_Options) $<
res.o : res.cpp
$(Compiler) $(Compiler_Options) $<
optreg.o : optreg.cpp
$(Compiler) $(Compiler_Options) $<
libobj.o : libobj.cpp
$(Compiler) $(Compiler_Options) $<
port.o: port.cpp
$(Compiler) $(Compiler_Options) $<
.cpp.o:
$(Compiler) $(Compiler_Options) $<
.asm.o:
fasm $<
+110
View File
@@ -0,0 +1,110 @@
Compiler = gcc
#Compiler_Options = -c -fno-exceptions -D_UNIX_
Compiler_Options = -c -fno-exceptions -O2 -D_WIN32_
#-D: _WIN32_ or _UNIX_
#-D: for _WIN32_ add -D__CONSOLE__
Exe_file = cmm
Path_Libs = -Ld:/TEMP/Dev-Cpp/lib/gcc/mingw32/3.4.2 -Ld:/TEMP/Dev-Cpp/lib/gcc -Ld:/TEMP/Dev-Cpp/lib -Ld:/TEMP/Dev-Cpp/lib
Add_Libs = d:/TEMP/Dev-Cpp/lib/gcc/mingw32/3.4.2/crtbegin.o d:/TEMP/Dev-Cpp/lib/crt2.o d:/TEMP/Dev-Cpp/lib/gcc/mingw32/3.4.2/crtend.o
Link_Libs = -lmingw32 -lgcc -lmoldname -lmingwex -lmsvcrt -luser32 -lkernel32 -ladvapi32 -lshell32
My_Libs = main.o toka.o tokb.o tokc.o toke.o tokr.o errors.o debug.o outobj.o outpe.o disasm.o switch.o outle.o pointer.o new_type.o class.o res.o optreg.o libobj.o port.o
#Link_Libs = -lmingw32 -lgcc -lmoldname -lmingwex -lmingw32 -lmoldname -lmingwex -lmsvcrt -lgcc -lmsvcrt -luser32 -lkernel32 -ladvapi32 -lshell32
####################
## Makefile rules ##
####################
all : $(Exe_file)
$(Exe_file) : $(My_Libs)
ld -o cmm.exe $(Path_Libs) $(Add_Libs) $(My_Libs) $(Link_Libs)
# $(Compiler) -o $(Exe_file) $(All_Libs)
# ld -o cmm.exe -Bdynamic d:/TEMP/Dev-Cpp/bin/../lib/gcc/mingw32/3.4.2/crtend.o d:/TEMP/Dev-Cpp/bin/../lib/gcc/mingw32/3.4.2/../../../crt2.o d:/TEMP/Dev-Cpp/bin/../lib/gcc/mingw32/3.4.2/crtbegin.o -Ld:/TEMP/Dev-Cpp/bin/../lib/gcc/mingw32/3.4.2 -Ld:/TEMP/Dev-Cpp/bin/../lib/gcc -Ld:/TEMP/Dev-Cpp/bin/../lib/gcc/mingw32/3.4.2/../../.. -Ld:/TEMP/Dev-Cpp/bin/../lib/gcc/mingw32/3.4.2/../../.. main.o toka.o tokb.o tokc.o toke.o tokr.o errors.o debug.o outobj.o outpe.o disasm.o switch.o outle.o pointer.o new_type.o class.o res.o optreg.o libobj.o port.o -lmingw32 -lgcc -lmoldname -lmingwex -lmsvcrt -luser32 -lkernel32 -ladvapi32 -lshell32 -lmingw32 -lmoldname -lmingwex -lmsvcrt -lgcc
clean:
rm *.o
# next are the exceptions that don't have to be compiled with the /zu option
# since they will never be called from a interrupt. hey.. I _tried_ to find
# a clean solution..
main.o : main.cpp
$(Compiler) $(Compiler_Options) $<
toka.o : toka.cpp
$(Compiler) $(Compiler_Options) $<
tokb.o : tokb.cpp
$(Compiler) $(Compiler_Options) $<
tokc.o : tokc.cpp
$(Compiler) $(Compiler_Options) $<
toke.o : toke.cpp
$(Compiler) $(Compiler_Options) $<
tokr.o : tokr.cpp
$(Compiler) $(Compiler_Options) $<
errors.o :errors.cpp
$(Compiler) $(Compiler_Options) $<
debug.o : debug.cpp
$(Compiler) $(Compiler_Options) $<
outobj.o : outobj.cpp
$(Compiler) $(Compiler_Options) $<
outpe.o : outpe.cpp
$(Compiler) $(Compiler_Options) $<
disasm.o : disasm.cpp
$(Compiler) $(Compiler_Options) $<
switch.o : switch.cpp
$(Compiler) $(Compiler_Options) $<
outle.o : outle.cpp
$(Compiler) $(Compiler_Options) $<
pointer.o : pointer.cpp
$(Compiler) $(Compiler_Options) $<
new_type.o : new_type.cpp
$(Compiler) $(Compiler_Options) $<
class.o : class.cpp
$(Compiler) $(Compiler_Options) $<
res.o : res.cpp
$(Compiler) $(Compiler_Options) $<
optreg.o : optreg.cpp
$(Compiler) $(Compiler_Options) $<
libobj.o : libobj.cpp
$(Compiler) $(Compiler_Options) $<
port.o: port.cpp
$(Compiler) $(Compiler_Options) $<
.cpp.o:
$(Compiler) $(Compiler_Options) $<
.asm.o:
fasm $<
+568
View File
@@ -0,0 +1,568 @@
#define NUM_ASM_MODIF 12
char *asmmodif[]={
"FAR", "SHORT", "NEAR", "DUP", "INT","WORD","LONG","DWORD",
"TBYTE","LDOUBLE","QWORD","DOUBLE"
};
//á«®¢  ¬®¤¨ä¨ª â®àë
#define m_far 1
#define m_short 2
#define m_near 4
#define m_dup 8
#define m_int 16
#define m_word 32
#define m_long 64
#define m_dword 128
#define m_tbyte 256
#define m_ldouble 512
#define m_qword 1024
#define m_double 2048
//ª®­à®«ì à §àã襭¨ï ॣ¨áâ஢
#define d1par 256 //¯® ¯¥à¢®¬ã ®¯¥à ­¤ã
#define d2par 512 //¯® 2 ®¯¥à ­¤ã
struct ASMPAR
{
unsigned char num; //ç¨á«® ®¯¥à ­¤®¢ ¬« ¤è¨¥ 4 ¡¨â  ¬¨­¨¬ «ì­®¥ ç¨á«®,
// áâ à訥 4 ¬ ªá¨¬ «ì­®¥, ¥á«¨ 0, ⮠⮫쪮 ¬« ¤è¥¥,
// ¥á«¨ 15, â® ­¥®£à ­¨ç¥­®
unsigned char chip; // ­¥®¡å®¤¨¬ë© cpu
unsigned short reg; // à §àãè ¥¬ë¥ ॣ¨áâàë
unsigned short mod; // á«®¢®-¬®¤¨ä¨ª â®à
}asmpar[]={
2,0,d1par,0, //a_add
2,0,d1par,0, //a_or
2,0,d1par,0, //a_adc
2,0,d1par,0, //a_sbb
2,0,d1par,0, //a_and
2,0,d1par,0, //a_sub
2,0,d1par,0, //a_xor
2,0,d1par,0, //a_cmp
1,0,d1par,0, //a_not
1,0,d1par,0, //a_neg
1,0,dEAX|dEDX,0, //a_mul
0,0,0,0,
1,0,dEAX|dEDX,0, //a_div=a_mul+2
1,0,dEAX|dEDX,0, //a_idiv
2,0,d1par,0, //a_rol
2,0,d1par,0, //a_ror
2,0,d1par,0, //a_rcl
2,0,d1par,0, //a_rcr
2,0,d1par,0, //a_shl
2,0,d1par,0, //a_shr
0,0,0,0,
2,0,d1par,0, //a_sar=a_shr+2
2,3,0,0, //a_bt
2,3,d1par,0, //a_bts
2,3,d1par,0, //a_btr
2,3,d1par,0, //a_btc
1,0,d1par,0, //a_inc
1,0,d1par,0, //a_dec
2,0,0,0, //a_test
0x31,0,d1par|dEAX|dEDX,0, //a_imul
3,3,d1par,0, //a_shld
3,3,d1par,0, //a_shrd
0,0,dEAX,0, //a_daa
0,0,dEAX,0, //a_das
0,0,dEAX,0, //a_aaa
0,0,dEAX,0, //a_aas
0x10,0,dEAX,0, //a_aam
0x10,0,dEAX,0, //a_aad
2,3,d1par,0, //a_movzx
2,3,d1par,0, //a_movsx
0,0,dEAX,0, //a_cbw
0,3,dEAX,0, //a_cwde
0,0,dEDX,0, //a_cwd
0,3,dEDX,0, //a_cdq,
1,4,d1par,0, //a_bswap
0,0,dEAX,0, //a_xlat
2,3,d1par,0, //a_bsf
2,3,d1par,0, //a_bsr
2,4,d1par|dEAX,0, //a_cmpxchg
1,5,d1par|dEDX|dEAX,0, //a_cmpxchg8b
2,4,d1par|d2par,0, //a_xadd
0,0,0,0, //a_nop
0,0,0,0, //a_wait
0,0,0,0, //a_lock
0,0,0,0, //a_hlt
1,0,dEAX|dEBX|dECX|dEDX|dESI|dEDI|dEBP|dESP,0, //a_int
0,0,dEAX|dEBX|dECX|dEDX|dESI|dEDI|dEBP|dESP,0, //a_into
0,0,dEAX|dEBX|dECX|dEDX|dESI|dEDI|dEBP|dESP,0, //a_iret
0,0,dEAX|dEBX|dECX|dEDX|dESI|dEDI|dEBP|dESP,0, //a_iretd
0,0,0,0, //a_popf
0,3,0,0, //a_popfd
0,0,0,0, //a_pushf
0,3,0,0, //a_pushfd
0,0,0,0, //a_sahf
0,0,dEAX,0, //a_lahf
0,0,0,0, //a_cmc
0,0,0,0, //a_clc
0,0,0,0, //a_stc
0,0,0,0, //a_cli
0,0,0,0, //a_sti
0,0,0,0, //a_cld
0,0,0,0, //a_std
0xF1,0,0,m_int|m_word|m_long|m_dword, //a_push
0,2,0,0, //a_pusha
0,3,0,0, //a_pushad
0xF1,0,d1par,0, //a_pop
0,2,dEAX|dEBX|dECX|dEDX|dESI|dEDI|dEBP|dESP,0, //a_popa
0,3,dEAX|dEBX|dECX|dEDX|dESI|dEDI|dEBP|dESP,0, //a_popad
2,0,d1par|d2par,0, //a_xchg
2,0,d1par,0, //a_mov
2,0,d1par,0, //a_lea
2,3,d1par,0, //a_lfs
2,3,d1par,0, //a_lgs
2,3,d1par,0, //a_lss
2,0,d1par,0, //a_les
2,0,d1par,0, //a_lds
0,3,0,0, //a_adrsiz
2,0,dEAX,0, //a_in
2,0,0,0, //a_out
0,2,dEAX|dEDI,0, //a_insb
0,2,dEAX|dEDI,0, //a_insw
0,3,dEAX|dEDI,0, //a_insd
0,2,dESI,0, //a_outsb
0,2,dESI,0, //a_outsw
0,3,dESI,0, //a_outsd
0,0,dEDI|dESI,0, //a_movsb
0,0,dEDI|dESI,0, //a_movsw
0x20,3,dEDI|dESI,0, //a_movsd
0,0,dEDI|dESI,0, //a_cmpsb
0,0,dEDI|dESI,0, //a_cmpsw
0x20,3,dEDI|dESI,0, //a_cmpsd
0,0,dEDI,0, //a_stosb
0,0,dEDI,0, //a_stosw
0,3,dEDI,0, //a_stosd
0,0,dEAX|dESI,0, //a_lodsb
0,0,dEAX|dESI,0, //a_lodsw
0,3,dEAX|dESI,0, //a_lodsd
0,0,dEDI,0, //a_scasb
0,0,dEDI,0, //a_scasw
0,3,dEDI,0, //a_scasd
0,0,dECX,0, //a_repnz
0,0,dECX,0, //a_rep
1,0,dEAX|dEBX|dECX|dEDX|dESI|dEDI|dEBP|dESP,m_far|m_near|m_short, //a_jcxz
1,0,dEAX|dEBX|dECX|dEDX|dESI|dEDI|dEBP|dESP,m_far|m_near|m_short, //a_jecxz
1,0,dECX,0, //a_loop
1,3,dECX,0, //a_loopd
1,0,dECX,0, //a_loopz
1,0,dECX,0, //a_loopnz
1,0,dEAX|dEBX|dECX|dEDX|dESI|dEDI|dEBP|dESP,m_far|m_near|m_short, //a_jo
1,0,dEAX|dEBX|dECX|dEDX|dESI|dEDI|dEBP|dESP,m_far|m_near|m_short, //a_jno
1,0,dEAX|dEBX|dECX|dEDX|dESI|dEDI|dEBP|dESP,m_far|m_near|m_short, //a_jc
1,0,dEAX|dEBX|dECX|dEDX|dESI|dEDI|dEBP|dESP,m_far|m_near|m_short, //a_jnc
1,0,dEAX|dEBX|dECX|dEDX|dESI|dEDI|dEBP|dESP,m_far|m_near|m_short, //a_jz
1,0,dEAX|dEBX|dECX|dEDX|dESI|dEDI|dEBP|dESP,m_far|m_near|m_short, //a_jnz
1,0,dEAX|dEBX|dECX|dEDX|dESI|dEDI|dEBP|dESP,m_far|m_near|m_short, //a_jna
1,0,dEAX|dEBX|dECX|dEDX|dESI|dEDI|dEBP|dESP,m_far|m_near|m_short, //a_ja
1,0,dEAX|dEBX|dECX|dEDX|dESI|dEDI|dEBP|dESP,m_far|m_near|m_short, //a_js
1,0,dEAX|dEBX|dECX|dEDX|dESI|dEDI|dEBP|dESP,m_far|m_near|m_short, //a_jns
1,0,dEAX|dEBX|dECX|dEDX|dESI|dEDI|dEBP|dESP,m_far|m_near|m_short, //a_jp
1,0,dEAX|dEBX|dECX|dEDX|dESI|dEDI|dEBP|dESP,m_far|m_near|m_short, //a_jnp
1,0,dEAX|dEBX|dECX|dEDX|dESI|dEDI|dEBP|dESP,m_far|m_near|m_short, //a_jl
1,0,dEAX|dEBX|dECX|dEDX|dESI|dEDI|dEBP|dESP,m_far|m_near|m_short, //a_jnl
1,0,dEAX|dEBX|dECX|dEDX|dESI|dEDI|dEBP|dESP,m_far|m_near|m_short, //a_jng
1,0,dEAX|dEBX|dECX|dEDX|dESI|dEDI|dEBP|dESP,m_far|m_near|m_short, //a_jg
1,3,d1par,0, //a_seto
1,3,d1par,0, //a_setno
1,3,d1par,0, //a_setc
1,3,d1par,0, //a_setnc
1,3,d1par,0, //a_setz
1,3,d1par,0, //a_setnz
1,3,d1par,0, //a_setna
1,3,d1par,0, //a_seta
1,3,d1par,0, //a_sets
1,3,d1par,0, //a_setns
1,3,d1par,0, //a_setp
1,3,d1par,0, //a_setnp
1,3,d1par,0, //a_setl
1,3,d1par,0, //a_setnl
1,3,d1par,0, //a_setng
1,3,d1par,0, //a_setg
1,0,dEAX|dEBX|dECX|dEDX|dESI|dEDI|dEBP|dESP,m_far|m_near|m_short, //a_jmp
1,0,dEAX|dEBX|dECX|dEDX|dESI|dEDI|dEBP|dESP,m_far|m_near, //a_call/*a_callf,*/
0x10,0,dEAX|dEBX|dECX|dEDX|dESI|dEDI|dEBP|dESP,0, //a_ret
0x10,0,dEAX|dEBX|dECX|dEDX|dESI|dEDI|dEBP|dESP,0, //a_retf
2,2,dEBP|dESP,0, //a_enter
0,2,dEBP|dESP,0, //a_leave
2,2,dEAX|dEBX|dECX|dEDX|dESI|dEDI|dEBP|dESP,0, //a_bound
2,2,d1par,0, //a_arpl
1,2,d1par,0, //a_sldt
1,2,d1par,0, //a_str
1,2,0,0, //a_lldt
1,2,0,0, //a_ltr
1,2,0,0, //a_verr
1,2,0,0, //a_verw
2,2,d1par,0, //a_lar
2,2,d1par,0, //a_lsl
1,2,d1par,0, //a_sgdt
1,2,d1par,0, //a_sidt
1,2,0,0, //a_lgdt
1,2,0,0, //a_lidt
1,2,d1par,0, //a_smsw
1,2,0,0, //a_lmsw
0,2,0,0, //a_clts
0,4,0,0, //a_invd
0,4,0,0, //a_wbinvd
//a_invlpd,
0,5,0,0, //a_wrmsr
0,5,dEAX|dEBX|dECX|dEDX,0, //a_cpuid
0,5,dEAX|dEDX,0, //a_rdmsr
0,5,dEAX|dEDX,0, //a_rdtsc
0,5,0,0, //a_rsm
0,7,dEAX|dEDX,0, //a_rdpmc
0,7,0,0, //a_ud2
/*a_emmx,a_setalc,*/
2,8,0,0, //a_punpcklbw
2,8,0,0, //a_punpcklwd
2,8,0,0, //a_punpckldq
2,8,0,0, //a_packsswb
2,8,0,0, //a_pcmpgtb
2,8,0,0, //a_pcmpgtw
2,8,0,0, //a_pcmpgtd
2,8,0,0, //a_packuswb
2,8,0,0, //a_punpckhbw
2,8,0,0, //a_punpckhwd
2,8,0,0, //a_punpckhdq
2,8,0,0, //a_packssdw
2,6,0,0, //a_psrlw
2,6,0,0, //a_psrld
2,6,0,0, //a_psrlq
2,6,0,0, //a_psraw
2,6,0,0, //a_psrad
2,6,0,0, //a_psllw
2,6,0,0, //a_pslld
2,6,0,0, //a_psllq
2,8,0,0, //a_pcmpeqb
2,8,0,0, //a_pcmpeqw
2,8,0,0, //a_pcmpeqd
2,8,0,0, //a_pmullw
2,6,d1par,0, //a_movd
2,6,d1par,0, //a_movq
2,8,0,0, //a_psubusb
2,8,0,0, //a_psubusw
0,6,0,0, //a_emms
2,8,0,0, //a_pand
2,8,0,0, //a_paddusb
2,8,0,0, //a_paddusw
2,8,0,0, //a_pandn
2,8,0,0, //a_pmulhw
2,8,0,0, //a_psubsb
2,8,0,0, //a_psubsw
2,8,0,0, //a_por
2,8,0,0, //a_paddsb
2,8,0,0, //a_paddsw
2,8,0,0, //a_pxor
2,8,0,0, //a_pmaddwd
2,8,0,0, //a_psubb
2,8,0,0, //a_psubw
2,8,0,0, //a_psubd
2,8,0,0, //a_paddb
2,8,0,0, //a_paddw
2,8,0,0, //a_paddd
0xF1,0,0,m_dup, //a_db
0xF1,0,0,m_dup, //a_dw
0xF1,3,0,m_dup, //a_dd
1,4,0,0, //a_invlpg
0,2,0,0, //a_loadall
0,3,0,0, //a_opsiz
0,2,0,0, //a_f2xm1
0,0,0,0, //a_fabs
0x21,0,0,m_double, //a_fadd
0x20,0,0,0, //a_faddp
1,0,0,m_qword|m_tbyte, //a_fbld
1,0,d1par,m_qword|m_tbyte, //a_fbstp
0,0,0,0, //a_fchs
0,0,0,0, //a_fclex
0x10,0,0,m_double, //a_fcom
0x10,0,0,m_double, //a_fcomp
0,0,0,0, //a_fnclex
0,0,0,0, //a_fcompp
0,3,0,0, //a_fcos
0,0,0,0, //a_fdecstr
+144
View File
@@ -0,0 +1,144 @@
char *Mnemonics[]={
// FIRST OF ALL THE COMMANDS WITH A P-FLAG. THIS"LL MAKE THINGS EASIER FOR
// COMPARISON IN THE PARSE ENGINE
//P1=0-7
"ADD","OR","ADC","SBB/BC","AND","SUB","XOR","CMP",
//P2=4-7
"NOT","NEG","MUL","-","DIV","IDIV",
// IMUL ENTFERNT
//P3=0-5/7
"ROL","ROR","RCL","RCR","SHL/AL","SHR","-","SAR",
//P4=4-7
"BT","BTS","BTR","BTC",
// USUAL COMMANDS
"INC","DEC","TEST", "IMUL","SHLD","SHRD",
"DAA","DAS","AAA","AAS","AAM","AAD",
"MOVZX","MOVSX","CBW","CWDE","CWD","CDQ",
"BSWAP","XLAT/LATB","BSF","BSR",
"CMPXCHG","CMPXCHG8B","XADD",
"NOP","WAIT","LOCK","HLT/ALT","INT",
"INTO","IRET","IRETD",
"POPF","POPFD","PUSHF","PUSHFD","SAHF","LAHF",
"CMC","CLC","STC","CLI","STI","CLD","STD",
"PUSH","PUSHA","PUSHAD","POP","POPA","POPAD",
"XCHG","MOV","LEA",
"LFS","LGS","LSS",
"LES","LDS",
"ADRSIZE",
"IN","OUT","INSB","INSW","INSD","OUTSB","OUTSW","OUTSD",
"MOVSB","MOVSW","MOVSD","CMPSB","CMPSW","CMPSD",
"STOSB","STOSW","STOSD","LODSB","LODSW","LODSD",
"SCASB","SCASW","SCASD","REPNE/EPNZ","REP/EPE/EPZ",
"JCXZ","JECXZ","LOOP/OOPW","LOOPD","LOOPZ/OOPE","LOOPNZ/OOPNE",
"JO","JNO","JC/B/NAE","JNC/AE/NB",
"JE/Z","JNE/NZ","JBE/NA","JA/NBE",
"JS","JNS","JP/PE","JNP/PO","JL/NGE","JGE/NL",
"JLE/NG","JG/NLE",
"SETO","SETNO","SETC/ETB/ETNAE","SETNC/ETAE/ETNB",
"SETE/ETZ","SETNE/ETNZ","SETBE/ETNA","SETA/ETNBE",
"SETS","SETNS","SETP/ETPE","SETNP/ETPO","SETL/ETNGE","SETGE/ETNL",
"SETLE/ETNG","SETG/ETNLE",
/*"JMPS","JMPN","JMPF",*/"JMP",
"CALL",/*"CALLF",*/"RET","RETF",
"ENTER","LEAVE","BOUND","ARPL",
"SLDT","STR","LLDT","LTR","VERR","VERW","LAR","LSL",
"SGDT","SIDT","LGDT","LIDT","SMSW","LMSW","CLTS",
"INVD","WBINVD",//"INVLPD",
//INTEL PENTIUM COMMANDS
"WRMSR","CPUID","RDMSR","RDTSC","RSM",
//INTEL PENTIUM PRO INSTRUCTIONS
"RDPMC","UD2",/*"EMMX","SETALC",*/
//MMX INSTRUCTIONS
"PUNPCKLBW","PUNPCKLWD","PUNPCKLDQ", //UNPACK LOW ORDER 60 -
"PACKSSWB",
"PCMPGTB","PCMPGTW","PCMPGTD",
"PACKUSWB", //PACK MMX REG WITH UNSIGNED SATURATION
"PUNPCKHBW","PUNPCKHWD","PUNPCKHDQ", //UNPACK HIGH ORDER
"PACKSSDW", //PACK MMX REG WITH SIGNED SATURATION - 6B
"PSRLW","PSRLD","PSRLQ",
"PSRAW","PSRAD",
"PSLLW","PSLLD","PSLLQ",
"PCMPEQB","PCMPEQW","PCMPEQD",//74-76
"PMULLW", //d5
"MOVD","MOVQ", //MOVE MMX REG
"PSUBUSB","PSUBUSW",//d8-d9
"EMMS",
+620
View File
@@ -0,0 +1,620 @@
/* 吲栽 帖 嶂平丞兒恥 能恐洵悟 'FASTLIST.EXE' */
short ofsmnem[26]={
0x0000,0x0082, //A B
0x00AF,0x0451, //C D
0x048F,0x049E, //E F
0xFFFF,0x078A, //G H
0x07B7,0x0806, //I J
0xFFFF,0x08AA, //K L
0x096C,0x0B00, //M N
0x0B11,0x0B45, //O P
0xFFFF,0x0DE9, //Q R
0x0E63,0x102C, //S T
0x1034,0x1075, //U V
0x1083,0x109A, //W X
0xFFFF,0xFFFF}; //Y Z
unsigned char asmMnem[]={
0x22,0x00,0x41,0x41,0, // AAA
0x25,0x00,0x41,0x44,0, // AAD
0x24,0x00,0x41,0x4D,0, // AAM
0x23,0x00,0x41,0x53,0, // AAS
0x02,0x00,0x44,0x43,0, // ADC
0x00,0x00,0x44,0x44,0, // ADD
0xA5,0x01,0x44,0x44,0x50,0x44,0, // ADDPD
0x75,0x01,0x44,0x44,0x50,0x53,0, // ADDPS
0xA6,0x01,0x44,0x44,0x53,0x44,0, // ADDSD
0x76,0x01,0x44,0x44,0x53,0x53,0, // ADDSS
0xE7,0x01,0x44,0x44,0x53,0x55,0x42,0x50,0x44,0, // ADDSUBPD
0xE8,0x01,0x44,0x44,0x53,0x55,0x42,0x50,0x53,0, // ADDSUBPS
0x56,0x00,0x44,0x52,0x53,0x49,0x5A,0x45,0, // ADRSIZE
0x04,0x00,0x4E,0x44,0, // AND
0xA8,0x01,0x4E,0x44,0x4E,0x50,0x44,0, // ANDNPD
0x77,0x01,0x4E,0x44,0x4E,0x50,0x53,0, // ANDNPS
0xA7,0x01,0x4E,0x44,0x50,0x44,0, // ANDPD
0x78,0x01,0x4E,0x44,0x50,0x53,0, // ANDPS
0x9D,0x00,0x52,0x50,0x4C,0, // ARPL
0xFF,0xFF, // end char 'A'
0x9C,0x00,0x4F,0x55,0x4E,0x44,0, // BOUND
0x2E,0x00,0x53,0x46,0, // BSF
0x2F,0x00,0x53,0x52,0, // BSR
0x2C,0x00,0x53,0x57,0x41,0x50,0, // BSWAP
0x16,0x00,0x54,0, // BT
0x19,0x00,0x54,0x43,0, // BTC
0x18,0x00,0x54,0x52,0, // BTR
0x17,0x00,0x54,0x53,0, // BTS
0xFF,0xFF, // end char 'B'
0x97,0x00,0x41,0x4C,0x4C,0, // CALL
0x28,0x00,0x42,0x57,0, // CBW
0x2B,0x00,0x44,0x51,0, // CDQ
0x42,0x00,0x4C,0x43,0, // CLC
0x46,0x00,0x4C,0x44,0, // CLD
0xE4,0x01,0x4C,0x46,0x4C,0x55,0x53,0x48,0, // CLFLUSH
0x44,0x00,0x4C,0x49,0, // CLI
0xAC,0x00,0x4C,0x54,0x53,0, // CLTS
0x41,0x00,0x4D,0x43,0, // CMC
0x59,0x01,0x4D,0x4F,0x56,0x41,0, // CMOVA
0x55,0x01,0x4D,0x4F,0x56,0x41,0x45,0, // CMOVAE
0x54,0x01,0x4D,0x4F,0x56,0x42,0, // CMOVB
0x58,0x01,0x4D,0x4F,0x56,0x42,0x45,0, // CMOVBE
0x54,0x01,0x4D,0x4F,0x56,0x43,0, // CMOVC
0x56,0x01,0x4D,0x4F,0x56,0x45,0, // CMOVE
0x61,0x01,0x4D,0x4F,0x56,0x47,0, // CMOVG
0x5F,0x01,0x4D,0x4F,0x56,0x47,0x45,0, // CMOVGE
0x5E,0x01,0x4D,0x4F,0x56,0x4C,0, // CMOVL
0x60,0x01,0x4D,0x4F,0x56,0x4C,0x45,0, // CMOVLE
0x58,0x01,0x4D,0x4F,0x56,0x4E,0x41,0, // CMOVNA
0x54,0x01,0x4D,0x4F,0x56,0x4E,0x41,0x45,0, // CMOVNAE
0x55,0x01,0x4D,0x4F,0x56,0x4E,0x42,0, // CMOVNB
0x59,0x01,0x4D,0x4F,0x56,0x4E,0x42,0x45,0, // CMOVNBE
0x55,0x01,0x4D,0x4F,0x56,0x4E,0x43,0, // CMOVNC
0x57,0x01,0x4D,0x4F,0x56,0x4E,0x45,0, // CMOVNE
0x60,0x01,0x4D,0x4F,0x56,0x4E,0x47,0, // CMOVNG
0x5E,0x01,0x4D,0x4F,0x56,0x4E,0x47,0x45,0, // CMOVNGE
0x5F,0x01,0x4D,0x4F,0x56,0x4E,0x4C,0, // CMOVNL
0x61,0x01,0x4D,0x4F,0x56,0x4E,0x4C,0x45,0, // CMOVNLE
0x53,0x01,0x4D,0x4F,0x56,0x4E,0x4F,0, // CMOVNO
0x5D,0x01,0x4D,0x4F,0x56,0x4E,0x50,0, // CMOVNP
0x5B,0x01,0x4D,0x4F,0x56,0x4E,0x53,0, // CMOVNS
0x57,0x01,0x4D,0x4F,0x56,0x4E,0x5A,0, // CMOVNZ
0x52,0x01,0x4D,0x4F,0x56,0x4F,0, // CMOVO
0x5C,0x01,0x4D,0x4F,0x56,0x50,0, // CMOVP
0x5C,0x01,0x4D,0x4F,0x56,0x50,0x45,0, // CMOVPE
0x5D,0x01,0x4D,0x4F,0x56,0x50,0x4F,0, // CMOVPO
0x5A,0x01,0x4D,0x4F,0x56,0x53,0, // CMOVS
0x56,0x01,0x4D,0x4F,0x56,0x5A,0, // CMOVZ
0x07,0x00,0x4D,0x50,0, // CMP
0xF1,0x01,0x4D,0x50,0x45,0x51,0x50,0x44,0, // CMPEQPD
0xF9,0x01,0x4D,0x50,0x45,0x51,0x50,0x53,0, // CMPEQPS
0xE9,0x01,0x4D,0x50,0x45,0x51,0x53,0x44,0, // CMPEQSD
0x01,0x02,0x4D,0x50,0x45,0x51,0x53,0x53,0, // CMPEQSS
0xF3,0x01,0x4D,0x50,0x4C,0x45,0x50,0x44,0, // CMPLEPD
0xFB,0x01,0x4D,0x50,0x4C,0x45,0x50,0x53,0, // CMPLEPS
0xEB,0x01,0x4D,0x50,0x4C,0x45,0x53,0x44,0, // CMPLESD
0x03,0x02,0x4D,0x50,0x4C,0x45,0x53,0x53,0, // CMPLESS
0xF2,0x01,0x4D,0x50,0x4C,0x54,0x50,0x44,0, // CMPLTPD
0xFA,0x01,0x4D,0x50,0x4C,0x54,0x50,0x53,0, // CMPLTPS
0xEA,0x01,0x4D,0x50,0x4C,0x54,0x53,0x44,0, // CMPLTSD
0x02,0x02,0x4D,0x50,0x4C,0x54,0x53,0x53,0, // CMPLTSS
0xF5,0x01,0x4D,0x50,0x4E,0x45,0x51,0x50,0x44,0, // CMPNEQPD
0xFD,0x01,0x4D,0x50,0x4E,0x45,0x51,0x50,0x53,0, // CMPNEQPS
0xED,0x01,0x4D,0x50,0x4E,0x45,0x51,0x53,0x44,0, // CMPNEQSD
0x05,0x02,0x4D,0x50,0x4E,0x45,0x51,0x53,0x53,0, // CMPNEQSS
0xF7,0x01,0x4D,0x50,0x4E,0x4C,0x45,0x50,0x44,0, // CMPNLEPD
0xFF,0x01,0x4D,0x50,0x4E,0x4C,0x45,0x50,0x53,0, // CMPNLEPS
0xEF,0x01,0x4D,0x50,0x4E,0x4C,0x45,0x53,0x44,0, // CMPNLESD
0x07,0x02,0x4D,0x50,0x4E,0x4C,0x45,0x53,0x53,0, // CMPNLESS
0xF6,0x01,0x4D,0x50,0x4E,0x4C,0x54,0x50,0x44,0, // CMPNLTPD
0xFE,0x01,0x4D,0x50,0x4E,0x4C,0x54,0x50,0x53,0, // CMPNLTPS
0xEE,0x01,0x4D,0x50,0x4E,0x4C,0x54,0x53,0x44,0, // CMPNLTSD
0x06,0x02,0x4D,0x50,0x4E,0x4C,0x54,0x53,0x53,0, // CMPNLTSS
0xF8,0x01,0x4D,0x50,0x4F,0x52,0x44,0x50,0x44,0, // CMPORDPD
0x00,0x02,0x4D,0x50,0x4F,0x52,0x44,0x50,0x53,0, // CMPORDPS
0xF0,0x01,0x4D,0x50,0x4F,0x52,0x44,0x53,0x44,0, // CMPORDSD
0x08,0x02,0x4D,0x50,0x4F,0x52,0x44,0x53,0x53,0, // CMPORDSS
0xA9,0x01,0x4D,0x50,0x50,0x44,0, // CMPPD
0x79,0x01,0x4D,0x50,0x50,0x53,0, // CMPPS
0x62,0x00,0x4D,0x50,0x53,0x42,0, // CMPSB
0x64,0x00,0x4D,0x50,0x53,0x44,0, // CMPSD
0x7A,0x01,0x4D,0x50,0x53,0x53,0, // CMPSS
0x63,0x00,0x4D,0x50,0x53,0x57,0, // CMPSW
0xF4,0x01,0x4D,0x50,0x55,0x4E,0x4F,0x52,0x44,0x50,0x44,0, // CMPUNORDPD
0xFC,0x01,0x4D,0x50,0x55,0x4E,0x4F,0x52,0x44,0x50,0x53,0, // CMPUNORDPS
0xEC,0x01,0x4D,0x50,0x55,0x4E,0x4F,0x52,0x44,0x53,0x44,0, // CMPUNORDSD
0x04,0x02,0x4D,0x50,0x55,0x4E,0x4F,0x52,0x44,0x53,0x53,0, // CMPUNORDSS
0x30,0x00,0x4D,0x50,0x58,0x43,0x48,0x47,0, // CMPXCHG
0x31,0x00,0x4D,0x50,0x58,0x43,0x48,0x47,0x38,0x42,0, // CMPXCHG8B
0xAA,0x01,0x4F,0x4D,0x49,0x53,0x44,0, // COMISD
0x7B,0x01,0x4F,0x4D,0x49,0x53,0x53,0, // COMISS
0xB0,0x00,0x50,0x55,0x49,0x44,0, // CPUID
0xAB,0x01,0x56,0x54,0x44,0x51,0x32,0x50,0x44,0, // CVTDQ2PD
0xAC,0x01,0x56,0x54,0x44,0x51,0x32,0x50,0x53,0, // CVTDQ2PS
0xAD,0x01,0x56,0x54,0x50,0x44,0x32,0x44,0x51,0, // CVTPD2DQ
0xAE,0x01,0x56,0x54,0x50,0x44,0x32,0x50,0x49,0, // CVTPD2PI
0xAF,0x01,0x56,0x54,0x50,0x44,0x32,0x50,0x53,0, // CVTPD2PS
0xB0,0x01,0x56,0x54,0x50,0x49,0x32,0x50,0x44,0, // CVTPI2PD
0x7C,0x01,0x56,0x54,0x50,0x49,0x32,0x50,0x53,0, // CVTPI2PS
0xB1,0x01,0x56,0x54,0x50,0x53,0x32,0x44,0x51,0, // CVTPS2DQ
0xB2,0x01,0x56,0x54,0x50,0x53,0x32,0x50,0x44,0, // CVTPS2PD
0x7D,0x01,0x56,0x54,0x50,0x53,0x32,0x50,0x49,0, // CVTPS2PI
0xB3,0x01,0x56,0x54,0x53,0x44,0x32,0x53,0x49,0, // CVTSD2SI
0xB4,0x01,0x56,0x54,0x53,0x44,0x32,0x53,0x53,0, // CVTSD2SS
0xB5,0x01,0x56,0x54,0x53,0x49,0x32,0x53,0x44,0, // CVTSI2SD
0x7E,0x01,0x56,0x54,0x53,0x49,0x32,0x53,0x53,0, // CVTSI2SS
0xB6,0x01,0x56,0x54,0x53,0x53,0x32,0x53,0x44,0, // CVTSS2SD
0x7F,0x01,0x56,0x54,0x53,0x53,0x32,0x53,0x49,0, // CVTSS2SI
0xB8,0x01,0x56,0x54,0x54,0x50,0x44,0x32,0x44,0x51,0, // CVTTPD2DQ
0xB7,0x01,0x56,0x54,0x54,0x50,0x44,0x32,0x50,0x49,0, // CVTTPD2PI
0xB9,0x01,0x56,0x54,0x54,0x50,0x53,0x32,0x44,0x51,0, // CVTTPS2DQ
0x80,0x01,0x56,0x54,0x54,0x50,0x53,0x32,0x50,0x49,0, // CVTTPS2PI
0xBA,0x01,0x56,0x54,0x54,0x53,0x44,0x32,0x53,0x49,0, // CVTTSD2SI
0x81,0x01,0x56,0x54,0x54,0x53,0x53,0x32,0x53,0x49,0, // CVTTSS2SI
0x2A,0x00,0x57,0x44,0, // CWD
0x29,0x00,0x57,0x44,0x45,0, // CWDE
0xFF,0xFF, // end char 'C'
0x20,0x00,0x41,0x41,0, // DAA
0x21,0x00,0x41,0x53,0, // DAS
0xE5,0x00,0x42,0, // DB
0xE7,0x00,0x44,0, // DD
0x1B,0x00,0x45,0x43,0, // DEC
0x0C,0x00,0x49,0x56,0, // DIV
0xBB,0x01,0x49,0x56,0x50,0x44,0, // DIVPD
0x82,0x01,0x49,0x56,0x50,0x53,0, // DIVPS
0xBC,0x01,0x49,0x56,0x53,0x44,0, // DIVSD
0x83,0x01,0x49,0x56,0x53,0x53,0, // DIVSS
0xE6,0x00,0x57,0, // DW
0xFF,0xFF, // end char 'D'
0xD2,0x00,0x4D,0x4D,0x53,0, // EMMS
0x9A,0x00,0x4E,0x54,0x45,0x52,0, // ENTER
0xFF,0xFF, // end char 'E'
0xEB,0x00,0x32,0x58,0x4D,0x31,0, // F2XM1
0xEC,0x00,0x41,0x42,0x53,0, // FABS
0xED,0x00,0x41,0x44,0x44,0, // FADD
0xEE,0x00,0x41,0x44,0x44,0x50,0, // FADDP
0xEF,0x00,0x42,0x4C,0x44,0, // FBLD
0xF0,0x00,0x42,0x53,0x54,0x50,0, // FBSTP
0xF1,0x00,0x43,0x48,0x53,0, // FCHS
0xF2,0x00,0x43,0x4C,0x45,0x58,0, // FCLEX
0x41,0x01,0x43,0x4D,0x4F,0x56,0x42,0, // FCMOVB
0x43,0x01,0x43,0x4D,0x4F,0x56,0x42,0x45,0, // FCMOVBE
0x42,0x01,0x43,0x4D,0x4F,0x56,0x45,0, // FCMOVE
0x45,0x01,0x43,0x4D,0x4F,0x56,0x4E,0x42,0, // FCMOVNB
0x47,0x01,0x43,0x4D,0x4F,0x56,0x4E,0x42,0x45,0, // FCMOVNBE
0x46,0x01,0x43,0x4D,0x4F,0x56,0x4E,0x45,0, // FCMOVNE
0x48,0x01,0x43,0x4D,0x4F,0x56,0x4E,0x55,0, // FCMOVNU
0x44,0x01,0x43,0x4D,0x4F,0x56,0x55,0, // FCMOVU
0xF3,0x00,0x43,0x4F,0x4D,0, // FCOM
0x49,0x01,0x43,0x4F,0x4D,0x49,0, // FCOMI
0x4A,0x01,0x43,0x4F,0x4D,0x49,0x50,0, // FCOMIP
0xF4,0x00,0x43,0x4F,0x4D,0x50,0, // FCOMP
0xF6,0x00,0x43,0x4F,0x4D,0x50,0x50,0, // FCOMPP
0xF7,0x00,0x43,0x4F,0x53,0, // FCOS
0xF8,0x00,0x44,0x45,0x43,0x53,0x54,0x50,0, // FDECSTP
0xF9,0x00,0x44,0x49,0x53,0x49,0, // FDISI
0xFA,0x00,0x44,0x49,0x56,0, // FDIV
0xFB,0x00,0x44,0x49,0x56,0x50,0, // FDIVP
0xFC,0x00,0x44,0x49,0x56,0x52,0, // FDIVR
0xFD,0x00,0x44,0x49,0x56,0x52,0x50,0, // FDIVRP
0x0B,0x01,0x45,0x4E,0x49,0, // FENI
0xFE,0x00,0x46,0x52,0x45,0x45,0, // FFREE
0xFF,0x00,0x49,0x41,0x44,0x44,0, // FIADD
0x00,0x01,0x49,0x43,0x4F,0x4D,0, // FICOM
0x01,0x01,0x49,0x43,0x4F,0x4D,0x50,0, // FICOMP
0x02,0x01,0x49,0x44,0x49,0x56,0, // FIDIV
0x03,0x01,0x49,0x44,0x49,0x56,0x52,0, // FIDIVR
0x04,0x01,0x49,0x4C,0x44,0, // FILD
0x05,0x01,0x49,0x4C,0x44,0x51,0, // FILDQ
0x06,0x01,0x49,0x4D,0x55,0x4C,0, // FIMUL
0x0C,0x01,0x49,0x4E,0x43,0x53,0x54,0x50,0, // FINCSTP
0x0D,0x01,0x49,0x4E,0x49,0x54,0, // FINIT
0x07,0x01,0x49,0x53,0x54,0, // FIST
0x08,0x01,0x49,0x53,0x54,0x50,0, // FISTP
0x09,0x01,0x49,0x53,0x55,0x42,0, // FISUB
0x0A,0x01,0x49,0x53,0x55,0x42,0x52,0, // FISUBR
0x0F,0x01,0x4C,0x44,0, // FLD
0x18,0x01,0x4C,0x44,0x31,0, // FLD1
0x10,0x01,0x4C,0x44,0x43,0x57,0, // FLDCW
0x11,0x01,0x4C,0x44,0x45,0x4E,0x56,0, // FLDENV
0x14,0x01,0x4C,0x44,0x4C,0x32,0x45,0, // FLDL2E
0x15,0x01,0x4C,0x44,0x4C,0x32,0x54,0, // FLDL2T
0x12,0x01,0x4C,0x44,0x4C,0x47,0x32,0, // FLDLG2
0x13,0x01,0x4C,0x44,0x4C,0x4E,0x32,0, // FLDLN2
0x16,0x01,0x4C,0x44,0x50,0x49,0, // FLDPI
0x17,0x01,0x4C,0x44,0x5A,0, // FLDZ
0x19,0x01,0x4D,0x55,0x4C,0, // FMUL
0x1A,0x01,0x4D,0x55,0x4C,0x50,0, // FMULP
0xF5,0x00,0x4E,0x43,0x4C,0x45,0x58,0, // FNCLEX
0x4F,0x01,0x4E,0x44,0x49,0x53,0x49,0, // FNDISI
0x50,0x01,0x4E,0x45,0x4E,0x49,0, // FNENI
0x0E,0x01,0x4E,0x49,0x4E,0x49,0x54,0, // FNINIT
0x1B,0x01,0x4E,0x4F,0x50,0, // FNOP
0x24,0x01,0x4E,0x53,0x41,0x56,0x45,0, // FNSAVE
0x51,0x01,0x4E,0x53,0x45,0x54,0x50,0x4D,0, // FNSETPM
0x2B,0x01,0x4E,0x53,0x54,0x43,0x57,0, // FNSTCW
0x30,0x01,0x4E,0x53,0x54,0x45,0x4E,0x56,0, // FNSTENV
0x2E,0x01,0x4E,0x53,0x54,0x53,0x57,0, // FNSTSW
0x1C,0x01,0x50,0x41,0x54,0x41,0x4E,0, // FPATAN
0x1D,0x01,0x50,0x52,0x45,0x4D,0, // FPREM
0x1E,0x01,0x50,0x52,0x45,0x4D,0x31,0, // FPREM1
0x1F,0x01,0x50,0x54,0x41,0x4E,0, // FPTAN
0x20,0x01,0x52,0x4E,0x44,0x49,0x4E,0x54,0, // FRNDINT
0x22,0x01,0x52,0x53,0x54,0x4F,0x52,0, // FRSTOR
0x23,0x01,0x53,0x41,0x56,0x45,0, // FSAVE
0x25,0x01,0x53,0x43,0x41,0x4C,0x45,0, // FSCALE
0x21,0x01,0x53,0x45,0x54,0x50,0x4D,0, // FSETPM
0x26,0x01,0x53,0x49,0x4E,0, // FSIN
0x27,0x01,0x53,0x49,0x4E,0x43,0x4F,0x53,0, // FSINCOS
0x28,0x01,0x53,0x51,0x52,0x54,0, // FSQRT
0x29,0x01,0x53,0x54,0, // FST
0x2A,0x01,0x53,0x54,0x43,0x57,0, // FSTCW
0x2F,0x01,0x53,0x54,0x45,0x4E,0x56,0, // FSTENV
0x2C,0x01,0x53,0x54,0x50,0, // FSTP
0x2D,0x01,0x53,0x54,0x53,0x57,0, // FSTSW
0x31,0x01,0x53,0x55,0x42,0, // FSUB
0x32,0x01,0x53,0x55,0x42,0x50,0, // FSUBP
0x33,0x01,0x53,0x55,0x42,0x52,0, // FSUBR
0x34,0x01,0x53,0x55,0x42,0x52,0x50,0, // FSUBRP
0x35,0x01,0x54,0x53,0x54,0, // FTST
0x36,0x01,0x55,0x43,0x4F,0x4D,0, // FUCOM
0x4B,0x01,0x55,0x43,0x4F,0x4D,0x49,0, // FUCOMI
0x4C,0x01,0x55,0x43,0x4F,0x4D,0x49,0x50,0, // FUCOMIP
0x37,0x01,0x55,0x43,0x4F,0x4D,0x50,0, // FUCOMP
0x38,0x01,0x55,0x43,0x4F,0x4D,0x50,0x50,0, // FUCOMPP
0x3A,0x01,0x57,0x41,0x49,0x54,0, // FWAIT
0x3B,0x01,0x58,0x41,0x4D,0, // FXAM
0x39,0x01,0x58,0x43,0x48,0, // FXCH
0x4D,0x01,0x58,0x52,0x53,0x54,0x4F,0x52,0, // FXRSTOR
0x4E,0x01,0x58,0x53,0x41,0x56,0x45,0, // FXSAVE
0x3C,0x01,0x58,0x54,0x52,0x41,0x43,0x54,0, // FXTRACT
0x3D,0x01,0x59,0x4C,0x32,0x58,0, // FYL2X
0x3E,0x01,0x59,0x4C,0x32,0x58,0x50,0x31,0, // FYL2XP1
0xFF,0xFF, // end char 'F'
0x09,0x02,0x41,0x44,0x44,0x50,0x44,0, // HADDPD
0x0A,0x02,0x41,0x44,0x44,0x50,0x53,0, // HADDPS
0x36,0x00,0x41,0x4C,0x54,0, // HALT
0x36,0x00,0x4C,0x54,0, // HLT
0x0B,0x02,0x53,0x55,0x42,0x50,0x44,0, // HSUBPD
0x0C,0x02,0x53,0x55,0x42,0x50,0x53,0, // HSUBPS
0xFF,0xFF, // end char 'H'
0x0D,0x00,0x44,0x49,0x56,0, // IDIV
0x1D,0x00,0x4D,0x55,0x4C,0, // IMUL
0x57,0x00,0x4E,0, // IN
0x1A,0x00,0x4E,0x43,0, // INC
0x59,0x00,0x4E,0x53,0x42,0, // INSB
0x5B,0x00,0x4E,0x53,0x44,0, // INSD
0x5A,0x00,0x4E,0x53,0x57,0, // INSW
0x37,0x00,0x4E,0x54,0, // INT
0x38,0x00,0x4E,0x54,0x4F,0, // INTO
0xAD,0x00,0x4E,0x56,0x44,0, // INVD
0xE8,0x00,0x4E,0x56,0x4C,0x50,0x47,0, // INVLPG
0x39,0x00,0x52,0x45,0x54,0, // IRET
0x3A,0x00,0x52,0x45,0x54,0x44,0, // IRETD
0xFF,0xFF, // end char 'I'
0x7D,0x00,0x41,0, // JA
0x79,0x00,0x41,0x45,0, // JAE
0x78,0x00,0x42,0, // JB
0x7C,0x00,0x42,0x45,0, // JBE
0x78,0x00,0x43,0, // JC
0x70,0x00,0x43,0x58,0x5A,0, // JCXZ
0x7A,0x00,0x45,0, // JE
0x71,0x00,0x45,0x43,0x58,0x5A,0, // JECXZ
0x85,0x00,0x47,0, // JG
0x83,0x00,0x47,0x45,0, // JGE
0x82,0x00,0x4C,0, // JL
0x84,0x00,0x4C,0x45,0, // JLE
0x96,0x00,0x4D,0x50,0, // JMP
0x7C,0x00,0x4E,0x41,0, // JNA
0x78,0x00,0x4E,0x41,0x45,0, // JNAE
0x79,0x00,0x4E,0x42,0, // JNB
0x7D,0x00,0x4E,0x42,0x45,0, // JNBE
+14
View File
@@ -0,0 +1,14 @@
; В этом файле можно изменить настройки компилятора по умолчанию.
J0 ; не делать начальный jump на main()
8 ; оптимизация для Pentium II процессора.
r- ; запретить изменение доступной памяти в *.com файлах
X ; запретить включение в выходной файл надписи SPHINXC--
oc ; опримизация по размеру кода
w ; выдавать предупреждения
+88
View File
@@ -0,0 +1,88 @@
#define _CLASS_
#include "tok.h"
structteg *searchteg=NULL;
int destructor=FALSE;
void notclassname(char *name)
{
char buf[90];
sprintf(buf,"'%s' not class name",name);
preerror(buf);
nexttok(); //¯à®¯ã᪠::
nexttok();
}
void notclassproc(char *classname, char* procname)
{
char buf[160];
sprintf(buf,"'%s' not member class '%s'",procname,classname);
preerror(buf);
}
void AddThis()
{
int lsize=(am32==TRUE?4:2);
localrec *lrec=addlocalvar("this",(am32==TRUE?tk_dwordvar:tk_wordvar),paramsize);
lrec->rec.recsize=lsize;
lrec->rec.type=tp_paramvar;
lrec->fuse=USEDVAR;
paramsize+=lsize;
}
void doclassproc(unsigned int tproc)
{
int type=itok.rm; //⨯ ¢®§¢à â 
unsigned int flag=itok.flag;
unsigned int npointr=itok.npointr;
char classname[IDLENGTH];
if((searchteg=FindTeg(TRUE,itok.name))!=NULL){
strcpy(classname,itok.name);
nexttok(); //¯à®¯ã᪠::
if(tok2==tk_tilda){
nexttok();
+106
View File
@@ -0,0 +1,106 @@
//
// Section characteristics.
//
// IMAGE_SCN_TYPE_REG 0x00000000 // Reserved.
// IMAGE_SCN_TYPE_DSECT 0x00000001 // Reserved.
// IMAGE_SCN_TYPE_NOLOAD 0x00000002 // Reserved.
// IMAGE_SCN_TYPE_GROUP 0x00000004 // Reserved.
#define IMAGE_SCN_TYPE_NO_PAD 0x00000008 // Reserved.
// IMAGE_SCN_TYPE_COPY 0x00000010 // Reserved.
#define IMAGE_SCN_CNT_CODE 0x00000020 // Section contains code.
#define IMAGE_SCN_CNT_INITIALIZED_DATA 0x00000040 // Section contains initialized data.
#define IMAGE_SCN_CNT_UNINITIALIZED_DATA 0x00000080 // Section contains uninitialized data.
#define IMAGE_SCN_LNK_OTHER 0x00000100 // Reserved.
#define IMAGE_SCN_LNK_INFO 0x00000200 // Section contains comments or some other type of information.
// IMAGE_SCN_TYPE_OVER 0x00000400 // Reserved.
#define IMAGE_SCN_LNK_REMOVE 0x00000800 // Section contents will not become part of image.
#define IMAGE_SCN_LNK_COMDAT 0x00001000 // Section contents comdat.
// 0x00002000 // Reserved.
// IMAGE_SCN_MEM_PROTECTED - Obsolete 0x00004000
#define IMAGE_SCN_NO_DEFER_SPEC_EXC 0x00004000 // Reset speculative exceptions handling bits in the TLB entries for this section.
#define IMAGE_SCN_GPREL 0x00008000 // Section content can be accessed relative to GP
#define IMAGE_SCN_MEM_FARDATA 0x00008000
// IMAGE_SCN_MEM_SYSHEAP - Obsolete 0x00010000
#define IMAGE_SCN_MEM_PURGEABLE 0x00020000
#define IMAGE_SCN_MEM_16BIT 0x00020000
#define IMAGE_SCN_MEM_LOCKED 0x00040000
#define IMAGE_SCN_MEM_PRELOAD 0x00080000
#define IMAGE_SCN_ALIGN_1BYTES 0x00100000 //
#define IMAGE_SCN_ALIGN_2BYTES 0x00200000 //
#define IMAGE_SCN_ALIGN_4BYTES 0x00300000 //
#define IMAGE_SCN_ALIGN_8BYTES 0x00400000 //
#define IMAGE_SCN_ALIGN_16BYTES 0x00500000 // Default alignment if no others are specified.
#define IMAGE_SCN_ALIGN_32BYTES 0x00600000 //
#define IMAGE_SCN_ALIGN_64BYTES 0x00700000 //
#define IMAGE_SCN_ALIGN_128BYTES 0x00800000 //
#define IMAGE_SCN_ALIGN_256BYTES 0x00900000 //
#define IMAGE_SCN_ALIGN_512BYTES 0x00A00000 //
#define IMAGE_SCN_ALIGN_1024BYTES 0x00B00000 //
#define IMAGE_SCN_ALIGN_2048BYTES 0x00C00000 //
#define IMAGE_SCN_ALIGN_4096BYTES 0x00D00000 //
#define IMAGE_SCN_ALIGN_8192BYTES 0x00E00000 //
// Unused 0x00F00000
#define IMAGE_SCN_ALIGN_MASK 0x00F00000
#define IMAGE_SCN_LNK_NRELOC_OVFL 0x01000000 // Section contains extended relocations.
#define IMAGE_SCN_MEM_DISCARDABLE 0x02000000 // Section can be discarded.
#define IMAGE_SCN_MEM_NOT_CACHED 0x04000000 // Section is not cachable.
#define IMAGE_SCN_MEM_NOT_PAGED 0x08000000 // Section is not pageable.
#define IMAGE_SCN_MEM_SHARED 0x10000000 // Section is shareable.
#define IMAGE_SCN_MEM_EXECUTE 0x20000000 // Section is executable.
+513
View File
@@ -0,0 +1,513 @@
#define FALSE 0
#define TRUE 1
#define LOCAL -1
#define DYNAMIC_POST 2
#define DYNAMIC_VAR 3
#define USED_DIN_VAR 4
#define r_undef 0
#define r8 1
#define r16 2
#define r32 4
#define r64 8
#define r128 16
#define CODE16 0x100
#define CODE32 0x200
#define THIS_PARAM 0x300
#define THIS_REG 0x400
#define THIS_NEW 0x500
#define THIS_ZEROSIZE 0x600
enum{
dm_other,
dm_none,
dm_def0,
dm_def,
dm_if,
};
enum{
STDLEX,
RESLEX,
DEFLEX,
DEFLEX2,
ASMLEX,
};
enum{
zero_term,
dos_term,
no_term,
s_unicod=4
};
enum{
NOTINITVAR,
INITVAR,
USEDVAR,
INITUSEVAR
};
enum{
tp_ucnovn,
tp_declare,
tp_localvar,
tp_paramvar,
tp_postvar,
tp_gvar,
tp_label,
tp_stopper,
tp_opperand,
tp_compare,
tp_modif,
tp_ofs,
tp_classvar,
};
enum{
stdcompr,
voidcompr=4,
zerocompr=8,
ecxzcompr=0xc,
cxzcompr=0x10,
ecxnzcompr=0x14,
cxnzcompr=0x18
};
enum{
tk_eof, tk_number, tk_string, tk_id, tk_ID,
tk_assign, tk_swap, tk_minus, tk_plus, tk_minusminus,
tk_plusplus, tk_mult, tk_div, tk_mod, tk_multminus,
tk_divminus, tk_modminus, tk_rr, tk_ll, tk_rrminus,
tk_llminus, tk_minusequals, tk_plusequals, tk_rrequals, tk_llequals,
tk_or, tk_and, tk_xor, tk_not, tk_orminus,
tk_andminus, tk_xorminus, tk_orequals, tk_andequals, tk_xorequals,
tk_equalto, tk_notequal, tk_greater, tk_greaterequal,tk_less,
//40
tk_lessequal, tk_oror, tk_andand, tk_openbrace, tk_closebrace,
tk_openbracket, tk_closebracket,tk_openblock, tk_closeblock, tk_colon,
tk_semicolon, tk_camma, tk_period, tk_at, tk_numsign,
tk_dollar, tk_question, tk_tilda,
tk_void, tk_char,
//60
tk_byte, tk_int, tk_word, tk_long, tk_dword,
tk_float, tk_qword, tk_double,
tk_if, tk_IF,
tk_else, tk_ELSE, tk_loop, tk_do, tk_while,
tk_return, tk_from, tk_extract, tk_interrupt, tk_far,
//80
tk_enum, tk_seg, tk_debugreg, tk_controlreg, tk_testreg,
tk_undefproc, tk_proc, tk_interruptproc,
tk_bits, tk_charvar,
//90
tk_bytevar, tk_intvar, tk_wordvar, tk_longvar, tk_dwordvar,
tk_floatvar, tk_qwordvar, tk_doublevar, tk_reg, tk_beg,
//100
tk_reg32, tk_rmnumber, tk_postnumber, tk_locallabel, tk_overflowflag,
tk_notoverflowflag,tk_carryflag,tk_notcarryflag,tk_zeroflag, tk_notzeroflag,
//110
tk_comment1, tk_comment2, tk_minusflag, tk_plusflag, tk_RETURN,
tk_dataptr, tk_codeptr, tk_postptr, tk_stackstart, tk_inline,
//120
tk_GOTO, tk_goto, tk_BREAK, tk_break, tk_CONTINUE,
tk_continue, tk_WHILE, tk_FOR, tk_for, tk_asm,
//130
tk_switch, tk_case, tk_default, tk_mmxreg, tk_fpust,
tk_multequals, tk_divequals, tk_struct, tk_structvar, tk_sizeof,
//140
tk_undefofs, tk_pointer, tk_localpointer,tk_parampointer,tk_apiproc,
tk_extern, tk_declare, tk_pascal, tk_cdecl, tk_stdcall,
//150
tk_fastcall, tk_union, tk_export, tk_multipoint, tk_LOOPNZ,
tk_loopnz, tk_idasm, tk_short, tk_unsigned, tk_signed,
//160
tk_file, tk_line, tk_SWITCH, tk_CASE, tk_xmmreg,
tk_dblcolon, tk_static, tk_baseclass, tk_rescommand, tk_endline,
//170
tk_singlquote, tk_new, tk_delete, tk_macro, tk_reg64,
tk_newline, tk_apioffset, tokens
};
// 16-bit word regs
#define AX 0
#define CX 1
#define DX 2
#define BX 3
#define SP 4
#define BP 5
#define SI 6
#define DI 7
// 8-bit byte regs
#define AL 0
#define CL 1
#define DL 2
#define BL 3
#define AH 4
#define CH 5
#define DH 6
#define BH 7
// 386+ 32-bit regs
#define EAX 0
#define ECX 1
#define EDX 2
#define EBX 3
#define ESP 4
#define EBP 5
#define ESI 6
#define EDI 7
//ª®­à®«ì à §àã襭¨ï ॣ¨áâ஢
#define dEAX 1
#define dECX 2
#define dEDX 4
#define dEBX 8
#define dESP 16
#define dEBP 32
#define dESI 64
#define dEDI 128
#define ES 0
#define CS 1
#define SS 2
#define DS 3
#define FS 4
#define GS 5
#define VARPOST 9
#define USEDSTR 10
// 386+ control regs
#define CR0 0
#define CR1 1
#define CR2 2
#define CR3 3
#define CR4 4
#define CR5 5
#define CR6 6
#define CR7 7
// 386+ test regs
#define TR0 0
#define TR1 1
#define TR2 2
#define TR3 3
#define TR4 4
#define TR5 5
#define TR6 6
#define TR7 7
// 386+ debug regs
#define DR0 0
#define DR1 1
#define DR2 2
#define DR3 3
#define DR4 4
#define DR5 5
#define DR6 6
#define DR7 7
//¯¥à¥¬¥­­ ï, 㪠§ â¥«ì, ¤ «ì­¨© 㪠§ â¥«ì,ᥣ¬¥­â­ë© 㪠§ â¥«ì.
#define variable 0
#define pointer 1
//#define farpointer 2
// define exit codes
#define e_ok 0
#define e_outofmemory 1
#define e_cannotopeninput 2
#define e_toomanyerrors 3
#define e_internalerror 4
#define e_noinputspecified 5
#define e_unknowncommandline 6
#define e_entrynotfound 7
#define e_outputtoobig 8
#define e_notcreateoutput 9
#define e_preprocess 10
#define e_someerrors 13
#define e_badinputfilename 14
#define e_symbioerror 15
#define e_manyinclude 16
#define rm_mod00 0
#define rm_mod01 64
#define rm_mod10 128
#define rm_mod11 192
#define rm_d16 6
#define rm_BXSI 0
#define rm_BXDI 1
#define rm_BPSI 2
#define rm_BPDI 3
#define rm_SI 4
#define rm_DI 5
#define rm_BP 6
#define rm_BX 7
#define rm_sib 4
#define rm_d32 5
#define rm_EBP 5
// posttype values for call or jump types or post variables
enum{
CALL_NONE, //0
CALL_SHORT, // 1
BREAK_SHORT, // 2
CONTINUE_SHORT, // 3
CALL_NEAR, // 4
//CALL_NEARD,
File diff suppressed because it is too large Load Diff
+94
View File
@@ -0,0 +1,94 @@
/* 吲栽 帖 嶂平丞兒恥 能恐洵悟 'FASTLIST.EXE' */
short ofsdir[27]={
0x0000,0x000F, //D a
0xFFFF,0x0045, //b c
0x0072,0x0090, //d e
0x00A5,0xFFFF, //f g
0xFFFF,0x00C0, //h i
0x010A,0xFFFF, //j k
0xFFFF,0x0118, //l m
0xFFFF,0xFFFF, //n o
0x0132,0xFFFF, //p q
0x015F,0x0184, //r s
0xFFFF,0x01F6, //t u
0xFFFF,0x0263, //v w
0xFFFF,0xFFFF, //x y
0xFFFF}; //z
unsigned char dirlist[]={
0x19,0x00,0x4F,0x53,0x72,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0, // DOSrequired
0xFF,0xFF, // end char 'D'
0x14,0x00,0x6C,0x69,0x67,0x6E,0, // align
0x32,0x00,0x6C,0x69,0x67,0x6E,0x63,0x6F,0x64,0x65,0, // aligncode
0x15,0x00,0x6C,0x69,0x67,0x6E,0x65,0x72,0, // aligner
0x16,0x00,0x6C,0x69,0x67,0x6E,0x77,0x6F,0x72,0x64,0, // alignword
0x03,0x00,0x72,0x67,0x63,0, // argc
0x0B,0x00,0x74,0x65,0x78,0x69,0x74,0, // atexit
0xFF,0xFF, // end char 'a'
0x30,0x00,0x6F,0x64,0x65,0x33,0x32,0, // code32
0x17,0x00,0x6F,0x64,0x65,0x73,0x69,0x7A,0x65,0, // codesize
0x35,0x00,0x6F,0x6D,0x70,0x69,0x6C,0x65,0x72,0x76,0x65,0x72,0x73,0x69,0x6F,0x6E,0, // compilerversion
0x00,0x00,0x74,0x72,0x6C,0x5F,0x63,0, // ctrl_c
0xFF,0xFF, // end char 'c'
0x0C,0x00,0x61,0x74,0x61,0x73,0x65,0x67,0, // dataseg
0x18,0x00,0x65,0x66,0x69,0x6E,0x65,0, // define
0x34,0x00,0x6F,0x73,0x73,0x74,0x72,0x69,0x6E,0x67,0, // dosstring
0xFF,0xFF, // end char 'd'
0x3B,0x00,0x6C,0x69,0x66,0, // elif
0x36,0x00,0x6C,0x73,0x65,0, // else
0x1A,0x00,0x6E,0x64,0x69,0x66,0, // endif
0xFF,0xFF, // end char 'e'
0x10,0x00,0x61,0x73,0x74,0x63,0x61,0x6C,0x6C,0x61,0x70,0x69,0, // fastcallapi
0x33,0x00,0x69,0x78,0x75,0x70,0x74,0x61,0x62,0x6C,0x65,0, // fixuptable
0xFF,0xFF, // end char 'f'
0x3A,0x00,0x66,0, // if
0x1B,0x00,0x66,0x64,0x65,0x66,0, // ifdef
0x1C,0x00,0x66,0x6E,0x64,0x65,0x66,0, // ifndef
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+136
View File
@@ -0,0 +1,136 @@
/* 吲栽 帖 嶂平丞兒恥 能恐洵悟 'FASTLIST.EXE' */
short idofs[53]={
0xFFFF,0x0000, //A B
0x0009,0xFFFF, //C D
0x0026,0x0037, //E F
0x0044,0xFFFF, //G H
0x004C,0xFFFF, //I J
0xFFFF,0x0052, //K L
0x005C,0x0069, //M N
0x0093,0x009F, //O P
0xFFFF,0x00AB, //Q R
0x00B5,0xFFFF, //S T
0xFFFF,0xFFFF, //U V
0x00BF,0xFFFF, //W X
0xFFFF,0x00C8, //Y Z
0x00D4,0x011A, //_ a
0x0121,0x0130, //b c
0x014F,0x0175, //d e
0x018B,0x01A8, //f g
0xFFFF,0x01B0, //h i
0xFFFF,0xFFFF, //j k
0x01CE,0xFFFF, //l m
0x01E4,0xFFFF, //n o
0x01EB,0x01F5, //p q
0x01FE,0x0208, //r s
0xFFFF,0x0242, //t u
0x0255,0x025D, //v w
0xFFFF,0xFFFF, //x y
0xFFFF}; //z
unsigned char id[]={
0x7A,0x00,0x52,0x45,0x41,0x4B,0, // BREAK
0xFF,0xFF, // end char 'B'
0x6A,0x00,0x41,0x52,0x52,0x59,0x46,0x4C,0x41,0x47,0, // CARRYFLAG
0xA3,0x00,0x41,0x53,0x45,0, // CASE
0x7C,0x00,0x4F,0x4E,0x54,0x49,0x4E,0x55,0x45,0, // CONTINUE
0xFF,0xFF, // end char 'C'
0x47,0x00,0x4C,0x53,0x45,0, // ELSE
0x4D,0x00,0x58,0x54,0x52,0x41,0x43,0x54,0, // EXTRACT
0xFF,0xFF, // end char 'E'
0x7F,0x00,0x4F,0x52,0, // FOR
0x4C,0x00,0x52,0x4F,0x4D,0, // FROM
0xFF,0xFF, // end char 'F'
0x78,0x00,0x4F,0x54,0x4F,0, // GOTO
0xFF,0xFF, // end char 'G'
0x45,0x00,0x46,0, // IF
0xFF,0xFF, // end char 'I'
0x9A,0x00,0x4F,0x4F,0x50,0x4E,0x5A,0, // LOOPNZ
0xFF,0xFF, // end char 'L'
0x70,0x00,0x49,0x4E,0x55,0x53,0x46,0x4C,0x41,0x47,0, // MINUSFLAG
0xFF,0xFF, // end char 'M'
0x6B,0x00,0x4F,0x54,0x43,0x41,0x52,0x52,0x59,0x46,0x4C,0x41,0x47,0, // NOTCARRYFLAG
0x69,0x00,0x4F,0x54,0x4F,0x56,0x45,0x52,0x46,0x4C,0x4F,0x57,0, // NOTOVERFLOW
0x6D,0x00,0x4F,0x54,0x5A,0x45,0x52,0x4F,0x46,0x4C,0x41,0x47,0, // NOTZEROFLAG
0xFF,0xFF, // end char 'N'
0x68,0x00,0x56,0x45,0x52,0x46,0x4C,0x4F,0x57,0, // OVERFLOW
0xFF,0xFF, // end char 'O'
0x71,0x00,0x4C,0x55,0x53,0x46,0x4C,0x41,0x47,0, // PLUSFLAG
0xFF,0xFF, // end char 'P'
0x72,0x00,0x45,0x54,0x55,0x52,0x4E,0, // RETURN
0xFF,0xFF, // end char 'R'
0xA2,0x00,0x57,0x49,0x54,0x43,0x48,0, // SWITCH
0xFF,0xFF, // end char 'S'
0x7E,0x00,0x48,0x49,0x4C,0x45,0, // WHILE
0xFF,0xFF, // end char 'W'
0x6C,0x00,0x45,0x52,0x4F,0x46,0x4C,0x41,0x47,0, // ZEROFLAG
0xFF,0xFF, // end char 'Z'
+228
View File
@@ -0,0 +1,228 @@
/*****************************************************************************
;* *
;* This structure define format of LE header for OS/2,Windows exe files *
;* ---------------------------------------------------------- *
;* *
;* Author Trigub Serge. B&M&T Corp. *
;* 10 January 1993 *
;* *
;*****************************************************************************/
enum CPU_Type
{
i80286 =0x01,
i80386 =0x02,
i80486 =0x03,
i80586 =0x04,
i860_N10 =0x20,
i860_N11 =0x21,
MIPS_Mark_I =0x40,
MIPS_Mark_II =0x41,
MIPS_Mark_III=0x42
};
struct Module_Type_Flags
{
unsigned long Module_Is_DLL [1];
unsigned long Reserved1 [1];
unsigned long Errors_In_Module [1];
unsigned long Reserved2 [1];
unsigned long Code_Load_Application[1];
unsigned long Application_Type [3];
unsigned long Reserved3 [2];
unsigned long No_External_FIXUP [1];
unsigned long No_Internal_FIXUP [1];
unsigned long Protected_Mode_Only [1];
unsigned long Global_Initialization[1];
unsigned long Multipledata [1];
unsigned long Singledata [1];
};
struct LE_Header
{
unsigned short Signature; // Signature 'LE' for exe header
unsigned char Byte_Order;
unsigned char Word_Order;
unsigned long Exec_Format_Level;
unsigned short CPU_Type;
unsigned short Target_OS;
unsigned long Module_Version;
union{
unsigned long Type_Flags;
Module_Type_Flags Flags;
};
unsigned long Number_Of_Memory_Pages;
unsigned long Initial_CS;
unsigned long Initial_EI;
unsigned long Initial_SS;
unsigned long Initial_ESP;
unsigned long Memory_Page_Size;
unsigned long Bytes_On_Last_Page;
unsigned long Fixup_Section_Size;
unsigned long Fixup_Section_Checksum;
unsigned long Loader_Section_Size;
unsigned long Loader_Section_CheckSum;
unsigned long Object_Table_Offset;
unsigned long Object_Table_Entries;
unsigned long Object_Page_Map_Table_Offset;
unsigned long Object_Iterate_Data_Map_Offset;
unsigned long Resource_Table_Offset;
unsigned long Resource_Table_Entries;
unsigned long Resident_Names_Table_Offset;
unsigned long Entry_Table_Offset;
unsigned long Module_Directives_Table_Offset;
unsigned long Module_Directives_Table_Entries;
unsigned long Fixup_Page_Table_Offset;
unsigned long Fixup_Record_Table_Offset;
unsigned long Imported_Module_Names_Table_Offset;
unsigned long Imported_Modules_Count;
unsigned long Imported_Procedure_Name_Table_Offset;
unsigned long Per_page_Checksum_Table_Offset;
unsigned long Data_Pages_Offset;
unsigned long Preload_Page_Count;
unsigned long Nonresident_Names_Table_Offset;
unsigned long Nonresident_Names_Table_Length;
unsigned long Nonresident_Names_Table_Checksum;
unsigned long Automatic_Data_Object;
unsigned long Debug_Information_Offset;
unsigned long Debug_Information_Length;
unsigned long Preload_Instance_Pages_Number;
unsigned long Demand_Instance_Pages_Number;
unsigned long Extra_Heap_Allocation;
unsigned long Unknown[1];
};
struct OBJ_FLAGS
{
unsigned long I_O_Privilage_Level [1];
unsigned long Conforming_Segment [1];
unsigned long BIG_Segment [1];
unsigned long Alias_16_16 [1];
unsigned long Reserved [1];
unsigned long Resident_Long_Locable[1];
unsigned long Segment_Type [2];
unsigned long Segment_Invalid [1];
unsigned long Segment_Preloaded [1];
unsigned long Segment_Shared [1];
unsigned long Segment_Discardable [1];
unsigned long Segment_Resource [1];
unsigned long Segment_Executable [1];
unsigned long Segment_Writable [1];
unsigned long Segment_Readable [1];
};
struct Object_Table
{
unsigned long Virtual_Segment_Size;
unsigned long Relocation_Base_Address;
union {
unsigned long ObjTableFlags;
OBJ_FLAGS FLAGS;
};
unsigned long Page_MAP_Index;
unsigned long Page_MAP_Entries;
unsigned long Reserved;
};
enum {
Segment_Type_Normal,
Segment_Zero_Filled,
Segment_Resident,
Segment_Resident_contiguous
};
struct PM_FLAGS
{
unsigned char Page_Type:2;
unsigned char Reserved :6;
unsigned char End_Page :2;
};
struct Page_Map_Table
{
unsigned short High_Page_Number;
unsigned char Low_Page_Number;
// union{
// PM_FLAGS SFLAGS;
unsigned char FLAGS;
// };
};
enum{//LE_PM_FLG_Page_Type_Enum ENUM {
Legal_Page =0,
Iterated_Page =1,
Invalid_Page =2,
Zero_Filled_Page=3
};
struct Entry_Table
{
unsigned char Number_of_Entries;
unsigned char Bungle_Flags;
unsigned short Object_Index;
//LE_Entry_First_Entry equ $
};
struct Entry
{
unsigned char Entry_Flags;
union{
unsigned short Word_Offset;
unsigned long Dword_Offset;
};
};
struct Entry_Bungle_Flags
{
unsigned char Bits_Entry :1;
unsigned char Valid_Entry:1;
};
struct Fixup_Record_Table
{
unsigned char Relocation_Address_Type;
unsigned char Relocation_Type;
unsigned short Relocation_Page_Offset;
unsigned char Segment_or_Module_Index;
unsigned short Offset_Or_Ordinal_Value;
};
struct Rel_Addr_Type
{
unsigned char Repeat_Offset :1;
unsigned char Target_OFFSET_Absent:1;
unsigned char Rel_Addr_Type [4];
};
enum// LE_Relocation_Address_Type_ENUM
{
RA_Low_Byte =0,
RA_16_bits_selector =2,
RA_32_bits_Far_Pointer=3,
RA_16_bits_Offset =5,
RA_48_bits_Far_Pointer=6,
RA_32_bits_Offset =7,
RA_32_bits_EIP_Rel =8
};
struct Reloc_Type
{
unsigned char Ordinal_Byte :1;
unsigned char Reserv1 :1;
unsigned char ABS_Dword :1;
unsigned char Target_Offset_32:1;
unsigned char Reserv2 :1;
unsigned char ADDITIVE_Type :1;
unsigned char Reloc_Type [2];
};
enum //LE_Relocation_Type_ENUM
{
Internal_Reference=0,
Imported_Ordinal =1,
Imported_Name =2,
OS_FIXUP =3
};
+534
View File
@@ -0,0 +1,534 @@
#include "tok.h"
#include "coff.h"
char *meserr="Plese, send this obj and sources files to me (sheker@mail.ru)";
struct LISTINCLFILE{
char *name;
int typefind;
int type;
};
enum{
s_extern,
s_code,
s_data,
s_bss
};
struct LISTNAMESYMBOL{
int idx; //¨­¤¥ªá ¨¬¥­¨
int seg;
int adr;
idrec *rec;
int dbg;
char name[IDLENGTH];
}*listnamesymbol;
char *curobjname;
int numobj=0,numname;
LISTINCLFILE *listobj;
unsigned int adr_end;
void LoadObj();
void AddPost(unsigned long loc,int type,unsigned int num);
int searchtree2(idrec *fptr,ITOK *itok4,int *tok4,unsigned char *string4);
int GetSegm(int seg)
{
OBJECT_ENTRY *obj;
if(seg){
seg--;
obj=(OBJECT_ENTRY *)(input+(sizeof(COFF_HEADER)+sizeof(OBJECT_ENTRY)*seg));
seg=obj->vsize;
}
return seg;
}
int GetOffSec(int seg)
{
OBJECT_ENTRY *obj;
if(seg){
seg--;
obj=(OBJECT_ENTRY *)(input+(sizeof(COFF_HEADER)+sizeof(OBJECT_ENTRY)*seg));
seg=obj->sectionRVA;
}
return seg;
}
void AddNameObj(char *name,int typefind,int type)
{
int len;
len=strlen(name);
if(!numobj)listobj=(LISTINCLFILE *)MALLOC(sizeof(LISTINCLFILE));
else listobj=(LISTINCLFILE *)REALLOC(listobj,sizeof(LISTINCLFILE)*(numobj+1));
(listobj+numobj)->name=BackString(name);
(listobj+numobj)->typefind=typefind;
(listobj+numobj)->type=type;
numobj++;
}
void AddObj()
{
int hold;
for(int i=0;i<numobj;i++){
curobjname=(listobj+i)->name;
// puts(curobjname);
hold=loadfile(curobjname,(listobj+i)->typefind);
if(hold==1||hold==-1){
unableopenfile(curobjname);
continue;
}
if((listobj+i)->type==0)LoadObj();
free(input);
}
}
int GetAlighSize(long flag)
{
int align=0;
int i=(flag&IMAGE_SCN_ALIGN_MASK)>>20;
if(i)align=1<<(i-1);
if(align==1)align=0;
return align;
}
void ConvertName(char *name)
{
int i1,i2;
char c;
tok=tk_ID;
i1=i2=0;
c=name[i1];
if(c=='?'){
i1++;
c=name[i1];
if(c=='?'){
i1=2;
c=name[i1];
}
}
else if(c=='_'){
if(strncmp(name,"__imp__",7)==0){
i1=7;
c=name[i1];
}
else if(name[1]=='$'){
i1=2;
c=name[i1];
}
}
while(c!=0){
if(c>='a'&&c<='z')tok=tk_id;
name[i2]=c;
i1++;
i2++;
c=name[i1];
if(c=='@'||c=='$')break;
}
name[i2]=0;
}
void AddPost(unsigned long loc,int type,unsigned int num)
{
CheckPosts();
(postbuf+posts)->num=num;
(postbuf+posts)->type=type;
(postbuf+posts)->loc=loc;
posts++;
}
void ScanSection(int numobj)
{
int poutptr,poutptrdata,ppostsize,align;
OBJECT_ENTRY *obj;
long flag;
poutptr=outptr;
poutptrdata=outptrdata;
ppostsize=postsize;
for(int i=0;i<numobj;i++){
obj=(OBJECT_ENTRY *)(input+(sizeof(COFF_HEADER)+sizeof(OBJECT_ENTRY)*i));
flag=obj->flags;
align=GetAlighSize(flag);
obj->vsize=-1;
if((flag&IMAGE_SCN_CNT_CODE)&&(flag&IMAGE_SCN_MEM_EXECUTE)){//ᥪæ¨ï ª®¤ 
obj->vsize=s_code;
obj->sectionRVA=poutptr=Align(poutptr,align);
poutptr+=obj->psize;
if(splitdata==FALSE)poutptrdata=poutptr;
}
else{
if((flag&IMAGE_SCN_MEM_READ)&&(flag&IMAGE_SCN_MEM_WRITE)){
if(flag&IMAGE_SCN_CNT_INITIALIZED_DATA){ //ᥪæ¨ï ¨­¨æ¨ «¨§¨à®¢ ­­ëå ¤ ­­ëå
obj->vsize=s_data;
obj->sectionRVA=poutptrdata=Align(poutptrdata,align);
poutptrdata+=obj->psize;
if(splitdata==FALSE)poutptr=poutptrdata;
}
else if(flag&IMAGE_SCN_CNT_UNINITIALIZED_DATA){ //ᥪæ¨ï bss
obj->vsize=s_bss;
obj->sectionRVA=ppostsize=Align(postsize,align);
postsize+=obj->psize;
}
}
}
}
}
void AddLstName(int numname)
{
unsigned int minofs;
int i,j,minname;
int oseg;
unsigned int ooutptr,ooutptrdata;
ooutptr=outptr;
ooutptrdata=outptrdata;
for(i=0;i<numname;i++){
if((listnamesymbol+i)->dbg==0){
oseg=(listnamesymbol+i)->seg;
minofs=(listnamesymbol+i)->adr;
minname=i;
for(j=i+1;j<numname;j++){
if(splitdata==FALSE)goto checkadr;
else if((listnamesymbol+j)->seg==oseg){
checkadr:
if(minofs>=(listnamesymbol+j)->adr&&(listnamesymbol+j)->dbg==0){
if(minofs==(listnamesymbol+j)->adr){
(listnamesymbol+minname)->dbg=1;
}
minofs=(listnamesymbol+j)->adr;
minname=j;
oseg=(listnamesymbol+j)->seg;
}
}
}
if(minname!=i)i--;
// printf("seg=%d adr=%d %s\n",oseg,(listnamesymbol+minname)->adr,(listnamesymbol+minname)->name);
if(oseg==s_code){
if((listnamesymbol+minname)->rec){
idrec *ptr;
ptr=(listnamesymbol+minname)->rec;
if(ptr->rectok==tk_undefproc||ptr->rectok==tk_proc||ptr->rectok==tk_interruptproc)goto dproc;
outptrdata=(listnamesymbol+minname)->adr;
if(splitdata==FALSE)outptr=outptrdata;
AddDataNullLine(3,(listnamesymbol+minname)->name);
}
else{
dproc:
outptr=(listnamesymbol+minname)->adr;//12.08.04 00:05 +ooutptr;
AddCodeNullLine((listnamesymbol+minname)->name);
}
}
else if(oseg==s_data){
outptrdata=(listnamesymbol+minname)->adr;//12.08.04 01:19 +ooutptrdata;
if(splitdata==FALSE)outptr=outptrdata;
AddDataNullLine(3,(listnamesymbol+minname)->name);
}
(listnamesymbol+minname)->dbg=1;
}
}
outptr=ooutptr;
outptrdata=ooutptrdata;
}
int ScanName(COFF_HEADER *head)
{
int size,i,j,numname,seg,count;
IMAGE_SYMBOL *tsym;
unsigned int ooutptr,ooutptrdata,opostsize;
idrec *rec;
ooutptr=outptr;
ooutptrdata=outptrdata;
opostsize=postsize;
numname=head->COFFsize;
size=numname*sizeof(IMAGE_SYMBOL)+head->pCOFF;
listnamesymbol=(LISTNAMESYMBOL *)MALLOC(sizeof(LISTNAMESYMBOL)*numname);
for(i=0,j=0;i<numname;i++){
tsym=(IMAGE_SYMBOL *)(input+head->pCOFF+i*sizeof(IMAGE_SYMBOL));
(listnamesymbol+j)->rec=0;
if(tsym->SectionNumber>=0){
(listnamesymbol+j)->idx=i;
if(tsym->N.Name.Short==0){
strcpy((char *)string,(char *)(input+size+tsym->N.Name.Long));
}
else{
strncpy((char *)string,(char *)tsym->N.sname,8);
string[8]=0;
}
//¯à¥®¡à §®¢ âì ¨¬ï
ConvertName((char *)string);
seg=(listnamesymbol+j)->seg=GetSegm(tsym->SectionNumber);
// printf("find name \"%s\" seg=%d type=%d class=%d\n",(char *)string,seg,tsym->Type,tsym->StorageClass);
(listnamesymbol+j)->adr=tsym->Value+GetOffSec(tsym->SectionNumber);
(listnamesymbol+j)->dbg=0;
strcpy((listnamesymbol+j)->name,(char *)string);
if(seg==s_data){
outptrdata=(listnamesymbol+j)->adr;//12.08.04 01:20 +ooutptrdata;
count=FindOff(string,DS);
File diff suppressed because it is too large Load Diff
+41
View File
@@ -0,0 +1,41 @@
#define _NEW_TYPE_
#include "tok.h"
void convert_type(int *sign,int *rettype,int *pointr,int reg)
{
int usebracket=FALSE;
if(tok==tk_openbracket&&(tok2>=tk_char&&tok2<=tk_double)){
nexttok();
usebracket=TRUE;
}
switch ( tok ){
case tk_byte:
case tk_word:
case tk_dword:
case tk_float:
case tk_double:
case tk_qword:
*sign=0;
*rettype=tok;
if(usebracket)nexttok();
File diff suppressed because it is too large Load Diff
+197
View File
@@ -0,0 +1,197 @@
#include "tok.h"
#include "le.h"
#define _OUTLE_
unsigned short swapshort(unsigned int var)
{
unsigned short h,l;
l=var>>8;
h=var<<8;
return l|h;
}
int MakeBin32()
{
hout=CreateOutPut(outext,"wb");
if(fwrite(output,outptr,1,hout)!=1){
ErrWrite();
fclose(hout);
hout=NULL;
return(-1);
}
return 0;
}
unsigned int EntryParamStr()
{
ITOK btok;
int bb=tk_id;
unsigned char *buf=(unsigned char *)"__bufcomstr";
btok.number=0;
searchtree(&btok,&bb,buf);
if(bb==tk_id)btok.number=0;
else{
btok.number+=outptrdata;
if((outptrdata%2)==1)btok.number++; /* alignment of entire post data block manditory */
}
return btok.number;
}
int MakeMEOS()
{
MEOSheader hdr;
hout=CreateOutPut(outext,"wb");
strcpy((char *)hdr.sign,"MENUET01");
hdr.vers=1;
hdr.start=EntryPoint();
hdr.size=outptr;
hdr.alloc_mem=Align(outptr+postsize+stacksize,16);
hdr.esp=hdr.alloc_mem-4;
hdr.I_Param=EntryParamStr();
hdr.I_Icon=0;
memcpy(output+startptr,&hdr,sizeof(MEOSheader));
if(fwrite(output,outptr,1,hout)!=1){
ErrWrite();
fclose(hout);
hout=NULL;
return(-1);
}
return 0;
}
int MakeLE()
{
LE_Header hdr;
Object_Table ot[2];
Page_Map_Table *pmt;
unsigned int i;
int headerofs;
int headsize=sizeof(LE_Header);
unsigned long *fpto;
int sizeb;
CreatStub(stubfile);
memset(&hdr,0,sizeof(LE_Header));
#ifdef _WC_
hdr.Signature='EL';
#else
hdr.Signature='LE';
#endif
hdr.CPU_Type=i80386;
hdr.Target_OS=1;
hdr.Type_Flags=0x200;
hdr.Number_Of_Memory_Pages=outptr/0x1000+1;
hdr.Initial_CS=1;
hdr.Initial_EI=EntryPoint();
hdr.Initial_SS=2;
hdr.Initial_ESP=stacksize;
hdr.Memory_Page_Size=0x1000;
hdr.Bytes_On_Last_Page=outptr%0x1000;
hdr.Object_Table_Offset=sizeof(LE_Header);
hdr.Object_Table_Entries=2;
headerofs=ftell(hout);
if(fwrite(&hdr,sizeof(LE_Header),1,hout)!=1){
errwrite:
ErrWrite();
fclose(hout);
hout=NULL;
return(-1);
}
+385
View File
@@ -0,0 +1,385 @@
#include "tok.h"
void obj_outrecord(int recordtype,unsigned int recordlength,unsigned char *data);
void outeachPUBDEF(struct idrec *ptr);
void obj_outLEDATA(unsigned int segm,unsigned int offset,unsigned int recordlength,
unsigned char *data);
#define MAXNUMEXTNAME 1024;
int *numextname;
int maxnumextname=MAXNUMEXTNAME;
unsigned int lenextstr=0; //¤«¨­  áâப¨ á ¢­¥è­¨¬¨ ¨¬¥­ ¬¨
int numextern=0;
int postseg,stackseg;
unsigned int findextname(int extnum)
{
for(unsigned int i=0;i<externnum;i++){
if(numextname[i]==extnum)return i+1;
}
return 0;
}
int MakeObj()
{
unsigned int i;
unsigned int count,sizeblock;
hout=CreateOutPut("obj","wb");
i=strlen(startfileinfo->filename);
string2[0]=(unsigned char)i;
strcpy((char *)&string2[1],startfileinfo->filename);
obj_outrecord(0x80,i+1,&string2[0]);// output the LNAMES
sprintf((char *)&string2[3],"%s %s",compilerstr,__DATE__);
i=strlen((char *)&string2[3]);
*(short *)&string2[0]=0;
string2[2]=(unsigned char)i;
obj_outrecord(0x88,i+3,&string2[0]);// output the LNAMES
for(count=0;count<totalmodule;count++){ //¨¬¥­  ¢ª«îç ¥¬ëå ä ©«®¢
*(struct ftime *)&string2[2]=(startfileinfo+count)->time;
strcpy((char *)&string2[7],(startfileinfo+count)->filename);
i=strlen((startfileinfo+count)->filename);
*(short *)&string2[0]=0xE940;
string2[6]=(unsigned char)i;
obj_outrecord(0x88,i+7,&string2[0]);// output the LNAMES
}
count=outptr-startptr; //à §¬¥à ª®¤ 
unsigned char *data=output+startptr; //­ ç «® ¤ ­­ëå
*(short *)&string2[0]=0xE940;
obj_outrecord(0x88,2,&string2[0]);//ª®­¥æ ª®¬¥­â à¨©
if(!am32){
*(short *)&string2[0]=0xEA00;
string2[2]=1;
string2[3]=(unsigned char)(modelmem==SMALL?9:8);
obj_outrecord(0x88,4,&string2[0]);
}
else{
*(short *)&string2[0]=0xA140;
obj_outrecord(0x88,2,&string2[0]);
}
obj_outrecord(0x96,39,(unsigned char *)"\000\005_TEXT\004CODE\004_BSS\003BSS\006DGROUP\005_DATA\004DATA");
// output the SEGDEF
if(!am32){
string2[0]=(unsigned char)0x28;
*(short *)&string2[1]=(short)outptr;//count;// Set the length of the segment of DATA or CODE
string2[3]=0x02; //¨¬ï ᥣ¬¥­â  _TEXT
*(short *)&string2[4]=0x0103; //ª« áá CODE Overlay NONE 1
obj_outrecord(0x98,6,string2);
i=2;
if(comfile==file_exe&&modelmem==SMALL){
string2[0]=(unsigned char)0x48;
*(short *)&string2[1]=outptrdata;// Set the length of the segment DATA
string2[3]=0x07; //¨¬ï ᥣ¬¥­â  _DATA
*(short *)&string2[4]=0x0108; //ª« áá DATA Overlay NONE
obj_outrecord(0x98,6,string2);
i++;
}
postseg=i;
string2[0]=(unsigned char)0x48;
*(short *)&string2[1]=(short)postsize;// Set the length of the segment BSS
string2[3]=0x04; //¨¬ï ᥣ¬¥­â  _BSS
*(short *)&string2[4]=0x0105; //ª« áá BSS Overlay NONE
obj_outrecord(0x98,6,string2);
i++;
if(comfile==file_exe&&modelmem==SMALL){
obj_outrecord(0x96,6,(unsigned char *)"\005STACK");
string2[0]=0x74;
*(short *)&string2[1]=(short)stacksize;// Set the length of the segment STACK
string2[3]=0x09; //¨¬ï ᥣ¬¥­â  STACK
*(short *)&string2[4]=0x0109; //ª« áá STACK Overlay NONE
obj_outrecord(0x98,6,string2);
stackseg=i;
}
string2[0]=6; //¨¬ï DGROUP
if(comfile==file_exe&&modelmem==SMALL){
*(short *)&string2[1]=0x2FF;
*(short *)&string2[3]=0x3FF;//postseg*256+255;//0x3FF;
*(short *)&string2[5]=0x4ff;//stackseg*256+255;//0x4FF;
i=7;
}
else{
*(short *)&string2[1]=0x1FF;
// *(short *)&string2[3]=0x2FF;
*(short *)&string2[3]=0x2ff;//postseg*256+255;//0x3FF;
i=5;
}
obj_outrecord(0x9A,i,string2);
}
else{
string2[0]=(unsigned char)0xA9;
*(long *)&string2[1]=(long)outptr;//count;// Set the length of the segment of DATA or CODE
string2[5]=0x02; //¨¬ï ᥣ¬¥­â  _TEXT
*(short *)&string2[6]=0x0103; //ª« áá CODE Overlay NONE
obj_outrecord(0x99,8,string2);
i=2;
/*
string2[0]=(unsigned char)0xA9;
*(long *)&string2[1]=0;// Set the length of the segment DATA
string2[5]=0x07; //¨¬ï ᥣ¬¥­â  _DATA
*(short *)&string2[6]=0x0108; //ª« áá DATA Overlay NONE
obj_outrecord(0x99,8,string2);
i++;*/
postseg=i;
string2[0]=(unsigned char)0xA9;
*(long *)&string2[1]=(long)postsize;// Set the length of the segment BSS
string2[5]=0x04; //¨¬ï ᥣ¬¥­â  _BSS
*(short *)&string2[6]=0x0105; //ª« áá BSS Overlay NONE
obj_outrecord(0x99,8,string2);
i++;
obj_outrecord(0x96,11,(unsigned char *)"\005STACK\004FLAT");//9,10
if(comfile!=file_w32){
string2[0]=0x75;
*(long *)&string2[1]=(long)stacksize;// Set the length of the segment STACK
string2[5]=0x09; //¨¬ï ᥣ¬¥­â  STACK
*(short *)&string2[6]=0x0109; //ª« áá STACK Overlay NONE
obj_outrecord(0x99,8,string2);
stackseg=i;
}
string2[0]=10;
obj_outrecord(0x9A,1,string2); //GRPDEF Group: FLAT
string2[0]=6; //¨¬ï DGROUP
i=1;
// *(short *)&string2[i]=0x2FF; //DATA
// i+=2;
*(short *)&string2[i]=postseg*256+255;//0x3FF; //BSS
i+=2;
if(comfile!=file_w32){
*(short *)&string2[i]=stackseg*256+255;//0x4FF
i+=2;
}
obj_outrecord(0x9A,i,string2);
}
// ¢ë¢®¤ EXTDEF
while(externnum>maxnumextname)maxnumextname+=MAXNUMEXTNAME;
numextname=(int *)MALLOC(maxnumextname*sizeof(int));
// output the PUBDEF records for each exteral procedures (all procedures)
outeachPUBDEF(treestart);
if(lenextstr!=0)obj_outrecord(0x8c,lenextstr,&string[0]);
// output the data (LEDATA) in 1K chunks as required!
i=0;
char *bufobj=(char *)MALLOC(512*5);
while(i<count){
unsigned int j;
sizeblock=1024;
restart:
for(j=0;j<posts;j++){
if((postbuf+j)->type>=CALL_EXT&&(postbuf+j)->type<=FIX_CODE32&&
(postbuf+j)->loc>=(i+startptr)&&(postbuf+j)->loc<(i+sizeblock+startptr)){
if((postbuf+j)->loc>(i+startptr+sizeblock-(am32==FALSE?2:4))){
sizeblock=(postbuf+j)->loc-i-startptr;//¨§¬¥­¨âì à §¬¥à ¡«®ª 
goto restart;
}
}
}
if((i+sizeblock)>count)sizeblock=count-i;
obj_outLEDATA(1,i+startptr,sizeblock,data+i);
int ofsfix=0;
for(j=0;j<posts;j++){
if((postbuf+j)->loc>=(i+startptr)&&(postbuf+j)->loc<(i+sizeblock+startptr)){
int hold=(postbuf+j)->loc-i-startptr;
if((postbuf+j)->type>=CALL_32I/*POST_VAR*/&&(postbuf+j)->type<=FIX_CODE32){
bufobj[ofsfix++]=(unsigned char)((am32==FALSE?0xC4:0xE4)|(hold/256));
bufobj[ofsfix++]=(unsigned char)(hold%256);
bufobj[ofsfix++]=0x14;
bufobj[ofsfix++]=1;
switch((postbuf+j)->type){
File diff suppressed because it is too large Load Diff
+277
View File
@@ -0,0 +1,277 @@
#define _POINTER_
#include "tok.h"
void dopointerproc()
{
unsigned int snum;
int razr=r16;
ITOK wtok;
char *wbuf;
SINFO wstr;
if(am32)razr=r32;
itok.rm=itok.sib;
itok.sib=am32==0?CODE16:CODE32;
if((FixUp)
&&((itok.rm==rm_d32&&am32)||(itok.rm==rm_d16&&am32==0)))//16.07.04 16:01
//18.08.04 18:03 itok.rm==rm_d32 was itok.rm==CODE32
itok.flag|=f_reloc;
else compressoffset(&itok);
wstr=strinf;
strinf.bufstr=NULL;
wtok=itok;
wbuf=bufrm;
bufrm=NULL;
unsigned int oaddESP=addESP;
if(wtok.npointr<2){
itok.flag&=~f_far;
// itok.post=0;
snum=initparamproc();
CheckAllMassiv(wbuf,razr,&wstr,&wtok);
outseg(&wtok,2);
op(0xFF); op(0x10+wtok.rm+((wtok.flag&f_far)!=0?8:0));
outaddress(&wtok);
}
else{
int reg=BX;
getpointeradr(&wtok,wbuf,&wstr,wtok.npointr-1,am32==0?r16:r32,reg);
snum=initparamproc();
op66(razr);
op(0xFF);
op(0xD0+reg); /* CALL reg with stack params */
}
if((wtok.flag&f_typeproc)==tp_cdecl)CorrectStack(snum);
else addESP=oaddESP;
clearregstat(0);
}
void dopointer()
{
if(itok.type==tk_proc){
if(tok2==tk_openbracket){
dopointerproc();
nexttok();
return;
}
itok.rm=itok.sib;
itok.sib=am32==0?CODE16:CODE32;
compressoffset(&itok);
}
int razr=r16;
if(am32||(itok.flag&f_far))razr=r32;
do_d_wordvar(0,razr);
}
void getpointeradr(ITOK *gstok,char *&gbuf,SINFO *gstr,int numpointer,int razr, int reg)
{
if(gstok->flag&f_far){
CheckAllMassiv(gbuf,4,gstr,gstok);
outseg(gstok,2);
op(0xC4);
op(gstok->rm+8*reg);
outaddress(gstok);
itok.segm=ES;
itok.sib=CODE16;
if(reg==BX)itok.rm=rm_BX;
else if(reg==SI)itok.rm=rm_SI;
else if(reg==DI)itok.rm=rm_DI;
warningreg(segs[0]);
}
else{
int retreg;
if((gstok->flag&f_useidx)==0&&(retreg=CheckIDZReg(gstok->name,reg,razr))!=NOINREG){
if(am32==0&&retreg!=BX&&retreg!=SI&&retreg!=DI){
GenRegToReg(reg,retreg,razr);
IDZToReg(gstok->name,reg,razr);
}
else if(retreg!=SKIPREG)reg=retreg;
if(gbuf){
free(gbuf);
gbuf=NULL;
}
if(gstr->bufstr){
free(gstr->bufstr);
gstr->bufstr=NULL;
}
goto nomov;
}
if((gstok->flag&f_useidx))IDZToReg(gstok->name,reg,razr);
CheckAllMassiv(gbuf,razr,gstr,gstok);
outseg(gstok,2);
op(0x8B);
op(reg*8+gstok->rm);
outaddress(gstok);
nomov:
itok.segm=DS;
if(am32==0){
itok.sib=CODE16;
if(reg==BX)itok.rm=rm_BX;
else if(reg==SI)itok.rm=rm_SI;
else if(reg==DI)itok.rm=rm_DI;
}
else{
itok.sib=CODE32;
itok.rm=reg;
}
}
itok.post=0;
itok.number=0;
itok.flag=gstok->flag&(!f_reloc);
warningreg(regs[am32][reg]);
while(numpointer){
outseg(&itok,2);
op(0x8B);
op(itok.rm+reg*8);
outaddress(&itok);
numpointer--;
}
}
void dovalpointer()
{
int sign=0,rettype,pointr,razr=r8;
int rrettype;
int numpointer=0;
int hnumber=0;
//int i=0;
int reg=BX;
+174
View File
@@ -0,0 +1,174 @@
#define SEEK_SET (0)
#define SEEK_CUR (1)
#define SEEK_END (2)
#define _PORT_CPP_
#include "port.h"
long getfilelen(int fd)
{
long reslt,curr;
curr = lseek(fd,0,SEEK_CUR);
reslt = lseek(fd,0,SEEK_END);
lseek(fd,curr,SEEK_SET);
return reslt;
}
#ifndef _WIN32_
char* strupr(char* s)
{
char* p = s;
while (*p = toupper(*p)) p++;
return s;
}
char* strlwr(char* s)
{
char* p = s;
while (*p = tolower(*p)) p++;
return s;
}
int strnicmp(const char* s1, const char* s2, int len)
{
unsigned char c1,c2;
if(!len)
return 0;
do{
c1 = *s1++;
c2 = *s2++;
if (!c1||!c2)
break;
if (c1 == c2)
continue;
c1 = tolower(c1);
c2 = tolower(c2);
if (c1!=c2)
break;
} while (--len);
return (int)c1 - (int)c2;
}
int stricmp(const char* s1, const char* s2)
{
unsigned char c1,c2;
do{
c1 = *s1++;
c2 = *s2++;
if (!c1||!c2)
break;
if (c1 == c2)
continue;
c1 = tolower(c1);
c2 = tolower(c2);
if (c1!=c2)
break;
} while (c1);
return (int)c1 - (int)c2;
}
bool OemToCharA(char* a, char* b)
{
*b = *a;
return true;
}
bool CharToOemA(char* a, char* b)
{
*b = *a;
return true;
}
//ñòðîêà-ðåçóëüòàò íå èñïîëüçóåòñÿ
int MultiByteToWideChar(
unsigned int CodePage, // code page
unsigned int dwFlags, // character-type options
char* lpMultiByteStr, // address of string to map
int cchMultiByte, // number of characters in string
wchar_t* lpWideCharStr, // address of wide-character buffer
int cchWideChar // size of buffer
)
{
int i;
while ((lpMultiByteStr[i*2]!=0) && (lpMultiByteStr[i*2+1]!=0)) i++;
return i/2;
}
#ifdef _KOS_
typedef struct _fs
{
int cmd;
int numL;
int numH;
int size;
void* pointer;
unsigned char nul;
char* path;
} fs;
int stat (const char* path, struct _stat* buf)
{
//fs fstruc;
char buff[40];
int __ret;
char pathin[256];
int i;
char fstruc[25];
for(i=0; i<256; i++){
pathin[i]=path[i];
if (pathin[i]==0) break;
}
pathin[255]=0;
*((int*)(fstruc+0)) = 5;
*((int*)(fstruc+4)) = 0;
*((int*)(fstruc+8)) = 0;
*((int*)(fstruc+12)) = 0;
*((char**)(fstruc+16)) = buff;
*((char*)(fstruc+20)) = 0;
*((char**)(fstruc+21)) = pathin;
__asm__ __volatile__("int $0x40":"=a"(__ret):"a"(70),"b"(&fstruc));
return __ret;
}
char * getcwd (char *buffer, int size)
{
int len=0;
if (size==0){
if (buffer!=0)
return 0;
size = 256;
}
if (buffer==0)
buffer = (char*)malloc(size);
__asm__ __volatile__("int $0x40":"=a"(len):"a"(30),"b"(2),"c"(buffer),"d"(size));
if (len!=0)
return buffer;
else
return 0;
}
void exit(int a){
__asm__ __volatile__("int $0x40"::"a"(-1));
}
#endif //_KOS_
#endif //not _WIN32_
+120
View File
@@ -0,0 +1,120 @@
#ifndef ___PORT_H___
#define ___PORT_H___
#ifdef __cplusplus
extern "C" {
#endif
#define _BORLAND_DOS_REGS
struct DWORDREGS {
unsigned long edi;
unsigned long esi;
unsigned long ebp;
unsigned long cflag;
unsigned long ebx;
unsigned long edx;
unsigned long ecx;
unsigned long eax;
unsigned short eflags;
};
struct DWORDREGS_W {
unsigned long di;
unsigned long si;
unsigned long bp;
unsigned long cflag;
unsigned long bx;
unsigned long dx; unsigned long cx;
unsigned long ax;
unsigned short flags;
};
struct WORDREGS {
unsigned short di, _upper_di;
unsigned short si, _upper_si;
unsigned short bp, _upper_bp;
unsigned short cflag, _upper_cflag;
unsigned short bx, _upper_bx;
unsigned short dx, _upper_dx;
unsigned short cx, _upper_cx;
unsigned short ax, _upper_ax;
unsigned short flags;
};
struct BYTEREGS {
unsigned short di, _upper_di;
unsigned short si, _upper_si;
unsigned short bp, _upper_bp;
unsigned long cflag;
unsigned char bl;
unsigned char bh;
unsigned short _upper_bx;
unsigned char dl;
unsigned char dh;
unsigned short _upper_dx;
unsigned char cl;
unsigned char ch;
unsigned short _upper_cx;
unsigned char al;
unsigned char ah;
unsigned short _upper_ax;
unsigned short flags;
};
union REGS {
struct DWORDREGS d;
#ifdef _NAIVE_DOS_REGS
struct WORDREGS x;
#else
#ifdef _BORLAND_DOS_REGS
struct DWORDREGS x;
#else
struct DWORDREGS_W x;
#endif
#endif
struct WORDREGS w;
struct BYTEREGS h;
};
long getfilelen(int);
#ifndef _WIN32_
#define CP_ACP 0
#define MB_PRECOMPOSED 1
#define OemToChar OemToCharA
#define CharToOem CharToOemA
bool OemToCharA(char*, char*);
bool CharToOemA(char*, char*);
int MultiByteToWideChar(unsigned int,unsigned int,char*,int,wchar_t *,int);
#endif
#ifdef _PORT_CPP_
long lseek (int, long, int);
char tolower(char c);
char toupper(char c);
char* strupr(char* s);
char* strlwr(char* s);
int stricmp(const char*, const char*);
int strnicmp(const char*, const char*, int);
char * getcwd (char *buffer, int size);
int stat (const char*, struct _stat*);
void exit(int);
void* malloc(int);
#endif //_PORT_CPP_
#ifdef __cplusplus
}
#endif
#endif // ___PORT_H___
File diff suppressed because it is too large Load Diff
+218
View File
@@ -0,0 +1,218 @@
#define CRT_NEWRESOURCE 0x2000
#define CRT_ERROR 0x7FFF
#define CRT_CURSOR 1
#define CRT_BITMAP 2
#define CRT_ICON 3
#define CRT_MENU 4
#define CRT_DIALOG 5
#define CRT_STRING 6
#define CRT_FONTDIR 7
#define CRT_FONT 8
#define CRT_ACCELERATOR 9
#define CRT_RCDATA 10
#define CRT_MESSAGETABLE 11
#define CRT_GROUP_CURSOR 12
#define CRT_GROUP_ICON 14
#define CRT_VERSION 16
#define CRT_DLGINCLUDE 17
#define CRT_PLUGPLAY 19
#define CRT_VXD 20
#define CRT_ANICURSOR 21
#define CRT_ANIICON 22
#define CRT_NEWBITMAP (CRT_BITMAP|CRT_NEWRESOURCE)
#define CRT_NEWMENU (CRT_MENU|CRT_NEWRESOURCE)
#define CRT_NEWDIALOG (CRT_DIALOG|CRT_NEWRESOURCE)
#define TOTALTYPERES 22
#define NUMMENUPOPUP 8
struct RES{
int type; //⨯ à¥áãàá¢
char *tname; //¨¬ï ⨯ 
int id; //¥£® id
char *name; //¨¬ï à¥áãàá 
unsigned short lang; //ï§ëª
unsigned char *res; //㪠§ â¥«ì ­  â ¡«¨æã à¥áãàá 
unsigned int size; //à §¬¥à â ¡«¨æë
};
#define DRESNUM 100
#define SIZERESBUF 2048
struct _STRINGS_{
char *id;
short val;
};
_STRINGS_ typemem[7]={
"MOVEABLE", 0x0010,
"FIXED", ~0x0010,
"PURE", 0x0020,
"IMPURE", ~0x0020,
"PRELOAD", 0x0040,
"LOADONCALL", ~0x0040,
"DISCARDABLE",0x1000
};
_STRINGS_ typeclass[6]={
"BUTTON", 0x80,
"EDIT", 0x81,
"STATIC", 0x82,
"LISTBOX", 0x83,
"SCROLLBAR",0x84,
"COMBOBOX", 0x85
};
_STRINGS_ typemenu[NUMMENUPOPUP]={
"GREYED", 0x0001,
"INACTIVE", 0x0002,
"BITMAP", 0x0004,
"OWNERDRAW", 0x0100,
"CHECKED", 0x0008,
"MENUBARBREAK",0x0020,
"MENUBREAK", 0x0040,
"HELP", 0x4000
};
_STRINGS_ typeacceler[5]={
"VIRTKEY", 0x01,
"NOINVERT", 0x02,
"SHIFT", 0x04,
"CONTROL", 0x08,
"ALT", 0x10
};
enum {v_fv=1,v_pv,v_ffm,v_ff,v_fo,v_ft,v_fs};
_STRINGS_ typeversion[7]={
"FILEVERSION",v_fv,
"PRODUCTVERSION",v_pv,
"FILEFLAGSMASK",v_ffm,
"FILEFLAGS",v_ff,
"FILEOS",v_fo,
"FILETYPE",v_ft,
"FILESUBTYPE",v_fs
};
enum{
rc_accelerators,rc_auto3state, rc_autocheckbox,rc_autoradiobutton,rc_bitmap,
rc_caption, rc_characteristics,rc_checkbox, rc_class, rc_combobox,
rc_control, rc_ctext, rc_cursor, rc_defpushbutton, rc_dialog,
rc_dialogex, rc_edittext, rc_exstyle, rc_font, rc_groupbox,
rc_icon, rc_listbox, rc_ltext, rc_menu, rc_menuex,
rc_menuitem, rc_messagetable, rc_popup, rc_pushbox, rc_pushbutton,
rc_radiobutton, rc_rcdata, rc_rtext, rc_scrollbar, rc_state3,
rc_stringtable, rc_style, rc_version, rc_versioninfo, rc_begin,
rc_end, rc_language
};
struct{
+75
View File
@@ -0,0 +1,75 @@
/* 吲栽 帖 嶂平丞兒恥 能恐洵悟 'FASTLIST.EXE' */
short ofsres[26]={
0x0000,0x003B, //a b
0x004C,0x009B, //c d
0x00BE,0x00D8, //e f
0x00E0,0xFFFF, //g h
0x00EC,0xFFFF, //i j
0xFFFF,0x00F4, //k l
0x0110,0xFFFF, //m n
0xFFFF,0x0138, //o p
0xFFFF,0x0156, //q r
0x0174,0xFFFF, //s t
0xFFFF,0x019D, //u v
0xFFFF,0xFFFF, //w x
0xFFFF,0xFFFF}; //y z
unsigned char resMnem[]={
0x00,0x00,0x63,0x63,0x65,0x6C,0x65,0x72,0x61,0x74,0x6F,0x72,0x73,0, // accelerators
0x01,0x00,0x75,0x74,0x6F,0x33,0x73,0x74,0x61,0x74,0x65,0, // auto3state
0x02,0x00,0x75,0x74,0x6F,0x63,0x68,0x65,0x63,0x6B,0x62,0x6F,0x78,0, // autocheckbox
0x03,0x00,0x75,0x74,0x6F,0x72,0x61,0x64,0x69,0x6F,0x62,0x75,0x74,0x74,0x6F,0x6E,0, // autoradiobutton
0xFF,0xFF, // end char 'a'
0x27,0x00,0x65,0x67,0x69,0x6E,0, // begin
0x04,0x00,0x69,0x74,0x6D,0x61,0x70,0, // bitmap
0xFF,0xFF, // end char 'b'
0x05,0x00,0x61,0x70,0x74,0x69,0x6F,0x6E,0, // caption
0x06,0x00,0x68,0x61,0x72,0x61,0x63,0x74,0x65,0x72,0x69,0x73,0x74,0x69,0x63,0x73,0, // characteristics
0x07,0x00,0x68,0x65,0x63,0x6B,0x62,0x6F,0x78,0, // checkbox
0x08,0x00,0x6C,0x61,0x73,0x73,0, // class
0x09,0x00,0x6F,0x6D,0x62,0x6F,0x62,0x6F,0x78,0, // combobox
0x0A,0x00,0x6F,0x6E,0x74,0x72,0x6F,0x6C,0, // control
0x0B,0x00,0x74,0x65,0x78,0x74,0, // ctext
0x0C,0x00,0x75,0x72,0x73,0x6F,0x72,0, // cursor
0xFF,0xFF, // end char 'c'
0x0D,0x00,0x65,0x66,0x70,0x75,0x73,0x68,0x62,0x75,0x74,0x74,0x6F,0x6E,0, // defpushbutton
0x0E,0x00,0x69,0x61,0x6C,0x6F,0x67,0, // dialog
0x0F,0x00,0x69,0x61,0x6C,0x6F,0x67,0x65,0x78,0, // dialogex
+113
View File
@@ -0,0 +1,113 @@
/*OUTPUT_FORMAT("binary")*/
ENTRY(__start)
SECTIONS
{
.text 0x000000:
{
LONG(0x554e454D);
LONG(0x32305445);
LONG(1);
LONG(__start);
LONG(___iend);
LONG(___memsize);
LONG(___stacktop);
LONG(___cmdline);
LONG(___pgmname); /* full path */
LONG(0); /*FIXME tls data */
*(.init)
*(.text)
*(SORT(.text$*))
*(.text.*)
*(.glue_7t)
*(.glue_7)
___CTOR_LIST__ = .; __CTOR_LIST__ = . ;
LONG (-1);*(.ctors); *(.ctor); *(SORT(.ctors.*)); LONG (0);
___DTOR_LIST__ = .; __DTOR_LIST__ = . ;
LONG (-1); *(.dtors); *(.dtor); *(SORT(.dtors.*)); LONG (0);
*(.fini)
/* ??? Why is .gcc_exc here? */
*(.gcc_exc)
PROVIDE (etext = .);
*(.gcc_except_table)
}
.rdata ALIGN(16) :
{
*(.rdata)
*(SORT(.rdata$*))
___RUNTIME_PSEUDO_RELOC_LIST__ = .;
__RUNTIME_PSEUDO_RELOC_LIST__ = .;
*(.rdata_runtime_pseudo_reloc)
___RUNTIME_PSEUDO_RELOC_LIST_END__ = .;
__RUNTIME_PSEUDO_RELOC_LIST_END__ = .;
}
.CRT ALIGN(16) :
{
___crt_xc_start__ = . ;
*(SORT(.CRT$XC*)) /* C initialization */
___crt_xc_end__ = . ;
___crt_xi_start__ = . ;
*(SORT(.CRT$XI*)) /* C++ initialization */
___crt_xi_end__ = . ;
___crt_xl_start__ = . ;
*(SORT(.CRT$XL*)) /* TLS callbacks */
/* ___crt_xl_end__ is defined in the TLS Directory support code */
___crt_xp_start__ = . ;
*(SORT(.CRT$XP*)) /* Pre-termination */
___crt_xp_end__ = . ;
___crt_xt_start__ = . ;
*(SORT(.CRT$XT*)) /* Termination */
___crt_xt_end__ = . ;
}
.data ALIGN(16) :
{
__data_start__ = . ;
*(.data)
*(.data2)
*(SORT(.data$*))
*(.jcr)
__CRT_MT = .;
LONG(0);
__data_end__ = . ;
*(.data_cygwin_nocopy)
}
.eh_frame ALIGN(16) :
{
*(.eh_frame)
___iend = . ;
}
bss ALIGN(16):
{
*(.bss)
*(COMMON)
. = ALIGN(16);
___menuet__app_path_area = .;
. = . + 1024 + 16;
___stacktop = .;
___memsize = . ;
}
/DISCARD/ :
{
*(.debug$S)
*(.debug$T)
*(.debug$F)
*(.drectve)
*(.note.GNU-stack)
*(.comment)
*(.debug_abbrev)
*(.debug_info)
*(.debug_line)
*(.debug_frame)
*(.debug_loc)
*(.debug_pubnames)
*(.debug_aranges)
*(.debug_ranges)
}
}
+546
View File
@@ -0,0 +1,546 @@
#include <stdio.h>
#include <sys/stat.h>
typedef struct _BIT_{
unsigned int siz:8;
unsigned int ofs:24;
}BIT;
struct _PROCINFO_
{
char *buf; // ¤à¥á ⥪áâ  ¯à®æ¥¤ãàë
void *classteg; // ¤à¥á ⥣ , £¤¥ ®¯à¥¤¥«¥­  ¯à®æ¥¤ãà 
unsigned int warn:1;
unsigned int speed:1;
unsigned int lst:1;
unsigned int typestring:2;
unsigned int inlinest:1;
unsigned int code32:1;
unsigned int align:1;
unsigned int acycle:1;
unsigned int idasm:1;
unsigned int opnum:1;
unsigned int de:1;
unsigned int ostring:1;
unsigned int uselea:1;
unsigned int regoverstack:1;
unsigned int sizeacycle;
char chip;
};
struct idrec
{
union{
struct idrec *left;
struct localrec *next;
};
struct idrec *right; //¯à¥¤ë¤ãé ¨ á«¥¤ãîé § ¯¨áì
char recid[IDLENGTH]; //¨¬ï
unsigned int flag;
char *newid; //¡«®ª á ¤ ­ë¬¨, ¤«ï áâàãªâãà  ¤à¥á ⥣ ,¤«ï ¯à®æ¥¤ãà ¯ à ¬¥âàë
int rectok; //⨯
int recrm; //¤«ï áâàãªâãà ç¨á«® ª®¯¨©
int recsegm;
int recpost;
int recsize;
int recsib;
int line; //­®¬¥à «¨­¨¨
int file; //ä ©«
int count; //áç¥â稪 ¨á¯®«ì§®¢ ­¨ï
unsigned short type;
unsigned short npointr;
union{
char *sbuf; //㪠§ â¥«ì ­  ¡«®ª ¨á室­®£® ⥪áâ 
_PROCINFO_ *pinfo;
};
union{
long recnumber;
long long reclnumber;
double recdnumber;
float recfnumber;
};
};
struct localinfo
{
int usedfirst;
int usedlast;
int start;
int end;
int level;
int count;
};
struct localrec
{
/* struct localrec *next;
int localtok;
unsigned short type;
unsigned short npointr;
union{
unsigned int localnumber;
idrec *rec;
};
int locsize;
char localid[IDLENGTH];
unsigned char fuse; //ä« £ ¨á¯®«ì§®¢ ­¨ï
unsigned char flag; //ä« £ static*/
idrec rec;
localinfo li;
unsigned char fuse; //ä« £ ¨á¯®«ì§®¢ ­¨ï
};
#define INITBPPAR 1 //¨­¨æ¨ «¨§ æ¨ï BP ¯®á«¥ ¯ à ¬¥â஢
#define INITBPLOC 2 //¨­¨æ¨ «¨§ æ¨ï BP ¯®á«¥ «®ª «ì­ëå
#define INITBPENTER 4
#define INITBPADDESP 8
struct HEADLOC
{
int type; //⨯ § £®«®¢ª 
unsigned int ofs; // ¤à¥á §­ ç¥­¨ï
unsigned int num; //¢¥«¨ç¨­  §­ ç¥­¨ï
};
struct treelocalrec
{
treelocalrec *next;
localrec *lrec;
int initbp;
int level;
unsigned int addesp;
int endline;
};
typedef struct _ITOK_
{
int rm;
int segm;
int post;
int sib;
union{
long number;
long long lnumber;
double dnumber;
float fnumber;
};
union{
int size;
BIT bit;
};
unsigned short type;
unsigned short npointr;
union{
idrec *rec;
localrec *locrec;
};
char name[IDLENGTH];
unsigned int flag;
}ITOK;
struct elementteg
{
union{
void *nteg; // ¤à¥á ⥣  ¢«®¦¥­­®© áâàãªâãàë
idrec *rec;
};
int tok;
union{
unsigned int numel; //ç¨á«® í«¥¬¥­â®¢ í⮣® ⨯ 
BIT bit;
};
unsigned int ofs; //ᬥ饭¨¥ ®â ­ ç «  áâàãªâãàë
char name[IDLENGTH];
};
struct structteg
{
struct structteg *left; //á«¥¤ãî騩 ⥣
struct structteg *right; //á«¥¤ãî騩 ⥣
unsigned int size; //à §¬¥à ⥣ 
unsigned int numoper; //ç¨á«® ®¯¥à ­¤®¢ áâàãªâãàë
struct elementteg *baza; // ¤à¥á á ®¯¨á ­¨¥¬ í«¥¬¥­â®¢ ⥣ 
unsigned int flag;
char name[IDLENGTH];
};
struct listexport
{
long address;
char name[IDLENGTH];
};
typedef struct _IOFS_
{
unsigned int ofs;
unsigned int line; //­®¬¥à «¨­¨¨
unsigned int file; //ä ©«
unsigned char dataseg;
}IOFS;
typedef struct _UNDEFOFF_
{
struct _UNDEFOFF_ *next;
IOFS *pos; //¡ãä¥à á  ¤à¥á ¬¨ ®âªã¤  áá뫪¨
int num; //ç¨á«® ááë«®ª ­  íâã ¬¥âªã
char name[IDLENGTH];
}UNDEFOFF;
typedef struct _LISTCOM_
{
char name[IDLENGTH];
}LISTCOM;
typedef struct _SINFO_
{
char *bufstr;
int size;
}SINFO;
//áâàãªâãà  á¯¨áª  api-¯à®æ¥¤ãà
typedef struct _APIPROC_
{
struct idrec *recapi;
}APIPROC;
//
typedef struct _DLLLIST_
{
struct _DLLLIST_ *next; //á«¥¤ãîé ï DLL
struct _APIPROC_ *list; //ᯨ᮪ ¯à®æ¥¤ãà
unsigned short num; //ç¨á«® ¯à®æ¥¤ãà
char name[IDLENGTH]; //¨¬ï DLL
}DLLLIST;
typedef struct _PE_HEADER_
{
long sign; //ᨣ­ âãà  - ¢á¥£¤  'PE'
short cpu; //¬¨­ ⨯ CPU - ¢á¥£¤  0x14C
short numobj; //ç¨á«® ¢å®¤®¢ ¢ â ¡«¨æã ®¡ê¥ªâ®¢
long date_time; //¤ â  ¬®¤¨ä¨ª æ¨¨ «¨­ª¥à®¬
long pCOFF;
long COFFsize;
short NTheadsize; //à §¬¥à § £®«®¢ª  PE ®â MAGIC - ¢á¥£¤  0xE0
short flags;
short Magic; //­ §­ ç¥­¨¥ ¯à£à ¬¬ë
short LinkVer; //¢¥àá¨ï «¨­ª¥à 
long sizecode;
long sizeinitdata;
long sizeuninitdata;
long EntryRVA; // ¤à¥á ®â­®á¨â IMAGE BASE ¯® ª®â®à®¬ã ¯¥à¥¤ ¥âáï ã¯à ¢«¥­¨¥
long basecode; //RVA ᥪæ¨ï, ª®â®à ï ᮤ¥à¦¨â ¯à®£à ¬¬­ë© ª®¤
long basedata; //RVA ᥪæ¨ï,ᮤ¥à¦ é ï ¤ ­­ë¥
long ImageBase; //¢¨àâã «ì­ë© ­ ç «ì­ë©  ¤à¥á § £à㧪¨ ¯à®£à ¬¬ë
long objAlig; //¢ëà ¢­¨¢ ­¨¥ ¯à®£à ¬¬­ëå ᥪ権
long fileAlig; //‚ëà ¢­¨¢ ­¨¥ ᥪ権 ¢ ä ©«¥
long OSver; //­®¬¥à ¢¥àᨨ ®¯¥à á¨áâ¥¬ë ­¥®¡å ¯à®£à ¬¬¥
long userver;
long SubSysVer;
long rez;
long imagesize; //à §¬¥à ¢ ¡ ©â å § £à㦠¥¬®£® ®¡à §  á § £®«®¢ª ¬¨ ¢ëà ¢­¥­ë©
long headsize; //à §¬ ¢á¥å § £®«®¢ª®¢ stub+PE+objtabl
long checksum;
short SubSys; //®¯¥à æ¨®­­ ï á¨áâ ­¥®¡å ¤«ï § ¯ã᪠
short DLLflag;
long stackRezSize;
long stackComSize;
long heapRezSize;
long heapComSize;
long loaderFlag;
long numRVA; //¢á¥£¤  10
long exportRVA;
long exportSize;
long importRVA;
long importSize;
long resourRVA;
long resourSize;
long exceptRVA;
long exceptSize;
long securRVA;
long securSize;
long fixupRVA;
long fixupSize;
long debugRVA;
long debugSize;
long descripRVA;
long descripSize;
long machinRVA;
long machinSize;
long tlsRVA;
long tlsSize;
long loadConfRVA;
long loadConfSize;
long rez2[2];
long iatRVA;
long iatSize;
long rez3[6];
}PE_HEADER;
typedef struct _OBJECT_ENTRY_
{
char name[8];
long vsize;
long sectionRVA;
long psize;
long pOffset;
unsigned long PointerToRelocations;
unsigned long PointerToLinenumbers;
unsigned short NumberOfRelocations;
unsigned short NumberOfLinenumbers;
long flags;
}OBJECT_ENTRY;
typedef struct _EXPORT_TABLE_
{
unsigned long Flags;
unsigned long Time;
unsigned short Version[2];
unsigned long NameRVA;
unsigned long OriginalBase;
unsigned long NumFunc;
unsigned long NumName;
unsigned long AddressRVA;
unsigned long NamePRVA;
unsigned long OrdinalRVA;
}EXPORT_TABLE;
struct ftime {
unsigned ft_tsec:5; /* ¤¢¥ ᥪ㭤ë */
unsigned ft_min:6; /* ¬¨­ãâë */
unsigned ft_hour:5; /* ç áë */
unsigned ft_day:5; /* ¤¥­ì */
unsigned ft_month:4; /* ¬¥áïæ */
unsigned ft_year:7; /* £®¤-1980 */
};
typedef struct _STRING_LIST_
{
void *next; //á«¥¤ãîé ï áâàãªâãà 
unsigned int len; //¤«¨­  áâப¨
unsigned int ofs; // ¤à¥á ¢ ¢ë室­®¬ ä ©«¥
unsigned char type; //⨯ â¥à¬¨­ â®à 
unsigned char plase; //£¤¥ ᥩç á áâப  - post or data
}STRING_LIST;
struct FILEINFO
{
char *filename;
int numdline;
idrec *stlist;
union{
struct ftime time;
unsigned short lineidx[2];
};
};
struct EWAR{
FILE *file;
char *name;
};
typedef struct _ICOMP_
{
unsigned int type;
unsigned int loc;
unsigned int use_cxz;
}ICOMP;
typedef struct _RETLIST_
{
unsigned int line;
unsigned int loc;
unsigned int type;
// int use;
}RETLIST;
enum{
singlcase,startmulti,endmulti};
typedef struct _ISW_
{
unsigned char type;
unsigned int postcase;
unsigned long value;
}ISW;
struct postinfo
{
unsigned int loc;
unsigned int num;
unsigned short type;
unsigned short line;
unsigned short file;
};
typedef struct _EXE_DOS_HEADER_
{
unsigned short sign;
unsigned short numlastbyte;
unsigned short numpage;
unsigned short numreloc;
unsigned short headsize;
unsigned short minmem;
unsigned short maxmem;
unsigned short initSS;
unsigned short initSP;
unsigned short checksum;
unsigned short initIP;
unsigned short initCS;
unsigned short ofsreloc;
unsigned short overlay;
unsigned long fullsize;
}EXE_DOS_HEADER;
typedef struct _FSWI_
{
ISW *info;
int sizetab; //ç¨á«® í«¥¬¥­â®¢
int type; //à §à來®áâì
int numcase; //ç¨á«® ¨á¯®«ì§ã¥¬ëå í«¥¬¥­â®¢
int defal; //§­ ç¥­¨¥ ¯® 㬮«ç ­¨î.
int ptb; // ¤à¥á 㪠§ â¥«ï ­  íâã â ¡«¨æã ¢ ¡«®ª¥ ª®¤ 
int ptv; // ¤à¥á â ¢«¨æë ¢¥«¨ç¨­
int mode; //⨯ switch
int razr; //à §à來®áâì ¢¥«¨ç¨­
}FSWI;
struct paraminfo
{
unsigned int ofspar;
unsigned char type[8];
};
struct MEOSheader
{
unsigned char sign[8];
unsigned long vers;
unsigned long start;
unsigned long size;
unsigned long alloc_mem;
unsigned long esp;
unsigned long I_Param;
unsigned long I_Icon;
};
#ifdef OPTVARCONST
struct LVIC{
idrec *rec;
// int blocks;
int typevar;
int contype; //⨯ ᮤ¥à¦¨¬®£®
union{
long number;
long long lnumber;
double dnumber;
float fnumber;
};
};
struct BLVIC
{
int sizevic;
LVIC *listvic;
};
#endif
#define SIZEIDREG 256
#define NOINREG 8
#define SKIPREG 9
struct REGEQVAR
{
REGEQVAR *next;
char name[IDLENGTH];
unsigned char razr;
};
struct REGISTERSTAT
{
union{
REGEQVAR *next;
#ifdef OPTVARCONST
BLVIC *bakvic;
#endif
};
union{
char id[SIZEIDREG];
void *stringpar;
unsigned long number;
};
unsigned char type;
unsigned char razr;
};
struct SAVEREG
{
unsigned int size; //à §¬¥à ¯ ¬ï⨠¤«ï ॣ¨áâ஢
unsigned char all; //¢á¥ ॣ¨áâàë
unsigned char reg[8]; //ª àâ  à¥£¨áâ஢
};
struct SAVEPAR
{
unsigned char ooptimizespeed;
unsigned char owarning;
unsigned char odbg;
unsigned char odosstring;
unsigned char ouseinline;
unsigned char oam32; // ०¨¬ 32 ¡¨â­®©  ¤à¥á æ¨¨
unsigned char oalignword;
unsigned char oAlignCycle; //¢ëà ¢­¨¢ âì ­ ç «  横«®¢
unsigned char oidasm; // áᥬ¡«¥à­ë¥ ¨­áâàãªæ¨¨ áç¨â âì ¨¤¥­â¨ä¨ª â®à ¬¨
int ooptnumber;
int odivexpand;
unsigned char ooptstr; //®¯â¨¬¨§ æ¨ï áâப®¢ëå ª®­áâ ­â
unsigned char ochip;
int oaligncycle;
unsigned char ouselea;
unsigned char oregoverstack;
};
struct COM_MOD
{
COM_MOD *next;
unsigned char *input; /* dynamic input buffer */
unsigned int endinptr; /* end index of input array */
unsigned int inptr; /* index in input buffer */
unsigned int inptr2; /* index in input buffer */
unsigned int linenumber;
unsigned int currentfileinfo;
int numparamdef; //ç¨á«® ¯ à ¬¥â஢ ¢ ⥪ã饬 define
char *declareparamdef; //ᯨ᮪ ®¡ê¥­ëå ¯ à ¬¥â஢ define
char *paramdef; //ᯨ᮪ ­®¢ëå ¯ à ¬¥â஢
int freze; //ä« £ § ¯à¥é¥­¨ï 㤠«¥­¨ï áâàãªâãàë
};
struct LISTRELOC {
unsigned int val;
};
struct LISTFLOAT
{
union{
float fnum;
double dnum;
unsigned long num[2];
};
int type;
unsigned int ofs;
};
struct LILV
{
unsigned int ofs;
int size;
localrec *rec;
};
struct WARNACT
{
void (*fwarn)(char *str,unsigned int line,unsigned int file);
unsigned char usewarn;
};
+829
View File
@@ -0,0 +1,829 @@
#define _SWITCH_
#include "tok.h"
extern int lastcommand; //¯®á«¥¤­¨© ®¯¥à â®à ¢ ¡«®ª¥
#define MAXCASE 1024
FSWI *swtables; //â ¡«¨æ  ¨­ä®à¬ æ¨© ®¡ switch
int numswtable=0; //ç¨á«® ¡«®ª®¢ ¢ í⮩ â ¡«¨æ¥
char mesSWITCH[]="SWITCH";
char mesCASE[]="CASE";
int numexpandcase;
int numberbreak=0;
void CheckJmpSW(int line,int endsw,int startsw,int shortjmp,char *mes)
{
int size=startsw-endsw;
if(shortjmp==FALSE){
if((unsigned int)size<128)warningjmp(mes,line);
if(am32==FALSE)*(unsigned short *)&output[endsw-2]=(unsigned short)size;
else *(unsigned long *)&output[endsw-4]=(unsigned long)size;
}
else{
if((unsigned int)size>127)jumperror(line,mes);
output[endsw-1]=(unsigned char) size;
}
}
void CmpRegNum(int tokr,unsigned long value,int reg)
{
if(tokr!=r8){
op66(tokr); //CMP EAX,val
if(value==0){
op(0x85);
op(0xC0+reg*9); //test AX,AX
}
else{
if(short_ok(value,tokr==r32?TRUE:FALSE)){
op(0x83);
op(0xF8+reg);
op(value);
}
else{
if(reg==0)op(0x3D);
else{
op(0x81);
op(0xF8+reg);
}
tokr==r32?outdword(value):outword(value);
}
}
}
else{ //CMP AL,val
if(value==0){
op(0x84);
op(0xC0+reg*9);
}
else{
if(reg==0)op(0x3c);
else{
op(0x80);
op(0xF8+reg);
}
op(value);
}
}
}
int ScanSwitch(int *numcase,ISW *caseinf,COM_MOD *startmod)
{
unsigned char dcha;
int dtok,line,oinptr,i,otok2;
//new
unsigned char *oinput;
int oendinptr;
ITOK otok;
int retcode=TRUE;
dtok=tok;
otok=itok;
otok2=tok2;
line=linenum2;
dcha=cha2;
oinptr=inptr=inptr2;
cha=cha2;
//new
oinput=input;
oendinptr=endinptr;
if(startmod!=cur_mod){
COM_MOD *pmod=cur_mod;
while(pmod->next!=startmod){
pmod=pmod->next;
}
input=pmod->input;
inptr=pmod->inptr;
endinptr=pmod->endinptr;
cha=input[inptr];
inptr++;
}
if(SkipParam()){
FastTok(0);
if(tok!=tk_openbrace){
SwTok(tk_openbrace);
retcode=FALSE;
}
else{
for(i=1;i!=0;){
FastTok(1);
if(tok==tk_question)CheckDir();
switch(tok){
case tk_eof:
unexpectedeof();
retcode=FALSE;
i=0;
break;
case tk_openbrace: i++; break;
case tk_closebrace: i--; break;
case tk_id:
case tk_case:
case tk_CASE:
if(i==1){
if(stricmp(itok.name,"case")==0){
inptr2=inptr;
cha2=cha;
linenum2=linenumber;
(caseinf+*numcase)->postcase=(itok.name[0]=='c'?FALSE:TRUE);
nexttok();
if(tok==tk_number||(tok==tk_minus&&tok2==tk_number)){
if(*numcase==MAXCASE){
preerror("Many to use <case>");
retcode=FALSE;
}
else{
unsigned long val=doconstlongmath();
for(int j=0;j<*numcase;j++){
if(val==(caseinf+j)->value){
preerror("Duplicate 'case'");
retcode=FALSE;
break;
}
}
(caseinf+*numcase)->value=val;
if(tok==tk_multipoint){
(caseinf+*numcase)->type=startmulti;
nexttok();
val=doconstlongmath();
numexpandcase+=val-(caseinf+*numcase)->value-1;
if(val<(caseinf+*numcase)->value){
preerror("The first value 'case' should be smaller");
retcode=FALSE;
}
*numcase=*numcase+1;
(caseinf+*numcase)->type=endmulti;
(caseinf+*numcase)->value=val;
(caseinf+*numcase)->postcase=(caseinf+*numcase-1)->postcase;
}
else (caseinf+*numcase)->type=singlcase;
*numcase=*numcase+1;
}
}
else{
numexpected();
retcode=FALSE;
}
inptr=inptr2;
cha=cha2;
}
}
break;
}
}
}
}
if(retcode){ //¥á«¨ ­¥ ­ ©¤¥­® ®è¨¡®ª
tok=dtok;
itok=otok;
linenum2=line;
cha2=dcha;
inptr2=oinptr;
tok2=otok2;
}
else{
inptr2=inptr;
cha2=cha;
linenum2=linenumber;
}
//new
input=oinput;
endinptr=oendinptr;
return retcode;
}
void doswitch()
{
ISW *caseinf;
int numcase=0,reg=AX,mode=0;
unsigned int endsw,defaul=0,tokr,endsw2=0;
int shortjmp=(tok==tk_switch?FALSE:TRUE);
int sline=linenumber;
REGISTERSTAT *bakregstat,*changeregstat;
char *ofsstr=NULL;
//new
COM_MOD *startmod=cur_mod;
unsigned char oinline=useinline;
#ifdef OPTVARCONST
ITOK otok;
int swvar=FALSE;
unsigned long numbervar;
int numrm;
int nonum;
#endif
useinline=0;
caseinf=(ISW *)MALLOC(sizeof(ISW)*MAXCASE); //¡«®ª ¤«ï ¨­ä® ® case
numexpandcase=0;
uptdbr(/*TRUE*/);
getoperand();
char signflag=0;
expecting(tk_openbracket);
switch(tok){
case tk_intvar:
signflag=1;
goto dint;
case tk_int:
signflag=1;
case tk_word:
getoperand();
case tk_wordvar:
case tk_reg:
dint:
tokr=r16;
break;
case tk_charvar:
signflag=1;
goto dchar;
case tk_char:
signflag=1;
case tk_byte:
getoperand();
case tk_bytevar:
case tk_beg:
dchar:
tokr=r8;
break;
case tk_long:
signflag=1;
case tk_dword:
getoperand();
goto dlong;
case tk_qword:
getoperand();
goto qword;
case tk_floatvar:
case tk_longvar: signflag=1;
case tk_dwordvar:
case tk_reg32:
dlong:
tokr=r32;
break;
case tk_doublevar: signflag=1;
case tk_qwordvar:
qword:
tokr=r64;
break;
case tk_openbracket:
nexttok();
if(tok>=tk_char&&tok<=tk_double){
tokr=typesize(tok);
switch(tok){
case tk_double:
case tk_float:
case tk_char:
case tk_int:
case tk_long:
signflag=1;
}
}
nexttok();
expectingoperand(tk_closebracket);
break;
default:
tokr=(am32+1)*2;
break;
}
#ifdef OPTVARCONST
if(tok>=tk_charvar&&tok<=tk_dwordvar&&tok2==tk_closebracket){
otok=itok;
swvar=TRUE;
}
#endif
if(ScanSwitch(&numcase,caseinf,startmod)){
int i;
unsigned int sizetab; //à §¬¥à â ¡«¨æë
unsigned long min=0xffffffff,max=0;
unsigned int size0=0,size1;
int reg0=0,svop=0;
long smin=0x7fffffff,smax=-0x7fffffff;
unsigned int size2=0;
unsigned oaddESP=addESP;
if(numcase>2){
if(!optimizespeed){
if((am32==FALSE&&tokr==r32)||(am32&&tokr==r16))size0=numcase;
else if(tokr==r8)size0=numcase*2;
if((tok==tk_beg||tok==tk_reg||tok==tk_reg32)&&tok2==tk_closebracket)
reg0=itok.number; //¯à¥¤¯®« £ ¥¬ë© ॣ¨áâà ¬¥â®¤  0
}
for(i=0;i<numcase;i++){ //à áç¥â à §¬¥à  ¯® ¬¥â®¤ã 0
if((caseinf+i)->value>max)max=(caseinf+i)->value;
if((caseinf+i)->value<min)min=(caseinf+i)->value;
if((long) (caseinf+i)->value>smax)smax=(caseinf+i)->value;
if((long) (caseinf+i)->value<smin)smin=(caseinf+i)->value;
if((!optimizespeed)&&tokr!=r8){
if((caseinf+i)->value==0)size0+=2;
else if((caseinf+i)->value<128)size0+=3;
else{
size0+=(reg0==0?3:4);
if(am32)size0+=2;
}
}
if(i!=0){
if((caseinf+i)->postcase==0)size0+=(am32==FALSE?(chip<3?5:4):6);
else size0+=2;
}
}
if((unsigned int)(smax-smin)<(max-min)){
max=smax-smin;
svop=8;
min=-smin;
}
else{
smin=min;
max-=min;
}
sizetab=max+1; //à §¬¥à â ¡«¨æë ¤«ï ¬¥â®¤  1
if(sizetab<0x1000000&&(!(am32==FALSE&&tokr==r32))){
if(optimizespeed){
if((unsigned int)(sizetab/numcase)<(unsigned int)(am32==FALSE?3:4)){
mode=1;
if(am32==FALSE)reg=BX;
/* ¥á«¨ ®â­®è¥­¨¥ ç¨á«  í«¥¬¥­â®¢ ¢ â ¡«¨æ¥ ª ç¨á«ã case ¬¥­¥¥
3 ¤«ï 16-¡¨â­®£® ०¨¬  ¨ 4 ¤«ï 32-¡¨â­®£®, â® ¡¥à¥âáï ¬¥â®¤ 1 */
}
}
else{ //¢ëç¨á«¨âì à §¬¥à ¤«ï ®¯â¨¬¨§ æ¨¨ ¯® à §¬¥àã
if(shortjmp)size0+=2;
else size0+=(am32==FALSE?(chip<3?5:4):6);
size1=sizetab*(am32==FALSE?2:4);
size1+=(max<128?3:am32==FALSE?4:6)+(shortjmp==FALSE?(chip<3?5:4):2);
if(max>127&&reg0==AX)size1--;
if(min!=0){
if(min==1)size1++;
else if(min==2&&(!optimizespeed))size1+=2;
else if(min<128)size1+=3;
else{
size1+=(am32==FALSE?4:6);
if(reg0==AX)size1--;
}
}
size1+=(am32==FALSE?6:9);
if(am32){
if(tokr!=r32)size1+=3;
if(shortjmp)size1-=2;
}
else{
if(reg0!=BX)size1+=2;
}
//¢ë¡®à ¬¥â®¤  á ¬¥­ì訬 à §¬¥à®¬
if(size1<=size0){
mode=1;
size0=size1;
if(am32==FALSE)reg=BX;
}
}
}
}
if(numcase>9&&(!optimizespeed)){
// à áç¥â ¬¥â®¤  2
size2=numcase+numexpandcase;
switch(tokr){
case r8:
if(am32)size2=size2*5;
else size2=size2*3+8;
break;
case r16:
if(am32)size2=size2*6+1;
else size2=size2*4+8;
break;
case r32:
if(am32)size2=size2*8;
else size2=size2*6+9;
break;
}
size2+=29;
//¢ë¡®à ¬¥â®¤  á ¬¥­ì訬 à §¬¥à®¬
if(size2<=size0)mode=2;
}
// printf("Num CASE %d Metod 0 size=%d. Metod 1 size=%d. Metod 2 size=%d\n",numcase,size0,size1,size2);
if(mode==2){
reg=AX;
reg0=idxregs[1];
if((!am32)||(am32&&(!((tok==tk_beg||tok==tk_reg||tok==tk_reg32)&&tok2==tk_closebracket)))){
if(tokr==r8)doalmath(signflag,&ofsstr);
else do_e_axmath(signflag,tokr,&ofsstr);
}
else{
reg=itok.number;
if(reg==reg0)reg0=idxregs[0];
nexttok();
}
ClearReg(reg);
ClearReg(reg0);
warningreg(regs[am32][reg0]);
+32
View File
@@ -0,0 +1,32 @@
/* some defines for extracting instruction bit fields from bytes */
#define MOD(a) (((a)>>6)&3)
#define REG(a) (((a)>>3)&7)
#define RM(a) ((a)&7)
#define SCALE(a) (((a)>>6)&3)
#define INDEX(a) (((a)>>3)&7)
#define BASE(a) ((a)&7)
typedef union{
struct{
unsigned short ofs;
unsigned short seg;
}w;
unsigned long dword;
}WORD32;
+793
View File
@@ -0,0 +1,793 @@
//void PrintMem(void *mem);
//void CheckMem();
#include "port.h"
#include <time.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>
//#define DEBUGMODE
#define OPTVARCONST // Çàìåíà ïåðåìåííûõ ñîíñòàíòàìè
#define MAXNUMPATH 16
#define DATATYPES 9 // number of data types
#define MAXDATA 65500 /* output run file buffer 65500 bytes */
#define DYNAMIC_USED 0
#define DYNAMIC 1
#define NOT_DYNAMIC 2 /* flag value specifing a non-dynamic proc */
#define DYNAMIC_SET 3
#define FILENAMESIZE 80
#define SHORTMAX 127 // largest 8 bit signed value
#define SHORTMIN -128 // smallest 8 bit signed value
#define IDLENGTH 65 /* length of significance of IDS + NULL, therefore 32 */
#define STRLEN 2048 /* length of string token holder */
#define MAXPOSTS 2048
#define SIZEBUF 16384
#define ID2S 6*DATATYPES
#define MAXSYSCOM 25
#define NUMNUM 32
#define NUMNUM64 64
#define OBJECTALIGN 4096 //âûðàâíèâàíèå ñåêöèé â ïàìÿòè
#define WARNCOUNT 15 //÷èñëî ðàçëè÷íûõ ïðåäóïðåæäåíèé
#define ver1 0
#define ver2 239
#define BETTA
#ifdef BETTA
#define betta " b26"
#else
#define betta ""
#endif
#include "const.h"
#include "struct.h"
#ifdef _UNIX_
#ifndef stricmp
#define stricmp strcasecmp
#endif
#endif
#ifdef _UNIX_
#ifndef O_BINARY
#define O_BINARY 0
#endif
#endif
extern unsigned char FixUpTable; //çàïðåòèòü ñîçäàíèå òàáëèöè Fix UP for Windows
extern unsigned char WinMonoBlock;
extern unsigned int currentfileinfo;
#if !defined (_MAIN_)
extern char fobj; //ïðèçíàê ãåíåðàöèè obj
extern char *rawfilename;
extern struct tm timeptr;
extern char outext[];
extern unsigned char compilerstr[]; /* compiler ID string */
extern LISTCOM *listcom;
extern unsigned char gwarning;
extern EWAR wartype,errfile;
extern int numfindpath;
extern char *findpath[];
extern char bufpath[];
extern unsigned int startptr;
extern unsigned char wconsole;//ïðèçíàê ãåíåðàöèè êîíñîëüíîãî ïðèëîæåíèÿ windows
extern unsigned long ImageBase;
extern int numexport;
extern struct listexport *lexport;
extern unsigned char optstr; //îïòèìèçàöèÿ ñòðîêîâûõ êîíñòàíò
extern unsigned char crif; //check reply include file
extern unsigned char idasm; //àññåìáëåðíûå èíñòðóêöèè ñ÷èòàòü èäåíòèôèêàòîðàìè
extern char modelmem;
extern char *stubfile;
extern char comsymbios;
extern unsigned char sobj;
extern short dllflag;
extern char *bufstr; //áóôåð äëÿ ñòðîê èç ïðîöåäóð
extern int sbufstr; //íà÷àëüíûé ðàçìåð ýòîãî áóôåðà
extern unsigned char wbss; //ïîñò ïåðåìåííûå â îòäåëüíóþ ñåêöèþ
extern int numrel; //÷èñëî ýëåìåíòîâ â òàáëèöå ïåðåìåùåíèé
extern unsigned char usestub;
extern char *winstub;
extern unsigned char dpmistub;
extern unsigned char useordinal;
extern int startupfile;
extern int alignproc,aligncycle;
extern FILE *hout;
extern unsigned char useDOS4GW;
extern unsigned char use_env; //ïåðåìåííàÿ îêðóæåíèÿ
extern unsigned char clearpost;
extern unsigned char uselea;
extern unsigned char regoverstack;
extern unsigned char shortimport;
extern char *namestartupfile;
extern unsigned char useinline;
extern unsigned char ocoff;
extern unsigned char ESPloc;
#endif
extern unsigned char string[STRLEN],string2[STRLEN+20];
#if !defined (_TOKC_)
extern unsigned int outptrsize; //ðàçìåð âûõîäíîãî áóôåðà
extern unsigned char string3[STRLEN];
extern char *BackTextBlock; //áóôåð äëÿ ïåðåíåñåííîãî òåêñòà
extern int SizeBackBuf;
extern unsigned char cha;
extern unsigned int inptr;
extern unsigned char AlignProc;
extern unsigned int secondcallnum; //# of different second calls and labels
extern unsigned char header;
extern unsigned char killctrlc;
extern unsigned char optimizespeed;
extern unsigned char alignword;
extern unsigned int outptr,outptrdata;
extern unsigned char comfile;
extern unsigned char chip;
extern unsigned char dos1,dos2;
extern unsigned int stacksize;
extern int error;
extern unsigned char *output,*outputdata;
extern unsigned char notdoneprestuff;
extern unsigned long postsize;
extern unsigned int posts;
extern postinfo *postbuf;
extern int maxposts;
extern unsigned char cpu;
extern long runfilesize;
extern unsigned char *input; /* dynamic input buffer */
extern unsigned int endinptr; /* end index of input array */
extern unsigned int localsize,paramsize;
extern char endoffile;
extern unsigned int current_proc_type; /* current procedure type */
extern unsigned char aligner;
extern unsigned int alignersize;
extern unsigned int datasize;
extern unsigned char warning;
extern unsigned int startStartup;
extern unsigned char useStartup;
extern unsigned int endStartup;
extern unsigned char notpost;
extern unsigned char am32; // ðåæèì 32 áèòíîé àäðåñàöèè
extern unsigned int externnum;
extern unsigned char FastCallApi; //ðàçðåøèòü áûñòðûé âûçîâ API ïðîöåäóð
extern unsigned char FixUp; //Äåëàòü ëè òàáëèöó ïåðåìåùåíèé
extern void *liststring; //öåïî÷êà èíôîðìàöèîííûõ áëîêîâ î ñòðîêàõ
extern struct FILEINFO *startfileinfo;
extern unsigned int totalmodule;
extern int retproc;
extern unsigned char splitdata; //îòäåëèòü äàííûå îò êîäà
extern unsigned char AlignCycle; //âûðàâíèâàòü íà÷àëà öèêëîâ
extern char param[]; //áóôåð äëÿ ïàðàìåòðîâ ïðîöåäóðû
extern unsigned char dynamic_flag; //ôëàã îáðàáîòêè äèíàìè÷åñêèõ ýëåìåíòîâ
extern unsigned char setzeroflag; //îïåðàöèÿ ìåíÿåò zero flag
extern unsigned char insertmode;
extern unsigned int numblocks; //íîìåð âëîæåííîãî áëîêà
extern unsigned char notunreach;
extern idrec *staticlist;
extern unsigned int procedure_start; /* address of start of procedure */
extern int lastcommand; //ïîñëåäíèé îïåðàòîð â áëîêå
extern unsigned int initBP;
extern unsigned char fstatic;
//extern int sizestack; //ðàçìåð íå êîìïåíñèðîâàííûõ ïàðàìåòðîâ ôóíêöèé
extern unsigned char addstack;
extern unsigned long addESP; //äîáàâêà ñòåêà
extern unsigned char blockproc; //èäåòðàçáîðêà áëîêà ôóíêöèè
extern treelocalrec *tlr; //öåïî÷êà ëîêàëüíûõ áëîêîâ
extern treelocalrec *btlr; //öåïî÷êà èñïîëüçîâàíûõ ëîêàëüíûõ áëîêîâ
extern int returntype; /* return type, (void, byte, word, ...) */
#endif
extern int tok,tok2;
#if !defined (_TOKR_)
extern char useasm;
extern short ofsmnem[];
extern unsigned char asmMnem[];
extern char asmparam;
#endif
#if !defined (_TOKA_)
extern unsigned char id[];
extern short idofs[];
extern char id2[ID2S][9];
extern char regs[2][8][4];
extern char begs[8][3];
extern char segs[8][3];
extern struct idrec *treestart;
extern unsigned int linenum2;
extern unsigned int inptr2;
extern unsigned char cha2;
extern char displaytokerrors;
extern char *bufrm;
extern UNDEFOFF *undefoffstart;
extern DLLLIST *listdll;
extern char skipfind;
extern struct structteg *tegtree; //ãëîáàëüíûé ñðèñîê òåãîâ
extern struct structteg *ltegtree; //ëîêàëüíûé ñðèñîê òåãîâ
//extern struct idrec *lstructlist; //ñïèñîê ëîêàëüíûõ ñòðóêòóð
extern struct idrec *definestart;
extern SINFO strinf;
extern char *startline, *endinput;
extern ITOK structadr;
extern int scanlexmode;
extern COM_MOD *cur_mod;
extern unsigned char bytesize;
#endif
#if !defined (_TOKE_)
extern int maxerrors;
extern char mesmain[];
extern int endifcount;
extern int sysstack;
extern int sysnumcom;
extern int syscom;
extern unsigned char fargc;
extern unsigned char jumptomain;
extern unsigned int startptrdata;
extern unsigned char parsecommandline;
extern unsigned int romsize;
extern unsigned char resizemem;
extern unsigned int resizesizeaddress;
extern unsigned int stackstartaddress;
extern int dataromstart,dataromsize;
extern unsigned char startuptomain;
extern unsigned char dosstring;
extern unsigned int numdomain; //÷èñëî ïðîöåäóð çàïóñêàåìûõ äî main
extern char *domain; //áóôåð èìåí ïðîöåäóð çàïóñêàåìûõ äî main
extern unsigned char usedirectiv; //èäåò îáðàáîòêà äèðåêòèâû
extern unsigned char atex;
extern unsigned int postnumflag; //ôëàã ïîñëåäíåãî èäåíòèôèêàòîðà â âû÷èñëåíèè íîìåðà
extern unsigned char sdp_mode; //ðåæèì ïðèíóäèòåëüíîé âûãðóçêè äèíàìè÷åñêèõ ïðîöåäóð
extern int calcnumber;
extern int strpackdef;
extern int strpackcur;
#ifdef DEBUGMODE
extern int debug;
#endif
extern int dirmode;
#endif
extern ITOK itok,itok2,ptok;
#if !defined (_TOKB_)
extern int divexpand;
extern int optnumber;
extern char *badadr;
extern LISTFLOAT *floatnum; //ñïèñîê float êîíñòàíò
extern unsigned int numfloatconst;
extern unsigned int ofsfloatlist;
#endif
extern unsigned int linenumber;
#if !defined (_DEBUG_)
extern unsigned int ooutptr;
extern unsigned int outputcodestart;
extern unsigned char dbg,dbgact;
extern unsigned int pdbg; // number of post entrys
#endif
#if !defined (_OUTPE_)
extern unsigned long ImageBase;
extern unsigned long vsizeheader; //âèðòóàëüíûé ðàçìåð çàãîëîâêà.
extern int filingzerope;
extern unsigned long FILEALIGN; // âûðàâíèâàíèå ñåêöèé â ôàéëå
#endif
#if !defined (_ERRORS_)
extern WARNACT wact[];
extern unsigned char mapfile;
#endif
#if !defined (_DISASM_)
extern unsigned char seg_size; /* default size is 16 */
extern unsigned long instruction_offset;
#endif
#if !defined (_SWITCH_)
extern FSWI *swtables;
extern int numswtable;
#endif
#if !defined (_CLASS_)
extern structteg *searchteg;
extern int destructor;
#endif
#if !defined (_RES_)
extern unsigned char *resbuf;
extern unsigned int curposbuf;
extern int numres; //òåêóùåå ÷èñëî ðåñóðñîâ
extern int numstrtbl;
#endif
extern unsigned char idxregs[5];
// start of procedure pre-definitions
/*-----------------19.09.98 17:18-------------------
Ôóíêöèè îïðåäåëåííûå â main.cpp
--------------------------------------------------*/
void *MALLOC(unsigned long size);
void *REALLOC(void *block,unsigned long size);
void IncludePath(char *buf);
int SelectComand(char *pptr,int *count);
void strbtrim(char *st);
unsigned long Align(unsigned long size,unsigned long val);
int AlignCD(char segm,int val); //âûðàâíÿòü äàííûå èëè êîä
void ErrOpenFile(char *str);
unsigned int EntryPoint();
long CopyFile(FILE *in,FILE *out);
unsigned long getnumber(unsigned char *buf);
void addinitvar();
FILE *CreateOutPut(char *ext,char *mode);
void SetLST(unsigned char neg);
void AddUndefClassProc();
int MakeCoff();
void setdindata(idrec *ptr,int i);
/*-----------------08.03.98 20:10-------------------
Ôóíêöèè îïðåäåëåíûå â toka.c
--------------------------------------------------*/
void CheckAllMassiv(char *&buf,int sizeel,SINFO *strc,ITOK *ctok=&itok,int reg1=idxregs[0],int reg2=idxregs[1]);
void docalls(); //attempt to declare undefs from library and dynamic proc's
int FindOff(unsigned char *name,int base);
void nextchar(); //îïð â toke
void nexttok();
void whitespace(); //ïðîïóñê íçíà÷àùèõ ñèìâîëîâ
int searchtree(ITOK *itk4,int *tk4,unsigned char *strin4);
void AddUndefOff(int segm,char *ostring);
void InitStruct(); //èíèöèàëèçèðîâàòü ñòðóêòóðó
unsigned long LocalStruct(int flag,int *localline); //èíèöèàëèçèðîâàòü ëîêàëüíóþ ñòðóêòóðó
struct structteg * FindTeg(int Global,char *name=itok.name); //íàéòè òåã
void dostruct();
int FastSearch(unsigned char *list,short *ofs,int type,char *str);
void FindDirectiv();
unsigned long long scannumber(int *rm);
void FastTok(int mode,int *tok4=&tok,ITOK *itok4=&itok);
unsigned int initstructvar(structteg *tteg,int numel);
unsigned int ScanTok3();
int GetVarSize(int var);
void compressoffset(ITOK *thetok);
void AddDynamicList(idrec *ptr);
int CheckUseAsUndef(unsigned char *name);
int CheckMassiv(char *&buf,int sizeel,int treg,int *idx=0,int *base=0,long *num=0);
void AutoDestructor();
void dodelete();
void donew();
void RunNew(int size);
int CallDestructor(structteg *searcht);
int FindUseName(char *name); //ïîèñê ññûëîê íà òåêóùåå èìÿ
void DateToStr(char *buf);
int CalcRm16(int base,int idx);
int CheckDef();
void SetNewStr(char *name);
struct structteg *CreatTeg(int Global,int useunion=FALSE,int noname=FALSE);
void InitStruct2(unsigned int flag,structteg *tteg);
unsigned long LocalStruct2(int flag,int *localline,int binptr,char bcha,structteg *tteg);
void retoldscanmode(int mode);
void ExpandRm(int rm,int sib,int *zoom,int *base,int *idx);
void BackMod();
/*-----------------08.03.98 21:45-------------------
Ôóíêöèè îïðåäåëåíûå â tokb.h
--------------------------------------------------*/
void AddReloc(int segm=itok.segm);
int doalmath(int sign,char **ofsstr);
int do_e_axmath(int sign,int razr,char **ofsstr);
void getintoal(int gtok,ITOK *gstok,char *&gbuf,SINFO *gstr); /* AH may also be changed */
void getinto_e_ax(int sign,int gtok,ITOK *gstok,char *&gbuf,SINFO *gstr,int razr,int useAX=FALSE);
int doeaxfloatmath(int itreturn=tk_reg32,int reg=AX,int addop=0);
int dobytevar(int sign,int terminater=tk_semicolon); // byte, char
int do_d_wordvar(int sign,int razr,int terminater=tk_semicolon); /* signed or unsigned 16 bit memory variable */
int doreg_32(int reg,int razr,int terminater=tk_semicolon);
void doseg(int seg);
int caselong(unsigned long val);
int dobeg(int beg,int terminater=tk_semicolon);
void dobegmath(int beg); /* math done is on all begs except AL */
void doregmath_32(int reg,int razr,int sign,char **ofsstr,int i=0); /* math done is on all regs except AX */
int getintobeg(int beg,char **ofsstr);
int getintoreg_32(int reg,int razr,int sign,char **ofsstr,int useloop=TRUE); /* get into word reg (except AX) with enum */
void outaddress(ITOK *outtok);
void FloatToNumer(int addop=0);
int dofloatvar(int addop=0,int retrez=tk_floatvar,int terminater=tk_semicolon);
void fwait3();
void AddFloatConst(long long fnumber,int type=tk_float);
void setwordpost(ITOK *); /* for post word num setting */
void setwordext(long *id);
void RegMulNum(int reg,unsigned long num,int razr,int sign,int *expand,int flag);
int OnlyNumber(int sign);
void PopSeg(int seg);
void PushSeg(int seg);
void MovRegNum(int razr,int relocf,unsigned long number,int reg);
int CheckMinusNum();
int getintoreg(int reg,int razr,int sign,char **ofsstr);
void dobits();
void bits2reg(int reg,int razr);
void getoperand(int reg=BX);
int optnumadd(unsigned long num,int reg,int razr,int vop);
int MultiAssign(int razr,int usereg,int npointr=0);
void CheckInitBP();
void RestoreBP();
void fistp_stack(int addop=0);
void fld_stack(int size);
void fildq_stack();
void cpointr(int reg,int numpointr);
int doqwordvar(int terminater=tk_semicolon); //64 bit memory variable
void doreg64(int reg,int terminater=tk_semicolon);
void doregmath64(int reg);
void getintoreg64(int reg);
void float2stack(int num);
void dofloatstack(int num);
/*-----------------08.03.98 20:59-------------------
Ôóíêöèè îïðåäåëåíûå â tokc.c
--------------------------------------------------*/
localrec * addlocalvar(char *str,int tok,unsigned int num,int addmain=FALSE);
int addpoststring(int segm=CS,int len=itok.number, int term=itok.flag); /* add a string to the post queue */
void define_locallabel();
unsigned int dofrom();
unsigned int doextract();
int doparams(); /* do stack procedure parameter pushing */
int swapparam();
long updatetree();
void addacall(unsigned int idnum,unsigned char callkind);
idrec * addtotree(char *keystring);
void compilefile(char *filename,int firstflag);
void convert_returnvalue(int expectedreturn,int actualreturn);
int doid (char uppercase,int expectedreturn);
void insert_dynamic(int insert=FALSE);
int macros(int expectedreturn);
void op(int byte);
void opd(int byte); //âûâîä áàéòà â ñåãìåíò äàííûõ
void op66(int ctoc);
int op67(int ctok);
void outqwordd (unsigned long long);
void outqword (unsigned long long);
void outdwordd (unsigned long);
void outdword (unsigned long);
void outwordd (unsigned int);
void outword (unsigned int);
void outseg(ITOK *outtok,unsigned int locadd);
int procdo(int expectedreturn);
int updatecall(unsigned int which,unsigned int where,unsigned int top);
void AddBackBuf(int,char);
void CharToBackBuf(char c);
void missingpar(char *name="");
int CheckCodeSize();
void CheckPosts();
int doanyundefproc(int jumpsend=FALSE);
int doanyproc(int jumpsend=FALSE);
void killpost(unsigned int poz);
char *BackString(char *str);
DLLLIST *FindDLL();
long initglobalvar(int type,long elements,long ssize,char typev);
int typesize(int vartype);
void dopoststrings();
char *dynamic_var();
void uptdbr(/*int usesw=FALSE*/);
void docommand(); /* do a single command */
//int CheckStopBlock();
void MakeBreak(unsigned char typeb);
void SetBreakLabel();
void SetContinueLabel();
void CheckDir();
int SkipParam();
long GetBitMask(int ofs,int size);
void AddPostData(unsigned int loop);
//void NotPostUnion();
unsigned int initparamproc();
void CorrectStack(unsigned int num);
int testInitVar(int checkaldef=TRUE);
void declareparamreg();
void declareparamstack(); /* declare procedure parameters */
void declareparams(); /* declare procedure parameters */
void declarelocals(int mode,int finline=FALSE); /* declare locals */
void doblock2();
void doblock();
void setreturn();
int CidOrID();
void dynamic_proc();
void setproc(int defflag);
void define_procedure();
void doregparams();
int CheckDeclareProc();
int loadfile(char *filename,int firstflag);
void RestoreStack();
void IsUses(idrec *rec);
int SkipBlock();
void declareanonim();
void declareunion();
void startblock();
void endblock();
void LLabel();
void AddApiToPost(unsigned int num);
/*-----------------08.03.98 20:06-------------------
ôóíêöèè îïðåäåëåíû â toke.c
--------------------------------------------------*/
void jumperror(unsigned int line,char *type);
void beep(); /* beep for any internal errors */
void codeexpected();
void datatype_expected(int type=0);
unsigned long doconstdwordmath();
signed long doconstlongmath();
long doconstfloatmath();
void dwordvalexpected();
void idalreadydefined();
void illegalfloat();
void internalerror (char *str);// serious internal compiler error message
void maxoutputerror();
void maxwordpostserror();
void nextseminext();
void numexpected(int type=0);
void operatorexpected();
void seminext();
void shortjumptoolarge();
void stringexpected();
void swaperror();
void SwTok(int want);
void unabletoopen(char *str);
void unexpectedeof();
void unknowncompop();
void valueexpected();
void varexpected(int type);
void wordvalexpected();
int includeit(int type);
int includeproc();
int CheckMacros();
void tobigpost();
void expected (char ch);
int expecting(int want);
void outprocedure(unsigned char *array,unsigned int length);
void preerror(char *str);//error on currentline with line number and file name
void thisundefined(char *str,int next=TRUE);
void addconsttotree(char *keystring,long long constvalue,int type=tk_dword);
void directive();
void doenum();
void doprestuff(); //do initial code things, like resize mem, jump to main...
void searchvar(char *name,int err=1);
void expectingoperand(int want);
void InitDefineConst();
unsigned long long doconstqwordmath();
long long doconstdoublemath();
int calclongnumber(long *retnum,long number,int operand);
int calcqwordnumber(unsigned long long *retnum,unsigned long long number,int operand);
int calcdwordnumber(unsigned long *retnum,unsigned long number,int operand);
int calcfloatnumber(float *retnum,float number,int operand);
int calcdoublenumber(double *retnum,double number,int operand);
/*-----------------08.03.98 22:24-------------------
Ôóíêöèè îïðåäåëåíûå â tokr.c
--------------------------------------------------*/
void doasm(int next=FALSE);
int short_ok(long thenumber,int reg32=FALSE);
void callloc(long loc); /* produce CALL # */
void callloc0();
void cbw(void);
int GOTO();
void expecting2(int want);
unsigned char gotol(int faradd);
void jumploc(long loc); /* produce JUMP # */
void jumploc0();
void movsb(void);
void movsd(void);
void movsw(void);
void popes(); /* produce POP ES */
void pushds(); /* produce PUSH DS */
void pushss();
void ret(); /* produce RET */
void retf(); /* produce RETF */
void stosb(void);
void stosd(void);
void stosw(void);
void fwait();
void xorAHAH(void); /* produce XOR AH,AH */
void xorAXAX(void); /* produce XOR AX,AX */
void xorEAXEAX(void); /* produce XOR EAX,EAX */
void nextexpecting2(int want);
void tobedefined(int callkind,int expectedreturn);
void cwdq(int razr);
void Leave();
void CheckIP();
int iTest(int mode=0);
void ZeroReg(int reg, int razr);
int Push(ITOK *wtok=NULL);
/*-----------------08.08.00 22:50-------------------
errors.cpp
--------------------------------------------------*/
void warningstring();
void warningexpand();
void warningjmp(char *str2,int line=linenumber,int file=currentfileinfo);
void warningreg(char *str2);
void preerror3(char *str,unsigned int line,unsigned int file=currentfileinfo);// error message at a different than current line
void unableopenfile(char *name);
void tegnotfound();
void errstruct();
void warningdefined(char *);
void extraparam(char *name="");
void warningretsign();
void ErrWrite();
void ErrReadStub();
void warningnotused(char *name,int type);
void regBXDISIBPexpected();
void reg32expected(int type=0);
void InvOperComp();
void warningusenotintvar(char *name);
void warningdestroyflags();
void warningunreach();
void unuseableinput();
void redeclare(char *name);
void undefclass(char *name);
void badinfile(char *name);
void errorreadingfile(char *name);
void expectederror(char *str);
void unknowntype();
void unknownstruct (char *name,char *sname);
void unknowntagstruct (char *name);
void warninline();
void ZeroMassiv();
void bytevalexpected(int type);
void FindStopTok();
//void not_union_static();
extern void edpip(int num=0);
void waralreadinit(char *reg);
void waralreadinitreg(char *reg,char *reg2);
void OnlyComFile();
void warnsize();
void destrdestreg();
void qwordvalexpected();
void fpustdestroed();
void unknownobj(char *name);
void FindEndLex();
void fpu0expected();
void unknownpragma(char *name);
void warpragmapackpop();
void SkipBlock2();
void warreplasevar(char *name);
void warcompneqconst();
void warcompeqconst();
void warpointerstruct();
void warESP();
void waralreadinitvar(char *name,unsigned int num);
void warningprint(char *str,unsigned int line,unsigned int file);
void notexternfun();
void AddDataLine(char ssize/*,char typev*/);
void mapfun(int);
/*-----------------24.01.01 01:42-------------------
disasm.cpp
--------------------------------------------------*/
void undata(unsigned ofs,unsigned long len,unsigned int type);
void unassemble(unsigned long ofs);
/*-----------------25.01.01 23:02-------------------
debug.cpp
--------------------------------------------------*/
void AddLine(int SkipLine=FALSE);
void DoTDS();
void InitDbg();
void KillLastLine();
void AddDataNullLine(char ssize/* new!!! */,char *name=NULL);
void AddCodeNullLine(char *name=NULL);
void AddEndLine();
#ifdef DEBUGMODE
void printdebuginfo();
#endif
//void AddMainLine();
/*-----------------12.04.01 22:46-------------------
outpe
--------------------------------------------------*/
void CreatStub(char *name);
void CreatWinStub();
void ChSize(long size);
/*-----------------12.04.01 22:57-------------------
outle
--------------------------------------------------*/
int MakeLE();
int MakeMEOS();
int MakeBin32();
/*-----------------08.12.01 23:43-------------------
pointer
--------------------------------------------------*/
void dopointer();
void dovalpointer();
void getpointeradr(ITOK *gstok,char *&gbuf,SINFO *gstr,int numpointer,int razr,int reg=BX);
void dopointerproc();
/*-----------------09.12.01 00:28-------------------
new_type
--------------------------------------------------*/
void convert_type(int *sign,int *rettype,int *pointr,int reg=BX);
/*-----------------23.12.01 02:39-------------------
class
--------------------------------------------------*/
void doclassproc(unsigned int);
void AddThis();
/*-----------------27.01.02 23:39-------------------
res
--------------------------------------------------*/
void input_res();
int MakeRes(unsigned long ofsres,LISTRELOC **listrel);
void CreatStrTabRes();
/*-----------------14.04.03 21:31-------------------
optreg
--------------------------------------------------*/
void initregstat();
void deinitregstat();
void IDXToReg(char *name,int size,int reg);
int CheckIDXReg(char *name,int size,int reg);
void IDZToReg(char *name,int reg,int razr);
int CheckIDZReg(char *name,int reg,int razr);
void clearregstat(int regs=0);
void ConstToReg(unsigned long num,int reg,int razr);
void ClearReg(int reg);
int RegSwapReg(int reg1,int reg2,int razr);
char *GetLecsem(int stop1,int stop2=tk_eof,int type=-1);
REGISTERSTAT *BakRegStat();
void CopyRegStat(REGISTERSTAT *bak);
void KillVar(char *name);
void CompareRegStat(REGISTERSTAT *bak);
int RegToReg(int regd,int regs,int razr);
void GenRegToReg(int regd,int reds,int razr);
void GetEndLex(int stop1,int stop2=tk_eof,int type=-1);
int GetRegNumber(int reg,unsigned long *num,int razr);
int GetNumberR(int reg,unsigned long *num,int razr,unsigned long number);
void FreeStat(REGISTERSTAT *bak);
void AddRegVar(int reg, int razr,ITOK *itok4);
int GetRegVar(ITOK *itok4);
#ifdef OPTVARCONST
void CreateMainLVIC();
void KillMainLVIC();
void ClearLVIC();
int Const2Var(ITOK *itok4,long long num,int typenum);
void ClearVarByNum(ITOK *itok4);
int UpdVarConst(ITOK *itok4,long long num,int typenum,int operand);
void FreeGlobalConst();
int CheckRegToConst(int reg,ITOK *itok4,int razr);
int CheckUpdRegToConst(int reg,ITOK *itok4,int operand,int razr);
int SwapVarConst(ITOK *itok2,ITOK *itok4);
int SwapVarRegConst(int reg,ITOK *itok4,int razr);
int CheckConstVar(ITOK *itok4);
//int CheckConstVar2(ITOK *itok4,long long *num,int *typenum);
void CheckConstVar3(int *tok4,ITOK *itok4,int razr);
void Const2VarRec(LVIC *varconst);
#endif
#ifndef _REGOPT_
extern unsigned char optinitreg;
#ifdef OPTVARCONST
extern unsigned char replasevar;
extern LVIC *listvic;
#endif
#endif
/*-----------------------
libobj
-------------------------*/
void AddNameObj(char *name,int typefind,int type);
void AddObj();
#ifdef __NEWLEX__
void inittokn();
void doblockstart(char *);
#endif
/* end of TOK.H */
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff