diff --git a/programs/network/https/trunk/https.asm b/programs/network/https/trunk/https.asm index d3511862e5..a1109203ff 100644 --- a/programs/network/https/trunk/https.asm +++ b/programs/network/https/trunk/https.asm @@ -1,33 +1,35 @@ ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; ; -; Tiny HTTP Server v 0.4 for MenuetOS ; +; Tiny HTTP Server v 0.5 for KolibriOS ; ; ; ; License GPL / See file COPYING for details. ; ; Copyright 2003 Ville Turjanmaa ; ; ; -; Compile with FASM for Menuet ; +; Compile with FASM for Menuet/KolibriOS ; ; ; ; Request /TinyStat for server statistics ; ; Request /TinyBoard for server message board ; ; ; +; Special version for KoOS by Hex && Heavyiron ; +; ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -version equ '0.4' +appname equ 'Kolibri HTTP Server ' +version equ '0.6' use32 - org 0x0 + org 0x0 - db 'MENUET01' ; 8 byte id - dd 0x01 ; required os - dd START ; program start - dd I_END ; program image size - dd 0x400000 ; required amount of memory - dd 0x20000 - dd 0,0 ; reserved=no extended header + db 'MENUET01' ; 8 byte id + dd 0x01 ; required os + dd START ; program start + dd I_END ; program image size + dd 0x400000 ; required amount of memory + dd 0x20000 + dd 0,0 ; reserved=no extended header -include 'lang.inc' -include "macros.inc" +include "MACROS.INC" ; 0x0+ - program image ; 0x1ffff - stack @@ -35,18 +37,25 @@ include "macros.inc" ; 0x100000+ - requested file filel: - dd 0x0,0x0,50000/512,0x20000,0x70000 - db '/rd/1/board.htm',0 + dd 0 + dd 0 + dd 0 + dd 50000 + dd 0x20000 + db '/rd/1/board.htm',0 files: - dd 0x1,0x0,0x0,0x20000,0x70000 - db '/rd/1/board.htm',0 + dd 2 + dd 0 + dd 0 + dd 0 + dd 0x20000 + db '/rd/1/board.htm',0 +START: ; start of execution -START: ; start of execution - - mov eax,58 + mov eax,70 mov ebx,filel int 0x40 mov [board_size],ebx @@ -62,18 +71,17 @@ START: ; start of execution board_found: - mov eax,58 + mov eax,70 mov ebx,files mov ecx,[board_size] - mov [files+8],ecx + mov [files+12],ecx int 0x40 mov [status],-1 mov [last_status],-2 call clear_input - call draw_window ; at first, draw the window - -; call ops +red: + call draw_window ; at first, draw the window still: @@ -98,44 +106,30 @@ still: jmp still - - reb: ; boot - - mov eax,18 - mov ebx,1 - int 0x40 - - jmp $ - - last_status dd 0x0 check_events: - cmp eax,1 ; redraw request ? + cmp eax,1 ; redraw request ? jz red - cmp eax,2 ; key in buffer ? + cmp eax,2 ; key in buffer ? jz key - cmp eax,3 ; button in buffer ? + cmp eax,3 ; button in buffer ? jz button ret -red: ; redraw - call draw_window - ret - -key: ; Keys are not valid at this part of the - mov eax,2 ; loop. Just read it and ignore +key: ; Keys are not valid at this part of the + mov al,2 ; loop. Just read it and ignore int 0x40 ret -button: ; button +button: ; button - mov eax,17 ; get id + mov al,17 ; get id int 0x40 - cmp ah,1 ; close + cmp ah,1 ; close jnz tst2 mov eax,53 mov ebx,8 @@ -145,16 +139,16 @@ button: ; button int 0x40 tst2: - cmp ah,2 ; button id=2 ? + cmp ah,2 ; button id=2 ? jnz tst3 ; open socket ops: mov eax,53 mov ebx,5 - mov ecx,80 ; local port # - http - mov edx,0 ; no remote port specified - mov esi,0 ; no remote ip specified - mov edi,0 ; PASSIVE open + mov ecx,80 ; local port # - http + mov edx,0 ; no remote port specified + mov esi,0 ; no remote ip specified + mov edi,0 ; PASSIVE open int 0x40 mov [socket], eax mov [posy],1 @@ -164,12 +158,9 @@ button: ; button call draw_data mov [server_active],1 call check_status -; cmp [status],0 -; je reb ret tst3: - - cmp ah,4 ; button id=4 ? + cmp ah,4 ; button id=4 ? jnz no4 mov [server_active],0 close_socket: @@ -190,9 +181,9 @@ button: ; button mov eax,53 mov ebx,5 mov ecx,80 ; local port # - http - mov edx,0 ; no remote port specified - mov esi,0 ; no remote ip specified - mov edi,0 ; PASSIVE open + mov edx,0 ; no remote port specified + mov esi,0 ; no remote ip specified + mov edi,0 ; PASSIVE open int 0x40 mov [socket], eax no_re_open: @@ -220,8 +211,8 @@ button: ; button jmp still no4: - cmp ah,6 ; read directory - je read_string + cmp ah,6 ; read directory + je read_string ret @@ -249,9 +240,9 @@ start_transmission: wait_for_data: call check_for_incoming_data cmp [input_text+256+1],dword 'GET ' - je data_received + je data_received cmp [input_text+256+1],dword 'POST' - je data_received + je data_received mov eax,5 mov ebx,1 int 0x40 @@ -300,7 +291,7 @@ start_transmission: add [filepos],edx cmp [file_left],0 - jg newblock + jg newblock no_http_request: @@ -319,14 +310,6 @@ wait_for_empty_slot: wait_more: -; rdtsc -; mov ecx,eax -; add ecx,1000000 -; wr: -; rdtsc -; cmp eax,ecx -; jb wr - mov eax,5 mov ebx,1 int 0x40 @@ -380,14 +363,14 @@ send_header: pusha - mov eax,53 ; send response and file length + mov eax,53 ; send response and file length mov ebx,7 mov ecx,[socket] mov edx,h_len-html_header mov esi,html_header int 0x40 - mov eax,53 ; send file type + mov eax,53 ; send file type mov ebx,7 mov ecx,[socket] mov edx,[type_len] @@ -397,10 +380,13 @@ send_header: popa ret - -fileinfo dd 0,0,1,0x100000,0xf0000 -getf db '/RD/1/' - times 50 db 0 +fileinfo dd 0 + dd 0 + dd 0 + dd 512 + dd 0x100000 +getf db '/rd/1/' + times 50 db 0 wanted_file: times 100 db 0 getflen dd 6 @@ -409,47 +395,47 @@ make_room: pusha - mov edx,ecx + mov edx,ecx - mov esi,0x20000 - add esi,[board_size] - mov edi,esi - add edi,edx - mov ecx,[board_size] - sub ecx,board1-board - inc ecx + mov esi,0x20000 + add esi,[board_size] + mov edi,esi + add edi,edx + mov ecx,[board_size] + sub ecx,board1-board + inc ecx std - rep movsb + rep movsb cld popa ret -from_i dd 0x0 +from_i dd 0x0 from_len dd 0x0 message dd 0x0 message_len dd 0x0 -read_file: ; start of execution - - mov [fileinfo+12],eax - mov [fileinfo+8],ebx +read_file: ; start of execution + mov [fileinfo+16],eax + shl ebx, 9 + mov [fileinfo+12],ebx mov [file_type],unk mov [type_len],unkl-unk mov [filename+40*2+6],dword 'UNK ' cmp [input_text+256+1],dword 'POST' - je yes_new_message + je yes_new_message cmp [input_text+256+11],dword 'oard' ; server board message jne no_server_message_2 yes_new_message: - mov eax,58 + mov eax,70 mov ebx,filel int 0x40 mov [board_size],ebx @@ -468,7 +454,7 @@ read_file: ; start of execution newfroms: inc esi cmp esi,input_text+256*20 - je no_server_message_2 + je no_server_message_2 cmp [esi],dword 'from' jne newfroms @@ -478,13 +464,14 @@ read_file: ; start of execution mov edx,0 name_new_len: cmp [esi+edx],byte 13 - je name_found_len + je name_found_len cmp [esi+edx],byte '&' - je name_found_len + je name_found_len cmp edx,1000 - je name_found_len + je name_found_len inc edx jmp name_new_len + name_found_len: mov [from_len],edx @@ -493,7 +480,7 @@ read_file: ; start of execution newmessages: inc esi cmp esi,input_text+256*20 - je no_server_message_2 + je no_server_message_2 cmp [esi],dword 'sage' jne newmessages @@ -504,11 +491,11 @@ read_file: ; start of execution new_len: inc edx cmp [esi+edx],byte ' ' - je found_len + je found_len cmp [esi+edx],byte 13 jbe found_len cmp edx,input_text+5000 - je found_len + je found_len jmp new_len found_len: mov [message_len],edx @@ -546,7 +533,7 @@ read_file: ; start of execution imul ebx,16 add ebx,eax mov [esi+edx],bl - mov [esi+edx+1],word ' ' + mov [esi+edx+1],word '' add edx,2 no_ascii: @@ -565,21 +552,22 @@ read_file: ; start of execution call make_room - mov esi,board1 ; first part + mov esi,board1 ; first part mov edi,0x20000 add edi,board1-board mov ecx,edx cld rep movsb - mov esi,[from_i] ; name + mov esi,[from_i] ; name mov edi,0x20000 - add edi,board1-board + board1e-board1 + add edi,board1-board + add edi,board1e-board1 mov ecx,[from_len] cld rep movsb - mov esi,board2 ; middle part + mov esi,board2 ; middle part mov edi,0x20000 add edi,board1-board + board1e-board1 add edi,[from_len] @@ -587,9 +575,9 @@ read_file: ; start of execution cld rep movsb - mov esi,[message] ; message + mov esi,[message] ; message mov edi,0x20000 - add edi,board1-board + board1e-board1 +board2e-board2 + add edi,board1-board + board1e-board1 + board2e-board2 add edi,[from_len] mov ecx,[message_len] cld @@ -597,7 +585,7 @@ read_file: ; start of execution mov esi,board3 ; end part mov edi,0x20000 - add edi,board1-board + board1e-board1 +board2e-board2 + add edi,board1-board + board1e-board1 + board2e-board2 add edi,[from_len] add edi,[message_len] mov ecx,board3e-board3 @@ -607,9 +595,9 @@ read_file: ; start of execution inc [board_messages] mov eax,[board_size] - mov [files+8],eax + mov [files+12],eax - mov eax,58 + mov eax,70 mov ebx,files int 0x40 @@ -671,7 +659,7 @@ read_file: ; start of execution cld new_let: cmp [esi],byte ' ' - je no_new_let + je no_new_let cmp edi,wanted_file+30 jge no_new_let movsb @@ -684,10 +672,10 @@ read_file: ; start of execution cmp esi,input_text+256+6 jne no_index mov edi,wanted_file - mov [edi+0],dword 'inde' - mov [edi+4],dword 'x.ht' - mov [edi+8],byte 'm' - mov [edi+9],byte 0 + mov [edi+0],dword 'inde' + mov [edi+4],dword 'x.ht' + mov [edi+8],byte 'm' + mov [edi+9],byte 0 add edi,9 mov [file_type],htm @@ -698,9 +686,9 @@ read_file: ; start of execution no_index: cmp [edi-3],dword 'htm'+0 - je htm_header + je htm_header cmp [edi-3],dword 'HTM'+0 - je htm_header + je htm_header jmp no_htm_header htm_header: mov [file_type],htm @@ -710,9 +698,9 @@ read_file: ; start of execution no_htm_header: cmp [edi-3],dword 'png'+0 - je png_header + je png_header cmp [edi-3],dword 'PNG'+0 - je png_header + je png_header jmp no_png_header png_header: mov [file_type],png @@ -722,9 +710,9 @@ read_file: ; start of execution no_png_header: cmp [edi-3],dword 'gif'+0 - je gif_header + je gif_header cmp [edi-3],dword 'GIF'+0 - je gif_header + je gif_header jmp no_gif_header gif_header: mov [file_type],gif @@ -734,9 +722,9 @@ read_file: ; start of execution no_gif_header: cmp [edi-3],dword 'jpg'+0 - je jpg_header + je jpg_header cmp [edi-3],dword 'JPG'+0 - je jpg_header + je jpg_header jmp no_jpg_header jpg_header: mov [file_type],jpg @@ -746,13 +734,13 @@ read_file: ; start of execution no_jpg_header: cmp [edi-3],dword 'asm'+0 - je txt_header + je txt_header cmp [edi-3],dword 'ASM'+0 - je txt_header + je txt_header cmp [edi-3],dword 'txt'+0 - je txt_header + je txt_header cmp [edi-3],dword 'TXT'+0 - je txt_header + je txt_header jmp no_txt_header txt_header: mov [file_type],txt @@ -778,13 +766,13 @@ read_file: ; start of execution cld rep movsb - mov [fileinfo+8],dword 1 ; file exists ? - mov eax,58 + mov [fileinfo+12],dword 1 ; file exists ? + mov eax,70 mov ebx,fileinfo int 0x40 - cmp eax,0 ; file not found - message - je file_found + cmp eax,0 ; file not found - message + je file_found mov edi,et call set_time mov edi,ed @@ -804,8 +792,8 @@ read_file: ; start of execution file_found: - mov [fileinfo+8],dword 0x2f0000 / 512 ; read all of file - mov eax,58 + mov [fileinfo+12],dword 0x2f0000 ; read all of file + mov eax,70 mov ebx,fileinfo int 0x40 @@ -1000,7 +988,7 @@ check_status: int 0x40 cmp eax,[status] - je c_ret + je c_ret mov [status],eax add al,48 mov [text+12],al @@ -1011,8 +999,8 @@ check_status: ret -addr dd 0x0 -ya dd 0x0 +addr dd 0x0 +ya dd 0x0 filename2: times 100 db 32 @@ -1040,11 +1028,11 @@ read_string: int 0x40 shr eax,8 cmp eax,13 - je read_done + je read_done cmp eax,8 jnz nobsl cmp edi,[addr] - jz f11 + jz f11 sub edi,1 mov [edi],byte 32 call print_text @@ -1088,30 +1076,19 @@ print_text: pusha - mov eax,13 - mov ebx,97*65536+23*6 - mov ecx,[ya] - shl ecx,16 - mov cx,9 - mov edx,0xffffff - int 0x40 - mov eax,4 mov edx,[addr] mov ebx,97*65536 add ebx,[ya] - mov ecx,0x000000 + mov ecx,0x40000000 mov esi,23 + mov edi,0xffffff int 0x40 popa ret - - - - ; ********************************************* ; ******* WINDOW DEFINITIONS AND DRAW ******** ; ********************************************* @@ -1119,42 +1096,33 @@ print_text: draw_window: - mov eax,12 ; function 12:tell os about windowdraw - mov ebx,1 ; 1, start of draw + mov eax,12 ; function 12:tell os about windowdraw + mov ebx,1 ; 1, start of draw int 0x40 - ; DRAW WINDOW - mov eax,0 ; function 0 : define and draw window - mov ebx,100*65536+480 ; [x start] *65536 + [x size] - mov ecx,100*65536+215 ; [y start] *65536 + [y size] - mov edx,0x03ffffff ; color of work area RRGGBB - mov esi,0x8050a0b0 ; color of grab bar RRGGBB,8->color gl - mov edi,0x0050a0b0 ; color of frames RRGGBB + ; DRAW WINDOW + mov eax,0 ; function 0 : define and draw window + mov ebx,100*65536+480 ; [x start] *65536 + [x size] + mov ecx,100*65536+215 ; [y start] *65536 + [y size] + mov edx,0x13ffffff ; color of work area RRGGBB + mov edi,header ; WINDOW LABEL int 0x40 - ; WINDOW LABEL - mov eax,4 ; function 4 : write text to window - mov ebx,8*65536+8 ; [x start] *65536 + [y start] - mov ecx,0x10ffffff ; color of text RRGGBB - mov edx,labelt ; pointer to text beginning - mov esi,labellen-labelt ; text length + mov eax,8 ; function 8 : define and draw button + mov ebx,(40)*65536+20 ; [x start] *65536 + [x size] + mov ecx,59*65536+9 ; [y start] *65536 + [y size] + mov edx,2 ; button id + mov esi,0x66aa66 ; button color RRGGBB int 0x40 - mov eax,8 ; function 8 : define and draw button - mov ebx,(40)*65536+20 ; [x start] *65536 + [x size] - mov ecx,59*65536+9 ; [y start] *65536 + [y size] - mov edx,2 ; button id - mov esi,0x66aa66 ; button color RRGGBB + ; function 8 : define and draw button + mov ebx,(40)*65536+20 ; [x start] *65536 + [x size] + mov ecx,72*65536+9 ; [y start] *65536 + [y size] + mov edx,4 ; button id + mov esi,0xaa6666 ; button color RRGGBB int 0x40 - mov eax,8 ; function 8 : define and draw button - mov ebx,(40)*65536+20 ; [x start] *65536 + [x size] - mov ecx,72*65536+9 ; [y start] *65536 + [y size] - mov edx,4 ; button id - mov esi,0xaa6666 ; button color RRGGBB - int 0x40 - - mov eax,8 ; Enter directory + ; Enter directory mov ebx,(25)*65536+66 mov ecx,135*65536+15 mov edx,6 @@ -1167,7 +1135,7 @@ draw_window: mov edx,0x6699cc ; 002288 int 0x40 - mov eax,38 + mov ebx,241*65536+241 mov ecx,22*65536+210 mov edx,0x336699 ; 002288 @@ -1175,8 +1143,8 @@ draw_window: call draw_data - mov eax,12 ; function 12:tell os about windowdraw - mov ebx,2 ; 2, end of draw + mov eax,12 ; function 12:tell os about windowdraw + mov ebx,2 ; 2, end of draw int 0x40 ret @@ -1186,7 +1154,7 @@ draw_data: pusha - mov ebx,25*65536+35 ; draw info text with function 4 + mov ebx,25*65536+35 ; draw info text with function 4 mov ecx,0x000000 mov edx,text mov esi,35 @@ -1218,7 +1186,7 @@ draw_data: mov [input_text+4],dword 'IVED' mov [input_text+8],dword ': ' - mov ebx,255*65536+35 ; draw info text with function 4 + mov ebx,255*65536+35 ; draw info text with function 4 mov ecx,0x000000 mov edx,input_text mov esi,35 @@ -1247,7 +1215,7 @@ draw_data: ; DATA AREA -status dd 0x0 +status dd 0x0 text: db 'TCB status: x ' @@ -1259,7 +1227,7 @@ text: db ' /TinyBoard -message board ' db ' ' dirp: - db ' Files: /RD/1/ ' + db ' Files: /rd/1/ ' db ' ' filename: db ' ' @@ -1271,7 +1239,7 @@ filename: html_header: db 'HTTP/1.0 200 OK',13,10 - db 'Server: MenuetOS HTTP Server',13,10 + db 'Server: KolibriOS HTTP Server',13,10 db 'Content-Length: ' c_l: db '000000',13,10 @@ -1280,9 +1248,9 @@ h_len: fnf: db '' db '
'
-     db  "TinyServer v ",version," for MenuetOS",13,10,13,10
-     db  "Error 404 - File not found.",13,10,13,10
-     db  "For more info about server: request /TinyStat",13,10,13,10
+     db  "HTTP-╤хЁтхЁ v ",version," фы  KolibriOS",13,10,13,10
+     db  "

