C     LINEAR HASH
C  RECREATION OF LINEAR HASH FILM
      COMMON /HASH/IMV(128),ITBL(128),AV(128),IPOS(128),IX(128),IY(128)
     1,NDPS(128),INDPT(128),JLNG(128),FRAME(128)
C
C    IHSH           NUMBER OF CURRENT TABLE ENTRY 
C    IMV(IHSH)      RANDOM NUMBER OF IHSH KEY ENTRY
C    IPS            POSITION OF CURRENT TABLE ENTRY SEARCHED
C    ITBL(IPS)      PATH LENGTH FOR THIS TABLE ENTRY
C    AV(IHSH)       AVERAGE LENGTH UP TO THIS ENTRY
C    JLNG(IHSH)     PATH LENGTH FOR THIS ENTRY
C    LNGTH          SUM OF THE PATH LENGTHS SO FAR
C    NDPS           END POSITION FOR PATH OF MOVE
C    NXT            NEXT RANDOM NUMBER
C    INDPT(IHSH)    END POSITION OF ENTRY (IMV TO INDPT TRIED)
C
C
C
C     UNIT 5 CONTAINS 80-COLUMN CARDS IN PROGRAM
C
      OPEN(UNIT=3,FILE='hash_output.txt')
      OPEN(UNIT=5,FILE='random.txt')
      OPEN(UNIT=8,FILE='newlinearhash.htm')
C
      DO 30 I=1,128
      AV(I)=0.0
      ITBL(I)=0
      IPOS(I)=0
      IMV(I)=0
      NDPS(I)=0
      INDPT(I)=0
      JLNG(I)=0
  30  CONTINUE
C
      READ(5,10) (IMV(I), I=1,105)
  10  FORMAT(I5)
      WRITE(3,20) (IMV(I), I=1,128)
  20  FORMAT(15I4)
c
C
C
      CALL HTMLHD
      CALL SVGSTR
      CALL SVGDEF
      WRITE(8,150)
 150  FORMAT(52H<rect class="background" width="940" height="740"/> )
      CALL TTLST
      WRITE(8,65, ADVANCE="NO")
      WRITE(8,66)
  65  FORMAT(45H<g id="hashfilm" transform="translate(20,20)")
  66  FORMAT(22H style="display:none">)
      CALL DRWTBL
