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
  $)

Back: 1951-1970