Matrix Checksum code! Fa

 BBS: Inland Empire Archive
Date: 02-18-93 (20:48)             Number: 384
From: CORIDON HENSHAW              Refer#: NONE
  To: ALL                           Recvd: NO  
Subj: Matrix Checksum code!  Fa      Conf: (2) Quik_Bas
Hello All!

Here's some matrix checksuming code:

===Chop===
'NAME: MATRCHK.BAS
'DESC: Matrix checksuming code
'FROM: Coridon Henshaw@1:250/820
'QBS Publishing: YES!

DECLARE FUNCTION ChkSum% (BYVAL SSegment%, BYVAL SOffset%, BYVAL SLength%)
'^^^ EXTENAL ASM CODE
DECLARE FUNCTION MatrixChecksum@ (TextBlock AS STRING, MatrixWidth AS INTEGER)

DEFINT A-Z
FUNCTION MatrixChecksum@ (TextBlock AS STRING, MatrixWidth AS INTEGER)
IF MatrixWidth > 0 AND MatrixWidth <> LEN(TextBlock) THEN
        MatrixDepth = LEN(TextBlock) \ MatrixWidth
        REDIM Matrix(MatrixDepth, MatrixWidth) AS STRING * 1

        FOR X = 0 TO MatrixDepth
                FOR Y = 0 TO MatrixWidth
                        Pointer = Pointer + 1
                        Matrix(X, Y) = MID$(TextBlock, Pointer, 1)
                NEXT
        NEXT
        FOR X = 0 TO MatrixDepth
                FOR Y = 0 TO MatrixWidth
                        TempString$ = TempString$ + Matrix(X, Y)
                        'Extract horizontal text
                NEXT
                HSum@ = HSum@ + ChkSum%(SSEG(TempString$),
SADD(TempString$),_ LEN(TempString$))
                TempString$ = ""
        NEXT
        FOR Y = 0 TO MatrixWidth
                FOR X = 0 TO MatrixDepth
                        TempString$ = TempString$ + Matrix(X, Y)
                        'Extract vertical text
                NEXT
                VSum@ = VSum@ + ChkSum%(SSEG(TempString$),
SADD(TempString$),_ LEN(TempString$))
                TempString$ = ""
        NEXT

        MatrixChecksum = (VSum@ + HSum@) * MatrixWidth
END IF

END FUNCTION
===Chop===

Here's CHKSUM.OBJ, needed for the above:

===Chop===
OPEN"B",#1,"CHKSUM.OBJ":OPEN"B",#2,"H"
DO:READ I$:IF I$="-1" THEN EXIT DO
PUT #2,,I$: LOOP: I$="  ": SEEK #2,1:DO UNTIL LOC(2)=LOF(2): GET #2,,I$
O$=CHR$(VAL("&H"+I$)):PUT #1,,O$:LOOP:CLOSE:KILL "H"
DATA 800C000A63686B73756D2E61736D7096250000064447524F5550044441544104434F44
DATA 45055F444154410B43484B53554D5F5445585439980700482700060401E79807004800
DATA 00050301109A040002FF025F900D0000010643484B53554D0000009188040000A201D1
DATA A02B00010000558BEC1E568E5E0A8B76088B4E0633C00304464983F9007402EBF55E1F
DATA 5DCA06005E1F5DCA0600678A02000074
DATA -1

'Yeah, I know hex streams are crappy, but it'll have to do for now...
'Wait until you see BIN2ASCII ;)
===Chop===

If anyone can make the matrix checksum code faster, or
convert it to ASM, PLEASE DO!

Coridon Henshaw \ Sirrus Software

--- GEcho 1.00
 * Origin: TCS Concordia - Mail Only - Toronto, Ontario (1:250/820)
Outer Court
Echo Basic Postings

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