0,0 → 1,392 |
; |
; Port to KolibliOS |
; (jacekm.pl@gmail.com) |
; |
|
;B+ System header |
use32 |
org 0x0 |
db 'MENUET01' |
dd 0x01 |
dd START |
dd I_END |
dd 0x500000 |
dd 0x7fff0 |
dd 0x0,0x0 |
;E:. |
|
;B+ Include C files |
; Compiler tools |
include "INTRINS.ASM" |
|
; C Library ("stdio.asm") |
include "LIBSTD.ASM" |
|
; MenuetOS implement |
include "OSFUNC.ASM" |
|
_fopen equ _OS_fopen |
_fputc equ _OS_fputc |
_fgetc equ _OS_fgetc |
_fclose equ _OS_fclos |
|
;Main program (compiled from C) |
include "GETARG.ASM" |
include "CC1.ASM" |
include "CC2.ASM" |
include "CC3.ASM" |
include "CC4.ASM" |
;E:. |
|
START: |
;B+ Main cycle |
call draw_window |
still: |
mov eax,10 |
int 0x40 |
still1: |
|
cmp eax,1 |
je red |
cmp eax,2 |
je key |
cmp eax,3 |
je button |
jmp still |
|
red: |
call draw_window |
jmp still |
|
key: |
mov eax,2 |
int 0x40 |
jmp still |
|
button: |
mov eax,17 |
int 0x40 |
|
cmp ah,1 |
jne .noclose |
mov eax,-1 |
int 0x40 |
.noclose: |
|
cmp ah,2 |
jne .no_run |
; call begin_osfunc |
;B+ Copy file path |
mov esi,inp_path |
mov edi,filepath |
mov ecx,[p_len] |
push ecx |
cld |
rep movsb |
pop ecx |
add ecx,filepath |
mov [p_filename],ecx |
;E:. |
;B+ Clear word area |
mov ebx,10 shl 16 + 280 |
mov ecx,60 shl 16 + 250 |
mov edx,0x303030 |
mov eax,13 |
int 0x40 |
;E:. |
;B+ Init parameters |
mov ecx,_input |
sub ecx,_nogo |
mov edi,_nogo |
xor eax,eax |
cld |
rep stosb |
mov [_input],-1 |
mov [_input2],-1 |
mov [_usexpr],1 |
mov [_ccode],1 |
mov [_quote],34 |
mov [test_outch.y_coord],60 |
;E:. |
call init_osfunc |
push dword 4 |
push args |
;B+ Save exit ESP |
mov [exit_esp],esp |
;E:. |
call _main |
add esp,8 |
; call end_osfunc |
.no_run: |
|
cmp ah,3 |
jne .no_path |
mov eax,inp_path |
mov bx,27 |
call read_string |
mov edx,[r_pos] |
mov [p_len],edx |
; |
cmp ah,10 |
je still |
jmp still1 |
.no_path: |
|
cmp ah,4 |
jne .no_file |
mov eax,inp_file |
mov bx,42 |
call read_string |
mov edx,[r_pos] |
mov [f_len],edx |
; |
cmp ah,10 |
je still |
jmp still1 |
.no_file: |
|
jmp still |
;E:. |
|
read_string: |
;B+ Read string |
mov [c_place],eax |
mov [r_pos],0 |
mov [rel_x],60 |
mov [rel_y],bx |
|
mov ebx,60 |
shl ebx,16 |
mov bx,6*26+1 |
movzx ecx,[rel_y] |
shl ecx,16 |
mov cx,10 |
mov edx,0x000000 |
mov eax,13 |
int 0x40 |
|
add ecx,11 shl 16 |
mov cx,2 |
mov edx,0x999999 |
int 0x40 |
|
.next: |
mov ebx,[rel_x] |
shl ebx,16 |
mov bx,7 |
movzx ecx,[rel_y] |
shl ecx,16 |
mov cx,10 |
mov edx,0x000000 |
mov eax,13 |
int 0x40 |
|
mov ebx,[c_place] |
mov byte [ebx],0 |
|
mov eax,10 |
int 0x40 |
cmp eax,2 |
je .key |
jmp .to_ret |
.key: |
|
mov eax,2 |
int 0x40 |
cmp ah,13 |
jne .no_enter |
jmp .to_ret |
.no_enter: |
|
cmp ah,8 |
jne .no_back |
cmp [r_pos],0 |
je .next |
dec [r_pos] |
dec [c_place] |
sub [rel_x],6 |
jmp .next |
.no_back: |
|
cmp [r_pos],25 |
je .next |
|
cmp ah,'a' |
jb .no_sm_l |
cmp ah,'z' |
ja .no_sm_l |
add ah,'A'-'a' |
.no_sm_l: |
|
mov byte [ebx],ah |
mov [char],ah |
inc [c_place] |
inc [r_pos] |
|
mov ebx,[rel_x] |
inc ebx |
shl ebx,16 |
mov bx,[rel_y] |
inc bx |
mov ecx,0x00ffff |
mov edx,char |
mov esi,1 |
mov eax,4 |
int 0x40 |
|
add [rel_x],6 |
jmp .next |
|
.to_ret: |
push eax |
mov ebx,60 |
shl ebx,16 |
mov bx,6*26+1 |
movzx ecx,[rel_y] |
add ecx,11 |
shl ecx,16 |
mov cx,2 |
mov edx,0x000000 |
mov eax,13 |
int 0x40 |
pop eax |
ret |
|
rel_x dd 60 |
rel_y dw 0x0 |
c_place dd 0x0 |
r_pos dd 0x0 |
char db '?' |
;E:. |
|
draw_window: |
;B+ Draw window |
mov eax,12 |
mov ebx,1 |
int 0x40 |
|
mov ebx,100*65536+300 |
mov ecx,100*65536+320 |
mov edx,0x035555DD |
mov esi,0x805080d0 |
mov edi,0x005080d0 |
mov eax,0 |
int 0x40 |
|
mov ebx,8*65536+8 |
mov ecx,0x10ddeeff |
mov edx,caption |
mov esi,caption_end-caption |
mov eax,4 |
int 0x40 |
|
;mov ebx,(300-19)*65536+12 |
;mov ecx,5*65536+12 |
;mov edx,1 |
;mov esi,0x6688dd |
;mov eax,8 |
;int 0x40 |
|
;B+ Hot buttons |
mov ebx,220 shl 16 + 70 |
mov ecx,25 shl 16 + 29 |
mov edx,2 ; compile |
mov esi,0x6688dd |
mov eax,8 |
int 0x40 |
|
mov ebx,10 shl 16 + 47 |
mov ecx,26 shl 16 + 12 |
mov edx,3 ; path |
mov esi,0x6688dd |
mov eax,8 |
int 0x40 |
|
mov ebx,10 shl 16 + 47 |
mov ecx,41 shl 16 + 12 |
mov edx,4 ; file name |
mov esi,0x6688dd |
mov eax,8 |
int 0x40 |
;E:. |
|
;B+ Text in buttons |
mov ebx,231 shl 16 + 36 |
mov ecx,0x10ffffff |
mov edx,txt_compile |
mov esi,txt_compile_end-txt_compile |
mov eax,4 |
int 0x40 |
|
mov ebx,14 shl 16 + 28 |
mov ecx,0xffffff |
mov edx,txt_path |
mov esi,txt_path_end-txt_path |
int 0x40 |
|
mov ebx,14 shl 16 + 43 |
mov edx,txt_file |
mov esi,txt_file_end-txt_file |
int 0x40 |
;E:. |
|
;B+ Draw path / file name |
mov ebx,61 shl 16 + 28 |
mov ecx,0x00ffff |
mov edx,inp_path |
mov esi,[p_len] |
mov eax,4 |
int 0x40 |
|
mov ebx,61 shl 16 + 43 |
mov ecx,0x00ffff |
mov edx,inp_file |
mov esi,[f_len] |
mov eax,4 |
int 0x40 |
;E:. |
|
mov eax,12 |
mov ebx,2 |
int 0x40 |
|
ret |
;E:. |
|
;B+ Data area |
|
;B+ Interface |
inp_path: times 100 db '/RD/1/',0 |
p_len dd 6 |
inp_file: times 100 db 'EXAMPLE',0 |
f_len dd 7 |
|
txt_compile db 'Compile' |
txt_compile_end: |
txt_path db 'Path ->' |
txt_path_end: |
txt_file db 'File ->' |
txt_file_end: |
;E:. |
|
;B+ Main arguments |
args dd arg_str0,inp_file,arg_str2,arg_str3,arg_str4 |
|
arg_str0 db 'CC',0 |
arg_str1 db 'prog',0 |
arg_str2 db '-m',0 |
arg_str3 db '-a',0 |
arg_str4 db '-p',0 |
;E:. |
|
;B+ System parameters |
exit_esp dd 0x0 |
;E:. |
|
caption db 'Small C compiler for KolibriOS v 0.5.3' |
caption_end: |
|
times 8-($ mod 8) db 0 |
;E:. |
|
I_END: |