home *** CD-ROM | disk | FTP | other *** search
/ Frostbyte's 1980s DOS Shareware Collection / floppyshareware.zip / floppyshareware / SOUR / MXMNU239.EXE / WORM.INC < prev   
Text File  |  1991-10-08  |  5KB  |  211 lines

  1. Comment
  2. ==========================================================
  3.  
  4. WORM.INC Copyright 1991 by Marc Perkel
  5.  
  6. This is a sample of an external screen blanker for MarxMenu. It is
  7. similar to the worm blankers on Novell file servers.
  8.  
  9. To use this program add the line INCLUDE 'WORM.INC' in you menu.
  10.  
  11. When MarxMenu decides to blank the screen it calls BlankScreenProgram.
  12. When MarxMenu decides it's ready to unblank the screen it sets UnBlank
  13. to true.
  14.  
  15. Thus commands like UseNovPassword, LockWord, and BlankTime will work
  16. with your screen blanker.
  17.  
  18. When using and external screen blanker allong with IdleProgram, MarxMenu
  19. will shut off calls to your IdleProgram when the BlankScreenProgram
  20. starts. Thus, you will have to call your IdleProgram routines fron your
  21. BlankScreenProgram if you want them to run.
  22.  
  23. ==========================================================
  24. EndComment
  25.  
  26. Var
  27.   WormData
  28.   WormColor
  29.   WormSpeed
  30.   WormLen = 4
  31.   TargetWormLen
  32.   Direction
  33.   Duration
  34.   WSeg
  35.  
  36. Qualifier X Y Col
  37.  
  38. ;----- This tells MarxMenu to RunWorm when it is time to blank the screen
  39.  
  40. BlankScreenProgram = Loc RunWorm
  41.  
  42. Var T1 T2
  43.  
  44. T1[1,1] = 2
  45. T1[1,2] = 0
  46. T1[2,1] = 2
  47. T1[2,2] = -1
  48. T1[3,1] = 1
  49. T1[3,2] = -1
  50. T1[4,1] = 0
  51. T1[4,2] = -1
  52. T1[5,1] = -1
  53. T1[5,2] = -1
  54. T1[6,1] = -2
  55. T1[6,2] = -1
  56. T1[7,1] = -2
  57. T1[7,2] = 0
  58. T1[8,1] = -2
  59. T1[8,2] = 1
  60. T1[9,1] = -1
  61. T1[9,2] = 1
  62. T1[10,1] = 0
  63. T1[10,2] = 1
  64. T1[11,1] = 1
  65. T1[11,2] = 1
  66. T1[12,1] = 2
  67. T1[12,2] = 1
  68.  
  69. T2[10] = 0
  70. T2[5] = 1
  71. T2[4] = 2
  72. T2[3] = 3
  73. T2[2] = 4
  74. T2[1] = 5
  75. T2[6] = 6
  76. T2[11] = 7
  77. T2[12] = 8
  78. T2[13] = 9
  79. T2[14] = 10
  80. T2[15] = 11
  81.  
  82. if ColorScreen
  83.    Loop 30
  84.       WSeg[LoopIndex] = '██'
  85.    EndLoop
  86. else
  87.    WSeg[1] = '██'
  88.    WSeg[2] = '▓▓'
  89.    WSeg[3] = '▒▒'
  90.    WSeg[4] = '░░'
  91. endif
  92.  
  93. TargetWormLen = WormLen
  94.  
  95. ;----- End of Initialization
  96.  
  97. Procedure StartWorm
  98.    NewWormSpeed
  99.    Loop WormLen
  100.       WormData[LoopIndex].X = LoopIndex * 2 + 40
  101.       WormData[LoopIndex].Y = 12
  102.       WormData[LoopIndex].Col = NextWormColor
  103.    EndLoop
  104. EndProc
  105.  
  106.  
  107. Procedure MoveWorm
  108. var DeltaX DeltaY WormSeg
  109.    ResetDuration
  110.    while Duration > 0
  111.       WormSeg = WormLen
  112.       if TargetWormLen > WormLen
  113.          WormLen = WormLen + 1
  114.          WormSeg = WormSeg + 1
  115.       else
  116.          GotoXY(WormData[WormSeg].X,WormData[WormSeg].Y)
  117.          Write '  '
  118.          if TargetWormLen < WormLen
  119.             WormLen = WormLen - 1
  120.             WormSeg = WormSeg - 1
  121.             GotoXY(WormData[WormSeg].X,WormData[WormSeg].Y)
  122.             Write '  '
  123.          endif
  124.       endif
  125.  
  126.       while WormSeg > 1
  127.          WormData[WormSeg] = WormData[WormSeg - 1]
  128.          GotoXY(WormData[WormSeg].X,WormData[WormSeg].Y)
  129.          TextColor WormData[WormSeg].Col Black
  130.          Write WSeg[WormSeg]
  131.          WormSeg = WormSeg - 1
  132.       endwhile
  133.  
  134.       DeltaX = T1[Direction + 1,1]
  135.       DeltaY = T1[Direction + 1,2]
  136.       if (WormData[1].X + DeltaX < 1) or (WormData[1].X + DeltaX + 1 >= ScreenWidth)
  137.          DeltaX = DeltaX * -1
  138.          NewWormSpeed
  139.       endif
  140.       if (WormData[1].Y + DeltaY < 1) or (WormData[1].Y + DeltaY > ScreenHeight)
  141.          DeltaY = DeltaY * -1
  142.          NewWormSpeed
  143.       endif
  144.       Direction = T2[DeltaY * 5 + DeltaX + 8]
  145.       WormData[1].X = WormData[1].X + DeltaX
  146.       WormData[1].Y = WormData[1].Y + DeltaY
  147.       WormData[1].Col = NextWormColor
  148.  
  149.       GotoXY(WormData[1].X,WormData[1].Y)
  150.       TextColor WormData[1].Col Black
  151.       Write WSeg[1]
  152.  
  153.       if UnBlank then Return
  154.       Wait WormSpeed
  155.       Duration = Duration - 1
  156.    EndWhile
  157. EndProc
  158.  
  159.  
  160. Procedure NextWormColor
  161.    WormColor = WormColor + 1 mod 7
  162.    if ColorScreen
  163.       Return WormColor + 9
  164.    else
  165.       Return 7
  166.    endif
  167. EndProc
  168.  
  169.  
  170. Procedure NewWormSpeed
  171.    WormSpeed = Random mod 20 + 7
  172.    if ScrollLock then WormSpeed = WormSpeed / 2
  173.    if ColorScreen then TargetWormLen = 30 / WormSpeed + 3
  174.    Duration = 0
  175. EndProc
  176.  
  177.  
  178. Procedure ResetDuration
  179.    Duration = Random mod 3 + WormLen - 1
  180. EndProc
  181.  
  182.  
  183. Procedure NewVector
  184. var A
  185.    A = Random mod 188
  186.    if A = 0 then Return 6
  187.    if A <= 2 then Return 5
  188.    if A <= 4 then Return 7
  189.    if A <= 8 then Return 4
  190.    if A <= 12 then Return 8
  191.    if A <= 20 then Return 3
  192.    if A <= 28 then Return 9
  193.    if A <= 44 then Return 2
  194.    if A <= 60 then Return 10
  195.    if A <= 92 then Return 1
  196.    if A <= 124 then Return 11
  197.    Return 0
  198. EndProc
  199.  
  200.  
  201. Procedure RunWorm
  202.    StartWorm
  203.    Direction = 6
  204.    while not UnBlank
  205.       MoveWorm
  206.       Direction = Direction + NewVector mod 12
  207.    EndWhile
  208. EndProc
  209.  
  210.  
  211.