' Carlos Varela's Hypertext System Beta Version
'
' This is a legal agreement between you (the end user) and Carlos
' Varela, before using this program, you should carefully read the
' following terms and conditions. If you do not agree to the terms
' of this agreement, promptly destroy the program and source code.
'
' This program and source code are provide "AS IS". Carlos Varela
' makes no warranty express or implied with respect to the program
' or the source code. The entire risk arising out of use or 
' performance of the program and source code remains with you.
'
' In no event will Carlos Varela be liable for any lost profits,
' lost savings, incidental damages or other economic consequencial
' damages. 
'
'



CLS
@init
> PROCEDURE buttondown
  DEFFILL 2
  PBOX 600,165,620,175
  COLOR 1
  BOX 598,163,622,177
  COLOR 0
  LINE 599,164,621,164
  LINE 599,164,599,176
  COLOR 3
  LINE 599,176,621,176
  LINE 621,164,621,176
  COLOR 1
  BOX 609,167,610,173
  LINE 606,170,613,170
  LINE 607,169,612,169
  LINE 608,168,611,168
  LINE 609,167,610,167
RETURN
> PROCEDURE buttondown2
  COLOR 3
  LINE 599,164,621,164
  LINE 599,164,599,176
  GET 600,165,620,175,temp$
  PUT 601,165,temp$
  temp$=""
  @scrolldown
  @buttondown
RETURN
> PROCEDURE buttonup
  DEFFILL 2
  PBOX 600,180,620,190
  COLOR 1
  BOX 598,178,622,192
  COLOR 0
  LINE 599,179,621,179
  LINE 599,179,599,191
  COLOR 3
  LINE 599,191,621,191
  LINE 621,179,621,191
  COLOR 1
  BOX 609,182,610,188
  LINE 606,185,613,185
  LINE 607,186,612,186
  LINE 608,187,611,187
  LINE 609,188,610,188
RETURN
> PROCEDURE buttonup2
  COLOR 3
  LINE 599,179,621,179
  LINE 599,179,599,191
  GET 600,180,620,190,temp$
  PUT 601,181,temp$
  temp$=""
  @scrollup
  @buttonup
RETURN
> PROCEDURE closebusybox
  PUT 160,75,busybox$
RETURN
> PROCEDURE displayfirstlines
  toplinedisplayer=1
  FOR n=0 TO 15
    PRINT AT(5,n+4);SPACE$(72)
    PRINT AT(5,n+4);a$(n)
  NEXT n
RETURN
> PROCEDURE drawboxbutton(x,y,box$)
  COLOR 1
  BOX x,y,x+100,y+12
  DEFFILL 2
  PBOX x+2,y+2,x+98,y+10
  COLOR 0
  LINE x+1,y+1,x+99,y+1
  LINE x+1,y+1,x+1,y+11
  COLOR 3
  LINE x+99,y+1,x+99,y+11
  LINE x+1,y+11,x+99,y+11
  GRAPHMODE 2
  TEXT x+27,y+9,box$
  GRAPHMODE 1
RETURN
> PROCEDURE drawboxbuttondown(x,y,box$)
  COLOR 3
  LINE x+1,y+1,x+99,y+1
  LINE x+1,y+1,x+1,y+11
  GET x+2,y+2,x+98,y+10,temp$
  PUT x+3,y+3,temp$
RETURN
> PROCEDURE drawbusybox(text$)
  GET 160,75,480,125,busybox$
  DEFFILL 2
  PBOX 160,75,480,125
  COLOR 1
  BOX 160,75,480,125
  BOX 178,103,462,117
  COLOR 0
  LINE 179,104,179,116
  LINE 179,104,461,104
  COLOR 3
  LINE 461,104,461,116
  LINE 179,116,461,116
  DEFFILL 0
  PBOX 180,105,460,115
  PBOX 180,85,460,95
  COLOR 1
  BOX 178,83,462,97
  COLOR 3
  LINE 179,84,179,96
  LINE 179,84,461,84
  COLOR 0
  TEXT 188,92,text$
