Program in BCPL
// Routine to compute a checksum of a
// named file, simplified from a compiler example.
GET "libhdr"
LET start() = VALOF
$( LET args = VEC 50
LET instream = 0
LET outstream = 0
LET sum = 314159
IF rdargs("FROM/A,TO/K", args, 50) = 0 DO
$( writes("Bad arguments for CHECKSUM*n")
RESULTIS 20
$)
instream := findinput(args!0)
IF instream = 0 DO $( writef("can't open %s*n", args!0)
RESULTIS 20
$)
selectinput(instream)
UNLESS args!1 = 0 DO
$( outstream := findoutput(args!1)
IF outstream = 0 DO $( writef("can't open %s*n", args!1)
endread()
RESULTIS 20
$)
$)
$( LET ch = rdch()
IF ch=endstreamch BREAK
sum := (13*sum + ch) & #xFFFFFFF
$) REPEAT
UNLESS outstream=0 DO selectoutput(outstream)
writef("%n*n", sum)
out:
endread()
UNLESS outstream = 0 DO $( selectoutput(outstream)
endwrite()
$)
RESULTIS 0
$)