prints.ocm 769 B

12345678910111213141516171819202122232425262728293031323334353637383940
  1. proc prints(chan out, value fmt[], str[]) =
  2. -- Like fprintf(out, fmt, str), with only %s or %<width>s 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='s'
  26. seq
  27. seq i=[0 for w-str[byte 0]]
  28. out ! ' '
  29. seq i=[0 for str[byte 0]]
  30. out ! str[byte i]
  31. otherwise
  32. out ! key
  33. i:=i+1
  34. otherwise
  35. seq
  36. out ! fmt[byte i]
  37. i:=i+1
  38. :