RETURN
> PROCEDURE drawmenu
  CLS
  COLOR 1
  BOX 0,0,639,199
  COLOR 2
  BOX 1,1,638,198
  COLOR 3
  BOX 2,2,637,197
  BOX 3,3,636,196
  COLOR 1
  BOX 25,5,624,20
  COLOR 2
  LINE 26,6,26,19
  LINE 623,6,623,19
  COLOR 3
  LINE 27,6,623,6
  LINE 27,6,27,19
  TEXT 130,16,"HyperText System (Beta) by Carlos Varela (18-Oct-1992)"
  ' Arrows
  @buttonup
  @buttondown
  '
  COLOR 1
  BOX 25,20,624,155
  COLOR 2
  BOX 26,21,27,154
  COLOR 3
  BOX 28,21,623,154
  LINE 29,21,29,154
  ' info
  @drawboxbutton(25,180," Info")
  @drawboxbutton(135,180," Load")
  @drawboxbutton(245,180,"Status")
  @drawboxbutton(355,180," Quit")
  @drawboxbutton(465,180," Help")
  @drawboxbutton(25,165," ")
  @drawboxbutton(135,165," ")
  @drawboxbutton(245,165," ")
  @drawboxbutton(355,165," ")
  @drawboxbutton(465,165," ")
RETURN
> PROCEDURE exit
  QUIT
RETURN
> PROCEDURE formattext
  xp=0
  FOR n2=1 TO d
    b$=MID$(c$,n2,1)
    SELECT b$
    CASE "!"
      INC totallinks
      linkl(totallinks)=n
      linkx1(totallinks)=xp
      a$(n)=a$(n)+gf$
      @untilanotherexclamation
    CASE "~"
      linkx2(totallinks)=xp
      a$(n)=a$(n)+bf$
    DEFAULT
      INC xp
      a$(n)=a$(n)+b$
    ENDSELECT
  NEXT n2
RETURN
> PROCEDURE init
  DEFMOUSE 3
  @vt52
  @setcolors
  @drawmenu
  DO
    @waitformouse
  LOOP
