|
DataMuseum.dkPresents historical artifacts from the history of: CP/M |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about CP/M Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - download
Length: 2176 (0x880) Types: TextFile Names: »CHECKSUM.PAS«
└─⟦9c4522ab9⟧ Bits:30004602 COMAL-80 version 1.8 og COMPAS-80 V3.02 └─ ⟦this⟧ »CHECKSUM.PAS«
PROGRAM CKECKSUM; æ PROGRAM DER SAETTER CHECKSUM PAA EN HEXFIL, DER ER NORMAL, MEN UDEN CHECKSUM PAA HVER LINIE å LABEL SLUT; TYPE STR2 = STRINGÆ2Å; VAR FILNAVN:STRINGÆ14Å; HEXER:STRINGÆ17Å; I,XSUM,REST:INTEGER; INDHEX:STR2; INDFIL,UDFIL:TEXT; LINIE:STRINGÆ128Å; FUNCTION BYTEUD(A:INTEGER):STR2; BEGIN BYTEUD:= HEXER Æ1+TRUNC(A/16)Å +HEXER Æ1+TRUNC(16*FRAC(A/16))Å ; END; FUNCTION OMHEX(XX:STR2):BYTE; BEGIN OMHEX:=16*(POS(XXÆ1Å,HEXER)-1 ) +POS(XXÆ2Å,HEXER)-1 END; æ --------------- MAIN PROGRAM -------------------- å BEGIN HEXER:='0123456789ABCDEF'; WRITELN;WRITELN(' Checksum-program for intel hexfiler'); WRITE('INDFIL = ');READLN(FILNAVN); ASSIGN(INDFIL,FILNAVN); RESET(INDFIL); WRITE('UDFIL = ');READLN(FILNAVN); ASSIGN(UDFIL,FILNAVN); REWRITE(UDFIL); WHILE NOT EOF(INDFIL) DO BEGIN READLN(INDFIL,LINIE); IF (COPY(LINIE,1,3)=':00') AND (LEN(LINIE)=11) THEN BEGIN WRITELN(UDFIL,LINIE); WRITELN(LINIE,' SLUT'); GOTO SLUT; END; IF NOT ODD(LEN(LINIE)) THEN BEGIN WRITELN('DER ER IKKE ULIGE ANTAL TEGN !!!?'); WRITELN('-> ',LINIE); GOTO SLUT; END; IF LEN(LINIE)-9<>2*OMHEX(LINIEÆ2Å+LINIEÆ3Å) THEN BEGIN WRITELN('FORKERT ANTAL BYTES'); WRITELN('-> ',LINIE); GOTO SLUT; END; IF LINIEÆ1Å<>':' THEN BEGIN WRITELN('LINIE STARTER IKKE MED ":"'); WRITELN('-> ',LINIE); GOTO SLUT; END; FOR I:=2 TO LEN(LINIE) DO IF POS(LINIEÆIÅ,HEXER)=0 THEN BEGIN WRITELN('ULOVLIGT TEGN ? FY!'); WRITELN('-> ',LINIE); GOTO SLUT; END; XSUM:=0; FOR I:=1 TO TRUNC((LEN(LINIE)-1)/2) DO XSUM:=XSUM+OMHEX(LINIEÆI*2Å+LINIEÆI*2+1Å); REST:=256-TRUNC(256.0001*FRAC(XSUM/256)); WRITELN(UDFIL,LINIE,BYTEUD(REST)); WRITELN(LINIE,BYTEUD(REST),' BYTES = ',TRUNC((LEN(LINIE)-9)/2)); END; SLUT: CLOSE(INDFIL); CLOSE(UDFIL); END. «eof»