Error 404 - File not found

",13,10,13,10 + db "─ы  яюыєўхэш  ёЄрЄшёЄшъш т√яюыэшЄх чряЁюё /TinyStat",13,10,13,10 et: db "xx:xx:xx",13,10 ed: db "xx.xx.xx",13,10 db "
" @@ -1292,15 +1260,15 @@ fnfe: sm: db '' db '
'
-     db  "TinyServer v ",version," for MenuetOS",13,10,13,10
-     db  "Statistics: (before current request)",13,10,13,10
-sms: db  "- Documents served  : xxxxxxxxx",13,10
-smb: db  "- Bytes transferred : xxxxxxxxx",13,10
-     db  "- Location          : /TinyStat",13,10,13,10
-     db  "TinyBoard:",13,10,13,10
-smm: db  "- Messages          : xxxxxxxxx",13,10
-smz: db  "- Size in bytes     : xxxxxxxxx",13,10
-     db  "- Location          : /TinyBoard",13,10,13,10
+     db  "HTTP-╤хЁтхЁ v ",version," фы  KolibriOS",13,10,13,10
+     db  "╤ЄрЄшёЄшър: (яюёых фрээюую чряЁюёр)",13,10,13,10
+sms: db  "- ─юъєьхэЄют яЁшэ Єю: xxxxxxxxx",13,10
+smb: db  "- ┴рщЄ яхЁхфрээю    : xxxxxxxxx",13,10
+     db  "- ╠хёЄюэрїюцфхэшх   : ╤ЄрЄшёЄшър",13,10,13,10
+     db  "├юёЄхтр :",13,10,13,10
+smm: db  "- ╤ююс∙хэшщ         : xxxxxxxxx",13,10
+smz: db  "- ╨рчьхЁ т срщЄрї   : xxxxxxxxx",13,10
+     db  "- ╠хёЄюэрїюцфхэшх   : ├юёЄхтр ",13,10,13,10
 smt: db  "xx:xx:xx",13,10
 smd: db  "xx.xx.xx",13,10
      db  '
