' STRUCT.LST
' ----------
' Outputs structure of subprograms
'
FILESELECT "\*.LST","",select$
CLS
'
DIM line$(2000)
t=TIMER
OPEN "i",#1,select$
'
line$(0)="Main program"
line%=1
WHILE NOT (EOF(#1))
  LINE INPUT #1,a$
  k1%=INSTR(a$,"@")
  go%=INSTR(UPPER$(a$),"GOSUB")
  pr%=INSTR(UPPER$(a$),"PROCEDURE")
  '
  IF k1%>0
    flag%=0
    FOR m%=1 TO k1%-1
      IF MID$(a$,m%,1)<>" "
        flag!=-1
      ENDIF
    NEXT m%
    IF flag!=0
      line$(line%)="  "+MID$(a$,k1%+1)
      @linelength
    ENDIF
  ENDIF
  IF go%>0
    s$=MID$(a$,go%+6)
    REPEAT
      z%=INSTR(s$,",")
      IF z%>0
        left$=LEFT$(s$,z%-1)
        s$=MID$(s$,z%+1)
        line$(line%)="  "+left$
        @linelength
      ELSE
        line$(line%)="  "+s$
        @linelength
      ENDIF
    UNTIL z%=0
  ENDIF
  IF pr%>0
    line$(line%)=" "
    INC line%
    line$(line%)=MID$(a$,pr%)
    @linelength
  ENDIF
WEND
CLOSE #1
tt$=STR$((TIMER-t)/200)
ALERT 2,"|"+STR$((TIMER-t)/200)+" seconds,|Total "+STR$(line%-1)+" lines. ",1,"Print|Show",question%
'
IF question%=1
  FOR m%=0 TO line%-1
    LPRINT "        ";line$(m%)
  NEXT m%
ELSE
  FOR m%=0 TO line%-1
    PRINT line$(m%)
    IF CRSLIN>23
      VOID INP(2)
      CLS
    ENDIF
  NEXT m%
  VOID INP(2)
ENDIF
'
PROCEDURE linelength
  IF LEN(line$(line%))>72
    line$(line%+1)="    "+MID$(line$(line%),73)
    line$(line%)=LEFT$(line$(line%),72)
    INC line%
    IF LEN(line$(line%))>72
      line$(line%+1)="    "+MID$(line$(line%),73)
      line$(line%)=LEFT$(line$(line%),72)
      INC line%
    ENDIF
  ENDIF
  INC line%
RETURN