RETURN
> PROCEDURE load
  totallines=0
  ERASE a$(),link$(),linkx1(),linkx2(),linkl()
  DIM a$(10000),link$(10000),linkx1(10000),linkx2(10000),linkl(10000)
  FILESELECT "A:\*.CVH",e$,filename$
  OPEN "I",#1,filename$
  WHILE NOT EOF(#1)
    LINE INPUT #1,a$(totallines)
    INC totallines
  WEND
  DEC totallines
  CLOSE #1
  @drawbusybox("Formatting Text...")
  FOR n=1 TO totallines
    d=LEN(a$(n))
    c$=a$(n)
    a$(n)=""
    @updatebusybox(n,totallines)
    IF d>0
      @formattext
    ENDIF
  NEXT n
  @closebusybox
  @displayfirstlines
  @drawboxbutton(135,180,"Load")
RETURN
> PROCEDURE load2
  totallines=0
  ERASE a$(),link$(),linkx1(),linkx2(),linkl()
  DIM a$(10000),link$(10000),linkx1(10000),linkx2(10000),linkl(10000)
  OPEN "I",#1,filename$
  WHILE NOT EOF(#1)
    INC totallines
    LINE INPUT #1,a$(totallines)
  WEND
  CLOSE #1
  @drawbusybox("Formatting Text...")
  totallinks=0
  FOR n=1 TO totallines
    d=LEN(a$(n))
    c$=a$(n)
    a$(n)=""
    @updatebusybox(n,totallines)
    IF d>0
      @formattext
    ENDIF
  NEXT n
  @closebusybox
  @displayfirstlines
  @drawboxbutton(135,180,"Load")
RETURN
> PROCEDURE loadtext
  DIM a$(10000)
  OPEN "I",#1,"SHELL.DOC"
  RECALL #1,a$(),-1,totallines
  CLOSE #1
  FOR n=1 TO totallines
    b$=MID$(a$(n),1,72)
    a$(n)=b$+SPACE$(72-LEN(b$))
  NEXT n
RETURN
> PROCEDURE scrolldown
  IF toplinedisplayer>1
    DEC toplinedisplayer
    screenstart=XBIOS(2)
    BMOVE screenstart+3680,screenstart+4960,19680
    n=toplinedisplayer-1
    PRINT AT(5,4);SPACE$(72)
    PRINT AT(5,4);a$(n)
  ENDIF
RETURN
> PROCEDURE scrollup
  IF toplinedisplayer<totallines-16
    INC toplinedisplayer
    screenstart=XBIOS(2)
    BMOVE screenstart+4960,screenstart+3680,19680
    n=toplinedisplayer+16
    PRINT AT(5,19);SPACE$(72)
    PRINT AT(5,19);a$(n)
  ENDIF
RETURN
> PROCEDURE setcolors
  SETCOLOR 3,0
  SETCOLOR 2,&H333
  SETCOLOR 1,&H555
  SETCOLOR 0,&H777
RETURN
> PROCEDURE status
  GET 60,30,585,173,temp$
  DEFFILL 2
  PBOX 60,30,580,170
  COLOR 1
  BOX 60,30,580,170
  DEFFILL 3
  PBOX 65,171,585,173
  PBOX 581,35,585,173
  COLOR 0
  LINE 61,31,61,169
  LINE 61,31,579,31
  LINE 62,32,62,168
  LINE 62,32,578,32
  LINE 63,33,63,167
  COLOR 3
  LINE 61,169,579,169
  LINE 579,31,579,169
  LINE 62,168,578,168
  LINE 578,32,578,168
  LINE 577,33,577,167
  freememory$=STR$(FRE(0))
  '  freememory$="0"
  IF filename$=""
    filename$=".CVH"
  ENDIF
  freememory$="Free memory"+STRING$(49-LEN(freememory$),".")+freememory$
  freedisk$=STR$(DFREE(0))
  freedisk$="Free disk space on drive A"+STRING$(34-LEN(freedisk$),".")+freedisk$
  totallines$=STR$(totallines)
  totallines$="Number of lines"+STRING$(45-LEN(totallines$),".")+totallines$
  totallinks$=STR$(totallinks)
  totallinks$="Number of links"+STRING$(45-LEN(totallinks$),".")+totallinks$
  topfilename$="File "+MID$(filename$,1,LEN(filename$)-4)+" Status"
  topfilename$=topfilename$+STRING$(60-LEN(topfilename$),".")
  GRAPHMODE 2
  DEFTEXT 0
  TEXT 80,45,"Program Status.............................................."
  TEXT 80,77,topfilename$
  DEFTEXT 1
  TEXT 80,53,freememory$
  TEXT 80,61,freedisk$
  TEXT 80,85,totallines$
  TEXT 80,93,totallinks$
  freememory$=""
  freedisk$=""
  GRAPHMODE 1
  REPEAT
  UNTIL MOUSEK
  PUT 60,30,temp$
  @drawboxbutton(245,180,"Status")
RETURN
> PROCEDURE untilanotherexclamation
  DO
    INC n2
    b$=MID$(c$,n2,1)
    EXIT IF b$="!"
    link$(totallinks)=link$(totallinks)+b$
  LOOP
RETURN
> PROCEDURE updatebusybox(done,total)
  DEFFILL 2
  PBOX 180,105,180+280*(done/total),115
RETURN
> PROCEDURE vt52
  bf$=CHR$(27)+CHR$(98)+CHR$(3)
  gf$=CHR$(27)+CHR$(98)+CHR$(1)
RETURN
> PROCEDURE waitformouse
  IF MOUSEK=1
    mx=MOUSEX
    my=MOUSEY
    IF mx>597 AND mx<623
      IF my>177 AND my<193
        @buttonup2
      ELSE IF my>162 AND 174
        @buttondown2
      ENDIF
    ENDIF
    ' quit box
    IF mx>354 AND mx<456
      IF my>179 AND my<193
        @drawboxbuttondown(355,180,"")
        @exit
      ENDIF
    ENDIF
    ' status
    IF mx>244 AND mx<346
      IF my>179 AND my<193
        @drawboxbuttondown(245,180,"")
        @status
      ENDIF
    ENDIF
    ' load
    IF mx>134 AND mx<236
      IF my>179 AND my<193
        @drawboxbuttondown(135,180,"")
        @load
      ENDIF
    ENDIF
    ' checklinkclick
    IF mx>26 AND mx<624
      IF my>21 AND my<154
        @findlinks
      ENDIF
    ENDIF
  ENDIF
RETURN
> PROCEDURE findlinks
  linkxp=INT(mx/8)-4
  IF toplinedisplayer=1
    linkyp=INT(my/8)-4+toplinedisplayer
  ELSE
    linkyp=INT(my/8)-2+toplinedisplayer
  ENDIF
  '  PRINT linkxp,linkyp
  filename$=""
  FOR n=1 TO totallinks
    IF linkyp=linkl(n) AND (linkxp>=linkx1(n) AND linkxp<=linkx2(n))
      filename$=link$(n)+".CVH"
    ENDIF
  NEXT n
  IF filename$<>""
    @load2
  ENDIF
RETURN
