Subversion Repositories Kolibri OS

Rev

Rev 1010 | Go to most recent revision | Blame | Last modification | View Log | Download | RSS feed

  1.         ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  2. ;                                          ;
  3. ;   Stack Configuration Tool               ;
  4. ;                                          ;
  5. ;   Compile with FASM for Menuet           ;
  6. ;                                          ;
  7. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  8.  
  9.  
  10. memsize = 100000h
  11.                org 0
  12. PARAMS  = memsize - 1024
  13.  
  14. use32
  15.  
  16.                db     'MENUET01'              ; 8 byte id
  17.                dd     0x01                    ; header version
  18.                dd     START                   ; start of code
  19.                dd     I_END                   ; size of image
  20.                dd     memsize                 ; memory for app
  21.                dd     memsize - 1024          ; esp
  22.                dd     PARAMS , 0x0            ; I_Param , I_Icon
  23.  
  24. include 'lang.inc'
  25. include '../../../macros.inc'
  26.  
  27. START:                          ; start of execution
  28.  
  29. read_stack_setup:
  30.  
  31.     mov  eax,52
  32.     mov  ebx,0
  33.     mcall
  34.     mov  [config],eax
  35.  
  36.     mov  eax,52
  37.     mov  ebx,1
  38.     mcall
  39.     mov  dword [ip_address],eax
  40.  
  41.     mov  eax,52
  42.     mov  ebx,9
  43.     mcall
  44.     mov  dword [gateway_ip],eax
  45.  
  46.     mov  eax,52
  47.     mov  ebx,10
  48.     mcall
  49.     mov  dword [subnet_mask],eax
  50.  
  51.     mov  eax,52
  52.     mov  ebx,13
  53.     mcall
  54.     mov  dword [dns_ip],eax
  55.  
  56.     mov  eax,[config]   ; unwrap com IRQ
  57.     shr  eax,8
  58.     and  eax,0xf
  59.     mov  [com_irq],eax
  60.  
  61.     mov  eax,[config]   ; unwrap com PORT
  62.     shr  eax,16
  63.     and  eax,0xfff
  64.     mov  [com_add],eax
  65.  
  66.     mov  eax,[config]   ; unwrap IRQ
  67.     and  eax,0xf
  68.     mov  [interface],eax
  69.  
  70.     mov  eax,[config]   ; unwrap com PORT
  71.     shr  eax,7
  72.     and  eax,1
  73.     mov  [assigned],eax
  74.  
  75.   red:
  76.     call draw_window            ; at first, draw the window
  77.  
  78. still:
  79.  
  80.     mov  eax,10                 ; wait here for event
  81.     mcall
  82.  
  83.     cmp  eax,1                  ; redraw request ?
  84.     jz   red
  85.     cmp  eax,2                  ; key in buffer ?
  86.     jnz  button
  87.  
  88.   key:                          ; key
  89. ;    mov  al,2                  ; just read it and ignore
  90.     mcall
  91.     jmp  still
  92.  
  93.   button:                       ; button
  94.     mov  al,17                 ; get id
  95.     mcall
  96.  
  97.     shr  eax,8
  98.  
  99.     dec  eax                     ; button id=1 ?
  100.     jne  noclose
  101.     or   eax,-1                 ; close this program
  102.     mcall
  103.   noclose:
  104.  
  105.     dec  eax
  106.     je   read_stack_setup
  107.  
  108.     dec  eax
  109.     jne  no_apply_stack_setup
  110.     call apply_stack_setup
  111.     jmp  still
  112.  
  113. no_apply_stack_setup:
  114.     dec  eax                  ; GET COM PORT
  115.     dec  eax
  116.     jne  no_read_comport
  117.     mov  [string_x],272
  118.     mov  [string_y],40
  119.     mov  [string_length],3
  120.     call read_string
  121.     movzx eax,byte [string]
  122.     cmp  eax,'A'
  123.     jb   gcp1
  124.     sub  eax,'A'-'9'-1
  125.    gcp1:
  126.     sub  eax,48
  127.     shl  eax,8
  128.     mov  ebx,eax
  129.     movzx eax,byte [string+1]
  130.     cmp  eax,'A'
  131.     jb   gcp2
  132.     sub  eax,'A'-'9'-1
  133.    gcp2:
  134.     sub  eax,48
  135.     shl  eax,4
  136.     add  ebx,eax
  137.     movzx eax,byte [string+2]
  138.     cmp  eax,'A'
  139.     jb   gcp3
  140.     sub  eax,'A'-'9'-1
  141.    gcp3:
  142.     sub  eax,48
  143.     add  ebx,eax
  144.     mov  [com_add],ebx
  145.     jmp  red
  146.    no_read_comport:
  147.  
  148.     dec  eax                  ; GET COM IRQ
  149.     jne  no_read_comirq
  150.     mov  [string_x],284
  151.     mov  [string_y],50
  152.     mov  [string_length],1
  153.     call read_string
  154.     movzx eax,byte [string]
  155.     cmp  eax,'A'
  156.     jb   gci1
  157.     sub  eax,'A'-'9'-1
  158.    gci1:
  159.     sub  eax,48
  160.     mov  [com_irq],eax
  161.     jmp  red
  162.     no_read_comirq:
  163.  
  164.     dec  eax                  ; GET IP
  165.     jne  no_read_ip
  166.     mov  [string_x],205
  167.     mov  [string_y],80
  168.     mov  [string_length],15
  169.     call read_string
  170.     mov   esi,string-1
  171.     mov   edi,ip_address
  172.    ip0:
  173.     xor   eax,eax
  174.    ip1:
  175.     inc   esi
  176.     cmp   [esi],byte '0'
  177.     jb    ip2
  178.     cmp   [esi],byte '9'
  179.     jg    ip2
  180.     imul  eax,10
  181.     movzx ebx,byte [esi]
  182.     sub   ebx,48
  183.     add   eax,ebx
  184.     jmp   ip1
  185.    ip2:
  186.     stosb
  187.     cmp   edi,ip_address+3
  188.     jbe   ip0
  189.     jmp   red
  190.    no_read_ip:
  191.  
  192.     dec     eax                 ; set gateway ip
  193.     jne     no_set_gateway
  194.  
  195.     mov  [string_x],205
  196.     mov  [string_y],90
  197.     mov  [string_length],15
  198.     call read_string
  199.     mov   esi,string-1
  200.     mov   edi,gateway_ip
  201.    gip0:
  202.     xor   eax,eax
  203.    gip1:
  204.     inc   esi
  205.     cmp   [esi],byte '0'
  206.     jb    gip2
  207.     cmp   [esi],byte '9'
  208.     jg    gip2
  209.     imul  eax,10
  210.     movzx ebx,byte [esi]
  211.     sub   ebx,48
  212.     add   eax,ebx
  213.     jmp   gip1
  214.    gip2:
  215.     stosb
  216.     cmp   edi,gateway_ip+3
  217.     jbe   gip0
  218.     jmp   red
  219.  
  220.   no_set_gateway:
  221.  
  222.     dec     eax
  223.     jne     no_set_subnet
  224.  
  225.     mov  [string_x],205
  226.     mov  [string_y],100
  227.     mov  [string_length],15
  228.     call read_string
  229.     mov   esi,string-1
  230.     mov   edi,subnet_mask
  231.    sip0:
  232.     xor   eax,eax
  233.    sip1:
  234.     inc   esi
  235.     cmp   [esi],byte '0'
  236.     jb    sip2
  237.     cmp   [esi],byte '9'
  238.     jg    sip2
  239.     imul  eax,10
  240.     movzx ebx,byte [esi]
  241.     sub   ebx,48
  242.     add   eax,ebx
  243.     jmp   sip1
  244.    sip2:
  245.     stosb
  246.     cmp   edi,subnet_mask+3
  247.     jbe   sip0
  248.     jmp   red
  249.  
  250.   no_set_subnet:
  251.     dec     eax
  252.     jne     no_set_dns
  253.  
  254.     mov  [string_x],205
  255.     mov  [string_y],110
  256.     mov  [string_length],15
  257.     call read_string
  258.     mov   esi,string-1
  259.     mov   edi,dns_ip
  260.    dip0:
  261.     xor   eax,eax
  262.    dip1:
  263.     inc   esi
  264.     cmp   [esi],byte '0'
  265.     jb    dip2
  266.     cmp   [esi],byte '9'
  267.     jg    dip2
  268.     imul  eax,10
  269.     movzx ebx,byte [esi]
  270.     sub   ebx,48
  271.     add   eax,ebx
  272.     jmp   dip1
  273.    dip2:
  274.     stosb
  275.     cmp   edi,dns_ip+3
  276.     jbe   dip0
  277.     jmp   red
  278.  
  279.   no_set_dns:
  280.  
  281.     dec  eax
  282.     jb   no_set_interface
  283.     cmp  eax,14-11
  284.     ja   no_set_interface
  285.     mov  [interface],eax
  286.     jmp  red
  287.    no_set_interface:
  288.  
  289.     sub  eax,21-11
  290.     jb   no_ip_sf
  291.     cmp  eax,22-21
  292.     ja   no_ip_sf
  293.     xor  eax,1
  294.     mov  [assigned],eax
  295.     jmp  red
  296.     no_ip_sf:
  297.     jmp  still
  298.  
  299. apply_stack_setup:
  300.  
  301.     mov  eax,[com_irq]
  302.     shl  eax,8
  303.     mov  ebx,[com_add]
  304.     shl  ebx,16
  305.     add  eax,ebx
  306.     add  eax,[interface]
  307.     mov  ebx,[assigned]
  308.     shl  ebx,7
  309.     add  eax,ebx
  310.     mov  [config],eax
  311.  
  312.     mov  eax,52
  313.     mov  ebx,3
  314.     mov  ecx,dword [ip_address]
  315.     mcall
  316.  
  317.     mov  eax,52
  318.     mov  ebx,11
  319.     mov  ecx,dword [gateway_ip]
  320.     mcall
  321.  
  322.     mov  eax,52
  323.     mov  ebx,12
  324.     mov  ecx,dword [subnet_mask]
  325.     mcall
  326.  
  327.     mov  eax,52
  328.     mov  ebx,14
  329.     mov  ecx,dword [dns_ip]
  330.     mcall
  331.  
  332.     mov  eax,52
  333.     mov  ebx,2
  334.     mov  ecx,[config]
  335.     mcall
  336.  
  337.     ret
  338.  
  339.  
  340. string_length  dd    16
  341. string_x       dd    200
  342. string_y       dd    60
  343.  
  344. string         db    '________________'
  345.  
  346.  
  347. read_string:
  348.  
  349.     mov  edi,string
  350.     mov  eax,'_'
  351.     mov  ecx,[string_length]
  352.     cld
  353.     rep  stosb
  354.     call print_text
  355.  
  356.     mov  edi,string
  357.   f11:
  358.     mov  eax,10
  359.     mcall
  360.     cmp  eax,2
  361.     jne  read_done
  362. ;    mov  eax,2
  363.     mcall
  364.     shr  eax,8
  365.     cmp  eax,13
  366.     je   read_done
  367.     cmp  eax,8
  368.     jnz  nobsl
  369.     cmp  edi,string
  370.     jz   f11
  371.     sub  edi,1
  372.     mov  [edi],byte '_'
  373.     call print_text
  374.     jmp  f11
  375.   nobsl:
  376.     cmp  eax,dword 31
  377.     jbe  f11
  378.     cmp  eax,dword 95
  379.     jb   keyok
  380.     sub  eax,32
  381.   keyok:
  382.     mov  [edi],al
  383.     call print_text
  384.  
  385.     inc  edi
  386.     mov  esi,string
  387.     add  esi,[string_length]
  388.     cmp  esi,edi
  389.     jnz  f11
  390.  
  391.   read_done:
  392.  
  393. print_text:
  394.  
  395.     pusha
  396.  
  397.     mov  eax,13
  398.     mov  ebx,[string_x]
  399.     shl  ebx,16
  400.     add  ebx,[string_length]
  401.     imul bx,6
  402.     mov  ecx,[string_y]
  403.     shl  ecx,16
  404.     mov  cx,8
  405.     mov  edx,0xffffff
  406.     mcall
  407.  
  408.     mov  eax,4
  409.     mov  ebx,[string_x]
  410.     shl  ebx,16
  411.     add  ebx,[string_y]
  412.     mov  ecx,0x000000
  413.     mov  edx,string
  414.     mov  esi,[string_length]
  415.     mcall
  416.  
  417.     popa
  418.     ret
  419.  
  420.  
  421.  
  422.  
  423.  
  424.  
  425.  
  426. ;   *********************************************
  427. ;   *******  WINDOW DEFINITIONS AND DRAW ********
  428. ;   *********************************************
  429.  
  430.  
  431. draw_window:
  432.  
  433.     mov  eax,12                    ; function 12:tell os about windowdraw
  434.     mov  ebx,1                     ; 1, start of draw
  435.     mcall
  436.  
  437.                                    ; DRAW WINDOW
  438.     mov  eax,0                     ; function 0 : define and draw window
  439.     mov  ebx,100*65536+330         ; [x start] *65536 + [x size]
  440.     mov  ecx,100*65536+157         ; [y start] *65536 + [y size]
  441.     mov  edx,0x14ffffff            ; color of work area RRGGBB,8->color gl
  442.     mov  edi,title                ; WINDOW LABEL
  443.     mcall
  444.  
  445.  
  446.     mov  eax,8                     ; BUTTON : READ SETUP
  447.     mov  ebx,90*65536+65
  448.     mov  ecx,127*65536+12
  449.     mov  edx,2
  450.     mov  esi,[button_color]
  451.     mcall
  452.  
  453.     ;mov  eax,8                     ; BUTTON : APPLY SETUP
  454.     mov  ebx,163*65536+65
  455.     mov  ecx,127*65536+12
  456.     mov  edx,3
  457.     mcall
  458.  
  459.     ;mov  eax,8                     ; BUTTONS 11-14 : SELECT INTERFACE
  460.     mov  ebx,29*65536+8
  461.     mov  ecx,39*65536+8
  462.     mov  edx,11
  463.   interface_select:
  464.     mcall
  465.     add  ecx,10*65536
  466.     inc  edx
  467.     cmp  edx,11+4
  468.     jb   interface_select
  469.  
  470.     mov  ebx,[interface]           ; PRINT SELECTED INTERFACE 'X'
  471.     imul ebx,10
  472.     add  ebx,31*65536+39
  473.     mov  eax,4
  474.     mov  ecx,0xffffff
  475.     mov  edx,xx
  476.     mov  esi,1
  477.     mcall
  478.  
  479.     mov  eax,8                    ; BUTTONS 21-22 : SERVER / MANUAL IP
  480.     mov  ebx,143*65536+8
  481.     mov  ecx,69*65536+8
  482.     mov  edx,21
  483.     mov  esi,[button_color]
  484.     mcall
  485.     ;mov  eax,8
  486.     mov  ebx,143*65536+8
  487.     mov  ecx,79*65536+8
  488.     mov  edx,22
  489.     mcall
  490.     mov  ebx,[assigned]           ; PRINT SELECTED SERVER/MANUAL 'X'
  491.     not  ebx
  492.     and  ebx,1
  493.     imul ebx,10
  494.     add  ebx,145*65536+69
  495.     mov  eax,4
  496.     mov  ecx,0xffffff
  497.     mov  edx,xx
  498.     mov  esi,1
  499.     mcall
  500.  
  501.     mov  eax,47                   ; COM ADDRESS
  502.     mov  ebx,3*65536+1*256
  503.     mov  ecx,[com_add]
  504.     mov  edx,272*65536+40
  505.     mov  esi,0x000000
  506.     mcall
  507.  
  508.     ;mov  eax,47                   ; COM IRQ
  509.     mov  ebx,1*65536+1*256
  510.     mov  ecx,[com_irq]
  511.     mov  edx,(266+3*6)*65536+50
  512.     mov  esi,0x000000
  513.     mcall
  514.  
  515.     mov  edi,ip_address
  516.     mov  edx,205*65536+80
  517.     mov  esi,0x000000
  518.     mov  ebx,3*65536
  519.   ipdisplay:
  520.     ;mov  eax,47
  521.     movzx ecx,byte [edi]
  522.     mcall
  523.     add  edx,6*4*65536
  524.     inc  edi
  525.     cmp  edi,ip_address+4
  526.     jb   ipdisplay
  527.  
  528.     mov  edi,gateway_ip
  529.     mov  edx,205*65536+90
  530.     mov  esi,0x000000
  531.     mov  ebx,3*65536
  532.   gipdisplay:
  533.     ;mov  eax,47
  534.     movzx ecx,byte [edi]
  535.     mcall
  536.     add  edx,6*4*65536
  537.     inc  edi
  538.     cmp  edi,gateway_ip+4
  539.     jb   gipdisplay
  540.  
  541.     mov  edi,subnet_mask
  542.     mov  edx,205*65536+100
  543.     mov  esi,0x000000
  544.     mov  ebx,3*65536
  545.   sipdisplay:
  546.     ;mov  eax,47
  547.     movzx ecx,byte [edi]
  548.     mcall
  549.     add  edx,6*4*65536
  550.     inc  edi
  551.     cmp  edi,subnet_mask+4
  552.     jb   sipdisplay
  553.  
  554.     mov  edi,dns_ip
  555.     mov  edx,205*65536+110
  556.     mov  esi,0x000000
  557.     mov  ebx,3*65536
  558.   dipdisplay:
  559.     ;mov  eax,47
  560.     movzx ecx,byte [edi]
  561.     mcall
  562.     add  edx,6*4*65536
  563.     inc  edi
  564.     cmp  edi,dns_ip+4
  565.     jb   dipdisplay
  566.  
  567.  
  568.     mov  eax,8                     ; BUTTON 5 : SET PORT
  569.     mov  ebx,299*65536+8
  570.     mov  ecx,39*65536+8
  571.     mov  edx,5
  572.     mov  esi,[button_color]
  573.     mcall
  574.     ;mov  eax,8                     ; BUTTON 6 : SET IRQ
  575.     mov  ecx,49*65536+8
  576.     inc  edx
  577.     mcall
  578.     ;mov  eax,8                     ; BUTTON 7 : SET IP
  579.     mov  ecx,79*65536+8
  580.     inc  edx
  581.     mcall
  582.  
  583.     ;mov  eax,8                     ; BUTTON 8 : SET gateway IP
  584.     mov  ebx,299*65536+8
  585.     mov  ecx,89*65536+8
  586.     inc  edx
  587.     mcall
  588.  
  589.     ;mov  eax,8                     ; BUTTON 9 : SET subnet
  590.     mov  ecx,99*65536+8
  591.     inc  edx
  592.     mcall
  593.  
  594.     ;mov  eax,8                     ; BUTTON 10 : SET dns ip
  595.     mov  ecx,109*65536+8
  596.     inc  edx
  597.     mcall
  598.  
  599.     mov  ebx,31*65536+40           ; draw info text with function 4
  600.     mov  edx,text
  601.     mov  esi,49
  602.     mov  eax,4
  603.   newline:
  604.     mov  ecx,0x224466
  605.     cmp  [edx],byte 'w'
  606.     jne  nowhite
  607.     mov  ecx,0xeeeeee
  608.    nowhite:
  609.     inc  edx
  610.     mcall
  611.     add  ebx,10
  612.     add  edx,49
  613.     cmp  [edx],byte 'x'
  614.     jne  newline
  615.  
  616.     mov  eax,12                    ; function 12:tell os about windowdraw
  617.     mov  ebx,2                     ; 2, end of draw
  618.     mcall
  619.  
  620.     ret
  621.  
  622.  
  623. ; DATA AREA
  624.  
  625. if lang eq ru
  626. title      db  ' áâனª  á¥â¥¢®£® á⥪ ',0
  627. text:
  628.     db '   ¥ ªâ¨¢­ë©      Œ®¤¥¬ ­  Com-¯®àâã: 0x     <   '
  629.     db '   Slip            à¥à뢠­¨¥ ¬®¤¥¬ :    0x   <   '
  630.     db '   PPP                                            '
  631.     db '   „à ©¢¥à ¯ ª¥â®¢    IP ­ §­ ç ¥âáï á¥à¢¥à®¬     '
  632.     db '   (Ethernet)         ”¨ªá.:     .   .   .    <   '
  633.     db '                      ˜«î§:      .   .   .    <   '
  634.     db '                      ®¤á¥âì:   .   .   .    <   '
  635.     db '                      DNS IP:    .   .   .    <   '
  636.     db '                                                  '
  637.     db 'w            —¨â âì     à¨¬¥­¨âì                 '
  638.  
  639. else if lang eq nl
  640. title      db  'Netwerk configuratie',0
  641. text:
  642.     db '   Niet actief      Modem Com Poort:   0x     <   '
  643.     db '   Slip             Modem Com Irq:       0x   <   '
  644.     db '   PPP                                            '
  645.     db '   Pakket Driver      Door IP-server toegekend    '
  646.     db '   (Ethernet)         Vast IP:   .   .   .    <   '
  647.     db '                      Gateway:   .   .   .    <   '
  648.     db '                      Subnet:    .   .   .    <   '
  649.     db '                      DNS IP:    .   .   .    <   '
  650.     db '                                                  '
  651.     db 'w            Vernieuw   Toepassen                 '
  652.  
  653. else if lang eq ua
  654. title      db  ' « èâ㢠­­ï ¬¥à¥¦i'
  655. text:
  656.     db '   ¥ ªâ¨¢­¨©      Œ®¤¥¬ ­  Com-¯®àâã  0x     <   '
  657.     db '   Slip            Com-¯®àâ ¬®¤¥¬ :      0x   <   '
  658.     db '   PPP                                            '
  659.     db '   „à ©¢¥à ¯ ª¥âi¢    IP ¯à¨§­ ç óâìáï á¥à¢¥à®¬   '
  660.     db '   (Ethernet)         ”iªá.:     .   .   .    <   '
  661.     db '                      Œ àèàãâ:   .   .   .    <   '
  662.     db '                      Œ áª :     .   .   .    <   '
  663.     db '                      DNS IP     .   .   .    <   '
  664.     db '                                                  '
  665.     db 'w           à®ç¨â â¨  ‡ áâ®á㢠⨠               '
  666.  
  667. else
  668. title      db  'Stack configuration',0
  669. text:
  670.     db '   Not active       Modem Com Port:    0x     <   '
  671.     db '   Slip             Modem Com Irq:       0x   <   '
  672.     db '   PPP                                            '
  673.     db '   Packet Driver      IP server assigned          '
  674.     db '   (Ethernet)         Fixed:     .   .   .    <   '
  675.     db '                      Gateway:   .   .   .    <   '
  676.     db '                      Subnet:    .   .   .    <   '
  677.     db '                      DNS IP:    .   .   .    <   '
  678.     db '                                                  '
  679.     db 'w             READ        APPLY                   '
  680.     end if
  681.  
  682. xx: db 'x' ;<- END MARKER, DONT DELETE
  683.  
  684. button_color dd  0x2254b9
  685.  
  686.  
  687.  
  688. ip_address  dd ?
  689. gateway_ip  dd ?
  690. subnet_mask dd ?
  691. dns_ip      dd ?
  692.  
  693.  
  694. com_irq     dd      ?   ; irq for slip/ppp
  695. com_add     dd      ?   ; com port address for slip/ppp
  696. interface   dd      ?   ; not active,slip,ppp,packet driver
  697. assigned    dd      ?   ; get ip from server
  698.  
  699. config      dd      ?
  700.  
  701. I_END:
  702.