Subversion Repositories Kolibri OS

Rev

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

  1. ;   SCREENSAVER APPLICATION by lisovin@26.ru
  2. ;
  3. ;   Compile with FASM for Menuet
  4. ;
  5.    use32
  6.    org    0x0
  7.  
  8. used_memory = 0x10000
  9.  
  10.    db     'MENUET01'     ; 8 byte id
  11.    dd     0x01           ; header version
  12.    dd     START          ; start of code
  13.    dd     I_END          ; size of image
  14.    dd     used_memory    ; memory for app
  15.    dd     used_memory    ; esp
  16.    dd     0x0 , 0x0      ; I_Param , I_Icon
  17.  
  18. include   'lang.inc'
  19. include   '..\..\..\macros.inc'
  20. purge mov       ; decrease kpack'ed size
  21.  
  22. ;include   'debug.inc'
  23.  
  24. START:
  25.      mov  eax,40        ; ãáâ ­®¢¨âì ¬ áªã ᮡë⨩
  26.      mov  ebx,110010b   ; ॠ£¨à㥬 ­  ª« ¢¨ âãàã, ¬ëèì, ®âà¨á®¢ªã ä®­ 
  27.      mcall
  28.  
  29. bgr_changed:
  30.  
  31.         mov     eax,14
  32.         mcall
  33.         mov     [y_max], ax
  34.         shr     eax, 16
  35.         mov     [x_max], ax
  36.         shl     eax, 16
  37.         mov     [top_right_corner], eax
  38.  
  39.         mcall   66, 4, 57, 0    ; hot key for {Space}
  40.         mcall   66, 4, 28, 0    ; hot key for {Enter}
  41. still:
  42.         movzx   ebx, [time]
  43.         imul    ebx, 60*100
  44.         mcall   23              ; ¦¤ñ¬ ᮡëâ¨ï ¢ â¥ç¥­¨¥ [time] ¬¨­ãâ
  45.         test    eax, eax
  46.         jz      create_ss_thread
  47.         cmp     al, 2           ; key in buffer?
  48.         jz      key
  49.         cmp     al, 5           ; background redraw?
  50.         jz      bgr_changed
  51. ; mouse event
  52.         mcall   37,2            ; ¯à®¢¥à¨¬ ª­®¯ª¨
  53.         and     al, 3
  54.         cmp     al, 3           ; ­ ¦ âë ®¡¥ ª­®¯ª¨ ¬ëè¨?
  55.         jnz     still
  56.         mcall   37,0            ; ¯à®¢¥à¨¬ ª®®à¤¨­ âë
  57.         cmp     [top_right_corner], eax
  58.         jnz     still
  59. create_setup:
  60.         test    [params], 2
  61.         jnz     still           ; ®ª­® ­ áâ஥ª 㦥 ᮧ¤ ­®
  62.         mcall   51,1,sthread,used_memory-0x1000
  63.         or      [params], 2
  64.         jmp     still
  65. key:
  66.         mcall                   ; eax = 2
  67.         cmp     al, 2           ; hot key?
  68.         jne     still           ; no hotkey, evenets handling go on
  69.         xor     edx, edx
  70.         mov     dl, ah
  71.         mov     eax, 72
  72.         mov     ebx, 1
  73.         mov     ecx, 2
  74.         mcall                   ; transfer key code to active window after interception
  75.         jmp     still
  76.  
  77. create_ss_thread:
  78.         test    [params], 3
  79.         jnz     still
  80.         call    create_ss
  81.         jmp     still
  82.  
  83. create_ss:
  84.         mcall   51,1,thread,used_memory-0x2000
  85.         or      [params], 1
  86.         ret
  87.  
  88.  thread:
  89. ;    mov  eax,5
  90. ;    mov  ebx,eax
  91. ;    mcall
  92.     mov  eax,40
  93.     mov  ebx,100010b
  94.     mcall
  95.     cmp  dword [type],0
  96.     je   drawsswin
  97.     cmp  dword [type],24
  98.     je   asminit
  99.     mov  dword [delay],1
  100.     mov  [lx1],10         ; for "draw line"
  101.     mov  [lx2],40
  102.     mov  [ly1],50
  103.     mov  [ly2],100
  104.     mov  [addx1],1
  105.     mov  [addx2],1
  106.     mov  [addy1],1
  107.     mov  [addy2],1
  108.     jmp  drawsswin
  109.  asminit:                 ; for "assembler"
  110.     mov  dword [delay],25
  111.     mov  eax,70
  112.     mov  ebx,fileinfo
  113.     mcall
  114.     mov  [filesize], ebx
  115.  asminit1:
  116.     mov  [stringstart],data_from_file
  117.     mov  dword [stringlen],1
  118.  newpage:
  119.     mov  word [stringpos],10
  120.  
  121.  drawsswin:
  122.     xor  eax,eax
  123.     movzx ebx,[x_max]
  124.     movzx ecx,[y_max]
  125.     inc  ebx
  126.     inc  ecx
  127.     mov  edx,0x01000000
  128.     mcall
  129.     mov  eax,13
  130.     xor  edx,edx
  131.     mcall
  132.  tstill:
  133.     mov  eax,23
  134.     mov  ebx,[delay]
  135.     mcall
  136.     test eax,eax
  137.     jnz  thr_end
  138.     cmp  dword [type],0
  139.     je   tstill
  140.     cmp  dword [type],24
  141.     je   drawssasm
  142.     call draw_line
  143.     jmp  tstill
  144.  thr_end:
  145.     and  [params], not 1
  146.     or   eax,-1
  147.     mcall
  148.  
  149.  drawssasm:
  150.     mov  edi,[stringstart]
  151.     add  edi,[stringlen]
  152.     dec  edi
  153.     lea  eax,[edi-data_from_file]
  154.     cmp  eax,[filesize]
  155.     ja   asminit1
  156.     cmp  word [edi],0x0a0d
  157.     je   addstring
  158.     cmp  byte [edi],0x0a
  159.     jne  noaddstring
  160.     dec  edi
  161. addstring:
  162.     add  word [stringpos],10
  163.     add  edi,2
  164.     mov  [stringstart],edi
  165.     mov dword [stringlen],1
  166.     mov  ax,[stringpos]
  167.     cmp  ax,[y_max]
  168.     jb   tstill
  169.     jmp  newpage
  170.  noaddstring:
  171.     mov  eax,4
  172.     mov  ebx,10*65536
  173.     mov  bx,[stringpos]
  174.     mov  ecx,0x104ba010
  175.     mov  edx,[stringstart]
  176.     mov  esi,[stringlen]
  177.     mcall
  178.     inc dword [stringlen]
  179.     cmp byte [edi],byte ' '
  180.     je   drawssasm
  181.     jmp  tstill
  182.  
  183. draw_line:
  184.     movzx esi,[x_max]
  185.     movzx edi,[y_max]
  186.  
  187.     mov  eax,[addx1]
  188.     add  [lx1],eax
  189.     mov  eax,[addy1]
  190.     add  [ly1],eax
  191.  
  192.     mov  eax,[addx2]
  193.     add  [lx2],eax
  194.     mov  eax,[addy2]
  195.     add  [ly2],eax
  196.  
  197.     cmp  [lx1],1
  198.     jge  dl1
  199.     mov  [addx1],1
  200.   dl1:
  201.     cmp  [lx2],1
  202.     jge  dl2
  203.     mov  [addx2],1
  204.   dl2:
  205.     cmp  [lx1],esi
  206.     jbe  dl3
  207.     mov  [addx1],0xffffffff
  208.   dl3:
  209.     cmp  [lx2],esi
  210.     jbe  dl4
  211.     mov  [addx2],0xffffffff
  212.   dl4:
  213.  
  214.     cmp  [ly1],1
  215.     jge  dl5
  216.     mov  [addy1],1
  217.   dl5:
  218.     cmp  [ly2],2
  219.     jge  dl6
  220.     mov  [addy2],1
  221.   dl6:
  222.     cmp  [ly1],edi
  223.     jbe  dl7
  224.     mov  [addy1],-1
  225.   dl7:
  226.     cmp  [ly2],edi
  227.     jbe  dl8
  228.     mov  [addy2],-1
  229.   dl8:
  230.  
  231.     mov  eax,[lx2]
  232.     cmp  [lx1],eax
  233.     jz   dnol
  234.  
  235.     mov  bx,word [lx1]
  236.     shl  ebx,16
  237.     mov  bx,word [lx2]
  238.  
  239.     mov  cx,word [ly1]
  240.     shl  ecx,16
  241.     mov  cx,word [ly2]
  242.  
  243.     mov  eax,38
  244.     mov  edx,[lcolor]
  245.     and  edx,0xffffff
  246.     mcall
  247.  
  248.    dnol:
  249.  
  250.     add  [lcolor],0x010201
  251.  
  252.     ret
  253.  
  254.  
  255. sthread:                        ; start of execution
  256.  
  257.      call sdraw_window
  258.  
  259. sstill:
  260.  
  261.     mov  eax,10                 ; wait here for event
  262.     mcall
  263.  
  264.     dec  eax                    ; redraw request ?
  265.     je   sthread
  266.     dec  eax                    ; key in buffer ?
  267.     jne  sbutton
  268.     mov  al,2
  269.     mcall
  270.     jmp  sstill
  271.  
  272.   sbutton:                       ; button
  273.     mov  eax,17                 ; get id
  274.     mcall
  275.  
  276.     cmp  ah,1                   ; button id=1 ?
  277.     jne  snoclose
  278.  
  279.     and  [params], not 2
  280.     mov  eax,-1                 ; close this program
  281.     mcall
  282.   snoclose:
  283.     cmp  ah,7
  284.     jne  nosetfl
  285.     xor  [params], 1
  286.     call drawflag
  287.     call drawtype
  288.     call drawtime
  289.     jmp  sstill
  290.   nosetfl:
  291.     test [params], 1
  292.     jnz  sstill
  293.     cmp  ah,2
  294.     jne  notypedown
  295.     mov  eax,[type]
  296.     test  eax,eax
  297.     je   sstill
  298.     sub  eax,12
  299.     jmp  typeupdn
  300.   notypedown:
  301.     cmp  ah,3
  302.     jne  notypeup
  303.     mov  eax,[type]
  304.     cmp  eax,24
  305.     jae  sstill
  306.     add  eax,12
  307.     jmp  typeupdn
  308.   notypeup:
  309.     cmp  ah,4
  310.     jne  notimedown
  311.     mov  al,[time]
  312.     cmp  al,1
  313.     jbe  sstill
  314.     dec  eax
  315. ;    das
  316.     jmp  timeupdn
  317.   notimedown:
  318.     cmp  ah,5
  319.     jne  notimeup
  320.     mov  al,[time]
  321.     cmp  al,59 ; 0x59
  322.     jae  sstill
  323.     inc  eax
  324. ;    daa
  325.     jmp  timeupdn
  326.   notimeup:
  327.     cmp  ah,6
  328.     jne  noshow
  329.     mov  eax,5
  330.     mov  ebx,10;150
  331.     mcall
  332.     call create_ss
  333.   noshow:
  334.     jmp  sstill
  335.  
  336.   timeupdn:
  337.     mov  [time],al
  338.     call drawtime
  339.     jmp  sstill
  340.   typeupdn:
  341.     mov  [type],eax
  342.     call drawtype
  343.     jmp  sstill
  344.  
  345. ;   *********************************************
  346. ;   *******  WINDOW DEFINITIONS AND DRAW ********
  347. ;   *********************************************
  348.  
  349.  
  350. sdraw_window:
  351.  
  352.  
  353.     mov  eax,12                    ; function 12:tell os about windowdraw
  354.     mov  ebx,1                     ; 1, start of draw
  355.     mcall
  356.  
  357.                                    ; DRAW WINDOW
  358.     xor  eax,eax                   ; function 0 : define and draw window
  359.     mov  ebx,100*65536+215         ; [x start] *65536 + [x size]
  360.     mov  ecx,100*65536+70          ; [y start] *65536 + [y size]
  361.     mov  edx,0x13400088            ; color of work area RRGGBB,8->color gl
  362.     mov  edi,title
  363.     mcall
  364.  
  365.     mov  al,8
  366.     mov  ebx,47*65536+10
  367.     mov  ecx,31*65536+10
  368.     mov  edx,2
  369.     mov  esi,0x702050
  370.     mcall
  371.     push ebx
  372.     add  ebx,13*65536
  373.     mov  edi,ebx
  374.     inc  edx
  375.     mcall
  376.     pop  ebx
  377.     add  ecx,15*65536
  378.     inc  edx
  379.     mcall
  380.     mov  ebx,edi
  381.     inc  edx
  382.     mcall
  383.     mov  ebx,160*65536+40
  384.     mov  ecx,28*65536+14
  385.     inc  edx
  386.     mcall
  387.  
  388.     mov  al,4                        ; function 4 : write text to window
  389.     mov  ebx,15*65536+33             ; [x start] *65536 + [y start]
  390.     mov  ecx,0x80ffffff
  391.     mov  edx,setuptext
  392.     mcall
  393.     add  ebx,15
  394.     add  edx,10
  395.     mcall
  396.     mov  ebx,169*65536+32
  397.     mov  edx,buttext
  398.     mcall
  399.  
  400.     call drawtype
  401.     call drawtime
  402.     call drawflag
  403.  
  404.     mov  eax,12                    ; function 12:tell os about windowdraw
  405.     mov  ebx,2                     ; 2, end of draw
  406.     mcall
  407.  
  408.     ret
  409.  
  410. drawtype:
  411.     mov  eax,13
  412.     mov  ebx,80*65536+75
  413.     mov  ecx,30*65536+12
  414.     mov  edx,0xffffff
  415.     test [params], 1
  416.     jz   noblue
  417.     mov  edx,0x4e00e7
  418.  noblue:
  419.     mcall
  420.     mov  al,4
  421.     mov  ebx,82*65536+32
  422.     xor  ecx,ecx
  423.     mov  edx,typetext
  424.     add  edx,[type]
  425.     mov  esi,12
  426.     mcall
  427.     ret
  428.  
  429. drawtime:
  430.     mov  eax,13
  431.     mov  ebx,80*65536+15
  432.     mov  ecx,45*65536+12
  433.     mov  edx,0xffffff
  434.     test [params], 1
  435.     jz   noblue1
  436.     mov  edx,0x4e00e7
  437.  noblue1:
  438.     mcall
  439.     mov  al,47
  440.     mov  edx,82*65536+47
  441.     xor  esi,esi
  442.     movzx ecx,byte [time]
  443.     mov  ebx,0x00020000
  444.     mcall
  445.     ret
  446.  
  447. drawflag:
  448.     mov  eax,8
  449.     mov  ebx,150*65536+10
  450.     mov  ecx,45*65536+10
  451.     mov  edx,7
  452.     mov  esi,0xe0e0e0
  453.     mcall
  454.     mov  al,4
  455.     mov  ebx,153*65536+47
  456.     xor  ecx,ecx
  457.     mov  esi,1
  458.     mov  edx,flag
  459.     bt   dword [params],0
  460.     jc   setf
  461.     inc  edx
  462.   setf:
  463.     mcall
  464.     ret
  465.  
  466. ; DATA AREA
  467. buttext    db 'SHOW',0
  468. flag       db 'V '
  469. title      db 'SCREENSAVER SETUP',0
  470. setuptext  db 'TYPE: < >',0
  471.            db 'TIME: < >     MINUTES    NEVER',0
  472. typetext   db 'BLACK SCREENCOLOR LINES ASSEMBLER   '
  473. type       dd 12
  474. time       db 15     ; ¢à¥¬ï ¤® § ¯ã᪠ § áâ ¢ª¨ ¢ ¬¨­ãâ å
  475. delay      dd 100
  476.  
  477. lx1   dd  10
  478. lx2   dd  40
  479.  
  480. ly1   dd  50
  481. ly2   dd  100
  482.  
  483. addx1 dd  1
  484. addx2 dd  1
  485.  
  486. addy1 dd  1
  487. addy2 dd  1
  488.  
  489. stringlen   dd 1
  490. stringstart dd 0
  491. stringpos   dw 10
  492.  
  493. params  db 0     ;if bit 0 set-ssaver works if bit 1 set-setup works
  494.  
  495. fileinfo:
  496. ; used_memory-0x3000-data_from_file = ~50 Kb with current settings
  497.   dd 0,0,0,used_memory-0x3000-data_from_file,data_from_file
  498.   db '/sys/NETWORK/PPP.ASM',0
  499.  
  500. I_END:
  501.  
  502.  
  503. ; UNINITIALIZED DATA:
  504.  
  505. lcolor           dd ?
  506. x_max            dw ?     ; à §¬¥àë íªà ­ 
  507. y_max            dw ?
  508.  
  509. top_right_corner dd ?
  510. filesize        dd ?
  511. data_from_file:
  512.