-- decin/decout - Decimal i/o proc decin(chan in, var d, c)= -- Reads a decimal number from input into d. c is used as the first input -- character, and it contains the character just after the decimal number -- when decin exits. var neg: seq while (c='*s') or (c='*t') or (c='*n') in ? c if (c='-') or (c='+') seq neg:=(c='-') in ? c true neg:=false d:=0 while ('0'<=c) and (c<='9') seq d:=(d*10)+(c-'0') in ? c if neg d:= -d : proc decout(chan out, value d, w)= -- Sends d to channel out in decimal on a field of w spaces. It is just like -- fprintf(out, "%*d", w, d); var dec[BYTE 12], di, dd, d0, neg: seq di:=0 if d<0 seq neg:=true dd:= -d d>=0 seq neg:=false dd:=d d0:=1 while d0<>0 seq dec[BYTE di]:=(dd\10)+'0' di:=di+1 dd:=dd/10 d0:=dd if neg seq dec[BYTE di]:='-' di:=di+1 seq i=[0 for w-di] out ! '*s' while di<>0 seq di:=di-1 out ! dec[BYTE di] :