Subversion Repositories Kolibri OS

Rev

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