[net.micro.cbm] C64BOOT.CLU

GMW@psuvm.BITNET (06/05/85)

%% Program to download files to my Commodore 64
%% Sends lines, one at a time.  Each line is followed by a
%% checksum.  Commodore validates checksum, and either sends
%% "OK" or "NG".  If no good, retransmit.  Last line's checksum
%% is sent with a leading minus sign to show end-of-file.
     
start_up = proc ()
     
   po:stream := stream$primary_output()
   pi:stream := stream$primary_input()
   file:stream := stream$open(file_name$parse(get_jcl()),"read")
   except when not_possible(why:string):
      stream$putl(po,"Could not open file: " || why) return end
     
   received:string := ""
   while received ~= "OK" do received := stream$getl(pi) end
	% don't start until initial OK
     
   while ~stream$empty(file) | received = "NG" do
      line:string
      if received = "OK" then line := stream$getl(file) end
      checksum:int := 0
      for c:char in string$chars(line) do
	 stream$putc_image(po,c)
	 checksum := checksum + char$c2i(c)
      end
      stream$putc_image(po,'\r')
      if stream$empty(file) then stream$putc(po,'-') end
      stream$puts_image(po, int$unparse(checksum) || "\r")
      received := stream$getl(pi)
   end