C
C  CONSTRUCT HASH TABLE ENTRIES
C
      LNGTH=0
      DO 300 IHSH=1,105
      NXT=IMV(IHSH)
      IPS=NXT
      ICNT=1
  80  CONTINUE
      IF(ITBL(IPS) .EQ. 0) GOTO 100
      IPS=IPS+1 
      ICNT=ICNT+1 
      IF(IPS .EQ. 129)IPS=1
      GOTO 80
 100  CONTINUE
      ITBL(IPS)=ICNT
      JLNG(IHSH)=ICNT
      LNGTH=LNGTH+ICNT
      AV(IHSH)=FLOAT(LNGTH)/FLOAT(IHSH)
      NDPS(NXT)=IPS
      INDPT(IHSH)=IPS
      WRITE(3,200) IHSH,NXT,IPS,ITBL(IPS),INDPT(IHSH),
     1AV(IHSH),60.*AV(IHSH), JLNG(IHSH)
 200  FORMAT(5I5,F10.2,F10.2,I8)

      WRITE(8,210, ADVANCE="NO") IPS+1000
 210  FORMAT(10H<use id="p,I4)
C
      WRITE(8,216, ADVANCE="NO") IPS-NXT+1+1000
 216  FORMAT(18H" xlink:href="#ast,I4)
      WRITE(8,217, ADVANCE="NO")
 217  FORMAT(21H" style="display:none)
      WRITE(8,218) IX(IPS),IY(IPS)
 218  FORMAT(23H" transform="translate(,I3,1H,,I3,4H)"/>)
C
 300  CONTINUE
C
      DO 500 I=1,128
C     DEFINES THE DIAGRAM FOR EACH TABLE ENTRY
      WRITE(8,412, ADVANCE="NO") I+1000
 412  FORMAT(11H<use id="mk,I4)
      WRITE(8,416, ADVANCE="NO")
 416  FORMAT(17H" xlink:href="#mk)
      WRITE(8,417, ADVANCE="NO")
 417  FORMAT(21H" style="display:none)
      WRITE(8,418) IX(I),IY(I)
 418  FORMAT(23H" transform="translate(,I3,1H,,I3,4H)"/>)

 500  CONTINUE
      CALL DRHIST
      CALL ANIM
C
      WRITE(8,67)
  67  FORMAT(4H</g>)
      CALL SVGND
      CALL HTMLND
      STOP
      END
C
      BLOCK DATA
      COMMON /HASH/IMV(128),ITBL(128),AV(128),IPOS(128),IX(128),IY(128)
     1,NDPS(128),INDPT(128),JLNG(128),FRAME(128)
C23456789012345678901234567890123456789012345678901234567890123456789012
      DATA IX/3*20,60,100,140,180,220,260,300,340,380,3*420,
     1380,340,300,260,220,180,140,100,60,
     23*20,60,100,140,180,220,260,300,340,380,3*420,
     3380,340,300,260,220,180,140,100,60,
     43*20,60,100,140,180,220,260,300,340,380,3*420,
     5380,340,300,260,220,180,140,100,60,
     63*20,60,100,140,180,220,260,300,340,380,420,
     7460,500,540,580,620,660,700,740,780,15*820,
     8780,740,700,660,620,580,540,500,460,420,
     9380,340,300,260,220,180,140,100,60/
      DATA IY/20,60,11*100,140,11*180,220,11*260,300,11*340,380,11*420,
     1460,11*500,540,21*580,540,500,460,420,380,340,300,260,220,180,
     2140,100,60,20*20/
c
      END      
C
      SUBROUTINE HTMLHD
C
      COMMON /HASH/IMV(128),ITBL(128),AV(128),IPOS(128),IX(128),IY(128)
     1,NDPS(128),INDPT(128),JLNG(128),FRAME(128)
C23456789012345678901234567890123456789012345678901234567890123456789012
C
      WRITE(8,10)
      WRITE(8,11)
      WRITE(8,12)
      WRITE(8,13)
      WRITE(8,14)
      WRITE(8,15)
      WRITE(8,16)
      WRITE(8,17)
      WRITE(8,18)
      WRITE(8,19)
      WRITE(8,20)
      WRITE(8,21)
      WRITE(8,22)
      WRITE(8,23)
      WRITE(8,24)
      WRITE(8,25)
      WRITE(8,26)
  10  FORMAT(15H<!DOCTYPE html>)
  11  FORMAT(30H<html xml:lang="en" lang="en">)
  12  FORMAT(6H<head>)
  13  FORMAT(38H<title>Linear Hash Random Keys</title>)
  14  FORMAT(31H<script type="text/javascript">)
  15  FORMAT(20Hfunction PlaySound())
  16  FORMAT(1H{)
  17  FORMAT(41H document.getElementById('music').play();)
  18  FORMAT(1H})
  19  FORMAT(9H</script>)
  20  FORMAT(7H</head>)
  21  FORMAT(6H<body>)
  22  FORMAT(36H<audio id="music" preload="preload">)
  23  FORMAT(46H<source src="ogglnhash.ogg" type="audio/ogg"/>)
  24  FORMAT(43H<source src="lnhash.mp3" type="audio/mp3"/>)
  25  FORMAT(8H</audio>)
  26  FORMAT(5H<div>)
C
      RETURN
      END
C
      SUBROUTINE HTMLND
C
      COMMON /HASH/IMV(128),ITBL(128),AV(128),IPOS(128),IX(128),IY(128)
     1,NDPS(128),INDPT(128),JLNG(128),FRAME(128)
C23456789012345678901234567890123456789012345678901234567890123456789012
      WRITE(8,10)
      WRITE(8,11)
      WRITE(8,12)
  10  FORMAT(6H</div>)
  11  FORMAT(7H</body>)
  12  FORMAT(7H</html>)
C
      RETURN
      END
C
      SUBROUTINE SVGSTR
C
      COMMON /HASH/IMV(128),ITBL(128),AV(128),IPOS(128),IX(128),IY(128)
     1,NDPS(128),INDPT(128),JLNG(128),FRAME(128)
      WRITE(8,10,ADVANCE="NO")
      WRITE(8,11,ADVANCE="NO")
      WRITE(8,12)
      WRITE(8,13)
      WRITE(8,14)
      WRITE(8,15)
      WRITE(8,16)
      WRITE(8,17)
      WRITE(8,18)
      WRITE(8,19)
      WRITE(8,20)
      WRITE(8,21)
      WRITE(8,22)
      WRITE(8,23)
      WRITE(8,24)
      WRITE(8,25)
      WRITE(8,26)
      WRITE(8,27)
      WRITE(8,28)
      WRITE(8,29)
      WRITE(8,30)
      WRITE(8,31)
      WRITE(8,41)
  10  FORMAT(40H<svg xmlns="http://www.w3.org/2000/svg" )
  11  FORMAT(44H xmlns:xlink="http://www.w3.org/1999/xlink" )
  12  FORMAT(48HviewBox="0 0 940 740" width="705" height="555" >)
  13  FORMAT(23H<style type="text/css">)
C23456789012345678901234567890123456789012345678901234567890123456789012
  14  FORMAT(51Htext {font-size:16px;stroke:none;font-family:Arial})
  15  FORMAT(48Htext {font-weight:bold}                         )
  16  FORMAT(48Htext.sm {font-size:16px;fill:yellow}            )
  17  FORMAT(48Htext.nm {font-size:40px;fill:cyan}              )
  18  FORMAT(48Htext {text-anchor:middle}                       )
  19  FORMAT(48Htext.ttl {font-size:40px;fill:cyan}             )
  20  FORMAT(48Htext.box {font-size:60px;fill:none;stroke:white})
  21  FORMAT(48Htext.box {stroke-width:2}                       )
  22  FORMAT(48Htext.lgttl {font-size:60px;fill:white}          )
  23  FORMAT(54Hrect.background {fill:blue;stroke:blue;stroke-width:3})
  24  FORMAT(48Hpath       {stroke:white;fill:none}             )
  25  FORMAT(48Hpath.line  {stroke-width:2}                     )
  26  FORMAT(48Hpath.hist  {stroke-width:2}                     )
  27  FORMAT(48Hpath.line2 {stroke-width:4}                     )
  28  FORMAT(48Hpath.mk    {stroke-width:6}                     )
  29  FORMAT(48Hpath.ast   {stroke-width:2.3}                   )
  30  FORMAT(49Hpath.not   {stroke:none;stroke-width:3;fill:none})
  31  FORMAT(50Hpath.linev {stroke-width:40;stroke-dasharray:2 38})
  41  FORMAT(8H</style>)

      RETURN
      END
C
      SUBROUTINE SVGND
C
      COMMON /HASH/IMV(128),ITBL(128),AV(128),IPOS(128),IX(128),IY(128)
     1,NDPS(128),INDPT(128),JLNG(128),FRAME(128)
C23456789012345678901234567890123456789012345678901234567890123456789012
      WRITE(8,10)
  10  FORMAT(6H</svg>)
      RETURN
      END
C
      SUBROUTINE SVGDEF
      COMMON /HASH/IMV(128),ITBL(128),AV(128),IPOS(128),IX(128),IY(128)
     1,NDPS(128),INDPT(128),JLNG(128),FRAME(128)
C23456789012345678901234567890123456789012345678901234567890123456789012
      WRITE(8,10)
      WRITE(8,11, ADVANCE="NO")
      WRITE(8,12)
      WRITE(8,13, ADVANCE="NO")
      WRITE(8,14)
      WRITE(8,15, ADVANCE="NO")
      WRITE(8,16)
  10  FORMAT(6H<defs>)
  11  FORMAT(27H<path id="mk" class="mk"   )
  12  FORMAT(29Hd="M-20,-20h40v40h-40v-40z"/>)
  13  FORMAT(31H<path id="ast1001" class="ast" )
  14  FORMAT(43Hd="M-16,-16l32,32M16,-16l-32,32M-16,0h32"/>)
  15  FORMAT(27H<path id="not" class="not" )
  16  FORMAT(43Hd="M-20,-20l40,40M20,-20l-40,40M-20,0h40"/>)
C
      DO 100 I=2,9
      WRITE(8,101, ADVANCE="NO") I+1000
 101  FORMAT(13H<path id="ast,I4,17H" class="ast" d=")
      GOTO(2,3,4,5,6,7,8,9),I-1
   2  CONTINUE
      WRITE(8,102)
 102  FORMAT(23HM-7,-16v32m14,-32v32"/>)
      GOTO 100
   3  CONTINUE
      WRITE(8,103)
 103  FORMAT(34HM-10,-16v32m10,-32v32m10,-32v32"/>)

      GOTO 100
   4  CONTINUE
      WRITE(8,104)
 104  FORMAT(41HM-12,-16v32m8,-32v32m8,-32v32m8,-32v32"/>)

      GOTO 100
   5  CONTINUE
      WRITE(8,105)
 105  FORMAT(50HM-13.33,-16v32m6.66,-32v32m6.66,-32v32m6.66,-32v32
     1,15Hm6.66,-32v32"/>)
      GOTO 100
   6  CONTINUE
      WRITE(8,106)
 106  FORMAT(50HM-14.3,-16v32m5.7,-32v32m5.7,-32v32m5.7,-32v32m5.7
     1,10H,-32v32"/>)
      GOTO 100
   7  CONTINUE
      WRITE(8,107)
 107  FORMAT(50HM-15,-16v32m5,-32v32m5,-32v32m5,-32v32m5,-32v32m5,
     1,18H-32v32m5,-32v32"/>)

      GOTO 100
   8  CONTINUE
      WRITE(8,108)
 108  FORMAT(50HM-15.6,-16v32m4.4,-32v32m4.4,-32v32m4.4,-32v32m4.4
     1,43H,-32v32m4.4,-32v32m4.4,-32v32m4.4,-32v32"/>)

      GOTO 100
   9  CONTINUE
      WRITE(8,109)
 109  FORMAT(50HM-16,-16v32m4,-32v32m4,-32v32m4,-32v32m4,-32v32m4,
     1,36H-32v32m4,-32v32m4,-32v32m4,-32v32"/>)

      GOTO 100
  100 CONTINUE
      DO 200 I=10,30
      WRITE(8,201, ADVANCE="NO") I+1000
 201  FORMAT(13H<path id="ast,I4,28H" class="ast" d="M-16,-16v32)
      DO 210 J=1,I
      W=31/FLOAT(I-1)
      WRITE(8,202, ADVANCE="NO") W
 202  FORMAT(1Hm,F4.2,7H,-32v32)
 210  CONTINUE
      WRITE(8,203)
 203  FORMAT(3H"/>)
 200  CONTINUE
C
      WRITE(8,66)
C
  66  FORMAT(7H</defs>)
C
      RETURN
      END
C
      SUBROUTINE TTLST
      COMMON /HASH/IMV(128),ITBL(128),AV(128),IPOS(128),IX(128),IY(128)
     1,NDPS(128),INDPT(128),JLNG(128),FRAME(128)
C23456789012345678901234567890123456789012345678901234567890123456789012
C     DEFINE TITLE AND START BUTTON
      WRITE(8,11)
      WRITE(8,12)
      WRITE(8,13)
      WRITE(8,14)
      WRITE(8,15)
      WRITE(8,16)
      WRITE(8,17)
      WRITE(8,18)
      WRITE(8,19)
      WRITE(8,20)

C
  11  FORMAT(52H<g id="title" transform="translate(20,20)" style="di,
     114Hsplay:block" > )
  12  FORMAT(52H<text class="ttl" x="420" y="100">THE LINEAR HASH TA,
     110HBLE</text>)
  13  FORMAT(52H<text class="ttl" x="420" y="180">No. 2</text>      )
  14  FORMAT(52H<text class="lgttl" x="420" y="300">RANDOM KEYS</tex,
     13Ht> )
  15  FORMAT(52H<text class="ttl" x="420" y="390">by</text>         )
  16  FORMAT(55H<text class="ttl" x="420" y="480">F.R.A. Hopgood</text>)
  17  FORMAT(4H</g>)
  18  FORMAT(52H<path id="start_button" style="fill:pink;stroke:none,
     144H;opacity:1;" d="M395,580l70,-30l-70,-30z"    ,
     225Honclick="PlaySound();"/> )
  19  FORMAT(45H<animate id="t00" xlink:href="#start_button" ,
     160HattributeType="CSS" attributeName="fill" values="pink;blue" ,
     260Hbegin="start_button.click" dur="0.01s" fill="freeze"/>      )
  20  FORMAT(45H<animate id="t01" xlink:href="#start_button" ,
     160HattributeType="CSS" attributeName="fill" values="blue;blue" ,
     260Hbegin="t00.begin+10.1s"    dur="0.01s" fill="freeze"/>      )
C
      RETURN
      END
C
      SUBROUTINE DRWTBL
      COMMON /HASH/IMV(128),ITBL(128),AV(128),IPOS(128),IX(128),IY(128)
     1,NDPS(128),INDPT(128),JLNG(128),FRAME(128)
C23456789012345678901234567890123456789012345678901234567890123456789012
C     DEFINE TABLE OUTLINE
      WRITE(8,20, ADVANCE="NO")
      WRITE(8,21)
      WRITE(8,30, ADVANCE="NO")
      WRITE(8,31)
      WRITE(8,41)
      WRITE(8,42)
      WRITE(8,43)
      WRITE(8,44)
      WRITE(8,45)
      WRITE(8,46)
      WRITE(8,47)
      WRITE(8,48)
      WRITE(8,49)
      WRITE(8,50)
      WRITE(8,51)
      WRITE(8,52)
      WRITE(8,53)
      WRITE(8,54)
      WRITE(8,55)
      WRITE(8,56)
C
  20  FORMAT(54H<path class="line" d="M0,0 h840v600h-840v-120 h400v-40)
  21  FORMAT(54Hh-400v-120h400v-40h-400v-120h400v-40h-400v-120"/>     )
  30  FORMAT(54H<path class="line" d="M40,40h760v520h-760v-40h400v-120)
  31  FORMAT(54Hh-400v-40h400v-120h-400 v-40h400v-120h-400v-40"/>     )
C
  41  FORMAT(39H<path class="linev" d="M0,20h841"/>    )
  42  FORMAT(39H<path class="linev" d="M820,0v600"/>   )
  43  FORMAT(39H<path class="linev" d="M840,580h-841"/>)
  44  FORMAT(39H<path class="linev" d="M20,600v-81"/>  )
  45  FORMAT(39H<path class="linev" d="M0,500h441"/>   )
  46  FORMAT(39H<path class="linev" d="M420,520v-121"/>)
  47  FORMAT(39H<path class="linev" d="M440,420h-441"/>)
  48  FORMAT(39H<path class="linev" d="M20,400v-121"/> )
  49  FORMAT(39H<path class="linev" d="M0,340h441"/>   )
  50  FORMAT(39H<path class="linev" d="M420,360v-121"/>)
  51  FORMAT(39H<path class="linev" d="M440,260h-441"/>)
  52  FORMAT(39H<path class="linev" d="M20,240v-121"/> )
  53  FORMAT(39H<path class="linev" d="M0,180h441"/>   )
  54  FORMAT(39H<path class="linev" d="M420,200v-121"/>)
  55  FORMAT(39H<path class="linev" d="M440,100h-441"/>)
  56  FORMAT(39H<path class="linev" d="M20,120v-121"/> )
C
      RETURN
      END
C
      SUBROUTINE DRHIST
      COMMON /HASH/IMV(128),ITBL(128),AV(128),IPOS(128),IX(128),IY(128)
     1,NDPS(128),INDPT(128),JLNG(128),FRAME(128)
C23456789012345678901234567890123456789012345678901234567890123456789012
C     DEFINE HISTOGRAM
      WRITE(8,10)
      WRITE(8,20)
      WRITE(8,30)
      WRITE(8,40)
      WRITE(8,50)
      WRITE(8,60)
      WRITE(8,70)
      WRITE(8,80)
      WRITE(8,81)
      WRITE(8,82)
      WRITE(8,83)
      WRITE(8,84)
      WRITE(8,85)
      WRITE(8,86)
      WRITE(8,87)
      WRITE(8,88)
      WRITE(8,89)
      WRITE(8,90)
  10  FORMAT(54H<g transform="translate(520,460)">                    )
  20  FORMAT(54H<path class="line2" d="M0,0h256"/>                    )
  30  FORMAT(54H<path class="line2" d="M0,0v-360"/>                   )
  40  FORMAT(54H<path class="line" d="M40,0v-10 m40,10v-10 m40,10v-10 ,
     1       54Hm40,10v-10 m40,10v-10 m40,10v-10"/>                   )
  50  FORMAT(54H<path class="line"  d="M0,-60h10m-10,-60h10m-10,-60h10,
     1       54Hm-10,-60h10m-10,-60h10m-10,-60h10"/>                  )
  60  FORMAT(54H<text class="box" x="0" y="60">E</text>               )
  70  FORMAT(54H<text class="box" x="256" y="60">F</text>             )
  80  FORMAT(54H<text id="av1000"  class="box" x="100" y="-300"       ,
     1       54Hstyle="display:block">0</text>                        )
  81  FORMAT(54H<text id="av1001"  class="box" x="100" y="-300"       ,
     1       54Hstyle="display:none">1</text>                         )
  82  FORMAT(54H<text id="av1002"  class="box" x="100" y="-300"       ,
     1       54Hstyle="display:none">2</text>                         )
  83  FORMAT(54H<text id="av1004"  class="box" x="100" y="-300"       ,
     1       54Hstyle="display:none">4</text>                         )
  84  FORMAT(54H<text id="av1005"  class="box" x="100" y="-300"       ,
     1       54Hstyle="display:none">5</text>                         )
  85  FORMAT(54H<text id="av1009"  class="box" x="100" y="-300"       ,
     1       54Hstyle="display:none">9</text>                         )
  86  FORMAT(54H<text id="av1013"  class="box" x="100" y="-300"       ,
     1       54Hstyle="display:none">13</text>                        )
  87  FORMAT(54H<text id="av1014"  class="box" x="100" y="-300"       ,
     1       54Hstyle="display:none">14</text>                        )
  88  FORMAT(54H<text id="av1015"  class="box" x="100" y="-300"       ,
     1       54Hstyle="display:none">15</text>                        )
  89  FORMAT(54H<text id="av1026"  class="box" x="100" y="-300"       ,
     1       54Hstyle="display:none">26</text>                        )
  90  FORMAT(54H<text id="av1030"  class="box" x="100" y="-300"       ,
     1       54Hstyle="display:none">30</text>                        )
      WRITE(8,100)
 100  FORMAT(54H<g id="histogram" style="display:block">              )
      DO 200 I=1,104
      WRITE(8,120, ADVANCE="NO") I+1000
 120  FORMAT(11H<path id="h,I4,23H" style="display:none" ) 
      WRITE(8,121) I*2, -60.*AV(I)
 121  FORMAT(17Hclass="hist" d="M,I3,4H,0,v,F7.2,3H"/> ) 
      GOTO 200
 200  CONTINUE
      WRITE(8,220)
 220  FORMAT(4H</g>)
      WRITE(8,230)
 230  FORMAT(38H<g id="position" style="display:block",
     134H transform="translate(180,-250)"> )
C
      DO 600 I=1,105
      WRITE(8,510, ADVANCE="NO")
 510  FORMAT(43H<text style="display:none" class="nm" id="n)
      WRITE(8,560) I+1000,I
 560  FORMAT(I4,2H">,I3,7H</text>)
 600  CONTINUE
      WRITE(8,620)
 620  FORMAT(4H</g>)
      WRITE(8,630)
 630  FORMAT(4H</g>)
C
      RETURN
      END
      SUBROUTINE ANIM
      COMMON /HASH/IMV(128),ITBL(128),AV(128),IPOS(128),IX(128),IY(128)
     1,NDPS(128),INDPT(128),JLNG(128),FRAME(128)
C23456789012345678901234567890123456789012345678901234567890123456789012
C     DEFINE ANIMATION
      READ(5,10) (FRAME(I), I=1,105)
  10  FORMAT(10F5.1)
      WRITE(3,10) (FRAME(I), I=1,105)
      WRITE(8,80)
      WRITE(8,81)
  80  FORMAT(54H<set xlink:href="#title" attributeName="display"      ,
     1       54Hto="none" begin="t00.begin+9s" attributeType="CSS"/>  )
  81  FORMAT(54H<set xlink:href="#hashfilm" attributeName="display"   ,
     1       54Hto="block" begin="t00.begin+9s" attributeType="CSS"/> )
C
C     FOR EACH TABLE ENTRY
C MV          NEXT MV  1 TO 128, uP TO 105 FOR EXAMPLE
C IMV(128)    TABLE POSITION
C NDPS(128)   END SEARCH TABLE POSITION
C ITBL(128)   NUMBER OF TRIES 1,2,3 ETC FOR THIS ENTRY
C AV(128)     AVERAGE NUMBER OF TRIES SO FAR 1 TO 3+
C IPOS(128)
C IX(128)
C IY(128)
C MXSFR       MAX SO FAR NEEDS CALCULATING
C             IF ITBL GT MXSFR UPDATE MXSFR
C TIME        TIME FOR CURRENT ANIMATION
C FRAM        BASIC METRIC OF TIME FOR a SINGLE FRAME (16 PER SEC)
C MVN ETC     TO AVOID PROBLEMS WITH CHAR LENGTH 1 ADDED AT TOP
C             SO 1001 IS MOVE 1 , 1100 IS MOVE 100
C
C        ACTIONS PER MOVE
C     1  UPDATE MOVE NUMBER  n00x (MV) TO BLOCK, n00x (MV-1) TO NONE FRAME 1 OF MOVE
C     2  MK for MV SET TO BLOCK            FOR  (5) FRAMES      0.313  FRAME 1 OF MOVE
C     3  IF PATH LENGTH GT 1 NXT MK added  FOR  (4) FRAMES FOR EACH TRY UP TO FINAL TRY
C     4  pxx  FOR FINAL ENTRY DISPLAYED AFTER   (2) FRAMES
C     5  ALL MK REMOVED AT SAME TIME
C     6  HISTOGRAM NEW AVERAGE DISPLAYED AS WELL IF CHANGED AND OLD REMOVED
C     7  HOLD                                   (5) FRAMES
C         PROPOSAL
C     PATH LENGTH   1   16 FRAMES    1.00 SEC
C     PATH LENGTH   2   20 FRAMES    1.25
C     PATH LENGTH   3   24 FRAMES    1.5
C     PATH LENGTH   4   28 FRAMES    1.75
C     PATH LENGTH  10   52 FRAMES    3.25
C     PATH LENGTH  20   92 FRAMES    5.75
C     PATH LENGTH  30  132 FRAMES    8.25
C
      TIME=0.0
      FRAM=1.0/16.0
      MXSFR=0
      DO 600 MV=1,105
      MVN=MV+1000      
      ITB=IMV(MV)+1000
      ND=INDPT(MV)
      ILNGTH=JLNG(MV)
 200  FORMAT(6HMOVE= ,5I5,F9.3)
      WRITE(3,200) MV,MVN,ITB,ND,ILNGTH,TIME
C  REMOVE OLD MOVE NUMBER
      IF(MV .GT. 1)WRITE(8,91) MVN-1,TIME
  91  FORMAT(19H<set xlink:href="#n,I4,26H" attributeName="display"  ,
     128Hto="none"  begin="t01.begin+,F6.2,25Hs" attributeType="CSS"/> )
C UPDATE WITH NEW MOVE NUMBER
      WRITE(8,92) MVN,TIME
  92  FORMAT(19H<set xlink:href="#n,I4,26H" attributeName="display"  ,
     128Hto="block" begin="t01.begin+,F6.2,25Hs" attributeType="CSS"/> )
C SET MKs FOR NEXT MOVE
      ITBS=ITB
C
C
      DO 95 I=1,ILNGTH
      WRITE(8,93) ITBS,TIME
  93  FORMAT(20H<set xlink:href="#mk,I4,26H" attributeName="display"  ,
     128Hto="block" begin="t01.begin+,F6.2,25Hs"  attributeType="CSS"/>)
C
      TIME=TIME+4.0*FRAM
      ITBS=ITBS+1
      IF(ITBS .GT. 1128)ITBS=1001
  95  CONTINUE
      TIME=TIME+5.0*FRAM
      ITBS=ITB
      DO 98 I=1,ILNGTH
      WRITE(8,96) ITBS,TIME
  96  FORMAT(20H<set xlink:href="#mk,I4,26H" attributeName="display"  ,
     128Hto="none"  begin="t01.begin+,F6.2,25Hs"  attributeType="CSS"/>)
      ITBS=ITBS+1
      IF(ITBS .GT. 1128)ITBS=1001
  98  CONTINUE
      ITBS=ITBS-1
      IF(ITBS .EQ. 1000) ITBS=1128
C TWO FRAMES LATER ADD CONTENT FOR COMPLETED ENTRY
      TIME=TIME+2.0*FRAM
      WRITE(8,105) ITBS,TIME
 105  FORMAT(20H<set  xlink:href="#p,I4,26H" attributeName="display"  ,
     128Hto="block" begin="t01.begin+,F6.2,25Hs"  attributeType="CSS"/>)
C UPDATE HISTOGRAM
      WRITE(8,106) MVN,TIME
 106  FORMAT(20H<set  xlink:href="#h,I4,26H" attributeName="display"  ,
     128Hto="block" begin="t01.begin+,F6.2,25Hs"  attributeType="CSS"/>)
      IF(ILNGTH .LE. MXSFR) GOTO 510
C UPDATE MAX LENGTH, REMOVE OLD
      WRITE(8,107) MXSFR+1000,TIME
 107  FORMAT(20H<set xlink:href="#av,I4,26H" attributeName="display" ,
     128Hto="none"  begin="t01.begin+,F6.2,25Hs"  attributeType="CSS"/>)
C ADD NEW MAX LENGTH
      WRITE(8,108) ILNGTH+1000,TIME
 108  FORMAT(20H<set xlink:href="#av,I4,26H" attributeName="display" ,
     128Hto="block" begin="t01.begin+,F6.2,25Hs"  attributeType="CSS"/>)
      MXSFR=ILNGTH
 510  CONTINUE
C
      TIME=TIME+5.0*FRAM
C     SOME NUDGES
      TIME=TIME-FRAME(MV)*FRAM
 600  CONTINUE
C23456789012345678901234567890123456789012345678901234567890123456789012
      RETURN
      END  
