source: tests/coroutine/fmtLines.cfa@ 5db17077

Last change on this file since 5db17077 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
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//
[a0cfa44]7// fmtLines.cc -- format characters into blocks of 4 and groups of 5 blocks per line
[73abe95]8//
[e06be49]9// Author : Peter A. Buhr
10// Created On : Sun Sep 17 21:56:15 2017
11// Last Modified By : Peter A. Buhr
[3ac5fd8]12// Last Modified On : Sat Aug 17 14:26:03 2024
13// Update Count : 60
[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
[971d9f2]24void main( Format & fmt ) with( fmt ) {
[adb6b30f]25 for () { // for as many characters
[5ea5b28]26 for ( g = 0; g < 5; g += 1 ) { // groups of 5 blocks
27 for ( b = 0; b < 4; b += 1 ) { // blocks of 4 characters
[adb6b30f]28 for () { // for newline characters
[427854b]29 suspend;
[5ea5b28]30 if ( ch != '\n' ) break; // ignore newline
[e06be49]31 } // for
[971d9f2]32 sout | ch; // print character
[e06be49]33 } // for
34 sout | " "; // print block separator
35 } // for
[200fcb3]36 sout | nl; // print group separator
[e06be49]37 } // for
38} // main
39
[a0cfa44]40void ?{}( Format & fmt ) {
41 resume( fmt ); // prime (start) coroutine
42}
43
44void ^?{}( Format & fmt ) with( fmt ) {
[200fcb3]45 if ( g != 0 || b != 0 ) sout | nl;
[a0cfa44]46}
47
48void format( Format & fmt ) {
[6545adff]49 resume( fmt );
[5dd3098]50} // format
[e06be49]51
52int main() {
[a0cfa44]53 Format fmt;
[200fcb3]54 sout | nlOff; // turn off auto newline
[e06be49]55
[3ac5fd8]56 try {
57 for () { // read until end of file
58 sin | fmt.ch; // read one character
59 format( fmt ); // push character for formatting
60 } // for
61 } catch( end_of_file * ) {
62 } // try
[e06be49]63} // main
Note: See TracBrowser for help on using the repository browser.