home *** CD-ROM | disk | FTP | other *** search
/ DP Tool Club 25 / CD_ASCQ_25_1095.iso / dos / tools / auror21a / scrsaver.aml < prev    next >
Text File  |  1995-08-31  |  4KB  |  167 lines

  1. /* ------------------------------------------------------------------ */
  2. /* Macro:        SCRSAVER.AML                                         */
  3. /* Written by:   nuText Systems                                       */
  4. /*                                                                    */
  5. /* Description:  This macro is runs a simple screen saver, and        */
  6. /*               demonstrates how to write directly to the physical   */
  7. /*               screen.                                              */
  8. /*                                                                    */
  9. /* Usage:        Select this macro from the Macro List (on the Macro  */
  10. /*               menu), or run it from the macro picklist <shift f12> */
  11. /* ------------------------------------------------------------------ */
  12.  
  13.   include bootpath "define.aml"
  14.  
  15.   var attr
  16.   var count
  17.   var interval
  18.   var minutes
  19.   var obj
  20.  
  21.   // draw the screen saver
  22.   function drawsaver
  23.  
  24.     // change to 50-line mode
  25.     oldrows = getvidrows
  26.     videomode 80 50
  27.  
  28.     // create a dummy window that covers the whole screen,
  29.     // to prevent this demo from overwriting the existing screen
  30.     createwindow
  31.     setcolor 5 (color black on black)
  32.     display
  33.  
  34.     // get the current mouse button state and position
  35.     buttonstate = button? 7fh
  36.     mousex = getmousex
  37.     mousey = getmousey
  38.  
  39.     // get the screen dimensions
  40.     cols = getvidcols
  41.     rows = getvidrows
  42.  
  43.     // hide the mouse
  44.     hidemouse
  45.  
  46.     // make video functions use the actual physical screen,
  47.     // instead of the current window
  48.     gotoscreen
  49.  
  50.     // string to write
  51.     str = "░░░"
  52.  
  53.     // intial x,y position on the screen
  54.     x = (rand mod cols) + 1
  55.     y = (rand mod rows) + 1
  56.  
  57.     // do until an external event occurs
  58.     while not event? do
  59.  
  60.       // get next random x,y position
  61.       x = x + ((rand mod 3) - 1)
  62.       y = y + ((rand mod 3) - 1)
  63.  
  64.       // correct x,y if not within screen boundry
  65.       if x > cols then
  66.         x = cols
  67.       elseif x < 1 then
  68.         x = 1
  69.       end
  70.       if y > rows then
  71.         y = rows
  72.       elseif y < 1 then
  73.         y = 1
  74.       end
  75.  
  76.       // write the string
  77.       writestr str attr x y
  78.  
  79.       // change the string and color periodically
  80.       count = count + 1
  81.       if count > interval then
  82.         count = 0
  83.         interval = 700
  84.         // random color
  85.         attr = rand mod 256
  86.         // random string
  87.         str = case rand mod 2
  88.                 when 0 "░░░"
  89.                 when 1 "▒▒▒"
  90.               end
  91.       end
  92.  
  93.     end
  94.  
  95.     // absorb any keys entered
  96.     while keyhit? do
  97.       getkey
  98.     end
  99.  
  100.     // restore the screen
  101.     showmouse
  102.     destroywindow
  103.     videomode 80 oldrows
  104.   end
  105.  
  106.   // screen saver timer management
  107.   function saver (f)
  108.     // remove timers
  109.     if f == -1 then
  110.       destroytimer "saver"
  111.       destroytimer "saver2"
  112.     // check for time expired
  113.     elseif f then
  114.       if _ecount <> geteventcount then
  115.         _ecount = geteventcount
  116.         settimer "saver2" minutes * 60000 obj
  117.       elseif not (timer? "saver2") then
  118.         // call screen saver function
  119.         drawsaver
  120.         _ecount = -1
  121.       end
  122.     // start the check timer
  123.     else
  124.       setrepeat "saver" 1000 obj "saver" 1
  125.       _ecount = -1
  126.     end
  127.   end
  128.  
  129.   // check for a previous install
  130.   obj = lookup "saverobj" "prf"
  131.   if obj then
  132.     installed = TRUE
  133.   else
  134.     obj = getcurrobj
  135.     setxobj "saverobj" obj "prf"
  136.   end
  137.  
  138.   // screen saver dialog box
  139.   dialog "Screen Saver" 46 6 "c"
  140.   field "Delay in minutes:  >"  11 2 6 10
  141.   button "O&k"       3  5 8
  142.   button "&Test"    14  5 8
  143.     whenenter "drawsaver"
  144.   button "&Remove"  25  5 8
  145.   button "Cancel"   36  5 8
  146.  
  147.   case (getdialog ref minutes)
  148.     // install screen saver
  149.     when "Ok"
  150.       if minutes then
  151.         saver
  152.         if not installed then
  153.           stayresident
  154.         end
  155.         msgbox "Screen Saver Installed, delay is " + minutes + " minutes."
  156.       end
  157.       // remove screen saver
  158.     when "Remove"
  159.       if installed then
  160.         saver -1
  161.         destroyobject obj
  162.         unsetx "saverobj" "prf"
  163.         msgbox "Screen Saver Removed."
  164.       end
  165.   end
  166.  
  167.