'===========================================================================
' Subject: HTML DECODER                       Date: 11-24-95 (00:00)       
'  Author: Toshihiro Horie                    Code: QB, QBasic, PDS        
'  Origin: www.ocf.berkeley.edu/~horie      Packet: HTML.ABC
'===========================================================================
'HTML DECODER VERSION 307
'GREATLY IMPROVED OVER V2.0
'BY TOSHIHIRO HORIE

DEFINT A-Z

VERNO = 307
     
      N = 1:                'buffer size=1 byte
      VERSION$ = STR$(VERNO / 100)
      a$ = STRING$(N, 123)
      b$ = STRING$(N, 123): 'byte buffers
      c$ = STRING$(N, 123)
      D$ = STRING$(N, 123)
      PROGRAMNAME$ = "HTML VIEWER v" + LTRIM$(VERSION$) + " by T. Horie   Today:" + DATE$
      CMD$ = COMMAND$:      ' command line string

SCREEN 0: CLS : COLOR 7, 0
IF CMD$ = "" THEN
      COLOR 15, 1
      PRINT PROGRAMNAME$
      COLOR 7, 0
      SHELL "DIR *.HTM/W"
      END
END IF
IF INSTR(CMD$, ".HTM") = 0 THEN CMD$ = CMD$ + ".HTM"

