source: tests/generator/fmtLines.cfa@ 4be0117

Last change on this file since 4be0117 was 3ac5fd8, checked in by Peter A. Buhr <pabuhr@…>, 13 months ago

first attempt changing end-of-file to an exception

  • Property mode set to 100644
File size: 1.6 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.cfa -- format characters into blocks of 4 and groups of 5 blocks per line
8//
9// Author : Thierry Delisle
10// Created On : Thu Mar 5 16:09:08 2020
11// Last Modified By : Peter A. Buhr
12// Last Modified On : Sat Aug 17 14:21:28 2024
13// Update Count : 5
14//
15
16#include <fstream.hfa>
17
18generator Format {
19 char ch; // used for communication
20 int g, b; // global because used in destructor
21};
22
23void main( Format & fmt ) with( fmt ) {
24 for () { // for as many characters
25 for ( g = 0; g < 5; g += 1 ) { // groups of 5 blocks
26 for ( b = 0; b < 4; b += 1 ) { // blocks of 4 characters
27 for () { // for newline characters
28 suspend;
29 if ( ch != '\n' ) break; // ignore newline
30 } // for
31 sout | ch; // print character
32 } // for
33 sout | " "; // print block separator
34 } // for
35 sout | nl; // print group separator
36 } // for
37} // main
38
39void ?{}( Format & fmt ) {
40 resume( fmt ); // prime (start) coroutine
41}
42
43void ^?{}( Format & fmt ) with( fmt ) {
44 if ( g != 0 || b != 0 ) sout | nl;
45}
46
47void format( Format & fmt ) {
48 resume( fmt );
49} // format
50
51int main() {
52 Format fmt;
53 sout | nlOff; // turn off auto newline
54
55 try {
56 for () { // read until end of file
57 sin | fmt.ch; // read one character
58 format( fmt ); // push character for formatting
59 } // for
60 } catch( end_of_file * ) {
61 } // try
62} // main
Note: See TracBrowser for help on using the repository browser.