0,0 → 1,704 |
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
; ; |
; Stack Configuration Tool ; |
; ; |
; Compile with FASM for Menuet ; |
; ; |
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
|
use32 |
|
org 0x0 |
|
db 'MENUET01' ; 8 byte id |
dd 0x01 ; header version |
dd START ; start of code |
dd I_END ; size of image |
dd 0x100000 ; memory for app |
dd 0x7fff0 ; esp |
dd 0x0 , 0x0 ; I_Param , I_Icon |
|
include 'lang.inc' |
START: ; start of execution |
|
call draw_window ; at first, draw the window |
|
still: |
|
mov eax,10 ; wait here for event |
int 0x40 |
|
cmp eax,1 ; redraw request ? |
je red |
cmp eax,2 ; key in buffer ? |
je key |
cmp eax,3 ; button in buffer ? |
je button |
|
jmp still |
|
red: ; redraw |
call draw_window |
jmp still |
|
key: ; key |
mov eax,2 ; just read it and ignore |
int 0x40 |
jmp still |
|
button: ; button |
mov eax,17 ; get id |
int 0x40 |
|
shr eax,8 |
|
cmp eax,1 ; button id=1 ? |
jne noclose |
mov eax,-1 ; close this program |
int 0x40 |
noclose: |
|
cmp eax,2 |
je read_stack_setup |
|
cmp eax,3 |
je apply_stack_setup |
|
cmp eax,11 |
jb no_set_interface |
cmp eax,14 |
jg no_set_interface |
sub eax,11 |
mov [interface],eax |
call draw_window |
jmp still |
no_set_interface: |
|
cmp eax,21 |
jb no_ip_sf |
cmp eax,22 |
jg no_ip_sf |
sub eax,21 |
not eax |
and eax,1 |
mov [assigned],eax |
call draw_window |
jmp still |
no_ip_sf: |
|
cmp eax,7 ; GET IP |
jne no_read_ip |
mov [string_x],205 |
mov [string_y],80 |
mov [string_length],15 |
call read_string |
mov esi,string-1 |
mov edi,ip_address |
xor eax,eax |
ip1: |
inc esi |
cmp [esi],byte '0' |
jb ip2 |
cmp [esi],byte '9' |
jg ip2 |
imul eax,10 |
movzx ebx,byte [esi] |
sub ebx,48 |
add eax,ebx |
jmp ip1 |
ip2: |
mov [edi],al |
xor eax,eax |
inc edi |
cmp edi,ip_address+3 |
jbe ip1 |
call draw_window |
jmp still |
no_read_ip: |
|
cmp eax,5 ; GET COM PORT |
jne no_read_comport |
mov [string_x],272 |
mov [string_y],40 |
mov [string_length],3 |
call read_string |
movzx eax,byte [string] |
cmp eax,'A' |
jb gcp1 |
sub eax,'A'-'9'-1 |
gcp1: |
sub eax,48 |
shl eax,8 |
mov ebx,eax |
movzx eax,byte [string+1] |
cmp eax,'A' |
jb gcp2 |
sub eax,'A'-'9'-1 |
gcp2: |
sub eax,48 |
shl eax,4 |
add ebx,eax |
movzx eax,byte [string+2] |
cmp eax,'A' |
jb gcp3 |
sub eax,'A'-'9'-1 |
gcp3: |
sub eax,48 |
add ebx,eax |
mov [com_add],ebx |
call draw_window |
jmp still |
no_read_comport: |
|
cmp eax,6 ; GET COM IRQ |
jne no_read_comirq |
mov [string_x],284 |
mov [string_y],50 |
mov [string_length],1 |
call read_string |
movzx eax,byte [string] |
cmp eax,'A' |
jb gci1 |
sub eax,'A'-'9'-1 |
gci1: |
sub eax,48 |
mov [com_irq],eax |
call draw_window |
jmp still |
no_read_comirq: |
|
cmp eax, 8 ; set gateway ip |
jne no_set_gateway |
|
mov [string_x],205 |
mov [string_y],90 |
mov [string_length],15 |
call read_string |
mov esi,string-1 |
mov edi,gateway_ip |
xor eax,eax |
gip1: |
inc esi |
cmp [esi],byte '0' |
jb gip2 |
cmp [esi],byte '9' |
jg gip2 |
imul eax,10 |
movzx ebx,byte [esi] |
sub ebx,48 |
add eax,ebx |
jmp gip1 |
gip2: |
mov [edi],al |
xor eax,eax |
inc edi |
cmp edi,gateway_ip+3 |
jbe gip1 |
call draw_window |
|
jmp still |
|
no_set_gateway: |
cmp eax, 9 |
jne no_set_subnet |
|
mov [string_x],205 |
mov [string_y],100 |
mov [string_length],15 |
call read_string |
mov esi,string-1 |
mov edi,subnet_mask |
xor eax,eax |
sip1: |
inc esi |
cmp [esi],byte '0' |
jb sip2 |
cmp [esi],byte '9' |
jg sip2 |
imul eax,10 |
movzx ebx,byte [esi] |
sub ebx,48 |
add eax,ebx |
jmp sip1 |
sip2: |
mov [edi],al |
xor eax,eax |
inc edi |
cmp edi,subnet_mask+3 |
jbe sip1 |
call draw_window |
|
jmp still |
|
no_set_subnet: |
cmp eax, 10 |
jne no_set_dns |
|
mov [string_x],205 |
mov [string_y],110 |
mov [string_length],15 |
call read_string |
mov esi,string-1 |
mov edi,dns_ip |
xor eax,eax |
dip1: |
inc esi |
cmp [esi],byte '0' |
jb dip2 |
cmp [esi],byte '9' |
jg dip2 |
imul eax,10 |
movzx ebx,byte [esi] |
sub ebx,48 |
add eax,ebx |
jmp dip1 |
dip2: |
mov [edi],al |
xor eax,eax |
inc edi |
cmp edi,dns_ip+3 |
jbe dip1 |
call draw_window |
|
jmp still |
|
no_set_dns: |
jmp still |
|
|
|
read_stack_setup: |
|
mov eax,52 |
mov ebx,0 |
int 0x40 |
mov [config],eax |
|
mov eax,52 |
mov ebx,1 |
int 0x40 |
mov dword [ip_address],eax |
|
mov eax,52 |
mov ebx,9 |
int 0x40 |
mov dword [gateway_ip],eax |
|
mov eax,52 |
mov ebx,10 |
int 0x40 |
mov dword [subnet_mask],eax |
|
mov eax,52 |
mov ebx,13 |
int 0x40 |
mov dword [dns_ip],eax |
|
mov eax,[config] ; unwrap com IRQ |
shr eax,8 |
and eax,0xf |
mov [com_irq],eax |
|
mov eax,[config] ; unwrap com PORT |
shr eax,16 |
and eax,0xfff |
mov [com_add],eax |
|
mov eax,[config] ; unwrap IRQ |
and eax,0xf |
mov [interface],eax |
|
mov eax,[config] ; unwrap com PORT |
shr eax,7 |
and eax,1 |
mov [assigned],eax |
|
call draw_window |
|
jmp still |
|
|
apply_stack_setup: |
|
mov eax,[com_irq] |
shl eax,8 |
mov ebx,[com_add] |
shl ebx,16 |
add eax,ebx |
add eax,[interface] |
mov ebx,[assigned] |
shl ebx,7 |
add eax,ebx |
mov [config],eax |
|
mov eax,52 |
mov ebx,3 |
mov ecx,dword [ip_address] |
int 0x40 |
|
mov eax,52 |
mov ebx,11 |
mov ecx,dword [gateway_ip] |
int 0x40 |
|
mov eax,52 |
mov ebx,12 |
mov ecx,dword [subnet_mask] |
int 0x40 |
|
mov eax,52 |
mov ebx,14 |
mov ecx,dword [dns_ip] |
int 0x40 |
|
mov eax,52 |
mov ebx,2 |
mov ecx,[config] |
int 0x40 |
|
jmp still |
|
|
string_length dd 16 |
string_x dd 200 |
string_y dd 60 |
|
string db '________________' |
|
|
read_string: |
|
mov edi,string |
mov eax,'_' |
mov ecx,[string_length] |
cld |
rep stosb |
call print_text |
|
mov edi,string |
f11: |
mov eax,10 |
int 0x40 |
cmp eax,2 |
jne read_done |
mov eax,2 |
int 0x40 |
shr eax,8 |
cmp eax,13 |
je read_done |
cmp eax,8 |
jnz nobsl |
cmp edi,string |
jz f11 |
sub edi,1 |
mov [edi],byte '_' |
call print_text |
jmp f11 |
nobsl: |
cmp eax,dword 31 |
jbe f11 |
cmp eax,dword 95 |
jb keyok |
sub eax,32 |
keyok: |
mov [edi],al |
call print_text |
|
inc edi |
mov esi,string |
add esi,[string_length] |
cmp esi,edi |
jnz f11 |
|
read_done: |
|
call print_text |
|
ret |
|
|
print_text: |
|
pusha |
|
mov eax,13 |
mov ebx,[string_x] |
shl ebx,16 |
add ebx,[string_length] |
imul bx,6 |
mov ecx,[string_y] |
shl ecx,16 |
mov cx,8 |
mov edx,0xffffff |
int 0x40 |
|
mov eax,4 |
mov ebx,[string_x] |
shl ebx,16 |
add ebx,[string_y] |
mov ecx,0x000000 |
mov edx,string |
mov esi,[string_length] |
int 0x40 |
|
popa |
ret |
|
|
|
|
|
|
|
; ********************************************* |
; ******* WINDOW DEFINITIONS AND DRAW ******** |
; ********************************************* |
|
|
draw_window: |
|
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+330 ; [x start] *65536 + [x size] |
mov ecx,100*65536+157 ; [y start] *65536 + [y size] |
mov edx,0x03ffffff ; color of work area RRGGBB,8->color gl |
mov esi,0x806688cc |
mov edi,0x006688cc |
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,0x00ddeeff ; color of text RRGGBB |
mov edx,labelt ; pointer to text beginning |
mov esi,labellen-labelt ; text length |
int 0x40 |
|
|
mov eax,8 ; BUTTON : CLOSE WINDOW |
mov ebx,(330-19)*65536+12 |
mov ecx,5*65536+12 |
mov edx,1 |
mov esi,[button_color] |
; int 0x40 |
|
mov eax,8 ; BUTTON : READ SETUP |
mov ebx,90*65536+65 |
mov ecx,127*65536+12 |
mov edx,2 |
int 0x40 |
|
mov eax,8 ; BUTTON : APPLY SETUP |
mov ebx,163*65536+65 |
mov ecx,127*65536+12 |
mov edx,3 |
int 0x40 |
|
mov eax,8 ; BUTTONS 11-14 : SELECT INTERFACE |
mov ebx,29*65536+8 |
mov ecx,39*65536+8 |
mov edx,11 |
interface_select: |
int 0x40 |
add ecx,10*65536 |
inc edx |
cmp edx,11+4 |
jb interface_select |
|
mov ebx,[interface] ; PRINT SELECTED INTERFACE 'X' |
imul ebx,10 |
add ebx,31*65536+39 |
mov eax,4 |
mov ecx,0xffffff |
mov edx,xx |
mov esi,1 |
int 0x40 |
|
mov eax,8 ; BUTTONS 21-22 : SERVER / MANUAL IP |
mov ebx,143*65536+8 |
mov ecx,69*65536+8 |
mov edx,21 |
mov esi,[button_color] |
int 0x40 |
mov eax,8 |
mov ebx,143*65536+8 |
mov ecx,79*65536+8 |
mov edx,22 |
int 0x40 |
mov ebx,[assigned] ; PRINT SELECTED SERVER/MANUAL 'X' |
not ebx |
and ebx,1 |
imul ebx,10 |
add ebx,145*65536+69 |
mov eax,4 |
mov ecx,0xffffff |
mov edx,xx |
mov esi,1 |
int 0x40 |
|
mov eax,47 ; COM ADDRESS |
mov ebx,3*65536+1*256 |
mov ecx,[com_add] |
mov edx,272*65536+40 |
mov esi,0x000000 |
int 0x40 |
|
mov eax,47 ; COM IRQ |
mov ebx,1*65536+1*256 |
mov ecx,[com_irq] |
mov edx,(266+3*6)*65536+50 |
mov esi,0x000000 |
int 0x40 |
|
mov edi,ip_address |
mov edx,205*65536+80 |
mov esi,0x000000 |
mov ebx,3*65536 |
ipdisplay: |
mov eax,47 |
movzx ecx,byte [edi] |
int 0x40 |
add edx,6*4*65536 |
inc edi |
cmp edi,ip_address+4 |
jb ipdisplay |
|
mov edi,gateway_ip |
mov edx,205*65536+90 |
mov esi,0x000000 |
mov ebx,3*65536 |
gipdisplay: |
mov eax,47 |
movzx ecx,byte [edi] |
int 0x40 |
add edx,6*4*65536 |
inc edi |
cmp edi,gateway_ip+4 |
jb gipdisplay |
|
mov edi,subnet_mask |
mov edx,205*65536+100 |
mov esi,0x000000 |
mov ebx,3*65536 |
sipdisplay: |
mov eax,47 |
movzx ecx,byte [edi] |
int 0x40 |
add edx,6*4*65536 |
inc edi |
cmp edi,subnet_mask+4 |
jb sipdisplay |
|
mov edi,dns_ip |
mov edx,205*65536+110 |
mov esi,0x000000 |
mov ebx,3*65536 |
dipdisplay: |
mov eax,47 |
movzx ecx,byte [edi] |
int 0x40 |
add edx,6*4*65536 |
inc edi |
cmp edi,dns_ip+4 |
jb dipdisplay |
|
|
mov eax,8 ; BUTTON 5 : SET PORT |
mov ebx,299*65536+8 |
mov ecx,39*65536+8 |
mov edx,5 |
mov esi,[button_color] |
int 0x40 |
mov eax,8 ; BUTTON 6 : SET IRQ |
mov ebx,299*65536+8 |
mov ecx,49*65536+8 |
mov edx,6 |
int 0x40 |
mov eax,8 ; BUTTON 7 : SET IP |
mov ebx,299*65536+8 |
mov ecx,79*65536+8 |
mov edx,7 |
int 0x40 |
|
mov eax,8 ; BUTTON 8 : SET gateway IP |
mov ebx,299*65536+8 |
mov ecx,89*65536+8 |
mov edx,8 |
int 0x40 |
|
mov eax,8 ; BUTTON 9 : SET subnet |
mov ebx,299*65536+8 |
mov ecx,99*65536+8 |
mov edx,9 |
int 0x40 |
|
mov eax,8 ; BUTTON 10 : SET dns ip |
mov ebx,299*65536+8 |
mov ecx,109*65536+8 |
mov edx,10 |
int 0x40 |
|
mov ebx,31*65536+40 ; draw info text with function 4 |
mov edx,text |
mov esi,49 |
newline: |
mov ecx,0x224466 |
cmp [edx],byte 'w' |
jne nowhite |
mov ecx,0xeeeeee |
nowhite: |
inc edx |
mov eax,4 |
int 0x40 |
add ebx,10 |
add edx,49 |
cmp [edx],byte 'x' |
jne newline |
|
mov eax,12 ; function 12:tell os about windowdraw |
mov ebx,2 ; 2, end of draw |
int 0x40 |
|
ret |
|
|
; DATA AREA |
|
text: |
db ' Not active Modem Com Port: 0x < ' |
db ' Slip Modem Com Irq: 0x < ' |
db ' PPP ' |
db ' Packet Driver IP server assigned ' |
db ' Fixed: . . . < ' |
db ' Gateway: . . . < ' |
db ' Subnet: . . . < ' |
db ' DNS IP: . . . < ' |
db ' ' |
db 'w READ APPLY ' |
|
xx: db 'x <- END MARKER, DONT DELETE ' |
|
button_color dd 0x2254b9 |
|
labelt: db 'STACK CONFIGURATION' |
labellen: |
|
ip_address db 000,000,000,000 |
gateway_ip db 000,000,000,000 |
subnet_mask db 000,000,000,000 |
dns_ip db 000,000,000,000 |
|
com_irq dd 0 ; irq for slip/ppp |
com_add dd 0 ; com port address for slip/ppp |
interface dd 0 ; not active,slip,ppp,packet driver |
assigned dd 1 ; get ip from server |
|
config dd 0 |
|
I_END: |
|
|
Property changes: |
Added: svn:eol-style |
+native |
\ No newline at end of property |