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).