format ELF section '.text' executable public _msys_draw_window _msys_draw_window: ;arg1 - xcoord ;arg2 - ycoord ;arg3 - xsize ;arg4 - ysize ;arg5 - workcolor ;arg6 - type ;arg7 - captioncolor ;arg8 - windowtype ;arg9 - bordercolor push ebp mov ebp,esp push ebx esi edi mov ebx,[ebp+8] shl ebx,16 mov bx,[ebp+16] mov ecx,[ebp+12] shl ecx,16 mov cx,[ebp+20] mov edx,[ebp+28] shl edx,24 add edx,[ebp+24] mov esi,[ebp+36] shl esi,24 add esi,[ebp+32] mov edi,[ebp+40] xor eax,eax int 0x40 pop edi esi ebx pop ebp ret public _msys_read_file _msys_read_file: ;arg1 - file name ;arg2 - file offset ;arg3 - size to read ;arg4 - data ;arg5 - temp buffer ;arg6 - file size push ebp mov ebp,esp xor eax,eax mov [file_struct.operation],eax mov eax,[ebp+12] mov [file_struct.offset],eax mov eax,[ebp+16] mov [file_struct.offset],eax mov eax,[ebp+20] mov [file_struct.offset],eax mov [file_struct.temp_buffer],temp_buffer mov edx,[ebp+8] call copy_file_name push ebx mov ebx,file_struct mov eax,58 int 0x40 mov ecx,[ebp+28] test ecx,ecx jz .no_file_size mov [ecx],ebx .no_file_size: pop ebx pop ebp ret copy_file_name: push esi edi cld mov edi,edx xor eax,eax xor ecx,ecx dec ecx repnz scasb not ecx mov edi,file_struct.path mov esi,edx rep movsb pop edi esi ret public _msys_write_file _msys_write_file: ;arg1 - file name ;arg2 - size ;arg3 - data push ebp mov ebp,esp xor eax,eax mov [file_struct.offset],eax inc eax mov [file_struct.operation],eax mov eax,[ebp+12] mov [file_struct.size],eax mov eax,[ebp+16] mov [file_struct.data],eax mov [file_struct.temp_buffer],temp_buffer mov edx,[ebp+8] call copy_file_name push ebx mov eax,58 mov ebx,file_struct int 0x40 pop ebx pop ebp ret public _msys_run_program _msys_run_program: ;arg1 - program name ;arg2 - parameters push ebp mov ebp,esp mov [file_struct.operation],16 xor eax,eax mov [file_struct.offset],eax mov [file_struct.data],eax mov eax,[ebp+12] mov [file_struct.param],eax mov [file_struct.temp_buffer],temp_buffer; mov edx,[ebp+8] call copy_file_name push ebx mov eax,58 mov ebx,file_struct int 0x40 pop ebx pop ebp ret public _msys_debug_out _msys_debug_out: ;arg1 - char to out push ebx mov ecx,[esp+8] mov ebx,1 mov eax,63 int 0x40 pop ebx ret section '.data' writeable section '.bss' writeable file_struct: .operation rd 1 .offset rd 1 .param: .size rd 1 .data rd 1 .temp_buffer rd 1 .path rb 1024 temp_buffer rb 4096