mirror of
https://github.com/vishapoberon/compiler.git
synced 2026-10-10 00:27:23 +00:00
connecting ulm standard streams to platform.
This commit is contained in:
parent
552eade09d
commit
fcf59d5d93
3 changed files with 73 additions and 7 deletions
|
|
@ -93,7 +93,8 @@
|
||||||
MODULE ulmStreams;
|
MODULE ulmStreams;
|
||||||
|
|
||||||
IMPORT Events := ulmEvents, Objects := ulmObjects, Priorities := ulmPriorities, Process := ulmProcess, RelatedEvents := ulmRelatedEvents, Resources := ulmResources,
|
IMPORT Events := ulmEvents, Objects := ulmObjects, Priorities := ulmPriorities, Process := ulmProcess, RelatedEvents := ulmRelatedEvents, Resources := ulmResources,
|
||||||
Services := ulmServices, SYS := ulmSYSTEM, SYSTEM, Types := ulmTypes;
|
Services := ulmServices, SYS := ulmSYSTEM, SYSTEM, Host := ulmStreamsHost,
|
||||||
|
Types := ulmTypes;
|
||||||
|
|
||||||
CONST
|
CONST
|
||||||
(* 3rd parameter of Seek *)
|
(* 3rd parameter of Seek *)
|
||||||
|
|
@ -275,11 +276,8 @@ MODULE ulmStreams;
|
||||||
|
|
||||||
VAR
|
VAR
|
||||||
null*: Stream; (* accepts any output; does not return input *)
|
null*: Stream; (* accepts any output; does not return input *)
|
||||||
(* these streams are set by other modules;
|
(* The initial streams are connected to the host standard handles.
|
||||||
after initialization of Streams they equal `null';
|
More specialized modules may replace them. *)
|
||||||
so, connections with the standard UNIX streams must be
|
|
||||||
done by other modules
|
|
||||||
*)
|
|
||||||
stdin*, stdout*, stderr*: Stream;
|
stdin*, stdout*, stderr*: Stream;
|
||||||
errormsg*: ARRAY errorcodes OF Events.Message;
|
errormsg*: ARRAY errorcodes OF Events.Message;
|
||||||
error*: Events.EventType;
|
error*: Events.EventType;
|
||||||
|
|
@ -294,6 +292,7 @@ MODULE ulmStreams;
|
||||||
*)
|
*)
|
||||||
freelist: Buffer; (* list of free buffers *)
|
freelist: Buffer; (* list of free buffers *)
|
||||||
nullif: Interface; (* interface of null-devices *)
|
nullif: Interface; (* interface of null-devices *)
|
||||||
|
stdinif, stdoutif, stderrif: Interface;
|
||||||
|
|
||||||
(* === private procedures ========================================= *)
|
(* === private procedures ========================================= *)
|
||||||
|
|
||||||
|
|
@ -2093,6 +2092,36 @@ MODULE ulmStreams;
|
||||||
Init(s, nullif, {read, write}, nobuf);
|
Init(s, nullif, {read, write}, nobuf);
|
||||||
END OpenNulldev;
|
END OpenNulldev;
|
||||||
|
|
||||||
|
PROCEDURE StdInRead(s: Stream; ptr: Address; cnt: Count): Count;
|
||||||
|
BEGIN
|
||||||
|
RETURN Host.ReadStdIn(ptr, cnt)
|
||||||
|
END StdInRead;
|
||||||
|
|
||||||
|
PROCEDURE StdOutWrite(s: Stream; ptr: Address; cnt: Count): Count;
|
||||||
|
BEGIN
|
||||||
|
RETURN Host.WriteStdOut(ptr, cnt)
|
||||||
|
END StdOutWrite;
|
||||||
|
|
||||||
|
PROCEDURE StdErrWrite(s: Stream; ptr: Address; cnt: Count): Count;
|
||||||
|
BEGIN
|
||||||
|
RETURN Host.WriteStdErr(ptr, cnt)
|
||||||
|
END StdErrWrite;
|
||||||
|
|
||||||
|
PROCEDURE OpenStandardStreams;
|
||||||
|
BEGIN
|
||||||
|
NEW(stdinif); stdinif.addrread := StdInRead;
|
||||||
|
NEW(stdin); Services.Init(stdin, type);
|
||||||
|
Init(stdin, stdinif, {read, addrio}, nobuf);
|
||||||
|
|
||||||
|
NEW(stdoutif); stdoutif.addrwrite := StdOutWrite;
|
||||||
|
NEW(stdout); Services.Init(stdout, type);
|
||||||
|
Init(stdout, stdoutif, {write, addrio}, nobuf);
|
||||||
|
|
||||||
|
NEW(stderrif); stderrif.addrwrite := StdErrWrite;
|
||||||
|
NEW(stderr); Services.Init(stderr, type);
|
||||||
|
Init(stderr, stderrif, {write, addrio}, nobuf)
|
||||||
|
END OpenStandardStreams;
|
||||||
|
|
||||||
PROCEDURE ExitHandler(event: Events.Event);
|
PROCEDURE ExitHandler(event: Events.Event);
|
||||||
(* flush all streams on exit;
|
(* flush all streams on exit;
|
||||||
we do not close them to allow output by other exit event handlers
|
we do not close them to allow output by other exit event handlers
|
||||||
|
|
@ -2143,7 +2172,8 @@ BEGIN
|
||||||
|
|
||||||
opened := NIL;
|
opened := NIL;
|
||||||
InitNullIf(nullif);
|
InitNullIf(nullif);
|
||||||
OpenNulldev(null); stdin := null; stdout := null; stderr := null;
|
OpenNulldev(null);
|
||||||
|
OpenStandardStreams;
|
||||||
|
|
||||||
Events.Handler(Process.termination, ExitHandler);
|
Events.Handler(Process.termination, ExitHandler);
|
||||||
Events.Handler(Process.startOfGarbageCollection, FreeHandler);
|
Events.Handler(Process.startOfGarbageCollection, FreeHandler);
|
||||||
|
|
|
||||||
35
src/library/ulm/ulmStreamsHost.Mod
Normal file
35
src/library/ulm/ulmStreamsHost.Mod
Normal file
|
|
@ -0,0 +1,35 @@
|
||||||
|
(* Host bindings for the standard streams used by ulmStreams. *)
|
||||||
|
MODULE ulmStreamsHost;
|
||||||
|
|
||||||
|
IMPORT SYSTEM, Platform;
|
||||||
|
|
||||||
|
TYPE
|
||||||
|
Address* = SYSTEM.ADDRESS;
|
||||||
|
Count* = SYSTEM.INT32;
|
||||||
|
|
||||||
|
PROCEDURE ReadStdIn* (address: Address; count: Count): Count;
|
||||||
|
VAR actual: LONGINT;
|
||||||
|
BEGIN
|
||||||
|
IF Platform.Read(Platform.StdIn, address, count, actual) # 0 THEN
|
||||||
|
RETURN -1
|
||||||
|
END;
|
||||||
|
RETURN actual
|
||||||
|
END ReadStdIn;
|
||||||
|
|
||||||
|
PROCEDURE WriteStdOut* (address: Address; count: Count): Count;
|
||||||
|
BEGIN
|
||||||
|
IF Platform.Write(Platform.StdOut, address, count) # 0 THEN
|
||||||
|
RETURN -1
|
||||||
|
END;
|
||||||
|
RETURN count
|
||||||
|
END WriteStdOut;
|
||||||
|
|
||||||
|
PROCEDURE WriteStdErr* (address: Address; count: Count): Count;
|
||||||
|
BEGIN
|
||||||
|
IF Platform.Write(Platform.StdErr, address, count) # 0 THEN
|
||||||
|
RETURN -1
|
||||||
|
END;
|
||||||
|
RETURN count
|
||||||
|
END WriteStdErr;
|
||||||
|
|
||||||
|
END ulmStreamsHost.
|
||||||
|
|
@ -314,6 +314,7 @@ ulm:
|
||||||
cd $(BUILDDIR)/$(MODEL); "$(ROOTDIR)/$(OBECOMP)" -Fs -O$(MODEL) ../../../src/library/ulm/ulmResources.Mod
|
cd $(BUILDDIR)/$(MODEL); "$(ROOTDIR)/$(OBECOMP)" -Fs -O$(MODEL) ../../../src/library/ulm/ulmResources.Mod
|
||||||
cd $(BUILDDIR)/$(MODEL); "$(ROOTDIR)/$(OBECOMP)" -Fs -O$(MODEL) ../../../src/library/ulm/ulmForwarders.Mod
|
cd $(BUILDDIR)/$(MODEL); "$(ROOTDIR)/$(OBECOMP)" -Fs -O$(MODEL) ../../../src/library/ulm/ulmForwarders.Mod
|
||||||
cd $(BUILDDIR)/$(MODEL); "$(ROOTDIR)/$(OBECOMP)" -Fs -O$(MODEL) ../../../src/library/ulm/ulmRelatedEvents.Mod
|
cd $(BUILDDIR)/$(MODEL); "$(ROOTDIR)/$(OBECOMP)" -Fs -O$(MODEL) ../../../src/library/ulm/ulmRelatedEvents.Mod
|
||||||
|
cd $(BUILDDIR)/$(MODEL); "$(ROOTDIR)/$(OBECOMP)" -Fs -O$(MODEL) ../../../src/library/ulm/ulmStreamsHost.Mod
|
||||||
cd $(BUILDDIR)/$(MODEL); "$(ROOTDIR)/$(OBECOMP)" -Fs -O$(MODEL) ../../../src/library/ulm/ulmStreams.Mod
|
cd $(BUILDDIR)/$(MODEL); "$(ROOTDIR)/$(OBECOMP)" -Fs -O$(MODEL) ../../../src/library/ulm/ulmStreams.Mod
|
||||||
cd $(BUILDDIR)/$(MODEL); "$(ROOTDIR)/$(OBECOMP)" -Fs -O$(MODEL) ../../../src/library/ulm/ulmStrings.Mod
|
cd $(BUILDDIR)/$(MODEL); "$(ROOTDIR)/$(OBECOMP)" -Fs -O$(MODEL) ../../../src/library/ulm/ulmStrings.Mod
|
||||||
cd $(BUILDDIR)/$(MODEL); "$(ROOTDIR)/$(OBECOMP)" -Fs -O$(MODEL) ../../../src/library/ulm/ulmSysTypes.Mod
|
cd $(BUILDDIR)/$(MODEL); "$(ROOTDIR)/$(OBECOMP)" -Fs -O$(MODEL) ../../../src/library/ulm/ulmSysTypes.Mod
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue