BBS: Inland Empire Archive Date: 02-28-93 (21:28) Number: 68 From: VICTOR YIU Refer#: NONE To: ALL Recvd: NO Subj: SpaceOut 1.0 ---> 2/3 Conf: (2) Quik_Bas
'Part 2 of SPACEOUT.BAS - continued from last message... IF Ok THEN LOCATE , 1 PRINT USING "Time elapsed: ###.## seconds."; TIMER - T! PRINT PRINT "Results:" PRINT " Compression percentage: "; PRINT USING "###.#%"; (InL& - OutL&) * 100 / InL& PRINT " In:"; InL&; " Out:"; OutL& PRINT " Bytes saved: "; InL& - OutL&; "out of"; InL& PRINT PRINT "Happy compression!" ELSE PRINT "Compression aborted or error occured." IF InL& = 0 THEN PRINT "File does not exist." END IF END ' This function expands the compressed code generated by vy.Encode. ' It is a little more complicated because it has to create extra ' spaces without using string concentration (A$ + B$ ...) -- that ' would be toooo slow. ' FUNCTION vy.Decode (Text$) Leng = LEN(Text$) IF Leng = 0 THEN Decode = True: EXIT FUNCTION OrigLen = CVI(LEFT$(Text$, 2)) IF OrigLen > Leng - 2 THEN ' doing something if two blocks END IF ' of code are squished together... ' but try to avoid it... Add = OrigLen - LT IF Add > 0 THEN Text$ = SPACE$(Add + 1) + MID$(Text$, 3) Temp& = SSEG(Text$) ' QB USERS: REPLACE ' "SSEG" with VARSEG Offset = SADD(Text$) DEF SEG = Temp& + Offset \ 16 After = Offset AND 15 Offset = After + Add IF Add THEN Offset = Offset + 1 Endd = Offset + Leng - 1 Abort = False Ok = True FOR Byte = Offset TO Endd IF After > Byte THEN PRINT "Input is corrupted!" Ok = False EXIT FOR END IF Char = PEEK(Byte) IF Char > 127 THEN POKE After, Char AND 127 After = After + 1 POKE After, 32 ELSE POKE After, Char END IF After = After + 1 NEXT DEF SEG Text$ = LEFT$(Text$, OrigLen) IF NOT Ok THEN Text$ = RTRIM$(Text$) vy.Decode = Ok END FUNCTION ' My principal is simple. Since the SPACE (ASCII 32) character is the ' most commonly found character in English text, and the high bit of ' the text is not used, I have decided to compress the space into the ' one bit. What I mean: If the next character is a space, turn the ' high bit on. If it is not, leave it off. ' ' So this input: weiu weoiru weoiu q ' ' would come out 3 characters shorter, since the spaces are represented ' by the high bit of the previous character. If the input has two ' incoming spaces, however, the 1st space will be encoded w/the last 'Continued on next message... --- Blue Wave/RA v2.10 [NR] * Origin: Hard Disc Cafe / Houston Texas / (713) 589-2690 / Node -*N (1:106/30.0)
Books at Amazon:
Back to BASIC: The History, Corruption, and Future of the Language
Hackers: Heroes of the Computer Revolution (including Tiny BASIC)
Go to: The Story of the Math Majors, Bridge Players, Engineers, Chess Wizards, Scientists and Iconoclasts who were the Hero Programmers of the Software Revolution
The Advent of the Algorithm: The Idea that Rules the World
Moths in the Machine: The Power and Perils of Programming
Mastering Visual Basic .NET