|
|
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 - metrics - 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»