home *** CD-ROM | disk | FTP | other *** search
/ Vectronix 2 / VECTRONIX2.iso / FILES_01 / HISOFT.LZH / HISOFT_A.MSA / HGT / TEXTWIND.BAS < prev    next >
BASIC Source File  |  1992-03-31  |  3KB  |  133 lines

  1.  
  2. ' The text window routines
  3. SUB InitTextWindows(BYVAL MaxFiles,BYVAL MaxLines)
  4. SHARED aligntext,tabsize,MaxTextWidth,wolines(1),lines$(2),TextWindowsInitialised
  5. SHARED MaxTextWindows,TextWindows
  6. MaxTextWindows=MaxFiles
  7. REDIM wolines(MaxTextWindows-1),lines$(MaxtextWindows-1,maxLines)
  8.     aligntext=-1     ' align to word boundaries for speed by default
  9.     tabsize=8
  10.     MaxTextWidth=300
  11.     TextWindows=0
  12.     TextWindowsInitialised=-1
  13. END SUB
  14.  
  15. SUB TextSliderMax
  16. SHARED wolines(1),MaxTextWidth,cellx,celly,woTindex(1)
  17. SHARED commoni,commonmaxx,commonmaxy
  18.         commonmaxx=MaxTextWidth*cellx
  19.         commonmaxy=wolines(woTindex(commoni))*celly
  20. END SUB
  21.  
  22. SUB TextReDraw
  23. SHARED commonhandle,cellx,celly
  24. SHARED wolines(1),lines$(2),woTindex(1)
  25. SHARED aligntext,expandtabsflag,MaxTextwidth,woOffX(1),woOffY(1)
  26. STATIC i,x,y,w,h,curline,newx,linebuf$,linestodo,j,file,margin
  27.     i=WhichWindow(commonHandle)
  28.     IF i=0 THEN EXIT SUB ' panic
  29.     junk=wind_get(CommonHandle,WF_WORKXYWH,x,y,w,h)
  30.     file=woTindex(i)
  31. 'debug str$(x)+str$(y)+str$(newx)
  32.     IF aligntext THEN
  33.         newx=((x+7)\8)*8
  34.         w=w-newx+x
  35.         x=newx
  36.     END IF
  37.     curline=woOffY(i)\celly
  38.     linestodo=h\celly
  39.     IF curline+linestodo>wolines(file) THEN linestodo=wolines(file)-curline
  40. '    Debug "From"+STR$(curline)+"doing"+STR$(linestodo)
  41.     margin=woOffX(i)\cellx
  42.     FOR j=1 TO linestodo
  43.         y=y+celly
  44.         IF expandtabsflag OR margin<>0 THEN
  45.             IF expandtabsflag THEN
  46.                 ExpandTabs lines$(file,curline),linebuf$
  47.                 IF woOffX(i)<>0 THEN
  48.                     linebuf$=MID$(linebuf$,margin+1)
  49.                 END IF
  50.             ELSE
  51.                 linebuf$=MID$(lines$(file,curline),margin+1)
  52.             END IF    
  53.             v_gtext x,y,linebuf$
  54.         ELSE
  55.             v_gtext x,y,lines$(file,curline)
  56.         END IF
  57.         INCR curline
  58.     NEXT j
  59. END SUB
  60.  
  61. SUB TextClose
  62. SHARED HowManyWindows,Commoni,woTindex(1),lines$(2),TextWindows,wolines(1)
  63. STATIC j,k
  64.     FOR j=1 TO HowManywindows+1
  65.         IF woTindex(j)>woTindex(commoni) THEN  DECR woTindex(j)
  66.     NEXT j
  67.     
  68.     DECR TextWindows
  69.     FOR j=woTindex(commoni)+1 TO TextWindows
  70.         woLines(j-1)=woLines(j)
  71.         FOR k=0 TO UBOUND(lines$,2)
  72.             lines$(j-1,k)=lines$(j,k)
  73.         NEXT k
  74.     NEXT j
  75.     woTindex(commoni)=0
  76. END SUB
  77. 'Opens a scrolling window that displays text - the
  78. ' text is stroed as lines in the lines$(i,n) array where i is
  79. ' text file number. The number of lines is stored in wolines()
  80. FUNCTION OpenTextWindow(WindowName$,WindComp)
  81. STATIC WindowHandle
  82. SHARED woType(1),woTindex(1),TextWindows,MaxTextWindows,HowManyWindows
  83.     WindowHandle=OpenAWindow(WindowName$,WindComp,VARPTRS(TextReDraw),VARPTRS(TextSliderMax),VARPTRS(TextClose))
  84.     IF WindowHandle >= 0 THEN
  85.             INCR TextWindows
  86.             IF TextWindows>MaxTextWindows THEN
  87.                 DECR TextWindows
  88.                 WindowHandle=-1
  89.             ELSE
  90.                 woType(HowManyWindows)=woTtext
  91.                 woTindex(HowManyWindows)=TextWindows-1
  92.             END IF
  93.     END IF
  94.     OpenTextWindow=WindowHandle
  95. '    DEbug "opened window"
  96. END FUNCTION
  97.  
  98. SUB LoadTextFile(name$,BYVAL index,lines)
  99. SHARED lines$(2)
  100. STATIC i,tempch
  101. BusyBee 1
  102. tempch=FREEFILE
  103. OPEN name$ FOR INPUT AS tempch
  104. i=0
  105. WHILE NOT EOF(tempch)
  106.     LINE INPUT #tempch,lines$(index,i)
  107.     INCR i
  108. WEND
  109. 'debug  STR$(i)+ "lines"
  110. lines=i
  111. CLOSE tempch
  112. BusyBee 0
  113. END SUB
  114.  
  115. ' expand any tabs in the string sce$ to dest$
  116. SUB ExpandTabs(sce$,dest$)
  117. SHARED tabsize
  118. STATIC i,j,ch,newj
  119. i=1:j=1:dest$=""
  120. FOR i=1 TO LEN(sce$)
  121.     ch=ASC(MID$(sce$,i,1))
  122.     IF ch=9 THEN
  123.         newj=((j-1)\tabsize+1)*tabsize+1
  124.         dest$=dest$+SPACE$(newj-j)
  125.         j=newj
  126.     ELSE
  127.         dest$=dest$+CHR$(ch)
  128.         INCR j
  129.     END IF
  130. NEXT i
  131. END SUB
  132.  
  133.