source: tests/coroutine/.in/fmtLines.txt @ 065de93

Last change on this file since 065de93 was 427854b, checked in by Thierry Delisle <tdelisle@…>, 5 years ago

First draft implementation of generators, still missing error checking, testing and clean-up

  • Property mode set to 100644
File size: 1.6 KB
RevLine 
[73abe95]1//
[e06be49]2// Cforall Version 1.0.0 Copyright (C) 2017 University of Waterloo
3//
4// The contents of this file are covered under the licence agreement in the
5// file "LICENCE" distributed with Cforall.
[73abe95]6//
7// fmtLines.cc --
8//
[e06be49]9// Author           : Peter A. Buhr
10// Created On       : Sun Sep 17 21:56:15 2017
11// Last Modified By : Peter A. Buhr
[f8cd310]12// Last Modified On : Fri Mar 22 13:41:03 2019
13// Update Count     : 33
[73abe95]14//
[e06be49]15
[73abe95]16#include <fstream.hfa>
17#include <coroutine.hfa>
[e06be49]18
19coroutine Format {
20        char ch;                                                                                        // used for communication
21        int g, b;                                                                                       // global because used in destructor
22};
23
24void ?{}( Format & fmt ) {
25    resume( fmt );                                                                              // start coroutine
26}
27
28void ^?{}( Format & fmt ) {
[200fcb3]29    if ( fmt.g != 0 || fmt.b != 0 ) sout | nl;
[e06be49]30}
31
32void main( Format & fmt ) {
33        for ( ;; ) {                                                                            // for as many characters
34                for ( fmt.g = 0; fmt.g < 5; fmt.g += 1 ) {              // groups of 5 blocks
35                        for ( fmt.b = 0; fmt.b < 4; fmt.b += 1 ) {      // blocks of 4 characters
36                                for ( ;; ) {                                                    // for newline characters
[427854b]37                                        suspend;
[e06be49]38                                        if ( fmt.ch != '\n' ) break;            // ignore newline
39                                } // for
40                                sout | fmt.ch;                                                  // print character
41                        } // for
42                        sout | "  ";                                                            // print block separator
43                } // for
[200fcb3]44                sout | nl;                                                                      // print group separator
[e06be49]45        } // for
46} // main
47
48void prt( Format & fmt, char ch ) {
49    fmt.ch = ch;
50    resume( fmt );
51} // prt
52
53int main() {
54        Format fmt;
55        char ch;
56
57        for ( ;; ) {
58                sin | ch;                                                                               // read one character
59          if ( eof( sin ) ) break;                                                      // eof ?
60                prt( fmt, ch );
61        } // for
62} // main
63
64// Local Variables: //
65// tab-width: 4 //
[f8cd310]66// compile-command: "cfa fmtLines.cfa" //
[e06be49]67// End: //
Note: See TracBrowser for help on using the repository browser.