public inbox for gcc-cvs@sourceware.org
help / color / mirror / Atom feed
* [gcc(refs/users/gaius/heads/devel/modula-2)] Added gm2-compiler/Output.def and gm2-compiler/Output.mod.
@ 2021-07-25 16:22 Gaius Mulley
0 siblings, 0 replies; only message in thread
From: Gaius Mulley @ 2021-07-25 16:22 UTC (permalink / raw)
To: gcc-cvs
https://gcc.gnu.org/g:b81ede39530c009498789190cc86a1179a45ce82
commit b81ede39530c009498789190cc86a1179a45ce82
Author: Gaius Mulley <gaius.mulley@southwales.ac.uk>
Date: Sun Jul 25 17:18:32 2021 +0100
Added gm2-compiler/Output.def and gm2-compiler/Output.mod.
2021-07-25 Gaius Mulley <gaius.mulley@southwales.ac.uk>
gcc/m2/
* gm2-compiler/Output.def: (New file).
* gm2-compiler/Output.mod: (New file).
Signed-off-by: Gaius Mulley <gaius.mulley@southwales.ac.uk>
Diff:
---
gcc/m2/gm2-compiler/Output.def | 116 ++++++++++++++++++++++++
gcc/m2/gm2-compiler/Output.mod | 200 +++++++++++++++++++++++++++++++++++++++++
2 files changed, 316 insertions(+)
diff --git a/gcc/m2/gm2-compiler/Output.def b/gcc/m2/gm2-compiler/Output.def
new file mode 100644
index 00000000000..f4e17034d7f
--- /dev/null
+++ b/gcc/m2/gm2-compiler/Output.def
@@ -0,0 +1,116 @@
+(* Output.def redirect output.
+
+Copyright (C) 2021 Free Software Foundation, Inc.
+Contributed by Gaius Mulley <gaius.mulley@southwales.ac.uk>.
+
+This file is part of GNU Modula-2.
+
+GNU Modula-2 is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 3, or (at your option)
+any later version.
+
+GNU Modula-2 is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GNU Modula-2; see the file COPYING3. If not see
+<http://www.gnu.org/licenses/>. *)
+
+DEFINITION MODULE Output ;
+
+(*
+ Title : Output
+ Author : Gaius Mulley
+ System : GNU Modula-2
+ Date : Fri Jul 9 12:17:35 2021
+ Revision : $Version$
+ Description: provides an interface to output redirection for common
+ output procedures.
+*)
+
+FROM NameKey IMPORT Name ;
+FROM DynamicStrings IMPORT String ;
+
+
+(*
+ Open - attempt to open filename as the output file.
+ TRUE is returned if success, FALSE otherwise.
+*)
+
+PROCEDURE Open (filename: ARRAY OF CHAR) : BOOLEAN ;
+
+
+(*
+ Close - close the output file.
+*)
+
+PROCEDURE Close ;
+
+
+(*
+ Write - write a single character to the output file.
+*)
+
+PROCEDURE Write (ch: CHAR) ;
+
+
+(*
+ WriteString - write an unformatted string to the output.
+*)
+
+PROCEDURE WriteString (s: ARRAY OF CHAR) ;
+
+
+(*
+ KillWriteS - write a string to the output and free the string afterwards.
+*)
+
+PROCEDURE KillWriteS (s: String) ;
+
+
+(*
+ WriteS - write a string to the output. The string is not freed.
+*)
+
+PROCEDURE WriteS (s: String) ;
+
+
+(*
+ WriteKey - write a key to the output.
+*)
+
+PROCEDURE WriteKey (key: Name) ;
+
+
+(*
+ WriteLn - write a newline to the output.
+*)
+
+PROCEDURE WriteLn ;
+
+
+(*
+ WriteCard - write a cardinal using fieldlength characters.
+*)
+
+PROCEDURE WriteCard (card, fieldlength: CARDINAL) ;
+
+
+(*
+ StartBuffer - create a buffer into which any output is redirected.
+*)
+
+PROCEDURE StartBuffer ;
+
+
+(*
+ EndBuffer - end the redirection and return the contents of the buffer.
+*)
+
+PROCEDURE EndBuffer () : String ;
+
+
+END Output.
diff --git a/gcc/m2/gm2-compiler/Output.mod b/gcc/m2/gm2-compiler/Output.mod
new file mode 100644
index 00000000000..ef6880de26b
--- /dev/null
+++ b/gcc/m2/gm2-compiler/Output.mod
@@ -0,0 +1,200 @@
+(* Output.mod redirect output.
+
+Copyright (C) 2021 Free Software Foundation, Inc.
+Contributed by Gaius Mulley <gaius.mulley@southwales.ac.uk>.
+
+This file is part of GNU Modula-2.
+
+GNU Modula-2 is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 3, or (at your option)
+any later version.
+
+GNU Modula-2 is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GNU Modula-2; see the file COPYING3. If not see
+<http://www.gnu.org/licenses/>. *)
+
+IMPLEMENTATION MODULE Output ;
+
+
+IMPORT FIO, SFIO ;
+FROM StrLib IMPORT StrEqual ;
+FROM NameKey IMPORT KeyToCharStar, Name ;
+FROM NumberIO IMPORT CardToStr ;
+FROM ASCII IMPORT nl ;
+
+FROM DynamicStrings IMPORT KillString, InitStringCharStar, ConCatChar,
+ ConCat, InitString, Mark ;
+
+
+VAR
+ stdout: BOOLEAN ;
+ outputFile: FIO.File ;
+ buffer : String ;
+
+
+(*
+ Open - attempt to open filename as the output file.
+ TRUE is returned if success, FALSE otherwise.
+*)
+
+PROCEDURE Open (filename: ARRAY OF CHAR) : BOOLEAN ;
+BEGIN
+ IF StrEqual (filename, "<stdout>") OR StrEqual (filename, "-")
+ THEN
+ outputFile := FIO.StdOut ;
+ stdout := TRUE ;
+ RETURN TRUE
+ ELSE
+ outputFile := FIO.OpenToWrite (filename) ;
+ stdout := FALSE ;
+ RETURN FIO.IsNoError (outputFile)
+ END
+END Open ;
+
+
+(*
+ Close - close the output file.
+*)
+
+PROCEDURE Close ;
+BEGIN
+ FIO.Close (outputFile)
+END Close ;
+
+
+(*
+ Write - write a single character to the output file.
+*)
+
+PROCEDURE Write (ch: CHAR) ;
+BEGIN
+ IF buffer = NIL
+ THEN
+ FIO.WriteChar (outputFile, ch)
+ ELSE
+ buffer := ConCatChar (buffer, ch)
+ END
+END Write ;
+
+
+(*
+ WriteString - write an unformatted string to the output.
+*)
+
+PROCEDURE WriteString (s: ARRAY OF CHAR) ;
+BEGIN
+ IF buffer = NIL
+ THEN
+ FIO.WriteString (outputFile, s)
+ ELSE
+ buffer := ConCat (buffer, Mark (InitString (s)))
+ END
+END WriteString ;
+
+
+(*
+ KillWriteS - write a string to the output and free the string afterwards.
+*)
+
+PROCEDURE KillWriteS (s: String) ;
+BEGIN
+ IF KillString (SFIO.WriteS (outputFile, s)) = NIL
+ THEN
+ END
+END KillWriteS ;
+
+
+(*
+ WriteS - write a string to the output. The string is not freed.
+*)
+
+PROCEDURE WriteS (s: String) ;
+BEGIN
+ IF SFIO.WriteS (outputFile, s) = s
+ THEN
+ END
+END WriteS ;
+
+
+(*
+ WriteKey - write a key to the output.
+*)
+
+PROCEDURE WriteKey (key: Name) ;
+BEGIN
+ IF buffer = NIL
+ THEN
+ KillWriteS (InitStringCharStar (KeyToCharStar (key)))
+ ELSE
+ ConCat (buffer, Mark (InitStringCharStar (KeyToCharStar (key))))
+ END
+END WriteKey ;
+
+
+(*
+ WriteLn - write a newline to the output.
+*)
+
+PROCEDURE WriteLn ;
+BEGIN
+ IF buffer = NIL
+ THEN
+ FIO.WriteLine (outputFile)
+ ELSE
+ Write (nl)
+ END
+END WriteLn ;
+
+
+(*
+ WriteCard - write a cardinal using fieldlength characters.
+*)
+
+PROCEDURE WriteCard (card, fieldlength: CARDINAL) ;
+VAR
+ s: ARRAY [0..20] OF CHAR ;
+BEGIN
+ CardToStr (card, fieldlength, s) ;
+ WriteString (s)
+END WriteCard ;
+
+
+(*
+ StartBuffer - create a buffer into which any output is redirected.
+*)
+
+PROCEDURE StartBuffer ;
+BEGIN
+ IF buffer # NIL
+ THEN
+ buffer := KillString (buffer)
+ END ;
+ buffer := InitString (buffer)
+END StartBuffer ;
+
+
+(*
+ EndBuffer - end the redirection and return the contents of the buffer.
+*)
+
+PROCEDURE EndBuffer () : String ;
+VAR
+ s: String ;
+BEGIN
+ s := buffer ;
+ buffer := NIL ;
+ RETURN s
+END EndBuffer ;
+
+
+BEGIN
+ stdout := TRUE ;
+ buffer := NIL ;
+ outputFile := FIO.StdOut ;
+END Output.
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2021-07-25 16:22 UTC | newest]
Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-07-25 16:22 [gcc(refs/users/gaius/heads/devel/modula-2)] Added gm2-compiler/Output.def and gm2-compiler/Output.mod Gaius Mulley
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).