Subversion Repositories Kolibri OS

Rev

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

  1. ;WARNING! Spaghetti code, size optimized
  2.  
  3.   use32
  4.   org    0x0
  5.  
  6.   db     'MENUET01'              ; 8 byte id
  7.   dd     0x01                    ; header version
  8.   dd     START                   ; start of code
  9.   dd     I_END                   ; size of image
  10.   dd     0x1000                  ; memory for app
  11.   dd     0x1000                  ; esp
  12.   dd     0x0 , 0x0               ; I_Param , I_Icon
  13.  
  14. include "lang.inc"
  15. include "macros.inc" ; - 30 bytes !!!
  16.  
  17.  
  18. START:
  19.   red:                          ; redraw
  20.     call draw_window
  21.  
  22. still:
  23.  
  24.     mov  eax,10                 ; wait here for event
  25.     int  0x40
  26.  
  27.     cmp  eax,1                  ; redraw request ?
  28.     je   red
  29.     cmp  eax,2                  ; key in buffer ?
  30.     je   key
  31.     cmp  eax,3                  ; button in buffer ?
  32.     je   button
  33.  
  34. ;   jmp  still
  35.   key:                          ; key
  36.                                 ; just read it and ignore
  37.     int  0x40
  38.     jmp  still
  39.  
  40.   button:                       ; button
  41.     mov  eax,17                 ; get id
  42.     int  0x40
  43.     cmp  ah,1                   ; button id=1 ?
  44.     je   close
  45.     cmp  ah,2
  46.     je   ramdiskcopy
  47.     cmp  ah,3
  48.     je   ramdiskupdate
  49.     jmp  togglewrite
  50. close:
  51.     or   eax,-1                 ; close this program
  52.     jmp  callsys
  53. ramdiskcopy:
  54.     mov eax,16
  55.     xor ebx,ebx
  56.     inc ebx
  57.     jmp callsys
  58. ramdiskupdate:
  59.     mov eax,16
  60.     xor ebx,ebx
  61.     inc ebx
  62.     inc ebx
  63.     jmp callsys
  64. togglewrite:
  65.    call togglefdcwrite
  66. callsys:
  67.    int 0x40
  68.    jmp  still
  69.  
  70. ; get fdc settings for writing & invert them.
  71. togglefdcwrite:
  72.     mov eax,16
  73.     mov ebx,4
  74.     int 0x40
  75.     xchg ecx,eax
  76.     xor ecx,1
  77.     mov eax,16
  78.     dec ebx
  79.     int 0x40
  80.  
  81.     mov [esp], dword still  ; change return address !
  82. ;run trough drawwindow :]
  83.  
  84. ;   *********************************************
  85. ;   *******  WINDOW DEFINITIONS AND DRAW ********
  86. ;   *********************************************
  87.  
  88.  
  89. draw_window:
  90.  
  91.  
  92.     mov  eax,12                    ; function 12:tell os about windowdraw
  93.     xor  ebx,ebx                   ; 1, start of draw
  94.     inc ebx
  95.     int  0x40
  96.  
  97.                                    ; DRAW WINDOW
  98.     xor  eax,eax                   ; function 0 : define and draw win
  99.     mov  ebx,100*65536+250         ; [x start] *65536 + [x size]
  100.     mov  ecx,100*65536+120         ; [y start] *65536 + [y size]
  101.     mov  edx,0x03ffffff            ; color of work area RRGGBB,8->color gl
  102.     int  0x40
  103.  
  104. ;The important part, the buttons & text.
  105.  
  106. mov ebx,9*65536+36
  107. mov ecx,41*65536+14
  108. xor edx,edx
  109. inc edx
  110. inc edx
  111. ;mov edx,2
  112. call clickbox
  113.  
  114. mov ebx,67*65536+49
  115. inc edx
  116. call clickbox
  117.  
  118. mov ebx,12*65536+12
  119. mov ecx,81*65536+12
  120. inc edx
  121. call clickbox
  122.  
  123. mov ecx,96*65536+12
  124. xor edx,edx
  125. call clickbox
  126.  
  127.     mov edi,0x10000000
  128.     mov edx,titlebar
  129.     mov ebx,9*65536+9
  130.     mov ecx,0x10ffffff
  131.     call print
  132.  
  133. ;    mov edx,h1
  134.     mov ebx,11*65536+28
  135.     mov ecx,0x10808080
  136.     call print
  137.  
  138. ;    mov edx,comtext
  139.     add ebx,15
  140.     xchg ecx,edi
  141.     call print
  142.  
  143. ;    mov edx,h2
  144.     add ebx,25
  145.     xchg ecx,edi
  146.     call print
  147.  
  148. ;    mov edx,setwrite
  149.     add ebx,15
  150.     xchg ecx,edi
  151.     call print
  152.  
  153. ;    mov edx,setread
  154.     add ebx,15
  155.     xchg ecx,edi
  156.     call print
  157.  
  158.     mov eax,16
  159.     mov ebx,4
  160.     int 0x40
  161.     test al,1
  162.     je nowritex
  163.  ;  mov edx,xsign
  164.     mov ebx,14*65536+83
  165.     xchg ecx,edi
  166.     call print
  167.   nowritex:
  168.     mov  eax,12                    ; function 12:tell os about windowdraw
  169.     mov  ebx,2                     ; 2, end of draw
  170.     int 0x40
  171.     ret
  172.  
  173. clickbox:
  174. pusha
  175.     mov edi,edx
  176.     cmp edx, 0
  177.     je .disabledbox
  178.     mov  eax,8                     ; function 8 : define and draw button
  179.     int  0x40
  180.     .disabledbox:
  181.     inc ecx
  182.     inc ebx
  183.     mov eax,13
  184.     mov edx, 0x808080
  185.     int 0x40
  186.     cmp edi,0
  187.     je .grayed
  188.     mov edx,0x80
  189.     .grayed:
  190.     sub ebx,65536
  191.     sub ecx,65536
  192.     int 0x40
  193.     add ebx,65534
  194.     add ecx,65534
  195.     mov edx,0xffffff
  196.     int 0x40
  197. popa
  198. ret
  199.  
  200. print:
  201.     mov eax,edx
  202.     xor esi,esi
  203.     addchar:
  204.     inc eax
  205.     inc esi
  206.     cmp [eax],byte 0
  207.     jne addchar
  208.     mov eax,4
  209.     int 0x40
  210.     add edx,esi
  211.     inc edx
  212. ret
  213.  
  214.  
  215. ; DATA AREA
  216.  
  217. titlebar: db 'RD2FD',0
  218. h1: db 'Commands',0
  219. comtext: db 'Copy or Update ramdisk to floppy',0
  220. h2: db 'Settings',0
  221. setwrite: db '   Write directly to floppy',0
  222. setread: db '   Read directly from floppy',0
  223. xsign: db 'X',0
  224. I_END:
  225.  
  226.  
  227.  
  228.  
  229.