mirror of
https://github.com/vishapoberon/compiler.git
synced 2026-04-05 22:12:24 +00:00
parent
8edb411458
commit
893131c4ec
6 changed files with 208 additions and 4 deletions
2
makefile
2
makefile
|
|
@ -137,7 +137,7 @@ stage6:
|
|||
$(VOCSTATIC) -sP ulmASCII.Mod ulmSets.Mod
|
||||
$(VOCSTATIC) -sP ulmObjects.Mod ulmDisciplines.Mod
|
||||
$(VOCSTATIC) -sP ulmPriorities.Mod ulmServices.Mod ulmEvents.Mod ulmResources.Mod ulmForwarders.Mod ulmRelatedEvents.Mod
|
||||
$(VOCSTATIC) -sP ulmIO.Mod
|
||||
$(VOCSTATIC) -sP ulmIO.Mod ulmProcess.Mod
|
||||
|
||||
stage7:
|
||||
#objects := $(wildcard *.o)
|
||||
|
|
|
|||
|
|
@ -137,6 +137,7 @@ stage6:
|
|||
$(VOCSTATIC) -sP ulmASCII.Mod ulmSets.Mod
|
||||
$(VOCSTATIC) -sP ulmObjects.Mod ulmDisciplines.Mod
|
||||
$(VOCSTATIC) -sP ulmPriorities.Mod ulmServices.Mod ulmEvents.Mod ulmResources.Mod ulmForwarders.Mod ulmRelatedEvents.Mod
|
||||
$(VOCSTATIC) -sP ulmIO.Mod ulmProcess.Mod
|
||||
|
||||
stage7:
|
||||
#objects := $(wildcard *.o)
|
||||
|
|
|
|||
|
|
@ -137,7 +137,7 @@ stage6:
|
|||
$(VOCSTATIC) -sP ulmASCII.Mod ulmSets.Mod
|
||||
$(VOCSTATIC) -sP ulmObjects.Mod ulmDisciplines.Mod
|
||||
$(VOCSTATIC) -sP ulmPriorities.Mod ulmServices.Mod ulmEvents.Mod ulmResources.Mod ulmForwarders.Mod ulmRelatedEvents.Mod
|
||||
$(VOCSTATIC) -sP ulmIO.Mod
|
||||
$(VOCSTATIC) -sP ulmIO.Mod ulmProcess.Mod
|
||||
|
||||
stage7:
|
||||
#objects := $(wildcard *.o)
|
||||
|
|
|
|||
|
|
@ -137,7 +137,7 @@ stage6:
|
|||
$(VOCSTATIC) -sP ulmASCII.Mod ulmSets.Mod
|
||||
$(VOCSTATIC) -sP ulmObjects.Mod ulmDisciplines.Mod
|
||||
$(VOCSTATIC) -sP ulmPriorities.Mod ulmServices.Mod ulmEvents.Mod ulmResources.Mod ulmForwarders.Mod ulmRelatedEvents.Mod
|
||||
$(VOCSTATIC) -sP ulmIO.Mod
|
||||
$(VOCSTATIC) -sP ulmIO.Mod ulmProcess.Mod
|
||||
|
||||
stage7:
|
||||
#objects := $(wildcard *.o)
|
||||
|
|
|
|||
|
|
@ -137,7 +137,7 @@ stage6:
|
|||
$(VOCSTATIC) -sP ulmASCII.Mod ulmSets.Mod
|
||||
$(VOCSTATIC) -sP ulmObjects.Mod ulmDisciplines.Mod
|
||||
$(VOCSTATIC) -sP ulmPriorities.Mod ulmServices.Mod ulmEvents.Mod ulmResources.Mod ulmForwarders.Mod ulmRelatedEvents.Mod
|
||||
$(VOCSTATIC) -sP ulmIO.Mod
|
||||
$(VOCSTATIC) -sP ulmIO.Mod ulmProcess.Mod
|
||||
|
||||
stage7:
|
||||
#objects := $(wildcard *.o)
|
||||
|
|
|
|||
203
src/lib/ulm/ulmProcess.Mod
Normal file
203
src/lib/ulm/ulmProcess.Mod
Normal file
|
|
@ -0,0 +1,203 @@
|
|||
(* Ulm's Oberon Library
|
||||
Copyright (C) 1989-1994 by University of Ulm, SAI, D-89069 Ulm, Germany
|
||||
----------------------------------------------------------------------------
|
||||
Ulm's Oberon Library is free software; you can redistribute it
|
||||
and/or modify it under the terms of the GNU Library General Public
|
||||
License as published by the Free Software Foundation; either version
|
||||
2 of the License, or (at your option) any later version.
|
||||
|
||||
Ulm's Oberon Library 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
|
||||
Library General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Library General Public
|
||||
License along with this library; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
----------------------------------------------------------------------------
|
||||
E-mail contact: oberon@mathematik.uni-ulm.de
|
||||
----------------------------------------------------------------------------
|
||||
$Id: Process.om,v 1.3 2004/09/10 16:42:31 borchert Exp $
|
||||
----------------------------------------------------------------------------
|
||||
$Log: Process.om,v $
|
||||
Revision 1.3 2004/09/10 16:42:31 borchert
|
||||
id and host added
|
||||
|
||||
Revision 1.2 2004/04/02 17:58:26 borchert
|
||||
softTermination and TerminateSoftly added
|
||||
|
||||
Revision 1.1 1994/02/22 20:09:43 borchert
|
||||
Initial revision
|
||||
|
||||
----------------------------------------------------------------------------
|
||||
AFB 3/92
|
||||
----------------------------------------------------------------------------
|
||||
*)
|
||||
|
||||
MODULE ulmProcess;
|
||||
|
||||
IMPORT Events := ulmEvents, Priorities := ulmPriorities;
|
||||
|
||||
(* user readable name of our process *)
|
||||
TYPE
|
||||
Name* = ARRAY 128 OF CHAR;
|
||||
VAR
|
||||
name*: Name;
|
||||
id*: Name; (* something that identifies our process on our host *)
|
||||
host*: Name; (* something that identifies our host, may be "" *)
|
||||
|
||||
(* exit codes *)
|
||||
TYPE
|
||||
ExitCode* = INTEGER;
|
||||
VAR
|
||||
indicateSuccess*: ExitCode;
|
||||
indicateFailure*: ExitCode;
|
||||
|
||||
(* process events *)
|
||||
TYPE
|
||||
ExitEvent* = POINTER TO ExitEventRec;
|
||||
ExitEventRec* =
|
||||
RECORD
|
||||
(Events.EventRec)
|
||||
exitcode*: ExitCode;
|
||||
END;
|
||||
VAR
|
||||
softTermination*: Events.EventType;
|
||||
termination*: Events.EventType;
|
||||
abort*: Events.EventType;
|
||||
startOfGarbageCollection*, endOfGarbageCollection: Events.EventType;
|
||||
(* these events indicate beginning and end of a garbage collection *)
|
||||
|
||||
TYPE
|
||||
ExitProc* = PROCEDURE (code: ExitCode);
|
||||
AbortProc* = PROCEDURE;
|
||||
PauseProc* = PROCEDURE;
|
||||
Interface* = POINTER TO InterfaceRec;
|
||||
InterfaceRec* =
|
||||
RECORD
|
||||
exit*: ExitProc;
|
||||
abort*: AbortProc;
|
||||
pause*: PauseProc;
|
||||
END;
|
||||
|
||||
(* private declarations *)
|
||||
VAR
|
||||
handlers: Interface;
|
||||
nestlevel: INTEGER;
|
||||
|
||||
PROCEDURE SetHandlers*(if: Interface);
|
||||
BEGIN
|
||||
handlers := if;
|
||||
END SetHandlers;
|
||||
|
||||
PROCEDURE Exit*(code: ExitCode);
|
||||
VAR
|
||||
event: ExitEvent;
|
||||
BEGIN
|
||||
INC(nestlevel);
|
||||
IF nestlevel = 1 THEN
|
||||
NEW(event);
|
||||
event.type := termination;
|
||||
event.message := "exit";
|
||||
event.exitcode := code;
|
||||
Events.Raise(event);
|
||||
END;
|
||||
|
||||
handlers.exit(code);
|
||||
handlers.pause;
|
||||
LOOP END;
|
||||
END Exit;
|
||||
|
||||
PROCEDURE TerminateSoftly*;
|
||||
VAR
|
||||
event: Events.Event;
|
||||
BEGIN
|
||||
NEW(event);
|
||||
event.type := softTermination;
|
||||
event.message := "terminate, please!";
|
||||
Events.Raise(event);
|
||||
END TerminateSoftly;
|
||||
|
||||
PROCEDURE Terminate*;
|
||||
BEGIN
|
||||
Exit(indicateSuccess);
|
||||
END Terminate;
|
||||
|
||||
PROCEDURE Abort*;
|
||||
VAR
|
||||
event: Events.Event;
|
||||
BEGIN
|
||||
INC(nestlevel);
|
||||
IF nestlevel = 1 THEN
|
||||
NEW(event);
|
||||
event.type := abort;
|
||||
event.message := "abort";
|
||||
Events.Raise(event);
|
||||
END;
|
||||
|
||||
handlers.abort;
|
||||
handlers.exit(indicateFailure);
|
||||
handlers.pause;
|
||||
LOOP END;
|
||||
END Abort;
|
||||
|
||||
PROCEDURE Pause*;
|
||||
BEGIN
|
||||
handlers.pause;
|
||||
END Pause;
|
||||
|
||||
(* =============================================================== *)
|
||||
|
||||
PROCEDURE AbortHandler(event: Events.Event);
|
||||
BEGIN
|
||||
Abort;
|
||||
END AbortHandler;
|
||||
|
||||
(* =============================================================== *)
|
||||
|
||||
PROCEDURE DummyExit(code: ExitCode);
|
||||
BEGIN
|
||||
LOOP END;
|
||||
END DummyExit;
|
||||
|
||||
PROCEDURE DummyAbort;
|
||||
BEGIN
|
||||
LOOP END;
|
||||
END DummyAbort;
|
||||
|
||||
PROCEDURE DummyPause;
|
||||
BEGIN
|
||||
LOOP END;
|
||||
END DummyPause;
|
||||
|
||||
BEGIN
|
||||
nestlevel := 0;
|
||||
|
||||
name := "Process.name";
|
||||
indicateSuccess := 0; indicateFailure := 1;
|
||||
NEW(handlers);
|
||||
handlers.exit := DummyExit;
|
||||
handlers.abort := DummyAbort;
|
||||
handlers.pause := DummyPause;
|
||||
|
||||
Events.Define(termination);
|
||||
Events.SetPriority(termination, Priorities.exit);
|
||||
Events.Handler(termination, Events.NilHandler);
|
||||
|
||||
Events.Define(abort);
|
||||
Events.SetPriority(abort, Priorities.exit);
|
||||
Events.Handler(abort, Events.NilHandler);
|
||||
|
||||
Events.Define(softTermination);
|
||||
Events.SetPriority(softTermination, Priorities.message);
|
||||
Events.Handler(softTermination, Events.NilHandler);
|
||||
|
||||
Events.AbortHandler(AbortHandler);
|
||||
|
||||
Events.Define(startOfGarbageCollection);
|
||||
Events.SetPriority(startOfGarbageCollection, Priorities.message);
|
||||
Events.Ignore(startOfGarbageCollection);
|
||||
Events.Define(endOfGarbageCollection);
|
||||
Events.SetPriority(endOfGarbageCollection, Priorities.message);
|
||||
Events.Ignore(endOfGarbageCollection);
|
||||
END ulmProcess.
|
||||
Loading…
Add table
Add a link
Reference in a new issue