OPEN CMD$ FOR BINARY AS #1
CLS : LOCATE 1, 1: COLOR 15, 3
PRINT PROGRAMNAME$
COLOR 14, 4: LOCATE 1, (80 - LEN(CMD$)): PRINT CMD$;
LOCATE 1, 50: COLOR 15, 1: PRINT STR$(LOF(1)) + " bytes"
VIEW PRINT 2 TO 25: a& = 1
DO
      GET #1, a&, a$
      IF a$ = CHR$(10) THEN
            IF POS(0) < 16 AND POS(0) < 1 THEN
                  PRINT CHR$(250);
            ELSE
                  PRINT " "
            END IF
      END IF
      IF a$ > CHR$(31) THEN
              IF a$ = "<" THEN
                      GET #1, (a& + 1), b$
                      GET #1, (a& + 2), c$
                      b$ = UCASE$(b$): c$ = UCASE$(c$)
                      IF b$ = "B" AND c$ = "R" THEN 'bright? / break
                           COLOR 15, 0: PRINT : a& = a& + 2
                      ELSEIF b$ = "H" AND c$ = "T" THEN 'HTML Magic marker
                              a& = a& + 4
                      ELSEIF b$ = "H" AND c$ = "E" THEN 'Head
                              COLOR 0, 3: a& = a& + 4
                      ELSEIF b$ = "B" AND c$ = "O" THEN 'body
                              PRINT "<< BODY >>": a& = a& + 4
                      ELSEIF b$ = "B" AND c$ = "L" THEN 'blockquote
                              PRINT "[==quote==]:": a& = a& + 10
                      ELSEIF b$ = "P" AND c$ = "R" THEN 'preformatted block
                              a& = a& + 3
                      ELSEIF b$ = "B" AND c$ = ">" THEN '???   |> marker
                              COLOR 15, 0: PRINT CHR$(16);
                              COLOR 7, 0: a& = a& + 1
                      '--------------------------------------LISTS------
                      ELSEIF b$ = "O" AND c$ = "L" THEN 'ordered list
                              COLOR 15, 0
                              PRINT "Numbered List 1,2,3..."
                              COLOR 7, 0
                              a& = a& + 2
                      ELSEIF b$ = "U" AND c$ = "L" THEN 'unordered list
                                                      'or underline
                              a& = a& + 2
                      ELSEIF b$ = "L" AND c$ = "I" THEN    'list item
                              COLOR 15, 0: PRINT " " + CHR$(254);
                              COLOR 7, 0
                              a& = a& + 3
                      '-------------------------------------------------
                      ELSEIF b$ = "C" AND c$ = "O" THEN 'code
                              COLOR 10, 0: a& = a& + 4
                      ELSEIF b$ = "B" AND c$ = "L" THEN 'blink
                              COLOR 31, 1: a& = a& + 5
                      ELSEIF b$ = "E" AND c$ = "M" THEN 'emphasized
                              COLOR 15, 4: a& = a& + 3
                      ELSEIF b$ = "S" AND c$ = "T" THEN 'strong
                              COLOR 14, 4: a& = a& + 6
                      ELSEIF b$ = "F" AND c$ = "O" THEN 'form
                      GET #1, (a& + 3), D$

                      IF D$ = "R" THEN
                            COLOR 14, 4
                            PRINT "[FORM]-[         ]"
                      ELSEIF D$ = "N" THEN
                            'fontsize - not working well
                            COLOR 15, 1
                            cnt = 0
                            DO
                                  a& = a& + 1
                                  cnt = cnt + 1
                                  GET #1, a&, D$
                                  IF cnt > 80 THEN EXIT DO
                            LOOP UNTIL D$ = ">"
                      END IF
                      '----------------------------DATA-SECTIONS?-------
                      ELSEIF b$ = "D" AND c$ = "L" THEN 'begin section?
                            PRINT STRING$(70, 205): a& = a& + 2
                      ELSEIF b$ = "D" AND c$ = "T" THEN 'next section 1?
                            PRINT CHR$(15): a& = a& + 2
                      ELSEIF b$ = "D" AND c$ = "D" THEN 'next section 2?
                            PRINT CHR$(22): a& = a& + 2
                      '---------------------------------TABLES----------
                      ELSEIF b$ = "T" AND c$ = "R" THEN 'advance row
                            PRINT "#": a& = a& + 2
                      ELSEIF b$ = "T" AND c$ = "D" THEN  'advance column in table
                            PRINT "_._";
                                    WHILE a$ <> ">"
                                          a& = a& + 1
                                          GET #1, (a& + 1), a$
                                    WEND
                      '--------------------------------------------------
                      ELSEIF b$ = "H" AND c$ = "R" THEN 'rule ----
                              PRINT CHR$(249) + STRING$(77, 196) + CHR$(249)
                              a& = a& + 2
                      ELSEIF b$ = "T" AND c$ = "I" THEN '===title====
                                    a& = a& + 5
                                    tstring$ = "`"
                                    WHILE a$ <> ">"
                                          a& = a& + 1
                                          GET #1, (a& + 1), a$
                                          tstring$ = tstring$ + a$
                                    WEND
                                    lent = LEN(tstring$)
                                    tstring$ = LEFT$(tstring$, (lent - 8)) + "'"
                                    a& = a& + 1: COLOR 11, 1: lent2 = lent
                                    IF lent2 > 80 THEN lent2 = 80
                                    PRINT STRING$(lent2, "=") + CHR$(13) + tstring$ + CHR$(13) + STRING$(lent2, "=");
                                    COLOR 7, 0: PRINT


                      ELSEIF b$ = "I" AND c$ = "M" THEN
                              'IMAGE reference
                                    COLOR 14, 1
                                    PRINT "IMG";
                                    WHILE a$ <> ">"
                                          a& = a& + 1
                                          GET #1, (a& + 1), a$
                                          IF a$ = CHR$(34) THEN
                                                COLOR 0, 7: cnt = 0
                                                imgs$ = ""
                                                DO
                                                   a& = a& + 1
                                                   GET #1, (a& + 1), a$
                                                   imgs$ = imgs$ + a$
                                                   cnt = cnt + 1
                                                   IF cnt = 80 THEN EXIT DO
                                                   IF a$ = ">" THEN EXIT DO
                                                   IF INSTR(UCASE$(imgs$), "COUNTER") > 0 THEN
                                                      imgs$ = "[01234] - Counter"
                                                   END IF
                                                LOOP UNTIL a$ = CHR$(34)
                                                PRINT imgs$;
                                                COLOR 7, 0
                                          END IF
                                    WEND
                                    COLOR 7, 0
                      ELSEIF b$ = "I" THEN
                              COLOR 13, 0: a& = a& + 2
                      ELSEIF b$ = "U" THEN
                              COLOR 0, 7: a& = a& + 2
                      ELSEIF b$ = "P" THEN
                              PRINT : PRINT "      ";
                              a& = a& + 2
                      ELSEIF b$ = "H" AND c$ = "5" THEN
                              COLOR 15, 3
                              a& = a& + 3
                      ELSEIF b$ = "H" AND c$ = "4" THEN
                              COLOR 9, 0
                              a& = a& + 3
                      ELSEIF b$ = "H" AND c$ = "3" THEN
                              COLOR 14, 0
                              a& = a& + 3
                      ELSEIF b$ = "H" AND c$ = "2" THEN
                              COLOR 12, 0
                              a& = a& + 3
                      ELSEIF b$ = "H" AND c$ = "1" THEN
                              COLOR 2, 0
                              a& = a& + 3
                      ELSEIF b$ = "/" THEN
                              WHILE a$ <> ">"
                                      a& = a& + 1
                                      GET #1, (a& + 1), a$
                              WEND
                              'COLOR 7, 1: PRINT "/";
                      ELSE
                              IF b$ = "C" AND c$ = "I" THEN
                                    'source citation
                                    COLOR 15, 0: PRINT "Source:";
                                    COLOR 2, 0
                                    a& = a& + 5
                              ELSEIF b$ = "L" AND c$ = "I" THEN
                                    PRINT
                                    a& = a& + 2
                              ELSEIF b$ = "P" THEN
                                    PRINT
                                    COLOR 15, 3: PRINT CHR$(16);
                                    COLOR 7, 0
                                    PRINT "   ";
                                    a& = a& + 2
                              ELSEIF b$ = "A" THEN
                                    'hypertext reference
                                    WHILE a$ <> ">"
                                          a& = a& + 1
                                          GET #1, (a& + 1), a$
                                    WEND
                                    a& = a& + 1
                                    COLOR 15, 1: PRINT "*";
                              ELSEIF b$ = "C" AND c$ = "E" THEN
                                    'CENTERED TEXT - LOCATE KLUDGE USED
                                    a& = a& + 6
                                    CSTRING$ = ""
                                    WHILE a$ <> ">"
                                          a& = a& + 1
                                          GET #1, (a& + 1), a$
                                          CSTRING$ = CSTRING$ + a$
                                    WEND
                                    a& = a& + 1
                                    COLOR 7, 0
                                    cpos = 40 - LEN(CSTRING$) \ 2
                                    IF cpos < 1 THEN cpos = 1
                                    LOCATE , cpos
                                    PRINT CSTRING$;
                              ELSE
                                    COLOR 14, 2
                              END IF
              END IF
      ELSEIF a$ = ">" THEN
                COLOR 7, 0
      ELSEIF a$ = "&" THEN
             SOUND 50, .3
             GET #1, (a& + 1), b$
             GET #1, (a& + 2), c$
             GET #1, (a& + 3), D$
             IF b$ = "q" AND c$ = "u" THEN     'quote
                  PRINT CHR$(34);
                  a& = a& + 5
             ELSEIF b$ = "c" AND c$ = "o" THEN 'copyright
                  PRINT "(c)";
                  a& = a& + 5: 'Note: len("copy")+1
             ELSEIF b$ = "a" AND c$ = "m" AND D$ = "p" THEN 'ampersand
                  PRINT "&";
                  a& = a& + 4
             ELSEIF b$ = "t" AND c$ = "i" AND D$ = "l" THEN 'tilde
                  PRINT "~";
                  a& = a& + 5
             ELSEIF b$ = "a" AND c$ = "a" AND D$ = "c" THEN
                  PRINT " "; : a& = a& + 7
             ELSEIF b$ = "e" AND c$ = "a" AND D$ = "c" THEN '‚ (eacute)
                  PRINT "‚"; : a& = a& + 7
             ELSEIF b$ = "i" AND c$ = "a" AND D$ = "c" THEN
                  PRINT "¡"; : a& = a& + 7
             ELSEIF b$ = "e" AND c$ = "o" AND D$ = "c" THEN
                  PRINT CHR$(164); : a& = a& + 7
             ELSEIF b$ = "u" AND c$ = "a" AND D$ = "c" THEN
                  PRINT "£"; : a& = a& + 7
             ELSEIF b$ = "l" AND c$ = "t" THEN
                  PRINT "<"; : a& = a& + 2
             ELSEIF b$ = "g" AND c$ = "t" THEN
                  PRINT ">"; : a& = a& + 2
             END IF

      ELSE
            IF POS(0) > 70 AND a$ = " " THEN
                PRINT a$
            ELSE
                PRINT a$;
            END IF
      END IF
END IF
a& = a& + N
U$ = INKEY$
IF U$ = " " THEN
      'PAUSE
      DO
      LOOP WHILE INKEY$ = ""
        
'......................................PAGE UP  WITH UP ARROW
ELSEIF U$ = CHR$(0) + CHR$(72) THEN
      a& = a& - N - 2048
      COLOR 7, 0: CLS : COLOR 7, 0
      IF a& < 1 THEN a& = 1

'.....................................PAGE DOWN WITH DOWN ARROW
ELSEIF U$ = CHR$(0) + CHR$(80) THEN
      a& = a& - N + 1024
      COLOR 7, 0: CLS : COLOR 7, 0
      IF a& > LOF(1) THEN a& = LOF(1) - N
'.....................................ESCAPE
ELSEIF U$ = CHR$(27) THEN END
END IF
LOOP UNTIL EOF(1)

COLOR 7, 0
END
