kpm: initialize console

git-svn-id: svn://kolibrios.org@5731 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
Sergey Semyonov (Serge) 2015-08-17 10:31:03 +00:00
parent 4e5ae9b95e
commit 1a4da7ef10
3 changed files with 90 additions and 17 deletions

View File

@ -7,6 +7,13 @@ public _http_get@16
public _http_receive@4 public _http_receive@4
public _http_free@4 public _http_free@4
public _con_init@20
public _con_exit@4
public _con_get_flags
public _con_set_flags@4
public _con_cls
public _con_write_asciiz@4
section '.text' align 16 section '.text' align 16
@ -129,9 +136,20 @@ dll_load:
align 4 align 4
_http_init: _http_init:
push ebx
mov eax, 40
mov ebx, 1 shl 8
int 0x40
pop ebx
push @IMPORT push @IMPORT
call dll_load call dll_load
test eax, eax
jnz .fail
push 1
call [con_start]
xor eax, eax
.fail:
ret ret
align 4 align 4
@ -140,11 +158,29 @@ _http_get@16:
align 4 align 4
_http_receive@4: _http_receive@4:
jmp [HTTP_receive] jmp [HTTP_receive]
align 4 align 4
_http_free@4: _http_free@4:
jmp [HTTP_free] jmp [HTTP_free]
align 4
_con_init@20:
jmp [con_init]
align 4
_con_exit@4:
jmp [con_exit]
align 4
_con_write_asciiz@4:
jmp [con_write_asciiz]
_con_get_flags:
_con_set_flags@4:
_con_cls:
ret
proc mem.Alloc, size proc mem.Alloc, size
push ebx ecx push ebx ecx
@ -224,13 +260,27 @@ macro import lname,[name,sname]
align 4 align 4
@IMPORT: @IMPORT:
library lib_http, 'http.obj' library lib_http, 'http.obj', \
console, 'console.obj'
import lib_http, \ import lib_http, \
HTTP_get, 'get', \ HTTP_get, 'get', \
HTTP_receive, 'receive', \ HTTP_receive, 'receive', \
HTTP_free, 'free' HTTP_free, 'free'
import console, \
con_start, 'START', \
con_init, 'con_init', \
con_write_asciiz,'con_write_asciiz',\
con_exit, 'con_exit', \
con_gets, 'con_gets', \
con_cls, 'con_cls', \
con_getch2, 'con_getch2', \
con_set_cursor_pos, 'con_set_cursor_pos',\
con_write_string, 'con_write_string',\
con_get_flags, 'con_get_flags', \
con_set_flags, 'con_set_flags'
s_libdir: s_libdir:
db '/sys/lib/' db '/sys/lib/'
.fname rb 32 .fname rb 32

View File

@ -26,9 +26,9 @@ typedef struct
int http_init(); int http_init();
int http_load(char *buf, const char *path); int http_load(char *buf, const char *path);
http_t* __attribute__ ((stdcall)) http_get(const char *url, http_t *conn, int flags, const char *header); http_t* __stdcall http_get(const char *url, http_t *conn, int flags, const char *header);
int __attribute__ ((stdcall)) http_receive(http_t *conn); int __stdcall http_receive(http_t *conn);
void __attribute__ ((stdcall)) http_free(http_t *conn); void __stdcall http_free(http_t *conn);
static inline int http_receive_with_retry(http_t *http, int retry_count) static inline int http_receive_with_retry(http_t *http, int retry_count)
{ {
@ -36,12 +36,21 @@ static inline int http_receive_with_retry(http_t *http, int retry_count)
do do
{ {
if(err = http_receive(http)) err = http_receive(http);
delay(1); if(err)
wait_for_event(1);
}while(err && --retry_count); }while(err && --retry_count);
return err; return err;
} }
void __stdcall con_init(unsigned w_w, unsigned w_h, unsigned s_w, unsigned s_h, const char* t);
void __stdcall con_exit(char bCloseWindow);
unsigned __stdcall con_get_flags(void);
unsigned __stdcall con_set_flags(unsigned new_flags);
void __stdcall con_cls(void);
void __stdcall con_write_asciiz(const char* string);
#endif /* __HTTP_H__ */ #endif /* __HTTP_H__ */

View File

@ -12,6 +12,7 @@
#define BUFFSIZE (64*1024) #define BUFFSIZE (64*1024)
char conbuf[256];
char *make_url(const char *name) char *make_url(const char *name)
{ {
@ -90,6 +91,10 @@ int http_load_file(const char *path, const char *url)
memcpy(buf, http->content_ptr+count, tail); memcpy(buf, http->content_ptr+count, tail);
offset = tail; offset = tail;
} }
sprintf(conbuf, "%d bytes loaded\r", http->content_received);
con_write_asciiz(conbuf);
} }
received = http->content_received; received = http->content_received;
} }
@ -118,7 +123,6 @@ err_get:
return received; return received;
} }
int main(int argc, char *argv[]) int main(int argc, char *argv[])
{ {
int count; int count;
@ -128,6 +132,8 @@ int main(int argc, char *argv[])
if(http_init()) if(http_init())
goto err_init; goto err_init;
con_init(80, 25, 80, 250, "Kolibri package manager");
tmp_path = make_tmp_path("packages.xml"); tmp_path = make_tmp_path("packages.xml");
count = http_load_file(tmp_path, make_url("packages.xml")); count = http_load_file(tmp_path, make_url("packages.xml"));
@ -150,13 +156,18 @@ int main(int argc, char *argv[])
remove_missing_packages(&install_list, &download_list); remove_missing_packages(&install_list, &download_list);
list_for_each_entry(pkg, &install_list, list) list_for_each_entry(pkg, &install_list, list)
printf("install package %s-%s\n", pkg->name, pkg->version); {
sprintf(conbuf,"install package %s-%s\n", pkg->name, pkg->version);
con_write_asciiz(conbuf);
};
set_cwd("/tmp0/1"); set_cwd("/tmp0/1");
do_install(&install_list); do_install(&install_list);
}; };
} }
con_exit(0);
return 0; return 0;
@ -226,10 +237,12 @@ void do_download(list_t *download_list)
list_for_each_entry_safe(pkg, tmp, download_list, list) list_for_each_entry_safe(pkg, tmp, download_list, list)
{ {
printf("package %s-%s\n", pkg->name, pkg->version); sprintf(conbuf,"package %s-%s\n", pkg->name, pkg->version);
con_write_asciiz(conbuf);
cache_path = make_cache_path(pkg->filename); cache_path = make_cache_path(pkg->filename);
count = http_load_file(cache_path, make_url(pkg->filename)); count = http_load_file(cache_path, make_url(pkg->filename));
printf("%s loaded %d bytes\n",cache_path, count); sprintf(conbuf,"%s %d bytes loaded\n",cache_path, count);
con_write_asciiz(conbuf);
if( !test_archive(cache_path)) if( !test_archive(cache_path))
list_del_pkg(pkg); list_del_pkg(pkg);
else else
@ -247,7 +260,8 @@ void remove_missing_packages(list_t *install, list_t *missed)
{ {
if(ipkg->id == mpkg->id) if(ipkg->id == mpkg->id)
{ {
printf("skip missing package %s-%s\n", ipkg->name, ipkg->version); sprintf(conbuf,"skip missing package %s-%s\n", ipkg->name, ipkg->version);
con_write_asciiz(conbuf);
list_del_pkg(ipkg); list_del_pkg(ipkg);
}; };
} }