Subversion Repositories Kolibri OS

Compare Revisions

Regard whitespace Rev 3244 → Rev 3245

/programs/system/shell/shell.inc
0,0 → 1,234
 
 
SC_OK = 0
SC_EXIT = 1
SC_PUTC = 2
SC_PUTS = 3
SC_GETC = 4
SC_GETS = 5
SC_CLS = 6
 
SHM_WRITE = 0x01
SHM_OPEN_ALWAYS = 0x04
 
;============================
 
align 4
sc_name rb 64
sc_pid dd 0
sc_buffer dd 0
sc_process dd 0
 
;============================
 
align 4
_sc_pid2name:
 
push esp
push ebx
 
xor ecx, ecx
mov eax, [sc_pid]
mov ebx, 10
@@:
xor edx, edx
div ebx
push edx
inc ecx
test eax, eax
jnz @b
 
mov edi, sc_name
 
@@:
pop eax
add al, '0'
stosb
loop @b
 
 
mov al, '-'
stosb
mov al, 'S'
stosb
mov al, 'H'
stosb
mov al, 'E'
stosb
mov al, 'L'
stosb
mov al, 'L'
stosb
mov al, 0
stosb
 
 
pop ebx
pop esp
 
ret
 
;============================
 
align 4
; void __stdcall sc_init();
_sc_init:
 
push esp
push ebx
 
mov eax, 68
mov ebx, 11
int 0x40
 
mov eax, 68 ; ¢ë¤¥«¨âì ¯ ¬ïâì
mov ebx, 12
mov ecx, 1024
int 0x40
 
mov [sc_process], eax
 
mov eax, 9 ; ¯®«ãç¨âì ¨­ä®à¬ æ¨î ® ⥪ã饬 ¯à®æ¥áá¥
mov ebx, [sc_process]
mov ecx, -1
int 0x40
 
mov dword eax, [ebx+30] ; ¯®«ãç ¥¬ PID ⥪饣® ¯à®æ¥áá 
mov [sc_pid], eax
 
mov eax, 68 ; ®á¢®¡®¤¨âì ¯ ¬ïâì
mov ebx, 13
mov ecx, [sc_process]
int 0x40
 
call _sc_pid2name
 
mov eax, 68 ; ®âªàëâì ¨¬¥­®¢ ­­ãî ®¡« áâì
mov ebx, 22
mov dword ecx, sc_name
mov edx, 4096
mov esi, SHM_OPEN_ALWAYS or SHM_WRITE
int 0x40
 
mov [sc_buffer], eax
 
pop ebx
pop esp
 
ret
 
;============================
 
align 4
; void __stdcall sc_puts(char *str);
_sc_puts:
 
push esp
push ebx
 
mov esi, [esp+12]
mov edi, [sc_buffer]
mov al, SC_PUTS
stosb
 
@@:
lodsb
stosb
test al, al
jnz @b
 
mov ebx, [sc_buffer]
 
@@:
mov byte dl, [ebx]
test dl, dl
jz @f
push ebx
mov eax, 5
mov ebx, 5
int 0x40
pop ebx
jmp @b
 
@@:
 
pop ebx
pop esp
ret 4
 
;============================
 
align 4
; void __stdcall sc_exit();
_sc_exit:
push ebx
push esp
 
mov ebx, [sc_buffer]
mov byte [ebx], SC_EXIT
 
@@:
mov byte dl, [ebx]
test dl, dl
jz @f
push ebx
mov eax, 5
mov ebx, 5
int 0x40
pop ebx
jmp @b
 
@@:
mov eax, 68 ;§ ªàëâì ¨¬¥­®¢ ­­ãî ®¡« áâì
mov ebx, 23
mov dword ecx, sc_name
int 0x40
 
pop esp
pop ebx
ret
 
 
;============================
 
align 4
; void __stdcall sc_gets(char *str);
_sc_gets:
 
push esp
push ebx
 
mov edi, [esp+12]
 
mov ebx, [sc_buffer]
mov byte [ebx], SC_GETS
 
@@:
mov byte dl, [ebx]
test dl, dl
jz @f
push ebx
mov eax, 5
mov ebx, 5
int 0x40
pop ebx
jmp @b
 
@@:
 
 
mov esi, [sc_buffer]
inc esi
 
@@:
lodsb
stosb
test al, al
jnz @b
 
pop ebx
pop esp
ret 4
 
;============================