DECLARE FUNCTION IsALine% (T AS STRING) DECLARE SUB CVTAllURL (T AS STRING) DECLARE SUB CVTURL (T AS STRING, Prot AS STRING) DECLARE SUB HTMLChar (S AS STRING) DECLARE SUB FixLF (T AS STRING) DECLARE SUB GetTop (F AS STRING, T AS STRING) DECLARE FUNCTION WrapString% (S AS STRING, T() AS STRING, Max AS INTEGER) DECLARE SUB Replace (Temp$, Old$, NW$) CLS CLEAR , , 4000 PRINT "CVT2HTM 1.00 1/31/98 (wel)": PRINT PRINT PRINT "Converts a text file to a HTML file" PRINT Fin$ = "TXT2HTML.TXT" ' Text File to Convert ' Extension must be .TXT ConvertURLS = 1 ' 1 = Convert URLS, 0 = Do not convert TB$ = CHR$(9) LF$ = CHR$(10) CR$ = CHR$(13) CRLF$ = CR$ + LF$ Title$ = "" ' Sanity check on file names FIin$ = UCASE$(Fin$) I% = INSTR(Fin$, "."): LN% = LEN(Fin$) IF I% THEN ' Does it contain a period? Ext$ = UCASE$(RIGHT$(Fin$, LN% - I%)) IF Ext$ = "TXT" THEN FOut$ = LEFT$(Fin$, I% - 1) + ".HTM" ELSE PRINT Fin$; " is not a text file" GOTO EndOfLoop END IF ELSE Ext$ = "" GOTO EndOfLoop END IF Title$ = "Converted from " + Fin$ ON ERROR GOTO OpenErr OPEN Fin$ FOR INPUT AS #1 LEN = 10240: GOTO GoodOpen OpenErr: PRINT : PRINT "Error opening "; Fin$ PRINT : PRINT "File not found. Does it exist?" CLOSE END GoodOpen: OPEN FOut$ FOR OUTPUT AS #2 LEN = 10240 PRINT "Converting "; Fin$; " to "; FOut$ ON ERROR GOTO SomeError ' Print opening stuff ' We will be doing a bunch of processing on the first ' two lines. Cover your eyes. T$ = "": T2$ = "": Line1$ = "": Line2$ = "" IF EOF(1) THEN GOTO EndOfText LINE INPUT #1, T$ IF EOF(1) THEN GOTO SecLine LINE INPUT #1, T2$ SecLine: IF RTRIM$(T$) = "" THEN T$ = T2$: T2$ = "" IF T$ <> "" AND IsALine%(T$) = 0 THEN Title$ = LEFT$(T$, 66) CALL FixLF(T$): CALL HTMLChar(T$) CALL FixLF(T2$): CALL HTMLChar(T2$) IF (T2$ = "" OR LEFT$(T2$, 3) = "
" IF Line1$ <> "" THEN PRINT #2, Line1$ IF Line2$ <> "" THEN PRINT #2, Line2$ ' We are FINALLY into processsing the file. StartOfText: IF EOF(1) THEN GOTO EndOfText LINE INPUT #1, T$ ' Read a line from input file CALL FixLF(T$) ' Fix any carriage return stuff CALL HTMLChar(T$) ' Convert stuff like "<> IF ConvertURLS THEN CALL CVTAllURL(T$) IF T$ = "" THEN ' A Blank line? IF OldT$ <> "" PRINT #2, "" PRINT #2, "" EndOfLoop: ON ERROR GOTO 0 CLOSE PRINT PRINT FRE(A$); "Bytes free" END ' All done. Whew! ' Error processing. Should never happen. SomeError: BEEP: PRINT "Error processing "; Fin$ CLOSE KILL FOut$ RESUME EndOfLoop SUB CVTAllURL (T AS STRING) CALL CVTURL(T, "http://") CALL CVTURL(T, "ftp://") END SUB SUB CVTURL (T AS STRING, Prot AS STRING) STATIC F AS INTEGER, LN AS INTEGER STATIC P1 AS INTEGER, P2 AS INTEGER STATIC URL AS STRING, C AS STRING, Q AS STRING Q = CHR$(34) F = INSTR(T, Prot) URL = UCASE$(T) IF INSTR(T, "HREF") THEN F = 0 C = "" WHILE (F) LN = LEN(T$) FOR I = F TO LN C = MID$(T, I, 1) IF C = " " OR C = Q OR C = "&" THEN EXIT FOR END IF NEXT I IF I > LN THEN I = LN IF I > 1 THEN IF MID$(T, I, 1) = "." THEN I = I - 1 'BEEP: PRINT T: PRINT LEFT$(T, I): 'INPUT X$ END IF END IF END IF 'F = F - 1: IF F < 1 THEN F = 1 IF C = "&" OR C = Q THEN I = I - 1 IF I > LN THEN I = LN P1 = F - 1 ' Left part without Prot P2 = LEN(T) - I + 0 ' Right part without Prot URL = MID$(T, F, I - F + 1) URL = "" + URL + "" 'PRINT T$: PRINT LEFT$(T, P1): PRINT URL: PRINT RIGHT$(T, P2): INPUT X$ I = P1 + LEN(URL) + 1 T = LEFT$(T, P1) + URL + RIGHT$(T, P2) IF I < LEN(T) THEN F = INSTR(I, T, Prot) ELSE F = 0 END IF 'PRINT T; F: 'INPUT X$ WEND END SUB SUB FixLF (T AS STRING) STATIC I AS INTEGER, FP AS INTEGER, LN AS INTEGER STATIC TB AS STRING, LF AS STRING, CR AS STRING, CRLF AS STRING TB = CHR$(9) LF = CHR$(10) CR = CHR$(13) CRLF = CR + LF T = RTRIM$(T) CALL Replace(T, CRLF, LF) ' 'PRINT T: INPUT X ' Ln = LEN(T) ' FOR I = Ln TO 1 STEP -1 ' IF MID$(T, I, 1) = LF THEN ' T = LEFT$(T, I - 1) ' EXIT FOR ' END IF ' NEXT I CALL Replace(T, LF, " ") CALL Replace(T, CR, " ") CALL Replace(T, TB, " ") CALL Replace(T, " ", " ") END SUB SUB GetArgs (S$, ArgV$(), ArgC%) STATIC ' 1.01 05/26/87 ' Subroutine to emulate argv[] and argc (from C) ' Assumes that array argv() is already dimensioned ' "Parses" s$, fills argv$() with individual "tokens" that were ' separated by spaces. Sets argc% to the number of "tokens" parsed ' Example: ' s$="file1.ext file2.ext -i5" ' call GetArgs(s$,argv(),argc%) ' Then argc%=3, ' argv$(0)="", argv$(1)="file1.ext", argv$(2)="file2.ext", argv$(3)="-i5" ArgC% = 0 Sep$ = " ": ' Token separator StrLen% = LEN(S$) IF StrLen% <= 0 THEN GOTO TheEnd BgnTok% = 1: LoopStart: IF BgnTok% > StrLen% THEN GOTO TheEnd IF MID$(S$, BgnTok%, 1) = " " THEN BgnTok% = BgnTok% + 1: GOTO LoopStart MarkSep% = INSTR(BgnTok%, S$, Sep$) IF MarkSep% = 0 THEN MarkSep% = StrLen% + 1 IF ArgC% >= UBOUND(ArgV$, 1) THEN GOTO TheEnd ArgC% = ArgC% + 1 ArgV$(ArgC%) = MID$(S$, BgnTok%, MarkSep% - BgnTok%) IF MarkSep% = StrLen% + 1 THEN GOTO TheEnd BgnTok% = MarkSep% + 1 GOTO LoopStart TheEnd: END SUB SUB GetTop (F AS STRING, T AS STRING) STATIC I AS INTEGER, FP AS INTEGER, LN AS INTEGER, Max AS INTEGER STATIC TB AS STRING, LF AS STRING, CR AS STRING, CRLF AS STRING, CtrZ AS STRING TB = CHR$(9) LF = CHR$(10) CR = CHR$(13) CRLF = CR + LF CtrZ = CHR$(26) Max = LEN(T) FP = FREEFILE OPEN F FOR BINARY AS FP LEN = Max GET FP, , T CLOSE FP LN = INSTR(T, CtrZ) IF LN THEN T = LEFT$(T, LN - 1) T = RTRIM$(T) END SUB SUB HTMLChar (S AS STRING) STATIC Q AS STRING Q = CHR$(34) CALL Replace(S, "&", "&") CALL Replace(S, "<", "<") CALL Replace(S, ">", ">") 'CALL Replace(S, Q, """) CALL Replace(S, Q, """) ' " isn't supported anymore! IF IsALine(S$) THEN S$ = "" THEN T$ = "
" PRINT #2, "" PRINT #2, T$; OldT$ = T$ GOTO StartOfText ELSE GOTO StartOfText END IF END IF PRINT #2, T$ OldT$ = T$ GOTO StartOfText EndOfText: ' Print closing stuff ' PRINT #2, "