printd.ocm 644 B

123456789101112131415161718192021222324252627282930313233343536
  1. proc printd(chan out, value fmt[], d)=
  2. -- Like fprintf(out, fmt, d), with only %d or %<width>d in fmt[]
  3. def otherwise=true:
  4. var i, len:
  5. seq
  6. len:=fmt[byte 0]
  7. i:=1
  8. while i<=len
  9. if
  10. fmt[byte i] = '%'
  11. var w:
  12. seq
  13. i:=i+1
  14. w:=0
  15. while (i<=len) and ('0'<=fmt[byte i]) and (fmt[byte i]<='9')
  16. seq
  17. w:=(w*10)+(fmt[byte i]-'0')
  18. i:=i+1
  19. if
  20. i<=len
  21. var key:
  22. seq
  23. key:=fmt[byte i]
  24. if
  25. key='d'
  26. decout(out, d, w)
  27. otherwise
  28. out ! key
  29. i:=i+1
  30. otherwise
  31. seq
  32. out ! fmt[byte i]
  33. i:=i+1
  34. :