Pristine Ack-5.5
[Ack-5.5.git] / include / occam / prints.ocm
1 proc prints(chan out, value fmt[], str[]) =
2 -- Like fprintf(out, fmt, str), with only %s or %<width>s in fmt[]
3
4         def otherwise=true:
5         var i, len:
6         seq
7                 len:=fmt[byte 0]
8                 i:=1
9
10                 while i<=len
11                         if
12                                 fmt[byte i] = '%'
13                                         var w:
14                                         seq
15                                                 i:=i+1
16                                                 w:=0
17                                                 while (i<=len) and ('0'<=fmt[byte i]) and (fmt[byte i]<='9')
18                                                         seq
19                                                                 w:=(w*10)+(fmt[byte i]-'0')
20                                                                 i:=i+1
21                                                 if
22                                                         i<=len
23                                                                 var key:
24                                                                 seq
25                                                                         key:=fmt[byte i]
26                                                                         if
27                                                                                 key='s'
28                                                                                         seq
29                                                                                                 seq i=[0 for w-str[byte 0]]
30                                                                                                         out ! ' '
31                                                                                                 seq i=[0 for str[byte 0]]
32                                                                                                         out ! str[byte i]
33                                                                                 otherwise
34                                                                                         out ! key
35                                                                         i:=i+1
36                                 otherwise
37                                         seq
38                                                 out ! fmt[byte i]
39                                                 i:=i+1
40 :