source: src/tests/coroutine/fmtLines.c@ 2248dc7

ADT aaron-thesis arm-eh ast-experimental cleanup-dtors deferred_resn demangler enum forall-pointer-decay jacob/cs343-translation jenkins-sandbox new-ast new-ast-unique-expr new-env no_list persistent-indexer pthread-emulation qualifiedEnum with_gc
Last change on this file since 2248dc7 was a0cfa44, checked in by Peter A. Buhr <pabuhr@…>, 7 years ago

simplify

  • Property mode set to 100644
File size: 1.7 KB
Line 
1//
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.
6//
7// fmtLines.cc -- format characters into blocks of 4 and groups of 5 blocks per line
8//
9// Author : Peter A. Buhr
10// Created On : Sun Sep 17 21:56:15 2017
11// Last Modified By : Peter A. Buhr
12// Last Modified On : Tue May 15 12:25:33 2018
13// Update Count : 42
14//
15
16#include <fstream>
17#include <coroutine>
18
19coroutine Format {
20 char ch; // used for communication
21 int g, b; // global because used in destructor
22};
23
24void main( Format & fmt ) with( fmt ) {
25 for ( ;; ) { // for as many characters
26 for ( g = 0; g < 5; g += 1 ) { // groups of 5 blocks
27 for ( b = 0; b < 4; b += 1 ) { // blocks of 4 characters
28 for ( ;; ) { // for newline characters
29 suspend();
30 if ( ch != '\n' ) break; // ignore newline
31 } // for
32 sout | ch; // print character
33 } // for
34 sout | " "; // print block separator
35 } // for
36 sout | endl; // print group separator
37 } // for
38} // main
39
40void ?{}( Format & fmt ) {
41 resume( fmt ); // prime (start) coroutine
42}
43
44void ^?{}( Format & fmt ) with( fmt ) {
45 if ( g != 0 || b != 0 ) sout | endl;
46}
47
48void format( Format & fmt ) {
49 resume( fmt );
50} // prt
51
52int main() {
53 Format fmt;
54
55 eof: for ( ;; ) { // read until end of file
56 sin | fmt.ch; // read one character
57 if ( eof( sin ) ) break eof; // eof ?
58 format( fmt ); // push character for formatting
59 } // for
60} // main
61
62// Local Variables: //
63// tab-width: 4 //
64// compile-command: "cfa fmtLines.c" //
65// End: //
Note: See TracBrowser for help on using the repository browser.