forked from KolibriOS/kolibrios
c31385a3f3
git-svn-id: svn://kolibrios.org@720 a494cfbc-eb01-0410-851d-a64ba20cac60
393 lines
5.8 KiB
NASM
393 lines
5.8 KiB
NASM
;
|
|
; 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+320
|
|
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:
|