[t][TT #1119] Convert t/op/bitwise.t to PIR
[parrot.git] / examples / streams / FileLines.pir
blob3486f019e092af0e5d6ea81ee72dd2b21ac84048
1 =head1 Advanced Lines Example
3 This is an advanced example.
5 It uses a file stream (Stream::ParrotIO) that is processed linewise with
6 Stream::Lines. A counter stream creates line numbers, both are combined to
7 one stream and then dumped.
9 =head1 NOTE
11 When updating this file, be sure to verify L<t/examples/streams.t>, as its
12 tests rely on the content of this file.
14 =head1 FUNCTIONS
16 =over 4
18 =item _main
20 Opens this file (or the one specified at the command line) and creates a lines
21 stream for it. Then it combines the stream with a stream providing line numbers.
23 =cut
25 .sub _main
26     .param pmc argv
27     .local int argc
28     .local pmc file
29     .local pmc lines
30     .local pmc counter
31     .local pmc combiner
32     .local string name
34     # get the name of the file to open
35     name = "examples/streams/FileLines.pir"
36     argc = argv
37     if argc < 2 goto NO_NAME
38     name = argv[1]
39 NO_NAME:
41     load_bytecode 'Stream/ParrotIO.pbc'
42     load_bytecode 'Stream/Lines.pbc'
43     load_bytecode 'Stream/Sub.pbc'
44     load_bytecode 'Stream/Combiner.pbc'
46     # create a file stream
47     file = new ['Stream'; 'ParrotIO']
48     file."open"( name, 'r' )
50     # process it one line per read
51     lines = new ['Stream'; 'Lines']
52     assign lines, file
54     # endless counter
55     counter = new ['Stream'; 'Sub']
56     .const 'Sub' temp = "_counter"
57     assign counter, temp
59     # combine the counter and the file's lines
60     combiner = new ['Stream'; 'Combiner']
61     assign combiner, counter
62     assign combiner, lines
64     # dump the stream
65     combiner."dump"()
67     end
68 .end
70 =item _counter
72 This sub is the source of the counter stream. It just endlessly writes
73 line numbers followed by a space to its stream.
75 =cut
77 .sub _counter
78     .param pmc stream
79     .local int i
80     .local string str
81     .local pmc array
83     i = 0
84     array = new 'ResizablePMCArray'
86 LOOP:
87     inc i
88     array[0] = i
89     sprintf str, "%5d ", array
90     stream."write"( str )
91     branch LOOP
92 .end
94 =back
96 =head1 AUTHOR
98 Jens Rieks E<lt>parrot at jensbeimsurfen dot deE<gt> is the author
99 and maintainer.
100 Please send patches and suggestions to the Perl 6 Internals mailing list.
102 =head1 COPYRIGHT
104 Copyright (C) 2004-2009, Parrot Foundation.
106 =cut
108 # Local Variables:
109 #   mode: pir
110 #   fill-column: 100
111 # End:
112 # vim: expandtab shiftwidth=4 ft=pir: