Subversion Repositories Kolibri OS

Rev

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