BBS: Inland Empire Archive Date: 02-23-93 (22:26) Number: 397 From: QUINN TYLER JACKSON Refer#: NONE To: ALL Recvd: NO Subj: Intrest.Bas 3/ Conf: (2) Quik_Bas
>>> Continued from previous message DO WHILE Offset > 0 Limit = MaxRow - Offset DO Switch = FALSE FOR Row = Start TO Limit IF Array$(Row) > Array$(Row + Offset) THEN SWAP Array$(Row), Array$(Row + Offset) Switch = Row END IF NEXT Row Limit = Switch - Offset LOOP WHILE Switch Offset = Offset \ 2 LOOP END SUB SUB sqjTableInit (CustomTableFile$) ' This SUB initializes the global array HundredTable$(), which contains ' a list of 100 words that comprise 50% of English language usage. It ' also accepts a file spec in the parameter CustomTableFile$, which it ' then opens and scans into CustomTable$(). Words in the custom file ' that are in [] or {} are flagged to be avoided. That is to say, ' every occurance of an AvoidTable$() word decreases the interest factor ' of a given string in the same way that every occurance of a WordTable$() ' word increases the interest factor. ObsceneTable$() is used to flag ' when a given string contains predefined obscenities. I leave it to ' each programmer's idea of decency to add words to the ObsceneWordData ' DATA statements. User defined obscenities can be in the CustomTableFile ' in angle brackets <>. ' The CustomTableFile is in the format: ' ' programming ' compiler ' [C Language] ' <crap> ' think ' This means that 'programming' 'compiler' and 'think' and added to the ' custom list, whereas 'C Language' is a phrase to avoid, and 'crap' is ' an obscenity you'd rather not contend with. ' First, we initialize BlankSpace$ BlankSpace$ = " :/,.()[]<>{}!?" + CHR$(13) + CHR$(9) + CHR$(10) + CHR$(32) ' Then, we deal with the 100 most used English words. RESTORE EnglishWordData FOR i = 1 TO 100 READ Temp$ HundredTable$(i) = UCASE$(Temp$) NEXT i sqjShellSort HundredTable$() ' Then, we deal with the obscenities. The logic is to scan the data until ' the word MOUTH_WITH_SOAP is encountered in the DATA stream. RESTORE ObsceneWordData DO ObPtr = ObPtr + 1 READ Temp$ ObsceneTable$(ObPtr) = UCASE$(Temp$) LOOP UNTIL Temp$ = "MOUTH_WITH_SOAP" ObPtr = ObPtr - 1 ' Subtract one to cover over MOUTH_WITH_SOAP sqjShellSort ObsceneTable$() ' Finally, we read in the CustomTableFile if there is one. IF CustomTableFile$ <> "" THEN CustBound = UBOUND(CustomTable$) AvBound = UBOUND(AvoidTable$) CussBound = UBOUND(ObsceneTable$) CustomHandle = FREEFILE OPEN CustomTableFile$ FOR INPUT AS CustomHandle DO LINE INPUT #CustomHandle, Buffer$ Buffer$ = UCASE$(RTRIM$(LTRIM$(Buffer$))) SELECT CASE LEFT$(Buffer$, 1) CASE "[", "{" ' Word to be avoided AvoidPtr = AvoidPtr + 1 AvoidTable$(AvoidPtr) = MID$(Buffer$, 2, LEN(Buffer$) - 2) IF AvoidPtr = AvBound THEN AvBound = AvBound + 25 REDIM PRESERVE AvoidTable$(AvBound) ' ^^^^^^^^ ' See the comment below about my use of PRESERVE in this ' program. QuickBASIC 4.5 users will have to program a ' way around this handy PDS/VBDOS feature. END IF CASE "<" ' User defined obscenity ObsceneTable$(ObPtr) = MID$(Buffer$, 2, LEN(Buffer$) - 2) IF ObPtr = CussBound THEN CussBound = CussBound + 25 REDIM PRESERVE ObsceneTable$(CussBound) END IF ObPtr = ObPtr + 1 CASE ELSE ' Word that makes reading interesting CustPtr = CustPtr + 1 CustomTable$(CustPtr) = Buffer$ IF CustPtr = CustBound THEN CustBound = CustBound + 25 REDIM PRESERVE CustomTable$(CustBound) END IF END SELECT LOOP UNTIL EOF(CustomHandle) CLOSE CustomHandle IF AvPtr THEN REDIM PRESERVE AvoidTable$(AvPtr) END IF REDIM PRESERVE CustomTable$(CustPtr) ' ^^^^^^^^ ' This is a PDS or VBDOS extension! QuickBASIC 4.5 won't like ' this. You'll have to find a work around. This is the most ' efficient means of reading into the array without knowing in ' advance how many custom words will be in the CustomTableFile. ' There are other methods that use pointers, but the arrays that ' result are kind of difficult to work with. sqjShellSort CustomTable$() sqjShellSort AvoidTable$() ELSE REDIM AvoidTable$(1) REDIM CustomTable$(1) ' If there is no CustomTableFile, the above statement grabs back ' most of the memory that the array would have used. Now, isn't that ' a nifty way to grab back some of DGROUP and the far heap? END IF
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