' @@ -1326,42 +1294,42 @@ unk: db 'Content-Type: unknown/unknown',13,10,13,10 unkl: - labelt: db 'Tiny http server ',version - labellen: +header db appname,version,0 -socket dd 0x0 -server_active db 0x0 +socket dd 0x0 +server_active db 0x0 board: -db "
",13,10 +db "INTKolibriOS - /├юёЄхтр /",13,10 +db "
",13,10 db "
",13,10 db "" db 13,10 -db "
",13,10 -db "Tinyserver Messageboard

",13,10 +db "",13,10 +db "├юёЄхтр  ёхЁтхЁр INTKolibriOS
",13,10 db "" db 13,10,13,10 board1: db "",13,10 -db "",13,10 -db "",13,10,13,10 @@ -1374,11 +1342,11 @@ db "
",13,10 db "

",13,10 +db "

",13,10 db "",13,10 board1e: -db "WebMaster",13,10 +db "Hex",13,10 board2: db "",13,10 db "


",13,10 db "



",13,10 bsmt: -db "12.23.45
",13,10 +db "15.23.45
",13,10 bsmd: -db "02.05.03",13,10 +db "22.03.06",13,10 db "

",13,10 +db "

",13,10 board2e: -db "Assembly written messageboard from assembly written MenuetOS.
" +db "─юсЁю яюцрыютрЄ№ т уюёЄхтє■ ёхЁтхЁр INTKolibriOS! (-:
" db 13,10 board3: db "

" db 13,10 db "",13,10 -db "",13,10 db "

",13,10 +db "

",13,10 db "

",13,10 -db "Name:

",13,10 -db "Message:

",13,10 -db "
",13,10 +db "╚ь :

",13,10 +db "╤ююс∙хэшх:

",13,10 +db "",13,10 db "
",13,10 db "",13,10 @@ -1386,9 +1354,9 @@ db "",13,10 board_end: -board_size dd 0x0 -board_messages dd 0x0 +board_size dd 0x0 +board_messages dd 0x0 input_text: -I_END: +I_END: \ No newline at end of file diff --git a/programs/other/calc/trunk/build_en.bat b/programs/other/calc/trunk/build_en.bat index 1c2d379c11..356ccbbaac 100644 --- a/programs/other/calc/trunk/build_en.bat +++ b/programs/other/calc/trunk/build_en.bat @@ -1,4 +1,5 @@ @erase lang.inc @echo lang fix en >lang.inc @fasm calc.asm calc +@erase lang.inc @pause \ No newline at end of file diff --git a/programs/other/calc/trunk/build_ru.bat b/programs/other/calc/trunk/build_ru.bat index 80f90cf12c..0ee24f2a20 100644 --- a/programs/other/calc/trunk/build_ru.bat +++ b/programs/other/calc/trunk/build_ru.bat @@ -1,4 +1,5 @@ @erase lang.inc @echo lang fix ru >lang.inc @fasm calc.asm calc +@erase lang.inc @pause \ No newline at end of file diff --git a/programs/other/calc/trunk/calc.asm b/programs/other/calc/trunk/calc.asm index e0bd5733a0..f4c87030fe 100644 --- a/programs/other/calc/trunk/calc.asm +++ b/programs/other/calc/trunk/calc.asm @@ -1,28 +1,32 @@ -;; Calculator for MenuetOS +;; Calculator for MenuetOS (original version) ;; (c)Ville Turjanmaa ;; Compile with FASM for Menuet -;; -;; Калькулятор 1.1 alpha -;; (c)Pavel Rymovski aka Heavyiron -;;What's new:1)changed design +;; +;;What's new: +;; Calc 1.1 +;; 1)changed design ;; 2)new procedure of draw window (10 decimal digits, 23 binary, "+" not displayed now) ;; 3)window with skin ;; 4)I had used macroses -;; Calc 1.2 alpha +;; Calc 1.2 ;; 1)added some useful functions, such as arcsin, arccos, arctg, 1/x, x^2 -;; Calc 1.3 +;; Calc 1.31 ;; 1)optimised program +;; 2)new type of window (you need kernel 114 revision or higher) +;; Pavel Rymovski (Heavyiron) + +appname equ 'Calc ' +version equ '1.31' use32 - org 0x0 - + org 0x0 db 'MENUET01' ; 8 byte id dd 0x01 ; header version dd START ; start of code dd I_END ; size of image dd 0x1000 ; memory for app dd 0x1000 ; esp - dd 0x0 , 0x0 ; I_Param , I_Icon + dd 0x0,0x0 ; I_Param , I_Icon include 'macros.inc' @@ -31,7 +35,7 @@ START: red: call draw_window -still: +still: push 10 pop eax int 40h @@ -39,16 +43,18 @@ still: jz red dec eax jz key - + button: - mcall 17 ; получить идентификатор нажатой кнопки + mov al,17 ; получить идентификатор нажатой кнопки + int 0x40 shr eax,8 jmp testbut - - key: - mcall 2 ; получить ASCII-код нажатой клавиши + +key: + mov al,2 ; получить ASCII-код нажатой клавиши + int 0x40 shr eax,8 - mov edi,asci ; перевод ASCII в идентификатор кнопки + mov edi,asci ; перевод ASCII в идентификатор кнопки mov ecx,18 cld repne scasb @@ -60,9 +66,10 @@ button: lodsb testbut: - cmp eax,1 ; кнопка 1 - закрытие программы + cmp eax,1 ; кнопка 1 - закрытие программы jne noclose - mcall -1 + or eax,-1 + int 0x40 noclose: cmp eax,2 @@ -72,14 +79,14 @@ button: no_reset: finit - mov ebx,muuta1 ; Перевод в формат FPU - mov esi,18 - call atof - fstp [trans1] - mov ebx,muuta2 - mov esi,18 - call atof - fst [trans2] + mov ebx,muuta1 ; Перевод в формат FPU + mov esi,18 + call atof + fstp [trans1] + mov ebx,muuta2 + mov esi,18 + call atof + fst [trans2] cmp eax,33 jne no_sign cmp [dsign],byte '-' @@ -107,40 +114,40 @@ button: mov [entry_multiplier],eax call print_display jmp still - multipl: dd 10,16,2 + multipl: dd 10,16,2 no_display_change: cmp eax,6 - jb no_a_f + jb no_a_f cmp eax,11 - jg no_a_f + jg no_a_f add eax,4 call number_entry jmp still no_a_f: cmp eax,12 - jb no_13 + jb no_13 cmp eax,14 - jg no_13 + jg no_13 sub eax,11 call number_entry jmp still no_13: cmp eax,19 - jb no_46 + jb no_46 cmp eax,21 - jg no_46 + jg no_46 sub eax,15 call number_entry jmp still no_46: cmp eax,26 - jb no_79 + jb no_79 cmp eax,28 - jg no_79 + jg no_79 sub eax,19 call number_entry jmp still @@ -148,7 +155,7 @@ button: no_79: cmp eax,34 jne no_0 - mov eax,0 + xor eax,eax call number_entry jmp still @@ -303,7 +310,7 @@ error: calculate: pusha cmp [calc],' ' - je no_calculation + je no_calculation cmp [calc],'/' jne no_cdiv fdiv [trans1] @@ -338,7 +345,7 @@ number_entry: cmp eax,[entry_multiplier] jge no_entry cmp [id],1 - je decimal_entry + je decimal_entry mov ebx,[integer] test ebx,0xc0000000 jnz no_entry @@ -384,7 +391,7 @@ number_entry: cld rep movsb mov [muuta1],al - mov edi,muuta1+10 ; целое + mov edi,muuta1+10 ; целое mov eax,[integer] new_to_muuta1: @@ -397,7 +404,7 @@ number_entry: dec edi cmp edi,muuta1+1 jge new_to_muuta1 - mov edi,muuta1+17 ; дробное + mov edi,muuta1+17 ; дробное mov eax,[decimal] new_to_muuta2: @@ -434,17 +441,17 @@ new_entry: popa ret -ten dd 10.0,0 -tmp dw 1,0 -sign db 1,0 -tmp2 dq 0x0,0 -exp dd 0x0,0 -new_dec dd 100000,0 -id db 0x0,0 -res dd 0 -trans1 dq 0 -trans2 dq 0 -controlWord dw 1 +ten dd 10.0,0 +tmp dw 1,0 +sign db 1,0 +tmp2 dq 0x0,0 +exp dd 0x0,0 +new_dec dd 100000,0 +id db 0x0,0 +res dd 0 +trans1 dq 0 +trans2 dq 0 +controlWord dw 1 ftoa: ; fpu st0 -> [integer],[decimal] pusha @@ -452,7 +459,7 @@ ftoa: ; fpu st0 -> [integer],[decimal] fstcw [controlWord] ; set truncate integer mode mov ax,[controlWord] mov [tmp], ax - or [tmp], word 0x0c00 + or [tmp], word 0x0c00 fldcw [tmp] ftst ; test if st0 is negative fstsw ax @@ -467,12 +474,12 @@ ftoa: ; fpu st0 -> [integer],[decimal] fld [tmp2] fisub [integer] fldcw [controlWord] - cmp byte [sign], 0 ; change fraction to positive - je no_neg2 + cmp byte [sign], 0 ; change fraction to positive + je no_neg2 fchs no_neg2: - mov [res],0 ; convert 6 decimal numbers + mov [res],0 ; convert 6 decimal numbers mov edi,6 newd: @@ -488,7 +495,7 @@ ftoa: ; fpu st0 -> [integer],[decimal] fstsw ax dec edi - jz real_done + jz real_done jmp newd real_done: @@ -501,8 +508,8 @@ ftoa: ; fpu st0 -> [integer],[decimal] no_error: mov [dsign],byte '+' - cmp [sign],byte 0 ; convert negative result - je no_negative + cmp [sign],byte 0 ; convert negative result + je no_negative mov eax,[integer] not eax inc eax @@ -521,9 +528,9 @@ atof: fldz mov di, 0 cmp si, 0 - je .error ; Jump if string has 0 length. + je .error ; Jump if string has 0 length. mov byte [sign], 0 - cmp byte [bx], '+' ; Take care of leading '+' or '-'. + cmp byte [bx], '+' ; Take care of leading '+' or '-'. jne .noPlus inc di jmp .noMinus @@ -531,7 +538,7 @@ atof: .noPlus: cmp byte [bx], '-' jne .noMinus - mov byte [sign], 1 ; Number is negative. + mov byte [sign], 1 ; Number is negative. inc di .noMinus: @@ -542,16 +549,16 @@ atof: call atof_convertFractionalPart jc .error cmp byte [sign], 0 - je .dontNegate - fchs ; Negate value + je .dontNegate + fchs ; Negate value .dontNegate: - mov bh, 0 ; Set bh to indicate the string is a valid number. + mov bh, 0 ; Set bh to indicate the string is a valid number. jmp .exit .error: - mov bh, 1 ; Set error code. - fstp st0 ; Pop top of fpu stack. + mov bh, 1 ; Set error code. + fstp st0 ; Pop top of fpu stack. .exit: pop di @@ -568,7 +575,7 @@ atof_convertWholePart: mov al, [bx + di] cmp al, '.' je .exit - cmp al, '0' ; Make sure character is a digit. + cmp al, '0' ; Make sure character is a digit. jb .error cmp al, '9' ja .error @@ -585,34 +592,34 @@ atof_convertWholePart: fmul dword [ten] fiadd word [tmp] inc di - cmp si, di ; Jump if end of string has been reached. + cmp si, di ; Jump if end of string has been reached. je .exit jmp .mainLoop .error: - stc ; Set error (carry) flag. + stc ; Set error (carry) flag. ret .exit: - clc ; Clear error (carry) flag. + clc ; Clear error (carry) flag. ret atof_convertFractionalPart: - fld1 ; Load 1 to TOS. This will be the value of the decimal place. + fld1 ; Load 1 to TOS. This will be the value of the decimal place. .mainLoop: - cmp si, di ; Jump if end of string has been reached. + cmp si, di ; Jump if end of string has been reached. je .exit - inc di ; Move past the decimal point. - cmp si, di ; Jump if end of string has been reached. + inc di ; Move past the decimal point. + cmp si, di ; Jump if end of string has been reached. je .exit mov al, [bx + di] - cmp al, '0' ; Make sure character is a digit. + cmp al, '0' ; Make sure character is a digit. jb .error cmp al, '9' ja .error - fdiv dword [ten] ; Next decimal place + fdiv dword [ten] ; Next decimal place sub al, '0' mov ah, 0 mov [tmp], ax @@ -626,123 +633,196 @@ atof_convertFractionalPart: jmp .mainLoop .error: - stc ; Set error (carry) flag. - fstp st0 ; Pop top of fpu stack. + stc ; Set error (carry) flag. + fstp st0 ; Pop top of fpu stack. ret .exit: - clc ; Clear error (carry) flag. - fstp st0 ; Pop top of fpu stack. + clc ; Clear error (carry) flag. + fstp st0 ; Pop top of fpu stack. ret ; ********************************************* -; ******* ОПРЕДЕЛЕНИЕ И ОТРИСОВКА ОКНА ******** +; ******* WINDOW DEFINITIONS AND DRAW ********* ; ********************************************* draw_window: + + mov eax,48 + mov ebx,3 + mov ecx,sc + mov edx,sizeof.system_colors + int 0x40 - mcall 12,1 - mcall 0,200*65536+255,200*65536+180,0x03ddeeff ; функция 0: определить и отрисовать окно - mcall 4,8*65536+8,0x10000000,labelt,label_len ; ЗАГОЛОВОК ОКНА + mov eax,12 + mov ebx,1 + int 0x40 + + mov eax,0 + mov ebx,200*65536+255 + mov ecx,200*65536+180 + mov edx,[sc.work] + or edx,0x33000000 + mov edi,header + int 0x40 - mov ebx,24*65536+28 - mov ecx,70*65536+18 + mov eax,8 + mov ebx,19*65536+28 + mov ecx,49*65536+18 mov edx,6 - mov esi,0x0066ee + mov esi,[sc.work_button] mov edi,7 newbutton: dec edi jnz no_new_row mov edi,7 - mov ebx,24*65536+25+3 + mov ebx,19*65536+28 add ecx,20*65536 no_new_row: - mcall 8 + int 0x40 add ebx,30*65536 inc edx cmp edx,39 jbe newbutton - - mcall 8,225*65536+8,28*65536+8,3 ; 'dec-bin-hex' - mcall 8,204*65536+28,70*65536+18,2,0xcc0000 ; 'C' - - mov ebx,25*65536+75 ; Прорисовка подписей кнопок - mov ecx,0xffffff - mov edx,text - mov esi,34 + mcall ,199*65536+28,49*65536+18,2 ; 'C' + mcall ,220*65536+8,7*65536+8,3 ; 'dec-bin-hex' + + mov eax,4 + mov ebx,27*65536+54 + mov ecx,[sc.work_button_text] + mov edx,text + mov esi,33 newline: - mcall 4 + int 0x40 add ebx,20 - add edx,34 + add edx,33 cmp [edx],byte 'x' jne newline + call print_display - mcall 12,2 + + mov eax,12 + mov ebx,2 + int 0x40 + ret print_display: pusha - mcall 13,100*65536+120,25*65536+13,0x00ddeeff - mcall 13,23*65536+210,40*65536+13,0xffffff - mcall 4,140*65536+28,0,calc,1 + mcall 13,18*65536+210,19*65536+13,0xffffff + mov eax,4 - mov ebx,203*65536+29 - mov ecx,0 + mov ebx,135*65536+7 + mov ecx,[sc.work_text] + or ecx,0x40000000 + mov edx,calc + mov esi,1 + mov edi,[sc.work] + int 0x40 + + mov ebx,198*65536+8 mov edx,[display_type] shl edx,2 add edx,display_type_text mov esi,3 + mov edi,[sc.work] int 0x40 - + cmp [dsign],byte '+' - je positive - mcall 4,28*65536+43,0x0,dsign,1 - -positive: - cmp [display_type],0 ; десятичная система счисления + je positive + mov ebx,23*65536+22 + mov ecx,0x0 + mov edx,dsign + mov esi,1 + int 0x40 + +positive: + cmp [display_type],0 jne no_display_decimal cmp [decimal],0 je whole - mcall 47,10*65536,[integer],125*65536+43,0x0 ; отображать 10 цифр - mcall 4,185*65536+43,0x0,dot,1 - mcall 47,6*65536,[decimal],192*65536+43,0x0 ; отображать 6 цифр после запятой + + mov ebx,180*65536+22 + mov ecx,0x0 + mov edx,dot + mov esi,1 + int 0x40 + + mov eax,47 + mov ebx,10*65536 + mov ecx,[integer] + mov edx,120*65536+22 + mov esi,0x0 + int 0x40 + + mov ebx,6*65536 + mov ecx,[decimal] + mov edx,187*65536+22 + mov esi,0x0 + int 0x40 + popa ret whole: + mov ebx,220*65536+22 + mov ecx,0x0 + mov edx,dot + mov esi,1 + int 0x40 + cmp [integer],0 je null - mcall 47,10*65536,[integer],165*65536+43,0x0 - mcall 4,225*65536+43,0x0,dot,1 + + mov eax,47 + mov ebx,10*65536 + mov ecx,[integer] + mov edx,160*65536+22 + mov esi,0x0 + int 0x40 + popa ret - + no_display_decimal: - cmp [integer],0 - je null cmp [display_type],1 jne no_display_hexadecimal - mcall 47,1*256+8*65536,[integer],178*65536+43,0x0 ; отображать 8 шестнадцатиричных цифр + cmp [integer],0 + je null + + mov eax,47 + mov ebx,256+8*65536 + mov ecx,[integer] + mov edx,173*65536+22 + mov esi,0x0 + int 0x40 + popa ret no_display_hexadecimal: cmp [integer],0 je null - cmp [display_type],2 - jne null - mcall 47,2*256+32*65536,[integer],37*65536+43,0x0 ; отображать 32 двоичные цифры + + mov eax,47 + mov ebx,2*256+32*65536 + mov ecx,[integer] + mov edx,32*65536+22 + mov esi,0x0 + int 0x40 + popa ret null: - mcall 47,1*65536,0,219*65536+43,0x0 - cmp [display_type],0 - jne end_pr - mcall 4,225*65536+43,0x0,dot,1 - -end_pr: + mov eax,47 + mov ebx,1*65536 + mov ecx,0 + mov edx,214*65536+22 + mov esi,0x0 + int 0x40 + popa ret @@ -768,36 +848,36 @@ clear_all: ret -;Область данных +;data + +header db appname,version,0 display_type dd 0 ; 0 = decimal, 1 = hexadecimal, 2= binary entry_multiplier dd 10 - -display_start_y dd 0x0 display_type_text db 'dec hex bin' -dot db '.' -calc db ' ' +dot db '.' +calc db ' ' integer dd 0 decimal dd 0 kymppi dd 10 dsign: -muuta1 db '+0000000000.000000' -muuta2 db '+0000000000.000000' -muuta0 db '+0000000000.000000' +muuta1 db '+0000000000.000000' +muuta2 db '+0000000000.000000' +muuta0 db '+0000000000.000000' text: - db ' A B C D E F C ' - db ' 1 2 3 + Int Sin Asin' - db ' 4 5 6 - 1/x Cos Acos' - db ' 7 8 9 / x^2 Tan Atan' - db ' +/- 0 . * Sqr Pi = ' + db ' A B C D E F C ' + db ' 1 2 3 + Int Sin Asin' + db ' 4 5 6 - 1/x Cos Acos' + db ' 7 8 9 / x^2 Tan Atan' + db '+/- 0 . * Sqr Pi = ' db 'x' asci: db 49,50,51,52,53,54,55,56,57,48,43,61,45,42,47,44,46,27 butid: db 12,13,14,19,20,21,26,27,28,34,15,39,22,36,29,35,35,1 -labelt: - db 'Calc 1.3' -label_len = $ - labelt -I_END: \ No newline at end of file + +I_END: + +sc system_colors