DECLARE SUB AddNode (SStr$) DECLARE SUB J (junk$) DECLARE SUB OpenFiles (file1$, file2$) DECLARE SUB ReadBuffer (f$) 'Objective: Find the longest matching, repeating string! CLEAR , , 3500 DIM SHARED buffer AS STRING * 5000 DIM SHARED search AS STRING * 25 DIM SHARED hdr1 AS STRING * 1, hdr2 AS STRING * 1, hdr3 AS STRING * 1 hdr1 = CHR$(213) hdr2 = CHR$(57) hdr3 = CHR$(45) CLS PRINT "/-----------------------------------------\" PRINT "|Keene-Lampton Compression Program Alpha-1|" PRINT "\-----------------------------------------/" PRINT 'INPUT "Input File-->", File1$ 'INPUT "Output File-->", File2$ file1$ = "command.com" file2$ = "comm.kam" OPEN file2$ FOR BINARY AS #1 IF LOF(1) > 0 THEN CLOSE 1: KILL file2$ ELSE CLOSE 1 OpenFiles file1$, file2$ tmp$ = "KrAM" PUT #8, , tmp$ ReadBuffer r$ CLOSE 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 SUB AddNode (SStr$) DIM Varchnk AS INTEGER Varchnk = Varchnk + 1 PUT #8, , hdr1 PUT #8, , hdr2 PUT #8, , hdr3 PUT #8, , SStr$ PUT #8, , Varchnk PUT #8, , hdr3 PUT #8, , hdr2 PUT #8, , hdr1 END SUB SUB Compress (junk$) DIM onoff AS INTEGER PRINT "****** Next Chunk ******" FOR searcharea = 1 TO LEN(junk$) STEP LEN(search) search = MID$(junk$, searcharea, LEN(search)) maxhitsofar = 0 FOR qqq = 100 TO LEN(junk$) STEP LEN(search) IF search = MID$(junk$, qqq, LEN(search)) THEN onoff = 1 ELSE onoff = 0 'PRINT onoff; ":"; IF onoff = 1 THEN maxhitsofar = maxhitsofar + 1 NEXT qqq PRINT maxhitsofar; ":"; NEXT searcharea PUT #7, LOC(6), junk$ END SUB SUB J (junk$) FOR q = 1 TO LEN(junk$) IF INSTR(q + 1, junk$, Strd$) = 0 THEN IF LEN(Strd$) > BigNum THEN BigNum = LEN(Strd$) - 1 IF LEN(Strd$) = 0 THEN q = q + 1 ELSE q = q + LEN(Strd$): Strd$ = LEFT$(Strd$, LEN(Strd$) - 1) PRINT "."; IF LEN(Strd$) > 7 THEN AddNode Strd$ Strd$ = "" x = CSRLIN: y = POS(0): LOCATE 25, 1: PRINT "Current Pos: "; q; " Largest String:"; BigNum; : LOCATE x, y ELSE 'PRINT strd$; ":"; PRINT "0"; Strd$ = Strd$ + MID$(junk$, q + 1, 1) END IF q = q - 1 NEXT q AddNode Strd$ PUT #7, , junk$ PRINT BigNum; "<-- Large!!" END SUB SUB OpenFiles (file1$, file2$) OPEN file2$ FOR BINARY AS #7 IF LOF(7) <> 0 THEN CLOSE 7: KILL file2$ ELSE CLOSE 7 OPEN "VMEM.SWP" FOR BINARY AS #7 IF LOF(7) <> 0 THEN CLOSE 7: KILL "VMEM.SWP" ELSE CLOSE 7 OPEN "FOTR.SWP" FOR BINARY AS #7 IF LOF(7) <> 0 THEN CLOSE 7: KILL "FOTR.SWP" ELSE CLOSE 7 OPEN file1$ FOR BINARY ACCESS READ AS #6 OPEN file2$ FOR BINARY ACCESS WRITE AS #7 OPEN "VMEM.SWP" FOR BINARY AS #8 OPEN "FOTR.SWP" FOR BINARY AS #9 END SUB SUB ReadBuffer (f$) 'Objective: To load and resize the buffer! FOR q = 0 TO LOF(6) GET #6, , buffer: Cnt = Cnt + 1 IF LEN(buffer) + q > LOF(6) THEN m = ABS(((Cnt * LEN(buffer)) - LEN(buffer)) - LOF(6)) ELSE m = LEN(buffer) IF m = LEN(buffer) THEN J buffer ELSE J LEFT$(buffer, m) q = q + (m - 1) IF Cnt * LEN(buffer) > LOF(6) THEN END IF q + 1 = LOF(6) THEN EXIT FOR NEXT q END SUB