From 760d82694852e3d20a22e63979c42ce8c80ba298 Mon Sep 17 00:00:00 2001 From: Norayr Chilingarian Date: Fri, 27 Sep 2013 22:34:17 +0400 Subject: [PATCH] voc compiler first commit --- 05vishap.conf | 62 + COMPILE | 28 + changes | 34 + hints | 26 + makefile | 187 +++ makefile.gnuc.armv6j | 187 +++ makefile.gnuc.armv6j_hardfp | 187 +++ makefile.gnuc.armv7a_hardfp | 187 +++ makefile.gnuc.x86 | 187 +++ ocat | Bin 0 -> 208976 bytes quick_start | 45 + showdef | Bin 0 -> 432696 bytes src/lib/ooc/lowlevel/oocSysClock.Mod | 130 ++ src/lib/ooc/oocAscii.Mod | 20 + src/lib/ooc/oocCharClass.Mod | 95 ++ src/lib/ooc/oocConvTypes.Mod | 33 + src/lib/ooc/oocIntConv.Mod | 240 +++ src/lib/ooc/oocIntStr.Mod | 100 ++ src/lib/ooc/oocOakStrings.Mod | 181 +++ src/lib/ooc/oocStrings.Mod | 497 ++++++ src/lib/ooc/oocStrings2.Mod | 100 ++ src/lib/ooc/oocTime.Mod | 205 +++ src/lib/ooc2/gnuc/oocwrapperlibc.Mod | 34 + src/lib/ooc2/ooc2Ascii.Mod | 37 + src/lib/ooc2/ooc2CharClass.Mod | 89 + src/lib/ooc2/ooc2ConvTypes.Mod | 45 + src/lib/ooc2/ooc2IntConv.Mod | 249 +++ src/lib/ooc2/ooc2IntStr.Mod | 103 ++ src/lib/ooc2/ooc2LRealConv.Mod | 106 ++ src/lib/ooc2/ooc2Real0.Mod | 447 +++++ src/lib/ooc2/ooc2Strings.Mod | 524 ++++++ src/lib/system/gnuc/Console.Mod | 86 + src/lib/system/gnuc/SYSTEM.Mod | 520 ++++++ src/lib/system/gnuc/armv6j/Args.Mod | 52 + src/lib/system/gnuc/armv6j/SYSTEM.c0 | 205 +++ src/lib/system/gnuc/armv6j/SYSTEM.h | 215 +++ src/lib/system/gnuc/armv6j/Unix.Mod | 411 +++++ src/lib/system/gnuc/armv6j_hardfp/Args.Mod | 52 + src/lib/system/gnuc/armv6j_hardfp/SYSTEM.c0 | 205 +++ src/lib/system/gnuc/armv6j_hardfp/SYSTEM.h | 215 +++ src/lib/system/gnuc/armv6j_hardfp/Unix.Mod | 411 +++++ src/lib/system/gnuc/armv7a_hardfp/Args.Mod | 52 + src/lib/system/gnuc/armv7a_hardfp/SYSTEM.c0 | 205 +++ src/lib/system/gnuc/armv7a_hardfp/SYSTEM.h | 215 +++ src/lib/system/gnuc/armv7a_hardfp/Unix.Mod | 411 +++++ src/lib/system/gnuc/x86/Args.Mod | 52 + src/lib/system/gnuc/x86/SYSTEM.c0 | 205 +++ src/lib/system/gnuc/x86/SYSTEM.h | 215 +++ src/lib/system/gnuc/x86/Unix.Mod | 411 +++++ src/lib/system/gnuc/x86_64/Args.Mod | 53 + src/lib/system/gnuc/x86_64/SYSTEM.c0 | 205 +++ src/lib/system/gnuc/x86_64/SYSTEM.h | 233 +++ src/lib/system/gnuc/x86_64/Unix.Mod | 488 ++++++ src/lib/ulm/gnuc/ulmEvents.Mod | 565 +++++++ src/lib/ulm/ulmASCII.Mod | 60 + src/lib/ulm/ulmDisciplines.Mod | 140 ++ src/lib/ulm/ulmForwarders.Mod | 244 +++ src/lib/ulm/ulmIEEE.Mod | 138 ++ src/lib/ulm/ulmObjects.Mod | 39 + src/lib/ulm/ulmPriorities.Mod | 155 ++ src/lib/ulm/ulmRelatedEvents.Mod | 422 +++++ src/lib/ulm/ulmResources.Mod | 354 ++++ src/lib/ulm/ulmSYSTEM.Mod | 54 + src/lib/ulm/ulmServices.Mod | 520 ++++++ src/lib/ulm/ulmSets.Mod | 208 +++ src/lib/v4/CmdlnTexts.Mod | 859 ++++++++++ src/lib/v4/Files.Mod | 627 +++++++ src/lib/v4/Kernel.Mod | 175 ++ src/lib/v4/Modules.Mod | 96 ++ src/lib/v4/Reals.Mod | Bin 0 -> 2543 bytes src/par/voc.par.gnuc.armv6j | 12 + src/par/voc.par.gnuc.armv6j_hardfp | 12 + src/par/voc.par.gnuc.armv7a_hardfp | 12 + src/par/voc.par.gnuc.x86 | 12 + src/par/voc.par.gnuc.x86_64 | 12 + src/test/testFiles.Mod | 34 + src/tools/browser/BrowserCmd.Mod | 303 ++++ src/tools/coco/CR.ATG | 376 +++++ src/tools/coco/CRA.Mod | 930 +++++++++++ src/tools/coco/CRP.Mod | 703 ++++++++ src/tools/coco/CRS.Mod | 230 +++ src/tools/coco/CRT.Mod | 994 +++++++++++ src/tools/coco/CRX.Mod | 474 ++++++ src/tools/coco/Coco.Mod | 180 ++ src/tools/coco/Coco.Report.ps.1 | 5 + src/tools/coco/Coco.Tool | 83 + src/tools/coco/Oberon.Mod | 8 + src/tools/coco/Parser.FRM | 65 + src/tools/coco/Scanner.FRM | 103 ++ src/tools/coco/Sets.Mod | 138 ++ src/tools/coco/v4_compat/Oberon.Mod | 471 ++++++ src/tools/coco/v4_compat/Oberon.Mod_orig | 471 ++++++ src/tools/coco/v4_compat/TextFrames.Mod | 1363 ++++++++++++++++ src/tools/coco/v4_compat/TextFrames.Mod_orig | 1362 ++++++++++++++++ src/tools/ocat/OCatCmd.Mod | 50 + src/tools/vocparam/vocparam.c | 69 + src/voc/OPB.Mod | 1538 ++++++++++++++++++ src/voc/OPC.Mod | 1378 ++++++++++++++++ src/voc/OPM.cmdln.Mod | 748 +++++++++ src/voc/OPP.Mod | 1066 ++++++++++++ src/voc/OPS.Mod | 315 ++++ src/voc/OPT.Mod | 1243 ++++++++++++++ src/voc/OPV.Mod | 1023 ++++++++++++ src/voc/errors.Mod | 213 +++ src/voc/gnuc/armv6j/architecture.Mod | 4 + src/voc/gnuc/armv6j_hardfp/architecture.Mod | 4 + src/voc/gnuc/armv7a_hardfp/architecture.Mod | 4 + src/voc/gnuc/extTools.Mod | 79 + src/voc/gnuc/x86/architecture.Mod | 4 + src/voc/gnuc/x86_64/architecture.Mod | 4 + src/voc/version.Mod | 38 + src/voc/voc.Mod | 111 ++ voc | Bin 0 -> 1324788 bytes voc.par | 12 + vocparam | Bin 0 -> 11001 bytes vocstatic | Bin 0 -> 1324788 bytes vocstatic.linux.gnuc.armv6j_hardfp | Bin 0 -> 1077621 bytes vocstatic.linux.gnuc.x86 | Bin 0 -> 864645 bytes vocstatic.linux.gnuc.x86_64 | Bin 0 -> 1324788 bytes 119 files changed, 30394 insertions(+) create mode 100644 05vishap.conf create mode 100644 COMPILE create mode 100644 changes create mode 100644 hints create mode 100644 makefile create mode 100644 makefile.gnuc.armv6j create mode 100644 makefile.gnuc.armv6j_hardfp create mode 100644 makefile.gnuc.armv7a_hardfp create mode 100644 makefile.gnuc.x86 create mode 100755 ocat create mode 100644 quick_start create mode 100755 showdef create mode 100644 src/lib/ooc/lowlevel/oocSysClock.Mod create mode 100644 src/lib/ooc/oocAscii.Mod create mode 100644 src/lib/ooc/oocCharClass.Mod create mode 100644 src/lib/ooc/oocConvTypes.Mod create mode 100644 src/lib/ooc/oocIntConv.Mod create mode 100644 src/lib/ooc/oocIntStr.Mod create mode 100644 src/lib/ooc/oocOakStrings.Mod create mode 100644 src/lib/ooc/oocStrings.Mod create mode 100644 src/lib/ooc/oocStrings2.Mod create mode 100644 src/lib/ooc/oocTime.Mod create mode 100644 src/lib/ooc2/gnuc/oocwrapperlibc.Mod create mode 100644 src/lib/ooc2/ooc2Ascii.Mod create mode 100644 src/lib/ooc2/ooc2CharClass.Mod create mode 100644 src/lib/ooc2/ooc2ConvTypes.Mod create mode 100644 src/lib/ooc2/ooc2IntConv.Mod create mode 100644 src/lib/ooc2/ooc2IntStr.Mod create mode 100644 src/lib/ooc2/ooc2LRealConv.Mod create mode 100644 src/lib/ooc2/ooc2Real0.Mod create mode 100644 src/lib/ooc2/ooc2Strings.Mod create mode 100644 src/lib/system/gnuc/Console.Mod create mode 100644 src/lib/system/gnuc/SYSTEM.Mod create mode 100644 src/lib/system/gnuc/armv6j/Args.Mod create mode 100644 src/lib/system/gnuc/armv6j/SYSTEM.c0 create mode 100644 src/lib/system/gnuc/armv6j/SYSTEM.h create mode 100644 src/lib/system/gnuc/armv6j/Unix.Mod create mode 100644 src/lib/system/gnuc/armv6j_hardfp/Args.Mod create mode 100644 src/lib/system/gnuc/armv6j_hardfp/SYSTEM.c0 create mode 100644 src/lib/system/gnuc/armv6j_hardfp/SYSTEM.h create mode 100644 src/lib/system/gnuc/armv6j_hardfp/Unix.Mod create mode 100644 src/lib/system/gnuc/armv7a_hardfp/Args.Mod create mode 100644 src/lib/system/gnuc/armv7a_hardfp/SYSTEM.c0 create mode 100644 src/lib/system/gnuc/armv7a_hardfp/SYSTEM.h create mode 100644 src/lib/system/gnuc/armv7a_hardfp/Unix.Mod create mode 100644 src/lib/system/gnuc/x86/Args.Mod create mode 100644 src/lib/system/gnuc/x86/SYSTEM.c0 create mode 100644 src/lib/system/gnuc/x86/SYSTEM.h create mode 100644 src/lib/system/gnuc/x86/Unix.Mod create mode 100644 src/lib/system/gnuc/x86_64/Args.Mod create mode 100644 src/lib/system/gnuc/x86_64/SYSTEM.c0 create mode 100644 src/lib/system/gnuc/x86_64/SYSTEM.h create mode 100644 src/lib/system/gnuc/x86_64/Unix.Mod create mode 100644 src/lib/ulm/gnuc/ulmEvents.Mod create mode 100644 src/lib/ulm/ulmASCII.Mod create mode 100644 src/lib/ulm/ulmDisciplines.Mod create mode 100644 src/lib/ulm/ulmForwarders.Mod create mode 100644 src/lib/ulm/ulmIEEE.Mod create mode 100644 src/lib/ulm/ulmObjects.Mod create mode 100644 src/lib/ulm/ulmPriorities.Mod create mode 100644 src/lib/ulm/ulmRelatedEvents.Mod create mode 100644 src/lib/ulm/ulmResources.Mod create mode 100644 src/lib/ulm/ulmSYSTEM.Mod create mode 100644 src/lib/ulm/ulmServices.Mod create mode 100644 src/lib/ulm/ulmSets.Mod create mode 100644 src/lib/v4/CmdlnTexts.Mod create mode 100644 src/lib/v4/Files.Mod create mode 100644 src/lib/v4/Kernel.Mod create mode 100644 src/lib/v4/Modules.Mod create mode 100644 src/lib/v4/Reals.Mod create mode 100644 src/par/voc.par.gnuc.armv6j create mode 100644 src/par/voc.par.gnuc.armv6j_hardfp create mode 100644 src/par/voc.par.gnuc.armv7a_hardfp create mode 100644 src/par/voc.par.gnuc.x86 create mode 100644 src/par/voc.par.gnuc.x86_64 create mode 100644 src/test/testFiles.Mod create mode 100644 src/tools/browser/BrowserCmd.Mod create mode 100644 src/tools/coco/CR.ATG create mode 100644 src/tools/coco/CRA.Mod create mode 100644 src/tools/coco/CRP.Mod create mode 100644 src/tools/coco/CRS.Mod create mode 100644 src/tools/coco/CRT.Mod create mode 100644 src/tools/coco/CRX.Mod create mode 100644 src/tools/coco/Coco.Mod create mode 100644 src/tools/coco/Coco.Report.ps.1 create mode 100644 src/tools/coco/Coco.Tool create mode 100644 src/tools/coco/Oberon.Mod create mode 100644 src/tools/coco/Parser.FRM create mode 100644 src/tools/coco/Scanner.FRM create mode 100644 src/tools/coco/Sets.Mod create mode 100755 src/tools/coco/v4_compat/Oberon.Mod create mode 100644 src/tools/coco/v4_compat/Oberon.Mod_orig create mode 100755 src/tools/coco/v4_compat/TextFrames.Mod create mode 100644 src/tools/coco/v4_compat/TextFrames.Mod_orig create mode 100644 src/tools/ocat/OCatCmd.Mod create mode 100644 src/tools/vocparam/vocparam.c create mode 100644 src/voc/OPB.Mod create mode 100644 src/voc/OPC.Mod create mode 100644 src/voc/OPM.cmdln.Mod create mode 100644 src/voc/OPP.Mod create mode 100644 src/voc/OPS.Mod create mode 100644 src/voc/OPT.Mod create mode 100644 src/voc/OPV.Mod create mode 100644 src/voc/errors.Mod create mode 100644 src/voc/gnuc/armv6j/architecture.Mod create mode 100644 src/voc/gnuc/armv6j_hardfp/architecture.Mod create mode 100644 src/voc/gnuc/armv7a_hardfp/architecture.Mod create mode 100644 src/voc/gnuc/extTools.Mod create mode 100644 src/voc/gnuc/x86/architecture.Mod create mode 100644 src/voc/gnuc/x86_64/architecture.Mod create mode 100644 src/voc/version.Mod create mode 100644 src/voc/voc.Mod create mode 100755 voc create mode 100644 voc.par create mode 100755 vocparam create mode 100755 vocstatic create mode 100755 vocstatic.linux.gnuc.armv6j_hardfp create mode 100755 vocstatic.linux.gnuc.x86 create mode 100755 vocstatic.linux.gnuc.x86_64 diff --git a/05vishap.conf b/05vishap.conf new file mode 100644 index 00000000..a943f1e6 --- /dev/null +++ b/05vishap.conf @@ -0,0 +1,62 @@ +/opt/voc-1.0/lib +/opt/voc-1.0/lib +/opt/voc-1.0/lib +/opt/voc-1.0/lib +/opt/voc-1.0/lib +/opt/voc-1.0/lib +/opt/voc-1.0/lib +/opt/voc-1.0/lib +/opt/voc-1.0/lib +/opt/voc-1.0/lib +/opt/voc-1.0/lib +/opt/voc-1.0/lib +/opt/voc-1.0/lib +/opt/voc-1.0/lib +/opt/voc-1.0/lib +/opt/voc-1.0/lib +/opt/voc-1.0/lib +/opt/voc-1.0/lib +/opt/voc-1.0/lib +/opt/voc-1.0/lib +/opt/voc-1.0/lib +/opt/voc-1.0/lib +/opt/voc-1.0/lib +/opt/voc-1.0/lib +/opt/voc-1.0/lib +/opt/voc-1.0/lib +/opt/voc-1.0/lib +/opt/voc-1.0/lib +/opt/voc-1.0/lib +/opt/voc-1.0/lib +/opt/voc-1.0/lib +/opt/voc-1.0/lib +/opt/voc-1.0/lib +/opt/voc-1.0/lib +/opt/voc-1.0/lib +/opt/voc-1.0/lib +/opt/voc-1.0/lib +/opt/voc-1.0/lib +/opt/voc-1.0/lib +/opt/voc-1.0/lib +/opt/voc-1.0/lib +/opt/voc-1.0/lib +/opt/voc-1.0/lib +/opt/voc-1.0/lib +/opt/voc-1.0/lib +/opt/voc-1.0/lib +/opt/voc-1.0/lib +/opt/voc-1.0/lib +/opt/voc-1.0/lib +/opt/voc-1.0/lib +/opt/voc-1.0/lib +/opt/voc-1.0/lib +/opt/voc-1.0/lib +/opt/voc-1.0/lib +/opt/voc-1.0/lib +/opt/voc-1.0/lib +/opt/voc-1.0/lib +/opt/voc-1.0/lib +/opt/voc-1.0/lib +/opt/voc-1.0/lib +/opt/voc-1.0/lib +/opt/voc-1.0/lib diff --git a/COMPILE b/COMPILE new file mode 100644 index 00000000..1e499a6b --- /dev/null +++ b/COMPILE @@ -0,0 +1,28 @@ +currently three bootstrap static binaries provided, for x86_64, x86, and armv6j_hardfp (works on raspberry pi) gnu/linux targets. + +0) + copy statically compiled voc compiler for your platform as vocstatic. + for instance, if your platform is armv6j_hardfp (like raspberry pi) + # cp vocstatic.linux.gnuc.armv6j_hardfp vocstatic + and if your platform is x86 (32bit) gnu/linux then + # cp vocstatic.linux.gnuc.x86 vocstatic + and if it's x86_64 then do nothing or + # cp vocstatic.linux.gnuc.x86_64 vocstatic + +1) make with corresponding makefile + if it's rasp pi or other armhf platform then do + # make -f makefile.gnuc.armv6j_hardfp + if it's x86 then + # make -f makefile.gnuc.x86 + and if it's x86_64, then default makefile is for this platform + # make + + (theoretically you can also change TARCH in makefile and type make) + +2) # sudo make install + +this will install voc in /opt/voc- and create /opt/voc symlink to it. + +add /opt/voc/bin to your PATH and enjoy, compile, have fun! + +-- noch diff --git a/changes b/changes new file mode 100644 index 00000000..66d7a43c --- /dev/null +++ b/changes @@ -0,0 +1,34 @@ +* fixed bug in OPC.Genheader function. If new option is added in OPM, but not added in OPC, compiler was crashing. Simple ELSE fixed the problem. + +* par file is not necessary by default (there is a command line argument for that, and defaultTarget is set in OPM.Mod, version.Mod and architecture.Mod) + +* external compiler is called by default. added options to just generate the output, and not call external compiler or assembler. + +* OBERON variable always contains current directory path by default (changes in Kernel.Mod, added oocStrings dependency to it), as well as installed default libraries sym files path. + +* MODULES variable added in order to specify directories where to look for source file. OBERON variable is not used by developer anymore, only MODULES variable. + +* error messages are now more descriptive (errors.Mod added) + +* help is now more descriptive + +* version module which defines the target and version string. + +* recoursive build (not yet implemented) + +* change max and min longint, change maxset - calculated, and not hardcoded + +* real 64bit LONGINT on x86_64 + +* changed makefile + +* ported some ooc and ooc2 libraries + +* ported some Ulm Oberon libraries + +* works with unicode strings + +* voc checks for CFLAGS variable, and adds it to it's command line. this is used during bootstrapping, see makefile. + +* many other changes + diff --git a/hints b/hints new file mode 100644 index 00000000..ec9bdbdc --- /dev/null +++ b/hints @@ -0,0 +1,26 @@ +==how to port to a new platform== +0) generate voc.par file for the target platform(if it's not exist in src/par). + you can do it by compiling vocparam, and running it as "./vocparam > voc.par" +1) generate voc, ocat, showdef source for target platform by running + make port0 +2) transfer source to a target platform and write + make port1 + (or use a crosscompiler) + now you have voc, showdef, and ocat binaries for your target platform +3) cp voc vocstatic + make -f makefile for your target. +that's how I've done x86 port. +voc was originally run on x86_64. + +notes** in practice everything is not always simple, because you may need to edit Unix.Mod, Args.Mod and SYSTEM.h, and put them to src/lib/system/gnuc/, and create new makefile for your target. + + +==how to add a new option== + +define it in OPM as a constant before defopt is defined. +define a BOOLEAN variable in OPM which will describe if setting is set. +add handling of a new option in OPM.ScanOptions +set your BOOLEAN value in OPM.OpenPari (or in ScanOptions, after the CASE) so you can check it later. +check your boolean when necessary, (see useParFile in OPM.GetOptions) +add it in OPC.GenHeaderMsg function. + diff --git a/makefile b/makefile new file mode 100644 index 00000000..3a6219bc --- /dev/null +++ b/makefile @@ -0,0 +1,187 @@ +#SHELL := /bin/bash +BUILDID=$(shell date +%Y/%m/%d) +TOS = linux +TARCH = x86_64 +#TARCH = x86 x86_64 armv6j armv6j_hardfp armv7a_hardfp +CCOMP = gnuc +RELEASE = 1.0 + + +INCLUDEPATH = -Isrc/lib/system/$(CCOMP)/$(TARCH) + +SETPATH = CFLAGS=$(INCLUDEPATH) PATH=.:/bin:/usr/bin MODULES=.:src/lib:src/lib/v4:src/lib/system:src/lib/system/$(CCOMP):src/lib/system/$(CCOMP)/$(TARCH):src/lib/ulm:src/lib/ulm/gnuc:src/lib/ooc2:src/lib/ooc2/gnuc:src/lib/ooc:src/lib/ooc/lowlevel:src/voc:src/voc/gnuc:src/voc/gnuc/$(TARCH):src/tools/ocat:src/tools/browser:src/tools/vocparam:src/tools/coco:src/test + +VOC = voc +VOCSTATIC = $(SETPATH) ./vocstatic +VOCPARAM = $(shell ./vocparam > voc.par) +VERSION = GNU_Linux_$(TARCH) +LIBNAME = VishapOberon +LIBRARY = lib$(LIBNAME) + +ifndef PREFIX +PREFIX = /opt/voc-$(RELEASE) +endif + +CCOPT = -fPIC $(INCLUDEPATH) -g + +CC = cc $(CCOPT) -c +CL = cc $(CCOPT) +LD = cc -shared -o $(LIBRARY).so +# s is necessary to create index inside a archive +ARCHIVE = ar rcs $(LIBRARY).a + +#%.c: %.Mod +#%.o: %.c +# $(CC) $(input) + +all: stage2 stage3 stage4 stage5 stage6 stage7 + +# when porting to new platform: +# * put corresponding .par file into current directory. it can be generated on the target platform by compiling vocparam (stage0) and running (stage1) +# * run make port0 - this will generate C source files for the target architecture +# * move the source tree to the target machine, and compile (or compile here via crosscompiler) (port1) +port0: stage2 stage3 stage4 + +# now compile C source files for voc, showdef and ocat on target machine (or by using crosscompiler) +port1: stage5 +# after you have "voc" compiled for target architecture. replace vocstatic with it and run make on target platform to get everything compiled + +# this builds binary which generates voc.par +stage0: src/tools/vocparam/vocparam.c + $(CL) -I src/lib -o vocparam src/tools/vocparam/vocparam.c + +# this creates voc.par for a host architecture. +# comment this out if you need to build a compiler for a different architecture. +stage1: + #rm voc.par + #$(shell "./vocparam > voc.par") + #./vocparam > voc.par + $(VOCPARAM) + +# this copies necessary voc.par to the current directory. +# skip this if you are building compiler for the host architecture. +stage2: + cp src/par/voc.par.$(CCOMP).$(TARCH) voc.par +# cp src/par/voc.par.gnu.x86_64 voc.par +# cp src/par/voc.par.gnu.x86 voc.par +# cp src/par/voc.par.gnu.armv6 voc.par +# cp src/par/voc.par.gnu.armv7 voc.par + +# this prepares modules necessary to build the compiler itself +stage3: + + $(VOCSTATIC) -siapxPS SYSTEM.Mod + $(VOCSTATIC) -sPS Args.Mod Console.Mod Unix.Mod + $(VOCSTATIC) -sPS oocOakStrings.Mod architecture.Mod version.Mod Kernel.Mod Modules.Mod + $(VOCSTATIC) -sxPS Files.Mod + $(VOCSTATIC) -sPS Reals.Mod CmdlnTexts.Mod errors.Mod + +# build the compiler +stage4: + $(VOCSTATIC) -sPS extTools.Mod + $(VOCSTATIC) -sPS OPM.cmdln.Mod + $(VOCSTATIC) -sxPS OPS.Mod + $(VOCSTATIC) -sPS OPT.Mod OPC.Mod OPV.Mod OPB.Mod OPP.Mod + $(VOCSTATIC) -smPS voc.Mod + $(VOCSTATIC) -smPS BrowserCmd.Mod + $(VOCSTATIC) -smPS OCatCmd.Mod + +#this is to build the compiler from C sources. +#this is a way to create a bootstrap binary. +stage5: + $(CC) SYSTEM.c Args.c Console.c Modules.c Unix.c \ + oocOakStrings.c architecture.c version.c Kernel.c Files.c Reals.c CmdlnTexts.c \ + version.c extTools.c \ + OPM.c OPS.c OPT.c OPC.c OPV.c OPB.c OPP.c errors.c + + $(CL) -static voc.c -o voc \ + SYSTEM.o Args.o Console.o Modules.o Unix.o \ + oocOakStrings.o architecture.o version.o Kernel.o Files.o Reals.o CmdlnTexts.o \ + extTools.o \ + OPM.o OPS.o OPT.o OPC.o OPV.o OPB.o OPP.o errors.o + $(CL) BrowserCmd.c -o showdef \ + SYSTEM.o Args.o Console.o Modules.o Unix.o oocOakStrings.o architecture.o version.o Kernel.o Files.o Reals.o CmdlnTexts.o \ + OPM.o OPS.o OPT.o OPV.o OPC.o errors.o + + $(CL) OCatCmd.c -o ocat \ + SYSTEM.o Args.o Console.o Modules.o Unix.o oocOakStrings.o architecture.o version.o Kernel.o Files.o Reals.o CmdlnTexts.o + + + +# build all library files +stage6: + $(VOCSTATIC) -sP oocAscii.Mod + $(VOCSTATIC) -sP oocStrings.Mod + $(VOCSTATIC) -sP oocStrings2.Mod + $(VOCSTATIC) -sP oocCharClass.Mod + $(VOCSTATIC) -sP oocConvTypes.Mod + $(VOCSTATIC) -sP oocIntConv.Mod + $(VOCSTATIC) -sP oocIntStr.Mod + $(VOCSTATIC) -sP oocSysClock.Mod + $(VOCSTATIC) -sP oocTime.Mod +# $(VOCSTATIC) -s oocLongStrings.Mod +# $(CC) oocLongStrings.c +# $(VOCSTATIC) -s oocMsg.Mod +# $(CC) oocMsg.c + + + $(VOCSTATIC) -sP ooc2Strings.Mod + $(VOCSTATIC) -sP ooc2Ascii.Mod + $(VOCSTATIC) -sP ooc2CharClass.Mod + $(VOCSTATIC) -sP ooc2ConvTypes.Mod + $(VOCSTATIC) -sP ooc2IntConv.Mod + $(VOCSTATIC) -sP ooc2IntStr.Mod + $(VOCSTATIC) -sP ooc2Real0.Mod + $(VOCSTATIC) -sP oocwrapperlibc.Mod + $(VOCSTATIC) -sP ulmSYSTEM.Mod + $(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 + +stage7: + #objects := $(wildcard *.o) + #$(LD) objects + $(ARCHIVE) *.o + #$(ARCHIVE) objects + $(LD) *.o + echo "$(PREFIX)/lib" >> 05vishap.conf + +clean: +# rm_objects := rm $(wildcard *.o) +# objects + rm *.o + rm *.sym + rm *.h + rm *.c + rm *.a + rm *.so + +coco: + $(JET) Sets.Mod Oberon.Mod CRS.Mod CRT.Mod CRA.Mod CRX.Mod CRP.Mod Coco.Mod -m + $(CC) Sets.c Oberon.c CRS.c CRT.c CRA.c CRX.c CRP.c + $(CL) -static -o Coco Coco.c Sets.o Oberon.o CRS.o CRT.o CRA.o CRX.o CRP.o CmdlnTexts.o SYSTEM.o Files.o -L. -lOberon -L/usr/lib -ldl + +install: + test -d $(PREFIX)/bin | mkdir -p $(PREFIX)/bin + cp voc $(PREFIX)/bin/ + cp showdef $(PREFIX)/bin/ + cp ocat $(PREFIX)/bin/ + cp -a src $(PREFIX)/ + + test -d $(PREFIX)/lib/voc | mkdir -p $(PREFIX)/lib/voc + test -d $(PREFIX)/lib/voc/ | mkdir -p $(PREFIX)/lib/voc + test -d $(PREFIX)/lib/voc/obj | mkdir -p $(PREFIX)/lib/voc/obj + test -d $(PREFIX)/lib/voc/sym | mkdir -p $(PREFIX)/lib/voc/sym + + cp $(LIBRARY).so $(PREFIX)/lib + cp $(LIBRARY).a $(PREFIX)/lib + cp *.c $(PREFIX)/lib/voc/obj/ + cp *.h $(PREFIX)/lib/voc/obj/ + cp *.sym $(PREFIX)/lib/voc/sym/ + + cp 05vishap.conf /etc/ld.so.conf.d/ + ldconfig + +# cp *.o $(PREFIX)/lib/voc/$(RELEASE)/obj/ +uninstall: + rm -rf $(PREFIX) diff --git a/makefile.gnuc.armv6j b/makefile.gnuc.armv6j new file mode 100644 index 00000000..306abdfb --- /dev/null +++ b/makefile.gnuc.armv6j @@ -0,0 +1,187 @@ +#SHELL := /bin/bash +BUILDID=$(shell date +%Y/%m/%d) +TOS = linux +TARCH = armv6j +#TARCH = x86 x86_64 armv6j armv6j_hardfp armv7a_hardfp +CCOMP = gnuc +RELEASE = 1.0 + + +INCLUDEPATH = -Isrc/lib/system/$(CCOMP)/$(TARCH) + +SETPATH = CFLAGS=$(INCLUDEPATH) PATH=.:/bin:/usr/bin MODULES=.:src/lib:src/lib/v4:src/lib/system:src/lib/system/$(CCOMP):src/lib/system/$(CCOMP)/$(TARCH):src/lib/ulm:src/lib/ulm/gnuc:src/lib/ooc2:src/lib/ooc2/gnuc:src/lib/ooc:src/lib/ooc/lowlevel:src/voc:src/voc/gnuc:src/voc/gnuc/$(TARCH):src/tools/ocat:src/tools/browser:src/tools/vocparam:src/tools/coco:src/test + +VOC = voc +VOCSTATIC = $(SETPATH) ./vocstatic +VOCPARAM = $(shell ./vocparam > voc.par) +VERSION = GNU_Linux_$(TARCH) +LIBNAME = VishapOberon +LIBRARY = lib$(LIBNAME) + +ifndef PREFIX +PREFIX = /opt/voc-$(RELEASE) +endif + +CCOPT = -fPIC $(INCLUDEPATH) -g + +CC = cc $(CCOPT) -c +CL = cc $(CCOPT) +LD = cc -shared -o $(LIBRARY).so +# s is necessary to create index inside a archive +ARCHIVE = ar rcs $(LIBRARY).a + +#%.c: %.Mod +#%.o: %.c +# $(CC) $(input) + +all: stage2 stage3 stage4 stage5 stage6 stage7 + +# when porting to new platform: +# * put corresponding .par file into current directory. it can be generated on the target platform by compiling vocparam (stage0) and running (stage1) +# * run make port0 - this will generate C source files for the target architecture +# * move the source tree to the target machine, and compile (or compile here via crosscompiler) (port1) +port0: stage2 stage3 stage4 + +# now compile C source files for voc, showdef and ocat on target machine (or by using crosscompiler) +port1: stage5 +# after you have "voc" compiled for target architecture. replace vocstatic with it and run make on target platform to get everything compiled + +# this builds binary which generates voc.par +stage0: src/tools/vocparam/vocparam.c + $(CL) -I src/lib -o vocparam src/tools/vocparam/vocparam.c + +# this creates voc.par for a host architecture. +# comment this out if you need to build a compiler for a different architecture. +stage1: + #rm voc.par + #$(shell "./vocparam > voc.par") + #./vocparam > voc.par + $(VOCPARAM) + +# this copies necessary voc.par to the current directory. +# skip this if you are building compiler for the host architecture. +stage2: + cp src/par/voc.par.$(CCOMP).$(TARCH) voc.par +# cp src/par/voc.par.gnu.x86_64 voc.par +# cp src/par/voc.par.gnu.x86 voc.par +# cp src/par/voc.par.gnu.armv6 voc.par +# cp src/par/voc.par.gnu.armv7 voc.par + +# this prepares modules necessary to build the compiler itself +stage3: + + $(VOCSTATIC) -siapxPS SYSTEM.Mod + $(VOCSTATIC) -sPS Args.Mod Console.Mod Unix.Mod + $(VOCSTATIC) -sPS oocOakStrings.Mod architecture.Mod version.Mod Kernel.Mod Modules.Mod + $(VOCSTATIC) -sxPS Files.Mod + $(VOCSTATIC) -sPS Reals.Mod CmdlnTexts.Mod errors.Mod + +# build the compiler +stage4: + $(VOCSTATIC) -sPS extTools.Mod + $(VOCSTATIC) -sPS OPM.cmdln.Mod + $(VOCSTATIC) -sxPS OPS.Mod + $(VOCSTATIC) -sPS OPT.Mod OPC.Mod OPV.Mod OPB.Mod OPP.Mod + $(VOCSTATIC) -smPS voc.Mod + $(VOCSTATIC) -smPS BrowserCmd.Mod + $(VOCSTATIC) -smPS OCatCmd.Mod + +#this is to build the compiler from C sources. +#this is a way to create a bootstrap binary. +stage5: + $(CC) SYSTEM.c Args.c Console.c Modules.c Unix.c \ + oocOakStrings.c architecture.c version.c Kernel.c Files.c Reals.c CmdlnTexts.c \ + version.c extTools.c \ + OPM.c OPS.c OPT.c OPC.c OPV.c OPB.c OPP.c errors.c + + $(CL) -static voc.c -o voc \ + SYSTEM.o Args.o Console.o Modules.o Unix.o \ + oocOakStrings.o architecture.o version.o Kernel.o Files.o Reals.o CmdlnTexts.o \ + extTools.o \ + OPM.o OPS.o OPT.o OPC.o OPV.o OPB.o OPP.o errors.o + $(CL) BrowserCmd.c -o showdef \ + SYSTEM.o Args.o Console.o Modules.o Unix.o oocOakStrings.o architecture.o version.o Kernel.o Files.o Reals.o CmdlnTexts.o \ + OPM.o OPS.o OPT.o OPV.o OPC.o errors.o + + $(CL) OCatCmd.c -o ocat \ + SYSTEM.o Args.o Console.o Modules.o Unix.o oocOakStrings.o architecture.o version.o Kernel.o Files.o Reals.o CmdlnTexts.o + + + +# build all library files +stage6: + $(VOCSTATIC) -sP oocAscii.Mod + $(VOCSTATIC) -sP oocStrings.Mod + $(VOCSTATIC) -sP oocStrings2.Mod + $(VOCSTATIC) -sP oocCharClass.Mod + $(VOCSTATIC) -sP oocConvTypes.Mod + $(VOCSTATIC) -sP oocIntConv.Mod + $(VOCSTATIC) -sP oocIntStr.Mod + $(VOCSTATIC) -sP oocSysClock.Mod + $(VOCSTATIC) -sP oocTime.Mod +# $(VOCSTATIC) -s oocLongStrings.Mod +# $(CC) oocLongStrings.c +# $(VOCSTATIC) -s oocMsg.Mod +# $(CC) oocMsg.c + + + $(VOCSTATIC) -sP ooc2Strings.Mod + $(VOCSTATIC) -sP ooc2Ascii.Mod + $(VOCSTATIC) -sP ooc2CharClass.Mod + $(VOCSTATIC) -sP ooc2ConvTypes.Mod + $(VOCSTATIC) -sP ooc2IntConv.Mod + $(VOCSTATIC) -sP ooc2IntStr.Mod + $(VOCSTATIC) -sP ooc2Real0.Mod + $(VOCSTATIC) -sP oocwrapperlibc.Mod + $(VOCSTATIC) -sP ulmSYSTEM.Mod + $(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 + +stage7: + #objects := $(wildcard *.o) + #$(LD) objects + $(ARCHIVE) *.o + #$(ARCHIVE) objects + $(LD) *.o + echo "$(PREFIX)/lib" >> 05vishap.conf + +clean: +# rm_objects := rm $(wildcard *.o) +# objects + rm *.o + rm *.sym + rm *.h + rm *.c + rm *.a + rm *.so + +coco: + $(JET) Sets.Mod Oberon.Mod CRS.Mod CRT.Mod CRA.Mod CRX.Mod CRP.Mod Coco.Mod -m + $(CC) Sets.c Oberon.c CRS.c CRT.c CRA.c CRX.c CRP.c + $(CL) -static -o Coco Coco.c Sets.o Oberon.o CRS.o CRT.o CRA.o CRX.o CRP.o CmdlnTexts.o SYSTEM.o Files.o -L. -lOberon -L/usr/lib -ldl + +install: + test -d $(PREFIX)/bin | mkdir -p $(PREFIX)/bin + cp voc $(PREFIX)/bin/ + cp showdef $(PREFIX)/bin/ + cp ocat $(PREFIX)/bin/ + cp -a src $(PREFIX)/ + + test -d $(PREFIX)/lib/voc | mkdir -p $(PREFIX)/lib/voc + test -d $(PREFIX)/lib/voc/ | mkdir -p $(PREFIX)/lib/voc + test -d $(PREFIX)/lib/voc/obj | mkdir -p $(PREFIX)/lib/voc/obj + test -d $(PREFIX)/lib/voc/sym | mkdir -p $(PREFIX)/lib/voc/sym + + cp $(LIBRARY).so $(PREFIX)/lib + cp $(LIBRARY).a $(PREFIX)/lib + cp *.c $(PREFIX)/lib/voc/obj/ + cp *.h $(PREFIX)/lib/voc/obj/ + cp *.sym $(PREFIX)/lib/voc/sym/ + + cp 05vishap.conf /etc/ld.so.conf.d/ + ldconfig + +# cp *.o $(PREFIX)/lib/voc/$(RELEASE)/obj/ +uninstall: + rm -rf $(PREFIX) diff --git a/makefile.gnuc.armv6j_hardfp b/makefile.gnuc.armv6j_hardfp new file mode 100644 index 00000000..3dc4f3fa --- /dev/null +++ b/makefile.gnuc.armv6j_hardfp @@ -0,0 +1,187 @@ +#SHELL := /bin/bash +BUILDID=$(shell date +%Y/%m/%d) +TOS = linux +TARCH = armv6j_hardfp +#TARCH = x86 x86_64 armv6j armv6j_hardfp armv7a_hardfp +CCOMP = gnuc +RELEASE = 1.0 + + +INCLUDEPATH = -Isrc/lib/system/$(CCOMP)/$(TARCH) + +SETPATH = CFLAGS=$(INCLUDEPATH) PATH=.:/bin:/usr/bin MODULES=.:src/lib:src/lib/v4:src/lib/system:src/lib/system/$(CCOMP):src/lib/system/$(CCOMP)/$(TARCH):src/lib/ulm:src/lib/ulm/gnuc:src/lib/ooc2:src/lib/ooc2/gnuc:src/lib/ooc:src/lib/ooc/lowlevel:src/voc:src/voc/gnuc:src/voc/gnuc/$(TARCH):src/tools/ocat:src/tools/browser:src/tools/vocparam:src/tools/coco:src/test + +VOC = voc +VOCSTATIC = $(SETPATH) ./vocstatic +VOCPARAM = $(shell ./vocparam > voc.par) +VERSION = GNU_Linux_$(TARCH) +LIBNAME = VishapOberon +LIBRARY = lib$(LIBNAME) + +ifndef PREFIX +PREFIX = /opt/voc-$(RELEASE) +endif + +CCOPT = -fPIC $(INCLUDEPATH) -g + +CC = cc $(CCOPT) -c +CL = cc $(CCOPT) +LD = cc -shared -o $(LIBRARY).so +# s is necessary to create index inside a archive +ARCHIVE = ar rcs $(LIBRARY).a + +#%.c: %.Mod +#%.o: %.c +# $(CC) $(input) + +all: stage2 stage3 stage4 stage5 stage6 stage7 + +# when porting to new platform: +# * put corresponding .par file into current directory. it can be generated on the target platform by compiling vocparam (stage0) and running (stage1) +# * run make port0 - this will generate C source files for the target architecture +# * move the source tree to the target machine, and compile (or compile here via crosscompiler) (port1) +port0: stage2 stage3 stage4 + +# now compile C source files for voc, showdef and ocat on target machine (or by using crosscompiler) +port1: stage5 +# after you have "voc" compiled for target architecture. replace vocstatic with it and run make on target platform to get everything compiled + +# this builds binary which generates voc.par +stage0: src/tools/vocparam/vocparam.c + $(CL) -I src/lib -o vocparam src/tools/vocparam/vocparam.c + +# this creates voc.par for a host architecture. +# comment this out if you need to build a compiler for a different architecture. +stage1: + #rm voc.par + #$(shell "./vocparam > voc.par") + #./vocparam > voc.par + $(VOCPARAM) + +# this copies necessary voc.par to the current directory. +# skip this if you are building compiler for the host architecture. +stage2: + cp src/par/voc.par.$(CCOMP).$(TARCH) voc.par +# cp src/par/voc.par.gnu.x86_64 voc.par +# cp src/par/voc.par.gnu.x86 voc.par +# cp src/par/voc.par.gnu.armv6 voc.par +# cp src/par/voc.par.gnu.armv7 voc.par + +# this prepares modules necessary to build the compiler itself +stage3: + + $(VOCSTATIC) -siapxPS SYSTEM.Mod + $(VOCSTATIC) -sPS Args.Mod Console.Mod Unix.Mod + $(VOCSTATIC) -sPS oocOakStrings.Mod architecture.Mod version.Mod Kernel.Mod Modules.Mod + $(VOCSTATIC) -sxPS Files.Mod + $(VOCSTATIC) -sPS Reals.Mod CmdlnTexts.Mod errors.Mod + +# build the compiler +stage4: + $(VOCSTATIC) -sPS extTools.Mod + $(VOCSTATIC) -sPS OPM.cmdln.Mod + $(VOCSTATIC) -sxPS OPS.Mod + $(VOCSTATIC) -sPS OPT.Mod OPC.Mod OPV.Mod OPB.Mod OPP.Mod + $(VOCSTATIC) -smPS voc.Mod + $(VOCSTATIC) -smPS BrowserCmd.Mod + $(VOCSTATIC) -smPS OCatCmd.Mod + +#this is to build the compiler from C sources. +#this is a way to create a bootstrap binary. +stage5: + $(CC) SYSTEM.c Args.c Console.c Modules.c Unix.c \ + oocOakStrings.c architecture.c version.c Kernel.c Files.c Reals.c CmdlnTexts.c \ + version.c extTools.c \ + OPM.c OPS.c OPT.c OPC.c OPV.c OPB.c OPP.c errors.c + + $(CL) -static voc.c -o voc \ + SYSTEM.o Args.o Console.o Modules.o Unix.o \ + oocOakStrings.o architecture.o version.o Kernel.o Files.o Reals.o CmdlnTexts.o \ + extTools.o \ + OPM.o OPS.o OPT.o OPC.o OPV.o OPB.o OPP.o errors.o + $(CL) BrowserCmd.c -o showdef \ + SYSTEM.o Args.o Console.o Modules.o Unix.o oocOakStrings.o architecture.o version.o Kernel.o Files.o Reals.o CmdlnTexts.o \ + OPM.o OPS.o OPT.o OPV.o OPC.o errors.o + + $(CL) OCatCmd.c -o ocat \ + SYSTEM.o Args.o Console.o Modules.o Unix.o oocOakStrings.o architecture.o version.o Kernel.o Files.o Reals.o CmdlnTexts.o + + + +# build all library files +stage6: + $(VOCSTATIC) -sP oocAscii.Mod + $(VOCSTATIC) -sP oocStrings.Mod + $(VOCSTATIC) -sP oocStrings2.Mod + $(VOCSTATIC) -sP oocCharClass.Mod + $(VOCSTATIC) -sP oocConvTypes.Mod + $(VOCSTATIC) -sP oocIntConv.Mod + $(VOCSTATIC) -sP oocIntStr.Mod + $(VOCSTATIC) -sP oocSysClock.Mod + $(VOCSTATIC) -sP oocTime.Mod +# $(VOCSTATIC) -s oocLongStrings.Mod +# $(CC) oocLongStrings.c +# $(VOCSTATIC) -s oocMsg.Mod +# $(CC) oocMsg.c + + + $(VOCSTATIC) -sP ooc2Strings.Mod + $(VOCSTATIC) -sP ooc2Ascii.Mod + $(VOCSTATIC) -sP ooc2CharClass.Mod + $(VOCSTATIC) -sP ooc2ConvTypes.Mod + $(VOCSTATIC) -sP ooc2IntConv.Mod + $(VOCSTATIC) -sP ooc2IntStr.Mod + $(VOCSTATIC) -sP ooc2Real0.Mod + $(VOCSTATIC) -sP oocwrapperlibc.Mod + $(VOCSTATIC) -sP ulmSYSTEM.Mod + $(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 + +stage7: + #objects := $(wildcard *.o) + #$(LD) objects + $(ARCHIVE) *.o + #$(ARCHIVE) objects + $(LD) *.o + echo "$(PREFIX)/lib" >> 05vishap.conf + +clean: +# rm_objects := rm $(wildcard *.o) +# objects + rm *.o + rm *.sym + rm *.h + rm *.c + rm *.a + rm *.so + +coco: + $(JET) Sets.Mod Oberon.Mod CRS.Mod CRT.Mod CRA.Mod CRX.Mod CRP.Mod Coco.Mod -m + $(CC) Sets.c Oberon.c CRS.c CRT.c CRA.c CRX.c CRP.c + $(CL) -static -o Coco Coco.c Sets.o Oberon.o CRS.o CRT.o CRA.o CRX.o CRP.o CmdlnTexts.o SYSTEM.o Files.o -L. -lOberon -L/usr/lib -ldl + +install: + test -d $(PREFIX)/bin | mkdir -p $(PREFIX)/bin + cp voc $(PREFIX)/bin/ + cp showdef $(PREFIX)/bin/ + cp ocat $(PREFIX)/bin/ + cp -a src $(PREFIX)/ + + test -d $(PREFIX)/lib/voc | mkdir -p $(PREFIX)/lib/voc + test -d $(PREFIX)/lib/voc/ | mkdir -p $(PREFIX)/lib/voc + test -d $(PREFIX)/lib/voc/obj | mkdir -p $(PREFIX)/lib/voc/obj + test -d $(PREFIX)/lib/voc/sym | mkdir -p $(PREFIX)/lib/voc/sym + + cp $(LIBRARY).so $(PREFIX)/lib + cp $(LIBRARY).a $(PREFIX)/lib + cp *.c $(PREFIX)/lib/voc/obj/ + cp *.h $(PREFIX)/lib/voc/obj/ + cp *.sym $(PREFIX)/lib/voc/sym/ + + cp 05vishap.conf /etc/ld.so.conf.d/ + ldconfig + +# cp *.o $(PREFIX)/lib/voc/$(RELEASE)/obj/ +uninstall: + rm -rf $(PREFIX) diff --git a/makefile.gnuc.armv7a_hardfp b/makefile.gnuc.armv7a_hardfp new file mode 100644 index 00000000..6713bc99 --- /dev/null +++ b/makefile.gnuc.armv7a_hardfp @@ -0,0 +1,187 @@ +#SHELL := /bin/bash +BUILDID=$(shell date +%Y/%m/%d) +TOS = linux +TARCH = armv7a_hardfp +#TARCH = x86 x86_64 armv6j armv6j_hardfp armv7a_hardfp +CCOMP = gnuc +RELEASE = 1.0 + + +INCLUDEPATH = -Isrc/lib/system/$(CCOMP)/$(TARCH) + +SETPATH = CFLAGS=$(INCLUDEPATH) PATH=.:/bin:/usr/bin MODULES=.:src/lib:src/lib/v4:src/lib/system:src/lib/system/$(CCOMP):src/lib/system/$(CCOMP)/$(TARCH):src/lib/ulm:src/lib/ulm/gnuc:src/lib/ooc2:src/lib/ooc2/gnuc:src/lib/ooc:src/lib/ooc/lowlevel:src/voc:src/voc/gnuc:src/voc/gnuc/$(TARCH):src/tools/ocat:src/tools/browser:src/tools/vocparam:src/tools/coco:src/test + +VOC = voc +VOCSTATIC = $(SETPATH) ./vocstatic +VOCPARAM = $(shell ./vocparam > voc.par) +VERSION = GNU_Linux_$(TARCH) +LIBNAME = VishapOberon +LIBRARY = lib$(LIBNAME) + +ifndef PREFIX +PREFIX = /opt/voc-$(RELEASE) +endif + +CCOPT = -fPIC $(INCLUDEPATH) -g + +CC = cc $(CCOPT) -c +CL = cc $(CCOPT) +LD = cc -shared -o $(LIBRARY).so +# s is necessary to create index inside a archive +ARCHIVE = ar rcs $(LIBRARY).a + +#%.c: %.Mod +#%.o: %.c +# $(CC) $(input) + +all: stage2 stage3 stage4 stage5 stage6 stage7 + +# when porting to new platform: +# * put corresponding .par file into current directory. it can be generated on the target platform by compiling vocparam (stage0) and running (stage1) +# * run make port0 - this will generate C source files for the target architecture +# * move the source tree to the target machine, and compile (or compile here via crosscompiler) (port1) +port0: stage2 stage3 stage4 + +# now compile C source files for voc, showdef and ocat on target machine (or by using crosscompiler) +port1: stage5 +# after you have "voc" compiled for target architecture. replace vocstatic with it and run make on target platform to get everything compiled + +# this builds binary which generates voc.par +stage0: src/tools/vocparam/vocparam.c + $(CL) -I src/lib -o vocparam src/tools/vocparam/vocparam.c + +# this creates voc.par for a host architecture. +# comment this out if you need to build a compiler for a different architecture. +stage1: + #rm voc.par + #$(shell "./vocparam > voc.par") + #./vocparam > voc.par + $(VOCPARAM) + +# this copies necessary voc.par to the current directory. +# skip this if you are building compiler for the host architecture. +stage2: + cp src/par/voc.par.$(CCOMP).$(TARCH) voc.par +# cp src/par/voc.par.gnu.x86_64 voc.par +# cp src/par/voc.par.gnu.x86 voc.par +# cp src/par/voc.par.gnu.armv6 voc.par +# cp src/par/voc.par.gnu.armv7 voc.par + +# this prepares modules necessary to build the compiler itself +stage3: + + $(VOCSTATIC) -siapxPS SYSTEM.Mod + $(VOCSTATIC) -sPS Args.Mod Console.Mod Unix.Mod + $(VOCSTATIC) -sPS oocOakStrings.Mod architecture.Mod version.Mod Kernel.Mod Modules.Mod + $(VOCSTATIC) -sxPS Files.Mod + $(VOCSTATIC) -sPS Reals.Mod CmdlnTexts.Mod errors.Mod + +# build the compiler +stage4: + $(VOCSTATIC) -sPS extTools.Mod + $(VOCSTATIC) -sPS OPM.cmdln.Mod + $(VOCSTATIC) -sxPS OPS.Mod + $(VOCSTATIC) -sPS OPT.Mod OPC.Mod OPV.Mod OPB.Mod OPP.Mod + $(VOCSTATIC) -smPS voc.Mod + $(VOCSTATIC) -smPS BrowserCmd.Mod + $(VOCSTATIC) -smPS OCatCmd.Mod + +#this is to build the compiler from C sources. +#this is a way to create a bootstrap binary. +stage5: + $(CC) SYSTEM.c Args.c Console.c Modules.c Unix.c \ + oocOakStrings.c architecture.c version.c Kernel.c Files.c Reals.c CmdlnTexts.c \ + version.c extTools.c \ + OPM.c OPS.c OPT.c OPC.c OPV.c OPB.c OPP.c errors.c + + $(CL) -static voc.c -o voc \ + SYSTEM.o Args.o Console.o Modules.o Unix.o \ + oocOakStrings.o architecture.o version.o Kernel.o Files.o Reals.o CmdlnTexts.o \ + extTools.o \ + OPM.o OPS.o OPT.o OPC.o OPV.o OPB.o OPP.o errors.o + $(CL) BrowserCmd.c -o showdef \ + SYSTEM.o Args.o Console.o Modules.o Unix.o oocOakStrings.o architecture.o version.o Kernel.o Files.o Reals.o CmdlnTexts.o \ + OPM.o OPS.o OPT.o OPV.o OPC.o errors.o + + $(CL) OCatCmd.c -o ocat \ + SYSTEM.o Args.o Console.o Modules.o Unix.o oocOakStrings.o architecture.o version.o Kernel.o Files.o Reals.o CmdlnTexts.o + + + +# build all library files +stage6: + $(VOCSTATIC) -sP oocAscii.Mod + $(VOCSTATIC) -sP oocStrings.Mod + $(VOCSTATIC) -sP oocStrings2.Mod + $(VOCSTATIC) -sP oocCharClass.Mod + $(VOCSTATIC) -sP oocConvTypes.Mod + $(VOCSTATIC) -sP oocIntConv.Mod + $(VOCSTATIC) -sP oocIntStr.Mod + $(VOCSTATIC) -sP oocSysClock.Mod + $(VOCSTATIC) -sP oocTime.Mod +# $(VOCSTATIC) -s oocLongStrings.Mod +# $(CC) oocLongStrings.c +# $(VOCSTATIC) -s oocMsg.Mod +# $(CC) oocMsg.c + + + $(VOCSTATIC) -sP ooc2Strings.Mod + $(VOCSTATIC) -sP ooc2Ascii.Mod + $(VOCSTATIC) -sP ooc2CharClass.Mod + $(VOCSTATIC) -sP ooc2ConvTypes.Mod + $(VOCSTATIC) -sP ooc2IntConv.Mod + $(VOCSTATIC) -sP ooc2IntStr.Mod + $(VOCSTATIC) -sP ooc2Real0.Mod + $(VOCSTATIC) -sP oocwrapperlibc.Mod + $(VOCSTATIC) -sP ulmSYSTEM.Mod + $(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 + +stage7: + #objects := $(wildcard *.o) + #$(LD) objects + $(ARCHIVE) *.o + #$(ARCHIVE) objects + $(LD) *.o + echo "$(PREFIX)/lib" >> 05vishap.conf + +clean: +# rm_objects := rm $(wildcard *.o) +# objects + rm *.o + rm *.sym + rm *.h + rm *.c + rm *.a + rm *.so + +coco: + $(JET) Sets.Mod Oberon.Mod CRS.Mod CRT.Mod CRA.Mod CRX.Mod CRP.Mod Coco.Mod -m + $(CC) Sets.c Oberon.c CRS.c CRT.c CRA.c CRX.c CRP.c + $(CL) -static -o Coco Coco.c Sets.o Oberon.o CRS.o CRT.o CRA.o CRX.o CRP.o CmdlnTexts.o SYSTEM.o Files.o -L. -lOberon -L/usr/lib -ldl + +install: + test -d $(PREFIX)/bin | mkdir -p $(PREFIX)/bin + cp voc $(PREFIX)/bin/ + cp showdef $(PREFIX)/bin/ + cp ocat $(PREFIX)/bin/ + cp -a src $(PREFIX)/ + + test -d $(PREFIX)/lib/voc | mkdir -p $(PREFIX)/lib/voc + test -d $(PREFIX)/lib/voc/ | mkdir -p $(PREFIX)/lib/voc + test -d $(PREFIX)/lib/voc/obj | mkdir -p $(PREFIX)/lib/voc/obj + test -d $(PREFIX)/lib/voc/sym | mkdir -p $(PREFIX)/lib/voc/sym + + cp $(LIBRARY).so $(PREFIX)/lib + cp $(LIBRARY).a $(PREFIX)/lib + cp *.c $(PREFIX)/lib/voc/obj/ + cp *.h $(PREFIX)/lib/voc/obj/ + cp *.sym $(PREFIX)/lib/voc/sym/ + + cp 05vishap.conf /etc/ld.so.conf.d/ + ldconfig + +# cp *.o $(PREFIX)/lib/voc/$(RELEASE)/obj/ +uninstall: + rm -rf $(PREFIX) diff --git a/makefile.gnuc.x86 b/makefile.gnuc.x86 new file mode 100644 index 00000000..a43aac34 --- /dev/null +++ b/makefile.gnuc.x86 @@ -0,0 +1,187 @@ +#SHELL := /bin/bash +BUILDID=$(shell date +%Y/%m/%d) +TOS = linux +TARCH = x86 +#TARCH = x86 x86_64 armv6j armv6j_hardfp armv7a_hardfp +CCOMP = gnuc +RELEASE = 1.0 + + +INCLUDEPATH = -Isrc/lib/system/$(CCOMP)/$(TARCH) + +SETPATH = CFLAGS=$(INCLUDEPATH) PATH=.:/bin:/usr/bin MODULES=.:src/lib:src/lib/v4:src/lib/system:src/lib/system/$(CCOMP):src/lib/system/$(CCOMP)/$(TARCH):src/lib/ulm:src/lib/ulm/gnuc:src/lib/ooc2:src/lib/ooc2/gnuc:src/lib/ooc:src/lib/ooc/lowlevel:src/voc:src/voc/gnuc:src/voc/gnuc/$(TARCH):src/tools/ocat:src/tools/browser:src/tools/vocparam:src/tools/coco:src/test + +VOC = voc +VOCSTATIC = $(SETPATH) ./vocstatic +VOCPARAM = $(shell ./vocparam > voc.par) +VERSION = GNU_Linux_$(TARCH) +LIBNAME = VishapOberon +LIBRARY = lib$(LIBNAME) + +ifndef PREFIX +PREFIX = /opt/voc-$(RELEASE) +endif + +CCOPT = -fPIC $(INCLUDEPATH) -g + +CC = cc $(CCOPT) -c +CL = cc $(CCOPT) +LD = cc -shared -o $(LIBRARY).so +# s is necessary to create index inside a archive +ARCHIVE = ar rcs $(LIBRARY).a + +#%.c: %.Mod +#%.o: %.c +# $(CC) $(input) + +all: stage2 stage3 stage4 stage5 stage6 stage7 + +# when porting to new platform: +# * put corresponding .par file into current directory. it can be generated on the target platform by compiling vocparam (stage0) and running (stage1) +# * run make port0 - this will generate C source files for the target architecture +# * move the source tree to the target machine, and compile (or compile here via crosscompiler) (port1) +port0: stage2 stage3 stage4 + +# now compile C source files for voc, showdef and ocat on target machine (or by using crosscompiler) +port1: stage5 +# after you have "voc" compiled for target architecture. replace vocstatic with it and run make on target platform to get everything compiled + +# this builds binary which generates voc.par +stage0: src/tools/vocparam/vocparam.c + $(CL) -I src/lib -o vocparam src/tools/vocparam/vocparam.c + +# this creates voc.par for a host architecture. +# comment this out if you need to build a compiler for a different architecture. +stage1: + #rm voc.par + #$(shell "./vocparam > voc.par") + #./vocparam > voc.par + $(VOCPARAM) + +# this copies necessary voc.par to the current directory. +# skip this if you are building compiler for the host architecture. +stage2: + cp src/par/voc.par.$(CCOMP).$(TARCH) voc.par +# cp src/par/voc.par.gnu.x86_64 voc.par +# cp src/par/voc.par.gnu.x86 voc.par +# cp src/par/voc.par.gnu.armv6 voc.par +# cp src/par/voc.par.gnu.armv7 voc.par + +# this prepares modules necessary to build the compiler itself +stage3: + + $(VOCSTATIC) -siapxPS SYSTEM.Mod + $(VOCSTATIC) -sPS Args.Mod Console.Mod Unix.Mod + $(VOCSTATIC) -sPS oocOakStrings.Mod architecture.Mod version.Mod Kernel.Mod Modules.Mod + $(VOCSTATIC) -sxPS Files.Mod + $(VOCSTATIC) -sPS Reals.Mod CmdlnTexts.Mod errors.Mod + +# build the compiler +stage4: + $(VOCSTATIC) -sPS extTools.Mod + $(VOCSTATIC) -sPS OPM.cmdln.Mod + $(VOCSTATIC) -sxPS OPS.Mod + $(VOCSTATIC) -sPS OPT.Mod OPC.Mod OPV.Mod OPB.Mod OPP.Mod + $(VOCSTATIC) -smPS voc.Mod + $(VOCSTATIC) -smPS BrowserCmd.Mod + $(VOCSTATIC) -smPS OCatCmd.Mod + +#this is to build the compiler from C sources. +#this is a way to create a bootstrap binary. +stage5: + $(CC) SYSTEM.c Args.c Console.c Modules.c Unix.c \ + oocOakStrings.c architecture.c version.c Kernel.c Files.c Reals.c CmdlnTexts.c \ + version.c extTools.c \ + OPM.c OPS.c OPT.c OPC.c OPV.c OPB.c OPP.c errors.c + + $(CL) -static voc.c -o voc \ + SYSTEM.o Args.o Console.o Modules.o Unix.o \ + oocOakStrings.o architecture.o version.o Kernel.o Files.o Reals.o CmdlnTexts.o \ + extTools.o \ + OPM.o OPS.o OPT.o OPC.o OPV.o OPB.o OPP.o errors.o + $(CL) BrowserCmd.c -o showdef \ + SYSTEM.o Args.o Console.o Modules.o Unix.o oocOakStrings.o architecture.o version.o Kernel.o Files.o Reals.o CmdlnTexts.o \ + OPM.o OPS.o OPT.o OPV.o OPC.o errors.o + + $(CL) OCatCmd.c -o ocat \ + SYSTEM.o Args.o Console.o Modules.o Unix.o oocOakStrings.o architecture.o version.o Kernel.o Files.o Reals.o CmdlnTexts.o + + + +# build all library files +stage6: + $(VOCSTATIC) -sP oocAscii.Mod + $(VOCSTATIC) -sP oocStrings.Mod + $(VOCSTATIC) -sP oocStrings2.Mod + $(VOCSTATIC) -sP oocCharClass.Mod + $(VOCSTATIC) -sP oocConvTypes.Mod + $(VOCSTATIC) -sP oocIntConv.Mod + $(VOCSTATIC) -sP oocIntStr.Mod + $(VOCSTATIC) -sP oocSysClock.Mod + $(VOCSTATIC) -sP oocTime.Mod +# $(VOCSTATIC) -s oocLongStrings.Mod +# $(CC) oocLongStrings.c +# $(VOCSTATIC) -s oocMsg.Mod +# $(CC) oocMsg.c + + + $(VOCSTATIC) -sP ooc2Strings.Mod + $(VOCSTATIC) -sP ooc2Ascii.Mod + $(VOCSTATIC) -sP ooc2CharClass.Mod + $(VOCSTATIC) -sP ooc2ConvTypes.Mod + $(VOCSTATIC) -sP ooc2IntConv.Mod + $(VOCSTATIC) -sP ooc2IntStr.Mod + $(VOCSTATIC) -sP ooc2Real0.Mod + $(VOCSTATIC) -sP oocwrapperlibc.Mod + $(VOCSTATIC) -sP ulmSYSTEM.Mod + $(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 + +stage7: + #objects := $(wildcard *.o) + #$(LD) objects + $(ARCHIVE) *.o + #$(ARCHIVE) objects + $(LD) *.o + echo "$(PREFIX)/lib" >> 05vishap.conf + +clean: +# rm_objects := rm $(wildcard *.o) +# objects + rm *.o + rm *.sym + rm *.h + rm *.c + rm *.a + rm *.so + +coco: + $(JET) Sets.Mod Oberon.Mod CRS.Mod CRT.Mod CRA.Mod CRX.Mod CRP.Mod Coco.Mod -m + $(CC) Sets.c Oberon.c CRS.c CRT.c CRA.c CRX.c CRP.c + $(CL) -static -o Coco Coco.c Sets.o Oberon.o CRS.o CRT.o CRA.o CRX.o CRP.o CmdlnTexts.o SYSTEM.o Files.o -L. -lOberon -L/usr/lib -ldl + +install: + test -d $(PREFIX)/bin | mkdir -p $(PREFIX)/bin + cp voc $(PREFIX)/bin/ + cp showdef $(PREFIX)/bin/ + cp ocat $(PREFIX)/bin/ + cp -a src $(PREFIX)/ + + test -d $(PREFIX)/lib/voc | mkdir -p $(PREFIX)/lib/voc + test -d $(PREFIX)/lib/voc/ | mkdir -p $(PREFIX)/lib/voc + test -d $(PREFIX)/lib/voc/obj | mkdir -p $(PREFIX)/lib/voc/obj + test -d $(PREFIX)/lib/voc/sym | mkdir -p $(PREFIX)/lib/voc/sym + + cp $(LIBRARY).so $(PREFIX)/lib + cp $(LIBRARY).a $(PREFIX)/lib + cp *.c $(PREFIX)/lib/voc/obj/ + cp *.h $(PREFIX)/lib/voc/obj/ + cp *.sym $(PREFIX)/lib/voc/sym/ + + cp 05vishap.conf /etc/ld.so.conf.d/ + ldconfig + +# cp *.o $(PREFIX)/lib/voc/$(RELEASE)/obj/ +uninstall: + rm -rf $(PREFIX) diff --git a/ocat b/ocat new file mode 100755 index 0000000000000000000000000000000000000000..b5e6db8890a4b072b16476f53225038d2a1c02a1 GIT binary patch literal 208976 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

jgU|+WU(JACk9wMGaWERbG{%Ui*2*0zo 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

wu7^-?aRV-4m5I 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 literal 0 HcmV?d00001 diff --git a/quick_start b/quick_start new file mode 100644 index 00000000..f08afef9 --- /dev/null +++ b/quick_start @@ -0,0 +1,45 @@ + + + Firstly, make sure that voc binary is in your path. + You may need to issue + # PATH=/opt/voc/bin:$PATH + == Compiling a main module== + In order to compile a main module, and get it linked dynamically to libVishapOberon.so, issue + + # voc -m hello.Mod + + If you want it to be linked statically, then + + # voc -M hello.Mod + + It is necessary to specify -m or -M key so that compiler generates _start entry point. + Otherwise the module will be generated as .o object file. + + Currently, voc by default asks gcc to include debugging information (-g) so you may want to strip resulting binaries before distributing them + + # strip hello + + ==Creating shared object== + + Compile several modules but not link resulting object files. + voc -s M0.Mod M1.Mod Mn.Mod + + Then create a shared object with + + # ld -shared -o libYouLib.so M0.o M1.o Mn.o + + To create a static .a archive do + + # ar rcs libYourLib.a M0.o M1.o Mn.o + + == Sorting modules in different directories == + + By default voc looks for modules only in default path, where distributed libVishapOberon library symbol files are located, and in current directory. If you have many modules and want to sort them into different directories, then you need to tell compiler where to look for your modules. + For that we have introduced MODULES environment variable. + Lets assume, you have directories "logic", "graphics", "misc" in current directory, and you want compiler to search for your source modules there. + + # export MODULES=".:logic:graphics:misc" + + Directories will be searched in the same order as specified. In this example we specify current directory, which is not necessary, because it's already in a search path by default. + + diff --git a/showdef b/showdef new file mode 100755 index 0000000000000000000000000000000000000000..3d280e4d53947c30f8b9f62d69afc61518f1f628 GIT binary patch literal 432696 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 Kvz5$+CjJNQ0lJ+4 literal 0 HcmV?d00001 diff --git a/src/lib/ooc/lowlevel/oocSysClock.Mod b/src/lib/ooc/lowlevel/oocSysClock.Mod new file mode 100644 index 00000000..da8c1282 --- /dev/null +++ b/src/lib/ooc/lowlevel/oocSysClock.Mod @@ -0,0 +1,130 @@ +(* $Id: SysClock.Mod,v 1.7 1999/09/02 13:42:24 acken Exp $ *) +MODULE oocSysClock(* [FOREIGN "C"; LINK FILE "SysClock.c" END]*); +IMPORT SYSTEM; +(* SysClock - facilities for accessing a system clock that records the + date and time of day. + Copyright (C) 1996-1998 Michael Griebling + + This module is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2 of the + License, or (at your option) any later version. + + This module 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*) +(*<* Warnings := FALSE *>*) + +CONST + maxSecondParts* = 999; (* Most systems have just millisecond accuracy *) + + zoneMin* = -780; (* time zone minimum minutes *) + zoneMax* = 720; (* time zone maximum minutes *) + + localTime* = MIN(INTEGER); (* time zone is inactive & time is local *) + unknownZone* = localTime+1; (* time zone is unknown *) + + (* daylight savings mode values *) + unknown* = -1; (* current daylight savings status is unknown *) + inactive* = 0; (* daylight savings adjustments are not in effect *) + active* = 1; (* daylight savings adjustments are being used *) + +TYPE + (* The DateTime type is a system-independent time format whose fields + are defined as follows: + + year > 0 + month = 1 .. 12 + day = 1 .. 31 + hour = 0 .. 23 + minute = 0 .. 59 + second = 0 .. 59 + fractions = 0 .. maxSecondParts + zone = -780 .. 720 + *) + DateTime* = + RECORD + year*: INTEGER; + month*: SHORTINT; + day*: SHORTINT; + hour*: SHORTINT; + minute*: SHORTINT; + second*: SHORTINT; + summerTimeFlag*: SHORTINT; (* daylight savings mode (see above) *) + fractions*: INTEGER; (* parts of a second in milliseconds *) + zone*: INTEGER; (* Time zone differential factor which + is the number of minutes to add to + local time to obtain UTC or is set + to localTime when time zones are + inactive. *) + END; + +PROCEDURE -includeTime() + "#include "; + +PROCEDURE -includeiSysTime() + "#include "; + + +PROCEDURE -cangetclock() : BOOLEAN +"struct timeval t; return (BOOLEAN)(gettimeofday(&t, NULL) == 0);"; +(* +PROCEDURE CanGetClock*(): BOOLEAN; +(* Returns TRUE if a system clock can be read; FALSE otherwise. *) +*) +(* +PROCEDURE CanSetClock*(): BOOLEAN; +(* Returns TRUE if a system clock can be set; FALSE otherwise. *) +*) +(* +PROCEDURE IsValidDateTime* (d: DateTime): BOOLEAN; +(* Returns TRUE if the value of `d' represents a valid date and time; + FALSE otherwise. *) +*) +(* +PROCEDURE GetClock* (VAR userData: DateTime); +(* If possible, assigns system date and time of day to `userData' (i.e., + the local time is returned). Error returns 1 Jan 1970. *) + *) + (* +PROCEDURE SetClock* (userData: DateTime); +(* If possible, sets the system clock to the values of `userData'. *) +*) +(* +PROCEDURE MakeLocalTime * (VAR c: DateTime); +(* Fill in the daylight savings mode and time zone for calendar date `c'. + The fields `zone' and `summerTimeFlag' given in `c' are ignored, assuming + that the rest of the record describes a local time. + Note 1: On most Unix systems the time zone information is only available for + dates falling within approx. 1 Jan 1902 to 31 Dec 2037. Outside this range + the field `zone' will be set to the unspecified `localTime' value (see + above), and `summerTimeFlag' will be set to `unknown'. + Note 2: The time zone information might not be fully accurate for past (and + future) years that apply different DST rules than the current year. + Usually the current set of rules is used for _all_ years between 1902 and + 2037. + Note 3: With DST there is one hour in the year that happens twice: the + hour after which the clock is turned back for a full hour. It is undefined + which time zone will be selected for dates refering to this hour, i.e. + whether DST or normal time zone will be chosen. *) +*) + +PROCEDURE -gtod(VAR sec, usec : LONGINT) +" struct timeval tval; int res; res = gettimeofday(&tval, NULL); if (!res) { *sec = tval.tv_sec; *usec = tval.tv_usec; return 0; } else {*sec = 0; *usec = 0; return -1; }"; + +PROCEDURE GetTimeOfDay* (VAR sec, usec: LONGINT): LONGINT; +(* PRIVAT. Don't use this. Take Time.GetTime instead. + Equivalent to the C function `gettimeofday'. The return value is `0' on + success and `-1' on failure; in the latter case `sec' and `usec' are set to + zero. *) +BEGIN + gtod (sec, usec); +END GetTimeOfDay; + +END oocSysClock. diff --git a/src/lib/ooc/oocAscii.Mod b/src/lib/ooc/oocAscii.Mod new file mode 100644 index 00000000..8a1e87b0 --- /dev/null +++ b/src/lib/ooc/oocAscii.Mod @@ -0,0 +1,20 @@ +(* $Id: Ascii.Mod,v 1.1 1997/02/07 07:45:32 oberon1 Exp $ *) +MODULE oocAscii; (* Standard short character names for control chars. *) + +CONST + nul* = 00X; soh* = 01X; stx* = 02X; etx* = 03X; + eot* = 04X; enq* = 05X; ack* = 06X; bel* = 07X; + bs * = 08X; ht * = 09X; lf * = 0AX; vt * = 0BX; + ff * = 0CX; cr * = 0DX; so * = 0EX; si * = 0FX; + dle* = 01X; dc1* = 11X; dc2* = 12X; dc3* = 13X; + dc4* = 14X; nak* = 15X; syn* = 16X; etb* = 17X; + can* = 18X; em * = 19X; sub* = 1AX; esc* = 1BX; + fs * = 1CX; gs * = 1DX; rs * = 1EX; us * = 1FX; + del* = 7FX; + +CONST (* often used synonyms *) + sp * = " "; + xon* = dc1; + xoff* = dc3; + +END oocAscii. diff --git a/src/lib/ooc/oocCharClass.Mod b/src/lib/ooc/oocCharClass.Mod new file mode 100644 index 00000000..0f716eff --- /dev/null +++ b/src/lib/ooc/oocCharClass.Mod @@ -0,0 +1,95 @@ +(* $Id: CharClass.Mod,v 1.6 1999/10/03 11:43:57 ooc-devel Exp $ *) +MODULE oocCharClass; +(* Classification of values of the type CHAR. + Copyright (C) 1997-1998 Michael van Acken + + This module is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public License + as published by the Free Software Foundation; either version 2 of + the License, or (at your option) any later version. + + This module 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with OOC. If not, write to the Free Software Foundation, + 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +*) + +(* +Notes: +- This module boldly assumes ASCII character encoding. ;-) +- The value `eol' and the procedure `IsEOL' are not part of the Modula-2 + DIS. OOC defines them to fixed values for all its implementations, + independent of the target system. The string `systemEol' holds the target + system's end of line marker, which can be longer than one byte (but cannot + contain 0X). +*) + +IMPORT + Ascii := oocAscii; + +CONST + eol* = Ascii.lf; + (* the implementation-defined character used to represent end of line + internally for OOC *) + +VAR + systemEol-: ARRAY 3 OF CHAR; + (* End of line marker used by the target system for text files. The string + defined here can contain more than one character. For one character eol + markers, `systemEol' must not necessarily equal `eol'. Note that the + string cannot contain the termination character 0X. *) + + +PROCEDURE IsNumeric* (ch: CHAR): BOOLEAN; +(* Returns TRUE if and only if ch is classified as a numeric character *) + BEGIN + RETURN ("0" <= ch) & (ch <= "9") + END IsNumeric; + +PROCEDURE IsLetter* (ch: CHAR): BOOLEAN; +(* Returns TRUE if and only if ch is classified as a letter *) + BEGIN + RETURN ("a" <= ch) & (ch <= "z") OR ("A" <= ch) & (ch <= "Z") + END IsLetter; + +PROCEDURE IsUpper* (ch: CHAR): BOOLEAN; +(* Returns TRUE if and only if ch is classified as an upper case letter *) + BEGIN + RETURN ("A" <= ch) & (ch <= "Z") + END IsUpper; + +PROCEDURE IsLower* (ch: CHAR): BOOLEAN; +(* Returns TRUE if and only if ch is classified as a lower case letter *) + BEGIN + RETURN ("a" <= ch) & (ch <= "z") + END IsLower; + +PROCEDURE IsControl* (ch: CHAR): BOOLEAN; +(* Returns TRUE if and only if ch represents a control function *) + BEGIN + RETURN (ch < Ascii.sp) + END IsControl; + +PROCEDURE IsWhiteSpace* (ch: CHAR): BOOLEAN; +(* Returns TRUE if and only if ch represents a space character or a format + effector *) + BEGIN + RETURN (ch = Ascii.sp) OR (ch = Ascii.ff) OR (ch = Ascii.lf) OR + (ch = Ascii.cr) OR (ch = Ascii.ht) OR (ch = Ascii.vt) + END IsWhiteSpace; + + +PROCEDURE IsEol* (ch: CHAR): BOOLEAN; +(* Returns TRUE if and only if ch is the implementation-defined character used + to represent end of line internally for OOC. *) + BEGIN + RETURN (ch = eol) + END IsEol; + +BEGIN + systemEol[0] := Ascii.lf; systemEol[1] := 0X +END oocCharClass. diff --git a/src/lib/ooc/oocConvTypes.Mod b/src/lib/ooc/oocConvTypes.Mod new file mode 100644 index 00000000..cc0b83ab --- /dev/null +++ b/src/lib/ooc/oocConvTypes.Mod @@ -0,0 +1,33 @@ +(* $Id: ConvTypes.Mod,v 1.1 1997/02/07 07:45:32 oberon1 Exp $ *) +MODULE oocConvTypes; + + (* Common types used in the string conversion modules *) + +TYPE + ConvResults*= SHORTINT; (* Values of this type are used to express the format of a string *) + +CONST + strAllRight*=0; (* the string format is correct for the corresponding conversion *) + strOutOfRange*=1; (* the string is well-formed but the value cannot be represented *) + strWrongFormat*=2; (* the string is in the wrong format for the conversion *) + strEmpty*=3; (* the given string is empty *) + + +TYPE + ScanClass*= SHORTINT; (* Values of this type are used to classify input to finite state scanners *) + +CONST + padding*=0; (* a leading or padding character at this point in the scan - ignore it *) + valid*=1; (* a valid character at this point in the scan - accept it *) + invalid*=2; (* an invalid character at this point in the scan - reject it *) + terminator*=3; (* a terminating character at this point in the scan (not part of token) *) + + +TYPE + ScanState*=POINTER TO ScanDesc; + ScanDesc*= (* The type of lexical scanning control procedures *) + RECORD + p*: PROCEDURE (ch: CHAR; VAR cl: ScanClass; VAR st: ScanState); + END; + +END oocConvTypes. diff --git a/src/lib/ooc/oocIntConv.Mod b/src/lib/ooc/oocIntConv.Mod new file mode 100644 index 00000000..1f6532ab --- /dev/null +++ b/src/lib/ooc/oocIntConv.Mod @@ -0,0 +1,240 @@ +(* $Id: IntConv.Mod,v 1.5 2002/05/10 23:06:58 ooc-devel Exp $ *) +MODULE oocIntConv; + + (* + IntConv - Low-level integer/string conversions. + Copyright (C) 1995 Michael Griebling + Copyright (C) 2000, 2002 Michael van Acken + + This module is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2 of the + License, or (at your option) any later version. + + This module 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) + +IMPORT + Char := oocCharClass, Str := oocStrings, Conv := oocConvTypes; + +TYPE + ConvResults = Conv.ConvResults; (* strAllRight, strOutOfRange, strWrongFormat, strEmpty *) + +CONST + strAllRight*=Conv.strAllRight; (* the string format is correct for the corresponding conversion *) + strOutOfRange*=Conv.strOutOfRange; (* the string is well-formed but the value cannot be represented *) + strWrongFormat*=Conv.strWrongFormat; (* the string is in the wrong format for the conversion *) + strEmpty*=Conv.strEmpty; (* the given string is empty *) + + +VAR + W, S, SI: Conv.ScanState; + +(* internal state machine procedures *) + +PROCEDURE WState(inputCh: CHAR; VAR chClass: Conv.ScanClass; VAR nextState: Conv.ScanState); +BEGIN + IF Char.IsNumeric(inputCh) THEN chClass:=Conv.valid; nextState:=W + ELSE chClass:=Conv.terminator; nextState:=NIL + END +END WState; + + +PROCEDURE SState(inputCh: CHAR; VAR chClass: Conv.ScanClass; VAR nextState: Conv.ScanState); +BEGIN + IF Char.IsNumeric(inputCh) THEN chClass:=Conv.valid; nextState:=W + ELSE chClass:=Conv.invalid; nextState:=S + END +END SState; + + +PROCEDURE ScanInt*(inputCh: CHAR; VAR chClass: Conv.ScanClass; VAR nextState: Conv.ScanState); + (* + Represents the start state of a finite state scanner for signed whole + numbers - assigns class of inputCh to chClass and a procedure + representing the next state to nextState. + + The call of ScanInt(inputCh,chClass,nextState) shall assign values to + `chClass' and `nextState' depending upon the value of `inputCh' as + shown in the following table. + + Procedure inputCh chClass nextState (a procedure + with behaviour of) + --------- --------- -------- --------- + ScanInt space padding ScanInt + sign valid SState + decimal digit valid WState + other invalid ScanInt + SState decimal digit valid WState + other invalid SState + WState decimal digit valid WState + other terminator -- + + NOTE 1 -- The procedure `ScanInt' corresponds to the start state of a + finite state machine to scan for a character sequence that forms a + signed whole number. Like `ScanCard' and the corresponding procedures + in the other low-level string conversion modules, it may be used to + control the actions of a finite state interpreter. As long as the + value of `chClass' is other than `terminator' or `invalid', the + interpreter should call the procedure whose value is assigned to + `nextState' by the previous call, supplying the next character from + the sequence to be scanned. It may be appropriate for the interpreter + to ignore characters classified as `invalid', and proceed with the + scan. This would be the case, for example, with interactive input, if + only valid characters are being echoed in order to give interactive + users an immediate indication of badly-formed data. + If the character sequence end before one is classified as a + terminator, the string-terminator character should be supplied as + input to the finite state scanner. If the preceeding character + sequence formed a complete number, the string-terminator will be + classified as `terminator', otherwise it will be classified as + `invalid'. + + For examples of how ScanInt is used, refer to the FormatInt and + ValueInt procedures below. + *) +BEGIN + IF Char.IsWhiteSpace(inputCh) THEN chClass:=Conv.padding; nextState:=SI + ELSIF (inputCh="+") OR (inputCh="-") THEN chClass:=Conv.valid; nextState:=S + ELSIF Char.IsNumeric(inputCh) THEN chClass:=Conv.valid; nextState:=W + ELSE chClass:=Conv.invalid; nextState:=SI + END +END ScanInt; + + +PROCEDURE FormatInt*(str: ARRAY OF CHAR): ConvResults; + (* Returns the format of the string value for conversion to LONGINT. *) +VAR + ch: CHAR; + int: LONGINT; + len, index, digit: INTEGER; + state: Conv.ScanState; + positive: BOOLEAN; + prev, class: Conv.ScanClass; +BEGIN + len:=Str.Length(str); index:=0; + class:=Conv.padding; prev:=class; + state:=SI; int:=0; positive:=TRUE; + LOOP + ch:=str[index]; + state.p(ch, class, state); + CASE class OF + | Conv.padding: (* nothing to do *) + | Conv.valid: + IF ch="-" THEN positive:=FALSE + ELSIF ch="+" THEN positive:=TRUE + ELSE (* must be a digit *) + digit:=ORD(ch)-ORD("0"); + IF positive THEN + IF int>(MAX(LONGINT)-digit) DIV 10 THEN RETURN strOutOfRange END; + int:=int*10+digit + ELSE + IF int>(MIN(LONGINT)+digit) DIV 10 THEN + int:=int*10-digit + ELSIF (int < (MIN(LONGINT)+digit) DIV 10) OR + ((int = (MIN(LONGINT)+digit) DIV 10) & + ((MIN(LONGINT)+digit) MOD 10 # 0)) THEN + RETURN strOutOfRange + ELSE + int:=int*10-digit + END + END + END + + | Conv.invalid: + IF (prev = Conv.padding) THEN + RETURN strEmpty; + ELSE + RETURN strWrongFormat; + END; + + | Conv.terminator: + IF (ch = 0X) THEN + RETURN strAllRight; + ELSE + RETURN strWrongFormat; + END; + END; + prev:=class; INC(index) + END; +END FormatInt; + + +PROCEDURE ValueInt*(str: ARRAY OF CHAR): LONGINT; + (* + Returns the value corresponding to the signed whole number string value + str if str is well-formed; otherwise raises the WholeConv exception. + *) +VAR + ch: CHAR; + len, index, digit: INTEGER; + int: LONGINT; + state: Conv.ScanState; + positive: BOOLEAN; + class: Conv.ScanClass; +BEGIN + IF FormatInt(str)=strAllRight THEN + len:=Str.Length(str); index:=0; + state:=SI; int:=0; positive:=TRUE; + FOR index:=0 TO len-1 DO + ch:=str[index]; + state.p(ch, class, state); + IF class=Conv.valid THEN + IF ch="-" THEN positive:=FALSE + ELSIF ch="+" THEN positive:=TRUE + ELSE (* must be a digit *) + digit:=ORD(ch)-ORD("0"); + IF positive THEN int:=int*10+digit + ELSE int:=int*10-digit + END + END + END + END; + RETURN int + ELSE RETURN 0 (* raise exception here *) + END +END ValueInt; + + +PROCEDURE LengthInt*(int: LONGINT): INTEGER; + (* + Returns the number of characters in the string representation of int. + This value corresponds to the capacity of an array `str' which is + of the minimum capacity needed to avoid truncation of the result in + the call IntStr.IntToStr(int,str). + *) +VAR + cnt: INTEGER; +BEGIN + IF int=MIN(LONGINT) THEN int:=-(int+1); cnt:=1 (* argh!! *) + ELSIF int<=0 THEN int:=-int; cnt:=1 + ELSE cnt:=0 + END; + WHILE int>0 DO INC(cnt); int:=int DIV 10 END; + RETURN cnt +END LengthInt; + + +PROCEDURE IsIntConvException*(): BOOLEAN; + (* Returns TRUE if the current coroutine is in the exceptional execution + state because of the raising of the IntConv exception; otherwise + returns FALSE. + *) +BEGIN + RETURN FALSE +END IsIntConvException; + + +BEGIN + (* kludge necessary because of recursive procedure declaration *) + NEW(S); NEW(W); NEW(SI); + S.p:=SState; W.p:=WState; SI.p:=ScanInt +END oocIntConv. diff --git a/src/lib/ooc/oocIntStr.Mod b/src/lib/ooc/oocIntStr.Mod new file mode 100644 index 00000000..ec98f128 --- /dev/null +++ b/src/lib/ooc/oocIntStr.Mod @@ -0,0 +1,100 @@ +(* $Id: IntStr.Mod,v 1.4 1999/09/02 13:07:47 acken Exp $ *) +MODULE oocIntStr; +(* IntStr - Integer-number/string conversions. + Copyright (C) 1995 Michael Griebling + + This module is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2 of the + License, or (at your option) any later version. + + This module 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*) + +IMPORT + Conv := oocConvTypes, IntConv := oocIntConv; + +TYPE + ConvResults*= Conv.ConvResults; + (* possible values: strAllRight, strOutOfRange, strWrongFormat, strEmpty *) + +CONST + strAllRight*=Conv.strAllRight; + (* the string format is correct for the corresponding conversion *) + strOutOfRange*=Conv.strOutOfRange; + (* the string is well-formed but the value cannot be represented *) + strWrongFormat*=Conv.strWrongFormat; + (* the string is in the wrong format for the conversion *) + strEmpty*=Conv.strEmpty; + (* the given string is empty *) + + +(* the string form of a signed whole number is + ["+" | "-"] decimal_digit {decimal_digit} +*) + +PROCEDURE StrToInt*(str: ARRAY OF CHAR; VAR int: LONGINT; VAR res: ConvResults); +(* Ignores any leading spaces in `str'. If the subsequent characters in `str' + are in the format of a signed whole number, assigns a corresponding value to + `int'. Assigns a value indicating the format of `str' to `res'. *) +BEGIN + res:=IntConv.FormatInt(str); + IF (res = strAllRight) THEN + int:=IntConv.ValueInt(str) + END +END StrToInt; + + +PROCEDURE Reverse (VAR str : ARRAY OF CHAR; start, end : INTEGER); +(* Reverses order of characters in the interval [start..end]. *) +VAR + h : CHAR; +BEGIN + WHILE start < end DO + h := str[start]; str[start] := str[end]; str[end] := h; + INC(start); DEC(end) + END +END Reverse; + + +PROCEDURE IntToStr*(int: LONGINT; VAR str: ARRAY OF CHAR); +(* Converts the value of `int' to string form and copies the possibly truncated + result to `str'. *) +CONST + maxLength = 11; (* maximum number of digits representing a LONGINT value *) +VAR + b : ARRAY maxLength+1 OF CHAR; + s, e: INTEGER; +BEGIN + (* build representation in string 'b' *) + IF int = MIN(LONGINT) THEN (* smallest LONGINT, -int is an overflow *) + b := "-2147483648"; + e := 11 + ELSE + IF int < 0 THEN (* negative sign *) + b[0] := "-"; int := -int; s := 1 + ELSE (* no sign *) + s := 0 + END; + e := s; (* 's' holds starting position of string *) + REPEAT + b[e] := CHR(int MOD 10+ORD("0")); + int := int DIV 10; + INC(e) + UNTIL int = 0; + b[e] := 0X; + Reverse(b, s, e-1) + END; + + COPY(b, str) (* truncate output if necessary *) +END IntToStr; + +END oocIntStr. + diff --git a/src/lib/ooc/oocOakStrings.Mod b/src/lib/ooc/oocOakStrings.Mod new file mode 100644 index 00000000..ae603dd7 --- /dev/null +++ b/src/lib/ooc/oocOakStrings.Mod @@ -0,0 +1,181 @@ +(* $Id: OakStrings.Mod,v 1.3 1999/10/03 11:44:53 ooc-devel Exp $ *) +MODULE oocOakStrings; +(* Oakwood compliant string manipulation facilities. + Copyright (C) 1998, 1999 Michael van Acken + + This module is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public License + as published by the Free Software Foundation; either version 2 of + the License, or (at your option) any later version. + + This module 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with OOC. If not, write to the Free Software Foundation, + 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +*) +(* see also [Oakwood Guidelines, revision 1A] +Module Strings provides a set of operations on strings (i.e., on string +constants and character arrays, both of wich contain the character 0X as a +terminator). All positions in strings start at 0. + +Remarks +String assignments and string comparisons are already supported by the language +Oberon-2. +*) + +PROCEDURE Length* (s: ARRAY OF CHAR): INTEGER; +(* Returns the number of characters in s up to and excluding the first 0X. *) + VAR + i: INTEGER; + BEGIN + i := 0; + WHILE (s[i] # 0X) DO + INC (i) + END; + RETURN i + END Length; + +PROCEDURE Insert* (src: ARRAY OF CHAR; pos: INTEGER; VAR dst: ARRAY OF CHAR); +(* Inserts the string src into the string dst at position pos (0<=pos<= + Length(dst)). If pos=Length(dst), src is appended to dst. If the size of + dst is not large enough to hold the result of the operation, the result is + truncated so that dst is always terminated with a 0X. *) + VAR + lenSrc, lenDst, maxDst, i: INTEGER; + BEGIN + lenDst := Length (dst); + lenSrc := Length (src); + maxDst := SHORT (LEN (dst))-1; + IF (pos+lenSrc < maxDst) THEN + IF (lenDst+lenSrc > maxDst) THEN + (* 'dst' too long, truncate it *) + lenDst := maxDst-lenSrc; + dst[lenDst] := 0X + END; + (* 'src' is inserted inside of 'dst', move tail section *) + FOR i := lenDst TO pos BY -1 DO + dst[i+lenSrc] := dst[i] + END + ELSE + dst[maxDst] := 0X; + lenSrc := maxDst-pos + END; + (* copy characters from 'src' to 'dst' *) + FOR i := 0 TO lenSrc-1 DO + dst[pos+i] := src[i] + END + END Insert; + +PROCEDURE Append* (s: ARRAY OF CHAR; VAR dst: ARRAY OF CHAR); +(* Has the same effect as Insert(s, Length(dst), dst). *) + VAR + sp, dp, m: INTEGER; + BEGIN + m := SHORT (LEN(dst))-1; (* max length of dst *) + dp := Length (dst); (* append s at position dp *) + sp := 0; + WHILE (dp < m) & (s[sp] # 0X) DO (* copy chars from s to dst *) + dst[dp] := s[sp]; + INC (dp); + INC (sp) + END; + dst[dp] := 0X (* terminate dst *) + END Append; + +PROCEDURE Delete* (VAR s: ARRAY OF CHAR; pos, n: INTEGER); +(* Deletes n characters from s starting at position pos (0<=pos<=Length(s)). + If n>Length(s)-pos, the new length of s is pos. *) + VAR + lenStr, i: INTEGER; + BEGIN + lenStr := Length (s); + IF (pos+n < lenStr) THEN + FOR i := pos TO lenStr-n DO + s[i] := s[i+n] + END + ELSE + s[pos] := 0X + END + END Delete; + +PROCEDURE Replace* (src: ARRAY OF CHAR; pos: INTEGER; VAR dst: ARRAY OF CHAR); +(* Has the same effect as Delete(dst, pos, Length(src)) followed by an + Insert(src, pos, dst). *) + VAR + sp, maxDst: INTEGER; + addNull: BOOLEAN; + BEGIN + maxDst := SHORT (LEN (dst))-1; (* max length of dst *) + addNull := FALSE; + sp := 0; + WHILE (src[sp] # 0X) & (pos < maxDst) DO (* copy chars from src to dst *) + (* set addNull=TRUE if we write over the end of dst *) + addNull := addNull OR (dst[pos] = 0X); + dst[pos] := src[sp]; + INC (pos); + INC (sp) + END; + IF addNull THEN + dst[pos] := 0X (* terminate dst *) + END + END Replace; + +PROCEDURE Extract* (src: ARRAY OF CHAR; pos, n: INTEGER; VAR dst: ARRAY OF CHAR); +(* Extracts a substring dst with n characters from position pos (0<=pos<= + Length(src)) in src. If n>Length(src)-pos, dst is only the part of src from + pos to the end of src, i.e. Length(src)-1. If the size of dst is not large + enough to hold the result of the operation, the result is truncated so that + dst is always terminated with a 0X. *) + VAR + i: INTEGER; + BEGIN + (* set n to Max(n, LEN(dst)-1) *) + IF (n > LEN(dst)) THEN + n := SHORT (LEN(dst))-1 + END; + (* copy upto n characters into dst *) + i := 0; + WHILE (i < n) & (src[pos+i] # 0X) DO + dst[i] := src[pos+i]; + INC (i) + END; + dst[i] := 0X + END Extract; + +PROCEDURE Pos* (pat, s: ARRAY OF CHAR; pos: INTEGER): INTEGER; +(* Returns the position of the first occurrence of pat in s. Searching starts + at position pos. If pat is not found, -1 is returned. *) + VAR + posPat: INTEGER; + BEGIN + posPat := 0; + LOOP + IF (pat[posPat] = 0X) THEN (* reached end of pattern *) + RETURN pos-posPat + ELSIF (s[pos] = 0X) THEN (* end of string (but not of pattern) *) + RETURN -1 + ELSIF (s[pos] = pat[posPat]) THEN (* characters identic, compare next one *) + INC (pos); INC (posPat) + ELSE (* difference found: reset indices and restart *) + pos := pos-posPat+1; posPat := 0 + END + END + END Pos; + +PROCEDURE Cap* (VAR s: ARRAY OF CHAR); +(* Replaces each lower case letter with s by its upper case equivalent. *) + VAR + i: INTEGER; + BEGIN + i := 0; + WHILE (s[i] # 0X) DO + s[i] := CAP (s[i]); + INC (i) + END + END Cap; + +END oocOakStrings. diff --git a/src/lib/ooc/oocStrings.Mod b/src/lib/ooc/oocStrings.Mod new file mode 100644 index 00000000..add23621 --- /dev/null +++ b/src/lib/ooc/oocStrings.Mod @@ -0,0 +1,497 @@ +(* $Id: Strings.Mod,v 1.4 1999/10/03 11:45:07 ooc-devel Exp $ *) +MODULE oocStrings; +(* Facilities for manipulating strings. + Copyright (C) 1996, 1997 Michael van Acken + + This module is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public License + as published by the Free Software Foundation; either version 2 of + the License, or (at your option) any later version. + + This module 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with OOC. If not, write to the Free Software Foundation, + 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +*) + + +(* +Notes: + +Unlike Modula-2, the behaviour of a procedure is undefined, if one of its input +parameters is an unterminated character array. All of the following procedures +expect to get 0X terminated strings, and will return likewise terminated +strings. + +All input parameters that represent an array index or a length are expected to +be non-negative. In the descriptions below these restrictions are stated as +pre-conditions of the procedures, but they aren't checked explicitly. If this +module is compiled with enable run-time index checks some illegal input values +may be caught. By default it is installed _without_ index checks. + +Differences from the Strings module of the Oakwood Guidelines: +- `Delete' is defined for `startPos' greater than `Length(stringVar)' +- `Insert' is defined for `startPos' greater than `Length(destination)' +- `Replace' is defined for `startPos' greater than `Length(destination)' +- `Replace' will never return a string in `destination' that is longer + than the initial value of `destination' before the call. +- `Capitalize' replaces `Cap' +- `FindNext' replaces `Pos' with slightly changed call pattern +- the `CanSomethingAll' predicates are new +- also new: `Compare', `Equal', `FindPrev', and `FindDiff' +*) + + +TYPE + CompareResults* = SHORTINT; + +CONST + (* values returned by `Compare' *) + less* = -1; + equal* = 0; + greater* = 1; + + +PROCEDURE Length* (stringVal: ARRAY OF CHAR): INTEGER; +(* Returns the length of `stringVal'. This is equal to the number of + characters in `stringVal' up to and excluding the first 0X. *) + VAR + i: INTEGER; + BEGIN + i := 0; + WHILE (stringVal[i] # 0X) DO + INC (i) + END; + RETURN i + END Length; + + + +(* +The following seven procedures construct a string value, and attempt to assign +it to a variable parameter. They all have the property that if the length of +the constructed string value exceeds the capacity of the variable parameter, a +truncated value is assigned. The constructed string always ends with the +string terminator 0X. +*) + +PROCEDURE Assign* (source: ARRAY OF CHAR; VAR destination: ARRAY OF CHAR); +(* Copies `source' to `destination'. Equivalent to the predefined procedure + COPY. Unlike COPY, this procedure can be assigned to a procedure + variable. *) + VAR + i: INTEGER; + BEGIN + i := -1; + REPEAT + INC (i); + destination[i] := source[i] + UNTIL (destination[i] = 0X) OR (i = LEN (destination)-1); + destination[i] := 0X + END Assign; + +PROCEDURE Extract* (source: ARRAY OF CHAR; startPos, numberToExtract: INTEGER; + VAR destination: ARRAY OF CHAR); +(* Copies at most `numberToExtract' characters from `source' to `destination', + starting at position `startPos' in `source'. An empty string value will be + extracted if `startPos' is greater than or equal to `Length(source)'. + pre: `startPos' and `numberToExtract' are not negative. *) + VAR + sourceLength, i: INTEGER; + BEGIN + (* make sure that we get an empty string if `startPos' refers to an array + index beyond `Length (source)' *) + sourceLength := Length (source); + IF (startPos > sourceLength) THEN + startPos := sourceLength + END; + + (* make sure that `numberToExtract' doesn't exceed the capacity + of `destination' *) + IF (numberToExtract >= LEN (destination)) THEN + numberToExtract := SHORT (LEN (destination))-1 + END; + + (* copy up to `numberToExtract' characters to `destination' *) + i := 0; + WHILE (i < numberToExtract) & (source[startPos+i] # 0X) DO + destination[i] := source[startPos+i]; + INC (i) + END; + destination[i] := 0X + END Extract; + +PROCEDURE Delete* (VAR stringVar: ARRAY OF CHAR; + startPos, numberToDelete: INTEGER); +(* Deletes at most `numberToDelete' characters from `stringVar', starting at + position `startPos'. The string value in `stringVar' is not altered if + `startPos' is greater than or equal to `Length(stringVar)'. + pre: `startPos' and `numberToDelete' are not negative. *) + VAR + stringLength, i: INTEGER; + BEGIN + stringLength := Length (stringVar); + IF (startPos+numberToDelete < stringLength) THEN + (* `stringVar' has remaining characters beyond the deleted section; + these have to be moved forward by `numberToDelete' characters *) + FOR i := startPos TO stringLength-numberToDelete DO + stringVar[i] := stringVar[i+numberToDelete] + END + ELSIF (startPos < stringLength) THEN + stringVar[startPos] := 0X + END + END Delete; + +PROCEDURE Insert* (source: ARRAY OF CHAR; startPos: INTEGER; + VAR destination: ARRAY OF CHAR); +(* Inserts `source' into `destination' at position `startPos'. After the call + `destination' contains the string that is contructed by first splitting + `destination' at the position `startPos' and then concatenating the first + half, `source', and the second half. The string value in `destination' is + not altered if `startPos' is greater than `Length(source)'. If `startPos = + Length(source)', then `source' is appended to `destination'. + pre: `startPos' is not negative. *) + VAR + sourceLength, destLength, destMax, i: INTEGER; + BEGIN + destLength := Length (destination); + sourceLength := Length (source); + destMax := SHORT (LEN (destination))-1; + IF (startPos+sourceLength < destMax) THEN + (* `source' is inserted inside of `destination' *) + IF (destLength+sourceLength > destMax) THEN + (* `destination' too long, truncate it *) + destLength := destMax-sourceLength; + destination[destLength] := 0X + END; + + (* move tail section of `destination' *) + FOR i := destLength TO startPos BY -1 DO + destination[i+sourceLength] := destination[i] + END + ELSIF (startPos <= destLength) THEN + (* `source' replaces `destination' from `startPos' on *) + destination[destMax] := 0X; (* set string terminator *) + sourceLength := destMax-startPos (* truncate `source' *) + ELSE (* startPos > destLength: no change in `destination' *) + sourceLength := 0 + END; + (* copy characters from `source' to `destination' *) + FOR i := 0 TO sourceLength-1 DO + destination[startPos+i] := source[i] + END + END Insert; + +PROCEDURE Replace* (source: ARRAY OF CHAR; startPos: INTEGER; + VAR destination: ARRAY OF CHAR); +(* Copies `source' into `destination', starting at position `startPos'. Copying + stops when all of `source' has been copied, or when the last character of + the string value in `destination' has been replaced. The string value in + `destination' is not altered if `startPos' is greater than or equal to + `Length(source)'. + pre: `startPos' is not negative. *) + VAR + destLength, i: INTEGER; + BEGIN + destLength := Length (destination); + IF (startPos < destLength) THEN + (* if `startPos' is inside `destination', then replace characters until + the end of `source' or `destination' is reached *) + i := 0; + WHILE (startPos # destLength) & (source[i] # 0X) DO + destination[startPos] := source[i]; + INC (startPos); + INC (i) + END + END + END Replace; + +PROCEDURE Append* (source: ARRAY OF CHAR; VAR destination: ARRAY OF CHAR); +(* Appends source to destination. *) + VAR + destLength, i: INTEGER; + BEGIN + destLength := Length (destination); + i := 0; + WHILE (destLength < LEN (destination)-1) & (source[i] # 0X) DO + destination[destLength] := source[i]; + INC (destLength); + INC (i) + END; + destination[destLength] := 0X + END Append; + +PROCEDURE Concat* (source1, source2: ARRAY OF CHAR; + VAR destination: ARRAY OF CHAR); +(* Concatenates `source2' onto `source1' and copies the result into + `destination'. *) + VAR + i, j: INTEGER; + BEGIN + (* copy `source1' into `destination' *) + i := 0; + WHILE (source1[i] # 0X) & (i < LEN(destination)-1) DO + destination[i] := source1[i]; + INC (i) + END; + + (* append `source2' to `destination' *) + j := 0; + WHILE (source2[j] # 0X) & (i < LEN (destination)-1) DO + destination[i] := source2[j]; + INC (j); INC (i) + END; + destination[i] := 0X + END Concat; + + + +(* +The following predicates provide for pre-testing of the operation-completion +conditions for the procedures above. +*) + +PROCEDURE CanAssignAll* (sourceLength: INTEGER; VAR destination: ARRAY OF CHAR): BOOLEAN; +(* Returns TRUE if a number of characters, indicated by `sourceLength', will + fit into `destination'; otherwise returns FALSE. + pre: `sourceLength' is not negative. *) + BEGIN + RETURN (sourceLength < LEN (destination)) + END CanAssignAll; + +PROCEDURE CanExtractAll* (sourceLength, startPos, numberToExtract: INTEGER; + VAR destination: ARRAY OF CHAR): BOOLEAN; +(* Returns TRUE if there are `numberToExtract' characters starting at + `startPos' and within the `sourceLength' of some string, and if the capacity + of `destination' is sufficient to hold `numberToExtract' characters; + otherwise returns FALSE. + pre: `sourceLength', `startPos', and `numberToExtract' are not negative. *) + BEGIN + RETURN (startPos+numberToExtract <= sourceLength) & + (numberToExtract < LEN (destination)) + END CanExtractAll; + +PROCEDURE CanDeleteAll* (stringLength, startPos, + numberToDelete: INTEGER): BOOLEAN; +(* Returns TRUE if there are `numberToDelete' characters starting at `startPos' + and within the `stringLength' of some string; otherwise returns FALSE. + pre: `stringLength', `startPos' and `numberToDelete' are not negative. *) + BEGIN + RETURN (startPos+numberToDelete <= stringLength) + END CanDeleteAll; + +PROCEDURE CanInsertAll* (sourceLength, startPos: INTEGER; + VAR destination: ARRAY OF CHAR): BOOLEAN; +(* Returns TRUE if there is room for the insertion of `sourceLength' + characters from some string into `destination' starting at `startPos'; + otherwise returns FALSE. + pre: `sourceLength' and `startPos' are not negative. *) + VAR + lenDestination: INTEGER; + BEGIN + lenDestination := Length (destination); + RETURN (startPos <= lenDestination) & + (sourceLength+lenDestination < LEN (destination)) + END CanInsertAll; + +PROCEDURE CanReplaceAll* (sourceLength, startPos: INTEGER; + VAR destination: ARRAY OF CHAR): BOOLEAN; +(* Returns TRUE if there is room for the replacement of `sourceLength' + characters in `destination' starting at `startPos'; otherwise returns FALSE. + pre: `sourceLength' and `startPos' are not negative. *) + BEGIN + RETURN (sourceLength+startPos <= Length(destination)) + END CanReplaceAll; + +PROCEDURE CanAppendAll* (sourceLength: INTEGER; + VAR destination: ARRAY OF CHAR): BOOLEAN; +(* Returns TRUE if there is sufficient room in `destination' to append a string + of length `sourceLength' to the string in `destination'; otherwise returns + FALSE. + pre: `sourceLength' is not negative. *) + BEGIN + RETURN (Length (destination)+sourceLength < LEN (destination)) + END CanAppendAll; + +PROCEDURE CanConcatAll* (source1Length, source2Length: INTEGER; + VAR destination: ARRAY OF CHAR): BOOLEAN; +(* Returns TRUE if there is sufficient room in `destination' for a two strings + of lengths `source1Length' and `source2Length'; otherwise returns FALSE. + pre: `source1Length' and `source2Length' are not negative. *) + BEGIN + RETURN (source1Length+source2Length < LEN (destination)) + END CanConcatAll; + + + +(* +The following type and procedures provide for the comparison of string values, +and for the location of substrings within strings. +*) + +PROCEDURE Compare* (stringVal1, stringVal2: ARRAY OF CHAR): CompareResults; +(* Returns `less', `equal', or `greater', according as `stringVal1' is + lexically less than, equal to, or greater than `stringVal2'. + Note that Oberon-2 already contains predefined comparison operators on + strings. *) + VAR + i: INTEGER; + BEGIN + i := 0; + WHILE (stringVal1[i] # 0X) & (stringVal1[i] = stringVal2[i]) DO + INC (i) + END; + IF (stringVal1[i] < stringVal2[i]) THEN + RETURN less + ELSIF (stringVal1[i] > stringVal2[i]) THEN + RETURN greater + ELSE + RETURN equal + END + END Compare; + +PROCEDURE Equal* (stringVal1, stringVal2: ARRAY OF CHAR): BOOLEAN; +(* Returns `stringVal1 = stringVal2'. Unlike the predefined operator `=', this + procedure can be assigned to a procedure variable. *) + VAR + i: INTEGER; + BEGIN + i := 0; + WHILE (stringVal1[i] # 0X) & (stringVal1[i] = stringVal2[i]) DO + INC (i) + END; + RETURN (stringVal1[i] = 0X) & (stringVal2[i] = 0X) + END Equal; + +PROCEDURE FindNext* (pattern, stringToSearch: ARRAY OF CHAR; startPos: INTEGER; + VAR patternFound: BOOLEAN; VAR posOfPattern: INTEGER); +(* Looks forward for next occurrence of `pattern' in `stringToSearch', starting + the search at position `startPos'. If `startPos < Length(stringToSearch)' + and `pattern' is found, `patternFound' is returned as TRUE, and + `posOfPattern' contains the start position in `stringToSearch' of `pattern', + a value in the range [startPos..Length(stringToSearch)-1]. Otherwise + `patternFound' is returned as FALSE, and `posOfPattern' is unchanged. + If `startPos > Length(stringToSearch)-Length(Pattern)' then `patternFound' + is returned as FALSE. + pre: `startPos' is not negative. *) + VAR + patternPos: INTEGER; + BEGIN + IF (startPos < Length (stringToSearch)) THEN + patternPos := 0; + LOOP + IF (pattern[patternPos] = 0X) THEN + (* reached end of pattern *) + patternFound := TRUE; + posOfPattern := startPos-patternPos; + EXIT + ELSIF (stringToSearch[startPos] = 0X) THEN + (* end of string (but not of pattern) *) + patternFound := FALSE; + EXIT + ELSIF (stringToSearch[startPos] = pattern[patternPos]) THEN + (* characters identic, compare next one *) + INC (startPos); + INC (patternPos) + ELSE + (* difference found: reset indices and restart *) + startPos := startPos-patternPos+1; + patternPos := 0 + END + END + ELSE + patternFound := FALSE + END + END FindNext; + +PROCEDURE FindPrev* (pattern, stringToSearch: ARRAY OF CHAR; startPos: INTEGER; + VAR patternFound: BOOLEAN; VAR posOfPattern: INTEGER); +(* Looks backward for the previous occurrence of `pattern' in `stringToSearch' + and returns the position of the first character of the `pattern' if found. + The search for the pattern begins at `startPos'. If `pattern' is found, + `patternFound' is returned as TRUE, and `posOfPattern' contains the start + position in `stringToSearch' of pattern in the range [0..startPos]. + Otherwise `patternFound' is returned as FALSE, and `posOfPattern' is + unchanged. + The pattern might be found at the given value of `startPos'. The search + will fail if `startPos' is negative. + If `startPos > Length(stringToSearch)-Length(pattern)' the whole string + value is searched. *) + VAR + patternPos, stringLength, patternLength: INTEGER; + BEGIN + (* correct `startPos' if it is larger than the possible searching range *) + stringLength := Length (stringToSearch); + patternLength := Length (pattern); + IF (startPos > stringLength-patternLength) THEN + startPos := stringLength-patternLength + END; + + IF (startPos >= 0) THEN + patternPos := 0; + LOOP + IF (pattern[patternPos] = 0X) THEN + (* reached end of pattern *) + patternFound := TRUE; + posOfPattern := startPos-patternPos; + EXIT + ELSIF (stringToSearch[startPos] # pattern[patternPos]) THEN + (* characters differ: reset indices and restart *) + IF (startPos > patternPos) THEN + startPos := startPos-patternPos-1; + patternPos := 0 + ELSE + (* reached beginning of `stringToSearch' without finding a match *) + patternFound := FALSE; + EXIT + END + ELSE (* characters identic, compare next one *) + INC (startPos); + INC (patternPos) + END + END + ELSE + patternFound := FALSE + END + END FindPrev; + +PROCEDURE FindDiff* (stringVal1, stringVal2: ARRAY OF CHAR; + VAR differenceFound: BOOLEAN; + VAR posOfDifference: INTEGER); +(* Compares the string values in `stringVal1' and `stringVal2' for differences. + If they are equal, `differenceFound' is returned as FALSE, and TRUE + otherwise. If `differenceFound' is TRUE, `posOfDifference' is set to the + position of the first difference; otherwise `posOfDifference' is unchanged. +*) + VAR + i: INTEGER; + BEGIN + i := 0; + WHILE (stringVal1[i] # 0X) & (stringVal1[i] = stringVal2[i]) DO + INC (i) + END; + differenceFound := (stringVal1[i] # 0X) OR (stringVal2[i] # 0X); + IF differenceFound THEN + posOfDifference := i + END + END FindDiff; + + +PROCEDURE Capitalize* (VAR stringVar: ARRAY OF CHAR); +(* Applies the function CAP to each character of the string value in + `stringVar'. *) + VAR + i: INTEGER; + BEGIN + i := 0; + WHILE (stringVar[i] # 0X) DO + stringVar[i] := CAP (stringVar[i]); + INC (i) + END + END Capitalize; + +END oocStrings. diff --git a/src/lib/ooc/oocStrings2.Mod b/src/lib/ooc/oocStrings2.Mod new file mode 100644 index 00000000..2e3f98fd --- /dev/null +++ b/src/lib/ooc/oocStrings2.Mod @@ -0,0 +1,100 @@ +(* This module is obsolete. Don't use it. *) +MODULE oocStrings2; + +IMPORT + Strings := oocStrings; + + +PROCEDURE AppendChar* (ch: CHAR; VAR dst: ARRAY OF CHAR); +(* Appends 'ch' to string 'dst' (if Length(dst)=0 *) +BEGIN + t.msecs:=msecs MOD msecPerDay; + t.days:=days + msecs DIV msecPerDay +END InitTimeStamp; + +PROCEDURE GetTime* (VAR t: TimeStamp); +(* Set `t' to the current time of day. In case of failure (i.e. if + SysClock.CanGetClock() is FALSE) the time 00:00 UTC on Jan 1 1970 is + returned. This procedure is typically much faster than doing + SysClock.GetClock followed by Calendar.SetTimeStamp. *) + VAR + res, sec, usec: LONGINT; + BEGIN + res := SysClock.GetTimeOfDay (sec, usec); + t. days := 40587+sec DIV 86400; + t. msecs := (sec MOD 86400)*msecPerSec + usec DIV 1000 + END GetTime; + + +PROCEDURE (VAR a: TimeStamp) Add* (b: Interval); +(* Adds the interval `b' to the time stamp `a'. *) +BEGIN + INC(a.msecs, b.msecInt); + INC(a.days, b.dayInt); + IF a.msecs>=msecPerDay THEN + DEC(a.msecs, msecPerDay); INC(a.days) + END +END Add; + +PROCEDURE (VAR a: TimeStamp) Sub* (b: Interval); +(* Subtracts the interval `b' from the time stamp `a'. *) +BEGIN + DEC(a.msecs, b.msecInt); + DEC(a.days, b.dayInt); + IF a.msecs<0 THEN INC(a.msecs, msecPerDay); DEC(a.days) END +END Sub; + +PROCEDURE (VAR a: TimeStamp) Delta* (b: TimeStamp; VAR c: Interval); +(* Post: c = a - b *) +BEGIN + c.msecInt:=a.msecs-b.msecs; + c.dayInt:=a.days-b.days; + IF c.msecInt<0 THEN + INC(c.msecInt, msecPerDay); DEC(c.dayInt) + END +END Delta; + +PROCEDURE (VAR a: TimeStamp) Cmp* (b: TimeStamp) : SHORTINT; +(* Compares 'a' to 'b'. Result: -1: ab + This means the comparison + can be directly extrapolated to a comparison between the + two numbers e.g., + + Cmp(a,b)<0 then a0 then a>b + Cmp(a,b)>=0 then a>=b +*) +BEGIN + IF (a.days>b.days) OR (a.days=b.days) & (a.msecs>b.msecs) THEN RETURN 1 + ELSIF (a.days=b.days) & (a.msecs=b.msecs) THEN RETURN 0 + ELSE RETURN -1 + END +END Cmp; + + +(* ------------------------------------------------------------- *) +(* Interval functions *) + +PROCEDURE InitInterval* (VAR int: Interval; days, msecs: LONGINT); +(* Initialize the Interval `int' with `days' days and `msecs' mS. + Pre: msecs>=0 *) +BEGIN + int.dayInt:=days + msecs DIV msecPerDay; + int.msecInt:=msecs MOD msecPerDay +END InitInterval; + +PROCEDURE (VAR a: Interval) Add* (b: Interval); +(* Post: a = a + b *) +BEGIN + INC(a.msecInt, b.msecInt); + INC(a.dayInt, b.dayInt); + IF a.msecInt>=msecPerDay THEN + DEC(a.msecInt, msecPerDay); INC(a.dayInt) + END +END Add; + +PROCEDURE (VAR a: Interval) Sub* (b: Interval); +(* Post: a = a - b *) +BEGIN + DEC(a.msecInt, b.msecInt); + DEC(a.dayInt, b.dayInt); + IF a.msecInt<0 THEN + INC(a.msecInt, msecPerDay); DEC(a.dayInt) + END +END Sub; + +PROCEDURE (VAR a: Interval) Cmp* (b: Interval) : SHORTINT; +(* Compares 'a' to 'b'. Result: -1: ab + Above convention makes more sense since the comparison + can be directly extrapolated to a comparison between the + two numbers e.g., + + Cmp(a,b)<0 then a0 then a>b + Cmp(a,b)>=0 then a>=b +*) +BEGIN + IF (a.dayInt>b.dayInt) OR (a.dayInt=b.dayInt)&(a.msecInt>b.msecInt) THEN RETURN 1 + ELSIF (a.dayInt=b.dayInt) & (a.msecInt=b.msecInt) THEN RETURN 0 + ELSE RETURN -1 + END +END Cmp; + +PROCEDURE (VAR a: Interval) Scale* (b: LONGREAL); +(* Pre: b>=0; Post: a := a*b *) +VAR + si: LONGREAL; +BEGIN + si:=(a.dayInt+a.msecInt/msecPerDay)*b; + a.dayInt:=ENTIER(si); + a.msecInt:=ENTIER((si-a.dayInt)*msecPerDay+0.5D0) +END Scale; + +PROCEDURE (VAR a: Interval) Fraction* (b: Interval) : LONGREAL; +(* Pre: b<>0; Post: RETURN a/b *) +BEGIN + RETURN (a.dayInt+a.msecInt/msecPerDay)/(b.dayInt+b.msecInt/msecPerDay) +END Fraction; + +END oocTime. diff --git a/src/lib/ooc2/gnuc/oocwrapperlibc.Mod b/src/lib/ooc2/gnuc/oocwrapperlibc.Mod new file mode 100644 index 00000000..0d0cf9b6 --- /dev/null +++ b/src/lib/ooc2/gnuc/oocwrapperlibc.Mod @@ -0,0 +1,34 @@ +MODULE oocwrapperlibc; +IMPORT SYSTEM; +PROCEDURE -includeStdio() + "#include "; + +PROCEDURE -sys(str: ARRAY OF CHAR): INTEGER + "system(str)"; + +PROCEDURE system*(cmd : ARRAY OF CHAR); +VAR r : INTEGER; +BEGIN +r := sys(cmd); +END system; +(* +PROCEDURE strtod* (string: C.address; + VAR tailptr: C.charPtr1d): C.double; +PROCEDURE strtof* (string: C.address; + VAR tailptr: C.charPtr1d): C.float; +PROCEDURE sscanf* (s: C.address; template: ARRAY OF CHAR; ...) : C.int; +*) + +PROCEDURE -sprntf(s, t0, t1, t2: ARRAY OF CHAR): INTEGER + "sprintf(s, t0, t1, t2)"; + +PROCEDURE sprintf* (VAR s: ARRAY OF CHAR; template0: ARRAY OF CHAR; template1: ARRAY OF CHAR; template2: ARRAY OF CHAR); +VAR r : INTEGER; +BEGIN + r := sprntf (s, template0, template1, template2); +END sprintf; + +BEGIN + + +END oocwrapperlibc. diff --git a/src/lib/ooc2/ooc2Ascii.Mod b/src/lib/ooc2/ooc2Ascii.Mod new file mode 100644 index 00000000..9745f0f8 --- /dev/null +++ b/src/lib/ooc2/ooc2Ascii.Mod @@ -0,0 +1,37 @@ +(* $Id: Ascii.Mod,v 1.2 2003/01/04 10:19:19 mva Exp $ *) +MODULE ooc2Ascii; +(* Standard short character names for control chars. + Copyright (C) 2002 Michael van Acken + + This module is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public License + as published by the Free Software Foundation; either version 2 of + the License, or (at your option) any later version. + + This module 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with OOC. If not, write to the Free Software Foundation, + 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +*) + +CONST + nul* = 00X; soh* = 01X; stx* = 02X; etx* = 03X; + eot* = 04X; enq* = 05X; ack* = 06X; bel* = 07X; + bs * = 08X; ht * = 09X; lf * = 0AX; vt * = 0BX; + ff * = 0CX; cr * = 0DX; so * = 0EX; si * = 0FX; + dle* = 10X; dc1* = 11X; dc2* = 12X; dc3* = 13X; + dc4* = 14X; nak* = 15X; syn* = 16X; etb* = 17X; + can* = 18X; em * = 19X; sub* = 1AX; esc* = 1BX; + fs * = 1CX; gs * = 1DX; rs * = 1EX; us * = 1FX; + del* = 7FX; + +CONST (* often used synonyms *) + sp * = " "; + xon* = dc1; + xoff* = dc3; + +END ooc2Ascii. diff --git a/src/lib/ooc2/ooc2CharClass.Mod b/src/lib/ooc2/ooc2CharClass.Mod new file mode 100644 index 00000000..0e955105 --- /dev/null +++ b/src/lib/ooc2/ooc2CharClass.Mod @@ -0,0 +1,89 @@ +(* $Id: CharClass.Mod,v 1.1 2002/04/15 22:42:48 mva Exp $ *) +MODULE ooc2CharClass; +(* Classification of values of the type CHAR. + Copyright (C) 1997-1998, 2002 Michael van Acken + + This module is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public License + as published by the Free Software Foundation; either version 2 of + the License, or (at your option) any later version. + + This module 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with OOC. If not, write to the Free Software Foundation, + 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +*) + +IMPORT + Ascii := ooc2Ascii; + +CONST + eol* = Ascii.lf; + (**The implementation-defined character used to represent end of line + internally for OOC. *) + +VAR + systemEol-: ARRAY 3 OF CHAR; + (**End of line marker used by the target system for text files. The string + defined here can contain more than one character. For one character eol + markers, @ovar{systemEol} must not necessarily equal @oconst{eol}. Note + that the string cannot contain the termination character @code{0X}. *) + + +PROCEDURE IsNumeric* (ch: CHAR): BOOLEAN; +(**Returns @code{TRUE} if and only if @oparam{ch} is classified as a numeric + character. *) + BEGIN + RETURN ("0" <= ch) & (ch <= "9") + END IsNumeric; + +PROCEDURE IsLetter* (ch: CHAR): BOOLEAN; +(**Returns @code{TRUE} if and only if @oparam{ch} is classified as a letter. *) + BEGIN + RETURN ("a" <= ch) & (ch <= "z") OR ("A" <= ch) & (ch <= "Z") + END IsLetter; + +PROCEDURE IsUpper* (ch: CHAR): BOOLEAN; +(**Returns @code{TRUE} if and only if @oparam{ch} is classified as an upper + case letter. *) + BEGIN + RETURN ("A" <= ch) & (ch <= "Z") + END IsUpper; + +PROCEDURE IsLower* (ch: CHAR): BOOLEAN; +(**Returns @code{TRUE} if and only if @oparam{ch} is classified as a lower case + letter. *) + BEGIN + RETURN ("a" <= ch) & (ch <= "z") + END IsLower; + +PROCEDURE IsControl* (ch: CHAR): BOOLEAN; +(**Returns @code{TRUE} if and only if @oparam{ch} represents a control + function. *) + BEGIN + RETURN (ch < Ascii.sp) + END IsControl; + +PROCEDURE IsWhiteSpace* (ch: CHAR): BOOLEAN; +(**Returns @code{TRUE} if and only if @oparam{ch} represents a space character + or a format effector. *) + BEGIN + RETURN (ch = Ascii.sp) OR (ch = Ascii.ff) OR (ch = Ascii.lf) OR + (ch = Ascii.cr) OR (ch = Ascii.ht) OR (ch = Ascii.vt) + END IsWhiteSpace; + + +PROCEDURE IsEol* (ch: CHAR): BOOLEAN; +(**Returns @code{TRUE} if and only if @oparam{ch} is the implementation-defined + character used to represent end of line internally for OOC. *) + BEGIN + RETURN (ch = eol) + END IsEol; + +BEGIN + systemEol[0] := Ascii.lf; systemEol[1] := 0X +END ooc2CharClass. diff --git a/src/lib/ooc2/ooc2ConvTypes.Mod b/src/lib/ooc2/ooc2ConvTypes.Mod new file mode 100644 index 00000000..e7545953 --- /dev/null +++ b/src/lib/ooc2/ooc2ConvTypes.Mod @@ -0,0 +1,45 @@ +(* $Id: ConvTypes.Mod,v 1.1 2002/05/10 22:25:18 mva Exp $ *) +MODULE ooc2ConvTypes; +(**Common types used in the string conversion modules. *) + +TYPE + ConvResults*= SHORTINT; + (**Values of this type are used to express the format of a string. *) + +CONST + strAllRight*=0; + (**The string format is correct for the corresponding conversion. *) + strOutOfRange*=1; + (**The string is well-formed but the value cannot be represented. *) + strWrongFormat*=2; + (**The string is in the wrong format for the conversion. *) + strEmpty*=3; + (**The given string is empty. *) + + +TYPE + ScanClass*= SHORTINT; + (**Values of this type are used to classify input to finite state scanners. *) + +CONST + padding*=0; + (**A leading or padding character at this point in the scan---ignore it. *) + valid*=1; + (**A valid character at this point in the scan---accept it. *) + invalid*=2; + (*An invalid character at this point in the scan---reject it *) + terminator*=3; + (**A terminating character at this point in the scan (not part of token). *) + + +TYPE + ScanState*=POINTER TO ScanDesc; + ScanDesc*=RECORD + (**The type of lexical scanning control procedures. *) + p*: PROCEDURE (ch: CHAR; VAR cl: ScanClass; VAR st: ScanState); + (**A procedure that produces the next state corresponding to the + character @var{ch}. The class of the character is returned + in @var{cl}, the next state in @var{st}. *) + END; + +END ooc2ConvTypes. diff --git a/src/lib/ooc2/ooc2IntConv.Mod b/src/lib/ooc2/ooc2IntConv.Mod new file mode 100644 index 00000000..3b9c0d1b --- /dev/null +++ b/src/lib/ooc2/ooc2IntConv.Mod @@ -0,0 +1,249 @@ +(* $Id: IntConv.Mod,v 1.6 2002/05/26 12:15:17 mva Exp $ *) +MODULE ooc2IntConv; +(* + IntConv - Low-level integer/string conversions. + Copyright (C) 2000, 2002 Michael van Acken + Copyright (C) 1995 Michael Griebling + + This module is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2 of the + License, or (at your option) any later version. + + This module 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) + +IMPORT + Char := ooc2CharClass, Conv := ooc2ConvTypes; + +TYPE + ConvResults* = Conv.ConvResults; + (**One of @oconst{strAllRight}, @oconst{strOutOfRange}, + @oconst{strWrongFormat}, or @oconst{strEmpty}. *) + +CONST + strAllRight*=Conv.strAllRight; + (**The string format is correct for the corresponding conversion. *) + strOutOfRange*=Conv.strOutOfRange; + (**The string is well-formed but the value cannot be represented. *) + strWrongFormat*=Conv.strWrongFormat; + (**The string is in the wrong format for the conversion. *) + strEmpty*=Conv.strEmpty; + (**The given string is empty. *) + + +VAR + W, S, SI: Conv.ScanState; + minInt, maxInt: ARRAY 11 OF CHAR; + +CONST + maxDigits = 10; (* length of minInt, maxInt *) + + +(* internal state machine procedures *) + +PROCEDURE WState(inputCh: CHAR; VAR chClass: Conv.ScanClass; VAR nextState: Conv.ScanState); +BEGIN + IF Char.IsNumeric(inputCh) THEN chClass:=Conv.valid; nextState:=W + ELSE chClass:=Conv.terminator; nextState:=NIL + END +END WState; + + +PROCEDURE SState(inputCh: CHAR; VAR chClass: Conv.ScanClass; VAR nextState: Conv.ScanState); +BEGIN + IF Char.IsNumeric(inputCh) THEN chClass:=Conv.valid; nextState:=W + ELSE chClass:=Conv.invalid; nextState:=S + END +END SState; + + +PROCEDURE ScanInt*(inputCh: CHAR; VAR chClass: Conv.ScanClass; VAR nextState: Conv.ScanState); + (**Represents the start state of a finite state scanner for signed whole + numbers---assigns class of @oparam{inputCh} to @oparam{chClass} and a + procedure representing the next state to @oparam{nextState}. + + The call of @samp{ScanInt(inputCh,chClass,nextState)} shall assign values + to @oparam{chClass} and @oparam{nextState} depending upon the value of + @oparam{inputCh} as shown in the following table. + + @example + Procedure inputCh chClass nextState (a procedure + with behaviour of) + --------- --------- -------- --------- + ScanInt space padding ScanInt + sign valid SState + decimal digit valid WState + other invalid ScanInt + SState decimal digit valid WState + other invalid SState + WState decimal digit valid WState + other terminator -- + @end example + + NOTE 1 -- The procedure @oproc{ScanInt} corresponds to the start state of a + finite state machine to scan for a character sequence that forms a signed + whole number. It may be used to control the actions of a finite state + interpreter. As long as the value of @oparam{chClass} is other than + @oconst{Conv.terminator} or @oconst{Conv.invalid}, the + interpreter should call the procedure whose value is assigned to + @oparam{nextState} by the previous call, supplying the next character from + the sequence to be scanned. It may be appropriate for the interpreter to + ignore characters classified as @oconst{Conv.invalid}, and proceed + with the scan. This would be the case, for example, with interactive + input, if only valid characters are being echoed in order to give + interactive users an immediate indication of badly-formed data. If the + character sequence end before one is classified as a terminator, the + string-terminator character should be supplied as input to the finite state + scanner. If the preceeding character sequence formed a complete number, + the string-terminator will be classified as @oconst{Conv.terminator}, + otherwise it will be classified as @oconst{Conv.invalid}. *) +BEGIN + IF Char.IsWhiteSpace(inputCh) THEN chClass:=Conv.padding; nextState:=SI + ELSIF (inputCh="+") OR (inputCh="-") THEN chClass:=Conv.valid; nextState:=S + ELSIF Char.IsNumeric(inputCh) THEN chClass:=Conv.valid; nextState:=W + ELSE chClass:=Conv.invalid; nextState:=SI + END +END ScanInt; + + +PROCEDURE FormatInt*(str: ARRAY OF CHAR): ConvResults; +(**Returns the format of the string value for conversion to LONGINT. *) +VAR + ch: CHAR; + index, start: INTEGER; + state: Conv.ScanState; + positive: BOOLEAN; + prev, class: Conv.ScanClass; + +PROCEDURE LessOrEqual (VAR high: ARRAY OF CHAR; start, end: INTEGER): BOOLEAN; + VAR + i: INTEGER; + BEGIN (* pre: index-start = maxDigits *) + i := 0; + WHILE (start # end) DO + IF (str[start] < high[i]) THEN + RETURN TRUE; + ELSIF (str[start] > high[i]) THEN + RETURN FALSE; + ELSE (* str[start] = high[i] *) + INC (start); INC (i); + END; + END; + RETURN TRUE; (* full match *) + END LessOrEqual; + +BEGIN + index:=0; prev:=Conv.padding; state:=SI; positive:=TRUE; start := -1; + LOOP + ch:=str[index]; + state.p(ch, class, state); + CASE class OF + | Conv.padding: (* nothing to do *) + + | Conv.valid: + IF ch="-" THEN positive:=FALSE + ELSIF ch="+" THEN positive:=TRUE + ELSIF (start < 0) & (ch # "0") THEN + start := index; + END + + | Conv.invalid: + IF (prev = Conv.padding) & (ch = 0X) THEN + RETURN strEmpty; + ELSE + RETURN strWrongFormat; + END; + + | Conv.terminator: + IF (ch = 0X) THEN + IF (index-start < maxDigits) OR + (index-start = maxDigits) & + (positive & LessOrEqual (maxInt, start, index) OR + ~positive & LessOrEqual (minInt, start, index)) THEN + RETURN strAllRight; + ELSE + RETURN strOutOfRange; + END; + ELSE + RETURN strWrongFormat; + END; + END; + prev:=class; INC(index) + END; +END FormatInt; + + +PROCEDURE ValueInt*(str: ARRAY OF CHAR): LONGINT; +(**Returns the value corresponding to the signed whole number string value + @oparam{str} if @oparam{str} is well-formed. Otherwise, result is + undefined. *) +VAR + i: INTEGER; + int: LONGINT; + positive: BOOLEAN; +BEGIN + IF FormatInt(str)=strAllRight THEN + (* here holds: `str' is a well formed string and its value is in range *) + + i:=0; positive:=TRUE; + WHILE (str[i] < "0") OR (str[i] > "9") DO (* skip whitespace and sign *) + IF (str[i] = "-") THEN + positive := FALSE; + END; + INC (i); + END; + + int := 0; + IF positive THEN + WHILE (str[i] # 0X) DO + int:=int*10 + (ORD(str[i]) - ORD("0")); + INC (i); + END; + ELSE + WHILE (str[i] # 0X) DO + int:=int*10 - (ORD(str[i]) - ORD("0")); + INC (i); + END; + END; + RETURN int; + ELSE (* result is undefined *) + RETURN 0; + END +END ValueInt; + + +PROCEDURE LengthInt*(int: LONGINT): INTEGER; +(**Returns the number of characters in the string representation of + @oparam{int}. This value corresponds to the capacity of an array @samp{str} + which is of the minimum capacity needed to avoid truncation of the result in + the call @samp{IntStr.IntToStr(int,str)}. *) +VAR + cnt: INTEGER; +BEGIN + IF int=MIN(LONGINT) THEN + RETURN maxDigits+1; + ELSE + IF int<=0 THEN int:=-int; cnt:=1 + ELSE cnt:=0 + END; + WHILE int>0 DO INC(cnt); int:=int DIV 10 END; + RETURN cnt; + END; +END LengthInt; + +BEGIN + (* kludge necessary because of recursive procedure declaration *) + NEW(S); NEW(W); NEW(SI); + S.p:=SState; W.p:=WState; SI.p:=ScanInt; + minInt := "2147483648"; + maxInt := "2147483647"; +END ooc2IntConv. diff --git a/src/lib/ooc2/ooc2IntStr.Mod b/src/lib/ooc2/ooc2IntStr.Mod new file mode 100644 index 00000000..0a259752 --- /dev/null +++ b/src/lib/ooc2/ooc2IntStr.Mod @@ -0,0 +1,103 @@ +(* $Id: IntStr.Mod,v 1.1 2002/05/12 21:58:14 mva Exp $ *) +MODULE ooc2IntStr; +(* IntStr - Integer-number/string conversions. + Copyright (C) 1995 Michael Griebling + + This module is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2 of the + License, or (at your option) any later version. + + This module 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*) + +IMPORT + Conv := ooc2ConvTypes, IntConv := ooc2IntConv; + +TYPE + ConvResults*= Conv.ConvResults; + (**One of @oconst{strAllRight}, @oconst{strOutOfRange}, + @oconst{strWrongFormat}, or @oconst{strEmpty}. *) + +CONST + strAllRight*=Conv.strAllRight; + (**The string format is correct for the corresponding conversion. *) + strOutOfRange*=Conv.strOutOfRange; + (**The string is well-formed but the value cannot be represented. *) + strWrongFormat*=Conv.strWrongFormat; + (**The string is in the wrong format for the conversion. *) + strEmpty*=Conv.strEmpty; + (**The given string is empty. *) + + +(* the string form of a signed whole number is + ["+" | "-"] decimal_digit {decimal_digit} +*) + +PROCEDURE StrToInt*(str: ARRAY OF CHAR; VAR int: LONGINT; VAR res: ConvResults); +(**Converts string to integer value. Ignores any leading spaces in + @oparam{str}. If the subsequent characters in @oparam{str} are in the + format of a signed whole number, assigns a corresponding value to + @oparam{int}. Assigns a value indicating the format of @oparam{str} to + @oparam{res}. *) +BEGIN + res:=IntConv.FormatInt(str); + IF (res = strAllRight) THEN + int:=IntConv.ValueInt(str) + END +END StrToInt; + + +PROCEDURE Reverse (VAR str : ARRAY OF CHAR; start, end : INTEGER); +(* Reverses order of characters in the interval [start..end]. *) +VAR + h : CHAR; +BEGIN + WHILE start < end DO + h := str[start]; str[start] := str[end]; str[end] := h; + INC(start); DEC(end) + END +END Reverse; + + +PROCEDURE IntToStr*(int: LONGINT; VAR str: ARRAY OF CHAR); +(**Converts the value of @oparam{int} to string form and copies the possibly + truncated result to @oparam{str}. *) +CONST + maxLength = 11; (* maximum number of digits representing a LONGINT value *) +VAR + b : ARRAY maxLength+1 OF CHAR; + s, e: INTEGER; +BEGIN + (* build representation in string 'b' *) + IF int = MIN(LONGINT) THEN (* smallest LONGINT, -int is an overflow *) + b := "-2147483648"; + e := 11 + ELSE + IF int < 0 THEN (* negative sign *) + b[0] := "-"; int := -int; s := 1 + ELSE (* no sign *) + s := 0 + END; + e := s; (* 's' holds starting position of string *) + REPEAT + b[e] := CHR(int MOD 10+ORD("0")); + int := int DIV 10; + INC(e) + UNTIL int = 0; + b[e] := 0X; + Reverse(b, s, e-1) + END; + + COPY(b, str) (* truncate output if necessary *) +END IntToStr; + +END ooc2IntStr. + diff --git a/src/lib/ooc2/ooc2LRealConv.Mod b/src/lib/ooc2/ooc2LRealConv.Mod new file mode 100644 index 00000000..b7ed118b --- /dev/null +++ b/src/lib/ooc2/ooc2LRealConv.Mod @@ -0,0 +1,106 @@ +(* $Id: LRealConv.Mod,v 1.13 2003/04/06 12:11:15 mva Exp $ *) +MODULE ooc2LRealConv; +(* String to LONGREAL conversion functions. + Copyright (C) 2002 Michael van Acken + + This module is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public License + as published by the Free Software Foundation; either version 2 of + the License, or (at your option) any later version. + + This module 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with OOC. If not, write to the Free Software Foundation, + 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +*) + +IMPORT + SYSTEM, libc := oocwrapperlibc, CharClass := ooc2CharClass, ConvTypes := ooc2ConvTypes, Real0 := ooc2Real0; + +(** + + The regular expression for a signed fixed-point real number is + @samp{[+-]?\d+(\.\d* )?}. For the optional exponent part, it is + @samp{E[+-]?\d+}. + +*) + +TYPE + ConvResults* = ConvTypes.ConvResults; + (**One of @oconst{strAllRight}, @oconst{strOutOfRange}, + @oconst{strWrongFormat}, or @oconst{strEmpty}. *) + +CONST + strAllRight*=ConvTypes.strAllRight; + (**The string format is correct for the corresponding conversion. *) + strOutOfRange*=ConvTypes.strOutOfRange; + (**The string is well-formed but the value cannot be represented. *) + strWrongFormat*=ConvTypes.strWrongFormat; + (**The string is in the wrong format for the conversion. *) + strEmpty*=ConvTypes.strEmpty; + (**The given string is empty. *) + +CONST + maxValue = "17976931348623157"; + (* signifcant digits of the maximum value 1.7976931348623157D+308 *) + maxExp = 308; + (* maxium positive exponent of a normalized number *) + +PROCEDURE ScanReal*(inputCh: CHAR; + VAR chClass: ConvTypes.ScanClass; + VAR nextState: ConvTypes.ScanState); + BEGIN + Real0.ScanReal (inputCh, chClass, nextState); + END ScanReal; + +PROCEDURE FormatReal* (str: ARRAY OF CHAR): ConvResults; + BEGIN + RETURN Real0.FormatReal (str, maxExp, maxValue); + END FormatReal; + +PROCEDURE ValueReal*(str: ARRAY OF CHAR): LONGREAL; +(* result is undefined if FormatReal(str) # strAllRight *) + VAR + i: LONGINT; + value: LONGREAL; + BEGIN + i := 0; + WHILE CharClass.IsWhiteSpace(str[i]) DO + (* skip our definition of whitespace *) + INC (i); + END; + IF libc.sscanf(SYSTEM.ADR(str[i]), "%lf", SYSTEM.ADR(value)) = 1 THEN +(* <*PUSH; Warnings:=FALSE*> *) + RETURN value (* syntax is ok *) +(* <*POP*> *) + ELSE + RETURN 0; (* error *) + END; + END ValueReal; + +PROCEDURE LengthFloatReal*(real: LONGREAL; sigFigs: INTEGER): INTEGER; + BEGIN +(*<*PUSH; Assertions:=TRUE*>*) + ASSERT (FALSE) +(*<*POP*>*) + END LengthFloatReal; + +PROCEDURE LengthEngReal*(real: LONGREAL; sigFigs: INTEGER): INTEGER; + BEGIN +(*<*PUSH; Assertions:=TRUE*>*) + ASSERT (FALSE) +(*<*POP*>*) + END LengthEngReal; + +PROCEDURE LengthFixedReal*(real: LONGREAL; place: INTEGER): INTEGER; + BEGIN +(*<*PUSH; Assertions:=TRUE*>*) + ASSERT (FALSE) +(*<*POP*>*) + END LengthFixedReal; + +END ooc2LRealConv. diff --git a/src/lib/ooc2/ooc2Real0.Mod b/src/lib/ooc2/ooc2Real0.Mod new file mode 100644 index 00000000..8ef69d57 --- /dev/null +++ b/src/lib/ooc2/ooc2Real0.Mod @@ -0,0 +1,447 @@ +(* $Id: Real0.Mod,v 1.3 2002/08/12 18:11:30 mva Exp $ *) +MODULE ooc2Real0; +(* Helper functions used by the real conversion modules. + Copyright (C) 2002 Michael van Acken + + This module is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public License + as published by the Free Software Foundation; either version 2 of + the License, or (at your option) any later version. + + This module 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with OOC. If not, write to the Free Software Foundation, + 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +*) + +IMPORT + CharClass := ooc2CharClass, ConvTypes := ooc2ConvTypes, Strings := ooc2Strings; + + +TYPE + ConvResults = ConvTypes.ConvResults; + +CONST + strAllRight=ConvTypes.strAllRight; + strOutOfRange=ConvTypes.strOutOfRange; + strWrongFormat=ConvTypes.strWrongFormat; + strEmpty=ConvTypes.strEmpty; + +CONST + padding=ConvTypes.padding; + valid=ConvTypes.valid; + invalid=ConvTypes.invalid; + terminator=ConvTypes.terminator; + +TYPE + ScanClass = ConvTypes.ScanClass; + ScanState = ConvTypes.ScanState; + +CONST + expChar* = "E"; + +VAR + RS-, P-, F-, E-, SE-, WE-, SR-: ScanState; + + +(* internal state machine procedures *) + +PROCEDURE IsSign (ch: CHAR): BOOLEAN; +(* Return TRUE for '+' or '-' *) + BEGIN + RETURN (ch='+') OR (ch='-') + END IsSign; + +PROCEDURE RSState(inputCh: CHAR; + VAR chClass: ScanClass; VAR nextState: ScanState); + BEGIN + IF CharClass.IsNumeric(inputCh) THEN + chClass:=valid; nextState:=P + ELSE + chClass:=invalid; nextState:=RS + END + END RSState; + +PROCEDURE PState(inputCh: CHAR; + VAR chClass: ScanClass; VAR nextState: ScanState); + BEGIN + IF CharClass.IsNumeric(inputCh) THEN + chClass:=valid; nextState:=P + ELSIF inputCh="." THEN + chClass:=valid; nextState:=F + ELSIF inputCh=expChar THEN + chClass:=valid; nextState:=E + ELSE + chClass:=terminator; nextState:=NIL + END + END PState; + +PROCEDURE FState(inputCh: CHAR; + VAR chClass: ScanClass; VAR nextState: ScanState); + BEGIN + IF CharClass.IsNumeric(inputCh) THEN + chClass:=valid; nextState:=F + ELSIF inputCh=expChar THEN + chClass:=valid; nextState:=E + ELSE + chClass:=terminator; nextState:=NIL + END + END FState; + +PROCEDURE EState(inputCh: CHAR; + VAR chClass: ScanClass; VAR nextState: ScanState); + BEGIN + IF IsSign(inputCh) THEN + chClass:=valid; nextState:=SE + ELSIF CharClass.IsNumeric(inputCh) THEN + chClass:=valid; nextState:=WE + ELSE + chClass:=invalid; nextState:=E + END + END EState; + +PROCEDURE SEState(inputCh: CHAR; + VAR chClass: ScanClass; VAR nextState: ScanState); + BEGIN + IF CharClass.IsNumeric(inputCh) THEN + chClass:=valid; nextState:=WE + ELSE + chClass:=invalid; nextState:=SE + END + END SEState; + +PROCEDURE WEState(inputCh: CHAR; + VAR chClass: ScanClass; VAR nextState: ScanState); + BEGIN + IF CharClass.IsNumeric(inputCh) THEN + chClass:=valid; nextState:=WE + ELSE + chClass:=terminator; nextState:=NIL + END + END WEState; + +PROCEDURE ScanReal*(inputCh: CHAR; + VAR chClass: ScanClass; VAR nextState: ScanState); + BEGIN + IF CharClass.IsWhiteSpace(inputCh) THEN + chClass:=padding; nextState:=SR + ELSIF IsSign(inputCh) THEN + chClass:=valid; nextState:=RS + ELSIF CharClass.IsNumeric(inputCh) THEN + chClass:=valid; nextState:=P + ELSE + chClass:=invalid; nextState:=SR + END + END ScanReal; + +PROCEDURE FormatReal* (str: ARRAY OF CHAR; maxExp: LONGINT; + maxValue: ARRAY OF CHAR): ConvResults; + VAR + i: LONGINT; + ch: CHAR; + state: ConvTypes.ScanState; + class: ConvTypes.ScanClass; + wSigFigs, fLeadingZeros, exp, startOfExp: LONGINT; + expNegative, allZeroDigit: BOOLEAN; + + CONST + expCutoff = 100000000; + (* assume overflow if the value of the exponent is larger than this *) + + PROCEDURE NonZeroDigit (): LONGINT; + (* locate first non-zero digit in str *) + BEGIN + i := 0; + WHILE (i # startOfExp) & ((str[i] < "1") OR (str[i] > "9")) DO + INC (i); + END; + RETURN i; + END NonZeroDigit; + + PROCEDURE LessOrEqual (upperBound: ARRAY OF CHAR): BOOLEAN; + VAR + i, j: LONGINT; + BEGIN + i := NonZeroDigit(); + IF (i # startOfExp) THEN (* str[i] is non-zero digit *) + j := 0; + WHILE (i # startOfExp) & (upperBound[j] # 0X) DO + IF (str[i] < upperBound[j]) THEN + RETURN TRUE; + ELSIF (str[i] > upperBound[j]) THEN + RETURN FALSE; + ELSE + INC (j); INC (i); + IF (str[i] = ".") THEN (* skip decimal point *) + INC (i); + END; + END; + END; + + IF (upperBound[j] = 0X) THEN + (* any trailing zeros don't change the outcome: skip them *) + WHILE (str[i] = "0") OR (str[i] = ".") DO + INC (i); + END; + END; + END; + RETURN (i = startOfExp); + END LessOrEqual; + + BEGIN + (* normalize exponent character *) + i := 0; + WHILE (str[i] # 0X) & (str[i] # "e") DO + INC (i); + END; + IF (str[i] = "e") THEN + str[i] := expChar; + END; + + (* move index `i' over padding characters *) + i := 0; + state := SR; + REPEAT + ch := str[i]; + state.p(ch, class, state); + INC (i); + UNTIL (class # ConvTypes.padding); + + IF (ch = 0X) THEN + RETURN strEmpty; + ELSE + (* scan part before decimal point or exponent *) + WHILE (class = ConvTypes.valid) & (state # F) & (state # E) & + ((ch < "1") OR (ch > "9")) DO + ch := str[i]; + state.p(ch, class, state); + INC (i); + END; + wSigFigs := 0; + WHILE (class = ConvTypes.valid) & (state # F) & (state # E) DO + INC (wSigFigs); + ch := str[i]; + state.p(ch, class, state); + INC (i); + END; + (* here holds: wSigFigs is the number of significant digits in + the whole number part of the number; 0 means there are only + zeros before the decimal point *) + + (* scan fractional part exponent *) + fLeadingZeros := 0; allZeroDigit := TRUE; + WHILE (class = ConvTypes.valid) & (state # E) DO + ch := str[i]; + IF allZeroDigit THEN + IF (ch = "0") THEN + INC (fLeadingZeros); + ELSIF (ch # ".") THEN + allZeroDigit := FALSE; + END; + END; + state.p(ch, class, state); + INC (i); + END; + (* here holds: fLeadingZeros holds the number of zeros after + the decimal point *) + + (* scan exponent *) + startOfExp := i-1; exp := 0; expNegative := FALSE; + WHILE (class = ConvTypes.valid) DO + ch := str[i]; + IF (ch = "-") THEN + expNegative := TRUE; + ELSIF ("0" <= ch) & (ch <= "9") & (exp < expCutoff) THEN + exp := exp*10 + (ORD(ch)-ORD("0")); + END; + state.p(ch, class, state); + INC (i); + END; + IF expNegative THEN + exp := -exp; + END; + (* here holds: exp holds the value of the exponent; if it's absolute + value is larger than expCutoff, then there has been an overflow *) + + IF (class = ConvTypes.invalid) OR (ch # 0X) THEN + RETURN strWrongFormat; + ELSE (* (class = ConvTypes.terminator) & (ch = 0X) *) + (* normalize the number: calculate the exponent if the number would + start with a non-zero digit, immediately followed by the + decimal point *) + IF (wSigFigs > 0) THEN + exp := exp+wSigFigs-1; + ELSE + exp := exp-fLeadingZeros-1; + END; + + IF (exp > maxExp) & (NonZeroDigit() # startOfExp) OR + (exp = maxExp) & ~LessOrEqual (maxValue) THEN + RETURN strOutOfRange; + ELSE + RETURN strAllRight; + END; + END; + END; + END FormatReal; + +PROCEDURE NormalizeFloat* (VAR s: ARRAY OF CHAR); + VAR + i, d: INTEGER; + BEGIN + (* massage the output of sprintf to match our requirements; note: this + code should also handle "Inf", "Infinity", "NaN", etc., gracefully + but this is untested *) + IF (s[0] = "+") THEN d := 1; ELSE d := 0; END; (* erase "+" sign *) + i := 1; + WHILE (s[i] # 0X) DO + IF (s[i] = ".") & (s[i+1] = expChar) THEN + INC (d); (* eliminate "." if no digits follow *) + ELSIF (s[i] = "0") & (i-d-1 >= 0) & IsSign (s[i-d-1]) THEN + INC (d); (* eliminate zeros after exponent sign *) + ELSE + s[i-d] := s[i]; + END; + INC (i); + END; + IF (s[i-d-2] = "E") THEN + s[i-d-2] := 0X; (* remove "E+" or "E-" *) + ELSE + s[i-d] := 0X; + END; + END NormalizeFloat; + +PROCEDURE FormatForEng* (VAR s: ARRAY OF CHAR); + VAR + i, d, fract, exp, posExp, offset: INTEGER; + BEGIN + (* find out how large the exponent is, and how many digits are in the + fractional part *) + fract := 0; exp := 0; posExp := 0; + IF CharClass.IsNumeric (s[1]) THEN (* skip for NaN, Inf *) + i := 0; d := 0; + WHILE (s[i] # "E") DO + fract := fract + d; + IF (s[i] = ".") THEN d := 1; END; + INC (i); + END; + INC (i); + IF (s[i] = "-") THEN d := -1; ELSE d := 1; END; + posExp := i; + INC (i); + WHILE (s[i] # 0X) DO + exp := exp*10 + d*(ORD (s[i]) - ORD ("0")); + INC (i); + END; + END; + + offset := exp MOD 3; + IF (offset # 0) THEN + WHILE (fract < offset) DO (* need more zeros before "E" *) + Strings.Insert ("0", posExp-1, s); INC (fract); INC (posExp); + END; + i := 2; + WHILE (i < offset+2) DO (* move "." offset places to right *) + s[i] := s[i+1]; INC (i); + END; + s[i] := "."; + + (* write new exponent *) + exp := exp-offset; + IF (exp < 0) THEN + exp := -exp; s[posExp] := "-"; + ELSE + s[posExp] := "+"; + END; + s[posExp+1] := CHR (exp DIV 100 + ORD("0")); + s[posExp+2] := CHR (exp DIV 10 MOD 10 + ORD("0")); + s[posExp+3] := CHR (exp MOD 10 + ORD("0")); + s[posExp+4] := 0X; + END; + NormalizeFloat (s); + END FormatForEng; + +PROCEDURE FormatForFixed* (VAR s: ARRAY OF CHAR; place: INTEGER); + VAR + i, d, c, fract, point, suffix: INTEGER; + + PROCEDURE NotZero (VAR s: ARRAY OF CHAR; pos: INTEGER): BOOLEAN; + BEGIN + WHILE (s[pos] # 0X) DO + IF (s[pos] # "0") & (s[pos] # ".") THEN + RETURN TRUE; + END; + INC (pos); + END; + RETURN FALSE; + END NotZero; + + BEGIN + IF (place < 0) THEN + (* locate position of decimal point in string *) + point := 1; + WHILE (s[point] # ".") DO INC (point); END; + + (* number of digits before point is `point-1'; position in string + of the first digit that will be converted to zero due to rounding: + `point+place+1'; rightmost digit that may be incremented because + of rounding: `point+place' *) + IF (point+place >= 0) THEN + suffix := point+place+1; IF (s[suffix] = ".") THEN INC (suffix); END; + IF (s[suffix] > "5") OR + (s[suffix] = "5") & + (NotZero (s, suffix+1) OR + (point+place # 0) & ODD (ORD (s[point+place]))) THEN + (* we are rounding up *) + i := point+place; + WHILE (s[i] = "9") DO s[i] := "0"; DEC (i); END; + IF (i = 0) THEN (* looking at sign *) + Strings.Insert ("1", 1, s); INC (point); + ELSE + s[i] := CHR (ORD (s[i])+1); (* increment non-"9" digit by one *) + END; + END; + + (* zero everything after the digit at `place' *) + i := point+place+1; + IF (i = 1) THEN (* all zero *) + s[1] := "0"; s[2] := 0X; + ELSE + WHILE (s[i] # ".") DO s[i] := "0"; INC (i); END; + END; + ELSE (* round to zero *) + s[1] := "0"; s[2] := 0X; + END; + s[point] := 0X; + END; + + (* correct sign, and add trailing zeros if necessary *) + IF (s[0] = "+") THEN d := 1; ELSE d := 0; END; (* erase "+" sign *) + i := 1; fract := 0; c := 0; + WHILE (s[i] # 0X) DO + s[i-d] := s[i]; + fract := fract+c; + IF (s[i] = ".") THEN + c := 1; + END; + INC (i); + END; + WHILE (fract < place) DO + s[i-d] := "0"; INC (fract); INC (i); + END; + s[i-d] := 0X; + END FormatForFixed; + +BEGIN + NEW(RS); RS.p:=RSState; + NEW(P); P.p:=PState; + NEW(F); F.p:=FState; + NEW(E); E.p:=EState; + NEW(SE); SE.p:=SEState; + NEW(WE); WE.p:=WEState; + NEW(SR); SR.p:=ScanReal; +END ooc2Real0. diff --git a/src/lib/ooc2/ooc2Strings.Mod b/src/lib/ooc2/ooc2Strings.Mod new file mode 100644 index 00000000..a0ad4362 --- /dev/null +++ b/src/lib/ooc2/ooc2Strings.Mod @@ -0,0 +1,524 @@ +(* $Id: Strings.Mod,v 1.2 2002/03/11 21:33:22 mva Exp $ *) +MODULE ooc2Strings; +(* Facilities for manipulating strings in character arrays. + Copyright (C) 1996, 1997 Michael van Acken + + This module is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public License + as published by the Free Software Foundation; either version 2 of + the License, or (at your option) any later version. + + This module 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with OOC. If not, write to the Free Software Foundation, + 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +*) + + +(** + +Unlike Modula-2, the behaviour of a procedure is undefined, if one of its input +parameters is an unterminated character array. All of the following procedures +expect to get 0X terminated strings, and will return likewise terminated +strings. + +All input parameters that represent an array index or a length are +expected to be non-negative. In the descriptions below these +restrictions are stated as pre-conditions of the procedures, but they +aren't checked explicitly. If this module is compiled with run-time +index enabled, checks some illegal input values may be caught. By +default it is installed @emph{without} index checks. + +*) + + +TYPE + CompareResults* = SHORTINT; + (**Result type of @oproc{Compare}. *) + +CONST + less* = -1; + (**Result of @oproc{Compare} if the first argument is lexically less + than the second one. *) + equal* = 0; + (**Result of @oproc{Compare} if the first argument is equal to the second + one. *) + greater* = 1; + (**Result of @oproc{Compare} if the first argument is lexically greater + than the second one. *) + + +PROCEDURE Length* (stringVal: ARRAY OF CHAR): INTEGER; +(**Returns the length of @oparam{stringVal}. This is equal to the number of + characters in @oparam{stringVal} up to and excluding the first @code{0X}. *) + VAR + i: INTEGER; + BEGIN + i := 0; + WHILE (stringVal[i] # 0X) DO + INC (i) + END; + RETURN i + END Length; + + + +PROCEDURE Assign* (source: ARRAY OF CHAR; VAR destination: ARRAY OF CHAR); +(**Copies @oparam{source} to @oparam{destination}. Equivalent to the + predefined procedure @code{COPY}. Unlike @code{COPY}, this procedure can be + assigned to a procedure variable. *) + VAR + i: INTEGER; + BEGIN + i := -1; + REPEAT + INC (i); + destination[i] := source[i] + UNTIL (destination[i] = 0X) OR (i = LEN (destination)-1); + destination[i] := 0X + END Assign; + +PROCEDURE Extract* (source: ARRAY OF CHAR; startPos, numberToExtract: INTEGER; + VAR destination: ARRAY OF CHAR); +(**Copies at most @oparam{numberToExtract} characters from @oparam{source} to + @oparam{destination}, starting at position @oparam{startPos} in + @oparam{source}. An empty string value will be extracted if + @oparam{startPos} is greater than or equal to @samp{Length(source)}. + + @precond + @oparam{startPos} and @oparam{numberToExtract} are not negative. + @end precond *) + VAR + sourceLength, i: INTEGER; + BEGIN + (* make sure that we get an empty string if `startPos' refers to an array + index beyond `Length (source)' *) + sourceLength := Length (source); + IF (startPos > sourceLength) THEN + startPos := sourceLength + END; + + (* make sure that `numberToExtract' doesn't exceed the capacity + of `destination' *) + IF (numberToExtract >= LEN (destination)) THEN + numberToExtract := SHORT (LEN (destination))-1 + END; + + (* copy up to `numberToExtract' characters to `destination' *) + i := 0; + WHILE (i < numberToExtract) & (source[startPos+i] # 0X) DO + destination[i] := source[startPos+i]; + INC (i) + END; + destination[i] := 0X + END Extract; + +PROCEDURE Delete* (VAR stringVar: ARRAY OF CHAR; + startPos, numberToDelete: INTEGER); +(**Deletes at most @oparam{numberToDelete} characters from @oparam{stringVar}, + starting at position @oparam{startPos}. The string value in + @oparam{stringVar} is not altered if @oparam{startPos} is greater than or + equal to @samp{Length(stringVar)}. + + @precond + @oparam{startPos} and @oparam{numberToDelete} are not negative. + @end precond *) + VAR + stringLength, i: INTEGER; + BEGIN + stringLength := Length (stringVar); + IF (startPos+numberToDelete < stringLength) THEN + (* `stringVar' has remaining characters beyond the deleted section; + these have to be moved forward by `numberToDelete' characters *) + FOR i := startPos TO stringLength-numberToDelete DO + stringVar[i] := stringVar[i+numberToDelete] + END + ELSIF (startPos < stringLength) THEN + stringVar[startPos] := 0X + END + END Delete; + +PROCEDURE Insert* (source: ARRAY OF CHAR; startPos: INTEGER; + VAR destination: ARRAY OF CHAR); +(**Inserts @oparam{source} into @oparam{destination} at position + @oparam{startPos}. After the call @oparam{destination} contains the string + that is contructed by first splitting @oparam{destination} at the position + @oparam{startPos} and then concatenating the first half, @oparam{source}, + and the second half. The string value in @oparam{destination} is not + altered if @oparam{startPos} is greater than @samp{Length(source)}. If + @samp{startPos = Length(source)}, then @oparam{source} is appended to + @oparam{destination}. + + @precond + @oparam{startPos} is not negative. + @end precond *) + VAR + sourceLength, destLength, destMax, i: INTEGER; + BEGIN + destLength := Length (destination); + sourceLength := Length (source); + destMax := SHORT (LEN (destination))-1; + IF (startPos+sourceLength < destMax) THEN + (* `source' is inserted inside of `destination' *) + IF (destLength+sourceLength > destMax) THEN + (* `destination' too long, truncate it *) + destLength := destMax-sourceLength; + destination[destLength] := 0X + END; + + (* move tail section of `destination' *) + FOR i := destLength TO startPos BY -1 DO + destination[i+sourceLength] := destination[i] + END + ELSIF (startPos <= destLength) THEN + (* `source' replaces `destination' from `startPos' on *) + destination[destMax] := 0X; (* set string terminator *) + sourceLength := destMax-startPos (* truncate `source' *) + ELSE (* startPos > destLength: no change in `destination' *) + sourceLength := 0 + END; + (* copy characters from `source' to `destination' *) + FOR i := 0 TO sourceLength-1 DO + destination[startPos+i] := source[i] + END + END Insert; + +PROCEDURE Replace* (source: ARRAY OF CHAR; startPos: INTEGER; + VAR destination: ARRAY OF CHAR); +(**Copies @oparam{source} into @oparam{destination}, starting at position + @oparam{startPos}. Copying stops when all of @oparam{source} has been + copied, or when the last character of the string value in + @oparam{destination} has been replaced. The string value in + @oparam{destination} is not altered if @oparam{startPos} is greater than or + equal to @samp{Length(source)}. + + @precond + @oparam{startPos} is not negative. + @end precond *) + VAR + destLength, i: INTEGER; + BEGIN + destLength := Length (destination); + IF (startPos < destLength) THEN + (* if `startPos' is inside `destination', then replace characters until + the end of `source' or `destination' is reached *) + i := 0; + WHILE (startPos # destLength) & (source[i] # 0X) DO + destination[startPos] := source[i]; + INC (startPos); + INC (i) + END + END + END Replace; + +PROCEDURE Append* (source: ARRAY OF CHAR; VAR destination: ARRAY OF CHAR); +(**Appends @oparam{source} to @oparam{destination}. *) + VAR + destLength, i: INTEGER; + BEGIN + destLength := Length (destination); + i := 0; + WHILE (destLength < LEN (destination)-1) & (source[i] # 0X) DO + destination[destLength] := source[i]; + INC (destLength); + INC (i) + END; + destination[destLength] := 0X + END Append; + +PROCEDURE Concat* (source1, source2: ARRAY OF CHAR; + VAR destination: ARRAY OF CHAR); +(**Concatenates @oparam{source2} onto @oparam{source1} and copies the result + into @oparam{destination}. *) + VAR + i, j: INTEGER; + BEGIN + (* copy `source1' into `destination' *) + i := 0; + WHILE (source1[i] # 0X) & (i < LEN(destination)-1) DO + destination[i] := source1[i]; + INC (i) + END; + + (* append `source2' to `destination' *) + j := 0; + WHILE (source2[j] # 0X) & (i < LEN (destination)-1) DO + destination[i] := source2[j]; + INC (j); INC (i) + END; + destination[i] := 0X + END Concat; + + + +PROCEDURE CanAssignAll* (sourceLength: INTEGER; VAR destination: ARRAY OF CHAR): BOOLEAN; +(**Returns @code{TRUE} if a number of characters, indicated by + @oparam{sourceLength}, will fit into @oparam{destination}; otherwise returns + @code{FALSE}. + + @precond + @oparam{sourceLength} is not negative. + @end precond *) + BEGIN + RETURN (sourceLength < LEN (destination)) + END CanAssignAll; + +PROCEDURE CanExtractAll* (sourceLength, startPos, numberToExtract: INTEGER; + VAR destination: ARRAY OF CHAR): BOOLEAN; +(**Returns @code{TRUE} if there are @oparam{numberToExtract} characters + starting at @oparam{startPos} and within the @oparam{sourceLength} of some + string, and if the capacity of @oparam{destination} is sufficient to hold + @oparam{numberToExtract} characters; otherwise returns @code{FALSE}. + + @precond + @oparam{sourceLength}, @oparam{startPos}, and @oparam{numberToExtract} are + not negative. + @end precond *) + BEGIN + RETURN (startPos+numberToExtract <= sourceLength) & + (numberToExtract < LEN (destination)) + END CanExtractAll; + +PROCEDURE CanDeleteAll* (stringLength, startPos, + numberToDelete: INTEGER): BOOLEAN; +(**Returns @code{TRUE} if there are @oparam{numberToDelete} characters starting + at @oparam{startPos} and within the @oparam{stringLength} of some string; + otherwise returns @code{FALSE}. + + @precond + @oparam{stringLength}, @oparam{startPos} and @oparam{numberToDelete} are not + negative. + @end precond *) + BEGIN + RETURN (startPos+numberToDelete <= stringLength) + END CanDeleteAll; + +PROCEDURE CanInsertAll* (sourceLength, startPos: INTEGER; + VAR destination: ARRAY OF CHAR): BOOLEAN; +(**Returns @code{TRUE} if there is room for the insertion of + @oparam{sourceLength} characters from some string into @oparam{destination} + starting at @oparam{startPos}; otherwise returns @code{FALSE}. + + @precond + @oparam{sourceLength} and @oparam{startPos} are not negative. + @end precond *) + VAR + lenDestination: INTEGER; + BEGIN + lenDestination := Length (destination); + RETURN (startPos <= lenDestination) & + (sourceLength+lenDestination < LEN (destination)) + END CanInsertAll; + +PROCEDURE CanReplaceAll* (sourceLength, startPos: INTEGER; + VAR destination: ARRAY OF CHAR): BOOLEAN; +(**Returns @code{TRUE} if there is room for the replacement of + @oparam{sourceLength} characters in @oparam{destination} starting at + @oparam{startPos}; otherwise returns @code{FALSE}. + + @precond + @oparam{sourceLength} and @oparam{startPos} are not negative. + @end precond *) + BEGIN + RETURN (sourceLength+startPos <= Length(destination)) + END CanReplaceAll; + +PROCEDURE CanAppendAll* (sourceLength: INTEGER; + VAR destination: ARRAY OF CHAR): BOOLEAN; +(**Returns @code{TRUE} if there is sufficient room in @oparam{destination} to + append a string of length @oparam{sourceLength} to the string in + @oparam{destination}; otherwise returns @code{FALSE}. + + @precond + @oparam{sourceLength} is not negative. + @end precond *) + BEGIN + RETURN (Length (destination)+sourceLength < LEN (destination)) + END CanAppendAll; + +PROCEDURE CanConcatAll* (source1Length, source2Length: INTEGER; + VAR destination: ARRAY OF CHAR): BOOLEAN; +(**Returns @code{TRUE} if there is sufficient room in @oparam{destination} for + a two strings of lengths @oparam{source1Length} and @oparam{source2Length}; + otherwise returns @code{FALSE}. + + @precond + @oparam{source1Length} and @oparam{source2Length} are not negative. + @end precond *) + BEGIN + RETURN (source1Length+source2Length < LEN (destination)) + END CanConcatAll; + + + +PROCEDURE Compare* (stringVal1, stringVal2: ARRAY OF CHAR): CompareResults; +(**Returns @oconst{less}, @oconst{equal}, or @oconst{greater}, according as + @oparam{stringVal1} is lexically less than, equal to, or greater than + @oparam{stringVal2}. Note that Oberon-2 already contains predefined + comparison operators on strings. *) + VAR + i: INTEGER; + BEGIN + i := 0; + WHILE (stringVal1[i] # 0X) & (stringVal1[i] = stringVal2[i]) DO + INC (i) + END; + IF (stringVal1[i] < stringVal2[i]) THEN + RETURN less + ELSIF (stringVal1[i] > stringVal2[i]) THEN + RETURN greater + ELSE + RETURN equal + END + END Compare; + +PROCEDURE Equal* (stringVal1, stringVal2: ARRAY OF CHAR): BOOLEAN; +(**Returns @samp{stringVal1 = stringVal2}. Unlike the predefined operator + @samp{=}, this procedure can be assigned to a procedure variable. *) + VAR + i: INTEGER; + BEGIN + i := 0; + WHILE (stringVal1[i] # 0X) & (stringVal1[i] = stringVal2[i]) DO + INC (i) + END; + RETURN (stringVal1[i] = 0X) & (stringVal2[i] = 0X) + END Equal; + +PROCEDURE FindNext* (pattern, stringToSearch: ARRAY OF CHAR; startPos: INTEGER; + VAR patternFound: BOOLEAN; VAR posOfPattern: INTEGER); +(**Looks forward for next occurrence of @oparam{pattern} in + @oparam{stringToSearch}, starting the search at position @oparam{startPos}. + If @samp{startPos < Length(stringToSearch)} and @oparam{pattern} is found, + @oparam{patternFound} is returned as @code{TRUE}, and @oparam{posOfPattern} + contains the start position in @oparam{stringToSearch} of @oparam{pattern}. + The position is a value in the range [startPos..Length(stringToSearch)-1]. + Otherwise @oparam{patternFound} is returned as @code{FALSE}, and + @oparam{posOfPattern} is unchanged. If @samp{startPos > + Length(stringToSearch)-Length(Pattern)} then @oparam{patternFound} is + returned as @code{FALSE}. + + @precond + @oparam{startPos} is not negative. + @end precond *) + VAR + patternPos: INTEGER; + BEGIN + IF (startPos < Length (stringToSearch)) THEN + patternPos := 0; + LOOP + IF (pattern[patternPos] = 0X) THEN + (* reached end of pattern *) + patternFound := TRUE; + posOfPattern := startPos-patternPos; + EXIT + ELSIF (stringToSearch[startPos] = 0X) THEN + (* end of string (but not of pattern) *) + patternFound := FALSE; + EXIT + ELSIF (stringToSearch[startPos] = pattern[patternPos]) THEN + (* characters identic, compare next one *) + INC (startPos); + INC (patternPos) + ELSE + (* difference found: reset indices and restart *) + startPos := startPos-patternPos+1; + patternPos := 0 + END + END + ELSE + patternFound := FALSE + END + END FindNext; + +PROCEDURE FindPrev* (pattern, stringToSearch: ARRAY OF CHAR; startPos: INTEGER; + VAR patternFound: BOOLEAN; VAR posOfPattern: INTEGER); +(**Looks backward for the previous occurrence of @oparam{pattern} in + @oparam{stringToSearch} and returns the position of the first character of + the @oparam{pattern} if found. The search for the pattern begins at + @oparam{startPos}. If @oparam{pattern} is found, @oparam{patternFound} is + returned as @code{TRUE}, and @oparam{posOfPattern} contains the start + position in @oparam{stringToSearch} of pattern in the range [0..startPos]. + Otherwise @oparam{patternFound} is returned as @code{FALSE}, and + @oparam{posOfPattern} is unchanged. The pattern might be found at the given + value of @oparam{startPos}. The search will fail if @oparam{startPos} is + negative. If @samp{startPos > Length(stringToSearch)-Length(pattern)} the + whole string value is searched. *) + VAR + patternPos, stringLength, patternLength: INTEGER; + BEGIN + (* correct `startPos' if it is larger than the possible searching range *) + stringLength := Length (stringToSearch); + patternLength := Length (pattern); + IF (startPos > stringLength-patternLength) THEN + startPos := stringLength-patternLength + END; + + IF (startPos >= 0) THEN + patternPos := 0; + LOOP + IF (pattern[patternPos] = 0X) THEN + (* reached end of pattern *) + patternFound := TRUE; + posOfPattern := startPos-patternPos; + EXIT + ELSIF (stringToSearch[startPos] # pattern[patternPos]) THEN + (* characters differ: reset indices and restart *) + IF (startPos > patternPos) THEN + startPos := startPos-patternPos-1; + patternPos := 0 + ELSE + (* reached beginning of `stringToSearch' without finding a match *) + patternFound := FALSE; + EXIT + END + ELSE (* characters identic, compare next one *) + INC (startPos); + INC (patternPos) + END + END + ELSE + patternFound := FALSE + END + END FindPrev; + +PROCEDURE FindDiff* (stringVal1, stringVal2: ARRAY OF CHAR; + VAR differenceFound: BOOLEAN; + VAR posOfDifference: INTEGER); +(**Compares the string values in @oparam{stringVal1} and @oparam{stringVal2} + for differences. If they are equal, @oparam{differenceFound} is returned as + @code{FALSE}, and @code{TRUE} otherwise. If @oparam{differenceFound} is + @code{TRUE}, @oparam{posOfDifference} is set to the position of the first + difference; otherwise @oparam{posOfDifference} is unchanged. *) + VAR + i: INTEGER; + BEGIN + i := 0; + WHILE (stringVal1[i] # 0X) & (stringVal1[i] = stringVal2[i]) DO + INC (i) + END; + differenceFound := (stringVal1[i] # 0X) OR (stringVal2[i] # 0X); + IF differenceFound THEN + posOfDifference := i + END + END FindDiff; + + +PROCEDURE Capitalize* (VAR stringVar: ARRAY OF CHAR); +(**Applies the function @code{CAP} to each character of the string value in + @oparam{stringVar}. *) + VAR + i: INTEGER; + BEGIN + i := 0; + WHILE (stringVar[i] # 0X) DO + stringVar[i] := CAP (stringVar[i]); + INC (i) + END + END Capitalize; + +END ooc2Strings. diff --git a/src/lib/system/gnuc/Console.Mod b/src/lib/system/gnuc/Console.Mod new file mode 100644 index 00000000..e523ef7b --- /dev/null +++ b/src/lib/system/gnuc/Console.Mod @@ -0,0 +1,86 @@ +MODULE Console; (* J. Templ, 29-June-96 *) + + (* output to Unix standard output device based Write system call *) + + IMPORT SYSTEM; + + VAR line: ARRAY 128 OF CHAR; + pos: INTEGER; + + PROCEDURE -Write(adr, n: LONGINT) + "write(1/*stdout*/, adr, n)"; + + PROCEDURE -read(VAR ch: CHAR): LONGINT + "read(0/*stdin*/, ch, 1)"; + + PROCEDURE Flush*(); + BEGIN + Write(SYSTEM.ADR(line), pos); pos := 0; + END Flush; + + PROCEDURE Char*(ch: CHAR); + BEGIN + IF pos = LEN(line) THEN Flush() END ; + line[pos] := ch; INC(pos); + IF ch = 0AX THEN Flush() END + END Char; + + PROCEDURE String*(s: ARRAY OF CHAR); + VAR i: INTEGER; + BEGIN i := 0; + WHILE s[i] # 0X DO Char(s[i]); INC(i) END + END String; + + PROCEDURE Int*(i, n: LONGINT); + VAR s: ARRAY 32 OF CHAR; i1, k: LONGINT; + BEGIN + IF i = SYSTEM.LSH(LONG(LONG(1)), SIZE(LONGINT)*8 - 1) THEN + IF SIZE(LONGINT) = 8 THEN s := "8085774586302733229"; k := 19 + ELSE s := "8463847412"; k := 10 + END + ELSE + i1 := ABS(i); + s[0] := CHR(i1 MOD 10 + ORD("0")); i1 := i1 DIV 10; k := 1; + WHILE i1 > 0 DO s[k] := CHR(i1 MOD 10 + ORD("0")); i1 := i1 DIV 10; INC(k) END + END ; + IF i < 0 THEN s[k] := "-"; INC(k) END ; + WHILE n > k DO Char(" "); DEC(n) END ; + WHILE k > 0 DO DEC(k); Char(s[k]) END + END Int; + + PROCEDURE Ln*; + BEGIN Char(0AX); (* Unix end-of-line *) + END Ln; + + PROCEDURE Bool*(b: BOOLEAN); + BEGIN IF b THEN String("TRUE") ELSE String("FALSE") END + END Bool; + + PROCEDURE Hex*(i: LONGINT); + VAR k, n: LONGINT; + BEGIN + k := -28; + WHILE k <= 0 DO + n := ASH(i, k) MOD 16; + IF n <= 9 THEN Char(CHR(ORD("0") + n)) ELSE Char(CHR(ORD("A") - 10 + n)) END ; + INC(k, 4) + END + END Hex; + + PROCEDURE Read*(VAR ch: CHAR); + VAR n: LONGINT; + BEGIN Flush(); + n := read(ch); + IF n # 1 THEN ch := 0X END + END Read; + + PROCEDURE ReadLine*(VAR line: ARRAY OF CHAR); + VAR i: LONGINT; ch: CHAR; + BEGIN Flush(); + i := 0; Read(ch); + WHILE (i < LEN(line) - 1) & (ch # 0AX) & (ch # 0X) DO line[i] := ch; INC(i); Read(ch) END ; + line[i] := 0X + END ReadLine; + +BEGIN pos := 0; +END Console. diff --git a/src/lib/system/gnuc/SYSTEM.Mod b/src/lib/system/gnuc/SYSTEM.Mod new file mode 100644 index 00000000..6fc08dcf --- /dev/null +++ b/src/lib/system/gnuc/SYSTEM.Mod @@ -0,0 +1,520 @@ +(* +* voc (jet backend) runtime system, Version 1.1 +* +* Copyright (c) Software Templ, 1994, 1995, 1996 +* +* Module SYSTEM is subject to change any time without prior notification. +* Software Templ disclaims all warranties with regard to module SYSTEM, +* in particular shall Software Templ not be liable for any damage resulting +* from inappropriate use or modification of module SYSTEM. +*) + +MODULE SYSTEM; (* J. Templ, 31.5.95 *) + + IMPORT SYSTEM; (*must not import other modules*) + + CONST + ModNameLen = 20; + CmdNameLen = 24; + SZL = SIZE(LONGINT); + Unit = 4*SZL; (* smallest possible heap block *) + nofLists = 9; (* number of free_lists *) + heapSize0 = 8000*Unit; (* startup heap size *) + + (* all blocks look the same: + free blocks describe themselves: size = Unit + tag = &tag++ + ->blksize + sentinel = -SZL + next + *) + + (* heap chunks *) + nextChnkOff = 0; (* next heap chunk, sorted ascendingly! *) + endOff = SZL; (* end of heap chunk *) + blkOff = 3*SZL; (* first block in a chunk *) + + (* heap blocks *) + tagOff = 0; (* block starts with tag *) + sizeOff = SZL; (* block size in free block relative to block start *) + sntlOff = 2*SZL; (* pointer offset table sentinel in free block relative to block start *) + nextOff = 3*SZL; (* next pointer in free block relative to block start *) + NoPtrSntl = LONG(LONG(-SZL)); + + + TYPE + ModuleName = ARRAY ModNameLen OF CHAR; + CmdName = ARRAY CmdNameLen OF CHAR; + + Module = POINTER TO ModuleDesc; + Cmd = POINTER TO CmdDesc; + EnumProc = PROCEDURE(P: PROCEDURE(p: SYSTEM.PTR)); + ModuleDesc = RECORD + next: Module; + name: ModuleName; + refcnt: LONGINT; + cmds: Cmd; + types: LONGINT; + enumPtrs: EnumProc; + reserved1, reserved2: LONGINT + END ; + + Command = PROCEDURE; + + CmdDesc = RECORD + next: Cmd; + name: CmdName; + cmd: Command + END ; + + Finalizer = PROCEDURE(obj: SYSTEM.PTR); + + FinNode = POINTER TO FinDesc; + FinDesc = RECORD + next: FinNode; + obj: LONGINT; (* weak pointer *) + marked: BOOLEAN; + finalize: Finalizer; + END ; + + VAR + (* the list of loaded (=initialization started) modules *) + modules*: SYSTEM.PTR; + + freeList: ARRAY nofLists + 1 OF LONGINT; (* dummy, 16, 32, 48, 64, 80, 96, 112, 128, sentinel *) + bigBlocks, allocated*: LONGINT; + firstTry: BOOLEAN; + + (* extensible heap *) + heap, (* the sorted list of heap chunks *) + heapend, (* max possible pointer value (used for stack collection) *) + heapsize*: LONGINT; (* the sum of all heap chunk sizes *) + + (* finalization candidates *) + fin: FinNode; + + (* garbage collector locking *) + gclock*: SHORTINT; + + + PROCEDURE -malloc(size: LONGINT): LONGINT "(LONGINT)malloc(size)"; + PROCEDURE -Lock() "Lock"; + PROCEDURE -Unlock() "Unlock"; + PROCEDURE -Mainfrm(): LONGINT "SYSTEM_mainfrm"; +(* + PROCEDURE TAS*(VAR flag:BOOLEAN): BOOLEAN; (* added for compatibility with ulmSYSTEM module; noch *) + VAR oldflag : BOOLEAN; + BEGIN + oldflag := flag; + flag := TRUE; + RETURN oldflag; + END TAS; +*) + PROCEDURE REGMOD*(VAR name: ModuleName; enumPtrs: EnumProc): SYSTEM.PTR; + VAR m: Module; + BEGIN + IF name = "SYSTEM" THEN (* cannot use NEW *) + SYSTEM.NEW(m, SIZE(ModuleDesc)); m.cmds := NIL + ELSE NEW(m) + END ; + COPY(name, m.name); m.refcnt := 0; m.enumPtrs := enumPtrs; m.next := SYSTEM.VAL(Module, modules); + modules := m; + RETURN m + END REGMOD; + + PROCEDURE REGCMD*(m: Module; VAR name: CmdName; cmd: Command); + VAR c: Cmd; + BEGIN NEW(c); + COPY(name, c.name); c.cmd := cmd; c.next := m.cmds; m.cmds := c + END REGCMD; + + PROCEDURE REGTYP*(m: Module; typ: LONGINT); + BEGIN SYSTEM.PUT(typ, m.types); m.types := typ + END REGTYP; + + PROCEDURE INCREF*(m: Module); + BEGIN INC(m.refcnt) + END INCREF; + + PROCEDURE NewChunk(blksz: LONGINT): LONGINT; + VAR chnk: LONGINT; + BEGIN + chnk := malloc(blksz + blkOff); + IF chnk # 0 THEN + SYSTEM.PUT(chnk + endOff, chnk + (blkOff + blksz)); + SYSTEM.PUT(chnk + blkOff, chnk + (blkOff + sizeOff)); + SYSTEM.PUT(chnk + (blkOff + sizeOff), blksz); + SYSTEM.PUT(chnk + (blkOff + sntlOff), NoPtrSntl); + SYSTEM.PUT(chnk + (blkOff + nextOff), bigBlocks); + bigBlocks := chnk + blkOff; + INC(heapsize, blksz) + END ; + RETURN chnk + END NewChunk; + + PROCEDURE ExtendHeap(blksz: LONGINT); + VAR size, chnk, j, next: LONGINT; + BEGIN + IF blksz > 10000*Unit THEN size := blksz + ELSE size := 10000*Unit (* additional heuristics *) + END ; + chnk := NewChunk(size); + IF chnk # 0 THEN + (*sorted insertion*) + IF chnk < heap THEN + SYSTEM.PUT(chnk, heap); heap := chnk + ELSE + j := heap; SYSTEM.GET(j, next); + WHILE (next # 0) & (chnk > next) DO j := next; SYSTEM.GET(j, next) END ; + SYSTEM.PUT(chnk, next); SYSTEM.PUT(j, chnk) + END ; + IF next = 0 THEN SYSTEM.GET(chnk + endOff, heapend) END + END + END ExtendHeap; + + PROCEDURE ^GC*(markStack: BOOLEAN); + + PROCEDURE NEWREC*(tag: LONGINT): SYSTEM.PTR; + VAR i, i0, di, blksz, restsize, t, adr, end, next, prev: LONGINT; new: SYSTEM.PTR; + BEGIN + Lock(); + SYSTEM.GET(tag, blksz); + ASSERT(blksz MOD Unit = 0); + i0 := blksz DIV Unit; i := i0; + IF i < nofLists THEN adr := freeList[i]; + WHILE adr = 0 DO INC(i); adr := freeList[i] END + END ; + IF i < nofLists THEN (* unlink *) + SYSTEM.GET(adr + nextOff, next); + freeList[i] := next; + IF i # i0 THEN (* split *) + di := i - i0; restsize := di * Unit; end := adr + restsize; + SYSTEM.PUT(end + sizeOff, blksz); + SYSTEM.PUT(end + sntlOff, NoPtrSntl); + SYSTEM.PUT(end, end + sizeOff); + SYSTEM.PUT(adr + sizeOff, restsize); + SYSTEM.PUT(adr + nextOff, freeList[di]); + freeList[di] := adr; + INC(adr, restsize) + END + ELSE + adr := bigBlocks; prev := 0; + LOOP + IF adr = 0 THEN + IF firstTry THEN + GC(TRUE); INC(blksz, Unit); + IF (heapsize - allocated - blksz) * 4 < heapsize THEN + (* heap is still almost full; expand to avoid thrashing *) + ExtendHeap((allocated + blksz) DIV (3*Unit) * (4*Unit) - heapsize) + END ; + firstTry := FALSE; new := NEWREC(tag); firstTry := TRUE; + IF new = NIL THEN + (* depending on the fragmentation, the heap may not have been extended by + the anti-thrashing heuristics above *) + ExtendHeap((allocated + blksz) DIV (3*Unit) * (4*Unit) - heapsize); + new := NEWREC(tag); (* will find a free block if heap has been expanded properly *) + END ; + Unlock(); RETURN new + ELSE + Unlock(); RETURN NIL + END + END ; + SYSTEM.GET(adr+sizeOff, t); + IF t >= blksz THEN EXIT END ; + prev := adr; SYSTEM.GET(adr + nextOff, adr) + END ; + restsize := t - blksz; end := adr + restsize; + SYSTEM.PUT(end + sizeOff, blksz); + SYSTEM.PUT(end + sntlOff, NoPtrSntl); + SYSTEM.PUT(end, end + sizeOff); + IF restsize > nofLists * Unit THEN (*resize*) + SYSTEM.PUT(adr + sizeOff, restsize) + ELSE (*unlink*) + SYSTEM.GET(adr + nextOff, next); + IF prev = 0 THEN bigBlocks := next + ELSE SYSTEM.PUT(prev + nextOff, next); + END ; + IF restsize > 0 THEN (*move*) + di := restsize DIV Unit; + SYSTEM.PUT(adr + sizeOff, restsize); + SYSTEM.PUT(adr + nextOff, freeList[di]); + freeList[di] := adr + END + END ; + INC(adr, restsize) + END ; + i := adr + 4*SZL; end := adr + blksz; + WHILE i < end DO (*deliberately unrolled*) + SYSTEM.PUT(i, LONG(LONG(0))); + SYSTEM.PUT(i + SZL, LONG(LONG(0))); + SYSTEM.PUT(i + 2*SZL, LONG(LONG(0))); + SYSTEM.PUT(i + 3*SZL, LONG(LONG(0))); + INC(i, 4*SZL) + END ; + SYSTEM.PUT(adr + nextOff, LONG(LONG(0))); + SYSTEM.PUT(adr, tag); + SYSTEM.PUT(adr + sizeOff, LONG(LONG(0))); + SYSTEM.PUT(adr + sntlOff, LONG(LONG(0))); + INC(allocated, blksz); + Unlock(); + RETURN SYSTEM.VAL(SYSTEM.PTR, adr + SZL) + END NEWREC; + + PROCEDURE NEWBLK*(size: LONGINT): SYSTEM.PTR; + VAR blksz, tag: LONGINT; new: SYSTEM.PTR; + BEGIN + Lock(); + blksz := (size + (4*SZL + Unit - 1)) DIV Unit * Unit; (*size + tag + meta + blksz + sntnl + UnitAlignment*) + new := NEWREC(SYSTEM.ADR(blksz)); + tag := SYSTEM.VAL(LONGINT, new) + blksz - 3*SZL; + SYSTEM.PUT(tag - SZL, LONG(LONG(0))); (*reserved for meta info*) + SYSTEM.PUT(tag, blksz); + SYSTEM.PUT(tag + SZL, NoPtrSntl); + SYSTEM.PUT(SYSTEM.VAL(LONGINT, new) - SZL, tag); + Unlock(); + RETURN new + END NEWBLK; + + PROCEDURE Mark(q: LONGINT); + VAR p, tag, fld, n, offset, tagbits: LONGINT; + BEGIN + IF q # 0 THEN SYSTEM.GET(q - SZL, tagbits); + IF ~ODD(tagbits) THEN + SYSTEM.PUT(q - SZL, tagbits + 1); + p := 0; tag := tagbits + SZL; + LOOP + SYSTEM.GET(tag, offset); + IF offset < 0 THEN + SYSTEM.PUT(q - SZL, tag + offset + 1); + IF p = 0 THEN EXIT END ; + n := q; q := p; + SYSTEM.GET(q - SZL, tag); DEC(tag, 1); + SYSTEM.GET(tag, offset); fld := q + offset; + SYSTEM.GET(fld, p); SYSTEM.PUT(fld, n) + ELSE + fld := q + offset; + SYSTEM.GET(fld, n); + IF n # 0 THEN + SYSTEM.GET(n - SZL, tagbits); + IF ~ODD(tagbits) THEN + SYSTEM.PUT(n - SZL, tagbits + 1); + SYSTEM.PUT(q - SZL, tag + 1); + SYSTEM.PUT(fld, p); p := q; q := n; + tag := tagbits + END + END + END ; + INC(tag, SZL) + END + END + END + END Mark; + + PROCEDURE MarkP(p: SYSTEM.PTR); (* for compatibility with EnumPtrs in ANSI mode *) + BEGIN + Mark(SYSTEM.VAL(LONGINT, p)) + END MarkP; + + PROCEDURE Scan; + VAR chnk, adr, end, start, tag, i, size, freesize: LONGINT; + BEGIN bigBlocks := 0; i := 1; + WHILE i < nofLists DO freeList[i] := 0; INC(i) END ; + freesize := 0; allocated := 0; chnk := heap; + WHILE chnk # 0 DO + adr := chnk + blkOff; SYSTEM.GET(chnk + endOff, end); + WHILE adr < end DO + SYSTEM.GET(adr, tag); + IF ODD(tag) THEN (*marked*) + IF freesize > 0 THEN + start := adr - freesize; + SYSTEM.PUT(start, start+SZL); + SYSTEM.PUT(start+sizeOff, freesize); + SYSTEM.PUT(start+sntlOff, NoPtrSntl); + i := freesize DIV Unit; freesize := 0; + IF i < nofLists THEN SYSTEM.PUT(start + nextOff, freeList[i]); freeList[i] := start + ELSE SYSTEM.PUT(start + nextOff, bigBlocks); bigBlocks := start + END + END ; + DEC(tag, 1); + SYSTEM.PUT(adr, tag); + SYSTEM.GET(tag, size); + INC(allocated, size); + INC(adr, size) + ELSE (*unmarked*) + SYSTEM.GET(tag, size); + INC(freesize, size); + INC(adr, size) + END + END ; + IF freesize > 0 THEN (*collect last block*) + start := adr - freesize; + SYSTEM.PUT(start, start+SZL); + SYSTEM.PUT(start+sizeOff, freesize); + SYSTEM.PUT(start+sntlOff, NoPtrSntl); + i := freesize DIV Unit; freesize := 0; + IF i < nofLists THEN SYSTEM.PUT(start + nextOff, freeList[i]); freeList[i] := start + ELSE SYSTEM.PUT(start + nextOff, bigBlocks); bigBlocks := start + END + END ; + SYSTEM.GET(chnk, chnk) + END + END Scan; + + PROCEDURE Sift (l, r: LONGINT; VAR a: ARRAY OF LONGINT); + VAR i, j, x: LONGINT; + BEGIN j := l; x := a[j]; + LOOP i := j; j := 2*j + 1; + IF (j < r) & (a[j] < a[j+1]) THEN INC(j) END; + IF (j > r) OR (a[j] <= x) THEN EXIT END; + a[i] := a[j] + END; + a[i] := x + END Sift; + + PROCEDURE HeapSort (n: LONGINT; VAR a: ARRAY OF LONGINT); + VAR l, r, x: LONGINT; + BEGIN l := n DIV 2; r := n - 1; + WHILE l > 0 DO DEC(l); Sift(l, r, a) END; + WHILE r > 0 DO x := a[0]; a[0] := a[r]; a[r] := x; DEC(r); Sift(l, r, a) END + END HeapSort; + + PROCEDURE MarkCandidates(n: LONGINT; VAR cand: ARRAY OF LONGINT); + VAR chnk, adr, tag, next, lim, lim1, i, ptr, size: LONGINT; + BEGIN + chnk := heap; i := 0; lim := cand[n-1]; + WHILE (chnk # 0 ) & (chnk < lim) DO + adr := chnk + blkOff; + SYSTEM.GET(chnk + endOff, lim1); + IF lim < lim1 THEN lim1 := lim END ; + WHILE adr < lim1 DO + SYSTEM.GET(adr, tag); + IF ODD(tag) THEN (*already marked*) + SYSTEM.GET(tag-1, size); INC(adr, size) + ELSE + SYSTEM.GET(tag, size); + ptr := adr + SZL; + WHILE cand[i] < ptr DO INC(i) END ; + IF i = n THEN RETURN END ; + next := adr + size; + IF cand[i] < next THEN Mark(ptr) END ; + adr := next + END + END ; + SYSTEM.GET(chnk, chnk) + END + END MarkCandidates; + + PROCEDURE CheckFin; + VAR n: FinNode; tag: LONGINT; + BEGIN n := fin; + WHILE n # NIL DO + SYSTEM.GET(n.obj - SZL, tag); + IF ~ODD(tag) THEN n.marked := FALSE; Mark(n.obj) + ELSE n.marked := TRUE + END ; + n := n.next + END + END CheckFin; + + PROCEDURE Finalize; + VAR n, prev: FinNode; + BEGIN n := fin; prev := NIL; + WHILE n # NIL DO + IF ~n.marked THEN + IF n = fin THEN fin := fin.next ELSE prev.next := n.next END ; + n.finalize(SYSTEM.VAL(SYSTEM.PTR, n.obj)); + (* new nodes may have been pushed in n.finalize, therefore: *) + IF prev = NIL THEN n := fin ELSE n := n.next END + ELSE prev := n; n := n.next + END + END + END Finalize; + + PROCEDURE FINALL*; + VAR n: FinNode; + BEGIN + WHILE fin # NIL DO + n := fin; fin := fin.next; + n.finalize(SYSTEM.VAL(SYSTEM.PTR, n.obj)) + END + END FINALL; + + PROCEDURE MarkStack(n: LONGINT; VAR cand: ARRAY OF LONGINT); + VAR + frame: SYSTEM.PTR; + inc, nofcand: LONGINT; + sp, p, stack0, ptr: LONGINT; + align: RECORD ch: CHAR; p: SYSTEM.PTR END ; + BEGIN + IF n > 0 THEN MarkStack(n-1, cand); (* flush register windows by means of recursive calls *) + IF n > 100 THEN RETURN END (* prevent tail recursion optimization *) + END ; + IF n = 0 THEN + nofcand := 0; sp := SYSTEM.ADR(frame); + stack0 := Mainfrm(); + (* check for minimum alignment of pointers *) + inc := SYSTEM.ADR(align.p) - SYSTEM.ADR(align); + IF sp > stack0 THEN inc := -inc END ; + WHILE sp # stack0 DO + SYSTEM.GET(sp, p); + IF (p > heap) & (p < heapend) THEN + IF nofcand = LEN(cand) THEN HeapSort(nofcand, cand); MarkCandidates(nofcand, cand); nofcand := 0 END ; + cand[nofcand] := p; INC(nofcand) + END ; + INC(sp, inc) + END ; + IF nofcand > 0 THEN HeapSort(nofcand, cand); MarkCandidates(nofcand, cand) END + END + END MarkStack; + + PROCEDURE GC*(markStack: BOOLEAN); + VAR + m: Module; + i0, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18, i19, i20, i21, i22, i23: LONGINT; + cand: ARRAY 10000 OF LONGINT; + BEGIN + IF (gclock = 0) OR (gclock = 1) & ~markStack THEN + Lock(); + m := SYSTEM.VAL(Module, modules); + WHILE m # NIL DO + IF m.enumPtrs # NIL THEN m.enumPtrs(MarkP) END ; + m := m^.next + END ; + IF markStack THEN + (* generate register pressure to force callee saved registers to memory; + may be simplified by inlining OS calls or processor specific instructions + *) + i0 := -100; i1 := -101; i2 := -102; i3 := -103; i4 := -104; i5 := -105; i6 := -106; i7 := -107; + i8 := 1; i9 := 2; i10 := 3; i11 := 4; i12 := 5; i13 := 6; i14 := 7; i15 := 8; + i16 := 9; i17 := 10; i18 := 11; i19 := 12; i20 := 13; i21 := 14; i22 := 15; i23 := 16; + LOOP INC(i0, 1); INC(i1, 2); INC(i2, 3); INC(i3, 4); INC(i4, 5); INC(i5, 6); INC(i6, 7); INC(i7, 8); + INC(i8, 9); INC(i9, 10); INC(i10, 11); INC(i11, 12); INC(i12, 13); INC(i13, 14); INC(i14, 15); INC(i15, 16); + INC(i16, 17); INC(i17, 18); INC(i18, 19); INC(i19, 20); INC(i20, 21); INC(i21, 22); INC(i22, 23); INC(i23, 24); + IF (i0 = -99) & (i15 = 24) THEN MarkStack(32, cand); EXIT END + END ; + IF i0 + i1 + i2 + i3 + i4 + i5 + i6 + i7 + i8 + i9 + i10 + i11 + i12 + i13 + i14 + i15 + + i16 + i17 + i18 + i19 + i20 + i21 + i22 + i23 > 10000 THEN RETURN (* use all variables *) + END ; + END; + CheckFin; + Scan; + Finalize; + Unlock() + END + END GC; + + PROCEDURE REGFIN*(obj: SYSTEM.PTR; finalize: Finalizer); + VAR f: FinNode; + BEGIN NEW(f); + f.obj := SYSTEM.VAL(LONGINT, obj); f.finalize := finalize; f.marked := TRUE; f.next := fin; fin := f + END REGFIN; + + PROCEDURE InitHeap; (* initialized before body to enable NEW, SYSTEM.NEW *) + BEGIN + heap := NewChunk(heapSize0); + SYSTEM.GET(heap + endOff, heapend); + SYSTEM.PUT(heap, LONG(LONG(0))); + allocated := 0; firstTry := TRUE; freeList[nofLists] := 1; gclock := 0 + END InitHeap; + +END SYSTEM. diff --git a/src/lib/system/gnuc/armv6j/Args.Mod b/src/lib/system/gnuc/armv6j/Args.Mod new file mode 100644 index 00000000..52228613 --- /dev/null +++ b/src/lib/system/gnuc/armv6j/Args.Mod @@ -0,0 +1,52 @@ +MODULE Args; (* jt, 8.12.94 *) + + (* command line argument handling for ofront *) + + + IMPORT SYSTEM; + + TYPE + ArgPtr = POINTER TO ARRAY 1024 OF CHAR; + ArgVec = POINTER TO ARRAY 1024 OF ArgPtr; + + VAR argc-, argv-: LONGINT; + + PROCEDURE -Argc(): INTEGER "SYSTEM_argc"; + PROCEDURE -Argv(): LONGINT "(long)SYSTEM_argv"; + PROCEDURE -getenv(var: ARRAY OF CHAR): ArgPtr + "(Args_ArgPtr)getenv(var)"; + + PROCEDURE Get*(n: INTEGER; VAR val: ARRAY OF CHAR); + VAR av: ArgVec; + BEGIN + IF n < argc THEN av := SYSTEM.VAL(ArgVec, argv); COPY(av[n]^, val) END + END Get; + + PROCEDURE GetInt*(n: INTEGER; VAR val: LONGINT); + VAR s: ARRAY 64 OF CHAR; k, d, i: LONGINT; + BEGIN + s := ""; Get(n, s); i := 0; + IF s[0] = "-" THEN i := 1 END ; + k := 0; d := ORD(s[i]) - ORD("0"); + WHILE (d >= 0 ) & (d <= 9) DO k := k*10 + d; INC(i); d := ORD(s[i]) - ORD("0") END ; + IF s[0] = "-" THEN d := -d; DEC(i) END ; + IF i > 0 THEN val := k END + END GetInt; + + PROCEDURE Pos*(s: ARRAY OF CHAR): INTEGER; + VAR i: INTEGER; arg: ARRAY 256 OF CHAR; + BEGIN + i := 0; Get(i, arg); + WHILE (i < argc) & (s # arg) DO INC(i); Get(i, arg) END ; + RETURN i + END Pos; + + PROCEDURE GetEnv*(var: ARRAY OF CHAR; VAR val: ARRAY OF CHAR); + VAR p: ArgPtr; + BEGIN + p := getenv(var); + IF p # NIL THEN COPY(p^, val) END + END GetEnv; + +BEGIN argc := Argc(); argv := Argv() +END Args. diff --git a/src/lib/system/gnuc/armv6j/SYSTEM.c0 b/src/lib/system/gnuc/armv6j/SYSTEM.c0 new file mode 100644 index 00000000..580449aa --- /dev/null +++ b/src/lib/system/gnuc/armv6j/SYSTEM.c0 @@ -0,0 +1,205 @@ +/* +* The body prefix file of the Ofront runtime system, Version 1.0 +* +* Copyright (c) Software Templ, 1994, 1995 +* +* Module SYSTEM is subject to change any time without prior notification. +* Software Templ disclaims all warranties with regard to module SYSTEM, +* in particular shall Software Templ not be liable for any damage resulting +* from inappropriate use or modification of module SYSTEM. +* +* Version 1.1 jt, 24.11.95 fixes for correct pointer arithmetic on Cray computers +* jt 31.1.2007 ANSI prototypes for malloc and exit in order to avoid cc warnings +* +*/ + +#include "SYSTEM.h" +#ifdef __STDC__ +#include "stdarg.h" +#else +#include "varargs.h" +#endif + +extern void *malloc(long size); +extern void exit(int status); + +void (*SYSTEM_Halt)(); +LONGINT SYSTEM_halt; /* x in HALT(x) */ +LONGINT SYSTEM_assert; /* x in ASSERT(cond, x) */ +LONGINT SYSTEM_argc; +LONGINT SYSTEM_argv; +LONGINT SYSTEM_lock; +BOOLEAN SYSTEM_interrupted; +static LONGINT SYSTEM_mainfrm; /* adr of main proc stack frame, used for stack collection */ + +#define Lock SYSTEM_lock++ +#define Unlock SYSTEM_lock--; if (SYSTEM_interrupted && (SYSTEM_lock == 0)) __HALT(-9) + + +static void SYSTEM_InitHeap(); +void *SYSTEM__init(); + +void SYSTEM_INIT(argc, argvadr) + int argc; long argvadr; +{ + SYSTEM_mainfrm = argvadr; + SYSTEM_argc = argc; + SYSTEM_argv = *(long*)argvadr; + SYSTEM_InitHeap(); + SYSTEM_halt = -128; + SYSTEM__init(); +} + +void SYSTEM_FINI() +{ + SYSTEM_FINALL(); +} + +long SYSTEM_XCHK(i, ub) long i, ub; {return __X(i, ub);} +long SYSTEM_RCHK(i, ub) long i, ub; {return __R(i, ub);} +long SYSTEM_ASH(i, n) long i, n; {return __ASH(i, n);} +long SYSTEM_ABS(i) long i; {return __ABS(i);} +double SYSTEM_ABSD(i) double i; {return __ABS(i);} + +void SYSTEM_INHERIT(t, t0) + long *t, *t0; +{ + t -= __TPROC0OFF; + t0 -= __TPROC0OFF; + while (*t0 != __EOM) {*t = *t0; t--; t0--;} +} + +void SYSTEM_ENUMP(adr, n, P) + long *adr; + long n; + void (*P)(); +{ + while (n > 0) {P(*adr); adr++; n--;} +} + +void SYSTEM_ENUMR(adr, typ, size, n, P) + char *adr; + long *typ, size, n; + void (*P)(); +{ + long *t, off; + typ++; + while (n > 0) { + t = typ; + off = *t; + while (off >= 0) {P(*(long*)(adr+off)); t++; off = *t;} + adr += size; n--; + } +} + +long SYSTEM_DIV(x, y) + unsigned long x, y; +{ if ((long) x >= 0) return (x / y); + else return -((y - 1 - x) / y); +} + +long SYSTEM_MOD(x, y) + unsigned long x, y; +{ unsigned long m; + if ((long) x >= 0) return (x % y); + else { m = (-x) % y; + if (m != 0) return (y - m); else return 0; + } +} + +long SYSTEM_ENTIER(x) + double x; +{ + long y; + if (x >= 0) + return (long)x; + else { + y = (long)x; + if (y <= x) return y; else return y - 1; + } +} + +void SYSTEM_HALT(n) + int n; +{ + SYSTEM_halt = n; + if (SYSTEM_Halt!=0) SYSTEM_Halt(n); + exit(n); +} + +#ifdef __STDC__ +SYSTEM_PTR SYSTEM_NEWARR(long *typ, long elemsz, int elemalgn, int nofdim, int nofdyn, ...) +#else +SYSTEM_PTR SYSTEM_NEWARR(typ, elemsz, elemalgn, nofdim, nofdyn, va_alist) + long *typ, elemsz; + int elemalgn, nofdim, nofdyn; + va_dcl +#endif +{ + long nofelems, size, dataoff, n, nptr, *x, *p, nofptrs, i, *ptab, off; + va_list ap; +#ifdef __STDC__ + va_start(ap, nofdyn); +#else + va_start(ap); +#endif + nofelems = 1; + while (nofdim > 0) { + nofelems = nofelems * va_arg(ap, long); nofdim--; + if (nofelems <= 0) __HALT(-20); + } + va_end(ap); + dataoff = nofdyn * sizeof(long); + if (elemalgn > sizeof(long)) { + n = dataoff % elemalgn; + if (n != 0) dataoff += elemalgn - n; + } + size = dataoff + nofelems * elemsz; + Lock; + if (typ == NIL) { + /* element typ does not contain pointers */ + x = SYSTEM_NEWBLK(size); + } + else if (typ == POINTER__typ) { + /* element type is a pointer */ + x = SYSTEM_NEWBLK(size + nofelems * sizeof(long)); + p = (long*)x[-1]; + p[-nofelems] = *p; /* build new type desc in situ: 1. copy block size; 2. setup ptr tab; 3. set sentinel; 4. patch tag */ + p -= nofelems - 1; n = 1; /* n =1 for skipping the size field */ + while (n <= nofelems) {*p = n*sizeof(long); p++; n++;} + *p = - (nofelems + 1) * sizeof(long); /* sentinel */ + x[-1] -= nofelems * sizeof(long); + } + else { + /* element type is a record that contains pointers */ + ptab = typ + 1; nofptrs = 0; + while (ptab[nofptrs] >= 0) {nofptrs++;} /* number of pointers per element */ + nptr = nofelems * nofptrs; /* total number of pointers */ + x = SYSTEM_NEWBLK(size + nptr * sizeof(long)); + p = (long*)x[- 1]; + p[-nptr] = *p; /* build new type desc in situ; 1. copy block size; 2. setup ptr tab; 3. set sentinel; 4. patch tag */ + p -= nptr - 1; n = 0; off = dataoff; + while (n < nofelems) {i = 0; + while (i < nofptrs) {*p = off + ptab[i]; p++; i++;} + off += elemsz; n++; + } + *p = - (nptr + 1) * sizeof(long); /* sentinel */ + x[-1] -= nptr * sizeof(long); + } + if (nofdyn != 0) { + /* setup len vector for index checks */ +#ifdef __STDC__ + va_start(ap, nofdyn); +#else + va_start(ap); +#endif + p = x; + while (nofdyn > 0) {*p = va_arg(ap, long); p++, nofdyn--;} + va_end(ap); + } + Unlock; + return x; +} + +/* ----------- end of SYSTEM.co ------------- */ + diff --git a/src/lib/system/gnuc/armv6j/SYSTEM.h b/src/lib/system/gnuc/armv6j/SYSTEM.h new file mode 100644 index 00000000..719a6d18 --- /dev/null +++ b/src/lib/system/gnuc/armv6j/SYSTEM.h @@ -0,0 +1,215 @@ +#ifndef SYSTEM__h +#define SYSTEM__h + +/* + +the Ofront runtime system interface and macros library +copyright (c) Josef Templ, 1995, 1996 + +gcc for Linux version (same as SPARC/Solaris2) +uses double # as concatenation operator + +*/ + +#include + +//extern void *memcpy(void *dest, const void *src, long n); +extern void *memcpy(void *dest, const void *src, size_t n); +extern void *malloc(long size); +extern void exit(int status); + +#define export +#define import extern + +/* constants */ +#define __MAXEXT 16 +#define NIL 0L +#define POINTER__typ (long*)1L /* not NIL and not a valid type */ + +/* basic types */ +typedef char BOOLEAN; +typedef unsigned char CHAR; +typedef signed char SHORTINT; +typedef short int INTEGER; +typedef long LONGINT; +typedef float REAL; +typedef double LONGREAL; +typedef unsigned long SET; +typedef void *SYSTEM_PTR; +typedef unsigned char SYSTEM_BYTE; + +/* runtime system routines */ +extern long SYSTEM_DIV(); +extern long SYSTEM_MOD(); +extern long SYSTEM_ENTIER(); +extern long SYSTEM_ASH(); +extern long SYSTEM_ABS(); +extern long SYSTEM_XCHK(); +extern long SYSTEM_RCHK(); +extern double SYSTEM_ABSD(); +extern SYSTEM_PTR SYSTEM_NEWREC(); +extern SYSTEM_PTR SYSTEM_NEWBLK(); +#ifdef __STDC__ +extern SYSTEM_PTR SYSTEM_NEWARR(long*, long, int, int, int, ...); +#else +extern SYSTEM_PTR SYSTEM_NEWARR(); +#endif +extern SYSTEM_PTR SYSTEM_REGMOD(); +extern void SYSTEM_INCREF(); +extern void SYSTEM_REGCMD(); +extern void SYSTEM_REGTYP(); +extern void SYSTEM_REGFIN(); +extern void SYSTEM_FINALL(); +extern void SYSTEM_INIT(); +extern void SYSTEM_FINI(); +extern void SYSTEM_HALT(); +extern void SYSTEM_INHERIT(); +extern void SYSTEM_ENUMP(); +extern void SYSTEM_ENUMR(); + +/* module registry */ +#define __DEFMOD static void *m; if(m!=0)return m +#define __REGMOD(name, enum) if(m==0)m=SYSTEM_REGMOD((CHAR*)name,enum); else return m +#define __ENDMOD return m +#define __INIT(argc, argv) static void *m; SYSTEM_INIT(argc, (long)&argv); +#define __REGMAIN(name, enum) m=SYSTEM_REGMOD(name,enum) +#define __FINI SYSTEM_FINI(); return 0 +#define __IMPORT(name) SYSTEM_INCREF(name##__init()) +#define __REGCMD(name, cmd) SYSTEM_REGCMD(m, name, cmd) + +/* SYSTEM ops */ +#define __SYSNEW(p, len) p=SYSTEM_NEWBLK((long)(len)) +#define __VAL(t, x) (*(t*)&(x)) +#define __GET(a, x, t) x= *(t*)(a) +#define __PUT(a, x, t) *(t*)(a)=x +#define __LSHL(x, n, t) ((t)((unsigned)(x)<<(n))) +#define __LSHR(x, n, t) ((t)((unsigned)(x)>>(n))) +#define __LSH(x, n, t) ((n)>=0? __LSHL(x, n, t): __LSHR(x, -(n), t)) +#define __ROTL(x, n, t) ((t)((unsigned)(x)<<(n)|(unsigned)(x)>>(8*sizeof(t)-(n)))) +#define __ROTR(x, n, t) ((t)((unsigned)(x)>>(n)|(unsigned)(x)<<(8*sizeof(t)-(n)))) +#define __ROT(x, n, t) ((n)>=0? __ROTL(x, n, t): __ROTR(x, -(n), t)) +#define __BIT(x, n) (*(unsigned long*)(x)>>(n)&1) +#define __MOVE(s, d, n) memcpy((char*)(d),(char*)(s),n) + +/* std procs and operator mappings */ +#define __SHORT(x, y) ((int)((unsigned long)(x)+(y)<(y)+(y)?(x):(__HALT(-8),0))) +#define __SHORTF(x, y) ((int)(__RF((x)+(y),(y)+(y))-(y))) +#define __CHR(x) ((CHAR)__R(x, 256)) +#define __CHRF(x) ((CHAR)__RF(x, 256)) +#define __DIV(x, y) ((x)>=0?(x)/(y):-(((y)-1-(x))/(y))) +#define __DIVF(x, y) SYSTEM_DIV((long)(x),(long)(y)) +#define __MOD(x, y) ((x)>=0?(x)%(y):__MODF(x,y)) +#define __MODF(x, y) SYSTEM_MOD((long)(x),(long)(y)) +#define __NEW(p, t) p=SYSTEM_NEWREC((long)t##__typ) +#define __NEWARR SYSTEM_NEWARR +#define __HALT(x) SYSTEM_HALT(x) +#define __ASSERT(cond, x) if (!(cond)) {SYSTEM_assert = x; SYSTEM_HALT(-1);} +#define __ENTIER(x) SYSTEM_ENTIER(x) +#define __ABS(x) (((x)<0)?-(x):(x)) +#define __ABSF(x) SYSTEM_ABS((long)(x)) +#define __ABSFD(x) SYSTEM_ABSD((double)(x)) +#define __CAP(ch) ((CHAR)((ch)&0x5f)) +#define __ODD(x) ((x)&1) +#define __IN(x, s) (((s)>>(x))&1) +#define __SETOF(x) ((SET)1<<(x)) +#define __SETRNG(l, h) ((~(SET)0<<(l))&~(SET)0>>(8*sizeof(SET)-1-(h))) +#define __MASK(x, m) ((x)&~(m)) +#define __COPY(s, d, n) {char*_a=(void*)s,*_b=(void*)d;long _i=0,_t=n-1;while(_i<_t&&((_b[_i]=_a[_i])!=0)){_i++;};_b[_i]=0;} +static int __STRCMP(x, y) + CHAR *x, *y; +{long i = 0; CHAR ch1, ch2; + do {ch1 = x[i]; ch2 = y[i]; i++; + if (!ch1) return -(int)ch2; + } while (ch1==ch2); + return (int)ch1 - (int)ch2; +} +#define __ASH(x, n) ((n)>=0?__ASHL(x,n):__ASHR(x,-(n))) +#define __ASHL(x, n) ((long)(x)<<(n)) +#define __ASHR(x, n) ((long)(x)>>(n)) +#define __ASHF(x, n) SYSTEM_ASH((long)(x), (long)(n)) +#define __DUP(x, l, t) x=(void*)memcpy(alloca(l*sizeof(t)),x,l*sizeof(t)) +#define __DUPARR(v, t) v=(void*)memcpy(v##__copy,v,sizeof(t)) +#define __DEL(x) /* DUP with alloca frees storage automatically */ +#define __IS(tag, typ, level) (*(tag-(__BASEOFF-level))==(long)typ##__typ) +#define __TYPEOF(p) (*(((long**)(p))-1)) +#define __ISP(p, typ, level) __IS(__TYPEOF(p),typ,level) + +/* runtime checks */ +#define __X(i, ub) (((unsigned)(long)(i)<(unsigned long)(ub))?i:(__HALT(-2),0)) +#define __XF(i, ub) SYSTEM_XCHK((long)(i), (long)(ub)) +#define __RETCHK __retchk: __HALT(-3) +#define __CASECHK __HALT(-4) +#define __GUARDP(p, typ, level) ((typ*)(__ISP(p,typ,level)?p:(__HALT(-5),p))) +#define __GUARDR(r, typ, level) (*((typ*)(__IS(r##__typ,typ,level)?r:(__HALT(-5),r)))) +#define __GUARDA(p, typ, level) ((struct typ*)(__IS(__TYPEOF(p),typ,level)?p:(__HALT(-5),p))) +#define __GUARDEQR(p, dyntyp, typ) if(dyntyp!=typ##__typ) __HALT(-6);*(p) +#define __GUARDEQP(p, typ) if(__TYPEOF(p)!=typ##__typ)__HALT(-6);*(p) +#define __WITHCHK __HALT(-7) +#define __R(i, ub) (((unsigned)(long)(i)<(unsigned long)(ub))?i:(__HALT(-8),0)) +#define __RF(i, ub) SYSTEM_RCHK((long)(i),(long)(ub)) + +/* record type descriptors */ +#define __TDESC(t, m, n) \ + static struct t##__desc {\ + long tproc[m]; \ + long tag, next, level, module; \ + char name[24]; \ + long *base[__MAXEXT]; \ + char *rsrvd; \ + long blksz, ptr[n+1]; \ + } t##__desc + +#define __BASEOFF (__MAXEXT+1) +#define __TPROC0OFF (__BASEOFF+24/sizeof(long)+5) +#define __EOM 1 +#define __TDFLDS(name, size) {__EOM}, 1, 0, 0, 0, name, {0}, 0, size +#define __ENUMP(adr, n, P) SYSTEM_ENUMP(adr, (long)(n), P) +#define __ENUMR(adr, typ, size, n, P) SYSTEM_ENUMR(adr, typ, (long)(size), (long)(n), P) + +#define __INITYP(t, t0, level) \ + t##__typ= &t##__desc.blksz; \ + memcpy(t##__desc.base, t0##__typ - __BASEOFF, level*sizeof(long)); \ + t##__desc.base[level]=t##__typ; \ + t##__desc.module=(long)m; \ + if(t##__desc.blksz!=sizeof(struct t)) __HALT(-15); \ + t##__desc.blksz=(t##__desc.blksz+5*sizeof(long)-1)/(4*sizeof(long))*(4*sizeof(long)); \ + SYSTEM_REGTYP(m, (long)&t##__desc.next); \ + SYSTEM_INHERIT(t##__typ, t0##__typ) + +/* Oberon-2 type bound procedures support */ +#define __INITBP(t, proc, num) *(t##__typ-(__TPROC0OFF+num))=(long)proc +#define __SEND(typ, num, funtyp, parlist) ((funtyp)(*(typ-(__TPROC0OFF+num))))parlist + +/* runtime system variables */ +extern LONGINT SYSTEM_argc; +extern LONGINT SYSTEM_argv; +extern void (*SYSTEM_Halt)(); +extern LONGINT SYSTEM_halt; +extern LONGINT SYSTEM_assert; +extern SYSTEM_PTR SYSTEM_modules; +extern LONGINT SYSTEM_heapsize; +extern LONGINT SYSTEM_allocated; +extern LONGINT SYSTEM_lock; +extern SHORTINT SYSTEM_gclock; +extern BOOLEAN SYSTEM_interrupted; + +/* ANSI prototypes; not used so far +static int __STRCMP(CHAR *x, CHAR *y); +void SYSTEM_INIT(int argc, long argvadr); +void SYSTEM_FINI(void); +long SYSTEM_XCHK(long i, long ub); +long SYSTEM_RCHK(long i, long ub); +long SYSTEM_ASH(long i, long n); +long SYSTEM_ABS(long i); +double SYSTEM_ABSD(double i); +void SYSTEM_INHERIT(long *t, long *t0); +void SYSTEM_ENUMP(long *adr, long n, void (*P)(void*)); +void SYSTEM_ENUMR(char *adr, long *typ, long size, long n, void (*P)(void*)); +long SYSTEM_DIV(unsigned long x, unsigned long y); +long SYSTEM_MOD(unsigned long x, unsigned long y); +long SYSTEM_ENTIER(double x); +void SYSTEM_HALT(int n); +*/ + +#endif + diff --git a/src/lib/system/gnuc/armv6j/Unix.Mod b/src/lib/system/gnuc/armv6j/Unix.Mod new file mode 100644 index 00000000..9b2180b9 --- /dev/null +++ b/src/lib/system/gnuc/armv6j/Unix.Mod @@ -0,0 +1,411 @@ +MODULE Unix; (* Josef Templ, 5.3.90 Linux system calls *) +(* system procedure added by noch *) +(* Module Unix provides a system call interface to Linux. + Naming conventions: + Procedure and Type-names always start with a capital letter. + error numbers as defined in Unix + other constants start with lower case letters *) + +IMPORT SYSTEM; + +CONST + +(* various important constants *) + + stdin* = 0; stdout* =1; stderr* = 2; + + LOCKEX* = 2; LOCKUN* = 8; (* /usr/include/file.h *) + AFINET* = 2; (* /usr/include/sys/socket.h *) + PFINET* = AFINET; (* /usr/include/linux/socket.h *) + SOCKSTREAM* = 1; (* /usr/include/linux/socket.h *) + FIONREAD* = 541BH; (* in /usr/include/asm/termios.h *) + SETFL* = 4; (* set file descriptor flags; in asm/fcntl.h *) + TCP* = 0; + +(* flag sets, cf. /usr/include/asm/fcntl.h *) + rdonly* = {}; wronly* = {0}; rdwr* = {1}; creat* = {6}; excl* = {7}; trunc* = {9}; append* = {10}; ndelay = {11}; + +(* error numbers *) + + EPERM* = 1; (* Not owner *) + ENOENT* = 2; (* No such file or directory *) + ESRCH* = 3; (* No such process *) + EINTR* = 4; (* Interrupted system call *) + EIO* = 5; (* I/O error *) + ENXIO* = 6; (* No such device or address *) + E2BIG* = 7; (* Arg list too long *) + ENOEXEC* = 8; (* Exec format error *) + EBADF* = 9; (* Bad file number *) + ECHILD* = 10; (* No children *) + EAGAIN* = 11; (* No more processes *) + ENOMEM* = 12; (* Not enough core *) + EACCES* = 13; (* Permission denied *) + EFAULT* = 14; (* Bad address *) + ENOTBLK* = 15; (* Block device required *) + EBUSY* = 16; (* Mount device busy *) + EEXIST* = 17; (* File exists *) + EXDEV* = 18; (* Cross-device link *) + ENODEV* = 19; (* No such device *) + ENOTDIR* = 20; (* Not a directory*) + EISDIR* = 21; (* Is a directory *) + EINVAL* = 22; (* Invalid argument *) + ENFILE* = 23; (* File table overflow *) + EMFILE* = 24; (* Too many open files *) + ENOTTY* = 25; (* Not a typewriter *) + ETXTBSY* = 26; (* Text file busy *) + EFBIG* = 27; (* File too large *) + ENOSPC* = 28; (* No space left on device *) + ESPIPE* = 29; (* Illegal seek *) + EROFS* = 30; (* Read-only file system *) + EMLINK* = 31; (* Too many links *) + EPIPE* = 32; (* Broken pipe *) + EDOM* = 33; (* Argument too large *) + ERANGE* = 34; (* Result too large *) + EDEADLK* = 35; (* Resource deadlock would occur *) + ENAMETOOLONG* = 36; (* File name too long *) + ENOLCK* = 37; (* No record locks available *) + ENOSYS* = 38; (* Function not implemented *) + ENOTEMPTY* = 39; (* Directory not empty *) + ELOOP* = 40; (* Too many symbolic links encountered *) + EWOULDBLOCK* = EAGAIN; (* Operation would block *) + ENOMSG* = 42; (* No message of desired type *) + EIDRM* = 43; (* Identifier removed *) + ECHRNG* = 44; (* Channel number out of range *) + EL2NSYNC* = 45; (* Level 2 not synchronized *) + EL3HLT* = 46; (* Level 3 halted *) + EL3RST* = 47; (* Level 3 reset *) + ELNRNG* = 48; (* Link number out of range *) + EUNATCH* = 49; (* Protocol driver not attached *) + ENOCSI* = 50; (* No CSI structure available *) + EL2HLT* = 51; (* Level 2 halted *) + EBADE* = 52; (* Invalid exchange *) + EBADR* = 53; (* Invalid request descriptor *) + EXFULL* = 54; (* Exchange full *) + ENOANO* = 55; (* No anode *) + EBADRQC* = 56; (* Invalid request code *) + EBADSLT* = 57; (* Invalid slot *) + EDEADLOCK* = 58; (* File locking deadlock error *) + EBFONT* = 59; (* Bad font file format *) + ENOSTR* = 60; (* Device not a stream *) + ENODATA* = 61; (* No data available *) + ETIME* = 62; (* Timer expired *) + ENOSR* = 63; (* Out of streams resources *) + ENONET* = 64; (* Machine is not on the network *) + ENOPKG* = 65; (* Package not installed *) + EREMOTE* = 66; (* Object is remote *) + ENOLINK* = 67; (* Link has been severed *) + EADV* = 68; (* Advertise error *) + ESRMNT* = 69; (* Srmount error *) + ECOMM* = 70; (* Communication error on send *) + EPROTO* = 71; (* Protocol error *) + EMULTIHOP* = 72; (* Multihop attempted *) + EDOTDOT* = 73; (* RFS specific error *) + EBADMSG* = 74; (* Not a data message *) + EOVERFLOW* = 75; (* Value too large for defined data type *) + ENOTUNIQ* = 76; (* Name not unique on network *) + EBADFD* = 77; (* File descriptor in bad state *) + EREMCHG* = 78; (* Remote address changed *) + ELIBACC* = 79; (* Can not access a needed shared library *) + ELIBBAD* = 80; (* Accessing a corrupted shared library *) + ELIBSCN* = 81; (* .lib section in a.out corrupted *) + ELIBMAX* = 82; (* Attempting to link in too many shared libraries *) + ELIBEXEC* = 83; (* Cannot exec a shared library directly *) + EILSEQ* = 84; (* Illegal byte sequence *) + ERESTART* = 85; (* Interrupted system call should be restarted *) + ESTRPIPE* = 86; (* Streams pipe error *) + EUSERS* = 87; (* Too many users *) + ENOTSOCK* = 88; (* Socket operation on non-socket *) + EDESTADDRREQ* = 89; (* Destination address required *) + EMSGSIZE* = 90; (* Message too long *) + EPROTOTYPE* = 91; (* Protocol wrong type for socket *) + ENOPROTOOPT* = 92; (* Protocol not available *) + EPROTONOSUPPORT* = 93; (* Protocol not supported *) + ESOCKTNOSUPPORT* = 94; (* Socket type not supported *) + EOPNOTSUPP* = 95; (* Operation not supported on transport endpoint *) + EPFNOSUPPORT* = 96; (* Protocol family not supported *) + EAFNOSUPPORT* = 97; (* Address family not supported by protocol *) + EADDRINUSE* = 98; (* Address already in use *) + EADDRNOTAVAIL* = 99; (* Cannot assign requested address *) + ENETDOWN* = 100; (* Network is down *) + ENETUNREACH* = 101; (* Network is unreachable *) + ENETRESET* = 102; (* Network dropped connection because of reset *) + ECONNABORTED* = 103; (* Software caused connection abort *) + ECONNRESET* = 104; (* Connection reset by peer *) + ENOBUFS* = 105; (* No buffer space available *) + EISCONN* = 106; (* Transport endpoint is already connected *) + ENOTCONN* = 107; (* Transport endpoint is not connected *) + ESHUTDOWN* = 108; (* Cannot send after transport endpoint shutdown *) + ETOOMANYREFS* = 109; (* Too many references: cannot splice *) + ETIMEDOUT* = 110; (* Connection timed out *) + ECONNREFUSED* = 111; (* Connection refused *) + EHOSTDOWN* = 112; (* Host is down *) + EHOSTUNREACH* = 113; (* No route to host *) + EALREADY* = 114; (* Operation already in progress *) + EINPROGRESS* = 115; (* Operation now in progress *) + ESTALE* = 116; (* Stale NFS file handle *) + EUCLEAN* = 117; (* Structure needs cleaning *) + ENOTNAM* = 118; (* Not a XENIX named type file *) + ENAVAIL* = 119; (* No XENIX semaphores available *) + EISNAM* = 120; (* Is a named type file *) + EREMOTEIO* = 121; (* Remote I/O error *) + EDQUOT* = 122; (* Quota exceeded *) + + +TYPE + JmpBuf* = RECORD + bx*, si*, di*, bp*, sp*, pc*: LONGINT; + maskWasSaved*, savedMask*: LONGINT; + END ; + + Status* = RECORD (* struct stat *) + dev*, devX*: LONGINT; (* 64 bit in Linux 2.2 *) + pad1: INTEGER; + ino*, mode*, nlink*, uid*, gid*: LONGINT; + rdev*, rdevX*: LONGINT; (* 64 bit in Linux 2.2 *) + pad2: INTEGER; + size*, blksize*, blocks*, atime*, unused1*, mtime*, unused2*, ctime*, + unused3*, unused4*, unused5*: LONGINT; + END ; + + Timeval* = RECORD + sec*, usec*: LONGINT + END ; + + Timezone* = RECORD + minuteswest*, dsttime*: LONGINT + END ; + + Itimerval* = RECORD + interval*, value*: Timeval + END ; + + FdSet* = ARRAY 8 OF SET; + + SigCtxPtr* = POINTER TO SigContext; + SigContext* = RECORD + END ; + + SignalHandler* = PROCEDURE (sig, code: LONGINT; scp: SigCtxPtr); + + Dirent* = RECORD + ino, off: LONGINT; + reclen: INTEGER; + name: ARRAY 256 OF CHAR; + END ; + + Rusage* = RECORD + utime*, stime*: Timeval; + maxrss*, ixrss*, idrss*, isrss*, + minflt*, majflt*, nswap*, inblock*, + oublock*, msgsnd*, msgrcv*, nsignals*, + nvcsw*, nivcsw*: LONGINT + END ; + + Iovec* = RECORD + base*, len*: LONGINT + END ; + + SocketPair* = ARRAY 2 OF LONGINT; + + Pollfd* = RECORD + fd*: LONGINT; + events*, revents*: INTEGER + END ; + + Sockaddr* = RECORD + family*: INTEGER; + port*: INTEGER; + internetAddr*: LONGINT; + pad*: ARRAY 8 OF CHAR; + END ; + + HostEntry* = POINTER [1] TO Hostent; + Hostent* = RECORD + name*, aliases*: LONGINT; + addrtype*, length*: LONGINT; + addrlist*: LONGINT; (*POINTER TO POINTER TO LONGINT, network byte order*) + END; + + Name* = ARRAY OF CHAR; + + PROCEDURE -includeStat() + "#include "; + + PROCEDURE -includeErrno() + "#include "; + + PROCEDURE -err(): LONGINT + "errno"; + + PROCEDURE errno*(): LONGINT; + BEGIN + RETURN err() + END errno; + + PROCEDURE -Exit*(n: LONGINT) + "exit(n)"; + + PROCEDURE -Fork*(): LONGINT + "fork()"; + + PROCEDURE -Wait*(VAR status: LONGINT): LONGINT + "wait(status)"; + + PROCEDURE -Select*(width: LONGINT; VAR readfds, writefds, exceptfds: FdSet; VAR timeout: Timeval): LONGINT + "select(width, readfds, writefds, exceptfds, timeout)"; + + PROCEDURE -Gettimeofday* (VAR tv: Timeval; VAR tz: Timezone) + "gettimeofday(tv, tz)"; + + PROCEDURE -Read* (fd, buf, nbyte: LONGINT): LONGINT + "read(fd, buf, nbyte)"; + + PROCEDURE -ReadBlk* (fd: LONGINT; VAR buf: ARRAY OF SYSTEM.BYTE): LONGINT + "read(fd, buf, buf__len)"; + + PROCEDURE -Write* (fd, buf, nbyte: LONGINT): LONGINT + "write(fd, buf, nbyte)"; + + PROCEDURE -WriteBlk* (fd: LONGINT; VAR buf: ARRAY OF SYSTEM.BYTE): LONGINT + "write(fd, buf, buf__len)"; + + PROCEDURE -Dup*(fd: LONGINT): LONGINT + "dup(fd)"; + + PROCEDURE -Dup2*(fd1, fd2: LONGINT): LONGINT + "dup(fd1, fd2)"; + + PROCEDURE -Getpid*(): LONGINT + "getpid()"; + + PROCEDURE -Getuid*(): LONGINT + "getuid()"; + + PROCEDURE -Geteuid*(): LONGINT + "geteuid()"; + + PROCEDURE -Getgid*(): LONGINT + "getgid()"; + + PROCEDURE -Getegid*(): LONGINT + "getegid()"; + + PROCEDURE -Unlink*(name: Name): LONGINT + "unlink(name)"; + + PROCEDURE -Open*(name: Name; flag, mode: SET): LONGINT + "open(name, flag, mode)"; + + PROCEDURE -Close*(fd: LONGINT): LONGINT + "close(fd)"; + + PROCEDURE -stat(name: Name; VAR statbuf: Status): LONGINT + "stat((const char*)name, (struct stat*)statbuf)"; + + PROCEDURE Stat*(name: Name; VAR statbuf: Status): LONGINT; + VAR res: LONGINT; + BEGIN + res := stat(name, statbuf); + (* make the first 4 bytes as unique as possible (used in module Files for caching!) *) + INC(statbuf.dev, statbuf.devX); + INC(statbuf.rdev, statbuf.rdevX); + RETURN res; + END Stat; + + PROCEDURE -fstat(fd: LONGINT; VAR statbuf: Status): LONGINT + "fstat(fd, (struct stat*)statbuf)"; + + PROCEDURE Fstat*(fd: LONGINT; VAR statbuf: Status): LONGINT; + VAR res: LONGINT; + BEGIN + res := fstat(fd, statbuf); + (* make the first 4 bytes as unique as possible (used in module Files for caching!) *) + INC(statbuf.dev, statbuf.devX); + INC(statbuf.rdev, statbuf.rdevX); + RETURN res; + END Fstat; + + PROCEDURE -Fchmod*(fd, mode: LONGINT): LONGINT + "fchmod(fd, mode)"; + + PROCEDURE -Chmod*(path: Name; mode: LONGINT): LONGINT + "chmod(path, mode)"; + + PROCEDURE -Lseek*(fd, offset, origin: LONGINT): LONGINT + "lseek(fd, offset, origin)"; + + PROCEDURE -Fsync*(fd: LONGINT): LONGINT + "fsync(fd)"; + + PROCEDURE -Fcntl*(fd, cmd, arg: LONGINT ): LONGINT + "fcntl(fd, cmd, arg)"; + + PROCEDURE -Flock*(fd, operation: LONGINT): LONGINT + "flock(fd, operation)"; + + PROCEDURE -Ftruncate*(fd, length: LONGINT): LONGINT + "ftruncate(fd, length)"; + + PROCEDURE -Readblk*(fd: LONGINT; VAR buf: ARRAY OF SYSTEM.BYTE; len: LONGINT): LONGINT + "read(fd, buf, len)"; + + PROCEDURE -Rename*(old, new: Name): LONGINT + "rename(old, new)"; + + PROCEDURE -Chdir*(path: Name): LONGINT + "chdir(path)"; + + PROCEDURE -Ioctl*(fd, request, arg: LONGINT): LONGINT + "ioctl(fd, request, arg)"; + + PROCEDURE -Kill*(pid, sig: LONGINT): LONGINT + "kill(pid, sig)"; + + PROCEDURE -Sigsetmask*(mask: LONGINT): LONGINT + "sigsetmask(mask)"; + + + (* TCP/IP networking *) + + PROCEDURE -Gethostbyname*(name: Name): HostEntry + "(Unix_HostEntry)gethostbyname(name)"; + + PROCEDURE -Gethostname*(VAR name: Name): LONGINT + "gethostname(name, name__len)"; + + PROCEDURE -Socket*(af, type, protocol: LONGINT): LONGINT + "socket(af, type, protocol)"; + + PROCEDURE -Connect*(socket: LONGINT; name: Sockaddr; namelen: LONGINT): LONGINT + "connect(socket, &(name), namelen)"; + + PROCEDURE -Getsockname*(socket: LONGINT; VAR name: Sockaddr; VAR namelen: LONGINT): LONGINT + "getsockname(socket, name, namelen)"; + + PROCEDURE -Bind*(socket: LONGINT; name: Sockaddr; namelen: LONGINT): LONGINT + "bind(socket, &(name), namelen)"; + + PROCEDURE -Listen*(socket, backlog: LONGINT): LONGINT + "listen(socket, backlog)"; + + PROCEDURE -Accept*(socket: LONGINT; VAR addr: Sockaddr; VAR addrlen: LONGINT): LONGINT + "accept(socket, addr, addrlen)"; + + PROCEDURE -Recv*(socket, bufadr, buflen, flags: LONGINT): LONGINT + "recv(socket, bufadr, buflen, flags)"; + + PROCEDURE -Send*(socket, bufadr, buflen, flags: LONGINT): LONGINT + "send(socket, bufadr, buflen, flags)"; + + PROCEDURE -sys(str: ARRAY OF CHAR): INTEGER (* need this to call external tools like gcc or gas; noch *) + "system(str)"; + + PROCEDURE system*(cmd : ARRAY OF CHAR); + VAR r : INTEGER; + BEGIN + r := sys(cmd); + END system; + + + +END Unix. diff --git a/src/lib/system/gnuc/armv6j_hardfp/Args.Mod b/src/lib/system/gnuc/armv6j_hardfp/Args.Mod new file mode 100644 index 00000000..52228613 --- /dev/null +++ b/src/lib/system/gnuc/armv6j_hardfp/Args.Mod @@ -0,0 +1,52 @@ +MODULE Args; (* jt, 8.12.94 *) + + (* command line argument handling for ofront *) + + + IMPORT SYSTEM; + + TYPE + ArgPtr = POINTER TO ARRAY 1024 OF CHAR; + ArgVec = POINTER TO ARRAY 1024 OF ArgPtr; + + VAR argc-, argv-: LONGINT; + + PROCEDURE -Argc(): INTEGER "SYSTEM_argc"; + PROCEDURE -Argv(): LONGINT "(long)SYSTEM_argv"; + PROCEDURE -getenv(var: ARRAY OF CHAR): ArgPtr + "(Args_ArgPtr)getenv(var)"; + + PROCEDURE Get*(n: INTEGER; VAR val: ARRAY OF CHAR); + VAR av: ArgVec; + BEGIN + IF n < argc THEN av := SYSTEM.VAL(ArgVec, argv); COPY(av[n]^, val) END + END Get; + + PROCEDURE GetInt*(n: INTEGER; VAR val: LONGINT); + VAR s: ARRAY 64 OF CHAR; k, d, i: LONGINT; + BEGIN + s := ""; Get(n, s); i := 0; + IF s[0] = "-" THEN i := 1 END ; + k := 0; d := ORD(s[i]) - ORD("0"); + WHILE (d >= 0 ) & (d <= 9) DO k := k*10 + d; INC(i); d := ORD(s[i]) - ORD("0") END ; + IF s[0] = "-" THEN d := -d; DEC(i) END ; + IF i > 0 THEN val := k END + END GetInt; + + PROCEDURE Pos*(s: ARRAY OF CHAR): INTEGER; + VAR i: INTEGER; arg: ARRAY 256 OF CHAR; + BEGIN + i := 0; Get(i, arg); + WHILE (i < argc) & (s # arg) DO INC(i); Get(i, arg) END ; + RETURN i + END Pos; + + PROCEDURE GetEnv*(var: ARRAY OF CHAR; VAR val: ARRAY OF CHAR); + VAR p: ArgPtr; + BEGIN + p := getenv(var); + IF p # NIL THEN COPY(p^, val) END + END GetEnv; + +BEGIN argc := Argc(); argv := Argv() +END Args. diff --git a/src/lib/system/gnuc/armv6j_hardfp/SYSTEM.c0 b/src/lib/system/gnuc/armv6j_hardfp/SYSTEM.c0 new file mode 100644 index 00000000..580449aa --- /dev/null +++ b/src/lib/system/gnuc/armv6j_hardfp/SYSTEM.c0 @@ -0,0 +1,205 @@ +/* +* The body prefix file of the Ofront runtime system, Version 1.0 +* +* Copyright (c) Software Templ, 1994, 1995 +* +* Module SYSTEM is subject to change any time without prior notification. +* Software Templ disclaims all warranties with regard to module SYSTEM, +* in particular shall Software Templ not be liable for any damage resulting +* from inappropriate use or modification of module SYSTEM. +* +* Version 1.1 jt, 24.11.95 fixes for correct pointer arithmetic on Cray computers +* jt 31.1.2007 ANSI prototypes for malloc and exit in order to avoid cc warnings +* +*/ + +#include "SYSTEM.h" +#ifdef __STDC__ +#include "stdarg.h" +#else +#include "varargs.h" +#endif + +extern void *malloc(long size); +extern void exit(int status); + +void (*SYSTEM_Halt)(); +LONGINT SYSTEM_halt; /* x in HALT(x) */ +LONGINT SYSTEM_assert; /* x in ASSERT(cond, x) */ +LONGINT SYSTEM_argc; +LONGINT SYSTEM_argv; +LONGINT SYSTEM_lock; +BOOLEAN SYSTEM_interrupted; +static LONGINT SYSTEM_mainfrm; /* adr of main proc stack frame, used for stack collection */ + +#define Lock SYSTEM_lock++ +#define Unlock SYSTEM_lock--; if (SYSTEM_interrupted && (SYSTEM_lock == 0)) __HALT(-9) + + +static void SYSTEM_InitHeap(); +void *SYSTEM__init(); + +void SYSTEM_INIT(argc, argvadr) + int argc; long argvadr; +{ + SYSTEM_mainfrm = argvadr; + SYSTEM_argc = argc; + SYSTEM_argv = *(long*)argvadr; + SYSTEM_InitHeap(); + SYSTEM_halt = -128; + SYSTEM__init(); +} + +void SYSTEM_FINI() +{ + SYSTEM_FINALL(); +} + +long SYSTEM_XCHK(i, ub) long i, ub; {return __X(i, ub);} +long SYSTEM_RCHK(i, ub) long i, ub; {return __R(i, ub);} +long SYSTEM_ASH(i, n) long i, n; {return __ASH(i, n);} +long SYSTEM_ABS(i) long i; {return __ABS(i);} +double SYSTEM_ABSD(i) double i; {return __ABS(i);} + +void SYSTEM_INHERIT(t, t0) + long *t, *t0; +{ + t -= __TPROC0OFF; + t0 -= __TPROC0OFF; + while (*t0 != __EOM) {*t = *t0; t--; t0--;} +} + +void SYSTEM_ENUMP(adr, n, P) + long *adr; + long n; + void (*P)(); +{ + while (n > 0) {P(*adr); adr++; n--;} +} + +void SYSTEM_ENUMR(adr, typ, size, n, P) + char *adr; + long *typ, size, n; + void (*P)(); +{ + long *t, off; + typ++; + while (n > 0) { + t = typ; + off = *t; + while (off >= 0) {P(*(long*)(adr+off)); t++; off = *t;} + adr += size; n--; + } +} + +long SYSTEM_DIV(x, y) + unsigned long x, y; +{ if ((long) x >= 0) return (x / y); + else return -((y - 1 - x) / y); +} + +long SYSTEM_MOD(x, y) + unsigned long x, y; +{ unsigned long m; + if ((long) x >= 0) return (x % y); + else { m = (-x) % y; + if (m != 0) return (y - m); else return 0; + } +} + +long SYSTEM_ENTIER(x) + double x; +{ + long y; + if (x >= 0) + return (long)x; + else { + y = (long)x; + if (y <= x) return y; else return y - 1; + } +} + +void SYSTEM_HALT(n) + int n; +{ + SYSTEM_halt = n; + if (SYSTEM_Halt!=0) SYSTEM_Halt(n); + exit(n); +} + +#ifdef __STDC__ +SYSTEM_PTR SYSTEM_NEWARR(long *typ, long elemsz, int elemalgn, int nofdim, int nofdyn, ...) +#else +SYSTEM_PTR SYSTEM_NEWARR(typ, elemsz, elemalgn, nofdim, nofdyn, va_alist) + long *typ, elemsz; + int elemalgn, nofdim, nofdyn; + va_dcl +#endif +{ + long nofelems, size, dataoff, n, nptr, *x, *p, nofptrs, i, *ptab, off; + va_list ap; +#ifdef __STDC__ + va_start(ap, nofdyn); +#else + va_start(ap); +#endif + nofelems = 1; + while (nofdim > 0) { + nofelems = nofelems * va_arg(ap, long); nofdim--; + if (nofelems <= 0) __HALT(-20); + } + va_end(ap); + dataoff = nofdyn * sizeof(long); + if (elemalgn > sizeof(long)) { + n = dataoff % elemalgn; + if (n != 0) dataoff += elemalgn - n; + } + size = dataoff + nofelems * elemsz; + Lock; + if (typ == NIL) { + /* element typ does not contain pointers */ + x = SYSTEM_NEWBLK(size); + } + else if (typ == POINTER__typ) { + /* element type is a pointer */ + x = SYSTEM_NEWBLK(size + nofelems * sizeof(long)); + p = (long*)x[-1]; + p[-nofelems] = *p; /* build new type desc in situ: 1. copy block size; 2. setup ptr tab; 3. set sentinel; 4. patch tag */ + p -= nofelems - 1; n = 1; /* n =1 for skipping the size field */ + while (n <= nofelems) {*p = n*sizeof(long); p++; n++;} + *p = - (nofelems + 1) * sizeof(long); /* sentinel */ + x[-1] -= nofelems * sizeof(long); + } + else { + /* element type is a record that contains pointers */ + ptab = typ + 1; nofptrs = 0; + while (ptab[nofptrs] >= 0) {nofptrs++;} /* number of pointers per element */ + nptr = nofelems * nofptrs; /* total number of pointers */ + x = SYSTEM_NEWBLK(size + nptr * sizeof(long)); + p = (long*)x[- 1]; + p[-nptr] = *p; /* build new type desc in situ; 1. copy block size; 2. setup ptr tab; 3. set sentinel; 4. patch tag */ + p -= nptr - 1; n = 0; off = dataoff; + while (n < nofelems) {i = 0; + while (i < nofptrs) {*p = off + ptab[i]; p++; i++;} + off += elemsz; n++; + } + *p = - (nptr + 1) * sizeof(long); /* sentinel */ + x[-1] -= nptr * sizeof(long); + } + if (nofdyn != 0) { + /* setup len vector for index checks */ +#ifdef __STDC__ + va_start(ap, nofdyn); +#else + va_start(ap); +#endif + p = x; + while (nofdyn > 0) {*p = va_arg(ap, long); p++, nofdyn--;} + va_end(ap); + } + Unlock; + return x; +} + +/* ----------- end of SYSTEM.co ------------- */ + diff --git a/src/lib/system/gnuc/armv6j_hardfp/SYSTEM.h b/src/lib/system/gnuc/armv6j_hardfp/SYSTEM.h new file mode 100644 index 00000000..719a6d18 --- /dev/null +++ b/src/lib/system/gnuc/armv6j_hardfp/SYSTEM.h @@ -0,0 +1,215 @@ +#ifndef SYSTEM__h +#define SYSTEM__h + +/* + +the Ofront runtime system interface and macros library +copyright (c) Josef Templ, 1995, 1996 + +gcc for Linux version (same as SPARC/Solaris2) +uses double # as concatenation operator + +*/ + +#include + +//extern void *memcpy(void *dest, const void *src, long n); +extern void *memcpy(void *dest, const void *src, size_t n); +extern void *malloc(long size); +extern void exit(int status); + +#define export +#define import extern + +/* constants */ +#define __MAXEXT 16 +#define NIL 0L +#define POINTER__typ (long*)1L /* not NIL and not a valid type */ + +/* basic types */ +typedef char BOOLEAN; +typedef unsigned char CHAR; +typedef signed char SHORTINT; +typedef short int INTEGER; +typedef long LONGINT; +typedef float REAL; +typedef double LONGREAL; +typedef unsigned long SET; +typedef void *SYSTEM_PTR; +typedef unsigned char SYSTEM_BYTE; + +/* runtime system routines */ +extern long SYSTEM_DIV(); +extern long SYSTEM_MOD(); +extern long SYSTEM_ENTIER(); +extern long SYSTEM_ASH(); +extern long SYSTEM_ABS(); +extern long SYSTEM_XCHK(); +extern long SYSTEM_RCHK(); +extern double SYSTEM_ABSD(); +extern SYSTEM_PTR SYSTEM_NEWREC(); +extern SYSTEM_PTR SYSTEM_NEWBLK(); +#ifdef __STDC__ +extern SYSTEM_PTR SYSTEM_NEWARR(long*, long, int, int, int, ...); +#else +extern SYSTEM_PTR SYSTEM_NEWARR(); +#endif +extern SYSTEM_PTR SYSTEM_REGMOD(); +extern void SYSTEM_INCREF(); +extern void SYSTEM_REGCMD(); +extern void SYSTEM_REGTYP(); +extern void SYSTEM_REGFIN(); +extern void SYSTEM_FINALL(); +extern void SYSTEM_INIT(); +extern void SYSTEM_FINI(); +extern void SYSTEM_HALT(); +extern void SYSTEM_INHERIT(); +extern void SYSTEM_ENUMP(); +extern void SYSTEM_ENUMR(); + +/* module registry */ +#define __DEFMOD static void *m; if(m!=0)return m +#define __REGMOD(name, enum) if(m==0)m=SYSTEM_REGMOD((CHAR*)name,enum); else return m +#define __ENDMOD return m +#define __INIT(argc, argv) static void *m; SYSTEM_INIT(argc, (long)&argv); +#define __REGMAIN(name, enum) m=SYSTEM_REGMOD(name,enum) +#define __FINI SYSTEM_FINI(); return 0 +#define __IMPORT(name) SYSTEM_INCREF(name##__init()) +#define __REGCMD(name, cmd) SYSTEM_REGCMD(m, name, cmd) + +/* SYSTEM ops */ +#define __SYSNEW(p, len) p=SYSTEM_NEWBLK((long)(len)) +#define __VAL(t, x) (*(t*)&(x)) +#define __GET(a, x, t) x= *(t*)(a) +#define __PUT(a, x, t) *(t*)(a)=x +#define __LSHL(x, n, t) ((t)((unsigned)(x)<<(n))) +#define __LSHR(x, n, t) ((t)((unsigned)(x)>>(n))) +#define __LSH(x, n, t) ((n)>=0? __LSHL(x, n, t): __LSHR(x, -(n), t)) +#define __ROTL(x, n, t) ((t)((unsigned)(x)<<(n)|(unsigned)(x)>>(8*sizeof(t)-(n)))) +#define __ROTR(x, n, t) ((t)((unsigned)(x)>>(n)|(unsigned)(x)<<(8*sizeof(t)-(n)))) +#define __ROT(x, n, t) ((n)>=0? __ROTL(x, n, t): __ROTR(x, -(n), t)) +#define __BIT(x, n) (*(unsigned long*)(x)>>(n)&1) +#define __MOVE(s, d, n) memcpy((char*)(d),(char*)(s),n) + +/* std procs and operator mappings */ +#define __SHORT(x, y) ((int)((unsigned long)(x)+(y)<(y)+(y)?(x):(__HALT(-8),0))) +#define __SHORTF(x, y) ((int)(__RF((x)+(y),(y)+(y))-(y))) +#define __CHR(x) ((CHAR)__R(x, 256)) +#define __CHRF(x) ((CHAR)__RF(x, 256)) +#define __DIV(x, y) ((x)>=0?(x)/(y):-(((y)-1-(x))/(y))) +#define __DIVF(x, y) SYSTEM_DIV((long)(x),(long)(y)) +#define __MOD(x, y) ((x)>=0?(x)%(y):__MODF(x,y)) +#define __MODF(x, y) SYSTEM_MOD((long)(x),(long)(y)) +#define __NEW(p, t) p=SYSTEM_NEWREC((long)t##__typ) +#define __NEWARR SYSTEM_NEWARR +#define __HALT(x) SYSTEM_HALT(x) +#define __ASSERT(cond, x) if (!(cond)) {SYSTEM_assert = x; SYSTEM_HALT(-1);} +#define __ENTIER(x) SYSTEM_ENTIER(x) +#define __ABS(x) (((x)<0)?-(x):(x)) +#define __ABSF(x) SYSTEM_ABS((long)(x)) +#define __ABSFD(x) SYSTEM_ABSD((double)(x)) +#define __CAP(ch) ((CHAR)((ch)&0x5f)) +#define __ODD(x) ((x)&1) +#define __IN(x, s) (((s)>>(x))&1) +#define __SETOF(x) ((SET)1<<(x)) +#define __SETRNG(l, h) ((~(SET)0<<(l))&~(SET)0>>(8*sizeof(SET)-1-(h))) +#define __MASK(x, m) ((x)&~(m)) +#define __COPY(s, d, n) {char*_a=(void*)s,*_b=(void*)d;long _i=0,_t=n-1;while(_i<_t&&((_b[_i]=_a[_i])!=0)){_i++;};_b[_i]=0;} +static int __STRCMP(x, y) + CHAR *x, *y; +{long i = 0; CHAR ch1, ch2; + do {ch1 = x[i]; ch2 = y[i]; i++; + if (!ch1) return -(int)ch2; + } while (ch1==ch2); + return (int)ch1 - (int)ch2; +} +#define __ASH(x, n) ((n)>=0?__ASHL(x,n):__ASHR(x,-(n))) +#define __ASHL(x, n) ((long)(x)<<(n)) +#define __ASHR(x, n) ((long)(x)>>(n)) +#define __ASHF(x, n) SYSTEM_ASH((long)(x), (long)(n)) +#define __DUP(x, l, t) x=(void*)memcpy(alloca(l*sizeof(t)),x,l*sizeof(t)) +#define __DUPARR(v, t) v=(void*)memcpy(v##__copy,v,sizeof(t)) +#define __DEL(x) /* DUP with alloca frees storage automatically */ +#define __IS(tag, typ, level) (*(tag-(__BASEOFF-level))==(long)typ##__typ) +#define __TYPEOF(p) (*(((long**)(p))-1)) +#define __ISP(p, typ, level) __IS(__TYPEOF(p),typ,level) + +/* runtime checks */ +#define __X(i, ub) (((unsigned)(long)(i)<(unsigned long)(ub))?i:(__HALT(-2),0)) +#define __XF(i, ub) SYSTEM_XCHK((long)(i), (long)(ub)) +#define __RETCHK __retchk: __HALT(-3) +#define __CASECHK __HALT(-4) +#define __GUARDP(p, typ, level) ((typ*)(__ISP(p,typ,level)?p:(__HALT(-5),p))) +#define __GUARDR(r, typ, level) (*((typ*)(__IS(r##__typ,typ,level)?r:(__HALT(-5),r)))) +#define __GUARDA(p, typ, level) ((struct typ*)(__IS(__TYPEOF(p),typ,level)?p:(__HALT(-5),p))) +#define __GUARDEQR(p, dyntyp, typ) if(dyntyp!=typ##__typ) __HALT(-6);*(p) +#define __GUARDEQP(p, typ) if(__TYPEOF(p)!=typ##__typ)__HALT(-6);*(p) +#define __WITHCHK __HALT(-7) +#define __R(i, ub) (((unsigned)(long)(i)<(unsigned long)(ub))?i:(__HALT(-8),0)) +#define __RF(i, ub) SYSTEM_RCHK((long)(i),(long)(ub)) + +/* record type descriptors */ +#define __TDESC(t, m, n) \ + static struct t##__desc {\ + long tproc[m]; \ + long tag, next, level, module; \ + char name[24]; \ + long *base[__MAXEXT]; \ + char *rsrvd; \ + long blksz, ptr[n+1]; \ + } t##__desc + +#define __BASEOFF (__MAXEXT+1) +#define __TPROC0OFF (__BASEOFF+24/sizeof(long)+5) +#define __EOM 1 +#define __TDFLDS(name, size) {__EOM}, 1, 0, 0, 0, name, {0}, 0, size +#define __ENUMP(adr, n, P) SYSTEM_ENUMP(adr, (long)(n), P) +#define __ENUMR(adr, typ, size, n, P) SYSTEM_ENUMR(adr, typ, (long)(size), (long)(n), P) + +#define __INITYP(t, t0, level) \ + t##__typ= &t##__desc.blksz; \ + memcpy(t##__desc.base, t0##__typ - __BASEOFF, level*sizeof(long)); \ + t##__desc.base[level]=t##__typ; \ + t##__desc.module=(long)m; \ + if(t##__desc.blksz!=sizeof(struct t)) __HALT(-15); \ + t##__desc.blksz=(t##__desc.blksz+5*sizeof(long)-1)/(4*sizeof(long))*(4*sizeof(long)); \ + SYSTEM_REGTYP(m, (long)&t##__desc.next); \ + SYSTEM_INHERIT(t##__typ, t0##__typ) + +/* Oberon-2 type bound procedures support */ +#define __INITBP(t, proc, num) *(t##__typ-(__TPROC0OFF+num))=(long)proc +#define __SEND(typ, num, funtyp, parlist) ((funtyp)(*(typ-(__TPROC0OFF+num))))parlist + +/* runtime system variables */ +extern LONGINT SYSTEM_argc; +extern LONGINT SYSTEM_argv; +extern void (*SYSTEM_Halt)(); +extern LONGINT SYSTEM_halt; +extern LONGINT SYSTEM_assert; +extern SYSTEM_PTR SYSTEM_modules; +extern LONGINT SYSTEM_heapsize; +extern LONGINT SYSTEM_allocated; +extern LONGINT SYSTEM_lock; +extern SHORTINT SYSTEM_gclock; +extern BOOLEAN SYSTEM_interrupted; + +/* ANSI prototypes; not used so far +static int __STRCMP(CHAR *x, CHAR *y); +void SYSTEM_INIT(int argc, long argvadr); +void SYSTEM_FINI(void); +long SYSTEM_XCHK(long i, long ub); +long SYSTEM_RCHK(long i, long ub); +long SYSTEM_ASH(long i, long n); +long SYSTEM_ABS(long i); +double SYSTEM_ABSD(double i); +void SYSTEM_INHERIT(long *t, long *t0); +void SYSTEM_ENUMP(long *adr, long n, void (*P)(void*)); +void SYSTEM_ENUMR(char *adr, long *typ, long size, long n, void (*P)(void*)); +long SYSTEM_DIV(unsigned long x, unsigned long y); +long SYSTEM_MOD(unsigned long x, unsigned long y); +long SYSTEM_ENTIER(double x); +void SYSTEM_HALT(int n); +*/ + +#endif + diff --git a/src/lib/system/gnuc/armv6j_hardfp/Unix.Mod b/src/lib/system/gnuc/armv6j_hardfp/Unix.Mod new file mode 100644 index 00000000..9b2180b9 --- /dev/null +++ b/src/lib/system/gnuc/armv6j_hardfp/Unix.Mod @@ -0,0 +1,411 @@ +MODULE Unix; (* Josef Templ, 5.3.90 Linux system calls *) +(* system procedure added by noch *) +(* Module Unix provides a system call interface to Linux. + Naming conventions: + Procedure and Type-names always start with a capital letter. + error numbers as defined in Unix + other constants start with lower case letters *) + +IMPORT SYSTEM; + +CONST + +(* various important constants *) + + stdin* = 0; stdout* =1; stderr* = 2; + + LOCKEX* = 2; LOCKUN* = 8; (* /usr/include/file.h *) + AFINET* = 2; (* /usr/include/sys/socket.h *) + PFINET* = AFINET; (* /usr/include/linux/socket.h *) + SOCKSTREAM* = 1; (* /usr/include/linux/socket.h *) + FIONREAD* = 541BH; (* in /usr/include/asm/termios.h *) + SETFL* = 4; (* set file descriptor flags; in asm/fcntl.h *) + TCP* = 0; + +(* flag sets, cf. /usr/include/asm/fcntl.h *) + rdonly* = {}; wronly* = {0}; rdwr* = {1}; creat* = {6}; excl* = {7}; trunc* = {9}; append* = {10}; ndelay = {11}; + +(* error numbers *) + + EPERM* = 1; (* Not owner *) + ENOENT* = 2; (* No such file or directory *) + ESRCH* = 3; (* No such process *) + EINTR* = 4; (* Interrupted system call *) + EIO* = 5; (* I/O error *) + ENXIO* = 6; (* No such device or address *) + E2BIG* = 7; (* Arg list too long *) + ENOEXEC* = 8; (* Exec format error *) + EBADF* = 9; (* Bad file number *) + ECHILD* = 10; (* No children *) + EAGAIN* = 11; (* No more processes *) + ENOMEM* = 12; (* Not enough core *) + EACCES* = 13; (* Permission denied *) + EFAULT* = 14; (* Bad address *) + ENOTBLK* = 15; (* Block device required *) + EBUSY* = 16; (* Mount device busy *) + EEXIST* = 17; (* File exists *) + EXDEV* = 18; (* Cross-device link *) + ENODEV* = 19; (* No such device *) + ENOTDIR* = 20; (* Not a directory*) + EISDIR* = 21; (* Is a directory *) + EINVAL* = 22; (* Invalid argument *) + ENFILE* = 23; (* File table overflow *) + EMFILE* = 24; (* Too many open files *) + ENOTTY* = 25; (* Not a typewriter *) + ETXTBSY* = 26; (* Text file busy *) + EFBIG* = 27; (* File too large *) + ENOSPC* = 28; (* No space left on device *) + ESPIPE* = 29; (* Illegal seek *) + EROFS* = 30; (* Read-only file system *) + EMLINK* = 31; (* Too many links *) + EPIPE* = 32; (* Broken pipe *) + EDOM* = 33; (* Argument too large *) + ERANGE* = 34; (* Result too large *) + EDEADLK* = 35; (* Resource deadlock would occur *) + ENAMETOOLONG* = 36; (* File name too long *) + ENOLCK* = 37; (* No record locks available *) + ENOSYS* = 38; (* Function not implemented *) + ENOTEMPTY* = 39; (* Directory not empty *) + ELOOP* = 40; (* Too many symbolic links encountered *) + EWOULDBLOCK* = EAGAIN; (* Operation would block *) + ENOMSG* = 42; (* No message of desired type *) + EIDRM* = 43; (* Identifier removed *) + ECHRNG* = 44; (* Channel number out of range *) + EL2NSYNC* = 45; (* Level 2 not synchronized *) + EL3HLT* = 46; (* Level 3 halted *) + EL3RST* = 47; (* Level 3 reset *) + ELNRNG* = 48; (* Link number out of range *) + EUNATCH* = 49; (* Protocol driver not attached *) + ENOCSI* = 50; (* No CSI structure available *) + EL2HLT* = 51; (* Level 2 halted *) + EBADE* = 52; (* Invalid exchange *) + EBADR* = 53; (* Invalid request descriptor *) + EXFULL* = 54; (* Exchange full *) + ENOANO* = 55; (* No anode *) + EBADRQC* = 56; (* Invalid request code *) + EBADSLT* = 57; (* Invalid slot *) + EDEADLOCK* = 58; (* File locking deadlock error *) + EBFONT* = 59; (* Bad font file format *) + ENOSTR* = 60; (* Device not a stream *) + ENODATA* = 61; (* No data available *) + ETIME* = 62; (* Timer expired *) + ENOSR* = 63; (* Out of streams resources *) + ENONET* = 64; (* Machine is not on the network *) + ENOPKG* = 65; (* Package not installed *) + EREMOTE* = 66; (* Object is remote *) + ENOLINK* = 67; (* Link has been severed *) + EADV* = 68; (* Advertise error *) + ESRMNT* = 69; (* Srmount error *) + ECOMM* = 70; (* Communication error on send *) + EPROTO* = 71; (* Protocol error *) + EMULTIHOP* = 72; (* Multihop attempted *) + EDOTDOT* = 73; (* RFS specific error *) + EBADMSG* = 74; (* Not a data message *) + EOVERFLOW* = 75; (* Value too large for defined data type *) + ENOTUNIQ* = 76; (* Name not unique on network *) + EBADFD* = 77; (* File descriptor in bad state *) + EREMCHG* = 78; (* Remote address changed *) + ELIBACC* = 79; (* Can not access a needed shared library *) + ELIBBAD* = 80; (* Accessing a corrupted shared library *) + ELIBSCN* = 81; (* .lib section in a.out corrupted *) + ELIBMAX* = 82; (* Attempting to link in too many shared libraries *) + ELIBEXEC* = 83; (* Cannot exec a shared library directly *) + EILSEQ* = 84; (* Illegal byte sequence *) + ERESTART* = 85; (* Interrupted system call should be restarted *) + ESTRPIPE* = 86; (* Streams pipe error *) + EUSERS* = 87; (* Too many users *) + ENOTSOCK* = 88; (* Socket operation on non-socket *) + EDESTADDRREQ* = 89; (* Destination address required *) + EMSGSIZE* = 90; (* Message too long *) + EPROTOTYPE* = 91; (* Protocol wrong type for socket *) + ENOPROTOOPT* = 92; (* Protocol not available *) + EPROTONOSUPPORT* = 93; (* Protocol not supported *) + ESOCKTNOSUPPORT* = 94; (* Socket type not supported *) + EOPNOTSUPP* = 95; (* Operation not supported on transport endpoint *) + EPFNOSUPPORT* = 96; (* Protocol family not supported *) + EAFNOSUPPORT* = 97; (* Address family not supported by protocol *) + EADDRINUSE* = 98; (* Address already in use *) + EADDRNOTAVAIL* = 99; (* Cannot assign requested address *) + ENETDOWN* = 100; (* Network is down *) + ENETUNREACH* = 101; (* Network is unreachable *) + ENETRESET* = 102; (* Network dropped connection because of reset *) + ECONNABORTED* = 103; (* Software caused connection abort *) + ECONNRESET* = 104; (* Connection reset by peer *) + ENOBUFS* = 105; (* No buffer space available *) + EISCONN* = 106; (* Transport endpoint is already connected *) + ENOTCONN* = 107; (* Transport endpoint is not connected *) + ESHUTDOWN* = 108; (* Cannot send after transport endpoint shutdown *) + ETOOMANYREFS* = 109; (* Too many references: cannot splice *) + ETIMEDOUT* = 110; (* Connection timed out *) + ECONNREFUSED* = 111; (* Connection refused *) + EHOSTDOWN* = 112; (* Host is down *) + EHOSTUNREACH* = 113; (* No route to host *) + EALREADY* = 114; (* Operation already in progress *) + EINPROGRESS* = 115; (* Operation now in progress *) + ESTALE* = 116; (* Stale NFS file handle *) + EUCLEAN* = 117; (* Structure needs cleaning *) + ENOTNAM* = 118; (* Not a XENIX named type file *) + ENAVAIL* = 119; (* No XENIX semaphores available *) + EISNAM* = 120; (* Is a named type file *) + EREMOTEIO* = 121; (* Remote I/O error *) + EDQUOT* = 122; (* Quota exceeded *) + + +TYPE + JmpBuf* = RECORD + bx*, si*, di*, bp*, sp*, pc*: LONGINT; + maskWasSaved*, savedMask*: LONGINT; + END ; + + Status* = RECORD (* struct stat *) + dev*, devX*: LONGINT; (* 64 bit in Linux 2.2 *) + pad1: INTEGER; + ino*, mode*, nlink*, uid*, gid*: LONGINT; + rdev*, rdevX*: LONGINT; (* 64 bit in Linux 2.2 *) + pad2: INTEGER; + size*, blksize*, blocks*, atime*, unused1*, mtime*, unused2*, ctime*, + unused3*, unused4*, unused5*: LONGINT; + END ; + + Timeval* = RECORD + sec*, usec*: LONGINT + END ; + + Timezone* = RECORD + minuteswest*, dsttime*: LONGINT + END ; + + Itimerval* = RECORD + interval*, value*: Timeval + END ; + + FdSet* = ARRAY 8 OF SET; + + SigCtxPtr* = POINTER TO SigContext; + SigContext* = RECORD + END ; + + SignalHandler* = PROCEDURE (sig, code: LONGINT; scp: SigCtxPtr); + + Dirent* = RECORD + ino, off: LONGINT; + reclen: INTEGER; + name: ARRAY 256 OF CHAR; + END ; + + Rusage* = RECORD + utime*, stime*: Timeval; + maxrss*, ixrss*, idrss*, isrss*, + minflt*, majflt*, nswap*, inblock*, + oublock*, msgsnd*, msgrcv*, nsignals*, + nvcsw*, nivcsw*: LONGINT + END ; + + Iovec* = RECORD + base*, len*: LONGINT + END ; + + SocketPair* = ARRAY 2 OF LONGINT; + + Pollfd* = RECORD + fd*: LONGINT; + events*, revents*: INTEGER + END ; + + Sockaddr* = RECORD + family*: INTEGER; + port*: INTEGER; + internetAddr*: LONGINT; + pad*: ARRAY 8 OF CHAR; + END ; + + HostEntry* = POINTER [1] TO Hostent; + Hostent* = RECORD + name*, aliases*: LONGINT; + addrtype*, length*: LONGINT; + addrlist*: LONGINT; (*POINTER TO POINTER TO LONGINT, network byte order*) + END; + + Name* = ARRAY OF CHAR; + + PROCEDURE -includeStat() + "#include "; + + PROCEDURE -includeErrno() + "#include "; + + PROCEDURE -err(): LONGINT + "errno"; + + PROCEDURE errno*(): LONGINT; + BEGIN + RETURN err() + END errno; + + PROCEDURE -Exit*(n: LONGINT) + "exit(n)"; + + PROCEDURE -Fork*(): LONGINT + "fork()"; + + PROCEDURE -Wait*(VAR status: LONGINT): LONGINT + "wait(status)"; + + PROCEDURE -Select*(width: LONGINT; VAR readfds, writefds, exceptfds: FdSet; VAR timeout: Timeval): LONGINT + "select(width, readfds, writefds, exceptfds, timeout)"; + + PROCEDURE -Gettimeofday* (VAR tv: Timeval; VAR tz: Timezone) + "gettimeofday(tv, tz)"; + + PROCEDURE -Read* (fd, buf, nbyte: LONGINT): LONGINT + "read(fd, buf, nbyte)"; + + PROCEDURE -ReadBlk* (fd: LONGINT; VAR buf: ARRAY OF SYSTEM.BYTE): LONGINT + "read(fd, buf, buf__len)"; + + PROCEDURE -Write* (fd, buf, nbyte: LONGINT): LONGINT + "write(fd, buf, nbyte)"; + + PROCEDURE -WriteBlk* (fd: LONGINT; VAR buf: ARRAY OF SYSTEM.BYTE): LONGINT + "write(fd, buf, buf__len)"; + + PROCEDURE -Dup*(fd: LONGINT): LONGINT + "dup(fd)"; + + PROCEDURE -Dup2*(fd1, fd2: LONGINT): LONGINT + "dup(fd1, fd2)"; + + PROCEDURE -Getpid*(): LONGINT + "getpid()"; + + PROCEDURE -Getuid*(): LONGINT + "getuid()"; + + PROCEDURE -Geteuid*(): LONGINT + "geteuid()"; + + PROCEDURE -Getgid*(): LONGINT + "getgid()"; + + PROCEDURE -Getegid*(): LONGINT + "getegid()"; + + PROCEDURE -Unlink*(name: Name): LONGINT + "unlink(name)"; + + PROCEDURE -Open*(name: Name; flag, mode: SET): LONGINT + "open(name, flag, mode)"; + + PROCEDURE -Close*(fd: LONGINT): LONGINT + "close(fd)"; + + PROCEDURE -stat(name: Name; VAR statbuf: Status): LONGINT + "stat((const char*)name, (struct stat*)statbuf)"; + + PROCEDURE Stat*(name: Name; VAR statbuf: Status): LONGINT; + VAR res: LONGINT; + BEGIN + res := stat(name, statbuf); + (* make the first 4 bytes as unique as possible (used in module Files for caching!) *) + INC(statbuf.dev, statbuf.devX); + INC(statbuf.rdev, statbuf.rdevX); + RETURN res; + END Stat; + + PROCEDURE -fstat(fd: LONGINT; VAR statbuf: Status): LONGINT + "fstat(fd, (struct stat*)statbuf)"; + + PROCEDURE Fstat*(fd: LONGINT; VAR statbuf: Status): LONGINT; + VAR res: LONGINT; + BEGIN + res := fstat(fd, statbuf); + (* make the first 4 bytes as unique as possible (used in module Files for caching!) *) + INC(statbuf.dev, statbuf.devX); + INC(statbuf.rdev, statbuf.rdevX); + RETURN res; + END Fstat; + + PROCEDURE -Fchmod*(fd, mode: LONGINT): LONGINT + "fchmod(fd, mode)"; + + PROCEDURE -Chmod*(path: Name; mode: LONGINT): LONGINT + "chmod(path, mode)"; + + PROCEDURE -Lseek*(fd, offset, origin: LONGINT): LONGINT + "lseek(fd, offset, origin)"; + + PROCEDURE -Fsync*(fd: LONGINT): LONGINT + "fsync(fd)"; + + PROCEDURE -Fcntl*(fd, cmd, arg: LONGINT ): LONGINT + "fcntl(fd, cmd, arg)"; + + PROCEDURE -Flock*(fd, operation: LONGINT): LONGINT + "flock(fd, operation)"; + + PROCEDURE -Ftruncate*(fd, length: LONGINT): LONGINT + "ftruncate(fd, length)"; + + PROCEDURE -Readblk*(fd: LONGINT; VAR buf: ARRAY OF SYSTEM.BYTE; len: LONGINT): LONGINT + "read(fd, buf, len)"; + + PROCEDURE -Rename*(old, new: Name): LONGINT + "rename(old, new)"; + + PROCEDURE -Chdir*(path: Name): LONGINT + "chdir(path)"; + + PROCEDURE -Ioctl*(fd, request, arg: LONGINT): LONGINT + "ioctl(fd, request, arg)"; + + PROCEDURE -Kill*(pid, sig: LONGINT): LONGINT + "kill(pid, sig)"; + + PROCEDURE -Sigsetmask*(mask: LONGINT): LONGINT + "sigsetmask(mask)"; + + + (* TCP/IP networking *) + + PROCEDURE -Gethostbyname*(name: Name): HostEntry + "(Unix_HostEntry)gethostbyname(name)"; + + PROCEDURE -Gethostname*(VAR name: Name): LONGINT + "gethostname(name, name__len)"; + + PROCEDURE -Socket*(af, type, protocol: LONGINT): LONGINT + "socket(af, type, protocol)"; + + PROCEDURE -Connect*(socket: LONGINT; name: Sockaddr; namelen: LONGINT): LONGINT + "connect(socket, &(name), namelen)"; + + PROCEDURE -Getsockname*(socket: LONGINT; VAR name: Sockaddr; VAR namelen: LONGINT): LONGINT + "getsockname(socket, name, namelen)"; + + PROCEDURE -Bind*(socket: LONGINT; name: Sockaddr; namelen: LONGINT): LONGINT + "bind(socket, &(name), namelen)"; + + PROCEDURE -Listen*(socket, backlog: LONGINT): LONGINT + "listen(socket, backlog)"; + + PROCEDURE -Accept*(socket: LONGINT; VAR addr: Sockaddr; VAR addrlen: LONGINT): LONGINT + "accept(socket, addr, addrlen)"; + + PROCEDURE -Recv*(socket, bufadr, buflen, flags: LONGINT): LONGINT + "recv(socket, bufadr, buflen, flags)"; + + PROCEDURE -Send*(socket, bufadr, buflen, flags: LONGINT): LONGINT + "send(socket, bufadr, buflen, flags)"; + + PROCEDURE -sys(str: ARRAY OF CHAR): INTEGER (* need this to call external tools like gcc or gas; noch *) + "system(str)"; + + PROCEDURE system*(cmd : ARRAY OF CHAR); + VAR r : INTEGER; + BEGIN + r := sys(cmd); + END system; + + + +END Unix. diff --git a/src/lib/system/gnuc/armv7a_hardfp/Args.Mod b/src/lib/system/gnuc/armv7a_hardfp/Args.Mod new file mode 100644 index 00000000..52228613 --- /dev/null +++ b/src/lib/system/gnuc/armv7a_hardfp/Args.Mod @@ -0,0 +1,52 @@ +MODULE Args; (* jt, 8.12.94 *) + + (* command line argument handling for ofront *) + + + IMPORT SYSTEM; + + TYPE + ArgPtr = POINTER TO ARRAY 1024 OF CHAR; + ArgVec = POINTER TO ARRAY 1024 OF ArgPtr; + + VAR argc-, argv-: LONGINT; + + PROCEDURE -Argc(): INTEGER "SYSTEM_argc"; + PROCEDURE -Argv(): LONGINT "(long)SYSTEM_argv"; + PROCEDURE -getenv(var: ARRAY OF CHAR): ArgPtr + "(Args_ArgPtr)getenv(var)"; + + PROCEDURE Get*(n: INTEGER; VAR val: ARRAY OF CHAR); + VAR av: ArgVec; + BEGIN + IF n < argc THEN av := SYSTEM.VAL(ArgVec, argv); COPY(av[n]^, val) END + END Get; + + PROCEDURE GetInt*(n: INTEGER; VAR val: LONGINT); + VAR s: ARRAY 64 OF CHAR; k, d, i: LONGINT; + BEGIN + s := ""; Get(n, s); i := 0; + IF s[0] = "-" THEN i := 1 END ; + k := 0; d := ORD(s[i]) - ORD("0"); + WHILE (d >= 0 ) & (d <= 9) DO k := k*10 + d; INC(i); d := ORD(s[i]) - ORD("0") END ; + IF s[0] = "-" THEN d := -d; DEC(i) END ; + IF i > 0 THEN val := k END + END GetInt; + + PROCEDURE Pos*(s: ARRAY OF CHAR): INTEGER; + VAR i: INTEGER; arg: ARRAY 256 OF CHAR; + BEGIN + i := 0; Get(i, arg); + WHILE (i < argc) & (s # arg) DO INC(i); Get(i, arg) END ; + RETURN i + END Pos; + + PROCEDURE GetEnv*(var: ARRAY OF CHAR; VAR val: ARRAY OF CHAR); + VAR p: ArgPtr; + BEGIN + p := getenv(var); + IF p # NIL THEN COPY(p^, val) END + END GetEnv; + +BEGIN argc := Argc(); argv := Argv() +END Args. diff --git a/src/lib/system/gnuc/armv7a_hardfp/SYSTEM.c0 b/src/lib/system/gnuc/armv7a_hardfp/SYSTEM.c0 new file mode 100644 index 00000000..580449aa --- /dev/null +++ b/src/lib/system/gnuc/armv7a_hardfp/SYSTEM.c0 @@ -0,0 +1,205 @@ +/* +* The body prefix file of the Ofront runtime system, Version 1.0 +* +* Copyright (c) Software Templ, 1994, 1995 +* +* Module SYSTEM is subject to change any time without prior notification. +* Software Templ disclaims all warranties with regard to module SYSTEM, +* in particular shall Software Templ not be liable for any damage resulting +* from inappropriate use or modification of module SYSTEM. +* +* Version 1.1 jt, 24.11.95 fixes for correct pointer arithmetic on Cray computers +* jt 31.1.2007 ANSI prototypes for malloc and exit in order to avoid cc warnings +* +*/ + +#include "SYSTEM.h" +#ifdef __STDC__ +#include "stdarg.h" +#else +#include "varargs.h" +#endif + +extern void *malloc(long size); +extern void exit(int status); + +void (*SYSTEM_Halt)(); +LONGINT SYSTEM_halt; /* x in HALT(x) */ +LONGINT SYSTEM_assert; /* x in ASSERT(cond, x) */ +LONGINT SYSTEM_argc; +LONGINT SYSTEM_argv; +LONGINT SYSTEM_lock; +BOOLEAN SYSTEM_interrupted; +static LONGINT SYSTEM_mainfrm; /* adr of main proc stack frame, used for stack collection */ + +#define Lock SYSTEM_lock++ +#define Unlock SYSTEM_lock--; if (SYSTEM_interrupted && (SYSTEM_lock == 0)) __HALT(-9) + + +static void SYSTEM_InitHeap(); +void *SYSTEM__init(); + +void SYSTEM_INIT(argc, argvadr) + int argc; long argvadr; +{ + SYSTEM_mainfrm = argvadr; + SYSTEM_argc = argc; + SYSTEM_argv = *(long*)argvadr; + SYSTEM_InitHeap(); + SYSTEM_halt = -128; + SYSTEM__init(); +} + +void SYSTEM_FINI() +{ + SYSTEM_FINALL(); +} + +long SYSTEM_XCHK(i, ub) long i, ub; {return __X(i, ub);} +long SYSTEM_RCHK(i, ub) long i, ub; {return __R(i, ub);} +long SYSTEM_ASH(i, n) long i, n; {return __ASH(i, n);} +long SYSTEM_ABS(i) long i; {return __ABS(i);} +double SYSTEM_ABSD(i) double i; {return __ABS(i);} + +void SYSTEM_INHERIT(t, t0) + long *t, *t0; +{ + t -= __TPROC0OFF; + t0 -= __TPROC0OFF; + while (*t0 != __EOM) {*t = *t0; t--; t0--;} +} + +void SYSTEM_ENUMP(adr, n, P) + long *adr; + long n; + void (*P)(); +{ + while (n > 0) {P(*adr); adr++; n--;} +} + +void SYSTEM_ENUMR(adr, typ, size, n, P) + char *adr; + long *typ, size, n; + void (*P)(); +{ + long *t, off; + typ++; + while (n > 0) { + t = typ; + off = *t; + while (off >= 0) {P(*(long*)(adr+off)); t++; off = *t;} + adr += size; n--; + } +} + +long SYSTEM_DIV(x, y) + unsigned long x, y; +{ if ((long) x >= 0) return (x / y); + else return -((y - 1 - x) / y); +} + +long SYSTEM_MOD(x, y) + unsigned long x, y; +{ unsigned long m; + if ((long) x >= 0) return (x % y); + else { m = (-x) % y; + if (m != 0) return (y - m); else return 0; + } +} + +long SYSTEM_ENTIER(x) + double x; +{ + long y; + if (x >= 0) + return (long)x; + else { + y = (long)x; + if (y <= x) return y; else return y - 1; + } +} + +void SYSTEM_HALT(n) + int n; +{ + SYSTEM_halt = n; + if (SYSTEM_Halt!=0) SYSTEM_Halt(n); + exit(n); +} + +#ifdef __STDC__ +SYSTEM_PTR SYSTEM_NEWARR(long *typ, long elemsz, int elemalgn, int nofdim, int nofdyn, ...) +#else +SYSTEM_PTR SYSTEM_NEWARR(typ, elemsz, elemalgn, nofdim, nofdyn, va_alist) + long *typ, elemsz; + int elemalgn, nofdim, nofdyn; + va_dcl +#endif +{ + long nofelems, size, dataoff, n, nptr, *x, *p, nofptrs, i, *ptab, off; + va_list ap; +#ifdef __STDC__ + va_start(ap, nofdyn); +#else + va_start(ap); +#endif + nofelems = 1; + while (nofdim > 0) { + nofelems = nofelems * va_arg(ap, long); nofdim--; + if (nofelems <= 0) __HALT(-20); + } + va_end(ap); + dataoff = nofdyn * sizeof(long); + if (elemalgn > sizeof(long)) { + n = dataoff % elemalgn; + if (n != 0) dataoff += elemalgn - n; + } + size = dataoff + nofelems * elemsz; + Lock; + if (typ == NIL) { + /* element typ does not contain pointers */ + x = SYSTEM_NEWBLK(size); + } + else if (typ == POINTER__typ) { + /* element type is a pointer */ + x = SYSTEM_NEWBLK(size + nofelems * sizeof(long)); + p = (long*)x[-1]; + p[-nofelems] = *p; /* build new type desc in situ: 1. copy block size; 2. setup ptr tab; 3. set sentinel; 4. patch tag */ + p -= nofelems - 1; n = 1; /* n =1 for skipping the size field */ + while (n <= nofelems) {*p = n*sizeof(long); p++; n++;} + *p = - (nofelems + 1) * sizeof(long); /* sentinel */ + x[-1] -= nofelems * sizeof(long); + } + else { + /* element type is a record that contains pointers */ + ptab = typ + 1; nofptrs = 0; + while (ptab[nofptrs] >= 0) {nofptrs++;} /* number of pointers per element */ + nptr = nofelems * nofptrs; /* total number of pointers */ + x = SYSTEM_NEWBLK(size + nptr * sizeof(long)); + p = (long*)x[- 1]; + p[-nptr] = *p; /* build new type desc in situ; 1. copy block size; 2. setup ptr tab; 3. set sentinel; 4. patch tag */ + p -= nptr - 1; n = 0; off = dataoff; + while (n < nofelems) {i = 0; + while (i < nofptrs) {*p = off + ptab[i]; p++; i++;} + off += elemsz; n++; + } + *p = - (nptr + 1) * sizeof(long); /* sentinel */ + x[-1] -= nptr * sizeof(long); + } + if (nofdyn != 0) { + /* setup len vector for index checks */ +#ifdef __STDC__ + va_start(ap, nofdyn); +#else + va_start(ap); +#endif + p = x; + while (nofdyn > 0) {*p = va_arg(ap, long); p++, nofdyn--;} + va_end(ap); + } + Unlock; + return x; +} + +/* ----------- end of SYSTEM.co ------------- */ + diff --git a/src/lib/system/gnuc/armv7a_hardfp/SYSTEM.h b/src/lib/system/gnuc/armv7a_hardfp/SYSTEM.h new file mode 100644 index 00000000..719a6d18 --- /dev/null +++ b/src/lib/system/gnuc/armv7a_hardfp/SYSTEM.h @@ -0,0 +1,215 @@ +#ifndef SYSTEM__h +#define SYSTEM__h + +/* + +the Ofront runtime system interface and macros library +copyright (c) Josef Templ, 1995, 1996 + +gcc for Linux version (same as SPARC/Solaris2) +uses double # as concatenation operator + +*/ + +#include + +//extern void *memcpy(void *dest, const void *src, long n); +extern void *memcpy(void *dest, const void *src, size_t n); +extern void *malloc(long size); +extern void exit(int status); + +#define export +#define import extern + +/* constants */ +#define __MAXEXT 16 +#define NIL 0L +#define POINTER__typ (long*)1L /* not NIL and not a valid type */ + +/* basic types */ +typedef char BOOLEAN; +typedef unsigned char CHAR; +typedef signed char SHORTINT; +typedef short int INTEGER; +typedef long LONGINT; +typedef float REAL; +typedef double LONGREAL; +typedef unsigned long SET; +typedef void *SYSTEM_PTR; +typedef unsigned char SYSTEM_BYTE; + +/* runtime system routines */ +extern long SYSTEM_DIV(); +extern long SYSTEM_MOD(); +extern long SYSTEM_ENTIER(); +extern long SYSTEM_ASH(); +extern long SYSTEM_ABS(); +extern long SYSTEM_XCHK(); +extern long SYSTEM_RCHK(); +extern double SYSTEM_ABSD(); +extern SYSTEM_PTR SYSTEM_NEWREC(); +extern SYSTEM_PTR SYSTEM_NEWBLK(); +#ifdef __STDC__ +extern SYSTEM_PTR SYSTEM_NEWARR(long*, long, int, int, int, ...); +#else +extern SYSTEM_PTR SYSTEM_NEWARR(); +#endif +extern SYSTEM_PTR SYSTEM_REGMOD(); +extern void SYSTEM_INCREF(); +extern void SYSTEM_REGCMD(); +extern void SYSTEM_REGTYP(); +extern void SYSTEM_REGFIN(); +extern void SYSTEM_FINALL(); +extern void SYSTEM_INIT(); +extern void SYSTEM_FINI(); +extern void SYSTEM_HALT(); +extern void SYSTEM_INHERIT(); +extern void SYSTEM_ENUMP(); +extern void SYSTEM_ENUMR(); + +/* module registry */ +#define __DEFMOD static void *m; if(m!=0)return m +#define __REGMOD(name, enum) if(m==0)m=SYSTEM_REGMOD((CHAR*)name,enum); else return m +#define __ENDMOD return m +#define __INIT(argc, argv) static void *m; SYSTEM_INIT(argc, (long)&argv); +#define __REGMAIN(name, enum) m=SYSTEM_REGMOD(name,enum) +#define __FINI SYSTEM_FINI(); return 0 +#define __IMPORT(name) SYSTEM_INCREF(name##__init()) +#define __REGCMD(name, cmd) SYSTEM_REGCMD(m, name, cmd) + +/* SYSTEM ops */ +#define __SYSNEW(p, len) p=SYSTEM_NEWBLK((long)(len)) +#define __VAL(t, x) (*(t*)&(x)) +#define __GET(a, x, t) x= *(t*)(a) +#define __PUT(a, x, t) *(t*)(a)=x +#define __LSHL(x, n, t) ((t)((unsigned)(x)<<(n))) +#define __LSHR(x, n, t) ((t)((unsigned)(x)>>(n))) +#define __LSH(x, n, t) ((n)>=0? __LSHL(x, n, t): __LSHR(x, -(n), t)) +#define __ROTL(x, n, t) ((t)((unsigned)(x)<<(n)|(unsigned)(x)>>(8*sizeof(t)-(n)))) +#define __ROTR(x, n, t) ((t)((unsigned)(x)>>(n)|(unsigned)(x)<<(8*sizeof(t)-(n)))) +#define __ROT(x, n, t) ((n)>=0? __ROTL(x, n, t): __ROTR(x, -(n), t)) +#define __BIT(x, n) (*(unsigned long*)(x)>>(n)&1) +#define __MOVE(s, d, n) memcpy((char*)(d),(char*)(s),n) + +/* std procs and operator mappings */ +#define __SHORT(x, y) ((int)((unsigned long)(x)+(y)<(y)+(y)?(x):(__HALT(-8),0))) +#define __SHORTF(x, y) ((int)(__RF((x)+(y),(y)+(y))-(y))) +#define __CHR(x) ((CHAR)__R(x, 256)) +#define __CHRF(x) ((CHAR)__RF(x, 256)) +#define __DIV(x, y) ((x)>=0?(x)/(y):-(((y)-1-(x))/(y))) +#define __DIVF(x, y) SYSTEM_DIV((long)(x),(long)(y)) +#define __MOD(x, y) ((x)>=0?(x)%(y):__MODF(x,y)) +#define __MODF(x, y) SYSTEM_MOD((long)(x),(long)(y)) +#define __NEW(p, t) p=SYSTEM_NEWREC((long)t##__typ) +#define __NEWARR SYSTEM_NEWARR +#define __HALT(x) SYSTEM_HALT(x) +#define __ASSERT(cond, x) if (!(cond)) {SYSTEM_assert = x; SYSTEM_HALT(-1);} +#define __ENTIER(x) SYSTEM_ENTIER(x) +#define __ABS(x) (((x)<0)?-(x):(x)) +#define __ABSF(x) SYSTEM_ABS((long)(x)) +#define __ABSFD(x) SYSTEM_ABSD((double)(x)) +#define __CAP(ch) ((CHAR)((ch)&0x5f)) +#define __ODD(x) ((x)&1) +#define __IN(x, s) (((s)>>(x))&1) +#define __SETOF(x) ((SET)1<<(x)) +#define __SETRNG(l, h) ((~(SET)0<<(l))&~(SET)0>>(8*sizeof(SET)-1-(h))) +#define __MASK(x, m) ((x)&~(m)) +#define __COPY(s, d, n) {char*_a=(void*)s,*_b=(void*)d;long _i=0,_t=n-1;while(_i<_t&&((_b[_i]=_a[_i])!=0)){_i++;};_b[_i]=0;} +static int __STRCMP(x, y) + CHAR *x, *y; +{long i = 0; CHAR ch1, ch2; + do {ch1 = x[i]; ch2 = y[i]; i++; + if (!ch1) return -(int)ch2; + } while (ch1==ch2); + return (int)ch1 - (int)ch2; +} +#define __ASH(x, n) ((n)>=0?__ASHL(x,n):__ASHR(x,-(n))) +#define __ASHL(x, n) ((long)(x)<<(n)) +#define __ASHR(x, n) ((long)(x)>>(n)) +#define __ASHF(x, n) SYSTEM_ASH((long)(x), (long)(n)) +#define __DUP(x, l, t) x=(void*)memcpy(alloca(l*sizeof(t)),x,l*sizeof(t)) +#define __DUPARR(v, t) v=(void*)memcpy(v##__copy,v,sizeof(t)) +#define __DEL(x) /* DUP with alloca frees storage automatically */ +#define __IS(tag, typ, level) (*(tag-(__BASEOFF-level))==(long)typ##__typ) +#define __TYPEOF(p) (*(((long**)(p))-1)) +#define __ISP(p, typ, level) __IS(__TYPEOF(p),typ,level) + +/* runtime checks */ +#define __X(i, ub) (((unsigned)(long)(i)<(unsigned long)(ub))?i:(__HALT(-2),0)) +#define __XF(i, ub) SYSTEM_XCHK((long)(i), (long)(ub)) +#define __RETCHK __retchk: __HALT(-3) +#define __CASECHK __HALT(-4) +#define __GUARDP(p, typ, level) ((typ*)(__ISP(p,typ,level)?p:(__HALT(-5),p))) +#define __GUARDR(r, typ, level) (*((typ*)(__IS(r##__typ,typ,level)?r:(__HALT(-5),r)))) +#define __GUARDA(p, typ, level) ((struct typ*)(__IS(__TYPEOF(p),typ,level)?p:(__HALT(-5),p))) +#define __GUARDEQR(p, dyntyp, typ) if(dyntyp!=typ##__typ) __HALT(-6);*(p) +#define __GUARDEQP(p, typ) if(__TYPEOF(p)!=typ##__typ)__HALT(-6);*(p) +#define __WITHCHK __HALT(-7) +#define __R(i, ub) (((unsigned)(long)(i)<(unsigned long)(ub))?i:(__HALT(-8),0)) +#define __RF(i, ub) SYSTEM_RCHK((long)(i),(long)(ub)) + +/* record type descriptors */ +#define __TDESC(t, m, n) \ + static struct t##__desc {\ + long tproc[m]; \ + long tag, next, level, module; \ + char name[24]; \ + long *base[__MAXEXT]; \ + char *rsrvd; \ + long blksz, ptr[n+1]; \ + } t##__desc + +#define __BASEOFF (__MAXEXT+1) +#define __TPROC0OFF (__BASEOFF+24/sizeof(long)+5) +#define __EOM 1 +#define __TDFLDS(name, size) {__EOM}, 1, 0, 0, 0, name, {0}, 0, size +#define __ENUMP(adr, n, P) SYSTEM_ENUMP(adr, (long)(n), P) +#define __ENUMR(adr, typ, size, n, P) SYSTEM_ENUMR(adr, typ, (long)(size), (long)(n), P) + +#define __INITYP(t, t0, level) \ + t##__typ= &t##__desc.blksz; \ + memcpy(t##__desc.base, t0##__typ - __BASEOFF, level*sizeof(long)); \ + t##__desc.base[level]=t##__typ; \ + t##__desc.module=(long)m; \ + if(t##__desc.blksz!=sizeof(struct t)) __HALT(-15); \ + t##__desc.blksz=(t##__desc.blksz+5*sizeof(long)-1)/(4*sizeof(long))*(4*sizeof(long)); \ + SYSTEM_REGTYP(m, (long)&t##__desc.next); \ + SYSTEM_INHERIT(t##__typ, t0##__typ) + +/* Oberon-2 type bound procedures support */ +#define __INITBP(t, proc, num) *(t##__typ-(__TPROC0OFF+num))=(long)proc +#define __SEND(typ, num, funtyp, parlist) ((funtyp)(*(typ-(__TPROC0OFF+num))))parlist + +/* runtime system variables */ +extern LONGINT SYSTEM_argc; +extern LONGINT SYSTEM_argv; +extern void (*SYSTEM_Halt)(); +extern LONGINT SYSTEM_halt; +extern LONGINT SYSTEM_assert; +extern SYSTEM_PTR SYSTEM_modules; +extern LONGINT SYSTEM_heapsize; +extern LONGINT SYSTEM_allocated; +extern LONGINT SYSTEM_lock; +extern SHORTINT SYSTEM_gclock; +extern BOOLEAN SYSTEM_interrupted; + +/* ANSI prototypes; not used so far +static int __STRCMP(CHAR *x, CHAR *y); +void SYSTEM_INIT(int argc, long argvadr); +void SYSTEM_FINI(void); +long SYSTEM_XCHK(long i, long ub); +long SYSTEM_RCHK(long i, long ub); +long SYSTEM_ASH(long i, long n); +long SYSTEM_ABS(long i); +double SYSTEM_ABSD(double i); +void SYSTEM_INHERIT(long *t, long *t0); +void SYSTEM_ENUMP(long *adr, long n, void (*P)(void*)); +void SYSTEM_ENUMR(char *adr, long *typ, long size, long n, void (*P)(void*)); +long SYSTEM_DIV(unsigned long x, unsigned long y); +long SYSTEM_MOD(unsigned long x, unsigned long y); +long SYSTEM_ENTIER(double x); +void SYSTEM_HALT(int n); +*/ + +#endif + diff --git a/src/lib/system/gnuc/armv7a_hardfp/Unix.Mod b/src/lib/system/gnuc/armv7a_hardfp/Unix.Mod new file mode 100644 index 00000000..9b2180b9 --- /dev/null +++ b/src/lib/system/gnuc/armv7a_hardfp/Unix.Mod @@ -0,0 +1,411 @@ +MODULE Unix; (* Josef Templ, 5.3.90 Linux system calls *) +(* system procedure added by noch *) +(* Module Unix provides a system call interface to Linux. + Naming conventions: + Procedure and Type-names always start with a capital letter. + error numbers as defined in Unix + other constants start with lower case letters *) + +IMPORT SYSTEM; + +CONST + +(* various important constants *) + + stdin* = 0; stdout* =1; stderr* = 2; + + LOCKEX* = 2; LOCKUN* = 8; (* /usr/include/file.h *) + AFINET* = 2; (* /usr/include/sys/socket.h *) + PFINET* = AFINET; (* /usr/include/linux/socket.h *) + SOCKSTREAM* = 1; (* /usr/include/linux/socket.h *) + FIONREAD* = 541BH; (* in /usr/include/asm/termios.h *) + SETFL* = 4; (* set file descriptor flags; in asm/fcntl.h *) + TCP* = 0; + +(* flag sets, cf. /usr/include/asm/fcntl.h *) + rdonly* = {}; wronly* = {0}; rdwr* = {1}; creat* = {6}; excl* = {7}; trunc* = {9}; append* = {10}; ndelay = {11}; + +(* error numbers *) + + EPERM* = 1; (* Not owner *) + ENOENT* = 2; (* No such file or directory *) + ESRCH* = 3; (* No such process *) + EINTR* = 4; (* Interrupted system call *) + EIO* = 5; (* I/O error *) + ENXIO* = 6; (* No such device or address *) + E2BIG* = 7; (* Arg list too long *) + ENOEXEC* = 8; (* Exec format error *) + EBADF* = 9; (* Bad file number *) + ECHILD* = 10; (* No children *) + EAGAIN* = 11; (* No more processes *) + ENOMEM* = 12; (* Not enough core *) + EACCES* = 13; (* Permission denied *) + EFAULT* = 14; (* Bad address *) + ENOTBLK* = 15; (* Block device required *) + EBUSY* = 16; (* Mount device busy *) + EEXIST* = 17; (* File exists *) + EXDEV* = 18; (* Cross-device link *) + ENODEV* = 19; (* No such device *) + ENOTDIR* = 20; (* Not a directory*) + EISDIR* = 21; (* Is a directory *) + EINVAL* = 22; (* Invalid argument *) + ENFILE* = 23; (* File table overflow *) + EMFILE* = 24; (* Too many open files *) + ENOTTY* = 25; (* Not a typewriter *) + ETXTBSY* = 26; (* Text file busy *) + EFBIG* = 27; (* File too large *) + ENOSPC* = 28; (* No space left on device *) + ESPIPE* = 29; (* Illegal seek *) + EROFS* = 30; (* Read-only file system *) + EMLINK* = 31; (* Too many links *) + EPIPE* = 32; (* Broken pipe *) + EDOM* = 33; (* Argument too large *) + ERANGE* = 34; (* Result too large *) + EDEADLK* = 35; (* Resource deadlock would occur *) + ENAMETOOLONG* = 36; (* File name too long *) + ENOLCK* = 37; (* No record locks available *) + ENOSYS* = 38; (* Function not implemented *) + ENOTEMPTY* = 39; (* Directory not empty *) + ELOOP* = 40; (* Too many symbolic links encountered *) + EWOULDBLOCK* = EAGAIN; (* Operation would block *) + ENOMSG* = 42; (* No message of desired type *) + EIDRM* = 43; (* Identifier removed *) + ECHRNG* = 44; (* Channel number out of range *) + EL2NSYNC* = 45; (* Level 2 not synchronized *) + EL3HLT* = 46; (* Level 3 halted *) + EL3RST* = 47; (* Level 3 reset *) + ELNRNG* = 48; (* Link number out of range *) + EUNATCH* = 49; (* Protocol driver not attached *) + ENOCSI* = 50; (* No CSI structure available *) + EL2HLT* = 51; (* Level 2 halted *) + EBADE* = 52; (* Invalid exchange *) + EBADR* = 53; (* Invalid request descriptor *) + EXFULL* = 54; (* Exchange full *) + ENOANO* = 55; (* No anode *) + EBADRQC* = 56; (* Invalid request code *) + EBADSLT* = 57; (* Invalid slot *) + EDEADLOCK* = 58; (* File locking deadlock error *) + EBFONT* = 59; (* Bad font file format *) + ENOSTR* = 60; (* Device not a stream *) + ENODATA* = 61; (* No data available *) + ETIME* = 62; (* Timer expired *) + ENOSR* = 63; (* Out of streams resources *) + ENONET* = 64; (* Machine is not on the network *) + ENOPKG* = 65; (* Package not installed *) + EREMOTE* = 66; (* Object is remote *) + ENOLINK* = 67; (* Link has been severed *) + EADV* = 68; (* Advertise error *) + ESRMNT* = 69; (* Srmount error *) + ECOMM* = 70; (* Communication error on send *) + EPROTO* = 71; (* Protocol error *) + EMULTIHOP* = 72; (* Multihop attempted *) + EDOTDOT* = 73; (* RFS specific error *) + EBADMSG* = 74; (* Not a data message *) + EOVERFLOW* = 75; (* Value too large for defined data type *) + ENOTUNIQ* = 76; (* Name not unique on network *) + EBADFD* = 77; (* File descriptor in bad state *) + EREMCHG* = 78; (* Remote address changed *) + ELIBACC* = 79; (* Can not access a needed shared library *) + ELIBBAD* = 80; (* Accessing a corrupted shared library *) + ELIBSCN* = 81; (* .lib section in a.out corrupted *) + ELIBMAX* = 82; (* Attempting to link in too many shared libraries *) + ELIBEXEC* = 83; (* Cannot exec a shared library directly *) + EILSEQ* = 84; (* Illegal byte sequence *) + ERESTART* = 85; (* Interrupted system call should be restarted *) + ESTRPIPE* = 86; (* Streams pipe error *) + EUSERS* = 87; (* Too many users *) + ENOTSOCK* = 88; (* Socket operation on non-socket *) + EDESTADDRREQ* = 89; (* Destination address required *) + EMSGSIZE* = 90; (* Message too long *) + EPROTOTYPE* = 91; (* Protocol wrong type for socket *) + ENOPROTOOPT* = 92; (* Protocol not available *) + EPROTONOSUPPORT* = 93; (* Protocol not supported *) + ESOCKTNOSUPPORT* = 94; (* Socket type not supported *) + EOPNOTSUPP* = 95; (* Operation not supported on transport endpoint *) + EPFNOSUPPORT* = 96; (* Protocol family not supported *) + EAFNOSUPPORT* = 97; (* Address family not supported by protocol *) + EADDRINUSE* = 98; (* Address already in use *) + EADDRNOTAVAIL* = 99; (* Cannot assign requested address *) + ENETDOWN* = 100; (* Network is down *) + ENETUNREACH* = 101; (* Network is unreachable *) + ENETRESET* = 102; (* Network dropped connection because of reset *) + ECONNABORTED* = 103; (* Software caused connection abort *) + ECONNRESET* = 104; (* Connection reset by peer *) + ENOBUFS* = 105; (* No buffer space available *) + EISCONN* = 106; (* Transport endpoint is already connected *) + ENOTCONN* = 107; (* Transport endpoint is not connected *) + ESHUTDOWN* = 108; (* Cannot send after transport endpoint shutdown *) + ETOOMANYREFS* = 109; (* Too many references: cannot splice *) + ETIMEDOUT* = 110; (* Connection timed out *) + ECONNREFUSED* = 111; (* Connection refused *) + EHOSTDOWN* = 112; (* Host is down *) + EHOSTUNREACH* = 113; (* No route to host *) + EALREADY* = 114; (* Operation already in progress *) + EINPROGRESS* = 115; (* Operation now in progress *) + ESTALE* = 116; (* Stale NFS file handle *) + EUCLEAN* = 117; (* Structure needs cleaning *) + ENOTNAM* = 118; (* Not a XENIX named type file *) + ENAVAIL* = 119; (* No XENIX semaphores available *) + EISNAM* = 120; (* Is a named type file *) + EREMOTEIO* = 121; (* Remote I/O error *) + EDQUOT* = 122; (* Quota exceeded *) + + +TYPE + JmpBuf* = RECORD + bx*, si*, di*, bp*, sp*, pc*: LONGINT; + maskWasSaved*, savedMask*: LONGINT; + END ; + + Status* = RECORD (* struct stat *) + dev*, devX*: LONGINT; (* 64 bit in Linux 2.2 *) + pad1: INTEGER; + ino*, mode*, nlink*, uid*, gid*: LONGINT; + rdev*, rdevX*: LONGINT; (* 64 bit in Linux 2.2 *) + pad2: INTEGER; + size*, blksize*, blocks*, atime*, unused1*, mtime*, unused2*, ctime*, + unused3*, unused4*, unused5*: LONGINT; + END ; + + Timeval* = RECORD + sec*, usec*: LONGINT + END ; + + Timezone* = RECORD + minuteswest*, dsttime*: LONGINT + END ; + + Itimerval* = RECORD + interval*, value*: Timeval + END ; + + FdSet* = ARRAY 8 OF SET; + + SigCtxPtr* = POINTER TO SigContext; + SigContext* = RECORD + END ; + + SignalHandler* = PROCEDURE (sig, code: LONGINT; scp: SigCtxPtr); + + Dirent* = RECORD + ino, off: LONGINT; + reclen: INTEGER; + name: ARRAY 256 OF CHAR; + END ; + + Rusage* = RECORD + utime*, stime*: Timeval; + maxrss*, ixrss*, idrss*, isrss*, + minflt*, majflt*, nswap*, inblock*, + oublock*, msgsnd*, msgrcv*, nsignals*, + nvcsw*, nivcsw*: LONGINT + END ; + + Iovec* = RECORD + base*, len*: LONGINT + END ; + + SocketPair* = ARRAY 2 OF LONGINT; + + Pollfd* = RECORD + fd*: LONGINT; + events*, revents*: INTEGER + END ; + + Sockaddr* = RECORD + family*: INTEGER; + port*: INTEGER; + internetAddr*: LONGINT; + pad*: ARRAY 8 OF CHAR; + END ; + + HostEntry* = POINTER [1] TO Hostent; + Hostent* = RECORD + name*, aliases*: LONGINT; + addrtype*, length*: LONGINT; + addrlist*: LONGINT; (*POINTER TO POINTER TO LONGINT, network byte order*) + END; + + Name* = ARRAY OF CHAR; + + PROCEDURE -includeStat() + "#include "; + + PROCEDURE -includeErrno() + "#include "; + + PROCEDURE -err(): LONGINT + "errno"; + + PROCEDURE errno*(): LONGINT; + BEGIN + RETURN err() + END errno; + + PROCEDURE -Exit*(n: LONGINT) + "exit(n)"; + + PROCEDURE -Fork*(): LONGINT + "fork()"; + + PROCEDURE -Wait*(VAR status: LONGINT): LONGINT + "wait(status)"; + + PROCEDURE -Select*(width: LONGINT; VAR readfds, writefds, exceptfds: FdSet; VAR timeout: Timeval): LONGINT + "select(width, readfds, writefds, exceptfds, timeout)"; + + PROCEDURE -Gettimeofday* (VAR tv: Timeval; VAR tz: Timezone) + "gettimeofday(tv, tz)"; + + PROCEDURE -Read* (fd, buf, nbyte: LONGINT): LONGINT + "read(fd, buf, nbyte)"; + + PROCEDURE -ReadBlk* (fd: LONGINT; VAR buf: ARRAY OF SYSTEM.BYTE): LONGINT + "read(fd, buf, buf__len)"; + + PROCEDURE -Write* (fd, buf, nbyte: LONGINT): LONGINT + "write(fd, buf, nbyte)"; + + PROCEDURE -WriteBlk* (fd: LONGINT; VAR buf: ARRAY OF SYSTEM.BYTE): LONGINT + "write(fd, buf, buf__len)"; + + PROCEDURE -Dup*(fd: LONGINT): LONGINT + "dup(fd)"; + + PROCEDURE -Dup2*(fd1, fd2: LONGINT): LONGINT + "dup(fd1, fd2)"; + + PROCEDURE -Getpid*(): LONGINT + "getpid()"; + + PROCEDURE -Getuid*(): LONGINT + "getuid()"; + + PROCEDURE -Geteuid*(): LONGINT + "geteuid()"; + + PROCEDURE -Getgid*(): LONGINT + "getgid()"; + + PROCEDURE -Getegid*(): LONGINT + "getegid()"; + + PROCEDURE -Unlink*(name: Name): LONGINT + "unlink(name)"; + + PROCEDURE -Open*(name: Name; flag, mode: SET): LONGINT + "open(name, flag, mode)"; + + PROCEDURE -Close*(fd: LONGINT): LONGINT + "close(fd)"; + + PROCEDURE -stat(name: Name; VAR statbuf: Status): LONGINT + "stat((const char*)name, (struct stat*)statbuf)"; + + PROCEDURE Stat*(name: Name; VAR statbuf: Status): LONGINT; + VAR res: LONGINT; + BEGIN + res := stat(name, statbuf); + (* make the first 4 bytes as unique as possible (used in module Files for caching!) *) + INC(statbuf.dev, statbuf.devX); + INC(statbuf.rdev, statbuf.rdevX); + RETURN res; + END Stat; + + PROCEDURE -fstat(fd: LONGINT; VAR statbuf: Status): LONGINT + "fstat(fd, (struct stat*)statbuf)"; + + PROCEDURE Fstat*(fd: LONGINT; VAR statbuf: Status): LONGINT; + VAR res: LONGINT; + BEGIN + res := fstat(fd, statbuf); + (* make the first 4 bytes as unique as possible (used in module Files for caching!) *) + INC(statbuf.dev, statbuf.devX); + INC(statbuf.rdev, statbuf.rdevX); + RETURN res; + END Fstat; + + PROCEDURE -Fchmod*(fd, mode: LONGINT): LONGINT + "fchmod(fd, mode)"; + + PROCEDURE -Chmod*(path: Name; mode: LONGINT): LONGINT + "chmod(path, mode)"; + + PROCEDURE -Lseek*(fd, offset, origin: LONGINT): LONGINT + "lseek(fd, offset, origin)"; + + PROCEDURE -Fsync*(fd: LONGINT): LONGINT + "fsync(fd)"; + + PROCEDURE -Fcntl*(fd, cmd, arg: LONGINT ): LONGINT + "fcntl(fd, cmd, arg)"; + + PROCEDURE -Flock*(fd, operation: LONGINT): LONGINT + "flock(fd, operation)"; + + PROCEDURE -Ftruncate*(fd, length: LONGINT): LONGINT + "ftruncate(fd, length)"; + + PROCEDURE -Readblk*(fd: LONGINT; VAR buf: ARRAY OF SYSTEM.BYTE; len: LONGINT): LONGINT + "read(fd, buf, len)"; + + PROCEDURE -Rename*(old, new: Name): LONGINT + "rename(old, new)"; + + PROCEDURE -Chdir*(path: Name): LONGINT + "chdir(path)"; + + PROCEDURE -Ioctl*(fd, request, arg: LONGINT): LONGINT + "ioctl(fd, request, arg)"; + + PROCEDURE -Kill*(pid, sig: LONGINT): LONGINT + "kill(pid, sig)"; + + PROCEDURE -Sigsetmask*(mask: LONGINT): LONGINT + "sigsetmask(mask)"; + + + (* TCP/IP networking *) + + PROCEDURE -Gethostbyname*(name: Name): HostEntry + "(Unix_HostEntry)gethostbyname(name)"; + + PROCEDURE -Gethostname*(VAR name: Name): LONGINT + "gethostname(name, name__len)"; + + PROCEDURE -Socket*(af, type, protocol: LONGINT): LONGINT + "socket(af, type, protocol)"; + + PROCEDURE -Connect*(socket: LONGINT; name: Sockaddr; namelen: LONGINT): LONGINT + "connect(socket, &(name), namelen)"; + + PROCEDURE -Getsockname*(socket: LONGINT; VAR name: Sockaddr; VAR namelen: LONGINT): LONGINT + "getsockname(socket, name, namelen)"; + + PROCEDURE -Bind*(socket: LONGINT; name: Sockaddr; namelen: LONGINT): LONGINT + "bind(socket, &(name), namelen)"; + + PROCEDURE -Listen*(socket, backlog: LONGINT): LONGINT + "listen(socket, backlog)"; + + PROCEDURE -Accept*(socket: LONGINT; VAR addr: Sockaddr; VAR addrlen: LONGINT): LONGINT + "accept(socket, addr, addrlen)"; + + PROCEDURE -Recv*(socket, bufadr, buflen, flags: LONGINT): LONGINT + "recv(socket, bufadr, buflen, flags)"; + + PROCEDURE -Send*(socket, bufadr, buflen, flags: LONGINT): LONGINT + "send(socket, bufadr, buflen, flags)"; + + PROCEDURE -sys(str: ARRAY OF CHAR): INTEGER (* need this to call external tools like gcc or gas; noch *) + "system(str)"; + + PROCEDURE system*(cmd : ARRAY OF CHAR); + VAR r : INTEGER; + BEGIN + r := sys(cmd); + END system; + + + +END Unix. diff --git a/src/lib/system/gnuc/x86/Args.Mod b/src/lib/system/gnuc/x86/Args.Mod new file mode 100644 index 00000000..52228613 --- /dev/null +++ b/src/lib/system/gnuc/x86/Args.Mod @@ -0,0 +1,52 @@ +MODULE Args; (* jt, 8.12.94 *) + + (* command line argument handling for ofront *) + + + IMPORT SYSTEM; + + TYPE + ArgPtr = POINTER TO ARRAY 1024 OF CHAR; + ArgVec = POINTER TO ARRAY 1024 OF ArgPtr; + + VAR argc-, argv-: LONGINT; + + PROCEDURE -Argc(): INTEGER "SYSTEM_argc"; + PROCEDURE -Argv(): LONGINT "(long)SYSTEM_argv"; + PROCEDURE -getenv(var: ARRAY OF CHAR): ArgPtr + "(Args_ArgPtr)getenv(var)"; + + PROCEDURE Get*(n: INTEGER; VAR val: ARRAY OF CHAR); + VAR av: ArgVec; + BEGIN + IF n < argc THEN av := SYSTEM.VAL(ArgVec, argv); COPY(av[n]^, val) END + END Get; + + PROCEDURE GetInt*(n: INTEGER; VAR val: LONGINT); + VAR s: ARRAY 64 OF CHAR; k, d, i: LONGINT; + BEGIN + s := ""; Get(n, s); i := 0; + IF s[0] = "-" THEN i := 1 END ; + k := 0; d := ORD(s[i]) - ORD("0"); + WHILE (d >= 0 ) & (d <= 9) DO k := k*10 + d; INC(i); d := ORD(s[i]) - ORD("0") END ; + IF s[0] = "-" THEN d := -d; DEC(i) END ; + IF i > 0 THEN val := k END + END GetInt; + + PROCEDURE Pos*(s: ARRAY OF CHAR): INTEGER; + VAR i: INTEGER; arg: ARRAY 256 OF CHAR; + BEGIN + i := 0; Get(i, arg); + WHILE (i < argc) & (s # arg) DO INC(i); Get(i, arg) END ; + RETURN i + END Pos; + + PROCEDURE GetEnv*(var: ARRAY OF CHAR; VAR val: ARRAY OF CHAR); + VAR p: ArgPtr; + BEGIN + p := getenv(var); + IF p # NIL THEN COPY(p^, val) END + END GetEnv; + +BEGIN argc := Argc(); argv := Argv() +END Args. diff --git a/src/lib/system/gnuc/x86/SYSTEM.c0 b/src/lib/system/gnuc/x86/SYSTEM.c0 new file mode 100644 index 00000000..580449aa --- /dev/null +++ b/src/lib/system/gnuc/x86/SYSTEM.c0 @@ -0,0 +1,205 @@ +/* +* The body prefix file of the Ofront runtime system, Version 1.0 +* +* Copyright (c) Software Templ, 1994, 1995 +* +* Module SYSTEM is subject to change any time without prior notification. +* Software Templ disclaims all warranties with regard to module SYSTEM, +* in particular shall Software Templ not be liable for any damage resulting +* from inappropriate use or modification of module SYSTEM. +* +* Version 1.1 jt, 24.11.95 fixes for correct pointer arithmetic on Cray computers +* jt 31.1.2007 ANSI prototypes for malloc and exit in order to avoid cc warnings +* +*/ + +#include "SYSTEM.h" +#ifdef __STDC__ +#include "stdarg.h" +#else +#include "varargs.h" +#endif + +extern void *malloc(long size); +extern void exit(int status); + +void (*SYSTEM_Halt)(); +LONGINT SYSTEM_halt; /* x in HALT(x) */ +LONGINT SYSTEM_assert; /* x in ASSERT(cond, x) */ +LONGINT SYSTEM_argc; +LONGINT SYSTEM_argv; +LONGINT SYSTEM_lock; +BOOLEAN SYSTEM_interrupted; +static LONGINT SYSTEM_mainfrm; /* adr of main proc stack frame, used for stack collection */ + +#define Lock SYSTEM_lock++ +#define Unlock SYSTEM_lock--; if (SYSTEM_interrupted && (SYSTEM_lock == 0)) __HALT(-9) + + +static void SYSTEM_InitHeap(); +void *SYSTEM__init(); + +void SYSTEM_INIT(argc, argvadr) + int argc; long argvadr; +{ + SYSTEM_mainfrm = argvadr; + SYSTEM_argc = argc; + SYSTEM_argv = *(long*)argvadr; + SYSTEM_InitHeap(); + SYSTEM_halt = -128; + SYSTEM__init(); +} + +void SYSTEM_FINI() +{ + SYSTEM_FINALL(); +} + +long SYSTEM_XCHK(i, ub) long i, ub; {return __X(i, ub);} +long SYSTEM_RCHK(i, ub) long i, ub; {return __R(i, ub);} +long SYSTEM_ASH(i, n) long i, n; {return __ASH(i, n);} +long SYSTEM_ABS(i) long i; {return __ABS(i);} +double SYSTEM_ABSD(i) double i; {return __ABS(i);} + +void SYSTEM_INHERIT(t, t0) + long *t, *t0; +{ + t -= __TPROC0OFF; + t0 -= __TPROC0OFF; + while (*t0 != __EOM) {*t = *t0; t--; t0--;} +} + +void SYSTEM_ENUMP(adr, n, P) + long *adr; + long n; + void (*P)(); +{ + while (n > 0) {P(*adr); adr++; n--;} +} + +void SYSTEM_ENUMR(adr, typ, size, n, P) + char *adr; + long *typ, size, n; + void (*P)(); +{ + long *t, off; + typ++; + while (n > 0) { + t = typ; + off = *t; + while (off >= 0) {P(*(long*)(adr+off)); t++; off = *t;} + adr += size; n--; + } +} + +long SYSTEM_DIV(x, y) + unsigned long x, y; +{ if ((long) x >= 0) return (x / y); + else return -((y - 1 - x) / y); +} + +long SYSTEM_MOD(x, y) + unsigned long x, y; +{ unsigned long m; + if ((long) x >= 0) return (x % y); + else { m = (-x) % y; + if (m != 0) return (y - m); else return 0; + } +} + +long SYSTEM_ENTIER(x) + double x; +{ + long y; + if (x >= 0) + return (long)x; + else { + y = (long)x; + if (y <= x) return y; else return y - 1; + } +} + +void SYSTEM_HALT(n) + int n; +{ + SYSTEM_halt = n; + if (SYSTEM_Halt!=0) SYSTEM_Halt(n); + exit(n); +} + +#ifdef __STDC__ +SYSTEM_PTR SYSTEM_NEWARR(long *typ, long elemsz, int elemalgn, int nofdim, int nofdyn, ...) +#else +SYSTEM_PTR SYSTEM_NEWARR(typ, elemsz, elemalgn, nofdim, nofdyn, va_alist) + long *typ, elemsz; + int elemalgn, nofdim, nofdyn; + va_dcl +#endif +{ + long nofelems, size, dataoff, n, nptr, *x, *p, nofptrs, i, *ptab, off; + va_list ap; +#ifdef __STDC__ + va_start(ap, nofdyn); +#else + va_start(ap); +#endif + nofelems = 1; + while (nofdim > 0) { + nofelems = nofelems * va_arg(ap, long); nofdim--; + if (nofelems <= 0) __HALT(-20); + } + va_end(ap); + dataoff = nofdyn * sizeof(long); + if (elemalgn > sizeof(long)) { + n = dataoff % elemalgn; + if (n != 0) dataoff += elemalgn - n; + } + size = dataoff + nofelems * elemsz; + Lock; + if (typ == NIL) { + /* element typ does not contain pointers */ + x = SYSTEM_NEWBLK(size); + } + else if (typ == POINTER__typ) { + /* element type is a pointer */ + x = SYSTEM_NEWBLK(size + nofelems * sizeof(long)); + p = (long*)x[-1]; + p[-nofelems] = *p; /* build new type desc in situ: 1. copy block size; 2. setup ptr tab; 3. set sentinel; 4. patch tag */ + p -= nofelems - 1; n = 1; /* n =1 for skipping the size field */ + while (n <= nofelems) {*p = n*sizeof(long); p++; n++;} + *p = - (nofelems + 1) * sizeof(long); /* sentinel */ + x[-1] -= nofelems * sizeof(long); + } + else { + /* element type is a record that contains pointers */ + ptab = typ + 1; nofptrs = 0; + while (ptab[nofptrs] >= 0) {nofptrs++;} /* number of pointers per element */ + nptr = nofelems * nofptrs; /* total number of pointers */ + x = SYSTEM_NEWBLK(size + nptr * sizeof(long)); + p = (long*)x[- 1]; + p[-nptr] = *p; /* build new type desc in situ; 1. copy block size; 2. setup ptr tab; 3. set sentinel; 4. patch tag */ + p -= nptr - 1; n = 0; off = dataoff; + while (n < nofelems) {i = 0; + while (i < nofptrs) {*p = off + ptab[i]; p++; i++;} + off += elemsz; n++; + } + *p = - (nptr + 1) * sizeof(long); /* sentinel */ + x[-1] -= nptr * sizeof(long); + } + if (nofdyn != 0) { + /* setup len vector for index checks */ +#ifdef __STDC__ + va_start(ap, nofdyn); +#else + va_start(ap); +#endif + p = x; + while (nofdyn > 0) {*p = va_arg(ap, long); p++, nofdyn--;} + va_end(ap); + } + Unlock; + return x; +} + +/* ----------- end of SYSTEM.co ------------- */ + diff --git a/src/lib/system/gnuc/x86/SYSTEM.h b/src/lib/system/gnuc/x86/SYSTEM.h new file mode 100644 index 00000000..719a6d18 --- /dev/null +++ b/src/lib/system/gnuc/x86/SYSTEM.h @@ -0,0 +1,215 @@ +#ifndef SYSTEM__h +#define SYSTEM__h + +/* + +the Ofront runtime system interface and macros library +copyright (c) Josef Templ, 1995, 1996 + +gcc for Linux version (same as SPARC/Solaris2) +uses double # as concatenation operator + +*/ + +#include + +//extern void *memcpy(void *dest, const void *src, long n); +extern void *memcpy(void *dest, const void *src, size_t n); +extern void *malloc(long size); +extern void exit(int status); + +#define export +#define import extern + +/* constants */ +#define __MAXEXT 16 +#define NIL 0L +#define POINTER__typ (long*)1L /* not NIL and not a valid type */ + +/* basic types */ +typedef char BOOLEAN; +typedef unsigned char CHAR; +typedef signed char SHORTINT; +typedef short int INTEGER; +typedef long LONGINT; +typedef float REAL; +typedef double LONGREAL; +typedef unsigned long SET; +typedef void *SYSTEM_PTR; +typedef unsigned char SYSTEM_BYTE; + +/* runtime system routines */ +extern long SYSTEM_DIV(); +extern long SYSTEM_MOD(); +extern long SYSTEM_ENTIER(); +extern long SYSTEM_ASH(); +extern long SYSTEM_ABS(); +extern long SYSTEM_XCHK(); +extern long SYSTEM_RCHK(); +extern double SYSTEM_ABSD(); +extern SYSTEM_PTR SYSTEM_NEWREC(); +extern SYSTEM_PTR SYSTEM_NEWBLK(); +#ifdef __STDC__ +extern SYSTEM_PTR SYSTEM_NEWARR(long*, long, int, int, int, ...); +#else +extern SYSTEM_PTR SYSTEM_NEWARR(); +#endif +extern SYSTEM_PTR SYSTEM_REGMOD(); +extern void SYSTEM_INCREF(); +extern void SYSTEM_REGCMD(); +extern void SYSTEM_REGTYP(); +extern void SYSTEM_REGFIN(); +extern void SYSTEM_FINALL(); +extern void SYSTEM_INIT(); +extern void SYSTEM_FINI(); +extern void SYSTEM_HALT(); +extern void SYSTEM_INHERIT(); +extern void SYSTEM_ENUMP(); +extern void SYSTEM_ENUMR(); + +/* module registry */ +#define __DEFMOD static void *m; if(m!=0)return m +#define __REGMOD(name, enum) if(m==0)m=SYSTEM_REGMOD((CHAR*)name,enum); else return m +#define __ENDMOD return m +#define __INIT(argc, argv) static void *m; SYSTEM_INIT(argc, (long)&argv); +#define __REGMAIN(name, enum) m=SYSTEM_REGMOD(name,enum) +#define __FINI SYSTEM_FINI(); return 0 +#define __IMPORT(name) SYSTEM_INCREF(name##__init()) +#define __REGCMD(name, cmd) SYSTEM_REGCMD(m, name, cmd) + +/* SYSTEM ops */ +#define __SYSNEW(p, len) p=SYSTEM_NEWBLK((long)(len)) +#define __VAL(t, x) (*(t*)&(x)) +#define __GET(a, x, t) x= *(t*)(a) +#define __PUT(a, x, t) *(t*)(a)=x +#define __LSHL(x, n, t) ((t)((unsigned)(x)<<(n))) +#define __LSHR(x, n, t) ((t)((unsigned)(x)>>(n))) +#define __LSH(x, n, t) ((n)>=0? __LSHL(x, n, t): __LSHR(x, -(n), t)) +#define __ROTL(x, n, t) ((t)((unsigned)(x)<<(n)|(unsigned)(x)>>(8*sizeof(t)-(n)))) +#define __ROTR(x, n, t) ((t)((unsigned)(x)>>(n)|(unsigned)(x)<<(8*sizeof(t)-(n)))) +#define __ROT(x, n, t) ((n)>=0? __ROTL(x, n, t): __ROTR(x, -(n), t)) +#define __BIT(x, n) (*(unsigned long*)(x)>>(n)&1) +#define __MOVE(s, d, n) memcpy((char*)(d),(char*)(s),n) + +/* std procs and operator mappings */ +#define __SHORT(x, y) ((int)((unsigned long)(x)+(y)<(y)+(y)?(x):(__HALT(-8),0))) +#define __SHORTF(x, y) ((int)(__RF((x)+(y),(y)+(y))-(y))) +#define __CHR(x) ((CHAR)__R(x, 256)) +#define __CHRF(x) ((CHAR)__RF(x, 256)) +#define __DIV(x, y) ((x)>=0?(x)/(y):-(((y)-1-(x))/(y))) +#define __DIVF(x, y) SYSTEM_DIV((long)(x),(long)(y)) +#define __MOD(x, y) ((x)>=0?(x)%(y):__MODF(x,y)) +#define __MODF(x, y) SYSTEM_MOD((long)(x),(long)(y)) +#define __NEW(p, t) p=SYSTEM_NEWREC((long)t##__typ) +#define __NEWARR SYSTEM_NEWARR +#define __HALT(x) SYSTEM_HALT(x) +#define __ASSERT(cond, x) if (!(cond)) {SYSTEM_assert = x; SYSTEM_HALT(-1);} +#define __ENTIER(x) SYSTEM_ENTIER(x) +#define __ABS(x) (((x)<0)?-(x):(x)) +#define __ABSF(x) SYSTEM_ABS((long)(x)) +#define __ABSFD(x) SYSTEM_ABSD((double)(x)) +#define __CAP(ch) ((CHAR)((ch)&0x5f)) +#define __ODD(x) ((x)&1) +#define __IN(x, s) (((s)>>(x))&1) +#define __SETOF(x) ((SET)1<<(x)) +#define __SETRNG(l, h) ((~(SET)0<<(l))&~(SET)0>>(8*sizeof(SET)-1-(h))) +#define __MASK(x, m) ((x)&~(m)) +#define __COPY(s, d, n) {char*_a=(void*)s,*_b=(void*)d;long _i=0,_t=n-1;while(_i<_t&&((_b[_i]=_a[_i])!=0)){_i++;};_b[_i]=0;} +static int __STRCMP(x, y) + CHAR *x, *y; +{long i = 0; CHAR ch1, ch2; + do {ch1 = x[i]; ch2 = y[i]; i++; + if (!ch1) return -(int)ch2; + } while (ch1==ch2); + return (int)ch1 - (int)ch2; +} +#define __ASH(x, n) ((n)>=0?__ASHL(x,n):__ASHR(x,-(n))) +#define __ASHL(x, n) ((long)(x)<<(n)) +#define __ASHR(x, n) ((long)(x)>>(n)) +#define __ASHF(x, n) SYSTEM_ASH((long)(x), (long)(n)) +#define __DUP(x, l, t) x=(void*)memcpy(alloca(l*sizeof(t)),x,l*sizeof(t)) +#define __DUPARR(v, t) v=(void*)memcpy(v##__copy,v,sizeof(t)) +#define __DEL(x) /* DUP with alloca frees storage automatically */ +#define __IS(tag, typ, level) (*(tag-(__BASEOFF-level))==(long)typ##__typ) +#define __TYPEOF(p) (*(((long**)(p))-1)) +#define __ISP(p, typ, level) __IS(__TYPEOF(p),typ,level) + +/* runtime checks */ +#define __X(i, ub) (((unsigned)(long)(i)<(unsigned long)(ub))?i:(__HALT(-2),0)) +#define __XF(i, ub) SYSTEM_XCHK((long)(i), (long)(ub)) +#define __RETCHK __retchk: __HALT(-3) +#define __CASECHK __HALT(-4) +#define __GUARDP(p, typ, level) ((typ*)(__ISP(p,typ,level)?p:(__HALT(-5),p))) +#define __GUARDR(r, typ, level) (*((typ*)(__IS(r##__typ,typ,level)?r:(__HALT(-5),r)))) +#define __GUARDA(p, typ, level) ((struct typ*)(__IS(__TYPEOF(p),typ,level)?p:(__HALT(-5),p))) +#define __GUARDEQR(p, dyntyp, typ) if(dyntyp!=typ##__typ) __HALT(-6);*(p) +#define __GUARDEQP(p, typ) if(__TYPEOF(p)!=typ##__typ)__HALT(-6);*(p) +#define __WITHCHK __HALT(-7) +#define __R(i, ub) (((unsigned)(long)(i)<(unsigned long)(ub))?i:(__HALT(-8),0)) +#define __RF(i, ub) SYSTEM_RCHK((long)(i),(long)(ub)) + +/* record type descriptors */ +#define __TDESC(t, m, n) \ + static struct t##__desc {\ + long tproc[m]; \ + long tag, next, level, module; \ + char name[24]; \ + long *base[__MAXEXT]; \ + char *rsrvd; \ + long blksz, ptr[n+1]; \ + } t##__desc + +#define __BASEOFF (__MAXEXT+1) +#define __TPROC0OFF (__BASEOFF+24/sizeof(long)+5) +#define __EOM 1 +#define __TDFLDS(name, size) {__EOM}, 1, 0, 0, 0, name, {0}, 0, size +#define __ENUMP(adr, n, P) SYSTEM_ENUMP(adr, (long)(n), P) +#define __ENUMR(adr, typ, size, n, P) SYSTEM_ENUMR(adr, typ, (long)(size), (long)(n), P) + +#define __INITYP(t, t0, level) \ + t##__typ= &t##__desc.blksz; \ + memcpy(t##__desc.base, t0##__typ - __BASEOFF, level*sizeof(long)); \ + t##__desc.base[level]=t##__typ; \ + t##__desc.module=(long)m; \ + if(t##__desc.blksz!=sizeof(struct t)) __HALT(-15); \ + t##__desc.blksz=(t##__desc.blksz+5*sizeof(long)-1)/(4*sizeof(long))*(4*sizeof(long)); \ + SYSTEM_REGTYP(m, (long)&t##__desc.next); \ + SYSTEM_INHERIT(t##__typ, t0##__typ) + +/* Oberon-2 type bound procedures support */ +#define __INITBP(t, proc, num) *(t##__typ-(__TPROC0OFF+num))=(long)proc +#define __SEND(typ, num, funtyp, parlist) ((funtyp)(*(typ-(__TPROC0OFF+num))))parlist + +/* runtime system variables */ +extern LONGINT SYSTEM_argc; +extern LONGINT SYSTEM_argv; +extern void (*SYSTEM_Halt)(); +extern LONGINT SYSTEM_halt; +extern LONGINT SYSTEM_assert; +extern SYSTEM_PTR SYSTEM_modules; +extern LONGINT SYSTEM_heapsize; +extern LONGINT SYSTEM_allocated; +extern LONGINT SYSTEM_lock; +extern SHORTINT SYSTEM_gclock; +extern BOOLEAN SYSTEM_interrupted; + +/* ANSI prototypes; not used so far +static int __STRCMP(CHAR *x, CHAR *y); +void SYSTEM_INIT(int argc, long argvadr); +void SYSTEM_FINI(void); +long SYSTEM_XCHK(long i, long ub); +long SYSTEM_RCHK(long i, long ub); +long SYSTEM_ASH(long i, long n); +long SYSTEM_ABS(long i); +double SYSTEM_ABSD(double i); +void SYSTEM_INHERIT(long *t, long *t0); +void SYSTEM_ENUMP(long *adr, long n, void (*P)(void*)); +void SYSTEM_ENUMR(char *adr, long *typ, long size, long n, void (*P)(void*)); +long SYSTEM_DIV(unsigned long x, unsigned long y); +long SYSTEM_MOD(unsigned long x, unsigned long y); +long SYSTEM_ENTIER(double x); +void SYSTEM_HALT(int n); +*/ + +#endif + diff --git a/src/lib/system/gnuc/x86/Unix.Mod b/src/lib/system/gnuc/x86/Unix.Mod new file mode 100644 index 00000000..9b2180b9 --- /dev/null +++ b/src/lib/system/gnuc/x86/Unix.Mod @@ -0,0 +1,411 @@ +MODULE Unix; (* Josef Templ, 5.3.90 Linux system calls *) +(* system procedure added by noch *) +(* Module Unix provides a system call interface to Linux. + Naming conventions: + Procedure and Type-names always start with a capital letter. + error numbers as defined in Unix + other constants start with lower case letters *) + +IMPORT SYSTEM; + +CONST + +(* various important constants *) + + stdin* = 0; stdout* =1; stderr* = 2; + + LOCKEX* = 2; LOCKUN* = 8; (* /usr/include/file.h *) + AFINET* = 2; (* /usr/include/sys/socket.h *) + PFINET* = AFINET; (* /usr/include/linux/socket.h *) + SOCKSTREAM* = 1; (* /usr/include/linux/socket.h *) + FIONREAD* = 541BH; (* in /usr/include/asm/termios.h *) + SETFL* = 4; (* set file descriptor flags; in asm/fcntl.h *) + TCP* = 0; + +(* flag sets, cf. /usr/include/asm/fcntl.h *) + rdonly* = {}; wronly* = {0}; rdwr* = {1}; creat* = {6}; excl* = {7}; trunc* = {9}; append* = {10}; ndelay = {11}; + +(* error numbers *) + + EPERM* = 1; (* Not owner *) + ENOENT* = 2; (* No such file or directory *) + ESRCH* = 3; (* No such process *) + EINTR* = 4; (* Interrupted system call *) + EIO* = 5; (* I/O error *) + ENXIO* = 6; (* No such device or address *) + E2BIG* = 7; (* Arg list too long *) + ENOEXEC* = 8; (* Exec format error *) + EBADF* = 9; (* Bad file number *) + ECHILD* = 10; (* No children *) + EAGAIN* = 11; (* No more processes *) + ENOMEM* = 12; (* Not enough core *) + EACCES* = 13; (* Permission denied *) + EFAULT* = 14; (* Bad address *) + ENOTBLK* = 15; (* Block device required *) + EBUSY* = 16; (* Mount device busy *) + EEXIST* = 17; (* File exists *) + EXDEV* = 18; (* Cross-device link *) + ENODEV* = 19; (* No such device *) + ENOTDIR* = 20; (* Not a directory*) + EISDIR* = 21; (* Is a directory *) + EINVAL* = 22; (* Invalid argument *) + ENFILE* = 23; (* File table overflow *) + EMFILE* = 24; (* Too many open files *) + ENOTTY* = 25; (* Not a typewriter *) + ETXTBSY* = 26; (* Text file busy *) + EFBIG* = 27; (* File too large *) + ENOSPC* = 28; (* No space left on device *) + ESPIPE* = 29; (* Illegal seek *) + EROFS* = 30; (* Read-only file system *) + EMLINK* = 31; (* Too many links *) + EPIPE* = 32; (* Broken pipe *) + EDOM* = 33; (* Argument too large *) + ERANGE* = 34; (* Result too large *) + EDEADLK* = 35; (* Resource deadlock would occur *) + ENAMETOOLONG* = 36; (* File name too long *) + ENOLCK* = 37; (* No record locks available *) + ENOSYS* = 38; (* Function not implemented *) + ENOTEMPTY* = 39; (* Directory not empty *) + ELOOP* = 40; (* Too many symbolic links encountered *) + EWOULDBLOCK* = EAGAIN; (* Operation would block *) + ENOMSG* = 42; (* No message of desired type *) + EIDRM* = 43; (* Identifier removed *) + ECHRNG* = 44; (* Channel number out of range *) + EL2NSYNC* = 45; (* Level 2 not synchronized *) + EL3HLT* = 46; (* Level 3 halted *) + EL3RST* = 47; (* Level 3 reset *) + ELNRNG* = 48; (* Link number out of range *) + EUNATCH* = 49; (* Protocol driver not attached *) + ENOCSI* = 50; (* No CSI structure available *) + EL2HLT* = 51; (* Level 2 halted *) + EBADE* = 52; (* Invalid exchange *) + EBADR* = 53; (* Invalid request descriptor *) + EXFULL* = 54; (* Exchange full *) + ENOANO* = 55; (* No anode *) + EBADRQC* = 56; (* Invalid request code *) + EBADSLT* = 57; (* Invalid slot *) + EDEADLOCK* = 58; (* File locking deadlock error *) + EBFONT* = 59; (* Bad font file format *) + ENOSTR* = 60; (* Device not a stream *) + ENODATA* = 61; (* No data available *) + ETIME* = 62; (* Timer expired *) + ENOSR* = 63; (* Out of streams resources *) + ENONET* = 64; (* Machine is not on the network *) + ENOPKG* = 65; (* Package not installed *) + EREMOTE* = 66; (* Object is remote *) + ENOLINK* = 67; (* Link has been severed *) + EADV* = 68; (* Advertise error *) + ESRMNT* = 69; (* Srmount error *) + ECOMM* = 70; (* Communication error on send *) + EPROTO* = 71; (* Protocol error *) + EMULTIHOP* = 72; (* Multihop attempted *) + EDOTDOT* = 73; (* RFS specific error *) + EBADMSG* = 74; (* Not a data message *) + EOVERFLOW* = 75; (* Value too large for defined data type *) + ENOTUNIQ* = 76; (* Name not unique on network *) + EBADFD* = 77; (* File descriptor in bad state *) + EREMCHG* = 78; (* Remote address changed *) + ELIBACC* = 79; (* Can not access a needed shared library *) + ELIBBAD* = 80; (* Accessing a corrupted shared library *) + ELIBSCN* = 81; (* .lib section in a.out corrupted *) + ELIBMAX* = 82; (* Attempting to link in too many shared libraries *) + ELIBEXEC* = 83; (* Cannot exec a shared library directly *) + EILSEQ* = 84; (* Illegal byte sequence *) + ERESTART* = 85; (* Interrupted system call should be restarted *) + ESTRPIPE* = 86; (* Streams pipe error *) + EUSERS* = 87; (* Too many users *) + ENOTSOCK* = 88; (* Socket operation on non-socket *) + EDESTADDRREQ* = 89; (* Destination address required *) + EMSGSIZE* = 90; (* Message too long *) + EPROTOTYPE* = 91; (* Protocol wrong type for socket *) + ENOPROTOOPT* = 92; (* Protocol not available *) + EPROTONOSUPPORT* = 93; (* Protocol not supported *) + ESOCKTNOSUPPORT* = 94; (* Socket type not supported *) + EOPNOTSUPP* = 95; (* Operation not supported on transport endpoint *) + EPFNOSUPPORT* = 96; (* Protocol family not supported *) + EAFNOSUPPORT* = 97; (* Address family not supported by protocol *) + EADDRINUSE* = 98; (* Address already in use *) + EADDRNOTAVAIL* = 99; (* Cannot assign requested address *) + ENETDOWN* = 100; (* Network is down *) + ENETUNREACH* = 101; (* Network is unreachable *) + ENETRESET* = 102; (* Network dropped connection because of reset *) + ECONNABORTED* = 103; (* Software caused connection abort *) + ECONNRESET* = 104; (* Connection reset by peer *) + ENOBUFS* = 105; (* No buffer space available *) + EISCONN* = 106; (* Transport endpoint is already connected *) + ENOTCONN* = 107; (* Transport endpoint is not connected *) + ESHUTDOWN* = 108; (* Cannot send after transport endpoint shutdown *) + ETOOMANYREFS* = 109; (* Too many references: cannot splice *) + ETIMEDOUT* = 110; (* Connection timed out *) + ECONNREFUSED* = 111; (* Connection refused *) + EHOSTDOWN* = 112; (* Host is down *) + EHOSTUNREACH* = 113; (* No route to host *) + EALREADY* = 114; (* Operation already in progress *) + EINPROGRESS* = 115; (* Operation now in progress *) + ESTALE* = 116; (* Stale NFS file handle *) + EUCLEAN* = 117; (* Structure needs cleaning *) + ENOTNAM* = 118; (* Not a XENIX named type file *) + ENAVAIL* = 119; (* No XENIX semaphores available *) + EISNAM* = 120; (* Is a named type file *) + EREMOTEIO* = 121; (* Remote I/O error *) + EDQUOT* = 122; (* Quota exceeded *) + + +TYPE + JmpBuf* = RECORD + bx*, si*, di*, bp*, sp*, pc*: LONGINT; + maskWasSaved*, savedMask*: LONGINT; + END ; + + Status* = RECORD (* struct stat *) + dev*, devX*: LONGINT; (* 64 bit in Linux 2.2 *) + pad1: INTEGER; + ino*, mode*, nlink*, uid*, gid*: LONGINT; + rdev*, rdevX*: LONGINT; (* 64 bit in Linux 2.2 *) + pad2: INTEGER; + size*, blksize*, blocks*, atime*, unused1*, mtime*, unused2*, ctime*, + unused3*, unused4*, unused5*: LONGINT; + END ; + + Timeval* = RECORD + sec*, usec*: LONGINT + END ; + + Timezone* = RECORD + minuteswest*, dsttime*: LONGINT + END ; + + Itimerval* = RECORD + interval*, value*: Timeval + END ; + + FdSet* = ARRAY 8 OF SET; + + SigCtxPtr* = POINTER TO SigContext; + SigContext* = RECORD + END ; + + SignalHandler* = PROCEDURE (sig, code: LONGINT; scp: SigCtxPtr); + + Dirent* = RECORD + ino, off: LONGINT; + reclen: INTEGER; + name: ARRAY 256 OF CHAR; + END ; + + Rusage* = RECORD + utime*, stime*: Timeval; + maxrss*, ixrss*, idrss*, isrss*, + minflt*, majflt*, nswap*, inblock*, + oublock*, msgsnd*, msgrcv*, nsignals*, + nvcsw*, nivcsw*: LONGINT + END ; + + Iovec* = RECORD + base*, len*: LONGINT + END ; + + SocketPair* = ARRAY 2 OF LONGINT; + + Pollfd* = RECORD + fd*: LONGINT; + events*, revents*: INTEGER + END ; + + Sockaddr* = RECORD + family*: INTEGER; + port*: INTEGER; + internetAddr*: LONGINT; + pad*: ARRAY 8 OF CHAR; + END ; + + HostEntry* = POINTER [1] TO Hostent; + Hostent* = RECORD + name*, aliases*: LONGINT; + addrtype*, length*: LONGINT; + addrlist*: LONGINT; (*POINTER TO POINTER TO LONGINT, network byte order*) + END; + + Name* = ARRAY OF CHAR; + + PROCEDURE -includeStat() + "#include "; + + PROCEDURE -includeErrno() + "#include "; + + PROCEDURE -err(): LONGINT + "errno"; + + PROCEDURE errno*(): LONGINT; + BEGIN + RETURN err() + END errno; + + PROCEDURE -Exit*(n: LONGINT) + "exit(n)"; + + PROCEDURE -Fork*(): LONGINT + "fork()"; + + PROCEDURE -Wait*(VAR status: LONGINT): LONGINT + "wait(status)"; + + PROCEDURE -Select*(width: LONGINT; VAR readfds, writefds, exceptfds: FdSet; VAR timeout: Timeval): LONGINT + "select(width, readfds, writefds, exceptfds, timeout)"; + + PROCEDURE -Gettimeofday* (VAR tv: Timeval; VAR tz: Timezone) + "gettimeofday(tv, tz)"; + + PROCEDURE -Read* (fd, buf, nbyte: LONGINT): LONGINT + "read(fd, buf, nbyte)"; + + PROCEDURE -ReadBlk* (fd: LONGINT; VAR buf: ARRAY OF SYSTEM.BYTE): LONGINT + "read(fd, buf, buf__len)"; + + PROCEDURE -Write* (fd, buf, nbyte: LONGINT): LONGINT + "write(fd, buf, nbyte)"; + + PROCEDURE -WriteBlk* (fd: LONGINT; VAR buf: ARRAY OF SYSTEM.BYTE): LONGINT + "write(fd, buf, buf__len)"; + + PROCEDURE -Dup*(fd: LONGINT): LONGINT + "dup(fd)"; + + PROCEDURE -Dup2*(fd1, fd2: LONGINT): LONGINT + "dup(fd1, fd2)"; + + PROCEDURE -Getpid*(): LONGINT + "getpid()"; + + PROCEDURE -Getuid*(): LONGINT + "getuid()"; + + PROCEDURE -Geteuid*(): LONGINT + "geteuid()"; + + PROCEDURE -Getgid*(): LONGINT + "getgid()"; + + PROCEDURE -Getegid*(): LONGINT + "getegid()"; + + PROCEDURE -Unlink*(name: Name): LONGINT + "unlink(name)"; + + PROCEDURE -Open*(name: Name; flag, mode: SET): LONGINT + "open(name, flag, mode)"; + + PROCEDURE -Close*(fd: LONGINT): LONGINT + "close(fd)"; + + PROCEDURE -stat(name: Name; VAR statbuf: Status): LONGINT + "stat((const char*)name, (struct stat*)statbuf)"; + + PROCEDURE Stat*(name: Name; VAR statbuf: Status): LONGINT; + VAR res: LONGINT; + BEGIN + res := stat(name, statbuf); + (* make the first 4 bytes as unique as possible (used in module Files for caching!) *) + INC(statbuf.dev, statbuf.devX); + INC(statbuf.rdev, statbuf.rdevX); + RETURN res; + END Stat; + + PROCEDURE -fstat(fd: LONGINT; VAR statbuf: Status): LONGINT + "fstat(fd, (struct stat*)statbuf)"; + + PROCEDURE Fstat*(fd: LONGINT; VAR statbuf: Status): LONGINT; + VAR res: LONGINT; + BEGIN + res := fstat(fd, statbuf); + (* make the first 4 bytes as unique as possible (used in module Files for caching!) *) + INC(statbuf.dev, statbuf.devX); + INC(statbuf.rdev, statbuf.rdevX); + RETURN res; + END Fstat; + + PROCEDURE -Fchmod*(fd, mode: LONGINT): LONGINT + "fchmod(fd, mode)"; + + PROCEDURE -Chmod*(path: Name; mode: LONGINT): LONGINT + "chmod(path, mode)"; + + PROCEDURE -Lseek*(fd, offset, origin: LONGINT): LONGINT + "lseek(fd, offset, origin)"; + + PROCEDURE -Fsync*(fd: LONGINT): LONGINT + "fsync(fd)"; + + PROCEDURE -Fcntl*(fd, cmd, arg: LONGINT ): LONGINT + "fcntl(fd, cmd, arg)"; + + PROCEDURE -Flock*(fd, operation: LONGINT): LONGINT + "flock(fd, operation)"; + + PROCEDURE -Ftruncate*(fd, length: LONGINT): LONGINT + "ftruncate(fd, length)"; + + PROCEDURE -Readblk*(fd: LONGINT; VAR buf: ARRAY OF SYSTEM.BYTE; len: LONGINT): LONGINT + "read(fd, buf, len)"; + + PROCEDURE -Rename*(old, new: Name): LONGINT + "rename(old, new)"; + + PROCEDURE -Chdir*(path: Name): LONGINT + "chdir(path)"; + + PROCEDURE -Ioctl*(fd, request, arg: LONGINT): LONGINT + "ioctl(fd, request, arg)"; + + PROCEDURE -Kill*(pid, sig: LONGINT): LONGINT + "kill(pid, sig)"; + + PROCEDURE -Sigsetmask*(mask: LONGINT): LONGINT + "sigsetmask(mask)"; + + + (* TCP/IP networking *) + + PROCEDURE -Gethostbyname*(name: Name): HostEntry + "(Unix_HostEntry)gethostbyname(name)"; + + PROCEDURE -Gethostname*(VAR name: Name): LONGINT + "gethostname(name, name__len)"; + + PROCEDURE -Socket*(af, type, protocol: LONGINT): LONGINT + "socket(af, type, protocol)"; + + PROCEDURE -Connect*(socket: LONGINT; name: Sockaddr; namelen: LONGINT): LONGINT + "connect(socket, &(name), namelen)"; + + PROCEDURE -Getsockname*(socket: LONGINT; VAR name: Sockaddr; VAR namelen: LONGINT): LONGINT + "getsockname(socket, name, namelen)"; + + PROCEDURE -Bind*(socket: LONGINT; name: Sockaddr; namelen: LONGINT): LONGINT + "bind(socket, &(name), namelen)"; + + PROCEDURE -Listen*(socket, backlog: LONGINT): LONGINT + "listen(socket, backlog)"; + + PROCEDURE -Accept*(socket: LONGINT; VAR addr: Sockaddr; VAR addrlen: LONGINT): LONGINT + "accept(socket, addr, addrlen)"; + + PROCEDURE -Recv*(socket, bufadr, buflen, flags: LONGINT): LONGINT + "recv(socket, bufadr, buflen, flags)"; + + PROCEDURE -Send*(socket, bufadr, buflen, flags: LONGINT): LONGINT + "send(socket, bufadr, buflen, flags)"; + + PROCEDURE -sys(str: ARRAY OF CHAR): INTEGER (* need this to call external tools like gcc or gas; noch *) + "system(str)"; + + PROCEDURE system*(cmd : ARRAY OF CHAR); + VAR r : INTEGER; + BEGIN + r := sys(cmd); + END system; + + + +END Unix. diff --git a/src/lib/system/gnuc/x86_64/Args.Mod b/src/lib/system/gnuc/x86_64/Args.Mod new file mode 100644 index 00000000..f242766b --- /dev/null +++ b/src/lib/system/gnuc/x86_64/Args.Mod @@ -0,0 +1,53 @@ +MODULE Args; (* jt, 8.12.94 *) + + (* command line argument handling for voc (jet backend) *) + + + IMPORT SYSTEM; + + TYPE + ArgPtr = POINTER TO ARRAY 1024 OF CHAR; + ArgVec = POINTER TO ARRAY 1024 OF ArgPtr; + + VAR argc-, argv-: LONGINT; + (*PROCEDURE -includestdlib() "#include ";*) + PROCEDURE -externgetenv() "extern char *getenv(const char *name);"; (* took this from stdlib.h*) + PROCEDURE -Argc(): INTEGER "SYSTEM_argc"; + PROCEDURE -Argv(): LONGINT "(long)SYSTEM_argv"; + PROCEDURE -getenv(var: ARRAY OF CHAR): ArgPtr + "(Args_ArgPtr)getenv(var)"; + + PROCEDURE Get*(n: INTEGER; VAR val: ARRAY OF CHAR); + VAR av: ArgVec; + BEGIN + IF n < argc THEN av := SYSTEM.VAL(ArgVec, argv); COPY(av[n]^, val) END + END Get; + + PROCEDURE GetInt*(n: INTEGER; VAR val: LONGINT); + VAR s: ARRAY 64 OF CHAR; k, d, i: LONGINT; + BEGIN + s := ""; Get(n, s); i := 0; + IF s[0] = "-" THEN i := 1 END ; + k := 0; d := ORD(s[i]) - ORD("0"); + WHILE (d >= 0 ) & (d <= 9) DO k := k*10 + d; INC(i); d := ORD(s[i]) - ORD("0") END ; + IF s[0] = "-" THEN d := -d; DEC(i) END ; + IF i > 0 THEN val := k END + END GetInt; + + PROCEDURE Pos*(s: ARRAY OF CHAR): INTEGER; + VAR i: INTEGER; arg: ARRAY 256 OF CHAR; + BEGIN + i := 0; Get(i, arg); + WHILE (i < argc) & (s # arg) DO INC(i); Get(i, arg) END ; + RETURN i + END Pos; + + PROCEDURE GetEnv*(var: ARRAY OF CHAR; VAR val: ARRAY OF CHAR); + VAR p: ArgPtr; + BEGIN + p := getenv(var); + IF p # NIL THEN COPY(p^, val) END + END GetEnv; + +BEGIN argc := Argc(); argv := Argv() +END Args. diff --git a/src/lib/system/gnuc/x86_64/SYSTEM.c0 b/src/lib/system/gnuc/x86_64/SYSTEM.c0 new file mode 100644 index 00000000..bb8ee442 --- /dev/null +++ b/src/lib/system/gnuc/x86_64/SYSTEM.c0 @@ -0,0 +1,205 @@ +/* +* The body prefix file of the voc(jet backend) runtime system, Version 1.0 +* +* Copyright (c) Software Templ, 1994, 1995 +* +* Module SYSTEM is subject to change any time without prior notification. +* Software Templ disclaims all warranties with regard to module SYSTEM, +* in particular shall Software Templ not be liable for any damage resulting +* from inappropriate use or modification of module SYSTEM. +* +* Version 1.1 jt, 24.11.95 fixes for correct pointer arithmetic on Cray computers +* jt 31.1.2007 ANSI prototypes for malloc and exit in order to avoid cc warnings +* +*/ + +#include "SYSTEM.h" +#ifdef __STDC__ +#include "stdarg.h" +#else +#include "varargs.h" +#endif + +extern void *malloc(long size); +extern void exit(int status); + +void (*SYSTEM_Halt)(); +LONGINT SYSTEM_halt; /* x in HALT(x) */ +LONGINT SYSTEM_assert; /* x in ASSERT(cond, x) */ +LONGINT SYSTEM_argc; +LONGINT SYSTEM_argv; +LONGINT SYSTEM_lock; +BOOLEAN SYSTEM_interrupted; +static LONGINT SYSTEM_mainfrm; /* adr of main proc stack frame, used for stack collection */ + +#define Lock SYSTEM_lock++ +#define Unlock SYSTEM_lock--; if (SYSTEM_interrupted && (SYSTEM_lock == 0)) __HALT(-9) + + +static void SYSTEM_InitHeap(); +void *SYSTEM__init(); + +void SYSTEM_INIT(argc, argvadr) + int argc; long argvadr; +{ + SYSTEM_mainfrm = argvadr; + SYSTEM_argc = argc; + SYSTEM_argv = *(long*)argvadr; + SYSTEM_InitHeap(); + SYSTEM_halt = -128; + SYSTEM__init(); +} + +void SYSTEM_FINI() +{ + SYSTEM_FINALL(); +} + +long SYSTEM_XCHK(i, ub) long i, ub; {return __X(i, ub);} +long SYSTEM_RCHK(i, ub) long i, ub; {return __R(i, ub);} +long SYSTEM_ASH(i, n) long i, n; {return __ASH(i, n);} +long SYSTEM_ABS(i) long i; {return __ABS(i);} +double SYSTEM_ABSD(i) double i; {return __ABS(i);} + +void SYSTEM_INHERIT(t, t0) + long *t, *t0; +{ + t -= __TPROC0OFF; + t0 -= __TPROC0OFF; + while (*t0 != __EOM) {*t = *t0; t--; t0--;} +} + +void SYSTEM_ENUMP(adr, n, P) + long *adr; + long n; + void (*P)(); +{ + while (n > 0) {P(*adr); adr++; n--;} +} + +void SYSTEM_ENUMR(adr, typ, size, n, P) + char *adr; + long *typ, size, n; + void (*P)(); +{ + long *t, off; + typ++; + while (n > 0) { + t = typ; + off = *t; + while (off >= 0) {P(*(long*)(adr+off)); t++; off = *t;} + adr += size; n--; + } +} + +long SYSTEM_DIV(x, y) + unsigned long x, y; +{ if ((long) x >= 0) return (x / y); + else return -((y - 1 - x) / y); +} + +long SYSTEM_MOD(x, y) + unsigned long x, y; +{ unsigned long m; + if ((long) x >= 0) return (x % y); + else { m = (-x) % y; + if (m != 0) return (y - m); else return 0; + } +} + +long SYSTEM_ENTIER(x) + double x; +{ + long y; + if (x >= 0) + return (long)x; + else { + y = (long)x; + if (y <= x) return y; else return y - 1; + } +} + +void SYSTEM_HALT(n) + int n; +{ + SYSTEM_halt = n; + if (SYSTEM_Halt!=0) SYSTEM_Halt(n); + exit(n); +} + +#ifdef __STDC__ +SYSTEM_PTR SYSTEM_NEWARR(long *typ, long elemsz, int elemalgn, int nofdim, int nofdyn, ...) +#else +SYSTEM_PTR SYSTEM_NEWARR(typ, elemsz, elemalgn, nofdim, nofdyn, va_alist) + long *typ, elemsz; + int elemalgn, nofdim, nofdyn; + va_dcl +#endif +{ + long nofelems, size, dataoff, n, nptr, *x, *p, nofptrs, i, *ptab, off; + va_list ap; +#ifdef __STDC__ + va_start(ap, nofdyn); +#else + va_start(ap); +#endif + nofelems = 1; + while (nofdim > 0) { + nofelems = nofelems * va_arg(ap, long); nofdim--; + if (nofelems <= 0) __HALT(-20); + } + va_end(ap); + dataoff = nofdyn * sizeof(long); + if (elemalgn > sizeof(long)) { + n = dataoff % elemalgn; + if (n != 0) dataoff += elemalgn - n; + } + size = dataoff + nofelems * elemsz; + Lock; + if (typ == NIL) { + /* element typ does not contain pointers */ + x = SYSTEM_NEWBLK(size); + } + else if (typ == POINTER__typ) { + /* element type is a pointer */ + x = SYSTEM_NEWBLK(size + nofelems * sizeof(long)); + p = (long*)x[-1]; + p[-nofelems] = *p; /* build new type desc in situ: 1. copy block size; 2. setup ptr tab; 3. set sentinel; 4. patch tag */ + p -= nofelems - 1; n = 1; /* n =1 for skipping the size field */ + while (n <= nofelems) {*p = n*sizeof(long); p++; n++;} + *p = - (nofelems + 1) * sizeof(long); /* sentinel */ + x[-1] -= nofelems * sizeof(long); + } + else { + /* element type is a record that contains pointers */ + ptab = typ + 1; nofptrs = 0; + while (ptab[nofptrs] >= 0) {nofptrs++;} /* number of pointers per element */ + nptr = nofelems * nofptrs; /* total number of pointers */ + x = SYSTEM_NEWBLK(size + nptr * sizeof(long)); + p = (long*)x[- 1]; + p[-nptr] = *p; /* build new type desc in situ; 1. copy block size; 2. setup ptr tab; 3. set sentinel; 4. patch tag */ + p -= nptr - 1; n = 0; off = dataoff; + while (n < nofelems) {i = 0; + while (i < nofptrs) {*p = off + ptab[i]; p++; i++;} + off += elemsz; n++; + } + *p = - (nptr + 1) * sizeof(long); /* sentinel */ + x[-1] -= nptr * sizeof(long); + } + if (nofdyn != 0) { + /* setup len vector for index checks */ +#ifdef __STDC__ + va_start(ap, nofdyn); +#else + va_start(ap); +#endif + p = x; + while (nofdyn > 0) {*p = va_arg(ap, long); p++, nofdyn--;} + va_end(ap); + } + Unlock; + return x; +} + +/* ----------- end of SYSTEM.co ------------- */ + diff --git a/src/lib/system/gnuc/x86_64/SYSTEM.h b/src/lib/system/gnuc/x86_64/SYSTEM.h new file mode 100644 index 00000000..e9a246b7 --- /dev/null +++ b/src/lib/system/gnuc/x86_64/SYSTEM.h @@ -0,0 +1,233 @@ +#ifndef SYSTEM__h +#define SYSTEM__h + +/* + +voc (jet backend) runtime system interface and macros library +copyright (c) Josef Templ, 1995, 1996 + +gcc for Linux version (same as SPARC/Solaris2) +uses double # as concatenation operator + +*/ + +#include + +extern void *memcpy(void *dest, const void *src, long n); +extern void *malloc(long size); +extern void exit(int status); + +#define export +#define import extern + +/* constants */ +#define __MAXEXT 16 +#define NIL 0L +#define POINTER__typ (long*)1L /* not NIL and not a valid type */ + +/* basic types */ +//typedef char BOOLEAN; +#define BOOLEAN char +//typedef unsigned char CHAR; +#define CHAR unsigned char +//exactly two bytes +#define LONGCHAR unsigned short int +//typedef signed char SHORTINT; +#define SHORTINT signed char +//for x86 GNU/Linux +//typedef short int INTEGER; +//for x86_64 GNU/Linux +//typedef int INTEGER; +#define INTEGER int +//typedef long LONGINT; +#define LONGINT long +//typedef float REAL; +#define REAL float +//typedef double LONGREAL; +#define LONGREAL double +//typedef unsigned long SET; +#define SET unsigned long +typedef void *SYSTEM_PTR; +//#define *SYSTEM_PTR void +//typedef unsigned char SYSTEM_BYTE; +#define SYSTEM_BYTE unsigned char + +/* runtime system routines */ +extern long SYSTEM_DIV(); +extern long SYSTEM_MOD(); +extern long SYSTEM_ENTIER(); +extern long SYSTEM_ASH(); +extern long SYSTEM_ABS(); +extern long SYSTEM_XCHK(); +extern long SYSTEM_RCHK(); +extern double SYSTEM_ABSD(); +extern SYSTEM_PTR SYSTEM_NEWREC(); +extern SYSTEM_PTR SYSTEM_NEWBLK(); +#ifdef __STDC__ +extern SYSTEM_PTR SYSTEM_NEWARR(long*, long, int, int, int, ...); +#else +extern SYSTEM_PTR SYSTEM_NEWARR(); +#endif +extern SYSTEM_PTR SYSTEM_REGMOD(); +extern void SYSTEM_INCREF(); +extern void SYSTEM_REGCMD(); +extern void SYSTEM_REGTYP(); +extern void SYSTEM_REGFIN(); +extern void SYSTEM_FINALL(); +extern void SYSTEM_INIT(); +extern void SYSTEM_FINI(); +extern void SYSTEM_HALT(); +extern void SYSTEM_INHERIT(); +extern void SYSTEM_ENUMP(); +extern void SYSTEM_ENUMR(); + +/* module registry */ +#define __DEFMOD static void *m; if(m!=0)return m +#define __REGMOD(name, enum) if(m==0)m=SYSTEM_REGMOD((CHAR*)name,enum); else return m +#define __ENDMOD return m +#define __INIT(argc, argv) static void *m; SYSTEM_INIT(argc, (long)&argv); +#define __REGMAIN(name, enum) m=SYSTEM_REGMOD(name,enum) +#define __FINI SYSTEM_FINI(); return 0 +#define __IMPORT(name) SYSTEM_INCREF(name##__init()) +#define __REGCMD(name, cmd) SYSTEM_REGCMD(m, name, cmd) + +/* SYSTEM ops */ +#define __SYSNEW(p, len) p=SYSTEM_NEWBLK((long)(len)) +#define __VAL(t, x) (*(t*)&(x)) +#define __GET(a, x, t) x= *(t*)(a) +#define __PUT(a, x, t) *(t*)(a)=x +#define __LSHL(x, n, t) ((t)((unsigned t)(x)<<(n))) +#define __LSHR(x, n, t) ((t)((unsigned t)(x)>>(n))) +#define __LSH(x, n, t) ((n)>=0? __LSHL(x, n, t): __LSHR(x, -(n), t)) +#define __ROTL(x, n, t) ((t)((unsigned t)(x)<<(n)|(unsigned t)(x)>>(8*sizeof(t)-(n)))) +#define __ROTR(x, n, t) ((t)((unsigned t)(x)>>(n)|(unsigned t)(x)<<(8*sizeof(t)-(n)))) +#define __LSHR(x, n, t) ((t)((unsigned t)(x)>>(n))) +#define __LSH(x, n, t) ((n)>=0? __LSHL(x, n, t): __LSHR(x, -(n), t)) +#define __ROTL(x, n, t) ((t)((unsigned t)(x)<<(n)|(unsigned t)(x)>>(8*sizeof(t)-(n)))) +#define __ROTR(x, n, t) ((t)((unsigned t)(x)>>(n)|(unsigned t)(x)<<(8*sizeof(t)-(n)))) +#define __ROT(x, n, t) ((n)>=0? __ROTL(x, n, t): __ROTR(x, -(n), t)) +#define __BIT(x, n) (*(unsigned long*)(x)>>(n)&1) +#define __MOVE(s, d, n) memcpy((char*)(d),(char*)(s),n) + +/* std procs and operator mappings */ +#define __SHORT(x, y) ((int)((unsigned long)(x)+(y)<(y)+(y)?(x):(__HALT(-8),0))) +#define __SHORTF(x, y) ((int)(__RF((x)+(y),(y)+(y))-(y))) +#define __CHR(x) ((CHAR)__R(x, 256)) +#define __CHRF(x) ((CHAR)__RF(x, 256)) +#define __DIV(x, y) ((x)>=0?(x)/(y):-(((y)-1-(x))/(y))) +#define __DIVF(x, y) SYSTEM_DIV((long)(x),(long)(y)) +#define __MOD(x, y) ((x)>=0?(x)%(y):__MODF(x,y)) +#define __MODF(x, y) SYSTEM_MOD((long)(x),(long)(y)) +#define __NEW(p, t) p=SYSTEM_NEWREC((long)t##__typ) +#define __NEWARR SYSTEM_NEWARR +#define __HALT(x) SYSTEM_HALT(x) +#define __ASSERT(cond, x) if (!(cond)) {SYSTEM_assert = x; SYSTEM_HALT(-1);} +#define __ENTIER(x) SYSTEM_ENTIER(x) +#define __ABS(x) (((x)<0)?-(x):(x)) +#define __ABSF(x) SYSTEM_ABS((long)(x)) +#define __ABSFD(x) SYSTEM_ABSD((double)(x)) +#define __CAP(ch) ((CHAR)((ch)&0x5f)) +#define __ODD(x) ((x)&1) +#define __IN(x, s) (((s)>>(x))&1) +#define __SETOF(x) ((SET)1<<(x)) +#define __SETRNG(l, h) ((~(SET)0<<(l))&~(SET)0>>(8*sizeof(SET)-1-(h))) +#define __MASK(x, m) ((x)&~(m)) +#define __COPY(s, d, n) {char*_a=(void*)s,*_b=(void*)d;long _i=0,_t=n-1;while(_i<_t&&((_b[_i]=_a[_i])!=0)){_i++;};_b[_i]=0;} +static int __STRCMP(x, y) + CHAR *x, *y; +{long i = 0; CHAR ch1, ch2; + do {ch1 = x[i]; ch2 = y[i]; i++; + if (!ch1) return -(int)ch2; + } while (ch1==ch2); + return (int)ch1 - (int)ch2; +} +#define __ASH(x, n) ((n)>=0?__ASHL(x,n):__ASHR(x,-(n))) +#define __ASHL(x, n) ((long)(x)<<(n)) +#define __ASHR(x, n) ((long)(x)>>(n)) +#define __ASHF(x, n) SYSTEM_ASH((long)(x), (long)(n)) +#define __DUP(x, l, t) x=(void*)memcpy(alloca(l*sizeof(t)),x,l*sizeof(t)) +#define __DUPARR(v, t) v=(void*)memcpy(v##__copy,v,sizeof(t)) +#define __DEL(x) /* DUP with alloca frees storage automatically */ +#define __IS(tag, typ, level) (*(tag-(__BASEOFF-level))==(long)typ##__typ) +#define __TYPEOF(p) (*(((long**)(p))-1)) +#define __ISP(p, typ, level) __IS(__TYPEOF(p),typ,level) + +/* runtime checks */ +#define __X(i, ub) (((unsigned)(long)(i)<(unsigned long)(ub))?i:(__HALT(-2),0)) +#define __XF(i, ub) SYSTEM_XCHK((long)(i), (long)(ub)) +#define __RETCHK __retchk: __HALT(-3) +#define __CASECHK __HALT(-4) +#define __GUARDP(p, typ, level) ((typ*)(__ISP(p,typ,level)?p:(__HALT(-5),p))) +#define __GUARDR(r, typ, level) (*((typ*)(__IS(r##__typ,typ,level)?r:(__HALT(-5),r)))) +#define __GUARDA(p, typ, level) ((struct typ*)(__IS(__TYPEOF(p),typ,level)?p:(__HALT(-5),p))) +#define __GUARDEQR(p, dyntyp, typ) if(dyntyp!=typ##__typ) __HALT(-6);*(p) +#define __GUARDEQP(p, typ) if(__TYPEOF(p)!=typ##__typ)__HALT(-6);*(p) +#define __WITHCHK __HALT(-7) +#define __R(i, ub) (((unsigned)(long)(i)<(unsigned long)(ub))?i:(__HALT(-8),0)) +#define __RF(i, ub) SYSTEM_RCHK((long)(i),(long)(ub)) + +/* record type descriptors */ +#define __TDESC(t, m, n) \ + static struct t##__desc {\ + long tproc[m]; \ + long tag, next, level, module; \ + char name[24]; \ + long *base[__MAXEXT]; \ + char *rsrvd; \ + long blksz, ptr[n+1]; \ + } t##__desc + +#define __BASEOFF (__MAXEXT+1) +#define __TPROC0OFF (__BASEOFF+24/sizeof(long)+5) +#define __EOM 1 +#define __TDFLDS(name, size) {__EOM}, 1, 0, 0, 0, name, {0}, 0, size +#define __ENUMP(adr, n, P) SYSTEM_ENUMP(adr, (long)(n), P) +#define __ENUMR(adr, typ, size, n, P) SYSTEM_ENUMR(adr, typ, (long)(size), (long)(n), P) + +#define __INITYP(t, t0, level) \ + t##__typ= &t##__desc.blksz; \ + memcpy(t##__desc.base, t0##__typ - __BASEOFF, level*sizeof(long)); \ + t##__desc.base[level]=t##__typ; \ + t##__desc.module=(long)m; \ + if(t##__desc.blksz!=sizeof(struct t)) __HALT(-15); \ + t##__desc.blksz=(t##__desc.blksz+5*sizeof(long)-1)/(4*sizeof(long))*(4*sizeof(long)); \ + SYSTEM_REGTYP(m, (long)&t##__desc.next); \ + SYSTEM_INHERIT(t##__typ, t0##__typ) + +/* Oberon-2 type bound procedures support */ +#define __INITBP(t, proc, num) *(t##__typ-(__TPROC0OFF+num))=(long)proc +#define __SEND(typ, num, funtyp, parlist) ((funtyp)(*(typ-(__TPROC0OFF+num))))parlist + +/* runtime system variables */ +extern LONGINT SYSTEM_argc; +extern LONGINT SYSTEM_argv; +extern void (*SYSTEM_Halt)(); +extern LONGINT SYSTEM_halt; +extern LONGINT SYSTEM_assert; +extern SYSTEM_PTR SYSTEM_modules; +extern LONGINT SYSTEM_heapsize; +extern LONGINT SYSTEM_allocated; +extern LONGINT SYSTEM_lock; +extern SHORTINT SYSTEM_gclock; +extern BOOLEAN SYSTEM_interrupted; + +/* ANSI prototypes; not used so far +static int __STRCMP(CHAR *x, CHAR *y); +void SYSTEM_INIT(int argc, long argvadr); +void SYSTEM_FINI(void); +long SYSTEM_XCHK(long i, long ub); +long SYSTEM_RCHK(long i, long ub); +long SYSTEM_ASH(long i, long n); +long SYSTEM_ABS(long i); +double SYSTEM_ABSD(double i); +void SYSTEM_INHERIT(long *t, long *t0); +void SYSTEM_ENUMP(long *adr, long n, void (*P)(void*)); +void SYSTEM_ENUMR(char *adr, long *typ, long size, long n, void (*P)(void*)); +long SYSTEM_DIV(unsigned long x, unsigned long y); +long SYSTEM_MOD(unsigned long x, unsigned long y); +long SYSTEM_ENTIER(double x); +void SYSTEM_HALT(int n); +*/ + +#endif + diff --git a/src/lib/system/gnuc/x86_64/Unix.Mod b/src/lib/system/gnuc/x86_64/Unix.Mod new file mode 100644 index 00000000..95c3b867 --- /dev/null +++ b/src/lib/system/gnuc/x86_64/Unix.Mod @@ -0,0 +1,488 @@ +MODULE Unix; (* Josef Templ, 5.3.90 Linux system calls *) +(* ported to gnu x86_64 and added system function, noch *) +(* Module Unix provides a system call interface to Linux. + Naming conventions: + Procedure and Type-names always start with a capital letter. + error numbers as defined in Unix + other constants start with lower case letters *) + +IMPORT SYSTEM; + +CONST + +(* various important constants *) + + stdin* = 0; stdout* =1; stderr* = 2; + + LOCKEX* = 2; LOCKUN* = 8; (* /usr/include/file.h *) + AFINET* = 2; (* /usr/include/sys/socket.h *) + PFINET* = AFINET; (* /usr/include/linux/socket.h *) + SOCKSTREAM* = 1; (* /usr/include/linux/socket.h *) + FIONREAD* = 541BH; (* in /usr/include/asm/termios.h *) + SETFL* = 4; (* set file descriptor flags; in asm/fcntl.h *) + TCP* = 0; + +(* flag sets, cf. /usr/include/asm/fcntl.h *) + rdonly* = {}; wronly* = {0}; rdwr* = {1}; creat* = {6}; excl* = {7}; trunc* = {9}; append* = {10}; ndelay = {11}; + +(* error numbers *) + + EPERM* = 1; (* Not owner *) + ENOENT* = 2; (* No such file or directory *) + ESRCH* = 3; (* No such process *) + EINTR* = 4; (* Interrupted system call *) + EIO* = 5; (* I/O error *) + ENXIO* = 6; (* No such device or address *) + E2BIG* = 7; (* Arg list too long *) + ENOEXEC* = 8; (* Exec format error *) + EBADF* = 9; (* Bad file number *) + ECHILD* = 10; (* No children *) + EAGAIN* = 11; (* No more processes *) + ENOMEM* = 12; (* Not enough core *) + EACCES* = 13; (* Permission denied *) + EFAULT* = 14; (* Bad address *) + ENOTBLK* = 15; (* Block device required *) + EBUSY* = 16; (* Mount device busy *) + EEXIST* = 17; (* File exists *) + EXDEV* = 18; (* Cross-device link *) + ENODEV* = 19; (* No such device *) + ENOTDIR* = 20; (* Not a directory*) + EISDIR* = 21; (* Is a directory *) + EINVAL* = 22; (* Invalid argument *) + ENFILE* = 23; (* File table overflow *) + EMFILE* = 24; (* Too many open files *) + ENOTTY* = 25; (* Not a typewriter *) + ETXTBSY* = 26; (* Text file busy *) + EFBIG* = 27; (* File too large *) + ENOSPC* = 28; (* No space left on device *) + ESPIPE* = 29; (* Illegal seek *) + EROFS* = 30; (* Read-only file system *) + EMLINK* = 31; (* Too many links *) + EPIPE* = 32; (* Broken pipe *) + EDOM* = 33; (* Argument too large *) + ERANGE* = 34; (* Result too large *) + EDEADLK* = 35; (* Resource deadlock would occur *) + ENAMETOOLONG* = 36; (* File name too long *) + ENOLCK* = 37; (* No record locks available *) + ENOSYS* = 38; (* Function not implemented *) + ENOTEMPTY* = 39; (* Directory not empty *) + ELOOP* = 40; (* Too many symbolic links encountered *) + EWOULDBLOCK* = EAGAIN; (* Operation would block *) + ENOMSG* = 42; (* No message of desired type *) + EIDRM* = 43; (* Identifier removed *) + ECHRNG* = 44; (* Channel number out of range *) + EL2NSYNC* = 45; (* Level 2 not synchronized *) + EL3HLT* = 46; (* Level 3 halted *) + EL3RST* = 47; (* Level 3 reset *) + ELNRNG* = 48; (* Link number out of range *) + EUNATCH* = 49; (* Protocol driver not attached *) + ENOCSI* = 50; (* No CSI structure available *) + EL2HLT* = 51; (* Level 2 halted *) + EBADE* = 52; (* Invalid exchange *) + EBADR* = 53; (* Invalid request descriptor *) + EXFULL* = 54; (* Exchange full *) + ENOANO* = 55; (* No anode *) + EBADRQC* = 56; (* Invalid request code *) + EBADSLT* = 57; (* Invalid slot *) + EDEADLOCK* = 58; (* File locking deadlock error *) + EBFONT* = 59; (* Bad font file format *) + ENOSTR* = 60; (* Device not a stream *) + ENODATA* = 61; (* No data available *) + ETIME* = 62; (* Timer expired *) + ENOSR* = 63; (* Out of streams resources *) + ENONET* = 64; (* Machine is not on the network *) + ENOPKG* = 65; (* Package not installed *) + EREMOTE* = 66; (* Object is remote *) + ENOLINK* = 67; (* Link has been severed *) + EADV* = 68; (* Advertise error *) + ESRMNT* = 69; (* Srmount error *) + ECOMM* = 70; (* Communication error on send *) + EPROTO* = 71; (* Protocol error *) + EMULTIHOP* = 72; (* Multihop attempted *) + EDOTDOT* = 73; (* RFS specific error *) + EBADMSG* = 74; (* Not a data message *) + EOVERFLOW* = 75; (* Value too large for defined data type *) + ENOTUNIQ* = 76; (* Name not unique on network *) + EBADFD* = 77; (* File descriptor in bad state *) + EREMCHG* = 78; (* Remote address changed *) + ELIBACC* = 79; (* Can not access a needed shared library *) + ELIBBAD* = 80; (* Accessing a corrupted shared library *) + ELIBSCN* = 81; (* .lib section in a.out corrupted *) + ELIBMAX* = 82; (* Attempting to link in too many shared libraries *) + ELIBEXEC* = 83; (* Cannot exec a shared library directly *) + EILSEQ* = 84; (* Illegal byte sequence *) + ERESTART* = 85; (* Interrupted system call should be restarted *) + ESTRPIPE* = 86; (* Streams pipe error *) + EUSERS* = 87; (* Too many users *) + ENOTSOCK* = 88; (* Socket operation on non-socket *) + EDESTADDRREQ* = 89; (* Destination address required *) + EMSGSIZE* = 90; (* Message too long *) + EPROTOTYPE* = 91; (* Protocol wrong type for socket *) + ENOPROTOOPT* = 92; (* Protocol not available *) + EPROTONOSUPPORT* = 93; (* Protocol not supported *) + ESOCKTNOSUPPORT* = 94; (* Socket type not supported *) + EOPNOTSUPP* = 95; (* Operation not supported on transport endpoint *) + EPFNOSUPPORT* = 96; (* Protocol family not supported *) + EAFNOSUPPORT* = 97; (* Address family not supported by protocol *) + EADDRINUSE* = 98; (* Address already in use *) + EADDRNOTAVAIL* = 99; (* Cannot assign requested address *) + ENETDOWN* = 100; (* Network is down *) + ENETUNREACH* = 101; (* Network is unreachable *) + ENETRESET* = 102; (* Network dropped connection because of reset *) + ECONNABORTED* = 103; (* Software caused connection abort *) + ECONNRESET* = 104; (* Connection reset by peer *) + ENOBUFS* = 105; (* No buffer space available *) + EISCONN* = 106; (* Transport endpoint is already connected *) + ENOTCONN* = 107; (* Transport endpoint is not connected *) + ESHUTDOWN* = 108; (* Cannot send after transport endpoint shutdown *) + ETOOMANYREFS* = 109; (* Too many references: cannot splice *) + ETIMEDOUT* = 110; (* Connection timed out *) + ECONNREFUSED* = 111; (* Connection refused *) + EHOSTDOWN* = 112; (* Host is down *) + EHOSTUNREACH* = 113; (* No route to host *) + EALREADY* = 114; (* Operation already in progress *) + EINPROGRESS* = 115; (* Operation now in progress *) + ESTALE* = 116; (* Stale NFS file handle *) + EUCLEAN* = 117; (* Structure needs cleaning *) + ENOTNAM* = 118; (* Not a XENIX named type file *) + ENAVAIL* = 119; (* No XENIX semaphores available *) + EISNAM* = 120; (* Is a named type file *) + EREMOTEIO* = 121; (* Remote I/O error *) + EDQUOT* = 122; (* Quota exceeded *) + +CONST sigsetarrlength = 1024 / 8 * SIZE(LONGINT); + + +TYPE +(* bits/sigset.h + _SIGSET_NWORDS (1024 / (8 * sizeof (unsigned long int))) + + 1024 / 8*8 = 16 + 1024 / 8*4 = 32 +*) + sigsett* = RECORD + val : ARRAY 16 OF LONGINT (* 32 for 32 bit *) + (*val : ARRAY sigsetarrlength OF LONGINT *) + END; + + JmpBuf* = RECORD + (*bx*, si*, di*, bp*, sp*, pc*: LONGINT;*) + (* bits/setjmp.h sets up longer array in GNU libc *) + (* + # if __WORDSIZE == 64 + typedef long int __jmp_buf[8]; + # else + typedef int __jmp_buf[6]; + # endif + *) + bx*, si*, di*, bp*, sp*, pc*, ki*, ku*: LONGINT; + (* setjmp.h +/* Calling environment, plus possibly a saved signal mask. */ +struct __jmp_buf_tag + { + /* NOTE: The machine-dependent definitions of `__sigsetjmp' + assume that a `jmp_buf' begins with a `__jmp_buf' and that + `__mask_was_saved' follows it. Do not move these members + or add others before it. */ + __jmp_buf __jmpbuf; /* Calling environment. */ + int __mask_was_saved; /* Saved the signal mask? */ + __sigset_t __saved_mask; /* Saved signal mask. */ + }; + + *) + (*maskWasSaved*, savedMask*: LONGINT;*) + maskWasSaved*: INTEGER; + (* + # define _SIGSET_NWORDS (1024 / (8 * sizeof (unsigned long int))) +typedef struct + { + unsigned long int __val[_SIGSET_NWORDS]; + } __sigset_t; + + *) + savedMask*: sigsett; + END ; + + Status* = RECORD (* struct stat *) + dev* : LONGINT; (* dev_t 8 *) + ino* : LONGINT; (* ino 8 *) + nlink* : LONGINT; + mode* : INTEGER; + uid*, gid*: INTEGER; + rdev* : LONGINT; + size* : LONGINT; + blksize* : LONGINT; + blocks* : LONGINT; + atime* : LONGINT; + atimences* : LONGINT; + mtime* : LONGINT; + mtimensec* : LONGINT; + ctime* : LONGINT; + ctimensec* : LONGINT; + unused4*, unused5*: LONGINT; + END ; + +(* from /usr/include/bits/time.h + +struct timeval + { + __time_t tv_sec; /* Seconds. */ //__time_t 8 + __suseconds_t tv_usec; /* Microseconds. */ __suseconds_t 8 + }; + + +*) + + Timeval* = RECORD + sec*, usec*: LONGINT + END ; + + +(* +from man gettimeofday + + struct timezone { + int tz_minuteswest; /* minutes west of Greenwich */ int 4 + int tz_dsttime; /* type of DST correction */ int 4 + }; +*) + + + Timezone* = RECORD + (*minuteswest*, dsttime*: LONGINT*) + minuteswest*, dsttime*: INTEGER + END ; + + Itimerval* = RECORD + interval*, value*: Timeval + END ; + + FdSet* = ARRAY 8 OF SET; + + SigCtxPtr* = POINTER TO SigContext; + SigContext* = RECORD + END ; + + SignalHandler* = PROCEDURE (sig, code: LONGINT; scp: SigCtxPtr); + + Dirent* = RECORD + ino, off: LONGINT; + reclen: INTEGER; + name: ARRAY 256 OF CHAR; + END ; + + Rusage* = RECORD + utime*, stime*: Timeval; + maxrss*, ixrss*, idrss*, isrss*, + minflt*, majflt*, nswap*, inblock*, + oublock*, msgsnd*, msgrcv*, nsignals*, + nvcsw*, nivcsw*: LONGINT + END ; + + Iovec* = RECORD + base*, len*: LONGINT + END ; + + SocketPair* = ARRAY 2 OF LONGINT; + + Pollfd* = RECORD + fd*: LONGINT; + events*, revents*: INTEGER + END ; + + Sockaddr* = RECORD + family*: INTEGER; + port*: INTEGER; + internetAddr*: LONGINT; + pad*: ARRAY 8 OF CHAR; + END ; + + HostEntry* = POINTER [1] TO Hostent; + Hostent* = RECORD + name*, aliases*: LONGINT; + addrtype*, length*: LONGINT; + addrlist*: LONGINT; (*POINTER TO POINTER TO LONGINT, network byte order*) + END; + + Name* = ARRAY OF CHAR; + + PROCEDURE -includeStat() + "#include "; + + PROCEDURE -includeErrno() + "#include "; + + PROCEDURE -err(): LONGINT + "errno"; + + PROCEDURE errno*(): LONGINT; + BEGIN + RETURN err() + END errno; + + PROCEDURE -Exit*(n: LONGINT) + "exit(n)"; + + PROCEDURE -Fork*(): LONGINT + "fork()"; + + PROCEDURE -Wait*(VAR status: LONGINT): LONGINT + "wait(status)"; + + PROCEDURE -Select*(width: LONGINT; VAR readfds, writefds, exceptfds: FdSet; VAR timeout: Timeval): LONGINT + "select(width, readfds, writefds, exceptfds, timeout)"; + + PROCEDURE -Gettimeofday* (VAR tv: Timeval; VAR tz: Timezone) + "gettimeofday(tv, tz)"; + + PROCEDURE -Read* (fd, buf, nbyte: LONGINT): LONGINT + "read(fd, buf, nbyte)"; + + PROCEDURE -ReadBlk* (fd: LONGINT; VAR buf: ARRAY OF SYSTEM.BYTE): LONGINT + "read(fd, buf, buf__len)"; + + PROCEDURE -Write* (fd, buf, nbyte: LONGINT): LONGINT + "write(fd, buf, nbyte)"; + + PROCEDURE -WriteBlk* (fd: LONGINT; VAR buf: ARRAY OF SYSTEM.BYTE): LONGINT + "write(fd, buf, buf__len)"; + + PROCEDURE -Dup*(fd: LONGINT): LONGINT + "dup(fd)"; + + PROCEDURE -Dup2*(fd1, fd2: LONGINT): LONGINT + "dup(fd1, fd2)"; + + PROCEDURE -Getpid*(): LONGINT + "getpid()"; + + PROCEDURE -Getuid*(): LONGINT + "getuid()"; + + PROCEDURE -Geteuid*(): LONGINT + "geteuid()"; + + PROCEDURE -Getgid*(): LONGINT + "getgid()"; + + PROCEDURE -Getegid*(): LONGINT + "getegid()"; + + PROCEDURE -Unlink*(name: Name): LONGINT + "unlink(name)"; + + PROCEDURE -Open*(name: Name; flag, mode: SET): LONGINT + "open(name, flag, mode)"; + + PROCEDURE -Close*(fd: LONGINT): LONGINT + "close(fd)"; + + PROCEDURE -stat(name: Name; VAR statbuf: Status): LONGINT + "stat((const char*)name, (struct stat*)statbuf)"; + + PROCEDURE Stat*(name: Name; VAR statbuf: Status): LONGINT; + VAR res: LONGINT; + BEGIN + res := stat(name, statbuf); + (* make the first 4 bytes as unique as possible (used in module Files for caching!) *) + (* don't understand this + INC(statbuf.dev, statbuf.devX); + INC(statbuf.rdev, statbuf.rdevX); *) + RETURN res; + END Stat; + + PROCEDURE -fstat(fd: LONGINT; VAR statbuf: Status): LONGINT + "fstat(fd, (struct stat*)statbuf)"; + + PROCEDURE Fstat*(fd: LONGINT; VAR statbuf: Status): LONGINT; + VAR res: LONGINT; + BEGIN + res := fstat(fd, statbuf); + (* make the first 4 bytes as unique as possible (used in module Files for caching!) *) + (*INC(statbuf.dev, statbuf.devX); + INC(statbuf.rdev, statbuf.rdevX); *) + RETURN res; + END Fstat; + + PROCEDURE -Fchmod*(fd, mode: LONGINT): LONGINT + "fchmod(fd, mode)"; + + PROCEDURE -Chmod*(path: Name; mode: LONGINT): LONGINT + "chmod(path, mode)"; + + PROCEDURE -Lseek*(fd, offset, origin: LONGINT): LONGINT + "lseek(fd, offset, origin)"; + + PROCEDURE -Fsync*(fd: LONGINT): LONGINT + "fsync(fd)"; + + PROCEDURE -Fcntl*(fd, cmd, arg: LONGINT ): LONGINT + "fcntl(fd, cmd, arg)"; + + PROCEDURE -Flock*(fd, operation: LONGINT): LONGINT + "flock(fd, operation)"; + + PROCEDURE -Ftruncate*(fd, length: LONGINT): LONGINT + "ftruncate(fd, length)"; + + PROCEDURE -Readblk*(fd: LONGINT; VAR buf: ARRAY OF SYSTEM.BYTE; len: LONGINT): LONGINT + "read(fd, buf, len)"; + + PROCEDURE -Rename*(old, new: Name): LONGINT + "rename(old, new)"; + + PROCEDURE -Chdir*(path: Name): LONGINT + "chdir(path)"; + + PROCEDURE -Ioctl*(fd, request, arg: LONGINT): LONGINT + "ioctl(fd, request, arg)"; + + PROCEDURE -Kill*(pid, sig: LONGINT): LONGINT + "kill(pid, sig)"; + + PROCEDURE -Sigsetmask*(mask: LONGINT): LONGINT + "sigsetmask(mask)"; + + + (* TCP/IP networking *) + + PROCEDURE -Gethostbyname*(name: Name): HostEntry + "(Unix_HostEntry)gethostbyname(name)"; + + PROCEDURE -Gethostname*(VAR name: Name): LONGINT + "gethostname(name, name__len)"; + + PROCEDURE -Socket*(af, type, protocol: LONGINT): LONGINT + "socket(af, type, protocol)"; + + PROCEDURE -Connect*(socket: LONGINT; name: Sockaddr; namelen: LONGINT): LONGINT + "connect(socket, &(name), namelen)"; + + PROCEDURE -Getsockname*(socket: LONGINT; VAR name: Sockaddr; VAR namelen: LONGINT): LONGINT + "getsockname(socket, name, namelen)"; + + PROCEDURE -Bind*(socket: LONGINT; name: Sockaddr; namelen: LONGINT): LONGINT + "bind(socket, &(name), namelen)"; + + PROCEDURE -Listen*(socket, backlog: LONGINT): LONGINT + "listen(socket, backlog)"; + + PROCEDURE -Accept*(socket: LONGINT; VAR addr: Sockaddr; VAR addrlen: LONGINT): LONGINT + "accept(socket, addr, addrlen)"; + + PROCEDURE -Recv*(socket, bufadr, buflen, flags: LONGINT): LONGINT + "recv(socket, bufadr, buflen, flags)"; + + PROCEDURE -Send*(socket, bufadr, buflen, flags: LONGINT): LONGINT + "send(socket, bufadr, buflen, flags)"; + + PROCEDURE -sys(str: ARRAY OF CHAR): INTEGER (* need this to call external tools like gcc or gas; noch *) + "system(str)"; + + PROCEDURE system*(cmd : ARRAY OF CHAR); + VAR r : INTEGER; + BEGIN + r := sys(cmd); + END system; + +END Unix. diff --git a/src/lib/ulm/gnuc/ulmEvents.Mod b/src/lib/ulm/gnuc/ulmEvents.Mod new file mode 100644 index 00000000..8f0c9edb --- /dev/null +++ b/src/lib/ulm/gnuc/ulmEvents.Mod @@ -0,0 +1,565 @@ +(* 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: Events.om,v 1.4 2004/03/30 17:48:14 borchert Exp $ + ---------------------------------------------------------------------------- + $Log: Events.om,v $ + Revision 1.4 2004/03/30 17:48:14 borchert + support of external queue handling added + + Revision 1.3 1996/01/04 17:07:20 borchert + event types are now an extension of Services.Object + + Revision 1.2 1994/07/18 14:17:17 borchert + unused variables of Raise (oldevent + newevent) removed + + Revision 1.1 1994/02/22 20:07:41 borchert + Initial revision + + ---------------------------------------------------------------------------- + AFB 8/89 + ---------------------------------------------------------------------------- +*) + +MODULE ulmEvents; + + IMPORT Objects := ulmObjects, Priorities := ulmPriorities, Services := ulmServices, SYS := ulmSYSTEM, SYSTEM; + + TYPE + EventType* = POINTER TO EventTypeRec; + + CONST + (* possibilities on receipt of an event: *) + default* = 0; (* causes abortion *) + ignore* = 1; (* ignore event *) + funcs* = 2; (* call associated event handlers *) + + TYPE + Reaction* = INTEGER; (* one of default, ignore, or funcs *) + Message* = ARRAY 80 OF CHAR; + Event* = POINTER TO EventRec; + EventRec* = + RECORD + (Objects.ObjectRec) + type*: EventType; + message*: Message; + (* private part *) + next: Event; (* queue *) + END; + EventHandler = PROCEDURE (event: Event); + + (* event managers are needed if there is any action necessary + on changing the kind of reaction + *) + EventManager = PROCEDURE (type: EventType; reaction: Reaction); + + Priority = INTEGER; (* must be non-negative *) + + (* every event with reaction `funcs' has a handler list; + the list is in calling order which is reverse to + the order of `Handler'-calls + *) + HandlerList = POINTER TO HandlerRec; + HandlerRec* = + RECORD + (Objects.ObjectRec) + handler*: EventHandler; + next*: HandlerList; + END; + SaveList = POINTER TO SaveRec; + SaveRec = + RECORD + reaction: Reaction; + handlers: HandlerList; + next: SaveList; + END; + + EventTypeRec* = + RECORD + (Services.ObjectRec) + (* private components *) + handlers: HandlerList; + priority: Priority; + reaction: Reaction; + manager: EventManager; + savelist: SaveList; + END; + + Queue = POINTER TO QueueRec; + QueueRec = + RECORD + priority: INTEGER; (* queue for this priority *) + head, tail: Event; + next: Queue; (* queue with lower priority *) + END; + + VAR + eventTypeType: Services.Type; + + CONST + priotabsize = 256; (* size of a priority table *) + maxnestlevel = 1024; (* of Raise-calls (avoids endless recursion) *) + + TYPE + (* in some cases coroutines uses local priority systems *) + PrioritySystem* = POINTER TO PrioritySystemRec; + PrioritySystemRec* = + RECORD + (Objects.ObjectRec) + (* private part *) + currentPriority: Priority; + priotab: ARRAY priotabsize OF Priority; + priotop: INTEGER; + overflow: INTEGER; (* of priority table *) + END; + + CONST + priorityViolation* = 0; (* priority violation (EnterPriority *) + unbalancedExitPriority* = 1; (* unbalanced call of ExitPriority *) + unbalancedRestoreReaction* = 2; (* unbalanced call of RestoreReaction *) + negPriority* = 3; (* negative priority given to SetPriority *) + errorcodes* = 4; + + TYPE + ErrorEvent* = POINTER TO ErrorEventRec; + ErrorEventRec* = + RECORD + (EventRec) + errorcode*: SHORTINT; + END; + + VAR + errormsg*: ARRAY errorcodes OF Message; + error*: EventType; + + VAR + (* private part *) + abort, log, queueHandler: EventHandler; + nestlevel: INTEGER; (* of Raise calls *) + queue: Queue; + lock: BOOLEAN; (* lock critical operations *) + psys: PrioritySystem; (* current priority system *) + + PROCEDURE ^ Define*(VAR type: EventType); + PROCEDURE ^ SetPriority*(type: EventType; priority: Priority); + PROCEDURE ^ Raise*(event: Event); + + PROCEDURE InitErrorHandling; + BEGIN + Define(error); SetPriority(error, Priorities.liberrors); + errormsg[priorityViolation] := + "priority violation (Events.EnterPriority)"; + errormsg[unbalancedExitPriority] := + "unbalanced call of Events.ExitPriority"; + errormsg[unbalancedRestoreReaction] := + "unbalanced call of Events.RestoreReaction"; + errormsg[negPriority] := + "negative priority given to Events.SetPriority"; + END InitErrorHandling; + + PROCEDURE Error(code: SHORTINT); + VAR event: ErrorEvent; + BEGIN + NEW(event); event.type := error; + event.message := errormsg[code]; + event.errorcode := code; + Raise(event); + END Error; + + PROCEDURE NilEventManager(type: EventType; reaction: Reaction); + END NilEventManager; + + PROCEDURE Init*(type: EventType); + VAR + stype: Services.Type; + BEGIN + Services.GetType(type, stype); ASSERT(stype # NIL); + type.handlers := NIL; + type.priority := Priorities.default; + type.reaction := default; + type.manager := NilEventManager; + type.savelist := NIL; + END Init; + + PROCEDURE Define*(VAR type: EventType); + (* definition of a new event; + an unique event number is returned; + the reaction on receipt of `type' is defined to be `default' + *) + BEGIN + NEW(type); + Services.Init(type, eventTypeType); + Init(type); + END Define; + + PROCEDURE GetReaction*(type: EventType) : Reaction; + (* returns either `default', `ignore', or `funcs' *) + BEGIN + RETURN type.reaction + END GetReaction; + + PROCEDURE SetPriority*(type: EventType; priority: Priority); + (* (re-)defines the priority of an event *) + BEGIN + IF priority <= 0 THEN + Error(negPriority); + ELSE + type.priority := priority; + END; + END SetPriority; + + PROCEDURE GetEventPriority*(type: EventType) : Priority; + (* return the priority of the given event *) + BEGIN + RETURN type.priority + END GetEventPriority; + + PROCEDURE Manager*(type: EventType; manager: EventManager); + BEGIN + type.manager := manager; + END Manager; + + PROCEDURE Handler*(type: EventType; handler: EventHandler); + (* add `handler' to the list of handlers for event `type' *) + VAR + newhandler: HandlerList; + BEGIN + NEW(newhandler); + newhandler.handler := handler; newhandler.next := type.handlers; + type.handlers := newhandler; + IF type.reaction # funcs THEN + type.reaction := funcs; type.manager(type, funcs); + END; + END Handler; + + PROCEDURE RemoveHandlers*(type: EventType); + (* remove list of handlers for event `type'; + implies default reaction (abortion) on + receipt of `type' + *) + BEGIN + type.handlers := NIL; + IF type.reaction # default THEN + type.reaction := default; type.manager(type, default); + END; + END RemoveHandlers; + + PROCEDURE Ignore*(type: EventType); + (* implies RemoveHandlers(type) and causes receipt + of `type' to be ignored + *) + BEGIN + type.handlers := NIL; + IF type.reaction # ignore THEN + type.reaction := ignore; type.manager(type, ignore); + END; + END Ignore; + + PROCEDURE GetHandlers*(type: EventType; handlers: HandlerList); + (* returns the list of handlers in `handlers'; + the reaction of `type' must be `funcs' + *) + BEGIN + handlers := type.handlers; + END GetHandlers; + + PROCEDURE Log*(loghandler: EventHandler); + (* call `loghandler' for every event; + subsequent calls of `Log' replace the loghandler; + the loghandler is not called on default and ignore + *) + BEGIN + log := loghandler; + END Log; + + PROCEDURE GetLog*(VAR loghandler: EventHandler); + (* returns the loghandler set by `Log' *) + BEGIN + loghandler := log; + END GetLog; + + (* noch *) + PROCEDURE -getaddr(handler: EventHandler): LONGINT + "(LONGINT)&handler"; + + PROCEDURE NilHandler*(event: Event); + (* an empty event handler *) + END NilHandler; + +(* now QueueHandler will translate partly like + i = (long)&handler; + j = (long)&ulmEvents_NilHandler; + b = i != j; + if (!(b)) {SYSTEM_assert = 0; SYSTEM_HALT(-1);}; + +; noch +*) + + PROCEDURE QueueHandler*(handler: EventHandler); + (* setup an alternative handler of events + that cannot be processed now because + of their unsufficient priority + *) + VAR b : BOOLEAN; (* noch *) + i,j : LONGINT; + BEGIN + i := getaddr(handler); + j := getaddr(NilHandler); + b := i # j; + (*ASSERT (handler # NilHandler);*) + ASSERT(b); + queueHandler := handler; + END QueueHandler; + + PROCEDURE AbortHandler*(handler: EventHandler); + (* defines the handler to be called on abortion *) + BEGIN + abort := handler; + END AbortHandler; + + PROCEDURE GetAbortHandler*(VAR handler: EventHandler); + (* returns the handler set by `AbortHandler' *) + BEGIN + handler := abort; + END GetAbortHandler; + + PROCEDURE ^ CallHandlers(event: Event); + + PROCEDURE WorkupQueue; + VAR + ptr: Event; + BEGIN + WHILE (queue # NIL) & (queue.priority > psys.currentPriority) DO + IF SYS.TAS(lock) THEN RETURN END; + ptr := queue.head; queue := queue.next; + lock := FALSE; + WHILE ptr # NIL DO + CallHandlers(ptr); + ptr := ptr.next; + END; + END; + END WorkupQueue; + + PROCEDURE CallHandlers(event: Event); + VAR + ptr: HandlerList; + oldPriority: Priority; + BEGIN + CASE event.type.reaction OF + | default: abort(event); + | ignore: + | funcs: oldPriority := psys.currentPriority; + psys.currentPriority := event.type.priority; + log(event); + ptr := event.type.handlers; + WHILE ptr # NIL DO + ptr.handler(event); + ptr := ptr.next; + END; + psys.currentPriority := oldPriority; + END; + END CallHandlers; + + PROCEDURE Raise*(event: Event); + (* call all event handlers (in reverse order) + associated with event.type; + abort if there are none; + some system events may abort in another way + (i.e. they do not cause the abortion handler to be called) + *) + VAR + priority: Priority; + + PROCEDURE AddToQueue(event: Event); + VAR + prev, ptr: Queue; + BEGIN + event.next := NIL; + ptr := queue; prev := NIL; + WHILE (ptr # NIL) & (ptr.priority > priority) DO + prev := ptr; + ptr := ptr.next; + END; + IF (ptr # NIL) & (ptr.priority = priority) THEN + ptr.tail.next := event; + ptr.tail := event; + ELSE + NEW(ptr); + ptr.priority := priority; + ptr.head := event; ptr.tail := event; + IF prev = NIL THEN + ptr.next := queue; + queue := ptr; + ELSE + ptr.next := prev.next; + prev.next := ptr; + END; + END; + END AddToQueue; + + BEGIN (* Raise *) + INC(nestlevel); + IF nestlevel >= maxnestlevel THEN + abort(event); + ELSE + IF event.type.reaction # ignore THEN + priority := event.type.priority; + IF psys.currentPriority < priority THEN + CallHandlers(event); WorkupQueue; + ELSIF queueHandler # NIL THEN + queueHandler(event); + ELSIF ~SYS.TAS(lock) THEN + AddToQueue(event); + lock := FALSE; + END; + END; + END; + DEC(nestlevel); + END Raise; + + PROCEDURE CreatePrioritySystem*(VAR prioritySystem: PrioritySystem); + (* create and initialize a new priority system *) + BEGIN + NEW(prioritySystem); + prioritySystem.currentPriority := Priorities.base; + prioritySystem.priotop := 0; + END CreatePrioritySystem; + + PROCEDURE CurrentPrioritySystem*() : PrioritySystem; + (* return the priority system currently active *) + BEGIN + RETURN psys + END CurrentPrioritySystem; + + PROCEDURE SwitchPrioritySystem*(prioritySystem: PrioritySystem); + (* switch to another priority system; this is typically + done in case of task switches + *) + BEGIN + psys := prioritySystem; + END SwitchPrioritySystem; + + PROCEDURE EnterPriority*(priority: Priority); + (* sets the current priority to `priority'; + it is an error to give a priority less than + the current priority (event `badpriority') + *) + BEGIN + IF psys.currentPriority <= priority THEN + IF (psys.overflow = 0) & (psys.priotop < priotabsize) THEN + psys.priotab[psys.priotop] := psys.currentPriority; + INC(psys.priotop); + psys.currentPriority := priority; + ELSE + INC(psys.overflow); + END; + ELSE + Error(priorityViolation); + INC(psys.overflow); + END; + END EnterPriority; + + PROCEDURE AssertPriority*(priority: Priority); + (* current priority + < priority: set the current priority to `priority' + >= priority: the current priority remains unchanged + *) + BEGIN + IF (psys.overflow = 0) & (psys.priotop < priotabsize) THEN + psys.priotab[psys.priotop] := psys.currentPriority; INC(psys.priotop); + IF psys.currentPriority < priority THEN + psys.currentPriority := priority; + END; + ELSE + INC(psys.overflow); + END; + END AssertPriority; + + PROCEDURE ExitPriority*; + (* causes the priority before the last effective call + of SetPriority or AssertPriority to be restored + *) + BEGIN + IF psys.overflow > 0 THEN + DEC(psys.overflow); + ELSIF psys.priotop = 0 THEN + Error(unbalancedExitPriority); + ELSE + DEC(psys.priotop); psys.currentPriority := psys.priotab[psys.priotop]; + WorkupQueue; + END; + END ExitPriority; + + PROCEDURE GetPriority*() : Priority; + (* returns the current priority *) + BEGIN + RETURN psys.currentPriority + END GetPriority; + + PROCEDURE SaveReaction*(type: EventType); + (* saves current reaction until call of RestoreReaction; + the new reaction of `type' is defined to be `ignore' + but can be changed by Events.Handler or Events.RemoveHandlers + *) + VAR + savelist: SaveList; + BEGIN + NEW(savelist); + savelist.reaction := type.reaction; + savelist.handlers := type.handlers; + savelist.next := type.savelist; + type.savelist := savelist; + type.handlers := NIL; + IF type.reaction # ignore THEN + type.reaction := ignore; type.manager(type, ignore); + END; + END SaveReaction; + + PROCEDURE RestoreReaction*(type: EventType); + (* restores old reaction; + must be properly nested + *) + VAR + savelist: SaveList; + BEGIN + IF type.savelist = NIL THEN + Error(unbalancedRestoreReaction); + ELSE + savelist := type.savelist; + type.savelist := savelist.next; + type.handlers := savelist.handlers; + IF type.reaction # savelist.reaction THEN + type.reaction := savelist.reaction; + type.manager(type, savelist.reaction); + END; + END; + END RestoreReaction; + +BEGIN + CreatePrioritySystem(psys); + + Services.CreateType(eventTypeType, "Events.EventType", ""); + + abort := NilHandler; log := NilHandler; queueHandler := NIL; + nestlevel := 0; + queue := NIL; + lock := FALSE; + + InitErrorHandling; +END ulmEvents. diff --git a/src/lib/ulm/ulmASCII.Mod b/src/lib/ulm/ulmASCII.Mod new file mode 100644 index 00000000..3b73d066 --- /dev/null +++ b/src/lib/ulm/ulmASCII.Mod @@ -0,0 +1,60 @@ +(* 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: ASCII.om,v 1.1 1994/02/22 20:01:03 borchert Exp $ + ---------------------------------------------------------------------------- + $Log: ASCII.om,v $ + Revision 1.1 1994/02/22 20:01:03 borchert + Initial revision + + ---------------------------------------------------------------------------- + AFB 12/90 + ---------------------------------------------------------------------------- +*) + +MODULE ulmASCII; + + CONST + + (* control characters *) + nul* = 000X; soh* = 001X; stx* = 002X; etx* = 003X; eot* = 004X; + enq* = 005X; ack* = 006X; bel* = 007X; bs* = 008X; ht* = 009X; + nl* = 00AX; vt* = 00BX; np* = 00CX; cr* = 00DX; so* = 00EX; + si* = 00FX; dle* = 010X; dc1* = 011X; dc2* = 012X; dc3* = 013X; + dc4* = 014X; nak* = 015X; syn* = 016X; etb* = 017X; can* = 018X; + em* = 019X; sub* = 01AX; esc* = 01BX; fs* = 01CX; gs* = 01DX; + rs* = 01EX; us* = 01FX; sp* = 020X; del* = 07FX; + + CtrlA* = 01X; CtrlB* = 02X; CtrlC* = 03X; CtrlD* = 04X; CtrlE* = 05X; + CtrlF* = 06X; CtrlG* = 07X; CtrlH* = 08X; CtrlI* = 09X; CtrlJ* = 0AX; + CtrlK* = 0BX; CtrlL* = 0CX; CtrlM* = 0DX; CtrlN* = 0EX; CtrlO* = 0FX; + CtrlP* = 10X; CtrlQ* = 11X; CtrlR* = 12X; CtrlS* = 13X; CtrlT* = 14X; + CtrlU* = 15X; CtrlV* = 16X; CtrlW* = 17X; CtrlX* = 18X; CtrlY* = 19X; + CtrlZ* = 1AX; + + (* other usual names *) + EOL* = nl; + null* = nul; + bell* = bel; + tab* = ht; + lf* = nl; + ff* = np; + quote* = 22X; + +END ulmASCII. diff --git a/src/lib/ulm/ulmDisciplines.Mod b/src/lib/ulm/ulmDisciplines.Mod new file mode 100644 index 00000000..913f7c03 --- /dev/null +++ b/src/lib/ulm/ulmDisciplines.Mod @@ -0,0 +1,140 @@ +(* 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: Disciplines.om,v 1.1 1994/02/22 20:07:03 borchert Exp $ + ---------------------------------------------------------------------------- + $Log: Disciplines.om,v $ + Revision 1.1 1994/02/22 20:07:03 borchert + Initial revision + + ---------------------------------------------------------------------------- + AFB 5/91 + ---------------------------------------------------------------------------- +*) + +MODULE ulmDisciplines; + + (* Disciplines allows to attach additional data structures to + abstract datatypes like Streams; + these added data structures permit to parametrize operations + which are provided by other modules (e.g. Read or Write for Streams) + *) + + IMPORT Objects := ulmObjects; + + TYPE + Identifier* = LONGINT; + + Discipline* = POINTER TO DisciplineRec; + DisciplineRec* = + RECORD + (Objects.ObjectRec) + id*: Identifier; (* should be unique for all types of disciplines *) + END; + + DisciplineList = POINTER TO DisciplineListRec; + DisciplineListRec = + RECORD + discipline: Discipline; + id: Identifier; (* copied from discipline.id *) + next: DisciplineList; + END; + + Object* = POINTER TO ObjectRec; + ObjectRec* = + RECORD + (Objects.ObjectRec) + (* private part *) + list: DisciplineList; (* set of disciplines *) + END; + + VAR + unique: Identifier; + + PROCEDURE Unique*() : Identifier; + (* returns a unique identifier; + this procedure should be called during initialization by + all modules defining a discipline type + *) + BEGIN + INC(unique); + RETURN unique + END Unique; + + PROCEDURE Remove*(object: Object; id: Identifier); + (* remove the discipline with the given id from object, if it exists *) + VAR + prev, dl: DisciplineList; + BEGIN + prev := NIL; + dl := object.list; + WHILE (dl # NIL) & (dl.id # id) DO + prev := dl; dl := dl.next; + END; + IF dl # NIL THEN + IF prev = NIL THEN + object.list := dl.next; + ELSE + prev.next := dl.next; + END; + END; + END Remove; + + PROCEDURE Add*(object: Object; discipline: Discipline); + (* adds a new discipline to the given object; + if already a discipline with the same identifier exist + it is deleted first + *) + VAR + dl: DisciplineList; + BEGIN + dl := object.list; + WHILE (dl # NIL) & (dl.id # discipline.id) DO + dl := dl.next; + END; + IF dl = NIL THEN + NEW(dl); + dl.id := discipline.id; + dl.next := object.list; + object.list := dl; + END; + dl.discipline := discipline; + END Add; + + PROCEDURE Seek*(object: Object; id: Identifier; + VAR discipline: Discipline) : BOOLEAN; + (* returns TRUE if a discipline with the given id is found *) + VAR + dl: DisciplineList; + BEGIN + dl := object.list; + WHILE (dl # NIL) & (dl.id # id) DO + dl := dl.next; + END; + IF dl # NIL THEN + discipline := dl.discipline; + ELSE + discipline := NIL; + END; + RETURN discipline # NIL + END Seek; + +BEGIN + unique := 0; +END ulmDisciplines. diff --git a/src/lib/ulm/ulmForwarders.Mod b/src/lib/ulm/ulmForwarders.Mod new file mode 100644 index 00000000..ac4fa0b8 --- /dev/null +++ b/src/lib/ulm/ulmForwarders.Mod @@ -0,0 +1,244 @@ +(* Ulm's Oberon Library + Copyright (C) 1989-1995 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: Forwarders.om,v 1.1 1996/01/04 16:40:57 borchert Exp $ + ---------------------------------------------------------------------------- + $Log: Forwarders.om,v $ + Revision 1.1 1996/01/04 16:40:57 borchert + Initial revision + + ---------------------------------------------------------------------------- +*) + +MODULE ulmForwarders; (* AFB 3/95 *) + + IMPORT Disciplines := ulmDisciplines, Events := ulmEvents, Resources := ulmResources, Services := ulmServices, SYSTEM; + (* SYSTEM is necessary to cast to Disciplines.Discipline; noch *) + + TYPE + Object* = Services.Object; + ForwardProc* = PROCEDURE (from, to: Object); + + TYPE + ListOfForwarders = POINTER TO ListOfForwardersRec; + ListOfForwardersRec = + RECORD + forward: ForwardProc; + next: ListOfForwarders; + END; + ListOfDependants = POINTER TO ListOfDependantsRec; + ListOfDependantsRec = + RECORD + dependant: Object; + next: ListOfDependants; + END; + TypeDiscipline = POINTER TO TypeDisciplineRec; + TypeDisciplineRec = + RECORD + (Disciplines.DisciplineRec) + list: ListOfForwarders; + END; + ObjectDiscipline = POINTER TO ObjectDisciplineRec; + ObjectDisciplineRec = + RECORD + (Disciplines.DisciplineRec) + dependants: ListOfDependants; + forwarders: ListOfForwarders; + dependsOn: Object; + END; + VAR + genlist: ListOfForwarders; (* list which applies to all types *) + typeDiscID: Disciplines.Identifier; + objectDiscID: Disciplines.Identifier; + + (* === private procedures ============================================ *) + + PROCEDURE RemoveDependant(VAR list: ListOfDependants; dependant: Object); + VAR + prev, p: ListOfDependants; + BEGIN + prev := NIL; p := list; + WHILE (p # NIL) & (p.dependant # dependant) DO + prev := p; p := p.next; + END; + IF p # NIL THEN + IF prev = NIL THEN + list := p.next; + ELSE + prev.next := p.next; + END; + END; + END RemoveDependant; + + PROCEDURE TerminationHandler(event: Events.Event); + (* remove list of dependants in case of termination and + remove event.resource from the list of dependants of that + object it depends on + *) + VAR + odisc: ObjectDiscipline; + dependsOn: Object; + BEGIN + WITH event: Resources.Event DO + IF event.change = Resources.terminated THEN + IF Disciplines.Seek(event.resource, objectDiscID, SYSTEM.VAL(Disciplines.Discipline, odisc)) THEN (* noch *) + Disciplines.Remove(event.resource, objectDiscID); + dependsOn := odisc.dependsOn; + IF (dependsOn # NIL) & ~Resources.Terminated(dependsOn) & + Disciplines.Seek(dependsOn, objectDiscID, SYSTEM.VAL(Disciplines.Discipline, odisc)) THEN (* noch *) + RemoveDependant(odisc.dependants, event.resource(Object)); + END; + END; + END; + END; + END TerminationHandler; + + PROCEDURE Insert(VAR list: ListOfForwarders; forward: ForwardProc); + VAR + member: ListOfForwarders; + BEGIN + NEW(member); member.forward := forward; + member.next := list; list := member; + END Insert; + + PROCEDURE GetObjectDiscipline(object: Object; VAR odisc: ObjectDiscipline); + VAR + resourceNotification: Events.EventType; + BEGIN + IF ~Disciplines.Seek(object, objectDiscID, SYSTEM.VAL(Disciplines.Discipline, odisc)) THEN (* noch *) + NEW(odisc); odisc.id := objectDiscID; odisc.dependants := NIL; + odisc.forwarders := NIL; odisc.dependsOn := NIL; + (* let's state our interest in termination of `object' if + we see this object the first time + *) + Resources.TakeInterest(object, resourceNotification); + Events.Handler(resourceNotification, TerminationHandler); + Disciplines.Add(object, odisc); + END; + END GetObjectDiscipline; + + (* === exported procedures =========================================== *) + + PROCEDURE Register*(for: ARRAY OF CHAR; forward: ForwardProc); + (* register a forwarder which is to be called for all + forward operations which affects extensions of `for'; + "" may be given for Services.Object + *) + + VAR + type: Services.Type; + tdisc: TypeDiscipline; + + BEGIN (* Register *) + IF for = "" THEN + Insert(genlist, forward); + ELSE + Services.SeekType(for, type); + ASSERT(type # NIL); + IF ~Disciplines.Seek(type, typeDiscID, SYSTEM.VAL(Disciplines.Discipline, tdisc)) THEN + NEW(tdisc); tdisc.id := typeDiscID; tdisc.list := NIL; + END; + Insert(tdisc.list, forward); + Disciplines.Add(type, tdisc); + END; + END Register; + + PROCEDURE RegisterObject*(object: Object; forward: ForwardProc); + (* to be called instead of Register if specific objects + are supported only and not all extensions of a type + *) + VAR + odisc: ObjectDiscipline; + BEGIN + GetObjectDiscipline(object, odisc); + Insert(odisc.forwarders, forward); + END RegisterObject; + + PROCEDURE Update*(object: Object; forward: ForwardProc); + (* is to be called by one of the registered forwarders if + an interface for object has been newly installed or changed + in a way which needs forward to be called for each of + the filter objects which delegate to `object' + *) + VAR + odisc: ObjectDiscipline; + client: ListOfDependants; + BEGIN + IF Disciplines.Seek(object, objectDiscID, SYSTEM.VAL(Disciplines.Discipline, odisc)) THEN (* noch *) + client := odisc.dependants; + WHILE client # NIL DO + forward(client.dependant, object); + client := client.next; + END; + END; + END Update; + + PROCEDURE Forward*(from, to: Object); + (* forward (as far as supported) all operations from `from' to `to' *) + VAR + type, otherType, baseType: Services.Type; + tdisc: TypeDiscipline; + odisc: ObjectDiscipline; + client: ListOfDependants; + forwarder: ListOfForwarders; + + PROCEDURE CallForwarders(list: ListOfForwarders); + BEGIN + WHILE list # NIL DO + list.forward(from, to); + list := list.next; + END; + END CallForwarders; + + BEGIN (* Forward *) + Services.GetType(from, type); + Services.GetType(to, otherType); + ASSERT((type # NIL) & (otherType # NIL)); + + IF Resources.Terminated(to) OR Resources.Terminated(from) THEN + (* forwarding operations is no longer useful *) + RETURN + END; + Resources.DependsOn(from, to); + + (* update the list of dependants for `to' *) + GetObjectDiscipline(to, odisc); + NEW(client); client.dependant := from; + client.next := odisc.dependants; odisc.dependants := client; + + (* call object-specific forwarders *) + CallForwarders(odisc.forwarders); + + LOOP (* go through the list of base types in descending order *) + IF Disciplines.Seek(type, typeDiscID, SYSTEM.VAL(Disciplines.Discipline, tdisc)) & (* noch *) + Services.IsExtensionOf(otherType, type) THEN + CallForwarders(tdisc.list); + END; + Services.GetBaseType(type, baseType); + IF baseType = NIL THEN EXIT END; + type := baseType; + END; + CallForwarders(genlist); + END Forward; + +BEGIN + genlist := NIL; + typeDiscID := Disciplines.Unique(); + objectDiscID := Disciplines.Unique(); +END ulmForwarders. diff --git a/src/lib/ulm/ulmIEEE.Mod b/src/lib/ulm/ulmIEEE.Mod new file mode 100644 index 00000000..c30b165f --- /dev/null +++ b/src/lib/ulm/ulmIEEE.Mod @@ -0,0 +1,138 @@ +(* Ulm's Oberon Library + Copyright (C) 1989-2005 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: IEEE.om,v 1.1 1994/02/23 07:45:22 borchert Exp $ + ---------------------------------------------------------------------------- + $Log: IEEE.om,v $ + Revision 1.1 1994/02/23 07:45:22 borchert + Initial revision + + ---------------------------------------------------------------------------- + AFB 7/89 + ---------------------------------------------------------------------------- +*) + +MODULE ulmIEEE; + + (* this module is portable as far as a IEEE floating point processor + is present + + implementation for the I386 architecture + + assumptions: + + {0} is the most significant bit + MAX(SET) = 31 + + double precision binary real format (REAL): + + 0 1..11 12 .. 63 + +-+-----+---------------+ + |S| exp | fraction | + +-+-----+---------------+ + + normalized numbers: min < exp < max + denormalized numbers: exp = 0 and nonzero mantissa + zero: exp = 0 and mantissa = 0 + infinity: exp = max and mantissa = 0 + not-a-number: exp = max and mantissa # 0 + *) + + IMPORT SYS := SYSTEM; + + CONST + (*patternlen = SYS.SIZE(LONGREAL) DIV SYS.SIZE(SET);*) + patternlen = SIZE(LONGREAL) DIV SIZE(SET); + + VAR + plusInfinity*: REAL; + minusInfinity*: REAL; + nan*: REAL; (* Not-A-Number *) + snan*: REAL; (* Signaling Not-A-Number *) + + (*PROCEDURE Convert(VAR from, to: ARRAY OF BYTE);*) + PROCEDURE Convert(VAR from, to: ARRAY OF SYS.BYTE); + VAR i: INTEGER; + BEGIN + i := 0; + WHILE i < LEN(to) DO + to[i] := from[i]; INC(i); + END; + END Convert; + + PROCEDURE Normalized*(real: LONGREAL) : BOOLEAN; + VAR pattern: ARRAY patternlen OF SET; + BEGIN + Convert(real, pattern); + pattern[1] := pattern[1] * {20..30}; + RETURN (pattern[1] # {}) & (pattern[1] # {20..30}) + END Normalized; + + PROCEDURE Valid*(real: LONGREAL) : BOOLEAN; + (* returns TRUE if real is normalized or denormalized + but FALSE for infinity and Not-A-Numbers + *) + VAR pattern: ARRAY patternlen OF SET; + BEGIN + Convert(real, pattern); + pattern[1] := pattern[1] * {20..30}; + RETURN pattern[1] # {20..30} + END Valid; + + PROCEDURE NotANumber*(real: LONGREAL) : BOOLEAN; + (* returns TRUE if real is a (signaling) Not-A-Number *) + VAR pattern: ARRAY patternlen OF SET; + BEGIN + Convert(real, pattern); + RETURN (pattern[1] * {20..30} = {20..30}) & + ((pattern[0] * {0..MAX(SET)} # {}) OR + (pattern[1] * {0..19} # {})) + END NotANumber; + + PROCEDURE SetReal(VAR real: REAL; + sign: BOOLEAN; expbits: BOOLEAN; + msb: BOOLEAN; otherbits: BOOLEAN); + VAR + pattern: ARRAY 2 OF SET; + + BEGIN + pattern[0] := {}; pattern[1] := {}; + IF sign THEN + INCL(pattern[1], 31); + END; + IF expbits THEN + pattern[1] := pattern[1] + {20..30}; + END; + IF msb THEN + INCL(pattern[1], 19); + END; + IF otherbits THEN + pattern[1] := pattern[1] + {0..18}; + pattern[0] := {0..MAX(SET)}; + END; + Convert(pattern, real); + END SetReal; + +BEGIN + (* sign exp msb mantissa *) + SetReal(plusInfinity, FALSE, TRUE, FALSE, FALSE); + SetReal(minusInfinity, TRUE, TRUE, FALSE, FALSE); + SetReal(nan, FALSE, TRUE, TRUE, TRUE); + SetReal(snan, FALSE, TRUE, FALSE, TRUE); +END ulmIEEE. diff --git a/src/lib/ulm/ulmObjects.Mod b/src/lib/ulm/ulmObjects.Mod new file mode 100644 index 00000000..09d55398 --- /dev/null +++ b/src/lib/ulm/ulmObjects.Mod @@ -0,0 +1,39 @@ +(* 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: Objects.om,v 1.1 1994/02/22 20:08:53 borchert Exp $ + ---------------------------------------------------------------------------- + $Log: Objects.om,v $ + Revision 1.1 1994/02/22 20:08:53 borchert + Initial revision + + ---------------------------------------------------------------------------- + AFB 6/89 + ---------------------------------------------------------------------------- +*) + +MODULE ulmObjects; + + (* common base of all record definitions of the library *) + + TYPE + Object* = POINTER TO ObjectRec; + ObjectRec* = RECORD END; + +END ulmObjects. diff --git a/src/lib/ulm/ulmPriorities.Mod b/src/lib/ulm/ulmPriorities.Mod new file mode 100644 index 00000000..e171907a --- /dev/null +++ b/src/lib/ulm/ulmPriorities.Mod @@ -0,0 +1,155 @@ +(* 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: Priorities.om,v 1.1 1994/02/22 20:09:33 borchert Exp $ + ---------------------------------------------------------------------------- + $Log: Priorities.om,v $ + Revision 1.1 1994/02/22 20:09:33 borchert + Initial revision + + ---------------------------------------------------------------------------- + AFB 9/89 + ---------------------------------------------------------------------------- +*) + +MODULE ulmPriorities; + + (* defines priority system per initialized variables; + all priorities needed by the Oberon-library (base, sys, and std) are + defined in this module; + + the original module of this definition can be copied + and modified to match the needs of a specific application; + + the default priority should range in [null..error); + setting the default priority to null allows to take advantage + of default error handling routines in small applications; + + the priority system must be open for extensions: + - each priority below defines a base value of a priority region; + the region size is defined by `region'; + e.g. legal library error priorities range from + liberrors to liberrors+region-1 + - gap defines the minimum distance between two priority regions + defined in this module + *) + + CONST + region* = 10; + gap* = 10; + + null* = 0; (* lowest priority possible; + this is not a legal priority for events + *) + + TYPE + Priority* = INTEGER; + + VAR + (* current priority at begin of execution (after init of Events); + this is the lowest priority possible during execution (>= null); + every event with priority less than `base' is ignored + automatically + *) + base*: Priority; + + (* default priority of events (if not changed by Events.SetPriority)*) + default*: Priority; + + (* priority of messages which do not indicate an error *) + message*: Priority; + + (* priority of system call errors *) + syserrors*: Priority; + + (* priority of library errors; + e.g. usage errors or failed system calls; + library errors should have higher priority than syserrors + *) + liberrors*: Priority; + + (* priority of assertions of library modules *) + assertions*: Priority; + + (* priority of (application) error messages or warnings *) + error*: Priority; + + (* priority of asynchronous interrupts like + break key, alarm clock, etc. + *) + interrupts*: Priority; + + (* priority of ``out of space'' events (SysStorage) *) + storage*: Priority; + + (* priority of run time errors *) + rtserrors*: Priority; + + (* priority of fatal errors (error message & exit) *) + fatal*: Priority; + + (* priority of fatal signals; + e.g. segmentation violation, alignment faults, illegal instructions; + these signals must not be ignored, and + event handlers must not return on such events + (this would cause an infinite loop) + *) + fatalsignals*: Priority; + + (* priority of bugs and (failed) assertions; + bugs are error messages followed by exit (with core dump if possible) + *) + bug*: Priority; + + (* priority of task switches are at very high priority to + allow the necessary bookkeeping + *) + taskswitch*: Priority; + + (* priority of exit and abort; + actions on this priority level should be minimized + and (if possible) error-free + *) + exit*: Priority; + + next: Priority; (* next legal priority value *) + + PROCEDURE Set(VAR base: Priority); + BEGIN + base := next; INC(next, region+gap); + END Set; + +BEGIN + next := null; + Set(base); + Set(default); + Set(message); + Set(syserrors); + Set(liberrors); + Set(assertions); + Set(error); + Set(interrupts); + Set(storage); + Set(rtserrors); + Set(fatal); + Set(fatalsignals); + Set(bug); + Set(taskswitch); + Set(exit); +END ulmPriorities. diff --git a/src/lib/ulm/ulmRelatedEvents.Mod b/src/lib/ulm/ulmRelatedEvents.Mod new file mode 100644 index 00000000..c470312a --- /dev/null +++ b/src/lib/ulm/ulmRelatedEvents.Mod @@ -0,0 +1,422 @@ +(* 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: RelatedEven.om,v 1.8 2005/04/28 08:30:09 borchert Exp $ + ---------------------------------------------------------------------------- + $Log: RelatedEven.om,v $ + Revision 1.8 2005/04/28 08:30:09 borchert + added assertion to Forward that takes care that from # to + (otherwise we get a nasty infinite loop) + + Revision 1.7 2004/09/09 21:04:24 borchert + undoing change of Revision 1.5: + fields dependants and dependson must not be subject of + Save/Restore as this makes it impossible to undo the + dependencies within the TerminationHandler + we no longer remove the discipline in case of terminated + objects as this causes a list of error events to be lost + + Revision 1.6 2004/02/18 17:01:59 borchert + Raise asserts now that event.type # NIL + + Revision 1.5 2004/02/18 16:53:48 borchert + fields dependants and dependson moved from discipline to state + object to support them for Save/Restore + + Revision 1.4 1998/01/12 14:39:18 borchert + some bug fixes around RelatedEvents.null + + Revision 1.3 1995/03/20 17:05:13 borchert + - Save & Restore added + - support for Forwarders & Resources added + + Revision 1.2 1994/08/27 14:49:44 borchert + null object added + + Revision 1.1 1994/02/22 20:09:53 borchert + Initial revision + + ---------------------------------------------------------------------------- + AFB 11/91 + ---------------------------------------------------------------------------- +*) + +MODULE ulmRelatedEvents; + + (* relate events to objects *) + + IMPORT Disciplines := ulmDisciplines, Events := ulmEvents, Forwarders := ulmForwarders, Objects := ulmObjects, Priorities := ulmPriorities, Resources := ulmResources, SYSTEM; + + CONST + (* possible directions of propagated events *) + forward = 0; (* forward along the forwardTo chain, if given *) + backward = 1; (* forward event to all dependants, if present *) + both = 2; (* forward event to both directions *) + TYPE + Direction = SHORTINT; (* forward, backward, both *) + + TYPE + Object* = Disciplines.Object; + Event* = POINTER TO EventRec; + EventRec* = + RECORD + (Events.EventRec) + object*: Object; + event*: Events.Event; + END; + Queue = POINTER TO QueueRec; + QueueRec* = + RECORD + (Objects.ObjectRec) + event*: Events.Event; + next*: Queue; + END; + ObjectList = POINTER TO ObjectListRec; + ObjectListRec = + RECORD + object: Object; + next: ObjectList; + END; + + TYPE + State = POINTER TO StateRec; + StateRec = + RECORD + default: BOOLEAN; (* default reaction? *) + eventType: Events.EventType; (* may be NIL *) + queue: BOOLEAN; (* are events to be queued? *) + forwardto: Object; + head, tail: Queue; + saved: State; + END; + Discipline = POINTER TO DisciplineRec; + DisciplineRec = + RECORD + (Disciplines.DisciplineRec) + state: State; + dependants: ObjectList; + dependsOn: Object; + END; + VAR + id: Disciplines.Identifier; + VAR + null*: Object; (* object which ignores all related events *) + nullevent: Events.EventType; + + PROCEDURE RemoveDependant(VAR list: ObjectList; dependant: Object); + VAR + prev, p: ObjectList; + BEGIN + prev := NIL; p := list; + WHILE (p # NIL) & (p.object # dependant) DO + prev := p; p := p.next; + END; + IF p # NIL THEN + IF prev = NIL THEN + list := p.next; + ELSE + prev.next := p.next; + END; + END; + END RemoveDependant; + + PROCEDURE TerminationHandler(event: Events.Event); + VAR + disc: Discipline; + BEGIN + WITH event: Resources.Event DO + IF (event.change = Resources.terminated) & + Disciplines.Seek(event.resource, id, SYSTEM.VAL(Disciplines.Discipline, disc)) THEN (* noch *) + IF (disc.dependsOn # NIL) & + Disciplines.Seek(disc.dependsOn, id, SYSTEM.VAL(Disciplines.Discipline, disc)) THEN (* noch *) + RemoveDependant(disc.dependants, event.resource); + disc.dependsOn := NIL; + END; + (* + afb 9/2004: + do not remove this discipline for dead objects + as this makes it impossible to retrieve the final + list of error events + Disciplines.Remove(event.resource, id); + *) + END; + END; + END TerminationHandler; + + PROCEDURE CreateState(VAR state: State); + BEGIN + NEW(state); + state.eventType := NIL; + state.queue := FALSE; state.head := NIL; state.tail := NIL; + state.forwardto := NIL; + state.default := TRUE; + state.saved := NIL; + END CreateState; + + PROCEDURE CreateDiscipline(VAR disc: Discipline); + BEGIN + NEW(disc); disc.id := id; CreateState(disc.state); + END CreateDiscipline; + + PROCEDURE GetEventType*(object: Object; VAR eventType: Events.EventType); + (* returns an event type for the given object; + all events related to the object are also handled by this event type + *) + VAR + disc: Discipline; + state: State; + BEGIN + IF object = null THEN + eventType := nullevent; + ELSE + IF ~Disciplines.Seek(object, id, SYSTEM.VAL(Disciplines.Discipline, disc)) THEN (* noch *) + CreateDiscipline(disc); + Disciplines.Add(object, disc); + END; + state := disc.state; + state.default := FALSE; + IF state.eventType = NIL THEN + Events.Define(state.eventType); + Events.SetPriority(state.eventType, Priorities.liberrors + 1); + Events.Ignore(state.eventType); + END; + eventType := state.eventType; + END; + END GetEventType; + + PROCEDURE Forward*(from, to: Object); + (* causes all events related to `from' to be forwarded to `to' *) + VAR + disc: Discipline; + BEGIN + IF (from # NIL) & (from # null) THEN + ASSERT(from # to); + IF ~Disciplines.Seek(from, id, SYSTEM.VAL(Disciplines.Discipline, disc)) THEN (* noch *) + CreateDiscipline(disc); + Disciplines.Add(from, disc); + END; + IF to = null THEN + to := NIL; + END; + disc.state.forwardto := to; + disc.state.default := FALSE; + END; + END Forward; + + PROCEDURE ForwardToDependants(from, to: Forwarders.Object); + (* is called by Forwarders.Forward: + build a backward chain from `to' to `from' + *) + VAR + fromDisc, toDisc: Discipline; + member: ObjectList; + eventType: Events.EventType; + BEGIN + IF (from = null) OR (to = null) THEN RETURN END; + IF ~Disciplines.Seek(from, id, SYSTEM.VAL(Disciplines.Discipline, fromDisc)) THEN (* noch *) + CreateDiscipline(fromDisc); Disciplines.Add(from, fromDisc); + END; + IF fromDisc.dependsOn # NIL THEN RETURN END; + fromDisc.dependsOn := to; + Resources.TakeInterest(from, eventType); + Events.Handler(eventType, TerminationHandler); + + IF ~Disciplines.Seek(to, id, SYSTEM.VAL(Disciplines.Discipline, toDisc)) THEN (* noch *) + CreateDiscipline(toDisc); Disciplines.Add(to, toDisc); + END; + NEW(member); member.object := from; + member.next := toDisc.dependants; toDisc.dependants := member; + END ForwardToDependants; + + PROCEDURE QueueEvents*(object: Object); + (* put all incoming events into a queue *) + VAR + disc: Discipline; + state: State; + BEGIN + IF (object # NIL) & (object # null) THEN + IF ~Disciplines.Seek(object, id, SYSTEM.VAL(Disciplines.Discipline, disc)) THEN + CreateDiscipline(disc); + Disciplines.Add(object, disc); + END; + state := disc.state; + state.default := FALSE; + IF ~state.queue THEN + state.queue := TRUE; state.head := NIL; state.tail := NIL; + END; + END; + END QueueEvents; + + PROCEDURE GetQueue*(object: Object; VAR queue: Queue); + (* return queue of related events which is removed + from the object; + object must have been prepared by QueueEvents + *) + VAR + disc: Discipline; + state: State; + BEGIN + IF (object # NIL) & (object # null) & + Disciplines.Seek(object, id, SYSTEM.VAL(Disciplines.Discipline, disc)) & disc.state.queue THEN (* noch *) + state := disc.state; + queue := state.head; state.head := NIL; state.tail := NIL; + ELSE + queue := NIL; + END; + END GetQueue; + + PROCEDURE EventsPending*(object: Object) : BOOLEAN; + (* return TRUE if GetQueue will return a queue # NIL *) + VAR + disc: Discipline; + BEGIN + IF (object # NIL) & (object # null) & + Disciplines.Seek(object, id, SYSTEM.VAL(Disciplines.Discipline, disc)) & disc.state.queue THEN (* noch *) + RETURN disc.state.head # NIL + ELSE + RETURN FALSE + END; + END EventsPending; + + PROCEDURE Reset*(object: Object); + (* return to default behaviour *) + VAR + disc: Discipline; + state: State; + BEGIN + IF object # null THEN + IF Disciplines.Seek(object, id, SYSTEM.VAL(Disciplines.Discipline, disc)) THEN (* noch *) + IF (disc.state.saved = NIL) & + (disc.dependsOn = NIL) & + (disc.dependants = NIL) THEN + Disciplines.Remove(object, id); + ELSE + state := disc.state; + state.queue := FALSE; state.head := NIL; state.tail := NIL; + state.eventType := NIL; state.forwardto := NIL; + state.default := TRUE; + END; + END; + END; + END Reset; + + PROCEDURE Save*(object: Object); + (* save current status of the given object and reset to + default behaviour; + the status includes the reaction types and event queues; + Save operations may be nested + *) + VAR + disc: Discipline; + state: State; + BEGIN + IF object # null THEN + IF ~Disciplines.Seek(object, id, SYSTEM.VAL(Disciplines.Discipline, disc)) THEN (* noch *) + CreateDiscipline(disc); + Disciplines.Add(object, disc); + END; + CreateState(state); + state.saved := disc.state; disc.state := state; + END; + END Save; + + PROCEDURE Restore*(object: Object); + (* restore status saved earlier by Save *) + VAR + disc: Discipline; + BEGIN + IF Disciplines.Seek(object, id, SYSTEM.VAL(Disciplines.Discipline, disc)) & (disc.state.saved # NIL) THEN (* noch *) + disc.state := disc.state.saved; + END; + END Restore; + + PROCEDURE InternalRaise(object: Object; dir: Direction; event: Events.Event); + VAR + disc: Discipline; + state: State; + relEvent: Event; + element: Queue; (* new element of queue *) + dependant: ObjectList; + BEGIN + IF (object = null) OR ~Disciplines.Seek(object, id, SYSTEM.VAL(Disciplines.Discipline, disc)) THEN RETURN END; + + (* backward chaining *) + IF (disc.dependants # NIL) & (dir IN {backward, both}) THEN + dependant := disc.dependants; + WHILE dependant # NIL DO + InternalRaise(dependant.object, backward, event); + dependant := dependant.next; + END; + END; + + (* local handling & forward chaining *) + IF ~disc.state.default THEN + state := disc.state; + IF state.queue THEN + NEW(element); element.next := NIL; element.event := event; + IF state.tail # NIL THEN + state.tail.next := element; + ELSE + state.head := element; + END; + state.tail := element; + END; + IF state.eventType # NIL THEN + NEW(relEvent); + relEvent.message := event.message; + relEvent.type := state.eventType; + relEvent.object := object; + relEvent.event := event; + Events.Raise(relEvent); + END; + IF (state.forwardto # NIL) & (dir IN {both, forward}) THEN + InternalRaise(state.forwardto, forward, event); + END; + END; + END InternalRaise; + + PROCEDURE Raise*(object: Object; event: Events.Event); + VAR + disc: Discipline; + BEGIN + ASSERT(event.type # NIL); + IF object # null THEN + IF (object = NIL) OR ~Disciplines.Seek(object, id, SYSTEM.VAL(Disciplines.Discipline, disc)) THEN (* noch *) + Events.Raise(event); + ELSE + InternalRaise(object, both, event); + END; + END; + END Raise; + + PROCEDURE AppendQueue*(object: Object; queue: Queue); + (* Raise(object, event) for all events of the queue *) + BEGIN + WHILE queue # NIL DO + Raise(object, queue.event); + queue := queue.next; + END; + END AppendQueue; + +BEGIN + id := Disciplines.Unique(); + NEW(null); + Events.Define(nullevent); + Forwarders.Register("", ForwardToDependants); +END ulmRelatedEvents. diff --git a/src/lib/ulm/ulmResources.Mod b/src/lib/ulm/ulmResources.Mod new file mode 100644 index 00000000..08b9ae20 --- /dev/null +++ b/src/lib/ulm/ulmResources.Mod @@ -0,0 +1,354 @@ +(* 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: Resources.om,v 1.2 1998/03/24 22:51:29 borchert Exp $ + ---------------------------------------------------------------------------- + $Log: Resources.om,v $ + Revision 1.2 1998/03/24 22:51:29 borchert + bug fix: do not create a relationship to dead or unreferenced objects + but propagate terminations immediately to dependants + + Revision 1.1 1996/01/04 16:44:44 borchert + Initial revision + + ---------------------------------------------------------------------------- +*) + +MODULE ulmResources; + + (* general interface for objects which are shared and need + some cooperative termination/cleanup handling + *) + + IMPORT Disciplines := ulmDisciplines, Events := ulmEvents, Objects := ulmObjects, SYSTEM; + + TYPE + Resource* = Disciplines.Object; + + (* notification of state changes: + initially, resources are alive; + later the communication to an object may be temporarily + stopped (communicationStopped) and resumed (communicationResumed) -- + the effect of calling operations during the communicationStopped + state is undefined: possible variants are (1) immediate failure + and (2) being blocked until the state changes to communicationResumed; + unreferenced objects are still alive but no longer in use by + our side -- some cleanup actions may be associated with this state change; + terminated objects are no longer alive and all operations for + them will fail + *) + CONST + (* state changes *) + terminated* = 0; + unreferenced* = 1; + communicationStopped* = 2; + communicationResumed* = 3; + (* states *) + alive = 4; (* private extension *) + TYPE + StateChange* = SHORTINT; (* terminated..communicationResumed *) + State = SHORTINT; (* alive, unreferenced, or alive *) + (* whether objects are stopped or not is maintained separately *) + Event* = POINTER TO EventRec; (* notification of state changes *) + EventRec* = + RECORD + (Events.EventRec) + change*: StateChange; (* new state *) + resource*: Resource; + END; + + TYPE + Key* = POINTER TO KeyRec; + KeyRec* = + RECORD + (Objects.ObjectRec) + valid: BOOLEAN; + resource: Resource; + END; + + TYPE + List = POINTER TO ListRec; + ListRec = + RECORD + resource: Resource; + next: List; + END; + Discipline = POINTER TO DisciplineRec; + DisciplineRec = + RECORD + (Disciplines.DisciplineRec) + state: State; (* alive, unreferenced, or terminated *) + stopped: BOOLEAN; (* may be TRUE, if alive or unreferenced *) + refcnt: LONGINT; (* # of Attach - # of Detach *) + eventType: Events.EventType; (* may be NIL *) + dependants: List; (* list of resources which depends on us *) + dependsOn: Resource; (* we depend on this resource *) + key: Key; (* attach key for dependsOn *) + END; + VAR + discID: Disciplines.Identifier; + + (* === private procedures ============================================ *) + + PROCEDURE GetDisc(resource: Resource; VAR disc: Discipline); + BEGIN + (*IF ~Disciplines.Seek(resource, discID, disc) THEN*) + (* this line causes error + err 123 type of actual parameter is not identical with that of formal VAR-parameter + because Discipline defined in this module is an extention of the same type in module Disciplines + Disciplines.Seek expects Disciplines.Discipline, not the extended type. + voc (ofront, OP2, as well as oo2c) behaves right by not allowing this, while Ulm's Oberon system + accepts this. + So we introduce here a workaround, which makes usage of this module unsafe; + + noch + *) + IF ~Disciplines.Seek(resource, discID, SYSTEM.VAL(Disciplines.Discipline, disc)) THEN (* noch *) + NEW(disc); disc.id := discID; + disc.state := alive; disc.refcnt := 0; + disc.eventType := NIL; + disc.dependants := NIL; disc.dependsOn := NIL; + Disciplines.Add(resource, disc); + END; + END GetDisc; + + PROCEDURE GenEvent(resource: Resource; change: StateChange); + VAR + disc: Discipline; + event: Event; + BEGIN + GetDisc(resource, disc); + IF disc.eventType # NIL THEN + NEW(event); + event.type := disc.eventType; + event.message := "Resources: state change notification"; + event.change := change; + event.resource := resource; + Events.Raise(event); + END; + END GenEvent; + + PROCEDURE ^ Detach*(resource: Resource; key: Key); + + PROCEDURE Unlink(dependant, resource: Resource); + (* undo DependsOn operation *) + VAR + dependantDisc, resourceDisc: Discipline; + prev, member: List; + BEGIN + GetDisc(resource, resourceDisc); + IF resourceDisc.state = terminated THEN + (* no necessity for clean up *) + RETURN + END; + GetDisc(dependant, dependantDisc); + + prev := NIL; member := resourceDisc.dependants; + WHILE member.resource # dependant DO + prev := member; member := member.next; + END; + IF prev = NIL THEN + resourceDisc.dependants := member.next; + ELSE + prev.next := member.next; + END; + + (* Detach reference from dependant to resource *) + Detach(dependantDisc.dependsOn, dependantDisc.key); + dependantDisc.dependsOn := NIL; dependantDisc.key := NIL; + END Unlink; + + PROCEDURE InternalNotify(resource: Resource; change: StateChange); + VAR + disc: Discipline; + event: Event; + dependant: List; + BEGIN + GetDisc(resource, disc); + CASE change OF + | communicationResumed: disc.stopped := FALSE; + | communicationStopped: disc.stopped := TRUE; + | terminated: disc.stopped := FALSE; disc.state := terminated; + END; + GenEvent(resource, change); + + (* notify all dependants *) + dependant := disc.dependants; + WHILE dependant # NIL DO + InternalNotify(dependant.resource, change); + dependant := dependant.next; + END; + + (* remove dependency relation in case of termination, if present *) + IF (change = terminated) & (disc.dependsOn # NIL) THEN + Unlink(resource, disc.dependsOn); + END; + END InternalNotify; + + (* === exported procedures =========================================== *) + + PROCEDURE TakeInterest*(resource: Resource; VAR eventType: Events.EventType); + (* return resource specific event type for state notifications; + eventType is guaranteed to be # NIL even if + the given resource is already terminated + *) + VAR + disc: Discipline; + BEGIN + GetDisc(resource, disc); + IF disc.eventType = NIL THEN + Events.Define(disc.eventType); + Events.Ignore(disc.eventType); + END; + eventType := disc.eventType; + END TakeInterest; + + PROCEDURE Attach*(resource: Resource; VAR key: Key); + (* mark the resource as being used until Detach gets called *) + VAR + disc: Discipline; + BEGIN + GetDisc(resource, disc); + IF disc.state IN {terminated, unreferenced} THEN + key := NIL; + ELSE + INC(disc.refcnt); NEW(key); key.valid := TRUE; + key.resource := resource; + END; + END Attach; + + PROCEDURE Detach*(resource: Resource; key: Key); + (* mark the resource as unused; the returned key of Attach must + be given -- this allows to check for proper balances + of Attach/Detach calls; + the last Detach operation causes a state change to unreferenced + *) + VAR + disc: Discipline; + BEGIN + IF (key # NIL) & key.valid & (key.resource = resource) THEN + GetDisc(resource, disc); + IF disc.state # terminated THEN + key.valid := FALSE; DEC(disc.refcnt); + IF disc.refcnt = 0 THEN + GenEvent(resource, unreferenced); + disc.state := unreferenced; + IF disc.dependsOn # NIL THEN + Unlink(resource, disc.dependsOn); + END; + END; + END; + END; + END Detach; + + PROCEDURE Notify*(resource: Resource; change: StateChange); + (* notify all interested parties about the new state; + only valid state changes are accepted: + - Notify doesn't accept any changes after termination + - unreferenced is generated conditionally by Detach only + - communicationResumed is valid after communicationStopped only + valid notifications are propagated to all dependants (see below); + *) + VAR + disc: Discipline; + event: Event; + dependant: List; + BEGIN + IF change # unreferenced THEN + GetDisc(resource, disc); + IF (disc.state # terminated) & (disc.state # change) & + ((change # communicationResumed) OR disc.stopped) THEN + InternalNotify(resource, change); + END; + END; + END Notify; + + PROCEDURE DependsOn*(dependant, resource: Resource); + (* states that `dependant' depends entirely on `resource' -- + this is usually the case if operations on `dependant' + are delegated to `resource'; + only one call of DependsOn may be given per `dependant' while + several DependsOn for one resource are valid; + DependsOn calls implicitly Attach for resource and + detaches if the dependant becomes unreferenced; + all other state changes propagate from `resource' to + `dependant' + *) + VAR + dependantDisc, resourceDisc: Discipline; + member: List; + BEGIN + GetDisc(resource, resourceDisc); + IF resourceDisc.state <= unreferenced THEN + (* do not create a relationship to dead or unreferenced objects + but propagate a termination immediately to dependant + *) + IF resourceDisc.state = terminated THEN + Notify(dependant, resourceDisc.state); + END; + RETURN + END; + + GetDisc(dependant, dependantDisc); + IF dependantDisc.dependsOn # NIL THEN + (* don't accept changes *) + RETURN + END; + dependantDisc.dependsOn := resource; + + NEW(member); member.resource := dependant; + member.next := resourceDisc.dependants; + resourceDisc.dependants := member; + Attach(resource, dependantDisc.key); + END DependsOn; + + PROCEDURE Alive*(resource: Resource) : BOOLEAN; + (* returns TRUE if the resource is not yet terminated + and ready for communication (i.e. not communicationStopped) + *) + VAR + disc: Discipline; + BEGIN + GetDisc(resource, disc); + RETURN ~disc.stopped & (disc.state IN {alive, unreferenced}) + END Alive; + + PROCEDURE Stopped*(resource: Resource) : BOOLEAN; + (* returns TRUE if the object is currently not responsive + and not yet terminated + *) + VAR + disc: Discipline; + BEGIN + GetDisc(resource, disc); + RETURN disc.stopped + END Stopped; + + PROCEDURE Terminated*(resource: Resource) : BOOLEAN; + (* returns TRUE if the resource is terminated *) + VAR + disc: Discipline; + BEGIN + GetDisc(resource, disc); + RETURN disc.state = terminated + END Terminated; + +BEGIN + discID := Disciplines.Unique(); +END ulmResources. diff --git a/src/lib/ulm/ulmSYSTEM.Mod b/src/lib/ulm/ulmSYSTEM.Mod new file mode 100644 index 00000000..62583384 --- /dev/null +++ b/src/lib/ulm/ulmSYSTEM.Mod @@ -0,0 +1,54 @@ +MODULE ulmSYSTEM; +IMPORT SYSTEM(*, ulmObjects, ulmDisciplines, Console*); + + +(* test *) +(* +VAR d0, d1 : ulmDisciplines.Discipline; +*) + + (* noch *) +(* PROCEDURE -getaddr*(obj: ulmObjects.Object): LONGINT + "(LONGINT)&obj";*) +(* + PROCEDURE -assignObjectPointers* (VAR src, dst : ulmObjects.Object) + "*dst=*src"; + + PROCEDURE assignObjectPointer*(src, dst : ulmObjects.Object); + BEGIN + assignObjectPointers(src, dst); + END assignObjectPointer; + + PROCEDURE assignDisciplinePointer (src, dst : ulmDisciplines.Discipline); + BEGIN + assignObjectPointers(src, dst); + END assignDisciplinePointer; +*) + PROCEDURE TAS*(VAR flag:BOOLEAN): BOOLEAN; (* added for compatibility with ulmSYSTEM module; noch *) + VAR oldflag : BOOLEAN; + BEGIN + oldflag := flag; + flag := TRUE; + RETURN oldflag; + END TAS; + + +(* +BEGIN +NEW (d0); +NEW (d1); + + +d0.id := 0; +d1.id := 1; +Console.String ("d0.id=");Console.Int (d0.id, 0); Console.Ln; +Console.String ("d1.id=");Console.Int (d1.id, 0); Console.Ln; +(* +assignDisciplinePointer(d0, d1); +*) +Console.String ("d0.id=");Console.Int (d0.id, 0); Console.Ln; +Console.String ("d1.id=");Console.Int (d1.id, 0); Console.Ln; + + +*) +END ulmSYSTEM. diff --git a/src/lib/ulm/ulmServices.Mod b/src/lib/ulm/ulmServices.Mod new file mode 100644 index 00000000..3b804e4f --- /dev/null +++ b/src/lib/ulm/ulmServices.Mod @@ -0,0 +1,520 @@ +(* 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: Services.om,v 1.2 2004/09/03 09:34:24 borchert Exp $ + ---------------------------------------------------------------------------- + $Log: Services.om,v $ + Revision 1.2 2004/09/03 09:34:24 borchert + cache results of LoadService to avoid further attempts + + Revision 1.1 1995/03/03 09:32:15 borchert + Initial revision + + ---------------------------------------------------------------------------- +*) + +MODULE ulmServices; + + IMPORT Disciplines := ulmDisciplines, Objects := ulmObjects; + + TYPE + Type* = POINTER TO TypeRec; + ServiceList = POINTER TO ServiceListRec; + Service* = POINTER TO ServiceRec; + Object* = POINTER TO ObjectRec; + ObjectRec* = + RECORD + (Disciplines.ObjectRec) + type: Type; + installed: ServiceList; (* set of installed services *) + END; + + InstallProc = PROCEDURE (object: Object; service: Service); + + ServiceRec* = + RECORD + (Disciplines.ObjectRec) + name: ARRAY 64 OF CHAR; + next: Service; + END; + + ServiceListRec = + RECORD + service: Service; + type: Type; + install: InstallProc; + next: ServiceList; + END; + + VAR + services: Service; + (* list of services -- needed to support Seek *) + + TYPE + LoadModuleProc* = PROCEDURE (module: ARRAY OF CHAR) : BOOLEAN; + LoadServiceProc* = PROCEDURE (service, for: ARRAY OF CHAR) : BOOLEAN; + LoaderInterface* = POINTER TO LoaderInterfaceRec; + LoaderInterfaceRec* = + RECORD + loadModule*: LoadModuleProc; + loadService*: LoadServiceProc; + END; + VAR + loaderIF: LoaderInterface; + + (* ==== name tables ================================================== *) + + CONST + bufsize = 512; (* length of a name buffer in bytes *) + tabsize = 1171; + TYPE + BufferPosition = INTEGER; + Length = LONGINT; + HashValue = INTEGER; + Buffer = ARRAY bufsize OF CHAR; + NameList = POINTER TO NameListRec; + NameListRec = + RECORD + buffer: Buffer; + next: NameList; + END; + VAR + currentBuf: NameList; currentPos: BufferPosition; + TYPE + TypeRec* = + RECORD + (Disciplines.ObjectRec) + baseType: Type; + services: ServiceList; + cachedservices: ServiceList; (* of base types *) + (* table management *) + hashval: HashValue; + length: Length; + begin: NameList; + pos: BufferPosition; + next: Type; (* next type with same hash value *) + END; + BucketTable = ARRAY tabsize OF Type; + VAR + bucket: BucketTable; + + (* ==== name table management ======================================== *) + + PROCEDURE Hash(name: ARRAY OF CHAR; length: LONGINT) : HashValue; + CONST + shift = 4; + VAR + index: LONGINT; + val: LONGINT; + ch: CHAR; + ordval: INTEGER; + BEGIN + index := 0; val := length; + WHILE index < length DO + ch := name[index]; + IF ch >= " " THEN + ordval := ORD(ch) - ORD(" "); + ELSE + ordval := ORD(MAX(CHAR)) - ORD(" ") + ORD(ch); + END; + val := ASH(val, shift) + ordval; + INC(index); + END; + val := val MOD tabsize; + RETURN SHORT(val) + END Hash; + + PROCEDURE CreateBuf(VAR buf: NameList); + BEGIN + NEW(buf); buf.next := NIL; + IF currentBuf # NIL THEN + currentBuf.next := buf; + END; + currentBuf := buf; + currentPos := 0; + END CreateBuf; + + PROCEDURE StringLength(string: ARRAY OF CHAR) : LONGINT; + VAR + index: LONGINT; + BEGIN + index := 0; + WHILE (index < LEN(string)) & (string[index] # 0X) DO + INC(index); + END; + RETURN index + END StringLength; + + PROCEDURE InitName(name: Type; string: ARRAY OF CHAR); + VAR + index, length: LONGINT; + firstbuf, buf: NameList; + startpos: BufferPosition; + BEGIN + IF currentBuf = NIL THEN + CreateBuf(buf); + ELSE + buf := currentBuf; + END; + + firstbuf := buf; startpos := currentPos; + index := 0; + WHILE (index < LEN(string)) & (string[index] # 0X) DO + IF currentPos = bufsize THEN + CreateBuf(buf); + END; + buf.buffer[currentPos] := string[index]; INC(currentPos); + INC(index); + END; + length := index; + + name.hashval := Hash(string, length); + name.length := length; + name.begin := firstbuf; + name.pos := startpos; + name.next := bucket[name.hashval]; + bucket[name.hashval] := name; + END InitName; + + PROCEDURE EqualName(name: Type; string: ARRAY OF CHAR) : BOOLEAN; + (* precondition: both have the same length *) + VAR + index: LONGINT; + buf: NameList; + pos: INTEGER; + BEGIN + buf := name.begin; pos := name.pos; + index := 0; + WHILE index < name.length DO + IF pos = bufsize THEN + buf := buf.next; pos := 0; + END; + IF string[index] # buf.buffer[pos] THEN + RETURN FALSE + END; + INC(pos); + INC(index); + END; + RETURN TRUE + END EqualName; + + PROCEDURE SeekName(string: ARRAY OF CHAR; VAR name: Type) : BOOLEAN; + VAR + length: LONGINT; + hashval: HashValue; + p: Type; + BEGIN + length := StringLength(string); + hashval := Hash(string, length); + p := bucket[hashval]; + WHILE (p # NIL) & ((length # p.length) OR ~EqualName(p, string)) DO + p := p.next; + END; + name := p; + RETURN p # NIL + END SeekName; + + PROCEDURE ExtractName(name: Type; VAR string: ARRAY OF CHAR); + VAR + index: LONGINT; + buf: NameList; + pos: INTEGER; + BEGIN + buf := name.begin; pos := name.pos; + index := 0; + WHILE (index + 1 < LEN(string)) & (index < name.length) DO + IF pos = bufsize THEN + buf := buf.next; pos := 0; + END; + string[index] := buf.buffer[pos]; + INC(pos); + INC(index); + END; + string[index] := 0X; + END ExtractName; + + PROCEDURE LoadModule(module: ARRAY OF CHAR) : BOOLEAN; + BEGIN + IF (loaderIF # NIL) & (loaderIF.loadModule # NIL) THEN + RETURN loaderIF.loadModule(module) + ELSE + RETURN FALSE + END; + END LoadModule; + + PROCEDURE LoadService(service, for: ARRAY OF CHAR) : BOOLEAN; + BEGIN + IF (loaderIF # NIL) & (loaderIF.loadService # NIL) THEN + RETURN loaderIF.loadService(service, for) + ELSE + RETURN FALSE + END; + END LoadService; + + PROCEDURE MemberOf(list: ServiceList; service: Service; + VAR member: ServiceList) : BOOLEAN; + VAR + p: ServiceList; + BEGIN + p := list; + WHILE (p # NIL) & (p.service # service) DO + p := p.next; + END; + member := p; + RETURN p # NIL + END MemberOf; + + PROCEDURE SeekService(type: Type; service: Service; + VAR member: ServiceList; + VAR baseType: Type) : BOOLEAN; + + VAR + btype: Type; + cachedservice: ServiceList; + + PROCEDURE Seek(type: Type; service: Service; + VAR member: ServiceList) : BOOLEAN; + VAR + typeName: ARRAY 512 OF CHAR; + BEGIN + IF MemberOf(type.services, service, member) OR + MemberOf(type.cachedservices, service, member) THEN + RETURN TRUE + END; + ExtractName(type, typeName); + RETURN LoadService(service.name, typeName) & + MemberOf(type.services, service, member) + END Seek; + + BEGIN (* SeekService *) + btype := type; + WHILE (btype # NIL) & ~Seek(btype, service, member) DO + btype := btype.baseType; + END; + IF (member # NIL) & (btype # type) THEN + (* cache result to avoid further tries to load + a more fitting variant dynamically + *) + NEW(cachedservice); + cachedservice.service := service; + cachedservice.type := member.type; + cachedservice.install := member.install; + cachedservice.next := type.cachedservices; + type.cachedservices := cachedservice; + baseType := member.type; + RETURN TRUE + END; + IF member = NIL THEN + RETURN FALSE + ELSE + baseType := member.type; + RETURN TRUE + END; + END SeekService; + + PROCEDURE GetModule(name: ARRAY OF CHAR; VAR module: ARRAY OF CHAR); + (* get the name of the module where 'name' was defined *) + VAR + index: INTEGER; + BEGIN + index := 0; + WHILE (name[index] # ".") & (name[index] # 0X) & + (index < LEN(module)-1) DO + module[index] := name[index]; INC(index); + END; + module[index] := 0X; + END GetModule; + + (* ==== exported procedures ========================================== *) + + PROCEDURE InitLoader*(if: LoaderInterface); + BEGIN + ASSERT((loaderIF = NIL) & (if # NIL)); + loaderIF := if; + END InitLoader; + + PROCEDURE InitType*(type: Type; name, baseName: ARRAY OF CHAR); + VAR + baseType: Type; + otherType: Type; + ok: BOOLEAN; + BEGIN + IF baseName = "" THEN + baseType := NIL; + ELSE + ok := SeekName(baseName, baseType); ASSERT(ok); + END; + ASSERT(~SeekName(name, otherType)); + InitName(type, name); + type.baseType := baseType; + type.services := NIL; + type.cachedservices := NIL; + END InitType; + + PROCEDURE CreateType*(VAR type: Type; name, baseName: ARRAY OF CHAR); + BEGIN + NEW(type); InitType(type, name, baseName); + END CreateType; + + PROCEDURE Init*(object: Object; type: Type); + BEGIN + ASSERT(type # NIL); + ASSERT(object.type = NIL); + object.type := type; + object.installed := NIL; + END Init; + + PROCEDURE GetType*(object: Object; VAR type: Type); + BEGIN + type := object.type; + END GetType; + + PROCEDURE GetTypeName*(type: Type; VAR name: ARRAY OF CHAR); + BEGIN + ExtractName(type, name); + END GetTypeName; + + PROCEDURE GetBaseType*(type: Type; VAR baseType: Type); + BEGIN + baseType := type.baseType; + END GetBaseType; + + PROCEDURE IsExtensionOf*(type, baseType: Type) : BOOLEAN; + BEGIN + ASSERT(baseType # NIL); + WHILE (type # NIL) & (type # baseType) DO + type := type.baseType; + END; + RETURN type = baseType + END IsExtensionOf; + + PROCEDURE SeekType*(name: ARRAY OF CHAR; VAR type: Type); + VAR + module: ARRAY 64 OF CHAR; + BEGIN + IF ~SeekName(name, type) THEN + (* try to load the associated module *) + GetModule(name, module); + IF ~LoadModule(module) OR ~SeekName(name, type) THEN + type := NIL; + END; + END; + END SeekType; + + PROCEDURE Seek*(name: ARRAY OF CHAR; VAR service: Service); + BEGIN + service := services; + WHILE (service # NIL) & (service.name # name) DO + service := service.next; + END; + + (* try to load a module named after `name', if not successful *) + IF (service = NIL) & LoadModule(name) THEN + service := services; + WHILE (service # NIL) & (service.name # name) DO + service := service.next; + END; + END; + END Seek; + + PROCEDURE Create*(VAR service: Service; name: ARRAY OF CHAR); + + PROCEDURE Created(name: ARRAY OF CHAR) : BOOLEAN; + VAR + service: Service; + BEGIN + service := services; + WHILE (service # NIL) & (service.name # name) DO + service := service.next; + END; + RETURN service # NIL + END Created; + + BEGIN + ASSERT(~Created(name)); + NEW(service); + COPY(name, service.name); + service.next := services; services := service; + END Create; + + PROCEDURE Define*(type: Type; service: Service; install: InstallProc); + VAR + member: ServiceList; + BEGIN + ASSERT(service # NIL); + (* protect against multiple definitions: *) + ASSERT(~MemberOf(type.services, service, member)); + + NEW(member); member.service := service; + member.install := install; member.type := type; + member.next := type.services; type.services := member; + END Define; + + PROCEDURE Install*(object: Object; service: Service) : BOOLEAN; + VAR + member, installed: ServiceList; + baseType: Type; + BEGIN + IF object.type = NIL THEN RETURN FALSE END; + IF ~SeekService(object.type, service, member, baseType) THEN + (* service not supported for this object type *) + RETURN FALSE + END; + IF ~MemberOf(object.installed, service, installed) THEN + (* install services only once *) + IF member.install # NIL THEN + member.install(object, service); + END; + NEW(installed); + installed.service := service; + installed.next := object.installed; + object.installed := installed; + END; + RETURN TRUE + END Install; + + PROCEDURE Supported*(object: Object; service: Service) : BOOLEAN; + VAR + member: ServiceList; + baseType: Type; + BEGIN + RETURN (object.type # NIL) & + SeekService(object.type, service, member, baseType) + END Supported; + + PROCEDURE Installed*(object: Object; service: Service) : BOOLEAN; + VAR + member: ServiceList; + BEGIN + RETURN MemberOf(object.installed, service, member) + END Installed; + + PROCEDURE GetSupportedBaseType*(object: Object; service: Service; + VAR baseType: Type); + VAR + member: ServiceList; + BEGIN + IF ~SeekService(object.type, service, member, baseType) THEN + baseType := NIL; + END; + END GetSupportedBaseType; + +BEGIN + currentBuf := NIL; currentPos := 0; loaderIF := NIL; +END ulmServices. diff --git a/src/lib/ulm/ulmSets.Mod b/src/lib/ulm/ulmSets.Mod new file mode 100644 index 00000000..d70d21e9 --- /dev/null +++ b/src/lib/ulm/ulmSets.Mod @@ -0,0 +1,208 @@ +(* 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: Sets.om,v 1.3 1999/06/06 06:44:56 borchert Exp $ + ---------------------------------------------------------------------------- + $Log: Sets.om,v $ + Revision 1.3 1999/06/06 06:44:56 borchert + bug fix: CharSet was too small + + Revision 1.2 1995/03/16 16:25:33 borchert + assertions of Assertions replaced by real assertions + + Revision 1.1 1994/02/22 20:10:14 borchert + Initial revision + + ---------------------------------------------------------------------------- + AFB 9/89 + ---------------------------------------------------------------------------- +*) + +MODULE ulmSets; + + CONST + setsize* = MAX(SET) + 1; + + TYPE + CharSet* = ARRAY ORD(MAX(CHAR)) + 1 DIV setsize OF SET; + + PROCEDURE InitSet*(VAR set: ARRAY OF SET); + VAR i: LONGINT; + BEGIN + i := 0; + WHILE i < LEN(set) DO + set[i] := {}; INC(i); + END; + END InitSet; + + PROCEDURE Complement*(VAR set: ARRAY OF SET); + VAR i: LONGINT; + BEGIN + i := 0; + WHILE i < LEN(set) DO + set[i] := - set[i]; INC(i); + END; + END Complement; + + PROCEDURE In*(VAR set: ARRAY OF SET; i: LONGINT) : BOOLEAN; + BEGIN + RETURN (i MOD setsize) IN set[i DIV setsize] + END In; + + PROCEDURE Incl*(VAR set: ARRAY OF SET; i: LONGINT); + BEGIN + INCL(set[i DIV setsize], i MOD setsize); + END Incl; + + PROCEDURE Excl*(VAR set: ARRAY OF SET; i: LONGINT); + BEGIN + EXCL(set[i DIV setsize], i MOD setsize); + END Excl; + + PROCEDURE CharIn*(VAR charset: CharSet; ch: CHAR) : BOOLEAN; + BEGIN + RETURN (ORD(ch) MOD setsize) IN charset[ORD(ch) DIV setsize] + END CharIn; + + PROCEDURE InclChar*(VAR charset: CharSet; ch: CHAR); + BEGIN + INCL(charset[ORD(ch) DIV setsize], ORD(ch) MOD setsize); + END InclChar; + + PROCEDURE ExclChar*(VAR charset: CharSet; ch: CHAR); + BEGIN + EXCL(charset[ORD(ch) DIV setsize], ORD(ch) MOD setsize); + END ExclChar; + + PROCEDURE Intersection*(set1, set2: ARRAY OF SET; VAR result: ARRAY OF SET); + VAR + index: INTEGER; + BEGIN + ASSERT((LEN(result) = LEN(set1)) & (LEN(result) = LEN(set2))); + index := 0; + WHILE index < LEN(result) DO + result[index] := set1[index] * set2[index]; + INC(index); + END; + END Intersection; + + PROCEDURE SymDifference*(set1, set2: ARRAY OF SET; VAR result: ARRAY OF SET); + VAR + index: INTEGER; + BEGIN + ASSERT((LEN(result) = LEN(set1)) & (LEN(result) = LEN(set2))); + index := 0; + WHILE index < LEN(result) DO + result[index] := set1[index] / set2[index]; + INC(index); + END; + END SymDifference; + + PROCEDURE Union*(set1, set2: ARRAY OF SET; VAR result: ARRAY OF SET); + VAR + index: INTEGER; + BEGIN + ASSERT((LEN(result) = LEN(set1)) & (LEN(result) = LEN(set2))); + index := 0; + WHILE index < LEN(result) DO + result[index] := set1[index] + set2[index]; + INC(index); + END; + END Union; + + PROCEDURE Difference*(set1, set2: ARRAY OF SET; VAR result: ARRAY OF SET); + VAR + index: INTEGER; + BEGIN + ASSERT((LEN(result) = LEN(set1)) & (LEN(result) = LEN(set2))); + index := 0; + WHILE index < LEN(result) DO + result[index] := set1[index] - set2[index]; + INC(index); + END; + END Difference; + + PROCEDURE Equal*(set1, set2: ARRAY OF SET) : BOOLEAN; + VAR + index: INTEGER; + BEGIN + index := 0; + WHILE (index < LEN(set1)) & (index < LEN(set2)) DO + IF set1[index] # set2[index] THEN + RETURN FALSE + END; + INC(index); + END; + WHILE index < LEN(set1) DO + IF set1[index] # {} THEN + RETURN FALSE + END; + INC(index); + END; + WHILE index < LEN(set2) DO + IF set2[index] # {} THEN + RETURN FALSE + END; + INC(index); + END; + RETURN TRUE + END Equal; + + PROCEDURE Subset*(set1, set2: ARRAY OF SET) : BOOLEAN; + VAR + index: INTEGER; + BEGIN + index := 0; + WHILE (index < LEN(set1)) & (index < LEN(set2)) DO + IF set1[index] - set2[index] # {} THEN + RETURN FALSE + END; + INC(index); + END; + WHILE index < LEN(set1) DO + IF set1[index] # {} THEN + RETURN FALSE + END; + INC(index); + END; + RETURN TRUE + END Subset; + + PROCEDURE Card*(set: ARRAY OF SET) : INTEGER; + VAR + index: INTEGER; + i: INTEGER; + card: INTEGER; + BEGIN + card := 0; + index := 0; + WHILE index < LEN(set) DO + i := 0; + WHILE i <= MAX(SET) DO + IF i IN set[index] THEN + INC(card); + END; + INC(i); + END; + INC(index); + END; + RETURN card + END Card; + +END ulmSets. diff --git a/src/lib/v4/CmdlnTexts.Mod b/src/lib/v4/CmdlnTexts.Mod new file mode 100644 index 00000000..43167f93 --- /dev/null +++ b/src/lib/v4/CmdlnTexts.Mod @@ -0,0 +1,859 @@ +MODULE CmdlnTexts; (** CAS/HM 23.9.93 -- interface based on Texts by JG/NW 6.12.91**) (* << RC, MB, JT *) + IMPORT + Files, Modules, Reals; + + (*--- insert field e: Elem into Texts.Scanner and change Texts.Scan to set it in case of class=6 *) + + + CONST + Displaywhite = 15; + ElemChar* = 1CX; + TAB = 9X; CR = 0DX; maxD = 9; + (**FileMsg.id**) + load* = 0; store* = 1; + (**Notifier op**) + replace* = 0; insert* = 1; delete* = 2; + (**Scanner.class**) + Inval* = 0; Name* = 1; String* = 2; Int* = 3; Real* = 4; LongReal* = 5; Char* = 6; + + textTag = 0F0X; DocBlockId = 0F7X; version = 01X; + + TYPE + FontsFont = POINTER TO FontDesc; + FontDesc = RECORD + name: ARRAY 32 OF CHAR; + END ; + + Run = POINTER TO RunDesc; + RunDesc = RECORD + prev, next: Run; + len: LONGINT; + fnt: FontsFont; + col, voff: SHORTINT; + ascii: BOOLEAN (* << *) + END; + + Piece = POINTER TO PieceDesc; + PieceDesc = RECORD (RunDesc) + file: Files.File; + org: LONGINT + END; + + Elem* = POINTER TO ElemDesc; + Buffer* = POINTER TO BufDesc; + Text* = POINTER TO TextDesc; + + ElemMsg* = RECORD END; + Handler* = PROCEDURE (e: Elem; VAR msg: ElemMsg); + + ElemDesc* = RECORD (RunDesc) + W*, H*: LONGINT; + handle*: Handler; + base: Text + END; + + FileMsg* = RECORD (ElemMsg) + id*: INTEGER; + pos*: LONGINT; + r*: Files.Rider + END; + + CopyMsg* = RECORD (ElemMsg) + e*: Elem + END; + + IdentifyMsg* = RECORD (ElemMsg) + mod*, proc*: ARRAY 32 OF CHAR + END; + + + BufDesc* = RECORD + len*: LONGINT; + head: Run + END; + + TextDesc* = RECORD + len*: LONGINT; + head, cache: Run; + corg: LONGINT + END; + + Reader* = RECORD + eot*: BOOLEAN; + fnt*: FontsFont; + col*, voff*: SHORTINT; + elem*: Elem; + rider: Files.Rider; + run: Run; + org, off: LONGINT + END; + + Scanner* = RECORD (Reader) + nextCh*: CHAR; + line*, class*: INTEGER; + i*: LONGINT; + x*: REAL; + y*: LONGREAL; + c*: CHAR; + len*: SHORTINT; + s*: ARRAY 64 OF CHAR (* << *) + END; + + Writer* = RECORD + buf*: Buffer; + fnt*: FontsFont; + col*, voff*: SHORTINT; + rider: Files.Rider; + file: Files.File + END; + + Alien = POINTER TO RECORD (ElemDesc) + file: Files.File; + org, span: LONGINT; + mod, proc: ARRAY 32 OF CHAR + END; + + VAR + new*: Elem; + del: Buffer; + FontsDefault: FontsFont; + + + PROCEDURE FontsThis(VAR name: ARRAY OF CHAR): FontsFont; + VAR F: FontsFont; + BEGIN + NEW(F); COPY(name, F.name); RETURN F + END FontsThis; + + (* run primitives *) + + PROCEDURE Find (T: Text; VAR pos: LONGINT; VAR u: Run; VAR org, off: LONGINT); + VAR v: Run; m: LONGINT; + BEGIN + IF pos >= T.len THEN pos := T.len; u := T.head; org := T.len; off := 0; T.cache := T.head; T.corg := 0 + ELSE v := T.cache.next; m := pos - T.corg; + IF pos >= T.corg THEN + WHILE m >= v.len DO DEC(m, v.len); v := v.next END + ELSE + WHILE m < 0 DO v := v.prev; INC(m, v.len) END; + END; + u := v; org := pos - m; off := m; T.cache := v.prev; T.corg := org + END + END Find; + + PROCEDURE Split (off: LONGINT; VAR u, un: Run); + VAR p, U: Piece; + BEGIN + IF off = 0 THEN un := u; u := un.prev + ELSIF off >= u.len THEN un := u.next + ELSE NEW(p); un := p; U := u(Piece); + p^ := U^; INC(p.org, off); DEC(p.len, off); DEC(U.len, p.len); + p.ascii := u.ascii; p.prev := U; p.next := U.next; p.next.prev := p; U.next := p (* << *) + END + END Split; + + PROCEDURE Merge (T: Text; u: Run; VAR v: Run); + VAR p, q: Piece; + BEGIN + IF (u IS Piece) & (v IS Piece) & (u.fnt.name = v.fnt.name) & (u.col = v.col) & (u.voff = v.voff) + & (u(Piece).ascii = v(Piece).ascii) THEN (* << *) + p := u(Piece); q := v(Piece); + IF (p.file = q.file) & (p.org + p.len = q.org) THEN + IF T.cache = u THEN INC(T.corg, q.len) + ELSIF T.cache = v THEN T.cache := T.head; T.corg := 0 + END; + INC(p.len, q.len); v := v.next + END + END + END Merge; + + PROCEDURE Splice (un, v, w: Run; base: Text); (* (u, un) -> (u, v, w, un) *) + VAR u: Run; + BEGIN + IF v # w.next THEN u := un.prev; + u.next := v; v.prev := u; un.prev := w; w.next := un; + REPEAT + IF v IS Elem THEN v(Elem).base := base END; + v := v.next + UNTIL v = un + END + END Splice; + + PROCEDURE ClonePiece (p: Piece): Piece; + VAR q: Piece; + BEGIN NEW(q); q^ := p^; RETURN q + END ClonePiece; + + PROCEDURE CloneElem (e: Elem): Elem; + VAR msg: CopyMsg; + BEGIN msg.e := NIL; e.handle(e, msg); RETURN msg.e + END CloneElem; + + + (** Elements **) + + PROCEDURE CopyElem* (SE, DE: Elem); + BEGIN DE.len := SE.len; DE.fnt := SE.fnt; DE.col := SE.col; DE.voff := SE.voff; + DE.W := SE.W; DE.H := SE.H; DE.handle := SE.handle + END CopyElem; + + PROCEDURE ElemBase* (E: Elem): Text; + BEGIN RETURN E.base + END ElemBase; + + PROCEDURE ElemPos* (E: Elem): LONGINT; + VAR u: Run; pos: LONGINT; + BEGIN u := E.base.head.next; pos := 0; + WHILE u # E DO pos := pos + u.len; u := u.next END; + RETURN pos + END ElemPos; + + + PROCEDURE HandleAlien (E: Elem; VAR msg: ElemMsg); + VAR e: Alien; r: Files.Rider; i: LONGINT; ch: CHAR; + BEGIN + WITH E: Alien DO + IF msg IS CopyMsg THEN + WITH msg: CopyMsg DO NEW(e); CopyElem(E, e); + e.file := E.file; e.org := E.org; e.span := E.span; e.mod := E.mod; e.proc := E.proc; + msg.e := e + END + ELSIF msg IS IdentifyMsg THEN + WITH msg: IdentifyMsg DO + COPY(E.mod, msg.mod); COPY(E.proc, msg.proc); msg.mod[31] := 1X (*alien*) + END + ELSIF msg IS FileMsg THEN + WITH msg: FileMsg DO + IF msg.id = store THEN Files.Set(r, E.file, E.org); i := E.span; + WHILE i > 0 DO Files.Read(r, ch); Files.Write(msg.r, ch); DEC(i) END + END + END + END + END + END HandleAlien; + + + (** Buffers **) + + PROCEDURE OpenBuf* (B: Buffer); + VAR u: Run; + BEGIN NEW(u); u.next := u; u.prev := u; B.head := u; B.len := 0 + END OpenBuf; + + PROCEDURE Copy* (SB, DB: Buffer); + VAR u, v, vn: Run; + BEGIN u := SB.head.next; v := DB.head.prev; + WHILE u # SB.head DO + IF u IS Piece THEN vn := ClonePiece(u(Piece)) ELSE vn := CloneElem(u(Elem)) END; + v.next := vn; vn.prev := v; v := vn; u := u.next + END; + v.next := DB.head; DB.head.prev := v; + INC(DB.len, SB.len) + END Copy; + + PROCEDURE Recall* (VAR B: Buffer); + BEGIN B := del; del := NIL + END Recall; + + + (** Texts **) + + PROCEDURE Save* (T: Text; beg, end: LONGINT; B: Buffer); + VAR u, v, w, wn: Run; uo, ud, vo, vd: LONGINT; + BEGIN Find(T, beg, u, uo, ud); Find(T, end, v, vo, vd); + w := B.head.prev; + WHILE u # v DO + IF u IS Piece THEN wn := ClonePiece(u(Piece)); DEC(wn.len, ud); INC(wn(Piece).org, ud) + ELSE wn := CloneElem(u(Elem)) + END; + w.next := wn; wn.prev := w; w := wn; u := u.next; ud := 0 + END; + IF vd > 0 THEN (*v IS Piece*) wn := ClonePiece(v(Piece)); wn.len := vd - ud; INC(wn(Piece).org, ud); + w.next := wn; wn.prev := w; w := wn + END; + w.next := B.head; B.head.prev := w; + INC(B.len, end - beg) + END Save; + + PROCEDURE Insert* (T: Text; pos: LONGINT; B: Buffer); + VAR u, un, v: Run; p, q: Piece; uo, ud, len: LONGINT; + BEGIN Find(T, pos, u, uo, ud); Split(ud, u, un); + len := B.len; v := B.head.next; + Merge(T, u, v); Splice(un, v, B.head.prev, T); + INC(T.len, len); B.head.next := B.head; B.head.prev := B.head; B.len := 0; + END Insert; + + PROCEDURE Append* (T: Text; B: Buffer); + VAR v: Run; pos, len: LONGINT; + BEGIN pos := T.len; len := B.len; v := B.head.next; + Merge(T, T.head.prev, v); Splice(T.head, v, B.head.prev, T); + INC(T.len, len); B.head.next := B.head; B.head.prev := B.head; B.len := 0; + END Append; + + PROCEDURE Delete* (T: Text; beg, end: LONGINT); + VAR c, u, un, v, vn: Run; co, uo, ud, vo, vd: LONGINT; + BEGIN + Find(T, beg, u, uo, ud); Split(ud, u, un); c := T.cache; co := T.corg; + Find(T, end, v, vo, vd); Split(vd, v, vn); T.cache := c; T.corg := co; + NEW(del); OpenBuf(del); del.len := end - beg; + Splice(del.head, un, v, NIL); + Merge(T, u, vn); u.next := vn; vn.prev := u; + DEC(T.len, end - beg); + END Delete; + + PROCEDURE ChangeLooks* (T: Text; beg, end: LONGINT; sel: SET; fnt: FontsFont; col, voff: SHORTINT); + VAR c, u, un, v, vn: Run; co, uo, ud, vo, vd: LONGINT; + BEGIN Find(T, beg, u, uo, ud); Split(ud, u, un); c := T.cache; co := T.corg; + Find(T, end, v, vo, vd); Split(vd, v, vn); T.cache := c; T.corg := co; + WHILE un # vn DO + IF (0 IN sel) & (fnt # NIL) THEN un.fnt := fnt END; + IF 1 IN sel THEN un.col := col END; + IF 2 IN sel THEN un.voff := voff END; + Merge(T, u, un); + IF u.next = un THEN u := un; un := un.next ELSE u.next := un; un.prev := u END + END; + Merge(T, u, un); u.next := un; un.prev := u; + END ChangeLooks; + + + (** Readers **) + + PROCEDURE OpenReader* (VAR R: Reader; T: Text; pos: LONGINT); + VAR u: Run; + BEGIN + IF pos >= T.len THEN pos := T.len END; + Find(T, pos, u, R.org, R.off); R.run := u; R.eot := FALSE; + IF u IS Piece THEN + Files.Set(R.rider, u(Piece).file, u(Piece).org + R.off) + END + END OpenReader; + + PROCEDURE Read* (VAR R: Reader; VAR ch: CHAR); + VAR u: Run; + BEGIN u := R.run; R.fnt := u.fnt; R.col := u.col; R.voff := u.voff; INC(R.off); + IF u IS Piece THEN Files.Read(R.rider, ch); R.elem := NIL; + IF (ch = 0AX) & u(Piece).ascii THEN ch := CR END (* << LF to CR *) + ELSIF u IS Elem THEN ch := ElemChar; R.elem := u(Elem) + ELSE ch := 0X; R.elem := NIL; R.eot := TRUE + END; + IF R.off = u.len THEN INC(R.org, u.len); u := u.next; + IF u IS Piece THEN + WITH u: Piece DO Files.Set(R.rider, u.file, u.org) END + END; + R.run := u; R.off := 0 + END + END Read; + + PROCEDURE ReadElem* (VAR R: Reader); + VAR u, un: Run; + BEGIN u := R.run; + WHILE u IS Piece DO INC(R.org, u.len); u := u.next END; + IF u IS Elem THEN un := u.next; R.run := un; INC(R.org); R.off := 0; + R.fnt := u.fnt; R.col := u.col; R.voff := u.voff; R.elem := u(Elem); + IF un IS Piece THEN + WITH un: Piece DO Files.Set(R.rider, un.file, un.org) END + END + ELSE R.eot := TRUE; R.elem := NIL + END + END ReadElem; + + PROCEDURE ReadPrevElem* (VAR R: Reader); + VAR u: Run; + BEGIN u := R.run.prev; + WHILE u IS Piece DO DEC(R.org, u.len); u := u.prev END; + IF u IS Elem THEN R.run := u; DEC(R.org); R.off := 0; + R.fnt := u.fnt; R.col := u.col; R.voff := u.voff; R.elem := u(Elem) + ELSE R.eot := TRUE; R.elem := NIL + END + END ReadPrevElem; + + PROCEDURE Pos* (VAR R: Reader): LONGINT; + BEGIN RETURN R.org + R.off + END Pos; + + + (** Scanners --------------- NW --------------- **) + + PROCEDURE OpenScanner* (VAR S: Scanner; T: Text; pos: LONGINT); + BEGIN OpenReader(S, T, pos); S.line := 0; S.nextCh := " " + END OpenScanner; + + (*IEEE floating point formats: + x = 2^(e-127) * 1.m bit 0: sign, bits 1- 8: e, bits 9-31: m + x = 2^(e-1023) * 1.m bit 0: sign, bits 1-11: e, bits 12-63: m *) + + PROCEDURE Scan* (VAR S: Scanner); + CONST maxD = 32; + VAR ch, term: CHAR; + neg, negE, hex: BOOLEAN; + i, j, h: SHORTINT; + e: INTEGER; k: LONGINT; + x, f: REAL; y, g: LONGREAL; + d: ARRAY maxD OF CHAR; + + PROCEDURE ReadScaleFactor; + BEGIN Read(S, ch); + IF ch = "-" THEN negE := TRUE; Read(S, ch) + ELSE negE := FALSE; + IF ch = "+" THEN Read(S, ch) END + END; + WHILE ("0" <= ch) & (ch <= "9") DO + e := e*10 + ORD(ch) - 30H; Read(S, ch) + END + END ReadScaleFactor; + + BEGIN ch := S.nextCh; i := 0; + LOOP + IF ch = CR THEN INC(S.line) + ELSIF (ch # " ") & (ch # TAB) THEN EXIT + END ; + Read(S, ch) + END; + IF ("A" <= CAP(ch)) & (CAP(ch) <= "Z") OR (ch = "/") OR (ch = ".") THEN (*name*) (* << *) + REPEAT S.s[i] := ch; INC(i); Read(S, ch) + UNTIL (CAP(ch) > "Z") & (ch # "_") (* << *) + OR ("A" > CAP(ch)) & (ch > "9") + OR ("0" > ch) & (ch # ".") & (ch # "/") (* << *) + OR (i = 63); (* << *) + S.s[i] := 0X; S.len := i; S.class := 1 + ELSIF ch = 22X THEN (*literal string*) + Read(S, ch); + WHILE (ch # 22X) & (ch >= " ") & (i # 63) DO (* << *) + S.s[i] := ch; INC(i); Read(S, ch) + END; + S.s[i] := 0X; S.len := i+1; Read(S, ch); S.class := 2 + ELSE + IF ch = "-" THEN neg := TRUE; Read(S, ch) ELSE neg := FALSE END ; + IF ("0" <= ch) & (ch <= "9") THEN (*number*) + hex := FALSE; j := 0; + LOOP d[i] := ch; INC(i); Read(S, ch); + IF ch < "0" THEN EXIT END; + IF "9" < ch THEN + IF ("A" <= ch) & (ch <= "F") THEN hex := TRUE; ch := CHR(ORD(ch)-7) + ELSIF ("a" <= ch) & (ch <= "f") THEN hex := TRUE; ch := CHR(ORD(ch)-27H) + ELSE EXIT + END + END + END; + IF ch = "H" THEN (*hex number*) + Read(S, ch); S.class := 3; + IF i-j > 8 THEN j := i-8 END ; + k := ORD(d[j]) - 30H; INC(j); + IF (i-j = 7) & (k >= 8) THEN DEC(k, 16) END ; + WHILE j < i DO k := k*10H + (ORD(d[j]) - 30H); INC(j) END ; + IF neg THEN S.i := -k ELSE S.i := k END + ELSIF ch = "." THEN (*read real*) + Read(S, ch); h := i; + WHILE ("0" <= ch) & (ch <= "9") DO d[i] := ch; INC(i); Read(S, ch) END ; + IF ch = "D" THEN + e := 0; y := 0; g := 1; + REPEAT y := y*10 + (ORD(d[j]) - 30H); INC(j) UNTIL j = h; + WHILE j < i DO g := g/10; y := (ORD(d[j]) - 30H)*g + y; INC(j) END ; + ReadScaleFactor; + IF negE THEN + IF e <= 308 THEN y := y / Reals.TenL(e) ELSE y := 0 END + ELSIF e > 0 THEN + IF e <= 308 THEN y := Reals.TenL(e) * y ELSE HALT(40) END + END ; + IF neg THEN y := -y END ; + S.class := 5; S.y := y + ELSE e := 0; x := 0; f := 1; + REPEAT x := x*10 + (ORD(d[j]) - 30H); INC(j) UNTIL j = h; + WHILE j < i DO f := f/10; x := (ORD(d[j])-30H)*f + x; INC(j) END; + IF ch = "E" THEN ReadScaleFactor END ; + IF negE THEN + IF e <= 38 THEN x := x / Reals.Ten(e) ELSE x := 0 END + ELSIF e > 0 THEN + IF e <= 38 THEN x := Reals.Ten(e) * x ELSE HALT(40) END + END ; + IF neg THEN x := -x END ; + S.class := 4; S.x := x + END ; + IF hex THEN S.class := 0 END + ELSE (*decimal integer*) + S.class := 3; k := 0; + REPEAT k := k*10 + (ORD(d[j]) - 30H); INC(j) UNTIL j = i; + IF neg THEN S.i := -k ELSE S.i := k END; + IF hex THEN S.class := 0 ELSE S.class := 3 END + END + ELSE S.class := 6; + IF neg THEN S.c := "-" ELSE S.c := ch; Read(S, ch) END + END + END; + S.nextCh := ch + END Scan; + + + (** Writers **) + + PROCEDURE OpenWriter* (VAR W: Writer); + BEGIN NEW(W.buf); OpenBuf(W.buf); + W.fnt := FontsDefault; W.col := Displaywhite; W.voff := 0; + W.file := Files.New(""); Files.Set(W.rider, W.file, 0) + END OpenWriter; + + PROCEDURE SetFont* (VAR W: Writer; fnt: FontsFont); + BEGIN W.fnt := fnt + END SetFont; + + PROCEDURE SetColor* (VAR W: Writer; col: SHORTINT); + BEGIN W.col := col + END SetColor; + + PROCEDURE SetOffset* (VAR W: Writer; voff: SHORTINT); + BEGIN W.voff := voff + END SetOffset; + + + PROCEDURE Write* (VAR W: Writer; ch: CHAR); + VAR u, un: Run; p: Piece; + BEGIN Files.Write(W.rider, ch); INC(W.buf.len); un := W.buf.head; u := un.prev; + IF (u IS Piece) & (u(Piece).file = W.file) & (u.fnt.name = W.fnt.name) & (u.col = W.col) & (u.voff = W.voff) + & ~u(Piece).ascii THEN (* << *) + INC(u.len) + ELSE NEW(p); u.next := p; p.prev := u; p.next := un; un.prev := p; + p.len := 1; p.fnt := W.fnt; p.col := W.col; p.voff := W.voff; + p.file := W.file; p.org := Files.Length(W.file) - 1; p.ascii := FALSE (* << *) + END + END Write; + + PROCEDURE WriteElem* (VAR W: Writer; e: Elem); + VAR u, un: Run; + BEGIN + IF e.base # NIL THEN HALT(99) END; + INC(W.buf.len); e.len := 1; e.fnt := W.fnt; e.col := W.col; e.voff := W.voff; + un := W.buf.head; u := un.prev; u.next := e; e.prev := u; e.next := un; un.prev := e + END WriteElem; + + PROCEDURE WriteLn* (VAR W: Writer); + BEGIN Write(W, CR) + END WriteLn; + + PROCEDURE WriteString* (VAR W: Writer; s: ARRAY OF CHAR); + VAR i: INTEGER; + BEGIN i := 0; + WHILE s[i] >= " " DO Write(W, s[i]); INC(i) END + END WriteString; + + PROCEDURE WriteInt* (VAR W: Writer; x, n: LONGINT); + VAR i: INTEGER; x0: LONGINT; + a: ARRAY 11 OF CHAR; + BEGIN i := 0; + IF x < 0 THEN + IF x = MIN(LONGINT) THEN WriteString(W, " -2147483648"); RETURN + ELSE DEC(n); x0 := -x + END + ELSE x0 := x + END; + REPEAT + a[i] := CHR(x0 MOD 10 + 30H); x0 := x0 DIV 10; INC(i) + UNTIL x0 = 0; + WHILE n > i DO Write(W, " "); DEC(n) END; + IF x < 0 THEN Write(W, "-") END; + REPEAT DEC(i); Write(W, a[i]) UNTIL i = 0 + END WriteInt; + + PROCEDURE WriteHex* (VAR W: Writer; x: LONGINT); + VAR i: INTEGER; y: LONGINT; + a: ARRAY 10 OF CHAR; + BEGIN i := 0; Write(W, " "); + REPEAT y := x MOD 10H; + IF y < 10 THEN a[i] := CHR(y + 30H) ELSE a[i] := CHR(y + 37H) END; + x := x DIV 10H; INC(i) + UNTIL i = 8; + REPEAT DEC(i); Write(W, a[i]) UNTIL i = 0 + END WriteHex; + + PROCEDURE WriteReal* (VAR W: Writer; x: REAL; n: INTEGER); + VAR e: INTEGER; x0: REAL; + d: ARRAY maxD OF CHAR; + BEGIN e := Reals.Expo(x); + IF e = 0 THEN + WriteString(W, " 0"); + REPEAT Write(W, " "); DEC(n) UNTIL n <= 3 + ELSIF e = 255 THEN + WriteString(W, " NaN"); + WHILE n > 4 DO Write(W, " "); DEC(n) END + ELSE + IF n <= 9 THEN n := 3 ELSE DEC(n, 6) END; + REPEAT Write(W, " "); DEC(n) UNTIL n <= 8; + (*there are 2 < n <= 8 digits to be written*) + IF x < 0.0 THEN Write(W, "-"); x := -x ELSE Write(W, " ") END; + e := (e - 127) * 77 DIV 256; + IF e >= 0 THEN x := x / Reals.Ten(e) ELSE x := Reals.Ten(-e) * x END; + IF x >= 10.0 THEN x := 0.1*x; INC(e) END; + x0 := Reals.Ten(n-1); x := x0*x + 0.5; + IF x >= 10.0*x0 THEN x := x*0.1; INC(e) END; + Reals.Convert(x, n, d); + DEC(n); Write(W, d[n]); Write(W, "."); + REPEAT DEC(n); Write(W, d[n]) UNTIL n = 0; + Write(W, "E"); + IF e < 0 THEN Write(W, "-"); e := -e ELSE Write(W, "+") END; + Write(W, CHR(e DIV 10 + 30H)); Write(W, CHR(e MOD 10 + 30H)) + END + END WriteReal; + + PROCEDURE WriteRealFix* (VAR W: Writer; x: REAL; n, k: INTEGER); + VAR e, i: INTEGER; sign: CHAR; x0: REAL; + d: ARRAY maxD OF CHAR; + + PROCEDURE seq(ch: CHAR; n: INTEGER); + BEGIN WHILE n > 0 DO Write(W, ch); DEC(n) END + END seq; + + PROCEDURE dig(n: INTEGER); + BEGIN + WHILE n > 0 DO + DEC(i); Write(W, d[i]); DEC(n) + END + END dig; + + BEGIN e := Reals.Expo(x); + IF k < 0 THEN k := 0 END; + IF e = 0 THEN seq(" ", n-k-2); Write(W, "0"); seq(" ", k+1) + ELSIF e = 255 THEN WriteString(W, " NaN"); seq(" ", n-4) + ELSE e := (e - 127) * 77 DIV 256; + IF x < 0 THEN sign := "-"; x := -x ELSE sign := " " END; + IF e >= 0 THEN (*x >= 1.0, 77/256 = log 2*) x := x/Reals.Ten(e) + ELSE (*x < 1.0*) x := Reals.Ten(-e) * x + END; + IF x >= 10.0 THEN x := 0.1*x; INC(e) END; + (* 1 <= x < 10 *) + IF k+e >= maxD-1 THEN k := maxD-1-e + ELSIF k+e < 0 THEN k := -e; x := 0.0 + END; + x0 := Reals.Ten(k+e); x := x0*x + 0.5; + IF x >= 10.0*x0 THEN INC(e) END; + (*e = no. of digits before decimal point*) + INC(e); i := k+e; Reals.Convert(x, i, d); + IF e > 0 THEN + seq(" ", n-e-k-2); Write(W, sign); dig(e); + Write(W, "."); dig(k) + ELSE seq(" ", n-k-3); + Write(W, sign); Write(W, "0"); Write(W, "."); + seq("0", -e); dig(k+e) + END + END + END WriteRealFix; + + PROCEDURE WriteRealHex* (VAR W: Writer; x: REAL); + VAR i: INTEGER; + d: ARRAY 8 OF CHAR; + BEGIN Reals.ConvertH(x, d); i := 0; + REPEAT Write(W, d[i]); INC(i) UNTIL i = 8 + END WriteRealHex; + + PROCEDURE WriteLongReal* (VAR W: Writer; x: LONGREAL; n: INTEGER); + CONST maxD = 16; + VAR e: INTEGER; x0: LONGREAL; + d: ARRAY maxD OF CHAR; + BEGIN e := Reals.ExpoL(x); + IF e = 0 THEN + WriteString(W, " 0"); + REPEAT Write(W, " "); DEC(n) UNTIL n <= 3 + ELSIF e = 2047 THEN + WriteString(W, " NaN"); + WHILE n > 4 DO Write(W, " "); DEC(n) END + ELSE + IF n <= 10 THEN n := 3 ELSE DEC(n, 7) END; + REPEAT Write(W, " "); DEC(n) UNTIL n <= maxD; + (*there are 2 <= n <= maxD digits to be written*) + IF x < 0 THEN Write(W, "-"); x := -x ELSE Write(W, " ") END; + e := SHORT(LONG(e - 1023) * 77 DIV 256); + IF e >= 0 THEN x := x / Reals.TenL(e) ELSE x := Reals.TenL(-e) * x END ; + IF x >= 10.0D0 THEN x := 0.1D0 * x; INC(e) END ; + x0 := Reals.TenL(n-1); x := x0*x + 0.5D0; + IF x >= 10.0D0*x0 THEN x := 0.1D0 * x; INC(e) END ; + Reals.ConvertL(x, n, d); + DEC(n); Write(W, d[n]); Write(W, "."); + REPEAT DEC(n); Write(W, d[n]) UNTIL n = 0; + Write(W, "D"); + IF e < 0 THEN Write(W, "-"); e := -e ELSE Write(W, "+") END; + Write(W, CHR(e DIV 100 + 30H)); e := e MOD 100; + Write(W, CHR(e DIV 10 + 30H)); + Write(W, CHR(e MOD 10 + 30H)) + END + END WriteLongReal; + + PROCEDURE WriteLongRealHex* (VAR W: Writer; x: LONGREAL); + VAR i: INTEGER; + d: ARRAY 16 OF CHAR; + BEGIN Reals.ConvertHL(x, d); i := 0; + REPEAT Write(W, d[i]); INC(i) UNTIL i = 16 + END WriteLongRealHex; + + PROCEDURE WriteDate* (VAR W: Writer; t, d: LONGINT); + + PROCEDURE WritePair(ch: CHAR; x: LONGINT); + BEGIN Write(W, ch); + Write(W, CHR(x DIV 10 + 30H)); Write(W, CHR(x MOD 10 + 30H)) + END WritePair; + + BEGIN + WritePair(" ", d MOD 32); WritePair(".", d DIV 32 MOD 16); WritePair(".", d DIV 512 MOD 128); + WritePair(" ", t DIV 4096 MOD 32); WritePair(":", t DIV 64 MOD 64); WritePair(":", t MOD 64) + END WriteDate; + + + (** Text Filing **) + + PROCEDURE Load0 (VAR r: Files.Rider; T: Text); + VAR u, un: Run; p: Piece; e: Elem; + org, pos, hlen, plen: LONGINT; ecnt, fno, fcnt, col, voff: SHORTINT; + f: Files.File; + msg: FileMsg; + mods, procs: ARRAY 64, 32 OF CHAR; + name: ARRAY 32 OF CHAR; + fnts: ARRAY 32 OF FontsFont; + + PROCEDURE LoadElem (VAR r: Files.Rider; pos, span: LONGINT; VAR e: Elem); + VAR M: Modules.Module; Cmd: Modules.Command; a: Alien; + org, ew, eh: LONGINT; eno: SHORTINT; + BEGIN new := NIL; + Files.ReadLInt(r, ew); Files.ReadLInt(r, eh); Files.Read(r, eno); + IF eno > ecnt THEN ecnt := eno; Files.ReadString(r, mods[eno]); Files.ReadString(r, procs[eno]) END; + org := Files.Pos(r); M := Modules.ThisMod(mods[eno]); + IF M # NIL THEN Cmd := Modules.ThisCommand(M, procs[eno]); + IF Cmd # NIL THEN Cmd END + END; + e := new; + IF e # NIL THEN e.W := ew; e.H := eh; e.base := T; + msg.pos := pos; e.handle(e, msg); + IF Files.Pos(r) # org + span THEN e := NIL END + END; + IF e = NIL THEN Files.Set(r, f, org + span); + NEW(a); a.W := ew; a.H := eh; a.handle := HandleAlien; a.base := T; + a.file := f; a.org := org; a.span := span; + COPY(mods[eno], a.mod); COPY(procs[eno], a.proc); + e := a + END + END LoadElem; + + BEGIN pos := Files.Pos(r); f := Files.Base(r); + NEW(u); u.len := MAX(LONGINT); (*u.fnt := FontsDefault;*)u.fnt := NIL; u.col := Displaywhite; + T.head := u; ecnt := 0; fcnt := 0; + msg.id := load; msg.r := r; + Files.ReadLInt(msg.r, hlen); (*!!!org := pos + hlen;*) org := pos -2 + hlen; pos := org; Files.Read(msg.r, fno); + WHILE fno # 0 DO + IF fno > fcnt THEN fcnt := fno; Files.ReadString(msg.r, name); fnts[fno] := FontsThis(name) END; + Files.Read(msg.r, col); Files.Read(msg.r, voff); Files.ReadLInt(msg.r, plen); + IF plen > 0 THEN NEW(p); p.file := f; p.org := pos; p.ascii := FALSE; un := p; un.len := plen + ELSE LoadElem(msg.r, pos - org, -plen, e); un := e; un.len := 1 + END; + un.fnt := fnts[fno]; un.col := col; un.voff := voff; + INC(pos, un.len); u.next := un; un.prev := u; u := un; Files.Read(msg.r, fno) + END; + u.next := T.head; T.head.prev := u; T.cache := T.head; T.corg := 0; + Files.ReadLInt(msg.r, T.len); Files.Set(r, f, Files.Pos(msg.r) + T.len) + END Load0; + + PROCEDURE Load* (VAR r: Files.Rider; T: Text); + CONST oldTag = -4095; + VAR tag: INTEGER; + BEGIN + (* for compatibility inner text tags are checked and skipped; remove this in a later version *) + Files.ReadInt(r, tag); IF tag # oldTag THEN Files.Set(r, Files.Base(r), Files.Pos(r)-2) END; + Load0(r, T) + END Load; + + PROCEDURE Open* (T: Text; name: ARRAY OF CHAR); + VAR f: Files.File; r: Files.Rider; u: Run; p: Piece; tag, version: CHAR; hlen: LONGINT; + BEGIN f := Files.Old(name); + IF f = NIL THEN f := Files.New("") END; + Files.Set(r, f, 0); Files.Read(r, tag); Files.Read(r, version); + IF (tag = textTag) OR (tag = 01X) & (version = textTag) THEN Load0(r, T) + ELSE (*ascii*) + NEW(u); u.len := MAX(LONGINT); u.fnt := NIL; u.col := Displaywhite; + NEW(p); + IF (tag = DocBlockId) & (version = 07X) THEN (* extract ascii text from System 3 text document *) + Files.Set(r, f, 28); Files.ReadLInt(r, hlen); + Files.Set(r, f, 22 + hlen); Files.ReadLInt(r, T.len); p.org := 26 + hlen + ELSE + T.len := Files.Length(f); p.org := 0 + END ; + IF T.len > 0 THEN p.len := T.len; p.fnt := FontsDefault; + p.col := Displaywhite; p.voff := 0; p.file := f; p.ascii := TRUE; + u.next := p; u.prev := p; p.next := u; p.prev := u + ELSE u.next := u; u.prev := u + END; + T.head := u; T.cache := T.head; T.corg := 0 + END + END Open; + + PROCEDURE Store* (VAR r: Files.Rider; T: Text); + VAR r1: Files.Rider; u, un: Run; e: Elem; org, pos, delta, hlen, rlen: LONGINT; ecnt, fno, fcnt: SHORTINT; ch: CHAR; (* << *) + msg: FileMsg; iden: IdentifyMsg; + mods, procs: ARRAY 64, 32 OF CHAR; + fnts: ARRAY 32 OF FontsFont; + block: ARRAY 1024 OF CHAR; + + PROCEDURE StoreElem (VAR r: Files.Rider; pos: LONGINT; e: Elem); + VAR r1: Files.Rider; org, span: LONGINT; eno: SHORTINT; + BEGIN COPY(iden.mod, mods[ecnt]); COPY(iden.proc, procs[ecnt]); eno := 1; + WHILE (mods[eno] # iden.mod) OR (procs[eno] # iden.proc) DO INC(eno) END; + Files.Set(r1, Files.Base(r), Files.Pos(r)); + Files.WriteLInt(r, 0); Files.WriteLInt(r, 0); Files.WriteLInt(r, 0); (*fixup slot*) + Files.Write(r, eno); + IF eno = ecnt THEN INC(ecnt); Files.WriteString(r, iden.mod); Files.WriteString(r, iden.proc) END; + msg.pos := pos; org := Files.Pos(r); e.handle(e, msg); span := Files.Pos(r) - org; + Files.WriteLInt(r1, -span); Files.WriteLInt(r1, e.W); Files.WriteLInt(r1, e.H) (*fixup*) + END StoreElem; + + BEGIN + org := Files.Pos(r); msg.id := store; msg.r := r; Files.WriteLInt(msg.r, 0); (*fixup slot*) + u := T.head.next; pos := 0; delta := 0; fcnt := 1; ecnt := 1; + WHILE u # T.head DO + IF u IS Elem THEN iden.mod[0] := 0X; u(Elem).handle(u(Elem), iden) ELSE iden.mod[0] := 1X END; + IF iden.mod[0] # 0X THEN + fnts[fcnt] := u.fnt; fno := 1; + WHILE fnts[fno].name # u.fnt.name DO INC(fno) END; + Files.Write(msg.r, fno); + IF fno = fcnt THEN INC(fcnt); Files.WriteString(msg.r, u.fnt.name) END; + Files.Write(msg.r, u.col); Files.Write(msg.r, u.voff) + END; + IF u IS Piece THEN rlen := u.len; un := u.next; + WHILE (un IS Piece) & (un.fnt = u.fnt) & (un.col = u.col) & (un.voff = u.voff) DO + INC(rlen, un.len); un := un.next + END; + Files.WriteLInt(msg.r, rlen); INC(pos, rlen); u := un + ELSIF iden.mod[0] # 0X THEN StoreElem(msg.r, pos, u(Elem)); INC(pos); u := u.next + ELSE INC(delta); u := u.next + END + END; + Files.Write(msg.r, 0); Files.WriteLInt(msg.r, T.len - delta); + (*!!!hlen := Files.Pos(msg.r) - org;*) hlen := Files.Pos(msg.r) - org + 2; + Files.Set(r1, Files.Base(msg.r), org); Files.WriteLInt(r1, hlen); (*fixup*) + u := T.head.next; + WHILE u # T.head DO + IF u IS Piece THEN + WITH u: Piece DO + IF u.ascii THEN Files.Set(r1, u.file, u.org); delta := u.len; (* << LF to CR *) + WHILE delta > 0 DO Files.Read(r1, ch); DEC(delta); + IF ch = 0AX THEN Files.Write(msg.r, CR) ELSE Files.Write(msg.r, ch) END + END + ELSE Files.Set(r1, u.file, u.org); delta := u.len; + WHILE delta > LEN(block) DO Files.ReadBytes(r1, block, LEN(block)); + Files.WriteBytes(msg.r, block, LEN(block)); DEC(delta, LEN(block)) + END; + Files.ReadBytes(r1, block, delta); Files.WriteBytes(msg.r, block, delta) + END + END + ELSE iden.mod[0] := 0X; u(Elem).handle(u(Elem), iden); + IF iden.mod[0] # 0X THEN Files.Write(msg.r, ElemChar) END + END; + u := u.next + END; + r := msg.r; + END Store; + + PROCEDURE Close* (T: Text; name: ARRAY OF CHAR); + VAR f: Files.File; r: Files.Rider; i, res: INTEGER; bak: ARRAY 64 OF CHAR; + BEGIN + f := Files.New(name); Files.Set(r, f, 0); Files.Write(r, textTag); Files.Write(r, version); Store(r, T); + i := 0; WHILE name[i] # 0X DO INC(i) END; + COPY(name, bak); bak[i] := "."; bak[i+1] := "B"; bak[i+2] := "a"; bak[i+3] := "k"; bak[i+4] := 0X; + Files.Rename(name, bak, res); Files.Register(f) + END Close; + +BEGIN del := NIL; NEW(FontsDefault); FontsDefault.name := "Syntax10.Scn.Fnt" +END CmdlnTexts. diff --git a/src/lib/v4/Files.Mod b/src/lib/v4/Files.Mod new file mode 100644 index 00000000..454736be --- /dev/null +++ b/src/lib/v4/Files.Mod @@ -0,0 +1,627 @@ +MODULE Files; (* J. Templ 1.12. 89/12.4.95 Oberon files mapped onto Unix files *) + + IMPORT SYSTEM, Unix, Kernel, Args, Console; + + (* standard data type I/O + + little endian, + Sint:1, Int:2, Lint:4 + ORD({0}) = 1, + false = 0, true =1 + IEEE real format, + null terminated strings, + compact numbers according to M.Odersky *) + + + CONST + nofbufs = 4; + bufsize = 4096; + fileTabSize = 64; + noDesc = -1; + notDone = -1; + + (* file states *) + open = 0; create = 1; close = 2; + + + TYPE + FileName = ARRAY 101 OF CHAR; + File* = POINTER TO Handle; + Buffer = POINTER TO BufDesc; + + Handle = RECORD + workName, registerName: FileName; + tempFile: BOOLEAN; + dev, ino, mtime: LONGINT; + fd-, len, pos: LONGINT; + bufs: ARRAY nofbufs OF Buffer; + swapper, state: INTEGER + END ; + + BufDesc = RECORD + f: File; + chg: BOOLEAN; + org, size: LONGINT; + data: ARRAY bufsize OF SYSTEM.BYTE + END ; + + Rider* = RECORD + res*: LONGINT; + eof*: BOOLEAN; + buf: Buffer; + org, offset: LONGINT + END ; + + Time = POINTER TO TimeDesc; + TimeDesc = RECORD + sec*, min*, hour*, mday*, mon*, year*, wday*, isdst*, zone*, gmtoff*: LONGINT; +(* sec*, min*, hour*, mday*, mon*, year*, wday*, isdst*, zone*, gmtoff*: INTEGER;*) + END ; + + VAR + fileTab: ARRAY fileTabSize OF LONGINT (*=File*); + tempno: INTEGER; + +(* for localtime *) + PROCEDURE -includetime() + '#include "time.h"'; + + PROCEDURE -localtime(VAR clock: LONGINT): Time + "(Files_Time) localtime(clock)"; + + PROCEDURE -getcwd(VAR cwd: Unix.Name) + "getcwd(cwd, cwd__len)"; + + PROCEDURE -IdxTrap "__HALT(-1)"; + + PROCEDURE^ Finalize(o: SYSTEM.PTR); + + PROCEDURE Err(s: ARRAY OF CHAR; f: File; errno: LONGINT); + BEGIN + Console.Ln; Console.String("-- "); Console.String(s); Console.String(": "); + IF f # NIL THEN + IF f.registerName # "" THEN Console.String(f.registerName) ELSE Console.String(f.workName) END + END ; + IF errno # 0 THEN Console.String(" errno = "); Console.Int(errno, 1) END ; + Console.Ln; + HALT(99) + END Err; + + PROCEDURE MakeFileName(dir, name: ARRAY OF CHAR; VAR dest: ARRAY OF CHAR); + VAR i, j: INTEGER; + BEGIN i := 0; j := 0; + WHILE dir[i] # 0X DO dest[i] := dir[i]; INC(i) END ; + IF dest[i-1] # "/" THEN dest[i] := "/"; INC(i) END ; + WHILE name[j] # 0X DO dest[i] := name[j]; INC(i); INC(j) END ; + dest[i] := 0X + END MakeFileName; + + PROCEDURE GetTempName(finalName: ARRAY OF CHAR; VAR name: ARRAY OF CHAR); + VAR n, i, j: LONGINT; + BEGIN + INC(tempno); n := tempno; i := 0; + IF finalName[0] # "/" THEN (* relative pathname *) + WHILE Kernel.CWD[i] # 0X DO name[i] := Kernel.CWD[i]; INC(i) END; + IF Kernel.CWD[i-1] # "/" THEN name[i] := "/"; INC(i) END + END; + j := 0; + WHILE finalName[j] # 0X DO name[i] := finalName[j]; INC(i); INC(j) END; + DEC(i); + WHILE name[i] # "/" DO DEC(i) END; + name[i+1] := "."; name[i+2] := "t"; name[i+3] := "m"; name[i+4] := "p"; name[i+5] := "."; INC(i, 6); + WHILE n > 0 DO name[i] := CHR(n MOD 10 + ORD("0")); n := n DIV 10; INC(i) END; + name[i] := "."; INC(i); n := SHORT(Unix.Getpid()); + WHILE n > 0 DO name[i] := CHR(n MOD 10 + ORD("0")); n := n DIV 10; INC(i) END; + name[i] := 0X + END GetTempName; + + PROCEDURE Create(f: File); + VAR stat: Unix.Status; done: BOOLEAN; + errno: LONGINT; err: ARRAY 32 OF CHAR; + BEGIN + IF f.fd = noDesc THEN + IF f.state = create THEN GetTempName(f.registerName, f.workName); f.tempFile := TRUE + ELSIF f.state = close THEN + f.workName := f.registerName; f.registerName := ""; f.tempFile := FALSE + END ; + errno := Unix.Unlink(f.workName); (*unlink first to avoid stale NFS handles and to avoid reuse of inodes*) + f.fd := Unix.Open(f.workName, Unix.rdwr + Unix.creat + Unix.trunc, {2, 4,5, 7,8}); + done := f.fd >= 0; errno := Unix.errno(); + IF (~done & ((errno = Unix.ENFILE) OR (errno = Unix.EMFILE))) OR (done & (f.fd >= fileTabSize)) THEN + IF done & (f.fd >= fileTabSize) THEN errno := Unix.Close(f.fd) END ; + Kernel.GC(TRUE); + f.fd := Unix.Open(f.workName, Unix.rdwr + Unix.creat + Unix.trunc, {2, 4,5, 7,8}); + done := f.fd >= 0 + END ; + IF done THEN + IF f.fd >= fileTabSize THEN errno := Unix.Close(f.fd); Err("too many files open", f, 0) + ELSE fileTab[f.fd] := SYSTEM.VAL(LONGINT, f); INC(Kernel.nofiles); Kernel.RegisterObject(f, Finalize); + f.state := open; f.pos := 0; errno := Unix.Fstat(f.fd, stat); + f.dev := stat.dev; f.ino := stat.ino; f.mtime := stat.mtime + END + ELSE errno := Unix.errno(); + IF errno = Unix.ENOENT THEN err := "no such directory" + ELSIF (errno = Unix.ENFILE) OR (errno = Unix.EMFILE) THEN err := "too many files open" + ELSE err := "file not created" + END ; + Err(err, f, errno) + END + END + END Create; + + PROCEDURE Flush(buf: Buffer); + VAR res: LONGINT; f: File; stat: Unix.Status; + BEGIN + IF buf.chg THEN f := buf.f; Create(f); + IF buf.org # f.pos THEN res := Unix.Lseek(f.fd, buf.org, 0) END ; + res := Unix.Write(f.fd, SYSTEM.ADR(buf.data), buf.size); + IF res < 0 THEN Err("error in writing file", f, Unix.errno()) END ; + f.pos := buf.org + buf.size; + buf.chg := FALSE; + res := Unix.Fstat(f.fd, stat); + f.mtime := stat.mtime + END + END Flush; + + PROCEDURE Close* (f: File); + VAR i, res: LONGINT; + BEGIN + IF (f.state # create) OR (f.registerName # "") THEN + Create(f); i := 0; + WHILE (i < nofbufs) & (f.bufs[i] # NIL) DO Flush(f.bufs[i]); INC(i) END ; + res := Unix.Fsync(f.fd); + IF res < 0 THEN Err("error in writing file", f, Unix.errno()) END + END + END Close; + + PROCEDURE Length* (f: File): LONGINT; + BEGIN RETURN f.len + END Length; + + PROCEDURE New* (name: ARRAY OF CHAR): File; + VAR f: File; + BEGIN + NEW(f); f.workName := ""; COPY(name, f.registerName); + f.fd := noDesc; f.state := create; f.len := 0; f.pos := 0; f.swapper := -1; (*all f.buf[i] = NIL*) + RETURN f + END New; + + PROCEDURE ScanPath(VAR pos: INTEGER; VAR dir: ARRAY OF CHAR); (* supports ~, ~user and blanks inside path *) + VAR i: INTEGER; ch: CHAR; home: ARRAY 256 OF CHAR; + BEGIN + i := 0; ch := Kernel.OBERON[pos]; + WHILE (ch = " ") OR (ch = ":") DO INC(pos); ch := Kernel.OBERON[pos] END ; + IF ch = "~" THEN + INC(pos); ch := Kernel.OBERON[pos]; + home := ""; Args.GetEnv("HOME", home); + WHILE home[i] # 0X DO dir[i] := home[i]; INC(i) END ; + IF (ch # "/") & (ch # 0X) & (ch # ":") & (ch # " ") THEN + WHILE (i > 0) & (dir[i-1] # "/") DO DEC(i) END + END + END ; + WHILE (ch # 0X) & (ch # ":") DO dir[i] := ch; INC(i); INC(pos); ch := Kernel.OBERON[pos] END ; + WHILE (i > 0) & (dir[i-1] = " ") DO DEC(i) END ; + dir[i] := 0X + END ScanPath; + + PROCEDURE HasDir(VAR name: ARRAY OF CHAR): BOOLEAN; + VAR i: INTEGER; ch: CHAR; + BEGIN i := 0; ch := name[0]; + WHILE (ch # 0X) & (ch # "/") DO INC(i); ch := name[i] END ; + RETURN ch = "/" + END HasDir; + + PROCEDURE CacheEntry(dev, ino: LONGINT; mtime: LONGINT): File; + VAR f: File; i: INTEGER; stat: Unix.Status; res: LONGINT; + BEGIN i := 0; + WHILE i < fileTabSize DO + f := SYSTEM.VAL(File, fileTab[i]); + IF (f # NIL) & (ino = f.ino) & (dev = f.dev) THEN + IF mtime # f.mtime THEN i := 0; + WHILE i < nofbufs DO + IF f.bufs[i] # NIL THEN f.bufs[i].org := -1; f.bufs[i] := NIL END ; + INC(i) + END ; + f.swapper := -1; f.mtime := mtime; + res := Unix.Fstat(f.fd, stat); f.len := stat.size + END ; + RETURN f + END ; + INC(i) + END ; + RETURN NIL + END CacheEntry; + + PROCEDURE Old* (name: ARRAY OF CHAR): File; + VAR f: File; fd, res, errno: LONGINT; pos: INTEGER; done: BOOLEAN; + dir, path: ARRAY 256 OF CHAR; + stat: Unix.Status; + BEGIN + IF name # "" THEN + IF HasDir(name) THEN dir := ""; COPY(name, path) + ELSE pos := 0; ScanPath(pos, dir); MakeFileName(dir, name, path); ScanPath(pos, dir) + END ; + LOOP + fd := Unix.Open(path, Unix.rdwr, {}); done := fd >= 0; errno := Unix.errno(); + IF (~done & ((errno = Unix.ENFILE) OR (errno = Unix.EMFILE))) OR (done & (fd >= fileTabSize)) THEN + IF done & (fd >= fileTabSize) THEN res := Unix.Close(fd) END ; + Kernel.GC(TRUE); + fd := Unix.Open(path, Unix.rdwr, {}); + done := fd >= 0; errno := Unix.errno(); + IF ~done & ((errno = Unix.ENFILE) OR (errno = Unix.EMFILE)) THEN Err("too many files open", f, errno) END + END ; + IF ~done & ((errno = Unix.EACCES) OR (errno = Unix.EROFS) OR (errno = Unix.EAGAIN)) THEN + (* errno EAGAIN observed on Solaris 2.4 *) + fd := Unix.Open(path, Unix.rdonly, {}); done := fd >= 0; errno := Unix.errno() + END ; +IF (~done) & (errno # Unix.ENOENT) THEN + Console.String("warning Files.Old "); Console.String(name); + Console.String(" errno = "); Console.Int(errno, 0); Console.Ln; +END ; + IF done THEN + res := Unix.Fstat(fd, stat); + f := CacheEntry(stat.dev, stat.ino, stat.mtime); + IF f # NIL THEN res := Unix.Close(fd); RETURN f + ELSIF fd >= fileTabSize THEN res := Unix.Close(fd); Err("too many files open", f, 0) + ELSE NEW(f); fileTab[fd] := SYSTEM.VAL(LONGINT, f); INC(Kernel.nofiles); Kernel.RegisterObject(f, Finalize); + f.fd := fd; f.state := open; f.len := stat.size; f.pos := 0; f.swapper := -1; (*all f.buf[i] = NIL*) + COPY(name, f.workName); f.registerName := ""; f.tempFile := FALSE; + f.dev := stat.dev; f.ino := stat.ino; f.mtime := stat.mtime; + RETURN f + END + ELSIF dir = "" THEN RETURN NIL + ELSE MakeFileName(dir, name, path); ScanPath(pos, dir) + END + END + ELSE RETURN NIL + END + END Old; + + PROCEDURE Purge* (f: File); + VAR i: INTEGER; stat: Unix.Status; res: LONGINT; + BEGIN i := 0; + WHILE i < nofbufs DO + IF f.bufs[i] # NIL THEN f.bufs[i].org := -1; f.bufs[i] := NIL END ; + INC(i) + END ; + IF f.fd # noDesc THEN res := Unix.Ftruncate(f.fd, 0); res := Unix.Lseek(f.fd, 0, 0) END ; + f.pos := 0; f.len := 0; f.swapper := -1; + res := Unix.Fstat(f.fd, stat); f.mtime := stat.mtime + END Purge; + + PROCEDURE GetDate* (f: File; VAR t, d: LONGINT); + VAR stat: Unix.Status; clock, res: LONGINT; time: Time; + BEGIN + Create(f); res := Unix.Fstat(f.fd, stat); + time := localtime(stat.mtime); + t := time.sec + ASH(time.min, 6) + ASH(time.hour, 12); + d := time.mday + ASH(time.mon+1, 5) + ASH(time.year MOD 100, 9) + END GetDate; + + PROCEDURE Pos* (VAR r: Rider): LONGINT; + BEGIN RETURN r.org + r.offset + END Pos; + + PROCEDURE Set* (VAR r: Rider; f: File; pos: LONGINT); + VAR org, offset, i, n, res: LONGINT; buf: Buffer; + BEGIN + IF f # NIL THEN + IF pos > f.len THEN pos := f.len ELSIF pos < 0 THEN pos := 0 END ; + offset := pos MOD bufsize; org := pos - offset; i := 0; + WHILE (i < nofbufs) & (f.bufs[i] # NIL) & (org # f.bufs[i].org) DO INC(i) END ; + IF i < nofbufs THEN + IF f.bufs[i] = NIL THEN NEW(buf); buf.chg := FALSE; buf.org := -1; buf.f := f; f.bufs[i] := buf + ELSE buf := f.bufs[i] + END + ELSE + f.swapper := (f.swapper + 1) MOD nofbufs; + buf := f.bufs[f.swapper]; + Flush(buf) + END ; + IF buf.org # org THEN + IF org = f.len THEN buf.size := 0 + ELSE Create(f); + IF f.pos # org THEN res := Unix.Lseek(f.fd, org, 0) END ; + n := Unix.ReadBlk(f.fd, buf.data); + IF n < 0 THEN Err("read from file not done", f, Unix.errno()) END ; + f.pos := org + n; + buf.size := n + END ; + buf.org := org; buf.chg := FALSE + END + ELSE buf := NIL; org := 0; offset := 0 + END ; + r.buf := buf; r.org := org; r.offset := offset; r.eof := FALSE; r.res := 0 + END Set; + + PROCEDURE Read* (VAR r: Rider; VAR x: SYSTEM.BYTE); + VAR offset: LONGINT; buf: Buffer; + BEGIN + buf := r.buf; offset := r.offset; + IF r.org # buf.org THEN Set(r, buf.f, r.org + offset); buf := r.buf; offset := r.offset END ; + IF (offset < buf.size) THEN + x := buf.data[offset]; r.offset := offset + 1 + ELSIF r.org + offset < buf.f.len THEN + Set(r, r.buf.f, r.org + offset); + x := r.buf.data[0]; r.offset := 1 + ELSE + x := 0X; r.eof := TRUE + END + END Read; + + PROCEDURE ReadBytes* (VAR r: Rider; VAR x: ARRAY OF SYSTEM.BYTE; n: LONGINT); + VAR xpos, min, restInBuf, offset: LONGINT; buf: Buffer; + BEGIN + IF n > LEN(x) THEN IdxTrap END ; + xpos := 0; buf := r.buf; offset := r.offset; + WHILE n > 0 DO + IF (r.org # buf.org) OR (offset >= bufsize) THEN + Set(r, buf.f, r.org + offset); + buf := r.buf; offset := r.offset + END ; + restInBuf := buf.size - offset; + IF restInBuf = 0 THEN r.res := n; r.eof := TRUE; RETURN + ELSIF n > restInBuf THEN min := restInBuf ELSE min := n END ; + SYSTEM.MOVE(SYSTEM.ADR(buf.data) + offset, SYSTEM.ADR(x) + xpos, min); + INC(offset, min); r.offset := offset; INC(xpos, min); DEC(n, min) + END ; + r.res := 0; r.eof := FALSE + END ReadBytes; + + PROCEDURE Base* (VAR r: Rider): File; + BEGIN RETURN r.buf.f + END Base; + + PROCEDURE Write* (VAR r: Rider; x: SYSTEM.BYTE); + VAR buf: Buffer; offset: LONGINT; + BEGIN + buf := r.buf; offset := r.offset; + IF (r.org # buf.org) OR (offset >= bufsize) THEN + Set(r, buf.f, r.org + offset); + buf := r.buf; offset := r.offset + END ; + buf.data[offset] := x; + buf.chg := TRUE; + IF offset = buf.size THEN + INC(buf.size); INC(buf.f.len) + END ; + r.offset := offset + 1; r.res := 0 + END Write; + + PROCEDURE WriteBytes* (VAR r: Rider; VAR x: ARRAY OF SYSTEM.BYTE; n: LONGINT); + VAR xpos, min, restInBuf, offset: LONGINT; buf: Buffer; + BEGIN + IF n > LEN(x) THEN IdxTrap END ; + xpos := 0; buf := r.buf; offset := r.offset; + WHILE n > 0 DO + IF (r.org # buf.org) OR (offset >= bufsize) THEN + Set(r, buf.f, r.org + offset); + buf := r.buf; offset := r.offset + END ; + restInBuf := bufsize - offset; + IF n > restInBuf THEN min := restInBuf ELSE min := n END ; + SYSTEM.MOVE(SYSTEM.ADR(x) + xpos, SYSTEM.ADR(buf.data) + offset, min); + INC(offset, min); r.offset := offset; + IF offset > buf.size THEN INC(buf.f.len, offset - buf.size); buf.size := offset END ; + INC(xpos, min); DEC(n, min); buf.chg := TRUE + END ; + r.res := 0 + END WriteBytes; + +(* another solution would be one that is similar to ReadBytes, WriteBytes. +No code duplication, more symmetric, only two ifs for +Read and Write in buffer, buf.size replaced by bufsize in Write ops, buf.size and len +must be made consistent with offset (if offset > buf.size) in a lazy way. + +PROCEDURE Write* (VAR r: Rider; x: SYSTEM.BYTE); + VAR buf: Buffer; offset: LONGINT; +BEGIN + buf := r.buf; offset := r.offset; + IF (offset >= bufsize) OR (r.org # buf.org) THEN + Set(r, buf.f, r.org + offset); buf := r.buf; offset := r.offset; + END ; + buf.data[offset] := x; r.offset := offset + 1; buf.chg := TRUE +END Write; + +PROCEDURE WriteBytes ... + +PROCEDURE Read* (VAR r: Rider; VAR x: SYSTEM.BYTE); + VAR offset: LONGINT; buf: Buffer; +BEGIN + buf := r.buf; offset := r.offset; + IF (offset >= buf.size) OR (r.org # buf.org) THEN + IF r.org + offset >= buf.f.len THEN x := 0X; r.eof := TRUE; RETURN + ELSE Set(r, buf.f, r.org + offset); buf := r.buf; offset := r.offset + END + END ; + x := buf.data[offset]; r.offset := offset + 1 +END Read; + +but this would also affect Set, Length, and Flush. +Especially Length would become fairly complex. +*) + + PROCEDURE Delete* (name: ARRAY OF CHAR; VAR res: INTEGER); + BEGIN + res := SHORT(Unix.Unlink(name)); + res := SHORT(Unix.errno()) + END Delete; + + PROCEDURE Rename* (old, new: ARRAY OF CHAR; VAR res: INTEGER); + VAR fdold, fdnew, n, errno, r: LONGINT; + ostat, nstat: Unix.Status; + buf: ARRAY 4096 OF CHAR; + BEGIN + r := Unix.Stat(old, ostat); + IF r >= 0 THEN + r := Unix.Stat(new, nstat); + IF (r >= 0) & ((ostat.dev # nstat.dev) OR (ostat.ino # nstat.ino)) THEN + Delete(new, res); (* work around stale nfs handles *) + END ; + r := Unix.Rename(old, new); + IF r < 0 THEN res := SHORT(Unix.errno()); + IF res = Unix.EXDEV THEN (* cross device link, move the file *) + fdold := Unix.Open(old, Unix.rdonly, {}); + IF fdold < 0 THEN res := 2; RETURN END ; + fdnew := Unix.Open(new, Unix.rdwr + Unix.creat + Unix.trunc, {2, 4,5, 7,8}); + IF fdnew < 0 THEN r := Unix.Close(fdold); res := 3; RETURN END ; + n := Unix.Read(fdold, SYSTEM.ADR(buf), bufsize); + WHILE n > 0 DO + r := Unix.Write(fdnew, SYSTEM.ADR(buf), n); + IF r < 0 THEN errno := Unix.errno(); r := Unix.Close(fdold); r := Unix.Close(fdnew); + Err("cannot move file", NIL, errno) + END ; + n := Unix.Read(fdold, SYSTEM.ADR(buf), bufsize) + END ; + errno := Unix.errno(); + r := Unix.Close(fdold); r := Unix.Close(fdnew); + IF n = 0 THEN r := Unix.Unlink(old); res := 0 + ELSE Err("cannot move file", NIL, errno) + END ; + ELSE RETURN (* res is Unix.Rename return code *) + END + END ; + res := 0 + ELSE res := 2 (* old file not found *) + END + END Rename; + + PROCEDURE Register* (f: File); + VAR idx, errno: INTEGER; f1: File; file: ARRAY 104 OF CHAR; + BEGIN + IF (f.state = create) & (f.registerName # "") THEN f.state := close (* shortcut renaming *) END ; + Close(f); + IF f.registerName # "" THEN + Rename(f.workName, f.registerName, errno); + IF errno # 0 THEN COPY(f.registerName, file); HALT(99) END ; + f.workName := f.registerName; f.registerName := ""; f.tempFile := FALSE + END + END Register; + + PROCEDURE ChangeDirectory*(path: ARRAY OF CHAR; VAR res: INTEGER); + BEGIN + res := SHORT(Unix.Chdir(path)); + getcwd(Kernel.CWD) + END ChangeDirectory; + + PROCEDURE FlipBytes(VAR src, dest: ARRAY OF SYSTEM.BYTE); + VAR i, j: LONGINT; + BEGIN + IF ~Kernel.littleEndian THEN i := LEN(src); j := 0; + WHILE i > 0 DO DEC(i); dest[j] := src[i]; INC(j) END + ELSE SYSTEM.MOVE(SYSTEM.ADR(src), SYSTEM.ADR(dest), LEN(src)) + END + END FlipBytes; + + PROCEDURE ReadBool* (VAR R: Rider; VAR x: BOOLEAN); + BEGIN Read(R, SYSTEM.VAL(CHAR, x)) + END ReadBool; + + PROCEDURE ReadInt* (VAR R: Rider; VAR x: INTEGER); + VAR b: ARRAY 2 OF CHAR; + BEGIN ReadBytes(R, b, 2); + x := ORD(b[0]) + ORD(b[1])*256 + END ReadInt; + + PROCEDURE ReadLInt* (VAR R: Rider; VAR x: LONGINT); + VAR b: ARRAY 4 OF CHAR; + BEGIN ReadBytes(R, b, 4); + x := ORD(b[0]) + ORD(b[1])*100H + ORD(b[2])*10000H + ORD(b[3])*1000000H + END ReadLInt; + + PROCEDURE ReadSet* (VAR R: Rider; VAR x: SET); + VAR b: ARRAY 4 OF CHAR; + BEGIN ReadBytes(R, b, 4); + x := SYSTEM.VAL(SET, ORD(b[0]) + ORD(b[1])*100H + ORD(b[2])*10000H + ORD(b[3])*1000000H) + END ReadSet; + + PROCEDURE ReadReal* (VAR R: Rider; VAR x: REAL); + VAR b: ARRAY 4 OF CHAR; + BEGIN ReadBytes(R, b, 4); FlipBytes(b, x) + END ReadReal; + + PROCEDURE ReadLReal* (VAR R: Rider; VAR x: LONGREAL); + VAR b: ARRAY 8 OF CHAR; + BEGIN ReadBytes(R, b, 8); FlipBytes(b, x) + END ReadLReal; + + PROCEDURE ReadString* (VAR R: Rider; VAR x: ARRAY OF CHAR); + VAR i: INTEGER; ch: CHAR; + BEGIN i := 0; + REPEAT Read(R, ch); x[i] := ch; INC(i) UNTIL ch = 0X + END ReadString; + + PROCEDURE ReadNum* (VAR R: Rider; VAR x: LONGINT); + VAR s: SHORTINT; ch: CHAR; n: LONGINT; + BEGIN s := 0; n := 0; Read(R, ch); + WHILE ORD(ch) >= 128 DO INC(n, ASH(ORD(ch) - 128, s) ); INC(s, 7); Read(R, ch) END; + INC(n, ASH(ORD(ch) MOD 64 - ORD(ch) DIV 64 * 64, s) ); + x := n + END ReadNum; + + PROCEDURE WriteBool* (VAR R: Rider; x: BOOLEAN); + BEGIN Write(R, SYSTEM.VAL(CHAR, x)) + END WriteBool; + + PROCEDURE WriteInt* (VAR R: Rider; x: INTEGER); + VAR b: ARRAY 2 OF CHAR; + BEGIN b[0] := CHR(x); b[1] := CHR(x DIV 256); + WriteBytes(R, b, 2); + END WriteInt; + + PROCEDURE WriteLInt* (VAR R: Rider; x: LONGINT); + VAR b: ARRAY 4 OF CHAR; + BEGIN + b[0] := CHR(x); b[1] := CHR(x DIV 100H); b[2] := CHR(x DIV 10000H); b[3] := CHR(x DIV 1000000H); + WriteBytes(R, b, 4); + END WriteLInt; + + PROCEDURE WriteSet* (VAR R: Rider; x: SET); + VAR b: ARRAY 4 OF CHAR; i: LONGINT; + BEGIN i := SYSTEM.VAL(LONGINT, x); + b[0] := CHR(i); b[1] := CHR(i DIV 100H); b[2] := CHR(i DIV 10000H); b[3] := CHR(i DIV 1000000H); + WriteBytes(R, b, 4); + END WriteSet; + + PROCEDURE WriteReal* (VAR R: Rider; x: REAL); + VAR b: ARRAY 4 OF CHAR; + BEGIN FlipBytes(x, b); WriteBytes(R, b, 4) + END WriteReal; + + PROCEDURE WriteLReal* (VAR R: Rider; x: LONGREAL); + VAR b: ARRAY 8 OF CHAR; + BEGIN FlipBytes(x, b); WriteBytes(R, b, 8) + END WriteLReal; + + PROCEDURE WriteString* (VAR R: Rider; x: ARRAY [1] OF CHAR); + VAR i: INTEGER; + BEGIN i := 0; + WHILE x[i] # 0X DO INC(i) END ; + WriteBytes(R, x, i+1) + END WriteString; + + PROCEDURE WriteNum* (VAR R: Rider; x: LONGINT); + BEGIN + WHILE (x < - 64) OR (x > 63) DO Write(R, CHR(x MOD 128 + 128)); x := x DIV 128 END; + Write(R, CHR(x MOD 128)) + END WriteNum; + + PROCEDURE Finalize(o: SYSTEM.PTR); + VAR f: File; res: LONGINT; + BEGIN + f := SYSTEM.VAL(File, o); + IF f.fd >= 0 THEN + fileTab[f.fd] := 0; res := Unix.Close(f.fd); f.fd := -1; DEC(Kernel.nofiles); + IF f.tempFile THEN res := Unix.Unlink(f.workName) END + END + END Finalize; + + PROCEDURE Init; + VAR i: LONGINT; + BEGIN + i := 0; WHILE i < fileTabSize DO fileTab[i] := 0; INC(i) END ; + tempno := -1; Kernel.nofiles := 0 + END Init; + +BEGIN Init +END Files. diff --git a/src/lib/v4/Kernel.Mod b/src/lib/v4/Kernel.Mod new file mode 100644 index 00000000..f9769b4f --- /dev/null +++ b/src/lib/v4/Kernel.Mod @@ -0,0 +1,175 @@ +MODULE Kernel; +(* + J. Templ, 16.4.95 + communication with C-runtime and storage management +*) + + IMPORT SYSTEM, Unix, Args, Strings := oocOakStrings, version; + + TYPE + RealTime = POINTER TO TimeDesc; + TimeDesc = RECORD + sec, min, hour, mday, mon, year, wday, isdst, zone, gmtoff: LONGINT +(* sec, min, hour, mday, mon, year, wday, isdst, zone, gmtoff: INTEGER*) + END ; + + KeyCmd* = PROCEDURE; + + ObjFinalizer* = PROCEDURE(obj: SYSTEM.PTR); + + + VAR + (* trap handling *) + trapEnv*: Unix.JmpBuf; (* saved stack environment for trap handling *) + + (* oberon heap management *) + nofiles*: LONGINT; + + (* input event handling *) + readSet*, readySet*: Unix.FdSet; + + FKey*: ARRAY 16 OF KeyCmd; + + littleEndian*: BOOLEAN; + + TimeUnit*: LONGINT; (* 1 sec *) + + LIB*, CWD*: ARRAY 256 OF CHAR; + OBERON*: ARRAY 1024 OF CHAR; + MODULES-: ARRAY 1024 OF CHAR; + + prefix*, fullprefix* : ARRAY 256 OF CHAR; + timeStart: LONGINT; (* milliseconds *) + + + PROCEDURE -includesetjmp() + '#include "setjmp.h"'; +(* for localtime *) + PROCEDURE -includetime() + '#include "time.h"'; + + PROCEDURE -Lock*() + "SYSTEM_lock++"; + + PROCEDURE -Unlock*() + "SYSTEM_lock--; if (SYSTEM_interrupted && SYSTEM_lock == 0) __HALT(-9)"; + + PROCEDURE -Exit*(n: LONGINT) + "exit(n)"; + + PROCEDURE -sigsetjmp*(VAR env: Unix.JmpBuf; savemask: LONGINT): LONGINT + "__sigsetjmp(env, savemask)"; + + PROCEDURE -siglongjmp*(VAR env:Unix.JmpBuf; val: LONGINT) + "siglongjmp(env, val)"; + + PROCEDURE -heapsize*(): LONGINT + "SYSTEM_heapsize"; + + PROCEDURE -allocated*(): LONGINT + "SYSTEM_allocated"; + + PROCEDURE -localtime(VAR clock: LONGINT): RealTime + "(Kernel_RealTime)localtime(clock)"; + + PROCEDURE -malloc*(size: LONGINT): LONGINT + "(LONGINT)malloc(size)"; + + PROCEDURE -free*(adr: LONGINT) + "(void)free(adr)"; + + PROCEDURE -getcwd(VAR cwd: Unix.Name) + "getcwd(cwd, cwd__len)"; + + + PROCEDURE GetClock* (VAR t, d: LONGINT); + VAR tv: Unix.Timeval; tz: Unix.Timezone; time: RealTime; + BEGIN + Unix.Gettimeofday(tv, tz); + time := localtime(tv.sec); + t := time.sec + ASH(time.min, 6) + ASH(time.hour, 12); + d := time.mday + ASH(time.mon+1, 5) + ASH(time.year MOD 100, 9); + END GetClock; + + PROCEDURE SetClock* (t, d: LONGINT); + VAR err: ARRAY 25 OF CHAR; + BEGIN err := "not yet implemented"; HALT(99) + END SetClock; + + PROCEDURE Time*(): LONGINT; + VAR timeval: Unix.Timeval; timezone: Unix.Timezone; + BEGIN + Unix.Gettimeofday(timeval, timezone); + RETURN (timeval.usec DIV 1000 + timeval.sec * 1000 - timeStart) MOD 7FFFFFFFH + END Time; + +(* + PROCEDURE UserTime*(): LONGINT; + VAR rusage: Unix.Rusage; + BEGIN + Unix.Getrusage(0, S.ADR(rusage)); + RETURN rusage.utime.sec*1000 + rusage.utime.usec DIV 1000 + (* + rusage.stime.sec*1000 + rusage.stime.usec DIV 1000*) + END UserTime; +*) + + PROCEDURE Select*(delay: LONGINT); + VAR rs, ws, xs: Unix.FdSet; n: LONGINT; tv: Unix.Timeval; + BEGIN + rs := readSet; + FOR n := 0 TO 7 DO ws[n] := {}; xs[n] := {}; readySet[n] := {} END; + IF delay < 0 THEN delay := 0 END ; + tv.sec := delay DIV 1000; tv.usec := delay MOD 1000 * 1000; + n := Unix.Select(256, rs, ws, xs, tv); + IF n >= 0 THEN readySet := rs END + END Select; + + PROCEDURE -GC*(markStack: BOOLEAN) + "SYSTEM_GC(markStack)"; + + PROCEDURE -RegisterObject*(obj: SYSTEM.PTR; finalize: ObjFinalizer) + "SYSTEM_REGFIN(obj, finalize)"; + + PROCEDURE -SetHalt*(p: PROCEDURE(n: LONGINT)) + "SYSTEM_Halt = p"; + + PROCEDURE InstallTermHandler*(p: PROCEDURE); + (* not yet supported; no Modules.Free *) + END InstallTermHandler; + + PROCEDURE LargestAvailable*(): LONGINT; + BEGIN + (* dummy proc for System 3 compatibility + no meaningful value except may be the remaining swap space can be returned + in the context of an extensible heap *) + RETURN MAX(LONGINT) + END LargestAvailable; + + PROCEDURE Halt(n: LONGINT); + VAR res: LONGINT; + BEGIN res := Unix.Kill(Unix.Getpid(), 4); + END Halt; + + PROCEDURE EndianTest; + VAR i: LONGINT; dmy: INTEGER; + BEGIN + dmy := 1; i := SYSTEM.ADR(dmy); + SYSTEM.GET(i, littleEndian); (* indirection via i avoids warning on SUN cc -O *) + END EndianTest; + +BEGIN + EndianTest(); + SetHalt(Halt); + CWD := ""; OBERON := "."; LIB := ""; + MODULES := ""; (* additional modules path which can be specified on commandline and will be added to the OBERON variable; noch *) + getcwd(CWD); + Args.GetEnv ("MODULES", MODULES); + Args.GetEnv("OBERON", OBERON); + (* always have current directory in module search path, noch *) + Strings.Append(":.:", OBERON); + Strings.Append(version.prefix, OBERON); + Strings.Append("/lib/voc/sym:", OBERON); + Strings.Append(MODULES, OBERON); + Args.GetEnv("OBERON_LIB", LIB); + TimeUnit := 1000; timeStart := 0; timeStart := Time() +END Kernel. diff --git a/src/lib/v4/Modules.Mod b/src/lib/v4/Modules.Mod new file mode 100644 index 00000000..e73fefac --- /dev/null +++ b/src/lib/v4/Modules.Mod @@ -0,0 +1,96 @@ +MODULE Modules; (* jt 6.1.96 *) + + (* access to list of modules and commands, based on ETH Oberon *) + + + IMPORT SYSTEM, Console; + + CONST + ModNameLen* = 20; + + TYPE + ModuleName* = ARRAY ModNameLen OF CHAR; + Module* = POINTER TO ModuleDesc; + Cmd* = POINTER TO CmdDesc; + ModuleDesc* = RECORD (* cf. SYSTEM.Mod *) + next-: Module; + name-: ModuleName; + refcnt-: LONGINT; + cmds-: Cmd; + types-: LONGINT; + enumPtrs-: PROCEDURE (P: PROCEDURE(p: LONGINT)); + reserved1, reserved2: LONGINT; + END ; + + Command* = PROCEDURE; + + CmdDesc* = RECORD + next-: Cmd; + name-: ARRAY 24 OF CHAR; + cmd-: Command + END ; + + VAR + res*: INTEGER; + resMsg*: ARRAY 256 OF CHAR; + imported*, importing*: ModuleName; + + + PROCEDURE -modules*(): Module + "(Modules_Module)SYSTEM_modules"; + + PROCEDURE -setmodules*(m: Module) + "SYSTEM_modules = m"; + + + PROCEDURE Append(VAR a: ARRAY OF CHAR; b: ARRAY OF CHAR); + VAR i, j: INTEGER; + BEGIN + i := 0; WHILE a[i] # 0X DO INC(i) END; + j := 0; WHILE b[j] # 0X DO a[i] := b[j]; INC(i); INC(j) END; + a[i] := 0X + END Append; + + PROCEDURE ThisMod* (name: ARRAY OF CHAR): Module; + VAR m: Module; bodyname: ARRAY 64 OF CHAR; body: Command; + BEGIN m := modules(); + WHILE (m # NIL) & (m.name # name) DO m := m.next END ; + IF m # NIL THEN res := 0; resMsg := "" + ELSE res := 1; COPY(name, importing); + resMsg := ' module "'; Append(resMsg, name); Append(resMsg, '" not found'); + END ; + RETURN m + END ThisMod; + + PROCEDURE ThisCommand* (mod: Module; name: ARRAY OF CHAR): Command; + VAR c: Cmd; + BEGIN c := mod.cmds; + WHILE (c # NIL) & (c.name # name) DO c := c.next END ; + IF c # NIL THEN res := 0; resMsg := ""; RETURN c.cmd + ELSE res := 2; resMsg := ' command "'; COPY(name, importing); + Append(resMsg, mod.name); Append(resMsg, "."); Append(resMsg, name); Append(resMsg, '" not found'); + RETURN NIL + END + END ThisCommand; + + PROCEDURE Free*(name: ARRAY OF CHAR; all: BOOLEAN); + VAR m, p: Module; + BEGIN m := modules(); + IF all THEN + res := 1; resMsg := 'unloading "all" not yet supported' + ELSE + WHILE (m # NIL) & (m.name # name) DO p := m; m := m.next END ; + IF (m # NIL) & (m.refcnt = 0) THEN + IF m = modules() THEN setmodules(m.next) + ELSE p.next := m.next + END ; + res := 0 + ELSE res := 1; + IF m = NIL THEN resMsg := "module not found" + ELSE resMsg := "clients of this module exist" + END + END + END + END Free; + +END Modules. diff --git a/src/lib/v4/Reals.Mod b/src/lib/v4/Reals.Mod new file mode 100644 index 0000000000000000000000000000000000000000..cbc61d759e0223dc157d8a3a9aa00344f1ebd722 GIT binary patch literal 2543 zcmbtW(QevE6s3=TK>dZQXdi4au1!Ol#7QNBCxObr$TnF;Q6B=H1dGT-hO|Vh{lfj3 z{e-=DW`Kbbwbi~P8PCkQ=bn4!-u(OSk4mNTt}}Znb6$F`lZ*@JvRG8!SN<_@hkjf~ z!7yYH^ZTc{Up34cd`WF+IZfxpg%1#S;KcE8;lX%TeBb#1u5SlzV|RBS~L<*ZoP;2k+19XM&#tZLQhT@Ru-g#=E|A-PRb zcI{X3^B|5oEEvWN8hre10p{`)!l-{0vv%l1k>!s$B4vF1jKAjjV_%QM5@LGyXy6!B=(-;qK1Yz zBi63`@MpJ&8guvzE(8&g>Rmz<1SYp2?J{+{gqnm0)(?PyHb@du?fVFY(KrOX8))LW z)%lpE!?+Jg7xgqtt131yCB)iEGTg~>Ei9t_pG?Cj8vI6ndLANS)P=*@IqD>IQ3;hl zQ$%X8&Ntjim@S`YHS!M?6Kkrfi>E~K@b;E+?WAia&P_WsNftb8!_u;$(fnuuz87e= zj+C|pyeAf_tC@8xpip_}MA6y@Gsp{|o{q!AFc5;WrM0=l z7GH0YL+K5PsAxdBq5&ZbDn!u4%TYXW76rt^^au&GPSwcn3M7$3!~2TzkzTpA?nMGf z?Sn@~l-0=LGc_+xjqbhAsL z_j|ot1M^i4|2N;PocyX@uUIS9=Tu$0Z$O8Lt&IoS>-0LWdcqbyntK 0 DO Wch(" "); Wch(" "); DEC(i) END + END Indent; + + PROCEDURE ^Wtype(typ: OPT.Struct); + PROCEDURE ^Wstruct(typ: OPT.Struct); + + PROCEDURE Wsign(result: OPT.Struct; par: OPT.Object); + VAR paren, res, first: BOOLEAN; + BEGIN first := TRUE; + res := (result # NIL) (* hidden mthd *) & (result # OPT.notyp); + paren := res OR (par # NIL); + IF paren THEN Wch("(") END ; + WHILE par # NIL DO + IF ~first THEN Ws("; ") ELSE first := FALSE END ; + IF option = "x" THEN Wi(par^.adr); Wch(" ") END ; + IF par^.mode = VarPar THEN Ws("VAR ") END ; + Ws(par^.name); Ws(": "); Wtype(par^.typ); + par := par^.link + END ; + IF paren THEN Wch(")") END ; + IF res THEN Ws(": "); Wtype(result) END + END Wsign; + + PROCEDURE Objects(obj: OPT.Object; mode: SET); + VAR i: LONGINT; m: INTEGER; s: SET; ext: OPT.ConstExt; + BEGIN + IF obj # NIL THEN + Objects(obj^.left, mode); + IF obj^.mode IN mode THEN + CASE obj^.mode OF + | Con: + Indent(2); Ws(obj^.name); Ws(" = "); + CASE obj^.typ^.form OF + | Bool: + IF obj^.conval^.intval = 1 THEN Ws("TRUE") ELSE Ws("FALSE") END + | Char: + IF (obj^.conval^.intval >= 32) & (obj^.conval^.intval <= 126) THEN + Wch(22X); Wch(CHR(obj^.conval^.intval)); Wch(22X) + ELSE + i := obj^.conval^.intval DIV 16; + IF i > 9 THEN Wch(CHR(55 + i)) ELSE Wch(CHR(48 + i)) END ; + i := obj^.conval^.intval MOD 16; + IF i > 9 THEN Wch(CHR(55 + i)) ELSE Wch(CHR(48 + i)) END ; + Wch("X") + END + | SInt, Int, LInt: + Wi(obj^.conval^.intval) + | Set: + Wch("{"); i := 0; s := obj^.conval^.setval; + WHILE i <= MAX(SET) DO + IF i IN s THEN Wi(i); EXCL(s, i); + IF s # {} THEN Ws(", ") END + END ; + INC(i) + END ; + Wch("}") + | Real: + Texts.WriteReal(W, SHORT(obj^.conval^.realval), 16) + | LReal: + Texts.WriteLongReal(W, obj^.conval^.realval, 23) + | String: + Ws(obj^.conval^.ext^) + | NilTyp: + Ws("NIL") + END ; + Wch(";"); Wln + | Typ: + IF obj^.name # "" THEN Indent(2); + IF obj^.typ^.strobj = obj THEN (* canonical name *) + Wtype(obj^.typ); Ws(" = "); Wstruct(obj^.typ) + ELSE (* alias *) + Ws(obj^.name); Ws(" = "); Wtype(obj^.typ) + END ; + Wch(";"); Wln + END + | Var: + Indent(2); Ws(obj^.name); + IF obj^.vis = externalR THEN Ws("-: ") ELSE Ws(": ") END ; + Wtype(obj^.typ); Wch(";"); Wln + | XProc, CProc, IProc: + Indent(1); Ws("PROCEDURE "); + IF obj^.mode = IProc THEN Wch("+") + ELSIF obj^.mode = CProc THEN Wch("-") + END ; + Ws(obj^.name); + Wsign(obj^.typ, obj^.link); + IF obj^.mode = CProc THEN + ext := obj^.conval^.ext; m := ORD(ext^[0]); i := 1; Ws(' "'); + WHILE i <= m DO Wch(ext^[i]); INC(i) END ; + Wch('"'); + END ; + Wch(";"); Wln + END + END ; + Objects(obj^.right, mode) + END + END Objects; + + PROCEDURE Wmthd(obj: OPT.Object); + VAR + BEGIN + IF obj # NIL THEN + Wmthd(obj^.left); + IF (obj^.mode = TProc) & ((obj^.name # OPM.HdTProcName) OR (option = "x")) THEN + Indent(3); Ws("PROCEDURE ("); + IF obj^.name # OPM.HdTProcName THEN + IF obj^.link^.mode = VarPar THEN Ws("VAR ") END ; + Ws(obj^.link^.name); Ws(": "); Wtype(obj^.link^.typ) + END ; + Ws(") "); Ws(obj^.name); + Wsign(obj^.typ, obj^.link^.link); + Wch(";"); + IF option = "x" THEN Indent(1); + Ws("(* methno: "); Wi(obj^.adr DIV 10000H); Ws(" *)") + END ; + Wln; + END ; + Wmthd(obj^.right) + END + END Wmthd; + + PROCEDURE Wstruct(typ: OPT.Struct); + VAR fld: OPT.Object; + + PROCEDURE SysFlag; + BEGIN + IF typ^.sysflag # 0 THEN + Wch("["); Wi(typ^.sysflag); Ws("] ") + END + END SysFlag; + + BEGIN + CASE typ^.form OF + | Undef: + Ws("Undef") + | Pointer: + Ws("POINTER "); SysFlag; Ws("TO "); Wtype(typ^.BaseTyp) + | ProcTyp: + Ws("PROCEDURE "); SysFlag; Wsign(typ^.BaseTyp, typ^.link) + | Comp: + CASE typ^.comp OF + | Array: + Ws("ARRAY "); SysFlag; Wi(typ^.n); Ws(" OF "); Wtype(typ^.BaseTyp) + | DynArr: + Ws("ARRAY "); SysFlag; Ws("OF "); Wtype(typ^.BaseTyp) + | Record: + Ws("RECORD ");SysFlag; + IF typ^.BaseTyp # NIL THEN Wch("("); Wtype(typ^.BaseTyp); Wch(")") END ; + Wln; fld := typ^.link; + WHILE (fld # NIL) & (fld^.mode = Fld) DO + IF (option = "x") OR (fld^.name[0] # "@") THEN Indent(3); + IF option = "x" THEN Wi(fld^.adr); Wch(" ") END ; + Ws(fld^.name); + IF fld^.vis = externalR THEN Wch("-") END ; + Ws(": "); Wtype(fld^.typ); Wch(";"); + Wln + END ; + fld := fld^.link + END ; + Wmthd(typ^.link); + Indent(2); Ws("END "); + IF option = "x" THEN Indent(1); + Ws("(* size: "); Wi(typ^.size); Ws(" align: "); Wi(typ^.align); + Ws(" nofm: "); Wi(typ^.n); Ws(" *)") + END + END + END + END Wstruct; + + PROCEDURE Wtype(typ: OPT.Struct); + VAR obj: OPT.Object; + BEGIN + obj := typ^.strobj; + IF obj^.name # "" THEN + IF typ^.mno # 0 THEN Ws(OPT.GlbMod[typ^.mno].name); Wch(".") + ELSIF (typ = OPT.bytetyp) OR (typ = OPT.sysptrtyp) THEN Ws("SYSTEM.") + ELSIF obj^.vis = internal THEN Wch("#") + END ; + Ws(obj^.name) + ELSE + IF (option = "x") & (typ^.ref > OPM.MaxStruct) THEN Wch("#"); Wi(typ^.ref - OPM.MaxStruct); Wch(" ") END ; + Wstruct(typ) + END + END Wtype; + + PROCEDURE WModule(name: OPS.Name; T: Texts.Text); + VAR i: INTEGER; + beg, end: LONGINT; first, done: BOOLEAN; + + PROCEDURE Header(s: ARRAY OF CHAR); + BEGIN + beg := W.buf.len; Indent(1); Ws(s); Wln; end := W.buf.len + END Header; + + PROCEDURE CheckHeader; + VAR len: LONGINT; + BEGIN + len := T.len; + IF end = W.buf.len THEN Texts.Append(T, W.buf); Texts.Delete(T, len+beg, len+end) + ELSE Wln + END + END CheckHeader; + + BEGIN + OPT.Import("@notself", name, done); + IF done THEN + Ws("DEFINITION "); Ws(name); Wch(";"); Wln; Wln; + Header("IMPORT"); i := 1; first := TRUE; + WHILE i < OPT.nofGmod DO + IF first THEN first := FALSE; Indent(2) ELSE Ws(", ") END ; + Ws(OPT.GlbMod[i].name); + INC(i) + END ; + IF ~first THEN Wch(";"); Wln END ; + CheckHeader; + Header("CONST"); Objects(OPT.GlbMod[0].right, {Con}); CheckHeader; + Header("TYPE"); Objects(OPT.GlbMod[0].right, {Typ}); CheckHeader; + Header("VAR"); Objects(OPT.GlbMod[0].right, {Var}); CheckHeader; + Objects(OPT.GlbMod[0].right, {XProc, IProc, CProc}); + Wln; + Ws("END "); Ws(name); Wch("."); Wln; Texts.Append(T, W.buf) + ELSE + Texts.WriteString(W, name); Texts.WriteString(W, " -- symbol file not found"); + Texts.WriteLn(W); Texts.Append(T, W.buf) + END + END WModule; + + PROCEDURE Ident(VAR name, first: ARRAY OF CHAR); + VAR i, j: INTEGER; ch: CHAR; + BEGIN i := 0; + WHILE name[i] # 0X DO INC(i) END ; + WHILE (i >= 0) & (name[i] # "/") DO DEC(i) END ; + INC(i); j := 0; ch := name[i]; + WHILE (ch # ".") & (ch # 0X) DO first[j] := ch; INC(i); INC(j); ch := name[i] END ; + first[j] := 0X + END Ident; + + PROCEDURE ShowDef*; + VAR T, dummyT: Texts.Text; S, vname, name: OPS.Name; R: Texts.Reader; ch: CHAR; + s: ARRAY 1024 OF CHAR; i: INTEGER; + BEGIN + option := 0X; Args.Get(1, S); + IF Args.argc > 2 THEN + IF S[0] = OptionChar THEN option := S[1]; Args.Get(2, S) + ELSE Args.Get(2, vname); option := vname[1] + END + END ; + IF Args.argc >= 2 THEN + Ident(S, name); + NEW(T); Texts.Open(T, ""); + OPT.Init(name, {}); OPT.SelfName := "AvoidErr154"; WModule(name, T); OPT.Close; + Texts.OpenReader(R, T, 0); Texts.Read(R, ch); i := 0; + WHILE ~R.eot DO + IF ch = 0DX THEN s[i] := 0X; i := 0; Console.String(s); Console.Ln + ELSE s[i] := ch; INC(i) + END ; + Texts.Read(R, ch) + END ; + s[i] := 0X; Console.String(s) + END + END ShowDef; + +BEGIN + OPT.typSize := OPV.TypSize; Texts.OpenWriter(W); ShowDef +END BrowserCmd. diff --git a/src/tools/coco/CR.ATG b/src/tools/coco/CR.ATG new file mode 100644 index 00000000..aa68c1ed --- /dev/null +++ b/src/tools/coco/CR.ATG @@ -0,0 +1,376 @@ +COMPILER CR (*H.Moessenboeck 17.11.93, Coco/R*) + +(*---------------------- semantic declarations ----------------------------*) + +IMPORT CRT, CRA, CRX, Sets, Texts := CmdlnTexts, Oberon; + +CONST + ident = 0; string = 1; (*symbol kind*) + +VAR + str: ARRAY 32 OF CHAR; + w: Texts.Writer; + genScanner: BOOLEAN; + + +PROCEDURE SemErr(nr: INTEGER); +BEGIN + CRS.Error(200+nr, CRS.pos); +END SemErr; + +PROCEDURE MatchLiteral(sp: INTEGER); (*store string either as token or as literal*) + VAR sn, sn1: CRT.SymbolNode; matchedSp: INTEGER; +BEGIN + CRT.GetSym(sp, sn); + CRA.MatchDFA(sn.name, sp, matchedSp); + IF matchedSp # CRT.noSym THEN + CRT.GetSym(matchedSp, sn1); sn1.struct := CRT.classLitToken; CRT.PutSym(matchedSp, sn1); + sn.struct := CRT.litToken + ELSE sn.struct := CRT.classToken; + END; + CRT.PutSym(sp, sn) +END MatchLiteral; + +PROCEDURE SetCtx(gp: INTEGER); (*set transition code to CRT.contextTrans*) + VAR gn: CRT.GraphNode; +BEGIN + WHILE gp > 0 DO + CRT.GetNode(gp, gn); + IF gn.typ IN {CRT.char, CRT.class} THEN + gn.p2 := CRT.contextTrans; CRT.PutNode(gp, gn) + ELSIF gn.typ IN {CRT.opt, CRT.iter} THEN SetCtx(gn.p1) + ELSIF gn.typ = CRT.alt THEN SetCtx(gn.p1); SetCtx(gn.p2) + END; + gp := gn.next + END +END SetCtx; + +PROCEDURE SetDDT(s: ARRAY OF CHAR); + VAR name: ARRAY 64 OF CHAR; i: INTEGER; ch: CHAR; +BEGIN + i := 1; + WHILE s[i] # 0X DO + ch := s[i]; INC(i); + IF (ch >= "0") & (ch <= "9") THEN CRT.ddt[ORD(ch)-ORD("0")] := TRUE END + END +END SetDDT; + +PROCEDURE FixString (VAR s: ARRAY OF CHAR; len: INTEGER); + VAR double: BOOLEAN; i: INTEGER; +BEGIN + double := FALSE; + FOR i := 0 TO len-2 DO + IF s[i] = '"' THEN double := TRUE END + END; + IF ~ double THEN s[0] := '"'; s[len-1] := '"' END +END FixString; + +(*-------------------------------------------------------------------------*) +CHARACTERS + letter = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz". + digit = "0123456789". + eol = CHR(13). + tab = CHR(9). + noQuote1 = ANY - '"' - eol. + noQuote2 = ANY - "'" - eol. + +IGNORE eol + tab + CHR(28) + + +TOKENS + ident = letter {letter | digit}. + string = '"' {noQuote1} '"' | "'" {noQuote2} "'". + number = digit {digit}. + + +PRAGMAS + ddtSym = "$" {digit}. (. CRS.GetName(CRS.nextPos, CRS.nextLen, str); SetDDT(str) .) + + +COMMENTS FROM "(*" TO "*)" NESTED + +(*-------------------------------------------------------------------------*) +PRODUCTIONS + +CR (. VAR undef, hasAttrs, ok, ok1: BOOLEAN; eofSy, gR: INTEGER; + gramLine, sp: INTEGER; + gn: CRT.GraphNode; sn: CRT.SymbolNode; + name, gramName: CRT.Name; .) += + "COMPILER" (. Texts.OpenWriter(w); + CRT.Init; CRX.Init; CRA.Init; + gramLine := CRS.line; + eofSy := CRT.NewSym(CRT.t, "EOF", 0); + genScanner := TRUE; + CRT.ignoreCase := FALSE; + ok := TRUE; + Sets.Clear(CRT.ignored) .) + ident (. CRS.GetName(CRS.pos, CRS.len, gramName); + CRT.semDeclPos.beg := CRS.nextPos; CRT.importPos.beg := -1; .) + { "IMPORT" (. CRT.importPos.beg := CRS.nextPos .) + {ANY} ";" (. CRT.importPos.len := SHORT(CRS.pos - CRT.importPos.beg); + CRT.importPos.col := 0; + CRT.semDeclPos.beg := CRS.nextPos .) + | ANY + } (. CRT.semDeclPos.len := SHORT(CRS.nextPos - CRT.semDeclPos.beg); + CRT.semDeclPos.col := 0 .) + { Declaration } + SYNC + "PRODUCTIONS" (. IF genScanner THEN CRA.MakeDeterministic(ok) END; + CRT.nNodes := 0 .) + { ident (. CRS.GetName(CRS.pos, CRS.len, name); + sp := CRT.FindSym(name); undef := sp = CRT.noSym; + IF undef THEN + sp := CRT.NewSym(CRT.nt, name, CRS.line); + CRT.GetSym(sp, sn); + ELSE + CRT.GetSym(sp, sn); + IF sn.typ = CRT.nt THEN + IF sn.struct > 0 THEN SemErr(7) END + ELSE SemErr(8) + END; + sn.line := CRS.line + END; + hasAttrs := sn.attrPos.beg >= 0 .) + ( Attribs (. IF ~undef & ~hasAttrs THEN SemErr(9) END; + CRT.PutSym(sp, sn) .) + | (. IF ~undef & hasAttrs THEN SemErr(10) END .) + ) + [ SemText ] + WEAK "=" + Expression (. CRT.CompleteGraph(gR); CRT.PutSym(sp, sn); + IF CRT.ddt[2] THEN CRT.PrintGraph END .) + WEAK "." + } (. sp := CRT.FindSym(gramName); + IF sp = CRT.noSym THEN SemErr(11); + ELSE + CRT.GetSym(sp, sn); + IF sn.attrPos.beg >= 0 THEN SemErr(12) END; + CRT.root := CRT.NewNode(CRT.nt, sp, gramLine); + END .) + "END" ident (. CRS.GetName(CRS.pos, CRS.len, name); + IF name # gramName THEN SemErr(17) END; + IF CRS.errors = 0 THEN + Texts.WriteString(w, " checking"); Texts.Append(Oberon.Log, w.buf); + CRT.CompSymbolSets; + IF ok THEN CRT.TestCompleteness(ok) END; + IF ok THEN + CRT.TestIfAllNtReached(ok1); CRT.FindCircularProductions(ok) + END; + IF ok THEN CRT.TestIfNtToTerm(ok) END; + IF ok THEN CRT.LL1Test(ok1) END; + IF CRT.ddt[0] THEN CRA.PrintStates END; + IF CRT.ddt[7] THEN CRT.XRef END; + IF ok THEN + Texts.WriteString(w, " +parser"); + Texts.Append(Oberon.Log, w.buf); + CRX.GenCompiler; + IF genScanner THEN + Texts.WriteString(w, " +scanner"); + Texts.Append(Oberon.Log, w.buf); + CRA.WriteScanner + END; + IF CRT.ddt[8] THEN CRX.WriteStatistics END + END + ELSE ok := FALSE + END; + IF CRT.ddt[6] THEN CRT.PrintSymbolTable END; + IF ok THEN Texts.WriteString(w, " done") END; + Texts.WriteLn(w); Texts.Append(Oberon.Log, w.buf) .) + ".". +(*------------------------------------------------------------------------------------*) +Declaration (. VAR gL1, gR1, gL2, gR2: INTEGER; nested: BOOLEAN; .) += + "CHARACTERS" { SetDecl } +| "TOKENS" { TokenDecl } +| "PRAGMAS" { TokenDecl } +| "COMMENTS" + "FROM" TokenExpr + "TO" TokenExpr + ( "NESTED" (. nested := TRUE .) + | (. nested := FALSE .) + ) (. CRA.NewComment(gL1, gL2, nested) .) +| "IGNORE" + ( "CASE" (. CRT.ignoreCase := TRUE .) + | Set + ) +. + +(*------------------------------------------------------------------------------------*) +SetDecl (. VAR c: INTEGER; set: CRT.Set; name: CRT.Name; .) += + ident (. CRS.GetName(CRS.pos, CRS.len, name); + c := CRT.ClassWithName(name); IF c >= 0 THEN SemErr(7) END .) + "=" Set (. c := CRT.NewClass(name, set) .) + ".". +(*------------------------------------------------------------------------------------*) +Set (. VAR set2: CRT.Set; .) += + SimSet + { "+" SimSet (. Sets.Unite(set, set2) .) + | "-" SimSet (. Sets.Differ(set, set2) .) + }. +(*------------------------------------------------------------------------------------*) +SimSet (. VAR c, n, i: INTEGER; name: CRT.Name; s: ARRAY 128 OF CHAR; .) += + ident (. CRS.GetName(CRS.pos, CRS.len, name); + c := CRT.ClassWithName(name); + IF c < 0 THEN SemErr(15); Sets.Clear(set) + ELSE CRT.GetClass(c, set) + END .) +| string (. CRS.GetName(CRS.pos, CRS.len, s); + Sets.Clear(set); i := 1; + WHILE s[i] # s[0] DO + Sets.Incl(set, ORD(s[i])); INC(i) + END .) +| "CHR" "(" number (. CRS.GetName(CRS.pos, CRS.len, name); + n := 0; i := 0; + WHILE name[i] # 0X DO + n := 10 * n + (ORD(name[i]) - ORD("0")); + INC(i) + END; + Sets.Clear(set); Sets.Incl(set, n) .) + ")" +| "ANY" (. Sets.Fill(set) .) +. +(*------------------------------------------------------------------------------------*) +TokenDecl (. VAR sp, kind, gL, gR: INTEGER; sn: CRT.SymbolNode; + pos: CRT.Position; name: CRT.Name; .) += + Symbol (. IF CRT.FindSym(name) # CRT.noSym THEN SemErr(7) + ELSE + sp := CRT.NewSym(typ, name, CRS.line); + CRT.GetSym(sp, sn); sn.struct := CRT.classToken; + CRT.PutSym(sp, sn) + END .) + SYNC + ( "=" TokenExpr "." (. IF kind # ident THEN SemErr(13) END; + CRT.CompleteGraph(gR); + CRA.ConvertToStates(gL, sp) .) + | (. IF kind = ident THEN genScanner := FALSE + ELSE MatchLiteral(sp) + END .) + ) + [ SemText (. IF typ = CRT.t THEN SemErr(14) END; + CRT.GetSym(sp, sn); sn.semPos := pos; CRT.PutSym(sp, sn) .) + ]. +(*------------------------------------------------------------------------------------*) +Expression (. VAR gL2, gR2: INTEGER; first: BOOLEAN; .) += + Term (. first := TRUE .) + { WEAK "|" + Term (. IF first THEN + CRT.MakeFirstAlt(gL, gR); first := FALSE + END; + CRT.ConcatAlt(gL, gR, gL2, gR2) .) + }. +(*------------------------------------------------------------------------------------*) +Term (. VAR gL2, gR2: INTEGER; .) += (. gL := 0; gR := 0 .) + ( Factor + { Factor (. CRT.ConcatSeq(gL, gR, gL2, gR2) .) + } + | (. gL := CRT.NewNode(CRT.eps, 0, 0); gR := gL .) + ). +(*------------------------------------------------------------------------------------*) +Factor (. VAR sp, kind, c: INTEGER; name: CRT.Name; + gn: CRT.GraphNode; sn: CRT.SymbolNode; + set: CRT.Set; + undef, weak: BOOLEAN; + pos: CRT.Position; .) += + (. gL :=0; gR := 0; weak := FALSE .) +( [ "WEAK" (. weak := TRUE .) + ] + Symbol (. sp := CRT.FindSym(name); undef := sp = CRT.noSym; + IF undef THEN + IF kind = ident THEN (*forward nt*) + sp := CRT.NewSym(CRT.nt, name, 0) + ELSE (*undefined string in production*) + sp := CRT.NewSym(CRT.t, name, CRS.line); + MatchLiteral(sp) + END + END; + CRT.GetSym(sp, sn); + IF ~(sn.typ IN {CRT.t,CRT.nt}) THEN SemErr(4) END; + IF weak THEN + IF sn.typ = CRT.t THEN sn.typ := CRT.wt ELSE SemErr(23) END + END; + gL := CRT.NewNode(sn.typ, sp, CRS.line); gR := gL .) + + ( Attribs (. CRT.GetNode(gL, gn); gn.pos := pos; CRT.PutNode(gL, gn); + CRT.GetSym(sp, sn); + IF undef THEN + sn.attrPos := pos; CRT.PutSym(sp, sn) + ELSIF sn.attrPos.beg < 0 THEN SemErr(5) + END; + IF kind # ident THEN SemErr(3) END .) + | (. CRT.GetSym(sp, sn); + IF sn.attrPos.beg >= 0 THEN SemErr(6) END .) + ) +| "(" Expression ")" +| "[" Expression "]" (. CRT.MakeOption(gL, gR) .) +| "{" Expression "}" (. CRT.MakeIteration(gL, gR) .) +| SemText (. gL := CRT.NewNode(CRT.sem, 0, 0); + gR := gL; + CRT.GetNode(gL, gn); gn.pos := pos; CRT.PutNode(gL, gn) .) +| "ANY" (. Sets.Fill(set); Sets.Excl(set, CRT.eofSy); + gL := CRT.NewNode(CRT.any, CRT.NewSet(set), 0); gR := gL .) +| "SYNC" (. gL := CRT.NewNode(CRT.sync, 0, 0); gR := gL .) +). +(*------------------------------------------------------------------------------------*) +TokenExpr (. VAR gL2, gR2: INTEGER; first: BOOLEAN; .) += + TokenTerm (. first := TRUE .) + { WEAK "|" + TokenTerm (. IF first THEN + CRT.MakeFirstAlt(gL, gR); first := FALSE + END; + CRT.ConcatAlt(gL, gR, gL2, gR2) .) + }. +(*------------------------------------------------------------------------------------*) +TokenTerm (. VAR gL2, gR2: INTEGER; .) += + TokenFactor + { TokenFactor (. CRT.ConcatSeq(gL, gR, gL2, gR2) .) + } + [ "CONTEXT" + "(" TokenExpr (. SetCtx(gL2); CRT.ConcatSeq(gL, gR, gL2, gR2) .) + ")" + ]. +(*------------------------------------------------------------------------------------*) +TokenFactor (. VAR kind, c: INTEGER; set: CRT.Set; name: CRT.Name; .) += + (. gL :=0; gR := 0 .) +( Symbol (. IF kind = ident THEN + c := CRT.ClassWithName(name); + IF c < 0 THEN + SemErr(15); + Sets.Clear(set); c := CRT.NewClass(name, set) + END; + gL := CRT.NewNode(CRT.class, c, 0); gR := gL + ELSE (*string*) + CRT.StrToGraph(name, gL, gR) + END .) +| "(" TokenExpr ")" +| "[" TokenExpr "]" (. CRT.MakeOption(gL, gR) .) +| "{" TokenExpr "}" (. CRT.MakeIteration(gL, gR) .) +). +(*------------------------------------------------------------------------------------*) +Symbol = + ( ident (. kind := ident .) + | string (. kind := string .) + ) (. CRS.GetName(CRS.pos, CRS.len, name); + IF kind = string THEN FixString(name, CRS.len) END .) . +(*------------------------------------------------------------------------------------*) +Attribs = + "<" (. attrPos.beg := CRS.nextPos; attrPos.col := CRS.nextCol .) + { ANY } + ">" (. attrPos.len := SHORT(CRS.pos - attrPos.beg) .). +(*------------------------------------------------------------------------------------*) +SemText = + "(." (. semPos.beg := CRS.nextPos; semPos.col := CRS.nextCol .) + { ANY } + ".)" (. semPos.len := SHORT(CRS.pos - semPos.beg) .). + +END CR. diff --git a/src/tools/coco/CRA.Mod b/src/tools/coco/CRA.Mod new file mode 100644 index 00000000..aa0f5685 --- /dev/null +++ b/src/tools/coco/CRA.Mod @@ -0,0 +1,930 @@ +MODULE CRA; (* handles the DFA *) + +IMPORT Oberon, Texts := CmdlnTexts, Sets, CRS, CRT; + +CONST + maxStates = 300; + EOL = 0DX; + +TYPE + State = POINTER TO StateNode; + Action = POINTER TO ActionNode; + Target = POINTER TO TargetNode; + + StateNode = RECORD (*state of finite automaton*) + nr: INTEGER; (*state number*) + firstAction: Action; (*to first action of this state*) + endOf: INTEGER; (*nr. of recognized token if state is final*) + ctx: BOOLEAN; (*TRUE: state reached by contextTrans*) + next: State + END; + ActionNode = RECORD (*action of finite automaton*) + typ: INTEGER; (*type of action symbol: char, class*) + sym: INTEGER; (*action symbol*) + tc: INTEGER; (*transition code: normTrans, contextTrans*) + target: Target; (*states after transition with input symbol*) + next: Action; + END; + TargetNode = RECORD (*state after transition with input symbol*) + state: State; (*target state*) + next: Target; + END; + + Comment = POINTER TO CommentNode; + CommentNode = RECORD (* info about a comment syntax *) + start,stop: ARRAY 2 OF CHAR; + nested: BOOLEAN; + next: Comment; + END; + + Melted = POINTER TO MeltedNode; + MeltedNode = RECORD (* info about melted states *) + set: CRT.Set; (* set of old states *) + state: State; (* new state *) + next: Melted; + END; + + +VAR + firstState: State; + lastState: State; (* last allocated state *) + rootState: State; (* start state of DFA *) + lastSimState: INTEGER; (* last non melted state *) + stateNr: INTEGER; (*number of last allocated state*) + firstMelted: Melted; (* list of melted states *) + firstComment: Comment; (* list of comments *) + out: Texts.Writer; (* current output *) + fram: Texts.Reader; (* scanner frame input *) + + +PROCEDURE SemErr(nr: INTEGER); +BEGIN CRS.Error(200+nr, CRS.pos) +END SemErr; + +PROCEDURE Put(ch: CHAR); +BEGIN Texts.Write(out, ch) END Put; + +PROCEDURE PutS(s: ARRAY OF CHAR); + VAR i: INTEGER; +BEGIN i := 0; + WHILE (i < LEN(s)) & (s[i] # 0X) DO + IF s[i] = "$" THEN Texts.WriteLn(out) ELSE Texts.Write(out, s[i]) END; + INC(i) + END +END PutS; + +PROCEDURE PutI(i: INTEGER); +BEGIN Texts.WriteInt(out, i, 0) END PutI; + +PROCEDURE PutI2(i, n: INTEGER); +BEGIN Texts.WriteInt(out, i, n) END PutI2; + +PROCEDURE PutC(ch: CHAR); +BEGIN + IF (ch < " ") OR (ORD(ch) = 34) THEN PutS("CHR("); PutI(ORD(ch)); Put(")") + ELSE Put(CHR(34)); Put(ch); Put(CHR(34)) + END +END PutC; + +PROCEDURE PutRange(s: CRT.Set); + VAR lo, hi: ARRAY 32 OF CHAR; top, i: INTEGER; s1: CRT.Set; +BEGIN + (*----- fill lo and hi *) + top := -1; i := 0; + WHILE i < 128 DO + IF Sets.In(s, i) THEN + INC(top); lo[top] := CHR(i); INC(i); + WHILE (i < 128) & Sets.In(s, i) DO INC(i) END; + hi[top] := CHR(i - 1) + ELSE INC(i) + END + END; + (*----- print ranges *) + IF (top = 1) & (lo[0] = 0X) & (hi[1] = 7FX) & (CHR(ORD(hi[0]) + 2) = lo[1]) THEN + Sets.Fill(s1); Sets.Differ(s1, s); PutS("~ ("); PutRange(s1); Put(")") + ELSE + i := 0; + WHILE i <= top DO + IF hi[i] = lo[i] THEN PutS("(ch="); PutC(lo[i]) + ELSIF lo[i] = 0X THEN PutS("(ch<="); PutC(hi[i]) + ELSIF hi[i] = 7FX THEN PutS("(ch>="); PutC(lo[i]) + ELSE PutS("(ch>="); PutC(lo[i]); PutS(") & (ch<="); PutC(hi[i]) + END; + Put(")"); + IF i < top THEN PutS(" OR ") END; + INC(i) + END + END +END PutRange; + +PROCEDURE PutChCond(ch: CHAR); +BEGIN + PutS("(ch ="); PutC(ch); Put(")") +END PutChCond; + +PROCEDURE Length*(s: ARRAY OF CHAR): INTEGER; + VAR i: INTEGER; +BEGIN + i:=0; WHILE (i < LEN(s)) & (s[i] # 0X) DO INC(i) END; + RETURN i +END Length; + + +PROCEDURE AddAction(act:Action; VAR head:Action); +VAR a,lasta: Action; +BEGIN + a := head; lasta := NIL; + LOOP + IF (a = NIL) (*collecting classes at the front gives better*) + OR (act^.typ < a^.typ) THEN (*performance*) + act^.next := a; + IF lasta = NIL THEN head := act ELSE lasta^.next := act END; + EXIT; + END; + lasta := a; a := a^.next; + END; +END AddAction; + + +PROCEDURE DetachAction(a:Action; VAR L:Action); +BEGIN + IF L = a THEN L := a^.next ELSIF L # NIL THEN DetachAction(a, L^.next) END +END DetachAction; + + +PROCEDURE TheAction (state: State; ch: CHAR): Action; + VAR a: Action; set: CRT.Set; +BEGIN + a := state.firstAction; + WHILE a # NIL DO + IF a.typ = CRT.char THEN + IF ORD(ch) = a.sym THEN RETURN a END + ELSIF a.typ = CRT.class THEN + CRT.GetClass(a^.sym, set); + IF Sets.In(set, ORD(ch)) THEN RETURN a END + END; + a := a.next + END; + RETURN NIL +END TheAction; + + +PROCEDURE AddTargetList(VAR lista, listb: Target); +VAR p,t: Target; + + PROCEDURE AddTarget(t: Target; VAR list:Target); + VAR p,lastp: Target; + BEGIN + p:=list; lastp:=NIL; + LOOP + IF (p = NIL) OR (t^.state.nr < p^.state.nr) THEN EXIT END; + IF p^.state = t^.state THEN RETURN END; + lastp := p; p := p^.next + END; + t^.next:=p; + IF lastp=NIL THEN list:=t ELSE lastp^.next:=t END + END AddTarget; + +BEGIN + p := lista; + WHILE p # NIL DO + NEW(t); t^.state:=p^.state; AddTarget(t, listb); + p := p^.next + END +END AddTargetList; + + +PROCEDURE NewMelted(set: CRT.Set; state: State): Melted; +VAR melt: Melted; +BEGIN + NEW(melt); melt^.set := set; melt^.state := state; + melt^.next := firstMelted; firstMelted := melt; + RETURN melt +END NewMelted; + + +PROCEDURE NewState(): State; + VAR state: State; +BEGIN + NEW(state); INC(stateNr); state.nr := stateNr; + state.firstAction := NIL; state.endOf := CRT.noSym; state.ctx := FALSE; state.next := NIL; + IF firstState = NIL THEN firstState := state ELSE lastState.next := state END; + lastState := state; + RETURN state +END NewState; + + +PROCEDURE NewTransition(from, to: State; typ, sym, tc: INTEGER); + VAR a: Action; t: Target; +BEGIN + NEW(t); t^.state := to; t^.next := NIL; + NEW(a); a^.typ := typ; a^.sym := sym; a^.tc := tc; a^.target := t; + AddAction(a, from.firstAction) +END NewTransition; + + +PROCEDURE NewComment*(from, to: INTEGER; nested: BOOLEAN); + VAR com: Comment; + + PROCEDURE MakeStr(gp: INTEGER; VAR s: ARRAY OF CHAR); + VAR i, n: INTEGER; gn: CRT.GraphNode; set: CRT.Set; + BEGIN + i := 0; + WHILE gp # 0 DO + CRT.GetNode(gp, gn); + IF gn.typ = CRT.char THEN + IF i < 2 THEN s[i] := CHR(gn.p1) END; INC(i) + ELSIF gn.typ = CRT.class THEN + CRT.GetClass(gn.p1, set); + IF Sets.Elements(set, n) # 1 THEN SemErr(26) END; + IF i < 2 THEN s[i] := CHR(n) END; INC(i) + ELSE SemErr(22) + END; + gp := gn.next + END; + IF i > 2 THEN SemErr(25) ELSIF i < 2 THEN s[i] := 0X END + END MakeStr; + +BEGIN + NEW(com); + MakeStr(from, com^.start); MakeStr(to, com^.stop); + com^.nested := nested; + com^.next := firstComment; firstComment := com +END NewComment; + + +PROCEDURE MakeSet(p: Action; VAR set: CRT.Set); +BEGIN + IF p^.typ = CRT.class THEN CRT.GetClass(p^.sym, set) + ELSE Sets.Clear(set); Sets.Incl(set, p^.sym) + END +END MakeSet; + + +PROCEDURE ChangeAction(a: Action; set: CRT.Set); +VAR nr: INTEGER; +BEGIN + IF Sets.Elements(set, nr) = 1 THEN a^.typ := CRT.char; a^.sym := nr + ELSE + nr := CRT.ClassWithSet(set); + IF nr < 0 THEN nr := CRT.NewClass("#0", set) END; (*class with dummy name*) + a^.typ := CRT.class; a^.sym := nr + END +END ChangeAction; + + +PROCEDURE CombineShifts; + VAR state: State; n: INTEGER; a, b, c: Action; seta, setb: CRT.Set; +BEGIN + state := firstState; + WHILE state # NIL DO + a := state.firstAction; + WHILE a # NIL DO + b := a^.next; + WHILE b # NIL DO + IF (a^.target^.state = b^.target^.state) & (a^.tc = b^.tc) THEN + MakeSet(a, seta); MakeSet(b, setb); Sets.Unite(seta, setb); + ChangeAction(a, seta); + c := b; b := b^.next; DetachAction(c, a) + ELSE b := b^.next + END + END; + a := a^.next + END; + state := state.next + END +END CombineShifts; + + +PROCEDURE DeleteRedundantStates; +VAR + action: Action; + state, s1, s2: State; + used: CRT.Set; + newState: ARRAY maxStates OF State; + + PROCEDURE FindUsedStates(state: State); + VAR action: Action; + BEGIN + IF Sets.In(used, state.nr) THEN RETURN END; + Sets.Incl(used, state.nr); + action := state.firstAction; + WHILE action # NIL DO + FindUsedStates(action^.target^.state); + action:=action^.next + END + END FindUsedStates; + + PROCEDURE DelUnused; + VAR state: State; + BEGIN + state := firstState.next; lastState := firstState; stateNr := 0; (*firstState has number 0*) + WHILE state # NIL DO + IF Sets.In(used, state.nr) THEN INC(stateNr); state.nr := stateNr; lastState := state + ELSE lastState.next := state.next + END; + state := state.next + END + END DelUnused; + +BEGIN + Sets.Clear(used); FindUsedStates(firstState); + (*---------- combine equal final states ------------*) + s1 := firstState.next; (*first state cannot be final*) + WHILE s1 # NIL DO + IF Sets.In(used, s1.nr) & (s1.endOf # CRT.noSym) & (s1.firstAction = NIL) & ~ s1.ctx THEN + s2 := s1.next; + WHILE s2 # NIL DO + IF Sets.In(used, s2.nr) & (s1.endOf = s2.endOf) & (s2.firstAction = NIL) & ~ s2.ctx THEN + Sets.Excl(used, s2.nr); newState[s2.nr] := s1 + END; + s2 := s2.next + END + END; + s1 := s1.next + END; + state := firstState; (*> state := firstState.next*) + WHILE state # NIL DO + IF Sets.In(used, state.nr) THEN + action := state.firstAction; + WHILE action # NIL DO + IF ~ Sets.In(used, action.target.state.nr) THEN + action^.target^.state := newState[action.target.state.nr] + END; + action := action^.next + END + END; + state := state.next + END; + DelUnused +END DeleteRedundantStates; + + +PROCEDURE ConvertToStates*(gp0, sp: INTEGER); +(*note: gn.line is abused as a state number!*) + VAR n: INTEGER; S: ARRAY maxStates OF State; gn: CRT.GraphNode; + + PROCEDURE TheState(gp: INTEGER): State; + VAR state: State; gn: CRT.GraphNode; + BEGIN + IF gp = 0 THEN state := NewState(); state.endOf := sp; RETURN state + ELSE CRT.GetNode(gp, gn); RETURN S[gn.line] + END + END TheState; + + PROCEDURE Step(from: State; gp: INTEGER); + VAR gn: CRT.GraphNode; + BEGIN + IF gp = 0 THEN RETURN END; + CRT.GetNode(gp, gn); + CASE gn.typ OF + CRT.class, CRT.char: NewTransition(from, TheState(ABS(gn.next)), gn.typ, gn.p1, gn.p2) + | CRT.alt: Step(from, gn.p1); Step(from, gn.p2) + | CRT.opt, CRT.iter: Step(from, ABS(gn.next)); Step(from, gn.p1) + END + END Step; + + PROCEDURE FindTrans(gp: INTEGER; state: State); + VAR gn: CRT.GraphNode; new: BOOLEAN; + BEGIN + IF gp = 0 THEN RETURN END; (*end of graph*) + CRT.GetNode(gp, gn); + IF gn.line # 0 THEN RETURN END; (*already visited*) + new := state = NIL; + IF new THEN state := NewState() END; + INC(n); S[n] := state; gn.line := n; CRT.PutNode(gp, gn); + IF CRT.DelGraph(gp) THEN state.endOf := sp END; (*state is end state*) + CASE gn.typ OF + CRT.class, CRT.char: FindTrans(ABS(gn.next), NIL); + | CRT.opt: FindTrans(ABS(gn.next), NIL); FindTrans(gn.p1, state) + | CRT.iter: FindTrans(ABS(gn.next), state); FindTrans(gn.p1, state) + | CRT.alt: FindTrans(gn.p1, state); FindTrans(gn.p2, state) + END; + IF new OR (state = firstState) & (gp = gp0) THEN (*start of a group of equally numbered nodes*) + Step(state, gp) + END + END FindTrans; + +BEGIN + IF CRT.DelGraph(gp0) THEN SemErr(20) END; + CRT.GetNode(gp0, gn); + IF gn.typ = CRT.iter THEN SemErr(21) END; + n := 0; FindTrans(gp0, firstState) +END ConvertToStates; + + +PROCEDURE MatchDFA* (s: ARRAY OF CHAR; sp: INTEGER; VAR matchedSp: INTEGER); + VAR state, to: State; a: Action; i, len: INTEGER; +BEGIN (*s with quotes*) + state := firstState; i := 1; len := Length(s) - 1; + LOOP (*try to match s against existing DFA*) + IF i = len THEN EXIT END; + a := TheAction(state, s[i]); + IF a = NIL THEN EXIT END; + state := a.target.state; INC(i) + END; + WHILE i < len DO (*make new DFA for s[i..len-1]*) + to := NewState(); + NewTransition(state, to, CRT.char, ORD(s[i]), CRT.normTrans); + state := to; INC(i) + END; + matchedSp := state.endOf; + IF state.endOf = CRT.noSym THEN state.endOf := sp END +END MatchDFA; + + +PROCEDURE SplitActions(a, b: Action); +VAR c: Action; seta, setb, setc: CRT.Set; + + PROCEDURE CombineTransCodes(t1, t2: INTEGER; VAR result:INTEGER); + BEGIN + IF t1 = CRT.contextTrans THEN result := t1 ELSE result := t2 END + END CombineTransCodes; + +BEGIN + MakeSet(a, seta); MakeSet(b, setb); + IF Sets.Equal(seta, setb) THEN + AddTargetList(b^.target, a^.target); + CombineTransCodes(a^.tc, b^.tc, a^.tc); + DetachAction(b, a) + ELSIF Sets.Includes(seta, setb) THEN + setc := seta; Sets.Differ(setc, setb); + AddTargetList(a^.target, b^.target); + CombineTransCodes(a^.tc, b^.tc, b^.tc); + ChangeAction(a, setc) + ELSIF Sets.Includes(setb, seta) THEN + setc := setb; Sets.Differ(setc, seta); + AddTargetList(b^.target, a^.target); + CombineTransCodes(a^.tc, b^.tc, a^.tc); + ChangeAction(b, setc) + ELSE + Sets.Intersect(seta, setb, setc); + Sets.Differ(seta, setc); + Sets.Differ(setb, setc); + ChangeAction(a, seta); + ChangeAction(b, setb); + NEW(c); c^.target:=NIL; + CombineTransCodes(a^.tc, b^.tc, c^.tc); + AddTargetList(a^.target, c^.target); + AddTargetList(b^.target, c^.target); + ChangeAction(c, setc); + AddAction(c, a) + END +END SplitActions; + + +PROCEDURE MakeUnique(state: State; VAR changed:BOOLEAN); +VAR a, b: Action; + + PROCEDURE Overlap(a, b: Action): BOOLEAN; + VAR seta, setb: CRT.Set; + BEGIN + IF a^.typ = CRT.char THEN + IF b^.typ = CRT.char THEN RETURN a^.sym = b^.sym + ELSE CRT.GetClass(b^.sym, setb); RETURN Sets.In(setb, a^.sym) + END + ELSE + CRT.GetClass(a^.sym, seta); + IF b^.typ = CRT.char THEN RETURN Sets.In(seta, b^.sym) + ELSE CRT.GetClass(b^.sym, setb); RETURN ~ Sets.Different(seta, setb) + END + END + END Overlap; + +BEGIN + a := state.firstAction; changed := FALSE; + WHILE a # NIL DO + b := a^.next; + WHILE b # NIL DO + IF Overlap(a, b) THEN SplitActions(a, b); changed:=TRUE END; + b := b^.next; + END; + a:=a^.next + END +END MakeUnique; + + +PROCEDURE MeltStates(state: State; VAR correct:BOOLEAN); +VAR + action: Action; + ctx: BOOLEAN; + endOf: INTEGER; + melt: Melted; + set: CRT.Set; + s: State; + changed: BOOLEAN; + + PROCEDURE AddMeltedSet(nr: INTEGER; VAR set: CRT.Set); + VAR m: Melted; + BEGIN + m := firstMelted; + WHILE (m # NIL) & (m^.state.nr # nr) DO m := m^.next END; + IF m = NIL THEN HALT(98) END; + Sets.Unite(set, m^.set); + END AddMeltedSet; + + PROCEDURE GetStateSet(t: Target; VAR set: CRT.Set; VAR endOf: INTEGER; VAR ctx:BOOLEAN); + VAR statenr: INTEGER; (*lastS: State;*) + BEGIN + Sets.Clear(set); endOf := CRT.noSym; ctx := FALSE; (*lastS := NIL;*) + WHILE t # NIL DO + statenr := t.state.nr; + IF statenr <= lastSimState THEN Sets.Incl(set, statenr) + ELSE AddMeltedSet(statenr, set) + END; + IF t^.state^.endOf # CRT.noSym THEN + IF (endOf = CRT.noSym) OR (endOf = t^.state^.endOf) + (*OR (lastS^.firstAction # NIL) & (t^.state^.firstAction = NIL)*) THEN + endOf := t^.state.endOf; (*lastS := t^.state*) + ELSE + PutS("$Tokens "); PutI(endOf); PutS(" and "); PutI(t^.state.endOf); + PutS(" cannot be distinguished.$"); + correct:=FALSE + END + END; + IF t^.state.ctx THEN ctx := TRUE; + IF t.state.endOf # CRT.noSym THEN + PutS("$Ambiguous CONTEXT clause.$"); correct := FALSE + END + END; + t := t^.next + END + END GetStateSet; + + PROCEDURE FillWithActions(state: State; targ: Target); + VAR action,a: Action; + BEGIN + WHILE targ # NIL DO + action := targ^.state.firstAction; + WHILE action # NIL DO + NEW(a); a^ := action^; a^.target := NIL; + AddTargetList(action^.target, a^.target); + AddAction(a, state.firstAction); + action:=action^.next + END; + targ:=targ^.next + END; + END FillWithActions; + + PROCEDURE KnownMelted(set:CRT.Set; VAR melt: Melted): BOOLEAN; + BEGIN + melt := firstMelted; + WHILE melt # NIL DO + IF Sets.Equal(set, melt^.set) THEN RETURN TRUE END; + melt := melt^.next + END; + RETURN FALSE + END KnownMelted; + +BEGIN + action := state.firstAction; + WHILE action # NIL DO + IF action^.target^.next # NIL THEN (*more than one target state*) + GetStateSet(action^.target, set, endOf, ctx); + IF ~ KnownMelted(set, melt) THEN + s := NewState(); s.endOf := endOf; s.ctx := ctx; + FillWithActions(s, action^.target); + REPEAT MakeUnique(s, changed) UNTIL ~ changed; + melt := NewMelted(set, s); + END; + action^.target^.next:=NIL; + action^.target^.state := melt^.state + END; + action := action^.next + END; + Texts.Append(Oberon.Log, out.buf) +END MeltStates; + + +PROCEDURE MakeDeterministic*(VAR correct: BOOLEAN); + VAR state: State; changed: BOOLEAN; + + PROCEDURE FindCtxStates; (*find states reached by a context transition*) + VAR a: Action; state: State; + BEGIN + state := firstState; + WHILE state # NIL DO + a := state.firstAction; + WHILE a # NIL DO + IF a^.tc = CRT.contextTrans THEN a^.target^.state.ctx := TRUE END; + a := a^.next + END; + state := state.next + END; + END FindCtxStates; + +BEGIN + IF lastState = NIL THEN lastSimState := 0 ELSE lastSimState := lastState.nr END; + FindCtxStates; + state := firstState; + WHILE state # NIL DO + REPEAT MakeUnique(state, changed) UNTIL ~ changed; + state := state.next + END; + correct := TRUE; + state := firstState; + WHILE state # NIL DO MeltStates(state, correct); state := state.next END; + DeleteRedundantStates; + CombineShifts +END MakeDeterministic; + + +PROCEDURE PrintSymbol(typ, val, width: INTEGER); +VAR name: CRT.Name; len: INTEGER; +BEGIN + IF typ = CRT.class THEN + CRT.GetClassName(val, name); PutS(name); len := Length(name) + ELSIF (val >= ORD(" ")) & (val < 127) & (val # 34) THEN + Put(CHR(34)); Put(CHR(val)); Put(CHR(34)); len:=3 + ELSE + PutS("CHR("); PutI2(val, 2); Put(")"); len:=7 + END; + WHILE len < width DO Put(" "); INC(len) END +END PrintSymbol; + + +PROCEDURE PrintStates*; +VAR action: Action; first: BOOLEAN; state: State; i: INTEGER; targ: Target; set: CRT.Set; name: CRT.Name; +BEGIN + PutS("$-------- states ---------$"); + state := firstState; + WHILE state # NIL DO + action := state.firstAction; first:=TRUE; + IF state.endOf = CRT.noSym THEN PutS(" ") + ELSE PutS("E("); PutI2(state.endOf, 2); Put(")") + END; + PutI2(state.nr, 3); Put(":"); IF action = NIL THEN PutS(" $") END; + WHILE action # NIL DO + IF first THEN Put(" "); first:=FALSE ELSE PutS(" ") END; + PrintSymbol(action^.typ, action^.sym, 0); Put(" "); + targ := action^.target; + WHILE targ # NIL DO + PutI(targ^.state.nr); Put(" "); targ := targ^.next; + END; + IF action^.tc = CRT.contextTrans THEN PutS(" context$") ELSE PutS(" $") END; + action := action^.next + END; + state := state.next + END; + PutS("$-------- character classes ---------$"); + i := 0; + WHILE i <= CRT.maxC DO + CRT.GetClass(i, set); CRT.GetClassName(i, name); PutS(name); PutS(": "); + Sets.Print(out, set, 80, 13); Texts.WriteLn(out); + INC(i) + END; + Texts.Append(Oberon.Log, out.buf) +END PrintStates; + + +PROCEDURE GenComment(com:Comment); + + PROCEDURE GenBody; + BEGIN + PutS(" LOOP$"); + PutS(" IF "); PutChCond(com^.stop[0]); PutS(" THEN$"); + IF Length(com^.stop) = 1 THEN + PutS(" DEC(level); oldEols := chLine - startLine; NextCh;$"); + PutS(" IF level = 0 THEN RETURN TRUE END;$"); + ELSE + PutS(" NextCh;$"); + PutS(" IF "); PutChCond(com^.stop[1]); PutS(" THEN$"); + PutS(" DEC(level); oldEols := chLine - startLine; NextCh;$"); + PutS(" IF level=0 THEN RETURN TRUE END$"); + PutS(" END;$"); + END; + IF com^.nested THEN + PutS(" ELSIF "); PutChCond(com^.start[0]); PutS(" THEN$"); + IF Length(com^.start) = 1 THEN + PutS(" INC(level); NextCh;$"); + ELSE + PutS(" NextCh;$"); + PutS(" IF "); PutChCond(com^.start[1]); PutS(" THEN$"); + PutS(" INC(level); NextCh;$"); + PutS(" END;$"); + END; + END; + PutS(" ELSIF ch = EOF THEN RETURN FALSE$"); + PutS(" ELSE NextCh END;$"); + PutS(" END;$"); + END GenBody; + +BEGIN + PutS(" IF "); PutChCond(com^.start[0]); PutS(" THEN$"); + IF Length(com^.start) = 1 THEN + PutS(" NextCh;$"); + GenBody; + PutS(" END;"); + ELSE + PutS(" NextCh;$"); + PutS(" IF "); PutChCond(com^.start[1]); PutS(" THEN$"); + PutS(" NextCh;$"); + GenBody; + PutS(" ELSE$"); + PutS(" IF ch = EOL THEN DEC(chLine); lineStart := oldLineStart END;$"); + PutS(" DEC(chPos, 2); Texts.OpenReader(r, src, chPos+1); NextCh; RETURN FALSE$"); + PutS(" END$"); + PutS(" END;"); + END; + END GenComment; + + +PROCEDURE CopyFramePart (stopStr: ARRAY OF CHAR); (*Copy from file to file until *) + VAR ch, startCh: CHAR; i, j, high: INTEGER; +BEGIN + startCh := stopStr[0]; high := Length(stopStr) - 1; Texts.Read (fram, ch); + WHILE ch # 0X DO + IF ch = startCh THEN (* check if stopString occurs *) + i := 0; + REPEAT + IF i = high THEN RETURN END; (*stopStr[0..i] found; no unrecognized character*) + Texts.Read (fram, ch); INC(i); + UNTIL ch # stopStr[i]; + (*stopStr[0..i-1] found; 1 unrecognized character*) + j := 0; WHILE j < i DO Texts.Write(out, stopStr[j]); INC(j) END + ELSE Texts.Write (out, ch); Texts.Read(fram, ch) + END + END +END CopyFramePart; + +PROCEDURE GenLiterals; + VAR + i, j, k, l: INTEGER; + key: ARRAY 128 OF CRT.Name; + knr: ARRAY 128 OF INTEGER; + ch: CHAR; + sn: CRT.SymbolNode; +BEGIN + (*-- sort literal list*) + i := 0; k := 0; + WHILE i <= CRT.maxT DO + CRT.GetSym(i, sn); + IF sn.struct = CRT.litToken THEN + j := k-1; WHILE (j >= 0) & (sn.name < key[j]) DO key[j+1] := key[j]; knr[j+1] := knr[j]; DEC(j) END; + key[j+1] := sn.name; knr[j+1] := i; INC(k) + END; + INC(i) + END; + (*-- print case statement*) + IF k > 0 THEN + PutS(" IF (lexeme[0] >= "); PutC(key[0, 1]); PutS(") & (lexeme[0] <= "); PutC(key[k-1, 1]); PutS(") THEN$"); + PutS(" CASE lexeme[0] OF$"); + i := 0; + WHILE i < k DO + ch := key[i, 1]; (*key[i, 0] = quote*) + PutS(" | "); PutC(ch); j := i; + REPEAT + IF i = j THEN PutS(": IF lexeme = ") ELSE PutS(" ELSIF lexeme = ") END; + PutS(key[i]); PutS(" THEN sym := "); PutI(knr[i]); Put(CHR(13)); + INC(i) + UNTIL (i = k) OR (key[i, 1] # ch); + PutS(" END$"); + END; + PutS(" ELSE$ END$ END;$") + END +END GenLiterals; + + +PROCEDURE WriteState(state: State); + VAR action: Action; first, ctxEnd: BOOLEAN; sn: CRT.SymbolNode; endOf: INTEGER; + set: CRT.Set; +BEGIN + endOf := state.endOf; + IF (endOf > CRT.maxT) & (endOf # CRT.noSym) THEN (*pragmas have been moved*) + endOf := CRT.maxT + CRT.maxSymbols - endOf + END; + PutS(" | "); PutI2(state.nr, 2); PutS(": "); + first:=TRUE; ctxEnd := state.ctx; + action := state.firstAction; + WHILE action # NIL DO + IF first THEN PutS("IF "); first:=FALSE ELSE PutS(" ELSIF ") END; + IF action^.typ = CRT.char THEN PutChCond(CHR(action^.sym)) + ELSE CRT.GetClass(action^.sym, set); PutRange(set) + END; + PutS(" THEN"); + IF action.target.state.nr # state.nr THEN + PutS(" state := "); PutI(action.target.state.nr); Put(";") + END; + IF action^.tc = CRT.contextTrans THEN PutS(" INC(apx)"); ctxEnd := FALSE + ELSIF state.ctx THEN PutS(" apx := 0") + END; + PutS(" $"); + action := action^.next + END; + IF state.firstAction # NIL THEN PutS(" ELSE ") END; + IF endOf = CRT.noSym THEN PutS("sym := noSym; ") + ELSE (*final state*) + CRT.GetSym(endOf, sn); + IF ctxEnd THEN (*final context state: cut appendix*) + PutS("chPos := chPos - apx - 1; Texts.OpenReader(r, src, chPos+1); NextCh; ") + END; + PutS("sym := "); PutI(endOf); PutS("; "); + IF sn.struct = CRT.classLitToken THEN PutS("CheckLiteral; ") END + END; + PutS("RETURN$"); + IF state.firstAction # NIL THEN PutS(" END;$") END +END WriteState; + +PROCEDURE *Show (t: Texts.Text; op: INTEGER; beg, end: LONGINT); +END Show; + + +PROCEDURE WriteScanner*; +VAR + scanner: ARRAY 32 OF CHAR; + name: ARRAY 64 OF CHAR; + startTab: ARRAY 128 OF INTEGER; + com: Comment; + i, j, l: INTEGER; + gn: CRT.GraphNode; + sn: CRT.SymbolNode; + state: State; + t: Texts.Text; + + PROCEDURE FillStartTab; + VAR action: Action; i, targetState: INTEGER; class: CRT.Set; + BEGIN + startTab[0] := stateNr + 1; (*eof*) + i := 1; WHILE i < 128 DO startTab[i] := 0; INC(i) END; + action := firstState.firstAction; + WHILE action # NIL DO + targetState := action.target.state.nr; + IF action^.typ = CRT.char THEN + startTab[action^.sym] := targetState + ELSE + CRT.GetClass(action^.sym, class); i := 0; + WHILE i < 128 DO + IF Sets.In(class, i) THEN startTab[i] := targetState END; + INC(i) + END + END; + action := action^.next + END + END FillStartTab; + +BEGIN + FillStartTab; + CRT.GetNode(CRT.root, gn); CRT.GetSym(gn.p1, sn); + COPY(sn.name, scanner); l := Length(scanner); scanner[l] := "S"; scanner[l+1] := 0X; + NEW(t); Texts.Open(t, "Scanner.FRM"); Texts.OpenReader(fram, t, 0); + IF t.len = 0 THEN + Texts.WriteString(out, "Scanner.FRM not found"); Texts.WriteLn(out); + Texts.Append(Oberon.Log, out.buf); HALT(99) + END; + Texts.Append(Oberon.Log, out.buf); + + (*------- *S.MOD -------*) + CopyFramePart("-->modulename"); PutS(scanner); + CopyFramePart("-->declarations"); PutS(" noSym = "); PutI(CRT.maxT); Put(";"); + CopyFramePart("-->comment"); + com := firstComment; + WHILE com # NIL DO GenComment(com); com := com^.next END; + CopyFramePart("-->literals"); GenLiterals; + + CopyFramePart("-->GetSy1"); + IF ~ Sets.In(CRT.ignored, ORD(EOL)) THEN PutS(" IF oldEols > 0 THEN DEC(oldEols); ch := EOL END;$") END; + PutS(" WHILE (ch=20X)"); IF ~ Sets.Empty(CRT.ignored) THEN PutS(" OR ") END; + PutRange(CRT.ignored); PutS(" DO NextCh END;"); + IF firstComment # NIL THEN + PutS("$ IF ("); com := firstComment; + WHILE com # NIL DO + PutChCond(com^.start[0]); + IF com^.next # NIL THEN PutS(" OR ") END; + com := com^.next + END; + PutS(") & Comment() THEN Get(sym); RETURN END;") + END; + CopyFramePart("-->GetSy2"); + state := firstState.next; + WHILE state # NIL DO WriteState(state); state := state.next END; + PutS(" | "); PutI2(stateNr + 1, 2); PutS(": sym := 0; ch := 0X; RETURN$"); + + CopyFramePart("-->initialization"); + i := 0; + WHILE i < 32 DO + j := 0; PutS(" "); + WHILE j < 4 DO + PutS("start["); PutI(4*i+j); PutS("]:="); PutI(startTab[4*i+j]); PutS("; "); + INC(j) + END; + Texts.WriteLn(out); + INC(i) + END; + + CopyFramePart("-->modulename"); PutS(scanner); Put("."); + NEW(t); (*t.notify := Show;*) Texts.Open(t, ""); Texts.Append(t, out.buf); + l := Length(scanner); scanner[l] := "."; scanner[l+1] := "M"; scanner[l+2] := "o"; scanner[l+3] := "d"; scanner[l+4] := 0X; + Texts.Close(t, scanner) +END WriteScanner; + + +PROCEDURE Init*; +BEGIN + firstState := NIL; lastState := NIL; stateNr := -1; + rootState := NewState(); + firstMelted := NIL; firstComment := NIL +END Init; + +BEGIN + Texts.OpenWriter(out) +END CRA. diff --git a/src/tools/coco/CRP.Mod b/src/tools/coco/CRP.Mod new file mode 100644 index 00000000..bbd98a31 --- /dev/null +++ b/src/tools/coco/CRP.Mod @@ -0,0 +1,703 @@ +(* parser module generated by Coco-R *) +MODULE CRP; + +IMPORT CRS, CRT, CRA, CRX, Sets, Texts := CmdlnTexts, Oberon; + +CONST + maxP = 39; + maxT = 38; + nrSets = 18; + + setSize = 32; nSets = (maxT DIV setSize) + 1; + +TYPE + SymbolSet = ARRAY nSets OF SET; + +VAR + sym: INTEGER; (* current input symbol *) + symSet: ARRAY nrSets OF SymbolSet; + +CONST + ident = 0; string = 1; (*symbol kind*) + +VAR + str: ARRAY 32 OF CHAR; + w: Texts.Writer; + genScanner: BOOLEAN; + + +PROCEDURE SemErr(nr: INTEGER); +BEGIN + CRS.Error(200+nr, CRS.pos); +END SemErr; + +PROCEDURE MatchLiteral(sp: INTEGER); (*store string either as token or as literal*) + VAR sn, sn1: CRT.SymbolNode; matchedSp: INTEGER; +BEGIN + CRT.GetSym(sp, sn); + CRA.MatchDFA(sn.name, sp, matchedSp); + IF matchedSp # CRT.noSym THEN + CRT.GetSym(matchedSp, sn1); sn1.struct := CRT.classLitToken; CRT.PutSym(matchedSp, sn1); + sn.struct := CRT.litToken + ELSE sn.struct := CRT.classToken; + END; + CRT.PutSym(sp, sn) +END MatchLiteral; + +PROCEDURE SetCtx(gp: INTEGER); (*set transition code to CRT.contextTrans*) + VAR gn: CRT.GraphNode; +BEGIN + WHILE gp > 0 DO + CRT.GetNode(gp, gn); + IF gn.typ IN {CRT.char, CRT.class} THEN + gn.p2 := CRT.contextTrans; CRT.PutNode(gp, gn) + ELSIF gn.typ IN {CRT.opt, CRT.iter} THEN SetCtx(gn.p1) + ELSIF gn.typ = CRT.alt THEN SetCtx(gn.p1); SetCtx(gn.p2) + END; + gp := gn.next + END +END SetCtx; + +PROCEDURE SetDDT(s: ARRAY OF CHAR); + VAR name: ARRAY 64 OF CHAR; i: INTEGER; ch: CHAR; +BEGIN + i := 1; + WHILE s[i] # 0X DO + ch := s[i]; INC(i); + IF (ch >= "0") & (ch <= "9") THEN CRT.ddt[ORD(ch)-ORD("0")] := TRUE END + END +END SetDDT; + +PROCEDURE FixString (VAR s: ARRAY OF CHAR; len: INTEGER); + VAR double: BOOLEAN; i: INTEGER; +BEGIN + double := FALSE; + FOR i := 0 TO len-2 DO + IF s[i] = '"' THEN double := TRUE END + END; + IF ~ double THEN s[0] := '"'; s[len-1] := '"' END +END FixString; + +(*-------------------------------------------------------------------------*) + + +PROCEDURE Error (n: INTEGER); +BEGIN CRS.Error(n, CRS.nextPos) +END Error; + +PROCEDURE Get; +BEGIN + LOOP CRS.Get(sym); + IF sym > maxT THEN + IF sym = 39 THEN + CRS.GetName(CRS.nextPos, CRS.nextLen, str); SetDDT(str) + END; + CRS.nextPos := CRS.pos; + CRS.nextCol := CRS.col; + CRS.nextLine := CRS.line; + CRS.nextLen := CRS.len; + ELSE EXIT + END +END + +END Get; + +PROCEDURE Expect(n: INTEGER); +BEGIN IF sym = n THEN Get ELSE Error(n) END +END Expect; + +PROCEDURE StartOf(s: INTEGER): BOOLEAN; +BEGIN RETURN (sym MOD setSize) IN symSet[s, sym DIV setSize] +END StartOf; + +PROCEDURE ExpectWeak(n, follow: INTEGER); +BEGIN + IF sym = n THEN Get + ELSE Error(n); WHILE ~ StartOf(follow) DO Get END + END +END ExpectWeak; + +PROCEDURE WeakSeparator(n, syFol, repFol: INTEGER): BOOLEAN; + VAR s: SymbolSet; i: INTEGER; +BEGIN + IF sym = n THEN Get; RETURN TRUE + ELSIF StartOf(repFol) THEN RETURN FALSE + ELSE + i := 0; WHILE i < nSets DO s[i] := symSet[syFol, i] + symSet[repFol, i] + symSet[0, i]; INC(i) END; + Error(n); WHILE ~ ((sym MOD setSize) IN s[sym DIV setSize]) DO Get END; + RETURN StartOf(syFol) + END +END WeakSeparator; + +PROCEDURE ^TokenFactor(VAR gL, gR: INTEGER); +PROCEDURE ^TokenTerm(VAR gL, gR: INTEGER); +PROCEDURE ^Factor(VAR gL, gR: INTEGER); +PROCEDURE ^Term(VAR gL, gR: INTEGER); +PROCEDURE ^Symbol(VAR name: CRT.Name; VAR kind: INTEGER); +PROCEDURE ^SimSet(VAR set: CRT.Set); +PROCEDURE ^Set(VAR set: CRT.Set); +PROCEDURE ^TokenExpr(VAR gL, gR: INTEGER); +PROCEDURE ^TokenDecl(typ: INTEGER); +PROCEDURE ^SetDecl; +PROCEDURE ^Expression(VAR gL, gR: INTEGER); +PROCEDURE ^SemText(VAR semPos: CRT.Position); +PROCEDURE ^Attribs(VAR attrPos: CRT.Position); +PROCEDURE ^Declaration; +PROCEDURE ^CR; + +PROCEDURE TokenFactor(VAR gL, gR: INTEGER); + VAR kind, c: INTEGER; set: CRT.Set; name: CRT.Name; +BEGIN + gL :=0; gR := 0 ; + IF (sym = 1) OR (sym = 2) THEN + Symbol(name, kind); + IF kind = ident THEN + c := CRT.ClassWithName(name); + IF c < 0 THEN + SemErr(15); + Sets.Clear(set); c := CRT.NewClass(name, set) + END; + gL := CRT.NewNode(CRT.class, c, 0); gR := gL + ELSE (*string*) + CRT.StrToGraph(name, gL, gR) + END ; + ELSIF (sym = 23) THEN + Get; + TokenExpr(gL, gR); + Expect(24); + ELSIF (sym = 28) THEN + Get; + TokenExpr(gL, gR); + Expect(29); + CRT.MakeOption(gL, gR) ; + ELSIF (sym = 30) THEN + Get; + TokenExpr(gL, gR); + Expect(31); + CRT.MakeIteration(gL, gR) ; + ELSE Error(39) + END; +END TokenFactor; + +PROCEDURE TokenTerm(VAR gL, gR: INTEGER); + VAR gL2, gR2: INTEGER; +BEGIN + TokenFactor(gL, gR); + WHILE StartOf(1) DO + TokenFactor(gL2, gR2); + CRT.ConcatSeq(gL, gR, gL2, gR2) ; + END; + IF (sym = 33) THEN + Get; + Expect(23); + TokenExpr(gL2, gR2); + SetCtx(gL2); CRT.ConcatSeq(gL, gR, gL2, gR2) ; + Expect(24); + END; +END TokenTerm; + +PROCEDURE Factor(VAR gL, gR: INTEGER); + VAR sp, kind, c: INTEGER; name: CRT.Name; + gn: CRT.GraphNode; sn: CRT.SymbolNode; + set: CRT.Set; + undef, weak: BOOLEAN; + pos: CRT.Position; +BEGIN + gL :=0; gR := 0; weak := FALSE ; + CASE sym OF + | 1,2,27: IF (sym = 27) THEN + Get; + weak := TRUE ; + END; + Symbol(name, kind); + sp := CRT.FindSym(name); undef := sp = CRT.noSym; + IF undef THEN + IF kind = ident THEN (*forward nt*) + sp := CRT.NewSym(CRT.nt, name, 0) + ELSE (*undefined string in production*) + sp := CRT.NewSym(CRT.t, name, CRS.line); + MatchLiteral(sp) + END + END; + CRT.GetSym(sp, sn); + IF ~(sn.typ IN {CRT.t,CRT.nt}) THEN SemErr(4) END; + IF weak THEN + IF sn.typ = CRT.t THEN sn.typ := CRT.wt ELSE SemErr(23) END + END; + gL := CRT.NewNode(sn.typ, sp, CRS.line); gR := gL ; + IF (sym = 34) THEN + Attribs(pos); + CRT.GetNode(gL, gn); gn.pos := pos; CRT.PutNode(gL, gn); + CRT.GetSym(sp, sn); + IF undef THEN + sn.attrPos := pos; CRT.PutSym(sp, sn) + ELSIF sn.attrPos.beg < 0 THEN SemErr(5) + END; + IF kind # ident THEN SemErr(3) END ; + ELSIF StartOf(2) THEN + CRT.GetSym(sp, sn); + IF sn.attrPos.beg >= 0 THEN SemErr(6) END ; + ELSE Error(40) + END; + | 23: Get; + Expression(gL, gR); + Expect(24); + | 28: Get; + Expression(gL, gR); + Expect(29); + CRT.MakeOption(gL, gR) ; + | 30: Get; + Expression(gL, gR); + Expect(31); + CRT.MakeIteration(gL, gR) ; + | 36: SemText(pos); + gL := CRT.NewNode(CRT.sem, 0, 0); + gR := gL; + CRT.GetNode(gL, gn); gn.pos := pos; CRT.PutNode(gL, gn) ; + | 25: Get; + Sets.Fill(set); Sets.Excl(set, CRT.eofSy); + gL := CRT.NewNode(CRT.any, CRT.NewSet(set), 0); gR := gL ; + | 32: Get; + gL := CRT.NewNode(CRT.sync, 0, 0); gR := gL ; + ELSE Error(41) + END; +END Factor; + +PROCEDURE Term(VAR gL, gR: INTEGER); + VAR gL2, gR2: INTEGER; +BEGIN + gL := 0; gR := 0 ; + IF StartOf(3) THEN + Factor(gL, gR); + WHILE StartOf(3) DO + Factor(gL2, gR2); + CRT.ConcatSeq(gL, gR, gL2, gR2) ; + END; + ELSIF StartOf(4) THEN + gL := CRT.NewNode(CRT.eps, 0, 0); gR := gL ; + ELSE Error(42) + END; +END Term; + +PROCEDURE Symbol(VAR name: CRT.Name; VAR kind: INTEGER); +BEGIN + IF (sym = 1) THEN + Get; + kind := ident ; + ELSIF (sym = 2) THEN + Get; + kind := string ; + ELSE Error(43) + END; + CRS.GetName(CRS.pos, CRS.len, name); + IF kind = string THEN FixString(name, CRS.len) END ; +END Symbol; + +PROCEDURE SimSet(VAR set: CRT.Set); + VAR c, n, i: INTEGER; name: CRT.Name; s: ARRAY 128 OF CHAR; +BEGIN + IF (sym = 1) THEN + Get; + CRS.GetName(CRS.pos, CRS.len, name); + c := CRT.ClassWithName(name); + IF c < 0 THEN SemErr(15); Sets.Clear(set) + ELSE CRT.GetClass(c, set) + END ; + ELSIF (sym = 2) THEN + Get; + CRS.GetName(CRS.pos, CRS.len, s); + Sets.Clear(set); i := 1; + WHILE s[i] # s[0] DO + Sets.Incl(set, ORD(s[i])); INC(i) + END ; + ELSIF (sym = 22) THEN + Get; + Expect(23); + Expect(3); + CRS.GetName(CRS.pos, CRS.len, name); + n := 0; i := 0; + WHILE name[i] # 0X DO + n := 10 * n + (ORD(name[i]) - ORD("0")); + INC(i) + END; + Sets.Clear(set); Sets.Incl(set, n) ; + Expect(24); + ELSIF (sym = 25) THEN + Get; + Sets.Fill(set) ; + ELSE Error(44) + END; +END SimSet; + +PROCEDURE Set(VAR set: CRT.Set); + VAR set2: CRT.Set; +BEGIN + SimSet(set); + WHILE (sym = 20) OR (sym = 21) DO + IF (sym = 20) THEN + Get; + SimSet(set2); + Sets.Unite(set, set2) ; + ELSE + Get; + SimSet(set2); + Sets.Differ(set, set2) ; + END; + END; +END Set; + +PROCEDURE TokenExpr(VAR gL, gR: INTEGER); + VAR gL2, gR2: INTEGER; first: BOOLEAN; +BEGIN + TokenTerm(gL, gR); + first := TRUE ; + WHILE WeakSeparator(26, 1, 5) DO + TokenTerm(gL2, gR2); + IF first THEN + CRT.MakeFirstAlt(gL, gR); first := FALSE + END; + CRT.ConcatAlt(gL, gR, gL2, gR2) ; + END; +END TokenExpr; + +PROCEDURE TokenDecl(typ: INTEGER); + VAR sp, kind, gL, gR: INTEGER; sn: CRT.SymbolNode; + pos: CRT.Position; name: CRT.Name; +BEGIN + Symbol(name, kind); + IF CRT.FindSym(name) # CRT.noSym THEN SemErr(7) + ELSE + sp := CRT.NewSym(typ, name, CRS.line); + CRT.GetSym(sp, sn); sn.struct := CRT.classToken; + CRT.PutSym(sp, sn) + END ; + WHILE ~( StartOf(6) ) DO Error(45); Get END; + IF (sym = 8) THEN + Get; + TokenExpr(gL, gR); + Expect(9); + IF kind # ident THEN SemErr(13) END; + CRT.CompleteGraph(gR); + CRA.ConvertToStates(gL, sp) ; + ELSIF StartOf(7) THEN + IF kind = ident THEN genScanner := FALSE + ELSE MatchLiteral(sp) + END ; + ELSE Error(46) + END; + IF (sym = 36) THEN + SemText(pos); + IF typ = CRT.t THEN SemErr(14) END; + CRT.GetSym(sp, sn); sn.semPos := pos; CRT.PutSym(sp, sn) ; + END; +END TokenDecl; + +PROCEDURE SetDecl; + VAR c: INTEGER; set: CRT.Set; name: CRT.Name; +BEGIN + Expect(1); + CRS.GetName(CRS.pos, CRS.len, name); + c := CRT.ClassWithName(name); IF c >= 0 THEN SemErr(7) END ; + Expect(8); + Set(set); + c := CRT.NewClass(name, set) ; + Expect(9); +END SetDecl; + +PROCEDURE Expression(VAR gL, gR: INTEGER); + VAR gL2, gR2: INTEGER; first: BOOLEAN; +BEGIN + Term(gL, gR); + first := TRUE ; + WHILE WeakSeparator(26, 2, 8) DO + Term(gL2, gR2); + IF first THEN + CRT.MakeFirstAlt(gL, gR); first := FALSE + END; + CRT.ConcatAlt(gL, gR, gL2, gR2) ; + END; +END Expression; + +PROCEDURE SemText(VAR semPos: CRT.Position); +BEGIN + Expect(36); + semPos.beg := CRS.nextPos; semPos.col := CRS.nextCol ; + WHILE StartOf(9) DO + Get; + END; + Expect(37); + semPos.len := SHORT(CRS.pos - semPos.beg) ; +END SemText; + +PROCEDURE Attribs(VAR attrPos: CRT.Position); +BEGIN + Expect(34); + attrPos.beg := CRS.nextPos; attrPos.col := CRS.nextCol ; + WHILE StartOf(10) DO + Get; + END; + Expect(35); + attrPos.len := SHORT(CRS.pos - attrPos.beg) ; +END Attribs; + +PROCEDURE Declaration; + VAR gL1, gR1, gL2, gR2: INTEGER; nested: BOOLEAN; +BEGIN + IF (sym = 11) THEN + Get; + WHILE (sym = 1) DO + SetDecl; + END; + ELSIF (sym = 12) THEN + Get; + WHILE (sym = 1) OR (sym = 2) DO + TokenDecl(CRT.t); + END; + ELSIF (sym = 13) THEN + Get; + WHILE (sym = 1) OR (sym = 2) DO + TokenDecl(CRT.pr); + END; + ELSIF (sym = 14) THEN + Get; + Expect(15); + TokenExpr(gL1, gR1); + Expect(16); + TokenExpr(gL2, gR2); + IF (sym = 17) THEN + Get; + nested := TRUE ; + ELSIF StartOf(11) THEN + nested := FALSE ; + ELSE Error(47) + END; + CRA.NewComment(gL1, gL2, nested) ; + ELSIF (sym = 18) THEN + Get; + IF (sym = 19) THEN + Get; + CRT.ignoreCase := TRUE ; + ELSIF StartOf(12) THEN + Set(CRT.ignored); + ELSE Error(48) + END; + ELSE Error(49) + END; +END Declaration; + +PROCEDURE CR; + VAR undef, hasAttrs, ok, ok1: BOOLEAN; eofSy, gR: INTEGER; + gramLine, sp: INTEGER; + gn: CRT.GraphNode; sn: CRT.SymbolNode; + name, gramName: CRT.Name; +BEGIN + Expect(4); + Texts.OpenWriter(w); + CRT.Init; CRX.Init; CRA.Init; + gramLine := CRS.line; + eofSy := CRT.NewSym(CRT.t, "EOF", 0); + genScanner := TRUE; + CRT.ignoreCase := FALSE; + ok := TRUE; + Sets.Clear(CRT.ignored) ; + Expect(1); + CRS.GetName(CRS.pos, CRS.len, gramName); + CRT.semDeclPos.beg := CRS.nextPos; CRT.importPos.beg := -1; ; + WHILE StartOf(13) DO + IF (sym = 5) THEN + Get; + CRT.importPos.beg := CRS.nextPos ; + WHILE StartOf(14) DO + Get; + END; + Expect(6); + CRT.importPos.len := SHORT(CRS.pos - CRT.importPos.beg); + CRT.importPos.col := 0; + CRT.semDeclPos.beg := CRS.nextPos ; + ELSE + Get; + END; + END; + CRT.semDeclPos.len := SHORT(CRS.nextPos - CRT.semDeclPos.beg); + CRT.semDeclPos.col := 0 ; + WHILE StartOf(15) DO + Declaration; + END; + WHILE ~( (sym = 0) OR (sym = 7)) DO Error(50); Get END; + Expect(7); + IF genScanner THEN CRA.MakeDeterministic(ok) END; + CRT.nNodes := 0 ; + WHILE (sym = 1) DO + Get; + CRS.GetName(CRS.pos, CRS.len, name); + sp := CRT.FindSym(name); undef := sp = CRT.noSym; + IF undef THEN + sp := CRT.NewSym(CRT.nt, name, CRS.line); + CRT.GetSym(sp, sn); + ELSE + CRT.GetSym(sp, sn); + IF sn.typ = CRT.nt THEN + IF sn.struct > 0 THEN SemErr(7) END + ELSE SemErr(8) + END; + sn.line := CRS.line + END; + hasAttrs := sn.attrPos.beg >= 0 ; + IF (sym = 34) THEN + Attribs(sn.attrPos); + IF ~undef & ~hasAttrs THEN SemErr(9) END; + CRT.PutSym(sp, sn) ; + ELSIF (sym = 8) OR (sym = 36) THEN + IF ~undef & hasAttrs THEN SemErr(10) END ; + ELSE Error(51) + END; + IF (sym = 36) THEN + SemText(sn.semPos); + END; + ExpectWeak(8, 16); + Expression(sn.struct, gR); + CRT.CompleteGraph(gR); CRT.PutSym(sp, sn); + IF CRT.ddt[2] THEN CRT.PrintGraph END ; + ExpectWeak(9, 17); + END; + sp := CRT.FindSym(gramName); + IF sp = CRT.noSym THEN SemErr(11); + ELSE + CRT.GetSym(sp, sn); + IF sn.attrPos.beg >= 0 THEN SemErr(12) END; + CRT.root := CRT.NewNode(CRT.nt, sp, gramLine); + END ; + Expect(10); + Expect(1); + CRS.GetName(CRS.pos, CRS.len, name); + IF name # gramName THEN SemErr(17) END; + IF CRS.errors = 0 THEN + Texts.WriteString(w, " checking"); Texts.Append(Oberon.Log, w.buf); + CRT.CompSymbolSets; + IF ok THEN CRT.TestCompleteness(ok) END; + IF ok THEN + CRT.TestIfAllNtReached(ok1); CRT.FindCircularProductions(ok) + END; + IF ok THEN CRT.TestIfNtToTerm(ok) END; + IF ok THEN CRT.LL1Test(ok1) END; + IF CRT.ddt[0] THEN CRA.PrintStates END; + IF CRT.ddt[7] THEN CRT.XRef END; + IF ok THEN + Texts.WriteString(w, " +parser"); + Texts.Append(Oberon.Log, w.buf); + CRX.GenCompiler; + IF genScanner THEN + Texts.WriteString(w, " +scanner"); + Texts.Append(Oberon.Log, w.buf); + CRA.WriteScanner + END; + IF CRT.ddt[8] THEN CRX.WriteStatistics END + END + ELSE ok := FALSE + END; + IF CRT.ddt[6] THEN CRT.PrintSymbolTable END; + IF ok THEN Texts.WriteString(w, " done") END; + Texts.WriteLn(w); Texts.Append(Oberon.Log, w.buf) ; + Expect(9); +END CR; + + + +PROCEDURE Parse*; +BEGIN + Get; + CR; + +END Parse; + +BEGIN + symSet[0, 0] := {0,1,2,7,8,11,12,13,14,18}; + symSet[0, 1] := {4}; + symSet[1, 0] := {1,2,23,28,30}; + symSet[1, 1] := {}; + symSet[2, 0] := {1,2,9,23,24,25,26,27,28,29,30,31}; + symSet[2, 1] := {0,4}; + symSet[3, 0] := {1,2,23,25,27,28,30}; + symSet[3, 1] := {0,4}; + symSet[4, 0] := {9,24,26,29,31}; + symSet[4, 1] := {}; + symSet[5, 0] := {7,9,11,12,13,14,16,17,18,24,29,31}; + symSet[5, 1] := {}; + symSet[6, 0] := {0,1,2,7,8,11,12,13,14,18}; + symSet[6, 1] := {4}; + symSet[7, 0] := {1,2,7,11,12,13,14,18}; + symSet[7, 1] := {4}; + symSet[8, 0] := {9,24,29,31}; + symSet[8, 1] := {}; + symSet[9, 0] := {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31}; + symSet[9, 1] := {0,1,2,3,4,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31}; + symSet[10, 0] := {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31}; + symSet[10, 1] := {0,1,2,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31}; + symSet[11, 0] := {7,11,12,13,14,18}; + symSet[11, 1] := {}; + symSet[12, 0] := {1,2,22,25}; + symSet[12, 1] := {}; + symSet[13, 0] := {1,2,3,4,5,6,8,9,10,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,31}; + symSet[13, 1] := {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31}; + symSet[14, 0] := {1,2,3,4,5,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31}; + symSet[14, 1] := {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31}; + symSet[15, 0] := {11,12,13,14,18}; + symSet[15, 1] := {}; + symSet[16, 0] := {0,1,2,7,8,9,11,12,13,14,18,23,25,26,27,28,30}; + symSet[16, 1] := {0,4}; + symSet[17, 0] := {0,1,2,7,8,10,11,12,13,14,18}; + symSet[17, 1] := {4}; + +END CRP. + | 0: Msg("EOF expected") + | 1: Msg("ident expected") + | 2: Msg("string expected") + | 3: Msg("number expected") + | 4: Msg("'COMPILER' expected") + | 5: Msg("'IMPORT' expected") + | 6: Msg("';' expected") + | 7: Msg("'PRODUCTIONS' expected") + | 8: Msg("'=' expected") + | 9: Msg("'.' expected") + | 10: Msg("'END' expected") + | 11: Msg("'CHARACTERS' expected") + | 12: Msg("'TOKENS' expected") + | 13: Msg("'PRAGMAS' expected") + | 14: Msg("'COMMENTS' expected") + | 15: Msg("'FROM' expected") + | 16: Msg("'TO' expected") + | 17: Msg("'NESTED' expected") + | 18: Msg("'IGNORE' expected") + | 19: Msg("'CASE' expected") + | 20: Msg("'+' expected") + | 21: Msg("'-' expected") + | 22: Msg("'CHR' expected") + | 23: Msg("'(' expected") + | 24: Msg("')' expected") + | 25: Msg("'ANY' expected") + | 26: Msg("'|' expected") + | 27: Msg("'WEAK' expected") + | 28: Msg("'[' expected") + | 29: Msg("']' expected") + | 30: Msg("'{' expected") + | 31: Msg("'}' expected") + | 32: Msg("'SYNC' expected") + | 33: Msg("'CONTEXT' expected") + | 34: Msg("'<' expected") + | 35: Msg("'>' expected") + | 36: Msg("'(.' expected") + | 37: Msg("'.)' expected") + | 38: Msg("??? expected") + | 39: Msg("invalid TokenFactor") + | 40: Msg("invalid Factor") + | 41: Msg("invalid Factor") + | 42: Msg("invalid Term") + | 43: Msg("invalid Symbol") + | 44: Msg("invalid SimSet") + | 45: Msg("this symbol not expected in TokenDecl") + | 46: Msg("invalid TokenDecl") + | 47: Msg("invalid Declaration") + | 48: Msg("invalid Declaration") + | 49: Msg("invalid Declaration") + | 50: Msg("this symbol not expected in CR") + | 51: Msg("invalid CR") diff --git a/src/tools/coco/CRS.Mod b/src/tools/coco/CRS.Mod new file mode 100644 index 00000000..2595bdad --- /dev/null +++ b/src/tools/coco/CRS.Mod @@ -0,0 +1,230 @@ +(* scanner module generated by Coco-R *) +MODULE CRS; + +IMPORT Texts := CmdlnTexts, SYSTEM; + +CONST + EOL = 0DX; + EOF = 0X; + maxLexLen = 127; + noSym = 38; + +TYPE + ErrorProc* = PROCEDURE (n: INTEGER; pos: LONGINT); + StartTable = ARRAY 128 OF INTEGER; + +VAR + src*: Texts.Text; (*source text. To be set by the main pgm*) + pos*: LONGINT; (*position of current symbol*) + line*, col*, len*: INTEGER; (*line, column, length of current symbol*) + nextPos*: LONGINT; (*position of lookahead symbol*) + nextLine*, nextCol*, nextLen*: INTEGER; (*line, column, length of lookahead symbol*) + errors*: INTEGER; (*number of errors detected*) + Error*: ErrorProc; + + ch: CHAR; (*current input character*) + r: Texts.Reader; (*global reader*) + chPos: LONGINT; (*position of current character*) + chLine: INTEGER; (*current line number*) + lineStart: LONGINT; (*start position of current line*) + apx: INTEGER; (*length of appendix*) + oldEols: INTEGER; (*nr. of EOLs in a comment*) + + start: StartTable; (*start state for every character*) + + +PROCEDURE NextCh; (*return global variable ch*) +BEGIN + Texts.Read(r, ch); INC(chPos); + IF ch = EOL THEN INC(chLine); lineStart := chPos + 1 END +END NextCh; + + +PROCEDURE Comment(): BOOLEAN; + VAR level, startLine: INTEGER; oldLineStart: LONGINT; +BEGIN (*Comment*) + level := 1; startLine := chLine; oldLineStart := lineStart; + IF (ch ="(") THEN + NextCh; + IF (ch ="*") THEN + NextCh; + LOOP + IF (ch ="*") THEN + NextCh; + IF (ch =")") THEN + DEC(level); oldEols := chLine - startLine; NextCh; + IF level=0 THEN RETURN TRUE END + END; + ELSIF (ch ="(") THEN + NextCh; + IF (ch ="*") THEN + INC(level); NextCh; + END; + ELSIF ch = EOF THEN RETURN FALSE + ELSE NextCh END; + END; + ELSE + IF ch = EOL THEN DEC(chLine); lineStart := oldLineStart END; + DEC(chPos, 2); Texts.OpenReader(r, src, chPos+1); NextCh; RETURN FALSE + END + END; +END Comment; + + +PROCEDURE Get*(VAR sym: INTEGER); +VAR state: INTEGER; lexeme: ARRAY maxLexLen+1 OF CHAR; + + PROCEDURE CheckLiteral; + BEGIN + IF nextLen < maxLexLen THEN lexeme[nextLen] := 0X END; + IF (lexeme[0] >= "A") & (lexeme[0] <= "W") THEN + CASE lexeme[0] OF + | "A": IF lexeme = "ANY" THEN sym := 25 + END + | "C": IF lexeme = "CASE" THEN sym := 19 + ELSIF lexeme = "CHARACTERS" THEN sym := 11 + ELSIF lexeme = "CHR" THEN sym := 22 + ELSIF lexeme = "COMMENTS" THEN sym := 14 + ELSIF lexeme = "COMPILER" THEN sym := 4 + ELSIF lexeme = "CONTEXT" THEN sym := 33 + END + | "E": IF lexeme = "END" THEN sym := 10 + END + | "F": IF lexeme = "FROM" THEN sym := 15 + END + | "I": IF lexeme = "IGNORE" THEN sym := 18 + ELSIF lexeme = "IMPORT" THEN sym := 5 + END + | "N": IF lexeme = "NESTED" THEN sym := 17 + END + | "P": IF lexeme = "PRAGMAS" THEN sym := 13 + ELSIF lexeme = "PRODUCTIONS" THEN sym := 7 + END + | "S": IF lexeme = "SYNC" THEN sym := 32 + END + | "T": IF lexeme = "TO" THEN sym := 16 + ELSIF lexeme = "TOKENS" THEN sym := 12 + END + | "W": IF lexeme = "WEAK" THEN sym := 27 + END + ELSE + END + END; + + END CheckLiteral; + +BEGIN + WHILE (ch=20X) OR (ch=CHR(9)) OR (ch=CHR(13)) OR (ch=CHR(28)) DO NextCh END; + IF ((ch ="(")) & Comment() THEN Get(sym); RETURN END; + IF ch > 7FX THEN ch := " " END; + pos := nextPos; col := nextCol; line := nextLine; len := nextLen; + nextPos := chPos; nextCol := SHORT(chPos - lineStart); nextLine := chLine; nextLen := 0; + state := start[ORD(ch)]; apx := 0; + LOOP + IF nextLen < maxLexLen THEN lexeme[nextLen] := ch END; + INC(nextLen); + NextCh; + IF state > 0 THEN + CASE state OF + | 1: IF (ch>="0") & (ch<="9") OR (ch>="A") & (ch<="Z") OR (ch>="a") & (ch<="z") THEN + ELSE sym := 1; CheckLiteral; RETURN + END; + | 2: IF (ch<=CHR(12)) OR (ch>=CHR(14)) & (ch<="!") OR (ch>="#") THEN + ELSIF (ch =CHR(34)) THEN state := 3; + ELSE sym := noSym; RETURN + END; + | 3: sym := 2; RETURN + | 4: IF (ch<=CHR(12)) OR (ch>=CHR(14)) & (ch<="&") OR (ch>="(") THEN + ELSIF (ch ="'") THEN state := 3; + ELSE sym := noSym; RETURN + END; + | 5: IF (ch>="0") & (ch<="9") THEN + ELSE sym := 3; RETURN + END; + | 6: IF (ch>="0") & (ch<="9") THEN + ELSE sym := 39; RETURN + END; + | 7: sym := 6; RETURN + | 8: sym := 8; RETURN + | 9: IF (ch =")") THEN state := 22; + ELSE sym := 9; RETURN + END; + | 10: sym := 20; RETURN + | 11: sym := 21; RETURN + | 12: IF (ch =".") THEN state := 21; + ELSE sym := 23; RETURN + END; + | 13: sym := 24; RETURN + | 14: sym := 26; RETURN + | 15: sym := 28; RETURN + | 16: sym := 29; RETURN + | 17: sym := 30; RETURN + | 18: sym := 31; RETURN + | 19: sym := 34; RETURN + | 20: sym := 35; RETURN + | 21: sym := 36; RETURN + | 22: sym := 37; RETURN + | 23: sym := 0; ch := 0X; RETURN + + END (*CASE*) + ELSE sym := noSym; RETURN (*NextCh already done*) + END (*IF*) + END (*LOOP*) +END Get; + + +PROCEDURE GetName*(pos: LONGINT; len: INTEGER; VAR s: ARRAY OF CHAR); + VAR i: INTEGER; r: Texts.Reader; +BEGIN + Texts.OpenReader(r, src, pos); + IF len >= LEN(s) THEN len := SHORT(LEN(s)) - 1 END; + i := 0; WHILE i < len DO Texts.Read(r, s[i]); INC(i) END; + s[i] := 0X +END GetName; + +PROCEDURE StdErrorProc* (n: INTEGER; pos: LONGINT); +BEGIN INC(errors) END StdErrorProc; + +PROCEDURE Reset* (t: Texts.Text; pos: LONGINT; errProc: ErrorProc); +BEGIN + src := t; Error := errProc; + Texts.OpenReader(r, src, pos); + chPos := pos - 1; chLine := 1; lineStart := 0; + oldEols := 0; apx := 0; errors := 0; + NextCh +END Reset; + +BEGIN + start[0]:=23; start[1]:=0; start[2]:=0; start[3]:=0; + start[4]:=0; start[5]:=0; start[6]:=0; start[7]:=0; + start[8]:=0; start[9]:=0; start[10]:=0; start[11]:=0; + start[12]:=0; start[13]:=0; start[14]:=0; start[15]:=0; + start[16]:=0; start[17]:=0; start[18]:=0; start[19]:=0; + start[20]:=0; start[21]:=0; start[22]:=0; start[23]:=0; + start[24]:=0; start[25]:=0; start[26]:=0; start[27]:=0; + start[28]:=0; start[29]:=0; start[30]:=0; start[31]:=0; + start[32]:=0; start[33]:=0; start[34]:=2; start[35]:=0; + start[36]:=6; start[37]:=0; start[38]:=0; start[39]:=4; + start[40]:=12; start[41]:=13; start[42]:=0; start[43]:=10; + start[44]:=0; start[45]:=11; start[46]:=9; start[47]:=0; + start[48]:=5; start[49]:=5; start[50]:=5; start[51]:=5; + start[52]:=5; start[53]:=5; start[54]:=5; start[55]:=5; + start[56]:=5; start[57]:=5; start[58]:=0; start[59]:=7; + start[60]:=19; start[61]:=8; start[62]:=20; start[63]:=0; + start[64]:=0; start[65]:=1; start[66]:=1; start[67]:=1; + start[68]:=1; start[69]:=1; start[70]:=1; start[71]:=1; + start[72]:=1; start[73]:=1; start[74]:=1; start[75]:=1; + start[76]:=1; start[77]:=1; start[78]:=1; start[79]:=1; + start[80]:=1; start[81]:=1; start[82]:=1; start[83]:=1; + start[84]:=1; start[85]:=1; start[86]:=1; start[87]:=1; + start[88]:=1; start[89]:=1; start[90]:=1; start[91]:=15; + start[92]:=0; start[93]:=16; start[94]:=0; start[95]:=0; + start[96]:=0; start[97]:=1; start[98]:=1; start[99]:=1; + start[100]:=1; start[101]:=1; start[102]:=1; start[103]:=1; + start[104]:=1; start[105]:=1; start[106]:=1; start[107]:=1; + start[108]:=1; start[109]:=1; start[110]:=1; start[111]:=1; + start[112]:=1; start[113]:=1; start[114]:=1; start[115]:=1; + start[116]:=1; start[117]:=1; start[118]:=1; start[119]:=1; + start[120]:=1; start[121]:=1; start[122]:=1; start[123]:=17; + start[124]:=14; start[125]:=18; start[126]:=0; start[127]:=0; +END CRS. diff --git a/src/tools/coco/CRT.Mod b/src/tools/coco/CRT.Mod new file mode 100644 index 00000000..45cc2c8b --- /dev/null +++ b/src/tools/coco/CRT.Mod @@ -0,0 +1,994 @@ +MODULE CRT; (* H.Moessenboeck 17.11.93, Cocol-R Tables *) + +IMPORT Texts := CmdlnTexts, Oberon, Sets; + +CONST + maxSymbols* = 300; (*max nr of t, nt, and pragmas*) + maxTerminals* = 256; (*max nr of terminals*) + maxNt* = 128; (*max nr of nonterminals*) + maxNodes* = 1500; (*max nr of graph nodes*) + normTrans* = 0; contextTrans* = 1; (*transition codes*) + maxSetNr = 128; (* max. number of symbol sets *) + maxClasses = 50; (* max. number of character classes *) + + (* node types *) + t* = 1; pr* = 2; nt* = 3; class* = 4; char* = 5; wt* = 6; any* = 7; eps* = 8; sync* = 9; sem* = 10; + alt* = 11; iter* = 12; opt* = 13; + + noSym* = -1; + eofSy* = 0; + + (* token kinds *) + classToken* = 0; (*token class*) + litToken* = 1; (*literal (e.g. keyword) not recognized by DFA*) + classLitToken* = 2; (*token class that can also match a literal*) + +TYPE + Name* = ARRAY 16 OF CHAR; (*symbol name*) + Position* = RECORD (*position of stretch of source text*) + beg*: LONGINT; (*start relative to beginning of file*) + len*: INTEGER; (*length*) + col*: INTEGER; (*column number of start position*) + END; + + SymbolNode* = RECORD + typ*: INTEGER; (*nt, t, pr, unknown*) + name*: Name; (*symbol name*) + struct*: INTEGER; (*typ = nt: index of 1st node of syntax graph*) + (*typ = t: token kind: literal, class, ...*) + deletable*: BOOLEAN; (*typ = nt: TRUE, if nonterminal is deletable*) + attrPos*: Position; (*position of attributes in source text*) + semPos*: Position; (*typ = pr: pos of sem action in source text*) + (*typ = nt: pos of local decls in source text *) + line*: INTEGER; (*source text line number of item in this node*) + END; + + Set* = ARRAY maxTerminals DIV Sets.size OF SET; + + GraphNode* = RECORD + typ* : INTEGER; (* nt,sts,wts,char,class,any,eps,sem,sync,alt,iter,opt*) + next*: INTEGER; (* index of successor node *) + (* next < 0: to successor in enclosing structure *) + p1*: INTEGER; (* typ IN {nt, t, wt}: index to symbol list *) + (* typ = any: index to anyset *) + (* typ = sync: index to syncset *) + (* typ = alt: index of 1st node of 1st alternative*) + (* typ IN {iter, opt}: 1st node in subexpression *) + (* typ = char: ordinal character value *) + (* typ = class: index of character class *) + p2*: INTEGER; (* typ = alt: index of 1st node of 2nd alternative*) + (* typ IN {char, class}: transition code *) + pos*: Position; (* typ IN {nt, t, wt}: pos of actual attribs *) + (* typ = sem: pos of sem action in source text. *) + line*: INTEGER; (* source text line number of item in this node *) + END; + + MarkList* = ARRAY maxNodes DIV Sets.size OF SET; + + FirstSets = ARRAY maxNt OF RECORD + ts: Set; (*terminal symbols*) + ready: BOOLEAN; (*TRUE = ts is complete*) + END; + FollowSets = ARRAY maxNt OF RECORD + ts: Set; (*terminal symbols*) + nts: Set; (*nts whose start set is to be included*) + END; + CharClass = RECORD + name: Name; (*class name*) + set: INTEGER (* ptr to set representing the class*) + END; + SymbolTable = ARRAY maxSymbols OF SymbolNode; + ClassTable = ARRAY maxClasses OF CharClass; + GraphList = ARRAY maxNodes OF GraphNode; + +VAR + maxSet*: INTEGER; (* index of last set *) + maxT*: INTEGER; (* terminals stored from 0 .. maxT *) + maxP*: INTEGER; (* pragmas stored from maxT+1 .. maxP *) + firstNt*: INTEGER; (* index of first nt: available after CompSymbolSets *) + lastNt*: INTEGER; (* index of last nt: available after CompSymbolSets *) + maxC*: INTEGER; (* index of last character class *) + semDeclPos*: Position; (*position of global semantic declarations*) + importPos*: Position; (*position of imported identifiers*) + ignored*: Set; (* characters ignored by the scanner *) + ignoreCase*: BOOLEAN; (* TRUE: scanner treats lower case as upper case*) + ddt*: ARRAY 10 OF BOOLEAN; (* debug and test switches *) + nNodes*: INTEGER; (* index of last graph node *) + root*: INTEGER; (* index of root node, filled by ATG *) + + w: Texts.Writer; + st: SymbolTable; + gn: GraphList; + first: FirstSets; (*first[i] = first symbols of st[i+firstNt]*) + follow: FollowSets; (*follow[i] = followers of st[i+firstNt]*) + chClass: ClassTable; (*character classes*) + set: ARRAY 128 OF Set; (*set[0] reserved for union of all synchronisation sets*) + dummyName: INTEGER; (*for unnamed character classes*) + +PROCEDURE ^MovePragmas; +PROCEDURE ^DelNode*(gn: GraphNode): BOOLEAN; + +PROCEDURE Str(s: ARRAY OF CHAR); +BEGIN Texts.WriteString(w, s) +END Str; + +PROCEDURE NL; +BEGIN Texts.WriteLn(w) +END NL; + +PROCEDURE Length(s: ARRAY OF CHAR): INTEGER; + VAR i: INTEGER; +BEGIN + i:=0; WHILE (i < LEN(s)) & (s[i] # 0X) DO INC(i) END; + RETURN i +END Length; + +PROCEDURE Restriction(n: INTEGER); +BEGIN + NL; Str("Restriction "); Texts.WriteInt(w, n, 0); NL; Texts.Append(Oberon.Log, w.buf); + HALT(99) +END Restriction; + +PROCEDURE ClearMarkList(VAR m: MarkList); + VAR i: INTEGER; +BEGIN + i := 0; WHILE i < maxNodes DIV Sets.size DO m[i] := {}; INC(i) END; +END ClearMarkList; + +PROCEDURE GetNode*(gp: INTEGER; VAR n: GraphNode); +BEGIN + n := gn[gp] +END GetNode; + +PROCEDURE PutNode*(gp: INTEGER; n: GraphNode); +BEGIN gn[gp] := n +END PutNode; + +PROCEDURE DelGraph*(gp: INTEGER): BOOLEAN; + VAR gn: GraphNode; +BEGIN + IF gp = 0 THEN RETURN TRUE END; (*end of graph found*) + GetNode(gp, gn); + RETURN DelNode(gn) & DelGraph(ABS(gn.next)); +END DelGraph; + +PROCEDURE NewSym*(typ: INTEGER; name: Name; line: INTEGER): INTEGER; + VAR i: INTEGER; +BEGIN + IF maxT + 1 = firstNt THEN Restriction(6) + ELSE + CASE typ OF + | t: INC(maxT); i := maxT + | pr: DEC(maxP); DEC(firstNt); DEC(lastNt); i := maxP + | nt: DEC(firstNt); i := firstNt + END; + IF maxT >= maxTerminals THEN Restriction(6) END; + st[i].typ := typ; st[i].name := name; + st[i].struct := 0; st[i].deletable := FALSE; + st[i].attrPos.beg := -1; + st[i].semPos.beg := -1; + st[i].line := line + END; + RETURN i +END NewSym; + +PROCEDURE GetSym*(sp: INTEGER; VAR sn: SymbolNode); +BEGIN sn := st[sp] +END GetSym; + +PROCEDURE PutSym*(sp: INTEGER; sn: SymbolNode); +BEGIN st[sp] := sn +END PutSym; + +PROCEDURE FindSym*(name: Name): INTEGER; + VAR i: INTEGER; +BEGIN + i := 0; (*search in terminal list*) + WHILE (i <= maxT) & (st[i].name # name) DO INC(i) END; + IF i <= maxT THEN RETURN i END; + i := firstNt; (*search in nonterminal/pragma list*) + WHILE (i < maxSymbols) & (st[i].name # name) DO INC(i) END; + IF i < maxSymbols THEN RETURN i ELSE RETURN noSym END +END FindSym; + +PROCEDURE NewSet*(s: Set): INTEGER; +BEGIN + INC(maxSet); IF maxSet > maxSetNr THEN Restriction(4) END; + set[maxSet] := s; + RETURN maxSet +END NewSet; + +PROCEDURE PrintSet(s: ARRAY OF SET; indent: INTEGER); + CONST maxLineLen = 80; + VAR col, i, len: INTEGER; empty: BOOLEAN; sn: SymbolNode; +BEGIN + i := 0; col := indent; empty := TRUE; + WHILE i <= maxT DO + IF Sets.In(s, i) THEN + empty := FALSE; GetSym(i, sn); len := Length(sn.name); + IF col + len + 2 > maxLineLen THEN + NL; col := 1; + WHILE col < indent DO Texts.Write(w, " "); INC(col) END + END; + Str(sn.name); Str(" "); + INC(col, len + 2) + END; + INC(i) + END; + IF empty THEN Str("-- empty set --") END; + NL; Texts.Append(Oberon.Log, w.buf) +END PrintSet; + +PROCEDURE CompFirstSet*(gp: INTEGER; VAR fs: Set); + VAR visited: MarkList; + + PROCEDURE CompFirst(gp: INTEGER; VAR fs: Set); + VAR s: Set; gn: GraphNode; sn: SymbolNode; + BEGIN + Sets.Clear(fs); + WHILE (gp # 0) & ~ Sets.In(visited, gp) DO + GetNode(gp, gn); Sets.Incl(visited, gp); + CASE gn.typ OF + | nt: + IF first[gn.p1 - firstNt].ready THEN + Sets.Unite(fs, first[gn.p1 - firstNt].ts); + ELSE + GetSym(gn.p1, sn); CompFirst(sn.struct, s); Sets.Unite(fs, s); + END; + | t, wt: Sets.Incl(fs, gn.p1); + | any: Sets.Unite(fs, set[gn.p1]) + | alt, iter, opt: + CompFirst(gn.p1, s); Sets.Unite(fs, s); + IF gn.typ = alt THEN CompFirst(gn.p2, s); Sets.Unite(fs, s) END + ELSE (* eps, sem, sync: nothing *) + END; + IF ~ DelNode(gn) THEN RETURN END; + gp := ABS(gn.next) + END + END CompFirst; + +BEGIN (* ComputeFirstSet *) + ClearMarkList(visited); + CompFirst(gp, fs); + IF ddt[3] THEN + NL; Str("ComputeFirstSet: gp = "); Texts.WriteInt(w, gp, 0); NL; + PrintSet(fs, 0); + END; +END CompFirstSet; + +PROCEDURE CompFirstSets; + VAR i: INTEGER; sn: SymbolNode; +BEGIN + i := firstNt; WHILE i <= lastNt DO first[i-firstNt].ready := FALSE; INC(i) END; + i := firstNt; + WHILE i <= lastNt DO (* for all nonterminals *) + GetSym(i, sn); CompFirstSet(sn.struct, first[i - firstNt].ts); + first[i - firstNt].ready := TRUE; + INC(i) + END; +END CompFirstSets; + +PROCEDURE CompExpected*(gp, sp: INTEGER; VAR exp: Set); +BEGIN + CompFirstSet(gp, exp); + IF DelGraph(gp) THEN Sets.Unite(exp, follow[sp - firstNt].ts) END +END CompExpected; + +PROCEDURE CompFollowSets; + VAR sn: SymbolNode; gn: GraphNode; curSy, i, size: INTEGER; visited: MarkList; + + PROCEDURE CompFol(gp: INTEGER); + VAR s: Set; gn: GraphNode; + BEGIN + WHILE (gp > 0) & ~ Sets.In(visited, gp) DO + GetNode(gp, gn); Sets.Incl(visited, gp); + IF gn.typ = nt THEN + CompFirstSet(ABS(gn.next), s); Sets.Unite(follow[gn.p1 - firstNt].ts, s); + IF DelGraph(ABS(gn.next)) THEN + Sets.Incl(follow[gn.p1 - firstNt].nts, curSy - firstNt) + END + ELSIF gn.typ IN {opt, iter} THEN CompFol(gn.p1) + ELSIF gn.typ = alt THEN CompFol(gn.p1); CompFol(gn.p2) + END; + gp := gn.next + END + END CompFol; + + PROCEDURE Complete(i: INTEGER); + VAR j: INTEGER; + BEGIN + IF Sets.In(visited, i) THEN RETURN END; + Sets.Incl(visited, i); + j := 0; + WHILE j <= lastNt - firstNt DO (* for all nonterminals *) + IF Sets.In(follow[i].nts, j) THEN + Complete(j); Sets.Unite(follow[i].ts, follow[j].ts); + Sets.Excl(follow[i].nts, j) + END; + INC(j) + END; + END Complete; + +BEGIN (* CompFollowSets *) + curSy := firstNt; size := (lastNt - firstNt + 2) DIV Sets.size; + WHILE curSy <= lastNt + 1 DO (* also for dummy root nt*) + Sets.Clear(follow[curSy - firstNt].ts); + i := 0; WHILE i <= size DO follow[curSy - firstNt].nts[i] := {}; INC(i) END; + INC(curSy) + END; + + curSy := firstNt; (*get direct successors of nonterminals*) + WHILE curSy <= lastNt DO + GetSym(curSy, sn); ClearMarkList(visited); CompFol(sn.struct); + INC(curSy) + END; + CompFol(root); (*curSy=lastNt+1*) + + curSy := 0; (*add indirect successors to follow.ts*) + WHILE curSy <= lastNt - firstNt DO + ClearMarkList(visited); Complete(curSy); + INC(curSy); + END; +END CompFollowSets; + + +PROCEDURE CompAnySets; + VAR curSy, i: INTEGER; sn: SymbolNode; + + PROCEDURE LeadingAny(gp: INTEGER; VAR a: GraphNode): BOOLEAN; + VAR gn: GraphNode; + BEGIN + IF gp <= 0 THEN RETURN FALSE END; + GetNode(gp, gn); + IF (gn.typ = any) THEN a := gn; RETURN TRUE + ELSE RETURN (gn.typ = alt) & (LeadingAny(gn.p1, a) OR LeadingAny(gn.p2, a)) + OR (gn.typ IN {opt, iter}) & LeadingAny(gn.p1, a) + OR DelNode(gn) & LeadingAny(gn.next, a) + END + END LeadingAny; + + PROCEDURE FindAS(gp: INTEGER); + VAR gn, gn2, a: GraphNode; s1, s2: Set; p: INTEGER; + BEGIN + WHILE gp > 0 DO + GetNode(gp, gn); + IF gn.typ IN {opt, iter} THEN + FindAS(gn.p1); + IF LeadingAny(gn.p1, a) THEN + CompFirstSet(ABS(gn.next), s1); Sets.Differ(set[a.p1], s1) + END + ELSIF gn.typ = alt THEN + p := gp; Sets.Clear(s1); + WHILE p # 0 DO + GetNode(p, gn2); FindAS(gn2.p1); + IF LeadingAny(gn2.p1, a) THEN + CompFirstSet(gn2.p2, s2); Sets.Unite(s2, s1); Sets.Differ(set[a.p1], s2) + ELSE + CompFirstSet(gn2.p1, s2); Sets.Unite(s1, s2) + END; + p := gn2.p2 + END + END; + gp := gn.next + END + END FindAS; + +BEGIN + curSy := firstNt; + WHILE curSy <= lastNt DO (* for all nonterminals *) + GetSym(curSy, sn); FindAS(sn.struct); + INC(curSy) + END +END CompAnySets; + + +PROCEDURE CompSyncSets; + VAR curSy, i: INTEGER; sn: SymbolNode; visited: MarkList; + + PROCEDURE CompSync(gp: INTEGER); + VAR s: Set; gn: GraphNode; + BEGIN + WHILE (gp > 0) & ~ Sets.In(visited, gp) DO + GetNode(gp, gn); Sets.Incl(visited, gp); + IF gn.typ = sync THEN + CompExpected(ABS(gn.next), curSy, s); + Sets.Incl(s, eofSy); Sets.Unite(set[0], s); + gn.p1 := NewSet(s); PutNode(gp, gn) + ELSIF gn.typ = alt THEN CompSync(gn.p1); CompSync(gn.p2) + ELSIF gn.typ IN {iter, opt} THEN CompSync(gn.p1) + END; + gp := gn.next + END + END CompSync; + +BEGIN + curSy := firstNt; ClearMarkList(visited); + WHILE curSy <= lastNt DO + GetSym(curSy, sn); CompSync(sn.struct); + INC(curSy); + END +END CompSyncSets; + + +PROCEDURE CompDeletableSymbols*; + VAR changed, del: BOOLEAN; i: INTEGER; sn: SymbolNode; +BEGIN + del := FALSE; + REPEAT + changed := FALSE; + i := firstNt; + WHILE i <= lastNt DO (*for all nonterminals*) + GetSym(i, sn); + IF ~sn.deletable & DelGraph(sn.struct) THEN + sn.deletable := TRUE; PutSym(i, sn); changed := TRUE; del := TRUE + END; + INC(i) + END; + UNTIL ~changed; + + i := firstNt; IF del THEN NL END; + WHILE i <= lastNt DO + GetSym(i, sn); + IF sn.deletable THEN Str(" "); Str(sn.name); Str(" deletable"); NL END; + INC(i); + END; + Texts.Append(Oberon.Log, w.buf) +END CompDeletableSymbols; + + +PROCEDURE CompSymbolSets*; + VAR i: INTEGER; sn: SymbolNode; +BEGIN + i := NewSym(t, "???", 0); (*unknown symbols get code maxT*) + MovePragmas; + CompDeletableSymbols; + CompFirstSets; + CompFollowSets; + CompAnySets; + CompSyncSets; + IF ddt[1] THEN + i := firstNt; Str("First & follow symbols:"); NL; + WHILE i <= lastNt DO (* for all nonterminals *) + GetSym(i, sn); Str(sn.name); NL; + Str("first: "); PrintSet(first[i - firstNt].ts, 10); + Str("follow: "); PrintSet(follow[i - firstNt].ts, 10); + NL; + INC(i); + END; + + IF maxSet >= 0 THEN NL; NL; Str("List of sets (ANY, SYNC): "); NL END; + i := 0; + WHILE i <= maxSet DO + Str(" set["); Texts.WriteInt (w, i, 2); Str("] = "); PrintSet(set[i], 16); + INC (i) + END; + NL; NL; Texts.Append(Oberon.Log, w.buf) + END; +END CompSymbolSets; + + +PROCEDURE GetFirstSet(sp: INTEGER; VAR s: Set); +BEGIN s := first[sp - firstNt].ts +END GetFirstSet; + +PROCEDURE GetFollowSet(sp: INTEGER; VAR s: Set); +BEGIN s := follow[sp - firstNt].ts +END GetFollowSet; + +PROCEDURE GetSet*(nr: INTEGER; VAR s: Set); +BEGIN s := set[nr] +END GetSet; + +PROCEDURE MovePragmas; + VAR i: INTEGER; +BEGIN + IF maxP > firstNt THEN + i := maxSymbols - 1; maxP := maxT; + WHILE i > lastNt DO + INC(maxP); IF maxP >= firstNt THEN Restriction(6) END; + st[maxP] := st[i]; DEC(i) + END; + END +END MovePragmas; + +PROCEDURE PrintSymbolTable*; + VAR i, j: INTEGER; + + PROCEDURE WriteTyp(typ: INTEGER); + BEGIN + CASE typ OF + | t : Str(" t "); + | pr : Str(" pr "); + | nt : Str(" nt "); + END; + END WriteTyp; + +BEGIN (* PrintSymbolTable *) + Str("Symbol Table:"); NL; NL; + Str("nr name typ hasAttribs struct del line"); NL; NL; + + i := 0; + WHILE i < maxSymbols DO + Texts.WriteInt(w, i, 3); Str(" "); + j := 0; WHILE (j < 8) & (st[i].name[j] # 0X) DO Texts.Write(w, st[i].name[j]); INC(j) END; + WHILE j < 8 DO Texts.Write(w, " "); INC(j) END; + WriteTyp(st[i].typ); + IF st[i].attrPos.beg >= 0 THEN Str(" TRUE ") ELSE Str(" FALSE") END; + Texts.WriteInt(w, st[i].struct, 10); + IF st[i].deletable THEN Str(" TRUE ") ELSE Str(" FALSE") END; + Texts.WriteInt(w, st[i].line, 6); NL; + IF i = maxT THEN i := firstNt ELSE INC(i) END + END; + NL; NL; Texts.Append(Oberon.Log, w.buf) +END PrintSymbolTable; + +PROCEDURE NewClass*(name: Name; set: Set): INTEGER; +BEGIN + INC(maxC); IF maxC >= maxClasses THEN Restriction(7) END; + IF name[0] = "#" THEN name[1] := CHR(ORD("A") + dummyName); INC(dummyName) END; + chClass[maxC].name := name; chClass[maxC].set := NewSet(set); + RETURN maxC +END NewClass; + +PROCEDURE ClassWithName*(name: Name): INTEGER; + VAR i: INTEGER; +BEGIN + i := maxC; WHILE (i >= 0) & (chClass[i].name # name) DO DEC(i) END; + RETURN i +END ClassWithName; + +PROCEDURE ClassWithSet*(s: Set): INTEGER; + VAR i: INTEGER; +BEGIN + i := maxC; WHILE (i >= 0) & ~ Sets.Equal(set[chClass[i].set], s) DO DEC(i) END; + RETURN i +END ClassWithSet; + +PROCEDURE GetClass*(n: INTEGER; VAR s: Set); +BEGIN + GetSet(chClass[n].set, s) +END GetClass; + +PROCEDURE GetClassName*(n: INTEGER; VAR name: Name); +BEGIN + name := chClass[n].name +END GetClassName; + +PROCEDURE XRef*; + CONST maxLineLen = 80; + TYPE ListPtr = POINTER TO ListNode; + ListNode = RECORD + next: ListPtr; + line: INTEGER; + END; + ListHdr = RECORD + name: Name; + lptr: ListPtr; + END; + VAR gn: GraphNode; col, i, j: INTEGER; l, p, q: ListPtr; + sn: SymbolNode; + xList: ARRAY maxSymbols OF ListHdr; + +BEGIN (* XRef *) + IF maxT <= 0 THEN RETURN END; + MovePragmas; + (* initialise cross reference list *) + i := 0; + WHILE i <= lastNt DO (* for all symbols *) + GetSym(i, sn); xList[i].name := sn.name; xList[i].lptr := NIL; + IF i = maxP THEN i := firstNt ELSE INC(i) END + END; + + (* search lines where symbol has been referenced *) + i := 1; + WHILE i <= nNodes DO (* for all graph nodes *) + GetNode(i, gn); + IF gn.typ IN {t, wt, nt} THEN + NEW(l); l^.next := xList[gn.p1].lptr; l^.line := gn.line; + xList[gn.p1].lptr := l + END; + INC(i); + END; + + (* search lines where symbol has been defined and insert in order *) + i := 1; + WHILE i <= lastNt DO (*for all symbols*) + GetSym(i, sn); p := xList[i].lptr; q := NIL; + WHILE (p # NIL) & (p^.line > sn.line) DO q := p; p := p^.next END; + NEW(l); l^.next := p; + l^.line := -sn.line; + IF q # NIL THEN q^.next := l ELSE xList[i].lptr := l END; + IF i = maxP THEN i := firstNt ELSE INC(i) END + END; + + (* print cross reference listing *) + NL; Str("Cross reference list:"); NL; NL; Str("Terminals:"); NL; Str(" 0 EOF"); NL; + i := 1; + WHILE i <= lastNt DO (*for all symbols*) + Texts.WriteInt(w, i, 3); Str(" "); + j := 0; WHILE (j < 15) & (xList[i].name[j] # 0X) DO Texts.Write(w, xList[i].name[j]); INC(j) END; + l := xList[i].lptr; col := 25; + WHILE l # NIL DO + IF col + 5 > maxLineLen THEN + NL; col := 0; WHILE col < 25 DO Texts.Write(w, " "); INC(col) END + END; + IF l^.line = 0 THEN Str("undef") ELSE Texts.WriteInt(w, l^.line, 5) END; + INC(col, 5); + l := l^.next + END; + NL; + IF i = maxT THEN NL; Str("Pragmas:"); NL END; + IF i = maxP THEN NL; Str("Nonterminals:"); NL; i := firstNt ELSE INC(i) END + END; + NL; NL; Texts.Append(Oberon.Log, w.buf) +END XRef; + + +PROCEDURE NewNode*(typ, p1, line: INTEGER): INTEGER; +BEGIN + INC(nNodes); IF nNodes > maxNodes THEN Restriction(3) END; + gn[nNodes].typ := typ; gn[nNodes].next := 0; + gn[nNodes].p1 := p1; gn[nNodes].p2 := 0; + gn[nNodes].pos.beg := -1; gn[nNodes].line := line; + RETURN nNodes; +END NewNode; + +PROCEDURE CompleteGraph*(gp: INTEGER); + VAR p: INTEGER; +BEGIN + WHILE gp # 0 DO + p := gn[gp].next; gn[gp].next := 0; gp := p + END +END CompleteGraph; + +PROCEDURE ConcatAlt*(VAR gL1, gR1: INTEGER; gL2, gR2: INTEGER); + VAR p: INTEGER; +BEGIN + gL2 := NewNode(alt, gL2, 0); + p := gL1; WHILE gn[p].p2 # 0 DO p := gn[p].p2 END; gn[p].p2 := gL2; + p := gR1; WHILE gn[p].next # 0 DO p := gn[p].next END; gn[p].next := gR2 +END ConcatAlt; + +PROCEDURE ConcatSeq*(VAR gL1, gR1: INTEGER; gL2, gR2: INTEGER); + VAR p, q: INTEGER; +BEGIN + p := gn[gR1].next; gn[gR1].next := gL2; (*head node*) + WHILE p # 0 DO (*substructure*) + q := gn[p].next; gn[p].next := -gL2; p := q + END; + gR1 := gR2 +END ConcatSeq; + +PROCEDURE MakeFirstAlt*(VAR gL, gR: INTEGER); +BEGIN + gL := NewNode(alt, gL, 0); gn[gL].next := gR; gR := gL +END MakeFirstAlt; + +PROCEDURE MakeIteration*(VAR gL, gR: INTEGER); + VAR p, q: INTEGER; +BEGIN + gL := NewNode(iter, gL, 0); p := gR; gR := gL; + WHILE p # 0 DO + q := gn[p].next; gn[p].next := - gL; p := q + END +END MakeIteration; + +PROCEDURE MakeOption*(VAR gL, gR: INTEGER); +BEGIN + gL := NewNode(opt, gL, 0); gn[gL].next := gR; gR := gL +END MakeOption; + +PROCEDURE StrToGraph*(str: ARRAY OF CHAR; VAR gL, gR: INTEGER); + VAR len, i: INTEGER; +BEGIN + gR := 0; i := 1; len := Length(str) - 1; + WHILE i < len DO + gn[gR].next := NewNode(char, ORD(str[i]), 0); gR := gn[gR].next; + INC(i) + END; + gL := gn[0].next; gn[0].next := 0 +END StrToGraph; + +PROCEDURE DelNode*(gn: GraphNode): BOOLEAN; + VAR sn: SymbolNode; + + PROCEDURE DelAlt(gp: INTEGER): BOOLEAN; + VAR gn: GraphNode; + BEGIN + IF gp <= 0 THEN RETURN TRUE END; (*end of graph found*) + GetNode(gp, gn); + RETURN DelNode(gn) & DelAlt(gn.next); + END DelAlt; + +BEGIN + IF gn.typ = nt THEN GetSym(gn.p1, sn); RETURN sn.deletable + ELSIF gn.typ = alt THEN RETURN DelAlt(gn.p1) OR (gn.p2 # 0) & DelAlt(gn.p2) + ELSE RETURN gn.typ IN {eps, iter, opt, sem, sync} + END +END DelNode; + +PROCEDURE PrintGraph*; + VAR i: INTEGER; + + PROCEDURE WriteTyp(typ: INTEGER); + BEGIN + CASE typ OF + | nt : Str("nt ") + | t : Str("t ") + | wt : Str("wt ") + | any : Str("any ") + | eps : Str("eps ") + | sem : Str("sem ") + | sync: Str("sync") + | alt : Str("alt ") + | iter: Str("iter") + | opt : Str("opt ") + ELSE Str("--- ") + END; + END WriteTyp; + +BEGIN (* PrintGraph *) + Str("GraphList:"); NL; NL; + Str(" nr typ next p1 p2 line"); NL; NL; + + i := 0; + WHILE i <= nNodes DO + Texts.WriteInt(w, i, 3); Str(" "); + WriteTyp(gn[i].typ); Texts.WriteInt(w, gn[i].next, 7); + Texts.WriteInt(w, gn[i].p1, 7); + Texts.WriteInt(w, gn[i].p2, 7); + Texts.WriteInt(w, gn[i].line, 7); + NL; + INC(i); + END; + NL; NL; Texts.Append(Oberon.Log, w.buf) +END PrintGraph; + +PROCEDURE FindCircularProductions* (VAR ok: BOOLEAN); + CONST maxList = 150; + TYPE ListEntry = RECORD + left : INTEGER; + right : INTEGER; + deleted: BOOLEAN; + END; + VAR changed, onLeftSide, onRightSide: BOOLEAN; i, j, listLength: INTEGER; + list: ARRAY maxList OF ListEntry; + singles: MarkList; + sn: SymbolNode; + + PROCEDURE GetSingles (gp: INTEGER; VAR singles: MarkList); + VAR gn: GraphNode; + BEGIN + IF gp <= 0 THEN RETURN END; (* end of graph found *) + GetNode (gp, gn); + IF gn.typ = nt THEN + IF DelGraph(ABS(gn.next)) THEN Sets.Incl(singles, gn.p1) END + ELSIF gn.typ IN {alt, iter, opt} THEN + IF DelGraph(ABS(gn.next)) THEN + GetSingles(gn.p1, singles); + IF gn.typ = alt THEN GetSingles(gn.p2, singles) END + END + END; + IF DelNode(gn) THEN GetSingles(gn.next, singles) END + END GetSingles; + +BEGIN (* FindCircularProductions *) + i := firstNt; listLength := 0; + WHILE i <= lastNt DO (* for all nonterminals i *) + ClearMarkList (singles); GetSym (i, sn); + GetSingles (sn.struct, singles); (* get nt's j such that i-->j *) + j := firstNt; + WHILE j <= lastNt DO (* for all nonterminals j *) + IF Sets.In(singles, j) THEN + list[listLength].left := i; list[listLength].right := j; + list[listLength].deleted := FALSE; + INC (listLength) + END; + INC(j) + END; + INC(i) + END; + + REPEAT + i := 0; changed := FALSE; + WHILE i < listLength DO + IF ~ list[i].deleted THEN + j := 0; onLeftSide := FALSE; onRightSide := FALSE; + WHILE j < listLength DO + IF ~ list[j].deleted THEN + IF list[i].left = list[j].right THEN onRightSide := TRUE END; + IF list[j].left = list[i].right THEN onLeftSide := TRUE END + END; + INC(j) + END; + IF ~ onRightSide OR ~ onLeftSide THEN + list[i].deleted := TRUE; changed := TRUE + END + END; + INC(i) + END + UNTIL ~ changed; + + i := 0; ok := TRUE; + WHILE i < listLength DO + IF ~ list[i].deleted THEN + ok := FALSE; + GetSym(list[i].left, sn); NL; Str(" "); Str(sn.name); Str(" --> "); + GetSym(list[i].right, sn); Str(sn.name) + END; + INC(i) + END; + Texts.Append(Oberon.Log, w.buf) +END FindCircularProductions; + + +PROCEDURE LL1Test* (VAR ll1: BOOLEAN); + VAR sn: SymbolNode; curSy: INTEGER; + + PROCEDURE LL1Error (cond, ts: INTEGER); + VAR sn: SymbolNode; + BEGIN + ll1 := FALSE; + GetSym (curSy, sn); Str(" LL1 error in "); Str(sn.name); Str(": "); + IF ts > 0 THEN GetSym (ts, sn); Str(sn.name); Str(" is ") END; + CASE cond OF + 1: Str(" start of several alternatives.") + | 2: Str(" start & successor of deletable structure") + | 3: Str(" an ANY node that matchs no symbol") + END; + NL; Texts.Append(Oberon.Log, w.buf) + END LL1Error; + + PROCEDURE Check (cond: INTEGER; VAR s1, s2: Set); + VAR i: INTEGER; + BEGIN + i := 0; + WHILE i <= maxT DO + IF Sets.In(s1, i) & Sets.In(s2, i) THEN LL1Error(cond, i) END; + INC(i) + END + END Check; + + PROCEDURE CheckAlternatives (gp: INTEGER); + VAR gn, gn1: GraphNode; s1, s2: Set; p: INTEGER; + BEGIN + WHILE gp > 0 DO + GetNode(gp, gn); + IF gn.typ = alt THEN + p := gp; Sets.Clear(s1); + WHILE p # 0 DO (*for all alternatives*) + GetNode(p, gn1); CompExpected(gn1.p1, curSy, s2); + Check(1, s1, s2); Sets.Unite(s1, s2); + CheckAlternatives(gn1.p1); + p := gn1.p2 + END + ELSIF gn.typ IN {opt, iter} THEN + CompExpected(gn.p1, curSy, s1); + CompExpected(ABS(gn.next), curSy, s2); + Check(2, s1, s2); + CheckAlternatives(gn.p1) + ELSIF gn.typ = any THEN + GetSet(gn.p1, s1); + IF Sets.Empty(s1) THEN LL1Error(3, 0) END (*e.g. {ANY} ANY or [ANY] ANY*) + END; + gp := gn.next + END + END CheckAlternatives; + +BEGIN (* LL1Test *) + curSy := firstNt; ll1 := TRUE; + WHILE curSy <= lastNt DO (*for all nonterminals*) + GetSym(curSy, sn); CheckAlternatives (sn.struct); + INC (curSy) + END; +END LL1Test; + + +PROCEDURE TestCompleteness* (VAR ok: BOOLEAN); + VAR sp: INTEGER; sn: SymbolNode; +BEGIN + sp := firstNt; ok := TRUE; + WHILE sp <= lastNt DO (*for all nonterminals*) + GetSym (sp, sn); + IF sn.struct = 0 THEN + ok := FALSE; NL; Str(" No production for "); Str(sn.name); Texts.Append(Oberon.Log, w.buf) + END; + INC(sp) + END +END TestCompleteness; + + +PROCEDURE TestIfAllNtReached* (VAR ok: BOOLEAN); + VAR gn: GraphNode; sp: INTEGER; reached: MarkList; sn: SymbolNode; + + PROCEDURE MarkReachedNts (gp: INTEGER); + VAR gn: GraphNode; sn: SymbolNode; + BEGIN + WHILE gp > 0 DO + GetNode(gp, gn); + IF gn.typ = nt THEN + IF ~ Sets.In(reached, gn.p1) THEN (*new nt reached*) + Sets.Incl(reached, gn.p1); + GetSym(gn.p1, sn); MarkReachedNts(sn.struct) + END + ELSIF gn.typ IN {alt, iter, opt} THEN + MarkReachedNts(gn.p1); + IF gn.typ = alt THEN MarkReachedNts(gn.p2) END + END; + gp := gn.next + END + END MarkReachedNts; + +BEGIN (* TestIfAllNtReached *) + ClearMarkList(reached); + GetNode(root, gn); Sets.Incl(reached, gn.p1); + GetSym(gn.p1, sn); MarkReachedNts(sn.struct); + + sp := firstNt; ok := TRUE; + WHILE sp <= lastNt DO (*for all nonterminals*) + IF ~ Sets.In(reached, sp) THEN + ok := FALSE; GetSym(sp, sn); NL; Str(" "); Str(sn.name); Str(" cannot be reached") + END; + INC(sp) + END; + Texts.Append(Oberon.Log, w.buf) +END TestIfAllNtReached; + + +PROCEDURE TestIfNtToTerm* (VAR ok: BOOLEAN); + VAR changed: BOOLEAN; gn: GraphNode; sp: INTEGER; + sn: SymbolNode; + termList: MarkList; + + PROCEDURE IsTerm (gp: INTEGER): BOOLEAN; + VAR gn: GraphNode; + BEGIN + WHILE gp > 0 DO + GetNode(gp, gn); + IF (gn.typ = nt) & ~ Sets.In(termList, gn.p1) + OR (gn.typ = alt) & ~ IsTerm(gn.p1) & ~ IsTerm(gn.p2) THEN RETURN FALSE + END; + gp := gn.next + END; + RETURN TRUE + END IsTerm; + +BEGIN (* TestIfNtToTerm *) + ClearMarkList(termList); + REPEAT + sp := firstNt; changed := FALSE; + WHILE sp <= lastNt DO + IF ~ Sets.In(termList, sp) THEN + GetSym(sp, sn); + IF IsTerm(sn.struct) THEN Sets.Incl(termList, sp); changed := TRUE END + END; + INC(sp) + END + UNTIL ~changed; + + sp := firstNt; ok := TRUE; + WHILE sp <= lastNt DO + IF ~ Sets.In(termList, sp) THEN + ok := FALSE; GetSym(sp, sn); NL; Str(" "); Str(sn.name); Str(" cannot be derived to terminals") + END; + INC(sp) + END; + Texts.Append(Oberon.Log, w.buf) +END TestIfNtToTerm; + +PROCEDURE Init*; +BEGIN + maxSet := 0; Sets.Clear(set[0]); Sets.Incl(set[0], eofSy); + firstNt := maxSymbols; maxP := maxSymbols; maxT := -1; maxC := -1; + lastNt := maxP - 1; + dummyName := 0; + nNodes := 0 +END Init; + +BEGIN (* CRT *) + (* The dummy node gn[0] ensures that none of the procedures + above have to check for 0 indices. *) + nNodes := 0; + gn[0].typ := -1; gn[0].p1 := 0; gn[0].p2 := 0; gn[0].next := 0; gn[0].line := 0; + Texts.OpenWriter(w) +END CRT. diff --git a/src/tools/coco/CRX.Mod b/src/tools/coco/CRX.Mod new file mode 100644 index 00000000..9e2c567a --- /dev/null +++ b/src/tools/coco/CRX.Mod @@ -0,0 +1,474 @@ +MODULE CRX; (* H.Moessenboeck 17.11.93 *) + +IMPORT Oberon, Texts := CmdlnTexts, Sets, CRS, CRT, SYSTEM; + +CONST + symSetSize = 100; + maxTerm = 3; (* sets of size < maxTerm are enumerated *) + + tErr = 0; altErr = 1; syncErr = 2; + EOL = 0DX; + +VAR + maxSS: INTEGER; (* number of symbol sets *) + errorNr: INTEGER; (* highest parser error number *) + curSy: INTEGER; (* symbol whose production is currently generated *) + err, w: Texts.Writer; + fram: Texts.Reader; + src: Texts.Reader; + syn: Texts.Writer; + scanner: ARRAY 32 OF CHAR; + symSet: ARRAY symSetSize OF CRT.Set; + + +PROCEDURE Restriction(n: INTEGER); +BEGIN + Texts.WriteLn(w); Texts.WriteString(w, "Restriction "); + Texts.WriteInt(w, n, 0); Texts.WriteLn(w); Texts.Append(Oberon.Log, w.buf); + HALT(99) +END Restriction; + +PROCEDURE PutS(s: ARRAY OF CHAR); + VAR i: INTEGER; +BEGIN i := 0; + WHILE (i < LEN(s)) & (s[i] # 0X) DO + IF s[i] = "$" THEN Texts.WriteLn(syn) ELSE Texts.Write(syn, s[i]) END; + INC(i) + END +END PutS; + +PROCEDURE PutI(i: INTEGER); +BEGIN Texts.WriteInt(syn, i, 0) +END PutI; + +PROCEDURE Indent(n: INTEGER); + VAR i: INTEGER; +BEGIN i := 0; WHILE i < n DO Texts.Write(syn, " "); INC(i) END +END Indent; + +PROCEDURE PutSet(s: SET); + VAR i: INTEGER; first: BOOLEAN; +BEGIN + i := 0; first := TRUE; + WHILE i < Sets.size DO + IF i IN s THEN + IF first THEN first := FALSE ELSE Texts.Write(syn, ",") END; + PutI(i) + END; + INC(i) + END +END PutSet; + +PROCEDURE PutSet1(s: CRT.Set); + VAR i: INTEGER; first: BOOLEAN; +BEGIN + i := 0; first := TRUE; + WHILE i <= CRT.maxT DO + IF Sets.In(s, i) THEN + IF first THEN first := FALSE ELSE Texts.Write(syn, ",") END; + PutI(i) + END; + INC(i) + END +END PutSet1; + +PROCEDURE Length*(s: ARRAY OF CHAR): INTEGER; + VAR i: INTEGER; +BEGIN + i:=0; WHILE (i < LEN(s)) & (s[i] # 0X) DO INC(i) END; + RETURN i +END Length; + +PROCEDURE Alternatives(gp: INTEGER): INTEGER; + VAR gn: CRT.GraphNode; n: INTEGER; +BEGIN + n := 0; + WHILE gp > 0 DO + CRT.GetNode(gp, gn); gp := gn.p2; INC(n) + END; + RETURN n +END Alternatives; + +PROCEDURE CopyFramePart (stopStr: ARRAY OF CHAR); (*Copy from file to file until *) + VAR ch, startCh: CHAR; i, j, high: INTEGER; +BEGIN + startCh := stopStr[0]; high := Length(stopStr) - 1; Texts.Read (fram, ch); + WHILE ch # 0X DO + IF ch = startCh THEN (* check if stopString occurs *) + i := 0; + REPEAT + IF i = high THEN RETURN END; (*stopStr[0..i] found; no unrecognized character*) + Texts.Read (fram, ch); INC(i); + UNTIL ch # stopStr[i]; + (*stopStr[0..i-1] found; 1 unrecognized character*) + j := 0; WHILE j < i DO Texts.Write(syn, stopStr[j]); INC(j) END + ELSE Texts.Write (syn, ch); Texts.Read(fram, ch) + END + END +END CopyFramePart; + +PROCEDURE CopySourcePart (pos: CRT.Position; indent: INTEGER); +(*Copy sequence from to *) + VAR ch: CHAR; i: INTEGER; nChars: LONGINT; r: Texts.Reader; +BEGIN + IF (pos.beg >= 0) & (pos.len > 0) THEN + Texts.OpenReader(r, CRS.src, pos.beg); Texts.Read(r, ch); + nChars := pos.len - 1; + Indent(indent); + LOOP + WHILE ch = EOL DO + Texts.WriteLn(syn); Indent(indent); + IF nChars > 0 THEN Texts.Read(r, ch); DEC(nChars) ELSE EXIT END; + i := pos.col; + WHILE (ch = " ") & (i > 0) DO (* skip blanks at beginning of line *) + IF nChars > 0 THEN Texts.Read(r, ch); DEC (nChars) ELSE EXIT END; + DEC(i) + END + END; + Texts.Write (syn, ch); + IF nChars > 0 THEN Texts.Read(r, ch); DEC (nChars) ELSE EXIT END + END + END + +(* IF pos.beg >= 0 THEN + Texts.OpenReader(r, CRS.src, pos.beg); + nChars := pos.len; col := pos.col - 1; ch := " "; + WHILE (nChars > 0) & (ch = " ") DO (*skip leading blanks*) + Texts.Read(r, ch); DEC(nChars); INC(col) + END; + Indent(indent); + LOOP + WHILE ch = EOL DO + Texts.WriteLn(syn); Indent(indent); + IF nChars > 0 THEN Texts.Read(r, ch); DEC(nChars) ELSE EXIT END; + i := col - 1; + WHILE (ch = " ") & (i > 0) DO (* skip blanks at beginning of line *) + IF nChars > 0 THEN Texts.Read(r, ch); DEC (nChars) ELSE EXIT END; + DEC(i) + END + END; + Texts.Write (syn, ch); + IF nChars > 0 THEN Texts.Read(r, ch); DEC (nChars) ELSE EXIT END + END (* LOOP *) + END *) +END CopySourcePart; + +PROCEDURE GenErrorMsg (errTyp, errSym: INTEGER; VAR errNr: INTEGER); + VAR i: INTEGER; name: ARRAY 32 OF CHAR; sn: CRT.SymbolNode; +BEGIN + INC (errorNr); errNr := errorNr; + CRT.GetSym (errSym, sn); COPY(sn.name, name); + i := 0; WHILE name[i] # 0X DO IF name[i] = CHR(34) THEN name[i] := "'" END; INC(i) END; + Texts.WriteString(err, " |"); + Texts.WriteInt (err, errNr, 3); Texts.WriteString (err, ": Msg("); Texts.Write(err, CHR(34)); + CASE errTyp OF + | tErr : Texts.WriteString (err, name); Texts.WriteString (err, " expected") + | altErr : Texts.WriteString (err, "invalid "); Texts.WriteString (err, name) + | syncErr: Texts.WriteString (err, "this symbol not expected in "); Texts.WriteString (err, name) + END; + Texts.Write(err, CHR(34)); Texts.Write(err, ")"); Texts.WriteLn(err) +END GenErrorMsg; + +PROCEDURE NewCondSet (set: CRT.Set): INTEGER; + VAR i: INTEGER; +BEGIN + i := 1; (*skip symSet[0]*) + WHILE i <= maxSS DO + IF Sets.Equal(set, symSet[i]) THEN RETURN i END; + INC(i) + END; + INC(maxSS); IF maxSS > symSetSize THEN Restriction (9) END; + symSet[maxSS] := set; + RETURN maxSS +END NewCondSet; + +PROCEDURE GenCond (set: CRT.Set); + VAR sx, i, n: INTEGER; + + PROCEDURE Small(s: CRT.Set): BOOLEAN; + BEGIN + i := Sets.size; + WHILE i <= CRT.maxT DO + IF Sets.In(set, i) THEN RETURN FALSE END; + INC(i) + END; + RETURN TRUE + END Small; + +BEGIN + n := Sets.Elements(set, i); + (*IF n = 0 THEN PutS(" FALSE") (*this branch should never be taken*) + ELSIF (n > 1) & Small(set) THEN + PutS(" sym IN {"); PutSet(set[0]); PutS("} ") + ELSIF n <= maxTerm THEN + i := 0; + WHILE i <= CRT.maxT DO + IF Sets.In (set, i) THEN + PutS(" (sym = "); PutI(i); Texts.Write(syn, ")"); + DEC(n); IF n > 0 THEN PutS(" OR") END + END; + INC(i) + END + ELSE PutS(" sym IN symSet["); PutI(NewCondSet(set)); PutS(",0]") + END;*) + IF n = 0 THEN PutS(" FALSE") (*this branch should never be taken*) + ELSIF n <= maxTerm THEN + i := 0; + WHILE i <= CRT.maxT DO + IF Sets.In (set, i) THEN + PutS(" (sym = "); PutI(i); Texts.Write(syn, ")"); + DEC(n); IF n > 0 THEN PutS(" OR") END + END; + INC(i) + END + ELSE PutS(" StartOf("); PutI(NewCondSet(set)); PutS(") ") + END; + +END GenCond; + +PROCEDURE GenCode (gp, indent: INTEGER; checked: CRT.Set); + VAR gn, gn2: CRT.GraphNode; sn: CRT.SymbolNode; gp2: INTEGER; + s1, s2: CRT.Set; errNr, alts: INTEGER; equal: BOOLEAN; +BEGIN + WHILE gp > 0 DO + CRT.GetNode (gp, gn); + CASE gn.typ OF + + | CRT.nt: + Indent(indent); + CRT.GetSym(gn.p1, sn); PutS(sn.name); + IF gn.pos.beg >= 0 THEN + Texts.Write(syn, "("); CopySourcePart(gn.pos, 0); Texts.Write(syn, ")") + END; + PutS(";$") + + | CRT.t: + CRT.GetSym(gn.p1, sn); Indent(indent); + IF Sets.In(checked, gn.p1) THEN + PutS("Get;$") + ELSE + PutS("Expect("); PutI(gn.p1); PutS(");$") + END + + | CRT.wt: + CRT.CompExpected(ABS(gn.next), curSy, s1); + CRT.GetSet(0, s2); Sets.Unite(s1, s2); + CRT.GetSym(gn.p1, sn); Indent(indent); + PutS("ExpectWeak("); PutI(gn.p1); PutS(", "); PutI(NewCondSet(s1)); PutS(");$") + + | CRT.any: + Indent(indent); PutS("Get;$") + + | CRT.eps: (* nothing *) + + | CRT.sem: + CopySourcePart(gn.pos, indent); PutS(";$"); + + | CRT.sync: + CRT.GetSet(gn.p1, s1); + GenErrorMsg (syncErr, curSy, errNr); + Indent(indent); + PutS("WHILE ~("); GenCond(s1); PutS(") DO Error("); + PutI(errNr); PutS("); Get END;$") + + | CRT.alt: + CRT.CompFirstSet(gp, s1); equal := Sets.Equal(s1, checked); + alts := Alternatives(gp); + IF alts > 5 THEN Indent(indent); PutS("CASE sym OF$") END; + gp2 := gp; + WHILE gp2 # 0 DO + CRT.GetNode(gp2, gn2); + CRT.CompExpected(gn2.p1, curSy, s1); + Indent(indent); + IF alts > 5 THEN PutS("| "); PutSet1(s1); PutS(": ") (*case labels*) + ELSIF gp2 = gp THEN PutS("IF"); GenCond(s1); PutS(" THEN$") + ELSIF (gn2.p2 = 0) & equal THEN PutS("ELSE$") + ELSE PutS("ELSIF"); GenCond(s1); PutS(" THEN$") + END; + Sets.Unite(s1, checked); + GenCode(gn2.p1, indent + 2, s1); + gp2 := gn2.p2 + END; + IF ~ equal THEN + GenErrorMsg(altErr, curSy, errNr); + Indent(indent); PutS("ELSE Error("); PutI(errNr); PutS(")$") + END; + Indent(indent); PutS("END;$") + + | CRT.iter: + CRT.GetNode(gn.p1, gn2); + Indent(indent); PutS("WHILE"); + IF gn2.typ = CRT.wt THEN + CRT.CompExpected(ABS(gn2.next), curSy, s1); + CRT.CompExpected(ABS(gn.next), curSy, s2); + CRT.GetSym(gn2.p1, sn); + PutS(" WeakSeparator("); PutI(gn2.p1); PutS(", "); PutI(NewCondSet(s1)); + PutS(", "); PutI(NewCondSet(s2)); PutS(") "); + Sets.Clear(s1); (*for inner structure*) + IF gn2.next > 0 THEN gp2 := gn2.next ELSE gp2 := 0 END + ELSE + gp2 := gn.p1; CRT.CompFirstSet(gp2, s1); GenCond(s1) + END; + PutS(" DO$"); + GenCode(gp2, indent + 2, s1); + Indent(indent); PutS("END;$") + + | CRT.opt: + CRT.CompFirstSet(gn.p1, s1); + IF ~ Sets.Equal(checked, s1) THEN + Indent(indent); PutS("IF"); GenCond(s1); PutS(" THEN$"); + GenCode(gn.p1, indent + 2, s1); + Indent(indent); PutS("END;$") + ELSE GenCode(gn.p1, indent, checked) + END + + END; (*CASE*) + IF ~ (gn.typ IN {CRT.eps, CRT.sem, CRT.sync}) THEN Sets.Clear(checked) END; + gp := gn.next + END +END GenCode; + +PROCEDURE GenCodePragmas; + VAR i, p: INTEGER; sn: CRT.SymbolNode; + + PROCEDURE P(s1, s2: ARRAY OF CHAR); + BEGIN + PutS(" "); PutS(scanner); PutS(s1); PutS(" := "); PutS(scanner); PutS(s2); PutS(";$") + END P; + +BEGIN + i := CRT.maxT + 1; + WHILE i <= CRT.maxP DO + CRT.GetSym(i, sn); + PutS(" IF sym = "); PutI(i); PutS(" THEN$"); CopySourcePart(sn.semPos, 9); PutS("$ END;$"); + INC(i) + END; + P(".nextPos", ".pos"); P(".nextCol", ".col"); P(".nextLine", ".line"); P(".nextLen", ".len") +END GenCodePragmas; + +PROCEDURE GenProcedureHeading (sn: CRT.SymbolNode; forward: BOOLEAN); +BEGIN + PutS("PROCEDURE "); + IF forward THEN Texts.Write(syn, "^") END; + PutS(sn.name); + IF sn.attrPos.beg >= 0 THEN + Texts.Write(syn, "("); CopySourcePart(sn.attrPos, 0); Texts.Write(syn, ")") + END; + PutS(";$") +END GenProcedureHeading; + +PROCEDURE GenForwardRefs; + VAR sp: INTEGER; sn: CRT.SymbolNode; +BEGIN + IF ~ CRT.ddt[5] THEN + sp := CRT.firstNt; + WHILE sp <= CRT.lastNt DO (* for all nonterminals *) + CRT.GetSym (sp, sn); GenProcedureHeading(sn, TRUE); + INC(sp) + END; + Texts.WriteLn(syn) + END +END GenForwardRefs; + +PROCEDURE GenProductions; + VAR sn: CRT.SymbolNode; checked: CRT.Set; +BEGIN + curSy := CRT.firstNt; + WHILE curSy <= CRT.lastNt DO (* for all nonterminals *) + CRT.GetSym (curSy, sn); GenProcedureHeading (sn, FALSE); + IF sn.semPos.beg >= 0 THEN CopySourcePart(sn.semPos, 2); PutS(" $") END; + PutS("BEGIN$"); Sets.Clear(checked); + GenCode (sn.struct, 2, checked); + PutS("END "); PutS(sn.name); PutS(";$$"); + INC (curSy); + END; +END GenProductions; + +PROCEDURE InitSets; + VAR i, j: INTEGER; +BEGIN + i := 0; CRT.GetSet(0, symSet[0]); + WHILE i <= maxSS DO + j := 0; + WHILE j <= CRT.maxT DIV Sets.size DO + PutS(" symSet["); PutI(i); PutS(", ");PutI(j); + PutS("] := {"); PutSet(symSet[i, j]); PutS("};$"); + INC(j) + END; + INC(i) + END +END InitSets; + +PROCEDURE *Show(t: Texts.Text; op: INTEGER; beg, end: LONGINT); +BEGIN END Show; + +PROCEDURE GenCompiler*; + VAR errNr, i: INTEGER; checked: CRT.Set; + gn: CRT.GraphNode; sn: CRT.SymbolNode; + parser: ARRAY 32 OF CHAR; + t: Texts.Text; pos: LONGINT; + ch1, ch2: CHAR; +BEGIN + CRT.GetNode(CRT.root, gn); CRT.GetSym(gn.p1, sn); + COPY(sn.name, parser); i := Length(parser); parser[i] := "P"; parser[i+1] := 0X; + COPY(parser, scanner); scanner[i] := "S"; + + NEW(t); Texts.Open(t, "Parser.FRM"); Texts.OpenReader(fram, t, 0); + IF t.len = 0 THEN + Texts.WriteString(w, "Parser.FRM not found"); Texts.WriteLn(w); + Texts.Append(Oberon.Log, w.buf); HALT(99) + END; + + Texts.OpenWriter(err); Texts.WriteLn(err); + i := 0; + WHILE i <= CRT.maxT DO GenErrorMsg(tErr, i, errNr); INC(i) END; + + (*----- write *P.Mod -----*) + Texts.OpenWriter(syn); + NEW(t); (*t.notify := Show;*) Texts.Open(t, ""); + CopyFramePart("-->modulename"); PutS(parser); + CopyFramePart("-->scanner"); PutS(scanner); + IF CRT.importPos.beg >= 0 THEN PutS(", "); CopySourcePart(CRT.importPos, 0) END; + CopyFramePart("-->constants"); + PutS("maxP = "); PutI(CRT.maxP); PutS(";$"); + PutS(" maxT = "); PutI(CRT.maxT); PutS(";$"); + PutS(" nrSets = ;$"); Texts.Append(t, syn.buf); pos := t.len - 2; + CopyFramePart("-->declarations"); CopySourcePart(CRT.semDeclPos, 0); + CopyFramePart("-->errors"); PutS(scanner); PutS(".Error(n, "); PutS(scanner); PutS(".nextPos)"); + CopyFramePart("-->scanProc"); + IF CRT.maxT = CRT.maxP THEN PutS(scanner); PutS(".Get(sym)") + ELSE + PutS("LOOP "); PutS(scanner); PutS(".Get(sym);$"); + PutS(" IF sym > maxT THEN$"); + GenCodePragmas; + PutS(" ELSE EXIT$"); + PutS(" END$"); + PutS("END$") + END; + CopyFramePart("-->productions"); GenForwardRefs; GenProductions; + CopyFramePart("-->parseRoot"); Sets.Clear(checked); GenCode (CRT.root, 2, checked); + CopyFramePart("-->initialization"); InitSets; + CopyFramePart("-->modulename"); PutS(parser); Texts.Write(syn, "."); + Texts.Append(t, syn.buf); Texts.Append(t, err.buf); + PutI(maxSS+1); (*if no set, maxSS = -1*) Texts.Insert(t, pos, syn.buf); + i := Length(parser); parser[i] := "."; parser[i+1] := "M"; parser[i+2] := "o"; parser[i+3] := "d"; parser[i+4] := 0X; + Texts.Close(t, parser) +END GenCompiler; + +PROCEDURE WriteStatistics*; +BEGIN + Texts.WriteInt (w, CRT.maxT + 1, 0); Texts.WriteString(w, " t, "); + Texts.WriteInt (w, CRT.maxSymbols - CRT.firstNt + CRT.maxT + 1, 0); Texts.WriteString(w, " syms, "); + Texts.WriteInt (w, CRT.nNodes, 0); Texts.WriteString(w, " nodes, "); + Texts.WriteInt (w, maxSS, 0); Texts.WriteString(w, "sets"); + Texts.WriteLn(w); Texts.Append(Oberon.Log, w.buf) +END WriteStatistics; + +PROCEDURE Init*; +BEGIN + errorNr := -1; maxSS := 0 (*symSet[0] reserved for all SYNC sets*) +END Init; + +BEGIN + Texts.OpenWriter(w) +END CRX. diff --git a/src/tools/coco/Coco.Mod b/src/tools/coco/Coco.Mod new file mode 100644 index 00000000..9c3b4138 --- /dev/null +++ b/src/tools/coco/Coco.Mod @@ -0,0 +1,180 @@ +(* Implementation restrictions + 3 too many nodes in graph (>1500) CRG.NewNode + 4 too many sets (ANY-symbols or SYNC symbols) CRT.NewAnySet, + CRT.ComputeSyncSet + 6 too many symbols (>300) CRT.NewSym + 7 too many character classes (>50) CRT.NewClass + 9 too many conditions in generated code (>100) CRX.NewCondSet + + Trace output (ddt settings: ${digit}) + 0 Prints states of automaton + 1 Prints start symbols and followers of nonterminals (also option /s) + 2 Prints the internal graph + 3 Trace of start symbol set computation + 4 Trace of follow set computation + 5 suppresses FORWARD declarations in parser (for multipass compilers) + 6 Prints the symbol list + 7 Prints a cross reference list (also option /x) + 8 Write statistics +==========================================================================*) +MODULE Coco; + +IMPORT Oberon, (*TextFrames,*) Texts := CmdlnTexts,(* Viewers,*) CRS, CRP, CRT; + +CONST minErrDist = 8; + +VAR w: Texts.Writer; lastErrPos: LONGINT; + + +PROCEDURE Error (n: INTEGER; pos: LONGINT); + + PROCEDURE Msg (s: ARRAY OF CHAR); + BEGIN Texts.WriteString(w, s) + END Msg; + +BEGIN + INC(CRS.errors); + IF pos < lastErrPos + minErrDist THEN lastErrPos := pos; RETURN END; + lastErrPos := pos; + Texts.WriteInt(w, pos, 3); Texts.WriteString(w, ": "); + IF n < 200 THEN + CASE n OF + | 0: Msg("EOF expected") + | 1: Msg("ident expected") + | 2: Msg("string expected") + | 3: Msg("number expected") + | 4: Msg("'COMPILER' expected") + | 5: Msg("'IMPORT' expected") + | 6: Msg("';' expected") + | 7: Msg("'PRODUCTIONS' expected") + | 8: Msg("'=' expected") + | 9: Msg("'.' expected") + | 10: Msg("'END' expected") + | 11: Msg("'CHARACTERS' expected") + | 12: Msg("'TOKENS' expected") + | 13: Msg("'PRAGMAS' expected") + | 14: Msg("'COMMENTS' expected") + | 15: Msg("'FROM' expected") + | 16: Msg("'TO' expected") + | 17: Msg("'NESTED' expected") + | 18: Msg("'IGNORE' expected") + | 19: Msg("'CASE' expected") + | 20: Msg("'+' expected") + | 21: Msg("'-' expected") + | 22: Msg("'CHR' expected") + | 23: Msg("'(' expected") + | 24: Msg("')' expected") + | 25: Msg("'ANY' expected") + | 26: Msg("'|' expected") + | 27: Msg("'WEAK' expected") + | 28: Msg("'[' expected") + | 29: Msg("']' expected") + | 30: Msg("'{' expected") + | 31: Msg("'}' expected") + | 32: Msg("'SYNC' expected") + | 33: Msg("'CONTEXT' expected") + | 34: Msg("'<' expected") + | 35: Msg("'>' expected") + | 36: Msg("'(.' expected") + | 37: Msg("'.)' expected") + | 38: Msg("??? expected") + | 39: Msg("invalid TokenFactor") + | 40: Msg("invalid Factor") + | 41: Msg("invalid Factor") + | 42: Msg("invalid Term") + | 43: Msg("invalid Symbol") + | 44: Msg("invalid SimSet") + | 45: Msg("this symbol not expected in TokenDecl") + | 46: Msg("invalid TokenDecl") + | 47: Msg("invalid Declaration") + | 48: Msg("invalid Declaration") + | 49: Msg("invalid Declaration") + | 50: Msg("this symbol not expected in Coco") + | 51: Msg("invalid start of the program") + ELSE Texts.WriteString(w, "error "); Texts.WriteInt(w, n, 0) + END + ELSE + CASE n OF + | 201: Msg("unexpected end of file"); + | 202: Msg("string terminator not on this line"); + | 203: Msg("a literal must not have attributes"); + | 204: Msg("this symbol kind not allowed in production"); + | 205: Msg("symbol declared without attributes"); + | 206: Msg("symbol declared with attributes"); + | 207: Msg("name declared twice"); + | 208: Msg("this type not allowed on left side of production"); + | 209: Msg("symbol earlier referenced without attributes"); + | 210: Msg("symbol earlier referenced with attributes"); + | 211: Msg("missing production for grammar name"); + | 212: Msg("grammar symbol must not have attributes"); + | 213: Msg("a literal must not be declared with a structure") + | 214: Msg("semantic action not allowed here") + | 215: Msg("undefined name") + | 216: Msg("attributes not allowed in token declaration") + | 217: Msg("name does not match name in heading") + | 220: Msg("token may be empty") + | 221: Msg("token must not start with an iteration") + | 222: Msg("only characters allowed in comment declaration") + | 223: Msg("only terminals may be weak") + | 224: + | 225: Msg("comment delimiter must not exceed 2 characters") + | 226: Msg("character set contains more than one character") + ELSE Texts.WriteString(w, "error "); Texts.WriteInt(w, n, 0) + END + END; +Texts.WriteLn(w); Texts.Append(Oberon.Log, w.buf) +END Error; + +PROCEDURE Options(VAR s: Texts.Scanner); + VAR i: INTEGER; +BEGIN + IF s.nextCh = "/" THEN Texts.Scan(s); Texts.Scan(s); + IF s.class = Texts.Name THEN i := 0; + WHILE s.s[i] # 0X DO + IF CAP(s.s[i]) = "X" THEN CRT.ddt[7] := TRUE + ELSIF CAP(s.s[i]) = "S" THEN CRT.ddt[1] := TRUE + END; + INC(i) + END + END + END; +END Options; + + +PROCEDURE Compile*; + VAR (*v: Viewers.Viewer;*)(* f: TextFrames.Frame; *) s: Texts.Scanner; src, t: Texts.Text; + pos, beg, end, time: LONGINT; i: INTEGER; +BEGIN + (* Texts.OpenScanner(s, Oberon.Par.text, Oberon.Par.pos); Texts.Scan(s); + f := Oberon.Par.frame(TextFrames.Frame); + src := NIL; pos := 0; + IF (s.class = Texts.Char) & (s.c = "^") THEN + Oberon.GetSelection(t, beg, end, time); + IF time >= 0 THEN Texts.OpenScanner(s, t, beg); Texts.Scan(s) END + END;*) + IF s.class = Texts.Name THEN + NEW(src); Texts.Open(src, s.s); + (*ELSIF (s.class = Texts.Char) & (s.c = "*") THEN + v := Oberon.MarkedViewer(); + IF (v # NIL) & (v.dsc.next IS TextFrames.Frame) THEN + src := v.dsc.next(TextFrames.Frame).text; + Texts.OpenScanner(s, v.dsc(TextFrames.Frame).text, 0); Texts.Scan(s) + END + ELSIF (s.class = Texts.Char) & (s.c = "@") THEN + Oberon.GetSelection(t, beg, end, time); + IF time >= 0 THEN src := t; pos := beg; s.s := " " END*) + END; + IF src # NIL THEN + Texts.WriteString (w, "Coco/R - Compiler-Compiler V2.2"); Texts.Append(Oberon.Log, w.buf); + i := 0; WHILE i < 10 DO CRT.ddt[i] := FALSE; INC(i) END; + Options(s); + Texts.WriteLn(w); Texts.WriteString(w, s.s); Texts.Append(Oberon.Log, w.buf); + CRS.Reset(src, pos, Error); lastErrPos := -10; + CRP.Parse + END +END Compile; + +BEGIN + Texts.OpenWriter(w); + Compile; +END Coco. diff --git a/src/tools/coco/Coco.Report.ps.1 b/src/tools/coco/Coco.Report.ps.1 new file mode 100644 index 00000000..bd8ddb7e --- /dev/null +++ b/src/tools/coco/Coco.Report.ps.1 @@ -0,0 +1,5 @@ +%!PS-Adobe-2.0 %%Title: Report %%Creator: WriteNow 3.0 %%CreationDate: Donnerstag, 4. Februar 1993 %%Pages: (atend) %%BoundingBox: ? ? ? ? %%PageBoundingBox: 28 30 566 811 %%For: %%DocumentProcSets: "(AppleDict md)" 71 0 %% © Copyright Apple Computer, Inc. 1989-91 All Rights Reserved. %%EndComments %%BeginProcSet: "(AppleDict md)" 71 0 userdict/LW{save statusdict/product get(LaserWriter)anchorsearch exch pop{dup length 0 eq{pop 1}{( Plus)eq{2}{3}ifelse}ifelse}{0}ifelse exch restore}bind put userdict/downloadOK known not{userdict/downloadOK{systemdict dup/eexec known exch/cexec known and LW dup 1 ne exch 2 ne and and vmstatus exch sub exch pop 120000 gt and}bind put}if userdict/type42known known not{userdict/type42known systemdict/resourcestatus known{42/FontType resourcestatus{pop pop true}{false}ifelse }{false}ifelse put}if type42known not downloadOK and {userdict begin /*charpath /charpath load def/charpathflag false def/charpath{userdict/charpathflag true put userdict/*charpath get exec userdict/charpathflag false put}bind def end}if userdict/checkload known not{userdict/checkload{{pop exec} {save 3 dict begin/mystring 6050 string def exch/endstring exch def{currentfile mystring readline not{stop}if endstring eq{exit}if}loop end restore pop}ifelse}bind put}if userdict/LW+{LW 2 eq}bind put userdict/ok known not{userdict/ok{systemdict/statusdict known dup{LW 0 gt and}if}bind put}if systemdict/currentpacking known{currentpacking true setpacking}if /md 270 dict def md begin /av 71 def /T true def/F false def/mtx matrix def/s75 75 string def/sa8 8 string def/sb8 8 string def /sc8 8 string def/sd8 8 string def/s1 ( ) def/pxs 1 def/pys 1 def /ns false def 1 0 mtx defaultmatrix dtransform exch atan/pa exch def/nlw .24 def/ppr [-32 -29.52 762 582.48] def /pgr [0 0 0 0] def /pgs 1 def/por true def/xb 500 array def/so true def/tso true def/fillflag false def/pnm 1 def/fmv true def /sfl false def/ma 0 def/invertflag false def/dbinvertflag false def/xflip false def/yflip false def/noflips true def/scaleby96 false def/fNote true def/fBitStretch true def /4colors false def/fg (Rvd\001\001\000\000\177) def /bdf{bind def}bind def /xdf{exch def}bdf /xl{neg exch neg translate}bdf /fp{pnsh 0 ne pnsv 0 ne and}bdf /nop{}bdf/lnop[/nop load]cvx bdf /vrb[ {fp{fg 6 get 0 ne{gsave stroke grestore}{gsave 1 setlinewidth pnsh pnsv scale stroke grestore}ifelse}if newpath}bind /eofill load dup /newpath load 2 index dup {clip newpath}bind {}bind dup 2 copy ]def /sgd systemdict/setpagedevice known{{2 dict begin/PreRenderingEnhance exch def/Policies 1 dict dup/PreRenderingEnhance 1 put def currentdict end setpagedevice}}{{pop}}ifelse bdf /svsc systemdict/currentcolorscreen known{{currentcolorscreen/dkspf xdf/dkrot xdf/dkfreq xdf/dyspf xdf/dyrot xdf/dyfreq xdf/dmspf xdf/dmrot xdf/dmfreq xdf /dcspf xdf/dcrot xdf/dcfreq xdf}}{{currentscreen/spf xdf/rot xdf/freq xdf}}ifelse bdf /doop{vrb exch get exec}bdf /psu{/udf xdf/tso xdf /fNote xdf/fBitStretch xdf/scaleby96 xdf/yflip xdf/xflip xdf /invertflag xdf/dbinvertflag invertflag statusdict begin version cvr 47.0 ge product (LaserWriter) eq not and end invertflag and {not}if def xflip yflip or{/noflips false def}if /pgs xdf 2 index .72 mul exch div/pys xdf div .72 mul/pxs xdf ppr astore pop pgr astore pop/por xdf sn and/so xdf}bdf /tab{userdict /11x17 known{userdict begin /11x17 load exec end}{statusdict /setpage known{statusdict begin 792 1224 1 setpage end}{statusdict /setpageparams known{statusdict begin 792 1224 0 1 setpageparams end}if}ifelse}ifelse}bdf /a3Size{userdict /a3 known{userdict begin /a3 load exec end}{statusdict /setpageparams known{statusdict begin 842 1191 0 1 setpageparams end}if}ifelse}bdf /txpose{fNote{smalls}{bigs}ifelse pgs get exec pxs pys scale ppr aload pop por{noflips{pop exch neg exch translate pop 1 -1 scale}if xflip yflip and{pop exch neg exch translate 180 rotate 1 -1 scale ppr 3 get ppr 1 get neg sub neg ppr 2 get ppr 0 get neg sub neg translate}if xflip yflip not and{pop exch neg exch translate pop 180 rotate ppr 3 get ppr 1 get neg sub neg 0 translate}if yflip xflip not and{ppr 1 get neg ppr 0 get neg translate}if} {noflips{translate pop pop 270 rotate 1 -1 scale}if xflip yflip and{translate pop pop 90 rotate 1 -1 scale ppr 3 get ppr 1 get neg sub neg ppr 2 get ppr 0 get neg sub neg translate}if xflip yflip not and{translate pop pop 90 rotate ppr 3 get ppr 1 get neg sub neg 0 translate}if yflip xflip not and{translate pop pop 270 rotate ppr 2 get ppr 0 get neg sub neg 0 exch translate}if}ifelse statusdict begin/waittimeout where{pop waittimeout 300 lt{statusdict/waittimeout 300 put}if}if end scaleby96{ppr aload pop 4 -1 roll add 2 div 3 1 roll add 2 div 2 copy translate .96 dup scale neg exch neg exch translate}if}bdf /fr{4 copy pgr aload pop 3 -1 roll add 3 1 roll exch add 6 2 roll 3 -1 roll sub 3 1 roll exch sub 3 -1 roll exch div 3 1 roll div exch scale pop pop xl}bdf /obl{{0.212557 mul}{pop 0}ifelse}bdf /sfd{ps fg 5 -1 roll get mul 100 div 0 ps 5 -1 roll obl ps neg 0 0 6a astore makefont setfont}bdf /fnt{findfont sfd}bdf /bt{sa 3 1 roll 3 index and put}bdf /sa(\000\000\000\000\000\000\000\000\000\000)def /fs{0 1 bt 1 2 bt 2 4 bt 3 8 bt 4 16 bt 5 32 bt 6 64 bt 7 128 bt sa exch 8 exch put}bdf /mx1 matrix def /mx2 matrix def /mx3 matrix def /bu{currentpoint 4colors{currentcmykcolor}{currentrgbcolor}ifelse currentlinewidth currentlinecap currentlinejoin currentdash exch aload length fg 5 sfl{1}{0}ifelse put pnsv pnsh 2t aload pop 3a aload pop mx2 aload pop mx1 aload pop mtx currentmatrix aload pop mx3 aload pop ps pm restore/ps xdf mx3 astore pop}bdf /bn{/pm save def mx3 setmatrix newpath 0 0 moveto ct dup 39 get 0 exch getinterval cvx exec mtx astore setmatrix mx1 astore pop mx2 astore pop 3a astore pop 2t astore pop/pnsh xdf/pnsv xdf gw /sfl fg 5 get 0 ne def array astore exch setdash setlinejoin setlinecap setlinewidth 4colors{mysetcmykcolor}{setrgbcolor}ifelse moveto}bdf /fc{save vmstatus exch sub 50000 lt {(%%[|0|]%%)=print flush}if pop restore}bdf /tc{32768 div add 3 1 roll 32768 div add 2t astore pop}bdf /3a [0 0 0] def /2t 2 array def /tp{3a astore pop}bdf /tt{mx2 currentmatrix pop currentpoint 2 copy 2t aload pop qa 2 copy translate 3a aload pop exch dup 0 eq {pop}{1 eq{-1 1}{1 -1}ifelse scale}ifelse rotate pop neg exch neg exch translate moveto}bdf /te{mx2 setmatrix}bdf /th{3 -1 roll div 3 1 roll exch div 2 copy mx1 scale pop scale/sfl true def}bdf /tu{1 1 mx1 itransform scale/sfl false def}bdf /ts{1 1 mx1 transform scale/sfl true def}bdf /fz{/ps xdf}bdf /dv{dup 0 ne{div}{pop}ifelse}bdf /pop4{pop pop pop pop}bdf /it{sfl{mx1 itransform}if}bdf /gm{exch it moveto}bdf/rm{it rmoveto}bdf /lm{currentpoint sfl{mx1 transform}if exch pop sub 0 exch it rmoveto}bdf /fm{statusdict/manualfeed known}bdf /se{statusdict exch/manualfeed exch put}bdf /mf{dup/ma exch def 0 gt{fm se/t1 5 st ok ma 1 gt and{/t2 0 st/t3 0 st statusdict/manualfeedtimeout 3600 put }if}if}bdf /jn{/statusdict where exch pop{statusdict exch /jobname exch put}if}bdf /pen{pnm mul/pnsh xdf pnm mul/pnsv xdf pnsh setlinewidth}bdf /min{2 copy gt{exch}if pop}bdf /max{2 copy lt{exch}if pop}bdf /dh{fg 6 1 put array astore dup {1 pxs div mul exch}forall astore exch pop exch pop exch setdash}bdf /ih[currentdash]def /rh{fg 6 0 put ih aload pop setdash}bdf /dl{gsave nlw pys div setlinewidth 0 setgray}bdf /dlin{exch currentpoint currentlinewidth 2 div dup translate newpath moveto lineto currentpoint stroke grestore moveto}bdf /lin{fg 6 get 0 ne{exch lineto currentpoint 0 doop moveto} {exch currentpoint/pnlv xdf/pnlh xdf gsave newpath/@1 xdf/@2 xdf fp{pnlh @2 lt{pnlv @1 ge {pnlh pnlv moveto @2 @1 lineto pnsh 0 rlineto 0 pnsv rlineto pnlh pnsh add pnlv pnsv add lineto pnsh neg 0 rlineto} {pnlh pnlv moveto pnsh 0 rlineto @2 pnsh add @1 lineto 0 pnsv rlineto pnsh neg 0 rlineto pnlh pnlv pnsv add lineto}ifelse}{pnlv @1 gt {@2 @1 moveto pnsh 0 rlineto pnlh pnsh add pnlv lineto 0 pnsv rlineto pnsh neg 0 rlineto @2 @1 pnsv add lineto}{pnlh pnlv moveto pnsh 0 rlineto 0 pnsv rlineto @2 pnsh add @1 pnsv add lineto pnsh neg 0 rlineto 0 pnsv neg rlineto}ifelse}ifelse closepath fill}if @2 @1 grestore moveto}ifelse}bdf /gw{/pnm fg 3 get fg 4 get div def}bdf /lw{fg exch 4 exch put fg exch 3 exch put gw pnsv pnsh pen}bdf /barc{/@1 xdf/@2 xdf/@3 xdf/@4 xdf/@5 xdf /@6 xdf/@7 xdf/@8 xdf gsave @5 @7 add 2 div @6 @8 add 2 div translate newpath 0 0 moveto @5 @7 sub @6 @8 sub mtx currentmatrix pop scale @1{newpath}if 0 0 0.5 @4 @3 arc @4 @3 sub abs 360 ge{closepath}if mtx setmatrix @2 doop grestore}bdf /ar{dup 0 eq barc}bdf /ov{0 exch 360 exch true barc}bdf /rc{dup/@t xdf 0 eq{4 copy 3 -1 roll eq 3 1 roll eq and{pnsv 2 div sub exch pnsh 2 div sub exch 4 2 roll pnsv 2 div add exch pnsh 2 div add exch /@t 1 def}if}if currentpoint 6 2 roll newpath 4 copy 4 2 roll exch moveto 6 -1 roll lineto lineto lineto closepath @t doop moveto}bdf /mup{dup pnsh 2 div le exch pnsv 2 div le or}bdf /rr{/@1 xdf 2. div/@2 xdf 2. div/@3 xdf /@4 xdf/@5 xdf/@6 xdf/@7 xdf @7 @5 eq @6 @4 eq @2 mup or or{@7 @6 @5 @4 @1 rc} {@4 @6 sub 2. div dup @2 lt{/@2 xdf}{pop}ifelse @5 @7 sub 2. div dup @2 lt{/@2 xdf}{pop}ifelse @1 0 eq{/@2 @2 pnsh 2 div 2 copy gt{sub def}{0 pop4}ifelse}if currentpoint newpath @4 @6 add 2. div @7 moveto @4 @7 @4 @5 @2 arcto pop4 @4 @5 @6 @5 @2 arcto pop4 @6 @5 @6 @7 @2 arcto pop4 @6 @7 @4 @7 @2 arcto pop4 closepath @1 doop moveto}ifelse}bdf /pr{gsave newpath/pl{exch moveto/pl{exch lineto}def}def}bdf /pl{exch lineto}bdf /ep{dup 0 eq{{moveto}{exch lin}{}{(%%[|1|]%%)= flush}pathforall pop grestore}{doop grestore}ifelse currentpoint newpath moveto}bdf /gr{64. div setgray}bdf /savescreen{ns not{/ns true def systemdict/currentcolorscreen known{currentcolorscreen/pkspf xdf/pkrot xdf/pkfreq xdf/pyspf xdf/pyrot xdf/pyfreq xdf/pmspf xdf/pmrot xdf/pmfreq xdf /pcspf xdf/pcrot xdf/pcfreq xdf}{currentscreen/sspf xdf/srot xdf/sfreq xdf}ifelse}if}bdf /restorescreen{/ns false def systemdict/setcolorscreen known{pcfreq pcrot/pcspf load pmfreq pmrot/pmspf load pyfreq pyrot/pyspf load pkfreq pkrot/pkspf load setcolorscreen}{sfreq srot/sspf load setscreen}ifelse}bdf /pat{savescreen sa8 copy pop 9.375 pa por not{90 add}if{1 add 4 mul cvi sa8 exch get exch 1 add 4 mul cvi 7 sub bitshift 1 and}setscreen exch not{gr}{pop}ifelse}bdf /sg{restorescreen gr}bdf /cpat{savescreen 10 2 roll 7 -1 roll sa8 copy pop 9.375 pa por not{90 add}if{1 add 4 mul cvi sa8 exch get exch 1 add 4 mul cvi 7 sub bitshift 1 and}8 -1 roll sb8 copy pop 9.375 pa por not{90 add}if{1 add 4 mul cvi sb8 exch get exch 1 add 4 mul cvi 7 sub bitshift 1 and}9 -1 roll sc8 copy pop 9.375 pa por not{90 add}if{1 add 4 mul cvi sc8 exch get exch 1 add 4 mul cvi 7 sub bitshift 1 and}10 -1 roll sd8 copy pop 9.375 pa por not{90 add}if{1 add 4 mul cvi sd8 exch get exch 1 add 4 mul cvi 7 sub bitshift 1 and}psuedo1 dsc 4{4 -1 roll 1 exch 64 div sub}repeat mysetcmykcolor pop pop}bdf systemdict/setcolorscreen known{/psuedo1 lnop bdf/dsc/setcolorscreen load def}{/psuedo1{16{pop}repeat sa8 copy pop 9.375 pa por not{90 add}if{1 add 4 mul cvi sa8 exch get exch 1 add 4 mul cvi 7 sub bitshift 1 and}}bdf /bwsc{setscreen dup gr 0 exch 0 exch 64 exch 64 exch 64 exch}bdf/dsc/bwsc load def }ifelse systemdict/setcmykcolor known{/mysetcmykcolor /setcmykcolor load def}{/mysetcmykcolor{1 sub 4 1 roll 3{3 index add neg dup 0 lt{pop 0}if 3 1 roll}repeat setrgbcolor pop}bdf}ifelse /dc{transform round .5 sub exch round .5 sub exch itransform}bdf /sn{userdict/smooth4 known}bdf /x8{3 bitshift}bdf /x4{2 bitshift}bdf /d4{-2 bitshift}bdf /d8{-3 bitshift}bdf /rb{15 add -4 bitshift 1 bitshift}bdf /db{/@7 save def/@1 xdf/@2 xdf/@3 xdf/@4 xdf/@5 xdf/@6 @5 @3 4 add mul def dc translate scale/xdbit 1 1 idtransform abs/ydbit exch def abs def{0 0 1 ydbit add 1 10 rc clip}if @1 0 eq @1 4 eq or{currentrgbcolor 1 setgray ydbit 0 1 ydbit add 1 2 rc setrgbcolor}if @1 3 eq @1 7 eq or{1 setgray}{currentrgbcolor 2 index eq exch 2 index eq and exch pop{0 setgray}if}ifelse/@9 @1 0 eq @1 1 eq @1 3 eq or or dbinvertflag xor def/@13 @6 def @2 fBitStretch or{/@10 @4 x4 def/@11 @3 x4 def/@12 @10 rb def/@13 @12 @11 mul def/@15 1 1 dtransform abs/calcY 1 index def round cvi/@14 exch def abs/calcX 1 index def round cvi scaleby96 not{1 add}if def/@16 @15 rb def/@17 @16 @14 mul def}if sn @13 60000 lt and @2 fBitStretch or and{mtx currentmatrix dup 1 get exch 2 get 0. eq exch 0. eq and @17 60000 lt and fBitStretch and{@16 3 bitshift @14 @9 [calcX 0 0 calcY 0 0]{@17 string @13 string currentfile @6 string readhexstring pop 1 index @4 @3 @5 @12 @2 smooth4 @10 @11 @12 dup string 5 index @15 @14 @16 dup string stretch}imagemask}{@12 x8 @11 @9 [@10 0 0 @11 0 0]{@13 string currentfile @6 string readhexstring pop 1 index @4 @3 @5 @12 @2 smooth4}imagemask}ifelse}{@5 3 bitshift @3 4 add @9 [@4 0 0 @3 0 2]{currentfile @6 string readhexstring pop}imagemask}ifelse @7 restore}bdf systemdict/setcmykcolor known{/psuedo lnop bdf/di/colorimage load def}{/routines[{.3 mul add 1}bind{.59 mul add 2}bind{.11 mul add round cvi str exch i exch put/i i 1 add def 0 0}bind]def /psuedo{/i 0 def 0 exch 0 exch{exch routines exch get exec}forall pop pop str}bdf/bwi{pop pop image}bdf/di/bwi load def}ifelse /cdb{/@7 save def/@1 xdf/@2 xdf/@3 xdf/@4 xdf/@5 xdf systemdict/setcmykcolor known not{dc}if translate scale /@6 xdf /@18 @5 dup 60000 ge{pop 60000}if string def @6 not{/str @18 0 @18 length 3 idiv getinterval def}if @4 @3 8 [@4 0 0 @3 0 0]@6{{currentfile @18 readhexstring pop}image}{{currentfile @18 readhexstring pop psuedo}false 3 di}ifelse @7 restore}bdf /wd 16 dict def /mfont 14 dict def /mdf{mfont wcheck not{/mfont 14 dict def}if mfont begin xdf end}bdf /cf{{1 index/FID ne{def}{pop pop}ifelse}forall}bdf/rf{/@1 exch def/@2 exch def FontDirectory @2 known{cleartomark pop}{findfont dup begin dup length @1 add dict begin cf{/Encoding macvec def}{Encoding dup length array copy/Encoding exch def counttomark 2 idiv{Encoding 3 1 roll put}repeat}ifelse pop exec currentdict end end @2 exch definefont pop}ifelse}bdf /bmbc{exch begin wd begin /cr xdf save CharTable cr 6 mul 6 getinterval{}forall /bitheight xdf/bitwidth xdf .96 div/width xdf Gkernmax add/XOffset xdf Gdescent add/YOffset xdf/rowbytes xdf rowbytes 255 eq{0 0 0 0 0 0 setcachedevice} {Gnormsize dup scale width 0 XOffset YOffset bitwidth XOffset add bitheight YOffset add setcachedevice rowbytes 0 ne{ XOffset YOffset translate newpath 0 0 moveto bitwidth bitheight scale sn{ /xSmt bitwidth x4 def /ySmt bitheight x4 def /rSmt xSmt rb def rSmt x8 ySmt true [xSmt 0 0 ySmt neg 0 ySmt] {rSmt ySmt mul string CharData cr get 1 index bitwidth bitheight rowbytes rSmt tso smooth4} }{rowbytes 3 bitshift bitheight 4 add true [bitwidth 0 0 bitheight neg 0 bitheight 2 add] {CharData cr get} }ifelse imagemask }if }ifelse restore end end }bdf /bb{.96 exch div/Gnormsize mdf 2 index /Gkernmax mdf 1 index/Gdescent mdf 3 index div 4 1 roll 2 index div 1. 5 2 roll exch div 4 1 roll 4 array astore/FontBBox mdf }bdf /cdf{mfont/CharData get 3 1 roll put}bdf /bf{ mfont begin /FontType 3 def /FontMatrix [1 0 0 1 0 0] def /Encoding macvec def /MFontType 0 def /BuildChar/bmbc load def end mfont definefont pop }bdf /wi LW 1 eq{{gsave 0 0 0 0 0 0 0 0 moveto lineto lineto lineto closepath clip stringwidth grestore}bind}{/stringwidth load}ifelse def /aps{0 get 124 eq}bdf /xc{s75 cvs dup}bdf /xp{put cvn}bdf /scs{xc 3 67 put dup 0 95 xp}bdf /sos{xc 3 79 xp}bdf /sbs{xc 1 66 xp}bdf /sis{xc 2 73 xp}bdf /sob{xc 2 79 xp}bdf /sss{xc 4 83 xp}bdf /dd{exch 1 index add 3 1 roll add exch}bdf /smc{moveto dup show}bdf /ndf2{udf{dup /FontType get 0 eq{/FDepVector get{dup /FontType get 0 eq{ndf2}{dup /df2 known{begin df2 0 null put end }{pop}ifelse}ifelse}forall}{/df2 known{dup begin df2 0 null put end}if}ifelse}{pop}ifelse}bdf /kwn{FontDirectory 1 index known{findfont dup ndf2 exch pop}}bdf /gl{1 currentgray sub setgray}bdf /newmm{dup /FontType get 0 eq{dup maxlength dict begin{1 index/FID ne 2 index/UniqueID ne and{def}{pop pop}ifelse}forall currentdict end dup /FDepVector 2 copy get[exch 6 index exch 6 index exch{newmm 3 1 roll}forall pop pop] put dup }{/mfont 10 dict def mfont begin/FontMatrix [1 0 0 1 0 0] def /FontType 3 def/Encoding macvec def/df 1 index def/df2 1 array def/FontBBox [0 0 1 1] def/StyleCode 2 index def /mbc{bcarray StyleCode get}def/BuildChar{exch begin wd begin/cr exch def/cs s1 dup 0 cr put def df /MFontType known not{ df2 0 get null eq{df dup length 2 add dict begin{1 index/FID ne 2 index/UniqueID ne and{def}{pop pop}ifelse}forall /StrokeWidth 1 0 FontMatrix idtransform pop dup nlw mul pys div ps div exch 0.012 mul 2 copy le{exch}if pop def/PaintType 2 def currentdict end /q exch definefont df2 exch 0 exch put}if}if mbc exec end end}def end mfont}ifelse 3 index exch definefont exch pop}bdf /mb{dup sbs kwn{0 2 index findfont newmm exch pop exch pop exch pop}ifelse sfd}bdf /mo{dup sos kwn{2 2 index findfont newmm exch pop exch pop exch pop}ifelse sfd}bdf /ms{dup sss kwn{4 2 index findfont newmm exch pop exch pop exch pop}ifelse sfd}bdf /ou{dup sos kwn{mfont/df2 known{mfont begin df2 0 null put end}if 3 2 index findfont newmm exch pop exch pop exch pop}ifelse sfd}bdf /su{dup sss kwn{mfont/df2 known{mfont begin df2 0 null put end}if 5 2 index findfont newmm exch pop exch pop exch pop}ifelse sfd}bdf /ao{/fmv true def ou}bdf/as{/fmv true def su}bdf /vo{/fmv false def ou}bdf/vs{/fmv false def su}bdf /c{currentrgbcolor dup 4 1 roll eq 3 1 roll eq and/gray xdf}bdf /bcarray[{/da .03 def df setfont gsave cs wi 1 index 0 ne{exch da add exch}if grestore setcharwidth cs 0 0 smc da 0 smc da da smc 0 da moveto show}bind dup{/da 1 ps div def df setfont gsave cs wi 1 index 0 ne{exch da add exch}if grestore setcharwidth cs 0 0 smc da 0 smc da da smc 0 da smc c gray{gl}{1 setgray}ifelse da 2. div dup moveto show}bind {df setfont gsave cs wi grestore setcharwidth c gray{gl}{currentrgbcolor 1 setgray}ifelse cs 0 0 smc df2 0 get setfont gray{gl}{4 1 roll setrgbcolor}ifelse 0 0 moveto show}bind {/da 1 ps div def/ds .05 def/da2 da 2. div def df setfont gsave cs wi 1 index 0 ne{exch ds add da2 add exch}if grestore setcharwidth cs ds da2 add .01 add 0 smc 0 ds da2 sub translate 0 0 smc da 0 smc da da smc 0 da smc c gray{gl}{1 setgray}ifelse da 2. div dup moveto show}bind {/da .05 def df setfont gsave cs wi 1 index 0 ne{exch da add exch}if grestore setcharwidth c cs da .01 add 0 smc 0 da translate gray{gl}{currentrgbcolor 1 setgray 4 -1 roll}ifelse 0 0 smc gray{gl}{4 1 roll setrgbcolor}ifelse df2 0 get setfont 0 0 moveto show}bind]def /st{1000 mul usertime add dup 2147483647 gt{2147483647 sub}if def}bdf /the{usertime sub dup 0 lt exch -2147483648 gt and}bdf /6a 6 array def /2a 2 array def /3q 3 array def /qs{3 -1 roll sub exch 3 -1 roll sub exch}bdf /qa{3 -1 roll add exch 3 -1 roll add exch}bdf /qm{3 -1 roll 1 index mul 3 1 roll mul}bdf /qn{6a exch get mul}bdf /qA .166667 def/qB .833333 def/qC .5 def /qx{6a astore pop qA 0 qn qB 2 qn add qA 1 qn qB 3 qn add qB 2 qn qA 4 qn add qB 3 qn qA 5 qn add qC 2 qn qC 4 qn add qC 3 qn qC 5 qn add}bdf /qp{6 copy 12 -2 roll pop pop}bdf /qc{exch qp qx curveto}bdf /qi{{exch 4 copy 2a astore aload pop qa .5 qm newpath moveto}{exch 2 copy 6 -2 roll 2 qm qs 4 2 roll}ifelse}bdf /qq{{qc 2a aload pop qx curveto}{exch 4 copy qs qa qx curveto}ifelse}bdf /pt{currentpoint newpath moveto}bdf /qf{/fillflag true def}bdf /ec{dup 4 and 0 ne{closepath}if 1 and 0 ne{0 doop}if grestore currentpoint newpath moveto/fillflag false def}bdf /eu{currentpoint fp{0 ep}{grestore newpath}ifelse moveto/fillflag false def}bdf /bp{currentpoint newpath 2 copy moveto}bdf /ef{gsave fillflag{gsave eofill grestore}if}bdf /sm{0 exch{@1 eq{1 add}if}forall}bdf /lshow{4 1 roll exch/@1 exch def{1 index wi pop sub 1 index sm dv 0 @1 4 -1 roll widthshow}{1 index wi pop sub 1 index dup sm 10 mul exch length 1 sub add dv dup 10. mul 0 @1 4 -1 roll 0 6 -1 roll awidthshow}ifelse}bdf /setTxMode{sa 9 2 index put exch not{3 eq{1}{0}ifelse setgray}{pop}ifelse}bdf /SwToSym{{}mark false/Symbol/|______Symbol 0 rf 0 sa 6 get 0 ne{pop 1}{sa 7 get 0 eq{pop 2}if}ifelse sa 1 get 0 ne/|______Symbol sa 4 get 0 ne{vs}{sa 3 get 0 ne{vo}{fnt}ifelse}ifelse}bdf /mc{0 3 1 roll transform neg exch pop}bdf /ul{dup 0 ne sa 2 get 0 ne and{gsave 0 0 /UnderlinePosition kif{mc}{ps -10 div}ifelse/UnderlineThickness kif{mc}{ps 15 div}ifelse abs setlinewidth neg rmoveto sa 4 get 0 ne{gsave currentlinewidth 2. div dup rmoveto currentpoint newpath moveto 2 copy rlineto stroke grestore}if sa 3 get sa 4 get or 0 ne{gsave currentrgbcolor dup 4 1 roll eq 3 1 roll eq and{gl}{1 setgray}ifelse 2 copy rlineto stroke grestore rlineto strokepath nlw pys div setlinewidth}{rlineto}ifelse stroke grestore}{pop}ifelse}bdf /sgt{2 copy known{get true}{pop pop false}ifelse}bdf /kif{currentfont dup/FontMatrix get exch/FontInfo sgt{true}{currentfont/df sgt {dup/FontInfo sgt{3 1 roll/FontMatrix get mtx concatmatrix exch true}{pop pop pop false} ifelse}{pop pop false}ifelse}ifelse{3 -1 roll sgt{exch true}{pop false}ifelse}{false}ifelse}bdf /blank/Times-Roman findfont/CharStrings get/space get def /macvec 256 array def /NUL/SOH/STX/ETX/EOT/ENQ/ACK/BEL/BS/HT/LF/VT/FF/CR/SO/SI /DLE/DC1/DC2/DC3/DC4/NAK/SYN/ETB/CAN/EM/SUB/ESC/FS/GS/RS/US macvec 0 32 getinterval astore pop macvec 32/Times-Roman findfont/Encoding get 32 96 getinterval putinterval macvec dup 39/quotesingle put 96/grave put /Adieresis/Aring/Ccedilla/Eacute/Ntilde/Odieresis/Udieresis/aacute /agrave/acircumflex/adieresis/atilde/aring/ccedilla/eacute/egrave /ecircumflex/edieresis/iacute/igrave/icircumflex/idieresis/ntilde/oacute /ograve/ocircumflex/odieresis/otilde/uacute/ugrave/ucircumflex/udieresis /dagger/degree/cent/sterling/section/bullet/paragraph/germandbls /registered/copyright/trademark/acute/dieresis/notequal/AE/Oslash /infinity/plusminus/lessequal/greaterequal/yen/mu/partialdiff/summation /product/pi/integral/ordfeminine/ordmasculine/Omega/ae/oslash /questiondown/exclamdown/logicalnot/radical/florin/approxequal/Delta/guillemotleft /guillemotright/ellipsis/blank/Agrave/Atilde/Otilde/OE/oe /endash/emdash/quotedblleft/quotedblright/quoteleft/quoteright/divide/lozenge /ydieresis/Ydieresis/fraction/currency/guilsinglleft/guilsinglright/fi/fl /daggerdbl/periodcentered/quotesinglbase/quotedblbase/perthousand/Acircumflex/Ecircumflex/Aacute /Edieresis/Egrave/Iacute/Icircumflex/Idieresis/Igrave/Oacute/Ocircumflex /apple/Ograve/Uacute/Ucircumflex/Ugrave/dotlessi/circumflex/tilde /macron/breve/dotaccent/ring/cedilla/hungarumlaut/ogonek/caron macvec 128 128 getinterval astore pop {}mark true/Courier/|______Courier 0 rf {/Metrics 21 dict begin/zero 600 def/one 600 def/two 600 def/three 600 def/four 600 def/five 600 def/six 600 def/seven 600 def/eight 600 def /nine 600 def/comma 600 def/period 600 def/dollar 600 def/numbersign 600 def/percent 600 def/plus 600 def/hyphen 600 def/E 600 def/parenleft 600 def/parenright 600 def/space 600 def currentdict end def currentdict/UniqueID known{/UniqueID 16#800000 def}if/FontBBox FontBBox 4 array astore def}mark true/Helvetica/|______Seattle 1 rf /oldsettransfer/settransfer load def /concatprocs{/proc2 exch cvlit def/proc1 exch cvlit def/newproc proc1 length proc2 length add array def newproc 0 proc1 putinterval newproc proc1 length proc2 putinterval newproc cvx}def /settransfer{currenttransfer concatprocs oldsettransfer}def /PaintBlack{{1 exch sub}settransfer gsave newpath clippath 1 setgray fill grestore}def /od{(Rvd\001\001\000\000\177) fg copy pop txpose 1 0 mtx defaultmatrix dtransform exch atan/pa exch def newpath clippath mark {transform{itransform moveto}}{transform{itransform lineto}} {6 -2 roll transform 6 -2 roll transform 6 -2 roll transform {itransform 6 2 roll itransform 6 2 roll itransform 6 2 roll curveto}} {{closepath}}pathforall newpath counttomark array astore/gc xdf pop ct 39 0 put 10 fz 0 fs 2 F/|______Courier fnt invertflag{PaintBlack}if statusdict/processcolors known{statusdict begin processcolors end 4 eq{/4colors true def}if}if}bdf /cd{}bdf /op{/sfl false def systemdict/currentcolorscreen known{dcfreq dcrot/dcspf load dmfreq dmrot/dmspf load dyfreq dyrot/dyspf load dkfreq dkrot/dkspf load setcolorscreen}{freq rot/spf load setscreen}ifelse savescreen /ns false def/pm save def}bdf /cp{not{userdict/#copies 0 put}if ma 0 gt{{t1 the{exit}if}loop}if{/copypage load exec}{/showpage load exec}ifelse pm restore}bdf /px{0 3 1 roll tp tt}bdf /psb{/us save def}bdf /pse{us restore}bdf /ct 40 string def /nc{currentpoint initclip newpath gc{dup type dup/arraytype eq exch/packedarraytype eq or{exec}if} forall clip newpath moveto}def /kp{ct 0 2 index length 2 index 39 2 index put getinterval copy cvx exec mx3 currentmatrix pop}bdf end LW 1 eq userdict/a4small known not and{/a4small [[300 72 div 0 0 -300 72 div -120 3381] 280 3255 {statusdict/jobstate (printing) put 0 setblink margins exch 196 add exch 304 add 8 div round cvi frametoroket statusdict/jobstate (busy) put 1 setblink} /framedevice load 60 45{dup mul exch dup mul add 1.0 exch sub}/setscreen load {}/settransfer load/initgraphics load/erasepage load]cvx statusdict begin bind end readonly def}if md begin/bigs[lnop userdict/letter known{/letter load}{lnop}ifelse userdict/legal known{/legal load}{lnop}ifelse userdict/a4 known{/a4 load}{lnop}ifelse userdict/b5 known{/b5 load}{lnop}ifelse lnop lnop lnop /tab load/a3Size load]def /smalls[lnop userdict/lettersmall known{/lettersmall load}{userdict/note known{/note load}{lnop}ifelse}ifelse userdict/legal known{/legal load}{lnop}ifelse userdict/a4small known{/a4small load}{lnop}ifelse userdict/b5 known{/b5 load}{userdict/note known{/note load}{lnop}ifelse}ifelse lnop lnop lnop /tab load/a3Size load]def end systemdict/currentpacking known{setpacking}if {currentfile eexec} ( %endeexec) ok userdict/stretch known not and checkload 373A767D4B7FD94FE5903B7014B1B8D3BED02632C855D56F458B118ACF3AF73FC4EF5E81F5749042B5F9CF1016D093B75F250B7D8280B2EACE05A37037F7BDF6E12226D7D4E2DF2C52FAFD5FD40FE72A0D3AC4BD485D8369D4C87636E920D1DAF222D92155A9CB1667E715F0B82799B37CC8F5B32B74B39CF494536DC39C7EF04A7BCB29E2CEC79073CADCCFB23B4AA1363F876F5121B618071B7B4EB1E5DE75FAA2368A3E5DB2B198623AFE92AE9484270FE7F57A850E88C0D3EEA156611C91D8E480D4370B025CCA6929A2BF40AD3D01B2CB7EE6DFB46E12A830542337F7819B67F9765210F76DB06F34DA5B13A11759305C582E16D2B854939F6D9121F2A4F285282F5DCD3D15896D121E3D6F5BE79E087451BB0ED233CDBEF090D3B4AC2DC34B97E70C61D95FB072B8C12D2ABD843520949A39DCF99E2C1AA8FBCD025E47E0A82A8D96E75BAF40F52AD402495BBD4DE0F356C8B14E764874E639C9F045A0D1908EC6456EB6C5B8A6F826192F767EF2C55A21C58F5F9CC1F59247B55F2387828C7FE89D5E7D8484D1BC86CB6673BDBE4FE17DD9BDE95224FE645136F41330BF155A4DDE1B0A32233BF471CE58FBC660DC7E641B0A0D30018454E2191C414A3011FF3FED1C0D88FE1FF9F75DCC456D097947226FBEC92509146D3A4CFFC0471B31C53222ED9DD88566F60F6C0D705AD79DACF53B070026F083ED28B5CF757AAA0A169F6F320A75E9D2ED50ABD939AF85B6346C2ADB25D168F10508E1516D194C635E6B187FADEA0829DBF0390C0F003F0265E215BC96CA3CC13D4A8E01570BE193CA75A620728CD275ACF1986EFFB3A13419FE55EA7C4467B7E7EEDC1FC29C9F8C46A557D2CCDB914EF7B93E7530D555DFC2398AFC68CAD991F062EF85BAA1884EC166C7C5DF8543666D8C41BE267D706BD1588F1F662F705CAE4D29DC38EF66BFAA89470D8A099B6F1B4587F7B024412276106FCD3EB5AE17A5D1DF1781992DC40EA0A992F706F701304CEA9D9073E7A74F1E687D81C3E5841D31CF86855BAAAD9B5D30317C75150A857C6B114735315CDD1AEF36C26BBB0645499406DEE2F24B3B1C72FEC97C7BA31AA2CDAB25418BB1DC4C7E4757F1D625087B0FD0300C03A65F2A72CE734925735277E034CDCF599129679F70CC8B66E03878851DB75041F275E1E5761F3EC753BE1359CA364A22047AE4886217F9259FE19FF5B116E8019B98B143114B313E8BEF87EC949D85C82E0812E6F50525E73890AF362CC8EE8A85F4197E6AC18638EF12E56A808D439AF1BFD363F140314BF4E534485C42F1856688CC35288E8D770120A420FB9F1FCF8AE8BD6D6156CC23E6C51119FE4DE1B68C9DF3487E9974BF9ED31F8D3CE93FF101867319F2FF492D5D398B4F09A66F2F55BCAB34B99173B7EE89039D00DD21A7B3A52E9F028F8301B5FC12D409412E064513BC579AAC498F577EA8ECD1FE3E42DC3CC320786C7B00194FEDF344402C33FC492D4BA86992B01683F440220FFE756BC88A94223D316078D69D33560E8EAB76B24CB7AA4320CF435593D76F624324ABE00B5587A4F283C725EA24567133F25F472B5E2E4474DDB5A16AC5F2DF32350395D3E3892FE361F4D5C9A610C654C9227614FBBAFF3356A90A2266E00F66234061075491571A65616211257F160000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark + %endeexec + {currentfile eexec} ( %endeexec) ok userdict/smooth4 known not and checkload F94E00EE41A71C59E5CAEED1EDBCF23D1DBA1EE99B9BB356492923BD8B1BA83A87CEB0E07377A31FD6241E814681118E17DC7CACE570399506E6E441B871B6043831BD03EFC11DBBD8001EE2FF8CFBD485065D455A2E15AC36F1A84AD8789FA6461199C7CD14CB9FD64D4B06452B7FC0A8FC263F70F1CCB893295D4DE70ADAB771C0F84396FA98C60B11DA02ABA157298DF0A23621853BEF167443A985ADC09BEFFD51CB4D29179E2B34609EF38A49DA61F4BFC256A3DE0732D7D29754A194857B9C9E9971227AA1DD0611FBB10E44E5FF66C062D9C24ED3290529330BC317825E876929582DB0E39B9FC5EFD20CC1D4F94920EB9C534D0DA90DE70D25BC7287319CF28602B3F46633C242CAFC8905E960317E3C2FA20AB8DB06ADBAF292FC7BA2CA14EE65DF28B99CC11666B70AD33E8E1D57D63D4B89ECC615AE5747C1CA752C833D8D6DE54CD4A0350B44310555CE3BD2C615ADD27B634CDB350AF3A432CE78AACD2909A5B586F666CD87919A36DB1CBE86B3CE281DFD01CD7E1B8A18A4B415CECBFF79A5C4390A15EA77D14D6BE12BAB5A8268C3F286D0590060647CABED674443CD258F11415E866AB330A251691B61F2422A61AFE59B6B4FBDCF85ED9BA0F8E483C034089E6877FF5923698D3A0DC0EED6B9CFD32DF0839BC4EA5F6D1FCB6DD0920391E57E84745131D02D100179F4E0A68EC0A5FF6680A6F463D038B04AF63FFA13D743B995A26A743C26D387209023C91DE43DF047A16F328AC9DDC08573B38BE9EA341EA16C78EC32F3A1B36B90D95A50610F4D050EC1C33497F3F3A81A1B4C8BEF0BA84EE2FAA32DC112DAC490AF53E1749C4A0D866CAF7B893E52383B0D38065C333FB122B700D7246F7EE87D942AE3DB5C1DD77E9E76C80CC5AD63D28DFED0E229CE604673F78CD47F258FDF5BF3A3EAEC5C9BC8E482D8DBA9D268A35DA8C095A690679ED2123E8B8F5E4826FA3B199EAA5D482D4B6AA86572E387CECEB7149C8947F41D6339328A748A17F8C4AD3B0555F1E409450BA0C564F1F488BB5096EB003568D4D5EF6489897E27409547D0EE4487D30184793B0F27BD265A64BDB3EA6761569DA955620C612E718677B77D6D81B999C6298877AFE0D1D6F6F358377A8BD2402F669C64B972B3A065EF7DD4BDEFFFE17E63DB8898FA6E69166B710AAD6BA2EA9AF61E4B8C8701638D4D6E4DFFFC192AEF6BC027095C4C72D748979675BA29FAF61E75343E14E61034602E5A79CD2519796ED6A9CC4EDEA46A9B59D4A807E786B5EE46F25B0360BC8E7C12D723122CDEEF247C9776F4C99C8EBED6828AA19744B5ADF0D07D95D98B3072372388D41B0FAB1CCE2775170679575ECDCA13B22A17FE9C6605C3445F58F1A829512DAB6C528F83580C8AA53C35D605F626F5AD0B7FC1EA87D69A835E3F53A1F450FB0AF42A5772F89D92A50D10F15BDBDA409F50C0B8AB93FE8A16D029DD8BB5C480D1466735ED4D9CAF637E5ECD6C2ECB6BF3B3EFBEE7AB936D2C568E3009D156B87CACB1FB3A48A70BC91B2EC35CC9147FFB1A524E2B2F2E4E2C1B12F1C1C63768BB95CD62FEC01CBA79B9FA282DD4DF49990F27FF8EE4E2DDE2F0ACD83BC9D4BE0090192C7A799967EC4DC2D63C0835E22D4C4B366D7FDCF3A05A4B53DF780F986EF25C79B665D5C00EFF7F17C0BB6D544F9D83A7FDAC47D9C5683A656011374253C918FF6EA64749DD971B2300DD5320033E01EC591F6318CCE94CE2B81C04322EC52B624E50643B52391CCD2AB56396A2AD8E2D3CA61B80D9D4CC363B2DF7863526958CDF3497E36648406C317E58EC563E7C26149A2A3C643ADFB39A8DD92974C6D2A2A9D7B71CDF3FEBBF32BB02E7B45CF53AAEAD5E963A4AA4AF9A149A08A4EC303D5F2369977E93F54897EEAD31B06C5845D63F49D65F8E5573962241A57CCD717CE6CA8C784A11192943616EA059B51BC38429E18D0121FCBB6FBD5D909B0D89E616C66DEF6A0F165A7030BD911A1B120468329CBB006C8D37720E531CF31E878CB4AAAC137633675C3D546F5162487AB35F470C042BDEB945E0F2532BF92AA6FD53434440221ECD3533A7AA89900CB19EFE2CD872DF8B7969AF0D3B72BF31DC5DD69CA6460966F61AB17CB507964098DBA3AF122EEC3128A9BAFE1034493F372B36BD1351205E9043A67C544402D8BCE24358C8A5CE33867A00794CF7097D59C88279A11EE9C854E7E7AAE881F9828C569D208F5F33375F59E9A3818CFA38AAD0CBFBA32F9F44A8BB79DE4C40E3886457C16DA4A27953AA1E99472E35F2323F0BAA5E37DC28CBA46FEFB73B190016055ADD4D27615D748499A0E1C4B8C7EC339C1C4D95A813A85918A8D01EEB485DDCDCEA6EA3F2C2A9D85C139CD90CCB352634F9AFE836BCAC0C274E352BA2071B5269D5DE4CCDE3FF990CBA974980C7332AE1545A9C60D5D1459D3AE95C1AC065733AF14FADB440A110DD539563B8D850CD0704C52F3F7CCCB53630D776560CBD22D8FF08F5B354487A171AEC15F5F54DE9CAB668BCAC573E788D92762EF63E76087005F4AC2D02E0CAC173C11BE62ACE5DC4D3374F2F9746C9981E125FF9AB8CAE76D13039E2C54DFD708E028A619EA1ED78E6B46F06DF0D0B74BBEDD8C190C7C0CEBDE8F7A4888CC36575313478DD2CFE392E9BB7B2416955D44B7024A3BA43FBF37293B386D64746D7748895411D243FAEC50638F2AA33337D7FA018ADDAC5835A0DDFAE99AD6299DFB4CA6872C59853E3AC12FC9E3D26629C5B49CF844C87B3C4BFBE3074E3A1CE6984758C20C661084381CD6B4582D84F19C0000B5FC0DCB42B567E396031601C095D7016283EBE5F13CD8A3A374A74DDBBABD36081149F8BC242085F2F7297CC97FD3B8BAD206D8AC9707A39ECCC7963B522E08DA391A1EF12DD4D746DBDDDCC0834F88160CF189A9645567CEC2F023A571AF0DFD15DB85B744C28C000DF53B05F8F210841F6E87A04F20C777B7C0BE6182BE2E90226E5301A12532A745F2FAAA81637CF11B78CD2B99A4D18B862D6C5DBD31793FB16A2D9AAD376D4484D75AA833D0068B1D34DB74E3302480854E3B5484D8A47E39A89A2FA927BC3641EA7F8E004FDE4C2F08D40D99F1ACB47CAF6887629BF6DFE12968D297596D28CE0CF148B12E7DCB49FB94F5ADBD214C3A6CE1E249831BA9EB8A189F2CE1ABE39A7B537253E369A508A2AF2ADB9463F9B56BBBFF31D535FF997F537C6675C196E7ECBD493F652FA7CC6D9C1CA3379BFDB5AF7513C6E834054494296B91A6EE800114363D5D5D0759F41B4DECB653B9DE3E94583579EF549ED5F3FAFB12661ABC0C57A332406517ED3454EDED34B386C60F78DC976266E0EAF54FC245FB0E3EFC8016236436B599C1C97A8C5E0AC8F7836161873C71F01ED9CC25C236420F41FD8277993D3959205912FA0927B59E3DAE7377D82079447D6E41EE5AEC0DFFF79AF8F4ED47F17EE708FEA45877860D56F8CBCE65A061E8E1CA4A5FBAF0E13429A7F0ADB6F178FA449F46CC539BBC0107E3A53B1C362A04B20E6D721E7E6E1E4976A11DDC98C7614D22B53DFBB6DAE533AC9BE882021A735C30DAA4A44AED09F49A390E8CFF59BD9C30667AF21B03EC5CEBD5C2C3AA2769E8D714191A48E7DDF50B13D1560E82EFB65FCE601AE9E8C351FBA1DED80B7351314E7F9F9A784BFE3759B7E322A84E7B51F9DC5F5D9C8050CD79B27C0A4B0DD68A3C27A948AD6858E35B960D2DEA838C479CAEA83B1A912174ACB2100E55E7A14892D7A9B3711FF0B20065C1995B49E1F23464A92DD140642E3A7B1973849E64D1A3CF60000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark + %endeexec + %%EndProcSet %%EndProlog %%BeginDocumentSetup md begin F sgd svsc T T 0 0 781 538 -30 -28 811 566 100 72 72 3 F F F F T T T F psu (; document: Report)jn 0 mf od %%EndDocumentSetup %%Page: ? 1 op 0 0 xl 1 1 pen 0 0 gm (nc 0 0 781 538 6 rc)kp 167 238 gm (nc 50 0 377 538 6 rc)kp 1.50659 0 rmoveto F 1 setTxMode 1 fs bu fc {}mark T /Helvetica-Bold /|______Helvetica-Bold 0 rf bn 18 fz bu fc 2 F /|______Helvetica-Bold fnt bn (Coco/R)show 219 122 gm 11.41015 0 rmoveto 14 fz bu fc 2 F /|______Helvetica-Bold fnt bn (A Generator for Fast Compiler Front-Ends)show 271 224 gm 0 fs bu fc {}mark T /Helvetica /|______Helvetica 0 rf bn bu fc 2 F /|______Helvetica fnt bn -0.14265 0.(H.M\232ssenb\232ck)ashow 307 177 gm 0.05419 0 rmoveto 10 fz bu fc 2 F /|______Helvetica fnt bn (ETH Z\237rich, Institut f\237r Computersysteme)show 323 201 gm 0.17236 0 rmoveto (ETH-Zentrum, CH-8092 Z\237rich)show 339 139 gm 2.75952 0 rmoveto (Tel.: +41-1-254 7342, E-mail: moessenboeck@inf.ethz.ch)show F T cp %%Page: ? 2 op 0 0 xl 1 1 pen 20 400 gm (nc 746 0 781 538 6 rc)kp 29 34 gm (nc 0 0 35 538 6 rc)kp F 1 setTxMode 0 fs 9 fz bu fc 2 F /|______Helvetica fnt bn (2)show 100 34 gm (nc 50 0 669 538 6 rc)kp 1 fs 10 fz bu fc 2 F /|______Helvetica-Bold fnt bn 0.63578 0.(Abstract)ashow 128 34 gm 0 fs bu fc 2 F /|______Helvetica fnt bn 0.62011 0. 32 0.06201 0.(Formal compiler descriptions serve two purposes: \(1\) they can be used as a reference document which)awidthshow 142 34 gm 0.82427 0. 32 0.08242 0.(specifies the syntax and the semantics of a language, and \(2\) they provide a convenient notation from)awidthshow 156 34 gm 0.29144 0. 32 0.02914 0.(which efficient compilers can be generated. Compiler generating systems put emphasis on either the one)awidthshow 170 34 gm 0.05264 0. 32 0.00526 0.(or the other of these aspects. The system described in this report mainly concentrates on the second goal.)awidthshow 184 34 gm 1.49963 0. 32 0.14996 0.(We show that it is possible to generate compilers that are as efficient as hand-coded and carefully)awidthshow 198 34 gm 0.92346 0. 32 0.09234 0.(optimized production-quality compilers. Our system generates recursive descent parsers with a simple)awidthshow 212 34 gm -0.01786 0.(error-handling mechanism and scanners with a special buffering scheme. Almost as important as efficiency)ashow 226 34 gm -0.05258 0.(is the simplicity and adequacy of the system. Programmers are not willing to use a tool if it does not come in)ashow 240 34 gm 0.02899 0. 32 0.00289 0.(handy in their work, if it uses a cryptic notation or a multitude of options and special cases. The tool should)awidthshow 254 34 gm -0.01171 0.(make their work easier without limiting their flexibility. We used our system to generate an Oberon compiler)ashow 268 34 gm -0.03524 0.(that is even faster than the standard Oberon compiler used at ETH.)ashow 324 34 gm 1 fs bu fc 2 F /|______Helvetica-Bold fnt bn 0.95454 0.(Contents)ashow 352 34 gm 0 fs bu fc 2 F /|______Helvetica fnt bn 0.66255 0.(1.)ashow 352 48 gm 0.16035 0.(Introduction)ashow 376 34 gm 0.66255 0.(2.)ashow 376 48 gm 0.08026 0. 32 0.00802 0.(The Compiler Description Language Cocol/R)awidthshow 390 48 gm 0.55174 0.(2.1)ashow 390 68 gm (Overall Structure)show 404 48 gm 0.55174 0.(2.2)ashow 404 68 gm 0.43624 0. 32 0.04362 0.(Scanner Specification)awidthshow 418 48 gm 0.55174 0.(2.3)ashow 418 68 gm 0.03417 0. 32 0.00341 0.(Parser Specification)awidthshow 442 34 gm 0.66255 0.(3.)ashow 442 48 gm -0.06913 0.(Using Coco/R to Generate a Compiler)ashow 456 48 gm 0.55174 0.(3.1)ashow 456 68 gm 0.03433 0. 32 0.00343 0.(Scanner Interface)awidthshow 470 48 gm 0.55174 0.(3.2)ashow 470 68 gm -0.07473 0.(Parser Interface)ashow 484 48 gm 0.55174 0.(3.3)ashow 484 68 gm -0.28596 0.(Grammar Tests)ashow 508 34 gm 0.66255 0.(4.)ashow 508 48 gm -0.01744 0.(Hints for Advanced Users of Coco/R)ashow 532 34 gm 0.66255 0.(5.)ashow 532 48 gm 0.05061 0.(Implementation)ashow 546 48 gm 0.55174 0.(5.1)ashow 546 68 gm 0.19622 0. 32 0.01962 0.(Scanner Generation)awidthshow 560 48 gm 0.55174 0.(5.2)ashow 560 68 gm -0.04244 0.(Parser Generation)ashow 574 48 gm 0.55174 0.(5.3)ashow 574 68 gm -0.01649 0.(Error Recovery)ashow 598 34 gm 0.66255 0.(6.)ashow 598 48 gm 0.08042 0.(Measurements)ashow 622 34 gm 0.66255 0.(7.)ashow 622 48 gm -0.12846 0.(Summary)ashow 650 34 gm -0.12419 0.(Appendix A Cocol/R Grammar)ashow 664 34 gm -0.06437 0.(Appendix B Sample Attributed Grammar in Cocol/R)ashow F T cp %%Page: ? 3 op 0 0 xl 1 1 pen 20 261 gm (nc 746 0 781 538 6 rc)kp 29 500 gm (nc 0 0 35 538 6 rc)kp F 1 setTxMode 0 fs 9 fz bu fc 2 F /|______Helvetica fnt bn (3)show 63 34 gm (nc 53 0 728 538 6 rc)kp 1 fs 10 fz bu fc 2 F /|______Helvetica-Bold fnt bn 4.40567 0. 32 0.44056 0.(1. Introduction)awidthshow 91 34 gm 0 fs bu fc 2 F /|______Helvetica fnt bn 0.49301 0. 32 0.04930 0.(Coco/R is a program that takes an augmented EBNF grammar of a language and generates a recursive)awidthshow 105 34 gm -0.06611 0.(descent parser and a scanner for this language. The programmer has to supply a main module that calls the)ashow 119 34 gm 0.17700 0. 32 0.01770 0.(parser, as well as semantic modules that are called from within the grammar \(e.g., a symbol table handler)awidthshow 133 34 gm -0.04187 0.(and a code generator\). )ashow -261 -113 xl 0 0 gm (nc -96 0 0 309 6 rc)kp 64 gr -66 221 -51 264 4 rc 0 gr -65.5 221.5 -51.5 263.5 0 rc 1 64 lw 64 gr -96 221 -81 264 4 rc 0 gr -95.5 221.5 -81.5 263.5 0 rc 64 1 lw 1 1 lw 64 gr -30 176 -15 219 4 rc 0 gr -29.5 176.5 -15.5 218.5 0 rc 1 64 lw 64 gr -30 221 -15 264 4 rc 0 gr -29.5 221.5 -15.5 263.5 0 rc 64 gr -30 266 -15 309 4 rc 0 gr -29.5 266.5 -15.5 308.5 0 rc -55 229 gm F 1 setTxMode 9 fz bu fc 2 F /|______Helvetica fnt bn 0.10018 0.(Parser)ashow -85 233 gm -0.16621 0.(Main)ashow -19 181 gm 0.08155 0.(Scanner)ashow -4 226 gm (Semantic modules)show -39 82 gm (Coco)show -16 9 gm -0.14161 0.(Compiler)ashow -5 4 gm 0.14942 0.(description)ashow -30 197 gm 0 gr -39 197 lin -30 287 gm -39 287 lin -39 197 gm -39 227 lin -39 257 gm -39 287 lin -39 227 gm (nc -49 0 0 309 6 rc)kp -51 227 lin (nc -96 0 0 309 6 rc)kp -56 222 -46 232 75 105 4 ar -39 257 gm (nc -49 0 0 309 6 rc)kp -51 257 lin (nc -96 0 0 309 6 rc)kp -56 252 -46 262 75 105 4 ar -30 242 gm (nc -49 0 0 309 6 rc)kp -51 242 lin (nc -96 0 0 309 6 rc)kp -56 237 -46 247 75 105 4 ar -66 242 gm (nc -79 0 0 309 6 rc)kp -81 242 lin (nc -96 0 0 309 6 rc)kp -86 237 -76 247 75 105 4 ar -66 5 gm -30 5 lin -30 35 lin -72 35 lin -72 11 lin -66 5 lin -66 11 lin -72 11 lin -60 137 gm (nc -96 0 0 195 6 rc)kp -60 197 lin (nc -96 0 0 309 6 rc)kp -65 192 -55 202 165 195 4 ar -24 137 gm (nc -96 0 0 156 6 rc)kp -24 158 lin (nc -96 0 0 309 6 rc)kp -29 153 -19 163 165 195 4 ar -24 137 gm -39 137 lin -45 137 gm -60 137 lin -39 137 gm -39 113 lin -45 137 gm -45 113 lin -42 44 gm (nc -96 0 0 66 6 rc)kp -42 68 lin (nc -96 0 0 309 6 rc)kp -47 63 -37 73 165 195 4 ar 64 1 lw 1 1 lw 261 113 xl 289 34 gm (nc 53 0 728 538 6 rc)kp F 1 setTxMode 10 fz bu fc 2 F /|______Helvetica fnt bn 0.99166 0. 32 0.09916 0.(The input language of Coco/R \(Cocol/R\) is based on )awidthshow 2 fs bu fc {}mark T /Helvetica-Oblique /|______Helvetica-Oblique 0 rf bn bu fc 2 F /|______Helvetica-Oblique fnt bn 1.83914 0. 32 0.18391 0.(attributed grammars)awidthshow 0 fs bu fc 2 F /|______Helvetica fnt bn 1.30706 0. 32 0.13070 0.(. Attributed grammars were)awidthshow 303 34 gm 0.64514 0. 32 0.06451 0.(introduced by )awidthshow 2 fs bu fc 2 F /|______Helvetica-Oblique fnt bn 0.18249 0.(Knuth)ashow 0 fs bu fc 2 F /|______Helvetica fnt bn 0.60043 0. 32 0.06004 0.( [Knu68] as a formalism to specify the semantics of context-free languages. In their)awidthshow 317 34 gm 1.20880 0. 32 0.12088 0.(original form they are static descriptions. They describe dependencies between attributes of symbols)awidthshow 331 34 gm 0.24551 0. 32 0.02455 0.(without giving an order in which the dependencies are to be evaluated. Many compiler generators stick to)awidthshow 345 34 gm 0.61264 0. 32 0.06126 0.(this notation [GaGi84, KHZ82, R\212i83]. For the implementation of efficient compilers, however, it may be)awidthshow 359 34 gm -0.02233 0.(better to look at attributed grammars as an algorithmic notation. The evaluation order of semantic actions is)ashow 373 34 gm 1.26373 0. 32 0.12637 0.(then determined by the textual order of the actions in the grammar. There are also several compiler)awidthshow 387 34 gm 0.07232 0. 32 0.00723 0.(generators, including Coco/R, that use this paradigm [John75, Gro88]. )awidthshow 415 34 gm 0.59890 0. 32 0.05989 0.(Coco/R is an improvement over an older version of this program \(Coco [ReM\23289]\). The main difference)awidthshow 429 34 gm 1.04827 0. 32 0.10482 0.(between Coco and Coco/R is that Coco/R produces recursive descent parsers instead of table-driven)awidthshow 443 34 gm 0.58059 0. 32 0.05805 0.(parsers and that it integrates the scanner description and the parser description, thus avoiding interface)awidthshow 457 34 gm 0.03204 0. 32 0.00320 0.(problems between the generated parts. A main nuisance of Coco was that all attributes had to be declared)awidthshow 471 34 gm 0.60287 0. 32 0.06028 0.(in a global scope, making it necessary to stack attribute values from time to time. This was remedied in)awidthshow 485 34 gm 1.03637 0. 32 0.10363 0.(Coco/R. Attributes can be declared local to productions. A similar extension of Coco, based on table-)awidthshow 499 34 gm 0.17333 0. 32 0.01733 0.(driven parsing, has recently been described in [DoPi90].)awidthshow 527 34 gm 0.72433 0. 32 0.07243 0.(The following example gives an impression of how a compiler description might look. A precise specifi-)awidthshow 541 34 gm 0.96527 0. 32 0.09652 0.(cation of the description language follows in Section 2. The example shows the translation of variable)awidthshow 555 34 gm 1.22421 0. 32 0.12242 0.(declarations. The task is to enter declared names into a symbol table and to compute addresses for)awidthshow 569 34 gm -0.12216 0.(variables. One starts with a context-free EBNF grammar that is usually already at hand)ashow 597 48 gm -0.02528 0.(VarDeclaration = Ident {"," Ident} ":" Type ";".)ashow 625 34 gm -0.07235 0.(By simply writing down this rule, one already gets a parser that can check variable declarations syntactically.)ashow 639 34 gm 0.01434 0. 32 0.00143 0.(To process them semantically as well,one has to think about how variable declarations are translated. This)awidthshow 653 34 gm 0.37750 0. 32 0.03775 0.(requires the following considerations:)awidthshow 681 34 gm (\245)show 681 48 gm 1.25442 0. 32 0.12544 0.(What are the semantic values of )awidthshow 2 fs bu fc 2 F /|______Helvetica-Oblique fnt bn 0.37435 0.(VarDeclaration)ashow 0 fs bu fc 2 F /|______Helvetica fnt bn 0.36712 0. 32 0.03671 0.(, )awidthshow 2 fs bu fc 2 F /|______Helvetica-Oblique fnt bn 0.35249 0.(Ident)ashow 0 fs bu fc 2 F /|______Helvetica fnt bn 0.70495 0. 32 0.07049 0.( and )awidthshow 2 fs bu fc 2 F /|______Helvetica-Oblique fnt bn 0.44047 0.(Type)ashow 0 fs bu fc 2 F /|______Helvetica fnt bn 1.22848 0. 32 0.12284 0.(? In other words, what does the)awidthshow 695 48 gm 0.13107 0. 32 0.01310 0.(recognition of these symbols yield and what context information must be supplied in order to be able to)awidthshow 709 48 gm 0.72708 0. 32 0.07270 0.(recognize them? This leads to the so-called )awidthshow 2 fs bu fc 2 F /|______Helvetica-Oblique fnt bn 0.17424 0.(attributes)ashow 0 fs bu fc 2 F /|______Helvetica fnt bn 0.56747 0. 32 0.05674 0.( of the symbols. The attribute of an )awidthshow 2 fs bu fc 2 F /|______Helvetica-Oblique fnt bn 0.18843 0.(Ident)ashow 0 fs bu fc 2 F /|______Helvetica fnt bn 0.37109 0. 32 0.03710 0.( is its)awidthshow 723 48 gm 1.16348 0. 32 0.11634 0.(name, while the attribute of a )awidthshow 2 fs bu fc 2 F /|______Helvetica-Oblique fnt bn 0.44860 0.(Type)ashow 0 fs bu fc 2 F /|______Helvetica fnt bn 1.22421 0. 32 0.12242 0.( is some node with type information. )awidthshow 2 fs bu fc 2 F /|______Helvetica-Oblique fnt bn 0.38127 0.(VarDeclaration)ashow 0 fs bu fc 2 F /|______Helvetica fnt bn 1.18591 0. 32 0.11859 0.( does not)awidthshow F T cp %%Page: ? 4 op 0 0 xl 1 1 pen 20 505 gm (nc 746 0 781 538 6 rc)kp 29 34 gm (nc 0 0 35 538 6 rc)kp F 1 setTxMode 0 fs 9 fz bu fc 2 F /|______Helvetica fnt bn (4)show 57 48 gm (nc 47 0 734 538 6 rc)kp 10 fz bu fc 2 F /|______Helvetica fnt bn 0.37658 0. 32 0.03765 0.(produce an attribute. Instead, it needs an attribute from its context; i.e., it needs to know the next free)awidthshow 71 48 gm -0.03005 0.(address in the address space for variables. Attributes can be considered as \(input or output\) parameters)ashow 85 48 gm -0.01786 0.(of syntax symbols. They are denoted as follows:)ashow 113 62 gm 0.14434 0. 32 0.01443 0.(Ident )awidthshow 127 62 gm 0.51467 0. 32 0.05146 0.(Type )awidthshow 141 62 gm -0.10629 0.(VarDeclaration )ashow 169 34 gm (\245)show 169 48 gm -0.00863 0.(The next question is: what actions are necessary to translate a construct? These actions are formulated)ashow 183 48 gm 0.14923 0. 32 0.01492 0.(in a general purpose programming language \(e.g., )awidthshow 2 fs bu fc 2 F /|______Helvetica-Oblique fnt bn 0.04383 0.(Oberon)ashow 0 fs bu fc 2 F /|______Helvetica fnt bn 0.13732 0. 32 0.01373 0.( [Wirth89]\) and are enclosed by the symbols)awidthshow 197 48 gm 0.91278 0. 32 0.09127 0.("\(." and ".\)". A semantic action may appear anywhere on the right-hand side of a production and is)awidthshow 211 48 gm 0.17288 0. 32 0.01728 0.(executed at that point during parsing.)awidthshow 239 34 gm 0.23208 0. 32 0.02320 0.(These consideration lead to an attributed production:)awidthshow 267 48 gm -0.13607 0.(VarDeclaration )ashow 281 170 gm -0.10592 0.(\(.)ashow 281 181 gm -0.11241 0.(VAR )ashow 281 207 gm -0.04214 0.(obj, obj1: SymTab.Object; typ: SymTab.Type; n, a: LONGINT; )ashow 295 181 gm -1.55661 0.( )ashow 295 207 gm -0.10670 0.(name: ARRAY 32 OF CHAR;.\))ashow 309 48 gm (=)show 309 62 gm 0.14434 0. 32 0.01443 0.(Ident )awidthshow 309 170 gm -0.10592 0.(\(.)ashow 309 181 gm -0.07363 0.(obj := SymTab.Find\(name\); obj.link := NIL; n := 1 .\))ashow 323 62 gm -0.02774 0.({ "," Ident )ashow 323 170 gm -0.10592 0.(\(.)ashow 323 181 gm -0.05276 0.(obj1 := SymTab.Find\(name\); obj1.link := obj; obj := obj1; INC\(n\) .\))ashow 337 62 gm (} ":")show 351 62 gm 0.51467 0. 32 0.05146 0.(Type )awidthshow 351 170 gm -0.10592 0.(\(.)ashow 351 181 gm -0.14994 0.(adr := adr + n* typ.size; a := adr;)ashow 365 181 gm -0.12828 0.(WHILE obj # NIL DO DEC\(a, typ.size\); obj.adr := a; obj := obj.link END .\))ashow 379 62 gm 0.44790 0.(";".)ashow 407 34 gm 0.18341 0. 32 0.01834 0.(Although the format is free, it is wise to shift syntactic parts to the left and semantic parts to the right. This)awidthshow 421 34 gm 0.54977 0. 32 0.05497 0.(gives a nice separation between syntax and semantics and makes it immediately clear what actions are)awidthshow 435 34 gm 1.63116 0. 32 0.16311 0.(executed upon recognition of a certain syntax symbol. Note that the production also contains local)awidthshow 449 34 gm 0.64071 0. 32 0.06407 0.(declarations of variables needed in the semantic actions. Besides, globally declared or imported names)awidthshow 463 34 gm -0.04618 0.(can also be accessed.)ashow 491 34 gm 1.13647 0. 32 0.11364 0.(An attributed grammar can be viewed as a special purpose language for writing compilers \(or similar)awidthshow 505 34 gm 0.01312 0. 32 0.00131 0.(programs\). It is a short-hand notation for the well-known recursive descent technique. Although it is not too)awidthshow 519 34 gm -0.03831 0.(hard to implement a compiler front-end by hand, a notation like the above can have advantages:)ashow 547 34 gm (\245)show 547 48 gm -0.02494 0.(It is easy to read. Syntax and semantics are clearly separated. Semantic actions are not buried between)ashow 561 48 gm 0.27191 0. 32 0.02719 0.(parsing statements.)awidthshow 575 34 gm (\245)show 575 48 gm 1.44775 0. 32 0.14477 0.(Routine activities like getting the next token from the scanner, handling alternatives, options and)awidthshow 589 48 gm -0.03407 0.(iterations, or error-handling don't have to be written down explicitly but are derived from the grammar.)ashow 603 34 gm (\245)show 603 48 gm 1.16607 0. 32 0.11660 0.(It is faster and safer to implement a compiler in this high-level notation than in a general purpose)awidthshow 617 48 gm 0.00930 0. 32 0.00093 0.(programming language. During language design several alternatives of a construct can be tried out and)awidthshow 631 48 gm 0.30456 0. 32 0.03045 0.(their implementations can be prototyped.)awidthshow 645 34 gm (\245)show 645 48 gm 1.79428 0. 32 0.17942 0.(Irregularities in the grammar like circular productions or violations of the LL\(1\) property can go)awidthshow 659 48 gm 1.01516 0. 32 0.10151 0.(undetected when the parser is implemented by hand. For a generator it is easy to check for these)awidthshow 673 48 gm -0.01515 0.(irregularities.)ashow 701 34 gm 1.43386 0. 32 0.14338 0.(Compiler generators enable programmers who are not experienced compiler writers to process little)awidthshow 715 34 gm 0.42663 0. 32 0.04266 0.(languages. Examples for little languages are numerous in programming [Ben88], ranging from command)awidthshow 729 34 gm -0.01757 0.(languages to descriptions of data structures on a file.)ashow F T cp %%Page: ? 5 op 0 0 xl 1 1 pen 20 267 gm (nc 746 0 781 538 6 rc)kp 29 500 gm (nc 0 0 35 538 6 rc)kp F 1 setTxMode 0 fs 9 fz bu fc 2 F /|______Helvetica fnt bn (5)show 64 34 gm (nc 54 0 727 538 6 rc)kp 10 fz bu fc 2 F /|______Helvetica fnt bn 0.38101 0. 32 0.03810 0.(The rest of this report describes the input language Cocol/R, shows how the generator can be used, and)awidthshow 78 34 gm 0.33096 0. 32 0.03309 0.(gives an overview of its implementation together with measurements. The appendix contains an example)awidthshow 92 34 gm -0.09985 0.(of a compiler description for a small language. )ashow 134 34 gm 1 fs bu fc 2 F /|______Helvetica-Bold fnt bn 3.29879 0. 32 0.32987 0.(2. The Compiler Description Language Cocol/R)awidthshow 162 34 gm 0 fs bu fc 2 F /|______Helvetica fnt bn 0.34759 0. 32 0.03475 0.(A compiler description can be viewed as a module consisting of imports, declarations and grammar rules)awidthshow 176 34 gm 1.04309 0. 32 0.10430 0.(that describe the lexical and syntactical structure of a language as well as its translation into a target)awidthshow 190 34 gm -0.02561 0.(language. The vocabulary of Cocol/R uses identifiers, strings and numbers in the usual way:)ashow 218 48 gm 0.05355 0. 32 0.00535 0.(ident = letter {letter|digit}.)awidthshow 232 48 gm 0.28442 0. 32 0.02844 0.(string = ')awidthshow bu fc {}mark T /Times-Roman /|______Times-Roman 0 rf bn bu fc 2 F /|______Times-Roman fnt bn 0.09219 0.(")ashow bu fc 2 F /|______Helvetica fnt bn 0.45455 0. 32 0.04545 0.(' {anyButQuote} ')awidthshow bu fc 2 F /|______Times-Roman fnt bn 0.09219 0.(")ashow bu fc 2 F /|______Helvetica fnt bn 0.20507 0. 32 0.02050 0.(' |\312")awidthshow bu fc 2 F /|______Times-Roman fnt bn (')show bu fc 2 F /|______Helvetica fnt bn 0.54656 0. 32 0.05465 0.(" {anyButApostrophe} ")awidthshow bu fc 2 F /|______Times-Roman fnt bn (')show bu fc 2 F /|______Helvetica fnt bn 0.14300 0.(".)ashow 246 48 gm -0.00881 0.(number = digit {digit}.)ashow 274 34 gm -0.04475 0.(Upper case letters are distinct from lower case letters. Strings must not cross line borders. Keywords are)ashow 302 48 gm 9 fz bu fc 2 F /|______Helvetica fnt bn -0.31477 0.(ANY CASE CHARACTERS CHR COMMENTS COMPILER CONTEXT END FROM IGNORE)ashow 316 48 gm -0.27471 0.(NESTED PRAGMAS PRODUCTIONS SYNC TO TOKENS WEAK)ashow 344 34 gm 10 fz bu fc 2 F /|______Helvetica fnt bn -0.02384 0.(The following metacharacters are used to form EBNF expressions:)ashow 372 48 gm -0.75373 0.(\( \) )ashow 372 85 gm 0.78842 0. 32 0.07884 0.(for grouping)awidthshow 386 48 gm -0.76187 0.({ } )ashow 386 85 gm (for iterations)show 400 48 gm -0.60379 0.([ ] )ashow 400 85 gm 0.66131 0. 32 0.06613 0.(for options)awidthshow 414 48 gm -0.50367 0.(< > )ashow 414 85 gm 0.19058 0. 32 0.01905 0.(for attributes)awidthshow 428 48 gm -0.51292 0.(\(. .\) )ashow 428 85 gm -0.08522 0.(for semantic parts)ashow 442 48 gm -0.43704 0.(= . | + -)ashow 442 85 gm (as explained below)show 470 34 gm -0.04801 0.(Comments are enclosed in "\(*" and "*\)" and may be nested. The semantic parts may contain declarations or)ashow 484 34 gm 0.65582 0. 32 0.06558 0.(statements in a general purpose programming language. The language actually used is implementation)awidthshow 498 34 gm 0.60363 0. 32 0.06036 0.(dependent. This implementation uses Oberon.)awidthshow 540 34 gm 1 fs bu fc 2 F /|______Helvetica-Bold fnt bn 3.80172 0. 32 0.38017 0.(2.1 Overall Structure)awidthshow 568 34 gm 1 64 lw 0 fs bu fc 2 F /|______Helvetica fnt bn -0.02685 0.(A compiler description is made up of the following parts)ashow -582 -48 xl -1 0 gm (nc -1 0 0 184 6 rc)kp 0 gr -1 183 lin 64 1 lw 1 1 lw 582 48 xl 596 48 gm (nc 54 0 727 538 6 rc)kp F 1 setTxMode bu fc 2 F /|______Helvetica fnt bn -0.13613 0.(Cocol = )ashow 596 96 gm 0.49041 0. 32 0.04904 0.("COMPILER" ident)awidthshow 610 96 gm 2 fs bu fc 2 F /|______Helvetica-Oblique fnt bn -0.09194 0.(arbitraryText)ashow 624 96 gm 0 fs bu fc 2 F /|______Helvetica fnt bn 0.10981 0.(ScannerSpecification)ashow 638 96 gm 0.04869 0.(ParserSpecification)ashow 652 96 gm 1 64 lw 0.24475 0. 32 0.02447 0.("END" ident "." .)awidthshow -666 -48 xl -1 0 gm (nc -1 0 0 184 6 rc)kp 0 gr -1 183 lin 64 1 lw 1 1 lw 666 48 xl 694 34 gm (nc 54 0 727 538 6 rc)kp F 1 setTxMode bu fc 2 F /|______Helvetica fnt bn -0.03588 0.(The name after the keyword COMPILER is the )ashow 2 fs bu fc 2 F /|______Helvetica-Oblique fnt bn -0.04170 0.(grammar name)ashow 0 fs bu fc 2 F /|______Helvetica fnt bn -0.03562 0.( and must match the name after the keyword)ashow 708 34 gm -0.06817 0.(END. The grammar name also denotes the topmost nonterminal \(the start symbol\). After the grammar name)ashow 722 34 gm 0.99746 0. 32 0.09974 0.(arbitrary Oberon text may follow that is not checked by Coco/R. It usually contains imports of Oberon)awidthshow F T cp %%Page: ? 6 op 0 0 xl 1 1 pen 20 505 gm (nc 746 0 781 538 6 rc)kp 29 34 gm (nc 0 0 35 538 6 rc)kp F 1 setTxMode 0 fs 9 fz bu fc 2 F /|______Helvetica fnt bn (6)show 56 34 gm (nc 46 0 733 538 6 rc)kp 10 fz bu fc 2 F /|______Helvetica fnt bn 0.17242 0. 32 0.01724 0.(modules and declarations of global objects \(constants, types, variables, or procedures\) that are needed in)awidthshow 70 34 gm 1.16577 0. 32 0.11657 0.(the semantic actions later on. The remaining parts of the compiler description specify the lexical and)awidthshow 84 34 gm 0.10314 0. 32 0.01031 0.(syntactical structure of the language to be processed.)awidthshow 126 34 gm 1 fs bu fc 2 F /|______Helvetica-Bold fnt bn 4.28924 0. 32 0.42892 0.(2.2 Scanner Specification)awidthshow 154 34 gm 0 fs bu fc 2 F /|______Helvetica fnt bn 0.44021 0. 32 0.04402 0.(A scanner has to read source text, skip meaningless characters, and recognize tokens which have to be)awidthshow 168 34 gm 0.56121 0. 32 0.05612 0.(passed to the parser. Tokens may be classified as )awidthshow 2 fs bu fc 2 F /|______Helvetica-Oblique fnt bn 0.12603 0.(literals)ashow 0 fs bu fc 2 F /|______Helvetica fnt bn 0.31051 0. 32 0.03105 0.( and )awidthshow 2 fs bu fc 2 F /|______Helvetica-Oblique fnt bn 0.91949 0. 32 0.09194 0.(token classes)awidthshow 0 fs bu fc 2 F /|______Helvetica fnt bn 0.59890 0. 32 0.05989 0.(. Literals \(e.g., "END", ":=",)awidthshow 182 34 gm 0.07263 0. 32 0.00726 0.(etc.\) are written as strings and denote themselves. They are introduced right in the productions and do not)awidthshow 196 34 gm 0.79849 0. 32 0.07984 0.(have to be declared. Token classes \(e.g., identifiers or numbers\) have a certain structure that must be)awidthshow 210 34 gm -0.05377 0.(declared by a regular expression in EBNF. There are usually many different instances of a token class \(e.g.,)ashow 224 34 gm 1 64 lw -0.03555 0.(many different identifiers\) which are all recognized as the same token.)ashow -238 -48 xl -1 0 gm (nc -1 0 0 322 6 rc)kp 0 gr -1 321 lin 64 1 lw 1 1 lw 238 48 xl 252 48 gm (nc 46 0 733 538 6 rc)kp F 1 setTxMode bu fc 2 F /|______Helvetica fnt bn 0.47332 0. 32 0.04733 0.(ScannerSpecification =)awidthshow 266 62 gm -0.02459 0.({ "CHARACTERS" {SetDecl})ashow 280 62 gm 0.04089 0. 32 0.00408 0.(| "TOKENS" {TokenDecl})awidthshow 294 62 gm -0.12774 0.(| "PRAGMAS" {PragmaDecl})ashow 308 62 gm -0.05862 0.(| CommentDecl)ashow 322 62 gm -0.10565 0.(| VariousDecl)ashow 336 62 gm 1 64 lw -0.11819 0.(}.)ashow -350 -48 xl -1 0 gm (nc -1 0 0 322 6 rc)kp 0 gr -1 321 lin 64 1 lw 1 1 lw 350 48 xl 378 34 gm (nc 46 0 733 538 6 rc)kp F 1 setTxMode bu fc 2 F /|______Helvetica fnt bn -0.06657 0.(A scanner specification consists of 5 optional parts that may be written in arbitrary order.)ashow 406 34 gm 3 fs bu fc {}mark T /Helvetica-BoldOblique /|______Helvetica-BoldOblique 0 rf bn bu fc 2 F /|______Helvetica-BoldOblique fnt bn 2.07443 0. 32 0.20744 0.(Character sets)awidthshow 0 fs bu fc 2 F /|______Helvetica fnt bn 1.16348 0. 32 0.11634 0.(. This section allows the declaration of names for character sets like letters or digits.)awidthshow 420 34 gm 1 64 lw 0.02410 0. 32 0.00241 0.(These names may be used in the other sections of the scanner specification.)awidthshow -434 -48 xl -1 0 gm (nc -1 0 0 253 6 rc)kp 0 gr -1 252 lin 64 1 lw 1 1 lw 434 48 xl 448 48 gm (nc 46 0 733 538 6 rc)kp F 1 setTxMode bu fc 2 F /|______Helvetica fnt bn 0.12756 0. 32 0.01275 0.(SetDecl )awidthshow 448 96 gm 0.31677 0. 32 0.03167 0.(= ident "=" Set.)awidthshow 462 48 gm 0.16494 0. 32 0.01649 0.(Set )awidthshow 462 96 gm -0.06071 0.(= BasicSet { \("+"|"-"\) BasicSet}.)ashow 476 48 gm -0.02923 0.(BasicSet )ashow 476 96 gm 1 64 lw -0.09523 0.(= ident | string | "CHR" "\(" number "\)" | "ANY".)ashow -490 -48 xl -1 0 gm (nc -1 0 0 253 6 rc)kp 0 gr -1 252 lin 64 1 lw 1 1 lw 490 48 xl 518 34 gm (nc 46 0 733 538 6 rc)kp F 1 setTxMode 2 fs bu fc 2 F /|______Helvetica-Oblique fnt bn -0.11491 0.(SetDecl)ashow 0 fs bu fc 2 F /|______Helvetica fnt bn -0.10437 0.( associates a name with a character set. Basic character sets are denoted as)ashow 532 48 gm 0.11129 0.(string)ashow 532 113 gm -0.07873 0.(a set consisting of all characters in the string)ashow 546 48 gm 0.33131 0.(ident)ashow 546 113 gm -0.03991 0.(the previously declared character set with this name)ashow 560 48 gm -0.30645 0.(CHR\(i\))ashow 560 113 gm -0.07650 0.(a character set consisting of a single element with ordinal value i)ashow 574 48 gm -0.27951 0.(ANY)ashow 574 113 gm -0.09797 0.(the set of all characters)ashow 602 34 gm -0.07463 0.(Character sets may be formed from basic sets by the operators)ashow 616 48 gm (+)show 616 62 gm 0.79376 0. 32 0.07937 0.(set union)awidthshow 630 48 gm (-)show 630 62 gm 0.86318 0. 32 0.08631 0.(set difference)awidthshow 658 34 gm 0.01512 0.(Examples)ashow 672 48 gm 1.19995 0. 32 0.11999 0.(digit = "0123456789".)awidthshow 672 198 gm -0.05085 0.(the set of all digits)ashow 686 48 gm 0.14694 0. 32 0.01469 0.(hexdigit = digit + "ABCDEF".)awidthshow 686 198 gm -0.05987 0.(the set of all hexadecimal digits)ashow 700 48 gm -0.07260 0.(eol = CHR\(13\).)ashow 700 198 gm 0.10818 0. 32 0.01081 0.(end-of-line character)awidthshow 714 48 gm -0.09838 0.(noDigit = ANY - digit.)ashow 714 198 gm -0.10163 0.(Any character that is not a digit)ashow F T cp %%Page: ? 7 op 0 0 xl 1 1 pen 20 332 gm (nc 746 0 781 538 6 rc)kp 29 500 gm (nc 0 0 35 538 6 rc)kp F 1 setTxMode 0 fs 9 fz bu fc 2 F /|______Helvetica fnt bn (7)show 60 34 gm (nc 50 0 709 538 6 rc)kp 3 fs 10 fz bu fc 2 F /|______Helvetica-BoldOblique fnt bn 0.09577 0.(Tokens)ashow 0 fs bu fc 2 F /|______Helvetica fnt bn 0.26153 0. 32 0.02615 0.(. A token is a terminal symbol for the parser but a syntactically structured symbol for the scanner.)awidthshow 74 34 gm 1 64 lw -0.03108 0.(This structure has to be described by a regular expression in EBNF.)ashow -88 -48 xl -1 0 gm (nc -1 0 0 361 6 rc)kp 0 gr -1 360 lin 64 1 lw 1 1 lw 88 48 xl 102 48 gm (nc 50 0 709 538 6 rc)kp F 1 setTxMode bu fc 2 F /|______Helvetica fnt bn 0.23071 0. 32 0.02307 0.(TokenDecl )awidthshow 102 113 gm (=)show 102 122 gm 0.50643 0. 32 0.05064 0.(Symbol ["=" TokenExpr "."].)awidthshow 116 48 gm 0.46264 0. 32 0.04626 0.(TokenExpr )awidthshow 116 113 gm (=)show 116 122 gm 0.01586 0. 32 0.00158 0.(TokenTerm {"|" TokenTerm}.)awidthshow 130 48 gm 0.05966 0. 32 0.00596 0.(TokenTerm )awidthshow 130 113 gm (=)show 130 122 gm 0.07522 0. 32 0.00752 0.(TokenFactor {TokenFactor} ["CONTEXT" "\(" TokenExpr "\)"].)awidthshow 144 48 gm 0.04928 0. 32 0.00492 0.(TokenFactor )awidthshow 144 113 gm (=)show 144 122 gm -0.02296 0.(Symbol | "\(" TokenExpr "\)" | "[" TokenExpr "]" | "{" TokenExpr "}".)ashow 158 48 gm 0.13296 0.(Symbol)ashow 158 113 gm -0.61819 0.(= )ashow 158 122 gm 1 64 lw -0.00360 0.(ident | string.)ashow -172 -48 xl -1 0 gm (nc -1 0 0 361 6 rc)kp 0 gr -1 360 lin 64 1 lw 1 1 lw 172 48 xl 200 34 gm (nc 50 0 709 538 6 rc)kp F 1 setTxMode bu fc 2 F /|______Helvetica fnt bn 0.75866 0. 32 0.07586 0.(Tokens may be declared in any order. A token declaration defines a symbol together with its structure.)awidthshow 214 34 gm 0.60821 0. 32 0.06082 0.(Usually the symbol on the left-hand side of the declaration is an identifier. It is declared to stand for the)awidthshow 228 34 gm 0.15899 0. 32 0.01589 0.(structure described on the right-hand side of the declaration. \(For special purposes the symbol on the left-)awidthshow 242 34 gm -0.05882 0.(hand side may also be a string, in which case no right-hand side may be specified; see Section 4.\) )ashow 270 34 gm 1.81488 0. 32 0.18148 0.(The right-hand side of a token declaration specifies the structure of the token by a regular EBNF)awidthshow 284 34 gm 1.91879 0. 32 0.19187 0.(expression. This expression may contain literals denoting themselves \(e.g., "END"\) and names of)awidthshow 298 34 gm 0.99502 0. 32 0.09950 0.(character sets \(e.g., letter\) denoting an arbitrary character from this set. It must )awidthshow 2 fs bu fc 2 F /|______Helvetica-Oblique fnt bn 0.28222 0.(not)ashow 0 fs bu fc 2 F /|______Helvetica fnt bn 1.04522 0. 32 0.10452 0.( contain names of)awidthshow 312 34 gm 2.23892 0. 32 0.22389 0.(previously declared tokens. The CONTEXT phrase in a )awidthshow 2 fs bu fc 2 F /|______Helvetica-Oblique fnt bn 0.68029 0.(TokenTerm)ashow 0 fs bu fc 2 F /|______Helvetica fnt bn 1.69082 0. 32 0.16908 0.( means that the term is only)awidthshow 326 34 gm 0.56701 0. 32 0.05670 0.(recognized when its right-hand context in the input stream is the )awidthshow 2 fs bu fc 2 F /|______Helvetica-Oblique fnt bn 0.18768 0.(TokenExpr)ashow 0 fs bu fc 2 F /|______Helvetica fnt bn 0.53573 0. 32 0.05357 0.( specified in brackets. If the)awidthshow 340 34 gm -0.01773 0.(right-hand side of a declaration is missing, no scanner is generated. This gives the programmer the chance)ashow 354 34 gm -0.00309 0.(to provide a hand-written scanner \(see Section 4\).)ashow 382 34 gm 0.01512 0.(Examples)ashow 396 48 gm 0.36468 0. 32 0.03646 0.(ident )awidthshow 396 91 gm -0.07148 0.(= letter {letter | digit}.)ashow 410 48 gm -0.36083 0.(real )ashow 410 91 gm -0.00495 0.(= digit {digit} "." {digit} ["E" ["+"|"-"] digit {digit}].)ashow 424 48 gm 0.20629 0. 32 0.02062 0.(number )awidthshow 424 91 gm -0.00973 0.(= digit {digit} | digit {digit}\312CONTEXT \(".."\).)ashow 438 48 gm -0.15190 0.(and )ashow 438 91 gm -0.04066 0.(= "&" | "AND".)ashow 466 34 gm 0.89508 0. 32 0.08950 0.(The CONTEXT phrase in the above example allows a distinction between reals \(e.g., 1.23\) and range)awidthshow 480 34 gm 0.01541 0. 32 0.00154 0.(constructs \(e.g., 1..2\) that could otherwise not be scanned with a single character lookahead.)awidthshow 508 34 gm 9 fz bu fc 2 F /|______Helvetica fnt bn 1.13372 0. 32 0.11337 0.(Note: The scanner exports two variables, )awidthshow 2 fs bu fc 2 F /|______Helvetica-Oblique fnt bn 0.33349 0.(pos)ashow 0 fs bu fc 2 F /|______Helvetica fnt bn 0.55206 0. 32 0.05520 0.( and )awidthshow 2 fs bu fc 2 F /|______Helvetica-Oblique fnt bn 0.27597 0.(len)ashow 0 fs bu fc 2 F /|______Helvetica fnt bn 0.94192 0. 32 0.09419 0.(, which are the source position and the length of the most)awidthshow 522 34 gm 0.92330 0. 32 0.09233 0.(recently recognized token. It also exports a procedure )awidthshow 2 fs bu fc 2 F /|______Helvetica-Oblique fnt bn 0.31657 0.(GetName)ashow 0 fs bu fc 2 F /|______Helvetica fnt bn 0.17237 0.(\()ashow bu fc {}mark F /Symbol /|______Symbol 0 rf bn bu fc 2 F /|______Symbol fnt bn 0.31224 0.(\257)ashow 2 fs bu fc 2 F /|______Helvetica-Oblique fnt bn 0.27830 0.(pos)ashow 0 fs bu fc 2 F /|______Helvetica fnt bn 0.23986 0. 32 0.02398 0.(, )awidthshow bu fc 2 F /|______Symbol fnt bn 0.31224 0.(\257)ashow 2 fs bu fc 2 F /|______Helvetica-Oblique fnt bn 0.23030 0.(len)ashow 0 fs bu fc 2 F /|______Helvetica fnt bn 0.23986 0. 32 0.02398 0.(, )awidthshow bu fc 2 F /|______Symbol fnt bn 0.31224 0.(\255)ashow 2 fs bu fc 2 F /|______Helvetica-Oblique fnt bn 0.25616 0.(sourceText)ashow 0 fs bu fc 2 F /|______Helvetica fnt bn 0.72982 0. 32 0.07298 0.(\) which can be used to)awidthshow 536 34 gm 0.10360 0. 32 0.01036 0.(obtain the source text of the token at position )awidthshow 2 fs bu fc 2 F /|______Helvetica-Oblique fnt bn 0.03807 0.(pos)ashow 0 fs bu fc 2 F /|______Helvetica fnt bn 0.09811 0. 32 0.00981 0.( having the length )awidthshow 2 fs bu fc 2 F /|______Helvetica-Oblique fnt bn 0.03150 0.(len)ashow 0 fs bu fc 2 F /|______Helvetica fnt bn 0.10833 0. 32 0.01083 0.(. See also Section 3.)awidthshow 578 34 gm 3 fs 10 fz bu fc 2 F /|______Helvetica-BoldOblique fnt bn 0.10624 0.(Pragmas)ashow 0 fs bu fc 2 F /|______Helvetica fnt bn 0.28060 0. 32 0.02806 0.(. A pragma is a token that may occur anywhere in the input stream \(e.g., end-of-line symbols or)awidthshow 592 34 gm 0.09094 0. 32 0.00909 0.(compiler options\). It would be too cumbersome to handle the many places in which they could occur in the)awidthshow 606 34 gm 0.64666 0. 32 0.06466 0.(grammar. Therefore a special mechanism is provided to process pragmas without including them in the)awidthshow 620 34 gm 0.47821 0. 32 0.04782 0.(productions. Pragmas are declared like tokens, but they may have an associated semantic action that is)awidthshow 634 34 gm 1 64 lw 0.29449 0. 32 0.02944 0.(executed whenever they are recognized by the scanner.)awidthshow -648 -48 xl -1 0 gm (nc -1 0 0 301 6 rc)kp 0 gr -1 300 lin 64 1 lw 1 1 lw 648 48 xl 662 48 gm (nc 50 0 709 538 6 rc)kp F 1 setTxMode bu fc 2 F /|______Helvetica fnt bn -0.17782 0.(PragmaDecl )ashow 662 108 gm 0.49835 0. 32 0.04983 0.(= TokenDecl [SemAction].)awidthshow 676 48 gm 0.46264 0. 32 0.04626 0.(SemAction )awidthshow 676 108 gm 1 64 lw -0.05186 0.(= "\(." )ashow 2 fs bu fc 2 F /|______Helvetica-Oblique fnt bn -0.06367 0.(arbitraryText)ashow 0 fs bu fc 2 F /|______Helvetica fnt bn -0.05537 0.( ".\)".)ashow -690 -48 xl -1 0 gm (nc -1 0 0 301 6 rc)kp 0 gr -1 300 lin 64 1 lw 1 1 lw F T cp %%Page: ? 8 op 0 0 xl 1 1 pen 20 206 gm (nc 746 0 781 538 6 rc)kp 29 34 gm (nc 0 0 35 538 6 rc)kp F 1 setTxMode 0 fs 9 fz bu fc 2 F /|______Helvetica fnt bn (8)show 64 34 gm (nc 54 0 727 538 6 rc)kp 10 fz bu fc 2 F /|______Helvetica fnt bn 0.01770 0.(Example)ashow 78 48 gm -0.01319 0.(option = "$" {letter} . )ashow 78 170 gm -0.44213 0.(\(. )ashow 78 181 gm 2 fs bu fc 2 F /|______Helvetica-Oblique fnt bn 0.01193 0.(Scanner)ashow 0 fs bu fc 2 F /|______Helvetica fnt bn 0.01217 0.(.GetName\()ashow 2 fs bu fc 2 F /|______Helvetica-Oblique fnt bn 0.01193 0.(Scanner)ashow 0 fs bu fc 2 F /|______Helvetica fnt bn 0.03433 0. 32 0.00343 0.(.pos, )awidthshow 2 fs bu fc 2 F /|______Helvetica-Oblique fnt bn 0.01193 0.(Scanner)ashow 0 fs bu fc 2 F /|______Helvetica fnt bn 0.02563 0. 32 0.00256 0.(.len, str\); i := 1;)awidthshow 92 181 gm -0.08807 0.(WHILE i < )ashow 2 fs bu fc 2 F /|______Helvetica-Oblique fnt bn -0.09747 0.(Scanner)ashow 0 fs bu fc 2 F /|______Helvetica fnt bn -0.10351 0.(.len DO)ashow 106 193 gm -0.16601 0.(IF str[i] = "A" THEN \311)ashow 120 193 gm -0.09941 0.(ELSIF str[i] = "B" THEN \311)ashow 134 193 gm 0.03778 0.(END;)ashow 148 193 gm -0.41827 0.(INC\(i\))ashow 162 181 gm -0.29519 0.(END .\) )ashow 204 34 gm 3 fs bu fc 2 F /|______Helvetica-BoldOblique fnt bn 0.47216 0.(Comments)ashow 0 fs bu fc 2 F /|______Helvetica fnt bn 1.31088 0. 32 0.13108 0.(. Comments are difficult \(nested comments are even impossible\) to specify with regular)awidthshow 218 34 gm -0.00166 0.(expressions. This makes it necessary to have a special construct to express their structure. Comments are)ashow 232 34 gm 0.59814 0. 32 0.05981 0.(declared by specifying their opening and their closing brackets. It is possible to declare several kinds of)awidthshow 246 34 gm 1 64 lw -0.01480 0.(comments. Comment brackets must not be longer than 2 characters.)ashow -260 -48 xl -1 0 gm (nc -1 0 0 367 6 rc)kp 0 gr -1 366 lin 64 1 lw 1 1 lw 260 48 xl 274 48 gm (nc 54 0 727 538 6 rc)kp 1 64 lw F 1 setTxMode bu fc 2 F /|______Helvetica fnt bn 0.20202 0. 32 0.02020 0.(CommentDecl = "COMMENTS" "FROM" TokenExpr "TO" TokenExpr ["NESTED"].)awidthshow -288 -48 xl -1 0 gm (nc -1 0 0 367 6 rc)kp 0 gr -1 366 lin 64 1 lw 1 1 lw 288 48 xl 316 34 gm (nc 54 0 727 538 6 rc)kp F 1 setTxMode bu fc 2 F /|______Helvetica fnt bn 0.01512 0.(Examples)ashow 330 48 gm -0.08508 0.(COMMENTS FROM "\(*" TO "*\)" NESTED)ashow 344 48 gm -0.11860 0.(COMMENTS FROM "--" TO eol)ashow 386 34 gm 1 64 lw 3 fs bu fc 2 F /|______Helvetica-BoldOblique fnt bn 0.08929 0.(Various)ashow 0 fs bu fc 2 F /|______Helvetica fnt bn 0.33050 0. 32 0.03305 0.(. The following options serve to parameterize the generated scanner.)awidthshow -400 -48 xl -1 0 gm (nc -1 0 0 181 6 rc)kp 0 gr -1 180 lin 64 1 lw 1 1 lw 400 48 xl 414 48 gm (nc 54 0 727 538 6 rc)kp 1 64 lw F 1 setTxMode bu fc 2 F /|______Helvetica fnt bn -0.06849 0.(VariousDecl = "IGNORE" \("CASE" | Set\).)ashow -428 -48 xl -1 0 gm (nc -1 0 0 181 6 rc)kp 0 gr -1 180 lin 64 1 lw 1 1 lw 428 48 xl 456 34 gm (nc 54 0 727 538 6 rc)kp F 1 setTxMode bu fc 2 F /|______Helvetica fnt bn -0.00175 0.(IGNORE CASE specifies that lower case letters are treated like upper case letters in names. IGNORE Set)ashow 470 34 gm -0.01240 0.(specifies the set of meaningless characters that are to be skipped by the scanner \(e.g., tabulators and eol\).)ashow 484 34 gm -0.02615 0.(Blank is meaningless by default.)ashow 526 34 gm 1 fs bu fc 2 F /|______Helvetica-Bold fnt bn 3.99993 0. 32 0.39999 0.(2.3 Parser Specification)awidthshow 554 34 gm 0 fs bu fc 2 F /|______Helvetica fnt bn 1.02783 0. 32 0.10278 0.(The parser specification is the main part of the compiler description. It contains the productions of an)awidthshow 568 34 gm 0.43395 0. 32 0.04339 0.(attributed grammar specifying the syntax of the language to be recognized as well as its translation. The)awidthshow 582 34 gm 0.03601 0. 32 0.00360 0.(productions may be given in any order. References to yet undeclared nonterminals are allowed. Any name)awidthshow 596 34 gm 0.92514 0. 32 0.09251 0.(that is not declared as a terminal token is considered to be a nonterminal. There must be exactly one)awidthshow 610 34 gm 1 64 lw -0.03601 0.(production for every nonterminal. There must be a production for the start symbol \(the grammar name\).)ashow -624 -48 xl -1 0 gm (nc -1 0 0 358 6 rc)kp 0 gr -1 357 lin 64 1 lw 1 1 lw 624 48 xl 638 48 gm (nc 54 0 727 538 6 rc)kp F 1 setTxMode bu fc 2 F /|______Helvetica fnt bn 0.03417 0. 32 0.00341 0.(ParserSpecification )awidthshow 638 142 gm (=)show 638 153 gm 0.27618 0. 32 0.02761 0.("PRODUCTIONS" {Production}.)awidthshow 652 48 gm 0.71563 0. 32 0.07156 0.(Production )awidthshow 652 142 gm (=)show 652 153 gm 0.19561 0. 32 0.01956 0.(ident [FormalAttributes] [LocalDecl] "=" Expression "." .)awidthshow 666 48 gm 0.04467 0.(FormalAttributes)ashow 666 142 gm -0.61819 0.(= )ashow 666 153 gm -0.01379 0.("<" )ashow 2 fs bu fc 2 F /|______Helvetica-Oblique fnt bn -0.01515 0.(arbitraryText)ashow 0 fs bu fc 2 F /|______Helvetica fnt bn -0.01623 0.( ">".)ashow 680 48 gm 0.01322 0.(LocalDecl)ashow 680 142 gm (=)show 680 153 gm -0.02990 0.("\(." )ashow 2 fs bu fc 2 F /|______Helvetica-Oblique fnt bn -0.04035 0.(arbitraryText)ashow 0 fs bu fc 2 F /|______Helvetica fnt bn -0.03509 0.( ".\)".)ashow 694 48 gm 0.13296 0.(Symbol)ashow 694 142 gm (=)show 694 153 gm 1 64 lw -0.00360 0.(ident | string.)ashow -708 -48 xl -1 0 gm (nc -1 0 0 358 6 rc)kp 0 gr -1 357 lin 64 1 lw 1 1 lw F T cp %%Page: ? 9 op 0 0 xl 1 1 pen 20 210 gm (nc 746 0 781 538 6 rc)kp 29 500 gm (nc 0 0 35 538 6 rc)kp F 1 setTxMode 0 fs 9 fz bu fc 2 F /|______Helvetica fnt bn (9)show 57 34 gm (nc 47 0 734 538 6 rc)kp 3 fs 10 fz bu fc 2 F /|______Helvetica-BoldOblique fnt bn 0.17208 0.(Productions)ashow 0 fs bu fc 2 F /|______Helvetica fnt bn 0.52062 0. 32 0.05206 0.(. A production may be considered as a procedure that parses a nonterminal. It has its own)awidthshow 71 34 gm 0.44586 0. 32 0.04458 0.(scope for attributes and local objects and is made up of a left-hand side and a right-hand side which are)awidthshow 85 34 gm 0.90667 0. 32 0.09066 0.(separated by an equal sign. The left-hand side specifies the name of the nonterminal together with its)awidthshow 99 34 gm 0.58822 0. 32 0.05882 0.(formal attributes and local declarations. The right-hand side consists of a context-free EBNF expression)awidthshow 113 34 gm -0.01129 0.(that specifies the structure of the nonterminal as well as its translation. The formal attributes are written like)ashow 127 34 gm 0.68359 0. 32 0.06835 0.(formal parameters in Oberon. They are enclosed in angle brackets. In analogy to input parameters and)awidthshow 141 34 gm 0.19622 0. 32 0.01962 0.(output parameters \(variable parameters\) we use the terms input attributes and output attributes. The local)awidthshow 155 34 gm -0.01489 0.(declarations are arbitrary Oberon declarations enclosed in "\(." and ".\)". A production constitutes a scope for)ashow 169 34 gm 0.06271 0. 32 0.00627 0.(its formal attributes and its locally declared objects. Terminals and nonterminals, globally declared objects,)awidthshow 183 34 gm -0.00746 0.(and imported modules are visible in any production.)ashow 211 34 gm 0.01770 0.(Example)ashow 225 48 gm -0.01081 0.(Expression )ashow 225 227 gm -0.12969 0.(\(. VAR y: Item; operator: INTEGER; .\))ashow 239 48 gm -0.39062 0.(= \311 .)ashow 267 34 gm 3 fs bu fc 2 F /|______Helvetica-BoldOblique fnt bn 0.57594 0.(Expressions)ashow 0 fs bu fc 2 F /|______Helvetica fnt bn 1.84921 0. 32 0.18492 0.(. An EBNF expression defines the context-free structure of some part of the source)awidthshow 281 34 gm 0.99731 0. 32 0.09973 0.(language together with attributes and semantic actions that specify the translation of this part into the)awidthshow 295 34 gm 1 64 lw 0.29937 0. 32 0.02993 0.(target language.)awidthshow -309 -48 xl -1 0 gm (nc -1 0 0 358 6 rc)kp 0 gr -1 357 lin 64 1 lw 1 1 lw 309 48 xl 323 48 gm (nc 47 0 734 538 6 rc)kp F 1 setTxMode bu fc 2 F /|______Helvetica fnt bn 0.38421 0. 32 0.03842 0.(Expression )awidthshow 323 142 gm (=)show 323 153 gm -0.15715 0.(Term {"|" Term}.)ashow 337 48 gm -0.27529 0.(Term )ashow 337 142 gm (=)show 337 153 gm -0.12672 0.(Factor {Factor}.)ashow 351 48 gm -0.06649 0.(Factor)ashow 351 142 gm (=)show 351 153 gm 0.68481 0. 32 0.06848 0.(["WEAK"] Symbol [Attributes])awidthshow 365 142 gm (|)show 365 153 gm 0.20718 0.(SemAction)ashow 379 142 gm (|)show 379 153 gm -0.08740 0.("ANY" )ashow 393 142 gm (|)show 393 153 gm 0.02436 0.("SYNC")ashow 407 142 gm (|)show 407 153 gm -0.04248 0.("\(" Expression "\)" | "[" Expression "]" | "{" Expression "}".)ashow 421 48 gm 0.19674 0.(Attributes)ashow 421 142 gm -0.61819 0.(= )ashow 421 153 gm -0.01379 0.("<" )ashow 2 fs bu fc 2 F /|______Helvetica-Oblique fnt bn -0.01515 0.(arbitraryText)ashow 0 fs bu fc 2 F /|______Helvetica fnt bn -0.01623 0.( ">".)ashow 435 48 gm 0.20718 0.(SemAction)ashow 435 142 gm (=)show 435 153 gm -0.02990 0.("\(." )ashow 2 fs bu fc 2 F /|______Helvetica-Oblique fnt bn -0.04035 0.(arbitraryText)ashow 0 fs bu fc 2 F /|______Helvetica fnt bn -0.03509 0.( ".\)".)ashow 449 48 gm 0.13296 0.(Symbol)ashow 449 142 gm (=)show 449 153 gm 1 64 lw -0.00360 0.(ident | string.)ashow -463 -48 xl -1 0 gm (nc -1 0 0 358 6 rc)kp 0 gr -1 357 lin 64 1 lw 1 1 lw 463 48 xl 491 34 gm (nc 47 0 734 538 6 rc)kp F 1 setTxMode bu fc 2 F /|______Helvetica fnt bn 0.30166 0. 32 0.03016 0.(Nonterminals may have attributes. They are written like actual parameters in Oberon and are enclosed in)awidthshow 505 34 gm -0.00680 0.(angle brackets. If a nonterminal has formal attributes, every occurrence of this nonterminal must have a list)ashow 519 34 gm -0.00680 0.(of actual attributes that correspond to the formal attributes according to the parameter compatibility rules of)ashow 533 34 gm 0.60333 0. 32 0.06033 0.(Oberon. The conformance, however, is only checked when the generated parser module is compiled. A)awidthshow 547 34 gm -0.01588 0.(semantic action is an arbitrary sequence of Oberon statements enclosed in "\(." and ".\)".)ashow 575 34 gm 0.85784 0. 32 0.08578 0.(The symbol ANY denotes any terminal that is not an alternative of this ANY symbol. It can be used to)awidthshow 589 34 gm 0.08193 0. 32 0.00819 0.(conveniently parse structures that contain arbitrary text. For example, the translation of a Cocol/R attribute)awidthshow 603 34 gm -0.08476 0.(list looks as follows:)ashow 631 48 gm -0.01863 0.(Attributes =)ashow 645 62 gm 0.53022 0.("<")ashow 645 142 gm -0.04251 0.(\(. pos := Scanner.pos + 1 .\))ashow 659 62 gm -0.30964 0.({ANY})ashow 673 62 gm 0.53022 0.(">")ashow 673 142 gm -0.06352 0.(\(. len := Scanner.pos - pos .\) .)ashow 701 34 gm 0.03234 0. 32 0.00323 0.(In this example the closing angle bracket is an implicit alternative of the ANY symbol in curly brackets. The)awidthshow 715 34 gm 0.16845 0. 32 0.01684 0.(meaning is that ANY matches any terminal except ">". )awidthshow 2 fs bu fc 2 F /|______Helvetica-Oblique fnt bn 0.05068 0.(Scanner.pos)ashow 0 fs bu fc 2 F /|______Helvetica fnt bn 0.14007 0. 32 0.01400 0.( is the source text position of the most)awidthshow 729 34 gm 0.06134 0. 32 0.00613 0.(recently recognized terminal. It is exported by the generated scanner \(see Section 3\).)awidthshow F T cp %%Page: ? 10 op 0 0 xl 1 1 pen 20 412 gm (nc 746 0 781 538 6 rc)kp 29 34 gm (nc 0 0 35 538 6 rc)kp F 1 setTxMode 0 fs 9 fz bu fc 2 F /|______Helvetica fnt bn (10)show 59 34 gm (nc 49 0 680 538 6 rc)kp 3 fs 10 fz bu fc 2 F /|______Helvetica-BoldOblique fnt bn 0.13023 0.(Error-handling)ashow 0 fs bu fc 2 F /|______Helvetica fnt bn 0.41915 0. 32 0.04191 0.(. The programmer has to give some hints in order to allow Coco/R to generate good and)awidthshow 73 34 gm 1.06613 0. 32 0.10661 0.(efficient error-handling. First, )awidthshow 2 fs bu fc 2 F /|______Helvetica-Oblique fnt bn 1.59698 0. 32 0.15969 0.(synchronization points)awidthshow 0 fs bu fc 2 F /|______Helvetica fnt bn 0.80795 0. 32 0.08079 0.( have to be specified. A synchronization point is a)awidthshow 87 34 gm 1.08688 0. 32 0.10868 0.(location in the grammar where especially safe terminals are expected that are hardly ever missing or)awidthshow 101 34 gm 0.32455 0. 32 0.03245 0.(mistyped. When the generated parser reaches such a point, it adjusts the input to the next symbol that is)awidthshow 115 34 gm 0.23025 0. 32 0.02302 0.(expected at this point. In most languages good candidates for synchronization points are the beginning of)awidthshow 129 34 gm 1.48040 0. 32 0.14804 0.(a statement \(where IF, WHILE, etc. are expected\), the beginning of a declaration sequence \(where)awidthshow 143 34 gm 1.78939 0. 32 0.17893 0.(CONST, VAR, etc. are expected\) and the beginning of a type \(where RECORD, ARRAY, etc. are)awidthshow 157 34 gm 0.78140 0. 32 0.07814 0.(expected\). The end-of-file symbol is always among the synchronization symbols which guarantees that)awidthshow 171 34 gm 0.59951 0. 32 0.05995 0.(synchronization terminates at least at the end of the source text. A synchronization point is specified by)awidthshow 185 34 gm -0.04495 0.(the symbol SYNC.)ashow 213 34 gm 0.70373 0. 32 0.07037 0.(Error-handling can further be improved by specifying which terminals are "weak" in a certain context. A)awidthshow 227 34 gm 2 fs bu fc 2 F /|______Helvetica-Oblique fnt bn 0.11657 0. 32 0.01165 0.(weak terminal)awidthshow 0 fs bu fc 2 F /|______Helvetica fnt bn 0.07080 0. 32 0.00708 0.( is a symbol that is often mistyped or missing, such as the semicolon between statements. A)awidthshow 241 34 gm 0.57525 0. 32 0.05752 0.(weak terminal is denoted by preceding it with the keyword WEAK. When the generated parser does not)awidthshow 255 34 gm 0.26306 0. 32 0.02630 0.(find a terminal specified as weak, it adjusts the input to the next symbol that is either a legal successor of)awidthshow 269 34 gm 0.10681 0. 32 0.01068 0.(the weak symbol or a symbol expected at any synchronization point \(symbols expected at synchronization)awidthshow 283 34 gm 0.03601 0. 32 0.00360 0.(points are considered to be very "strong", so that it makes sense that they never be skipped\).)awidthshow 311 34 gm 0.01770 0.(Example)ashow 325 48 gm 0.84762 0. 32 0.08476 0.(StatementSeq )awidthshow 325 119 gm 0.15625 0. 32 0.01562 0.(= Statement {WEAK ";" Statement}.)awidthshow 339 48 gm -0.12156 0.(Declaration )ashow 339 119 gm -0.19483 0.(= SYNC \("CONST" \311 | "TYPE" \311 | "VAR" \311 | \311\).)ashow 381 34 gm 3 fs bu fc 2 F /|______Helvetica-BoldOblique fnt bn 2.53768 0. 32 0.25376 0.(LL\(1\) requirements)awidthshow 0 fs bu fc 2 F /|______Helvetica fnt bn 1.46850 0. 32 0.14685 0.(. Recursive descent parsing requires that the grammar of the parsed language)awidthshow 395 34 gm 0.01220 0. 32 0.00122 0.(satisfies the LL\(1\) property. This means that at any point in the grammar the parser must be able to decide)awidthshow 409 34 gm 0.27557 0. 32 0.02755 0.(on the basis of a single lookahead symbol which of several possible alternatives have to be selected. For)awidthshow 423 34 gm 0.19577 0. 32 0.01957 0.(example, the following production is not LL\(1\):)awidthshow 451 48 gm 0.34362 0. 32 0.03436 0.(Statement )awidthshow 451 102 gm (=)show 451 113 gm 0.64926 0. 32 0.06492 0.(ident ":=" Expression)awidthshow 465 102 gm (|)show 465 113 gm 0.46524 0. 32 0.04652 0.(ident ["\(" ExpressionList "\)"].)awidthshow 493 34 gm 1.08657 0. 32 0.10865 0.(Both alternatives start with the symbol )awidthshow 2 fs bu fc 2 F /|______Helvetica-Oblique fnt bn 0.27523 0.(ident)ashow 0 fs bu fc 2 F /|______Helvetica fnt bn 1.10260 0. 32 0.11026 0.( and the parser cannot distinguish between them when it)awidthshow 507 34 gm 1.83364 0. 32 0.18336 0.(comes to a statement and )awidthshow 2 fs bu fc 2 F /|______Helvetica-Oblique fnt bn 0.50601 0.(ident)ashow 0 fs bu fc 2 F /|______Helvetica fnt bn 1.90460 0. 32 0.19046 0.( is the next input symbol. However, the production can easily be)awidthshow 521 34 gm 0.30853 0. 32 0.03085 0.(transformed into)awidthshow 549 48 gm -0.01583 0.(Statement = ident \( ":=" Expression | ["\(" ExpressionList "\)"] \).)ashow 577 34 gm -0.07530 0.(where all alternatives start with distinct symbols. There are LL\(1\) conflicts that are not as easy to detect as in)ashow 591 34 gm 0.11795 0. 32 0.01179 0.(the above example. For a programmer, it can be hard to find them if he has no tool to check the grammar.)awidthshow 605 34 gm 0.87448 0. 32 0.08744 0.(The result would be a parser that in some situations selects a wrong alternative. Coco/R checks if the)awidthshow 619 34 gm 0.34759 0. 32 0.03475 0.(grammar satisfies the LL\(1\) property and gives appropriate error messages that show how to correct any)awidthshow 633 34 gm 0.05494 0.(violations.)ashow F T cp %%Page: ? 11 op 0 0 xl 1 1 pen 20 79 gm (nc 746 0 781 538 6 rc)kp 29 495 gm (nc 0 0 35 538 6 rc)kp F 1 setTxMode 0 fs 9 fz bu fc 2 F /|______Helvetica fnt bn (11)show 64 34 gm (nc 54 0 727 538 6 rc)kp 1 fs 10 fz bu fc 2 F /|______Helvetica-Bold fnt bn 2.63519 0. 32 0.26351 0.(3. Using Coco/R to Generate a Compiler)awidthshow 92 34 gm 0 fs bu fc 2 F /|______Helvetica fnt bn 0.33432 0. 32 0.03343 0.(The attributed grammar is the central document of a compiler implementation with Coco/R. A user has to)awidthshow 106 34 gm -0.07031 0.(perform the following tasks in order to write a compiler: )ashow 134 48 gm -0.05784 0.(1. )ashow 134 62 gm -0.14274 0.(Write an attributed grammar; )ashow 148 48 gm -0.05784 0.(2. )ashow 148 62 gm -0.07896 0.(Write semantic modules if necessary \(import them in the attributed grammar\); )ashow 162 48 gm -0.05784 0.(3. )ashow 162 62 gm -0.09533 0.(Use Coco/R to generate a scanner and a parser from the attributed grammar; )ashow 176 48 gm -0.05784 0.(4. )ashow 176 62 gm -0.14849 0.(Write a main module that calls the parser. )ashow 204 34 gm 0.05172 0. 32 0.00517 0.(The command)awidthshow 232 48 gm -0.03492 0.(Coco.Compile )ashow 2 fs bu fc 2 F /|______Helvetica-Oblique fnt bn -0.04330 0.(name)ashow 0 fs bu fc 2 F /|______Helvetica fnt bn -0.02107 0.( [ "/" {)ashow 2 fs bu fc 2 F /|______Helvetica-Oblique fnt bn -0.02566 0.(letter)ashow 0 fs bu fc 2 F /|______Helvetica fnt bn -0.03082 0.(} ])ashow 260 34 gm 0.69732 0. 32 0.06973 0.(translates the compiler description in file )awidthshow 2 fs bu fc 2 F /|______Helvetica-Oblique fnt bn 0.25105 0.(name)ashow 0 fs bu fc 2 F /|______Helvetica fnt bn 0.61813 0. 32 0.06181 0.( \(with the grammar name )awidthshow 2 fs bu fc 2 F /|______Helvetica-Oblique fnt bn 0.31239 0.(G)ashow 0 fs bu fc 2 F /|______Helvetica fnt bn 0.65505 0. 32 0.06550 0.(, say\) into a scanner module)awidthshow 274 34 gm 2 fs bu fc 2 F /|______Helvetica-Oblique fnt bn (G)show 0 fs bu fc 2 F /|______Helvetica fnt bn -0.02575 0.(S.Mod and a parser module )ashow 2 fs bu fc 2 F /|______Helvetica-Oblique fnt bn (G)show 0 fs bu fc 2 F /|______Helvetica fnt bn -0.02487 0.(P.Mod. The following options may be specified)ashow 302 48 gm (S)show 302 62 gm -0.02915 0.(prints the set of start and successor symbols for every nonterminal)ashow 316 48 gm (X)show 316 62 gm -0.07540 0.(prints a cross-reference list of all terminals and nonterminals)ashow 358 34 gm 1 fs bu fc 2 F /|______Helvetica-Bold fnt bn 4.10675 0. 32 0.41067 0.(3.1 Scanner Interface)awidthshow 386 48 gm 0 fs bu fc 2 F /|______Helvetica fnt bn -0.12054 0.(DEFINITION )ashow 2 fs bu fc 2 F /|______Helvetica-Oblique fnt bn -0.17352 0.(G)ashow 0 fs bu fc 2 F /|______Helvetica fnt bn -0.10484 0.(S; \(*generated scanner*\))ashow 400 62 gm -0.12867 0.(IMPORT Files;)ashow 414 62 gm 0.22053 0.(VAR)ashow 428 76 gm -0.04351 0.(src: Files.File;)ashow 428 224 gm 0.03646 0. 32 0.00364 0.(\(*source file; to be opened by the caller*\))awidthshow 442 76 gm -0.07446 0.(pos: LONGINT;)ashow 442 224 gm 0.17059 0. 32 0.01705 0.(\(*source file position of current token*\))awidthshow 456 76 gm -0.06800 0.(line, col, len: INTEGER;)ashow 456 224 gm 0.16784 0. 32 0.01678 0.(\(*line, column, and length of current token*\))awidthshow 470 76 gm -0.08749 0.(Error: PROCEDURE \(n: INTEGER; pos: LONGINT\); \(*install error message procedure here*\))ashow 484 62 gm 0.17730 0. 32 0.01773 0.(PROCEDURE Reset;)awidthshow 498 62 gm -0.12507 0.(PROCEDURE Get\(VAR sym: INTEGER\);)ashow 512 62 gm -0.12226 0.(PROCEDURE GetName\(pos: LONGINT; len: INTEGER; VAR name: ARRAY OF CHAR\);)ashow 526 48 gm -0.16174 0.(END )ashow 2 fs bu fc 2 F /|______Helvetica-Oblique fnt bn -0.21067 0.(G)ashow 0 fs bu fc 2 F /|______Helvetica fnt bn -0.25590 0.(S.)ashow 554 34 gm 2 fs bu fc 2 F /|______Helvetica-Oblique fnt bn (Reset)show 0 fs bu fc 2 F /|______Helvetica fnt bn 0.02883 0. 32 0.00288 0.( is called by the parser to initialize the scanner. Note that the main module is responsible to open the)awidthshow 568 34 gm 0.43380 0. 32 0.04338 0.(source file )awidthshow 2 fs bu fc 2 F /|______Helvetica-Oblique fnt bn 0.12757 0.(src)ashow 0 fs bu fc 2 F /|______Helvetica fnt bn 0.40512 0. 32 0.04051 0.( prior to calling the parser. The parser then calls )awidthshow 2 fs bu fc 2 F /|______Helvetica-Oblique fnt bn 0.15426 0.(Get)ashow 0 fs bu fc 2 F /|______Helvetica fnt bn 0.44448 0. 32 0.04444 0.( repeatedly to get the next token from)awidthshow 582 34 gm 0.44189 0. 32 0.04418 0.(the source text. Information about the most recently recognized token can be found in the variables )awidthshow 2 fs bu fc 2 F /|______Helvetica-Oblique fnt bn 0.14027 0.(pos)ashow 0 fs bu fc 2 F /|______Helvetica fnt bn (,)show 596 34 gm 2 fs bu fc 2 F /|______Helvetica-Oblique fnt bn 0.28717 0.(line)ashow 0 fs bu fc 2 F /|______Helvetica fnt bn 0.34194 0. 32 0.03419 0.(, )awidthshow 2 fs bu fc 2 F /|______Helvetica-Oblique fnt bn 0.31449 0.(col)ashow 0 fs bu fc 2 F /|______Helvetica fnt bn 0.71029 0. 32 0.07102 0.(, and )awidthshow 2 fs bu fc 2 F /|______Helvetica-Oblique fnt bn 0.32826 0.(len)ashow 0 fs bu fc 2 F /|______Helvetica fnt bn 1.17736 0. 32 0.11773 0.(. The procedure )awidthshow 2 fs bu fc 2 F /|______Helvetica-Oblique fnt bn 0.45126 0.(GetName)ashow 0 fs bu fc 2 F /|______Helvetica fnt bn 0.24569 0.(\()ashow 9 fz bu fc 2 F /|______Symbol fnt bn 0.40057 0.(\257)ashow 2 fs 10 fz bu fc 2 F /|______Helvetica-Oblique fnt bn 0.39671 0.(pos)ashow 0 fs bu fc 2 F /|______Helvetica fnt bn 0.20513 0.(,)ashow 9 fz bu fc 2 F /|______Symbol fnt bn 0.40057 0.(\257)ashow 2 fs 10 fz bu fc 2 F /|______Helvetica-Oblique fnt bn 0.84991 0. 32 0.08499 0.( len)awidthshow 0 fs bu fc 2 F /|______Helvetica fnt bn 0.34194 0. 32 0.03419 0.(, )awidthshow 9 fz bu fc 2 F /|______Symbol fnt bn 0.40057 0.(\255)ashow 2 fs 10 fz bu fc 2 F /|______Helvetica-Oblique fnt bn 0.46157 0.(name)ashow 0 fs bu fc 2 F /|______Helvetica fnt bn 0.95214 0. 32 0.09521 0.(\) can be used to obtain the text of the)awidthshow 610 34 gm 0.17974 0. 32 0.01797 0.(token at position )awidthshow 2 fs bu fc 2 F /|______Helvetica-Oblique fnt bn 0.06132 0.(pos)ashow 0 fs bu fc 2 F /|______Helvetica fnt bn 0.14160 0. 32 0.01416 0.( with length )awidthshow 2 fs bu fc 2 F /|______Helvetica-Oblique fnt bn 0.05073 0.(len)ashow 0 fs bu fc 2 F /|______Helvetica fnt bn (.)show 638 34 gm 2 fs bu fc 2 F /|______Helvetica-Oblique fnt bn 0.27221 0. 32 0.02722 0.(Error messages)awidthshow 0 fs bu fc 2 F /|______Helvetica fnt bn 0.14755 0. 32 0.01475 0.(. For every syntax error the parser calls the procedure variable )awidthshow 2 fs bu fc 2 F /|______Helvetica-Oblique fnt bn 0.04115 0.(Error)ashow 0 fs bu fc 2 F /|______Helvetica fnt bn 0.14663 0. 32 0.01466 0.( with an error number)awidthshow 652 34 gm -0.04382 0.(and an error position as parameters. The user can install any procedure that prints a message or that saves)ashow 666 34 gm 0.36758 0. 32 0.03675 0.(the error information for later output. )awidthshow 2 fs bu fc 2 F /|______Helvetica-Oblique fnt bn 0.10032 0.(Error)ashow 0 fs bu fc 2 F /|______Helvetica fnt bn 0.34378 0. 32 0.03437 0.( can also be used to report semantic errors. \(Make sure to use)awidthshow 680 34 gm 0.10345 0. 32 0.01034 0.(semantic error numbers that do not interfere with syntax error numbers; e.g., start semantic error numbers)awidthshow 694 34 gm 0.21545 0. 32 0.02154 0.(at 200.\) The error numbers together with an explanatory text are appended to the generated parser in the)awidthshow 708 34 gm 0.23315 0. 32 0.02331 0.(following form:)awidthshow F T cp %%Page: ? 12 op 0 0 xl 1 1 pen 20 99 gm (nc 746 0 781 538 6 rc)kp 29 34 gm (nc 0 0 35 538 6 rc)kp F 1 setTxMode 0 fs 9 fz bu fc 2 F /|______Helvetica fnt bn (12)show 57 48 gm (nc 47 0 734 538 6 rc)kp 10 fz bu fc 2 F /|______Helvetica fnt bn 0.02822 0. 32 0.00282 0.(| 0: Msg\("EOF expected"\))awidthshow 71 48 gm 0.16082 0. 32 0.01608 0.(| 1: Msg\("ident expected"\))awidthshow 85 48 gm 0.04364 0. 32 0.00436 0.(| 2: Msg\("string expected"\))awidthshow 99 48 gm 0.12619 0. 32 0.01261 0.(| 3: Msg\("number expected"\))awidthshow 113 48 gm (\311)show 141 34 gm -0.02680 0.(This text can be copied to a procedure that prints textual error messages.)ashow 183 34 gm 1 fs bu fc 2 F /|______Helvetica-Bold fnt bn 3.78311 0. 32 0.37831 0.(3.2 Parser Interface)awidthshow 211 48 gm 0 fs bu fc 2 F /|______Helvetica fnt bn -0.14956 0.(DEFINITION )ashow 2 fs bu fc 2 F /|______Helvetica-Oblique fnt bn -0.21530 0.(G)ashow 0 fs bu fc 2 F /|______Helvetica fnt bn -0.12704 0.(P; \(*generated parser*\))ashow 225 62 gm -0.03713 0.(PROCEDURE Parse;)ashow 239 48 gm -0.16174 0.(END )ashow 2 fs bu fc 2 F /|______Helvetica-Oblique fnt bn -0.21067 0.(G)ashow 0 fs bu fc 2 F /|______Helvetica fnt bn -0.25590 0.(P.)ashow 267 34 gm 0.47058 0. 32 0.04705 0.(The main program simply has to open the source file and call )awidthshow 2 fs bu fc 2 F /|______Helvetica-Oblique fnt bn 0.16307 0.(Parse)ashow 0 fs bu fc 2 F /|______Helvetica fnt bn 0.46035 0. 32 0.04603 0.( in order to start the compilation. An)awidthshow 281 34 gm -0.14614 0.(example of a simple main program is:)ashow 309 48 gm 0.62988 0. 32 0.06298 0.(Texts.OpenScanner\(s, Oberon.Par.text, Oberon.Par.pos\); Texts.Scan\(s\);)awidthshow 323 48 gm -0.16676 0.(IF s.class = Texts.Name THEN)ashow 337 62 gm -0.05755 0.(GS.src := Files.Old\(s.s\);)ashow 351 62 gm -0.01737 0.(GS.Error := )ashow 2 fs bu fc 2 F /|______Helvetica-Oblique fnt bn -0.01921 0.(own error message procedure)ashow 0 fs bu fc 2 F /|______Helvetica fnt bn (;)show 365 62 gm -0.20217 0.(IF GS.src # NIL THEN GP.Parse END;)ashow 379 48 gm -0.05427 0.(END)ashow 421 34 gm 1 fs bu fc 2 F /|______Helvetica-Bold fnt bn 2.77236 0. 32 0.27723 0.(3.3 Grammar Tests)awidthshow 449 34 gm 0 fs bu fc 2 F /|______Helvetica fnt bn 1.58843 0. 32 0.15884 0.(Coco/R performs several tests to check if the grammar is well-formed. If one of the following error)awidthshow 463 34 gm (messages is produced, no compiler parts are generated.)show 491 34 gm 2 fs bu fc 2 F /|______Helvetica-Oblique fnt bn -0.00708 0.(No production for X)ashow 505 48 gm 0 fs bu fc 2 F /|______Helvetica fnt bn -0.00283 0.(The nonterminal X has been used, but there is no production for it.)ashow 519 34 gm 2 fs bu fc 2 F /|______Helvetica-Oblique fnt bn -0.01446 0.(X cannot be reached)ashow 533 48 gm 0 fs bu fc 2 F /|______Helvetica fnt bn -0.04469 0.(There is a production for nonterminal X, but X cannot be derived from the start symbol.)ashow 547 34 gm 2 fs bu fc 2 F /|______Helvetica-Oblique fnt bn -0.04403 0.(X cannot be derived to terminals)ashow 561 48 gm 0 fs bu fc 2 F /|______Helvetica fnt bn -0.10134 0.(For example, if there is a production X = "\(" X "\)".)ashow 575 34 gm 2 fs bu fc 2 F /|______Helvetica-Oblique fnt bn -0.48934 0.(X --> Y, Y --> X)ashow 589 48 gm 0 fs bu fc 2 F /|______Helvetica fnt bn -0.12486 0.(X and Y are nonterminals with circular derivations.)ashow 603 34 gm 2 fs bu fc 2 F /|______Helvetica-Oblique fnt bn (Tokens X and Y cannot be distinguished)show 617 48 gm 0 fs bu fc 2 F /|______Helvetica fnt bn -0.07893 0.(The terminal symbols X and Y are declared to have the same structure, e.g.,)ashow 631 62 gm 0.02563 0. 32 0.00256 0.(integer = digit {digit}.)awidthshow 645 62 gm -0.05805 0.(real = digit {digit} ["." {digit}].)ashow 659 48 gm -0.10908 0.(In this example, a digit string can be recognized as an integer or as a real.)ashow 687 34 gm 0.89248 0. 32 0.08924 0.(The following messages are warnings. They may indicate an error but they may also describe desired)awidthshow 701 34 gm 0.21835 0. 32 0.02183 0.(effects. The generated compiler parts are valid. If an LL\(1\) error is reported for a construct X one must be)awidthshow 715 34 gm -0.06115 0.(aware that the generated parser will choose the first of several possible alternatives for X.)ashow F T cp %%Page: ? 13 op 0 0 xl 1 1 pen 20 424 gm (nc 746 0 781 538 6 rc)kp 29 495 gm (nc 0 0 35 538 6 rc)kp F 1 setTxMode 0 fs 9 fz bu fc 2 F /|______Helvetica fnt bn (13)show 59 34 gm (nc 49 0 708 538 6 rc)kp 2 fs 10 fz bu fc 2 F /|______Helvetica-Oblique fnt bn (X deletable)show 73 48 gm 0 fs bu fc 2 F /|______Helvetica fnt bn -0.07884 0.(X can be derived to the empty string, e.g., X = {Y}.)ashow 87 34 gm 2 fs bu fc 2 F /|______Helvetica-Oblique fnt bn -0.12348 0.(LL\(1\) error in X: Y is start of more than one alternative)ashow 101 48 gm 0 fs bu fc 2 F /|______Helvetica fnt bn -0.05706 0.(Several alternatives in the production of X start with the terminal Y, e.g.,)ashow 115 62 gm 0.09506 0. 32 0.00950 0.(Statement = ident ":=" Expression | ident [ActualParameters].)awidthshow 129 34 gm 2 fs bu fc 2 F /|______Helvetica-Oblique fnt bn -0.07868 0.(LL\(1\) error in X: Y is start and successor of deletable structure)ashow 143 48 gm 0 fs bu fc 2 F /|______Helvetica fnt bn -0.03291 0.(Deletable structures are [\311] and {\311}, e.g.,)ashow 157 62 gm 0.42221 0. 32 0.04222 0.(qualident = [ident "."] ident.)awidthshow 171 62 gm 0.31921 0. 32 0.03192 0.(Statement = "IF" Expression "THEN" Statement ["ELSE" Statement].)awidthshow 185 48 gm 0.64086 0. 32 0.06408 0.(The ELSE at the start of the else-part may also be a successor of a statement. This LL\(1\) conflict is)awidthshow 199 48 gm 0.31845 0. 32 0.03184 0.(known under the name "dangling else".)awidthshow 241 34 gm 1 fs bu fc 2 F /|______Helvetica-Bold fnt bn 2.57080 0. 32 0.25708 0.(4. Hints for Advanced Users of Coco/R)awidthshow 283 34 gm 2 fs bu fc 2 F /|______Helvetica-Oblique fnt bn -0.02209 0.(Providing a Hand-Written Scanner)ashow 311 34 gm 0 fs bu fc 2 F /|______Helvetica fnt bn 0.21392 0. 32 0.02139 0.(Scanning is a time-consuming task. The scanner generated by Coco/R is optimized, but it is implemented)awidthshow 325 34 gm 0.94192 0. 32 0.09419 0.(as a deterministic finite automaton, which introduces some overhead. A manual implementation of the)awidthshow 339 34 gm -0.03724 0.(scanner is slightly more efficient. For time-critical applications a programmer may want to generate a parser)ashow 353 34 gm -0.05758 0.(but provide a hand-written scanner. This can be done by declaring all terminal symbols \(including literals\) as)ashow 367 34 gm 0.22964 0. 32 0.02296 0.(tokens but without defining their structure by an EBNF expression, e.g.,)awidthshow 395 48 gm 0.17678 0.(TOKENS)ashow 409 62 gm 0.33131 0.(ident)ashow 423 62 gm 0.22164 0.(number)ashow 437 62 gm ("IF")show 451 62 gm (\311)show 479 34 gm 0.22506 0. 32 0.02250 0.(If a named token is declared without structure, no scanner is generated. Tokens are assigned numbers in)awidthshow 493 34 gm 0.68923 0. 32 0.06892 0.(the order of their declaration; i.e., the first token gets the number 1, the second the number 2, etc. The)awidthshow 507 34 gm 0.70434 0. 32 0.07043 0.(number 0 is reserved for the end-of-file symbol. The hand-written scanner has to return token numbers)awidthshow 521 34 gm 0.06805 0. 32 0.00680 0.(according to this convention. It must have the interface described in Section 3.)awidthshow 563 34 gm 2 fs bu fc 2 F /|______Helvetica-Oblique fnt bn -0.02461 0.(Tailoring the Generated Compiler Parts to One's Needs)ashow 591 34 gm 0 fs bu fc 2 F /|______Helvetica fnt bn 0.29739 0. 32 0.02973 0.(Using a generator usually increases productivity while at the same time flexibility is decreased. There are)awidthshow 605 34 gm 0.54306 0. 32 0.05430 0.(always special cases that can be handled more efficiently in a hand-written implementation. A good tool)awidthshow 619 34 gm 0.54550 0. 32 0.05455 0.(handles routine matters in a standard way but gives the user the chance to change them if he wants to.)awidthshow 633 34 gm -0.02359 0.(Coco/R generates the scanner and the parser from source texts \(so-called frames\) stored under the names)ashow 647 34 gm 2 fs bu fc 2 F /|______Helvetica-Oblique fnt bn 0.29768 0.(Scanner.FRM)ashow 0 fs bu fc 2 F /|______Helvetica fnt bn 0.47225 0. 32 0.04722 0.( and )awidthshow 2 fs bu fc 2 F /|______Helvetica-Oblique fnt bn 0.28608 0.(Parser.FRM)ashow 0 fs bu fc 2 F /|______Helvetica fnt bn 0.91293 0. 32 0.09129 0.(. It does so by inserting grammar-specific parts into these frames. The)awidthshow 661 34 gm 0.93780 0. 32 0.09378 0.(programmer may edit the frames and may therefore change any of the internally used algorithms. For)awidthshow 675 34 gm -0.00823 0.(example, he can Implement a different buffering scheme for input characters.)ashow F T cp %%Page: ? 14 op 0 0 xl 1 1 pen 20 374 gm (nc 746 0 781 538 6 rc)kp 29 34 gm (nc 0 0 35 538 6 rc)kp F 1 setTxMode 0 fs 9 fz bu fc 2 F /|______Helvetica fnt bn (14)show 60 34 gm (nc 50 0 681 538 6 rc)kp 2 fs 10 fz bu fc 2 F /|______Helvetica-Oblique fnt bn 0.50750 0. 32 0.05075 0.(Accessing the Lookahead Token)awidthshow 88 34 gm 0 fs bu fc 2 F /|______Helvetica fnt bn 0.77850 0. 32 0.07785 0.(Section 3 specified the interface of the generated scanner. This interface is not complete. Actually, the)awidthshow 102 34 gm 0.08941 0. 32 0.00894 0.(scanner also exports information about the lookahead token:)awidthshow 130 48 gm 0.03814 0. 32 0.00381 0.(nextPos: LONGINT;)awidthshow 130 227 gm 0.17379 0. 32 0.01737 0.(\(*source file position of the lookahead token*\))awidthshow 144 48 gm 0.21270 0. 32 0.02127 0.(nextLine, nextCol: INTEGER;)awidthshow 144 227 gm 0.08026 0. 32 0.00802 0.(\(*line and column number of the lookahead token*\))awidthshow 172 34 gm 0.37078 0. 32 0.03707 0.(These variables refer to the most recently )awidthshow 2 fs bu fc 2 F /|______Helvetica-Oblique fnt bn 0.12118 0.(scanned)ashow 0 fs bu fc 2 F /|______Helvetica fnt bn 0.37521 0. 32 0.03752 0.( token \(the lookahead token\), while the variables )awidthshow 2 fs bu fc 2 F /|______Helvetica-Oblique fnt bn 0.12059 0.(pos)ashow 0 fs bu fc 2 F /|______Helvetica fnt bn (,)show 186 34 gm 2 fs bu fc 2 F /|______Helvetica-Oblique fnt bn (line)show 0 fs bu fc 2 F /|______Helvetica fnt bn ( and )show 2 fs bu fc 2 F /|______Helvetica-Oblique fnt bn (col)show 0 fs bu fc 2 F /|______Helvetica fnt bn -0.00486 0.( refer to the most recently )ashow 2 fs bu fc 2 F /|______Helvetica-Oblique fnt bn (parsed)show 0 fs bu fc 2 F /|______Helvetica fnt bn ( token.)show 228 34 gm 2 fs bu fc 2 F /|______Helvetica-Oblique fnt bn -0.02769 0.(Controlling the Parser by Semantic Information)ashow 256 34 gm 0 fs bu fc 2 F /|______Helvetica fnt bn -0.00219 0.(Ideally, syntax analysis should be independent of semantic analysis \(symbol table handling, type checking,)ashow 270 34 gm 0.05203 0. 32 0.00520 0.(etc.\). Some languages like Ada and C, however, have constructs that can only be distinguished if one also)awidthshow 284 34 gm 0.75500 0. 32 0.07550 0.(considers semantic information, e.g., the type of the parsed symbols. Even Oberon has constructs that)awidthshow 298 34 gm -0.03598 0.(cannot be parsed by looking at their syntax alone. For example, a designator is defined in Oberon as)ashow 326 48 gm -0.05940 0.(Designator = Qualident {"." ident | "^" | "[" ExprList "]" | "\(" Qualident "\)" }.)ashow 354 34 gm -0.07766 0.(where x\(T\) means a type guard \(i.e., x is asserted to be of type T\). A designator may be used in a statement)ashow 382 48 gm -0.09426 0.(Statement = \311 | Designator ["\(" ExprList "\)"] | \311 .)ashow 410 34 gm 1.90902 0. 32 0.19090 0.(Here x\(T\) can be interpreted as a designator x \(a procedure name\) and a parameter T. The two)awidthshow 424 34 gm 0.68054 0. 32 0.06805 0.(interpretations of x\(T\) can only be distinguished by looking at the type of x. If it is a procedure then the)awidthshow 438 34 gm -0.03605 0.(opening bracket is the start of a parameter list, otherwise the bracket belongs to a type guard.)ashow 466 34 gm 0.75408 0. 32 0.07540 0.(Cocol/R allows control of the parser from within semantic actions to a certain degree. A designator, for)awidthshow 480 34 gm -0.01066 0.(example, can be processed in the following way:)ashow 508 48 gm -0.07012 0.(Designator =)ashow 522 62 gm 0.34149 0. 32 0.03414 0.(Qualident )awidthshow 536 62 gm -0.55903 0.({ \311)ashow 550 62 gm (|)show 550 198 gm -0.10592 0.(\(.)ashow 550 210 gm -0.12097 0.(IF )ashow 2 fs bu fc 2 F /|______Helvetica-Oblique fnt bn -0.13952 0.(x is procedure)ashow 0 fs bu fc 2 F /|______Helvetica fnt bn -0.18528 0.( THEN RETURN END .\))ashow 564 76 gm 0.06820 0. 32 0.00682 0.("\(" Qualident "\)")awidthshow 564 198 gm -0.44213 0.(\(. )ashow 564 210 gm 2 fs bu fc 2 F /|______Helvetica-Oblique fnt bn 0.02212 0. 32 0.00221 0.(process type guard)awidthshow 0 fs bu fc 2 F /|______Helvetica fnt bn ( .\))show 578 62 gm -0.44824 0.(} .)ashow 606 34 gm 0.80352 0. 32 0.08035 0.(When an opening bracket is seen after a )awidthshow 2 fs bu fc 2 F /|______Helvetica-Oblique fnt bn 0.25152 0.(Qualident)ashow 0 fs bu fc 2 F /|______Helvetica fnt bn 0.89080 0. 32 0.08908 0.(, the alternative starting with an opening bracket is)awidthshow 620 34 gm 0.01144 0. 32 0.00114 0.(selected. The first semantic action of this alternative checks for the type of x. If x is a procedure, the parser)awidthshow 634 34 gm 0.32333 0. 32 0.03233 0.(returns from the production and continues in the Statement production.)awidthshow F T cp %%Page: ? 15 op 0 0 xl 1 1 pen 20 352 gm (nc 746 0 781 538 6 rc)kp 29 495 gm (nc 0 0 35 538 6 rc)kp F 1 setTxMode 0 fs 9 fz bu fc 2 F /|______Helvetica fnt bn (15)show 67 34 gm (nc 57 0 725 538 6 rc)kp 1 fs 10 fz bu fc 2 F /|______Helvetica-Bold fnt bn 4.61700 0. 32 0.46170 0.(5. Implementation)awidthshow 95 34 gm 0 fs bu fc 2 F /|______Helvetica fnt bn 0.76904 0. 32 0.07690 0.(Coco/R was written in Oberon on a Ceres workstation. There is also a Modula-2 version for Macintosh)awidthshow 109 34 gm -0.02037 0.(computers. A preliminary version of Coco/R was implemented as a master's thesis \([Senn89]\). Coco/R was)ashow 123 34 gm 0.03356 0. 32 0.00335 0.(used for its own implementation. Like any compiler, it consists of a scanner \(CRS\), a parser \(CRP\), a table)awidthshow 137 34 gm 0.18997 0. 32 0.01899 0.(handler \(CRT\), and two modules for output generation, one for the scanner \(CRA\) and one for the parser)awidthshow 151 34 gm 0.04028 0. 32 0.00402 0.(\(CRX\). During parsing the scanner description is transformed into a non-deterministic finite automaton and)awidthshow 165 34 gm 0.14129 0. 32 0.01412 0.(the attributed grammar is transformed into a graph. These data structures are used for grammar tests and)awidthshow 179 34 gm 1 64 lw 0.20996 0. 32 0.02099 0.(for the generation of the two source modules.)awidthshow -300 -198 xl 0 0 gm (nc -103 0 0 113 6 rc)kp 0 gr -102.5 58.5 -90.5 86.5 0 rc -94 62 gm F 1 setTxMode 9 fz bu fc 2 F /|______Helvetica fnt bn (Coco)show 0 gr -12.5 0.5 -0.5 25.5 0 rc -4 4 gm F 1 setTxMode -0.49874 0.(CRS)ashow 0 gr -72.5 60.5 -60.5 85.5 0 rc -64 64 gm F 1 setTxMode -0.49874 0.(CRP)ashow 0 gr -12.5 60.5 -0.5 84.5 0 rc -4 64 gm F 1 setTxMode -0.74606 0.(CRT)ashow 0 gr -42.5 87.5 -30.5 112.5 0 rc -34 91 gm F 1 setTxMode -0.49874 0.(CRA)ashow 0 gr -42.5 33.5 -30.5 58.5 0 rc -34 37 gm F 1 setTxMode -0.49874 0.(CRX)ashow -12 72 gm (nc -58 0 0 113 6 rc)kp 0 gr -60 72 lin (nc -103 0 0 113 6 rc)kp -65 67 -55 77 75 105 4 ar -48 45 gm -43 45 lin -48 45 gm -48 66 lin -48 102 gm -43 102 lin -48 102 gm -48 78 lin (nc -58 0 0 113 6 rc)kp -60 78 lin (nc -103 0 0 113 6 rc)kp -65 73 -55 83 75 105 4 ar -48 66 gm (nc -58 0 0 113 6 rc)kp -60 66 lin (nc -103 0 0 113 6 rc)kp -65 61 -55 71 75 105 4 ar -18 66 gm -13 66 lin -18 66 gm -18 45 lin (nc -28 0 0 113 6 rc)kp -30 45 lin (nc -103 0 0 113 6 rc)kp -35 40 -25 50 75 105 4 ar -18 78 gm -13 78 lin -18 78 gm -18 99 lin (nc -28 0 0 113 6 rc)kp -30 99 lin (nc -103 0 0 113 6 rc)kp -35 94 -25 104 75 105 4 ar -13 12 gm -78 12 lin -18 12 gm -18 39 lin (nc -28 0 0 113 6 rc)kp -30 39 lin (nc -103 0 0 113 6 rc)kp -35 34 -25 44 75 105 4 ar -51 12 gm -51 60 lin (nc -58 0 0 113 6 rc)kp -60 60 lin (nc -103 0 0 113 6 rc)kp -65 55 -55 65 75 105 4 ar -73 72 gm (nc -88 0 0 113 6 rc)kp -90 72 lin (nc -103 0 0 113 6 rc)kp -95 67 -85 77 75 105 4 ar -78 12 gm -78 66 lin (nc -88 0 0 113 6 rc)kp -90 66 lin (nc -103 0 0 113 6 rc)kp -95 61 -85 71 75 105 4 ar 64 1 lw 1 1 lw 300 198 xl 342 34 gm (nc 57 0 725 538 6 rc)kp F 1 setTxMode 1 fs 10 fz bu fc 2 F /|______Helvetica-Bold fnt bn 4.22378 0. 32 0.42237 0.(5.1 Scanner Generation)awidthshow 370 34 gm 0 fs bu fc 2 F /|______Helvetica fnt bn 0.36285 0. 32 0.03628 0.(During parsing of the compiler description, the token declarations are translated into a syntax graph from)awidthshow 384 34 gm 1.63909 0. 32 0.16390 0.(which a non-deterministic finite automaton is generated. In a second step, this automaton is made)awidthshow 398 34 gm 0.63552 0. 32 0.06355 0.(deterministic. The algorithms for the manipulation of the automaton are described in [M\232ss86]. Figure 1)awidthshow 412 34 gm 1 64 lw 0.40191 0. 32 0.04019 0.(sketches this process.)awidthshow -683 -85 xl 0 0 gm (nc -253 0 0 367 6 rc)kp 64 gr -127 183 0 367 4 rc 0 gr -126.5 183.5 -0.5 366.5 0 rc 64 gr -127 0 0 184 4 rc 0 gr -126.5 0.5 -0.5 183.5 0 rc (nc -82 94 -70 109 6 rc)kp 64 gr -82 91 -70 109 4 ov 0 gr -81.5 91.5 -70.5 108.5 0 ov (nc -85 283 -73 298 6 rc)kp 64 gr -85 280 -73 298 4 ov 0 gr -84.5 280.5 -73.5 297.5 0 ov (nc -42 84 -27 96 6 rc)kp 64 gr -45 84 -27 96 4 ov 0 gr -44.5 84.5 -27.5 95.5 0 ov (nc -43 273 -28 285 6 rc)kp 64 gr -46 273 -28 285 4 ov 0 gr -45.5 273.5 -28.5 284.5 0 ov (nc -253 0 0 367 6 rc)kp 64 gr -253 0 -126 184 4 rc 0 gr -252.5 0.5 -126.5 183.5 0 rc 64 gr -253 183 -126 367 4 rc 0 gr -252.5 183.5 -126.5 366.5 0 rc -212 10 gm F 1 setTxMode 9 fz bu fc 2 F /|______Helvetica fnt bn -0.33288 0.(CHARACTERS)ashow -201 10 gm -0.09483 0.( digit = "0123456789".)ashow -190 10 gm -0.04913 0.( octdigit = "01234567".)ashow -168 10 gm -0.20079 0.(TOKENS)ashow -157 10 gm -0.06816 0.( decimal = digit {digit}.)ashow -146 10 gm 0.03097 0. 32 0.00309 0.( octal = octdigit {octdigit} "B".)awidthshow -200 295 gm 0.12463 0.(digit)ashow -200 250 gm 0.12463 0.(digit)ashow -158 250 gm 0.21356 0.(octdigit)ashow -158 301 gm 0.21356 0.(octdigit)ashow -137 306 gm -0.19628 0.("B")ashow -200 199 gm (decimal :)show -239 52 gm 2 fs bu fc 2 F /|______Helvetica-Oblique fnt bn 0.36727 0. 32 0.03672 0.(regular expression)awidthshow -239 247 gm 0.70709 0. 32 0.07070 0.(syntax graph)awidthshow -113 31 gm 0.41229 0. 32 0.04122 0.(non-deterministic automaton)awidthshow -113 226 gm 0.46539 0. 32 0.04653 0.(deterministic automaton)awidthshow -158 199 gm 0 fs bu fc 2 F /|______Helvetica fnt bn 0.62179 0. 32 0.06217 0.(octal :)awidthshow -203 270 gm (nc -253 0 0 289 6 rc)kp 0 gr -203 291 lin (nc -253 0 0 367 6 rc)kp -208 286 -198 296 165 195 4 ar -203 315 gm -203 324 lin -215 324 lin -215 279 lin (nc -253 0 -205 367 6 rc)kp -203 279 lin (nc -253 0 0 367 6 rc)kp -208 274 -198 284 255 285 4 ar -197 303 gm (nc -253 0 -190 367 6 rc)kp -188 303 lin (nc -253 0 0 367 6 rc)kp -193 298 -183 308 255 285 4 ar -180 301 gm F 1 setTxMode bu fc 2 F /|______Symbol fnt bn (e)show -161 282 gm (nc -253 0 0 295 6 rc)kp 0 gr -161 297 lin (nc -253 0 0 367 6 rc)kp -166 292 -156 302 165 195 4 ar -161 333 gm -161 345 lin -173 345 lin -173 285 lin (nc -253 0 -163 367 6 rc)kp -161 285 lin (nc -253 0 0 367 6 rc)kp -166 280 -156 290 255 285 4 ar -155 312 gm (nc -253 0 -148 367 6 rc)kp -146 312 lin (nc -253 0 0 367 6 rc)kp -151 307 -141 317 255 285 4 ar 64 gr -82 30 -69 43 4 ov 0 gr -81.5 30.5 -69.5 42.5 0 ov 64 gr -85 219 -72 232 4 ov 0 gr -84.5 219.5 -72.5 231.5 0 ov 64 1 lw 1 1 lw 64 gr -82 84 -69 97 4 ov 0 gr -81.5 84.5 -69.5 96.5 0 ov 64 gr -85 273 -72 286 4 ov 0 gr -84.5 273.5 -72.5 285.5 0 ov 1 64 lw 64 gr -52 84 -39 97 4 ov 0 gr -51.5 84.5 -39.5 96.5 0 ov 64 1 lw 1 1 lw 64 gr -52 126 -39 139 4 ov 0 gr -51.5 126.5 -39.5 138.5 0 ov 64 gr -55 315 -42 328 4 ov 0 gr -54.5 315.5 -42.5 327.5 0 ov 1 64 lw -72 34 gm F 1 setTxMode bu fc 2 F /|______Helvetica fnt bn (1)show -75 223 gm (1)show -77 52 gm 0.12463 0.(digit)ashow -80 241 gm ({8, 9})show -62 280 gm ({8, 9})show -47 105 gm (B)show -49 298 gm (B)show -47 43 gm 0.21356 0.(octdigit)ashow -50 232 gm 0.21356 0.(octdigit)ashow -18 76 gm 0.21356 0.(octdigit)ashow -19 265 gm 0.21356 0.(octdigit)ashow -72 110 gm 0.12463 0.(digit)ashow -75 299 gm 0.12463 0.(digit)ashow -72 88 gm (2)show -75 277 gm (2)show -42 88 gm (3)show -42 130 gm (4)show -45 319 gm (4)show -76 42 gm (nc -253 0 0 82 6 rc)kp 0 gr -76 84 lin (nc -253 0 0 367 6 rc)kp -81 79 -71 89 165 195 4 ar -79 231 gm (nc -253 0 0 271 6 rc)kp -79 273 lin (nc -253 0 0 367 6 rc)kp -84 268 -74 278 165 195 4 ar -46 36 gm (nc -253 0 0 82 6 rc)kp -46 84 lin (nc -253 0 0 367 6 rc)kp -51 79 -41 89 165 195 4 ar -49 225 gm (nc -253 0 0 262 6 rc)kp -49 264 lin (nc -253 0 0 367 6 rc)kp -54 259 -44 269 165 195 4 ar -70 36 gm -46 36 lin -73 225 gm -49 225 lin -46 96 gm (nc -253 0 0 124 6 rc)kp -46 126 lin (nc -253 0 0 367 6 rc)kp -51 121 -41 131 165 195 4 ar -49 291 gm (nc -253 0 0 313 6 rc)kp -49 315 lin (nc -253 0 0 367 6 rc)kp -54 310 -44 320 165 195 4 ar -81 96 gm (nc -253 96 0 367 6 rc)kp -80 94 lin (nc -253 0 0 367 6 rc)kp -85 89 -75 99 319 349 4 ar -84 285 gm (nc -253 285 0 367 6 rc)kp -83 283 lin (nc -253 0 0 367 6 rc)kp -88 278 -78 288 319 349 4 ar -39 84 gm (nc -40 0 0 367 6 rc)kp -42 86 lin (nc -253 0 0 367 6 rc)kp -47 81 -37 91 109 139 4 ar -40 273 gm (nc -41 0 0 367 6 rc)kp -43 275 lin (nc -253 0 0 367 6 rc)kp -48 270 -38 280 109 139 4 ar 64 1 lw 1 1 lw 64 gr -55 265 -42 293 23.5 23.5 4 rr 0 gr -54.5 265.5 -42.5 292.5 23.5 23.5 0 rr 1 64 lw -45 268 gm F 1 setTxMode 0.66101 0. 32 0.06610 0.([2, 3])awidthshow -55 279 gm (nc -71 0 0 367 6 rc)kp 0 gr -73 279 lin (nc -253 0 0 367 6 rc)kp -78 274 -68 284 75 105 4 ar 64 1 lw 1 1 lw 2 2 pen -62 146 gm (nc -253 0 0 188 6 rc)kp 32 gr -62 194 lin (nc -253 0 0 367 6 rc)kp -76 180 -46 210 165 195 4 ar -182 146 gm (nc -253 0 0 188 6 rc)kp -182 194 lin (nc -253 0 0 367 6 rc)kp -196 180 -166 210 165 195 4 ar -140 197 gm (nc -253 0 -113 367 6 rc)kp -107 164 lin (nc -253 0 0 367 6 rc)kp -121 150 -91 180 300 330 4 ar 683 85 xl 1 1 pen 706 105 gm (nc 57 0 725 538 6 rc)kp 2.73217 0 rmoveto F 1 setTxMode 1 fs bu fc 2 F /|______Helvetica-Bold fnt bn (Fig. 1)show 0 fs bu fc 2 F /|______Helvetica fnt bn ( Transformation of regular expressions into a deterministic finite automaton)show F T cp %%Page: ? 16 op 0 0 xl 1 1 pen 20 437 gm (nc 746 0 781 538 6 rc)kp 29 34 gm (nc 0 0 35 538 6 rc)kp F 1 setTxMode 0 fs 9 fz bu fc 2 F /|______Helvetica fnt bn (16)show 54 34 gm (nc 44 0 690 538 6 rc)kp 10 fz bu fc 2 F /|______Helvetica fnt bn 0.09826 0. 32 0.00982 0.(The automaton is not generated directly from the regular expressions but from a syntax graph. This allows)awidthshow 68 34 gm 0.25466 0. 32 0.02546 0.(making it more deterministic from the beginning, thus simplifying the later algorithms. Figure 1 shows that)awidthshow 82 34 gm 1.46942 0. 32 0.14694 0.(tokens may have very similar structures, differing only in their last characters. These structures are)awidthshow 96 34 gm 0.91079 0. 32 0.09107 0.(automatically stripped of any disambiguity. The programmer does not have to take care of making the)awidthshow 110 34 gm 0.16586 0. 32 0.01658 0.(beginnings of tokens distinct. Even very complicated structures can be processed like the various kinds of)awidthshow 124 34 gm 1 64 lw -0.03179 0.(numeric constants in Modula-2 \(Figure 2; final states are denoted by bold circles\):)ashow -391 -48 xl 0 0 gm (nc -249 0 0 389 6 rc)kp 64 gr pr -184 168 pl -178 174 pl -175 174 pl -172 171 pl -172 168 pl -178 162 pl 4 ep 0 gr pr -184 168 pl -178 174 pl -175 174 pl -172 171 pl -172 168 pl -178 162 pl 0 ep (nc -49 345 -40 357 6 rc)kp 64 gr -49 342 -40 357 4 ov 0 gr -48.5 342.5 -40.5 356.5 0 ov (nc -249 0 0 389 6 rc)kp 64 gr pr -187 234 pl -196 243 pl -199 243 pl -202 240 pl -202 237 pl -193 228 pl 4 ep 0 gr pr -187 234 pl -196 243 pl -199 243 pl -202 240 pl -202 237 pl -193 228 pl 0 ep 64 gr pr -142 225 pl -151 216 pl -151 213 pl -147 209 pl -145 209 pl -136 218 pl 4 ep 0 gr pr -142 225 pl -151 216 pl -151 213 pl -147 209 pl -145 209 pl -136 218 pl 0 ep -236 4 gm F 1 setTxMode 9 fz bu fc 2 F /|______Helvetica fnt bn -0.03268 0.(integer =)ashow -225 4 gm -0.06776 0.( digit {digit})ashow -214 4 gm -0.10772 0.(| digit {digit} CONTEXT \(".."\))ashow -203 4 gm -0.07946 0.(| digit {hexdigit} "H")ashow -192 4 gm 0.11291 0. 32 0.01129 0.(| octdigit {octdigit} "B".)awidthshow -170 4 gm -0.05148 0.(char =)ashow -159 4 gm 0.01174 0. 32 0.00117 0.( octdigit {octdigit} "C".)awidthshow -137 4 gm -0.15097 0.(real =)ashow -126 4 gm -0.05261 0.( digit {digit} "." {digit})ashow -115 4 gm -0.00845 0.( ["E" ["+"|"-"] digit [digit]].)ashow 64 gr -245 153 -229 169 4 ov 0 gr -244.5 153.5 -229.5 168.5 0 ov 64 1 lw 1 1 lw 64 gr -193 153 -177 169 4 ov 0 gr -192.5 153.5 -177.5 168.5 0 ov 64 gr -193 219 -177 235 4 ov 0 gr -192.5 219.5 -177.5 234.5 0 ov 1 64 lw 64 gr -142 219 -126 235 4 ov 0 gr -141.5 219.5 -126.5 234.5 0 ov 64 1 lw 1 1 lw 64 gr -142 270 -126 286 4 ov 0 gr -141.5 270.5 -126.5 285.5 0 ov 64 gr -52 287 -36 303 4 ov 0 gr -51.5 287.5 -36.5 302.5 0 ov 64 gr -52 330 -36 346 4 ov 0 gr -51.5 330.5 -36.5 345.5 0 ov 1 64 lw 64 gr -94 330 -78 346 4 ov 0 gr -93.5 330.5 -78.5 345.5 0 ov 64 1 lw 1 1 lw 64 gr -136 330 -120 346 4 ov 0 gr -135.5 330.5 -120.5 345.5 0 ov 64 gr -178 330 -162 346 4 ov 0 gr -177.5 330.5 -162.5 345.5 0 ov 1 64 lw 64 gr -136 372 -120 388 4 ov 0 gr -135.5 372.5 -120.5 387.5 0 ov 64 1 lw 1 1 lw 64 gr -16 287 0 303 4 ov 0 gr -15.5 287.5 -0.5 302.5 0 ov 64 gr -82 219 -66 235 4 ov 0 gr -81.5 219.5 -66.5 234.5 0 ov 64 gr -112 186 -96 202 4 ov 0 gr -111.5 186.5 -96.5 201.5 0 ov 1 64 lw -211 163 gm F 1 setTxMode 0.21356 0.(octdigit)ashow -152 190 gm 0.14173 0.(hexdigit)ashow -86 195 gm 0.14173 0.(hexdigit)ashow -119 181 gm 0.14173 0.(hexdigit)ashow -74 163 gm (C)show -107 163 gm (B)show -134 244 gm (H)show -162 268 gm (H)show -74 244 gm (H)show -105 244 gm (H)show -65 307 gm (E)show -59 339 gm (E)show -44 306 gm 0.12463 0.(digit)ashow -101 339 gm 0.12463 0.(digit)ashow -143 339 gm 0.12463 0.(digit)ashow -88 355 gm -0.05267 0.({+, -})ashow -129 351 gm 0.12463 0.(digit)ashow -41 358 gm 0.12463 0.(digit)ashow -26 288 gm 1 fs 12 fz bu fc 2 F /|______Helvetica-Bold fnt bn (.)show -45 165 gm (.)show -140 297 gm (.)show -56 163 gm 0 fs 9 fz bu fc 2 F /|______Helvetica fnt bn (H)show -167 174 gm 0.21356 0.(octdigit)ashow -202 239 gm 0.12463 0.(digit)ashow -234 159 gm (1)show -182 159 gm (2)show -182 225 gm (3)show -131 224 gm (4)show -131 276 gm (5)show -71 225 gm (7)show -101 192 gm (6)show -41 293 gm (8)show -5 293 gm (9)show -41 333 gm (10)show -83 333 gm (11)show -125 333 gm (12)show -125 375 gm (13)show -167 333 gm (14)show -187 179 gm 0.12037 0.({8,9})ashow -135 162 gm 0.06074 0.({A,D,E,F})ashow -160 229 gm 0.08068 0.({A,B,C})ashow -149 229 gm ({D,E,F})show -240 185 gm 0.12037 0.({8,9})ashow -186 168 gm (nc -249 0 0 217 6 rc)kp 0 gr -186 219 lin (nc -249 0 0 389 6 rc)kp -191 214 -181 224 165 195 4 ar -178 227 gm (nc -249 0 -144 389 6 rc)kp -142 227 lin (nc -249 0 0 389 6 rc)kp -147 222 -137 232 255 285 4 ar -139 215 gm (nc -249 0 -138 389 6 rc)kp -136 218 lin (nc -249 0 0 389 6 rc)kp -141 213 -131 223 210 240 4 ar -178 160 gm -43 160 lin -133 160 gm (nc -249 0 0 217 6 rc)kp -133 219 lin (nc -249 0 0 389 6 rc)kp -138 214 -128 224 165 195 4 ar -74 160 gm (nc -249 0 0 217 6 rc)kp -74 219 lin (nc -249 0 0 389 6 rc)kp -79 214 -69 224 165 195 4 ar -82 227 gm (nc -125 0 0 389 6 rc)kp -127 227 lin (nc -249 0 0 389 6 rc)kp -132 222 -122 232 75 105 4 ar -55 160 gm -55 277 lin -134 234 gm (nc -249 0 0 268 6 rc)kp -134 270 lin (nc -249 0 0 389 6 rc)kp -139 265 -129 275 165 195 4 ar -55 277 gm (nc -125 0 0 389 6 rc)kp -127 277 lin (nc -249 0 0 389 6 rc)kp -132 272 -122 282 75 105 4 ar -74 234 gm (nc -249 0 0 274 6 rc)kp -74 276 lin (nc -249 0 0 389 6 rc)kp -79 271 -69 281 165 195 4 ar -184 234 gm -184 277 lin (nc -249 0 -144 389 6 rc)kp -142 277 lin (nc -249 0 0 389 6 rc)kp -147 272 -137 282 255 285 4 ar -196 231 gm (nc -249 0 -195 389 6 rc)kp -193 228 lin (nc -249 0 0 389 6 rc)kp -198 223 -188 233 300 330 4 ar -43 160 gm (nc -249 0 0 284 6 rc)kp -43 286 lin (nc -249 0 0 389 6 rc)kp -48 281 -38 291 165 195 4 ar -186 234 gm -186 294 lin (nc -249 0 -55 389 6 rc)kp -53 294 lin (nc -249 0 0 389 6 rc)kp -58 289 -48 299 255 285 4 ar -37 294 gm (nc -249 0 -19 389 6 rc)kp -17 294 lin (nc -249 0 0 389 6 rc)kp -22 289 -12 299 255 285 4 ar -43 302 gm (nc -249 0 0 328 6 rc)kp -43 330 lin (nc -249 0 0 389 6 rc)kp -48 325 -38 335 165 195 4 ar -52 337 gm (nc -77 0 0 389 6 rc)kp -79 337 lin (nc -249 0 0 389 6 rc)kp -84 332 -74 342 75 105 4 ar -52 300 gm (nc -80 0 0 389 6 rc)kp -82 330 lin (nc -249 0 0 389 6 rc)kp -87 325 -77 335 120 150 4 ar -94 337 gm (nc -119 0 0 389 6 rc)kp -121 337 lin (nc -249 0 0 389 6 rc)kp -126 332 -116 342 75 105 4 ar -136 337 gm (nc -161 0 0 389 6 rc)kp -163 337 lin (nc -249 0 0 389 6 rc)kp -168 332 -158 342 75 105 4 ar -128 372 gm (nc -249 347 0 389 6 rc)kp -128 345 lin (nc -249 0 0 389 6 rc)kp -133 340 -123 350 345 375 4 ar -86 345 gm -86 379 lin (nc -119 0 0 389 6 rc)kp -121 379 lin (nc -249 0 0 389 6 rc)kp -126 374 -116 384 75 105 4 ar -175 165 gm (nc -176 0 0 389 6 rc)kp -178 162 lin (nc -249 0 0 389 6 rc)kp -183 157 -173 167 30 60 4 ar -230 160 gm (nc -249 0 -196 389 6 rc)kp -194 160 lin (nc -249 0 0 389 6 rc)kp -199 155 -189 165 255 285 4 ar -238 168 gm -238 225 lin (nc -249 0 -195 389 6 rc)kp -193 225 lin (nc -249 0 0 389 6 rc)kp -198 220 -188 230 255 285 4 ar -105 160 gm (nc -249 0 0 183 6 rc)kp -105 185 lin (nc -249 0 0 389 6 rc)kp -110 180 -100 190 165 195 4 ar -109 201 gm (nc -125 0 0 389 6 rc)kp -127 219 lin (nc -249 0 0 389 6 rc)kp -132 214 -122 224 120 150 4 ar -105 201 gm (nc -249 0 0 274 6 rc)kp -105 276 lin (nc -249 0 0 389 6 rc)kp -110 271 -100 281 165 195 4 ar -49 348 gm (nc -249 347 0 389 6 rc)kp -49 345 lin (nc -249 0 0 389 6 rc)kp -54 340 -44 350 345 375 4 ar 64 1 lw 1 1 lw 391 48 xl 419 48 gm (nc 44 0 690 538 6 rc)kp F 1 setTxMode 1 fs bu fc 2 F /|______Helvetica-Bold fnt bn 0.05722 0.(Fig.2)ashow 0 fs bu fc 2 F /|______Helvetica fnt bn 0.19714 0. 32 0.01971 0.( Automaton for the various kinds of numeric constants in Modula-2)awidthshow 447 34 gm 10 fz bu fc 2 F /|______Helvetica fnt bn 0.32257 0. 32 0.03225 0.(If speed is important, a finite automaton is not the best possible implementation of a scanner. It would be)awidthshow 461 34 gm 1.67327 0. 32 0.16732 0.(more efficient to implement the recognition of tokens as ordinary procedures like in a hand-written)awidthshow 475 34 gm 0.82321 0. 32 0.08232 0.(scanner. However, if one looks at the Figure 2, one can imagine that it is not easy to generate such a)awidthshow 489 34 gm 1.36077 0. 32 0.13607 0.(scanner automatically. On the other hand, an automaton is space-efficient. Therefore we decided to)awidthshow 503 34 gm 0.72937 0. 32 0.07293 0.(generate the scanner as an automaton. To make it as efficient as possible, the automaton is not table-)awidthshow 517 34 gm 0.14190 0. 32 0.01419 0.(driven but implemented in code. For the token declarations)awidthshow 545 48 gm 0.05355 0. 32 0.00535 0.(ident = letter {letter|digit}.)awidthshow 559 48 gm -0.00881 0.(number = digit {digit}.)ashow 587 34 gm 0.08255 0. 32 0.00825 0.(and the occurrence of the literals "IF", "THEN", "END", "<", and "<=" in the productions of the grammar the)awidthshow 601 34 gm 0.36727 0. 32 0.03672 0.(automaton of Figure 3 is generated. The textual representation of token classes like )awidthshow 2 fs bu fc 2 F /|______Helvetica-Oblique fnt bn 0.09194 0.(ident)ashow 0 fs bu fc 2 F /|______Helvetica fnt bn 0.12771 0. 32 0.01277 0.( or )awidthshow 2 fs bu fc 2 F /|______Helvetica-Oblique fnt bn 0.11981 0.(number)ashow 0 fs bu fc 2 F /|______Helvetica fnt bn 0.30822 0. 32 0.03082 0.( can)awidthshow 615 34 gm 2.55218 0. 32 0.25521 0.(be obtained via the procedure )awidthshow 2 fs bu fc 2 F /|______Helvetica-Oblique fnt bn 0.92396 0.(GetName)ashow 0 fs bu fc 2 F /|______Helvetica fnt bn 0.50308 0.(\()ashow 9 fz bu fc 2 F /|______Symbol fnt bn 0.82017 0.(\257)ashow 2 fs 10 fz bu fc 2 F /|______Helvetica-Oblique fnt bn 0.81227 0.(pos)ashow 0 fs bu fc 2 F /|______Helvetica fnt bn 0.70007 0. 32 0.07000 0.(, )awidthshow 9 fz bu fc 2 F /|______Symbol fnt bn 0.82017 0.(\257)ashow 2 fs 10 fz bu fc 2 F /|______Helvetica-Oblique fnt bn 0.67213 0.(len)ashow 0 fs bu fc 2 F /|______Helvetica fnt bn 0.70007 0. 32 0.07000 0.(, )awidthshow 9 fz bu fc 2 F /|______Symbol fnt bn 0.82017 0.(\255)ashow 2 fs 10 fz bu fc 2 F /|______Helvetica-Oblique fnt bn 0.74761 0.(sourceText)ashow 0 fs bu fc 2 F /|______Helvetica fnt bn 1.94961 0. 32 0.19496 0.(\) where )awidthshow 2 fs bu fc 2 F /|______Helvetica-Oblique fnt bn 0.81227 0.(pos)ashow 0 fs bu fc 2 F /|______Helvetica fnt bn 1.34460 0. 32 0.13446 0.( and )awidthshow 2 fs bu fc 2 F /|______Helvetica-Oblique fnt bn 0.67213 0.(len)ashow 0 fs bu fc 2 F /|______Helvetica fnt bn 1.89819 0. 32 0.18981 0.( are the)awidthshow 629 34 gm 1.78665 0. 32 0.17866 0.(position and length of the token in the source file. Note, that keywords cannot be handled by the)awidthshow 643 34 gm -0.02296 0.(automaton since they have the same structure as identifiers. This fact is taken into account by Coco/R: Any)ashow 657 34 gm 0.49087 0. 32 0.04908 0.(literal that matches a declared token is stored in a literal list. Later, when an identifier is recognized, it is)awidthshow 671 34 gm 0.42648 0. 32 0.04264 0.(checked whether it is a literal \()awidthshow 2 fs bu fc 2 F /|______Helvetica-Oblique fnt bn 0.13656 0.(CheckLiteral)ashow 0 fs bu fc 2 F /|______Helvetica fnt bn 0.49011 0. 32 0.04901 0.(\), and if so, the literal's token number is returned. Comments)awidthshow 685 34 gm -0.00424 0.(are not handled by the automaton. They are recognized by a special procedure.)ashow F T cp %%Page: ? 17 op 0 0 xl 1 1 pen 20 386 gm (nc 746 0 781 538 6 rc)kp 29 495 gm (nc 0 0 35 538 6 rc)kp 1 64 lw F 1 setTxMode 0 fs 9 fz bu fc 2 F /|______Helvetica fnt bn (17)show -285 -34 xl 0 0 gm (nc -229 118 -220 130 6 rc)kp 64 gr -229 115 -220 130 4 ov 0 gr -228.5 115.5 -220.5 129.5 0 ov (nc -199 118 -190 130 6 rc)kp 64 gr -199 115 -190 130 4 ov 0 gr -198.5 115.5 -190.5 129.5 0 ov 64 1 lw 1 1 lw (nc -235 0 0 443 6 rc)kp 64 gr -232 103 -216 119 4 ov 0 gr -231.5 103.5 -216.5 118.5 0 ov 64 gr -202 103 -186 119 4 ov 0 gr -201.5 103.5 -186.5 118.5 0 ov 64 gr -172 115 -156 131 4 ov 0 gr -171.5 115.5 -156.5 130.5 0 ov 1 64 lw 64 gr -172 79 -156 95 4 ov 0 gr -171.5 79.5 -156.5 94.5 0 ov 64 gr -232 46 -216 62 4 ov 0 gr -231.5 46.5 -216.5 61.5 0 ov -224 134 gm F 1 setTxMode bu fc 2 F /|______Helvetica fnt bn 0.20007 0.(letter)ashow -213 134 gm 0.12463 0.(digit)ashow -191 134 gm 0.12463 0.(digit)ashow -226 68 gm 0.20007 0.(letter)ashow -226 212 gm -0.04966 0.(Get\(VAR sym: INTEGER\))ashow -4 212 gm -0.07183 0.(END Get;)ashow -196 68 gm 0.12463 0.(digit)ashow -166 65 gm (<)show -166 98 gm (=)show -220 52 gm (0)show -220 107 gm (1)show -190 107 gm (2)show -160 83 gm (3)show -148 49 gm (\311)show -160 119 gm (4)show -215 221 gm (\311)show -204 221 gm 0.40817 0. 32 0.04081 0.(state := startState[ch]; pos := chPos; len := 0;)awidthshow -193 221 gm (LOOP)show -182 221 gm -0.07853 0.( NextCh; INC\(len\);)ashow -171 221 gm -0.13423 0.( CASE state OF)ashow -160 221 gm -0.15074 0.( 1: IF \(ch>="A"\) & \(ch<="Z"\) OR \(ch>="a"\) & \(ch<="z"\) )ashow -149 221 gm -0.18882 0.( OR \(ch>="0"\) & \(ch<="9"\) THEN state := 1)ashow -138 221 gm -0.13345 0.( ELSE sym := ident; CheckLiteral; RETURN)ashow -127 221 gm -0.50016 0.( END)ashow -116 221 gm -0.13627 0.( | 2: IF \(ch>="0"\) & \(ch<="9"\) THEN state := 2)ashow -105 221 gm -0.24304 0.( ELSE sym := number; RETURN)ashow -94 221 gm -0.50016 0.( END)ashow -83 221 gm -0.17680 0.( | 3: IF ch = "=" THEN state := 4)ashow -72 221 gm -0.21798 0.( ELSE sym := lss; RETURN)ashow -61 221 gm -0.50016 0.( END)ashow -50 221 gm -0.20364 0.( | 4: sym := leq; RETURN)ashow -39 221 gm -0.50047 0.( \311)ashow -28 221 gm -0.49977 0.( END)ashow -17 221 gm -0.49874 0.(END)ashow -224 61 gm (nc -235 0 0 100 6 rc)kp 0 gr -224 102 lin (nc -235 0 0 443 6 rc)kp -229 97 -219 107 165 195 4 ar -194 54 gm (nc -235 0 0 100 6 rc)kp -194 102 lin (nc -235 0 0 443 6 rc)kp -199 97 -189 107 165 195 4 ar -164 54 gm (nc -235 0 0 76 6 rc)kp -164 78 lin (nc -235 0 0 443 6 rc)kp -169 73 -159 83 165 195 4 ar -164 94 gm (nc -235 0 0 112 6 rc)kp -164 114 lin (nc -235 0 0 443 6 rc)kp -169 109 -159 119 165 195 4 ar -221 120 gm (nc -235 119 0 443 6 rc)kp -222 117 lin (nc -235 0 0 443 6 rc)kp -227 112 -217 122 3 33 4 ar -191 120 gm (nc -235 119 0 443 6 rc)kp -192 117 lin (nc -235 0 0 443 6 rc)kp -197 112 -187 122 3 33 4 ar -217 54 gm -157 54 lin 64 1 lw 1 1 lw 285 34 xl 299 85 gm (nc 50 0 598 538 6 rc)kp F 1 setTxMode 1 fs bu fc 2 F /|______Helvetica-Bold fnt bn 0.27206 0. 32 0.02720 0.(Fig. 3)awidthshow 0 fs bu fc 2 F /|______Helvetica fnt bn 0.27496 0. 32 0.02749 0.( Implementation of an automaton)awidthshow 327 34 gm 10 fz bu fc 2 F /|______Helvetica fnt bn 0.70480 0. 32 0.07048 0.(The most time-consuming task in scanning is reading the source text. The scanner can be speeded up)awidthshow 341 34 gm 0.30303 0. 32 0.03030 0.(significantly if reading can be made faster. To read a text character by character is usually slower than to)awidthshow 355 34 gm -0.04710 0.(read it in blocks that correspond to disk sectors. With the large memories available today, it is even possible)ashow 369 34 gm 0.68328 0. 32 0.06832 0.(to read the whole source text into memory at once. In the Oberon system this is more than three times)awidthshow 383 34 gm 0.56579 0. 32 0.05657 0.(faster than reading it character by character. Even large Oberon programs rarely exceed 40 kilobytes in)awidthshow 397 34 gm 0.45913 0. 32 0.04591 0.(source code. With several megabytes of memory available, this "waste" of 40 kilobytes seems justified if)awidthshow 411 34 gm -0.04696 0.(scanning speed can be improved so drastically \(the overall run time of the compiler is improved by 30%\).)ashow 439 34 gm 0.79376 0. 32 0.07937 0.(Having the whole source text in memory has yet another advantage: the source text can be used as a)awidthshow 453 34 gm 0.15472 0. 32 0.01547 0.(name list. The text of token classes, like identifiers, no longer has to be copied to a separate name list but)awidthshow 467 34 gm 0.22033 0. 32 0.02203 0.(can remain where it is. One simply has to remember its position and its length. This idea is in accordance)awidthshow 481 34 gm 1.16485 0. 32 0.11648 0.(with the principle that during scanning every input character should be "touched" as little as possible)awidthshow 495 34 gm 0.11026 0.([Waite86].)ashow 523 34 gm 1.11862 0. 32 0.11186 0.(Another advantage of this technique is that it permits the backup of the input pointer to any previous)awidthshow 537 34 gm 0.30258 0. 32 0.03025 0.(position. This is useful for handling tokens with CONTEXT phrases in Cocol/R. To recognize such tokens)awidthshow 551 34 gm 0.76873 0. 32 0.07687 0.(the right-hand context has to be analyzed, too. After the token and its context have been scanned, the)awidthshow 565 34 gm -0.02268 0.(input pointer is simply decreased by the length of the CONTEXT phrase, so that this text will be read by the)ashow 579 34 gm -0.04434 0.(scanner again.)ashow F T cp %%Page: ? 18 op 0 0 xl 1 1 pen 20 99 gm (nc 746 0 781 538 6 rc)kp 29 34 gm (nc 0 0 35 538 6 rc)kp F 1 setTxMode 0 fs 9 fz bu fc 2 F /|______Helvetica fnt bn (18)show 60 34 gm (nc 50 0 720 538 6 rc)kp 1 fs 10 fz bu fc 2 F /|______Helvetica-Bold fnt bn 3.91159 0. 32 0.39115 0.(5.2 Parser Generation)awidthshow 88 34 gm 0 fs bu fc 2 F /|______Helvetica fnt bn 0.58898 0. 32 0.05889 0.(The productions of the attributed grammar are translated into procedures of a recursive descent parser.)awidthshow 102 34 gm 0.48248 0. 32 0.04824 0.(However, it is not possible to generate the parser on the fly while the grammar is analyzed since certain)awidthshow 116 34 gm 0.32974 0. 32 0.03297 0.(sets of terminal symbols are required at various locations in the parsing procedures. These sets can only)awidthshow 130 34 gm 0.01449 0. 32 0.00144 0.(be computed when the whole grammar is known. Therefore, the productions are first translated into syntax)awidthshow 144 34 gm 0.77209 0. 32 0.07720 0.(graphs, then the symbol sets are computed, and finally the parsing procedures are generated from the)awidthshow 158 34 gm -0.02291 0.(graphs. The syntax graphs are also used for grammar tests \(completeness, redundancy, LL\(1\) property\).)ashow 186 34 gm 2 fs bu fc 2 F /|______Helvetica-Oblique fnt bn 1.25549 0. 32 0.12554 0.(Syntax graphs)awidthshow 0 fs bu fc 2 F /|______Helvetica fnt bn 0.71319 0. 32 0.07131 0.(. A node is generated for every symbol in the grammar and for every semantic action. A)awidthshow 200 34 gm 0.09628 0. 32 0.00962 0.(sequence of symbols and actions is translated into a sequence of nodes. A semantic action node contains)awidthshow 214 34 gm 1.60842 0. 32 0.16084 0.(the position and the length of the action in the source text. Alternatives, options and iterations are)awidthshow 228 34 gm 1 64 lw 0.08285 0. 32 0.00828 0.(modelled by special nodes of the following form)awidthshow -311 -48 xl 0 0 gm (nc -65 0 0 385 6 rc)kp 64 gr -38 9 -25 40 4 rc 0 gr -37.5 9.5 -25.5 39.5 0 rc 64 gr -38 210 -25 241 4 rc 0 gr -37.5 210.5 -25.5 240.5 0 rc 64 gr -26 9 -13 40 4 rc 0 gr -25.5 9.5 -13.5 39.5 0 rc 64 gr -14 9 -1 40 4 rc 0 gr -13.5 9.5 -1.5 39.5 0 rc 64 gr -26 210 -13 241 4 rc 0 gr -25.5 210.5 -13.5 240.5 0 rc -29 58 gm F 1 setTxMode 9 fz bu fc 2 F /|______Helvetica fnt bn 1.18652 0. 32 0.11865 0.(to successor)awidthshow -29 259 gm 1.18652 0. 32 0.11865 0.(to successor)awidthshow -56 208 gm 2 fs bu fc 2 F /|______Helvetica-Oblique fnt bn 0.16485 0.(option,)ashow -45 208 gm 0.12458 0.(iteration)ashow -47 4 gm 0.14933 0.(alternative)ashow -16 58 gm 0 fs bu fc 2 F /|______Helvetica fnt bn 0.29449 0. 32 0.02944 0.(to start node of alternative)awidthshow -4 58 gm 0.29708 0. 32 0.02970 0.(to next branch)awidthshow -16 259 gm 0.24398 0. 32 0.02439 0.(to start node of inner structure)awidthshow -32 33 gm (nc -65 0 0 49 6 rc)kp 0 gr -32 51 lin (nc -65 0 0 385 6 rc)kp -37 46 -27 56 165 195 4 ar -32 234 gm (nc -65 0 0 250 6 rc)kp -32 252 lin (nc -65 0 0 385 6 rc)kp -37 247 -27 257 165 195 4 ar -20 33 gm (nc -65 0 0 49 6 rc)kp -20 51 lin (nc -65 0 0 385 6 rc)kp -25 46 -15 56 165 195 4 ar -8 33 gm (nc -65 0 0 49 6 rc)kp -8 51 lin (nc -65 0 0 385 6 rc)kp -13 46 -3 56 165 195 4 ar -20 234 gm (nc -65 0 0 250 6 rc)kp -20 252 lin (nc -65 0 0 385 6 rc)kp -25 247 -15 257 165 195 4 ar 64 1 lw 1 1 lw 311 48 xl 339 34 gm (nc 50 0 720 538 6 rc)kp F 1 setTxMode 10 fz bu fc 2 F /|______Helvetica fnt bn 0.30441 0. 32 0.03044 0.(A production like)awidthshow 367 48 gm -0.02561 0.(Expression )ashow 367 204 gm -0.10592 0.(\(.)ashow 367 215 gm -0.14468 0.(VAR y: OGT.Item; op: INTEGER .\))ashow 381 48 gm (=)show 381 62 gm -0.02314 0.(SimExpr )ashow 395 62 gm ([)show 395 76 gm 0.68832 0. 32 0.06883 0.(Relop )awidthshow 395 204 gm -0.10592 0.(\(.)ashow 395 215 gm -0.09780 0.(IF x.typ.form = Bool THEN OGE.MOp\(op, x\) END .\))ashow 409 76 gm -0.02314 0.(SimExpr )ashow 409 204 gm -0.10592 0.(\(.)ashow 409 215 gm -0.06182 0.(OGE.Op\(op, x, y\) .\))ashow 423 62 gm (|)show 423 76 gm -0.07380 0.("IN" SimExpr )ashow 423 204 gm -0.10592 0.(\(.)ashow 423 215 gm -0.17417 0.(OGE.In\(x, y\) .\))ashow 437 62 gm (|)show 437 76 gm -0.08154 0.("IS" )ashow 437 204 gm -0.10592 0.(\(.)ashow 437 215 gm -0.12344 0.(IF x.mode >= Typ THEN err\(112\) END .\))ashow 451 76 gm 0.44128 0. 32 0.04412 0.(qualident )awidthshow 451 204 gm -0.10592 0.(\(.)ashow 451 215 gm -0.09649 0.(IF y.mode = Typ THEN OGE.TypTest\(x, y\) ELSE err\(52\) END .\))ashow 465 62 gm 0.44335 0.(].)ashow 493 34 gm 1 64 lw -0.01289 0.(is translated into the following graph)ashow -673 -48 xl -153 161 gm (nc -162 0 0 370 6 rc)kp 2 fs 9 fz bu fc 2 F /|______Helvetica-Oblique fnt bn 0.24656 0.(opt)ashow -114 182 gm 0.24949 0.(alt)ashow -75 182 gm 0.24949 0.(alt)ashow -36 182 gm 0.24949 0.(alt)ashow -137 88 gm 0 fs bu fc 2 F /|______Helvetica fnt bn (SimExpr)show -138 4 gm 0.16578 0.(Expression)ashow -138 55 gm bu fc 2 F /|______Symbol fnt bn (\336)show -93 295 gm bu fc 2 F /|______Helvetica fnt bn (SimExpr)show -57 244 gm (SimExpr)show -18 280 gm 0.06072 0.(qualident)ashow -93 217 gm -0.12539 0.(RelOp)ashow -93 259 gm 2 fs bu fc 2 F /|______Helvetica-Oblique fnt bn (sem)show -18 244 gm (sem)show -93 349 gm (sem)show -57 298 gm (sem)show -18 334 gm (sem)show -57 217 gm 0 fs bu fc 2 F /|______Helvetica fnt bn (IN)show -18 217 gm 0.49656 0.(IS)ashow -142 129 gm (nc -162 0 0 148 6 rc)kp 0 gr -142 150 lin (nc -162 0 0 370 6 rc)kp -147 145 -137 155 165 195 4 ar -97 243 gm (nc -162 0 0 253 6 rc)kp -97 255 lin (nc -162 0 0 370 6 rc)kp -102 250 -92 260 165 195 4 ar -97 279 gm (nc -162 0 0 289 6 rc)kp -97 291 lin (nc -162 0 0 370 6 rc)kp -102 286 -92 296 165 195 4 ar -22 264 gm (nc -162 0 0 274 6 rc)kp -22 276 lin (nc -162 0 0 370 6 rc)kp -27 271 -17 281 165 195 4 ar -61 228 gm (nc -162 0 0 238 6 rc)kp -61 240 lin (nc -162 0 0 370 6 rc)kp -66 235 -56 245 165 195 4 ar -22 228 gm (nc -162 0 0 238 6 rc)kp -22 240 lin (nc -162 0 0 370 6 rc)kp -27 235 -17 245 165 195 4 ar -97 333 gm (nc -162 0 0 343 6 rc)kp -97 345 lin (nc -162 0 0 370 6 rc)kp -102 340 -92 350 165 195 4 ar -61 282 gm (nc -162 0 0 292 6 rc)kp -61 294 lin (nc -162 0 0 370 6 rc)kp -66 289 -56 299 165 195 4 ar -22 318 gm (nc -162 0 0 328 6 rc)kp -22 330 lin (nc -162 0 0 370 6 rc)kp -27 325 -17 335 165 195 4 ar 64 gr -148 153 -138 181 4 rc 0 gr -147.5 153.5 -138.5 180.5 0 rc 64 gr -112 165 -102 193 4 rc 0 gr -111.5 165.5 -102.5 192.5 0 rc 64 gr -73 165 -63 193 4 rc 0 gr -72.5 165.5 -63.5 192.5 0 rc 64 gr -34 165 -24 193 4 rc 0 gr -33.5 165.5 -24.5 192.5 0 rc 64 gr -139 153 -129 181 4 rc 0 gr -138.5 153.5 -129.5 180.5 0 rc 64 gr -103 165 -93 193 4 rc 0 gr -102.5 165.5 -93.5 192.5 0 rc 64 gr -64 165 -54 193 4 rc 0 gr -63.5 165.5 -54.5 192.5 0 rc 64 gr -25 165 -15 193 4 rc 0 gr -24.5 165.5 -15.5 192.5 0 rc 64 gr -94 165 -84 193 4 rc 0 gr -93.5 165.5 -84.5 192.5 0 rc 64 gr -55 165 -45 193 4 rc 0 gr -54.5 165.5 -45.5 192.5 0 rc 64 gr -16 165 -6 193 4 rc 0 gr -15.5 165.5 -6.5 192.5 0 rc -143 174 gm -143 186 lin -107 186 gm -107 198 lin -68 186 gm -68 198 lin -29 186 gm -29 198 lin -146 186 gm -140 186 lin -110 198 gm -104 198 lin -71 198 gm -65 198 lin -32 198 gm -26 198 lin -133 167 gm (nc -162 0 -117 370 6 rc)kp -115 167 lin (nc -162 0 0 370 6 rc)kp -120 162 -110 172 255 285 4 ar -88 179 gm (nc -162 0 -78 370 6 rc)kp -76 179 lin (nc -162 0 0 370 6 rc)kp -81 174 -71 184 255 285 4 ar -49 179 gm (nc -162 0 -39 370 6 rc)kp -37 179 lin (nc -162 0 0 370 6 rc)kp -42 174 -32 184 255 285 4 ar -98 186 gm (nc -162 0 0 208 6 rc)kp -98 210 lin (nc -162 0 0 370 6 rc)kp -103 205 -93 215 165 195 4 ar -59 186 gm (nc -162 0 0 208 6 rc)kp -59 210 lin (nc -162 0 0 370 6 rc)kp -64 205 -54 215 165 195 4 ar -20 186 gm (nc -162 0 0 208 6 rc)kp -20 210 lin (nc -162 0 0 370 6 rc)kp -25 205 -15 215 165 195 4 ar -10 179 gm -1 179 lin -1 176 gm -1 182 lin 64 1 lw 1 1 lw 673 48 xl 687 48 gm (nc 50 0 720 538 6 rc)kp F 1 setTxMode 1 fs bu fc 2 F /|______Helvetica-Bold fnt bn 0.29739 0. 32 0.02973 0.(Fig. 4)awidthshow 0 fs bu fc 2 F /|______Helvetica fnt bn 0.31021 0. 32 0.03102 0.( Syntax graph for the generation of parsing procedures)awidthshow F T cp %%Page: ? 19 op 0 0 xl 1 1 pen 20 297 gm (nc 746 0 781 538 6 rc)kp 29 495 gm (nc 0 0 35 538 6 rc)kp F 1 setTxMode 0 fs 9 fz bu fc 2 F /|______Helvetica fnt bn (19)show 60 34 gm (nc 50 0 723 538 6 rc)kp 10 fz bu fc 2 F /|______Helvetica fnt bn 0.62149 0. 32 0.06214 0.(Note that this kind of graphs is different from the syntax graphs used for scanner generation \(Figure 1\).)awidthshow 74 34 gm 0.12710 0. 32 0.01271 0.(Alternatives, options and iterations are represented by special nodes. This makes the graphs better suited)awidthshow 88 34 gm 1.12411 0. 32 0.11241 0.(for the generation of recursive descent parsers. Having the graphs and the symbol sets, it is easy to)awidthshow 102 34 gm 0.66116 0. 32 0.06611 0.(generate parsing procedures. A sequence of nodes is translated into a sequence of parsing constructs.)awidthshow 116 34 gm 0.52078 0. 32 0.05207 0.(Semantic actions are simply copied from the source text without modification. The following table shows)awidthshow 130 34 gm -0.07427 0.(that every grammar item can be replaced mechanically by the equivalent parsing item.)ashow 158 159 gm 2 fs bu fc 2 F /|______Helvetica-Oblique fnt bn -0.24090 0.(grammar item)ashow 158 255 gm -0.04055 0.(parsing item)ashow 172 48 gm 0 fs bu fc 2 F /|______Helvetica fnt bn -0.16595 0.(terminal )ashow 172 159 gm (t)show 172 255 gm 0.12496 0.(Expect\(t\))ashow 186 48 gm (nonterminal )show 186 159 gm -0.05879 0.(nt )ashow 186 255 gm -0.09533 0.(nt\(a, b\))ashow 200 48 gm -0.08222 0.(semantic action )ashow 200 159 gm -0.07397 0.(\(. )ashow 2 fs bu fc 2 F /|______Helvetica-Oblique fnt bn -0.12690 0.(anyText)ashow 0 fs bu fc 2 F /|______Helvetica fnt bn -0.11096 0.( .\))ashow 200 255 gm 2 fs bu fc 2 F /|______Helvetica-Oblique fnt bn 0.07272 0.(anyText)ashow 228 34 gm 0 fs bu fc 2 F /|______Helvetica fnt bn 0.04623 0. 32 0.00462 0.(Terminals are recognized by the procedure)awidthshow 256 48 gm -0.05937 0.(PROCEDURE Expect\(s: INTEGER\);)ashow 270 48 gm -0.21556 0.(BEGIN IF sym = s THEN Get ELSE Error\(s\) END)ashow 284 48 gm 0.38421 0. 32 0.03842 0.(END Expect;)awidthshow 312 34 gm 1.18621 0. 32 0.11862 0.(The procedure )awidthshow 2 fs bu fc 2 F /|______Helvetica-Oblique fnt bn 0.31959 0.(Get)ashow 0 fs bu fc 2 F /|______Helvetica fnt bn 0.92086 0. 32 0.09208 0.( requests the next input token from the scanner and stores it in the global variable)awidthshow 326 34 gm 2 fs bu fc 2 F /|______Helvetica-Oblique fnt bn -0.10906 0.(sym)ashow 0 fs bu fc 2 F /|______Helvetica fnt bn -0.07380 0.(. It is also responsible for filtering out pragmas.)ashow 354 48 gm -0.04278 0.(PROCEDURE Get;)ashow 368 48 gm -0.27894 0.(BEGIN)ashow 382 62 gm 0.17639 0. 32 0.01763 0.(LOOP Scanner.Get\(sym\);)awidthshow 396 76 gm -0.15687 0.(IF )ashow 2 fs bu fc 2 F /|______Helvetica-Oblique fnt bn -0.20170 0.(sym is pragma)ashow 0 fs bu fc 2 F /|______Helvetica fnt bn -0.22036 0.( THEN )ashow 2 fs bu fc 2 F /|______Helvetica-Oblique fnt bn -0.17684 0.(Handle it)ashow 0 fs bu fc 2 F /|______Helvetica fnt bn -0.23970 0.( ELSE EXIT END)ashow 410 62 gm -0.05427 0.(END)ashow 424 48 gm -0.11152 0.(END Get;)ashow 452 34 gm 0.69152 0. 32 0.06915 0.(Alternatives, options and iterations are translated into control structures. Whenever possible, redundant)awidthshow 466 34 gm -0.00337 0.(checks are eliminated. The following procedure is generated from the graph in Figure 4.)ashow 494 48 gm -0.05545 0.(PROCEDURE Expression \(VAR x: OGT.Item\);)ashow 508 62 gm -0.11546 0.(VAR y: OGT.Item; op: INTEGER;)ashow 522 48 gm -0.37878 0.(BEGIN )ashow 536 62 gm -0.02070 0.(SimExpr\(x\);)ashow 550 62 gm -0.11595 0.(IF sym IN {eql, neq, lss, leq, gtr, geq, in, is} THEN)ashow 564 76 gm -0.11177 0.(IF sym IN {eql, neq, lss, leq, gtr, geq} THEN)ashow 578 91 gm -0.05162 0.(Relop\(op\); IF x.typ.form = Bool THEN OGE.MOp\(op, x\) END;)ashow 592 91 gm -0.03546 0.(SimExpr\(y\); OGE.Op\(op, x, y\);)ashow 606 76 gm -0.17007 0.(ELSIF sym = in THEN)ashow 620 91 gm -0.10313 0.(Get; SimExpr\(y\); OGE.In\(x, y\);)ashow 634 76 gm 0.47702 0.(ELSE)ashow 648 91 gm -0.10284 0.(Get; IF x.mode >= Typ THEN err\(112\) END;)ashow 662 91 gm -0.06053 0.(qualident\(y\); IF y.mode = Typ THEN OGE.TypTest\(x, y\) ELSE err\(52\) END;)ashow 676 76 gm -0.05427 0.(END)ashow 690 62 gm -0.05427 0.(END)ashow 704 48 gm 0.36727 0. 32 0.03672 0.(END Expression;)awidthshow F T cp %%Page: ? 20 op 0 0 xl 1 1 pen 20 125 gm (nc 746 0 781 538 6 rc)kp 29 34 gm (nc 0 0 35 538 6 rc)kp F 1 setTxMode 0 fs 9 fz bu fc 2 F /|______Helvetica fnt bn (20)show 65 34 gm (nc 55 0 727 538 6 rc)kp 10 fz bu fc 2 F /|______Helvetica fnt bn 1.61132 0. 32 0.16113 0.(A more interesting example is the following production, which also contains iterations. \(For brevity,)awidthshow 79 34 gm -0.03660 0.(semantic actions are not shown.\))ashow 107 48 gm -0.12524 0.(FormalParameters = "\(" [ FormPar { ";" FormPar} ] "\)" [":" qualident]. )ashow 135 34 gm 1 64 lw 0.08804 0. 32 0.00880 0.(The corresponding syntax graph is)awidthshow -274 -48 xl -112 158 gm (nc -121 0 0 384 6 rc)kp 2 fs 9 fz bu fc 2 F /|______Helvetica-Oblique fnt bn 0.24656 0.(opt)ashow -112 305 gm 0.24656 0.(opt)ashow -56 227 gm 0.16804 0.(iter)ashow -99 118 gm 0 fs bu fc 2 F /|______Helvetica fnt bn (\()show -99 208 gm (\))show -45 163 gm -0.16525 0.(FormPar)ashow -4 265 gm -0.16525 0.(FormPar)ashow -61 343 gm 0.06072 0.(qualident)ashow -6 232 gm (;)show -63 310 gm (:)show -100 4 gm -0.03280 0.(FormalParameters)ashow -100 85 gm bu fc 2 F /|______Symbol fnt bn (\336)show -102 126 gm (nc -121 0 0 145 6 rc)kp 0 gr -102 147 lin (nc -121 0 0 384 6 rc)kp -107 142 -97 152 165 195 4 ar -102 216 gm (nc -121 0 0 292 6 rc)kp -102 294 lin (nc -121 0 0 384 6 rc)kp -107 289 -97 299 165 195 4 ar -48 201 gm (nc -121 0 0 211 6 rc)kp -48 213 lin (nc -121 0 0 384 6 rc)kp -53 208 -43 218 165 195 4 ar -9 243 gm (nc -121 0 0 253 6 rc)kp -9 255 lin (nc -121 0 0 384 6 rc)kp -14 250 -4 260 165 195 4 ar -66 321 gm (nc -121 0 0 331 6 rc)kp -66 333 lin (nc -121 0 0 384 6 rc)kp -71 328 -61 338 165 195 4 ar 64 gr -107 150 -97 178 4 rc 0 gr -106.5 150.5 -97.5 177.5 0 rc 64 gr -107 297 -97 325 4 rc 0 gr -106.5 297.5 -97.5 324.5 0 rc 64 gr -53 219 -43 247 4 rc 0 gr -52.5 219.5 -43.5 246.5 0 rc 64 gr -98 150 -88 178 4 rc 0 gr -97.5 150.5 -88.5 177.5 0 rc 64 gr -98 297 -88 325 4 rc 0 gr -97.5 297.5 -88.5 324.5 0 rc 64 gr -44 219 -34 247 4 rc 0 gr -43.5 219.5 -34.5 246.5 0 rc -102 318 gm -102 330 lin -48 240 gm F 32pat -48 252 lin -105 330 gm 0 gr -99 330 lin -92 164 gm (nc -121 0 -58 384 6 rc)kp -56 164 lin (nc -121 0 0 384 6 rc)kp -61 159 -51 169 255 285 4 ar -92 311 gm (nc -121 0 -76 384 6 rc)kp -74 311 lin (nc -121 0 0 384 6 rc)kp -79 306 -69 316 255 285 4 ar -38 233 gm (nc -121 0 -22 384 6 rc)kp -20 233 lin (nc -121 0 0 384 6 rc)kp -25 228 -15 238 255 285 4 ar -102 171 gm (nc -121 0 0 193 6 rc)kp -102 195 lin (nc -121 0 0 384 6 rc)kp -107 190 -97 200 165 195 4 ar -8 303 gm 32 gr -8 315 lin F 32pat -41 315 lin (nc -121 251 0 384 6 rc)kp F 32pat -41 249 lin (nc -121 0 0 384 6 rc)kp -46 244 -36 254 345 375 4 ar -74 252 gm F 32pat -48 252 lin -74 252 gm F 32pat -74 207 lin (nc -90 0 0 384 6 rc)kp F 32pat -92 207 lin (nc -121 0 0 384 6 rc)kp -97 202 -87 212 75 105 4 ar 64 1 lw 1 1 lw 274 48 xl 288 34 gm (nc 55 0 727 538 6 rc)kp F 1 setTxMode 10 fz bu fc 2 F /|______Helvetica fnt bn 0.24398 0. 32 0.02439 0.(Dotted arrows denote pointers to the successors of inner structures. They help in the computation of start)awidthshow 302 34 gm 0.04760 0. 32 0.00476 0.(and successor sets. The graph is translated into the following procedure:)awidthshow 330 48 gm -0.08494 0.(PROCEDURE FormalParameters;)ashow 344 48 gm -0.27894 0.(BEGIN)ashow 358 62 gm 0.08129 0.(Expect\(leftpar\);)ashow 372 62 gm -0.24386 0.(IF sym IN {ident, var} THEN)ashow 386 76 gm -0.09397 0.(FormPar;)ashow 400 76 gm -0.15408 0.(WHILE sym = semicolon DO Get; FormPar END)ashow 414 62 gm 0.03778 0.(END;)ashow 428 62 gm 0.06941 0.(Expect\(rightpar\);)ashow 442 62 gm -0.11325 0.(IF sym = colon THEN Get; qualident END)ashow 456 48 gm -0.12164 0.(END FormalParameters;)ashow 498 34 gm 1 fs bu fc 2 F /|______Helvetica-Bold fnt bn 3.53759 0. 32 0.35375 0.(5.3 Error Recovery)awidthshow 526 34 gm 0 fs bu fc 2 F /|______Helvetica fnt bn 0.37948 0. 32 0.03794 0.(Good and efficient error recovery is difficult in recursive descent parsers since little information about the)awidthshow 540 34 gm -0.09342 0.(parsing process is available when an error occurs. What has to be done in case of an error:)ashow 568 34 gm 0.66255 0.(1.)ashow 568 48 gm -0.02464 0.(Find all symbols with which parsing can be resumed at a certain location in the grammar reachable from)ashow 582 48 gm -0.02687 0.(the error location \(recovery symbols\).)ashow 596 34 gm 0.66255 0.(2.)ashow 596 48 gm -0.01962 0.(Skip the input up to the first symbol that is in the recovery set.)ashow 610 34 gm 0.66255 0.(3.)ashow 610 48 gm -0.01808 0.(Drive the parser to the location where the recovery symbol can be recognized. )ashow 624 34 gm 0.66255 0.(4.)ashow 624 48 gm 0.01892 0. 32 0.00189 0.(Resume parsing from there.)awidthshow 652 34 gm 0.68267 0. 32 0.06826 0.(In recursive descent parsers, information about the parsing location and about the expected symbols is)awidthshow 666 34 gm 0.53787 0. 32 0.05378 0.(only implicitly contained in the parser code \(and in the procedure call stack\) and cannot be exploited for)awidthshow 680 34 gm 0.35415 0. 32 0.03541 0.(error recovery. One method to overcome this is to compute the recovery set dynamically during parsing.)awidthshow 694 34 gm 0.24993 0. 32 0.02499 0.(Then, when an error occurs, the recovery symbols are already known and all that one has to do is to skip)awidthshow 708 34 gm 1.62490 0. 32 0.16249 0.(erroneous input and to "unroll" the procedure stack up to a legal continuation point [Wirth76]. This)awidthshow 722 34 gm 0.21347 0. 32 0.02134 0.(technique, although systematically applicable, slows down error-free parsing and inflates the parser code.)awidthshow F T cp %%Page: ? 21 op 0 0 xl 1 1 pen 20 505 gm (nc 746 0 781 538 6 rc)kp 29 495 gm (nc 0 0 35 538 6 rc)kp F 1 setTxMode 0 fs 9 fz bu fc 2 F /|______Helvetica fnt bn (21)show 56 34 gm (nc 46 0 713 538 6 rc)kp 10 fz bu fc 2 F /|______Helvetica fnt bn 1.53854 0. 32 0.15385 0.(Another technique has therefore been suggested in [Wirth86]. Recovery takes place only at certain)awidthshow 70 34 gm 0.21148 0. 32 0.02114 0.(synchronization points in the grammar. Errors at other points are reported but cause no recovery. Parsing)awidthshow 84 34 gm 0.32363 0. 32 0.03236 0.(simply continues up to the next synchronization point where the grammar and the input are synchronized)awidthshow 98 34 gm 0.47531 0. 32 0.04753 0.(again. This requires the designer of the grammar to specify synchronization points explicitly \320 not a very)awidthshow 112 34 gm -0.01246 0.(difficult task if one thinks for a moment. The advantage is that no recovery sets have to be computed at run)ashow 126 34 gm -0.13258 0.(time. This makes the parser small and fast.)ashow 154 34 gm 2 fs bu fc 2 F /|______Helvetica-Oblique fnt bn 2.76977 0. 32 0.27697 0.(Synchronization points)awidthshow 0 fs bu fc 2 F /|______Helvetica fnt bn 1.51718 0. 32 0.15171 0.(. In Cocol/R a synchronization point is specified by the keyword SYNC \(see)awidthshow 168 34 gm -0.04789 0.(Section 2.3\). A good synchronization point is a location in the grammar where particularly safe symbols \(like)ashow 182 34 gm 0.39718 0. 32 0.03971 0.(keywords\) are expected and that is often visited by the parser. Typical candidates are the beginning of a)awidthshow 196 34 gm 0.32516 0. 32 0.03251 0.(statement, the beginning of a declaration or the beginning of a structured type. A synchronization point is)awidthshow 210 34 gm 0.12664 0. 32 0.01266 0.(translated into a loop that skips all symbols not expected at this point \(except end-of-file\). The set of these)awidthshow 224 34 gm -0.00193 0.(symbols can be precomputed at parser generation time. The following example shows two synchronization)ashow 238 34 gm 0.11245 0. 32 0.01124 0.(points and their counterparts in the generated parser.)awidthshow 266 45 gm 2 fs bu fc 2 F /|______Helvetica-Oblique fnt bn 0.25784 0.(production)ashow 266 215 gm 0.57189 0. 32 0.05718 0.(generated parsing procedure)awidthshow 288 45 gm 0 fs bu fc 2 F /|______Helvetica fnt bn -0.09054 0.(Declarations =)ashow 302 57 gm -0.25939 0.(SYNC)ashow 302 215 gm -0.06390 0.(WHILE ~\(sym IN {const, type, var, proc, begin, end, eof}\) DO)ashow 316 227 gm -0.12832 0.(Error\(\311\); Get)ashow 330 215 gm 0.03778 0.(END;)ashow 344 57 gm -0.94821 0.({ )ashow 344 215 gm -0.14295 0.(WHILE sym IN {const, type, var, proc} DO)ashow 358 68 gm -0.01783 0.(\( "CONST" {ConstDecl ";"})ashow 358 227 gm -0.21191 0.(IF sym = const THEN Get; \311 )ashow 372 68 gm -0.04234 0.(| "TYPE" {TypeDecl ";"})ashow 372 227 gm -0.13441 0.(ELSIF sym = type THEN Get; \311)ashow 386 68 gm -0.08518 0.(| "VAR" {VarDecl ";"})ashow 386 227 gm -0.21615 0.(ELSIF sym = var THEN Get; \311)ashow 400 68 gm -0.10333 0.(| ProcDecl)ashow 400 227 gm 0.49942 0. 32 0.04994 0.(ELSE ProcDecl)awidthshow 414 68 gm (\))show 414 227 gm 0.03778 0.(END;)ashow 428 57 gm -1.55661 0.( )ashow 428 68 gm -0.25939 0.(SYNC)ashow 428 227 gm -0.06390 0.(WHILE ~\(sym IN {const, type, var, proc, begin, end, eof}\) DO)ashow 442 238 gm -0.12832 0.(Error\(\311\); Get)ashow 456 227 gm -0.05427 0.(END)ashow 470 57 gm -0.11819 0.(}.)ashow 470 215 gm -0.05427 0.(END)ashow 498 34 gm 1.13723 0. 32 0.11372 0.(To avoid spurious error messages, an error is only reported when a certain amount of text has been)awidthshow 512 34 gm -0.05123 0.(correctly parsed since the last error.)ashow 540 34 gm 2 fs bu fc 2 F /|______Helvetica-Oblique fnt bn 2.03826 0. 32 0.20382 0.(Weak symbols)awidthshow 0 fs bu fc 2 F /|______Helvetica fnt bn 1.25778 0. 32 0.12577 0.(. The knowledge of synchronization points is already sufficient to recover from errors.)awidthshow 554 34 gm -0.01696 0.(However, recovery can be improved if the parser also knows about "weak" symbols that are often mistyped)ashow 568 34 gm -0.03468 0.(or missing \(like semicolon\). These symbols are marked in the grammar by the keyword WEAK \(see Section)ashow 582 34 gm 0.50109 0. 32 0.05010 0.(2.3\). If the parser tries to recognize a weak symbol and finds it missing, it reports an error and skips the)awidthshow 596 34 gm 0.54061 0. 32 0.05406 0.(input until a legal successor of the symbol is found \(or a symbol that is expected at any synchronization)awidthshow 610 34 gm 1.30371 0. 32 0.13037 0.(point; this is a useful heuristic that avoids skipping safe symbols\). The following example shows the)awidthshow 624 34 gm -0.10389 0.(translation of a weak symbol.)ashow 652 227 gm 2 fs bu fc 2 F /|______Helvetica-Oblique fnt bn 0.47882 0. 32 0.04788 0.(generated parsing code)awidthshow 666 48 gm 0 fs bu fc 2 F /|______Helvetica fnt bn 0.40634 0. 32 0.04063 0.(Statement =)awidthshow 680 62 gm 0.36468 0. 32 0.03646 0.(ident )awidthshow 680 227 gm 0.17887 0.(Expect\(ident\);)ashow 694 62 gm 0.09552 0. 32 0.00955 0.(WEAK ":=" )awidthshow 694 227 gm -0.02549 0.(Weak\(becomes, {)ashow 2 fs bu fc 2 F /|______Helvetica-Oblique fnt bn -0.02210 0.(start symbols of Expression)ashow 0 fs bu fc 2 F /|______Helvetica fnt bn (}\);)show 708 62 gm 0.47164 0. 32 0.04716 0.(Expression .)awidthshow 708 227 gm 0.17187 0.(Expression)ashow F T cp %%Page: ? 22 op 0 0 xl 1 1 pen 20 278 gm (nc 746 0 781 538 6 rc)kp 29 34 gm (nc 0 0 35 538 6 rc)kp F 1 setTxMode 0 fs 9 fz bu fc 2 F /|______Helvetica fnt bn (22)show 66 34 gm (nc 56 0 726 538 6 rc)kp 10 fz bu fc 2 F /|______Helvetica fnt bn -0.02357 0.(The procedure )ashow 2 fs bu fc 2 F /|______Helvetica-Oblique fnt bn -0.03109 0.(Weak)ashow 0 fs bu fc 2 F /|______Helvetica fnt bn -0.02272 0.( is implemented as follows)ashow 94 48 gm -0.03283 0.(PROCEDURE Weak\(s: INTEGER; expected: Set\);)ashow 108 48 gm -0.27894 0.(BEGIN)ashow 122 62 gm -0.29327 0.(IF sym = s THEN Get)ashow 136 62 gm 0.46615 0. 32 0.04661 0.(ELSE )awidthshow 151 76 gm -0.23730 0.(Error\(s\); WHILE sym )ashow bu fc 2 F /|______Symbol fnt bn (\317)show 151 174 gm bu fc 2 F /|______Helvetica fnt bn 0.05462 0. 32 0.00546 0.( expected )awidthshow bu fc 2 F /|______Symbol fnt bn (\310)show 151 229 gm bu fc 2 F /|______Helvetica fnt bn ( {)show 2 fs bu fc 2 F /|______Helvetica-Oblique fnt bn -0.03208 0.(symbols expected at synchronization points)ashow 0 fs bu fc 2 F /|______Helvetica fnt bn -0.04058 0.(} DO Get END)ashow 165 62 gm -0.05427 0.(END)ashow 179 48 gm -0.15269 0.(END Weak;)ashow 207 34 gm 1.39160 0. 32 0.13916 0.(Weak symbols give the parser another chance to synchronize in case of an error. Again, the set of)awidthshow 221 34 gm -0.00755 0.(expected symbols can be precomputed at parser generation time and cause no run time overhead in error-)ashow 235 34 gm 0.19805 0. 32 0.01980 0.(free parsing.)awidthshow 263 34 gm 0.50964 0. 32 0.05096 0.(When an iteration starts with a weak symbol, this symbol is called a )awidthshow 2 fs bu fc 2 F /|______Helvetica-Oblique fnt bn 0.96069 0. 32 0.09606 0.(weak separator)awidthshow 0 fs bu fc 2 F /|______Helvetica fnt bn 0.42388 0. 32 0.04238 0.( and is handled in a)awidthshow 277 34 gm 0.44479 0. 32 0.04447 0.(special way. If it cannot be recognized, the input is skipped until a symbol that is contained in one of the)awidthshow 291 34 gm 0.27008 0. 32 0.02700 0.(following three sets is found:)awidthshow 320 48 gm bu fc 2 F /|______Symbol fnt bn (a)show 320 62 gm bu fc 2 F /|______Helvetica fnt bn -0.09547 0.(symbols that may follow the weak separator)ashow 335 48 gm bu fc 2 F /|______Symbol fnt bn (b)show 335 62 gm bu fc 2 F /|______Helvetica fnt bn -0.05908 0.(symbols that may follow the iteration)ashow 350 48 gm bu fc 2 F /|______Symbol fnt bn (g)show 350 62 gm bu fc 2 F /|______Helvetica fnt bn 0.13229 0. 32 0.01322 0.(symbols expected at any synchronization point \(including eof\))awidthshow 378 34 gm -0.06004 0.(The following example shows the translation of a weak separator)ashow 406 227 gm 2 fs bu fc 2 F /|______Helvetica-Oblique fnt bn 0.57189 0. 32 0.05718 0.(generated parsing procedure)awidthshow 420 48 gm 0 fs bu fc 2 F /|______Helvetica fnt bn 1.11831 0. 32 0.11183 0.(StatSequence =)awidthshow 434 62 gm 0.07147 0.(Stat)ashow 434 227 gm 0.10903 0.(Stat;)ashow 449 62 gm -0.05657 0.({ WEAK ";" Stat}.)ashow 449 227 gm -0.03753 0.(WHILE WeakSep\(semicolon, )ashow bu fc 2 F /|______Symbol fnt bn (a)show 449 365 gm bu fc 2 F /|______Helvetica fnt bn -0.26284 0.(, )ashow bu fc 2 F /|______Symbol fnt bn (b)show 449 376 gm bu fc 2 F /|______Helvetica fnt bn -0.21281 0.(\) DO Stat END)ashow 478 34 gm 0.17623 0. 32 0.01762 0.(In this example, )awidthshow bu fc 2 F /|______Symbol fnt bn (a)show 478 115 gm bu fc 2 F /|______Helvetica fnt bn 0.62271 0. 32 0.06227 0.( is the set of start symbols of a statement \(ident, IF, WHILE, etc.\) and )awidthshow bu fc 2 F /|______Symbol fnt bn (b)show 478 444 gm bu fc 2 F /|______Helvetica fnt bn 1.33895 0. 32 0.13389 0.( is the set of)awidthshow 492 34 gm 0.30502 0. 32 0.03050 0.(successors of a statement sequence \(END, ELSE, UNTIL, etc.\). Both sets can be precomputed at parser)awidthshow 506 34 gm -0.00468 0.(generation time. )ashow 2 fs bu fc 2 F /|______Helvetica-Oblique fnt bn (WeakSep)show 0 fs bu fc 2 F /|______Helvetica fnt bn -0.00491 0.( is implemented as follows:)ashow 534 48 gm -0.00592 0.(PROCEDURE WeakSep\(s: INTEGER; sySucc, iterSucc: Set\): BOOLEAN;)ashow 548 48 gm -0.27894 0.(BEGIN)ashow 562 62 gm -0.24145 0.(IF sym = s THEN Get; RETURN TRUE)ashow 577 62 gm -0.24598 0.(ELSIF sym )ashow bu fc 2 F /|______Symbol fnt bn (\316)show 577 119 gm bu fc 2 F /|______Helvetica fnt bn -0.06834 0.( iterSucc THEN RETURN FALSE)ashow 592 62 gm -0.16822 0.(ELSE Error\(s\); WHILE sym )ashow bu fc 2 F /|______Symbol fnt bn (\317)show 592 189 gm bu fc 2 F /|______Helvetica fnt bn -0.15206 0.( sySucc )ashow bu fc 2 F /|______Symbol fnt bn (\310)show 592 234 gm bu fc 2 F /|______Helvetica fnt bn -0.11381 0.( iterSucc )ashow bu fc 2 F /|______Symbol fnt bn (\310)show 592 283 gm bu fc 2 F /|______Helvetica fnt bn -0.15223 0.( )ashow bu fc 2 F /|______Symbol fnt bn -0.22514 0.(g)ashow bu fc 2 F /|______Helvetica fnt bn -0.30187 0.( DO Get END;)ashow 607 76 gm -0.30075 0.(RETURN sym )ashow bu fc 2 F /|______Symbol fnt bn (\316)show 607 146 gm bu fc 2 F /|______Helvetica fnt bn -0.06329 0.( sySucc \(*TRUE means "s inserted"*\))ashow 621 62 gm -0.05427 0.(END)ashow 635 48 gm (END WeakSep;)show 664 34 gm -0.04249 0.(The observant reader may have noticed that the set )ashow bu fc 2 F /|______Symbol fnt bn (b)show 664 270 gm bu fc 2 F /|______Helvetica fnt bn 0.20858 0. 32 0.02085 0.( contains the successors of a statement sequence in)awidthshow 678 34 gm 1.64077 0. 32 0.16407 0.(any possible context. This set may be too large. If the statement sequence occurs within a repeat)awidthshow 692 34 gm -0.02770 0.(statement, only UNTIL is a legal successor, but not END or ELSE. We accept this fault, since it allows us to)ashow 707 34 gm 0.79818 0. 32 0.07981 0.(precompute the set )awidthshow bu fc 2 F /|______Symbol fnt bn (b)show 707 133 gm bu fc 2 F /|______Helvetica fnt bn 0.49346 0. 32 0.04934 0.( at parser generation time. The occurrence of END or ELSE is very unlikely in this)awidthshow 721 34 gm -0.00930 0.(context and can only lead to incorrect synchronization, causing the parser to synchronize again.)ashow F T cp %%Page: ? 23 op 0 0 xl 1 1 pen 20 456 gm (nc 746 0 781 538 6 rc)kp 29 495 gm (nc 0 0 35 538 6 rc)kp F 1 setTxMode 0 fs 9 fz bu fc 2 F /|______Helvetica fnt bn (23)show 69 34 gm (nc 45 0 706 538 6 rc)kp 10 fz bu fc 2 F /|______Helvetica fnt bn 1.56097 0. 32 0.15609 0.(The following example demonstrates that our method yields good error recovery. We generated an)awidthshow 83 34 gm 1.98425 0. 32 0.19842 0.(Oberon compiler and compiled the following erroneous program taken from [Wirth86]. The parser)awidthshow 97 34 gm 0.09552 0. 32 0.00955 0.(recovered surprisingly well.)awidthshow 123 71 gm bu fc {}mark T /Courier /|______Courier 0 rf bn 8.33332 fz bu fc 2 F /|______Courier fnt bn (MODULE Error;)show 133 71 gm (CONST M := 10, N = 100 X = 10;)show 143 48 gm (***)show 143 71 gm ( ^ "=" expected)show 153 48 gm (***)show 153 71 gm ( ^ ";" expected)show 163 48 gm (***)show 163 71 gm ( ^ ";" expected)show 173 71 gm (VAR , a, b, c;)show 183 48 gm (***)show 183 71 gm ( ^ unexpected symbol in Block)show 203 71 gm (PROCEDURE P;)show 213 71 gm (BEGIN)show 223 71 gm ( s := 0; a = 5 * \(b - 1 END;)show 233 48 gm (***)show 233 71 gm ( ^ error in Stat)show 243 48 gm (***)show 243 71 gm ( ^ error in Stat)show 253 48 gm (***)show 253 71 gm 0.00152 0. 32 0.00015 0.( ^ ident expected)awidthshow 273 71 gm (BEGIN)show 283 71 gm ( > a > b;)show 293 48 gm (***)show 293 71 gm ( ^ unexpected symbol in Stat)show 303 48 gm (***)show 303 71 gm ( ^ error in Stat)show 313 71 gm ( WHILE a DO)show 323 71 gm ( BEGIN > b; - c := 0;)show 333 48 gm (***)show 333 71 gm ( ^ unexpected symbol in Stat)show 343 48 gm (***)show 343 71 gm ( ^ unexpected symbol in Stat)show 353 48 gm (***)show 353 71 gm 0.00228 0. 32 0.00022 0.( ^ unexpected symbol in Stat)awidthshow 363 71 gm ( WHILE a > 0 BEGIN)show 373 48 gm (***)show 373 71 gm ( ^ "DO" expected)show 383 71 gm ( IF ODD a c := c * - b;)show 393 48 gm (***)show 393 71 gm ( ^ error in Factor)show 403 48 gm (***)show 403 71 gm ( ^ error in Stat)show 413 48 gm (***)show 413 71 gm 0.00167 0. 32 0.00016 0.( ^ error in Factor)awidthshow 423 71 gm ( b := 2 * b a := a / 2)show 433 48 gm (***)show 433 71 gm ( ^ error in Factor)show 443 71 gm ( END;)show 453 71 gm ( P := 0; P; 666;)show 463 48 gm (***)show 463 71 gm 0.00228 0. 32 0.00022 0.( ^ unexpected symbol in Stat)awidthshow 473 71 gm ( END .)show 483 48 gm (***)show 483 71 gm ( ^ ";" expected)show 493 48 gm (***)show 493 71 gm ( ^ "END" expected)show 519 34 gm 10 fz bu fc 2 F /|______Helvetica fnt bn -0.01786 0.(The error messages are kept short and simple. This is due to our conviction that experienced programmers)ashow 533 34 gm 0.09002 0. 32 0.00900 0.(do not need a detailed explanation of what actions the parser performed in order to recover from the error.)awidthshow 547 34 gm -0.07328 0.(In almost all cases it is sufficient to point to the error location and to give a rough hint.)ashow 575 34 gm 0.30853 0. 32 0.03085 0.(The proposed error recovery technique is cheap. It costs only a check at every synchronization point and)awidthshow 589 34 gm 0.23818 0. 32 0.02381 0.(therefore does not slow down error-free parsing. The code for error handling makes up 10% of the parser)awidthshow 603 34 gm 0.03356 0. 32 0.00335 0.(code \(without semantic actions\).)awidthshow 631 48 gm -0.02465 0.(Oberon parser without error handling )ashow 631 249 gm 1.04125 0. 32 0.10412 0.(3019 Bytes)awidthshow 631 306 gm 0.55191 0. 32 0.05519 0.(\(object code\))awidthshow 645 48 gm -0.01197 0.(Error handling procedures \(fixed size\) )ashow 645 255 gm 0.85403 0. 32 0.08540 0.(248 Bytes)awidthshow 659 48 gm 0.03997 0. 32 0.00399 0.(Synchronization points, weak symbols )awidthshow 659 261 gm 0.64498 0. 32 0.06449 0.(81 Bytes)awidthshow F T cp %%Page: ? 24 op 0 0 xl 1 1 pen 20 301 gm (nc 746 0 781 538 6 rc)kp 29 34 gm (nc 0 0 35 538 6 rc)kp F 1 setTxMode 0 fs 9 fz bu fc 2 F /|______Helvetica fnt bn (24)show 64 34 gm (nc 54 0 727 538 6 rc)kp 1 fs 10 fz bu fc 2 F /|______Helvetica-Bold fnt bn 4.94964 0. 32 0.49496 0.(6. Measurements)awidthshow 92 34 gm 0 fs bu fc 2 F /|______Helvetica fnt bn 0.43884 0. 32 0.04388 0.(We compared an Oberon compiler generated by Coco/R with a manually implemented Oberon compiler.)awidthshow 106 34 gm 0.15670 0. 32 0.01567 0.(The back-end modules of both compilers are the same. Only the scanner and the parser are different. We)awidthshow 120 34 gm 0.03555 0. 32 0.00355 0.(measured the time to compile a 867-line Oberon program \(7169 tokens or 24254 characters\) on a Ceres-2)awidthshow 134 34 gm -0.01515 0.(workstation with a NS32532 processor running at 25 MHz.)ashow 162 48 gm -0.06185 0.(Original compiler)ashow 162 165 gm 0.47897 0. 32 0.04789 0.(3.9 sec)awidthshow 176 48 gm 0.07843 0. 32 0.00784 0.(Generated compiler)awidthshow 176 165 gm 0.47897 0. 32 0.04789 0.(3.0 sec)awidthshow 204 34 gm 0.10498 0. 32 0.01049 0.(The generated compiler is 23 % faster than the original compiler. This is due to the fact that the generated)awidthshow 218 34 gm 0.19653 0. 32 0.01965 0.(compiler reads the source text into main memory at once, while the original compiler reads it character by)awidthshow 232 34 gm 0.73272 0. 32 0.07327 0.(character. Without this improvement the generated compiler is about 10% slower than the original one.)awidthshow 246 34 gm -0.00640 0.(Scanning and parsing contribute to the overall run time of the generated compiler in the following way:)ashow 274 48 gm 0.18791 0.(Scanning)ashow 274 188 gm 0.70999 0. 32 0.07099 0.(0.61 sec)awidthshow 274 261 gm 0.16494 0. 32 0.01649 0.(20 %)awidthshow 288 48 gm 0.01766 0.(Parsing)ashow 288 188 gm 0.70999 0. 32 0.07099 0.(0.12 sec)awidthshow 288 267 gm -0.11329 0.(4 %)ashow 316 34 gm -0.02523 0.(This gives a compilation speed of)ashow 344 48 gm 0.18791 0.(Scanning)ashow 344 169 gm 0.44189 0. 32 0.04418 0.(11 625 tokens/sec)awidthshow 358 48 gm 0.01766 0.(Parsing)ashow 358 169 gm 0.44189 0. 32 0.04418 0.(51 127 tokens/sec)awidthshow 372 48 gm 0.10086 0. 32 0.01008 0.(Total compilation speed)awidthshow 372 175 gm 0.35552 0. 32 0.03555 0.(2 395 tokens/sec)awidthshow 400 34 gm 0.03906 0. 32 0.00390 0.(Comparing the object code of the two compilers yields the following measures:)awidthshow 428 156 gm -0.06185 0.(Original compiler)ashow 428 266 gm 0.07843 0. 32 0.00784 0.(Generated compiler)awidthshow 442 48 gm 0.12763 0.(Scanner)ashow 442 167 gm 0.39993 0. 32 0.03999 0.(3 672 Bytes)awidthshow 442 286 gm 0.39993 0. 32 0.03999 0.(3 944 Bytes)awidthshow 442 385 gm -0.02217 0.(+ 7%)ashow 456 48 gm -0.08868 0.(Parser)ashow 456 161 gm 0.52917 0. 32 0.05291 0.(11 740 Bytes)awidthshow 456 280 gm 0.52917 0. 32 0.05291 0.(12 236 Bytes)awidthshow 456 385 gm -0.02217 0.(+ 4%)ashow 470 48 gm -0.07237 0.(\(incl. semantic actions\))ashow 512 34 gm 1 fs bu fc 2 F /|______Helvetica-Bold fnt bn 3.32656 0. 32 0.33265 0.(7. Summary)awidthshow 540 34 gm 0 fs bu fc 2 F /|______Helvetica fnt bn 1.57119 0. 32 0.15711 0.(Attributed grammars, when regarded as an algorithmic notation, are a special purpose language to)awidthshow 554 34 gm 0.23330 0. 32 0.02333 0.(describe translation processes. They serve three purposes:)awidthshow 582 34 gm (\245)show 582 45 gm 2 fs bu fc 2 F /|______Helvetica-Oblique fnt bn 0.43962 0.(Specification)ashow 0 fs bu fc 2 F /|______Helvetica fnt bn 1.56982 0. 32 0.15698 0.(. A translator can be specified and designed this way before it is implemented in a)awidthshow 596 45 gm 0.28656 0. 32 0.02865 0.(conventional programming language.)awidthshow 610 34 gm (\245)show 610 45 gm 2 fs bu fc 2 F /|______Helvetica-Oblique fnt bn 0.08145 0.(Documentation)ashow 0 fs bu fc 2 F /|______Helvetica fnt bn 0.27984 0. 32 0.02798 0.(. An attributed grammar is a concise documentation of a translation process. It contains)awidthshow 624 45 gm -0.06274 0.(the same information as the program that implements the translator but in more compact form.)ashow 638 34 gm (\245)show 638 45 gm 2 fs bu fc 2 F /|______Helvetica-Oblique fnt bn -0.00648 0.(Implementation)ashow 0 fs bu fc 2 F /|______Helvetica fnt bn -0.00572 0.(. If a tool like Coco/R is available, an attributed grammar is already the implementation of)ashow 652 45 gm -0.00859 0.(the translator.)ashow 680 34 gm -0.02790 0.(Attributed grammars can be used to specify all kinds of programs that process a single stream of structured)ashow 694 34 gm 0.17501 0. 32 0.01750 0.(input data. They can be applied not only to proper compilers but also to compiler-like programs like cross-)awidthshow 708 34 gm 1.15875 0. 32 0.11587 0.(reference generators, pretty printers or complexity analyzers and even to tasks that do not fall in the)awidthshow 722 34 gm 0.08132 0. 32 0.00813 0.(traditional scope of compiler construction, like the processing of data files that describe pictures, formatted)awidthshow F T cp %%Page: ? 25 op 0 0 xl 1 1 pen 20 505 gm (nc 746 0 781 538 6 rc)kp 29 495 gm (nc 0 0 35 538 6 rc)kp F 1 setTxMode 0 fs 9 fz bu fc 2 F /|______Helvetica fnt bn (25)show 56 34 gm (nc 46 0 159 538 6 rc)kp 10 fz bu fc 2 F /|______Helvetica fnt bn -0.02478 0.(text or database information.)ashow 84 34 gm 0.29708 0. 32 0.02970 0.(Among the advantages of using a tool like Coco/R are a fast and safe implementation of translators, high)awidthshow 98 34 gm 0.58059 0. 32 0.05805 0.(flexibility in experimenting with a language design, and a translator description that is more concise and)awidthshow 112 34 gm 0.64208 0. 32 0.06420 0.(more readable than an implementation in a conventional programming language. The effort to learn the)awidthshow 126 34 gm 0.73089 0. 32 0.07308 0.(description language is small, since semantic parts are written in a familiar programming language and)awidthshow 140 34 gm 0.38848 0. 32 0.03884 0.(syntactic parts are based on the well-known formalism of EBNF grammars. The translators generated by)awidthshow 154 34 gm 0.10986 0. 32 0.01098 0.(Coco/R are fast enough to compete with production-quality compilers.)awidthshow F T cp %%Page: ? 26 op 0 0 xl 1 1 pen 20 344 gm (nc 746 0 781 538 6 rc)kp 29 34 gm (nc 0 0 35 538 6 rc)kp F 1 setTxMode 0 fs 9 fz bu fc 2 F /|______Helvetica fnt bn (26)show 60 34 gm (nc 50 0 583 538 6 rc)kp 1 fs 10 fz bu fc 2 F /|______Helvetica-Bold fnt bn 1.96319 0. 32 0.19631 0.(Appendix A Cocol/R Grammar)awidthshow 102 34 gm 0 fs bu fc 2 F /|______Helvetica fnt bn -0.06701 0.(Cocol )ashow 102 113 gm -0.61819 0.(= )ashow 102 125 gm 0.49041 0. 32 0.04904 0.("COMPILER" ident)awidthshow 116 34 gm -0.93397 0.( )ashow 116 125 gm -0.46589 0.({ ANY })ashow 130 34 gm -0.93397 0.( )ashow 130 125 gm -0.19964 0.({ Declaration })ashow 144 34 gm -0.93397 0.( )ashow 144 125 gm ("PRODUCTIONS")show 158 34 gm -0.93397 0.( )ashow 158 125 gm 0.21514 0. 32 0.02151 0.({ ident [Attributes] [SemText] "=" Expression "."} )awidthshow 172 34 gm -0.93397 0.( )ashow 172 125 gm 0.54412 0. 32 0.05441 0.("END" ident ".".)awidthshow 186 34 gm -0.12156 0.(Declaration )ashow 186 113 gm -0.61819 0.(= )ashow 186 125 gm -0.07426 0.( "CHARACTERS" { SetDecl })ashow 200 34 gm -1.03775 0.( )ashow 200 113 gm (|)show 200 125 gm -0.12507 0.("TOKENS" { TokenDecl })ashow 214 34 gm -1.03775 0.( )ashow 214 113 gm -1.37599 0.(| )ashow 214 125 gm -0.20979 0.("PRAGMAS" { PragmaDecl })ashow 228 34 gm -1.03775 0.( )ashow 228 113 gm -1.37599 0.(| )ashow 228 125 gm 0.32089 0. 32 0.03208 0.("COMMENTS" "FROM" TokenExpr "TO" TokenExpr ["NESTED"])awidthshow 242 34 gm -1.03775 0.( )ashow 242 113 gm -1.37599 0.(| )ashow 242 125 gm -0.11203 0.("IGNORE" \( "CASE" | Set \).)ashow 270 34 gm 0.12756 0. 32 0.01275 0.(SetDecl )awidthshow 270 113 gm (=)show 270 125 gm 0.50796 0. 32 0.05079 0.(ident "=" Set ".".)awidthshow 284 34 gm 0.16494 0. 32 0.01649 0.(Set )awidthshow 284 113 gm -0.61819 0.(= )ashow 284 125 gm -0.07481 0.(SimSet { "+" SimSet | "-" SimSet }.)ashow 298 34 gm (SimSet )show 298 113 gm (=)show 298 125 gm -0.08566 0.(ident | string | "CHR" "\(" number "\)" | "ANY".)ashow 326 34 gm 0.23071 0. 32 0.02307 0.(TokenDecl )awidthshow 326 113 gm (=)show 326 125 gm 0.50643 0. 32 0.05064 0.(Symbol ["=" TokenExpr "."].)awidthshow 340 34 gm 0.46264 0. 32 0.04626 0.(TokenExpr )awidthshow 340 113 gm (=)show 340 125 gm -0.05503 0.(TokenTerm { "|" TokenTerm }.)ashow 354 34 gm 0.05966 0. 32 0.00596 0.(TokenTerm )awidthshow 354 113 gm -0.61819 0.(= )ashow 354 125 gm -0.02670 0.(TokenFactor { TokenFactor} [ "CONTEXT" "\(" TokenExpr "\)" ].)ashow 368 34 gm 0.08819 0.(TokenFactor)ashow 368 113 gm (=)show 368 125 gm -0.07270 0.(\( Symbol | "\(" TokenExpr "\)" | "[" TokenExpr "]" | "{" TokenExpr "}" \).)ashow 396 34 gm -0.11114 0.(PragmaDecl)ashow 396 113 gm (=)show 396 125 gm 0.72433 0. 32 0.07243 0.(TokenDecl [SemText].)awidthshow 424 34 gm 0.38421 0. 32 0.03842 0.(Expression )awidthshow 424 113 gm -0.61819 0.(= )ashow 424 125 gm -0.23023 0.(Term { "|" Term }.)ashow 438 34 gm -0.27529 0.(Term )ashow 438 113 gm -0.61819 0.(= )ashow 438 125 gm -0.16748 0.(Factor { Factor}.)ashow 452 34 gm -0.18513 0.(Factor )ashow 452 113 gm -0.69828 0.(= )ashow 452 125 gm -0.94216 0.( \( )ashow 452 136 gm 0.68481 0. 32 0.06848 0.(["WEAK"] Symbol [Attributes])awidthshow 466 34 gm -1.16746 0.( )ashow 466 113 gm -1.37599 0.(| )ashow 466 125 gm 0.16622 0.(SemText)ashow 480 34 gm -1.16746 0.( )ashow 480 113 gm -1.37599 0.(| )ashow 480 125 gm 0.08535 0.("ANY")ashow 494 34 gm -1.16746 0.( )ashow 494 113 gm -1.37599 0.(| )ashow 494 125 gm 0.02436 0.("SYNC")ashow 508 34 gm -1.16746 0.( )ashow 508 113 gm -1.37599 0.(| )ashow 508 125 gm -0.05809 0.("\(" Expression "\)" | "[" Expression "]" | "{" Expression "}" )ashow 522 34 gm -1.16746 0.( )ashow 522 113 gm -0.10592 0.(\).)ashow 536 34 gm -0.01892 0.(Symbol )ashow 536 113 gm -0.61819 0.(= )ashow 536 125 gm -0.05526 0.( ident | string.)ashow 550 34 gm 0.49621 0. 32 0.04962 0.(Attributes )awidthshow 550 113 gm -0.61819 0.(= )ashow 550 125 gm -0.13394 0.("<" { ANY } ">".)ashow 564 34 gm 0.12908 0. 32 0.01290 0.(SemText )awidthshow 564 113 gm -0.61819 0.(= )ashow 564 125 gm -0.14949 0.("\(." { ANY } ".\)".)ashow F T cp %%Page: ? 27 op 0 0 xl 1 1 pen 20 190 gm (nc 746 0 781 538 6 rc)kp 29 495 gm (nc 0 0 35 538 6 rc)kp F 1 setTxMode 0 fs 9 fz bu fc 2 F /|______Helvetica fnt bn (27)show 60 34 gm (nc 50 0 647 538 6 rc)kp 1 fs 10 fz bu fc 2 F /|______Helvetica-Bold fnt bn 2.23236 0. 32 0.22323 0.(Appendix B Sample Attributed Grammar in Cocol/R)awidthshow 88 34 gm 0 fs bu fc 2 F /|______Helvetica fnt bn -0.07089 0.(The following attributed grammar describes a compiler for a simple programming language. It uses a symbol)ashow 102 34 gm -0.01292 0.(table handler \(TL\) and a code generator \(TC\) that generates code for a stack machine. These two modules)ashow 116 34 gm 0.95993 0. 32 0.09599 0.(are not described further. The purpose of this grammar is to give a coherent example of an attributed)awidthshow 130 34 gm -0.00700 0.(grammar. It is not necessary for the reader to understand the translation process in all details, although the)ashow 144 34 gm -0.11770 0.(semantic actions in this grammar are rather similar to actions contained in any compiler.)ashow 181 34 gm 9 fz bu fc 2 F /|______Helvetica fnt bn -0.07723 0.(COMPILER Taste)ashow 203 34 gm 0.05401 0. 32 0.00540 0.(\(*-------------------------------------- imports and global declarations -----------------------------------------*\))awidthshow 214 34 gm -0.02015 0.(IMPORT TL \(*table handler*\), TC \(*code generator*\);)ashow 236 34 gm -0.37390 0.(CONST)ashow 247 34 gm -1.00094 0.( )ashow 247 45 gm -0.04061 0.(plus = 0; minus = 1; times = 2; slash = 3; equ = 4; lss = 5; gtr = 6; \(*operators*\))ashow 258 34 gm -1.00094 0.( )ashow 258 45 gm -0.02056 0.(undef = 0; int = 1; bool = 2; \(*types*\))ashow 269 34 gm -1.00094 0.( )ashow 269 45 gm 0.12619 0. 32 0.01261 0.(vars = 0; procs = 1; \(*object kinds*\))awidthshow 280 34 gm -1.00094 0.( )ashow 280 45 gm -0.10723 0.(ADD = 0; SUB = 1; MUL = 2; DIVI = 3; EQU = 4; LSS = 5; GTR = 6; \(*machine instructions*\))ashow 291 34 gm -1.00094 0.( )ashow 291 45 gm -0.17697 0.(LOAD = 7; LIT = 8; STO = 9; CALL = 10; RET = 11; RES = 12;)ashow 302 34 gm -1.00094 0.( )ashow 302 45 gm -0.16517 0.(JMP = 13; FJMP = 14; HALTc = 15; NEG = 16; READ = 17; WRITE = 18;)ashow 324 34 gm -0.16882 0.(TYPE)ashow 335 45 gm -0.27214 0.(Name = ARRAY 32 OF CHAR;)ashow 357 34 gm -0.13371 0.(PROCEDURE Err\(nr: INTEGER\);)ashow 368 34 gm -0.01593 0.(BEGIN TasteS.Error\(100 + nr, TasteS.pos\) END Err;)ashow 390 34 gm -0.13150 0.(PROCEDURE StringToVal\(s: ARRAY OF CHAR; VAR val: INTEGER\);)ashow 401 45 gm -0.10726 0.(VAR i: INTEGER;)ashow 412 34 gm (BEGIN)show 423 34 gm -1.00094 0.( )ashow 423 45 gm 0.10910 0. 32 0.01091 0.(val:=0; i := 0;)awidthshow 434 34 gm -1.00094 0.( )ashow 434 45 gm -0.10832 0.(WHILE s[i] # 0X DO val := 10 * val + ORD\(s[i]\) - ORD\("0"\); INC\(i\) END)ashow 445 34 gm -0.06695 0.(END StringToVal;)ashow 456 34 gm -1.00094 0.( )ashow 478 34 gm 0.23269 0. 32 0.02326 0.(\(*------------------------------------------ scanner specification ---------------------------------------------------*\))awidthshow 489 34 gm -0.33288 0.(CHARACTERS)ashow 500 34 gm -1.00094 0.( )ashow 500 45 gm -0.01837 0.(letter = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz".)ashow 511 34 gm -1.00094 0.( )ashow 511 45 gm -0.03399 0.(digit = "0123456789".)ashow 522 34 gm -1.00094 0.( )ashow 522 45 gm -0.17297 0.(eol = CHR\(13\).)ashow 533 34 gm ( )show 533 45 gm -0.17304 0.( tab = CHR\(9\).)ashow 555 34 gm -0.20079 0.(TOKENS)ashow 566 34 gm -1.00094 0.( )ashow 566 45 gm 0.04730 0. 32 0.00473 0.(ident = letter {letter | digit}.)awidthshow 577 34 gm -1.00094 0.( )ashow 577 45 gm -0.05546 0.(number = digit {digit}.)ashow 599 34 gm -0.11776 0.(IGNORE eol + tab)ashow 621 34 gm -0.25779 0.(COMMENTS FROM "\(*" TO "*\)" NESTED)ashow F T cp %%Page: ? 28 op 0 0 xl 1 1 pen 20 192 gm (nc 746 0 781 538 6 rc)kp 29 34 gm (nc 0 0 35 538 6 rc)kp F 1 setTxMode 0 fs 9 fz bu fc 2 F /|______Helvetica fnt bn (28)show 58 34 gm (nc 50 0 700 538 6 rc)kp 0.18325 0. 32 0.01832 0.(\(*------------------------------------------------------- parser specification ----------------------------------------------------------*\))awidthshow 69 34 gm -0.24917 0.(PRODUCTIONS)ashow 91 34 gm -0.43476 0.(Taste )ashow 91 181 gm (\(. )show 91 193 gm -0.04698 0.(VAR name, progName: Name; obj: TL.Object; .\))ashow 102 34 gm -0.75639 0.(= )ashow 102 45 gm -0.26518 0.("PROGRAM" )ashow 113 45 gm -0.18923 0.(Ident ";" )ashow 113 181 gm (\(. )show 113 193 gm -0.01104 0.(TC.progStart := TC.pc .\))ashow 124 34 gm -1.00094 0.( )ashow 124 45 gm 0.16357 0.(Body)ashow 135 34 gm -1.00094 0.( )ashow 135 45 gm -0.31744 0.(Ident "." )ashow 135 181 gm (\(. )show 135 193 gm -0.14088 0.(IF name # progName THEN Err\(0\) END; TC.Emit\(HALTc\) .\).)ashow 146 34 gm 0.01194 0.(\(*-----------------------------------------------------------------------------------------------------------------------------------------------*\))ashow 157 34 gm -0.44804 0.(Body )ashow 157 181 gm -0.00836 0.(\(. VAR name, name1; Name; fix, type: INTEGER; obj: TL.Object; .\))ashow 168 34 gm -0.50721 0.(= )ashow 168 181 gm -0.01840 0.(\(. TL.EnterScope; fix := TC.pc + 1; TC.Emit2\(JMP,0\) .\))ashow 179 34 gm -1.00094 0.( )ashow 179 45 gm -0.50630 0.({ )ashow 179 57 gm -0.27862 0.("VAR" )ashow 190 34 gm -0.66729 0.( )ashow 190 57 gm -0.29806 0.({ Ident ":" )ashow 190 181 gm -0.03773 0.(\(. obj := TL.NewObj\(name, vars\) .\))ashow 201 34 gm -0.60057 0.( )ashow 201 57 gm -0.19860 0.( TypeId ";" )ashow 212 34 gm -0.66729 0.( )ashow 212 57 gm (})show 234 45 gm -0.83839 0.(| )ashow 234 57 gm -0.30784 0.("PROCEDURE" )ashow 245 57 gm -0.20095 0.(Ident ";" )ashow 245 181 gm -0.04136 0.(\(. obj := TL.NewObj\(name, procs\); obj^.adr := TC.pc .\))ashow 256 57 gm (Body )show 267 57 gm -0.29203 0.(Ident ";" )ashow 267 181 gm -0.16601 0.(\(. TC.Emit\(RET\); IF name # name1 THEN Err\(0\) END .\))ashow 278 45 gm (})show 289 34 gm -1.00094 0.( )ashow 289 45 gm -0.42802 0.("BEGIN" )ashow 289 181 gm (\(. TC.Fixup\(fix\); TC.Emit2\(RES, TL.DataSpace\(\)\) .\))show 300 34 gm -1.00094 0.( )ashow 300 45 gm 0.28411 0. 32 0.02841 0.(StatSeq )awidthshow 311 34 gm -1.00094 0.( )ashow 311 45 gm -0.48342 0.("END" )ashow 311 181 gm 0.37979 0. 32 0.03797 0.(\(. TL.LeaveScope .\).)awidthshow 322 34 gm 0.01194 0.(\(*-----------------------------------------------------------------------------------------------------------------------------------------------*\))ashow 333 34 gm -0.04293 0.(TypeId)ashow 344 34 gm -0.62846 0.(= )ashow 344 45 gm -0.42356 0.("INTEGER" )ashow 344 181 gm (\(. )show 344 193 gm 0.17196 0. 32 0.01719 0.(type := int .\))awidthshow 355 34 gm -0.83839 0.(| )ashow 355 45 gm -0.40922 0.("BOOLEAN" )ashow 355 181 gm (\(. )show 355 193 gm 0.16265 0. 32 0.01626 0.(type := bool .\).)awidthshow 366 34 gm 0.01194 0.(\(*-----------------------------------------------------------------------------------------------------------------------------------------------*\))ashow 377 34 gm 0.20126 0. 32 0.02012 0.(StatSeq = Stat {";" Stat}.)awidthshow 388 34 gm 0.01194 0.(\(*-----------------------------------------------------------------------------------------------------------------------------------------------*\))ashow 399 34 gm -0.43486 0.(Stat )ashow 399 181 gm (\(. )show 399 193 gm 0.08178 0. 32 0.00817 0.(VAR name: Name; type, fix, fix2, loopstart: INTEGER; obj: TL.Object; )awidthshow 410 34 gm -0.75639 0.(= )ashow 410 45 gm ([)show 410 57 gm -0.35823 0.( Ident )ashow 410 181 gm 0.50462 0.(\(.)ashow 410 193 gm -0.05970 0.(obj := TL.Obj\(name\) .\))ashow 421 34 gm -0.66729 0.( )ashow 421 57 gm -0.49540 0.(\( )ashow 421 68 gm -0.43904 0.(":" "=" )ashow 421 181 gm (\(. )show 421 193 gm -0.10017 0.(IF obj^.kind # vars THEN Err\(4\) END .\))ashow 432 34 gm -0.60057 0.( )ashow 432 68 gm 0.56640 0. 32 0.05664 0.(Expression )awidthshow 432 181 gm (\(. )show 432 193 gm -0.07774 0.(IF type # obj^.type THEN Err\(2\) END;)ashow 443 34 gm -0.51268 0.( )ashow 443 193 gm 0.00610 0. 32 0.00061 0.(TC.Emit3\(STO, TL.curLevel - obj^.level, obj^.adr\) .\))awidthshow 454 34 gm -0.66729 0.( )ashow 454 57 gm -0.51043 0.(| )ashow 454 181 gm (\(. )show 454 193 gm -0.08921 0.(IF obj^.kind # procs THEN Err\(5\) END;)ashow 465 34 gm -0.51268 0.( )ashow 465 193 gm 0.00564 0. 32 0.00056 0.(TC.Emit3\(CALL, TL.curLevel - obj^.level, obj^.adr\) .\))awidthshow 476 34 gm -0.66729 0.( )ashow 476 57 gm (\))show 487 45 gm -0.83839 0.(| )ashow 487 57 gm 0.14251 0. 32 0.01425 0.("IF" Expression )awidthshow 487 181 gm (\(. )show 487 193 gm -0.09405 0.(IF type # bool THEN Err\(3\) END; fix := TC.pc + 1; TC.Emit2\(FJMP, 0\) .\))ashow 498 34 gm -1.00094 0.( )ashow 498 45 gm -1.00094 0.( )ashow 498 57 gm -0.10777 0.("THEN" StatSeq)ashow 509 34 gm -1.00094 0.( )ashow 509 45 gm -1.00094 0.( )ashow 509 57 gm ([ )show 509 68 gm -0.43486 0.("ELSE" )ashow 509 181 gm (\(. )show 509 193 gm 0.01464 0. 32 0.00146 0.(fix2 := TC.pc + 1; TC.Emit2\(JMP, 0\); TC.Fixup\(fix\); fix := fix2 .\))awidthshow 520 34 gm -0.75071 0.( )ashow 520 45 gm -0.75071 0.( )ashow 520 57 gm -1.00094 0.( )ashow 520 68 gm 0.28411 0. 32 0.02841 0.(StatSeq )awidthshow 531 34 gm -0.75071 0.( )ashow 531 45 gm ( )show 531 57 gm (])show 542 34 gm -0.75071 0.( )ashow 542 45 gm ( )show 542 57 gm -0.48240 0.("END" )ashow 542 181 gm (\(. )show 542 193 gm 0.20797 0. 32 0.02079 0.(TC.Fixup\(fix\) .\))awidthshow 553 45 gm -0.83839 0.(| )ashow 553 57 gm -0.43830 0.("WHILE" )ashow 553 181 gm (\(. )show 553 193 gm 0.14846 0. 32 0.01484 0.(loopstart := TC.pc .\))awidthshow 564 34 gm -0.75071 0.( )ashow 564 45 gm ( )show 564 57 gm -0.22161 0.(Expression )ashow 564 181 gm (\(. )show 564 193 gm -0.09991 0.(IF type # bool THEN Err\(3\) END; fix := TC.pc + 1; TC.Emit2\(FJMP, 0\) .\))ashow 575 34 gm -0.66729 0.( )ashow 575 57 gm -0.13479 0.("DO" StatSeq "END")ashow 575 181 gm (\(. )show 575 193 gm 0.21545 0. 32 0.02154 0.(TC.Emit2\(JMP, loopstart\); TC.Fixup\(fix\) .\))awidthshow 586 45 gm -0.83839 0.(| )ashow 586 57 gm -0.11280 0.("READ" Ident)ashow 586 181 gm (\(. )show 586 193 gm -0.08134 0.(obj := TL.Obj\(name\); IF obj^.type # int THEN Err\(1\) END;)ashow 597 34 gm -0.51268 0.( )ashow 597 193 gm -0.00839 0.(TC.Emit3\(READ, TL.curLevel - obj^.level, obj^.adr\) .\))ashow 608 45 gm -0.83839 0.(| )ashow 608 57 gm -0.03640 0.("WRITE" Expression )ashow 608 181 gm -0.11680 0.(\(. IF type # int THEN Err\(1\) END; TC.Emit\(WRITE\) .\))ashow 619 45 gm 0.99903 0.(].)ashow 630 34 gm 0.01194 0.(\(*-----------------------------------------------------------------------------------------------------------------------------------------------*\))ashow 641 34 gm (Expression)show 641 181 gm -0.01834 0.(\(. VAR type1, op: INTEGER; .\))ashow 652 34 gm -0.75639 0.(= )ashow 652 45 gm 0.04043 0.(SimExpr)ashow 663 34 gm -1.00094 0.( )ashow 663 45 gm -0.04153 0.([ RelOp SimExpr)ashow 663 181 gm -0.05953 0.(\(. IF type # type1 THEN Err\(2\) END; TC.Emit\(op\); type := bool .\))ashow 674 34 gm -0.66729 0.( )ashow 674 45 gm 0.99903 0.(].)ashow 685 34 gm 0.01194 0.(\(*-----------------------------------------------------------------------------------------------------------------------------------------------*\))ashow F T cp %%Page: ? 29 op 0 0 xl 1 1 pen 20 477 gm (nc 746 0 781 538 6 rc)kp 29 495 gm (nc 0 0 35 538 6 rc)kp F 1 setTxMode 0 fs 9 fz bu fc 2 F /|______Helvetica fnt bn (29)show 58 34 gm (nc 50 0 505 538 6 rc)kp -0.14399 0.(RelOp)ashow 69 34 gm (=)show 69 45 gm -0.49002 0.("=" )ashow 69 181 gm (\(. )show 69 193 gm -0.06990 0.(op := equ .\))ashow 80 34 gm -0.83839 0.(| )ashow 80 45 gm -0.49002 0.("<" )ashow 80 181 gm (\(. )show 80 193 gm 0.05935 0. 32 0.00593 0.(op := lss .\))awidthshow 91 34 gm -0.83839 0.(| )ashow 91 45 gm -0.49002 0.(">" )ashow 91 181 gm (\(. )show 91 193 gm 0.05752 0. 32 0.00575 0.(op := gtr .\).)awidthshow 102 34 gm 0.01194 0.(\(*-----------------------------------------------------------------------------------------------------------------------------------------------*\))ashow 113 34 gm -0.06071 0.(SimExpr)ashow 113 181 gm -0.01834 0.(\(. VAR type1, op: INTEGER; .\))ashow 124 34 gm -0.75639 0.(= )ashow 124 45 gm -0.05657 0.(Term)ashow 135 34 gm -1.00094 0.( )ashow 135 45 gm -0.09320 0.({ AddOp Term)ashow 135 181 gm -0.08276 0.(\(. IF \(type # int\) OR \(type1 # int\) THEN Err\(1\) END; TC.Emit\(op\) .\))ashow 146 34 gm -0.66729 0.( )ashow 146 45 gm 0.49362 0.(}.)ashow 157 34 gm 0.01194 0.(\(*-----------------------------------------------------------------------------------------------------------------------------------------------*\))ashow 168 34 gm -0.12066 0.(AddOp)ashow 179 34 gm -0.75639 0.(= )ashow 179 45 gm -0.49002 0.("+" )ashow 179 181 gm 0.22476 0. 32 0.02247 0.(\(. op:=plus .\))awidthshow 190 34 gm -0.61311 0.( | )ashow 190 45 gm -0.48234 0.("-" )ashow 190 181 gm 0.21331 0. 32 0.02133 0.(\(. op:=minus .\).)awidthshow 201 34 gm 0.01194 0.(\(*-----------------------------------------------------------------------------------------------------------------------------------------------*\))ashow 212 34 gm -0.11421 0.(Term)ashow 212 181 gm (\(. )show 212 193 gm -0.02072 0.(VAR type1, op: INTEGER; .\))ashow 223 34 gm -0.75639 0.(= )ashow 223 45 gm 0.08927 0.(Factor)ashow 234 34 gm -1.00094 0.( )ashow 234 45 gm -0.50630 0.({ )ashow 234 57 gm -0.08158 0.(MulOp Factor )ashow 234 181 gm -0.08276 0.(\(. IF \(type # int\) OR \(type1 # int\) THEN Err\(1\) END; TC.Emit\(op\) .\))ashow 245 34 gm -1.00094 0.( )ashow 245 45 gm 0.49362 0.(}.)ashow 256 34 gm 0.01194 0.(\(*-----------------------------------------------------------------------------------------------------------------------------------------------*\))ashow 267 34 gm -0.14387 0.(MulOp)ashow 278 34 gm -0.75639 0.(= )ashow 278 45 gm -0.46780 0.("*" )ashow 278 181 gm -0.01568 0.(\(. op := times .\))ashow 289 34 gm -0.83839 0.(| )ashow 289 45 gm -0.46781 0.("/" )ashow 289 181 gm 0.12985 0. 32 0.01298 0.(\(. op := slash .\).)awidthshow 300 34 gm 0.01194 0.(\(*-----------------------------------------------------------------------------------------------------------------------------------------------*\))ashow 311 34 gm -0.04252 0.(Factor)ashow 311 181 gm -0.16545 0.( \(. )ashow 311 193 gm -0.03045 0.(VAR name: Name; val, n: INTEGER; obj: TL.Object; .\))ashow 322 34 gm -0.75639 0.(= )ashow 322 45 gm (\()show 322 57 gm -0.04791 0.( Ident)ashow 322 181 gm -0.16545 0.( \(. )ashow 322 193 gm 0.08483 0. 32 0.00848 0.(obj := TL.Obj\(name\); type := obj^.type;)awidthshow 333 34 gm -0.51268 0.( )ashow 333 193 gm -0.11917 0.(IF obj^.kind = vars THEN )ashow 344 204 gm 0.00625 0. 32 0.00062 0.(TC.Emit3\(LOAD, TL.curLevel - obj^.level, obj^.adr\))awidthshow 355 34 gm -0.51268 0.( )ashow 355 193 gm -0.04980 0.(ELSE Err\(4\))ashow 366 34 gm -0.51268 0.( )ashow 366 193 gm -0.19869 0.(END .\))ashow 377 34 gm -1.00094 0.( )ashow 377 45 gm -0.83839 0.(| )ashow 377 57 gm -0.48233 0.("TRUE" )ashow 377 181 gm (\(. )show 377 193 gm -0.00801 0.(TC.Emit2\(LIT, 1\); type := bool .\))ashow 388 34 gm -1.00094 0.( )ashow 388 45 gm -0.83839 0.(| )ashow 388 57 gm -0.43862 0.("FALSE" )ashow 388 181 gm (\(. )show 388 193 gm -0.00801 0.(TC.Emit2\(LIT, 0\); type := bool .\))ashow 399 34 gm -1.00094 0.( )ashow 399 45 gm -0.83839 0.(| )ashow 399 57 gm -0.43153 0.(number )ashow 399 181 gm 0.50462 0.(\(.)ashow 399 193 gm 0.32882 0. 32 0.03288 0.(TasteS.GetName\(TasteS.pos, TasteS.len, name\); )awidthshow 410 193 gm 0.02166 0. 32 0.00216 0.(StringToVal\(name, n\); TC.Emit2\(LIT, n\); type:=int .\))awidthshow 421 34 gm -1.00094 0.( )ashow 421 45 gm -0.83839 0.(| )ashow 421 57 gm -0.27680 0.("-" Factor )ashow 421 181 gm 0.50462 0.(\(.)ashow 421 193 gm -0.07302 0.(IF type # int THEN Err\(1\); type := int END; TC.Emit\(NEG\) .\))ashow 432 34 gm -1.00094 0.( )ashow 432 45 gm 0.50462 0.(\).)ashow 443 34 gm 0.01194 0.(\(*-----------------------------------------------------------------------------------------------------------------------------------------------*\))ashow 454 34 gm -0.14286 0.(Ident =)ashow 465 45 gm 0.12315 0.(ident)ashow 465 181 gm 0.50462 0.(\(.)ashow 465 193 gm 0.38604 0. 32 0.03860 0.(TasteS.GetName\(TasteS.pos, TasteS.len, name\) .\).)awidthshow 487 34 gm -0.05589 0.(END Taste.)ashow F T cp %%Page: ? 30 op 0 0 xl 1 1 pen 20 80 gm (nc 746 0 781 538 6 rc)kp 29 34 gm (nc 0 0 35 538 6 rc)kp F 1 setTxMode 0 fs 9 fz bu fc 2 F /|______Helvetica fnt bn (30)show 60 34 gm (nc 50 0 611 538 6 rc)kp 1 fs 10 fz bu fc 2 F /|______Helvetica-Bold fnt bn 1.01123 0.(References)ashow 88 34 gm 0 fs bu fc 2 F /|______Helvetica fnt bn 0.42288 0.([Ben88])ashow 88 85 gm 0.17883 0. 32 0.01788 0.(J.Bentley: More Programming Pearls. Addison-Wesley 1988)awidthshow 116 34 gm 0.23678 0.([DoPi90])ashow 116 85 gm 0.08255 0. 32 0.00825 0.(H.Dobler, K.Pirklbauer: Coco-2 \320 A New Compiler-Compiler. Technical Report TR 90/1, Institut)awidthshow 130 85 gm -0.07165 0.(f\237r Informatik, Universit\212t Linz)ashow 158 34 gm -0.22354 0.([GaGi84] )ashow 158 85 gm 0.29418 0. 32 0.02941 0.(H.Ganzinger, R.Giegerich: Attribute Coupled Grammars. SIGPLAN Notices 19 \(1984\), 6, 157-)awidthshow 172 85 gm 0.66137 0.(170)ashow 200 34 gm -0.01684 0.([Gro88] )ashow 200 85 gm 0.89736 0. 32 0.08973 0.(J.Grosch: Generators for High-Speed Front-Ends. Lecture Notes in Computer Science 371,)awidthshow 214 85 gm 0.43853 0. 32 0.04385 0.(Springer Verlag, 1988)awidthshow 242 34 gm 0.32333 0. 32 0.03233 0.([KHZ82] )awidthshow 242 85 gm 0.89889 0. 32 0.08988 0.(U.Kastens, B.Hutt, E.Zimmermann: GAG: A Practical Compiler Generator. Lecture Notes in)awidthshow 256 85 gm 0.38116 0. 32 0.03811 0.(Computer Science 141, Springer Verlag, 1982)awidthshow 284 34 gm 1.03866 0. 32 0.10386 0.([John75] )awidthshow 284 85 gm 0.38330 0. 32 0.03833 0.(S.C.Johnson: YACC \320 Yet another Compiler-Compiler. Tech.Report No 32, Bell Laboratories,)awidthshow 298 85 gm 0.67077 0. 32 0.06707 0.(July 1975)awidthshow 326 34 gm 0.35018 0. 32 0.03501 0.([Knu68] )awidthshow 326 85 gm 0.85784 0. 32 0.08578 0.(D.E.Knuth: Semantics of Context-Free Languages. Mathematical Systems Theory 2 \(1968\),)awidthshow 340 85 gm 0.38630 0.(127-145)ashow 368 34 gm 0.20547 0.([M\232ss86])ashow 368 85 gm 1.18850 0. 32 0.11885 0.(H.M\232ssenb\232ck: Compilererzeugende Systeme f\237r Mikrocomputer. Ph.D. thesis, Universit\212t)awidthshow 382 85 gm 0.98403 0. 32 0.09840 0.(Linz, 1986)awidthshow 410 34 gm -0.15359 0.([R\212i83] )ashow 410 85 gm 0.45455 0. 32 0.04545 0.(K.-J. R\212ih\212, et al.: Revised Report on the Compiler Writing System HLP78. Report A-1983-1,)awidthshow 424 85 gm 0.02792 0. 32 0.00279 0.(Department of Computer Science, University of Helsinki)awidthshow 452 34 gm 0.23712 0.([ReM\23289])ashow 452 85 gm 0.11764 0. 32 0.01176 0.(P.Rechenberg, H.M\232ssenb\232ck: A Compiler Generator for Microcomputers. Prentice Hall 1989)awidthshow 480 34 gm 0.42547 0.([Senn89])ashow 480 85 gm (R.Sennhauser: \206bersetzung attributierter Grammatiken. Diploma thesis, ETH Zurich, 1989)show 508 34 gm 0.09642 0.([Waite86])ashow 508 85 gm -0.04191 0.(W.M.Waite: The Cost of Lexical Analysis. Software \320 Practice and Experience 16 \(1986\), 5, )ashow 522 85 gm 0.38630 0.(473-488)ashow 550 34 gm 0.12535 0.([Wirth76])ashow 550 85 gm -0.04763 0.(N.Wirth: Algorithms + Data Structures = Programs. Prentice-Hall, 1976)ashow 578 34 gm 0.12535 0.([Wirth86])ashow 578 85 gm 0.49133 0. 32 0.04913 0.(N.Wirth: Compilerbau. 4th edition. Teubner Studienb\237cher, 1986)awidthshow 606 34 gm 0.12535 0.([Wirth89])ashow 606 85 gm 0.17654 0. 32 0.01765 0.(N.Wirth: The Programming Language Oberon. Report 111, ETH Zurich, September 1989)awidthshow F T cp %%Trailer cd end %%Pages: 30 0 %%EOF \ No newline at end of file diff --git a/src/tools/coco/Coco.Tool b/src/tools/coco/Coco.Tool new file mode 100644 index 00000000..643019ff --- /dev/null +++ b/src/tools/coco/Coco.Tool @@ -0,0 +1,83 @@ +Coco/R - the Oberon scanner and parser generator + +For a complete documentation see the postscript file Coco.Report.ps. + +Compiler.Compile + Sets.Mod CRS.Mod CRT.Mod CRA.Mod CRX.Mod CRP.Mod Coco.Mod ~ + +NOTE: the option character should be changed to "\" in Coco.Mod for Unix implementations. + + +Coco.Compile * +Coco.Compile ~ +Coco.Compile ^ +Coco.Compile @ + +(*________________________ usage ________________________*) + +Coco.Compile [options] + +The file CR.ATG is an example of an input file to Coco. If the grammar in the input file has the name X +the generated scanner has the name XS.Mod and the generated parser has the name XP.Mod. + +Options: + + /X generates a cross reference list of all syntax symbols + /S generates a list of all terminal start symbols and successors of nonterminal symbols. + +Interface of the generated scanner: + + DEFINITION XS; + IMPORT Texts; + TYPE + ErrorProc = PROCEDURE (n: INTEGER; pos: LONGINT); + VAR + Error: ErrorProc; + col, errors, len, line, nextCol, nextLen, nextLine: INTEGER; + nextPos, pos: LONGINT; + src: Texts.Text; + PROCEDURE Reset (t: Texts.Text; pos: LONGINT; errProc: ErrorProc); + PROCEDURE Get(VAR sym: INTEGER); + PROCEDURE GetName(pos: LONGINT; len: INTEGER; VAR name: ARRAY OF CHAR); + PROCEDURE StdErrorProc (n: INTEGER; pos: LONGINT); + END XS. + +Interface of the generated parser: + + DEFINITION XP; + PROCEDURE Parse; + END XP. + +Example how to use the generated parts; + + Texts.OpenScanner(s, Oberon.Par.Text, Oberon.Par.Pos); Texts.Scan(s); + IF s.class = Texts.Name THEN + NEW(text); Texts.Open(text, s.s); + XS.Reset(text, 0, MyErrorHandler); + XP.Parse; + END + + +Error handling in the generated parser: + +The grammar has to contain hints, from which Coco can generate appropriate error handling. +The hints can be placed arbitrarily on the right-hand side of a production: + + SYNC Denotes a synchronisation point. At such points symbols are skipped until a symbol + is found which is a legal continuation symbol at that point (or eof). SYNC is usually + placed at points where particularly "safe" symbols are expected, i.e., symbols that + are rarely missing or misspelled. + + WEAK s s is an arbitrary terminal symbol (e.g., ";") which is considered "weak", because it is + frequently missing or misspelled (e.g., a semicolon between statements). + +Example: + + Statement = + SYNC + ( ident WEAK ":=" Expression + | "IF" Expression "THEN" StatSeq ["ELSE" StatSeq] "END" + | "WHILE" Expression "DO" StatSeq "END" + ). + StatSeq = + Statement { WEAK ";" Statement}.þ diff --git a/src/tools/coco/Oberon.Mod b/src/tools/coco/Oberon.Mod new file mode 100644 index 00000000..446d7e8a --- /dev/null +++ b/src/tools/coco/Oberon.Mod @@ -0,0 +1,8 @@ +MODULE Oberon; + +IMPORT Texts := CmdlnTexts; + +VAR Log* : Texts.Text; + + +END Oberon. diff --git a/src/tools/coco/Parser.FRM b/src/tools/coco/Parser.FRM new file mode 100644 index 00000000..dda6c41c --- /dev/null +++ b/src/tools/coco/Parser.FRM @@ -0,0 +1,65 @@ +(* parser module generated by Coco-R *) +MODULE -->modulename; + +IMPORT -->scanner; + +CONST + -->constants + setSize = 32; nSets = (maxT DIV setSize) + 1; + +TYPE + SymbolSet = ARRAY nSets OF SET; + +VAR + sym: INTEGER; (* current input symbol *) + symSet: ARRAY nrSets OF SymbolSet; + +-->declarations + +PROCEDURE Error (n: INTEGER); +BEGIN -->errors +END Error; + +PROCEDURE Get; +BEGIN + -->scanProc +END Get; + +PROCEDURE Expect(n: INTEGER); +BEGIN IF sym = n THEN Get ELSE Error(n) END +END Expect; + +PROCEDURE StartOf(s: INTEGER): BOOLEAN; +BEGIN RETURN (sym MOD setSize) IN symSet[s, sym DIV setSize] +END StartOf; + +PROCEDURE ExpectWeak(n, follow: INTEGER); +BEGIN + IF sym = n THEN Get + ELSE Error(n); WHILE ~ StartOf(follow) DO Get END + END +END ExpectWeak; + +PROCEDURE WeakSeparator(n, syFol, repFol: INTEGER): BOOLEAN; + VAR s: SymbolSet; i: INTEGER; +BEGIN + IF sym = n THEN Get; RETURN TRUE + ELSIF StartOf(repFol) THEN RETURN FALSE + ELSE + i := 0; WHILE i < nSets DO s[i] := symSet[syFol, i] + symSet[repFol, i] + symSet[0, i]; INC(i) END; + Error(n); WHILE ~ ((sym MOD setSize) IN s[sym DIV setSize]) DO Get END; + RETURN StartOf(syFol) + END +END WeakSeparator; + +-->productions + +PROCEDURE Parse*; +BEGIN + Get; +-->parseRoot +END Parse; + +BEGIN +-->initialization +END -->modulename. diff --git a/src/tools/coco/Scanner.FRM b/src/tools/coco/Scanner.FRM new file mode 100644 index 00000000..9497082b --- /dev/null +++ b/src/tools/coco/Scanner.FRM @@ -0,0 +1,103 @@ +(* scanner module generated by Coco-R *) +MODULE -->modulename; + +IMPORT Texts := CmdlnTexts, SYSTEM; + +CONST + EOL = 0DX; + EOF = 0X; + maxLexLen = 127; +-->declarations + +TYPE + ErrorProc* = PROCEDURE (n: INTEGER; pos: LONGINT); + StartTable = ARRAY 128 OF INTEGER; + +VAR + src*: Texts.Text; (*source text. To be set by the main pgm*) + pos*: LONGINT; (*position of current symbol*) + line*, col*, len*: INTEGER; (*line, column, length of current symbol*) + nextPos*: LONGINT; (*position of lookahead symbol*) + nextLine*, nextCol*, nextLen*: INTEGER; (*line, column, length of lookahead symbol*) + errors*: INTEGER; (*number of errors detected*) + Error*: ErrorProc; + + ch: CHAR; (*current input character*) + r: Texts.Reader; (*global reader*) + chPos: LONGINT; (*position of current character*) + chLine: INTEGER; (*current line number*) + lineStart: LONGINT; (*start position of current line*) + apx: INTEGER; (*length of appendix*) + oldEols: INTEGER; (*nr. of EOLs in a comment*) + + start: StartTable; (*start state for every character*) + + +PROCEDURE NextCh; (*return global variable ch*) +BEGIN + Texts.Read(r, ch); INC(chPos); + IF ch = EOL THEN INC(chLine); lineStart := chPos + 1 END +END NextCh; + + +PROCEDURE Comment(): BOOLEAN; + VAR level, startLine: INTEGER; oldLineStart: LONGINT; +BEGIN (*Comment*) + level := 1; startLine := chLine; oldLineStart := lineStart; +-->comment +END Comment; + + +PROCEDURE Get*(VAR sym: INTEGER); +VAR state: INTEGER; lexeme: ARRAY maxLexLen+1 OF CHAR; + + PROCEDURE CheckLiteral; + BEGIN + IF nextLen < maxLexLen THEN lexeme[nextLen] := 0X END; +-->literals + END CheckLiteral; + +BEGIN +-->GetSy1 + IF ch > 7FX THEN ch := " " END; + pos := nextPos; col := nextCol; line := nextLine; len := nextLen; + nextPos := chPos; nextCol := SHORT(chPos - lineStart); nextLine := chLine; nextLen := 0; + state := start[ORD(ch)]; apx := 0; + LOOP + IF nextLen < maxLexLen THEN lexeme[nextLen] := ch END; + INC(nextLen); + NextCh; + IF state > 0 THEN + CASE state OF +-->GetSy2 + END (*CASE*) + ELSE sym := noSym; RETURN (*NextCh already done*) + END (*IF*) + END (*LOOP*) +END Get; + + +PROCEDURE GetName*(pos: LONGINT; len: INTEGER; VAR s: ARRAY OF CHAR); + VAR i: INTEGER; r: Texts.Reader; +BEGIN + Texts.OpenReader(r, src, pos); + IF len >= LEN(s) THEN len := SHORT(LEN(s)) - 1 END; + i := 0; WHILE i < len DO Texts.Read(r, s[i]); INC(i) END; + s[i] := 0X +END GetName; + +PROCEDURE StdErrorProc* (n: INTEGER; pos: LONGINT); +BEGIN INC(errors) END StdErrorProc; + +PROCEDURE Reset* (t: Texts.Text; pos: LONGINT; errProc: ErrorProc); +BEGIN + src := t; Error := errProc; + Texts.OpenReader(r, src, pos); + chPos := pos - 1; chLine := 1; lineStart := 0; + oldEols := 0; apx := 0; errors := 0; + NextCh +END Reset; + +BEGIN +-->initialization +END -->modulename. diff --git a/src/tools/coco/Sets.Mod b/src/tools/coco/Sets.Mod new file mode 100644 index 00000000..d98ec028 --- /dev/null +++ b/src/tools/coco/Sets.Mod @@ -0,0 +1,138 @@ +MODULE Sets; + +IMPORT Texts := CmdlnTexts; + +CONST size* = 32; + + +PROCEDURE Clear*(VAR s: ARRAY OF SET); + VAR i: INTEGER; +BEGIN + i := 0; WHILE i < LEN(s) DO s[i] := {}; INC(i) END +END Clear; + + +PROCEDURE Fill*(VAR s: ARRAY OF SET); + VAR i: INTEGER; +BEGIN + i := 0; WHILE i < LEN(s) DO s[i] := {0 .. size-1}; INC(i) END +END Fill; + + +PROCEDURE Incl*(VAR s: ARRAY OF SET; x: INTEGER); +BEGIN INCL(s[x DIV size], x MOD size) +END Incl; + + +PROCEDURE Excl*(VAR s: ARRAY OF SET; x: INTEGER); +BEGIN EXCL(s[x DIV size], x MOD size) +END Excl; + + +PROCEDURE In*(VAR s: ARRAY OF SET; x: INTEGER): BOOLEAN; +BEGIN RETURN x MOD size IN s[x DIV size] +END In; + + +PROCEDURE Includes*(VAR s1, s2: ARRAY OF SET): BOOLEAN; + VAR i: INTEGER; +BEGIN + i := 0; + WHILE i < LEN(s1) DO + IF s1[i] + s2[i] # s1[i] THEN RETURN FALSE END; + INC(i) + END; + RETURN TRUE; +END Includes; + + +PROCEDURE Elements*(VAR s: ARRAY OF SET; VAR lastElem: INTEGER): INTEGER; + VAR i, n, max: INTEGER; +BEGIN + i := 0; n := 0; max := SHORT(LEN(s)) * size; + WHILE i < max DO + IF (i MOD size) IN s[i DIV size] THEN INC(n); lastElem := i END; + INC(i) + END; + RETURN n +END Elements; + + +PROCEDURE Empty*(VAR s: ARRAY OF SET): BOOLEAN; + VAR i: INTEGER; +BEGIN + i := 0; + WHILE i < LEN(s) DO + IF s[i] # {} THEN RETURN FALSE END; + INC(i) + END; + RETURN TRUE +END Empty; + + +PROCEDURE Equal*(VAR s1, s2: ARRAY OF SET): BOOLEAN; + VAR i: INTEGER; +BEGIN + i := 0; + WHILE i < LEN(s1) DO + IF s1[i] # s2[i] THEN RETURN FALSE END; + INC(i) + END; + RETURN TRUE +END Equal; + + +PROCEDURE Different*(VAR s1, s2: ARRAY OF SET): BOOLEAN; + VAR i: INTEGER; +BEGIN + i := 0; + WHILE i < LEN(s1) DO + IF s1[i] * s2[i] # {} THEN RETURN FALSE END; + INC(i) + END; + RETURN TRUE +END Different; + + +PROCEDURE Unite*(VAR s1, s2: ARRAY OF SET); + VAR i: INTEGER; +BEGIN + i := 0; WHILE i < LEN(s1) DO s1[i] := s1[i] + s2[i]; INC(i) END +END Unite; + + +PROCEDURE Differ*(VAR s1, s2: ARRAY OF SET); + VAR i: INTEGER; +BEGIN + i := 0; WHILE i < LEN(s1) DO s1[i] := s1[i] - s2[i]; INC(i) END +END Differ; + + +PROCEDURE Intersect*(VAR s1, s2, s3: ARRAY OF SET); + VAR i: INTEGER; +BEGIN + i := 0; WHILE i < LEN(s1) DO s3[i] := s1[i] * s2[i]; INC(i) END +END Intersect; + + +PROCEDURE Print*(VAR f: Texts.Writer; s: ARRAY OF SET; w, indent: INTEGER); + VAR col, i, max: INTEGER; +BEGIN + i := 0; col := indent; max := SHORT(LEN(s)) * size; + Texts.Write(f, "{"); + WHILE i < max DO + IF In(s, i) THEN + IF col + 4 > w THEN + Texts.WriteLn(f); + col := 0; WHILE col < indent DO Texts.Write(f, " "); INC(col) END + END; + Texts.WriteInt(f, i, 3); Texts.Write(f, ","); + INC(col, 4) + END; + INC(i) + END; + Texts.Write(f, "}") +END Print; + + +END Sets. diff --git a/src/tools/coco/v4_compat/Oberon.Mod b/src/tools/coco/v4_compat/Oberon.Mod new file mode 100755 index 00000000..13be167a --- /dev/null +++ b/src/tools/coco/v4_compat/Oberon.Mod @@ -0,0 +1,471 @@ +MODULE Oberon; (*JG 6.9.90 / 23.9.93*) + + IMPORT SYSTEM, Unix, Kernel, Modules, Input, Display, Fonts, Viewers, Texts, X11; (* << *) + + CONST + + (*message ids*) + consume* = 0; track* = 1; + defocus* = 0; neutralize* = 1; mark* = 2; + + BasicCycle = 20; + + ESC = 1BX; SETUP = 0A4X; + + TYPE + + Painter* = PROCEDURE (x, y: INTEGER); + Marker* = RECORD Fade*, Draw*: Painter END; + + Cursor* = RECORD + marker*: Marker; on*: BOOLEAN; X*, Y*: INTEGER + END; + + ParList* = POINTER TO ParRec; + + ParRec* = RECORD + vwr*: Viewers.Viewer; + frame*: Display.Frame; + text*: Texts.Text; + pos*: LONGINT + END; + + InputMsg* = RECORD (Display.FrameMsg) + id*: INTEGER; + keys*: SET; + X*, Y*: INTEGER; + ch*: CHAR; + fnt*: Fonts.Font; + col*, voff*: SHORTINT + END; + + SelectionMsg* = RECORD (Display.FrameMsg) + time*: LONGINT; + text*: Texts.Text; + beg*, end*: LONGINT + END; + + ControlMsg* = RECORD (Display.FrameMsg) + id*, X*, Y*: INTEGER + END; + + CopyOverMsg* = RECORD (Display.FrameMsg) + text*: Texts.Text; + beg*, end*: LONGINT + END; + + CopyMsg* = RECORD (Display.FrameMsg) + F*: Display.Frame + END; + + Task* = POINTER TO TaskDesc; + + Handler* = PROCEDURE; + + TaskDesc* = RECORD + next: Task; + safe*: BOOLEAN; + time*: LONGINT; + handle*: Handler + END; + + VAR + User*: ARRAY 12 OF CHAR; (* << *) + + Arrow*, Star*: Marker; + Mouse*, Pointer*: Cursor; + + FocusViewer*: Viewers.Viewer; + + Log*: Texts.Text; + Par*: ParList; (*actual parameters*) + + CurTask*, PrevTask: Task; + + CurFnt*: Fonts.Font; CurCol*, CurOff*: SHORTINT; + Password*: LONGINT; + + DW, DH, CL, H0, H1, H2, H3: INTEGER; + unitW: INTEGER; + + ActCnt: INTEGER; (*action count for GC*) + Mod: Modules.Module; + ArrowFade: Painter; (* << *) + + (*user identification*) + + PROCEDURE Code(VAR s: ARRAY OF CHAR): LONGINT; + VAR i: INTEGER; a, b, c: LONGINT; + BEGIN + a := 0; b := 0; i := 0; + WHILE s[i] # 0X DO + c := b; b := a; a := (c MOD 509 + 1) * 127 + ORD(s[i]); + INC(i) + END; + IF b >= 32768 THEN b := b - 65536 END; + RETURN b * 65536 + a + END Code; + + PROCEDURE SetUser* (VAR user, password: ARRAY OF CHAR); + BEGIN COPY(user, User); Password := Code(password) + END SetUser; + + (*clocks*) + + PROCEDURE GetClock* (VAR t, d: LONGINT); + BEGIN Kernel.GetClock(t, d) + END GetClock; + + PROCEDURE SetClock* (t, d: LONGINT); + BEGIN Kernel.SetClock(t, d) + END SetClock; + + PROCEDURE Time* (): LONGINT; + BEGIN RETURN Input.Time() + END Time; + + (*cursor handling*) + + PROCEDURE FlipArrow (X, Y: INTEGER); (* << *) + END FlipArrow; + + PROCEDURE FlipStar (X, Y: INTEGER); + BEGIN + IF X < CL THEN + IF X < 7 THEN X := 7 ELSIF X > DW - 8 THEN X := DW - 8 END + ELSE + IF X < CL + 7 THEN X := CL + 7 ELSIF X > CL + DW - 8 THEN X := CL + DW - 8 END + END ; + IF Y < 7 THEN Y := 7 ELSIF Y > DH - 8 THEN Y := DH - 8 END; + Display.CopyPattern(Display.white, Display.star, X - 7, Y - 7, 2) + END FlipStar; + + PROCEDURE OpenCursor* (VAR c: Cursor); + BEGIN c.on := FALSE; c.X := 0; c.Y := 0 + END OpenCursor; + + PROCEDURE FadeCursor* (VAR c: Cursor); + BEGIN IF c.on THEN c.marker.Fade(c.X, c.Y); c.on := FALSE END + END FadeCursor; + + PROCEDURE DrawCursor* (VAR c: Cursor; VAR m: Marker; X, Y: INTEGER); (* << RC *) + BEGIN + IF c.on & ((X # c.X) OR (Y # c.Y) OR (m.Draw # c.marker.Draw)) THEN + c.marker.Fade(c.X, c.Y); c.on := FALSE + END; + IF c.marker.Fade = ArrowFade THEN + IF m.Fade # ArrowFade THEN X11.DefineCursor(X11.display, X11.primary, X11.noCursor) END + ELSE + IF m.Fade = ArrowFade THEN X11.DefineCursor(X11.display, X11.primary, X11.arrow) END + END ; + IF ~c.on THEN + m.Draw(X, Y); c.marker := m; c.X := X; c.Y := Y; c.on := TRUE + END + END DrawCursor; + + (*display management*) + + PROCEDURE RemoveMarks* (X, Y, W, H: INTEGER); + BEGIN + IF (Mouse.X > X - 16) & (Mouse.X < X + W + 16) & (Mouse.Y > Y - 16) & (Mouse.Y < Y + H + 16) THEN + FadeCursor(Mouse) + END; + IF (Pointer.X > X - 8) & (Pointer.X < X + W + 8) & (Pointer.Y > Y - 8) & (Pointer.Y < Y + H + 8) THEN + FadeCursor(Pointer) + END + END RemoveMarks; + + PROCEDURE HandleFiller (V: Display.Frame; VAR M: Display.FrameMsg); + BEGIN + WITH V: Viewers.Viewer DO + IF M IS InputMsg THEN + WITH M: InputMsg DO + IF M.id = track THEN DrawCursor(Mouse, Arrow, M.X, M.Y) END + END; + ELSIF M IS ControlMsg THEN + WITH M: ControlMsg DO + IF M.id = mark THEN DrawCursor(Pointer, Star, M.X, M.Y) END + END + ELSIF M IS Viewers.ViewerMsg THEN + WITH M: Viewers.ViewerMsg DO + IF (M.id = Viewers.restore) & (V.W > 0) & (V.H > 0) THEN + RemoveMarks(V.X, V.Y, V.W, V.H); + Display.ReplConst(Display.black, V.X, V.Y, V.W, V.H, 0) + ELSIF (M.id = Viewers.modify) & (M.Y < V.Y) THEN + RemoveMarks(V.X, M.Y, V.W, V.Y - M.Y); + Display.ReplConst(Display.black, V.X, M.Y, V.W, V.Y - M.Y, 0) + END + END + END + END + END HandleFiller; + + PROCEDURE OpenDisplay* (UW, SW, H: INTEGER); + VAR Filler: Viewers.Viewer; + BEGIN + Input.SetMouseLimits(Viewers.curW + UW + SW, H); + Display.ReplConst(Display.black, Viewers.curW, 0, UW + SW, H, 0); + NEW(Filler); Filler.handle := HandleFiller; + Viewers.InitTrack(UW, H, Filler); (*init user track*) + NEW(Filler); Filler.handle := HandleFiller; + Viewers.InitTrack(SW, H, Filler) (*init system track*) + END OpenDisplay; + + PROCEDURE DisplayWidth* (X: INTEGER): INTEGER; + BEGIN RETURN DW + END DisplayWidth; + + PROCEDURE DisplayHeight* (X: INTEGER): INTEGER; + BEGIN RETURN DH + END DisplayHeight; + + PROCEDURE OpenTrack* (X, W: INTEGER); + VAR Filler: Viewers.Viewer; + BEGIN + NEW(Filler); Filler.handle := HandleFiller; + Viewers.OpenTrack(X, W, Filler) + END OpenTrack; + + PROCEDURE UserTrack* (X: INTEGER): INTEGER; + BEGIN RETURN X DIV DW * DW + END UserTrack; + + PROCEDURE SystemTrack* (X: INTEGER): INTEGER; + BEGIN RETURN X DIV DW * DW + DW DIV 8 * 5 + END SystemTrack; + + PROCEDURE UY (X: INTEGER): INTEGER; + VAR fil, bot, alt, max: Display.Frame; + BEGIN + Viewers.Locate(X, 0, fil, bot, alt, max); + IF fil.H >= DH DIV 8 THEN RETURN DH END; + RETURN max.Y + max.H DIV 2 + END UY; + + PROCEDURE AllocateUserViewer* (DX: INTEGER; VAR X, Y: INTEGER); + BEGIN + IF Pointer.on THEN X := Pointer.X; Y := Pointer.Y + ELSE X := DX DIV DW * DW; Y := UY(X) + END + END AllocateUserViewer; + + PROCEDURE SY (X: INTEGER): INTEGER; + VAR fil, bot, alt, max: Display.Frame; + BEGIN + Viewers.Locate(X, DH, fil, bot, alt, max); + IF fil.H >= DH DIV 8 THEN RETURN DH END; + IF max.H >= DH - H0 THEN RETURN max.Y + H3 END; + IF max.H >= H3 - H0 THEN RETURN max.Y + H2 END; + IF max.H >= H2 - H0 THEN RETURN max.Y + H1 END; + IF max # bot THEN RETURN max.Y + max.H DIV 2 END; + IF bot.H >= H1 THEN RETURN bot.H DIV 2 END; + RETURN alt.Y + alt.H DIV 2 + END SY; + + PROCEDURE AllocateSystemViewer* (DX: INTEGER; VAR X, Y: INTEGER); + BEGIN + IF Pointer.on THEN X := Pointer.X; Y := Pointer.Y + ELSE X := DX DIV DW * DW + DW DIV 8 * 5; Y := SY(X) + END + END AllocateSystemViewer; + + PROCEDURE MarkedViewer* (): Viewers.Viewer; + BEGIN RETURN Viewers.This(Pointer.X, Pointer.Y) + END MarkedViewer; + + PROCEDURE PassFocus* (V: Viewers.Viewer); + VAR M: ControlMsg; + BEGIN M.id := defocus; FocusViewer.handle(FocusViewer, M); FocusViewer := V + END PassFocus; + + (*command interpretation*) + + PROCEDURE Call* (name: ARRAY OF CHAR; par: ParList; new: BOOLEAN; VAR res: INTEGER); + VAR Mod: Modules.Module; P: Modules.Command; i, j: INTEGER; + BEGIN res := 1; + i := 0; j := 0; + WHILE name[j] # 0X DO + IF name[j] = "." THEN i := j END; + INC(j) + END; + IF i > 0 THEN + name[i] := 0X; + Mod := Modules.ThisMod(name); + IF Modules.res = 0 THEN + INC(i); j := i; + WHILE name[j] # 0X DO name[j - i] := name[j]; INC(j) END; + name[j - i] := 0X; + P := Modules.ThisCommand(Mod, name); + IF Modules.res = 0 THEN + Par := par; Par.vwr := Viewers.This(par.frame.X, par.frame.Y); P; res := 0 + ELSE res := -1 + END + ELSE res := Modules.res + END + ELSE res := -1 + END + END Call; + + PROCEDURE GetSelection* (VAR text: Texts.Text; VAR beg, end, time: LONGINT); + VAR M: SelectionMsg; + BEGIN + M.time := -1; Viewers.Broadcast(M); time := M.time; + IF time >= 0 THEN text := M.text; beg := M.beg; end := M.end END + END GetSelection; + + PROCEDURE GC; + BEGIN IF ActCnt <= 0 THEN Kernel.GC(FALSE); ActCnt := BasicCycle END + END GC; + + PROCEDURE Install* (T: Task); + VAR t: Task; + BEGIN t := PrevTask; + WHILE (t.next # PrevTask) & (t.next # T) DO t := t.next END; + IF (t.next # T) & (CurTask # T) THEN + IF CurTask # NIL THEN (* called from a task *) + T.next := CurTask.next; CurTask.next := T + ELSE (* no task is currently running *) + T.next := PrevTask.next; PrevTask.next := T + END + END + END Install; + + PROCEDURE Remove* (T: Task); + VAR t: Task; + BEGIN t := PrevTask; + WHILE (t.next # T) & (t.next # PrevTask) DO t := t.next END; + IF t.next = T THEN t.next := t.next.next; PrevTask := t.next END; + IF CurTask = T THEN CurTask := PrevTask.next END + END Remove; + + PROCEDURE Collect* (count: INTEGER); + BEGIN ActCnt := count + END Collect; + + PROCEDURE SetFont* (fnt: Fonts.Font); + BEGIN CurFnt := fnt + END SetFont; + + PROCEDURE SetColor* (col: SHORTINT); + BEGIN CurCol := col + END SetColor; + + PROCEDURE SetOffset* (voff: SHORTINT); + BEGIN CurOff := voff + END SetOffset; + + PROCEDURE MinTime(): LONGINT; (* << *) + VAR minTime: LONGINT; t: Task; + BEGIN + minTime := MAX(LONGINT); t := PrevTask; + REPEAT + IF (t.time # -1) & (t.time < minTime) THEN minTime := t.time END ; + t := t.next; + UNTIL t = PrevTask ; + RETURN minTime + END MinTime; + + PROCEDURE NotifyTasks; (* << *) + VAR t0, p: Task; + BEGIN t0 := PrevTask; + REPEAT + CurTask := PrevTask.next; + IF CurTask.time = -1 THEN + IF ~CurTask.safe THEN PrevTask.next := CurTask.next END; + p := CurTask; CurTask.handle; PrevTask.next := CurTask; + IF CurTask # p THEN RETURN END (*detect Remove(CurTask)*) + END; + PrevTask := CurTask + UNTIL CurTask = t0 + END NotifyTasks; + + PROCEDURE Loop*; + VAR V: Viewers.Viewer; M: InputMsg; N: ControlMsg; + prevX, prevY, X, Y: INTEGER; keys: SET; ch: CHAR; + VM: Viewers.ViewerMsg; i: INTEGER; res: LONGINT; (* << *) + BEGIN + res := Kernel.sigsetjmp(Kernel.trapEnv, 1); (* << *) + LOOP + CurTask := NIL; + Input.Mouse(keys, X, Y); + IF Input.Available() > 0 THEN Input.Read(ch); + IF ch < 0F0X THEN + IF ch = ESC THEN + N.id := neutralize; Viewers.Broadcast(N); FadeCursor(Pointer) + ELSIF ch = SETUP THEN + N.id := mark; N.X := X; N.Y := Y; V := Viewers.This(X, Y); V.handle(V, N) + ELSIF ch = 0CX THEN (* << *) + N.id := neutralize; Viewers.Broadcast(N); FadeCursor(Pointer); + VM.id := Viewers.suspend; Viewers.Broadcast(VM); + VM.id := Viewers.restore; Viewers.Broadcast(VM) + ELSE + M.id := consume; M.ch := ch; M.fnt := CurFnt; M.col := CurCol; M.voff := CurOff; + FocusViewer.handle(FocusViewer, M); + DEC(ActCnt); NotifyTasks + END + ELSIF ch = 0F1X THEN Display.SetMode(0, {}) + ELSIF ch = 0F2X THEN Display.SetMode(0, {0}) + ELSIF ch = 0F3X THEN Display.SetMode(0, {2}) + ELSIF ch = 0F4X THEN X11.InitColors + ELSIF Kernel.FKey[ORD(ch) - 0F0H] # NIL THEN Kernel.FKey[ORD(ch) - 0F0H] + END + ELSIF keys # {} THEN + M.id := track; M.X := X; M.Y := Y; M.keys := keys; + REPEAT + V := Viewers.This(M.X, M.Y); V.handle(V, M); + Input.Mouse(M.keys, M.X, M.Y) + UNTIL M.keys = {}; + DEC(ActCnt); NotifyTasks + ELSE + IF (X # prevX) OR (Y # prevY) OR ~Mouse.on THEN + M.id := track; M.X := X; M.Y := Y; M.keys := keys; V := Viewers.This(X, Y); V.handle(V, M); + prevX := X; prevY := Y + END; + X11.DoSync; (* << *) + IF X11.EventsQueued(X11.display, X11.QueuedAfterReading) = 0 THEN (* << *) + Kernel.Select(MinTime() - Input.Time()); NotifyTasks; + FOR i := 0 TO 7 DO Kernel.readySet[i] := {} END + END ; + CurTask := PrevTask.next; + IF (CurTask.time <= Input.Time()) & (CurTask.time # -1) THEN + IF ~CurTask.safe THEN PrevTask.next := CurTask.next END; + CurTask.handle; PrevTask.next := CurTask + END; + PrevTask := CurTask + END + END + END Loop; + +BEGIN User[0] := 0X; + Arrow.Fade := FlipArrow; Arrow.Draw := FlipArrow; + ArrowFade := FlipArrow; (* << *) + Star.Fade := FlipStar; Star.Draw := FlipStar; + OpenCursor(Mouse); OpenCursor(Pointer); + + DW := Display.Width; DH := Display.Height; CL := Display.ColLeft; + H3 := DH - DH DIV 3; + H2 := H3 - H3 DIV 2; + H1 := DH DIV 5; + H0 := DH DIV 10; + +(* moved into Configuration.Mod + unitW := DW DIV 8; + OpenDisplay(unitW * 5, unitW * 3, DH); + FocusViewer := Viewers.This(0, 0); +*) + + CurFnt := Fonts.Default; + CurCol := Display.white; + CurOff := 0; + + Collect(BasicCycle); + NEW(PrevTask); + PrevTask.handle := GC; + PrevTask.safe := TRUE; + PrevTask.time := -1; (* << *) + PrevTask.next := PrevTask; + CurTask := NIL; + + Display.SetMode(0, {}); + +END Oberon. diff --git a/src/tools/coco/v4_compat/Oberon.Mod_orig b/src/tools/coco/v4_compat/Oberon.Mod_orig new file mode 100644 index 00000000..13be167a --- /dev/null +++ b/src/tools/coco/v4_compat/Oberon.Mod_orig @@ -0,0 +1,471 @@ +MODULE Oberon; (*JG 6.9.90 / 23.9.93*) + + IMPORT SYSTEM, Unix, Kernel, Modules, Input, Display, Fonts, Viewers, Texts, X11; (* << *) + + CONST + + (*message ids*) + consume* = 0; track* = 1; + defocus* = 0; neutralize* = 1; mark* = 2; + + BasicCycle = 20; + + ESC = 1BX; SETUP = 0A4X; + + TYPE + + Painter* = PROCEDURE (x, y: INTEGER); + Marker* = RECORD Fade*, Draw*: Painter END; + + Cursor* = RECORD + marker*: Marker; on*: BOOLEAN; X*, Y*: INTEGER + END; + + ParList* = POINTER TO ParRec; + + ParRec* = RECORD + vwr*: Viewers.Viewer; + frame*: Display.Frame; + text*: Texts.Text; + pos*: LONGINT + END; + + InputMsg* = RECORD (Display.FrameMsg) + id*: INTEGER; + keys*: SET; + X*, Y*: INTEGER; + ch*: CHAR; + fnt*: Fonts.Font; + col*, voff*: SHORTINT + END; + + SelectionMsg* = RECORD (Display.FrameMsg) + time*: LONGINT; + text*: Texts.Text; + beg*, end*: LONGINT + END; + + ControlMsg* = RECORD (Display.FrameMsg) + id*, X*, Y*: INTEGER + END; + + CopyOverMsg* = RECORD (Display.FrameMsg) + text*: Texts.Text; + beg*, end*: LONGINT + END; + + CopyMsg* = RECORD (Display.FrameMsg) + F*: Display.Frame + END; + + Task* = POINTER TO TaskDesc; + + Handler* = PROCEDURE; + + TaskDesc* = RECORD + next: Task; + safe*: BOOLEAN; + time*: LONGINT; + handle*: Handler + END; + + VAR + User*: ARRAY 12 OF CHAR; (* << *) + + Arrow*, Star*: Marker; + Mouse*, Pointer*: Cursor; + + FocusViewer*: Viewers.Viewer; + + Log*: Texts.Text; + Par*: ParList; (*actual parameters*) + + CurTask*, PrevTask: Task; + + CurFnt*: Fonts.Font; CurCol*, CurOff*: SHORTINT; + Password*: LONGINT; + + DW, DH, CL, H0, H1, H2, H3: INTEGER; + unitW: INTEGER; + + ActCnt: INTEGER; (*action count for GC*) + Mod: Modules.Module; + ArrowFade: Painter; (* << *) + + (*user identification*) + + PROCEDURE Code(VAR s: ARRAY OF CHAR): LONGINT; + VAR i: INTEGER; a, b, c: LONGINT; + BEGIN + a := 0; b := 0; i := 0; + WHILE s[i] # 0X DO + c := b; b := a; a := (c MOD 509 + 1) * 127 + ORD(s[i]); + INC(i) + END; + IF b >= 32768 THEN b := b - 65536 END; + RETURN b * 65536 + a + END Code; + + PROCEDURE SetUser* (VAR user, password: ARRAY OF CHAR); + BEGIN COPY(user, User); Password := Code(password) + END SetUser; + + (*clocks*) + + PROCEDURE GetClock* (VAR t, d: LONGINT); + BEGIN Kernel.GetClock(t, d) + END GetClock; + + PROCEDURE SetClock* (t, d: LONGINT); + BEGIN Kernel.SetClock(t, d) + END SetClock; + + PROCEDURE Time* (): LONGINT; + BEGIN RETURN Input.Time() + END Time; + + (*cursor handling*) + + PROCEDURE FlipArrow (X, Y: INTEGER); (* << *) + END FlipArrow; + + PROCEDURE FlipStar (X, Y: INTEGER); + BEGIN + IF X < CL THEN + IF X < 7 THEN X := 7 ELSIF X > DW - 8 THEN X := DW - 8 END + ELSE + IF X < CL + 7 THEN X := CL + 7 ELSIF X > CL + DW - 8 THEN X := CL + DW - 8 END + END ; + IF Y < 7 THEN Y := 7 ELSIF Y > DH - 8 THEN Y := DH - 8 END; + Display.CopyPattern(Display.white, Display.star, X - 7, Y - 7, 2) + END FlipStar; + + PROCEDURE OpenCursor* (VAR c: Cursor); + BEGIN c.on := FALSE; c.X := 0; c.Y := 0 + END OpenCursor; + + PROCEDURE FadeCursor* (VAR c: Cursor); + BEGIN IF c.on THEN c.marker.Fade(c.X, c.Y); c.on := FALSE END + END FadeCursor; + + PROCEDURE DrawCursor* (VAR c: Cursor; VAR m: Marker; X, Y: INTEGER); (* << RC *) + BEGIN + IF c.on & ((X # c.X) OR (Y # c.Y) OR (m.Draw # c.marker.Draw)) THEN + c.marker.Fade(c.X, c.Y); c.on := FALSE + END; + IF c.marker.Fade = ArrowFade THEN + IF m.Fade # ArrowFade THEN X11.DefineCursor(X11.display, X11.primary, X11.noCursor) END + ELSE + IF m.Fade = ArrowFade THEN X11.DefineCursor(X11.display, X11.primary, X11.arrow) END + END ; + IF ~c.on THEN + m.Draw(X, Y); c.marker := m; c.X := X; c.Y := Y; c.on := TRUE + END + END DrawCursor; + + (*display management*) + + PROCEDURE RemoveMarks* (X, Y, W, H: INTEGER); + BEGIN + IF (Mouse.X > X - 16) & (Mouse.X < X + W + 16) & (Mouse.Y > Y - 16) & (Mouse.Y < Y + H + 16) THEN + FadeCursor(Mouse) + END; + IF (Pointer.X > X - 8) & (Pointer.X < X + W + 8) & (Pointer.Y > Y - 8) & (Pointer.Y < Y + H + 8) THEN + FadeCursor(Pointer) + END + END RemoveMarks; + + PROCEDURE HandleFiller (V: Display.Frame; VAR M: Display.FrameMsg); + BEGIN + WITH V: Viewers.Viewer DO + IF M IS InputMsg THEN + WITH M: InputMsg DO + IF M.id = track THEN DrawCursor(Mouse, Arrow, M.X, M.Y) END + END; + ELSIF M IS ControlMsg THEN + WITH M: ControlMsg DO + IF M.id = mark THEN DrawCursor(Pointer, Star, M.X, M.Y) END + END + ELSIF M IS Viewers.ViewerMsg THEN + WITH M: Viewers.ViewerMsg DO + IF (M.id = Viewers.restore) & (V.W > 0) & (V.H > 0) THEN + RemoveMarks(V.X, V.Y, V.W, V.H); + Display.ReplConst(Display.black, V.X, V.Y, V.W, V.H, 0) + ELSIF (M.id = Viewers.modify) & (M.Y < V.Y) THEN + RemoveMarks(V.X, M.Y, V.W, V.Y - M.Y); + Display.ReplConst(Display.black, V.X, M.Y, V.W, V.Y - M.Y, 0) + END + END + END + END + END HandleFiller; + + PROCEDURE OpenDisplay* (UW, SW, H: INTEGER); + VAR Filler: Viewers.Viewer; + BEGIN + Input.SetMouseLimits(Viewers.curW + UW + SW, H); + Display.ReplConst(Display.black, Viewers.curW, 0, UW + SW, H, 0); + NEW(Filler); Filler.handle := HandleFiller; + Viewers.InitTrack(UW, H, Filler); (*init user track*) + NEW(Filler); Filler.handle := HandleFiller; + Viewers.InitTrack(SW, H, Filler) (*init system track*) + END OpenDisplay; + + PROCEDURE DisplayWidth* (X: INTEGER): INTEGER; + BEGIN RETURN DW + END DisplayWidth; + + PROCEDURE DisplayHeight* (X: INTEGER): INTEGER; + BEGIN RETURN DH + END DisplayHeight; + + PROCEDURE OpenTrack* (X, W: INTEGER); + VAR Filler: Viewers.Viewer; + BEGIN + NEW(Filler); Filler.handle := HandleFiller; + Viewers.OpenTrack(X, W, Filler) + END OpenTrack; + + PROCEDURE UserTrack* (X: INTEGER): INTEGER; + BEGIN RETURN X DIV DW * DW + END UserTrack; + + PROCEDURE SystemTrack* (X: INTEGER): INTEGER; + BEGIN RETURN X DIV DW * DW + DW DIV 8 * 5 + END SystemTrack; + + PROCEDURE UY (X: INTEGER): INTEGER; + VAR fil, bot, alt, max: Display.Frame; + BEGIN + Viewers.Locate(X, 0, fil, bot, alt, max); + IF fil.H >= DH DIV 8 THEN RETURN DH END; + RETURN max.Y + max.H DIV 2 + END UY; + + PROCEDURE AllocateUserViewer* (DX: INTEGER; VAR X, Y: INTEGER); + BEGIN + IF Pointer.on THEN X := Pointer.X; Y := Pointer.Y + ELSE X := DX DIV DW * DW; Y := UY(X) + END + END AllocateUserViewer; + + PROCEDURE SY (X: INTEGER): INTEGER; + VAR fil, bot, alt, max: Display.Frame; + BEGIN + Viewers.Locate(X, DH, fil, bot, alt, max); + IF fil.H >= DH DIV 8 THEN RETURN DH END; + IF max.H >= DH - H0 THEN RETURN max.Y + H3 END; + IF max.H >= H3 - H0 THEN RETURN max.Y + H2 END; + IF max.H >= H2 - H0 THEN RETURN max.Y + H1 END; + IF max # bot THEN RETURN max.Y + max.H DIV 2 END; + IF bot.H >= H1 THEN RETURN bot.H DIV 2 END; + RETURN alt.Y + alt.H DIV 2 + END SY; + + PROCEDURE AllocateSystemViewer* (DX: INTEGER; VAR X, Y: INTEGER); + BEGIN + IF Pointer.on THEN X := Pointer.X; Y := Pointer.Y + ELSE X := DX DIV DW * DW + DW DIV 8 * 5; Y := SY(X) + END + END AllocateSystemViewer; + + PROCEDURE MarkedViewer* (): Viewers.Viewer; + BEGIN RETURN Viewers.This(Pointer.X, Pointer.Y) + END MarkedViewer; + + PROCEDURE PassFocus* (V: Viewers.Viewer); + VAR M: ControlMsg; + BEGIN M.id := defocus; FocusViewer.handle(FocusViewer, M); FocusViewer := V + END PassFocus; + + (*command interpretation*) + + PROCEDURE Call* (name: ARRAY OF CHAR; par: ParList; new: BOOLEAN; VAR res: INTEGER); + VAR Mod: Modules.Module; P: Modules.Command; i, j: INTEGER; + BEGIN res := 1; + i := 0; j := 0; + WHILE name[j] # 0X DO + IF name[j] = "." THEN i := j END; + INC(j) + END; + IF i > 0 THEN + name[i] := 0X; + Mod := Modules.ThisMod(name); + IF Modules.res = 0 THEN + INC(i); j := i; + WHILE name[j] # 0X DO name[j - i] := name[j]; INC(j) END; + name[j - i] := 0X; + P := Modules.ThisCommand(Mod, name); + IF Modules.res = 0 THEN + Par := par; Par.vwr := Viewers.This(par.frame.X, par.frame.Y); P; res := 0 + ELSE res := -1 + END + ELSE res := Modules.res + END + ELSE res := -1 + END + END Call; + + PROCEDURE GetSelection* (VAR text: Texts.Text; VAR beg, end, time: LONGINT); + VAR M: SelectionMsg; + BEGIN + M.time := -1; Viewers.Broadcast(M); time := M.time; + IF time >= 0 THEN text := M.text; beg := M.beg; end := M.end END + END GetSelection; + + PROCEDURE GC; + BEGIN IF ActCnt <= 0 THEN Kernel.GC(FALSE); ActCnt := BasicCycle END + END GC; + + PROCEDURE Install* (T: Task); + VAR t: Task; + BEGIN t := PrevTask; + WHILE (t.next # PrevTask) & (t.next # T) DO t := t.next END; + IF (t.next # T) & (CurTask # T) THEN + IF CurTask # NIL THEN (* called from a task *) + T.next := CurTask.next; CurTask.next := T + ELSE (* no task is currently running *) + T.next := PrevTask.next; PrevTask.next := T + END + END + END Install; + + PROCEDURE Remove* (T: Task); + VAR t: Task; + BEGIN t := PrevTask; + WHILE (t.next # T) & (t.next # PrevTask) DO t := t.next END; + IF t.next = T THEN t.next := t.next.next; PrevTask := t.next END; + IF CurTask = T THEN CurTask := PrevTask.next END + END Remove; + + PROCEDURE Collect* (count: INTEGER); + BEGIN ActCnt := count + END Collect; + + PROCEDURE SetFont* (fnt: Fonts.Font); + BEGIN CurFnt := fnt + END SetFont; + + PROCEDURE SetColor* (col: SHORTINT); + BEGIN CurCol := col + END SetColor; + + PROCEDURE SetOffset* (voff: SHORTINT); + BEGIN CurOff := voff + END SetOffset; + + PROCEDURE MinTime(): LONGINT; (* << *) + VAR minTime: LONGINT; t: Task; + BEGIN + minTime := MAX(LONGINT); t := PrevTask; + REPEAT + IF (t.time # -1) & (t.time < minTime) THEN minTime := t.time END ; + t := t.next; + UNTIL t = PrevTask ; + RETURN minTime + END MinTime; + + PROCEDURE NotifyTasks; (* << *) + VAR t0, p: Task; + BEGIN t0 := PrevTask; + REPEAT + CurTask := PrevTask.next; + IF CurTask.time = -1 THEN + IF ~CurTask.safe THEN PrevTask.next := CurTask.next END; + p := CurTask; CurTask.handle; PrevTask.next := CurTask; + IF CurTask # p THEN RETURN END (*detect Remove(CurTask)*) + END; + PrevTask := CurTask + UNTIL CurTask = t0 + END NotifyTasks; + + PROCEDURE Loop*; + VAR V: Viewers.Viewer; M: InputMsg; N: ControlMsg; + prevX, prevY, X, Y: INTEGER; keys: SET; ch: CHAR; + VM: Viewers.ViewerMsg; i: INTEGER; res: LONGINT; (* << *) + BEGIN + res := Kernel.sigsetjmp(Kernel.trapEnv, 1); (* << *) + LOOP + CurTask := NIL; + Input.Mouse(keys, X, Y); + IF Input.Available() > 0 THEN Input.Read(ch); + IF ch < 0F0X THEN + IF ch = ESC THEN + N.id := neutralize; Viewers.Broadcast(N); FadeCursor(Pointer) + ELSIF ch = SETUP THEN + N.id := mark; N.X := X; N.Y := Y; V := Viewers.This(X, Y); V.handle(V, N) + ELSIF ch = 0CX THEN (* << *) + N.id := neutralize; Viewers.Broadcast(N); FadeCursor(Pointer); + VM.id := Viewers.suspend; Viewers.Broadcast(VM); + VM.id := Viewers.restore; Viewers.Broadcast(VM) + ELSE + M.id := consume; M.ch := ch; M.fnt := CurFnt; M.col := CurCol; M.voff := CurOff; + FocusViewer.handle(FocusViewer, M); + DEC(ActCnt); NotifyTasks + END + ELSIF ch = 0F1X THEN Display.SetMode(0, {}) + ELSIF ch = 0F2X THEN Display.SetMode(0, {0}) + ELSIF ch = 0F3X THEN Display.SetMode(0, {2}) + ELSIF ch = 0F4X THEN X11.InitColors + ELSIF Kernel.FKey[ORD(ch) - 0F0H] # NIL THEN Kernel.FKey[ORD(ch) - 0F0H] + END + ELSIF keys # {} THEN + M.id := track; M.X := X; M.Y := Y; M.keys := keys; + REPEAT + V := Viewers.This(M.X, M.Y); V.handle(V, M); + Input.Mouse(M.keys, M.X, M.Y) + UNTIL M.keys = {}; + DEC(ActCnt); NotifyTasks + ELSE + IF (X # prevX) OR (Y # prevY) OR ~Mouse.on THEN + M.id := track; M.X := X; M.Y := Y; M.keys := keys; V := Viewers.This(X, Y); V.handle(V, M); + prevX := X; prevY := Y + END; + X11.DoSync; (* << *) + IF X11.EventsQueued(X11.display, X11.QueuedAfterReading) = 0 THEN (* << *) + Kernel.Select(MinTime() - Input.Time()); NotifyTasks; + FOR i := 0 TO 7 DO Kernel.readySet[i] := {} END + END ; + CurTask := PrevTask.next; + IF (CurTask.time <= Input.Time()) & (CurTask.time # -1) THEN + IF ~CurTask.safe THEN PrevTask.next := CurTask.next END; + CurTask.handle; PrevTask.next := CurTask + END; + PrevTask := CurTask + END + END + END Loop; + +BEGIN User[0] := 0X; + Arrow.Fade := FlipArrow; Arrow.Draw := FlipArrow; + ArrowFade := FlipArrow; (* << *) + Star.Fade := FlipStar; Star.Draw := FlipStar; + OpenCursor(Mouse); OpenCursor(Pointer); + + DW := Display.Width; DH := Display.Height; CL := Display.ColLeft; + H3 := DH - DH DIV 3; + H2 := H3 - H3 DIV 2; + H1 := DH DIV 5; + H0 := DH DIV 10; + +(* moved into Configuration.Mod + unitW := DW DIV 8; + OpenDisplay(unitW * 5, unitW * 3, DH); + FocusViewer := Viewers.This(0, 0); +*) + + CurFnt := Fonts.Default; + CurCol := Display.white; + CurOff := 0; + + Collect(BasicCycle); + NEW(PrevTask); + PrevTask.handle := GC; + PrevTask.safe := TRUE; + PrevTask.time := -1; (* << *) + PrevTask.next := PrevTask; + CurTask := NIL; + + Display.SetMode(0, {}); + +END Oberon. diff --git a/src/tools/coco/v4_compat/TextFrames.Mod b/src/tools/coco/v4_compat/TextFrames.Mod new file mode 100755 index 00000000..1b9ab5a6 --- /dev/null +++ b/src/tools/coco/v4_compat/TextFrames.Mod @@ -0,0 +1,1363 @@ +MODULE TextFrames; (** CAS/MH/HM 20.4.94/JT 1.5.95 **) + (* IMPORT SYSTEM, Modules, Input, Display, Fonts, Viewers, Oberon, MenuViewers, Texts;*) + IMPORT Oberon, Texts; + + CONST + (** update message IDs **) + replace* = 0; insert* = 1; delete* = 2; + (** units **) + mm* = 36000; Unit* = 10000; + (** parc options **) + gridAdj* = 0; leftAdj* = 1; rightAdj* = 2; pageBreak* = 3; twoColumns* = 4; + (** maximum number of TAB stops in Parc **) + MaxTabs* = 32; + + AdjMask = {leftAdj, rightAdj}; + TAB = 9X; LF = 0AX; CR = 0DX; DEL = 7FX; BRK = 0ACX; ShiftBRK = 0ADX; CRSL = 0C4X; CRSR = 0C3X; + AdjustSpan = 30; MinTabWidth = 1 * mm; StdTabWidth = 4 * mm; + rightKey = 0; middleKey = 1; leftKey = 2; cancel = {rightKey, middleKey, leftKey}; + + + TYPE + Parc* = POINTER TO ParcDesc; + ParcDesc* = RECORD (Texts.ElemDesc) + left*: LONGINT; (** distance from (F.X + F.left); in units **) + first*: LONGINT; (** first line indentation from P.left; in units **) + width*: LONGINT; (** parc width; in units **) + lead*: LONGINT; (** distance to previous line; in units **) + lsp*: LONGINT; (** line spacing of text after P; in units **) + dsr*: LONGINT; (** descender of text after P; in units **) + opts*: SET; + nofTabs*: INTEGER; + tab*: ARRAY MaxTabs OF LONGINT (** in units **) + END; + + TextLine = POINTER TO TextLineDesc; + Location* = RECORD + org*, pos*: LONGINT; + x*, y*, dx*, dy*: INTEGER; + line: TextLine + END; + TextLineDesc = RECORD + next: TextLine; + eot: BOOLEAN; (* contains end of text *) + indent: LONGINT; (* line indentation in units *) + w, h, dsr: INTEGER; (* bounding box clipped to frame (w including indent) *) + w0, nob: INTEGER; (* unclipped width (including indent), number of contained blanks: nob > 0 if text line wraps around *) + org, len, span: LONGINT; (* len ... characters w/o; span ... w/ trailing CR or white space, if any *) + P: Parc; (* last parc before this text line *) + pbeg: LONGINT (* position of P *) + END; + + Frame* = POINTER TO FrameDesc; + FrameDesc* = RECORD (Display.FrameDesc) + text*: Texts.Text; + org*: LONGINT; + col*, left*, right*, top*, bot*: INTEGER; + markH*: INTEGER; (** position of tick mark in scroll bar (< 0 => no tick mark) **) + barW*: INTEGER; (** scroll bar width **) + time*: LONGINT; (** selection time **) + hasCar*, hasSel*, showsParcs*: BOOLEAN; (** caret/selection present; parcs visible **) + carloc*, selbeg*, selend*: Location; + focus*: Display.Frame; (** frame of nested element if this element contains the focus **) + trailer: TextLine (* ring with trailer and header *) + END; + + DisplayMsg* = RECORD (Texts.ElemMsg) + prepare*: BOOLEAN; + fnt*: Fonts.Font; + col*: SHORTINT; + pos*: LONGINT; (** position in host text **) + frame*: Display.Frame; (** ~prepare => host frame **) + X0*, Y0*: INTEGER; (** ~prepare => receiver origin in screen space **) + indent*: LONGINT; (** prepare => width already consumed in line, in units **) + elemFrame*: Display.Frame (** optional return parameter **) + END; + + TrackMsg* = RECORD (Texts.ElemMsg) + X*, Y*: INTEGER; + keys*: SET; + fnt*: Fonts.Font; + col*: SHORTINT; + pos*: LONGINT; (** position in host text **) + frame*: Display.Frame; (** host frame **) + X0*, Y0*: INTEGER (** receiver origin in screen space **) + END; + + FocusMsg* = RECORD (Texts.ElemMsg) + focus*: BOOLEAN; (** whether to focus or to defocus **) + elemFrame*: Display.Frame; (** focus/defocus target **) + frame*: Display.Frame (** host frame **) + END; +(* + NotifyMsg* = RECORD (Display.FrameMsg) + frame*: Display.Frame (** host frame **) + END; + + UpdateMsg* = RECORD (Display.FrameMsg) + id*: INTEGER; + text*: Texts.Text; + beg*, end*: LONGINT + END; + + InsertElemMsg* = RECORD (Display.FrameMsg) + e*: Texts.Elem + END; + + SelectMsg = RECORD (Display.FrameMsg) + text: Texts.Text; + beg, end: LONGINT; + time: LONGINT + END; + +*) + VAR + menuH*, barW*, left*, right*, top*, bot*: INTEGER; + defParc*: Parc; + + (*shared globals => get rid off in a later version?*) + W, W0: Texts.Writer; + B: Texts.Buffer; + + P: Parc; + pbeg: LONGINT; (*inv T[pbeg] = P*) + R: Texts.Reader; + nextCh: CHAR; (*inv Base(R) = T => T[Pos(R)-1] = nextCh]*) + par: Oberon.ParList; + neutralize: Oberon.ControlMsg; + + + PROCEDURE Min (x, y: INTEGER): INTEGER; + BEGIN IF x < y THEN RETURN x ELSE RETURN y END + END Min; + + PROCEDURE Max (x, y: INTEGER): INTEGER; + BEGIN IF x > y THEN RETURN x ELSE RETURN y END + END Max; +(* + PROCEDURE MarkMenu (F: Frame); + VAR R: Texts.Reader; V: Viewers.Viewer; T: Texts.Text; ch: CHAR; + BEGIN V := Viewers.This(F.X, F.Y); + IF (V IS MenuViewers.Viewer) & (V.dsc IS Frame) & (F # V.dsc) THEN + T := V.dsc(Frame).text; + IF T.len > 0 THEN Texts.OpenReader(R, T, T.len - 1); Texts.Read(R, ch) ELSE ch := 0X END; + IF ch # "!" THEN Texts.Write(W0, "!"); Texts.Append(T, W0.buf) END + END + END MarkMenu; + +*) + (* Element Subframes *) +(* + PROCEDURE InvertBorder (F: Display.Frame); + BEGIN + Display.ReplPattern(Display.white, Display.grey1, F.X-1, F.Y-1, F.W+2, 1, Display.invert); + Display.ReplPattern(Display.white, Display.grey1, F.X-1, F.Y+F.H, F.W+2, 1, Display.invert); + Display.ReplPattern(Display.white, Display.grey1, F.X-1, F.Y, 1, F.H, Display.invert); + Display.ReplPattern(Display.white, Display.grey1, F.X+F.W, F.Y, 1, F.H, Display.invert) + END InvertBorder; + + PROCEDURE InvalSubFrames (F: Frame; x, y, w, h: INTEGER); (* removes and suspends all subframes partly in (x, y, w, h) *) + VAR p, f: Display.Frame; msg: MenuViewers.ModifyMsg; + BEGIN + IF (w > 0) & (h > 0) THEN f := F.dsc; + IF f # NIL THEN p := f; f := p.next END; + WHILE f # NIL DO + IF (f.X < x + w) & (f.X + f.W > x) & (f.Y < y + h) & (f.Y + f.H > y) THEN p.next := f.next; + msg.id := MenuViewers.reduce; msg.dY := 0; msg.Y := f.Y; msg.H := 0; + f.handle(f, msg) + ELSE p := f + END; + f := p.next + END; + f := F.dsc; + IF (f # NIL) & (f.X < x + w) & (f.X + f.W > x) & (f.Y < y + h) & (f.Y + f.H > y) THEN F.dsc := F.dsc.next; + msg.id := MenuViewers.reduce; msg.dY := 0; msg.Y := f.Y; msg.H := 0; + f.handle(f, msg) + END + END + END InvalSubFrames; + + PROCEDURE ShiftSubFrames (F: Frame; oldY, newY, h: INTEGER); (* shift (F.X, oldY, F.W, h) to (F.X, newY, F.W, h) *) + VAR f: Display.Frame; msg: MenuViewers.ModifyMsg; + BEGIN + IF oldY > newY THEN InvalSubFrames(F, F.X, newY, F.W, oldY - newY) + ELSE InvalSubFrames(F, F.X, oldY + h, F.W, newY - oldY) + END; + f := F.dsc; + WHILE f # NIL DO + IF (f.Y < oldY + h) & (f.Y + f.H > oldY) THEN INC(f.Y, newY - oldY); + msg.id := MenuViewers.reduce; msg.dY := 0; msg.Y := f.Y; msg.H := f.H; + f.handle(f, msg) + END; + f := f.next + END + END ShiftSubFrames; + + PROCEDURE NotifySubFrames (F: Frame; VAR msg: Display.FrameMsg); + VAR p, f: Display.Frame; + BEGIN f := F.dsc; + IF msg IS NotifyMsg THEN msg(NotifyMsg).frame := F END; + WHILE f # NIL DO p := f; f := f.next; p.handle(p, msg) END + END NotifySubFrames; + +*) + (* Display Primitives *) +(* + PROCEDURE DrawCursor (x, y: INTEGER); + BEGIN Oberon.DrawCursor(Oberon.Mouse, Oberon.Arrow, x, y) + END DrawCursor; + + PROCEDURE TrackMouse (VAR x, y: INTEGER; VAR keys, keysum: SET); + BEGIN Input.Mouse(keys, x, y); keysum := keysum + keys; DrawCursor(x, y) + END TrackMouse; + + PROCEDURE EraseRect (F: Frame; x, y, w, h: INTEGER); + BEGIN Display.ReplConst(F.col, x, y, w, h, Display.replace); InvalSubFrames(F, x, y, w, h) + END EraseRect; + + PROCEDURE Erase (F: Frame; x, y, w, h: INTEGER); (*RemoveMarks optimization*) + BEGIN + IF h > 0 THEN Oberon.RemoveMarks(x, y, w, h); EraseRect(F, x, y, w, h) END + END Erase; + + PROCEDURE Shift (F: Frame; oldY, newY, h: INTEGER); (*RemoveMarks optimization*) + BEGIN + IF (oldY # newY) & (h > 0) THEN + Oberon.RemoveMarks(F.X + F.left, Min(oldY, newY), F.W - F.left, Max(oldY, newY) + h); + Display.CopyBlock(F.X + F.left, oldY, F.W - F.left, h, F.X + F.left, newY, Display.replace); + ShiftSubFrames(F, oldY, newY, h) + END + END Shift; + + PROCEDURE InvertCaret (F: Frame); + VAR loc: Location; bot: INTEGER; + BEGIN loc := F.carloc; bot := loc.y + loc.line.dsr - 6; + Display.CopyPatternC(F, Display.white, Display.hook, loc.x, bot, Display.invert) + END InvertCaret; + + PROCEDURE InvertRect (F: Frame; x, y, w, h: INTEGER); (*clips to right and bottom frame margin*) + BEGIN + IF x + w > F.X + F.W - F.right THEN w := F.X + F.W - F.right - x END; + IF y >= F.Y + F.bot THEN Display.ReplConst(Display.white, x, y, w, h, Display.invert) END + END InvertRect; + + PROCEDURE InvertSelection (F: Frame; beg, end: Location); + VAR t: TextLine; ex, rx, w, py: INTEGER; + BEGIN + rx := F.X + F.W - F.right; t := end.line; + IF t.eot OR (end.pos <= t.org + t.len) THEN ex := end.x ELSE ex := rx END; + IF beg.line = end.line THEN InvertRect(F, beg.x, beg.y, ex - beg.x, beg.line.h) + ELSE t := beg.line; py := beg.y; w := F.W - F.left - F.right; + InvertRect(F, beg.x, py, rx - beg.x, t.h); t := t.next; DEC(py, t.h); + WHILE t # end.line DO InvertRect(F, F.X + F.left, py, w, t.h); t := t.next; DEC(py, t.h) END; + InvertRect(F, F.X + F.left, py, ex - (F.X + F.left), t.h) + END + END InvertSelection; + + PROCEDURE CoordToPos (F: Frame; mh: INTEGER): LONGINT; + VAR h: INTEGER; + BEGIN h := F.H - 1; + IF h > 0 THEN RETURN ENTIER(F.text.len / h * (h - mh)) ELSE RETURN 0 END + END CoordToPos; + + PROCEDURE ShowBar (F: Frame; botH, topH: INTEGER); + BEGIN + IF (F.left > F.barW) & (F.barW > 0) THEN + Display.ReplConst(Display.white, F.X + F.barW - 1, F.Y + botH, 1, topH - botH, Display.replace) + END + END ShowBar; + + PROCEDURE Tick (F: Frame); + BEGIN + IF (0 <= F.markH) & (F.markH < F.H) & (F.left > F.barW) & (F.barW > 6) & (F.H > 2) THEN + Display.ReplConst(Display.white, F.X + 1, F.Y + F.markH, F.barW - 6, 2, Display.invert) + END + END Tick; + + PROCEDURE ShowTick (F: Frame); (* removes global marks as needed *) + VAR h, mh: INTEGER; len: LONGINT; + BEGIN + h := F.H - 2; len := F.text.len; + IF len > 0 THEN mh := SHORT(ENTIER(h - F.org / len * h)) ELSE mh := h END; + IF F.markH # mh THEN Oberon.RemoveMarks(F.X, F.Y, F.barW, F.H); + Tick(F); F.markH := mh; Tick(F) + END + END ShowTick; + + PROCEDURE Mark* (F: Frame; mark: INTEGER); + BEGIN + Erase(F, F.X, F.Y, F.barW - 1, F.H); F.markH := -1; + IF (mark < 0) & (F.H >= 16) THEN + Display.CopyPattern(Display.white, Display.downArrow, F.X, F.Y, Display.invert) + ELSIF mark > 0 THEN + ShowTick(F) + END + END Mark; +*) + + (** Parcs **) + + PROCEDURE ParcBefore* (T: Texts.Text; pos: LONGINT; VAR P: Parc; VAR beg: LONGINT); + VAR R: Texts.Reader; + BEGIN Texts.OpenReader(R, T, pos + 1); + REPEAT Texts.ReadPrevElem(R) UNTIL R.eot OR (R.elem IS Parc); + IF R.eot THEN P := defParc; beg := -1 ELSE P := R.elem(Parc); beg := Texts.Pos(R) END + END ParcBefore; + + PROCEDURE -InitDefParc() "ParcElems__init()"; + + (* Screen Metrics *) + + PROCEDURE Tab (dw: INTEGER; VAR dx: INTEGER); (*P set*) + (* dw = line width from left margin to caret (in pixels); dx = distance from caret to next tab stop (in pixels) *) + VAR i, n: INTEGER; w: LONGINT; + BEGIN + i := 0; n := P.nofTabs; w := LONG(dw) * Unit + MinTabWidth; + IF dw < 0 THEN dx := -dw + ELSE + WHILE (i < n) & (P.tab[i] < w) DO INC(i) END; + IF i < n THEN dx := SHORT((P.tab[i] - LONG(dw) * Unit) DIV Unit) + ELSE dx := StdTabWidth DIV Unit + END + END + END Tab; +(* + PROCEDURE MeasureSpecial (dw: INTEGER; VAR dx, x, y, w, h: INTEGER); + (* returns metrics of nextCh (nextCh <= " "); sends prepare message to elements; P, R, nextCh set *) + VAR e: Texts.Elem; pat: Display.Pattern; msg: DisplayMsg; + BEGIN + IF nextCh = " " THEN Display.GetChar(R.fnt.raster, nextCh, dx, x, y, w, h, pat); + x := 0; y := 0; w := dx; h := 0 + ELSIF nextCh = TAB THEN Tab(dw, dx); x := 0; y := 0; w := dx; h := 0 + ELSIF R.elem # NIL THEN e := R.elem; + msg.prepare := TRUE; msg.indent := LONG(dw) * Unit; + msg.fnt := R.fnt; msg.col := R.col; msg.pos := Texts.Pos(R)-1; + msg.Y0 := -SHORT(P.dsr DIV Unit); (*<<< 18-Nov-91*) + e.handle(e, msg); + w := SHORT(e.W DIV Unit); + dx := w; x := 0; y := msg.Y0; h := SHORT(e.H DIV Unit) (*<<< 18-Nov-91*) + ELSE Display.GetChar(R.fnt.raster, nextCh, dx, x, y, w, h, pat) + END + END MeasureSpecial; + + PROCEDURE GetSpecial (F: Frame; VAR n: INTEGER; cn, ddx, dw: INTEGER; VAR dx, x, y, w, h: INTEGER); + (* returns metrics of nextCh (nextCh <= " "); no prepare message to elements; extends blanks for block adjust *) + (* cn ... add 1 pixel to first cn blanks (block adjust); ddx ... add ddx pixels to every blank (block adjust) *) + (*P, R, nextCh set*) + VAR e: Texts.Elem; pat: Display.Pattern; + BEGIN + IF nextCh = " " THEN Display.GetChar(R.fnt.raster, nextCh, dx, x, y, w, h, pat); + x := 0; y := 0; INC(dx, ddx); INC(n); IF n <= cn THEN INC(dx) END; (*space correction for block adjustment*) + w := dx; h := 0 + ELSIF nextCh = TAB THEN Tab(dw, dx); x := 0; y := 0; w := dx; h := 0 + ELSIF R.elem # NIL THEN e := R.elem; + IF (e IS Parc) & (P.W = 9999 * Unit) THEN (* P gets this value in prepare message *) + w := Min(SHORT((P.width + P.left) DIV Unit), F.W - F.right - F.left); + e.W := LONG(w) * Unit + ELSE w := SHORT(e.W DIV Unit) + END; + dx := w; x := 0; y := -SHORT(P.dsr DIV Unit); h := SHORT(e.H DIV Unit) + ELSE Display.GetChar(R.fnt.raster, nextCh, dx, x, y, w, h, pat) + END + END GetSpecial; + + PROCEDURE NextLine (T: Texts.Text; VAR org: LONGINT); (*R, nextCh set; org = Texts.Pos(R)-1*) + VAR pat: Display.Pattern; pos, bk, d: LONGINT; width, tw, dx, x, y, w, h: INTEGER; + R1: Texts.Reader; peekCh: CHAR; indent: INTEGER; + BEGIN + tw := 0; dx := 0; w := 0; bk := -999; (* bk = pos of last seperator *) + pos := org; ParcBefore(T, pos, P, pbeg); width := SHORT(P.width DIV Unit); + indent := 0; + IF org > 0 THEN Texts.OpenReader(R1, T, org - 1); Texts.Read(R1, peekCh); + IF (peekCh = CR) OR (R1.elem # NIL) & (R1.elem IS Parc) THEN indent := SHORT(P.first DIV Unit) END; + END; + INC(tw, indent); + LOOP INC(pos); (*inv pos = Texts.Pos(R), ~R.eof => nextCh = text[pos-1]*) + IF R.eot OR (nextCh = CR) THEN EXIT END; + INC(tw, dx); + IF nextCh <= " " THEN MeasureSpecial(tw, dx, x, y, w, h) + ELSE Display.GetChar(R.fnt.raster, nextCh, dx, x, y, w, h, pat) + END; + IF tw + x + w > width THEN d := pos - bk; + IF (d < AdjustSpan) & (nextCh > " ") THEN pos := bk + ELSIF ((nextCh > " ") OR (nextCh = Texts.ElemChar)) & (pos > org + 1) THEN DEC(pos) + END; + Texts.OpenReader(R, T, pos); Texts.Read(R, nextCh); + EXIT + END; + IF (nextCh <= " ") & (nextCh # Texts.ElemChar) THEN bk := pos END; + Texts.Read(R, nextCh) + END; + org := pos + END NextLine; + + PROCEDURE BegOfLine (T: Texts.Text; VAR pos: LONGINT; adjust: BOOLEAN); + (* returns origin of line containing pos *) + VAR p, org: LONGINT; + BEGIN + IF pos <= 0 THEN pos := 0 + ELSE + IF pos <= T.len THEN org := pos ELSE org := T.len END; + LOOP (*search backwards for CR*) + IF org = 0 THEN EXIT END; + Texts.OpenReader(R, T, org - 1); Texts.Read(R, nextCh); + IF nextCh = CR THEN EXIT END; + DEC(org) + END; + IF adjust THEN (*search forward for actual line origin*) + Texts.OpenReader(R, T, org); Texts.Read(R, nextCh); p := org; + REPEAT org := p; NextLine(T, p) UNTIL (p > pos) OR R.eot + END; + pos := org + END + END BegOfLine; + + PROCEDURE AdjustMetrics (F: Frame; t: TextLine; VAR pw, tw, ddx, cn: INTEGER); (*t.org set*) + (* pw ... x-coord of first char in line (in pixels); tw ... width of text line; ddx, cn ... see GetSpecial *) + BEGIN + P := t.P; pbeg := t.pbeg; + pw := F.left; tw := t.w; ddx := 0; cn := 0; + IF t.pbeg # t.org THEN + INC(pw, SHORT((P.left + t.indent) DIV Unit)); + IF leftAdj IN P.opts THEN + IF (rightAdj IN P.opts) & (t.nob > 0) THEN + tw := SHORT(P.width DIV Unit); ddx := (tw - t.w0) DIV t.nob; cn := (tw - t.w0) MOD t.nob + END + ELSIF rightAdj IN P.opts THEN INC(pw, SHORT(P.width DIV Unit) - t.w0) + ELSE (*center*) INC(pw, (SHORT(P.width DIV Unit) - t.w0) DIV 2) + END; + DEC(tw, SHORT(t.indent DIV Unit)); + END + END AdjustMetrics; + +*) + (* Screen Placement *) +(* + PROCEDURE DrawSpecial (F: Frame; px, py, x, y: INTEGER); (*R, nextCh set*) + VAR e: Texts.Elem; pat: Display.Pattern; dx, w, h: INTEGER; msg: DisplayMsg; + BEGIN + IF (nextCh = TAB) OR (nextCh = CR) THEN (*skip*) + ELSIF R.elem # NIL THEN e := R.elem; + IF ~(e IS Parc) OR F.showsParcs THEN + msg.prepare := FALSE; msg.fnt := R.fnt; msg.col := R.col; msg.pos := Texts.Pos(R) - 1; + msg.frame := F; msg.X0 := px + x; msg.Y0 := py + y; msg.elemFrame := NIL; + e.handle(e, msg); + IF msg.elemFrame # NIL THEN msg.elemFrame.next := F.dsc; F.dsc := msg.elemFrame END; + ELSIF pageBreak IN e(Parc).opts THEN (*(e IS Parc) & ~F.showsParcs*) + Display.ReplPattern(Display.white, Display.grey1, px + x, py, SHORT(e.W DIV Unit), 1, Display.replace) + END + ELSE Display.GetChar(R.fnt.raster, nextCh, dx, x, y, w, h, pat); + Display.CopyPattern(R.col, pat, px + x, py + y, Display.invert) + END; + END DrawSpecial; + + PROCEDURE ShowLine (F: Frame; t: TextLine; left, right, py: INTEGER); + VAR pat: Display.Pattern; i: LONGINT; n, cn, lm, px, pw, tw, ddx, dx, x, y, w, h: INTEGER; + BEGIN + (* lm ... left parc margin in screen coord; pw ... x of first char in frame coord *) + Texts.OpenReader(R, F.text, t.org); AdjustMetrics(F, t, pw, tw, ddx, cn); + lm := F.X + F.left + SHORT(P.left DIV Unit); px := F.X + pw; INC(py, t.dsr); i := 0; n := 0; + WHILE i < t.len DO Texts.Read(R, nextCh); + IF nextCh <= " " THEN GetSpecial(F, n, cn, ddx, px - lm, dx, x, y, w, h) + ELSE Display.GetChar(R.fnt.raster, nextCh, dx, x, y, w, h, pat) + END; + INC(y, R.fnt.height * R.voff DIV 64); + IF px + x + w <= right THEN + IF px + x >= left THEN + IF nextCh <= " " THEN DrawSpecial(F, px, py, x, y) + ELSE Display.CopyPattern(R.col, pat, px + x, py + y, Display.invert) + END + END; + INC(px, dx); INC(i) + ELSE i := t.len + END + END + END ShowLine; + + PROCEDURE ShowLines (F: Frame; botH, topH: INTEGER; erase: BOOLEAN); + VAR t: TextLine; ph: INTEGER; + BEGIN + t := F.trailer.next; ph := F.H - F.top; + WHILE (t # F.trailer) & (ph - t.h >= topH) DO DEC(ph, t.h); t := t.next END; + WHILE (t # F.trailer) & (ph - t.h >= botH) DO DEC(ph, t.h); + IF erase THEN Erase(F, F.X + F.left, F.Y + ph, F.W - F.right - F.left, t.h) END; + ShowLine(F, t, F.X + F.left, F.X + F.W - F.right, F.Y + ph); t := t.next + END + END ShowLines; + +*) + (* Screen Casting *) +(* + PROCEDURE MeasureLine (F: Frame; maxW: INTEGER; t: TextLine); (* R, nextCh set *) + VAR pat: Display.Pattern; len, bklen, d: LONGINT; eol: BOOLEAN; + nob, bknob, width, minY, bkminY, maxY, bkmaxY, tw, bktw, lsp, dsr, dx, x, y, w, h: INTEGER; + R1: Texts.Reader; peekCh: CHAR; + (* bk* ... backup for last blank *) + BEGIN + len := 0; nob := 0; bklen := -999; tw := 0; dx := 0; minY := 0; maxY := 0; + ParcBefore(F.text, t.org, P, pbeg); + lsp := SHORT(P.lsp DIV Unit); dsr := SHORT(P.dsr DIV Unit); width := SHORT(P.width DIV Unit); + t.indent := 0; + IF t.org > 0 THEN Texts.OpenReader(R1, F.text, t.org - 1); Texts.Read(R1, peekCh); + IF (peekCh = CR) OR (R1.elem # NIL) & (R1.elem IS Parc) THEN t.indent := P.first END; + END; + INC(tw, SHORT(t.indent DIV Unit)); + LOOP + IF R.eot OR (nextCh = CR) THEN nob := 0; eol := ~R.eot; EXIT END; + IF nextCh <= " " THEN MeasureSpecial(tw, dx, x, y, w, h) + ELSE Display.GetChar(R.fnt.raster, nextCh, dx, x, y, w, h, pat) + END; + IF tw + x + w > width THEN d := len - bklen; + IF (d < AdjustSpan) & (nextCh > " ") THEN eol := TRUE; + Texts.OpenReader(R, F.text, Texts.Pos(R) - d); + nob := bknob; len := bklen; tw := bktw; minY := bkminY; maxY := bkmaxY + ELSIF len = 0 THEN (* force at least one character on each line *) + INC(len); INC(y, R.fnt.height * R.voff DIV 64); minY := Min(minY, y); maxY := Max(maxY, y + h); + Texts.Read(R, nextCh); eol := FALSE; tw := maxW + ELSE eol := (nextCh <= " ") & (nextCh # Texts.ElemChar) + END; + EXIT + END; + IF (nextCh <= " ") & (nextCh # Texts.ElemChar) THEN + bknob := nob; bklen := len; bktw := tw; bkminY := minY; bkmaxY := maxY; + IF nextCh = " " THEN INC(nob) END + END; + INC(len); INC(tw, dx); INC(y, R.fnt.height * R.voff DIV 64); + IF y < minY THEN minY := y END; + IF y + h > maxY THEN maxY := y + h END; + Texts.Read(R, nextCh) + END; + IF ~F.showsParcs & (pbeg = t.org) THEN dsr := 0; t.h := SHORT(P.lead DIV Unit) + 1 + ELSIF gridAdj IN P.opts THEN + WHILE dsr < -minY DO INC(dsr, lsp) END; + t.h := Max(lsp, dsr + maxY); INC(t.h, (-t.h) MOD lsp) + ELSE dsr := Max(dsr, -minY); t.h := Max(lsp, dsr + maxY) + END; + t.len := len; t.w0 := tw; t.w := Min(tw, maxW); t.dsr := dsr; t.nob := nob; t.eot := R.eot; t.P := P; t.pbeg := pbeg; + IF eol THEN Texts.Read(R, nextCh); t.span := len + 1 ELSE t.span := len END + END MeasureLine; + + PROCEDURE MeasureLines (F: Frame; org: LONGINT; VAR trailer: TextLine); + VAR s, t: TextLine; ph: INTEGER; + BEGIN + NEW(trailer); s := trailer; + Texts.OpenReader(R, F.text, org); Texts.Read(R, nextCh); ph := F.H - F.top; + LOOP NEW(t); t.org := org; MeasureLine(F, F.W - F.left - F.right, t); + IF ph - t.h < F.bot THEN EXIT END; + s.next := t; s := t; INC(org, s.span); DEC(ph, s.h); + IF R.eot THEN EXIT END + END; + s.next := trailer; trailer.eot := TRUE; trailer.org := org; (* start of first invisible line *) trailer.len := 0; trailer.w := 0; + trailer.h := SHORT(defParc.lsp DIV Unit); trailer.P := P (* P set by MeasureLine *) ; trailer.pbeg := pbeg + END MeasureLines; + +*) + (** Locators **) +(* + PROCEDURE LocateLineTop (F: Frame; trailer: TextLine; org: LONGINT; VAR loc: Location); + VAR t: TextLine; ph: INTEGER; + BEGIN + ph := F.H - F.top; t := trailer.next; + WHILE (t # trailer) & (t.org # org) DO DEC(ph, t.h); t := t.next END; + loc.org := org; loc.line := t; loc.y := F.Y + ph + END LocateLineTop; + + PROCEDURE Width (F: Frame; t: TextLine; pos: LONGINT; VAR pw, dx, dy: INTEGER); + VAR pat: Display.Pattern; i: LONGINT; n, mw, lm, tw, ddx, cn, x, y, w, h: INTEGER; + BEGIN + AdjustMetrics(F, t, pw, tw, ddx, cn); dy := 0; lm := F.left + SHORT(P.left DIV Unit); + IF t # F.trailer THEN Texts.OpenReader(R, F.text, t.org); Texts.Read(R, nextCh); + i := 0; n := 0; DEC(pos, t.org); dx := 0; mw := F.W - F.right; + WHILE ~R.eot & (i < t.len) & (i <= pos) & (pw + dx <= mw) DO + (* i ... pos of nextCh; dx ... width of char before nextCh; pw ... line width up to pos (or up to right margin) *) + INC(i); INC(pw, dx); + IF nextCh <= " " THEN GetSpecial(F, n, cn, ddx, pw - lm, dx, x, y, w, h) + ELSE Display.GetChar(R.fnt.raster, nextCh, dx, x, y, w, h, pat) + END; + dy := R.fnt.height * R.voff DIV 64; + Texts.Read(R, nextCh) + END; + IF (i <= pos) & (pw + dx <= mw) THEN INC(i); INC(pw, dx) END + ELSE dx := 4 + END + END Width; + + + PROCEDURE LocatePos* (F: Frame; pos: LONGINT; VAR loc: Location); (* loc.dx = dx of char at pos *) + VAR t: TextLine; pw, dx, dy: INTEGER; + BEGIN + IF pos < F.org THEN pos := F.org; t := F.trailer.next + ELSIF pos < F.trailer.org THEN t := F.trailer; + WHILE (t.next # F.trailer) & (t.next.org <= pos) DO t := t.next END + ELSE pos := F.trailer.org; t := F.trailer.next; + WHILE ~t.eot DO t := t.next END + END; + Width(F, t, pos, pw, dx, dy); LocateLineTop(F, F.trailer, t.org, loc); DEC(loc.y, loc.line.h); + loc.org := t.org; loc.pos := pos; loc.x := F.X + pw; loc.dx := dx; loc.dy := dy; loc.line := t + END LocatePos; + + PROCEDURE LocateLine* (F: Frame; y: INTEGER; VAR loc: Location); + (* loc.x = line start; loc.y = line bottom; loc.dx = line width *) + VAR t: TextLine; h, ph, pw, tw, ddx, cn: INTEGER; + BEGIN + t := F.trailer.next; h := y - F.Y; ph := F.H - F.top - t.h; + WHILE ~t.eot & (ph - t.next.h >= F.bot) & (ph > h) DO t := t.next; DEC(ph, t.h) END; + AdjustMetrics(F, t, pw, tw, ddx, cn); + IF pw >= F.W - F.right THEN pw := F.W - F.right - 4 END; + loc.org := t.org; loc.pos := loc.org; loc.x := F.X + pw; loc.y := F.Y + ph; loc.dx := tw; loc.dy := 0; loc.line := t + END LocateLine; + + PROCEDURE LocateChar* (F: Frame; x, y: INTEGER; VAR loc: Location); + VAR t: TextLine; pat: Display.Pattern; i: LONGINT; n, w, lm, pw, tw, ddx, cn, dx, xc, yc, wc, hc: INTEGER; + BEGIN + LocateLine(F, y, loc); t := loc.line; w := x - F.X; AdjustMetrics(F, t, pw, tw, ddx, cn); + lm := F.left + SHORT(P.left DIV Unit); + IF (t # F.trailer) & (w > pw) THEN Texts.OpenReader(R, F.text, t.org); + i := 0; n := 0; dx := 0; nextCh := 0X; + WHILE (i < t.len) & (pw + dx < w) DO + (* i = pos after nextCh; dx = width of nextCh; pw = line width without nextCh *) + Texts.Read(R, nextCh); INC(i); INC(pw, dx); + IF nextCh <= " " THEN GetSpecial(F, n, cn, ddx, pw - lm, dx, xc, yc, wc, hc) + ELSE Display.GetChar(R.fnt.raster, nextCh, dx, xc, yc, wc, hc, pat) + END + END; + IF pw + dx < w THEN INC(i); INC(pw, dx); R.elem := NIL END; + INC(loc.pos, i - 1); loc.x := F.X + pw; + IF i < t.len THEN loc.dx := dx; loc.dy := R.fnt.height * R.voff DIV 64 ELSE loc.dx := 4 END + ELSE loc.dx := 4; R.elem := NIL + END + END LocateChar; + + PROCEDURE LocateWord* (F: Frame; x, y: INTEGER; VAR loc: Location); + VAR t: TextLine; pos, i: LONGINT; px, rx: INTEGER; pat: Display.Pattern; dx, xc, yc, wc, hc: INTEGER; + BEGIN + LocateChar(F, x, y, loc); pos := loc.pos + 1; + REPEAT DEC(pos); Texts.OpenReader(R, F.text, pos); Texts.Read(R, nextCh) + UNTIL (pos < loc.org) OR (nextCh > " "); + INC(pos); + REPEAT DEC(pos); Texts.OpenReader(R, F.text, pos); Texts.Read(R, nextCh) + UNTIL (pos < loc.org) OR (nextCh <= " "); + LocatePos(F, pos + 1, loc); t := loc.line; i := loc.pos - loc.org; + IF i < t.len THEN px := loc.x; rx := F.X + F.W - F.right; + Texts.OpenReader(R, F.text, loc.pos); dx := 0; wc := 0; nextCh := "x"; + WHILE (i < t.len) & (nextCh > " ") & (px + dx < rx) DO + Texts.Read(R, nextCh); INC(i); INC(px, dx); + Display.GetChar(R.fnt.raster, nextCh, dx, xc, yc, wc, hc, pat) + END; + IF (nextCh > " ") & (px + dx < rx) THEN INC(i); INC(px, dx) END; + loc.dx := px - loc.x + ELSE loc.dx := 0 + END + END LocateWord; + + PROCEDURE Pos* (F: Frame; x, y: INTEGER): LONGINT; + VAR loc: Location; + BEGIN LocateChar(F, x, y, loc); RETURN loc.pos + END Pos; + + PROCEDURE ThisSubFrame (F: Frame; x, y: INTEGER): Display.Frame; + VAR f: Display.Frame; + BEGIN f := F.dsc; + WHILE (f # NIL) & ((x < f.X) OR (x >= f.X + f.W) OR (y < f.Y) OR (y >= f.Y + f.H)) DO f := f.next END; + RETURN f + END ThisSubFrame; + +*) + (** Caret & Selection **) +(* + PROCEDURE PassSubFocus (F: Frame; f: Display.Frame); + (* pass focus from F.focus to f (f is also an element frame in F) *) + VAR loc: Location; f1: Display.Frame; ctrl: Oberon.ControlMsg; focus: FocusMsg; + BEGIN + IF F.focus # NIL THEN f1 := F.focus; + ctrl.id := Oberon.defocus; f1.handle(f1, ctrl); + LocateChar(F, f1.X + 1, f1.Y + 1, loc); + InvertBorder(f1); F.focus := NIL; + focus.focus := FALSE; focus.elemFrame := f1; focus.frame := F; R.elem.handle(R.elem, focus) + END; + IF f # NIL THEN + LocateChar(F, f.X + 1, f.Y + 1, loc); (* side effect: set R to element *) + focus.focus := TRUE; focus.elemFrame := f; focus.frame := F; R.elem.handle(R.elem, focus); + InvertBorder(f) + END; + F.focus := f + END PassSubFocus; + + PROCEDURE RemoveSelection* (F: Frame); + BEGIN + IF F.hasSel THEN InvertSelection(F, F.selbeg, F.selend); F.hasSel := FALSE END + END RemoveSelection; + + PROCEDURE SetSelection* (F: Frame; beg, end: LONGINT); (** forces range to visible bounds **) + VAR loc: Location; + BEGIN + IF end > F.text.len THEN end := F.text.len END; + IF end > beg THEN + IF F.hasSel & (F.selbeg.pos = beg) THEN + IF (F.selend.pos < end) & (F.selend.pos < F.trailer.org) THEN + LocatePos(F, F.selend.pos, loc); LocatePos(F, end, F.selend); InvertSelection(F, loc, F.selend) + ELSIF end < F.selend.pos THEN + LocatePos(F, end, loc); InvertSelection(F, loc, F.selend); LocatePos(F, end, F.selend) + END + ELSE RemoveSelection(F); PassSubFocus(F, NIL); + LocatePos(F, beg, F.selbeg); LocatePos(F, end, F.selend); InvertSelection(F, F.selbeg, F.selend) + END; + F.hasSel := TRUE; F.time := Oberon.Time() + END + END SetSelection; + + + PROCEDURE RemoveCaret* (F: Frame); + VAR msg: Oberon.ControlMsg; + BEGIN + IF F.focus # NIL THEN msg.id := Oberon.defocus; F.focus.handle(F.focus, msg) END; + IF F.hasCar THEN InvertCaret(F); F.hasCar := FALSE END + END RemoveCaret; + + PROCEDURE SetCaret* (F: Frame; pos: LONGINT); (** only done if within visible bounds **) + BEGIN + IF ~F.hasCar OR (F.carloc.pos # pos) THEN RemoveCaret(F); PassSubFocus(F, NIL); + LocatePos(F, pos, F.carloc); + IF F.carloc.x <= F.X + F.W - F.right THEN InvertCaret(F); F.hasCar := TRUE END + END + END SetCaret; + + +*) + (** Display Range **) +(* + PROCEDURE Complete (F: Frame; trailer: TextLine; s: TextLine; org: LONGINT; ph: INTEGER); + VAR u: TextLine; + BEGIN + IF ph > F.bot THEN (*try to add new lines to the bottom*) + Texts.OpenReader(R, F.text, org); Texts.Read(R, nextCh); + LOOP + IF R.eot THEN EXIT END; + NEW(u); u.org := org; MeasureLine(F, F.W - F.left - F.right, u); + IF ph - u.h < F.bot THEN EXIT END; + s.next := u; s := s.next; DEC(ph, s.h); INC(org, s.span) + END + END; + s.next := trailer; trailer.eot := TRUE; trailer.org := org; trailer.len := 0; trailer.w := 0; + trailer.h := SHORT(defParc.lsp DIV Unit); trailer.P := P; trailer.pbeg := pbeg + END Complete; + + PROCEDURE ShowFrom (F: Frame; pos: LONGINT); (* removes global marks as needed and neutralizes F *) + VAR new, s: TextLine; beg, end: Location; org: LONGINT; ph, y0, dy: INTEGER; + BEGIN + F.handle(F, neutralize); + IF (F.trailer # NIL) & (F.org < pos) & (pos < F.trailer.org) THEN (* shift up and extend to the bottom *) + LocateLineTop(F, F.trailer, pos, beg); LocateLineTop(F, F.trailer, F.trailer.org, end); + dy := (F.Y + F.H - F.top) - beg.y; Shift(F, end.y, end.y + dy, beg.y - end.y); + Erase(F, F.X + F.left, end.y, F.W - F.left, dy); + s := F.trailer.next; WHILE s.org # pos DO s := s.next END; + F.trailer.next := s; org := s.org + s.span; ph := F.H - F.top - s.h; + WHILE s.next # F.trailer DO s := s.next; org := org + s.span; ph := ph - s.h END; + Complete(F, F.trailer, s, org, ph); F.org := pos; ShowLines(F, F.bot, end.y + dy - F.Y, FALSE) + ELSIF (F.trailer = NIL) OR (pos # F.org) THEN + MeasureLines(F, pos, new); + IF (F.trailer # NIL) & (pos < F.org) & (F.org <= new.org) THEN (* shift down and extend to the top *) + LocateLineTop(F, new, F.org, beg); LocateLineTop(F, new, new.org, end); + y0 := F.Y + F.H - F.top; Shift(F, y0 - (beg.y - end.y), end.y, beg.y - end.y); + Erase(F, F.X + F.left, beg.y, F.W - F.left, y0 - beg.y); + Erase(F, F.X + F.left, F.Y + F.bot, F.W - F.left, end.y - (F.Y + F.bot)); + F.org := pos; F.trailer := new; ShowLines(F, beg.y - F.Y, F.H - F.top, FALSE) + ELSE (* full redisplay *) + IF F.trailer = NIL THEN Erase(F, F.X, F.Y, F.W, F.H); ShowBar(F, 0, F.H); F.markH := -1 + ELSE Erase(F, F.X + F.left, F.Y + F.bot, F.W - F.left, F.H - F.bot - F.top) + END; + F.org := pos; F.trailer := new; ShowLines(F, F.bot, F.H - F.top, FALSE) + END + END; + ShowTick(F) + END ShowFrom; + + PROCEDURE Show* (F: Frame; pos: LONGINT); (** removes global marks as needed and neutralizes F **) + BEGIN BegOfLine(F.text, pos, TRUE); ShowFrom(F, pos) + END Show; + + + PROCEDURE Resize (F: Frame; x, y, w, h: INTEGER); + VAR oldY, oldH, dh, ph: INTEGER; t: TextLine; + BEGIN + IF (w = 0) OR (h = 0) THEN InvalSubFrames(F, F.X, F.Y, F.W, F.H); + F.X := x; F.Y := y; F.W := w; F.H := h; F.trailer := NIL + ELSIF (F.trailer # NIL) & (x = F.X) & (w = F.W) THEN + oldY := F.Y; oldH := F.H; Tick(F); F.markH := -1; F.Y := y; F.H := h; + IF h > oldH THEN dh := h - oldH; (* extend *) + IF y + h # oldY + oldH THEN + Display.CopyBlock(x, oldY, w, oldH, x, y + dh, Display.replace); + ShiftSubFrames(F, oldY, y + dh, oldH) + END; + EraseRect(F, x, y, w, dh); ShowBar(F, 0, dh); + t := F.trailer; ph := F.H - F.top; + WHILE t.next # F.trailer DO t := t.next; ph := ph - t.h END; + Complete(F, F.trailer, t, F.trailer.org, ph); ShowLines(F, F.bot, ph, FALSE) + ELSE dh := oldH - h; (* reduce *) + IF y + h # oldY + oldH THEN + Display.CopyBlock(x, oldY + dh, w, h, x, y, Display.replace); + ShiftSubFrames(F, oldY + dh, y, h) + END; + t := F.trailer; ph := F.H - F.top; + WHILE (t.next # F.trailer) & (ph - t.next.h >= F.bot) DO t := t.next; DEC(ph, t.h) END; + IF t = F.trailer THEN t.org := F.org; t.span := 0 END; + Complete(F, F.trailer, t, t.org + t.span, ph); + EraseRect(F, x + F.left, y, w - F.left, ph); + InvalSubFrames(F, x, oldY, w, y - oldY); InvalSubFrames(F, x, y + h, w, dh - (y - oldY)) + END; + ShowTick(F) + ELSE F.X := x; F.Y := y; F.W := w; F.H := h; F.trailer := NIL; Show(F, F.org) + END + END Resize; + +*) + (** Contents Update **) +(* + PROCEDURE Update (F: Frame; VAR msg: UpdateMsg); (** removes global marks as needed **) + VAR t: TextLine; org, d, Fbeg, Fend: LONGINT; + foc: Display.Frame; beg, end: LONGINT; ch: CHAR; r: Texts.Reader; loc: Location; + + PROCEDURE Begin (VAR beg: LONGINT; VAR org0: LONGINT; VAR q: TextLine); + (* org0 = origin of first affected line; beg = pos of first modified character; q = first affected line (if line origin has not moved).*) + (* q = NIL => beg = org0; q # NIL => first (beg-org0) characters of q need not be redrawn *) + VAR trailer, t: TextLine; + BEGIN + trailer := F.trailer; t := trailer; + WHILE (t.next # trailer) & (beg >= t.next.org + t.next.span) & ~t.next.eot DO t := t.next END; + q := t.next; + IF (t # trailer) & (q # trailer) & (beg <= q.org + q.span) THEN + Texts.OpenReader(R, F.text, t.org); Texts.Read(R, nextCh); org0 := t.org; NextLine(F.text, org0) + ELSE org0 := beg; BegOfLine(F.text, org0, TRUE) + END; + IF org0 # q.org THEN + IF t = trailer THEN org0 := q.org ELSE org0 := t.org END; + beg := org0; q := NIL + END + END Begin; + + PROCEDURE Adjust (end, delta: LONGINT); + (* H1 = top of synchronization line in old frame *) + (* h0 = top of line that was modified *) + (* h1 = top of block in new frame that could be reused *) + (* h2 = bottom of last line in new frame *) + (* h1 - h2 = height of block that could be reused *) + VAR new, old, s, t, u, p, q: TextLine; bot: Location; + org, org0, beg: LONGINT; ph, h0, h1, H1, h2, lm, dx, dy: INTEGER; + BEGIN + q := NIL; LocateLineTop(F, F.trailer, F.trailer.org, bot); + IF msg.beg < F.org THEN org0 := F.org; beg := org0 ELSE beg := msg.beg; Begin(beg, org0, q) END; + NEW(new); s := new; old := F.trailer; t := old; org := F.org; ph := F.H - F.top; + WHILE (t.next # old) & (t.next.org # org0) DO t := t.next; (*transfer unchanged prefix*) + s.next := t; s := t; DEC(ph, s.h); INC(org, s.span) + END; + h0 := ph; H1 := h0; t := t.next; p := s; + Texts.OpenReader(R, F.text, org); Texts.Read(R, nextCh); (*rebuild at least one line descriptor*) + LOOP NEW(u); u.org := org; MeasureLine(F, F.W - F.left - F.right, u); + IF ph - u.h < F.bot THEN h1 := ph; h2 := h1; EXIT END; + s.next := u; s := s.next; DEC(ph, s.h); INC(org, s.span); + IF R.eot THEN h1 := ph; h2 := h1; EXIT END; + IF org > end THEN + WHILE (t # old) & (org > t.org + delta) DO DEC(H1, t.h); t := t.next END; + IF (org = t.org + delta) & (P = t.P) THEN h1 := ph; (*resynchronized*) + WHILE (t # old) & (ph - t.h >= F.bot) DO (*transfer unchanged suffix*) + s.next := t; s := t; s.org := org; ParcBefore(F.text, s.org, s.P, s.pbeg); + DEC(ph, s.h); INC(org, s.span); t := t.next + END; + h2 := ph; EXIT + END + END + END; + Shift(F, F.Y + H1 - (h1 - h2), F.Y + h2, h1 - h2); + Complete(F, new, s, org, ph); F.trailer := new; t := p.next; + IF (q # NIL) & (t # F.trailer) & (q.h = t.h) & (q.dsr = t.dsr) & (q.org = t.org) & (q.P = t.P) & (end <= t.org + t.span) THEN + P := t.P; pbeg := t.pbeg; + IF (P.opts * AdjMask = {leftAdj}) OR (P.opts * AdjMask = AdjMask) & (q.nob = 0) & (t.nob = 0) THEN + Width(F, t, beg, lm, dx, dy); (*preserve prefix of first affected line*) + DEC(h0, t.h); Erase(F, F.X + lm, F.Y + h0, F.W - lm, t.h); + ShowLine(F, t, F.X + lm, F.X + F.W - F.right, F.Y + h0) + END + END; + ShowLines(F, h1, h0, TRUE); + Erase(F, F.X + F.left, bot.y, F.W - F.left, h2 - (bot.y - F.Y)); ShowLines(F, F.bot, h2, FALSE) + END Adjust; + + BEGIN + foc := F.focus; beg := msg.beg; end := msg.end; + F.handle(F, neutralize); MarkMenu(F); Fbeg := F.org; Fend := F.trailer.org; + IF (msg.id = Texts.insert) & (msg.beg < F.org) THEN t := F.trailer; d := msg.end - msg.beg; INC(F.org, d); + REPEAT INC(t.org, d); t := t.next UNTIL t = F.trailer + ELSIF msg.id = Texts.delete THEN + IF msg.end <= F.org THEN t := F.trailer; d := msg.end - msg.beg; DEC(F.org, d); + REPEAT DEC(t.org, d); t := t.next UNTIL t = F.trailer + ELSIF msg.beg < F.org THEN F.org := msg.beg + END + END; + org := F.org; + IF msg.beg <= Fbeg + AdjustSpan THEN BegOfLine(F.text, org, TRUE) END; + ParcBefore(F.text, org, P, d); + IF (org # F.org) OR (P # F.trailer.next.P) THEN + F.trailer := NIL; Show(F, F.org) + ELSIF (msg.end > Fbeg) & (msg.beg < Fend + AdjustSpan) THEN + IF msg.id = Texts.replace THEN Adjust(msg.end, 0); + (* refocus element if necessary *) + IF (foc # NIL) & (end-beg = 1) THEN + Texts.OpenReader(r, F.text, beg); Texts.Read(r, ch); + IF r.elem # NIL THEN + LocatePos(F, beg, loc); foc := ThisSubFrame(F, loc.x, loc.y); PassSubFocus(F, foc); + END + END + ELSIF msg.id = Texts.insert THEN Adjust(msg.end, msg.end - msg.beg) + ELSIF msg.id = Texts.delete THEN Adjust(msg.beg, msg.beg - msg.end) + END + END; + ShowTick(F) + END Update; + +*) + (** User Interface **) +(* + PROCEDURE Back (F: Frame; dY: INTEGER; (*inout*) VAR org: LONGINT); (* mh 10.10.92 *) + (* computes new org such that old org is (at most) dY pixels below new org *) + VAR H: INTEGER; oldOrg: LONGINT; + + PROCEDURE TotalHeight (org1, org2: LONGINT): INTEGER; + (* measures total height of text-lines starting at org1 and ending at the line before the line containing org2 *) + VAR h: INTEGER; line: TextLine; + BEGIN + Texts.OpenReader(R, F.text, org1); Texts.Read(R, nextCh); NEW(line); h := 0; + LOOP line.org := org1; + MeasureLine(F, F.W - F.left - F.right, line); INC(org1, line.span); + IF Texts.Pos(R)-1 > org2 THEN EXIT END; + INC(h, line.h); + IF R.eot THEN EXIT END; + END; + RETURN h + END TotalHeight; + + PROCEDURE Forward (h: INTEGER); + (* increase org by n text-lines such that the sum of the n line-heights > h *) + VAR line: TextLine; + BEGIN + Texts.OpenReader(R, F.text, org); Texts.Read(R, nextCh); NEW(line); + WHILE h > 0 DO line.org := org; + MeasureLine(F, F.W - F.left - F.right, line); INC(org, line.span); DEC(h, line.h); + END; + org := Texts.Pos(R)-1; + END Forward; + + BEGIN H := 0; + LOOP oldOrg := org; + IF org = 0 THEN EXIT END; + DEC(org, 800); BegOfLine(F.text, org, FALSE); + INC(H, TotalHeight(org, oldOrg)); + IF H > dY THEN EXIT END; + END; + Forward(H - dY); + END Back; + + PROCEDURE TrackLine* (F: Frame; VAR x, y: INTEGER; VAR org: LONGINT; VAR keysum: SET); + VAR keys: SET; new, old: Location; + BEGIN + LocateLine(F, y, old); InvertRect(F, old.x, old.y, old.dx + 4, 2); keysum := {}; + REPEAT TrackMouse(x, y, keys, keysum); LocateLine(F, y, new); + IF new.org # old.org THEN + InvertRect(F, new.x, new.y, new.dx + 4, 2); InvertRect(F, old.x, old.y, old.dx + 4, 2); old := new + END + UNTIL keys = {}; + InvertRect(F, new.x, new.y, new.dx + 4, 2); org := new.org + END TrackLine; + + PROCEDURE TrackWord* (F: Frame; VAR x, y: INTEGER; VAR pos: LONGINT; VAR keysum: SET); + VAR keys: SET; new, old: Location; + BEGIN + LocateWord(F, x, y, old); InvertRect(F, old.x, old.y, old.dx, 2); keysum := {}; + REPEAT TrackMouse(x, y, keys, keysum); LocateWord(F, x, y, new); + IF new.pos # old.pos THEN + InvertRect(F, new.x, new.y, new.dx, 2); InvertRect(F, old.x, old.y, old.dx, 2); old := new + END + UNTIL keys = {}; + InvertRect(F, new.x, new.y, new.dx, 2); pos := new.pos + END TrackWord; + + PROCEDURE TrackCaret* (F: Frame; VAR x, y: INTEGER; VAR keysum: SET); + VAR keys: SET; + BEGIN keysum := {}; + REPEAT TrackMouse(x, y, keys, keysum); SetCaret(F, Pos(F, x, y)) UNTIL keys = {} + END TrackCaret; + + PROCEDURE TrackSelection* (F: Frame; VAR x, y: INTEGER; VAR keysum: SET); + VAR keys: SET; pos: LONGINT; V: Viewers.Viewer; f: Frame; + BEGIN + V := Viewers.This(F.X, F.Y); V := V.next(Viewers.Viewer); + IF (V.dsc # NIL) & (V.dsc.next # NIL) & (V.dsc.next IS Frame) THEN f := V.dsc.next(Frame); + IF f.hasSel & (f.text = F.text) THEN + IF (f.selbeg.pos < f.trailer.org) & (f.org < f.selend.pos) & (f.selbeg.pos <= Pos(F, x, y)) THEN + SetSelection(F, f.selbeg.pos, Pos(F, x, y) + 1) + ELSE RemoveSelection(f); f := NIL + END + ELSE f := NIL + END + ELSE f := NIL + END; + IF f = NIL THEN + IF F.hasSel & (F.selbeg.pos + 1 = F.selend.pos) & (Pos(F, x, y) = F.selbeg.pos) THEN + SetSelection(F, F.selbeg.org, Pos(F, x, y) + 1) + ELSE SetSelection(F, Pos(F, x, y), Pos(F, x, y) + 1) + END + END; + keysum := {}; + REPEAT TrackMouse(x, y, keys, keysum); + IF F.hasSel THEN + pos := Pos(F, x, Min(y, F.selbeg.y)) + 1; + IF pos <= F.selbeg.pos THEN pos := F.selbeg.pos + 1 END; + SetSelection(F, F.selbeg.pos, pos); + IF f # NIL THEN SetSelection(f, f.selbeg.pos, pos); f.selend.pos := F.selend.pos END + ELSE SetSelection(F, Pos(F, x, y), Pos(F, x, y) + 1) + END + UNTIL keys = {}; + IF f # NIL THEN F.selbeg.pos := f.selbeg.pos END + END TrackSelection; + + PROCEDURE Call (F: Frame; pos: LONGINT; keysum: SET); + VAR S: Texts.Scanner; res, i, j: INTEGER; + BEGIN + Texts.OpenScanner(S, F.text, pos); Texts.Scan(S); + IF (S.class = Texts.Name) & (S.line = 0) THEN i := 0; + WHILE (i < S.len) & (S.s[i] # ".") DO INC(i) END; + j := i + 1; + WHILE (j < S.len) & (S.s[j] # ".") DO INC(j) END; + IF (j >= S.len) & (S.s[i] = ".") OR (rightKey IN keysum) THEN + par.vwr := Viewers.This(F.X, F.Y); + IF rightKey IN keysum THEN S.s:="Edit.Open"; par.pos := pos ELSE par.pos := pos + S.len END; + par.frame := F; par.text := F.text; Oberon.Call(S.s, par, keysum = {middleKey, leftKey}, res); + IF res > 0 THEN + Texts.WriteString(W0, "Call error: "); Texts.WriteString(W0, Modules.importing); + IF res = 1 THEN + Texts.WriteString(W0, " not found") + ELSIF res = 2 THEN + Texts.WriteString(W0, " not an obj-file") + ELSIF res = 3 THEN + Texts.WriteString(W0, " imports "); + Texts.WriteString(W0, Modules.imported); Texts.WriteString(W0, " with bad key"); + ELSIF res = 4 THEN + Texts.WriteString(W0, " corrupted obj file") + ELSIF res = 6 THEN + Texts.WriteString(W0, " has too many imports") + ELSIF res = 7 THEN + Texts.WriteString(W0, " not enough space") + END + ELSIF res < 0 THEN + INC(i); WHILE i < S.len DO Texts.Write(W0, S.s[i]); INC(i) END; + Texts.WriteString(W0, " not found") + END; + IF res # 0 THEN Texts.WriteLn(W0); Texts.Append(Oberon.Log, W0.buf) END + END + END + END Call; + + PROCEDURE PickAttributes (VAR W: Texts.Writer; T: Texts.Text; pos: LONGINT; font: Fonts.Font; col, voff: SHORTINT); + VAR R: Texts.Reader; ch: CHAR; + BEGIN + IF T.len > 0 THEN + IF pos < T.len THEN Texts.OpenReader(R, T, pos); Texts.Read(R, ch) END; + IF (pos > 0) & ((pos = T.len) OR (ch <= " ")) THEN + Texts.OpenReader(R, T, pos - 1); Texts.Read(R, ch) + END; + Texts.SetFont(W, R.fnt); Texts.SetColor(W, R.col); + IF (ch = CR) OR (ch = TAB) OR (ch = LF) THEN Texts.SetOffset(W, voff) ELSE Texts.SetOffset(W, R.voff) END + ELSE Texts.SetFont(W, font); Texts.SetColor(W, col); Texts.SetOffset(W, voff) + END + END PickAttributes; + + PROCEDURE ShiftBlock (F: Frame; delta: INTEGER); (* shift selected lines to left or right *) + VAR text: Texts.Text; pos, beg, end, time: LONGINT; select: SelectMsg; ch: CHAR; + BEGIN + Oberon.GetSelection(text, beg, end, time); + IF (time >= 0) & (text = F.text) THEN BegOfLine(F.text, beg, FALSE); pos := beg; + WHILE pos < end DO Texts.OpenReader(R, F.text, pos); Texts.Read(R, ch); + WHILE (R.elem # NIL) & (R.elem IS Parc) & (pos < end) DO Texts.Read(R, ch); INC(pos) END; + IF pos < end THEN + IF delta < 0 THEN + IF (ch <= " ") & (ch # CR) & (ch # Texts.ElemChar) THEN + Texts.Delete(F.text, pos, pos + 1); DEC(end) + END + ELSE + PickAttributes(W, text, pos, Oberon.CurFnt, Oberon.CurCol, Oberon.CurOff); + IF (ch <= " ") & (ch # CR) & (ch # Texts.ElemChar) THEN Texts.Write(W, ch) (* first char extension *) + ELSE Texts.Write(W, TAB) + END; + Texts.Insert(F.text, pos, W.buf); INC(end); INC(pos) + END; + Texts.OpenReader(R, F.text, pos); + REPEAT Texts.Read(R, ch) UNTIL R.eot OR (ch = CR); + pos := Texts.Pos(R) + END + END; + select.text := F.text; select.beg := beg; select.end := pos; select.time := Oberon.Time(); + Viewers.Broadcast(select) + END + END ShiftBlock; + + PROCEDURE Write (F: Frame; ch: CHAR; fnt: Fonts.Font; col, voff: SHORTINT); + VAR loc: Location; parc: Parc; org, pos, pbeg: LONGINT; i: INTEGER; ch0: CHAR; + buf: ARRAY 32 OF CHAR; + copy: Texts.CopyMsg; input: Oberon.InputMsg; + + PROCEDURE Visible(ch: CHAR): BOOLEAN; + VAR pat: Display.Pattern; dx, x, y, w, h: INTEGER; + BEGIN Display.GetChar(W.fnt.raster, ch, dx, x, y, w, h, pat); RETURN dx > 0 + END Visible; + + PROCEDURE InsertBuffer; + VAR i, j: INTEGER; ch: CHAR; + BEGIN i := 0; j := 0; ch := buf[i]; + WHILE ch # 0X DO + IF (ch = TAB) OR (ch = CR) OR (ch = " ") OR Visible(ch) THEN Texts.Write(W, ch); INC(j) END; + INC(i); ch := buf[i] + END; + IF j > 0 THEN Texts.Insert(F.text, pos, W.buf); INC(pos, LONG(j)) END + END InsertBuffer; + + PROCEDURE Flush; + VAR ch: CHAR; + BEGIN + WHILE Input.Available() > 0 DO Input.Read(ch) END + END Flush; + + BEGIN + IF F.hasSel & (ch = CRSL) THEN ShiftBlock(F, -1) + ELSIF F.hasSel & (ch = CRSR) THEN ShiftBlock(F, 1) + ELSIF F.hasCar THEN pos := F.carloc.pos; + IF (ch = DEL) & (pos > F.org) THEN DEC(pos); Texts.Delete(F.text, pos, pos + 1); Flush + ELSIF (ch = CRSL) & (pos > 0) THEN DEC(pos) + ELSIF (ch = CRSR) & (pos < F.text.len) THEN INC(pos) + ELSIF (ch = BRK) OR (ch = ShiftBRK) THEN + ParcBefore(F.text, pos, P, pbeg); P.handle(P, copy); parc := copy.e(Parc); + IF ch = BRK THEN EXCL(parc.opts, pageBreak) ELSE INCL(parc.opts, pageBreak) END; + PickAttributes(W, F.text, pos, fnt, col, voff); + Texts.WriteElem(W, parc); Texts.Insert(F.text, pos, W.buf); INC(pos) + ELSIF (ch = TAB) OR (ch = LF) OR (ch = CR) OR (ch >= " ") THEN + PickAttributes(W, F.text, pos, fnt, col, voff); + IF ch = LF THEN buf[0] := CR; i := 1; org := F.carloc.org; BegOfLine(F.text, org, FALSE); + Texts.OpenReader(R, F.text, org); + REPEAT Texts.Read(R, ch) UNTIL (R.elem = NIL) OR ~(R.elem IS Parc); + WHILE (Texts.Pos(R) <= pos) & (ch <= " ") & (ch # Texts.ElemChar) & (i < 31) DO + buf[i] := ch; INC(i); Texts.Read(R, ch) + END + ELSE buf[0] := ch; i := 1 + END; + WHILE (Input.Available() > 0) & (i < 31) & (ch >= " ") & (ch < DEL) DO Input.Read(buf[i]); INC(i) END; + buf[i] := 0X; InsertBuffer + END; + IF pos < F.org THEN Show(F, F.org - 1) + ELSIF pos < F.text.len THEN org := -1; + WHILE (pos >= F.trailer.org) & (pos > F.org) DO + org := F.trailer.next.next.org; IF org = F.org THEN INC(org) END; + ShowFrom(F, org); Flush + END + ELSE LocatePos(F, pos, loc); LocateChar(F, loc.x + 1, loc.y, loc); + IF pos # loc.pos THEN Show(F, F.trailer.next.next.org); Flush END + END; + SetCaret(F, pos) + ELSIF F.focus # NIL THEN input.id := Oberon.consume; input.ch := ch; + input.fnt := fnt; input.col := col; input.voff := voff; F.focus.handle(F.focus, input) + END + END Write; + + + PROCEDURE TouchElem (F: Frame; VAR x, y: INTEGER; VAR keysum: SET); + VAR loc: Location; e: Texts.Elem; pbeg: LONGINT; y0: INTEGER; + track: TrackMsg; + BEGIN + LocateChar(F, x, y, loc); e := R.elem; + IF (e # NIL) & (loc.x + e.W DIV Unit <= F.X + F.W - F.right) THEN + ParcBefore(F.text, loc.pos, P, pbeg); y0 := loc.y + loc.line.dsr - SHORT(P.dsr DIV Unit) + loc.dy; + IF (loc.x <= x) & (x < loc.x + e.W DIV Unit) & (keysum= {middleKey}) THEN + track.X := x; track.Y := y; track.keys := keysum; + track.fnt := R.fnt; track.col := R.col; track.pos := Texts.Pos(R) - 1; + track.frame := F; track.X0 := loc.x; track.Y0 := y0; + e.handle(e, track); keysum := {} + END + END + END TouchElem; + + + PROCEDURE Edit (F: Frame; x, y: INTEGER; keysum: SET); + VAR ef: Display.Frame; text: Texts.Text; beg, end, time, pos: LONGINT; keys: SET; ch: CHAR; + loc: Location; delta: INTEGER; copyover: Oberon.CopyOverMsg; input: Oberon.InputMsg; + BEGIN + IF x < F.X + F.barW THEN pos := F.org; (* scroll bar *) + IF leftKey IN keysum THEN TrackLine(F, x, y, pos, keysum) + ELSIF rightKey IN keysum THEN TrackLine(F, x, y, pos, keysum); LocateLine(F, y, loc); + pos := F.org; delta := loc.y - (F.Y + F.bot); Back(F, delta, pos) + ELSIF middleKey IN keysum THEN + REPEAT TrackMouse(x, y, keys, keysum) UNTIL keys = {}; + IF keysum = {middleKey, leftKey} THEN pos := F.text.len; (*BegOfLine(F.text, pos, TRUE);*) + Back(F, F.H - F.bot - F.top - 30 (*heuristic*), pos); + ELSIF keysum = {middleKey, rightKey} THEN pos := 0 + ELSIF (F.Y <= y) & (y <= F.Y + F.H) THEN pos := CoordToPos(F, y - F.Y); BegOfLine(F.text, pos, TRUE) + END + ELSE DrawCursor(x, y); keysum := cancel + END; + IF keysum # cancel THEN ShowFrom(F, pos) END + ELSE (* text area *) + ef := ThisSubFrame(F, x, y); + IF ef # NIL THEN (* within sub-frame *) + IF (F.focus # ef) & (keysum = {leftKey}) THEN + REPEAT TrackMouse(x, y, keys, keysum) UNTIL keys = {}; + IF keysum = {leftKey} THEN RemoveSelection(F); RemoveCaret(F); PassSubFocus(F, ef); RETURN END + ELSIF F.focus = ef THEN input.id := Oberon.track; input.keys := keysum; input.X := x; input.Y := y; + ef.handle(ef, input); RETURN + END + END; + IF keysum # {} THEN TouchElem(F, x, y, keysum); + IF keysum = {} THEN RETURN END + END; + IF leftKey IN keysum THEN Oberon.PassFocus(Viewers.This(F.X, F.Y)); TrackCaret(F, x, y, keysum); + IF (keysum = {leftKey, middleKey}) & F.hasCar THEN Oberon.GetSelection(text, beg, end, time); + IF time >= 0 THEN Texts.Save(text, beg, end, B); + Texts.Insert(F.text, F.carloc.pos, B); SetCaret(F, F.carloc.pos + (end - beg)) + END + ELSIF (keysum = {leftKey, rightKey}) & F.hasCar & (F.carloc.pos < F.text.len) THEN + Oberon.GetSelection(text, beg, end, time); + IF time >= 0 THEN Texts.OpenReader(R, F.text, F.carloc.pos); Texts.Read(R, ch); + Texts.ChangeLooks(text, beg, end, {0, 1, 2}, R.fnt, R.col, R.voff) + END + END + ELSIF middleKey IN keysum THEN TrackWord(F, x, y, pos, keysum); + IF keysum # cancel THEN Call(F, pos, keysum) END + ELSIF rightKey IN keysum THEN TrackSelection(F, x, y, keysum); + IF (keysum = {rightKey, middleKey}) & F.hasSel THEN + copyover.text := F.text; copyover.beg := F.selbeg.pos; copyover.end := F.selend.pos; + Oberon.FocusViewer.handle(Oberon.FocusViewer, copyover) + ELSIF (keysum = {rightKey, leftKey}) & F.hasSel THEN Oberon.PassFocus(Viewers.This(F.X, F.Y)); + Texts.Delete(F.text, F.selbeg.pos, F.selend.pos); SetCaret(F, F.selbeg.pos) + END + ELSE DrawCursor(x, y) + END + END + END Edit; + +*) + (** General **) + + + PROCEDURE Copy (SF, DF: Frame); + BEGIN + DF.handle := SF.handle; DF.text := SF.text; DF.org := SF.org; + DF.col := SF.col; DF.left := SF.left; DF.right := SF.right; DF.top := SF.top; DF.bot := SF.bot; + DF.barW := SF.barW; DF.hasCar := FALSE; DF.hasSel := FALSE; DF.showsParcs := SF.showsParcs; + DF.focus := NIL; DF.trailer := NIL + END Copy; +(* + PROCEDURE Handle* (f: Display.Frame; VAR msg: Display.FrameMsg); + VAR F, F1: Frame; pos: LONGINT; + BEGIN F := f(Frame); + IF msg IS Oberon.InputMsg THEN + WITH msg: Oberon.InputMsg DO + IF msg.id = Oberon.consume THEN Write(F, msg.ch, msg.fnt, msg.col, msg.voff) + ELSIF msg.id = Oberon.track THEN Edit(F, msg.X, msg.Y, msg.keys) + END + END + ELSIF msg IS Oberon.ControlMsg THEN + WITH msg: Oberon.ControlMsg DO + IF msg.id = Oberon.defocus THEN RemoveCaret(F) + ELSIF msg.id = Oberon.neutralize THEN + RemoveCaret(F); RemoveSelection(F); PassSubFocus(F, NIL); NotifySubFrames(F, msg) + ELSE NotifySubFrames(F, msg) + END + END + ELSIF msg IS Oberon.CopyMsg THEN + WITH msg: Oberon.CopyMsg DO + IF msg.F = NIL THEN NEW(F1); msg.F := F1 END; + Copy(F, msg.F(Frame)) + END + ELSIF msg IS UpdateMsg THEN NotifySubFrames(F, msg); + WITH msg: UpdateMsg DO + IF msg.text = F.text THEN Update(F, msg) END + END + ELSIF msg IS InsertElemMsg THEN + IF F.hasCar THEN pos := F.carloc.pos; + PickAttributes(W, F.text, pos, Oberon.CurFnt, Oberon.CurCol, Oberon.CurOff); + Texts.WriteElem(W, msg(InsertElemMsg).e); + Texts.Insert(F.text, pos, W.buf); + SetCaret(F, pos + 1) + END + ELSIF msg IS Oberon.SelectionMsg THEN NotifySubFrames(F, msg); + WITH msg: Oberon.SelectionMsg DO + IF F.hasSel & (F.time > msg.time) THEN + msg.text := F.text; msg.beg := F.selbeg.pos; msg.end := F.selend.pos; msg.time := F.time + END + END + ELSIF msg IS Oberon.CopyOverMsg THEN NotifySubFrames(F, msg); + WITH msg: Oberon.CopyOverMsg DO + IF F.hasCar THEN Texts.Save(msg.text, msg.beg, msg.end, B); + Texts.Insert(F.text, F.carloc.pos, B); SetCaret(F, F.carloc.pos + (msg.end - msg.beg)) + END + END + ELSIF msg IS MenuViewers.ModifyMsg THEN + WITH msg: MenuViewers.ModifyMsg DO + F.handle(F, neutralize); Resize(F, F.X, msg.Y, F.W, msg.H) + END + ELSIF msg IS SelectMsg THEN NotifySubFrames(F, msg); + WITH msg: SelectMsg DO + IF (msg.text = F.text) & ~F.hasSel THEN Oberon.RemoveMarks(F.X, F.Y, F.W, F.H); + F.handle(F, neutralize); + SetSelection(F, msg.beg, msg.end); F.time := msg.time; + IF F.hasSel THEN F.selbeg.pos := msg.beg; F.selend.pos := msg.end END + END + END + ELSE NotifySubFrames(F, msg) + END + END Handle; + +*) + PROCEDURE Open* (F: Frame; T: Texts.Text; pos: LONGINT); + BEGIN + F.handle := Handle; F.text := T; F.org := pos; F.col := Display.black; + F.left := left; F.right := right; F.top := top; F.bot := bot; + F.barW := barW; F.hasCar := FALSE; F.hasSel := FALSE; F.showsParcs := FALSE; F.trailer := NIL + END Open; + +(* + PROCEDURE NotifyDisplay* (T: Texts.Text; op: INTEGER; beg, end: LONGINT); + VAR msg: UpdateMsg; + BEGIN + msg.text := T; msg.id := op; msg.beg := beg; msg.end := end; Viewers.Broadcast(msg) + END NotifyDisplay; + + PROCEDURE Text* (name: ARRAY OF CHAR): Texts.Text; + VAR text: Texts.Text; + BEGIN + NEW(text); Texts.Open(text, name); text.notify := NotifyDisplay; RETURN text + END Text; +*) + PROCEDURE NewText* (T: Texts.Text; pos: LONGINT): Frame; + VAR frame: Frame; + BEGIN + NEW(frame); Open(frame, T, pos); + RETURN frame + END NewText; +(* + PROCEDURE NewMenu* (name, commands: ARRAY OF CHAR): Frame; + VAR T: Texts.Text; frame: Frame; + BEGIN + T := Text(""); + Texts.WriteString(W0, name); Texts.WriteString(W0, " | "); Texts.WriteString(W0, commands); + Texts.Append(T, W0.buf); + NEW(frame); Open(frame, T, 0); + frame.col := Display.white; frame.left := 6; frame.top := 0; frame.bot := 0; frame.barW := 0; + RETURN frame + END NewMenu; +*) +BEGIN + Texts.OpenWriter(W); Texts.OpenWriter(W0); + Texts.SetFont(W0, Fonts.Default); Texts.SetColor(W0, Display.white); Texts.SetOffset(W0, 0); + neutralize.id := Oberon.neutralize; + NEW(par); + NEW(B); Texts.OpenBuf(B); + menuH := Fonts.Default.height + 2; + barW := 14; left := barW + 6; right := 8; top := 6; bot := 6; + Oberon.Log := Text(""); + InitDefParc +END TextFrames. diff --git a/src/tools/coco/v4_compat/TextFrames.Mod_orig b/src/tools/coco/v4_compat/TextFrames.Mod_orig new file mode 100644 index 00000000..421cb30f --- /dev/null +++ b/src/tools/coco/v4_compat/TextFrames.Mod_orig @@ -0,0 +1,1362 @@ +MODULE TextFrames; (** CAS/MH/HM 20.4.94/JT 1.5.95 **) + IMPORT SYSTEM, Modules, Input, Display, Fonts, Viewers, Oberon, MenuViewers, Texts; + + CONST + (** update message IDs **) + replace* = 0; insert* = 1; delete* = 2; + (** units **) + mm* = 36000; Unit* = 10000; + (** parc options **) + gridAdj* = 0; leftAdj* = 1; rightAdj* = 2; pageBreak* = 3; twoColumns* = 4; + (** maximum number of TAB stops in Parc **) + MaxTabs* = 32; + + AdjMask = {leftAdj, rightAdj}; + TAB = 9X; LF = 0AX; CR = 0DX; DEL = 7FX; BRK = 0ACX; ShiftBRK = 0ADX; CRSL = 0C4X; CRSR = 0C3X; + AdjustSpan = 30; MinTabWidth = 1 * mm; StdTabWidth = 4 * mm; + rightKey = 0; middleKey = 1; leftKey = 2; cancel = {rightKey, middleKey, leftKey}; + + + TYPE + Parc* = POINTER TO ParcDesc; + ParcDesc* = RECORD (Texts.ElemDesc) + left*: LONGINT; (** distance from (F.X + F.left); in units **) + first*: LONGINT; (** first line indentation from P.left; in units **) + width*: LONGINT; (** parc width; in units **) + lead*: LONGINT; (** distance to previous line; in units **) + lsp*: LONGINT; (** line spacing of text after P; in units **) + dsr*: LONGINT; (** descender of text after P; in units **) + opts*: SET; + nofTabs*: INTEGER; + tab*: ARRAY MaxTabs OF LONGINT (** in units **) + END; + + TextLine = POINTER TO TextLineDesc; + Location* = RECORD + org*, pos*: LONGINT; + x*, y*, dx*, dy*: INTEGER; + line: TextLine + END; + TextLineDesc = RECORD + next: TextLine; + eot: BOOLEAN; (* contains end of text *) + indent: LONGINT; (* line indentation in units *) + w, h, dsr: INTEGER; (* bounding box clipped to frame (w including indent) *) + w0, nob: INTEGER; (* unclipped width (including indent), number of contained blanks: nob > 0 if text line wraps around *) + org, len, span: LONGINT; (* len ... characters w/o; span ... w/ trailing CR or white space, if any *) + P: Parc; (* last parc before this text line *) + pbeg: LONGINT (* position of P *) + END; + + Frame* = POINTER TO FrameDesc; + FrameDesc* = RECORD (Display.FrameDesc) + text*: Texts.Text; + org*: LONGINT; + col*, left*, right*, top*, bot*: INTEGER; + markH*: INTEGER; (** position of tick mark in scroll bar (< 0 => no tick mark) **) + barW*: INTEGER; (** scroll bar width **) + time*: LONGINT; (** selection time **) + hasCar*, hasSel*, showsParcs*: BOOLEAN; (** caret/selection present; parcs visible **) + carloc*, selbeg*, selend*: Location; + focus*: Display.Frame; (** frame of nested element if this element contains the focus **) + trailer: TextLine (* ring with trailer and header *) + END; + + DisplayMsg* = RECORD (Texts.ElemMsg) + prepare*: BOOLEAN; + fnt*: Fonts.Font; + col*: SHORTINT; + pos*: LONGINT; (** position in host text **) + frame*: Display.Frame; (** ~prepare => host frame **) + X0*, Y0*: INTEGER; (** ~prepare => receiver origin in screen space **) + indent*: LONGINT; (** prepare => width already consumed in line, in units **) + elemFrame*: Display.Frame (** optional return parameter **) + END; + + TrackMsg* = RECORD (Texts.ElemMsg) + X*, Y*: INTEGER; + keys*: SET; + fnt*: Fonts.Font; + col*: SHORTINT; + pos*: LONGINT; (** position in host text **) + frame*: Display.Frame; (** host frame **) + X0*, Y0*: INTEGER (** receiver origin in screen space **) + END; + + FocusMsg* = RECORD (Texts.ElemMsg) + focus*: BOOLEAN; (** whether to focus or to defocus **) + elemFrame*: Display.Frame; (** focus/defocus target **) + frame*: Display.Frame (** host frame **) + END; + + NotifyMsg* = RECORD (Display.FrameMsg) + frame*: Display.Frame (** host frame **) + END; + + UpdateMsg* = RECORD (Display.FrameMsg) + id*: INTEGER; + text*: Texts.Text; + beg*, end*: LONGINT + END; + + InsertElemMsg* = RECORD (Display.FrameMsg) + e*: Texts.Elem + END; + + SelectMsg = RECORD (Display.FrameMsg) + text: Texts.Text; + beg, end: LONGINT; + time: LONGINT + END; + + + VAR + menuH*, barW*, left*, right*, top*, bot*: INTEGER; + defParc*: Parc; + + (*shared globals => get rid off in a later version?*) + W, W0: Texts.Writer; + B: Texts.Buffer; + + P: Parc; + pbeg: LONGINT; (*inv T[pbeg] = P*) + R: Texts.Reader; + nextCh: CHAR; (*inv Base(R) = T => T[Pos(R)-1] = nextCh]*) + par: Oberon.ParList; + neutralize: Oberon.ControlMsg; + + + PROCEDURE Min (x, y: INTEGER): INTEGER; + BEGIN IF x < y THEN RETURN x ELSE RETURN y END + END Min; + + PROCEDURE Max (x, y: INTEGER): INTEGER; + BEGIN IF x > y THEN RETURN x ELSE RETURN y END + END Max; + + PROCEDURE MarkMenu (F: Frame); + VAR R: Texts.Reader; V: Viewers.Viewer; T: Texts.Text; ch: CHAR; + BEGIN V := Viewers.This(F.X, F.Y); + IF (V IS MenuViewers.Viewer) & (V.dsc IS Frame) & (F # V.dsc) THEN + T := V.dsc(Frame).text; + IF T.len > 0 THEN Texts.OpenReader(R, T, T.len - 1); Texts.Read(R, ch) ELSE ch := 0X END; + IF ch # "!" THEN Texts.Write(W0, "!"); Texts.Append(T, W0.buf) END + END + END MarkMenu; + + + (* Element Subframes *) + + PROCEDURE InvertBorder (F: Display.Frame); + BEGIN + Display.ReplPattern(Display.white, Display.grey1, F.X-1, F.Y-1, F.W+2, 1, Display.invert); + Display.ReplPattern(Display.white, Display.grey1, F.X-1, F.Y+F.H, F.W+2, 1, Display.invert); + Display.ReplPattern(Display.white, Display.grey1, F.X-1, F.Y, 1, F.H, Display.invert); + Display.ReplPattern(Display.white, Display.grey1, F.X+F.W, F.Y, 1, F.H, Display.invert) + END InvertBorder; + + PROCEDURE InvalSubFrames (F: Frame; x, y, w, h: INTEGER); (* removes and suspends all subframes partly in (x, y, w, h) *) + VAR p, f: Display.Frame; msg: MenuViewers.ModifyMsg; + BEGIN + IF (w > 0) & (h > 0) THEN f := F.dsc; + IF f # NIL THEN p := f; f := p.next END; + WHILE f # NIL DO + IF (f.X < x + w) & (f.X + f.W > x) & (f.Y < y + h) & (f.Y + f.H > y) THEN p.next := f.next; + msg.id := MenuViewers.reduce; msg.dY := 0; msg.Y := f.Y; msg.H := 0; + f.handle(f, msg) + ELSE p := f + END; + f := p.next + END; + f := F.dsc; + IF (f # NIL) & (f.X < x + w) & (f.X + f.W > x) & (f.Y < y + h) & (f.Y + f.H > y) THEN F.dsc := F.dsc.next; + msg.id := MenuViewers.reduce; msg.dY := 0; msg.Y := f.Y; msg.H := 0; + f.handle(f, msg) + END + END + END InvalSubFrames; + + PROCEDURE ShiftSubFrames (F: Frame; oldY, newY, h: INTEGER); (* shift (F.X, oldY, F.W, h) to (F.X, newY, F.W, h) *) + VAR f: Display.Frame; msg: MenuViewers.ModifyMsg; + BEGIN + IF oldY > newY THEN InvalSubFrames(F, F.X, newY, F.W, oldY - newY) + ELSE InvalSubFrames(F, F.X, oldY + h, F.W, newY - oldY) + END; + f := F.dsc; + WHILE f # NIL DO + IF (f.Y < oldY + h) & (f.Y + f.H > oldY) THEN INC(f.Y, newY - oldY); + msg.id := MenuViewers.reduce; msg.dY := 0; msg.Y := f.Y; msg.H := f.H; + f.handle(f, msg) + END; + f := f.next + END + END ShiftSubFrames; + + PROCEDURE NotifySubFrames (F: Frame; VAR msg: Display.FrameMsg); + VAR p, f: Display.Frame; + BEGIN f := F.dsc; + IF msg IS NotifyMsg THEN msg(NotifyMsg).frame := F END; + WHILE f # NIL DO p := f; f := f.next; p.handle(p, msg) END + END NotifySubFrames; + + + (* Display Primitives *) + + PROCEDURE DrawCursor (x, y: INTEGER); + BEGIN Oberon.DrawCursor(Oberon.Mouse, Oberon.Arrow, x, y) + END DrawCursor; + + PROCEDURE TrackMouse (VAR x, y: INTEGER; VAR keys, keysum: SET); + BEGIN Input.Mouse(keys, x, y); keysum := keysum + keys; DrawCursor(x, y) + END TrackMouse; + + PROCEDURE EraseRect (F: Frame; x, y, w, h: INTEGER); + BEGIN Display.ReplConst(F.col, x, y, w, h, Display.replace); InvalSubFrames(F, x, y, w, h) + END EraseRect; + + PROCEDURE Erase (F: Frame; x, y, w, h: INTEGER); (*RemoveMarks optimization*) + BEGIN + IF h > 0 THEN Oberon.RemoveMarks(x, y, w, h); EraseRect(F, x, y, w, h) END + END Erase; + + PROCEDURE Shift (F: Frame; oldY, newY, h: INTEGER); (*RemoveMarks optimization*) + BEGIN + IF (oldY # newY) & (h > 0) THEN + Oberon.RemoveMarks(F.X + F.left, Min(oldY, newY), F.W - F.left, Max(oldY, newY) + h); + Display.CopyBlock(F.X + F.left, oldY, F.W - F.left, h, F.X + F.left, newY, Display.replace); + ShiftSubFrames(F, oldY, newY, h) + END + END Shift; + + PROCEDURE InvertCaret (F: Frame); + VAR loc: Location; bot: INTEGER; + BEGIN loc := F.carloc; bot := loc.y + loc.line.dsr - 6; + Display.CopyPatternC(F, Display.white, Display.hook, loc.x, bot, Display.invert) + END InvertCaret; + + PROCEDURE InvertRect (F: Frame; x, y, w, h: INTEGER); (*clips to right and bottom frame margin*) + BEGIN + IF x + w > F.X + F.W - F.right THEN w := F.X + F.W - F.right - x END; + IF y >= F.Y + F.bot THEN Display.ReplConst(Display.white, x, y, w, h, Display.invert) END + END InvertRect; + + PROCEDURE InvertSelection (F: Frame; beg, end: Location); + VAR t: TextLine; ex, rx, w, py: INTEGER; + BEGIN + rx := F.X + F.W - F.right; t := end.line; + IF t.eot OR (end.pos <= t.org + t.len) THEN ex := end.x ELSE ex := rx END; + IF beg.line = end.line THEN InvertRect(F, beg.x, beg.y, ex - beg.x, beg.line.h) + ELSE t := beg.line; py := beg.y; w := F.W - F.left - F.right; + InvertRect(F, beg.x, py, rx - beg.x, t.h); t := t.next; DEC(py, t.h); + WHILE t # end.line DO InvertRect(F, F.X + F.left, py, w, t.h); t := t.next; DEC(py, t.h) END; + InvertRect(F, F.X + F.left, py, ex - (F.X + F.left), t.h) + END + END InvertSelection; + + PROCEDURE CoordToPos (F: Frame; mh: INTEGER): LONGINT; + VAR h: INTEGER; + BEGIN h := F.H - 1; + IF h > 0 THEN RETURN ENTIER(F.text.len / h * (h - mh)) ELSE RETURN 0 END + END CoordToPos; + + PROCEDURE ShowBar (F: Frame; botH, topH: INTEGER); + BEGIN + IF (F.left > F.barW) & (F.barW > 0) THEN + Display.ReplConst(Display.white, F.X + F.barW - 1, F.Y + botH, 1, topH - botH, Display.replace) + END + END ShowBar; + + PROCEDURE Tick (F: Frame); + BEGIN + IF (0 <= F.markH) & (F.markH < F.H) & (F.left > F.barW) & (F.barW > 6) & (F.H > 2) THEN + Display.ReplConst(Display.white, F.X + 1, F.Y + F.markH, F.barW - 6, 2, Display.invert) + END + END Tick; + + PROCEDURE ShowTick (F: Frame); (* removes global marks as needed *) + VAR h, mh: INTEGER; len: LONGINT; + BEGIN + h := F.H - 2; len := F.text.len; + IF len > 0 THEN mh := SHORT(ENTIER(h - F.org / len * h)) ELSE mh := h END; + IF F.markH # mh THEN Oberon.RemoveMarks(F.X, F.Y, F.barW, F.H); + Tick(F); F.markH := mh; Tick(F) + END + END ShowTick; + + PROCEDURE Mark* (F: Frame; mark: INTEGER); + BEGIN + Erase(F, F.X, F.Y, F.barW - 1, F.H); F.markH := -1; + IF (mark < 0) & (F.H >= 16) THEN + Display.CopyPattern(Display.white, Display.downArrow, F.X, F.Y, Display.invert) + ELSIF mark > 0 THEN + ShowTick(F) + END + END Mark; + + + (** Parcs **) + + PROCEDURE ParcBefore* (T: Texts.Text; pos: LONGINT; VAR P: Parc; VAR beg: LONGINT); + VAR R: Texts.Reader; + BEGIN Texts.OpenReader(R, T, pos + 1); + REPEAT Texts.ReadPrevElem(R) UNTIL R.eot OR (R.elem IS Parc); + IF R.eot THEN P := defParc; beg := -1 ELSE P := R.elem(Parc); beg := Texts.Pos(R) END + END ParcBefore; + + PROCEDURE -InitDefParc() "ParcElems__init()"; + + (* Screen Metrics *) + + PROCEDURE Tab (dw: INTEGER; VAR dx: INTEGER); (*P set*) + (* dw = line width from left margin to caret (in pixels); dx = distance from caret to next tab stop (in pixels) *) + VAR i, n: INTEGER; w: LONGINT; + BEGIN + i := 0; n := P.nofTabs; w := LONG(dw) * Unit + MinTabWidth; + IF dw < 0 THEN dx := -dw + ELSE + WHILE (i < n) & (P.tab[i] < w) DO INC(i) END; + IF i < n THEN dx := SHORT((P.tab[i] - LONG(dw) * Unit) DIV Unit) + ELSE dx := StdTabWidth DIV Unit + END + END + END Tab; + + PROCEDURE MeasureSpecial (dw: INTEGER; VAR dx, x, y, w, h: INTEGER); + (* returns metrics of nextCh (nextCh <= " "); sends prepare message to elements; P, R, nextCh set *) + VAR e: Texts.Elem; pat: Display.Pattern; msg: DisplayMsg; + BEGIN + IF nextCh = " " THEN Display.GetChar(R.fnt.raster, nextCh, dx, x, y, w, h, pat); + x := 0; y := 0; w := dx; h := 0 + ELSIF nextCh = TAB THEN Tab(dw, dx); x := 0; y := 0; w := dx; h := 0 + ELSIF R.elem # NIL THEN e := R.elem; + msg.prepare := TRUE; msg.indent := LONG(dw) * Unit; + msg.fnt := R.fnt; msg.col := R.col; msg.pos := Texts.Pos(R)-1; + msg.Y0 := -SHORT(P.dsr DIV Unit); (*<<< 18-Nov-91*) + e.handle(e, msg); + w := SHORT(e.W DIV Unit); + dx := w; x := 0; y := msg.Y0; h := SHORT(e.H DIV Unit) (*<<< 18-Nov-91*) + ELSE Display.GetChar(R.fnt.raster, nextCh, dx, x, y, w, h, pat) + END + END MeasureSpecial; + + PROCEDURE GetSpecial (F: Frame; VAR n: INTEGER; cn, ddx, dw: INTEGER; VAR dx, x, y, w, h: INTEGER); + (* returns metrics of nextCh (nextCh <= " "); no prepare message to elements; extends blanks for block adjust *) + (* cn ... add 1 pixel to first cn blanks (block adjust); ddx ... add ddx pixels to every blank (block adjust) *) + (*P, R, nextCh set*) + VAR e: Texts.Elem; pat: Display.Pattern; + BEGIN + IF nextCh = " " THEN Display.GetChar(R.fnt.raster, nextCh, dx, x, y, w, h, pat); + x := 0; y := 0; INC(dx, ddx); INC(n); IF n <= cn THEN INC(dx) END; (*space correction for block adjustment*) + w := dx; h := 0 + ELSIF nextCh = TAB THEN Tab(dw, dx); x := 0; y := 0; w := dx; h := 0 + ELSIF R.elem # NIL THEN e := R.elem; + IF (e IS Parc) & (P.W = 9999 * Unit) THEN (* P gets this value in prepare message *) + w := Min(SHORT((P.width + P.left) DIV Unit), F.W - F.right - F.left); + e.W := LONG(w) * Unit + ELSE w := SHORT(e.W DIV Unit) + END; + dx := w; x := 0; y := -SHORT(P.dsr DIV Unit); h := SHORT(e.H DIV Unit) + ELSE Display.GetChar(R.fnt.raster, nextCh, dx, x, y, w, h, pat) + END + END GetSpecial; + + PROCEDURE NextLine (T: Texts.Text; VAR org: LONGINT); (*R, nextCh set; org = Texts.Pos(R)-1*) + VAR pat: Display.Pattern; pos, bk, d: LONGINT; width, tw, dx, x, y, w, h: INTEGER; + R1: Texts.Reader; peekCh: CHAR; indent: INTEGER; + BEGIN + tw := 0; dx := 0; w := 0; bk := -999; (* bk = pos of last seperator *) + pos := org; ParcBefore(T, pos, P, pbeg); width := SHORT(P.width DIV Unit); + indent := 0; + IF org > 0 THEN Texts.OpenReader(R1, T, org - 1); Texts.Read(R1, peekCh); + IF (peekCh = CR) OR (R1.elem # NIL) & (R1.elem IS Parc) THEN indent := SHORT(P.first DIV Unit) END; + END; + INC(tw, indent); + LOOP INC(pos); (*inv pos = Texts.Pos(R), ~R.eof => nextCh = text[pos-1]*) + IF R.eot OR (nextCh = CR) THEN EXIT END; + INC(tw, dx); + IF nextCh <= " " THEN MeasureSpecial(tw, dx, x, y, w, h) + ELSE Display.GetChar(R.fnt.raster, nextCh, dx, x, y, w, h, pat) + END; + IF tw + x + w > width THEN d := pos - bk; + IF (d < AdjustSpan) & (nextCh > " ") THEN pos := bk + ELSIF ((nextCh > " ") OR (nextCh = Texts.ElemChar)) & (pos > org + 1) THEN DEC(pos) + END; + Texts.OpenReader(R, T, pos); Texts.Read(R, nextCh); + EXIT + END; + IF (nextCh <= " ") & (nextCh # Texts.ElemChar) THEN bk := pos END; + Texts.Read(R, nextCh) + END; + org := pos + END NextLine; + + PROCEDURE BegOfLine (T: Texts.Text; VAR pos: LONGINT; adjust: BOOLEAN); + (* returns origin of line containing pos *) + VAR p, org: LONGINT; + BEGIN + IF pos <= 0 THEN pos := 0 + ELSE + IF pos <= T.len THEN org := pos ELSE org := T.len END; + LOOP (*search backwards for CR*) + IF org = 0 THEN EXIT END; + Texts.OpenReader(R, T, org - 1); Texts.Read(R, nextCh); + IF nextCh = CR THEN EXIT END; + DEC(org) + END; + IF adjust THEN (*search forward for actual line origin*) + Texts.OpenReader(R, T, org); Texts.Read(R, nextCh); p := org; + REPEAT org := p; NextLine(T, p) UNTIL (p > pos) OR R.eot + END; + pos := org + END + END BegOfLine; + + PROCEDURE AdjustMetrics (F: Frame; t: TextLine; VAR pw, tw, ddx, cn: INTEGER); (*t.org set*) + (* pw ... x-coord of first char in line (in pixels); tw ... width of text line; ddx, cn ... see GetSpecial *) + BEGIN + P := t.P; pbeg := t.pbeg; + pw := F.left; tw := t.w; ddx := 0; cn := 0; + IF t.pbeg # t.org THEN + INC(pw, SHORT((P.left + t.indent) DIV Unit)); + IF leftAdj IN P.opts THEN + IF (rightAdj IN P.opts) & (t.nob > 0) THEN + tw := SHORT(P.width DIV Unit); ddx := (tw - t.w0) DIV t.nob; cn := (tw - t.w0) MOD t.nob + END + ELSIF rightAdj IN P.opts THEN INC(pw, SHORT(P.width DIV Unit) - t.w0) + ELSE (*center*) INC(pw, (SHORT(P.width DIV Unit) - t.w0) DIV 2) + END; + DEC(tw, SHORT(t.indent DIV Unit)); + END + END AdjustMetrics; + + + (* Screen Placement *) + + PROCEDURE DrawSpecial (F: Frame; px, py, x, y: INTEGER); (*R, nextCh set*) + VAR e: Texts.Elem; pat: Display.Pattern; dx, w, h: INTEGER; msg: DisplayMsg; + BEGIN + IF (nextCh = TAB) OR (nextCh = CR) THEN (*skip*) + ELSIF R.elem # NIL THEN e := R.elem; + IF ~(e IS Parc) OR F.showsParcs THEN + msg.prepare := FALSE; msg.fnt := R.fnt; msg.col := R.col; msg.pos := Texts.Pos(R) - 1; + msg.frame := F; msg.X0 := px + x; msg.Y0 := py + y; msg.elemFrame := NIL; + e.handle(e, msg); + IF msg.elemFrame # NIL THEN msg.elemFrame.next := F.dsc; F.dsc := msg.elemFrame END; + ELSIF pageBreak IN e(Parc).opts THEN (*(e IS Parc) & ~F.showsParcs*) + Display.ReplPattern(Display.white, Display.grey1, px + x, py, SHORT(e.W DIV Unit), 1, Display.replace) + END + ELSE Display.GetChar(R.fnt.raster, nextCh, dx, x, y, w, h, pat); + Display.CopyPattern(R.col, pat, px + x, py + y, Display.invert) + END; + END DrawSpecial; + + PROCEDURE ShowLine (F: Frame; t: TextLine; left, right, py: INTEGER); + VAR pat: Display.Pattern; i: LONGINT; n, cn, lm, px, pw, tw, ddx, dx, x, y, w, h: INTEGER; + BEGIN + (* lm ... left parc margin in screen coord; pw ... x of first char in frame coord *) + Texts.OpenReader(R, F.text, t.org); AdjustMetrics(F, t, pw, tw, ddx, cn); + lm := F.X + F.left + SHORT(P.left DIV Unit); px := F.X + pw; INC(py, t.dsr); i := 0; n := 0; + WHILE i < t.len DO Texts.Read(R, nextCh); + IF nextCh <= " " THEN GetSpecial(F, n, cn, ddx, px - lm, dx, x, y, w, h) + ELSE Display.GetChar(R.fnt.raster, nextCh, dx, x, y, w, h, pat) + END; + INC(y, R.fnt.height * R.voff DIV 64); + IF px + x + w <= right THEN + IF px + x >= left THEN + IF nextCh <= " " THEN DrawSpecial(F, px, py, x, y) + ELSE Display.CopyPattern(R.col, pat, px + x, py + y, Display.invert) + END + END; + INC(px, dx); INC(i) + ELSE i := t.len + END + END + END ShowLine; + + PROCEDURE ShowLines (F: Frame; botH, topH: INTEGER; erase: BOOLEAN); + VAR t: TextLine; ph: INTEGER; + BEGIN + t := F.trailer.next; ph := F.H - F.top; + WHILE (t # F.trailer) & (ph - t.h >= topH) DO DEC(ph, t.h); t := t.next END; + WHILE (t # F.trailer) & (ph - t.h >= botH) DO DEC(ph, t.h); + IF erase THEN Erase(F, F.X + F.left, F.Y + ph, F.W - F.right - F.left, t.h) END; + ShowLine(F, t, F.X + F.left, F.X + F.W - F.right, F.Y + ph); t := t.next + END + END ShowLines; + + + (* Screen Casting *) + + PROCEDURE MeasureLine (F: Frame; maxW: INTEGER; t: TextLine); (* R, nextCh set *) + VAR pat: Display.Pattern; len, bklen, d: LONGINT; eol: BOOLEAN; + nob, bknob, width, minY, bkminY, maxY, bkmaxY, tw, bktw, lsp, dsr, dx, x, y, w, h: INTEGER; + R1: Texts.Reader; peekCh: CHAR; + (* bk* ... backup for last blank *) + BEGIN + len := 0; nob := 0; bklen := -999; tw := 0; dx := 0; minY := 0; maxY := 0; + ParcBefore(F.text, t.org, P, pbeg); + lsp := SHORT(P.lsp DIV Unit); dsr := SHORT(P.dsr DIV Unit); width := SHORT(P.width DIV Unit); + t.indent := 0; + IF t.org > 0 THEN Texts.OpenReader(R1, F.text, t.org - 1); Texts.Read(R1, peekCh); + IF (peekCh = CR) OR (R1.elem # NIL) & (R1.elem IS Parc) THEN t.indent := P.first END; + END; + INC(tw, SHORT(t.indent DIV Unit)); + LOOP + IF R.eot OR (nextCh = CR) THEN nob := 0; eol := ~R.eot; EXIT END; + IF nextCh <= " " THEN MeasureSpecial(tw, dx, x, y, w, h) + ELSE Display.GetChar(R.fnt.raster, nextCh, dx, x, y, w, h, pat) + END; + IF tw + x + w > width THEN d := len - bklen; + IF (d < AdjustSpan) & (nextCh > " ") THEN eol := TRUE; + Texts.OpenReader(R, F.text, Texts.Pos(R) - d); + nob := bknob; len := bklen; tw := bktw; minY := bkminY; maxY := bkmaxY + ELSIF len = 0 THEN (* force at least one character on each line *) + INC(len); INC(y, R.fnt.height * R.voff DIV 64); minY := Min(minY, y); maxY := Max(maxY, y + h); + Texts.Read(R, nextCh); eol := FALSE; tw := maxW + ELSE eol := (nextCh <= " ") & (nextCh # Texts.ElemChar) + END; + EXIT + END; + IF (nextCh <= " ") & (nextCh # Texts.ElemChar) THEN + bknob := nob; bklen := len; bktw := tw; bkminY := minY; bkmaxY := maxY; + IF nextCh = " " THEN INC(nob) END + END; + INC(len); INC(tw, dx); INC(y, R.fnt.height * R.voff DIV 64); + IF y < minY THEN minY := y END; + IF y + h > maxY THEN maxY := y + h END; + Texts.Read(R, nextCh) + END; + IF ~F.showsParcs & (pbeg = t.org) THEN dsr := 0; t.h := SHORT(P.lead DIV Unit) + 1 + ELSIF gridAdj IN P.opts THEN + WHILE dsr < -minY DO INC(dsr, lsp) END; + t.h := Max(lsp, dsr + maxY); INC(t.h, (-t.h) MOD lsp) + ELSE dsr := Max(dsr, -minY); t.h := Max(lsp, dsr + maxY) + END; + t.len := len; t.w0 := tw; t.w := Min(tw, maxW); t.dsr := dsr; t.nob := nob; t.eot := R.eot; t.P := P; t.pbeg := pbeg; + IF eol THEN Texts.Read(R, nextCh); t.span := len + 1 ELSE t.span := len END + END MeasureLine; + + PROCEDURE MeasureLines (F: Frame; org: LONGINT; VAR trailer: TextLine); + VAR s, t: TextLine; ph: INTEGER; + BEGIN + NEW(trailer); s := trailer; + Texts.OpenReader(R, F.text, org); Texts.Read(R, nextCh); ph := F.H - F.top; + LOOP NEW(t); t.org := org; MeasureLine(F, F.W - F.left - F.right, t); + IF ph - t.h < F.bot THEN EXIT END; + s.next := t; s := t; INC(org, s.span); DEC(ph, s.h); + IF R.eot THEN EXIT END + END; + s.next := trailer; trailer.eot := TRUE; trailer.org := org; (* start of first invisible line *) trailer.len := 0; trailer.w := 0; + trailer.h := SHORT(defParc.lsp DIV Unit); trailer.P := P (* P set by MeasureLine *) ; trailer.pbeg := pbeg + END MeasureLines; + + + (** Locators **) + + PROCEDURE LocateLineTop (F: Frame; trailer: TextLine; org: LONGINT; VAR loc: Location); + VAR t: TextLine; ph: INTEGER; + BEGIN + ph := F.H - F.top; t := trailer.next; + WHILE (t # trailer) & (t.org # org) DO DEC(ph, t.h); t := t.next END; + loc.org := org; loc.line := t; loc.y := F.Y + ph + END LocateLineTop; + + PROCEDURE Width (F: Frame; t: TextLine; pos: LONGINT; VAR pw, dx, dy: INTEGER); + VAR pat: Display.Pattern; i: LONGINT; n, mw, lm, tw, ddx, cn, x, y, w, h: INTEGER; + BEGIN + AdjustMetrics(F, t, pw, tw, ddx, cn); dy := 0; lm := F.left + SHORT(P.left DIV Unit); + IF t # F.trailer THEN Texts.OpenReader(R, F.text, t.org); Texts.Read(R, nextCh); + i := 0; n := 0; DEC(pos, t.org); dx := 0; mw := F.W - F.right; + WHILE ~R.eot & (i < t.len) & (i <= pos) & (pw + dx <= mw) DO + (* i ... pos of nextCh; dx ... width of char before nextCh; pw ... line width up to pos (or up to right margin) *) + INC(i); INC(pw, dx); + IF nextCh <= " " THEN GetSpecial(F, n, cn, ddx, pw - lm, dx, x, y, w, h) + ELSE Display.GetChar(R.fnt.raster, nextCh, dx, x, y, w, h, pat) + END; + dy := R.fnt.height * R.voff DIV 64; + Texts.Read(R, nextCh) + END; + IF (i <= pos) & (pw + dx <= mw) THEN INC(i); INC(pw, dx) END + ELSE dx := 4 + END + END Width; + + + PROCEDURE LocatePos* (F: Frame; pos: LONGINT; VAR loc: Location); (* loc.dx = dx of char at pos *) + VAR t: TextLine; pw, dx, dy: INTEGER; + BEGIN + IF pos < F.org THEN pos := F.org; t := F.trailer.next + ELSIF pos < F.trailer.org THEN t := F.trailer; + WHILE (t.next # F.trailer) & (t.next.org <= pos) DO t := t.next END + ELSE pos := F.trailer.org; t := F.trailer.next; + WHILE ~t.eot DO t := t.next END + END; + Width(F, t, pos, pw, dx, dy); LocateLineTop(F, F.trailer, t.org, loc); DEC(loc.y, loc.line.h); + loc.org := t.org; loc.pos := pos; loc.x := F.X + pw; loc.dx := dx; loc.dy := dy; loc.line := t + END LocatePos; + + PROCEDURE LocateLine* (F: Frame; y: INTEGER; VAR loc: Location); + (* loc.x = line start; loc.y = line bottom; loc.dx = line width *) + VAR t: TextLine; h, ph, pw, tw, ddx, cn: INTEGER; + BEGIN + t := F.trailer.next; h := y - F.Y; ph := F.H - F.top - t.h; + WHILE ~t.eot & (ph - t.next.h >= F.bot) & (ph > h) DO t := t.next; DEC(ph, t.h) END; + AdjustMetrics(F, t, pw, tw, ddx, cn); + IF pw >= F.W - F.right THEN pw := F.W - F.right - 4 END; + loc.org := t.org; loc.pos := loc.org; loc.x := F.X + pw; loc.y := F.Y + ph; loc.dx := tw; loc.dy := 0; loc.line := t + END LocateLine; + + PROCEDURE LocateChar* (F: Frame; x, y: INTEGER; VAR loc: Location); + VAR t: TextLine; pat: Display.Pattern; i: LONGINT; n, w, lm, pw, tw, ddx, cn, dx, xc, yc, wc, hc: INTEGER; + BEGIN + LocateLine(F, y, loc); t := loc.line; w := x - F.X; AdjustMetrics(F, t, pw, tw, ddx, cn); + lm := F.left + SHORT(P.left DIV Unit); + IF (t # F.trailer) & (w > pw) THEN Texts.OpenReader(R, F.text, t.org); + i := 0; n := 0; dx := 0; nextCh := 0X; + WHILE (i < t.len) & (pw + dx < w) DO + (* i = pos after nextCh; dx = width of nextCh; pw = line width without nextCh *) + Texts.Read(R, nextCh); INC(i); INC(pw, dx); + IF nextCh <= " " THEN GetSpecial(F, n, cn, ddx, pw - lm, dx, xc, yc, wc, hc) + ELSE Display.GetChar(R.fnt.raster, nextCh, dx, xc, yc, wc, hc, pat) + END + END; + IF pw + dx < w THEN INC(i); INC(pw, dx); R.elem := NIL END; + INC(loc.pos, i - 1); loc.x := F.X + pw; + IF i < t.len THEN loc.dx := dx; loc.dy := R.fnt.height * R.voff DIV 64 ELSE loc.dx := 4 END + ELSE loc.dx := 4; R.elem := NIL + END + END LocateChar; + + PROCEDURE LocateWord* (F: Frame; x, y: INTEGER; VAR loc: Location); + VAR t: TextLine; pos, i: LONGINT; px, rx: INTEGER; pat: Display.Pattern; dx, xc, yc, wc, hc: INTEGER; + BEGIN + LocateChar(F, x, y, loc); pos := loc.pos + 1; + REPEAT DEC(pos); Texts.OpenReader(R, F.text, pos); Texts.Read(R, nextCh) + UNTIL (pos < loc.org) OR (nextCh > " "); + INC(pos); + REPEAT DEC(pos); Texts.OpenReader(R, F.text, pos); Texts.Read(R, nextCh) + UNTIL (pos < loc.org) OR (nextCh <= " "); + LocatePos(F, pos + 1, loc); t := loc.line; i := loc.pos - loc.org; + IF i < t.len THEN px := loc.x; rx := F.X + F.W - F.right; + Texts.OpenReader(R, F.text, loc.pos); dx := 0; wc := 0; nextCh := "x"; + WHILE (i < t.len) & (nextCh > " ") & (px + dx < rx) DO + Texts.Read(R, nextCh); INC(i); INC(px, dx); + Display.GetChar(R.fnt.raster, nextCh, dx, xc, yc, wc, hc, pat) + END; + IF (nextCh > " ") & (px + dx < rx) THEN INC(i); INC(px, dx) END; + loc.dx := px - loc.x + ELSE loc.dx := 0 + END + END LocateWord; + + PROCEDURE Pos* (F: Frame; x, y: INTEGER): LONGINT; + VAR loc: Location; + BEGIN LocateChar(F, x, y, loc); RETURN loc.pos + END Pos; + + PROCEDURE ThisSubFrame (F: Frame; x, y: INTEGER): Display.Frame; + VAR f: Display.Frame; + BEGIN f := F.dsc; + WHILE (f # NIL) & ((x < f.X) OR (x >= f.X + f.W) OR (y < f.Y) OR (y >= f.Y + f.H)) DO f := f.next END; + RETURN f + END ThisSubFrame; + + + (** Caret & Selection **) + + PROCEDURE PassSubFocus (F: Frame; f: Display.Frame); + (* pass focus from F.focus to f (f is also an element frame in F) *) + VAR loc: Location; f1: Display.Frame; ctrl: Oberon.ControlMsg; focus: FocusMsg; + BEGIN + IF F.focus # NIL THEN f1 := F.focus; + ctrl.id := Oberon.defocus; f1.handle(f1, ctrl); + LocateChar(F, f1.X + 1, f1.Y + 1, loc); + InvertBorder(f1); F.focus := NIL; + focus.focus := FALSE; focus.elemFrame := f1; focus.frame := F; R.elem.handle(R.elem, focus) + END; + IF f # NIL THEN + LocateChar(F, f.X + 1, f.Y + 1, loc); (* side effect: set R to element *) + focus.focus := TRUE; focus.elemFrame := f; focus.frame := F; R.elem.handle(R.elem, focus); + InvertBorder(f) + END; + F.focus := f + END PassSubFocus; + + PROCEDURE RemoveSelection* (F: Frame); + BEGIN + IF F.hasSel THEN InvertSelection(F, F.selbeg, F.selend); F.hasSel := FALSE END + END RemoveSelection; + + PROCEDURE SetSelection* (F: Frame; beg, end: LONGINT); (** forces range to visible bounds **) + VAR loc: Location; + BEGIN + IF end > F.text.len THEN end := F.text.len END; + IF end > beg THEN + IF F.hasSel & (F.selbeg.pos = beg) THEN + IF (F.selend.pos < end) & (F.selend.pos < F.trailer.org) THEN + LocatePos(F, F.selend.pos, loc); LocatePos(F, end, F.selend); InvertSelection(F, loc, F.selend) + ELSIF end < F.selend.pos THEN + LocatePos(F, end, loc); InvertSelection(F, loc, F.selend); LocatePos(F, end, F.selend) + END + ELSE RemoveSelection(F); PassSubFocus(F, NIL); + LocatePos(F, beg, F.selbeg); LocatePos(F, end, F.selend); InvertSelection(F, F.selbeg, F.selend) + END; + F.hasSel := TRUE; F.time := Oberon.Time() + END + END SetSelection; + + + PROCEDURE RemoveCaret* (F: Frame); + VAR msg: Oberon.ControlMsg; + BEGIN + IF F.focus # NIL THEN msg.id := Oberon.defocus; F.focus.handle(F.focus, msg) END; + IF F.hasCar THEN InvertCaret(F); F.hasCar := FALSE END + END RemoveCaret; + + PROCEDURE SetCaret* (F: Frame; pos: LONGINT); (** only done if within visible bounds **) + BEGIN + IF ~F.hasCar OR (F.carloc.pos # pos) THEN RemoveCaret(F); PassSubFocus(F, NIL); + LocatePos(F, pos, F.carloc); + IF F.carloc.x <= F.X + F.W - F.right THEN InvertCaret(F); F.hasCar := TRUE END + END + END SetCaret; + + + + (** Display Range **) + + PROCEDURE Complete (F: Frame; trailer: TextLine; s: TextLine; org: LONGINT; ph: INTEGER); + VAR u: TextLine; + BEGIN + IF ph > F.bot THEN (*try to add new lines to the bottom*) + Texts.OpenReader(R, F.text, org); Texts.Read(R, nextCh); + LOOP + IF R.eot THEN EXIT END; + NEW(u); u.org := org; MeasureLine(F, F.W - F.left - F.right, u); + IF ph - u.h < F.bot THEN EXIT END; + s.next := u; s := s.next; DEC(ph, s.h); INC(org, s.span) + END + END; + s.next := trailer; trailer.eot := TRUE; trailer.org := org; trailer.len := 0; trailer.w := 0; + trailer.h := SHORT(defParc.lsp DIV Unit); trailer.P := P; trailer.pbeg := pbeg + END Complete; + + PROCEDURE ShowFrom (F: Frame; pos: LONGINT); (* removes global marks as needed and neutralizes F *) + VAR new, s: TextLine; beg, end: Location; org: LONGINT; ph, y0, dy: INTEGER; + BEGIN + F.handle(F, neutralize); + IF (F.trailer # NIL) & (F.org < pos) & (pos < F.trailer.org) THEN (* shift up and extend to the bottom *) + LocateLineTop(F, F.trailer, pos, beg); LocateLineTop(F, F.trailer, F.trailer.org, end); + dy := (F.Y + F.H - F.top) - beg.y; Shift(F, end.y, end.y + dy, beg.y - end.y); + Erase(F, F.X + F.left, end.y, F.W - F.left, dy); + s := F.trailer.next; WHILE s.org # pos DO s := s.next END; + F.trailer.next := s; org := s.org + s.span; ph := F.H - F.top - s.h; + WHILE s.next # F.trailer DO s := s.next; org := org + s.span; ph := ph - s.h END; + Complete(F, F.trailer, s, org, ph); F.org := pos; ShowLines(F, F.bot, end.y + dy - F.Y, FALSE) + ELSIF (F.trailer = NIL) OR (pos # F.org) THEN + MeasureLines(F, pos, new); + IF (F.trailer # NIL) & (pos < F.org) & (F.org <= new.org) THEN (* shift down and extend to the top *) + LocateLineTop(F, new, F.org, beg); LocateLineTop(F, new, new.org, end); + y0 := F.Y + F.H - F.top; Shift(F, y0 - (beg.y - end.y), end.y, beg.y - end.y); + Erase(F, F.X + F.left, beg.y, F.W - F.left, y0 - beg.y); + Erase(F, F.X + F.left, F.Y + F.bot, F.W - F.left, end.y - (F.Y + F.bot)); + F.org := pos; F.trailer := new; ShowLines(F, beg.y - F.Y, F.H - F.top, FALSE) + ELSE (* full redisplay *) + IF F.trailer = NIL THEN Erase(F, F.X, F.Y, F.W, F.H); ShowBar(F, 0, F.H); F.markH := -1 + ELSE Erase(F, F.X + F.left, F.Y + F.bot, F.W - F.left, F.H - F.bot - F.top) + END; + F.org := pos; F.trailer := new; ShowLines(F, F.bot, F.H - F.top, FALSE) + END + END; + ShowTick(F) + END ShowFrom; + + PROCEDURE Show* (F: Frame; pos: LONGINT); (** removes global marks as needed and neutralizes F **) + BEGIN BegOfLine(F.text, pos, TRUE); ShowFrom(F, pos) + END Show; + + + PROCEDURE Resize (F: Frame; x, y, w, h: INTEGER); + VAR oldY, oldH, dh, ph: INTEGER; t: TextLine; + BEGIN + IF (w = 0) OR (h = 0) THEN InvalSubFrames(F, F.X, F.Y, F.W, F.H); + F.X := x; F.Y := y; F.W := w; F.H := h; F.trailer := NIL + ELSIF (F.trailer # NIL) & (x = F.X) & (w = F.W) THEN + oldY := F.Y; oldH := F.H; Tick(F); F.markH := -1; F.Y := y; F.H := h; + IF h > oldH THEN dh := h - oldH; (* extend *) + IF y + h # oldY + oldH THEN + Display.CopyBlock(x, oldY, w, oldH, x, y + dh, Display.replace); + ShiftSubFrames(F, oldY, y + dh, oldH) + END; + EraseRect(F, x, y, w, dh); ShowBar(F, 0, dh); + t := F.trailer; ph := F.H - F.top; + WHILE t.next # F.trailer DO t := t.next; ph := ph - t.h END; + Complete(F, F.trailer, t, F.trailer.org, ph); ShowLines(F, F.bot, ph, FALSE) + ELSE dh := oldH - h; (* reduce *) + IF y + h # oldY + oldH THEN + Display.CopyBlock(x, oldY + dh, w, h, x, y, Display.replace); + ShiftSubFrames(F, oldY + dh, y, h) + END; + t := F.trailer; ph := F.H - F.top; + WHILE (t.next # F.trailer) & (ph - t.next.h >= F.bot) DO t := t.next; DEC(ph, t.h) END; + IF t = F.trailer THEN t.org := F.org; t.span := 0 END; + Complete(F, F.trailer, t, t.org + t.span, ph); + EraseRect(F, x + F.left, y, w - F.left, ph); + InvalSubFrames(F, x, oldY, w, y - oldY); InvalSubFrames(F, x, y + h, w, dh - (y - oldY)) + END; + ShowTick(F) + ELSE F.X := x; F.Y := y; F.W := w; F.H := h; F.trailer := NIL; Show(F, F.org) + END + END Resize; + + + (** Contents Update **) + + PROCEDURE Update (F: Frame; VAR msg: UpdateMsg); (** removes global marks as needed **) + VAR t: TextLine; org, d, Fbeg, Fend: LONGINT; + foc: Display.Frame; beg, end: LONGINT; ch: CHAR; r: Texts.Reader; loc: Location; + + PROCEDURE Begin (VAR beg: LONGINT; VAR org0: LONGINT; VAR q: TextLine); + (* org0 = origin of first affected line; beg = pos of first modified character; q = first affected line (if line origin has not moved).*) + (* q = NIL => beg = org0; q # NIL => first (beg-org0) characters of q need not be redrawn *) + VAR trailer, t: TextLine; + BEGIN + trailer := F.trailer; t := trailer; + WHILE (t.next # trailer) & (beg >= t.next.org + t.next.span) & ~t.next.eot DO t := t.next END; + q := t.next; + IF (t # trailer) & (q # trailer) & (beg <= q.org + q.span) THEN + Texts.OpenReader(R, F.text, t.org); Texts.Read(R, nextCh); org0 := t.org; NextLine(F.text, org0) + ELSE org0 := beg; BegOfLine(F.text, org0, TRUE) + END; + IF org0 # q.org THEN + IF t = trailer THEN org0 := q.org ELSE org0 := t.org END; + beg := org0; q := NIL + END + END Begin; + + PROCEDURE Adjust (end, delta: LONGINT); + (* H1 = top of synchronization line in old frame *) + (* h0 = top of line that was modified *) + (* h1 = top of block in new frame that could be reused *) + (* h2 = bottom of last line in new frame *) + (* h1 - h2 = height of block that could be reused *) + VAR new, old, s, t, u, p, q: TextLine; bot: Location; + org, org0, beg: LONGINT; ph, h0, h1, H1, h2, lm, dx, dy: INTEGER; + BEGIN + q := NIL; LocateLineTop(F, F.trailer, F.trailer.org, bot); + IF msg.beg < F.org THEN org0 := F.org; beg := org0 ELSE beg := msg.beg; Begin(beg, org0, q) END; + NEW(new); s := new; old := F.trailer; t := old; org := F.org; ph := F.H - F.top; + WHILE (t.next # old) & (t.next.org # org0) DO t := t.next; (*transfer unchanged prefix*) + s.next := t; s := t; DEC(ph, s.h); INC(org, s.span) + END; + h0 := ph; H1 := h0; t := t.next; p := s; + Texts.OpenReader(R, F.text, org); Texts.Read(R, nextCh); (*rebuild at least one line descriptor*) + LOOP NEW(u); u.org := org; MeasureLine(F, F.W - F.left - F.right, u); + IF ph - u.h < F.bot THEN h1 := ph; h2 := h1; EXIT END; + s.next := u; s := s.next; DEC(ph, s.h); INC(org, s.span); + IF R.eot THEN h1 := ph; h2 := h1; EXIT END; + IF org > end THEN + WHILE (t # old) & (org > t.org + delta) DO DEC(H1, t.h); t := t.next END; + IF (org = t.org + delta) & (P = t.P) THEN h1 := ph; (*resynchronized*) + WHILE (t # old) & (ph - t.h >= F.bot) DO (*transfer unchanged suffix*) + s.next := t; s := t; s.org := org; ParcBefore(F.text, s.org, s.P, s.pbeg); + DEC(ph, s.h); INC(org, s.span); t := t.next + END; + h2 := ph; EXIT + END + END + END; + Shift(F, F.Y + H1 - (h1 - h2), F.Y + h2, h1 - h2); + Complete(F, new, s, org, ph); F.trailer := new; t := p.next; + IF (q # NIL) & (t # F.trailer) & (q.h = t.h) & (q.dsr = t.dsr) & (q.org = t.org) & (q.P = t.P) & (end <= t.org + t.span) THEN + P := t.P; pbeg := t.pbeg; + IF (P.opts * AdjMask = {leftAdj}) OR (P.opts * AdjMask = AdjMask) & (q.nob = 0) & (t.nob = 0) THEN + Width(F, t, beg, lm, dx, dy); (*preserve prefix of first affected line*) + DEC(h0, t.h); Erase(F, F.X + lm, F.Y + h0, F.W - lm, t.h); + ShowLine(F, t, F.X + lm, F.X + F.W - F.right, F.Y + h0) + END + END; + ShowLines(F, h1, h0, TRUE); + Erase(F, F.X + F.left, bot.y, F.W - F.left, h2 - (bot.y - F.Y)); ShowLines(F, F.bot, h2, FALSE) + END Adjust; + + BEGIN + foc := F.focus; beg := msg.beg; end := msg.end; + F.handle(F, neutralize); MarkMenu(F); Fbeg := F.org; Fend := F.trailer.org; + IF (msg.id = Texts.insert) & (msg.beg < F.org) THEN t := F.trailer; d := msg.end - msg.beg; INC(F.org, d); + REPEAT INC(t.org, d); t := t.next UNTIL t = F.trailer + ELSIF msg.id = Texts.delete THEN + IF msg.end <= F.org THEN t := F.trailer; d := msg.end - msg.beg; DEC(F.org, d); + REPEAT DEC(t.org, d); t := t.next UNTIL t = F.trailer + ELSIF msg.beg < F.org THEN F.org := msg.beg + END + END; + org := F.org; + IF msg.beg <= Fbeg + AdjustSpan THEN BegOfLine(F.text, org, TRUE) END; + ParcBefore(F.text, org, P, d); + IF (org # F.org) OR (P # F.trailer.next.P) THEN + F.trailer := NIL; Show(F, F.org) + ELSIF (msg.end > Fbeg) & (msg.beg < Fend + AdjustSpan) THEN + IF msg.id = Texts.replace THEN Adjust(msg.end, 0); + (* refocus element if necessary *) + IF (foc # NIL) & (end-beg = 1) THEN + Texts.OpenReader(r, F.text, beg); Texts.Read(r, ch); + IF r.elem # NIL THEN + LocatePos(F, beg, loc); foc := ThisSubFrame(F, loc.x, loc.y); PassSubFocus(F, foc); + END + END + ELSIF msg.id = Texts.insert THEN Adjust(msg.end, msg.end - msg.beg) + ELSIF msg.id = Texts.delete THEN Adjust(msg.beg, msg.beg - msg.end) + END + END; + ShowTick(F) + END Update; + + + (** User Interface **) + + PROCEDURE Back (F: Frame; dY: INTEGER; (*inout*) VAR org: LONGINT); (* mh 10.10.92 *) + (* computes new org such that old org is (at most) dY pixels below new org *) + VAR H: INTEGER; oldOrg: LONGINT; + + PROCEDURE TotalHeight (org1, org2: LONGINT): INTEGER; + (* measures total height of text-lines starting at org1 and ending at the line before the line containing org2 *) + VAR h: INTEGER; line: TextLine; + BEGIN + Texts.OpenReader(R, F.text, org1); Texts.Read(R, nextCh); NEW(line); h := 0; + LOOP line.org := org1; + MeasureLine(F, F.W - F.left - F.right, line); INC(org1, line.span); + IF Texts.Pos(R)-1 > org2 THEN EXIT END; + INC(h, line.h); + IF R.eot THEN EXIT END; + END; + RETURN h + END TotalHeight; + + PROCEDURE Forward (h: INTEGER); + (* increase org by n text-lines such that the sum of the n line-heights > h *) + VAR line: TextLine; + BEGIN + Texts.OpenReader(R, F.text, org); Texts.Read(R, nextCh); NEW(line); + WHILE h > 0 DO line.org := org; + MeasureLine(F, F.W - F.left - F.right, line); INC(org, line.span); DEC(h, line.h); + END; + org := Texts.Pos(R)-1; + END Forward; + + BEGIN H := 0; + LOOP oldOrg := org; + IF org = 0 THEN EXIT END; + DEC(org, 800); BegOfLine(F.text, org, FALSE); + INC(H, TotalHeight(org, oldOrg)); + IF H > dY THEN EXIT END; + END; + Forward(H - dY); + END Back; + + PROCEDURE TrackLine* (F: Frame; VAR x, y: INTEGER; VAR org: LONGINT; VAR keysum: SET); + VAR keys: SET; new, old: Location; + BEGIN + LocateLine(F, y, old); InvertRect(F, old.x, old.y, old.dx + 4, 2); keysum := {}; + REPEAT TrackMouse(x, y, keys, keysum); LocateLine(F, y, new); + IF new.org # old.org THEN + InvertRect(F, new.x, new.y, new.dx + 4, 2); InvertRect(F, old.x, old.y, old.dx + 4, 2); old := new + END + UNTIL keys = {}; + InvertRect(F, new.x, new.y, new.dx + 4, 2); org := new.org + END TrackLine; + + PROCEDURE TrackWord* (F: Frame; VAR x, y: INTEGER; VAR pos: LONGINT; VAR keysum: SET); + VAR keys: SET; new, old: Location; + BEGIN + LocateWord(F, x, y, old); InvertRect(F, old.x, old.y, old.dx, 2); keysum := {}; + REPEAT TrackMouse(x, y, keys, keysum); LocateWord(F, x, y, new); + IF new.pos # old.pos THEN + InvertRect(F, new.x, new.y, new.dx, 2); InvertRect(F, old.x, old.y, old.dx, 2); old := new + END + UNTIL keys = {}; + InvertRect(F, new.x, new.y, new.dx, 2); pos := new.pos + END TrackWord; + + PROCEDURE TrackCaret* (F: Frame; VAR x, y: INTEGER; VAR keysum: SET); + VAR keys: SET; + BEGIN keysum := {}; + REPEAT TrackMouse(x, y, keys, keysum); SetCaret(F, Pos(F, x, y)) UNTIL keys = {} + END TrackCaret; + + PROCEDURE TrackSelection* (F: Frame; VAR x, y: INTEGER; VAR keysum: SET); + VAR keys: SET; pos: LONGINT; V: Viewers.Viewer; f: Frame; + BEGIN + V := Viewers.This(F.X, F.Y); V := V.next(Viewers.Viewer); + IF (V.dsc # NIL) & (V.dsc.next # NIL) & (V.dsc.next IS Frame) THEN f := V.dsc.next(Frame); + IF f.hasSel & (f.text = F.text) THEN + IF (f.selbeg.pos < f.trailer.org) & (f.org < f.selend.pos) & (f.selbeg.pos <= Pos(F, x, y)) THEN + SetSelection(F, f.selbeg.pos, Pos(F, x, y) + 1) + ELSE RemoveSelection(f); f := NIL + END + ELSE f := NIL + END + ELSE f := NIL + END; + IF f = NIL THEN + IF F.hasSel & (F.selbeg.pos + 1 = F.selend.pos) & (Pos(F, x, y) = F.selbeg.pos) THEN + SetSelection(F, F.selbeg.org, Pos(F, x, y) + 1) + ELSE SetSelection(F, Pos(F, x, y), Pos(F, x, y) + 1) + END + END; + keysum := {}; + REPEAT TrackMouse(x, y, keys, keysum); + IF F.hasSel THEN + pos := Pos(F, x, Min(y, F.selbeg.y)) + 1; + IF pos <= F.selbeg.pos THEN pos := F.selbeg.pos + 1 END; + SetSelection(F, F.selbeg.pos, pos); + IF f # NIL THEN SetSelection(f, f.selbeg.pos, pos); f.selend.pos := F.selend.pos END + ELSE SetSelection(F, Pos(F, x, y), Pos(F, x, y) + 1) + END + UNTIL keys = {}; + IF f # NIL THEN F.selbeg.pos := f.selbeg.pos END + END TrackSelection; + + PROCEDURE Call (F: Frame; pos: LONGINT; keysum: SET); + VAR S: Texts.Scanner; res, i, j: INTEGER; + BEGIN + Texts.OpenScanner(S, F.text, pos); Texts.Scan(S); + IF (S.class = Texts.Name) & (S.line = 0) THEN i := 0; + WHILE (i < S.len) & (S.s[i] # ".") DO INC(i) END; + j := i + 1; + WHILE (j < S.len) & (S.s[j] # ".") DO INC(j) END; + IF (j >= S.len) & (S.s[i] = ".") OR (rightKey IN keysum) THEN + par.vwr := Viewers.This(F.X, F.Y); + IF rightKey IN keysum THEN S.s:="Edit.Open"; par.pos := pos ELSE par.pos := pos + S.len END; + par.frame := F; par.text := F.text; Oberon.Call(S.s, par, keysum = {middleKey, leftKey}, res); + IF res > 0 THEN + Texts.WriteString(W0, "Call error: "); Texts.WriteString(W0, Modules.importing); + IF res = 1 THEN + Texts.WriteString(W0, " not found") + ELSIF res = 2 THEN + Texts.WriteString(W0, " not an obj-file") + ELSIF res = 3 THEN + Texts.WriteString(W0, " imports "); + Texts.WriteString(W0, Modules.imported); Texts.WriteString(W0, " with bad key"); + ELSIF res = 4 THEN + Texts.WriteString(W0, " corrupted obj file") + ELSIF res = 6 THEN + Texts.WriteString(W0, " has too many imports") + ELSIF res = 7 THEN + Texts.WriteString(W0, " not enough space") + END + ELSIF res < 0 THEN + INC(i); WHILE i < S.len DO Texts.Write(W0, S.s[i]); INC(i) END; + Texts.WriteString(W0, " not found") + END; + IF res # 0 THEN Texts.WriteLn(W0); Texts.Append(Oberon.Log, W0.buf) END + END + END + END Call; + + PROCEDURE PickAttributes (VAR W: Texts.Writer; T: Texts.Text; pos: LONGINT; font: Fonts.Font; col, voff: SHORTINT); + VAR R: Texts.Reader; ch: CHAR; + BEGIN + IF T.len > 0 THEN + IF pos < T.len THEN Texts.OpenReader(R, T, pos); Texts.Read(R, ch) END; + IF (pos > 0) & ((pos = T.len) OR (ch <= " ")) THEN + Texts.OpenReader(R, T, pos - 1); Texts.Read(R, ch) + END; + Texts.SetFont(W, R.fnt); Texts.SetColor(W, R.col); + IF (ch = CR) OR (ch = TAB) OR (ch = LF) THEN Texts.SetOffset(W, voff) ELSE Texts.SetOffset(W, R.voff) END + ELSE Texts.SetFont(W, font); Texts.SetColor(W, col); Texts.SetOffset(W, voff) + END + END PickAttributes; + + PROCEDURE ShiftBlock (F: Frame; delta: INTEGER); (* shift selected lines to left or right *) + VAR text: Texts.Text; pos, beg, end, time: LONGINT; select: SelectMsg; ch: CHAR; + BEGIN + Oberon.GetSelection(text, beg, end, time); + IF (time >= 0) & (text = F.text) THEN BegOfLine(F.text, beg, FALSE); pos := beg; + WHILE pos < end DO Texts.OpenReader(R, F.text, pos); Texts.Read(R, ch); + WHILE (R.elem # NIL) & (R.elem IS Parc) & (pos < end) DO Texts.Read(R, ch); INC(pos) END; + IF pos < end THEN + IF delta < 0 THEN + IF (ch <= " ") & (ch # CR) & (ch # Texts.ElemChar) THEN + Texts.Delete(F.text, pos, pos + 1); DEC(end) + END + ELSE + PickAttributes(W, text, pos, Oberon.CurFnt, Oberon.CurCol, Oberon.CurOff); + IF (ch <= " ") & (ch # CR) & (ch # Texts.ElemChar) THEN Texts.Write(W, ch) (* first char extension *) + ELSE Texts.Write(W, TAB) + END; + Texts.Insert(F.text, pos, W.buf); INC(end); INC(pos) + END; + Texts.OpenReader(R, F.text, pos); + REPEAT Texts.Read(R, ch) UNTIL R.eot OR (ch = CR); + pos := Texts.Pos(R) + END + END; + select.text := F.text; select.beg := beg; select.end := pos; select.time := Oberon.Time(); + Viewers.Broadcast(select) + END + END ShiftBlock; + + PROCEDURE Write (F: Frame; ch: CHAR; fnt: Fonts.Font; col, voff: SHORTINT); + VAR loc: Location; parc: Parc; org, pos, pbeg: LONGINT; i: INTEGER; ch0: CHAR; + buf: ARRAY 32 OF CHAR; + copy: Texts.CopyMsg; input: Oberon.InputMsg; + + PROCEDURE Visible(ch: CHAR): BOOLEAN; + VAR pat: Display.Pattern; dx, x, y, w, h: INTEGER; + BEGIN Display.GetChar(W.fnt.raster, ch, dx, x, y, w, h, pat); RETURN dx > 0 + END Visible; + + PROCEDURE InsertBuffer; + VAR i, j: INTEGER; ch: CHAR; + BEGIN i := 0; j := 0; ch := buf[i]; + WHILE ch # 0X DO + IF (ch = TAB) OR (ch = CR) OR (ch = " ") OR Visible(ch) THEN Texts.Write(W, ch); INC(j) END; + INC(i); ch := buf[i] + END; + IF j > 0 THEN Texts.Insert(F.text, pos, W.buf); INC(pos, LONG(j)) END + END InsertBuffer; + + PROCEDURE Flush; + VAR ch: CHAR; + BEGIN + WHILE Input.Available() > 0 DO Input.Read(ch) END + END Flush; + + BEGIN + IF F.hasSel & (ch = CRSL) THEN ShiftBlock(F, -1) + ELSIF F.hasSel & (ch = CRSR) THEN ShiftBlock(F, 1) + ELSIF F.hasCar THEN pos := F.carloc.pos; + IF (ch = DEL) & (pos > F.org) THEN DEC(pos); Texts.Delete(F.text, pos, pos + 1); Flush + ELSIF (ch = CRSL) & (pos > 0) THEN DEC(pos) + ELSIF (ch = CRSR) & (pos < F.text.len) THEN INC(pos) + ELSIF (ch = BRK) OR (ch = ShiftBRK) THEN + ParcBefore(F.text, pos, P, pbeg); P.handle(P, copy); parc := copy.e(Parc); + IF ch = BRK THEN EXCL(parc.opts, pageBreak) ELSE INCL(parc.opts, pageBreak) END; + PickAttributes(W, F.text, pos, fnt, col, voff); + Texts.WriteElem(W, parc); Texts.Insert(F.text, pos, W.buf); INC(pos) + ELSIF (ch = TAB) OR (ch = LF) OR (ch = CR) OR (ch >= " ") THEN + PickAttributes(W, F.text, pos, fnt, col, voff); + IF ch = LF THEN buf[0] := CR; i := 1; org := F.carloc.org; BegOfLine(F.text, org, FALSE); + Texts.OpenReader(R, F.text, org); + REPEAT Texts.Read(R, ch) UNTIL (R.elem = NIL) OR ~(R.elem IS Parc); + WHILE (Texts.Pos(R) <= pos) & (ch <= " ") & (ch # Texts.ElemChar) & (i < 31) DO + buf[i] := ch; INC(i); Texts.Read(R, ch) + END + ELSE buf[0] := ch; i := 1 + END; + WHILE (Input.Available() > 0) & (i < 31) & (ch >= " ") & (ch < DEL) DO Input.Read(buf[i]); INC(i) END; + buf[i] := 0X; InsertBuffer + END; + IF pos < F.org THEN Show(F, F.org - 1) + ELSIF pos < F.text.len THEN org := -1; + WHILE (pos >= F.trailer.org) & (pos > F.org) DO + org := F.trailer.next.next.org; IF org = F.org THEN INC(org) END; + ShowFrom(F, org); Flush + END + ELSE LocatePos(F, pos, loc); LocateChar(F, loc.x + 1, loc.y, loc); + IF pos # loc.pos THEN Show(F, F.trailer.next.next.org); Flush END + END; + SetCaret(F, pos) + ELSIF F.focus # NIL THEN input.id := Oberon.consume; input.ch := ch; + input.fnt := fnt; input.col := col; input.voff := voff; F.focus.handle(F.focus, input) + END + END Write; + + + PROCEDURE TouchElem (F: Frame; VAR x, y: INTEGER; VAR keysum: SET); + VAR loc: Location; e: Texts.Elem; pbeg: LONGINT; y0: INTEGER; + track: TrackMsg; + BEGIN + LocateChar(F, x, y, loc); e := R.elem; + IF (e # NIL) & (loc.x + e.W DIV Unit <= F.X + F.W - F.right) THEN + ParcBefore(F.text, loc.pos, P, pbeg); y0 := loc.y + loc.line.dsr - SHORT(P.dsr DIV Unit) + loc.dy; + IF (loc.x <= x) & (x < loc.x + e.W DIV Unit) & (keysum= {middleKey}) THEN + track.X := x; track.Y := y; track.keys := keysum; + track.fnt := R.fnt; track.col := R.col; track.pos := Texts.Pos(R) - 1; + track.frame := F; track.X0 := loc.x; track.Y0 := y0; + e.handle(e, track); keysum := {} + END + END + END TouchElem; + + + PROCEDURE Edit (F: Frame; x, y: INTEGER; keysum: SET); + VAR ef: Display.Frame; text: Texts.Text; beg, end, time, pos: LONGINT; keys: SET; ch: CHAR; + loc: Location; delta: INTEGER; copyover: Oberon.CopyOverMsg; input: Oberon.InputMsg; + BEGIN + IF x < F.X + F.barW THEN pos := F.org; (* scroll bar *) + IF leftKey IN keysum THEN TrackLine(F, x, y, pos, keysum) + ELSIF rightKey IN keysum THEN TrackLine(F, x, y, pos, keysum); LocateLine(F, y, loc); + pos := F.org; delta := loc.y - (F.Y + F.bot); Back(F, delta, pos) + ELSIF middleKey IN keysum THEN + REPEAT TrackMouse(x, y, keys, keysum) UNTIL keys = {}; + IF keysum = {middleKey, leftKey} THEN pos := F.text.len; (*BegOfLine(F.text, pos, TRUE);*) + Back(F, F.H - F.bot - F.top - 30 (*heuristic*), pos); + ELSIF keysum = {middleKey, rightKey} THEN pos := 0 + ELSIF (F.Y <= y) & (y <= F.Y + F.H) THEN pos := CoordToPos(F, y - F.Y); BegOfLine(F.text, pos, TRUE) + END + ELSE DrawCursor(x, y); keysum := cancel + END; + IF keysum # cancel THEN ShowFrom(F, pos) END + ELSE (* text area *) + ef := ThisSubFrame(F, x, y); + IF ef # NIL THEN (* within sub-frame *) + IF (F.focus # ef) & (keysum = {leftKey}) THEN + REPEAT TrackMouse(x, y, keys, keysum) UNTIL keys = {}; + IF keysum = {leftKey} THEN RemoveSelection(F); RemoveCaret(F); PassSubFocus(F, ef); RETURN END + ELSIF F.focus = ef THEN input.id := Oberon.track; input.keys := keysum; input.X := x; input.Y := y; + ef.handle(ef, input); RETURN + END + END; + IF keysum # {} THEN TouchElem(F, x, y, keysum); + IF keysum = {} THEN RETURN END + END; + IF leftKey IN keysum THEN Oberon.PassFocus(Viewers.This(F.X, F.Y)); TrackCaret(F, x, y, keysum); + IF (keysum = {leftKey, middleKey}) & F.hasCar THEN Oberon.GetSelection(text, beg, end, time); + IF time >= 0 THEN Texts.Save(text, beg, end, B); + Texts.Insert(F.text, F.carloc.pos, B); SetCaret(F, F.carloc.pos + (end - beg)) + END + ELSIF (keysum = {leftKey, rightKey}) & F.hasCar & (F.carloc.pos < F.text.len) THEN + Oberon.GetSelection(text, beg, end, time); + IF time >= 0 THEN Texts.OpenReader(R, F.text, F.carloc.pos); Texts.Read(R, ch); + Texts.ChangeLooks(text, beg, end, {0, 1, 2}, R.fnt, R.col, R.voff) + END + END + ELSIF middleKey IN keysum THEN TrackWord(F, x, y, pos, keysum); + IF keysum # cancel THEN Call(F, pos, keysum) END + ELSIF rightKey IN keysum THEN TrackSelection(F, x, y, keysum); + IF (keysum = {rightKey, middleKey}) & F.hasSel THEN + copyover.text := F.text; copyover.beg := F.selbeg.pos; copyover.end := F.selend.pos; + Oberon.FocusViewer.handle(Oberon.FocusViewer, copyover) + ELSIF (keysum = {rightKey, leftKey}) & F.hasSel THEN Oberon.PassFocus(Viewers.This(F.X, F.Y)); + Texts.Delete(F.text, F.selbeg.pos, F.selend.pos); SetCaret(F, F.selbeg.pos) + END + ELSE DrawCursor(x, y) + END + END + END Edit; + + + (** General **) + + + PROCEDURE Copy (SF, DF: Frame); + BEGIN + DF.handle := SF.handle; DF.text := SF.text; DF.org := SF.org; + DF.col := SF.col; DF.left := SF.left; DF.right := SF.right; DF.top := SF.top; DF.bot := SF.bot; + DF.barW := SF.barW; DF.hasCar := FALSE; DF.hasSel := FALSE; DF.showsParcs := SF.showsParcs; + DF.focus := NIL; DF.trailer := NIL + END Copy; + + PROCEDURE Handle* (f: Display.Frame; VAR msg: Display.FrameMsg); + VAR F, F1: Frame; pos: LONGINT; + BEGIN F := f(Frame); + IF msg IS Oberon.InputMsg THEN + WITH msg: Oberon.InputMsg DO + IF msg.id = Oberon.consume THEN Write(F, msg.ch, msg.fnt, msg.col, msg.voff) + ELSIF msg.id = Oberon.track THEN Edit(F, msg.X, msg.Y, msg.keys) + END + END + ELSIF msg IS Oberon.ControlMsg THEN + WITH msg: Oberon.ControlMsg DO + IF msg.id = Oberon.defocus THEN RemoveCaret(F) + ELSIF msg.id = Oberon.neutralize THEN + RemoveCaret(F); RemoveSelection(F); PassSubFocus(F, NIL); NotifySubFrames(F, msg) + ELSE NotifySubFrames(F, msg) + END + END + ELSIF msg IS Oberon.CopyMsg THEN + WITH msg: Oberon.CopyMsg DO + IF msg.F = NIL THEN NEW(F1); msg.F := F1 END; + Copy(F, msg.F(Frame)) + END + ELSIF msg IS UpdateMsg THEN NotifySubFrames(F, msg); + WITH msg: UpdateMsg DO + IF msg.text = F.text THEN Update(F, msg) END + END + ELSIF msg IS InsertElemMsg THEN + IF F.hasCar THEN pos := F.carloc.pos; + PickAttributes(W, F.text, pos, Oberon.CurFnt, Oberon.CurCol, Oberon.CurOff); + Texts.WriteElem(W, msg(InsertElemMsg).e); + Texts.Insert(F.text, pos, W.buf); + SetCaret(F, pos + 1) + END + ELSIF msg IS Oberon.SelectionMsg THEN NotifySubFrames(F, msg); + WITH msg: Oberon.SelectionMsg DO + IF F.hasSel & (F.time > msg.time) THEN + msg.text := F.text; msg.beg := F.selbeg.pos; msg.end := F.selend.pos; msg.time := F.time + END + END + ELSIF msg IS Oberon.CopyOverMsg THEN NotifySubFrames(F, msg); + WITH msg: Oberon.CopyOverMsg DO + IF F.hasCar THEN Texts.Save(msg.text, msg.beg, msg.end, B); + Texts.Insert(F.text, F.carloc.pos, B); SetCaret(F, F.carloc.pos + (msg.end - msg.beg)) + END + END + ELSIF msg IS MenuViewers.ModifyMsg THEN + WITH msg: MenuViewers.ModifyMsg DO + F.handle(F, neutralize); Resize(F, F.X, msg.Y, F.W, msg.H) + END + ELSIF msg IS SelectMsg THEN NotifySubFrames(F, msg); + WITH msg: SelectMsg DO + IF (msg.text = F.text) & ~F.hasSel THEN Oberon.RemoveMarks(F.X, F.Y, F.W, F.H); + F.handle(F, neutralize); + SetSelection(F, msg.beg, msg.end); F.time := msg.time; + IF F.hasSel THEN F.selbeg.pos := msg.beg; F.selend.pos := msg.end END + END + END + ELSE NotifySubFrames(F, msg) + END + END Handle; + + + PROCEDURE Open* (F: Frame; T: Texts.Text; pos: LONGINT); + BEGIN + F.handle := Handle; F.text := T; F.org := pos; F.col := Display.black; + F.left := left; F.right := right; F.top := top; F.bot := bot; + F.barW := barW; F.hasCar := FALSE; F.hasSel := FALSE; F.showsParcs := FALSE; F.trailer := NIL + END Open; + + + PROCEDURE NotifyDisplay* (T: Texts.Text; op: INTEGER; beg, end: LONGINT); + VAR msg: UpdateMsg; + BEGIN + msg.text := T; msg.id := op; msg.beg := beg; msg.end := end; Viewers.Broadcast(msg) + END NotifyDisplay; + + PROCEDURE Text* (name: ARRAY OF CHAR): Texts.Text; + VAR text: Texts.Text; + BEGIN + NEW(text); Texts.Open(text, name); text.notify := NotifyDisplay; RETURN text + END Text; + + PROCEDURE NewText* (T: Texts.Text; pos: LONGINT): Frame; + VAR frame: Frame; + BEGIN + NEW(frame); Open(frame, T, pos); + RETURN frame + END NewText; + + PROCEDURE NewMenu* (name, commands: ARRAY OF CHAR): Frame; + VAR T: Texts.Text; frame: Frame; + BEGIN + T := Text(""); + Texts.WriteString(W0, name); Texts.WriteString(W0, " | "); Texts.WriteString(W0, commands); + Texts.Append(T, W0.buf); + NEW(frame); Open(frame, T, 0); + frame.col := Display.white; frame.left := 6; frame.top := 0; frame.bot := 0; frame.barW := 0; + RETURN frame + END NewMenu; + +BEGIN + Texts.OpenWriter(W); Texts.OpenWriter(W0); + Texts.SetFont(W0, Fonts.Default); Texts.SetColor(W0, Display.white); Texts.SetOffset(W0, 0); + neutralize.id := Oberon.neutralize; + NEW(par); + NEW(B); Texts.OpenBuf(B); + menuH := Fonts.Default.height + 2; + barW := 14; left := barW + 6; right := 8; top := 6; bot := 6; + Oberon.Log := Text(""); + InitDefParc +END TextFrames. diff --git a/src/tools/ocat/OCatCmd.Mod b/src/tools/ocat/OCatCmd.Mod new file mode 100644 index 00000000..c845c484 --- /dev/null +++ b/src/tools/ocat/OCatCmd.Mod @@ -0,0 +1,50 @@ +MODULE OCatCmd; (* J. Templ, 13-Jan-96 *) + +(* looks at the OBERON search path and writes one or more Oberon or ascii texts to standard out *) + + IMPORT Args, Console, Files, Texts := CmdlnTexts; + + PROCEDURE Cat*; + VAR path: ARRAY 128 OF CHAR; i: INTEGER; T: Texts.Text; R: Texts.Reader; ch: CHAR; tab: BOOLEAN; + buf: ARRAY 1024 OF CHAR; bufpos: INTEGER; + + PROCEDURE ConsoleChar(ch: CHAR); (* buffered write *) + BEGIN buf[bufpos] := ch; INC(bufpos); + IF bufpos = LEN(buf) - 1 THEN buf[bufpos] := 0X; Console.String(buf); bufpos := 0 END + END ConsoleChar; + + BEGIN + path := ""; NEW(T); + Args.Get(1, path); + IF path = "-t" THEN tab := TRUE; i := 2; Args.Get(2, path) + ELSE tab := FALSE; i := 1 + END ; + WHILE path # "" DO + IF Files.Old(path) # NIL THEN + Texts.Open(T, path); + Texts.OpenReader(R, T, 0); Texts.Read(R, ch); bufpos := 0; + WHILE ~R.eot DO + IF ch >= " " THEN ConsoleChar(ch) + ELSIF ch = 09X THEN + IF tab THEN ConsoleChar(ch) ELSE ConsoleChar(" "); ConsoleChar(" ") END + ELSIF ch = 0DX THEN ConsoleChar(0AX) + END ; + Texts.Read(R, ch) + END ; + buf[bufpos] := 0X; Console.String(buf) (* flush *) + ELSE + Console.String("ocat: cannot open "); Console.String(path); Console.Ln + END ; + INC(i); path := ""; + Args.Get(i, path) + END + END Cat; + +BEGIN Cat +END OCatCmd. + + + +ocat [-t] files... + +-t no tab conversion diff --git a/src/tools/vocparam/vocparam.c b/src/tools/vocparam/vocparam.c new file mode 100644 index 00000000..22179db2 --- /dev/null +++ b/src/tools/vocparam/vocparam.c @@ -0,0 +1,69 @@ +/* J. Templ 23.6.95 +this program tests and outputs important characteristics of +the C compiler and SYSTEM.h file used to compile it. +The output of this program is accepted by voc as file voc.par. +% cc vocparam.c; a.out > voc.par +*/ + + +#include "SYSTEM.h" +#include "stdio.h" + +struct {CHAR ch; CHAR x;} c; +struct {CHAR ch; BOOLEAN x;} b; +struct {CHAR ch; SHORTINT x;} si; +struct {CHAR ch; INTEGER x;} i; +struct {CHAR ch; LONGINT x;} li; +struct {CHAR ch; SET x;} s; +struct {CHAR ch; REAL x;} r; +struct {CHAR ch; LONGREAL x;} lr; +struct {CHAR ch; void *x;} p; +struct {CHAR ch; void (*x)();} f; +struct {CHAR ch;} rec0; +struct {CHAR ch; LONGREAL x;} rec1; +struct {char x[65];} rec2; + +void main() +{ + long x, y; + /* get size and alignment of standard types */ + printf("CHAR %d %d\n", sizeof(CHAR), (char*)&c.x - (char*)&c); + printf("BOOLEAN %d %d\n", sizeof(BOOLEAN), (char*)&b.x - (char*)&b); + printf("SHORTINT %d %d\n", sizeof(SHORTINT), (char*)&si.x - (char*)&si); + printf("INTEGER %d %d\n", sizeof(INTEGER), (char*)&i.x - (char*)&i); + printf("LONGINT %d %d\n", sizeof(LONGINT), (char*)&li.x - (char*)&li); + printf("SET %d %d\n", sizeof(SET), (char*)&s.x - (char*)&s); + printf("REAL %d %d\n", sizeof(REAL), (char*)&r.x - (char*)&r); + printf("LONGREAL %d %d\n", sizeof(LONGREAL), (char*)&lr.x - (char*)&lr); + printf("PTR %d %d\n", sizeof p.x, (char*)&p.x - (char*)&p); + printf("PROC %d %d\n", sizeof f.x, (char*)&f.x - (char*)&f); + printf("RECORD %d %d\n", (sizeof rec2 == 65) == (sizeof rec0 == 1), sizeof rec2 - 64); + x = 1; + printf("ENDIAN %d %d\n", *(char*)&x, 0); + + if (sizeof(CHAR)!=1) printf("error: CHAR should have size 1\n"); + if (sizeof(BOOLEAN)!=1) printf("error: BOOLEAN should have size 1\n"); + if (sizeof(SHORTINT)!=1) printf("error: SHORTINT should have size 1\n"); + if (sizeof(long)!=sizeof p.x) printf("error: LONGINT should have the same size as pointers\n"); + if (sizeof(long)!=sizeof f.x) printf("error: LONGINT should have the same size as function pointers\n"); + if (((sizeof rec2 == 65) == (sizeof rec0 == 1)) && ((sizeof rec2 - 64) != sizeof rec0)) + printf("error: unsupported record layout sizeof rec0 = %d sizeof rec2 = %d\n", sizeof rec0, sizeof rec2); + + /* test the __ASHR macro */ + if (__ASHR(-1, 1) != -1) printf("error: ASH(-1, -1) # -1\n"); + if (__ASHR(-2, 1) != -1) printf("error: ASH(-2, -1) # -1\n"); + if (__ASHR(0, 1) != 0) printf("error: ASH(0, 1) # 0\n"); + if (__ASHR(1, 1) != 0) printf("error: ASH(1, 1) # 0\n"); + if (__ASHR(2, 1) != 1) printf("error: ASH(2, 1) # 1\n"); + + /* test the __SETRNG macro */ + x = 0; y = sizeof(SET)*8 - 1; + if (__SETRNG(x, y) != -1) printf("error: SETRNG(0, MAX(SET)) != -1\n"); + + /* test string comparison for extended ascii */ + {char a[10], b[10]; + a[0] = (CHAR)128; a[1] = 0; + b[0] = 0; + if (__STRCMP(a, b) < 0) printf("error: __STRCMP(a, b) with extended ascii charcters; should be unsigned\n"); + } +} diff --git a/src/voc/OPB.Mod b/src/voc/OPB.Mod new file mode 100644 index 00000000..c2769922 --- /dev/null +++ b/src/voc/OPB.Mod @@ -0,0 +1,1538 @@ +MODULE OPB; (* RC 6.3.89 / 21.2.94 *) (* object model 17.1.93 *) +(* build parse tree *) + + IMPORT OPT, OPS, OPM; + + CONST + (* symbol values or ops *) + times = 1; slash = 2; div = 3; mod = 4; + and = 5; plus = 6; minus = 7; or = 8; eql = 9; + neq = 10; lss = 11; leq = 12; gtr = 13; geq = 14; + in = 15; is = 16; ash = 17; msk = 18; len = 19; + conv = 20; abs = 21; cap = 22; odd = 23; not = 33; + (*SYSTEM*) + adr = 24; cc = 25; bit = 26; lsh = 27; rot = 28; val = 29; + + (* object modes *) + Var = 1; VarPar = 2; Con = 3; Fld = 4; Typ = 5; LProc = 6; XProc = 7; + SProc = 8; CProc = 9; IProc = 10; Mod = 11; Head = 12; TProc = 13; + + (* Structure forms *) + Undef = 0; Byte = 1; Bool = 2; Char = 3; SInt = 4; Int = 5; LInt = 6; + Real = 7; LReal = 8; Set = 9; String = 10; NilTyp = 11; NoTyp = 12; + Pointer = 13; ProcTyp = 14; Comp = 15; + intSet = {SInt..LInt}; realSet = {Real, LReal}; + + (* composite structure forms *) + Basic = 1; Array = 2; DynArr = 3; Record = 4; + + (* nodes classes *) + Nvar = 0; Nvarpar = 1; Nfield = 2; Nderef = 3; Nindex = 4; Nguard = 5; Neguard = 6; + Nconst = 7; Ntype = 8; Nproc = 9; Nupto = 10; Nmop = 11; Ndop = 12; Ncall = 13; + Ninittd = 14; Nif = 15; Ncaselse = 16; Ncasedo = 17; Nenter = 18; Nassign = 19; + Nifelse = 20; Ncase = 21; Nwhile = 22; Nrepeat = 23; Nloop = 24; Nexit = 25; + Nreturn = 26; Nwith = 27; Ntrap = 28; + + (*function number*) + assign = 0; + haltfn = 0; newfn = 1; absfn = 2; capfn = 3; ordfn = 4; + entierfn = 5; oddfn = 6; minfn = 7; maxfn = 8; chrfn = 9; + shortfn = 10; longfn = 11; sizefn = 12; incfn = 13; decfn = 14; + inclfn = 15; exclfn = 16; lenfn = 17; copyfn = 18; ashfn = 19; assertfn = 32; + + (*SYSTEM function number*) + adrfn = 20; ccfn = 21; lshfn = 22; rotfn = 23; + getfn = 24; putfn = 25; getrfn = 26; putrfn = 27; + bitfn = 28; valfn = 29; sysnewfn = 30; movefn = 31; + + (* module visibility of objects *) + internal = 0; external = 1; externalR = 2; + + (* procedure flags (conval^.setval) *) + hasBody = 1; isRedef = 2; slNeeded = 3; + + AssertTrap = 0; (* default trap number *) + + VAR + typSize*: PROCEDURE(typ: OPT.Struct); + exp: INTEGER; (*side effect of log*) + maxExp: LONGINT; (* max n in ASH(1, n) on this machine *) + + PROCEDURE err(n: INTEGER); + BEGIN OPM.err(n) + END err; + + PROCEDURE NewLeaf*(obj: OPT.Object): OPT.Node; + VAR node: OPT.Node; + BEGIN + CASE obj^.mode OF + Var: + node := OPT.NewNode(Nvar); node^.readonly := (obj^.vis = externalR) & (obj^.mnolev < 0) + | VarPar: + node := OPT.NewNode(Nvarpar) + | Con: + node := OPT.NewNode(Nconst); node^.conval := OPT.NewConst(); + node^.conval^ := obj^.conval^ (* string is not copied, only its ref *) + | Typ: + node := OPT.NewNode(Ntype) + | LProc..IProc: + node := OPT.NewNode(Nproc) + ELSE err(127); node := OPT.NewNode(Nvar) + END ; + node^.obj := obj; node^.typ := obj^.typ; + RETURN node + END NewLeaf; + + PROCEDURE Construct*(class: SHORTINT; VAR x: OPT.Node; y: OPT.Node); + VAR node: OPT.Node; + BEGIN + node := OPT.NewNode(class); node^.typ := OPT.notyp; + node^.left := x; node^.right := y; x := node + END Construct; + + PROCEDURE Link*(VAR x, last: OPT.Node; y: OPT.Node); + BEGIN + IF x = NIL THEN x := y ELSE last^.link := y END ; + WHILE y^.link # NIL DO y := y^.link END ; + last := y + END Link; + + PROCEDURE BoolToInt(b: BOOLEAN): LONGINT; + BEGIN + IF b THEN RETURN 1 ELSE RETURN 0 END + END BoolToInt; + + PROCEDURE IntToBool(i: LONGINT): BOOLEAN; + BEGIN + IF i = 0 THEN RETURN FALSE ELSE RETURN TRUE END + END IntToBool; + + PROCEDURE NewBoolConst*(boolval: BOOLEAN): OPT.Node; + VAR x: OPT.Node; + BEGIN + x := OPT.NewNode(Nconst); x^.typ := OPT.booltyp; + x^.conval := OPT.NewConst(); x^.conval^.intval := BoolToInt(boolval); RETURN x + END NewBoolConst; + + PROCEDURE OptIf*(VAR x: OPT.Node); (* x^.link = NIL *) + VAR if, pred: OPT.Node; + BEGIN + if := x^.left; + WHILE if^.left^.class = Nconst DO + IF IntToBool(if^.left^.conval^.intval) THEN x := if^.right; RETURN + ELSIF if^.link = NIL THEN x := x^.right; RETURN + ELSE if := if^.link; x^.left := if + END + END ; + pred := if; if := if^.link; + WHILE if # NIL DO + IF if^.left^.class = Nconst THEN + IF IntToBool(if^.left^.conval^.intval) THEN + pred^.link := NIL; x^.right := if^.right; RETURN + ELSE if := if^.link; pred^.link := if + END + ELSE pred := if; if := if^.link + END + END + END OptIf; + + PROCEDURE Nil*(): OPT.Node; + VAR x: OPT.Node; + BEGIN + x := OPT.NewNode(Nconst); x^.typ := OPT.niltyp; + x^.conval := OPT.NewConst(); x^.conval^.intval := OPM.nilval; RETURN x + END Nil; + + PROCEDURE EmptySet*(): OPT.Node; + VAR x: OPT.Node; + BEGIN + x := OPT.NewNode(Nconst); x^.typ := OPT.settyp; + x^.conval := OPT.NewConst(); x^.conval^.setval := {}; RETURN x + END EmptySet; + + PROCEDURE SetIntType(node: OPT.Node); + VAR v: LONGINT; + BEGIN v := node^.conval^.intval; + IF (OPM.MinSInt <= v) & (v <= OPM.MaxSInt) THEN node^.typ := OPT.sinttyp + ELSIF (OPM.MinInt <= v) & (v <= OPM.MaxInt) THEN node^.typ := OPT.inttyp + ELSIF (OPM.MinLInt <= v) & (v <= OPM.MaxLInt) (*bootstrap or cross*) THEN + node^.typ := OPT.linttyp + ELSE err(203); node^.typ := OPT.sinttyp; node^.conval^.intval := 1 + END + END SetIntType; + + PROCEDURE NewIntConst*(intval: LONGINT): OPT.Node; + VAR x: OPT.Node; + BEGIN + x := OPT.NewNode(Nconst); x^.conval := OPT.NewConst(); + x^.conval^.intval := intval; SetIntType(x); RETURN x + END NewIntConst; + + PROCEDURE NewRealConst*(realval: LONGREAL; typ: OPT.Struct): OPT.Node; + VAR x: OPT.Node; + BEGIN + x := OPT.NewNode(Nconst); x^.conval := OPT.NewConst(); + x^.conval^.realval := realval; x^.typ := typ; x^.conval^.intval := OPM.ConstNotAlloc; + RETURN x + END NewRealConst; + + PROCEDURE NewString*(VAR str: OPS.String; len: LONGINT): OPT.Node; + VAR x: OPT.Node; + BEGIN + x := OPT.NewNode(Nconst); x^.conval := OPT.NewConst(); x^.typ := OPT.stringtyp; + x^.conval^.intval := OPM.ConstNotAlloc; x^.conval^.intval2 := len; + x^.conval^.ext := OPT.NewExt(); x^.conval^.ext^ := str; + RETURN x + END NewString; + + PROCEDURE CharToString(n: OPT.Node); + VAR ch: CHAR; + BEGIN + n^.typ := OPT.stringtyp; ch := CHR(n^.conval^.intval); n^.conval^.ext := OPT.NewExt(); + IF ch = 0X THEN n^.conval^.intval2 := 1 ELSE n^.conval^.intval2 := 2; n^.conval^.ext[1] := 0X END ; + n^.conval^.ext[0] := ch; n^.conval^.intval := OPM.ConstNotAlloc; n^.obj := NIL + END CharToString; + + PROCEDURE BindNodes(class: SHORTINT; typ: OPT.Struct; VAR x: OPT.Node; y: OPT.Node); + VAR node: OPT.Node; + BEGIN + node := OPT.NewNode(class); node^.typ := typ; + node^.left := x; node^.right := y; x := node + END BindNodes; + + PROCEDURE NotVar(x: OPT.Node): BOOLEAN; + BEGIN RETURN (x^.class >= Nconst) & ((x^.class # Nmop) OR (x^.subcl # val) OR (x^.left^.class >= Nconst)) + END NotVar; + + PROCEDURE DeRef*(VAR x: OPT.Node); + VAR strobj, bstrobj: OPT.Object; typ, btyp: OPT.Struct; + BEGIN + typ := x^.typ; + IF x^.class >= Nconst THEN err(78) + ELSIF typ^.form = Pointer THEN + IF typ = OPT.sysptrtyp THEN err(57) END ; + btyp := typ^.BaseTyp; strobj := typ^.strobj; bstrobj := btyp^.strobj; + IF (strobj # NIL) & (strobj^.name # "") & (bstrobj # NIL) & (bstrobj^.name # "") THEN + btyp^.pbused := TRUE + END ; + BindNodes(Nderef, btyp, x, NIL) + ELSE err(84) + END + END DeRef; + + PROCEDURE Index*(VAR x: OPT.Node; y: OPT.Node); + VAR f: INTEGER; typ: OPT.Struct; + BEGIN + f := y^.typ^.form; + IF x^.class >= Nconst THEN err(79) + ELSIF ~(f IN intSet) OR (y^.class IN {Nproc, Ntype}) THEN err(80); y^.typ := OPT.inttyp END ; + IF x^.typ^.comp = Array THEN typ := x^.typ^.BaseTyp; + IF (y^.class = Nconst) & ((y^.conval^.intval < 0) OR (y^.conval^.intval >= x^.typ^.n)) THEN err(81) END + ELSIF x^.typ^.comp = DynArr THEN typ := x^.typ^.BaseTyp; + IF (y^.class = Nconst) & (y^.conval^.intval < 0) THEN err(81) END + ELSE err(82); typ := OPT.undftyp + END ; + BindNodes(Nindex, typ, x, y); x^.readonly := x^.left^.readonly + END Index; + + PROCEDURE Field*(VAR x: OPT.Node; y: OPT.Object); + BEGIN (*x^.typ^.comp = Record*) + IF x^.class >= Nconst THEN err(77) END ; + IF (y # NIL) & (y^.mode IN {Fld, TProc}) THEN + BindNodes(Nfield, y^.typ, x, NIL); x^.obj := y; + x^.readonly := x^.left^.readonly OR ((y^.vis = externalR) & (y^.mnolev < 0)) + ELSE err(83); x^.typ := OPT.undftyp + END + END Field; + + PROCEDURE TypTest*(VAR x: OPT.Node; obj: OPT.Object; guard: BOOLEAN); + + PROCEDURE GTT(t0, t1: OPT.Struct); + VAR node: OPT.Node; t: OPT.Struct; + BEGIN t := t0; + WHILE (t # NIL) & (t # t1) & (t # OPT.undftyp) DO t := t^.BaseTyp END ; + IF t # t1 THEN + WHILE (t1 # NIL) & (t1 # t0) & (t1 # OPT.undftyp) DO t1 := t1^.BaseTyp END ; + IF (t1 = t0) OR (t0.form = Undef (*SYSTEM.PTR*)) THEN + IF guard THEN BindNodes(Nguard, NIL, x, NIL); x^.readonly := x^.left^.readonly + ELSE node := OPT.NewNode(Nmop); node^.subcl := is; node^.left := x; + node^.obj := obj; x := node + END + ELSE err(85) + END + ELSIF t0 # t1 THEN err(85) (* prevent down guard *) + ELSIF ~guard THEN + IF x^.class = Nguard THEN (* cannot skip guard *) + node := OPT.NewNode(Nmop); node^.subcl := is; node^.left := x; + node^.obj := obj; x := node + ELSE x := NewBoolConst(TRUE) + END + END + END GTT; + + BEGIN + IF NotVar(x) THEN err(112) + ELSIF x^.typ^.form = Pointer THEN + IF (x^.typ^.BaseTyp^.comp # Record) & (x^.typ # OPT.sysptrtyp) THEN err(85) + ELSIF obj^.typ^.form = Pointer THEN GTT(x^.typ^.BaseTyp, obj^.typ^.BaseTyp) + ELSE err(86) + END + ELSIF (x^.typ^.comp = Record) & (x^.class = Nvarpar) & (obj^.typ^.comp = Record) THEN + GTT(x^.typ, obj^.typ) + ELSE err(87) + END ; + IF guard THEN x^.typ := obj^.typ ELSE x^.typ := OPT.booltyp END + END TypTest; + + PROCEDURE In*(VAR x: OPT.Node; y: OPT.Node); + VAR f: INTEGER; k: LONGINT; + BEGIN f := x^.typ^.form; + IF (x^.class = Ntype) OR (x^.class = Nproc) OR (y^.class = Ntype) OR (y^.class = Nproc) THEN err(126) + ELSIF (f IN intSet) & (y^.typ^.form = Set) THEN + IF x^.class = Nconst THEN + k := x^.conval^.intval; + IF (k < 0) OR (k > OPM.MaxSet) THEN err(202) + ELSIF y^.class = Nconst THEN x^.conval^.intval := BoolToInt(k IN y^.conval^.setval); x^.obj := NIL + ELSE BindNodes(Ndop, OPT.booltyp, x, y); x^.subcl := in + END + ELSE BindNodes(Ndop, OPT.booltyp, x, y); x^.subcl := in + END + ELSE err(92) + END ; + x^.typ := OPT.booltyp + END In; + + PROCEDURE log(x: LONGINT): LONGINT; + BEGIN exp := 0; + IF x > 0 THEN + WHILE ~ODD(x) DO x := x DIV 2; INC(exp) END + END ; + RETURN x + END log; + + PROCEDURE CheckRealType(f, nr: INTEGER; x: OPT.Const); + VAR min, max, r: LONGREAL; + BEGIN + IF f = Real THEN min := OPM.MinReal; max := OPM.MaxReal + ELSE min := OPM.MinLReal; max := OPM.MaxLReal + END ; + r := ABS(x^.realval); + IF (r > max) OR (r < min) THEN + err(nr); x^.realval := 1.0 + ELSIF f = Real THEN x^.realval := SHORT(x^.realval) (* single precision only *) + END ; + x^.intval := OPM.ConstNotAlloc + END CheckRealType; + + PROCEDURE MOp*(op: SHORTINT; VAR x: OPT.Node); + VAR f: INTEGER; typ: OPT.Struct; z: OPT.Node; + + PROCEDURE NewOp(op: SHORTINT; typ: OPT.Struct; z: OPT.Node): OPT.Node; + VAR node: OPT.Node; + BEGIN + node := OPT.NewNode(Nmop); node^.subcl := op; node^.typ := typ; + node^.left := z; RETURN node + END NewOp; + + BEGIN z := x; + IF (z^.class = Ntype) OR (z^.class = Nproc) THEN err(126) + ELSE typ := z^.typ; f := typ^.form; + CASE op OF + not: + IF f = Bool THEN + IF z^.class = Nconst THEN + z^.conval^.intval := BoolToInt(~IntToBool(z^.conval^.intval)); z^.obj := NIL + ELSE z := NewOp(op, typ, z) + END + ELSE err(98) + END + | plus: + IF ~(f IN intSet + realSet) THEN err(96) END + | minus: + IF f IN intSet + realSet +{Set}THEN + IF z^.class = Nconst THEN + IF f IN intSet THEN + IF z^.conval^.intval = MIN(LONGINT) THEN err(203) + ELSE z^.conval^.intval := -z^.conval^.intval; SetIntType(z) + END + ELSIF f IN realSet THEN z^.conval^.realval := -z^.conval^.realval + ELSE z^.conval^.setval := -z^.conval^.setval + END ; + z^.obj := NIL + ELSE z := NewOp(op, typ, z) + END + ELSE err(97) + END + | abs: + IF f IN intSet + realSet THEN + IF z^.class = Nconst THEN + IF f IN intSet THEN + IF z^.conval^.intval = MIN(LONGINT) THEN err(203) + ELSE z^.conval^.intval := ABS(z^.conval^.intval); SetIntType(z) + END + ELSE z^.conval^.realval := ABS(z^.conval^.realval) + END ; + z^.obj := NIL + ELSE z := NewOp(op, typ, z) + END + ELSE err(111) + END + | cap: + IF f = Char THEN + IF z^.class = Nconst THEN + z^.conval^.intval := ORD(CAP(CHR(z^.conval^.intval))); z^.obj := NIL + ELSE z := NewOp(op, typ, z) + END + ELSE err(111); z^.typ := OPT.chartyp + END + | odd: + IF f IN intSet THEN + IF z^.class = Nconst THEN + z^.conval^.intval := BoolToInt(ODD(z^.conval^.intval)); z^.obj := NIL + ELSE z := NewOp(op, typ, z) + END + ELSE err(111) + END ; + z^.typ := OPT.booltyp + | adr: (*SYSTEM.ADR*) + IF (z^.class < Nconst) OR (f = String) THEN z := NewOp(op, typ, z) + ELSE err(127) + END ; + z^.typ := OPT.linttyp + | cc: (*SYSTEM.CC*) + IF (f IN intSet) & (z^.class = Nconst) THEN + IF (0 <= z^.conval^.intval) & (z^.conval^.intval <= OPM.MaxCC) THEN z := NewOp(op, typ, z) ELSE err(219) END + ELSE err(69) + END ; + z^.typ := OPT.booltyp + END + END ; + x := z + END MOp; + + PROCEDURE CheckPtr(x, y: OPT.Node); + VAR g: INTEGER; p, q, t: OPT.Struct; + BEGIN g := y^.typ^.form; + IF g = Pointer THEN + p := x^.typ^.BaseTyp; q := y^.typ^.BaseTyp; + IF (p^.comp = Record) & (q^.comp = Record) THEN + IF p^.extlev < q^.extlev THEN t := p; p := q; q := t END ; + WHILE (p # q) & (p # NIL) & (p # OPT.undftyp) DO p := p^.BaseTyp END ; + IF p = NIL THEN err(100) END + ELSE err(100) + END + ELSIF g # NilTyp THEN err(100) + END + END CheckPtr; + + PROCEDURE CheckParameters*(fp, ap: OPT.Object; checkNames: BOOLEAN); + VAR ft, at: OPT.Struct; + BEGIN + WHILE fp # NIL DO + IF ap # NIL THEN + ft := fp^.typ; at := ap^.typ; + WHILE (ft^.comp = DynArr) & (at^.comp = DynArr) DO + ft := ft^.BaseTyp; at := at^.BaseTyp + END ; + IF ft # at THEN + IF (ft^.form = ProcTyp) & (at^.form = ProcTyp) THEN + IF ft^.BaseTyp = at^.BaseTyp THEN CheckParameters(ft^.link, at^.link, FALSE) + ELSE err(117) + END + ELSE err(115) + END + END ; + IF (fp^.mode # ap^.mode) OR checkNames & (fp^.name # ap^.name) THEN err(115) END ; + ap := ap^.link + ELSE err(116) + END ; + fp := fp^.link + END ; + IF ap # NIL THEN err(116) END + END CheckParameters; + + PROCEDURE CheckProc(x: OPT.Struct; y: OPT.Object); (* proc var x := proc y, check compatibility *) + BEGIN + IF y^.mode IN {XProc, IProc, LProc} THEN + IF y^.mode = LProc THEN + IF y^.mnolev = 0 THEN y^.mode := XProc + ELSE err(73) + END + END ; + IF x^.BaseTyp = y^.typ THEN CheckParameters(x^.link, y^.link, FALSE) + ELSE err(117) + END + ELSE err(113) + END + END CheckProc; + + PROCEDURE ConstOp(op: INTEGER; x, y: OPT.Node); + VAR f, g: INTEGER; xval, yval: OPT.Const; xv, yv: LONGINT; + temp: BOOLEAN; (* temp avoids err 215 *) + + PROCEDURE ConstCmp(): INTEGER; + VAR res: INTEGER; + BEGIN + CASE f OF + Undef: + res := eql + | Byte, Char..LInt: + IF xval^.intval < yval^.intval THEN res := lss + ELSIF xval^.intval > yval^.intval THEN res := gtr + ELSE res := eql + END + | Real, LReal: + IF xval^.realval < yval^.realval THEN res := lss + ELSIF xval^.realval > yval^.realval THEN res := gtr + ELSE res := eql + END + | Bool: + IF xval^.intval # yval^.intval THEN res := neq + ELSE res := eql + END + | Set: + IF xval^.setval # yval^.setval THEN res := neq + ELSE res := eql + END + | String: + IF xval^.ext^ < yval^.ext^ THEN res := lss + ELSIF xval^.ext^ > yval^.ext^ THEN res := gtr + ELSE res := eql + END + | NilTyp, Pointer, ProcTyp: + IF xval^.intval # yval^.intval THEN res := neq + ELSE res := eql + END + END ; + x^.typ := OPT.booltyp; RETURN res + END ConstCmp; + + BEGIN + f := x^.typ^.form; g := y^.typ^.form; xval := x^.conval; yval := y^.conval; + IF f # g THEN + CASE f OF + Char: + IF g = String THEN CharToString(x) + ELSE err(100); y^.typ := x^.typ; yval^ := xval^ + END ; + | SInt: + IF g IN intSet THEN x^.typ := y^.typ + ELSIF g = Real THEN x^.typ := OPT.realtyp; xval^.realval := xval^.intval + ELSIF g = LReal THEN x^.typ := OPT.lrltyp; xval^.realval := xval^.intval + ELSE err(100); y^.typ := x^.typ; yval^ := xval^ + END + | Int: + IF g = SInt THEN y^.typ := OPT.inttyp + ELSIF g IN intSet THEN x^.typ := y^.typ + ELSIF g = Real THEN x^.typ := OPT.realtyp; xval^.realval := xval^.intval + ELSIF g = LReal THEN x^.typ := OPT.lrltyp; xval^.realval := xval^.intval + ELSE err(100); y^.typ := x^.typ; yval^ := xval^ + END + | LInt: + IF g IN intSet THEN y^.typ := OPT.linttyp + ELSIF g = Real THEN x^.typ := OPT.realtyp; xval^.realval := xval^.intval + ELSIF g = LReal THEN x^.typ := OPT.lrltyp; xval^.realval := xval^.intval + ELSE err(100); y^.typ := x^.typ; yval^ := xval^ + END + | Real: + IF g IN intSet THEN y^.typ := x^.typ; yval^.realval := yval^.intval + ELSIF g = LReal THEN x^.typ := OPT.lrltyp + ELSE err(100); y^.typ := x^.typ; yval^ := xval^ + END + | LReal: + IF g IN intSet THEN y^.typ := x^.typ; yval^.realval := yval^.intval + ELSIF g = Real THEN y^.typ := OPT.lrltyp + ELSE err(100); y^.typ := x^.typ; yval^ := xval^ + END + | String: + IF g = Char THEN CharToString(y); g := String + ELSE err(100); y^.typ := x^.typ; yval^ := xval^ + END ; + | NilTyp: + IF ~(g IN {Pointer, ProcTyp}) THEN err(100) END + | Pointer: + CheckPtr(x, y) + | ProcTyp: + IF g # NilTyp THEN err(100) END + ELSE err(100); y^.typ := x^.typ; yval^ := xval^ + END ; + f := x^.typ^.form + END ; (* {x^.typ = y^.typ} *) + CASE op OF + times: + IF f IN intSet THEN xv := xval^.intval; yv := yval^.intval; + IF (xv = 0) OR (yv = 0) OR (* division with negative numbers is not defined *) + (xv > 0) & (yv > 0) & (yv <= MAX(LONGINT) DIV xv) OR + (xv > 0) & (yv < 0) & (yv >= MIN(LONGINT) DIV xv) OR + (xv < 0) & (yv > 0) & (xv >= MIN(LONGINT) DIV yv) OR + (xv < 0) & (yv < 0) & (xv # MIN(LONGINT)) & (yv # MIN(LONGINT)) & (-xv <= MAX(LONGINT) DIV (-yv)) THEN + xval^.intval := xv * yv; SetIntType(x) + ELSE err(204) + END + ELSIF f IN realSet THEN + temp := ABS(yval^.realval) <= 1.0; + IF temp OR (ABS(xval^.realval) <= MAX(LONGREAL) / ABS(yval^.realval)) THEN + xval^.realval := xval^.realval * yval^.realval; CheckRealType(f, 204, xval) + ELSE err(204) + END + ELSIF f = Set THEN + xval^.setval := xval^.setval * yval^.setval + ELSIF f # Undef THEN err(101) + END + | slash: + IF f IN intSet THEN + IF yval^.intval # 0 THEN + xval^.realval := xval^.intval / yval^.intval; CheckRealType(Real, 205, xval) + ELSE err(205); xval^.realval := 1.0 + END ; + x^.typ := OPT.realtyp + ELSIF f IN realSet THEN + temp := ABS(yval^.realval) >= 1.0; + IF temp OR (ABS(xval^.realval) <= MAX(LONGREAL) * ABS(yval^.realval)) THEN + xval^.realval := xval^.realval / yval^.realval; CheckRealType(f, 205, xval) + ELSE err(205) + END + ELSIF f = Set THEN + xval^.setval := xval^.setval / yval^.setval + ELSIF f # Undef THEN err(102) + END + | div: + IF f IN intSet THEN + IF yval^.intval # 0 THEN + xval^.intval := xval^.intval DIV yval^.intval; SetIntType(x) + ELSE err(205) + END + ELSIF f # Undef THEN err(103) + END + | mod: + IF f IN intSet THEN + IF yval^.intval # 0 THEN + xval^.intval := xval^.intval MOD yval^.intval; SetIntType(x) + ELSE err(205) + END + ELSIF f # Undef THEN err(104) + END + | and: + IF f = Bool THEN + xval^.intval := BoolToInt(IntToBool(xval^.intval) & IntToBool(yval^.intval)) + ELSE err(94) + END + | plus: + IF f IN intSet THEN + temp := (yval^.intval >= 0) & (xval^.intval <= MAX(LONGINT) - yval^.intval); + IF temp OR (yval^.intval < 0) & (xval^.intval >= MIN(LONGINT) - yval^.intval) THEN + INC(xval^.intval, yval^.intval); SetIntType(x) + ELSE err(206) + END + ELSIF f IN realSet THEN + temp := (yval^.realval >= 0.0) & (xval^.realval <= MAX(LONGREAL) - yval^.realval); + IF temp OR (yval^.realval < 0.0) & (xval^.realval >= -MAX(LONGREAL) - yval^.realval) THEN + xval^.realval := xval^.realval + yval^.realval; CheckRealType(f, 206, xval) + ELSE err(206) + END + ELSIF f = Set THEN + xval^.setval := xval^.setval + yval^.setval + ELSIF f # Undef THEN err(105) + END + | minus: + IF f IN intSet THEN + IF (yval^.intval >= 0) & (xval^.intval >= MIN(LONGINT) + yval^.intval) OR + (yval^.intval < 0) & (xval^.intval <= MAX(LONGINT) + yval^.intval) THEN + DEC(xval^.intval, yval^.intval); SetIntType(x) + ELSE err(207) + END + ELSIF f IN realSet THEN + temp := (yval^.realval >= 0.0) & (xval^.realval >= -MAX(LONGREAL) + yval^.realval); + IF temp OR (yval^.realval < 0.0) & (xval^.realval <= MAX(LONGREAL) + yval^.realval) THEN + xval^.realval := xval^.realval - yval^.realval; CheckRealType(f, 207, xval) + ELSE err(207) + END + ELSIF f = Set THEN + xval^.setval := xval^.setval - yval^.setval + ELSIF f # Undef THEN err(106) + END + | or: + IF f = Bool THEN + xval^.intval := BoolToInt(IntToBool(xval^.intval) OR IntToBool(yval^.intval)) + ELSE err(95) + END + | eql: + xval^.intval := BoolToInt(ConstCmp() = eql) + | neq: + xval^.intval := BoolToInt(ConstCmp() # eql) + | lss: + IF f IN {Bool, Set, NilTyp, Pointer} THEN err(108) + ELSE xval^.intval := BoolToInt(ConstCmp() = lss) + END + | leq: + IF f IN {Bool, Set, NilTyp, Pointer} THEN err(108) + ELSE xval^.intval := BoolToInt(ConstCmp() # gtr) + END + | gtr: + IF f IN {Bool, Set, NilTyp, Pointer} THEN err(108) + ELSE xval^.intval := BoolToInt(ConstCmp() = gtr) + END + | geq: + IF f IN {Bool, Set, NilTyp, Pointer} THEN err(108) + ELSE xval^.intval := BoolToInt(ConstCmp() # lss) + END + END + END ConstOp; + + PROCEDURE Convert(VAR x: OPT.Node; typ: OPT.Struct); + VAR node: OPT.Node; f, g: INTEGER; k: LONGINT; r: LONGREAL; + BEGIN f := x^.typ^.form; g := typ^.form; + IF x^.class = Nconst THEN + IF f IN intSet THEN + IF g IN intSet THEN + IF f > g THEN SetIntType(x); + IF x^.typ^.form > g THEN err(203); x^.conval^.intval := 1 END + END + ELSIF g IN realSet THEN x^.conval^.realval := x^.conval^.intval; x^.conval^.intval := OPM.ConstNotAlloc + ELSE (*g = Char*) k := x^.conval^.intval; + IF (0 > k) OR (k > 0FFH) THEN err(220) END + END + ELSIF f IN realSet THEN + IF g IN realSet THEN CheckRealType(g, 203, x^.conval) + ELSE (*g = LInt*) + r := x^.conval^.realval; + IF (r < MIN(LONGINT)) OR (r > MAX(LONGINT)) THEN err(203); r := 1 END ; + x^.conval^.intval := ENTIER(r); SetIntType(x) + END + ELSE (* (f IN {Char, Byte}) & (g IN {Byte} + intSet) OR (f = Undef) *) + END ; + x^.obj := NIL + ELSIF (x^.class = Nmop) & (x^.subcl = conv) & ((x^.left^.typ^.form < f) OR (f > g)) THEN + (* don't create new node *) + IF x^.left^.typ = typ THEN (* and suppress existing node *) x := x^.left END + ELSE node := OPT.NewNode(Nmop); node^.subcl := conv; node^.left := x; x := node + END ; + x^.typ := typ + END Convert; + + PROCEDURE Op*(op: SHORTINT; VAR x: OPT.Node; y: OPT.Node); + VAR f, g: INTEGER; t, z: OPT.Node; typ: OPT.Struct; do: BOOLEAN; val: LONGINT; + + PROCEDURE NewOp(op: SHORTINT; typ: OPT.Struct; VAR x: OPT.Node; y: OPT.Node); + VAR node: OPT.Node; + BEGIN + node := OPT.NewNode(Ndop); node^.subcl := op; node^.typ := typ; + node^.left := x; node^.right := y; x := node + END NewOp; + + PROCEDURE strings(VAR x, y: OPT.Node): BOOLEAN; + VAR ok, xCharArr, yCharArr: BOOLEAN; + BEGIN + xCharArr := ((x^.typ^.comp IN {Array, DynArr}) & (x^.typ^.BaseTyp^.form=Char)) OR (f=String); + yCharArr := (((y^.typ^.comp IN {Array, DynArr}) & (y^.typ^.BaseTyp^.form=Char)) OR (g=String)); + IF xCharArr & (g = Char) & (y^.class = Nconst) THEN CharToString(y); g := String; yCharArr := TRUE END ; + IF yCharArr & (f = Char) & (x^.class = Nconst) THEN CharToString(x); f := String; xCharArr := TRUE END ; + ok := xCharArr & yCharArr; + IF ok THEN (* replace ""-string compare with 0X-char compare, if possible *) + IF (f=String) & (x^.conval^.intval2 = 1) THEN (* y is array of char *) + x^.typ := OPT.chartyp; x^.conval^.intval := 0; + Index(y, NewIntConst(0)) + ELSIF (g=String) & (y^.conval^.intval2 = 1) THEN (* x is array of char *) + y^.typ := OPT.chartyp; y^.conval^.intval := 0; + Index(x, NewIntConst(0)) + END + END ; + RETURN ok + END strings; + + + BEGIN z := x; + IF (z^.class = Ntype) OR (z^.class = Nproc) OR (y^.class = Ntype) OR (y^.class = Nproc) THEN err(126) + ELSIF (z^.class = Nconst) & (y^.class = Nconst) THEN ConstOp(op, z, y); z^.obj := NIL + ELSE + IF z^.typ # y^.typ THEN + g := y^.typ^.form; + CASE z^.typ^.form OF + Char: + IF z^.class = Nconst THEN CharToString(z) ELSE err(100) END + | SInt: + IF g IN intSet + realSet THEN Convert(z, y^.typ) + ELSE err(100) + END + | Int: + IF g = SInt THEN Convert(y, z^.typ) + ELSIF g IN intSet + realSet THEN Convert(z, y^.typ) + ELSE err(100) + END + | LInt: + IF g IN intSet THEN Convert(y, z^.typ) + ELSIF g IN realSet THEN Convert(z, y^.typ) + ELSE err(100) + END + | Real: + IF g IN intSet THEN Convert(y, z^.typ) + ELSIF g IN realSet THEN Convert(z, y^.typ) + ELSE err(100) + END + | LReal: + IF g IN intSet + realSet THEN Convert(y, z^.typ) + ELSIF g IN realSet THEN Convert(y, z^.typ) + ELSE err(100) + END + | NilTyp: + IF ~(g IN {Pointer, ProcTyp}) THEN err(100) END + | Pointer: + CheckPtr(z, y) + | ProcTyp: + IF g # NilTyp THEN err(100) END + | String: + | Comp: + IF z^.typ^.comp = Record THEN err(100) END + ELSE err(100) + END + END ; (* {z^.typ = y^.typ} *) + typ := z^.typ; f := typ^.form; g := y^.typ^.form; + CASE op OF + times: + do := TRUE; + IF f IN intSet THEN + IF z^.class = Nconst THEN val := z^.conval^.intval; + IF val = 1 THEN do := FALSE; z := y + ELSIF val = 0 THEN do := FALSE + ELSIF log(val) = 1 THEN + t := y; y := z; z := t; + op := ash; y^.typ := OPT.sinttyp; y^.conval^.intval := exp; y^.obj := NIL + END + ELSIF y^.class = Nconst THEN val := y^.conval^.intval; + IF val = 1 THEN do := FALSE + ELSIF val = 0 THEN do := FALSE; z := y + ELSIF log(val) = 1 THEN + op := ash; y^.typ := OPT.sinttyp; y^.conval^.intval := exp; y^.obj := NIL + END + END + ELSIF ~(f IN {Undef, Real..Set}) THEN err(105); typ := OPT.undftyp + END ; + IF do THEN NewOp(op, typ, z, y) END + | slash: + IF f IN intSet THEN + IF (y^.class = Nconst) & (y^.conval^.intval = 0) THEN err(205) END ; + Convert(z, OPT.realtyp); Convert(y, OPT.realtyp); + typ := OPT.realtyp + ELSIF f IN realSet THEN + IF (y^.class = Nconst) & (y^.conval^.realval = 0.0) THEN err(205) END + ELSIF (f # Set) & (f # Undef) THEN err(102); typ := OPT.undftyp + END ; + NewOp(op, typ, z, y) + | div: + do := TRUE; + IF f IN intSet THEN + IF y^.class = Nconst THEN val := y^.conval^.intval; + IF val = 0 THEN err(205) + ELSIF val = 1 THEN do := FALSE + ELSIF log(val) = 1 THEN + op := ash; y^.typ := OPT.sinttyp; y^.conval^.intval := -exp; y^.obj := NIL + END + END + ELSIF f # Undef THEN err(103); typ := OPT.undftyp + END ; + IF do THEN NewOp(op, typ, z, y) END + | mod: + IF f IN intSet THEN + IF y^.class = Nconst THEN + IF y^.conval^.intval = 0 THEN err(205) + ELSIF log(y^.conval^.intval) = 1 THEN + op := msk; y^.conval^.intval := ASH(-1, exp); y^.obj := NIL + END + END + ELSIF f # Undef THEN err(104); typ := OPT.undftyp + END ; + NewOp(op, typ, z, y) + | and: + IF f = Bool THEN + IF z^.class = Nconst THEN + IF IntToBool(z^.conval^.intval) THEN z := y END + ELSIF (y^.class = Nconst) & IntToBool(y^.conval^.intval) THEN (* optimize z & TRUE -> z *) + (* ELSIF (y^.class = Nconst) & ~IntToBool(y^.conval^.intval) THEN + don't optimize z & FALSE -> FALSE: side effects possible *) + ELSE NewOp(op, typ, z, y) + END + ELSIF f # Undef THEN err(94); z^.typ := OPT.undftyp + END + | plus: + IF ~(f IN {Undef, SInt..Set}) THEN err(105); typ := OPT.undftyp END ; + do := TRUE; + IF f IN intSet THEN + IF (z^.class = Nconst) & (z^.conval^.intval = 0) THEN do := FALSE; z := y END ; + IF (y^.class = Nconst) & (y^.conval^.intval = 0) THEN do := FALSE END + END ; + IF do THEN NewOp(op, typ, z, y) END + | minus: + IF ~(f IN {Undef, SInt..Set}) THEN err(106); typ := OPT.undftyp END ; + IF ~(f IN intSet) OR (y^.class # Nconst) OR (y^.conval^.intval # 0) THEN NewOp(op, typ, z, y) END + | or: + IF f = Bool THEN + IF z^.class = Nconst THEN + IF ~IntToBool(z^.conval^.intval) THEN z := y END + ELSIF (y^.class = Nconst) & ~IntToBool(y^.conval^.intval) THEN (* optimize z OR FALSE -> z *) + (* ELSIF (y^.class = Nconst) & IntToBool(y^.conval^.intval) THEN + don't optimize z OR TRUE -> TRUE: side effects possible *) + ELSE NewOp(op, typ, z, y) + END + ELSIF f # Undef THEN err(95); z^.typ := OPT.undftyp + END + | eql, neq: + IF (f IN {Undef..Set, NilTyp, Pointer, ProcTyp}) OR strings(z, y) THEN typ := OPT.booltyp + ELSE err(107); typ := OPT.undftyp + END ; + NewOp(op, typ, z, y) + | lss, leq, gtr, geq: + IF (f IN {Undef, Char..LReal}) OR strings(z, y) THEN typ := OPT.booltyp + ELSE err(108); typ := OPT.undftyp + END ; + NewOp(op, typ, z, y) + END + END ; + x := z + END Op; + + PROCEDURE SetRange*(VAR x: OPT.Node; y: OPT.Node); + VAR k, l: LONGINT; + BEGIN + IF (x^.class = Ntype) OR (x^.class = Nproc) OR (y^.class = Ntype) OR (y^.class = Nproc) THEN err(126) + ELSIF (x^.typ^.form IN intSet) & (y^.typ^.form IN intSet) THEN + IF x^.class = Nconst THEN + k := x^.conval^.intval; + IF (0 > k) OR (k > OPM.MaxSet) THEN err(202) END + END ; + IF y^.class = Nconst THEN + l := y^.conval^.intval; + IF (0 > l) OR (l > OPM.MaxSet) THEN err(202) END + END ; + IF (x^.class = Nconst) & (y^.class = Nconst) THEN + IF k <= l THEN + x^.conval^.setval := {k..l} + ELSE err(201); x^.conval^.setval := {l..k} + END ; + x^.obj := NIL + ELSE BindNodes(Nupto, OPT.settyp, x, y) + END + ELSE err(93) + END ; + x^.typ := OPT.settyp + END SetRange; + + PROCEDURE SetElem*(VAR x: OPT.Node); + VAR k: LONGINT; + BEGIN + IF (x^.class = Ntype) OR (x^.class = Nproc) THEN err(126) + ELSIF ~(x^.typ^.form IN intSet) THEN err(93) + ELSIF x^.class = Nconst THEN + k := x^.conval^.intval; + IF (0 <= k) & (k <= OPM.MaxSet) THEN x^.conval^.setval := {k} + ELSE err(202) + END ; + x^.obj := NIL + ELSE Convert(x, OPT.settyp) + END ; + x^.typ := OPT.settyp + END SetElem; + + PROCEDURE CheckAssign(x: OPT.Struct; ynode: OPT.Node); (* x := y *) + VAR f, g: INTEGER; y, p, q: OPT.Struct; + BEGIN + y := ynode^.typ; f := x^.form; g := y^.form; + IF (ynode^.class = Ntype) OR (ynode^.class = Nproc) & (f # ProcTyp) THEN err(126) END ; + CASE f OF + Undef, String: + | Byte: + IF ~(g IN {Byte, Char, SInt}) THEN err(113) END + | Bool, Char, SInt, Set: + IF g # f THEN err(113) END + | Int: + IF ~(g IN {SInt, Int}) THEN err(113) END + | LInt: + IF ~(g IN intSet) THEN err(113) END + | Real: + IF ~(g IN {SInt..Real}) THEN err(113) END + | LReal: + IF ~(g IN {SInt..LReal}) THEN err(113) END + | Pointer: + IF (x = y) OR (g = NilTyp) OR (x = OPT.sysptrtyp) & (g = Pointer) THEN (* ok *) + ELSIF g = Pointer THEN + p := x^.BaseTyp; q := y^.BaseTyp; + IF (p^.comp = Record) & (q^.comp = Record) THEN + WHILE (q # p) & (q # NIL) & (q # OPT.undftyp) DO q := q^.BaseTyp END ; + IF q = NIL THEN err(113) END + ELSE err(113) + END + ELSE err(113) + END + | ProcTyp: + IF ynode^.class = Nproc THEN CheckProc(x, ynode^.obj) + ELSIF (x = y) OR (g = NilTyp) THEN (* ok *) + ELSE err(113) + END + | NoTyp, NilTyp: + err(113) + | Comp: + x^.pvused := TRUE; (* idfp of y guarantees assignment compatibility with x *) + IF x^.comp = Array THEN + IF (ynode^.class = Nconst) & (g = Char) THEN CharToString(ynode); y := ynode^.typ; g := String END ; + IF x = y THEN (* ok *) + ELSIF (g = String) & (x^.BaseTyp = OPT.chartyp) THEN (*check length of string*) + IF ynode^.conval^.intval2 > x^.n THEN err(114) END ; + ELSE err(113) + END + ELSIF x^.comp = Record THEN + IF x = y THEN (* ok *) + ELSIF y^.comp = Record THEN + q := y^.BaseTyp; + WHILE (q # NIL) & (q # x) & (q # OPT.undftyp) DO q := q^.BaseTyp END ; + IF q = NIL THEN err(113) END + ELSE err(113) + END + ELSE (*DynArr*) err(113) + END + END ; + IF (ynode^.class = Nconst) & (g < f) & (g IN {SInt..Real}) & (f IN {Int..LReal}) THEN + Convert(ynode, x) + END + END CheckAssign; + + PROCEDURE CheckLeaf(x: OPT.Node; dynArrToo: BOOLEAN); + BEGIN +(* +avoid unnecessary intermediate variables in voc + + IF (x^.class = Nmop) & (x^.subcl = val) THEN x := x^.left END ; + IF x^.class = Nguard THEN x := x^.left END ; (* skip last (and unique) guard *) + IF (x^.class = Nvar) & (dynArrToo OR (x^.typ^.comp # DynArr)) THEN x^.obj^.leaf := FALSE END +*) + END CheckLeaf; + + PROCEDURE StPar0*(VAR par0: OPT.Node; fctno: INTEGER); (* par0: first param of standard proc *) + VAR f: INTEGER; typ: OPT.Struct; x: OPT.Node; + BEGIN x := par0; f := x^.typ^.form; + CASE fctno OF + haltfn: (*HALT*) + IF (f IN intSet) & (x^.class = Nconst) THEN + IF (OPM.MinHaltNr <= x^.conval^.intval) & (x^.conval^.intval <= OPM.MaxHaltNr) THEN + BindNodes(Ntrap, OPT.notyp, x, x) + ELSE err(218) + END + ELSE err(69) + END ; + x^.typ := OPT.notyp + | newfn: (*NEW*) + typ := OPT.notyp; + IF NotVar(x) THEN err(112) + ELSIF f = Pointer THEN + IF OPM.NEWusingAdr THEN CheckLeaf(x, TRUE) END ; + IF x^.readonly THEN err(76) END ; + f := x^.typ^.BaseTyp^.comp; + IF f IN {Record, DynArr, Array} THEN + IF f = DynArr THEN typ := x^.typ^.BaseTyp END ; + BindNodes(Nassign, OPT.notyp, x, NIL); x^.subcl := newfn + ELSE err(111) + END + ELSE err(111) + END ; + x^.typ := typ + | absfn: (*ABS*) + MOp(abs, x) + | capfn: (*CAP*) + MOp(cap, x) + | ordfn: (*ORD*) + IF (x^.class = Ntype) OR (x^.class = Nproc) THEN err(126) + ELSIF f = Char THEN Convert(x, OPT.inttyp) + ELSE err(111) + END ; + x^.typ := OPT.inttyp + | entierfn: (*ENTIER*) + IF (x^.class = Ntype) OR (x^.class = Nproc) THEN err(126) + ELSIF f IN realSet THEN Convert(x, OPT.linttyp) + ELSE err(111) + END ; + x^.typ := OPT.linttyp + | oddfn: (*ODD*) + MOp(odd, x) + | minfn: (*MIN*) + IF x^.class = Ntype THEN + CASE f OF + Bool: x := NewBoolConst(FALSE) + | Char: x := NewIntConst(0); x^.typ := OPT.chartyp + | SInt: x := NewIntConst(OPM.MinSInt) + | Int: x := NewIntConst(OPM.MinInt) + | LInt: x := NewIntConst(OPM.MinLInt) + | Set: x := NewIntConst(0); x^.typ := OPT.inttyp + | Real: x := NewRealConst(OPM.MinReal, OPT.realtyp) + | LReal: x := NewRealConst(OPM.MinLReal, OPT.lrltyp) + ELSE err(111) + END + ELSE err(110) + END + | maxfn: (*MAX*) + IF x^.class = Ntype THEN + CASE f OF + Bool: x := NewBoolConst(TRUE) + | Char: x := NewIntConst(0FFH); x^.typ := OPT.chartyp + | SInt: x := NewIntConst(OPM.MaxSInt) + | Int: x := NewIntConst(OPM.MaxInt) + | LInt: x := NewIntConst(OPM.MaxLInt) + | Set: x := NewIntConst(OPM.MaxSet); x^.typ := OPT.inttyp + | Real: x := NewRealConst(OPM.MaxReal, OPT.realtyp) + | LReal: x := NewRealConst(OPM.MaxLReal, OPT.lrltyp) + ELSE err(111) + END + ELSE err(110) + END + | chrfn: (*CHR*) + IF (x^.class = Ntype) OR (x^.class = Nproc) THEN err(126) + ELSIF f IN {Undef, SInt..LInt} THEN Convert(x, OPT.chartyp) + ELSE err(111); x^.typ := OPT.chartyp + END + | shortfn: (*SHORT*) + IF (x^.class = Ntype) OR (x^.class = Nproc) THEN err(126) + ELSIF f = Int THEN Convert(x, OPT.sinttyp) + ELSIF f = LInt THEN Convert(x, OPT.inttyp) + ELSIF f = LReal THEN Convert(x, OPT.realtyp) + ELSE err(111) + END + | longfn: (*LONG*) + IF (x^.class = Ntype) OR (x^.class = Nproc) THEN err(126) + ELSIF f = SInt THEN Convert(x, OPT.inttyp) + ELSIF f = Int THEN Convert(x, OPT.linttyp) + ELSIF f = Real THEN Convert(x, OPT.lrltyp) + ELSIF f = Char THEN Convert(x, OPT.linttyp) + ELSE err(111) + END + | incfn, decfn: (*INC, DEC*) + IF NotVar(x) THEN err(112) + ELSIF ~(f IN intSet) THEN err(111) + ELSIF x^.readonly THEN err(76) + END + | inclfn, exclfn: (*INCL, EXCL*) + IF NotVar(x) THEN err(112) + ELSIF x^.typ # OPT.settyp THEN err(111); x^.typ := OPT.settyp + ELSIF x^.readonly THEN err(76) + END + | lenfn: (*LEN*) + IF ~(x^.typ^.comp IN {DynArr, Array}) THEN err(131) END + | copyfn: (*COPY*) + IF (x^.class = Nconst) & (f = Char) THEN CharToString(x); f := String END ; + IF (x^.class = Ntype) OR (x^.class = Nproc) THEN err(126) + ELSIF (~(x^.typ^.comp IN {DynArr, Array}) OR (x^.typ^.BaseTyp^.form # Char)) + & (f # String) THEN err(111) + END + | ashfn: (*ASH*) + IF (x^.class = Ntype) OR (x^.class = Nproc) THEN err(126) + ELSIF f IN intSet THEN + IF f # LInt THEN Convert(x, OPT.linttyp) END + ELSE err(111); x^.typ := OPT.linttyp + END + | adrfn: (*SYSTEM.ADR*) + CheckLeaf(x, FALSE); MOp(adr, x) + | sizefn: (*SIZE*) + IF x^.class # Ntype THEN err(110); x := NewIntConst(1) + ELSIF (f IN {Byte..Set, Pointer, ProcTyp}) OR (x^.typ^.comp IN {Array, Record}) THEN + typSize(x^.typ); x^.typ^.pvused := TRUE; x := NewIntConst(x^.typ^.size) + ELSE err(111); x := NewIntConst(1) + END + | ccfn: (*SYSTEM.CC*) + MOp(cc, x) + | lshfn, rotfn: (*SYSTEM.LSH, SYSTEM.ROT*) + IF (x^.class = Ntype) OR (x^.class = Nproc) THEN err(126) + ELSIF ~(f IN intSet + {Byte, Char, Set}) THEN err(111) + END + | getfn, putfn, bitfn, movefn: (*SYSTEM.GET, SYSTEM.PUT, SYSTEM.BIT, SYSTEM.MOVE*) + IF (x^.class = Ntype) OR (x^.class = Nproc) THEN err(126) + ELSIF (x^.class = Nconst) & (f IN {SInt, Int}) THEN Convert(x, OPT.linttyp) + ELSIF ~(f IN {LInt, Pointer}) THEN err(111); x^.typ := OPT.linttyp + END + | getrfn, putrfn: (*SYSTEM.GETREG, SYSTEM.PUTREG*) + IF (f IN intSet) & (x^.class = Nconst) THEN + IF (x^.conval^.intval < OPM.MinRegNr) OR (x^.conval^.intval > OPM.MaxRegNr) THEN err(220) END + ELSE err(69) + END + | valfn: (*SYSTEM.VAL*) + IF x^.class # Ntype THEN err(110) + ELSIF (f IN {Undef, String, NoTyp}) OR (x^.typ^.comp = DynArr) THEN err(111) + END + | sysnewfn: (*SYSTEM.NEW*) + IF NotVar(x) THEN err(112) + ELSIF f = Pointer THEN + IF OPM.NEWusingAdr THEN CheckLeaf(x, TRUE) END + ELSE err(111) + END + | assertfn: (*ASSERT*) + IF (x^.class = Ntype) OR (x^.class = Nproc) THEN err(126); x := NewBoolConst(FALSE) + ELSIF f # Bool THEN err(120); x := NewBoolConst(FALSE) + ELSE MOp(not, x) + END + END ; + par0 := x + END StPar0; + + PROCEDURE StPar1*(VAR par0: OPT.Node; x: OPT.Node; fctno: SHORTINT); (* x: second parameter of standard proc *) + VAR f, L: INTEGER; typ: OPT.Struct; p, t: OPT.Node; + + PROCEDURE NewOp(class, subcl: SHORTINT; left, right: OPT.Node): OPT.Node; + VAR node: OPT.Node; + BEGIN + node := OPT.NewNode(class); node^.subcl := subcl; + node^.left := left; node^.right := right; RETURN node + END NewOp; + + BEGIN p := par0; f := x^.typ^.form; + CASE fctno OF + incfn, decfn: (*INC DEC*) + IF (x^.class = Ntype) OR (x^.class = Nproc) THEN err(126); p^.typ := OPT.notyp + ELSE + IF x^.typ # p^.typ THEN + IF (x^.class = Nconst) & (f IN intSet) THEN Convert(x, p^.typ) + ELSE err(111) + END + END ; + p := NewOp(Nassign, fctno, p, x); + p^.typ := OPT.notyp + END + | inclfn, exclfn: (*INCL, EXCL*) + IF (x^.class = Ntype) OR (x^.class = Nproc) THEN err(126) + ELSIF f IN intSet THEN + IF (x^.class = Nconst) & ((0 > x^.conval^.intval) OR (x^.conval^.intval > OPM.MaxSet)) THEN err(202) + END ; + p := NewOp(Nassign, fctno, p, x) + ELSE err(111) + END ; + p^.typ := OPT.notyp + | lenfn: (*LEN*) + IF ~(f IN intSet) OR (x^.class # Nconst) THEN err(69) + ELSIF f = SInt THEN + L := SHORT(x^.conval^.intval); typ := p^.typ; + WHILE (L > 0) & (typ^.comp IN {DynArr, Array}) DO typ := typ^.BaseTyp; DEC(L) END ; + IF (L # 0) OR ~(typ^.comp IN {DynArr, Array}) THEN err(132) + ELSE x^.obj := NIL; + IF typ^.comp = DynArr THEN + WHILE p^.class = Nindex DO p := p^.left; INC(x^.conval^.intval) END ; (* possible side effect ignored *) + p := NewOp(Ndop, len, p, x); p^.typ := OPT.linttyp + ELSE p := x; p^.conval^.intval := typ^.n; SetIntType(p) + END + END + ELSE err(132) + END + | copyfn: (*COPY*) + IF NotVar(x) THEN err(112) + ELSIF (x^.typ^.comp IN {Array, DynArr}) & (x^.typ^.BaseTyp^.form = Char) THEN + IF x^.readonly THEN err(76) END ; + t := x; x := p; p := t; p := NewOp(Nassign, copyfn, p, x) + ELSE err(111) + END ; + p^.typ := OPT.notyp + | ashfn: (*ASH*) + IF (x^.class = Ntype) OR (x^.class = Nproc) THEN err(126) + ELSIF f IN intSet THEN + IF (p^.class = Nconst) & (x^.class = Nconst) THEN + IF (-maxExp > x^.conval^.intval) OR (x^.conval^.intval > maxExp) THEN err(208); p^.conval^.intval := 1 + ELSIF x^.conval^.intval >= 0 THEN + IF ABS(p^.conval^.intval) <= MAX(LONGINT) DIV ASH(1, x^.conval^.intval) THEN + p^.conval^.intval := p^.conval^.intval * ASH(1, x^.conval^.intval) + ELSE err(208); p^.conval^.intval := 1 + END + ELSE p^.conval^.intval := ASH(p^.conval^.intval, x^.conval^.intval) + END ; + p^.obj := NIL + ELSE p := NewOp(Ndop, ash, p, x); p^.typ := OPT.linttyp + END + ELSE err(111) + END + | newfn: (*NEW(p, x...)*) + IF (x^.class = Ntype) OR (x^.class = Nproc) THEN err(126) + ELSIF p^.typ^.comp = DynArr THEN + IF f IN intSet THEN + IF (x^.class = Nconst) & ((x^.conval^.intval <= 0) OR (x^.conval^.intval > OPM.MaxIndex)) THEN err(63) END + ELSE err(111) + END ; + p^.right := x; p^.typ := p^.typ^.BaseTyp + ELSE err(64) + END + | lshfn, rotfn: (*SYSTEM.LSH, SYSTEM.ROT*) + IF (x^.class = Ntype) OR (x^.class = Nproc) THEN err(126) + ELSIF ~(f IN intSet) THEN err(111) + ELSE + IF fctno = lshfn THEN p := NewOp(Ndop, lsh, p, x) ELSE p := NewOp(Ndop, rot, p, x) END ; + p^.typ := p^.left^.typ + END + | getfn, putfn, getrfn, putrfn: (*SYSTEM.GET, SYSTEM.PUT, SYSTEM.GETREG, SYSTEM.PUTREG*) + IF (x^.class = Ntype) OR (x^.class = Nproc) THEN err(126) + ELSIF f IN {Undef..Set, Pointer, ProcTyp} THEN + IF (fctno = getfn) OR (fctno = getrfn) THEN + IF NotVar(x) THEN err(112) END ; + t := x; x := p; p := t + END ; + p := NewOp(Nassign, fctno, p, x) + ELSE err(111) + END ; + p^.typ := OPT.notyp + | bitfn: (*SYSTEM.BIT*) + IF (x^.class = Ntype) OR (x^.class = Nproc) THEN err(126) + ELSIF f IN intSet THEN + p := NewOp(Ndop, bit, p, x) + ELSE err(111) + END ; + p^.typ := OPT.booltyp + | valfn: (*SYSTEM.VAL*) (* type is changed without considering the byte ordering on the target machine *) + IF (x^.class = Ntype) OR (x^.class = Nproc) OR + (f IN {Undef, String, NoTyp}) OR (x^.typ^.comp = DynArr) THEN err(126) + END ; + t := OPT.NewNode(Nmop); t^.subcl := val; t^.left := x; x := t; +(* + IF (x^.class >= Nconst) OR ((f IN realSet) # (p^.typ^.form IN realSet)) THEN + t := OPT.NewNode(Nmop); t^.subcl := val; t^.left := x; x := t + ELSE x^.readonly := FALSE + END ; +*) + x^.typ := p^.typ; p := x + | sysnewfn: (*SYSTEM.NEW*) + IF (x^.class = Ntype) OR (x^.class = Nproc) THEN err(126) + ELSIF f IN intSet THEN + p := NewOp(Nassign, sysnewfn, p, x) + ELSE err(111) + END ; + p^.typ := OPT.notyp + | movefn: (*SYSTEM.MOVE*) + IF (x^.class = Ntype) OR (x^.class = Nproc) THEN err(126) + ELSIF (x^.class = Nconst) & (f IN {SInt, Int}) THEN Convert(x, OPT.linttyp) + ELSIF ~(f IN {LInt, Pointer}) THEN err(111); x^.typ := OPT.linttyp + END ; + p^.link := x + | assertfn: (*ASSERT*) + IF (f IN intSet) & (x^.class = Nconst) THEN + IF (OPM.MinHaltNr <= x^.conval^.intval) & (x^.conval^.intval <= OPM.MaxHaltNr) THEN + BindNodes(Ntrap, OPT.notyp, x, x); + x^.conval := OPT.NewConst(); x^.conval^.intval := OPM.errpos; + Construct(Nif, p, x); p^.conval := OPT.NewConst(); p^.conval^.intval := OPM.errpos; + Construct(Nifelse, p, NIL); OptIf(p); + IF p = NIL THEN (* ASSERT(TRUE) *) + ELSIF p^.class = Ntrap THEN err(99) + ELSE p^.subcl := assertfn + END + ELSE err(218) + END + ELSE err(69) + END + ELSE err(64) + END ; + par0 := p + END StPar1; + + PROCEDURE StParN*(VAR par0: OPT.Node; x: OPT.Node; fctno, n: INTEGER); (* x: n+1-th param of standard proc *) + VAR node: OPT.Node; f: INTEGER; p: OPT.Node; + BEGIN p := par0; f := x^.typ^.form; + IF fctno = newfn THEN (*NEW(p, ..., x...*) + IF (x^.class = Ntype) OR (x^.class = Nproc) THEN err(126) + ELSIF p^.typ^.comp # DynArr THEN err(64) + ELSIF f IN intSet THEN + IF (x^.class = Nconst) & ((x^.conval^.intval <= 0) OR (x^.conval^.intval > OPM.MaxIndex)) THEN err(63) END ; + node := p^.right; WHILE node^.link # NIL DO node := node^.link END; + node^.link := x; p^.typ := p^.typ^.BaseTyp + ELSE err(111) + END + ELSIF (fctno = movefn) & (n = 2) THEN (*SYSTEM.MOVE*) + IF (x^.class = Ntype) OR (x^.class = Nproc) THEN err(126) + ELSIF f IN intSet THEN + node := OPT.NewNode(Nassign); node^.subcl := movefn; node^.right := p; + node^.left := p^.link; p^.link := x; p := node + ELSE err(111) + END ; + p^.typ := OPT.notyp + ELSE err(64) + END ; + par0 := p + END StParN; + + PROCEDURE StFct*(VAR par0: OPT.Node; fctno: SHORTINT; parno: INTEGER); + VAR dim: INTEGER; x, p: OPT.Node; + BEGIN p := par0; + IF fctno <= ashfn THEN + IF (fctno = newfn) & (p^.typ # OPT.notyp) THEN + IF p^.typ^.comp = DynArr THEN err(65) END ; + p^.typ := OPT.notyp + ELSIF fctno <= sizefn THEN (* 1 param *) + IF parno < 1 THEN err(65) END + ELSE (* more than 1 param *) + IF ((fctno = incfn) OR (fctno = decfn)) & (parno = 1) THEN (*INC, DEC*) + BindNodes(Nassign, OPT.notyp, p, NewIntConst(1)); p^.subcl := fctno; p^.right^.typ := p^.left^.typ + ELSIF (fctno = lenfn) & (parno = 1) THEN (*LEN*) + IF p^.typ^.comp = DynArr THEN dim := 0; + WHILE p^.class = Nindex DO p := p^.left; INC(dim) END ; (* possible side effect ignored *) + BindNodes(Ndop, OPT.linttyp, p, NewIntConst(dim)); p^.subcl := len + ELSE + p := NewIntConst(p^.typ^.n) + END + ELSIF parno < 2 THEN err(65) + END + END + ELSIF fctno = assertfn THEN + IF parno = 1 THEN x := NIL; + BindNodes(Ntrap, OPT.notyp, x, NewIntConst(AssertTrap)); + x^.conval := OPT.NewConst(); x^.conval^.intval := OPM.errpos; + Construct(Nif, p, x); p^.conval := OPT.NewConst(); p^.conval^.intval := OPM.errpos; + Construct(Nifelse, p, NIL); OptIf(p); + IF p = NIL THEN (* ASSERT(TRUE) *) + ELSIF p^.class = Ntrap THEN err(99) + ELSE p^.subcl := assertfn + END + ELSIF parno < 1 THEN err(65) + END + ELSE (*SYSTEM*) + IF (parno < 1) OR + (fctno > ccfn) & (parno < 2) OR + (fctno = movefn) & (parno < 3) THEN err(65) + END + END ; + par0 := p + END StFct; + + PROCEDURE DynArrParCheck(ftyp, atyp: OPT.Struct; fvarpar: BOOLEAN); + VAR f: INTEGER; + BEGIN (* ftyp^.comp = DynArr *) + f := atyp^.comp; ftyp := ftyp^.BaseTyp; atyp := atyp^.BaseTyp; + IF fvarpar & (ftyp = OPT.bytetyp) THEN (* ok, but ... *) + IF ~(f IN {Array, DynArr}) OR ~(atyp^.form IN {Byte..SInt}) THEN err(-301) END (* ... warning 301 *) + ELSIF f IN {Array, DynArr} THEN + IF ftyp^.comp = DynArr THEN DynArrParCheck(ftyp, atyp, fvarpar) + ELSIF ftyp # atyp THEN + IF ~fvarpar & (ftyp.form = Pointer) & (atyp.form = Pointer) THEN + ftyp := ftyp^.BaseTyp; atyp := atyp^.BaseTyp; + IF (ftyp^.comp = Record) & (atyp^.comp = Record) THEN + WHILE (ftyp # atyp) & (atyp # NIL) & (atyp # OPT.undftyp) DO atyp := atyp^.BaseTyp END ; + IF atyp = NIL THEN err(113) END + ELSE err(66) + END + ELSE err(66) + END + END ; + ELSE err(67) + END + END DynArrParCheck; + + PROCEDURE CheckReceiver(VAR x: OPT.Node; fp: OPT.Object); + BEGIN + IF fp^.typ^.form = Pointer THEN + IF x^.class = Nderef THEN x := x^.left (*undo DeRef*) ELSE (*x^.typ^.comp = Record*) err(71) END + END + END CheckReceiver; + + PROCEDURE PrepCall*(VAR x: OPT.Node; VAR fpar: OPT.Object); + BEGIN + IF (x^.obj # NIL) & (x^.obj^.mode IN {LProc, XProc, TProc, CProc}) THEN + fpar := x^.obj^.link; + IF x^.obj^.mode = TProc THEN CheckReceiver(x^.left, fpar); fpar := fpar^.link END + ELSIF (x^.class # Ntype) & (x^.typ # NIL) & (x^.typ^.form = ProcTyp) THEN + fpar := x^.typ^.link + ELSE err(121); fpar := NIL; x^.typ := OPT.undftyp + END + END PrepCall; + + PROCEDURE Param*(ap: OPT.Node; fp: OPT.Object); + VAR q: OPT.Struct; + BEGIN + IF fp.typ.form # Undef THEN + IF fp^.mode = VarPar THEN + IF NotVar(ap) THEN err(122) + ELSE CheckLeaf(ap, FALSE) + END ; + IF ap^.readonly THEN err(76) END ; + IF fp^.typ^.comp = DynArr THEN DynArrParCheck(fp^.typ, ap^.typ, TRUE) + ELSIF (fp^.typ^.comp = Record) & (ap^.typ^.comp = Record) THEN + q := ap^.typ; + WHILE (q # fp^.typ) & (q # NIL) & (q # OPT.undftyp) DO q := q^.BaseTyp END ; + IF q = NIL THEN err(111) END + ELSIF (fp^.typ = OPT.sysptrtyp) & (ap^.typ^.form = Pointer) THEN (* ok *) + ELSIF (ap^.typ # fp^.typ) & ~((fp^.typ^.form = Byte) & (ap^.typ^.form IN {Char, SInt})) THEN err(123) + ELSIF (fp^.typ^.form = Pointer) & (ap^.class = Nguard) THEN err(123) + END + ELSIF fp^.typ^.comp = DynArr THEN + IF (ap^.class = Nconst) & (ap^.typ^.form = Char) THEN CharToString(ap) END ; + IF (ap^.typ^.form = String) & (fp^.typ^.BaseTyp^.form = Char) THEN (* ok *) + ELSIF ap^.class >= Nconst THEN err(59) + ELSE DynArrParCheck(fp^.typ, ap^.typ, FALSE) + END + ELSE CheckAssign(fp^.typ, ap) + END + END + END Param; + + PROCEDURE StaticLink*(dlev: SHORTINT); + VAR scope: OPT.Object; + BEGIN + scope := OPT.topScope; + WHILE dlev > 0 DO DEC(dlev); + INCL(scope^.link^.conval^.setval, slNeeded); + scope := scope^.left + END + END StaticLink; + + PROCEDURE Call*(VAR x: OPT.Node; apar: OPT.Node; fp: OPT.Object); + VAR typ: OPT.Struct; p: OPT.Node; lev: SHORTINT; + BEGIN + IF x^.class = Nproc THEN typ := x^.typ; + lev := x^.obj^.mnolev; + IF lev > 0 THEN StaticLink(OPT.topScope^.mnolev-lev) END ; + IF x^.obj^.mode = IProc THEN err(121) END + ELSIF (x^.class = Nfield) & (x^.obj^.mode = TProc) THEN typ := x^.typ; + x^.class := Nproc; p := x^.left; x^.left := NIL; p^.link := apar; apar := p; fp := x^.obj^.link + ELSE typ := x^.typ^.BaseTyp + END ; + BindNodes(Ncall, typ, x, apar); x^.obj := fp + END Call; + + PROCEDURE Enter*(VAR procdec: OPT.Node; stat: OPT.Node; proc: OPT.Object); + VAR x: OPT.Node; + BEGIN + x := OPT.NewNode(Nenter); x^.typ := OPT.notyp; x^.obj := proc; + x^.left := procdec; x^.right := stat; procdec := x + END Enter; + + PROCEDURE Return*(VAR x: OPT.Node; proc: OPT.Object); + VAR node: OPT.Node; + BEGIN + IF proc = NIL THEN (* return from module *) + IF x # NIL THEN err(124) END + ELSE + IF x # NIL THEN CheckAssign(proc^.typ, x) + ELSIF proc^.typ # OPT.notyp THEN err(124) + END + END ; + node := OPT.NewNode(Nreturn); node^.typ := OPT.notyp; node^.obj := proc; node^.left := x; x := node + END Return; + + PROCEDURE Assign*(VAR x: OPT.Node; y: OPT.Node); + VAR z: OPT.Node; + BEGIN + IF x^.class >= Nconst THEN err(56) END ; + CheckAssign(x^.typ, y); + IF x^.readonly THEN err(76) END ; + IF x^.typ^.comp = Record THEN + IF x^.class = Nguard THEN z := x^.left ELSE z := x END ; + IF (z^.class = Nderef) & (z^.left^.class = Nguard) THEN + z^.left := z^.left^.left (* skip guard before dereferencing *) + END ; + IF (x^.typ^.strobj # NIL) & ((z^.class = Nderef) OR (z^.class = Nvarpar)) THEN + BindNodes(Neguard, x^.typ, z, NIL); x := z + END + ELSIF (x^.typ^.comp = Array) & (x^.typ^.BaseTyp = OPT.chartyp) & + (y^.typ^.form = String) & (y^.conval^.intval2 = 1) THEN (* replace array := "" with array[0] := 0X *) + y^.typ := OPT.chartyp; y^.conval^.intval := 0; + Index(x, NewIntConst(0)) + END ; + BindNodes(Nassign, OPT.notyp, x, y); x^.subcl := assign + END Assign; + + PROCEDURE Inittd*(VAR inittd, last: OPT.Node; typ: OPT.Struct); + VAR node: OPT.Node; + BEGIN + node := OPT.NewNode(Ninittd); node^.typ := typ; + node^.conval := OPT.NewConst(); node^.conval^.intval := typ^.txtpos; + IF inittd = NIL THEN inittd := node ELSE last^.link := node END ; + last := node + END Inittd; + +BEGIN + maxExp := log(MAX(LONGINT) DIV 2 + 1); maxExp := exp +END OPB. diff --git a/src/voc/OPC.Mod b/src/voc/OPC.Mod new file mode 100644 index 00000000..bac5ce80 --- /dev/null +++ b/src/voc/OPC.Mod @@ -0,0 +1,1378 @@ +MODULE OPC; (* copyright (c) J. Templ 12.7.95 / 3.7.96 *) +(* C source code generator version + + 30.4.2000 jt, synchronized with BlackBox version, in particular + various promotion rules changed (long) => (LONGINT), xxxL avoided +*) + + IMPORT OPT, OPM, version; + + CONST demoVersion = FALSE; + + CONST + (* structure forms *) + Byte = 1; Bool = 2; Char = 3; SInt = 4; Int = 5; LInt = 6; + Real = 7; LReal = 8; Set = 9; String = 10; NilTyp = 11; NoTyp = 12; + Pointer = 13; ProcTyp = 14; Comp = 15; + + (* composite structure forms *) + Array = 2; DynArr = 3; Record = 4; + + (* object history *) + removed = 4; + + (* object modes *) + Var = 1; VarPar = 2; Fld = 4; Typ = 5; LProc = 6; XProc = 7; + CProc = 9; Mod = 11; TProc = 13; + + (* symbol values and ops *) + eql = 9; neq = 10; lss = 11; leq = 12; gtr = 13; geq = 14; + + (* nodes classes *) + Ninittd = 14; + + (* module visibility of objects *) + internal = 0; external = 1; + + UndefinedType = 0; (* named type not yet defined *) + ProcessingType = 1; (* pointer type is being processed *) + PredefinedType = 2; (* for all predefined types *) + DefinedInHdr = 3+OPM.HeaderFile; (* named type has been defined in header file *) + DefinedInBdy = 3+OPM.BodyFile; (* named type has been defined in body file *) + + + HeaderMsg = " voc "; + BasicIncludeFile = "SYSTEM"; + Static = "static "; + Export = "export "; (* particularily introduced for VC++ declspec() *) + Extern = "import "; (* particularily introduced for VC++ declspec() *) + Struct = "struct "; + LocalScope = "_s"; (* name of a local intermediate scope (variable name) *) + GlobalScope = "_s"; (* pointer to current scope extension *) + LinkName = "lnk"; (* pointer to previous scope field *) + FlagExt = "__h"; + LenExt = "__len"; + DynTypExt = "__typ"; + TagExt = "__typ"; + + OpenParen = "("; + CloseParen = ")"; + OpenBrace = "{"; + CloseBrace = "}"; + OpenBracket = "["; + CloseBracket = "]"; + Underscore = "_"; + Quotes = 22X; + SingleQuote = 27X; + Tab = 9X; + Colon = ": "; + Semicolon = ";"; + Comma = ", "; + Becomes = " = "; + Star = "*"; + Blank = " "; + Dot = "."; + + DupFunc = "__DUP("; (* duplication of dynamic arrays *) + DupArrFunc = "__DUPARR("; (* duplication of fixed size arrays *) + DelFunc = "__DEL("; (* removal of dynamic arrays *) + + NilConst = "NIL"; + + VoidType = "void"; + CaseStat = "case "; + + VAR + indentLevel: INTEGER; + ptrinit, mainprog, ansi: BOOLEAN; + hashtab: ARRAY 105 OF SHORTINT; + keytab: ARRAY 36, 9 OF CHAR; + GlbPtrs: BOOLEAN; + BodyNameExt: ARRAY 13 OF CHAR; + + PROCEDURE Init*; + BEGIN + indentLevel := 0; + ptrinit := OPM.ptrinit IN OPM.opt; + mainprog := OPM.mainprog IN OPM.opt; + ansi := OPM.ansi IN OPM.opt; + IF ansi THEN BodyNameExt := "__init(void)" ELSE BodyNameExt := "__init()" END + END Init; + + PROCEDURE Indent* (count: INTEGER); + BEGIN INC(indentLevel, count) + END Indent; + + PROCEDURE BegStat*; + VAR i: INTEGER; + BEGIN i := indentLevel; + WHILE i > 0 DO OPM.Write(Tab); DEC (i) END + END BegStat; + + PROCEDURE EndStat*; + BEGIN OPM.Write(Semicolon); OPM.WriteLn + END EndStat; + + PROCEDURE BegBlk*; + BEGIN OPM.Write(OpenBrace); OPM.WriteLn; INC(indentLevel) + END BegBlk; + + PROCEDURE EndBlk*; + BEGIN DEC(indentLevel); BegStat; OPM.Write(CloseBrace); OPM.WriteLn + END EndBlk; + + PROCEDURE EndBlk0*; + BEGIN DEC(indentLevel); BegStat; OPM.Write(CloseBrace) + END EndBlk0; + + PROCEDURE Str1(s: ARRAY OF CHAR; x: LONGINT); + VAR ch: CHAR; i: INTEGER; + BEGIN ch := s[0]; i := 0; + WHILE ch # 0X DO + IF ch = "#" THEN OPM.WriteInt(x) + ELSE OPM.Write(ch); + END ; + INC(i); ch := s[i] + END + END Str1; + + PROCEDURE Length(VAR s: ARRAY OF CHAR): INTEGER; + VAR i: INTEGER; + BEGIN i := 0; + WHILE s[i] # 0X DO INC(i) END ; + RETURN i + END Length; + + PROCEDURE PerfectHash (VAR s: ARRAY OF CHAR): INTEGER; + VAR i, h: INTEGER; + BEGIN i := 0; h := 0; + WHILE (s[i] # 0X) & (i < 5) DO h := 3*h + ORD(s[i]); INC(i) END; + RETURN h MOD 105 + END PerfectHash; + + PROCEDURE Ident* (obj: OPT.Object); + VAR mode, level, h: INTEGER; + BEGIN + mode := obj^.mode; level := obj^.mnolev; + IF (mode IN {Var, Typ, LProc}) & (level > 0) OR (mode IN {Fld, VarPar}) THEN + OPM.WriteStringVar(obj^.name); + h := PerfectHash(obj^.name); + IF hashtab[h] >= 0 THEN + IF keytab[hashtab[h]] = obj^.name THEN OPM.Write(Underscore) END + END + ELSE + IF (mode # Typ) OR (obj^.linkadr # PredefinedType) THEN + IF mode = TProc THEN Ident(obj^.link^.typ^.strobj) + ELSIF level < 0 THEN (* use unaliased module name *) + OPM.WriteStringVar(OPT.GlbMod[-level].name); + IF OPM.currFile = OPM.HeaderFile THEN OPT.GlbMod[-level].vis := 1 (*include in header file*) END ; + ELSE OPM.WriteStringVar(OPM.modName) + END ; + OPM.Write(Underscore) + ELSIF (obj = OPT.sysptrtyp^.strobj) OR (obj = OPT.bytetyp^.strobj) THEN + OPM.WriteString("SYSTEM_") + END ; + OPM.WriteStringVar(obj^.name) + END + END Ident; + + PROCEDURE Stars (typ: OPT.Struct; VAR openClause: BOOLEAN); + VAR pointers: INTEGER; + BEGIN + openClause := FALSE; + IF ((typ^.strobj = NIL) OR (typ^.strobj^.name = "")) & (typ^.comp # Record) THEN + IF typ^.comp IN {Array, DynArr} THEN + Stars (typ^.BaseTyp, openClause); + openClause := (typ^.comp = Array) + ELSIF typ^.form = ProcTyp THEN + OPM.Write(OpenParen); OPM.Write(Star) + ELSE + pointers := 0; + WHILE (typ^.strobj = NIL) & (typ^.form = Pointer) DO INC (pointers); typ := typ^.BaseTyp END ; + IF typ^.comp # DynArr THEN Stars (typ, openClause) END ; + IF pointers > 0 THEN + IF openClause THEN OPM.Write(OpenParen); openClause := FALSE END ; + WHILE pointers > 0 DO OPM.Write(Star); DEC (pointers) END + END + END + END + END Stars; + + PROCEDURE ^AnsiParamList (obj: OPT.Object; showParamNames: BOOLEAN); + + PROCEDURE DeclareObj(dcl: OPT.Object; scopeDef: BOOLEAN); + VAR + typ: OPT.Struct; + varPar, openClause: BOOLEAN; form, comp: INTEGER; + BEGIN + typ := dcl^.typ; + varPar := ((dcl^.mode = VarPar) & (typ^.comp # Array)) OR (typ^.comp = DynArr) OR scopeDef; + Stars(typ, openClause); + IF varPar THEN + IF openClause THEN OPM.Write(OpenParen) END ; + OPM.Write(Star) + END ; + IF dcl.name # "" THEN Ident(dcl) END ; + IF varPar & openClause THEN OPM.Write(CloseParen) END ; + openClause := FALSE; + LOOP + form := typ^.form; + comp := typ^.comp; + IF ((typ^.strobj # NIL) & (typ^.strobj^.name # "")) OR (form = NoTyp) OR (comp = Record) THEN EXIT + ELSIF (form = Pointer) & (typ^.BaseTyp^.comp # DynArr) THEN + openClause := TRUE + ELSIF (form = ProcTyp) OR (comp IN {Array, DynArr}) THEN + IF openClause THEN OPM.Write(CloseParen); openClause := FALSE END ; + IF form = ProcTyp THEN + IF ansi THEN OPM.Write(")"); AnsiParamList(typ^.link, FALSE) + ELSE OPM.WriteString(")()") + END ; + EXIT + ELSIF comp = Array THEN + OPM.Write(OpenBracket); OPM.WriteInt(typ^.n); OPM.Write(CloseBracket) + END + ELSE + EXIT + END ; + typ := typ^.BaseTyp + END + END DeclareObj; + + PROCEDURE Andent*(typ: OPT.Struct); (* ident of possibly anonymous record type *) + BEGIN + IF (typ^.strobj = NIL) OR (typ^.align >= 10000H) THEN + OPM.WriteStringVar(OPM.modName); Str1("__#", typ^.align DIV 10000H) + ELSE Ident(typ^.strobj) + END + END Andent; + + PROCEDURE Undefined(obj: OPT.Object): BOOLEAN; + BEGIN + (* imported anonymous types have obj^.name = ""; used e.g. for repeating inherited fields *) + RETURN (obj^.mnolev >= 0) & (obj^.linkadr # 3+OPM.currFile ) & (obj^.linkadr # PredefinedType) OR (obj^.name = "") + END Undefined; + + PROCEDURE ^FieldList (typ: OPT.Struct; last: BOOLEAN; VAR off, n, curAlign: LONGINT); + + PROCEDURE DeclareBase(dcl: OPT.Object); (* declare the specifier of object dcl*) + VAR typ, prev: OPT.Struct; obj: OPT.Object; nofdims: INTEGER; off, n, dummy: LONGINT; + BEGIN + typ := dcl^.typ; prev := typ; + WHILE ((typ^.strobj = NIL) OR (typ^.comp = DynArr) OR Undefined(typ^.strobj)) & (typ^.comp # Record) & (typ^.form # NoTyp) + & ~((typ^.form = Pointer) & (typ^.BaseTyp^.comp = DynArr)) DO + prev := typ; typ := typ^.BaseTyp + END ; + obj := typ^.strobj; + IF typ^.form = NoTyp THEN (* proper procedure *) + OPM.WriteString(VoidType) + ELSIF (obj # NIL) & ~Undefined(obj) THEN (* named type, already declared *) + Ident(obj) + ELSIF typ^.comp = Record THEN + OPM.WriteString(Struct); Andent(typ); + IF (prev.form # Pointer) & ((obj # NIL) OR (dcl.name = "")) THEN + (* named record type not yet declared OR anonymous record with empty name *) + IF (typ^.BaseTyp # NIL) & (typ^.BaseTyp^.strobj.vis # internal) THEN + OPM.WriteString(" { /* "); Ident(typ^.BaseTyp^.strobj); OPM.WriteString(" */"); OPM.WriteLn; Indent(1) + ELSE OPM.Write(Blank); BegBlk + END ; + FieldList(typ, TRUE, off, n, dummy); + EndBlk0 + END + ELSIF (typ^.form = Pointer) & (typ^.BaseTyp^.comp = DynArr) THEN + typ := typ^.BaseTyp^.BaseTyp; nofdims := 1; + WHILE typ^.comp = DynArr DO INC(nofdims); typ := typ^.BaseTyp END ; + OPM.WriteString(Struct); BegBlk; + BegStat; Str1("LONGINT len[#]", nofdims); EndStat; + BegStat; NEW(obj); NEW(obj.typ); (* aux. object for easy declaration *) + obj.typ.form := Comp; obj.typ.comp := Array; obj.typ.n := 1; obj.typ.BaseTyp := typ; obj.mode := Fld; obj.name := "data"; + obj.linkadr := UndefinedType; DeclareBase(obj); OPM.Write(Blank); DeclareObj(obj, FALSE); + EndStat; EndBlk0 + END + END DeclareBase; + + PROCEDURE NofPtrs* (typ: OPT.Struct): LONGINT; + VAR fld: OPT.Object; btyp: OPT.Struct; n: LONGINT; + BEGIN + IF (typ^.form = Pointer) & (typ^.sysflag = 0) THEN RETURN 1 + ELSIF (typ^.comp = Record) & (typ^.sysflag MOD 100H = 0) THEN + btyp := typ^.BaseTyp; + IF btyp # NIL THEN n := NofPtrs(btyp) ELSE n := 0 END ; + fld := typ^.link; + WHILE (fld # NIL) & (fld^.mode = Fld) DO + IF fld^.name # OPM.HdPtrName THEN n := n + NofPtrs(fld^.typ) + ELSE INC(n) + END ; + fld := fld^.link + END ; + RETURN n + ELSIF typ^.comp = Array THEN + btyp := typ^.BaseTyp; n := typ^.n; + WHILE btyp^.comp = Array DO n := btyp^.n * n; btyp := btyp^.BaseTyp END ; + RETURN NofPtrs(btyp) * n + ELSE RETURN 0 + END + END NofPtrs; + + PROCEDURE PutPtrOffsets (typ: OPT.Struct; adr: LONGINT; VAR cnt: LONGINT); + VAR fld: OPT.Object; btyp: OPT.Struct; n, i: LONGINT; + BEGIN + IF (typ^.form = Pointer) & (typ^.sysflag = 0) THEN + OPM.WriteInt(adr); OPM.WriteString(", "); INC(cnt); + IF cnt MOD 16 = 0 THEN OPM.WriteLn; OPM.Write(Tab) END + ELSIF (typ^.comp = Record) & (typ^.sysflag MOD 100H = 0) THEN + btyp := typ^.BaseTyp; + IF btyp # NIL THEN PutPtrOffsets(btyp, adr, cnt) END ; + fld := typ^.link; + WHILE (fld # NIL) & (fld^.mode = Fld) DO + IF fld^.name # OPM.HdPtrName THEN PutPtrOffsets(fld^.typ, adr + fld^.adr, cnt) + ELSE + OPM.WriteInt(adr + fld^.adr); OPM.WriteString(", "); INC(cnt); + IF cnt MOD 16 = 0 THEN OPM.WriteLn; OPM.Write(Tab) END + END ; + fld := fld^.link + END + ELSIF typ^.comp = Array THEN + btyp := typ^.BaseTyp; n := typ^.n; + WHILE btyp^.comp = Array DO n := btyp^.n * n; btyp := btyp^.BaseTyp END ; + IF NofPtrs(btyp) > 0 THEN i := 0; + WHILE i < n DO PutPtrOffsets(btyp, adr + i * btyp^.size, cnt); INC(i) END + END + END + END PutPtrOffsets; + + PROCEDURE InitTProcs(typ, obj: OPT.Object); + BEGIN + IF obj # NIL THEN + InitTProcs(typ, obj^.left); + IF obj^.mode = TProc THEN + BegStat; + OPM.WriteString("__INITBP("); + Ident(typ); OPM.WriteString(Comma); Ident(obj); + Str1(", #)", obj^.adr DIV 10000H); + EndStat + END ; + InitTProcs(typ, obj^.right) + END + END InitTProcs; + + PROCEDURE PutBase(typ: OPT.Struct); + BEGIN + IF typ # NIL THEN + PutBase(typ^.BaseTyp); + Ident(typ^.strobj); OPM.WriteString(DynTypExt); OPM.WriteString(", ") + END + END PutBase; + + PROCEDURE LenList(par: OPT.Object; ansiDefine, showParamName: BOOLEAN); + VAR typ: OPT.Struct; dim: INTEGER; + BEGIN + IF showParamName THEN Ident(par); OPM.WriteString(LenExt) END ; + dim := 1; typ := par^.typ^.BaseTyp; + WHILE typ^.comp = DynArr DO + IF ansiDefine THEN OPM.WriteString(", LONGINT ") ELSE OPM.WriteString(Comma) END ; + IF showParamName THEN Ident(par); OPM.WriteString(LenExt); OPM.WriteInt(dim) END ; + typ := typ^.BaseTyp; INC(dim) + END + END LenList; + + PROCEDURE DeclareParams(par: OPT.Object; macro: BOOLEAN); + BEGIN + OPM.Write(OpenParen); + WHILE par # NIL DO + IF macro THEN OPM.WriteStringVar(par.name) + ELSE + IF (par^.mode = Var) & (par^.typ^.form = Real) THEN OPM.Write("_") END ; + Ident(par) + END ; + IF par^.typ^.comp = DynArr THEN + OPM.WriteString(Comma); LenList(par, FALSE, TRUE); + ELSIF (par^.mode = VarPar) & (par^.typ^.comp = Record) THEN + OPM.WriteString(Comma); OPM.WriteStringVar(par.name); OPM.WriteString(TagExt) + END ; + par := par^.link; + IF par # NIL THEN OPM.WriteString(Comma) END + END ; + OPM.Write(CloseParen) + END DeclareParams; + + PROCEDURE ^DefineType(str: OPT.Struct); + PROCEDURE ^ProcHeader(proc: OPT.Object; define: BOOLEAN); + + PROCEDURE DefineTProcTypes(obj: OPT.Object); (* define all types that are used in a TProc definition *) + VAR par: OPT.Object; + BEGIN + IF obj^.typ # OPT.notyp THEN DefineType(obj^.typ) END ; + IF ansi THEN par := obj^.link; + WHILE par # NIL DO DefineType(par^.typ); par := par^.link END + END + END DefineTProcTypes; + + PROCEDURE DeclareTProcs(obj: OPT.Object; VAR empty: BOOLEAN); + BEGIN + IF obj # NIL THEN + DeclareTProcs(obj^.left, empty); + IF obj^.mode = TProc THEN + IF obj^.typ # OPT.notyp THEN DefineType(obj^.typ) END ; + IF OPM.currFile = OPM.HeaderFile THEN + IF obj^.vis = external THEN + DefineTProcTypes(obj); + OPM.WriteString(Extern); empty := FALSE; + ProcHeader(obj, FALSE) + END + ELSE empty := FALSE; + DefineTProcTypes(obj); + IF obj^.vis = internal THEN OPM.WriteString(Static) + ELSE OPM.WriteString(Export) + END ; + ProcHeader(obj, FALSE) + END + END ; + DeclareTProcs(obj^.right, empty) + END + END DeclareTProcs; + + PROCEDURE BaseTProc*(obj: OPT.Object): OPT.Object; + VAR typ, base: OPT.Struct; mno: LONGINT; + BEGIN typ := obj^.link^.typ; (* receiver type *) + IF typ^.form = Pointer THEN typ := typ^.BaseTyp END ; + base := typ^.BaseTyp; mno := obj^.adr DIV 10000H; + WHILE (base # NIL) & (mno < base^.n) DO typ := base; base := typ^.BaseTyp END ; + OPT.FindField(obj^.name, typ, obj); + RETURN obj + END BaseTProc; + + PROCEDURE DefineTProcMacros(obj: OPT.Object; VAR empty: BOOLEAN); + BEGIN + IF obj # NIL THEN + DefineTProcMacros(obj^.left, empty); + IF (obj^.mode = TProc) & (obj = BaseTProc(obj)) & ((OPM.currFile # OPM.HeaderFile) OR (obj^.vis = external)) THEN + OPM.WriteString("#define __"); + Ident(obj); + DeclareParams(obj^.link, TRUE); + OPM.WriteString(" __SEND("); + IF obj^.link^.typ^.form = Pointer THEN + OPM.WriteString("__TYPEOF("); Ident(obj^.link); OPM.Write(")") + ELSE Ident(obj^.link); OPM.WriteString(TagExt) + END ; + Str1(", #, ", obj^.adr DIV 10000H); + IF obj^.typ = OPT.notyp THEN OPM.WriteString(VoidType) ELSE Ident(obj^.typ^.strobj) END ; + OPM.WriteString("(*)"); + IF ansi THEN + AnsiParamList(obj^.link, FALSE); + ELSE + OPM.WriteString("()"); + END ; + OPM.WriteString(", "); + DeclareParams(obj^.link, TRUE); + OPM.Write(")"); OPM.WriteLn + END ; + DefineTProcMacros(obj^.right, empty) + END + END DefineTProcMacros; + + PROCEDURE DefineType(str: OPT.Struct); (* define a type object *) + VAR obj, field, par: OPT.Object; empty: BOOLEAN; + BEGIN + IF (OPM.currFile = OPM.BodyFile) OR (str^.ref < OPM.MaxStruct (*for hidden exports*) ) THEN + obj := str^.strobj; + IF (obj = NIL) OR Undefined(obj) THEN + IF obj # NIL THEN (* check for cycles *) + IF obj^.linkadr = ProcessingType THEN + IF str^.form # Pointer THEN OPM.Mark(244, str^.txtpos); obj^.linkadr := PredefinedType END + ELSE obj^.linkadr := ProcessingType + END + END ; + IF str^.comp = Record THEN + (* the following exports the base type of an exported type even if the former is non-exported *) + IF str^.BaseTyp # NIL THEN DefineType(str^.BaseTyp) END ; + field := str^.link; + WHILE (field # NIL) & (field^.mode = Fld) DO + IF (field^.vis # internal) OR (OPM.currFile = OPM.BodyFile) THEN DefineType(field^.typ) END ; + field := field^.link + END + ELSIF str^.form = Pointer THEN + IF str^.BaseTyp^.comp # Record THEN DefineType(str^.BaseTyp) END + ELSIF str^.comp IN {Array, DynArr} THEN + DefineType(str^.BaseTyp) + ELSIF str^.form = ProcTyp THEN + IF str^.BaseTyp # OPT.notyp THEN DefineType(str^.BaseTyp) END ; + field := str^.link; + WHILE field # NIL DO DefineType(field^.typ); field := field^.link END + END + END ; + IF (obj # NIL) & Undefined(obj) THEN + OPM.WriteString("typedef"); OPM.WriteLn; OPM.Write(Tab); Indent(1); + obj^.linkadr := ProcessingType; + DeclareBase(obj); OPM.Write(Blank); + obj^.typ^.strobj := NIL; (* SG: trick to make DeclareObj declare the type *) + DeclareObj(obj, FALSE); + obj^.typ^.strobj := obj; (* SG: revert trick *) + obj^.linkadr := 3+OPM.currFile; + EndStat; Indent(-1); OPM.WriteLn; + IF obj^.typ^.comp = Record THEN empty := TRUE; + DeclareTProcs(str^.link, empty); DefineTProcMacros(str^.link, empty); + IF ~empty THEN OPM.WriteLn END + END + END + END + END DefineType; + + PROCEDURE Prefixed(x: OPT.ConstExt; y: ARRAY OF CHAR): BOOLEAN; + VAR i: INTEGER; + BEGIN i := 0; + WHILE x[i+1] = y[i] DO INC(i) END ; + RETURN y[i] = 0X + END Prefixed; + + PROCEDURE CProcDefs(obj: OPT.Object; vis: INTEGER); + VAR i: INTEGER; ext: OPT.ConstExt; + BEGIN + IF obj # NIL THEN + CProcDefs(obj^.left, vis); + (* bug: obj.history cannot be used to cover unexported and deleted CProcs; use special flag obj.adr = 1 *) + IF (obj^.mode = CProc) & (obj^.vis >= vis) & (obj^.adr = 1) THEN + ext := obj.conval.ext; i := 1; + IF (ext[1] # "#") & ~(Prefixed(ext, "extern ") OR Prefixed(ext, Extern)) THEN + OPM.WriteString("#define "); Ident(obj); + DeclareParams(obj^.link, TRUE); + OPM.Write(Tab); + END ; + FOR i := i TO ORD(obj.conval.ext[0]) DO OPM.Write(obj.conval.ext[i]) END; + OPM.WriteLn + END ; + CProcDefs(obj^.right, vis) + END + END CProcDefs; + + PROCEDURE TypeDefs* (obj: OPT.Object; vis(*replaced by test on currFile in DefineType*): INTEGER); + BEGIN + IF obj # NIL THEN + TypeDefs(obj^.left, vis); + (* test typ.txtpos to skip types that have been unexported; obj.history # removed is not enough!*) + IF (obj^.mode = Typ) & (obj^.typ^.txtpos > 0) THEN DefineType(obj^.typ) END ; + TypeDefs(obj^.right, vis) + END + END TypeDefs; + + PROCEDURE DefAnonRecs(n: OPT.Node); + VAR o: OPT.Object; typ: OPT.Struct; + BEGIN + WHILE (n # NIL) & (n^.class = Ninittd) DO + typ := n^.typ; + IF (typ^.strobj = NIL) & ((OPM.currFile = OPM.BodyFile) OR (typ.ref < OPM.MaxStruct)) THEN + DefineType(typ); (* declare base and field types, if any *) + NEW(o); o.typ := typ; o.name := ""; DeclareBase(o); EndStat; OPM.WriteLn + (* simply defines a named struct, but not a type; + o.name = "" signals field list expansion for DeclareBase in this very special case *) + END ; + n := n^.link + END + END DefAnonRecs; + + PROCEDURE TDescDecl* (typ: OPT.Struct); + VAR nofptrs: LONGINT; + o: OPT.Object; + BEGIN + BegStat; OPM.WriteString("__TDESC("); + Andent(typ); + Str1(", #", typ^.n + 1); Str1(", #) = {__TDFLDS(", NofPtrs(typ)); + OPM.Write('"'); + IF typ^.strobj # NIL THEN OPM.WriteStringVar(typ^.strobj^.name) END ; + Str1('", #), {', typ^.size); + nofptrs := 0; PutPtrOffsets(typ, 0, nofptrs); Str1("#}}", -(nofptrs + 1) * OPM.LIntSize); + EndStat + END TDescDecl; + + PROCEDURE InitTDesc*(typ: OPT.Struct); + BEGIN + BegStat; OPM.WriteString("__INITYP("); + Andent(typ); OPM.WriteString(", "); + IF typ^.BaseTyp # NIL THEN Andent(typ^.BaseTyp) ELSE Andent(typ) END ; + Str1(", #)", typ^.extlev); + EndStat; + IF typ^.strobj # NIL THEN InitTProcs(typ^.strobj, typ^.link) END + END InitTDesc; + + PROCEDURE Align*(VAR adr: LONGINT; base: LONGINT); + BEGIN + CASE base OF + | 2: INC(adr, adr MOD 2) + | 4: INC(adr, (-adr) MOD 4) + | 8: INC(adr, (-adr) MOD 8) + |16: INC(adr, (-adr) MOD 16) + ELSE (*1*) + END + END Align; + + PROCEDURE Base*(typ: OPT.Struct): LONGINT; + BEGIN + CASE typ^.form OF + | Byte: RETURN 1 + | Char: RETURN OPM.CharAlign + | Bool: RETURN OPM.BoolAlign + | SInt: RETURN OPM.SIntAlign + | Int: RETURN OPM.IntAlign + | LInt: RETURN OPM.LIntAlign + | Real: RETURN OPM.RealAlign + | LReal: RETURN OPM.LRealAlign + | Set: RETURN OPM.SetAlign + | Pointer: RETURN OPM.PointerAlign + | ProcTyp: RETURN OPM.ProcAlign + | Comp: + IF typ^.comp = Record THEN RETURN typ^.align MOD 10000H + ELSE RETURN Base(typ^.BaseTyp) + END + END + END Base; + + PROCEDURE FillGap(gap, off, align: LONGINT; VAR n, curAlign: LONGINT); + VAR adr: LONGINT; + BEGIN + adr := off; Align(adr, align); + IF (curAlign < align) & (gap - (adr - off) >= align) THEN (* preserve alignment of the enclosing struct! *) + DEC(gap, (adr - off) + align); + BegStat; + IF align = OPM.IntSize THEN OPM.WriteString("INTEGER") + ELSIF align = OPM.LIntSize THEN OPM.WriteString("LONGINT") + ELSIF align = OPM.LRealSize THEN OPM.WriteString("LONGREAL") + END ; + Str1(" _prvt#", n); INC(n); EndStat; + curAlign := align + END ; + IF gap > 0 THEN BegStat; Str1("char _prvt#", n); INC(n); Str1("[#]", gap); EndStat END + END FillGap; + + PROCEDURE FieldList (typ: OPT.Struct; last: BOOLEAN; VAR off, n, curAlign: LONGINT); + VAR fld: OPT.Object; base: OPT.Struct; gap, adr, align, fldAlign: LONGINT; + BEGIN + fld := typ.link; align := typ^.align MOD 10000H; + IF typ.BaseTyp # NIL THEN FieldList(typ.BaseTyp, FALSE, off, n, curAlign) + ELSE off := 0; n := 0; curAlign := 1 + END ; + WHILE (fld # NIL) & (fld.mode = Fld) DO + IF (OPM.currFile = OPM.HeaderFile) & (fld.vis = internal) OR + (OPM.currFile = OPM.BodyFile) & (fld.vis = internal) & (typ^.mno # 0) THEN + fld := fld.link; + WHILE (fld # NIL) & (fld.mode = Fld) & (fld.vis = internal) DO fld := fld.link END ; + ELSE + (* mimic OPV.TypSize to detect gaps caused by private fields *) + adr := off; fldAlign := Base(fld^.typ); Align(adr, fldAlign); + gap := fld.adr - adr; + IF fldAlign > curAlign THEN curAlign := fldAlign END ; + IF gap > 0 THEN FillGap(gap, off, align, n, curAlign) END ; + BegStat; DeclareBase(fld); OPM.Write(Blank); DeclareObj(fld, FALSE); + off := fld.adr + fld.typ.size; base := fld.typ; fld := fld.link; + WHILE (fld # NIL) & (fld.mode = Fld) & (fld.typ = base) & (fld.adr = off) +(* ?? *) & ((OPM.currFile = OPM.BodyFile) OR (fld.vis # internal) OR (fld.typ.strobj = NIL)) DO + OPM.WriteString(", "); DeclareObj(fld, FALSE); off := fld.adr + fld.typ.size; fld := fld.link + END ; + EndStat + END + END ; + IF last THEN + adr := typ.size - typ^.sysflag DIV 100H; + IF adr = 0 THEN gap := 1 (* avoid empty struct *) ELSE gap := adr - off END ; + IF gap > 0 THEN FillGap(gap, off, align, n, curAlign) END + END + END FieldList; + + PROCEDURE IdentList (obj: OPT.Object; vis: INTEGER); + (* generate var and param lists; vis: 0 all global vars, local var, 1 exported(R) var, 2 par list, 3 scope var *) + VAR base: OPT.Struct; first: BOOLEAN; lastvis: INTEGER; + BEGIN + base := NIL; first := TRUE; + WHILE (obj # NIL) & (obj^.mode # TProc) DO + IF (vis IN {0, 2}) OR ((vis = 1) & (obj^.vis # 0)) OR ((vis = 3) & ~obj^.leaf) THEN + IF (obj^.typ # base) OR (obj^.vis # lastvis) THEN (* new variable base type definition required *) + IF ~first THEN EndStat END ; + first := FALSE; + base := obj^.typ; lastvis := obj^.vis; + BegStat; + IF (vis = 1) & (obj^.vis # internal) THEN OPM.WriteString(Extern) + ELSIF (obj^.mnolev = 0) & (vis = 0) THEN + IF obj^.vis = internal THEN OPM.WriteString(Static) + ELSE OPM.WriteString(Export) + END + END ; + IF (vis = 2) & (obj^.mode = Var) & (base^.form = Real) THEN OPM.WriteString("double") + ELSE DeclareBase(obj) + END + ELSE OPM.Write(","); + END ; + OPM.Write(Blank); + IF (vis = 2) & (obj^.mode = Var) & (base^.form = Real) THEN OPM.Write("_") END ; + DeclareObj(obj, vis = 3); + IF obj^.typ^.comp = DynArr THEN (* declare len parameter(s) *) + EndStat; BegStat; + base := OPT.linttyp; + OPM.WriteString("LONGINT "); LenList(obj, FALSE, TRUE) + ELSIF (obj^.mode = VarPar) & (obj^.typ^.comp = Record) THEN + EndStat; BegStat; + OPM.WriteString("LONGINT *"); Ident(obj); OPM.WriteString(TagExt); + base := NIL + ELSIF ptrinit & (vis = 0) & (obj^.mnolev > 0) & (obj^.typ^.form = Pointer) THEN + OPM.WriteString(" = NIL") + END + END ; + obj := obj^.link + END ; + IF ~first THEN EndStat END + END IdentList; + + PROCEDURE AnsiParamList (obj: OPT.Object; showParamNames: BOOLEAN); + VAR name: ARRAY 32 OF CHAR; + BEGIN + OPM.Write("("); + IF (obj = NIL) OR (obj^.mode = TProc) THEN OPM.WriteString("void") + ELSE + LOOP + DeclareBase(obj); + IF showParamNames THEN + OPM.Write(Blank); DeclareObj(obj, FALSE) + ELSE + COPY(obj^.name, name); obj^.name := ""; DeclareObj(obj, FALSE); COPY(name, obj^.name) + END ; + IF obj^.typ^.comp = DynArr THEN + OPM.WriteString(", LONGINT "); + LenList(obj, TRUE, showParamNames) + ELSIF (obj^.mode = VarPar) & (obj^.typ^.comp = Record) THEN + OPM.WriteString(", LONGINT *"); + IF showParamNames THEN Ident(obj); OPM.WriteString(TagExt) END + END ; + IF (obj^.link = NIL) OR (obj^.link.mode = TProc) THEN EXIT END ; + OPM.WriteString(", "); + obj := obj^.link + END + END ; + OPM.Write(")") + END AnsiParamList; + + PROCEDURE ProcHeader(proc: OPT.Object; define: BOOLEAN); + BEGIN + IF proc^.typ = OPT.notyp THEN OPM.WriteString(VoidType) ELSE Ident(proc^.typ^.strobj) END ; + OPM.Write(Blank); Ident(proc); OPM.Write(Blank); + IF ansi THEN + AnsiParamList(proc^.link, TRUE); + IF ~define THEN OPM.Write(";") END ; + OPM.WriteLn; + ELSIF define THEN + DeclareParams(proc^.link, FALSE); + OPM.WriteLn; + Indent(1); IdentList(proc^.link, 2(* map REAL to double *)); Indent(-1) + ELSE OPM.WriteString("();"); OPM.WriteLn + END + END ProcHeader; + + PROCEDURE ProcPredefs (obj: OPT.Object; vis: SHORTINT); (* forward declaration of procedures *) + BEGIN + IF obj # NIL THEN + ProcPredefs(obj^.left, vis); + IF (obj^.mode IN {LProc, XProc}) & (obj^.vis >= vis) & ((obj^.history # removed) OR (obj^.mode = LProc)) THEN + (* previous XProc may be deleted or become LProc after interface change*) + IF vis = external THEN OPM.WriteString(Extern) + ELSIF obj^.vis = internal THEN OPM.WriteString(Static) + ELSE OPM.WriteString(Export) + END ; + ProcHeader(obj, FALSE); + END ; + ProcPredefs(obj^.right, vis); + END; + END ProcPredefs; + + PROCEDURE Include(name: ARRAY OF CHAR); + BEGIN + OPM.WriteString("#include "); OPM.Write(Quotes); OPM.WriteStringVar(name); + OPM.WriteString(".h"); OPM.Write(Quotes); OPM.WriteLn + END Include; + + PROCEDURE IncludeImports(obj: OPT.Object; vis: INTEGER); + BEGIN + IF obj # NIL THEN + IncludeImports(obj^.left, vis); + IF (obj^.mode = Mod) & (obj^.mnolev # 0) & (OPT.GlbMod[-obj^.mnolev].vis >= vis) THEN (* @self and SYSTEM have mnolev = 0 *) + Include(OPT.GlbMod[-obj^.mnolev].name) (* use unaliased module name *) + END; + IncludeImports(obj^.right, vis); + END; + END IncludeImports; + + PROCEDURE GenDynTypes (n: OPT.Node; vis: INTEGER); + VAR typ: OPT.Struct; + BEGIN + WHILE (n # NIL) & (n^.class = Ninittd) DO + typ := n^.typ; + IF (vis = internal) OR (typ^.ref < OPM.MaxStruct (*type needed in symbol file*)) THEN + BegStat; + IF vis = external THEN OPM.WriteString(Extern) + ELSIF (typ^.strobj # NIL) & (typ^.strobj^.mnolev > 0) THEN OPM.WriteString(Static) + ELSE OPM.WriteString(Export) + END ; + OPM.WriteString("LONGINT *"); Andent(typ); OPM.WriteString(DynTypExt); + EndStat + END ; + n := n^.link + END + END GenDynTypes; + + PROCEDURE GenHdr*(n: OPT.Node); + BEGIN + (* includes are delayed until it is known which ones are needed in the header *) + OPM.currFile := OPM.HeaderFile; + DefAnonRecs(n); + TypeDefs(OPT.topScope^.right, 1); OPM.WriteLn; + IdentList(OPT.topScope^.scope, 1); OPM.WriteLn; + GenDynTypes(n, external); OPM.WriteLn; + ProcPredefs(OPT.topScope^.right, 1); + OPM.WriteString(Extern); OPM.WriteString("void *"); + OPM.WriteStringVar(OPM.modName); OPM.WriteString(BodyNameExt); + EndStat; OPM.WriteLn; + CProcDefs(OPT.topScope^.right, 1); OPM.WriteLn; + OPM.WriteString("#endif"); OPM.WriteLn + END GenHdr; + + PROCEDURE GenHeaderMsg; + VAR i: INTEGER; + BEGIN + OPM.WriteString("/*"); OPM.WriteString(HeaderMsg); + OPM.Write(" "); OPM.WriteString(version.versionLong); OPM.Write (" "); (* noch *) + FOR i := 0 TO OPM.MaxSet (*31*) DO (*noch*) + IF i IN OPM.glbopt THEN + CASE i OF (* c.f. ScanOptions in OPM *) + | OPM.extsf: OPM.Write("e") + | OPM.newsf: OPM.Write("s") + | OPM.mainprog: OPM.Write("m") + | OPM.inxchk: OPM.Write("x") + | OPM.vcpp: OPM.Write("v") + | OPM.ranchk: OPM.Write("r") + | OPM.typchk: OPM.Write("t") + | OPM.assert: OPM.Write("a") + | OPM.ansi: OPM.Write("k") + | OPM.ptrinit: OPM.Write("p") + | OPM.include0: OPM.Write("i") + | OPM.lineno: OPM.Write("l") + | OPM.useparfile: OPM.Write("P") + | OPM.dontasm: OPM.Write("S") + | OPM.dontlink: OPM.Write("C") + | OPM.mainlinkstat: OPM.Write("M") + ELSE + (* this else is necessary cause + if someone defined a new option in OPM module + and forgot to add it here then + if option is passed this will + generate __CASECHK and cause Halt, + noch *) + OPM.WriteString ("( more options defined in OPM than checked in OPC.GenHeaderMsg, if you are a compiler developer, add them to OPC.GenHeaderMsg"); + END + END + END; + OPM.WriteString(" */"); OPM.WriteLn + END GenHeaderMsg; + + PROCEDURE GenHdrIncludes*; + BEGIN + OPM.currFile := OPM.HeaderInclude; + GenHeaderMsg; + OPM.WriteLn; + OPM.WriteString("#ifndef "); OPM.WriteStringVar(OPM.modName); OPM.WriteString(FlagExt); OPM.WriteLn; + OPM.WriteString("#define "); OPM.WriteStringVar(OPM.modName); OPM.WriteString(FlagExt); OPM.WriteLn; + OPM.WriteLn; + Include(BasicIncludeFile); + IncludeImports(OPT.topScope^.right, 1); OPM.WriteLn + END GenHdrIncludes; + + PROCEDURE GenBdy*(n: OPT.Node); + BEGIN + OPM.currFile := OPM.BodyFile; + GenHeaderMsg; + Include(BasicIncludeFile); + IncludeImports(OPT.topScope^.right, 0); OPM.WriteLn; + DefAnonRecs(n); + TypeDefs(OPT.topScope^.right, 0); OPM.WriteLn; + IdentList(OPT.topScope^.scope, 0); OPM.WriteLn; + GenDynTypes(n, internal); OPM.WriteLn; + ProcPredefs(OPT.topScope^.right, 0); OPM.WriteLn; + CProcDefs(OPT.topScope^.right, 0); OPM.WriteLn + END GenBdy; + + PROCEDURE RegCmds(obj: OPT.Object); + BEGIN + IF obj # NIL THEN + RegCmds(obj^.left); + IF (obj^.mode = XProc) & (obj^.history # removed) THEN + IF (obj^.vis # 0) & (obj^.link = NIL) & (obj^.typ = OPT.notyp) THEN (*command*) + BegStat; OPM.WriteString('__REGCMD("'); + OPM.WriteStringVar(obj.name); OPM.WriteString('", '); Ident(obj); OPM.Write(")"); EndStat + END + END ; + RegCmds(obj^.right) + END + END RegCmds; + + PROCEDURE InitImports(obj: OPT.Object); + BEGIN + IF obj # NIL THEN + InitImports(obj^.left); + IF (obj^.mode = Mod) & (obj^.mnolev # 0) THEN + BegStat; OPM.WriteString("__IMPORT("); + OPM.WriteStringVar(OPT.GlbMod[-obj^.mnolev].name); + OPM.Write(CloseParen); EndStat + END ; + InitImports(obj^.right) + END + END InitImports; + + PROCEDURE GenEnumPtrs* (var: OPT.Object); + VAR typ: OPT.Struct; n: LONGINT; + BEGIN GlbPtrs := FALSE; + WHILE var # NIL DO + typ := var^.typ; + IF NofPtrs(typ) > 0 THEN + IF ~GlbPtrs THEN GlbPtrs := TRUE; + OPM.WriteString(Static); + IF ansi THEN + OPM.WriteString("void EnumPtrs(void (*P)(void*))") + ELSE + OPM.WriteString("void EnumPtrs(P)"); OPM.WriteLn; + OPM.Write(Tab); OPM.WriteString("void (*P)();"); + END ; + OPM.WriteLn; + BegBlk + END ; + BegStat; + IF typ^.form = Pointer THEN + OPM.WriteString("P("); Ident(var); OPM.Write(")"); + ELSIF typ^.comp = Record THEN + OPM.WriteString("__ENUMR(&"); Ident(var); OPM.WriteString(", "); + Andent(typ); OPM.WriteString(DynTypExt); Str1(", #", typ^.size); OPM.WriteString(", 1, P)") + ELSIF typ^.comp = Array THEN + n := typ^.n; typ := typ^.BaseTyp; + WHILE typ^.comp = Array DO n := n * typ^.n; typ := typ^.BaseTyp END ; + IF typ^.form = Pointer THEN + OPM.WriteString("__ENUMP("); Ident(var); Str1(", #, P)", n) + ELSIF typ^.comp = Record THEN + OPM.WriteString("__ENUMR("); Ident(var); OPM.WriteString(", "); + Andent(typ); OPM.WriteString(DynTypExt); Str1(", #", typ^.size); Str1(", #, P)", n) + END + END ; + EndStat + END ; + var := var^.link + END ; + IF GlbPtrs THEN + EndBlk; OPM.WriteLn + END + END GenEnumPtrs; + + PROCEDURE EnterBody*; + BEGIN + OPM.WriteLn; OPM.WriteString(Export); + IF mainprog THEN + IF ansi THEN + OPM.WriteString("main(int argc, char **argv)"); OPM.WriteLn; + ELSE + OPM.WriteString("main(argc, argv)"); OPM.WriteLn; + OPM.Write(Tab); OPM.WriteString("int argc; char **argv;"); OPM.WriteLn + END + ELSE + OPM.WriteString("void *"); + OPM.WriteString(OPM.modName); OPM.WriteString(BodyNameExt); OPM.WriteLn; + END ; + BegBlk; BegStat; + IF mainprog THEN OPM.WriteString("__INIT(argc, argv)") ELSE OPM.WriteString("__DEFMOD") END ; + EndStat; + IF mainprog & demoVersion THEN BegStat; + OPM.WriteString('/*don`t do it!*/ printf("DEMO VERSION: DO NOT USE THIS PROGRAM FOR ANY COMMERCIAL PURPOSE\n")'); + EndStat + END ; + InitImports(OPT.topScope^.right); + BegStat; + IF mainprog THEN OPM.WriteString('__REGMAIN("') ELSE OPM.WriteString('__REGMOD("') END ; + OPM.WriteString(OPM.modName); + IF GlbPtrs THEN OPM.WriteString('", EnumPtrs)') ELSE OPM.WriteString('", 0)') END ; + EndStat; + IF OPM.modName # "SYSTEM" THEN RegCmds(OPT.topScope) END + END EnterBody; + + PROCEDURE ExitBody*; + BEGIN + BegStat; + IF mainprog THEN OPM.WriteString("__FINI;") ELSE OPM.WriteString("__ENDMOD;") END ; + OPM.WriteLn; EndBlk + END ExitBody; + + PROCEDURE DefineInter* (proc: OPT.Object); (* define intermediate scope record and variable *) + VAR scope: OPT.Object; + BEGIN + scope := proc^.scope; + OPM.WriteString(Static); OPM.WriteString(Struct); OPM.WriteStringVar(scope^.name); OPM.Write(Blank); + BegBlk; + IdentList(proc^.link, 3); (* parameters *) + IdentList(scope^.scope, 3); (* local variables *) + BegStat; (* scope link field declaration *) + OPM.WriteString(Struct); OPM.WriteStringVar (scope^.name); + OPM.Write(Blank); OPM.Write(Star); OPM.WriteString(LinkName); EndStat; + EndBlk0; OPM.Write(Blank); + OPM.Write(Star); OPM.WriteStringVar (scope^.name); OPM.WriteString(GlobalScope); EndStat; OPM.WriteLn; + ProcPredefs (scope^.right, 0); + OPM.WriteLn; + END DefineInter; + + PROCEDURE EnterProc* (proc: OPT.Object); + VAR var, scope: OPT.Object; typ: OPT.Struct; dim: INTEGER; + BEGIN + IF proc^.vis # external THEN OPM.WriteString(Static) END ; + ProcHeader(proc, TRUE); + BegBlk; + scope := proc^.scope; + IdentList(scope^.scope, 0); + IF ~scope^.leaf THEN (* declare intermediate procedure scope record variable*) + BegStat; OPM.WriteString(Struct); OPM.WriteStringVar (scope^.name); + OPM.Write(Blank); OPM.WriteString(LocalScope); EndStat + END ; + var := proc^.link; + WHILE var # NIL DO (* declare copy of fixed size value array parameters *) + IF (var^.typ^.comp = Array) & (var^.mode = Var) THEN + BegStat; + IF var^.typ^.strobj = NIL THEN OPM.Mark(200, var^.typ^.txtpos) ELSE Ident(var^.typ^.strobj) END ; + OPM.Write(Blank); Ident(var); OPM.WriteString("__copy"); + EndStat + END ; + var := var^.link + END ; + IF ~ansi THEN + var := proc^.link; + WHILE var # NIL DO (* "unpromote" value real parameters *) + IF (var^.typ^.form = Real) & (var^.mode = Var) THEN + BegStat; + Ident(var^.typ^.strobj); OPM.Write(Blank); Ident(var); OPM.WriteString(" = _"); Ident(var); + EndStat + END ; + var := var^.link + END + END ; + var := proc^.link; + WHILE var # NIL DO (* copy value array parameters *) + IF (var^.typ^.comp IN {Array, DynArr}) & (var^.mode = Var) & (var^.typ^.sysflag = 0) THEN + BegStat; + IF var^.typ^.comp = Array THEN + OPM.WriteString(DupArrFunc); + Ident(var); OPM.WriteString(Comma); + IF var^.typ^.strobj = NIL THEN OPM.Mark(200, var^.typ^.txtpos) ELSE Ident(var^.typ^.strobj) END + ELSE + OPM.WriteString(DupFunc); + Ident(var); OPM.WriteString(Comma); Ident(var); OPM.WriteString(LenExt); + typ := var^.typ^.BaseTyp; dim := 1; + WHILE typ^.comp = DynArr DO + OPM.WriteString(" * "); Ident(var); OPM.WriteString(LenExt); OPM.WriteInt(dim); + typ := typ^.BaseTyp; INC(dim) + END ; + OPM.WriteString(Comma); + IF (typ^.strobj = NIL) THEN OPM.Mark(200, typ^.txtpos) + ELSE Ident(typ^.strobj) + END + END ; + OPM.Write(CloseParen); EndStat + END ; + var := var^.link + END ; + IF ~scope^.leaf THEN + var := proc^.link; (* copy addresses of parameters into local scope record *) + WHILE var # NIL DO + IF ~var^.leaf THEN (* only if used by a nested procedure *) + BegStat; + OPM.WriteString(LocalScope); OPM.Write(Dot); Ident(var); + OPM.WriteString(Becomes); + IF var^.typ^.comp IN {Array, DynArr} THEN OPM.WriteString("(void*)") + (* K&R and ANSI differ in the type: array or element type*) + ELSIF var^.mode # VarPar THEN OPM.Write("&") + END ; + Ident(var); + IF var^.typ^.comp = DynArr THEN + typ := var^.typ; dim := 0; + REPEAT (* copy len(s) *) + OPM.WriteString("; "); + OPM.WriteString(LocalScope); OPM.Write(Dot); Ident(var); OPM.WriteString(LenExt); + IF dim # 0 THEN OPM.WriteInt(dim) END ; + OPM.WriteString(Becomes); Ident(var); OPM.WriteString(LenExt); + IF dim # 0 THEN OPM.WriteInt(dim) END ; + typ := typ^.BaseTyp + UNTIL typ^.comp # DynArr; + ELSIF (var^.mode = VarPar) & (var^.typ^.comp = Record) THEN + OPM.WriteString("; "); + OPM.WriteString(LocalScope); OPM.Write(Dot); Ident(var); OPM.WriteString(TagExt); + OPM.WriteString(Becomes); Ident(var); OPM.WriteString(TagExt) + END ; + EndStat + END; + var := var^.link; + END; + var := scope^.scope; (* copy addresses of local variables into scope record *) + WHILE var # NIL DO + IF ~var^.leaf THEN (* only if used by a nested procedure *) + BegStat; + OPM.WriteString(LocalScope); OPM.Write(Dot); Ident(var); OPM.WriteString(Becomes); + IF var^.typ^.comp # Array THEN OPM.Write("&") + ELSE OPM.WriteString("(void*)") (* K&R and ANSI differ in the type: array or element type*) + END ; + Ident(var); EndStat + END ; + var := var^.link + END; + (* now link new scope *) + BegStat; OPM.WriteString(LocalScope); OPM.Write(Dot); OPM.WriteString(LinkName); + OPM.WriteString(Becomes); OPM.WriteStringVar(scope^.name); OPM.WriteString(GlobalScope); EndStat; + BegStat; OPM.WriteStringVar(scope^.name); OPM.WriteString(GlobalScope); OPM.WriteString(Becomes); + OPM.Write("&"); OPM.WriteString(LocalScope); EndStat + END + END EnterProc; + + PROCEDURE ExitProc*(proc: OPT.Object; eoBlock, implicitRet: BOOLEAN); + VAR var: OPT.Object; indent: BOOLEAN; + BEGIN + indent := eoBlock; + IF implicitRet & (proc^.typ # OPT.notyp) THEN + OPM.Write(Tab); OPM.WriteString("__RETCHK;"); OPM.WriteLn + ELSIF ~eoBlock OR implicitRet THEN + IF ~proc^.scope^.leaf THEN + (* link scope pointer of nested proc back to previous scope *) + IF indent THEN BegStat ELSE indent := TRUE END ; + OPM.WriteStringVar(proc^.scope^.name); OPM.WriteString(GlobalScope); + OPM.WriteString(Becomes); OPM.WriteString(LocalScope); OPM.Write(Dot); OPM.WriteString(LinkName); + EndStat + END; + (* delete array value parameters *) + var := proc^.link; + WHILE var # NIL DO + IF (var^.typ^.comp = DynArr) & (var^.mode = Var) & (var^.typ^.sysflag = 0) THEN + IF indent THEN BegStat ELSE indent := TRUE END ; + OPM.WriteString(DelFunc); Ident(var); OPM.Write(CloseParen); EndStat + END ; + var := var^.link + END + END ; + IF eoBlock THEN EndBlk; OPM.WriteLn + ELSIF indent THEN BegStat + END + END ExitProc; + + PROCEDURE CompleteIdent*(obj: OPT.Object); + VAR comp, level: INTEGER; + BEGIN + (* obj^.mode IN {Var, VarPar} *) + level := obj^.mnolev; + IF obj^.adr = 1 THEN (* WITH-variable *) + IF obj^.typ^.comp = Record THEN Ident(obj); OPM.WriteString("__") + ELSE (* cast with guard pointer type *) + OPM.WriteString("(("); Ident(obj^.typ^.strobj); OPM.Write(")"); Ident(obj); OPM.Write(")") + END + ELSIF (level # OPM.level) & (level > 0) THEN (* intermediate var *) + comp := obj^.typ^.comp; + IF (obj^.mode # VarPar) & (comp # DynArr) THEN OPM.Write(Star); END; + OPM.WriteStringVar(obj^.scope^.name); OPM.WriteString(GlobalScope); + OPM.WriteString("->"); Ident(obj) + ELSE + Ident(obj) + END + END CompleteIdent; + + PROCEDURE TypeOf*(ap: OPT.Object); + VAR i: INTEGER; + BEGIN + ASSERT(ap.typ.comp = Record); + IF ap.mode = VarPar THEN + IF ap.mnolev # OPM.level THEN (*intermediate level var-par record; possible WITH-guarded*) + OPM.WriteStringVar(ap^.scope^.name); OPM.WriteString("_s->"); Ident(ap) + ELSE (*local var-par record*) + Ident(ap) + END ; + OPM.WriteString(TagExt) + ELSIF ap^.typ^.strobj # NIL THEN + Ident(ap^.typ^.strobj); OPM.WriteString(DynTypExt) + ELSE Andent(ap.typ) (*anonymous ap type, p^ *) + END + END TypeOf; + + PROCEDURE Cmp*(rel: INTEGER); + BEGIN + CASE rel OF + eql : + OPM.WriteString(" == "); + | neq : + OPM.WriteString(" != "); + | lss : + OPM.WriteString(" < "); + | leq : + OPM.WriteString(" <= "); + | gtr : + OPM.WriteString(" > "); + | geq : + OPM.WriteString(" >= "); + END; + END Cmp; + + PROCEDURE Case*(caseVal: LONGINT; form: INTEGER); + VAR + ch: CHAR; + BEGIN + OPM.WriteString(CaseStat); + CASE form OF + | Char : + ch := CHR (caseVal); + IF (ch >= " ") & (ch <= "~") THEN + OPM.Write(SingleQuote); + IF (ch = "\") OR (ch = "?") OR (ch = SingleQuote) OR (ch = Quotes) THEN OPM.Write("\"); OPM.Write(ch); + ELSE OPM.Write(ch); + END; + OPM.Write(SingleQuote); + ELSE + OPM.WriteString("0x"); OPM.WriteHex (caseVal); + END; + | SInt, Int, LInt : + OPM.WriteInt (caseVal); + END; + OPM.WriteString(Colon); + END Case; + + PROCEDURE SetInclude* (exclude: BOOLEAN); + BEGIN + IF exclude THEN OPM.WriteString(" &= ~"); ELSE OPM.WriteString(" |= "); END; + END SetInclude; + + PROCEDURE Increment* (decrement: BOOLEAN); + BEGIN + IF decrement THEN OPM.WriteString(" -= "); ELSE OPM.WriteString(" += "); END; + END Increment; + + PROCEDURE Halt* (n: LONGINT); + BEGIN + Str1("__HALT(#)", n) + END Halt; + + PROCEDURE Len* (obj: OPT.Object; array: OPT.Struct; dim: LONGINT); + BEGIN + IF array^.comp = DynArr THEN + CompleteIdent(obj); OPM.WriteString(LenExt); + IF dim # 0 THEN OPM.WriteInt(dim) END + ELSE (* array *) + WHILE dim > 0 DO array := array^.BaseTyp; DEC(dim) END ; + OPM.WriteInt(array^.n); OPM.PromoteIntConstToLInt() + END + END Len; + + PROCEDURE Constant* (con: OPT.Const; form: INTEGER); + VAR i, len: INTEGER; ch: CHAR; s: SET; + hex: LONGINT; skipLeading: BOOLEAN; + BEGIN + CASE form OF + Byte: + OPM.WriteInt(con^.intval) + | Bool: + OPM.WriteInt(con^.intval) + | Char: + ch := CHR(con^.intval); + IF (ch >= " ") & (ch <= "~") THEN + OPM.Write(SingleQuote); + IF (ch = "\") OR (ch = "?") OR (ch = SingleQuote) OR (ch = Quotes) THEN OPM.Write("\") END ; + OPM.Write(ch); + OPM.Write(SingleQuote) + ELSE + OPM.WriteString("0x"); OPM.WriteHex(con^.intval) + END + | SInt, Int, LInt: + OPM.WriteInt(con^.intval) + | Real: + OPM.WriteReal(con^.realval, "f") + | LReal: + OPM.WriteReal(con^.realval, 0X) + | Set: + OPM.WriteString("0x"); + skipLeading := TRUE; + s := con^.setval; i := MAX(SET) + 1; + REPEAT + hex := 0; + REPEAT + DEC(i); hex := 2 * hex; + IF i IN s THEN INC(hex) END + UNTIL i MOD 8 = 0; + IF (hex # 0) OR ~skipLeading THEN + OPM.WriteHex(hex); + skipLeading := FALSE + END + UNTIL i = 0; + IF skipLeading THEN OPM.Write("0") END + | String: + OPM.Write(Quotes); + len := SHORT(con^.intval2) - 1; i := 0; + WHILE i < len DO ch := con^.ext^[i]; + IF (ch = "\") OR (ch = "?") OR (ch = SingleQuote) OR (ch = Quotes) THEN OPM.Write("\") END ; + OPM.Write(ch); INC(i) + END ; + OPM.Write(Quotes) + | NilTyp: + OPM.WriteString(NilConst); + END; + END Constant; + + + PROCEDURE InitKeywords; + VAR n, i: SHORTINT; + + PROCEDURE Enter(s: ARRAY OF CHAR); + VAR h: INTEGER; + BEGIN h := PerfectHash(s); hashtab[h] := n; COPY(s, keytab[n]); INC(n) + END Enter; + + BEGIN n := 0; + FOR i := 0 TO 104 DO hashtab[i] := -1 END ; + Enter("asm"); + Enter("auto"); + Enter("break"); + Enter("case"); + Enter("char"); + Enter("const"); + Enter("continue"); + Enter("default"); + Enter("do"); + Enter("double"); + Enter("else"); + Enter("enum"); + Enter("extern"); + Enter("export"); (* pseudo keyword used by voc *) + Enter("float"); + Enter("for"); + Enter("fortran"); + Enter("goto"); + Enter("if"); + Enter("import"); (* pseudo keyword used by voc *) + Enter("int"); + Enter("long"); + Enter("register"); + Enter("return"); + Enter("short"); + Enter("signed"); + Enter("sizeof"); + Enter("static"); + Enter("struct"); + Enter("switch"); + Enter("typedef"); + Enter("union"); + Enter("unsigned"); + Enter("void"); + Enter("volatile"); + Enter("while"); + +(* what about common predefined names from cpp as e.g. + Operating System: ibm, gcos, os, tss and unix + Hardware: interdata, pdp11, u370, u3b, + u3b2, u3b5, u3b15, u3b20d, + vax, ns32000, iAPX286, i386, + sparc , and sun + UNIX system variant: + RES, and RT + The lint(1V) command: + lint + *) + END InitKeywords; + +BEGIN InitKeywords +END OPC. diff --git a/src/voc/OPM.cmdln.Mod b/src/voc/OPM.cmdln.Mod new file mode 100644 index 00000000..f625f2ba --- /dev/null +++ b/src/voc/OPM.cmdln.Mod @@ -0,0 +1,748 @@ +MODULE OPM; (* RC 6.3.89 / 28.6.89, J.Templ 10.7.89 / 22.7.96 *) +(* constants needed for C code generation + + 31.1.2007 jt synchronized with BlackBox version, in particular PromoteIntConstToLInt added +*) + + IMPORT SYSTEM, Texts := CmdlnTexts, Files, Args, Console, errors, version; + + CONST + OptionChar* = "-"; + + (* compiler options; don't change the encoding *) + inxchk* = 0; (* index check on *) + vcpp* = 1; (* VC++ support on; former ovflchk; neither used nor documented *) + ranchk* = 2; (* range check on *) + typchk* = 3; (* type check on *) + newsf* = 4; (* generation of new symbol file allowed *) + ptrinit* = 5; (* pointer initialization *) + ansi* = 6; (* ANSI or K&R style prototypes *) + assert* = 7; (* assert evaluation *) + include0* = 8; (* include M.h0 in header file and M.c0 in body file if such files exist *) + extsf* = 9; (* extension of old symbol file allowed *) + mainprog* = 10; (* translate module body into C main function *) + lineno* = 11; (* emit line numbers rather than text positions in error messages *) + useparfile* = 12; (* use .par file *) + dontasm* = 13; (* don't call external assembler/C compiler *) + dontlink* = 14; (* don't link *) + mainlinkstat* = 15; (* generate code for main module and then link object file statically *) + defopt* = {inxchk, typchk, ptrinit, ansi, assert}; (* default options *) + + nilval* = 0; +(* + MinRealPat = 0FF7FFFFFH; (* most negative, 32-bit pattern, -3.40282346E38 *) + MinLRealPatL = 0FFFFFFFFH; (* most negative, lower 32-bit pattern *) + MinLRealPatH = 0FFEFFFFFH; (* most negative, higher 32-bit pattern *) + MaxRealPat = 7F7FFFFFH; (*3.40282346E38*) + MaxLRealPatL = -1; + MaxLRealPatH = 7FEFFFFFH; +*) + + MaxRExp* = 38; MaxLExp* = 308; MaxHDig* = 8; + + MinHaltNr* = 0; + MaxHaltNr* = 255; + MaxSysFlag* = 1; + + MaxCC* = -1; (* SYSTEM.CC, GETREG, PUTREG; not implementable in C backend *) + MinRegNr* = 0; + MaxRegNr* = -1; + + LANotAlloc* = -1; (* XProc link adr initialization *) + ConstNotAlloc* = -1; (* for allocation of string and real constants *) + TDAdrUndef* = -1; (* no type desc allocated *) + + MaxCases* = 128; + MaxCaseRange* = 512; + + MaxStruct* = 255; + + (* maximal number of pointer fields in a record: *) + MaxPtr* = MAX(LONGINT); + + (* maximal number of global pointers per module: *) + MaxGPtr* = MAX(LONGINT); + + (* maximal number of hidden fields in an exported record: *) + MaxHdFld* = 512; + + HdPtrName* = "@ptr"; + HdProcName* = "@proc"; + HdTProcName* = "@tproc"; + + ExpHdPtrFld* = TRUE; + ExpHdProcFld* = FALSE; + ExpHdTProc* = FALSE; + + NEWusingAdr* = FALSE; + + Eot* = 0X; + + SFext = ".sym"; (* symbol file extension *) + BFext = ".c"; (* body file extension *) + HFext = ".h"; (* header file extension *) + SFtag = 0F7X; (* symbol file tag *) + + HeaderFile* = 0; + BodyFile* = 1; + HeaderInclude* = 2; + + TYPE + FileName = ARRAY 32 OF CHAR; + + VAR + + ByteSize*, CharSize*, BoolSize*, SIntSize*, IntSize*, + LIntSize*, SetSize*, RealSize*, LRealSize*, PointerSize*, ProcSize*, RecSize*, + CharAlign*, BoolAlign*, SIntAlign*, IntAlign*, + LIntAlign*, SetAlign*, RealAlign*, LRealAlign*, PointerAlign*, ProcAlign*, RecAlign*, + ByteOrder*, BitOrder*, MaxSet*: INTEGER; + MinSInt*, MinInt*, MinLInt*, MaxSInt*, MaxInt*, MaxLInt*, MaxIndex*: LONGINT; + MinReal*, MaxReal*, MinLReal*, MaxLReal*: LONGREAL; + + noerr*: BOOLEAN; + curpos*, errpos*: LONGINT; (* character and error position in source file *) + breakpc*: LONGINT; (* set by OPV.Init *) + currFile*: INTEGER; (* current output file *) + level*: INTEGER; (* procedure nesting level *) + pc*, entno*: INTEGER; (* entry number *) + modName*: ARRAY 32 OF CHAR; + objname*: ARRAY 64 OF CHAR; + + opt*, glbopt*: SET; + + lasterrpos: LONGINT; + inR: Texts.Reader; + Log: Texts.Text; + W: Texts.Writer; + oldSF, newSF: Files.Rider; + R: ARRAY 3 OF Files.Rider; + oldSFile, newSFile, HFile, BFile, HIFile: Files.File; + + S: INTEGER; + stop, useLineNo, useParFile, dontAsm-, dontLink-, mainProg-, mainLinkStat-: BOOLEAN; + + + (* ------------------------- Log Output ------------------------- *) + + PROCEDURE LogW*(ch: CHAR); + BEGIN Console.Char(ch) + END LogW; + + PROCEDURE LogWStr*(s: ARRAY OF CHAR); + BEGIN Console.String(s) + END LogWStr; + + PROCEDURE LogWNum*(i, len: LONGINT); + BEGIN Console.Int(i, len) + END LogWNum; + + PROCEDURE LogWLn*; + BEGIN Console.Ln + END LogWLn; + + + (* ------------------------- parameter handling -------------------------*) + + PROCEDURE ScanOptions(VAR s: ARRAY OF CHAR; VAR opt: SET); + VAR i: INTEGER; + BEGIN + i := 1; (* skip - *) + WHILE s[i] # 0X DO + CASE s[i] OF + | "e": opt := opt / {extsf} + | "s": opt := opt / {newsf} + | "m": opt := opt / {mainprog} + | "x": opt := opt / {inxchk} + | "v": opt := opt / {vcpp}; + | "r": opt := opt / {ranchk} + | "t": opt := opt / {typchk} + | "a": opt := opt / {assert} + | "k": opt := opt / {ansi} + | "p": opt := opt / {ptrinit} + | "i": opt := opt / {include0} + | "l": opt := opt / {lineno} + | "P": opt := opt / {useparfile} + | "S": opt := opt / {dontasm} + | "C": opt := opt / {dontlink} + | "M": opt := opt / {mainlinkstat} + ELSE LogWStr(" warning: option "); LogW(OptionChar); LogW(s[i]); LogWStr(" ignored"); LogWLn + END ; + INC(i) + END; + END ScanOptions; + + PROCEDURE ^GetProperties; + + PROCEDURE OpenPar*; (* prepare for a sequence of translations *) + VAR s: ARRAY 256 OF CHAR; + BEGIN + IF Args.argc = 1 THEN stop := TRUE; + Console.Ln; + Console.String("voc - Vishap Oberon-2 compiler "); + Console.String(version.version); Console.String (" "); + Console.String(version.date); Console.String (" for "); Console.String(version.arch); + Console.Ln; + Console.String("based on Ofront by Software Templ OEG"); Console.Ln; + Console.String("continued by Norayr Chilingarian and others"); Console.Ln; + Console.Ln; + Console.String(' command = "voc" options {file options}.'); Console.Ln; + Console.String(' options = ["-" {option} ].'); Console.Ln; + Console.String(' option = "m" | "M" | "s" | "e" | "i" | "l" | "k" | "r" | "x" | "a" | "p" | "t" | "P" | "S" | "C" .'); Console.Ln; + Console.Ln; + Console.String(" m - generate code for main module"); Console.Ln; + Console.String(" M - generate code for main module and link object statically"); Console.Ln; + Console.String(" s - generate new symbol file"); Console.Ln; + Console.String(" e - allow extending the module interface"); Console.Ln; + Console.String(" i - include header and body prefix files (c0)"); Console.Ln; + Console.String(" l - use line numbers"); Console.Ln; + Console.String(" r - check value ranges"); Console.Ln; + Console.String(" x - turn off array indices check"); Console.Ln; + Console.String(" a - don't check ASSERTs at runtime, use this option in tested production code"); Console.Ln; + Console.String(" p - turn off automatic pointer initialization"); Console.Ln; + Console.String(" t - don't check type guards (use in rare cases such as low-level modules where every cycle counts)"); Console.Ln; + Console.String(" P - use .par file"); Console.Ln; + Console.String(" S - don't call external assembler/compiler, only generate the asm/C code"); Console.Ln; + Console.String(" C - don't call linker"); Console.Ln; + Console.Ln; + ELSE + glbopt := defopt; S := 1; s := ""; + Args.Get(1, s); stop := FALSE; + WHILE s[0] = OptionChar DO ScanOptions(s, glbopt); INC(S); s := ""; Args.Get(S, s) END; + IF lineno IN opt THEN (* this brought here from InitOptions which turned out to be unnecessary *) + useLineNo := TRUE; curpos := 256; errpos := curpos; + lasterrpos := curpos - 10 + ELSE + useLineNo := FALSE; + END; + IF useparfile IN glbopt THEN useParFile := TRUE ELSE useParFile := FALSE END; (* this check must be made before calling getproperties, noch *) + IF dontasm IN glbopt THEN dontAsm := TRUE ELSE dontAsm := FALSE END; + IF dontlink IN glbopt THEN dontLink := TRUE ELSE dontLink := FALSE END; + IF mainprog IN glbopt THEN mainProg := TRUE ELSE mainProg := FALSE END; + IF mainlinkstat IN glbopt THEN INCL(glbopt, mainprog); mainLinkStat := TRUE ELSE mainLinkStat := FALSE END; + + GetProperties; (* GetProperties moved here in order to call it after ScanOptions because we have an option whether to use par file or not, noch *) + + END; + END OpenPar; + + PROCEDURE InitOptions*; (* get the options for one translation *) + VAR s: ARRAY 256 OF CHAR; + BEGIN + opt := glbopt; s := ""; Args.Get(S, s); + WHILE s[0] = OptionChar DO ScanOptions(s, opt); INC(S); s := ""; Args.Get(S, s) END ; + IF lineno IN opt THEN useLineNo := TRUE; curpos := 256; errpos := curpos; lasterrpos := curpos - 10 + ELSE useLineNo := FALSE; + END; + END InitOptions; + + PROCEDURE Init*(VAR done: BOOLEAN; VAR mname : ARRAY OF CHAR); (* get the source for one translation *) + VAR T: Texts.Text; beg, end, time: LONGINT; + s: ARRAY 256 OF CHAR; + BEGIN + done := FALSE; curpos := 0; + IF stop OR (S >= Args.argc) THEN RETURN END ; + s := ""; Args.Get(S, s); + NEW(T); Texts.Open(T, s); + LogWStr(s); + COPY(s, mname); + IF T.len = 0 THEN LogWStr(" not found"); LogWLn + ELSE + Texts.OpenReader(inR, T, 0); + LogWStr(" translating"); + done := TRUE + END ; + INC(S); + level := 0; noerr := TRUE; errpos := curpos; lasterrpos := curpos -10; + END Init; + + (* ------------------------- read source text -------------------------*) + + PROCEDURE Get*(VAR ch: CHAR); (* read next character from source text, 0X if eof *) + BEGIN + Texts.Read(inR, ch); + IF useLineNo THEN + IF ch = 0DX THEN curpos := (curpos DIV 256 + 1) * 256 + ELSIF curpos MOD 256 # 255 THEN INC(curpos) + (* at 255 means: >= 255 *) + END + ELSE + INC(curpos) + END ; + IF (ch < 09X) & ~inR.eot THEN ch := " " END + END Get; + + PROCEDURE MakeFileName(VAR name, FName: ARRAY OF CHAR; ext: ARRAY OF CHAR); + VAR i, j: INTEGER; ch: CHAR; + BEGIN i := 0; + LOOP ch := name[i]; + IF ch = 0X THEN EXIT END ; + FName[i] := ch; INC(i) + END ; + j := 0; + REPEAT ch := ext[j]; FName[i] := ch; INC(i); INC(j) + UNTIL ch = 0X + END MakeFileName; + + PROCEDURE LogErrMsg(n: INTEGER); + VAR S: Texts.Scanner; T: Texts.Text; ch: CHAR; i: INTEGER; + buf: ARRAY 1024 OF CHAR; + BEGIN + IF n >= 0 THEN LogWStr(" err ") + ELSE LogWStr(" warning "); n := -n + END ; + LogWNum(n, 1); + LogWStr(" "); + (*NEW(T); Texts.Open(T, "vocErrors.Text"); Texts.OpenScanner(S, T, 0); + REPEAT S.line := 0; + REPEAT Texts.Scan(S) UNTIL S.eot OR (S.line # 0) + UNTIL S.eot OR (S.class = Texts.Int) & (S.i = n); + IF ~S.eot THEN Texts.Read(S, ch); i := 0; + WHILE ~S.eot & (ch # 0DX) DO buf[i] := ch; INC(i); Texts.Read(S, ch) END ; + buf[i] := 0X; LogWStr(buf); + END*) + LogWStr(errors.errors[n]); + END LogErrMsg; + + PROCEDURE Mark*(n: INTEGER; pos: LONGINT); + BEGIN + IF useLineNo THEN + IF n >= 0 THEN + noerr := FALSE; + IF (pos < lasterrpos) OR (lasterrpos + 9 < pos) THEN lasterrpos := pos; LogWLn; LogWStr(" "); + IF n < 249 THEN LogWStr(" line "); LogWNum(pos DIV 256, 1); + LogWStr(" pos "); LogWNum(pos MOD 256, 1); LogErrMsg(n) + ELSIF n = 255 THEN LogWStr(" line "); LogWNum(pos DIV 256, 1); + LogWStr(" pos "); LogWNum(pos MOD 256, 1); LogWStr(" pc "); LogWNum(breakpc, 1) + ELSIF n = 254 THEN LogWStr("pc not found") + ELSE LogWStr(objname); + IF n = 253 THEN LogWStr(" is new, compile with option e") + ELSIF n = 252 THEN LogWStr(" is redefined, compile with option s") + ELSIF n = 251 THEN LogWStr(" is redefined (private part only), compile with option s") + ELSIF n = 250 THEN LogWStr(" is no longer visible, compile with option s") + ELSIF n = 249 THEN LogWStr(" is not consistently imported, recompile imports") + END + END + END + ELSE + IF pos >= 0 THEN LogWLn; + LogWStr(" line "); LogWNum(pos DIV 256, 1); LogWStr(" pos "); LogWNum(pos MOD 256, 1) + END ; + LogErrMsg(n); + IF pos < 0 THEN LogWLn END + END + ELSE + IF n >= 0 THEN + noerr := FALSE; + IF (pos < lasterrpos) OR (lasterrpos + 9 < pos) THEN lasterrpos := pos; LogWLn; LogWStr(" "); + IF n < 249 THEN LogWStr(" pos"); LogWNum(pos, 6); LogErrMsg(n) + ELSIF n = 255 THEN LogWStr("pos"); LogWNum(pos, 6); LogWStr(" pc "); LogWNum(breakpc, 1) + ELSIF n = 254 THEN LogWStr("pc not found") + ELSE LogWStr(objname); + IF n = 253 THEN LogWStr(" is new, compile with option e") + ELSIF n = 252 THEN LogWStr(" is redefined, compile with option s") + ELSIF n = 251 THEN LogWStr(" is redefined (private part only), compile with option s") + ELSIF n = 250 THEN LogWStr(" is no longer visible, compile with option s") + ELSIF n = 249 THEN LogWStr(" is not consistently imported, recompile imports") + END + END + END + ELSE + IF pos >= 0 THEN LogWLn; LogWStr(" pos"); LogWNum(pos, 6) END ; + LogErrMsg(n); + IF pos < 0 THEN LogWLn END + END + END + END Mark; + + PROCEDURE err*(n: INTEGER); + BEGIN + IF useLineNo & (errpos MOD 256 = 255) THEN (* line underflow from OPS.Get *) + Mark(n, errpos + 1) + ELSE + Mark(n, errpos) + END + END err; + + PROCEDURE FPrint*(VAR fp: LONGINT; val: LONGINT); + BEGIN + fp := SYSTEM.ROT(SYSTEM.VAL(LONGINT, SYSTEM.VAL(SET, fp) / SYSTEM.VAL(SET, val)), 1) + END FPrint; + + PROCEDURE FPrintSet*(VAR fp: LONGINT; set: SET); + BEGIN FPrint(fp, SYSTEM.VAL(LONGINT, set)) + END FPrintSet; + + PROCEDURE FPrintReal*(VAR fp: LONGINT; real: REAL); + BEGIN FPrint(fp, SYSTEM.VAL(LONGINT, real)) + END FPrintReal; + + PROCEDURE FPrintLReal*(VAR fp: LONGINT; lr: LONGREAL); + VAR l, h: LONGINT; + BEGIN + SYSTEM.GET(SYSTEM.ADR(lr), l); SYSTEM.GET(SYSTEM.ADR(lr)+4, h); + FPrint(fp, l); FPrint(fp, h) + END FPrintLReal; + + (* ------------------------- initialization ------------------------- *) + + PROCEDURE GetProperty(VAR S: Texts.Scanner; name: ARRAY OF CHAR; VAR size, align: INTEGER); + BEGIN + IF (S.class = Texts.Name) & (S.s = name) THEN Texts.Scan(S); + IF S.class = Texts.Int THEN size := SHORT(S.i); Texts.Scan(S) ELSE Mark(-157, -1) END ; + IF S.class = Texts.Int THEN align := SHORT(S.i); Texts.Scan(S) ELSE Mark(-157, -1) END + ELSE Mark(-157, -1) + END + END GetProperty; + + PROCEDURE power0(i, j : INTEGER) : LONGINT; (* we would like to calculate exact Min Max values in GetProperties, not hardcode em, noch *) + VAR k : INTEGER; + p : LONGINT; + BEGIN + k := 1; + p := i; + REPEAT + p := p * i; + INC(k); + UNTIL k=j; + RETURN p; + END power0; + + + PROCEDURE GetProperties(); + VAR T: Texts.Text; S: Texts.Scanner; + BEGIN + + (* default characteristics *) + IF ~useParFile THEN + IF version.defaultTarget = version.gnux8664 THEN + Console.String (" GNU "); Console.String(version.arch); Console.String(" target"); Console.Ln; + ByteSize := 1; CharSize := 1; BoolSize := 1; SIntSize := 1; IntSize := 4; LIntSize := 8; + SetSize := 8; RealSize := 4; LRealSize := 8; ProcSize := 8; PointerSize := 8; RecSize := 1; + CharAlign := 1; BoolAlign := 1; SIntAlign := 1; IntAlign := 4; LIntAlign := 8; + SetAlign := 8; RealAlign := 4; LRealAlign := 8; ProcAlign := 8; PointerAlign := 8; RecAlign := 1; + (* not necessary, we will calculate values later + MinSInt := -80H; MaxSInt := 7FH; + MinInt := 80000000H(*-2147483648*); + MaxInt := 7FFFFFFFH (*2147483647*); + (*MinLInt := -8000000000000000H*) (*-9223372036854775808*) ; (* -2^63 *) + (*MaxLInt := 7FFFFFFFFFFFFFFFH *)(*9223372036854775807*) ;(* 2^63-1 *) + (*MaxSet := 31;*) + MaxSet := SetSize * 8 - 1; (*noch*) + *) + ELSIF (version.defaultTarget >= version.gnuarmv6j) & (version.defaultTarget <= version.gnuarmv7ahardfp) THEN + Console.String (" GNU "); + Console.String (version.arch); Console.String (" target"); Console.Ln; + ByteSize := 1; CharSize := 1; BoolSize := 1; SIntSize := 1; IntSize := 2; LIntSize := 4; + SetSize := 4; RealSize := 4; LRealSize := 8; ProcSize := 4; PointerSize := 4; RecSize := 1; + CharAlign := 1; BoolAlign := 1; SIntAlign := 1; IntAlign := 2; LIntAlign := 4; + SetAlign := 4; RealAlign := 4; LRealAlign := 8; ProcAlign := 4; PointerAlign := 4; RecAlign := 1; + + (* not necessary, we will calculate values later + MinSInt := -80H; MinInt := -8000H; MinLInt := 80000000H; (*-2147483648*) + MaxSInt := 7FH; MaxInt := 7FFFH; MaxLInt := 7FFFFFFFH; (*2147483647*) + MaxSet := SetSize * 8 -1; (* noch *) + *) + ELSIF version.defaultTarget = version.gnux86 THEN + Console.String("GNU "); Console.String(version.arch); Console.String(" target"); Console.Ln; + ByteSize := 1; CharSize := 1; BoolSize := 1; SIntSize := 1; IntSize := 2; LIntSize := 4; + SetSize := 4; RealSize := 4; LRealSize := 8; ProcSize := 4; PointerSize := 4; RecSize := 1; + CharAlign := 1; BoolAlign := 1; SIntAlign := 1; IntAlign := 2; LIntAlign := 4; + SetAlign := 4; RealAlign := 4; LRealAlign := 4; ProcAlign := 4; PointerAlign := 4; RecAlign := 1; + + ELSE (* this should suite any gnu x86 system *) + Console.String (" generic target, like GNU x86 system"); Console.Ln; + ByteSize := 1; CharSize := 1; BoolSize := 1; SIntSize := 1; IntSize := 2; LIntSize := 4; + SetSize := 4; RealSize := 4; LRealSize := 8; ProcSize := 4; PointerSize := 4; RecSize := 1; + CharAlign := 1; BoolAlign := 1; SIntAlign := 1; IntAlign := 2; LIntAlign := 4; + SetAlign := 4; RealAlign := 4; LRealAlign := 4; ProcAlign := 4; PointerAlign := 4; RecAlign := 1; +(* LRealAlign should be checked and confirmed *) + (* not necessary, will be calculated later + MinSInt := -80H; MinInt := -8000H; MinLInt := 80000000H; (*-2147483648*) + MaxSInt := 7FH; MaxInt := 7FFFH; MaxLInt := 7FFFFFFFH; (*2147483647*) + MaxSet := SetSize * 8 - 1; + *) + + END; (* if defaultTarget *) + END; (* if ~useParFile *) + (* read voc.par *) + + IF useParFile THEN (* noch *) + Console.String ("loading type sizes from voc.par"); Console.Ln; + NEW(T); Texts.Open(T, "voc.par"); + IF T.len # 0 THEN + Texts.OpenScanner(S, T, 0); Texts.Scan(S); + GetProperty(S, "CHAR", CharSize, CharAlign); + GetProperty(S, "BOOLEAN", BoolSize, BoolAlign); + GetProperty(S, "SHORTINT", SIntSize, SIntAlign); + GetProperty(S, "INTEGER", IntSize, IntAlign); + GetProperty(S, "LONGINT", LIntSize, LIntAlign); + GetProperty(S, "SET", SetSize, SetAlign); + GetProperty(S, "REAL", RealSize, RealAlign); + GetProperty(S, "LONGREAL", LRealSize, LRealAlign); + GetProperty(S, "PTR", PointerSize, PointerAlign); + GetProperty(S, "PROC", ProcSize, ProcAlign); + GetProperty(S, "RECORD", RecSize, RecAlign); + (* Size = 0: natural size aligned to next power of 2 up to RecAlign; e.g. i960 + Size = 1; size and alignment follows from field types but at least RecAlign; e.g, SPARC, MIPS, PowerPC + *) + GetProperty(S, "ENDIAN", ByteOrder, BitOrder); (*currently not used*) + (* add here Max and Min sizes, noch *) + ByteSize := CharSize; + ELSE Mark(-156, -1) + END ; + ELSE Console.String ("not using voc.par file"); Console.Ln; + END; (* if useParFile , noch *) + + + MinSInt := power0(-2, (SIntSize*8-1)); (* -2^(SIntSize*8-1)*) + MaxSInt := power0(2, (SIntSize*8-1))-1; + MinInt := power0(-2, (IntSize*8-1)); + MaxInt := power0(2, (IntSize*8-1))-1; + MinLInt := power0(-2, (LIntSize*8-1)); + MaxLInt := power0(2, (LIntSize*8-1))-1; + +(* + Console.Int(MinSInt, 0); Console.Ln; + Console.Int(MaxSInt, 0); Console.Ln; + Console.Int(MinInt, 0); Console.Ln; + Console.Int(MaxInt, 0); Console.Ln; + Console.Int(MinLInt, 0); Console.Ln; + Console.Int(MaxLInt, 0); Console.Ln; +*) + + + IF RealSize = 4 THEN MaxReal := 3.40282346D38 + ELSIF RealSize = 8 THEN MaxReal := 1.7976931348623157D307 * 9.999999 + (*should be 1.7976931348623157D308 *) + END ; + IF LRealSize = 4 THEN MaxLReal := 3.40282346D38 + ELSIF LRealSize = 8 THEN MaxLReal := 1.7976931348623157D307 * 9.999999 + (*should be 1.7976931348623157D308 *) + END ; + MinReal := -MaxReal; + MinLReal := -MaxLReal; + (* commented this out, *) + (*IF IntSize = 4 THEN MinInt := MinLInt; MaxInt := MaxLInt END ;*) + (*IF IntSize = 4 THEN MinLInt := MinInt; MaxLInt := MaxInt END ;*) + MaxSet := SetSize * 8 - 1; + MaxIndex := MaxLInt; (* shouldn't it be like max(int)? so that for loop will be safe, noch *) + + END GetProperties; + + (* ------------------------- Read Symbol File ------------------------- *) + + PROCEDURE SymRCh*(VAR ch: CHAR); + BEGIN Files.Read(oldSF, ch) + END SymRCh; + + PROCEDURE SymRInt*(): LONGINT; + VAR k: LONGINT; + BEGIN Files.ReadNum(oldSF, k); RETURN k + END SymRInt; + + PROCEDURE SymRSet*(VAR s: SET); + BEGIN Files.ReadNum(oldSF, SYSTEM.VAL(LONGINT, s)) + END SymRSet; + + PROCEDURE SymRReal*(VAR r: REAL); + BEGIN Files.ReadReal(oldSF, r) + END SymRReal; + + PROCEDURE SymRLReal*(VAR lr: LONGREAL); + BEGIN Files.ReadLReal(oldSF, lr) + END SymRLReal; + + PROCEDURE CloseOldSym*; + END CloseOldSym; + + PROCEDURE OldSym*(VAR modName: ARRAY OF CHAR; VAR done: BOOLEAN); + VAR ch: CHAR; fileName: FileName; + BEGIN MakeFileName(modName, fileName, SFext); + oldSFile := Files.Old(fileName); done := oldSFile # NIL; + IF done THEN + Files.Set(oldSF, oldSFile, 0); Files.Read(oldSF, ch); + IF ch # SFtag THEN err(-306); (*possibly a symbol file from another Oberon implementation, e.g. HP-Oberon*) + CloseOldSym; done := FALSE + END + END + END OldSym; + + PROCEDURE eofSF*(): BOOLEAN; + BEGIN RETURN oldSF.eof + END eofSF; + + (* ------------------------- Write Symbol File ------------------------- *) + + PROCEDURE SymWCh*(ch: CHAR); + BEGIN Files.Write(newSF, ch) + END SymWCh; + + PROCEDURE SymWInt*(i: LONGINT); + BEGIN Files.WriteNum(newSF, i) + END SymWInt; + + PROCEDURE SymWSet*(s: SET); + BEGIN Files.WriteNum(newSF, SYSTEM.VAL(LONGINT, s)) + END SymWSet; + + PROCEDURE SymWReal*(r: REAL); + BEGIN Files.WriteReal(newSF, r) + END SymWReal; + + PROCEDURE SymWLReal*(lr: LONGREAL); + BEGIN Files.WriteLReal(newSF, lr) + END SymWLReal; + + PROCEDURE RegisterNewSym*; + BEGIN + IF (modName # "SYSTEM") OR (mainprog IN opt) THEN Files.Register(newSFile) END + END RegisterNewSym; + + PROCEDURE DeleteNewSym*; + END DeleteNewSym; + + PROCEDURE NewSym*(VAR modName: ARRAY OF CHAR); + VAR fileName: FileName; + BEGIN MakeFileName(modName, fileName, SFext); + newSFile := Files.New(fileName); + IF newSFile # NIL THEN Files.Set(newSF, newSFile, 0); Files.Write(newSF, SFtag) + ELSE err(153) + END + END NewSym; + + (* ------------------------- Write Header & Body Files ------------------------- *) + + PROCEDURE Write*(ch: CHAR); + BEGIN Files.Write(R[currFile], ch) + END Write; + + PROCEDURE WriteString*(s: ARRAY [1] OF CHAR); + VAR i: INTEGER; + BEGIN i := 0; + WHILE s[i] # 0X DO INC(i) END ; + Files.WriteBytes(R[currFile], s, i) + END WriteString; + + PROCEDURE WriteStringVar*(VAR s: ARRAY OF CHAR); + VAR i: INTEGER; + BEGIN i := 0; + WHILE s[i] # 0X DO INC(i) END ; + Files.WriteBytes(R[currFile], s, i) + END WriteStringVar; + + PROCEDURE WriteHex* (i: LONGINT); + VAR s: ARRAY 3 OF CHAR; + digit : INTEGER; + BEGIN + digit := SHORT(i) DIV 16; + IF digit < 10 THEN s[0] := CHR (ORD ("0") + digit); ELSE s[0] := CHR (ORD ("a") - 10 + digit ); END; + digit := SHORT(i) MOD 16; + IF digit < 10 THEN s[1] := CHR (ORD ("0") + digit); ELSE s[1] := CHR (ORD ("a") - 10 + digit ); END; + s[2] := 0X; + WriteString(s) + END WriteHex; + + PROCEDURE WriteInt* (i: LONGINT); + VAR s: ARRAY 20 OF CHAR; i1, k: LONGINT; + BEGIN + IF i = MinLInt THEN Write("("); WriteInt(i+1); WriteString("-1)") (* requires special bootstrap for 64 bit *) + ELSE i1 := ABS(i); + s[0] := CHR(i1 MOD 10 + ORD("0")); i1 := i1 DIV 10; k := 1; + WHILE i1 > 0 DO s[k] := CHR(i1 MOD 10 + ORD("0")); i1 := i1 DIV 10; INC(k) END ; + IF i < 0 THEN s[k] := "-"; INC(k) END ; + WHILE k > 0 DO DEC(k); Write(s[k]) END + END ; + END WriteInt; + + PROCEDURE WriteReal* (r: LONGREAL; suffx: CHAR); + VAR W: Texts.Writer; T: Texts.Text; R: Texts.Reader; s: ARRAY 32 OF CHAR; ch: CHAR; i: INTEGER; + BEGIN +(*should be improved *) + IF (r < MaxLInt) & (r > MinLInt) & (r = ENTIER(r)) THEN + IF suffx = "f" THEN WriteString("(REAL)") ELSE WriteString("(LONGREAL)") END ; + WriteInt(ENTIER(r)) + ELSE + Texts.OpenWriter(W); + IF suffx = "f" THEN Texts.WriteLongReal(W, r, 16) ELSE Texts.WriteLongReal(W, r, 23) END ; + NEW(T); Texts.Open(T, ""); Texts.Append(T, W.buf); + Texts.OpenReader(R, T, 0); i := 0; Texts.Read(R, ch); + WHILE ch # 0X DO s[i] := ch; INC(i); Texts.Read(R, ch) END ; + (* s[i] := suffx; s[i+1] := 0X; + suffix does not work in K&R *) + s[i] := 0X; + i := 0; ch := s[0]; + WHILE (ch # "D") & (ch # 0X) DO INC(i); ch := s[i] END ; + IF ch = "D" THEN s[i] := "e" END ; + WriteString(s) + END + END WriteReal; + + PROCEDURE WriteLn* (); + BEGIN Files.Write(R[currFile], 0AX) + END WriteLn; + + PROCEDURE Append(VAR R: Files.Rider; F: Files.File); + VAR R1: Files.Rider; buffer: ARRAY 4096 OF CHAR; + BEGIN + IF F # NIL THEN + Files.Set(R1, F, 0); Files.ReadBytes(R1, buffer, LEN(buffer)); + WHILE LEN(buffer) - R1.res > 0 DO + Files.WriteBytes(R, buffer, LEN(buffer) - R1.res); + Files.ReadBytes(R1, buffer, LEN(buffer)) + END + END + END Append; + + PROCEDURE OpenFiles*(VAR moduleName: ARRAY OF CHAR); + VAR FName: ARRAY 32 OF CHAR; + BEGIN + COPY(moduleName, modName); + HFile := Files.New(""); + IF HFile # NIL THEN Files.Set(R[HeaderFile], HFile, 0) ELSE err(153) END ; + MakeFileName(moduleName, FName, BFext); + BFile := Files.New(FName); + IF BFile # NIL THEN Files.Set(R[BodyFile], BFile, 0) ELSE err(153) END ; + MakeFileName(moduleName, FName, HFext); + HIFile := Files.New(FName); + IF HIFile # NIL THEN Files.Set(R[HeaderInclude], HIFile, 0) ELSE err(153) END ; + IF include0 IN opt THEN + MakeFileName(moduleName, FName, ".h0"); Append(R[HeaderInclude], Files.Old(FName)); + MakeFileName(moduleName, FName, ".c0"); Append(R[BodyFile], Files.Old(FName)) + END + END OpenFiles; + + PROCEDURE CloseFiles*; + VAR FName: ARRAY 32 OF CHAR; res: INTEGER; + BEGIN + IF noerr THEN LogWStr(" "); LogWNum(Files.Pos(R[BodyFile]), 0) END ; + IF noerr THEN + IF modName = "SYSTEM" THEN + IF ~(mainprog IN opt) THEN Files.Register(BFile) END + ELSIF ~(mainprog IN opt) THEN + Append(R[HeaderInclude], HFile); + Files.Register(HIFile); Files.Register(BFile) + ELSE + MakeFileName(modName, FName, HFext); Files.Delete(FName, res); + MakeFileName(modName, FName, SFext); Files.Delete(FName, res); + Files.Register(BFile) + END + END ; + HFile := NIL; BFile := NIL; HIFile := NIL; newSFile := NIL; oldSFile := NIL; + Files.Set(R[0], NIL, 0); Files.Set(R[1], NIL, 0); Files.Set(R[2], NIL, 0); Files.Set(newSF, NIL, 0); Files.Set(oldSF, NIL, 0) + END CloseFiles; + + PROCEDURE PromoteIntConstToLInt*(); + BEGIN + (* ANSI C does not need explicit promotion. + K&R C implicitly promotes integer constants to type int in parameter lists. + if the formal parameter, however, is of type long, appending "L" is required in ordere to promote + the parameter explicitly to type long (if LONGINT corresponds to long, which we do not really know). + It works for all known K&R versions of voc and K&R is dying out anyway. + A cleaner solution would be to cast with type (LONGINT), but this requires a bit more changes. + *) + IF ~(ansi IN opt) THEN Write("L") END + END PromoteIntConstToLInt; + +BEGIN Texts.OpenWriter(W) +END OPM. diff --git a/src/voc/OPP.Mod b/src/voc/OPP.Mod new file mode 100644 index 00000000..88037863 --- /dev/null +++ b/src/voc/OPP.Mod @@ -0,0 +1,1066 @@ +MODULE OPP; (* NW, RC 6.3.89 / 10.2.94 *) (* object model 4.12.93 *) + + IMPORT + OPB, OPT, OPS, OPM; + + CONST + (* numtyp values *) + char = 1; integer = 2; real = 3; longreal = 4; + + (* symbol values *) + null = 0; times = 1; slash = 2; div = 3; mod = 4; + and = 5; plus = 6; minus = 7; or = 8; eql = 9; + neq = 10; lss = 11; leq = 12; gtr = 13; geq = 14; + in = 15; is = 16; arrow = 17; period = 18; comma = 19; + colon = 20; upto = 21; rparen = 22; rbrak = 23; rbrace = 24; + of = 25; then = 26; do = 27; to = 28; by = 29; + lparen = 30; lbrak = 31; lbrace = 32; not = 33; becomes = 34; + number = 35; nil = 36; string = 37; ident = 38; semicolon = 39; + bar = 40; end = 41; else = 42; elsif = 43; until = 44; + if = 45; case = 46; while = 47; repeat = 48; for = 49; + loop = 50; with = 51; exit = 52; return = 53; array = 54; + record = 55; pointer = 56; begin = 57; const = 58; type = 59; + var = 60; procedure = 61; import = 62; module = 63; eof = 64; + + (* object modes *) + Var = 1; VarPar = 2; Con = 3; Fld = 4; Typ = 5; LProc = 6; XProc = 7; + SProc = 8; CProc = 9; IProc = 10; Mod = 11; Head = 12; TProc = 13; + + (* Structure forms *) + Undef = 0; Byte = 1; Bool = 2; Char = 3; SInt = 4; Int = 5; LInt = 6; + Real = 7; LReal = 8; Set = 9; String = 10; NilTyp = 11; NoTyp = 12; + Pointer = 13; ProcTyp = 14; Comp = 15; + intSet = {SInt..LInt}; + + (* composite structure forms *) + Basic = 1; Array = 2; DynArr = 3; Record = 4; + + (*function number*) + haltfn = 0; newfn = 1; incfn = 13; sysnewfn = 30; + + (* nodes classes *) + Nvar = 0; Nvarpar = 1; Nfield = 2; Nderef = 3; Nindex = 4; Nguard = 5; Neguard = 6; + Nconst = 7; Ntype = 8; Nproc = 9; Nupto = 10; Nmop = 11; Ndop = 12; Ncall = 13; + Ninittd = 14; Nif = 15; Ncaselse = 16; Ncasedo = 17; Nenter = 18; Nassign = 19; + Nifelse = 20; Ncase = 21; Nwhile = 22; Nrepeat = 23; Nloop = 24; Nexit = 25; + Nreturn = 26; Nwith = 27; Ntrap = 28; + + (* node subclasses *) + super = 1; + + (* module visibility of objects *) + internal = 0; external = 1; externalR = 2; + + (* procedure flags (conval^.setval) *) + hasBody = 1; isRedef = 2; slNeeded = 3; + + TYPE + CaseTable = ARRAY OPM.MaxCases OF + RECORD + low, high: LONGINT + END ; + + VAR + sym, level: SHORTINT; + LoopLevel: INTEGER; + TDinit, lastTDinit: OPT.Node; + nofFwdPtr: INTEGER; + FwdPtr: ARRAY 64 OF OPT.Struct; + + PROCEDURE^ Type(VAR typ, banned: OPT.Struct); + PROCEDURE^ Expression(VAR x: OPT.Node); + PROCEDURE^ Block(VAR procdec, statseq: OPT.Node); + + PROCEDURE err(n: INTEGER); + BEGIN OPM.err(n) + END err; + + PROCEDURE CheckSym(s: INTEGER); + BEGIN + IF sym = s THEN OPS.Get(sym) ELSE OPM.err(s) END + END CheckSym; + + PROCEDURE qualident(VAR id: OPT.Object); + VAR obj: OPT.Object; lev: SHORTINT; + BEGIN (*sym = ident*) + OPT.Find(obj); OPS.Get(sym); + IF (sym = period) & (obj # NIL) & (obj^.mode = Mod) THEN + OPS.Get(sym); + IF sym = ident THEN + OPT.FindImport(obj, obj); OPS.Get(sym) + ELSE err(ident); obj := NIL + END + END ; + IF obj = NIL THEN err(0); + obj := OPT.NewObj(); obj^.mode := Var; obj^.typ := OPT.undftyp; obj^.adr := 0 + ELSE lev := obj^.mnolev; + IF (obj^.mode IN {Var, VarPar}) & (lev # level) THEN + obj^.leaf := FALSE; + IF lev > 0 THEN OPB.StaticLink(level-lev) END + END + END ; + id := obj + END qualident; + + PROCEDURE ConstExpression(VAR x: OPT.Node); + BEGIN Expression(x); + IF x^.class # Nconst THEN + err(50); x := OPB.NewIntConst(1) + END + END ConstExpression; + + PROCEDURE CheckMark(VAR vis: SHORTINT); + BEGIN OPS.Get(sym); + IF (sym = times) OR (sym = minus) THEN + IF level > 0 THEN err(47) END ; + IF sym = times THEN vis := external ELSE vis := externalR END ; + OPS.Get(sym) + ELSE vis := internal + END + END CheckMark; + + PROCEDURE CheckSysFlag(VAR sysflag: INTEGER; default: INTEGER); + VAR x: OPT.Node; sf: LONGINT; + BEGIN + IF sym = lbrak THEN OPS.Get(sym); ConstExpression(x); + IF x^.typ^.form IN intSet THEN sf := x^.conval^.intval; + IF (sf < 0) OR (sf > OPM.MaxSysFlag) THEN err(220); sf := 0 END + ELSE err(51); sf := 0 + END ; + sysflag := SHORT(sf); CheckSym(rbrak) + ELSE sysflag := default + END + END CheckSysFlag; + + PROCEDURE RecordType(VAR typ, banned: OPT.Struct); + VAR fld, first, last, base: OPT.Object; + ftyp: OPT.Struct; sysflag: INTEGER; + BEGIN typ := OPT.NewStr(Comp, Record); typ^.BaseTyp := NIL; + CheckSysFlag(sysflag, -1); + IF sym = lparen THEN + OPS.Get(sym); (*record extension*) + IF sym = ident THEN + qualident(base); + IF (base^.mode = Typ) & (base^.typ^.comp = Record) THEN + IF base^.typ = banned THEN err(58) + ELSE base^.typ^.pvused := TRUE; + typ^.BaseTyp := base^.typ; typ^.extlev := base^.typ^.extlev + 1; typ^.sysflag := base^.typ^.sysflag + END + ELSE err(52) + END + ELSE err(ident) + END ; + CheckSym(rparen) + END ; + IF sysflag >= 0 THEN typ^.sysflag := sysflag END ; + OPT.OpenScope(0, NIL); first := NIL; last := NIL; + LOOP + IF sym = ident THEN + LOOP + IF sym = ident THEN + IF typ^.BaseTyp # NIL THEN + OPT.FindField(OPS.name, typ^.BaseTyp, fld); + IF fld # NIL THEN err(1) END + END ; + OPT.Insert(OPS.name, fld); CheckMark(fld^.vis); + fld^.mode := Fld; fld^.link := NIL; fld^.typ := OPT.undftyp; + IF first = NIL THEN first := fld END ; + IF last = NIL THEN typ^.link := fld ELSE last^.link := fld END ; + last := fld + ELSE err(ident) + END ; + IF sym = comma THEN OPS.Get(sym) + ELSIF sym = ident THEN err(comma) + ELSE EXIT + END + END ; + CheckSym(colon); Type(ftyp, banned); + ftyp^.pvused := TRUE; + IF ftyp^.comp = DynArr THEN ftyp := OPT.undftyp; err(88) END ; + WHILE first # NIL DO + first^.typ := ftyp; first := first^.link + END + END ; + IF sym = semicolon THEN OPS.Get(sym) + ELSIF sym = ident THEN err(semicolon) + ELSE EXIT + END + END ; + OPT.CloseScope + END RecordType; + + PROCEDURE ArrayType(VAR typ, banned: OPT.Struct); + VAR x: OPT.Node; n: LONGINT; sysflag: INTEGER; + BEGIN CheckSysFlag(sysflag, 0); + IF sym = of THEN (*dynamic array*) + typ := OPT.NewStr(Comp, DynArr); typ^.mno := 0; typ^.sysflag := sysflag; + OPS.Get(sym); Type(typ^.BaseTyp, banned); + typ^.BaseTyp^.pvused := TRUE; + IF typ^.BaseTyp^.comp = DynArr THEN typ^.n := typ^.BaseTyp^.n + 1 + ELSE typ^.n := 0 + END + ELSE + typ := OPT.NewStr(Comp, Array); typ^.sysflag := sysflag; ConstExpression(x); + IF x^.typ^.form IN intSet THEN n := x^.conval^.intval; + IF (n <= 0) OR (n > OPM.MaxIndex) THEN err(63); n := 1 END + ELSE err(51); n := 1 + END ; + typ^.n := n; + IF sym = of THEN + OPS.Get(sym); Type(typ^.BaseTyp, banned); + typ^.BaseTyp^.pvused := TRUE + ELSIF sym = comma THEN + OPS.Get(sym); IF sym # of THEN ArrayType(typ^.BaseTyp, banned) END + ELSE err(35) + END ; + IF typ^.BaseTyp^.comp = DynArr THEN typ^.BaseTyp := OPT.undftyp; err(88) END + END + END ArrayType; + + PROCEDURE PointerType(VAR typ: OPT.Struct); + VAR id: OPT.Object; + BEGIN typ := OPT.NewStr(Pointer, Basic); CheckSysFlag(typ^.sysflag, 0); + CheckSym(to); + IF sym = ident THEN OPT.Find(id); + IF id = NIL THEN + IF nofFwdPtr < LEN(FwdPtr) THEN FwdPtr[nofFwdPtr] := typ; INC(nofFwdPtr) + ELSE err(224) + END ; + typ^.link := OPT.NewObj(); COPY(OPS.name, typ^.link^.name); + typ^.BaseTyp := OPT.undftyp; OPS.Get(sym) (*forward ref*) + ELSE qualident(id); + IF id^.mode = Typ THEN + IF id^.typ^.comp IN {Array, DynArr, Record} THEN + typ^.BaseTyp := id^.typ + ELSE typ^.BaseTyp := OPT.undftyp; err(57) + END + ELSE typ^.BaseTyp := OPT.undftyp; err(52) + END + END + ELSE Type(typ^.BaseTyp, OPT.notyp); + IF ~(typ^.BaseTyp^.comp IN {Array, DynArr, Record}) THEN + typ^.BaseTyp := OPT.undftyp; err(57) + END + END + END PointerType; + + PROCEDURE FormalParameters(VAR firstPar: OPT.Object; VAR resTyp: OPT.Struct); + VAR mode: SHORTINT; + par, first, last, res: OPT.Object; typ: OPT.Struct; + BEGIN first := NIL; last := firstPar; + IF (sym = ident) OR (sym = var) THEN + LOOP + IF sym = var THEN OPS.Get(sym); mode := VarPar ELSE mode := Var END ; + LOOP + IF sym = ident THEN + OPT.Insert(OPS.name, par); OPS.Get(sym); + par^.mode := mode; par^.link := NIL; + IF first = NIL THEN first := par END ; + IF firstPar = NIL THEN firstPar := par ELSE last^.link := par END ; + last := par + ELSE err(ident) + END ; + IF sym = comma THEN OPS.Get(sym) + ELSIF sym = ident THEN err(comma) + ELSIF sym = var THEN err(comma); OPS.Get(sym) + ELSE EXIT + END + END ; + CheckSym(colon); Type(typ, OPT.notyp); + IF mode = Var THEN typ^.pvused := TRUE END ; + (* typ^.pbused is set when parameter type name is parsed *) + WHILE first # NIL DO first^.typ := typ; first := first^.link END ; + IF sym = semicolon THEN OPS.Get(sym) + ELSIF sym = ident THEN err(semicolon) + ELSE EXIT + END + END + END ; + CheckSym(rparen); + IF sym = colon THEN + OPS.Get(sym); resTyp := OPT.undftyp; + IF sym = ident THEN qualident(res); + IF res^.mode = Typ THEN + IF res^.typ^.form < Comp THEN resTyp := res^.typ + ELSE err(54) + END + ELSE err(52) + END + ELSE err(ident) + END + ELSE resTyp := OPT.notyp + END + END FormalParameters; + + PROCEDURE TypeDecl(VAR typ, banned: OPT.Struct); + VAR id: OPT.Object; + BEGIN typ := OPT.undftyp; + IF sym < lparen THEN err(12); + REPEAT OPS.Get(sym) UNTIL sym >= lparen + END ; + IF sym = ident THEN qualident(id); + IF id^.mode = Typ THEN + IF id^.typ # banned THEN typ := id^.typ ELSE err(58) END + ELSE err(52) + END + ELSIF sym = array THEN + OPS.Get(sym); ArrayType(typ, banned) + ELSIF sym = record THEN + OPS.Get(sym); RecordType(typ, banned); + OPB.Inittd(TDinit, lastTDinit, typ); CheckSym(end) + ELSIF sym = pointer THEN + OPS.Get(sym); PointerType(typ) + ELSIF sym = procedure THEN + OPS.Get(sym); typ := OPT.NewStr(ProcTyp, Basic); CheckSysFlag(typ^.sysflag, 0); + IF sym = lparen THEN + OPS.Get(sym); OPT.OpenScope(level, NIL); + FormalParameters(typ^.link, typ^.BaseTyp); OPT.CloseScope + ELSE typ^.BaseTyp := OPT.notyp; typ^.link := NIL + END + ELSE err(12) + END ; + LOOP + IF (sym >= semicolon) & (sym <= else) OR (sym = rparen) OR (sym = eof) THEN EXIT END; + err(15); IF sym = ident THEN EXIT END; + OPS.Get(sym) + END + END TypeDecl; + + PROCEDURE Type(VAR typ, banned: OPT.Struct); + BEGIN TypeDecl(typ, banned); + IF (typ^.form = Pointer) & (typ^.BaseTyp = OPT.undftyp) & (typ^.strobj = NIL) THEN err(0) END + END Type; + + PROCEDURE selector(VAR x: OPT.Node); + VAR obj, proc: OPT.Object; y: OPT.Node; typ: OPT.Struct; name: OPS.Name; + BEGIN + LOOP + IF sym = lbrak THEN OPS.Get(sym); + LOOP + IF (x^.typ # NIL) & (x^.typ^.form = Pointer) THEN OPB.DeRef(x) END ; + Expression(y); OPB.Index(x, y); + IF sym = comma THEN OPS.Get(sym) ELSE EXIT END + END ; + CheckSym(rbrak) + ELSIF sym = period THEN OPS.Get(sym); + IF sym = ident THEN name := OPS.name; OPS.Get(sym); + IF x^.typ # NIL THEN + IF x^.typ^.form = Pointer THEN OPB.DeRef(x) END ; + IF x^.typ^.comp = Record THEN + OPT.FindField(name, x^.typ, obj); OPB.Field(x, obj); + IF (obj # NIL) & (obj^.mode = TProc) THEN + IF sym = arrow THEN (* super call *) OPS.Get(sym); + y := x^.left; + IF y^.class = Nderef THEN y := y^.left END ; (* y = record variable *) + IF y^.obj # NIL THEN + proc := OPT.topScope; (* find innermost scope which owner is a TProc *) + WHILE (proc^.link # NIL) & (proc^.link^.mode # TProc) DO proc := proc^.left END ; + IF (proc^.link = NIL) OR (proc^.link^.link # y^.obj) THEN err(75) END ; + typ := y^.obj^.typ; + IF typ^.form = Pointer THEN typ := typ^.BaseTyp END ; + OPT.FindField(x^.obj^.name, typ^.BaseTyp, proc); + IF proc # NIL THEN x^.subcl := super ELSE err(74) END + ELSE err(75) + END + END ; + IF (obj^.typ # OPT.notyp) & (sym # lparen) THEN err(lparen) END + END + ELSE err(53) + END + ELSE err(52) + END + ELSE err(ident) + END + ELSIF sym = arrow THEN OPS.Get(sym); OPB.DeRef(x) + ELSIF (sym = lparen) & (x^.class < Nconst) & (x^.typ^.form # ProcTyp) & + ((x^.obj = NIL) OR (x^.obj^.mode # TProc)) THEN + OPS.Get(sym); + IF sym = ident THEN + qualident(obj); + IF obj^.mode = Typ THEN OPB.TypTest(x, obj, TRUE) + ELSE err(52) + END + ELSE err(ident) + END ; + CheckSym(rparen) + ELSE EXIT + END + END + END selector; + + PROCEDURE ActualParameters(VAR aparlist: OPT.Node; fpar: OPT.Object); + VAR apar, last: OPT.Node; + BEGIN aparlist := NIL; last := NIL; + IF sym # rparen THEN + LOOP Expression(apar); + IF fpar # NIL THEN + OPB.Param(apar, fpar); OPB.Link(aparlist, last, apar); + fpar := fpar^.link; + ELSE err(64) + END ; + IF sym = comma THEN OPS.Get(sym) + ELSIF (lparen <= sym) & (sym <= ident) THEN err(comma) + ELSE EXIT + END + END + END ; + IF fpar # NIL THEN err(65) END + END ActualParameters; + + PROCEDURE StandProcCall(VAR x: OPT.Node); + VAR y: OPT.Node; m: SHORTINT; n: INTEGER; + BEGIN m := SHORT(SHORT(x^.obj^.adr)); n := 0; + IF sym = lparen THEN OPS.Get(sym); + IF sym # rparen THEN + LOOP + IF n = 0 THEN Expression(x); OPB.StPar0(x, m); n := 1 + ELSIF n = 1 THEN Expression(y); OPB.StPar1(x, y, m); n := 2 + ELSE Expression(y); OPB.StParN(x, y, m, n); INC(n) + END ; + IF sym = comma THEN OPS.Get(sym) + ELSIF (lparen <= sym) & (sym <= ident) THEN err(comma) + ELSE EXIT + END + END ; + CheckSym(rparen) + ELSE OPS.Get(sym) + END ; + OPB.StFct(x, m, n) + ELSE err(lparen) + END ; + IF (level > 0) & ((m = newfn) OR (m = sysnewfn)) THEN OPT.topScope^.link^.leaf := FALSE END + END StandProcCall; + + PROCEDURE Element(VAR x: OPT.Node); + VAR y: OPT.Node; + BEGIN Expression(x); + IF sym = upto THEN + OPS.Get(sym); Expression(y); OPB.SetRange(x, y) + ELSE OPB.SetElem(x) + END + END Element; + + PROCEDURE Sets(VAR x: OPT.Node); + VAR y: OPT.Node; + BEGIN + IF sym # rbrace THEN + Element(x); + LOOP + IF sym = comma THEN OPS.Get(sym) + ELSIF (lparen <= sym) & (sym <= ident) THEN err(comma) + ELSE EXIT + END ; + Element(y); OPB.Op(plus, x, y) + END + ELSE x := OPB.EmptySet() + END ; + CheckSym(rbrace) + END Sets; + + PROCEDURE Factor(VAR x: OPT.Node); + VAR fpar, id: OPT.Object; apar: OPT.Node; + BEGIN + IF sym < lparen THEN err(13); + REPEAT OPS.Get(sym) UNTIL sym >= lparen + END ; + IF sym = ident THEN + qualident(id); x := OPB.NewLeaf(id); selector(x); + IF (x^.class = Nproc) & (x^.obj^.mode = SProc) THEN StandProcCall(x) (* x may be NIL *) + ELSIF sym = lparen THEN + OPS.Get(sym); OPB.PrepCall(x, fpar); + ActualParameters(apar, fpar); + OPB.Call(x, apar, fpar); + CheckSym(rparen); + IF level > 0 THEN OPT.topScope^.link^.leaf := FALSE END + END + ELSIF sym = number THEN + CASE OPS.numtyp OF + char: x := OPB.NewIntConst(OPS.intval); x^.typ := OPT.chartyp + | integer: x := OPB.NewIntConst(OPS.intval) + | real: x := OPB.NewRealConst(OPS.realval, OPT.realtyp) + | longreal: x := OPB.NewRealConst(OPS.lrlval, OPT.lrltyp) + END ; + OPS.Get(sym) + ELSIF sym = string THEN + x := OPB.NewString(OPS.str, OPS.intval); OPS.Get(sym) + ELSIF sym = nil THEN + x := OPB.Nil(); OPS.Get(sym) + ELSIF sym = lparen THEN + OPS.Get(sym); Expression(x); CheckSym(rparen) + ELSIF sym = lbrak THEN + OPS.Get(sym); err(lparen); Expression(x); CheckSym(rparen) + ELSIF sym = lbrace THEN OPS.Get(sym); Sets(x) + ELSIF sym = not THEN + OPS.Get(sym); Factor(x); OPB.MOp(not, x) + ELSE err(13); OPS.Get(sym); x := NIL + END ; + IF x = NIL THEN x := OPB.NewIntConst(1); x^.typ := OPT.undftyp END + END Factor; + + PROCEDURE Term(VAR x: OPT.Node); + VAR y: OPT.Node; mulop: SHORTINT; + BEGIN Factor(x); + WHILE (times <= sym) & (sym <= and) DO + mulop := sym; OPS.Get(sym); + Factor(y); OPB.Op(mulop, x, y) + END + END Term; + + PROCEDURE SimpleExpression(VAR x: OPT.Node); + VAR y: OPT.Node; addop: SHORTINT; + BEGIN + IF sym = minus THEN OPS.Get(sym); Term(x); OPB.MOp(minus, x) + ELSIF sym = plus THEN OPS.Get(sym); Term(x); OPB.MOp(plus, x) + ELSE Term(x) + END ; + WHILE (plus <= sym) & (sym <= or) DO + addop := sym; OPS.Get(sym); + Term(y); OPB.Op(addop, x, y) + END + END SimpleExpression; + + PROCEDURE Expression(VAR x: OPT.Node); + VAR y: OPT.Node; obj: OPT.Object; relation: SHORTINT; + BEGIN SimpleExpression(x); + IF (eql <= sym) & (sym <= geq) THEN + relation := sym; OPS.Get(sym); + SimpleExpression(y); OPB.Op(relation, x, y) + ELSIF sym = in THEN + OPS.Get(sym); SimpleExpression(y); OPB.In(x, y) + ELSIF sym = is THEN + OPS.Get(sym); + IF sym = ident THEN + qualident(obj); + IF obj^.mode = Typ THEN OPB.TypTest(x, obj, FALSE) + ELSE err(52) + END + ELSE err(ident) + END + END + END Expression; + + PROCEDURE Receiver(VAR mode: SHORTINT; VAR name: OPS.Name; VAR typ, rec: OPT.Struct); + VAR obj: OPT.Object; + BEGIN typ := OPT.undftyp; rec := NIL; + IF sym = var THEN OPS.Get(sym); mode := VarPar ELSE mode := Var END ; + name := OPS.name; CheckSym(ident); CheckSym(colon); + IF sym = ident THEN OPT.Find(obj); OPS.Get(sym); + IF obj = NIL THEN err(0) + ELSIF obj^.mode # Typ THEN err(72) + ELSE typ := obj^.typ; rec := typ; + IF rec^.form = Pointer THEN rec := rec^.BaseTyp END ; + IF ~((mode = Var) & (typ^.form = Pointer) & (rec^.comp = Record) OR + (mode = VarPar) & (typ^.comp = Record)) THEN err(70); rec := NIL END ; + IF (rec # NIL) & (rec^.mno # level) THEN err(72); rec := NIL END + END + ELSE err(ident) + END ; + CheckSym(rparen); + IF rec = NIL THEN rec := OPT.NewStr(Comp, Record); rec^.BaseTyp := NIL END + END Receiver; + + PROCEDURE Extends(x, b: OPT.Struct): BOOLEAN; + BEGIN + IF (b^.form = Pointer) & (x^.form = Pointer) THEN b := b^.BaseTyp; x := x^.BaseTyp END ; + IF (b^.comp = Record) & (x^.comp = Record) THEN + REPEAT x := x^.BaseTyp UNTIL (x = NIL) OR (x = b) + END ; + RETURN x = b + END Extends; + + PROCEDURE ProcedureDeclaration(VAR x: OPT.Node); + VAR proc, fwd: OPT.Object; + name: OPS.Name; + mode, vis: SHORTINT; + forward: BOOLEAN; + + PROCEDURE GetCode; + VAR ext: OPT.ConstExt; n: INTEGER; c: LONGINT; + BEGIN + ext := OPT.NewExt(); proc^.conval^.ext := ext; n := 0; + IF sym = string THEN + WHILE OPS.str[n] # 0X DO ext[n+1] := OPS.str[n]; INC(n) END ; + ext^[0] := CHR(n); OPS.Get(sym) + ELSE + LOOP + IF sym = number THEN c := OPS.intval; INC(n); + IF (c < 0) OR (c > 255) OR (n = OPT.MaxConstLen) THEN + err(64); c := 1; n := 1 + END ; + OPS.Get(sym); ext^[n] := CHR(c) + END ; + IF sym = comma THEN OPS.Get(sym) + ELSIF sym = number THEN err(comma) + ELSE ext^[0] := CHR(n); EXIT + END + END + END ; + INCL(proc^.conval^.setval, hasBody) + END GetCode; + + PROCEDURE GetParams; + BEGIN + proc^.vis := vis; proc^.mode := mode; proc^.typ := OPT.notyp; + proc^.conval := OPT.NewConst(); proc^.conval^.setval := {}; + IF sym = lparen THEN + OPS.Get(sym); FormalParameters(proc^.link, proc^.typ) + END ; + IF fwd # NIL THEN + OPB.CheckParameters(proc^.link, fwd^.link, TRUE); + IF proc^.typ # fwd^.typ THEN err(117) END ; + proc := fwd; OPT.topScope := proc^.scope; + IF mode = IProc THEN proc^.mode := IProc END + END + END GetParams; + + PROCEDURE Body; + VAR procdec, statseq: OPT.Node; c: LONGINT; + BEGIN + c := OPM.errpos; + INCL(proc^.conval^.setval, hasBody); + CheckSym(semicolon); Block(procdec, statseq); + OPB.Enter(procdec, statseq, proc); x := procdec; + x^.conval := OPT.NewConst(); x^.conval^.intval := c; + IF sym = ident THEN + IF OPS.name # proc^.name THEN err(4) END ; + OPS.Get(sym) + ELSE err(ident) + END + END Body; + + PROCEDURE TProcDecl; + VAR baseProc: OPT.Object; + objTyp, recTyp: OPT.Struct; + objMode: SHORTINT; + objName: OPS.Name; + BEGIN + OPS.Get(sym); mode := TProc; + IF level > 0 THEN err(73) END ; + Receiver(objMode, objName, objTyp, recTyp); + IF sym = ident THEN + name := OPS.name; CheckMark(vis); + OPT.FindField(name, recTyp, fwd); + OPT.FindField(name, recTyp^.BaseTyp, baseProc); + IF (baseProc # NIL) & (baseProc^.mode # TProc) THEN baseProc := NIL END ; + IF fwd = baseProc THEN fwd := NIL END ; + IF (fwd # NIL) & (fwd^.mnolev # level) THEN fwd := NIL END ; + IF (fwd # NIL) & (fwd^.mode = TProc) & ~(hasBody IN fwd^.conval^.setval) THEN + (* there exists a corresponding forward declaration *) + proc := OPT.NewObj(); proc^.leaf := TRUE; + IF fwd^.vis # vis THEN err(118) END + ELSE + IF fwd # NIL THEN err(1); fwd := NIL END ; + OPT.OpenScope(0, NIL); OPT.topScope^.right := recTyp^.link; OPT.Insert(name, proc); + recTyp^.link := OPT.topScope^.right; OPT.CloseScope; + END ; + INC(level); OPT.OpenScope(level, proc); + OPT.Insert(objName, proc^.link); proc^.link^.mode := objMode; proc^.link^.typ := objTyp; + GetParams; + IF baseProc # NIL THEN + IF (objMode # baseProc^.link^.mode) OR ~Extends(objTyp, baseProc^.link^.typ) THEN err(115) END ; + OPB.CheckParameters(proc^.link^.link, baseProc^.link^.link, FALSE); + IF proc^.typ # baseProc^.typ THEN err(117) END ; + IF (baseProc^.vis = external) & (proc^.vis = internal) & + (recTyp^.strobj # NIL) & (recTyp^.strobj^.vis = external) THEN err(109) + END ; + INCL(proc^.conval^.setval, isRedef) + END ; + IF ~forward THEN Body END ; + DEC(level); OPT.CloseScope + ELSE err(ident) + END + END TProcDecl; + + BEGIN proc := NIL; forward := FALSE; x := NIL; mode := LProc; + IF (sym # ident) & (sym # lparen) THEN + IF sym = times THEN (* mode set later in OPB.CheckAssign *) + ELSIF sym = arrow THEN forward := TRUE + ELSIF sym = plus THEN mode := IProc + ELSIF sym = minus THEN mode := CProc + ELSE err(ident) + END ; + IF (mode IN {IProc, CProc}) & ~OPT.SYSimported THEN err(135) END ; + OPS.Get(sym) + END ; + IF sym = lparen THEN TProcDecl + ELSIF sym = ident THEN OPT.Find(fwd); + name := OPS.name; CheckMark(vis); + IF (vis # internal) & (mode = LProc) THEN mode := XProc END ; + IF (fwd # NIL) & ((fwd^.mnolev # level) OR (fwd^.mode = SProc)) THEN fwd := NIL END ; + IF (fwd # NIL) & (fwd^.mode IN {LProc, XProc}) & ~(hasBody IN fwd^.conval^.setval) THEN + (* there exists a corresponding forward declaration *) + proc := OPT.NewObj(); proc^.leaf := TRUE; + IF fwd^.vis # vis THEN err(118) END + ELSE + IF fwd # NIL THEN err(1); fwd := NIL END ; + OPT.Insert(name, proc) + END ; + IF (mode # LProc) & (level > 0) THEN err(73) END ; + INC(level); OPT.OpenScope(level, proc); + proc^.link := NIL; GetParams; + IF mode = CProc THEN GetCode + ELSIF ~forward THEN Body + END ; + DEC(level); OPT.CloseScope + ELSE err(ident) + END + END ProcedureDeclaration; + + PROCEDURE CaseLabelList(VAR lab: OPT.Node; LabelForm: INTEGER; VAR n: INTEGER; VAR tab: CaseTable); + VAR x, y, lastlab: OPT.Node; i, f: INTEGER; xval, yval: LONGINT; + BEGIN lab := NIL; lastlab := NIL; + LOOP ConstExpression(x); f := x^.typ^.form; + IF f IN intSet + {Char} THEN xval := x^.conval^.intval + ELSE err(61); xval := 1 + END ; + IF f IN intSet THEN + IF LabelForm < f THEN err(60) END + ELSIF LabelForm # f THEN err(60) + END ; + IF sym = upto THEN + OPS.Get(sym); ConstExpression(y); yval := y^.conval^.intval; + IF (y^.typ^.form # f) & ~((f IN intSet) & (y^.typ^.form IN intSet)) THEN err(60) END ; + IF yval < xval THEN err(63); yval := xval END + ELSE yval := xval + END ; + x^.conval^.intval2 := yval; + (*enter label range into ordered table*) i := n; + IF i < OPM.MaxCases THEN + LOOP + IF i = 0 THEN EXIT END ; + IF tab[i-1].low <= yval THEN + IF tab[i-1].high >= xval THEN err(62) END ; + EXIT + END ; + tab[i] := tab[i-1]; DEC(i) + END ; + tab[i].low := xval; tab[i].high := yval; INC(n) + ELSE err(213) + END ; + OPB.Link(lab, lastlab, x); + IF sym = comma THEN OPS.Get(sym) + ELSIF (sym = number) OR (sym = ident) THEN err(comma) + ELSE EXIT + END + END + END CaseLabelList; + + PROCEDURE StatSeq(VAR stat: OPT.Node); + VAR fpar, id, t, obj: OPT.Object; idtyp: OPT.Struct; e: BOOLEAN; + s, x, y, z, apar, last, lastif: OPT.Node; pos: LONGINT; name: OPS.Name; + + PROCEDURE CasePart(VAR x: OPT.Node); + VAR n: INTEGER; low, high: LONGINT; e: BOOLEAN; + tab: CaseTable; cases, lab, y, lastcase: OPT.Node; + BEGIN + Expression(x); pos := OPM.errpos; + IF (x^.class = Ntype) OR (x^.class = Nproc) THEN err(126) + ELSIF ~(x^.typ^.form IN {Char..LInt}) THEN err(125) + END ; + CheckSym(of); cases := NIL; lastcase := NIL; n := 0; + LOOP + IF sym < bar THEN + CaseLabelList(lab, x^.typ^.form, n, tab); + CheckSym(colon); StatSeq(y); + OPB.Construct(Ncasedo, lab, y); OPB.Link(cases, lastcase, lab) + END ; + IF sym = bar THEN OPS.Get(sym) ELSE EXIT END + END ; + IF n > 0 THEN low := tab[0].low; high := tab[n-1].high; + IF high - low > OPM.MaxCaseRange THEN err(209) END + ELSE low := 1; high := 0 + END ; + e := sym = else; + IF e THEN OPS.Get(sym); StatSeq(y) ELSE y := NIL END ; + OPB.Construct(Ncaselse, cases, y); OPB.Construct(Ncase, x, cases); + cases^.conval := OPT.NewConst(); + cases^.conval^.intval := low; cases^.conval^.intval2 := high; + IF e THEN cases^.conval^.setval := {1} ELSE cases^.conval^.setval := {} END + END CasePart; + + PROCEDURE SetPos(x: OPT.Node); + BEGIN + x^.conval := OPT.NewConst(); x^.conval^.intval := pos + END SetPos; + + PROCEDURE CheckBool(VAR x: OPT.Node); + BEGIN + IF (x^.class = Ntype) OR (x^.class = Nproc) THEN err(126); x := OPB.NewBoolConst(FALSE) + ELSIF x^.typ^.form # Bool THEN err(120); x := OPB.NewBoolConst(FALSE) + END ; + pos := OPM.errpos + END CheckBool; + + BEGIN stat := NIL; last := NIL; + LOOP x := NIL; + IF sym < ident THEN err(14); + REPEAT OPS.Get(sym) UNTIL sym >= ident + END ; + IF sym = ident THEN + qualident(id); x := OPB.NewLeaf(id); selector(x); + IF sym = becomes THEN + OPS.Get(sym); Expression(y); OPB.Assign(x, y) + ELSIF sym = eql THEN + err(becomes); OPS.Get(sym); Expression(y); OPB.Assign(x, y) + ELSIF (x^.class = Nproc) & (x^.obj^.mode = SProc) THEN + StandProcCall(x); + IF (x # NIL) & (x^.typ # OPT.notyp) THEN err(55) END + ELSE OPB.PrepCall(x, fpar); + IF sym = lparen THEN + OPS.Get(sym); ActualParameters(apar, fpar); CheckSym(rparen) + ELSE apar := NIL; + IF fpar # NIL THEN err(65) END + END ; + OPB.Call(x, apar, fpar); + IF x^.typ # OPT.notyp THEN err(55) END ; + IF level > 0 THEN OPT.topScope^.link^.leaf := FALSE END + END ; + pos := OPM.errpos + ELSIF sym = if THEN + OPS.Get(sym); Expression(x); CheckBool(x); CheckSym(then); StatSeq(y); + OPB.Construct(Nif, x, y); SetPos(x); lastif := x; + WHILE sym = elsif DO + OPS.Get(sym); Expression(y); CheckBool(y); CheckSym(then); StatSeq(z); + OPB.Construct(Nif, y, z); SetPos(y); OPB.Link(x, lastif, y) + END ; + IF sym = else THEN OPS.Get(sym); StatSeq(y) ELSE y := NIL END ; + OPB.Construct(Nifelse, x, y); CheckSym(end); OPB.OptIf(x); pos := OPM.errpos + ELSIF sym = case THEN + OPS.Get(sym); CasePart(x); CheckSym(end) + ELSIF sym = while THEN + OPS.Get(sym); Expression(x); CheckBool(x); CheckSym(do); StatSeq(y); + OPB.Construct(Nwhile, x, y); CheckSym(end) + ELSIF sym = repeat THEN + OPS.Get(sym); StatSeq(x); + IF sym = until THEN OPS.Get(sym); Expression(y); CheckBool(y) + ELSE err(until) + END ; + OPB.Construct(Nrepeat, x, y) + ELSIF sym = for THEN + OPS.Get(sym); + IF sym = ident THEN qualident(id); + IF ~(id^.typ^.form IN intSet) THEN err(68) END ; + CheckSym(becomes); Expression(y); pos := OPM.errpos; + x := OPB.NewLeaf(id); OPB.Assign(x, y); SetPos(x); + CheckSym(to); Expression(y); pos := OPM.errpos; + IF y^.class # Nconst THEN + name := "@@"; OPT.Insert(name, t); t^.name := "@for"; (* avoid err 1 *) + t^.mode := Var; t^.typ := x^.left^.typ; + obj := OPT.topScope^.scope; + IF obj = NIL THEN OPT.topScope^.scope := t + ELSE + WHILE obj^.link # NIL DO obj := obj^.link END ; + obj^.link := t + END ; + z := OPB.NewLeaf(t); OPB.Assign(z, y); SetPos(z); OPB.Link(stat, last, z); + y := OPB.NewLeaf(t) + ELSIF (y^.typ^.form < SInt) OR (y^.typ^.form > x^.left^.typ^.form) THEN err(113) + END ; + OPB.Link(stat, last, x); + IF sym = by THEN OPS.Get(sym); ConstExpression(z) ELSE z := OPB.NewIntConst(1) END ; + pos := OPM.errpos; x := OPB.NewLeaf(id); + IF z^.conval^.intval > 0 THEN OPB.Op(leq, x, y) + ELSIF z^.conval^.intval < 0 THEN OPB.Op(geq, x, y) + ELSE err(63); OPB.Op(geq, x, y) + END ; + CheckSym(do); StatSeq(s); + y := OPB.NewLeaf(id); OPB.StPar1(y, z, incfn); SetPos(y); + IF s = NIL THEN s := y + ELSE z := s; + WHILE z^.link # NIL DO z := z^.link END ; + z^.link := y + END ; + CheckSym(end); OPB.Construct(Nwhile, x, s) + ELSE err(ident) + END + ELSIF sym = loop THEN + OPS.Get(sym); INC(LoopLevel); StatSeq(x); DEC(LoopLevel); + OPB.Construct(Nloop, x, NIL); CheckSym(end); pos := OPM.errpos + ELSIF sym = with THEN + OPS.Get(sym); idtyp := NIL; x := NIL; + LOOP + IF sym = ident THEN + qualident(id); y := OPB.NewLeaf(id); + IF (id # NIL) & (id^.typ^.form = Pointer) & ((id^.mode = VarPar) OR ~id^.leaf) THEN + err(245) (* jt: do not allow WITH on non-local pointers *) + END ; + CheckSym(colon); + IF sym = ident THEN qualident(t); + IF t^.mode = Typ THEN + IF id # NIL THEN + idtyp := id^.typ; OPB.TypTest(y, t, FALSE); id^.typ := t^.typ + ELSE err(130) + END + ELSE err(52) + END + ELSE err(ident) + END + ELSE err(ident) + END ; + pos := OPM.errpos; CheckSym(do); StatSeq(s); OPB.Construct(Nif, y, s); SetPos(y); + IF idtyp # NIL THEN id^.typ := idtyp; idtyp := NIL END ; + IF x = NIL THEN x := y; lastif := x ELSE OPB.Link(x, lastif, y) END ; + IF sym = bar THEN OPS.Get(sym) ELSE EXIT END + END; + e := sym = else; + IF e THEN OPS.Get(sym); StatSeq(s) ELSE s := NIL END ; + OPB.Construct(Nwith, x, s); CheckSym(end); + IF e THEN x^.subcl := 1 END + ELSIF sym = exit THEN + OPS.Get(sym); + IF LoopLevel = 0 THEN err(46) END ; + OPB.Construct(Nexit, x, NIL); + pos := OPM.errpos + ELSIF sym = return THEN OPS.Get(sym); + IF sym < semicolon THEN Expression(x) END ; + IF level > 0 THEN OPB.Return(x, OPT.topScope^.link) + ELSE (* not standard Oberon *) OPB.Return(x, NIL) + END ; + pos := OPM.errpos + END ; + IF x # NIL THEN SetPos(x); OPB.Link(stat, last, x) END ; + IF sym = semicolon THEN OPS.Get(sym) + ELSIF (sym <= ident) OR (if <= sym) & (sym <= return) THEN err(semicolon) + ELSE EXIT + END + END + END StatSeq; + + PROCEDURE Block(VAR procdec, statseq: OPT.Node); + VAR typ: OPT.Struct; + obj, first, last: OPT.Object; + x, lastdec: OPT.Node; + i: INTEGER; + + BEGIN first := NIL; last := NIL; nofFwdPtr := 0; + LOOP + IF sym = const THEN + OPS.Get(sym); + WHILE sym = ident DO + OPT.Insert(OPS.name, obj); CheckMark(obj^.vis); + obj^.typ := OPT.sinttyp; obj^.mode := Var; (* Var to avoid recursive definition *) + IF sym = eql THEN + OPS.Get(sym); ConstExpression(x) + ELSIF sym = becomes THEN + err(eql); OPS.Get(sym); ConstExpression(x) + ELSE err(eql); x := OPB.NewIntConst(1) + END ; + obj^.mode := Con; obj^.typ := x^.typ; obj^.conval := x^.conval; (* ConstDesc ist not copied *) + CheckSym(semicolon) + END + END ; + IF sym = type THEN + OPS.Get(sym); + WHILE sym = ident DO + OPT.Insert(OPS.name, obj); obj^.mode := Typ; obj^.typ := OPT.undftyp; + CheckMark(obj^.vis); + IF sym = eql THEN + OPS.Get(sym); TypeDecl(obj^.typ, obj^.typ) + ELSIF (sym = becomes) OR (sym = colon) THEN + err(eql); OPS.Get(sym); TypeDecl(obj^.typ, obj^.typ) + ELSE err(eql) + END ; + IF obj^.typ^.strobj = NIL THEN obj^.typ^.strobj := obj END ; + IF obj^.typ^.comp IN {Record, Array, DynArr} THEN + i := 0; + WHILE i < nofFwdPtr DO typ := FwdPtr[i]; INC(i); + IF typ^.link^.name = obj^.name THEN typ^.BaseTyp := obj^.typ; typ^.link^.name := "" END + END + END ; + CheckSym(semicolon) + END + END ; + IF sym = var THEN + OPS.Get(sym); + WHILE sym = ident DO + LOOP + IF sym = ident THEN + OPT.Insert(OPS.name, obj); CheckMark(obj^.vis); + obj^.mode := Var; obj^.link := NIL; obj^.leaf := obj^.vis = internal; obj^.typ := OPT.undftyp; + IF first = NIL THEN first := obj END ; + IF last = NIL THEN OPT.topScope^.scope := obj ELSE last^.link := obj END ; + last := obj + ELSE err(ident) + END ; + IF sym = comma THEN OPS.Get(sym) + ELSIF sym = ident THEN err(comma) + ELSE EXIT + END + END ; + CheckSym(colon); Type(typ, OPT.notyp); + typ^.pvused := TRUE; + IF typ^.comp = DynArr THEN typ := OPT.undftyp; err(88) END ; + WHILE first # NIL DO first^.typ := typ; first := first^.link END ; + CheckSym(semicolon) + END + END ; + IF (sym < const) OR (sym > var) THEN EXIT END ; + END ; + i := 0; + WHILE i < nofFwdPtr DO + IF FwdPtr[i]^.link^.name # "" THEN err(128) END ; + FwdPtr[i] := NIL; (* garbage collection *) + INC(i) + END ; + OPT.topScope^.adr := OPM.errpos; + procdec := NIL; lastdec := NIL; + WHILE sym = procedure DO + OPS.Get(sym); ProcedureDeclaration(x); + IF x # NIL THEN + IF lastdec = NIL THEN procdec := x ELSE lastdec^.link := x END ; + lastdec := x + END ; + CheckSym(semicolon) + END ; + IF sym = begin THEN OPS.Get(sym); StatSeq(statseq) + ELSE statseq := NIL + END ; + IF (level = 0) & (TDinit # NIL) THEN + lastTDinit^.link := statseq; statseq := TDinit + END ; + CheckSym(end) + END Block; + + PROCEDURE Module*(VAR prog: OPT.Node; opt: SET); + VAR impName, aliasName: OPS.Name; + procdec, statseq: OPT.Node; + c: LONGINT; done: BOOLEAN; + BEGIN + OPS.Init; LoopLevel := 0; level := 0; OPS.Get(sym); + IF sym = module THEN OPS.Get(sym) ELSE err(16) END ; + IF sym = ident THEN + OPM.LogW(" "); OPM.LogWStr(OPS.name); + OPT.Init(OPS.name, opt); OPS.Get(sym); CheckSym(semicolon); + IF sym = import THEN OPS.Get(sym); + LOOP + IF sym = ident THEN + COPY(OPS.name, aliasName); COPY(aliasName, impName); OPS.Get(sym); + IF sym = becomes THEN OPS.Get(sym); + IF sym = ident THEN COPY(OPS.name, impName); OPS.Get(sym) ELSE err(ident) END + END ; + OPT.Import(aliasName, impName, done) + ELSE err(ident) + END ; + IF sym = comma THEN OPS.Get(sym) + ELSIF sym = ident THEN err(comma) + ELSE EXIT + END + END ; + CheckSym(semicolon) + END ; + IF OPM.noerr THEN TDinit := NIL; lastTDinit := NIL; c := OPM.errpos; + Block(procdec, statseq); OPB.Enter(procdec, statseq, NIL); prog := procdec; + prog^.conval := OPT.NewConst(); prog^.conval^.intval := c; + IF sym = ident THEN + IF OPS.name # OPT.SelfName THEN err(4) END ; + OPS.Get(sym) + ELSE err(ident) + END ; + IF sym # period THEN err(period) END + END + ELSE err(ident) + END ; + TDinit := NIL; lastTDinit := NIL + END Module; + +END OPP. diff --git a/src/voc/OPS.Mod b/src/voc/OPS.Mod new file mode 100644 index 00000000..ac4fb995 --- /dev/null +++ b/src/voc/OPS.Mod @@ -0,0 +1,315 @@ +MODULE OPS; (* NW, RC 6.3.89 / 18.10.92 *) (* object model 3.6.92 *) + + IMPORT OPM; + + CONST + MaxStrLen* = 256; + MaxIdLen = 32; + + TYPE + Name* = ARRAY MaxIdLen OF CHAR; + String* = ARRAY MaxStrLen OF CHAR; + + (* name, str, numtyp, intval, realval, lrlval are implicit results of Get *) + + VAR + name*: Name; + str*: String; + numtyp*: INTEGER; (* 1 = char, 2 = integer, 3 = real, 4 = longreal *) + intval*: LONGINT; (* integer value or string length *) + realval*: REAL; + lrlval*: LONGREAL; + + (*symbols: + | 0 1 2 3 4 + ---|-------------------------------------------------------- + 0 | null * / DIV MOD + 5 | & + - OR = + 10 | # < <= > >= + 15 | IN IS ^ . , + 20 | : .. ) ] } + 25 | OF THEN DO TO BY + 30 | ( [ { ~ := + 35 | number NIL string ident ; + 40 | | END ELSE ELSIF UNTIL + 45 | IF CASE WHILE REPEAT FOR + 50 | LOOP WITH EXIT RETURN ARRAY + 55 | RECORD POINTER BEGIN CONST TYPE + 60 | VAR PROCEDURE IMPORT MODULE eof *) + + CONST + (* numtyp values *) + char = 1; integer = 2; real = 3; longreal = 4; + + (*symbol values*) + null = 0; times = 1; slash = 2; div = 3; mod = 4; + and = 5; plus = 6; minus = 7; or = 8; eql = 9; + neq = 10; lss = 11; leq = 12; gtr = 13; geq = 14; + in = 15; is = 16; arrow = 17; period = 18; comma = 19; + colon = 20; upto = 21; rparen = 22; rbrak = 23; rbrace = 24; + of = 25; then = 26; do = 27; to = 28; by = 29; + lparen = 30; lbrak = 31; lbrace = 32; not = 33; becomes = 34; + number = 35; nil = 36; string = 37; ident = 38; semicolon = 39; + bar = 40; end = 41; else = 42; elsif = 43; until = 44; + if = 45; case = 46; while = 47; repeat = 48; for = 49; + loop = 50; with = 51; exit = 52; return = 53; array = 54; + record = 55; pointer = 56; begin = 57; const = 58; type = 59; + var = 60; procedure = 61; import = 62; module = 63; eof = 64; + + VAR + ch: CHAR; (*current character*) + + PROCEDURE err(n: INTEGER); + BEGIN OPM.err(n) + END err; + + PROCEDURE Str(VAR sym: SHORTINT); + VAR i: INTEGER; och: CHAR; + BEGIN i := 0; och := ch; + LOOP OPM.Get(ch); + IF ch = och THEN EXIT END ; + IF ch < " " THEN err(3); EXIT END ; + IF i = MaxStrLen-1 THEN err(241); EXIT END ; + str[i] := ch; INC(i) + END ; + OPM.Get(ch); str[i] := 0X; intval := i + 1; + IF intval = 2 THEN + sym := number; numtyp := 1; intval := ORD(str[0]) + ELSE sym := string + END + END Str; + + PROCEDURE Identifier(VAR sym: SHORTINT); + VAR i: INTEGER; + BEGIN i := 0; + REPEAT + name[i] := ch; INC(i); OPM.Get(ch) + UNTIL (ch < "0") OR ("9" < ch) & (CAP(ch) < "A") OR ("Z" < CAP(ch)) OR (i = MaxIdLen); + IF i = MaxIdLen THEN err(240); DEC(i) END ; + name[i] := 0X; sym := ident + END Identifier; + + PROCEDURE Number; + VAR i, m, n, d, e: INTEGER; dig: ARRAY 24 OF CHAR; f: LONGREAL; expCh: CHAR; neg: BOOLEAN; + + PROCEDURE Ten(e: INTEGER): LONGREAL; + VAR x, p: LONGREAL; + BEGIN x := 1; p := 10; + WHILE e > 0 DO + IF ODD(e) THEN x := x*p END; + e := e DIV 2; + IF e > 0 THEN p := p*p END (* prevent overflow *) + END; + RETURN x + END Ten; + + PROCEDURE Ord(ch: CHAR; hex: BOOLEAN): INTEGER; + BEGIN (* ("0" <= ch) & (ch <= "9") OR ("A" <= ch) & (ch <= "F") *) + IF ch <= "9" THEN RETURN ORD(ch) - ORD("0") + ELSIF hex THEN RETURN ORD(ch) - ORD("A") + 10 + ELSE err(2); RETURN 0 + END + END Ord; + + BEGIN (* ("0" <= ch) & (ch <= "9") *) + i := 0; m := 0; n := 0; d := 0; + LOOP (* read mantissa *) + IF ("0" <= ch) & (ch <= "9") OR (d = 0) & ("A" <= ch) & (ch <= "F") THEN + IF (m > 0) OR (ch # "0") THEN (* ignore leading zeros *) + IF n < LEN(dig) THEN dig[n] := ch; INC(n) END; + INC(m) + END; + OPM.Get(ch); INC(i) + ELSIF ch = "." THEN OPM.Get(ch); + IF ch = "." THEN (* ellipsis *) ch := 7FX; EXIT + ELSIF d = 0 THEN (* i > 0 *) d := i + ELSE err(2) + END + ELSE EXIT + END + END; (* 0 <= n <= m <= i, 0 <= d <= i *) + IF d = 0 THEN (* integer *) + IF n = m THEN intval := 0; i := 0; + IF ch = "X" THEN (* character *) OPM.Get(ch); numtyp := char; + IF n <= 2 THEN + WHILE i < n DO intval := intval*10H + Ord(dig[i], TRUE); INC(i) END + ELSE err(203) + END + ELSIF ch = "H" THEN (* hexadecimal *) OPM.Get(ch); numtyp := integer; + IF n <= OPM.MaxHDig THEN + IF (n = OPM.MaxHDig) & (dig[0] > "7") THEN (* prevent overflow *) intval := -1 END; + WHILE i < n DO intval := intval*10H + Ord(dig[i], TRUE); INC(i) END + ELSE err(203) + END + ELSE (* decimal *) numtyp := integer; + WHILE i < n DO d := Ord(dig[i], FALSE); INC(i); + IF intval <= (MAX(LONGINT) - d) DIV 10 THEN intval := intval*10 + d + ELSE err(203) + END + END + END + ELSE err(203) + END + ELSE (* fraction *) + f := 0; e := 0; expCh := "E"; + WHILE n > 0 DO (* 0 <= f < 1 *) DEC(n); f := (Ord(dig[n], FALSE) + f)/10 END; + IF (ch = "E") OR (ch = "D") THEN expCh := ch; OPM.Get(ch); neg := FALSE; + IF ch = "-" THEN neg := TRUE; OPM.Get(ch) + ELSIF ch = "+" THEN OPM.Get(ch) + END; + IF ("0" <= ch) & (ch <= "9") THEN + REPEAT n := Ord(ch, FALSE); OPM.Get(ch); + IF e <= (MAX(INTEGER) - n) DIV 10 THEN e := e*10 + n + ELSE err(203) + END + UNTIL (ch < "0") OR ("9" < ch); + IF neg THEN e := -e END + ELSE err(2) + END + END; + DEC(e, i-d-m); (* decimal point shift *) + IF expCh = "E" THEN numtyp := real; + IF (1-OPM.MaxRExp < e) & (e <= OPM.MaxRExp) THEN + IF e < 0 THEN realval := SHORT(f / Ten(-e)) + ELSE realval := SHORT(f * Ten(e)) + END + ELSE err(203) + END + ELSE numtyp := longreal; + IF (1-OPM.MaxLExp < e) & (e <= OPM.MaxLExp) THEN + IF e < 0 THEN lrlval := f / Ten(-e) + ELSE lrlval := f * Ten(e) + END + ELSE err(203) + END + END + END + END Number; + + PROCEDURE Get*(VAR sym: SHORTINT); + VAR s: SHORTINT; + + PROCEDURE Comment; (* do not read after end of file *) + BEGIN OPM.Get(ch); + LOOP + LOOP + WHILE ch = "(" DO OPM.Get(ch); + IF ch = "*" THEN Comment END + END ; + IF ch = "*" THEN OPM.Get(ch); EXIT END ; + IF ch = OPM.Eot THEN EXIT END ; + OPM.Get(ch) + END ; + IF ch = ")" THEN OPM.Get(ch); EXIT END ; + IF ch = OPM.Eot THEN err(5); EXIT END + END + END Comment; + + BEGIN + OPM.errpos := OPM.curpos-1; + WHILE ch <= " " DO (*ignore control characters*) + IF ch = OPM.Eot THEN sym := eof; RETURN + ELSE OPM.Get(ch) + END + END ; + CASE ch OF (* ch > " " *) + | 22X, 27X : Str(s) + | "#" : s := neq; OPM.Get(ch) + | "&" : s := and; OPM.Get(ch) + | "(" : OPM.Get(ch); + IF ch = "*" THEN Comment; Get(s) + ELSE s := lparen + END + | ")" : s := rparen; OPM.Get(ch) + | "*" : s := times; OPM.Get(ch) + | "+" : s := plus; OPM.Get(ch) + | "," : s := comma; OPM.Get(ch) + | "-" : s := minus; OPM.Get(ch) + | "." : OPM.Get(ch); + IF ch = "." THEN OPM.Get(ch); s := upto ELSE s := period END + | "/" : s := slash; OPM.Get(ch) + | "0".."9": Number; s := number + | ":" : OPM.Get(ch); + IF ch = "=" THEN OPM.Get(ch); s := becomes ELSE s := colon END + | ";" : s := semicolon; OPM.Get(ch) + | "<" : OPM.Get(ch); + IF ch = "=" THEN OPM.Get(ch); s := leq ELSE s := lss END + | "=" : s := eql; OPM.Get(ch) + | ">" : OPM.Get(ch); + IF ch = "=" THEN OPM.Get(ch); s := geq ELSE s := gtr END + | "A": Identifier(s); IF name = "ARRAY" THEN s := array END + | "B": Identifier(s); + IF name = "BEGIN" THEN s := begin + ELSIF name = "BY" THEN s := by + END + | "C": Identifier(s); + IF name = "CASE" THEN s := case + ELSIF name = "CONST" THEN s := const + END + | "D": Identifier(s); + IF name = "DO" THEN s := do + ELSIF name = "DIV" THEN s := div + END + | "E": Identifier(s); + IF name = "END" THEN s := end + ELSIF name = "ELSE" THEN s := else + ELSIF name = "ELSIF" THEN s := elsif + ELSIF name = "EXIT" THEN s := exit + END + | "F": Identifier(s); IF name = "FOR" THEN s := for END + | "I": Identifier(s); + IF name = "IF" THEN s := if + ELSIF name = "IN" THEN s := in + ELSIF name = "IS" THEN s := is + ELSIF name = "IMPORT" THEN s := import + END + | "L": Identifier(s); IF name = "LOOP" THEN s := loop END + | "M": Identifier(s); + IF name = "MOD" THEN s := mod + ELSIF name = "MODULE" THEN s := module + END + | "N": Identifier(s); IF name = "NIL" THEN s := nil END + | "O": Identifier(s); + IF name = "OR" THEN s := or + ELSIF name = "OF" THEN s := of + END + | "P": Identifier(s); + IF name = "PROCEDURE" THEN s := procedure + ELSIF name = "POINTER" THEN s := pointer + END + | "R": Identifier(s); + IF name = "RECORD" THEN s := record + ELSIF name = "REPEAT" THEN s := repeat + ELSIF name = "RETURN" THEN s := return + END + | "T": Identifier(s); + IF name = "THEN" THEN s := then + ELSIF name = "TO" THEN s := to + ELSIF name = "TYPE" THEN s := type + END + | "U": Identifier(s); IF name = "UNTIL" THEN s := until END + | "V": Identifier(s); IF name = "VAR" THEN s := var END + | "W": Identifier(s); + IF name = "WHILE" THEN s := while + ELSIF name = "WITH" THEN s := with + END + | "G".."H", "J", "K", "Q", "S", "X".."Z": Identifier(s) + | "[" : s := lbrak; OPM.Get(ch) + | "]" : s := rbrak; OPM.Get(ch) + | "^" : s := arrow; OPM.Get(ch) + | "a".."z": Identifier(s) + | "{" : s := lbrace; OPM.Get(ch) + | "|" : s := bar; OPM.Get(ch) + | "}" : s := rbrace; OPM.Get(ch) + | "~" : s := not; OPM.Get(ch) + | 7FX : s := upto; OPM.Get(ch) + ELSE s := null; OPM.Get(ch) + END ; + sym := s + END Get; + + PROCEDURE Init*; + BEGIN ch := " " + END Init; + +END OPS. diff --git a/src/voc/OPT.Mod b/src/voc/OPT.Mod new file mode 100644 index 00000000..3ec046de --- /dev/null +++ b/src/voc/OPT.Mod @@ -0,0 +1,1243 @@ +MODULE OPT; (* NW, RC 6.3.89 / 23.1.92 *) (* object model 24.2.94 *) + +(* +2002-08-20 jt: NewStr: txtpos remains 0 for structs read from symbol file +*) + + IMPORT + OPS, OPM; + + CONST + MaxConstLen* = OPS.MaxStrLen; + + TYPE + Const* = POINTER TO ConstDesc; + Object* = POINTER TO ObjDesc; + Struct* = POINTER TO StrDesc; + Node* = POINTER TO NodeDesc; + ConstExt* = POINTER TO OPS.String; + + ConstDesc* = RECORD + ext*: ConstExt; (* string or code for code proc *) + intval*: LONGINT; (* constant value or adr, proc par size, text position or least case label *) + intval2*: LONGINT; (* string length, proc var size or larger case label *) + setval*: SET; (* constant value, procedure body present or "ELSE" present in case *) + realval*: LONGREAL (* real or longreal constant value *) + END ; + + ObjDesc* = RECORD + left*, right*, link*, scope*: Object; + name*: OPS.Name; + leaf*: BOOLEAN; + mode*, mnolev*: SHORTINT; (* mnolev < 0 -> mno = -mnolev *) + vis*: SHORTINT; (* internal, external, externalR *) + history*: SHORTINT; (* relevant if name # "" *) + used*, fpdone*: BOOLEAN; + fprint*: LONGINT; + typ*: Struct; + conval*: Const; + adr*, linkadr*: LONGINT; + x*: INTEGER (* linkadr and x can be freely used by the backend *) + END ; + + StrDesc* = RECORD + form*, comp*, mno*, extlev*: SHORTINT; + ref*, sysflag*: INTEGER; + n*, size*, align*, txtpos*: LONGINT; (* align is alignment for records and len offset for dynarrs *) + allocated*, pbused*, pvused*, fpdone, idfpdone: BOOLEAN; + idfp, pbfp*, pvfp*:LONGINT; + BaseTyp*: Struct; + link*, strobj*: Object + END ; + + NodeDesc* = RECORD + left*, right*, link*: Node; + class*, subcl*: SHORTINT; + readonly*: BOOLEAN; + typ*: Struct; + obj*: Object; + conval*: Const + END ; + + CONST + maxImps = 64; (* must be <= MAX(SHORTINT) *) + maxStruct = OPM.MaxStruct; (* must be < MAX(INTEGER) DIV 2 *) + FirstRef = 16; + + VAR + typSize*: PROCEDURE(typ: Struct); + topScope*: Object; + undftyp*, bytetyp*, booltyp*, chartyp*, sinttyp*, inttyp*, linttyp*, + realtyp*, lrltyp*, settyp*, stringtyp*, niltyp*, notyp*, sysptrtyp*: Struct; + nofGmod*: SHORTINT; (*nof imports*) + GlbMod*: ARRAY maxImps OF Object; (* ^.right = first object, ^.name = module import name (not alias) *) + SelfName*: OPS.Name; (* name of module being compiled *) + SYSimported*: BOOLEAN; + + CONST + (* object modes *) + Var = 1; VarPar = 2; Con = 3; Fld = 4; Typ = 5; LProc = 6; XProc = 7; + SProc = 8; CProc = 9; IProc = 10; Mod = 11; Head = 12; TProc = 13; + + (* structure forms *) + Undef = 0; Byte = 1; Bool = 2; Char = 3; SInt = 4; Int = 5; LInt = 6; + Real = 7; LReal = 8; Set = 9; String = 10; NilTyp = 11; NoTyp = 12; + Pointer = 13; ProcTyp = 14; Comp = 15; + + (* composite structure forms *) + Basic = 1; Array = 2; DynArr = 3; Record = 4; + + (*function number*) + assign = 0; + haltfn = 0; newfn = 1; absfn = 2; capfn = 3; ordfn = 4; + entierfn = 5; oddfn = 6; minfn = 7; maxfn = 8; chrfn = 9; + shortfn = 10; longfn = 11; sizefn = 12; incfn = 13; decfn = 14; + inclfn = 15; exclfn = 16; lenfn = 17; copyfn = 18; ashfn = 19; assertfn = 32; + + (*SYSTEM function number*) + adrfn = 20; ccfn = 21; lshfn = 22; rotfn = 23; + getfn = 24; putfn = 25; getrfn = 26; putrfn = 27; + bitfn = 28; valfn = 29; sysnewfn = 30; movefn = 31; + + (* module visibility of objects *) + internal = 0; external = 1; externalR = 2; + + (* history of imported objects *) + inserted = 0; same = 1; pbmodified = 2; pvmodified = 3; removed = 4; inconsistent = 5; + + (* symbol file items *) + Smname = 16; Send = 18; Stype = 19; Salias = 20; Svar = 21; Srvar = 22; + Svalpar = 23; Svarpar = 24; Sfld = 25; Srfld = 26; Shdptr = 27; Shdpro = 28; Stpro = 29; Shdtpro = 30; + Sxpro = 31; Sipro = 32; Scpro = 33; Sstruct = 34; Ssys = 35; Sptr = 36; Sarr = 37; Sdarr = 38; Srec = 39; Spro = 40; + + TYPE + ImpCtxt = RECORD + nextTag, reffp: LONGINT; + nofr, minr, nofm: INTEGER; + self: BOOLEAN; + ref: ARRAY maxStruct OF Struct; + old: ARRAY maxStruct OF Object; + pvfp: ARRAY maxStruct OF LONGINT; (* set only if old # NIL *) + glbmno: ARRAY maxImps OF SHORTINT (* index is local mno *) + END ; + + ExpCtxt = RECORD + reffp: LONGINT; + ref: INTEGER; + nofm: SHORTINT; + locmno: ARRAY maxImps OF SHORTINT (* index is global mno *) + END ; + + VAR + universe, syslink: Object; + impCtxt: ImpCtxt; + expCtxt: ExpCtxt; + nofhdfld: LONGINT; + newsf, findpc, extsf, sfpresent, symExtended, symNew: BOOLEAN; + + PROCEDURE err(n: INTEGER); + BEGIN OPM.err(n) + END err; + + PROCEDURE NewConst*(): Const; + VAR const: Const; + BEGIN NEW(const); RETURN const + END NewConst; + + PROCEDURE NewObj*(): Object; + VAR obj: Object; + BEGIN NEW(obj); RETURN obj + END NewObj; + + PROCEDURE NewStr*(form, comp: SHORTINT): Struct; + VAR typ: Struct; + BEGIN NEW(typ); typ^.form := form; typ^.comp := comp; typ^.ref := maxStruct; (* ref >= maxStruct: not exported yet *) + IF form # Undef THEN typ^.txtpos := OPM.errpos END ; (* txtpos remains 0 for structs read from symbol file *) + typ^.size := -1; typ^.BaseTyp := undftyp; RETURN typ + END NewStr; + + PROCEDURE NewNode*(class: SHORTINT): Node; + VAR node: Node; + BEGIN NEW(node); node^.class := class; RETURN node + END NewNode; + + PROCEDURE NewExt*(): ConstExt; + VAR ext: ConstExt; + BEGIN NEW(ext); RETURN ext + END NewExt; + + PROCEDURE OpenScope*(level: SHORTINT; owner: Object); + VAR head: Object; + BEGIN head := NewObj(); + head^.mode := Head; head^.mnolev := level; head^.link := owner; + IF owner # NIL THEN owner^.scope := head END ; + head^.left := topScope; head^.right := NIL; head^.scope := NIL; topScope := head + END OpenScope; + + PROCEDURE CloseScope*; + BEGIN topScope := topScope^.left + END CloseScope; + + PROCEDURE Init*(VAR name: OPS.Name; opt: SET); + CONST nsf = 4; fpc = 8; esf = 9; + BEGIN + topScope := universe; OpenScope(0, NIL); SYSimported := FALSE; + SelfName := name; topScope^.name := name; + GlbMod[0] := topScope; nofGmod := 1; + newsf := nsf IN opt; findpc := fpc IN opt; extsf := newsf OR (esf IN opt); sfpresent := TRUE + END Init; + + PROCEDURE Close*; + VAR i: INTEGER; + BEGIN (* garbage collection *) + CloseScope; + i := 0; WHILE i < maxImps DO GlbMod[i] := NIL; INC(i) END ; + i := FirstRef; WHILE i < maxStruct DO impCtxt.ref[i] := NIL; impCtxt.old[i] := NIL; INC(i) END + END Close; + + PROCEDURE FindImport*(mod: Object; VAR res: Object); + VAR obj: Object; + BEGIN obj := mod^.scope; + LOOP + IF obj = NIL THEN EXIT END ; + IF OPS.name < obj^.name THEN obj := obj^.left + ELSIF OPS.name > obj^.name THEN obj := obj^.right + ELSE (*found*) + IF (obj^.mode = Typ) & (obj^.vis = internal) THEN obj := NIL + ELSE obj^.used := TRUE + END ; + EXIT + END + END ; + res := obj + END FindImport; + + PROCEDURE Find*(VAR res: Object); + VAR obj, head: Object; + BEGIN head := topScope; + LOOP obj := head^.right; + LOOP + IF obj = NIL THEN EXIT END ; + IF OPS.name < obj^.name THEN obj := obj^.left + ELSIF OPS.name > obj^.name THEN obj := obj^.right + ELSE (* found, obj^.used not set for local objects *) EXIT + END + END ; + IF obj # NIL THEN EXIT END ; + head := head^.left; + IF head = NIL THEN EXIT END + END ; + res := obj + END Find; + + PROCEDURE FindField*(VAR name: OPS.Name; typ: Struct; VAR res: Object); + VAR obj: Object; + BEGIN + WHILE typ # NIL DO obj := typ^.link; + WHILE obj # NIL DO + IF name < obj^.name THEN obj := obj^.left + ELSIF name > obj^.name THEN obj := obj^.right + ELSE (*found*) res := obj; RETURN + END + END ; + typ := typ^.BaseTyp + END ; + res := NIL + END FindField; + + PROCEDURE Insert*(VAR name: OPS.Name; VAR obj: Object); + VAR ob0, ob1: Object; left: BOOLEAN; mnolev: SHORTINT; + BEGIN ob0 := topScope; ob1 := ob0^.right; left := FALSE; + LOOP + IF ob1 # NIL THEN + IF name < ob1^.name THEN ob0 := ob1; ob1 := ob0^.left; left := TRUE + ELSIF name > ob1^.name THEN ob0 := ob1; ob1 := ob0^.right; left := FALSE + ELSE (*double def*) err(1); ob0 := ob1; ob1 := ob0^.right + END + ELSE (*insert*) ob1 := NewObj(); ob1^.leaf := TRUE; + IF left THEN ob0^.left := ob1 ELSE ob0^.right := ob1 END ; + ob1^.left := NIL; ob1^.right := NIL; COPY(name, ob1^.name); + mnolev := topScope^.mnolev; ob1^.mnolev := mnolev; + EXIT + END + END ; + obj := ob1 + END Insert; + +(*-------------------------- Fingerprinting --------------------------*) + + PROCEDURE FPrintName(VAR fp: LONGINT; VAR name: ARRAY OF CHAR); + VAR i: INTEGER; ch: CHAR; + BEGIN i := 0; + REPEAT ch := name[i]; OPM.FPrint(fp, ORD(ch)); INC(i) UNTIL ch = 0X + END FPrintName; + + PROCEDURE ^IdFPrint*(typ: Struct); + + PROCEDURE FPrintSign(VAR fp: LONGINT; result: Struct; par: Object); + (* depends on assignment compatibility of params only *) + BEGIN + IdFPrint(result); OPM.FPrint(fp, result^.idfp); + WHILE par # NIL DO + OPM.FPrint(fp, par^.mode); IdFPrint(par^.typ); OPM.FPrint(fp, par^.typ^.idfp); + (* par^.name and par^.adr not considered *) + par := par^.link + END + END FPrintSign; + + PROCEDURE IdFPrint*(typ: Struct); (* idfp codifies assignment compatibility *) + VAR btyp: Struct; strobj: Object; idfp: LONGINT; f, c: INTEGER; + BEGIN + IF ~typ^.idfpdone THEN + typ^.idfpdone := TRUE; (* may be recursive, temporary idfp is 0 in that case *) + idfp := 0; f := typ^.form; c := typ^.comp; OPM.FPrint(idfp, f); OPM.FPrint(idfp, c); + btyp := typ^.BaseTyp; strobj := typ^.strobj; + IF (strobj # NIL) & (strobj^.name # "") THEN + FPrintName(idfp, GlbMod[typ^.mno]^.name); FPrintName(idfp, strobj^.name) + END ; + IF (f = Pointer) OR (c = Record) & (btyp # NIL) OR (c = DynArr) THEN + IdFPrint(btyp); OPM.FPrint(idfp, btyp^.idfp) + ELSIF c = Array THEN IdFPrint(btyp); OPM.FPrint(idfp, btyp^.idfp); OPM.FPrint(idfp, typ^.n) + ELSIF f = ProcTyp THEN FPrintSign(idfp, btyp, typ^.link) + END ; + typ^.idfp := idfp + END + END IdFPrint; + + PROCEDURE FPrintStr*(typ: Struct); + VAR f, c: INTEGER; btyp: Struct; strobj, bstrobj: Object; pbfp, pvfp: LONGINT; + + PROCEDURE ^FPrintFlds(fld: Object; adr: LONGINT; visible: BOOLEAN); + + PROCEDURE FPrintHdFld(typ: Struct; fld: Object; adr: LONGINT); (* modifies pvfp only *) + VAR i, j, n: LONGINT; btyp: Struct; + BEGIN + IF typ^.comp = Record THEN FPrintFlds(typ^.link, adr, FALSE) + ELSIF typ^.comp = Array THEN btyp := typ^.BaseTyp; n := typ^.n; + WHILE btyp^.comp = Array DO n := btyp^.n * n; btyp := btyp^.BaseTyp END ; + IF (btyp^.form = Pointer) OR (btyp^.comp = Record) THEN + j := nofhdfld; FPrintHdFld(btyp, fld, adr); + IF j # nofhdfld THEN i := 1; + WHILE (i < n) & (nofhdfld <= OPM.MaxHdFld) DO + INC(adr, btyp^.size); FPrintHdFld(btyp, fld, adr); INC(i) + END + END + END + ELSIF OPM.ExpHdPtrFld & ((typ^.form = Pointer) OR (fld^.name = OPM.HdPtrName)) THEN + OPM.FPrint(pvfp, Pointer); OPM.FPrint(pvfp, adr); INC(nofhdfld) + ELSIF OPM.ExpHdProcFld & ((typ^.form = ProcTyp) OR (fld^.name = OPM.HdProcName)) THEN + OPM.FPrint(pvfp, ProcTyp); OPM.FPrint(pvfp, adr); INC(nofhdfld) + END + END FPrintHdFld; + + PROCEDURE FPrintFlds(fld: Object; adr: LONGINT; visible: BOOLEAN); (* modifies pbfp and pvfp *) + BEGIN + WHILE (fld # NIL) & (fld^.mode = Fld) DO + IF (fld^.vis # internal) & visible THEN + OPM.FPrint(pbfp, fld^.vis); FPrintName(pbfp, fld^.name); OPM.FPrint(pbfp, fld^.adr); + FPrintStr(fld^.typ); OPM.FPrint(pbfp, fld^.typ^.pbfp); OPM.FPrint(pvfp, fld^.typ^.pvfp) + ELSE FPrintHdFld(fld^.typ, fld, fld^.adr + adr) + END ; + fld := fld^.link + END + END FPrintFlds; + + PROCEDURE FPrintTProcs(obj: Object); (* modifies pbfp and pvfp *) + BEGIN + IF obj # NIL THEN + FPrintTProcs(obj^.left); + IF obj^.mode = TProc THEN + IF obj^.vis # internal THEN + OPM.FPrint(pbfp, TProc); OPM.FPrint(pbfp, obj^.adr DIV 10000H); + FPrintSign(pbfp, obj^.typ, obj^.link); FPrintName(pbfp, obj^.name) + ELSIF OPM.ExpHdTProc THEN + OPM.FPrint(pvfp, TProc); OPM.FPrint(pvfp, obj^.adr DIV 10000H) + END + END ; + FPrintTProcs(obj^.right) + END + END FPrintTProcs; + + BEGIN + IF ~typ^.fpdone THEN + IdFPrint(typ); pbfp := typ^.idfp; + IF typ^.sysflag # 0 THEN OPM.FPrint(pbfp, typ^.sysflag) END ; + pvfp := pbfp; typ^.pbfp := pbfp; typ^.pvfp := pvfp; (* initial fprints may be used recursively *) + typ^.fpdone := TRUE; + f := typ^.form; c := typ^.comp; btyp := typ^.BaseTyp; + IF f = Pointer THEN + strobj := typ^.strobj; bstrobj := btyp^.strobj; + IF (strobj = NIL) OR (strobj^.name = "") OR (bstrobj = NIL) OR (bstrobj^.name = "") THEN + FPrintStr(btyp); OPM.FPrint(pbfp, btyp^.pbfp); pvfp := pbfp + (* else use idfp as pbfp and as pvfp, do not call FPrintStr(btyp) here, else cycle not broken *) + END + ELSIF f = ProcTyp THEN (* use idfp as pbfp and as pvfp *) + ELSIF c IN {Array, DynArr} THEN FPrintStr(btyp); OPM.FPrint(pbfp, btyp^.pvfp); pvfp := pbfp + ELSE (* c = Record *) + IF btyp # NIL THEN FPrintStr(btyp); OPM.FPrint(pbfp, btyp^.pbfp); OPM.FPrint(pvfp, btyp^.pvfp) END ; + OPM.FPrint(pvfp, typ^.size); OPM.FPrint(pvfp, typ^.align); OPM.FPrint(pvfp, typ^.n); + nofhdfld := 0; FPrintFlds(typ^.link, 0, TRUE); + IF nofhdfld > OPM.MaxHdFld THEN OPM.Mark(225, typ^.txtpos) END ; + FPrintTProcs(typ^.link); OPM.FPrint(pvfp, pbfp); strobj := typ^.strobj; + IF (strobj = NIL) OR (strobj^.name = "") THEN pbfp := pvfp END + END ; + typ^.pbfp := pbfp; typ^.pvfp := pvfp + END + END FPrintStr; + + PROCEDURE FPrintObj*(obj: Object); + VAR fprint: LONGINT; f, m: INTEGER; rval: REAL; ext: ConstExt; + BEGIN + IF ~obj^.fpdone THEN + fprint := 0; obj^.fpdone := TRUE; + OPM.FPrint(fprint, obj^.mode); + IF obj^.mode = Con THEN + f := obj^.typ^.form; OPM.FPrint(fprint, f); + CASE f OF + | Bool, Char, SInt, Int, LInt: + OPM.FPrint(fprint, obj^.conval^.intval) + | Set: + OPM.FPrintSet(fprint, obj^.conval^.setval) + | Real: + rval := SHORT(obj^.conval^.realval); OPM.FPrintReal(fprint, rval) + | LReal: + OPM.FPrintLReal(fprint, obj^.conval^.realval) + | String: + FPrintName(fprint, obj^.conval^.ext^) + | NilTyp: + ELSE err(127) + END + ELSIF obj^.mode = Var THEN + OPM.FPrint(fprint, obj^.vis); FPrintStr(obj^.typ); OPM.FPrint(fprint, obj^.typ^.pbfp) + ELSIF obj^.mode IN {XProc, IProc} THEN + FPrintSign(fprint, obj^.typ, obj^.link) + ELSIF obj^.mode = CProc THEN + FPrintSign(fprint, obj^.typ, obj^.link); ext := obj^.conval^.ext; + m := ORD(ext^[0]); f := 1; OPM.FPrint(fprint, m); + WHILE f <= m DO OPM.FPrint(fprint, ORD(ext^[f])); INC(f) END + ELSIF obj^.mode = Typ THEN + FPrintStr(obj^.typ); OPM.FPrint(fprint, obj^.typ^.pbfp) + END ; + obj^.fprint := fprint + END + END FPrintObj; + + PROCEDURE FPrintErr*(obj: Object; errno: INTEGER); + VAR i, j: INTEGER; ch: CHAR; + BEGIN + IF obj^.mnolev # 0 THEN + COPY(GlbMod[-obj^.mnolev]^.name, OPM.objname); i := 0; + WHILE OPM.objname[i] # 0X DO INC(i) END ; + OPM.objname[i] := "."; j := 0; INC(i); + REPEAT ch := obj^.name[j]; OPM.objname[i] := ch; INC(j); INC(i) UNTIL ch = 0X; + ELSE + COPY(obj^.name, OPM.objname) + END ; + IF errno = 249 THEN + IF OPM.noerr THEN err(errno) END + ELSIF errno = 253 THEN (* extension *) + IF ~symNew & ~symExtended & ~extsf THEN err(errno) END ; + symExtended := TRUE + ELSE + IF ~symNew & ~newsf THEN err(errno) END ; + symNew := TRUE + END + END FPrintErr; + +(*-------------------------- Import --------------------------*) + + PROCEDURE InsertImport*(obj: Object; VAR root, old: Object); + VAR ob0, ob1: Object; left: BOOLEAN; + BEGIN + IF root = NIL THEN root := obj; old := NIL + ELSE + ob0 := root; ob1 := ob0^.right; left := FALSE; + IF obj^.name < ob0^.name THEN ob1 := ob0^.left; left := TRUE + ELSIF obj^.name > ob0^.name THEN ob1 := ob0^.right; left := FALSE + ELSE old := ob0; RETURN + END ; + LOOP + IF ob1 # NIL THEN + IF obj^.name < ob1^.name THEN ob0 := ob1; ob1 := ob1^.left; left := TRUE + ELSIF obj^.name > ob1^.name THEN ob0 := ob1; ob1 := ob1^.right; left := FALSE + ELSE old := ob1; EXIT + END + ELSE ob1 := obj; + IF left THEN ob0^.left := ob1 ELSE ob0^.right := ob1 END ; + ob1^.left := NIL; ob1^.right := NIL; old := NIL; EXIT + END + END + END + END InsertImport; + + PROCEDURE InName(VAR name: ARRAY OF CHAR); + VAR i: INTEGER; ch: CHAR; + BEGIN i := 0; + REPEAT + OPM.SymRCh(ch); name[i] := ch; INC(i) + UNTIL ch = 0X + END InName; + + PROCEDURE InMod(VAR mno: SHORTINT); (* mno is global *) + VAR head: Object; name: OPS.Name; mn: LONGINT; i: SHORTINT; + BEGIN + mn := OPM.SymRInt(); + IF mn = 0 THEN mno := impCtxt.glbmno[0] + ELSE + IF mn = Smname THEN + InName(name); + IF (name = SelfName) & ~impCtxt.self THEN err(154) END ; + i := 0; + WHILE (i < nofGmod) & (name # GlbMod[i].name) DO INC(i) END ; + IF i < nofGmod THEN mno := i (*module already present*) + ELSE + head := NewObj(); head^.mode := Head; COPY(name, head^.name); + mno := nofGmod; head^.mnolev := -mno; + IF nofGmod < maxImps THEN + GlbMod[mno] := head; INC(nofGmod) + ELSE err(227) + END + END ; + impCtxt.glbmno[impCtxt.nofm] := mno; INC(impCtxt.nofm) + ELSE + mno := impCtxt.glbmno[-mn] + END + END + END InMod; + + PROCEDURE InConstant(f: LONGINT; conval: Const); + VAR ch: CHAR; i: INTEGER; ext: ConstExt; rval: REAL; + BEGIN + CASE f OF + | Byte, Char, Bool: + OPM.SymRCh(ch); conval^.intval := ORD(ch) + | SInt, Int, LInt: + conval^.intval := OPM.SymRInt() + | Set: + OPM.SymRSet(conval^.setval) + | Real: + OPM.SymRReal(rval); conval^.realval := rval; + conval^.intval := OPM.ConstNotAlloc + | LReal: + OPM.SymRLReal(conval^.realval); + conval^.intval := OPM.ConstNotAlloc + | String: + ext := NewExt(); conval^.ext := ext; i := 0; + REPEAT + OPM.SymRCh(ch); ext^[i] := ch; INC(i) + UNTIL ch = 0X; + conval^.intval2 := i; + conval^.intval := OPM.ConstNotAlloc + | NilTyp: + conval^.intval := OPM.nilval + END + END InConstant; + + PROCEDURE ^InStruct(VAR typ: Struct); + + PROCEDURE InSign(mno: SHORTINT; VAR res: Struct; VAR par: Object); + VAR last, new: Object; tag: LONGINT; + BEGIN + InStruct(res); + tag := OPM.SymRInt(); last := NIL; + WHILE tag # Send DO + new := NewObj(); new^.mnolev := -mno; + IF last = NIL THEN par := new ELSE last^.link := new END ; + IF tag = Svalpar THEN new^.mode := Var ELSE new^.mode := VarPar END ; + InStruct(new^.typ); new^.adr := OPM.SymRInt(); InName(new^.name); + last := new; tag := OPM.SymRInt() + END + END InSign; + + PROCEDURE InFld(): Object; (* first number in impCtxt.nextTag, mno set outside *) + VAR tag: LONGINT; obj: Object; + BEGIN + tag := impCtxt.nextTag; obj := NewObj(); + IF tag <= Srfld THEN + obj^.mode := Fld; + IF tag = Srfld THEN obj^.vis := externalR ELSE obj^.vis := external END ; + InStruct(obj^.typ); InName(obj^.name); + obj^.adr := OPM.SymRInt() + ELSE + obj^.mode := Fld; + IF tag = Shdptr THEN obj^.name := OPM.HdPtrName ELSE obj^.name := OPM.HdProcName END ; + obj^.typ := undftyp; obj^.vis := internal; + obj^.adr := OPM.SymRInt() + END ; + RETURN obj + END InFld; + + PROCEDURE InTProc(mno: SHORTINT): Object; (* first number in impCtxt.nextTag *) + VAR tag: LONGINT; obj: Object; + BEGIN + tag := impCtxt.nextTag; + obj := NewObj(); obj^.mnolev := -mno; + IF tag = Stpro THEN + obj^.mode := TProc; obj^.conval := NewConst(); obj^.conval^.intval := -1; + InSign(mno, obj^.typ, obj^.link); obj^.vis := external; InName(obj^.name); + obj^.adr := 10000H*OPM.SymRInt() + ELSE (* tag = Shdtpro *) + obj^.mode := TProc; obj^.name := OPM.HdTProcName; + obj^.link := NewObj(); (* dummy, easier in Browser *) + obj^.typ := undftyp; obj^.vis := internal; + obj^.adr := 10000H*OPM.SymRInt() + END ; + RETURN obj + END InTProc; + + PROCEDURE InStruct(VAR typ: Struct); + VAR mno: SHORTINT; ref: INTEGER; tag: LONGINT; name: OPS.Name; + t: Struct; obj, last, fld, old, dummy: Object; + BEGIN + tag := OPM.SymRInt(); + IF tag # Sstruct THEN typ := impCtxt.ref[-tag] + ELSE + ref := impCtxt.nofr; INC(impCtxt.nofr); + IF ref < impCtxt.minr THEN impCtxt.minr := ref END ; + InMod(mno); InName(name); obj := NewObj(); + IF name = "" THEN + IF impCtxt.self THEN old := NIL (* do not insert type desc anchor here, but in OPL *) + ELSE obj^.name := "@"; InsertImport(obj, GlbMod[mno].right, old(*=NIL*)); obj^.name := "" + END ; + typ := NewStr(Undef, Basic) + ELSE obj^.name := name; InsertImport(obj, GlbMod[mno].right, old); + IF old # NIL THEN (* recalculate fprints to compare with old fprints *) + FPrintObj(old); impCtxt.pvfp[ref] := old^.typ^.pvfp; + IF impCtxt.self THEN (* do not overwrite old typ *) + typ := NewStr(Undef, Basic) + ELSE (* overwrite old typ for compatibility reason *) + typ := old^.typ; typ^.link := NIL; typ^.sysflag := 0; + typ^.fpdone := FALSE; typ^.idfpdone := FALSE + END + ELSE typ := NewStr(Undef, Basic) + END + END ; + impCtxt.ref[ref] := typ; impCtxt.old[ref] := old; typ^.ref := ref + maxStruct; + (* ref >= maxStruct: not exported yet, ref used for err 155 *) + typ^.mno := mno; typ^.allocated := TRUE; + typ^.strobj := obj; obj^.mode := Typ; obj^.typ := typ; + obj^.mnolev := -mno; obj^.vis := internal; (* name not visible here *) + tag := OPM.SymRInt(); + IF tag = Ssys THEN typ^.sysflag := SHORT(OPM.SymRInt()); tag := OPM.SymRInt() END ; + CASE tag OF + | Sptr: + typ^.form := Pointer; typ^.size := OPM.PointerSize; typ^.n := 0; InStruct(typ^.BaseTyp) + | Sarr: + typ^.form := Comp; typ^.comp := Array; InStruct(typ^.BaseTyp); typ^.n := OPM.SymRInt(); + typSize(typ) (* no bounds address !! *) + | Sdarr: + typ^.form := Comp; typ^.comp := DynArr; InStruct(typ^.BaseTyp); + IF typ^.BaseTyp^.comp = DynArr THEN typ^.n := typ^.BaseTyp^.n + 1 + ELSE typ^.n := 0 + END ; + typSize(typ) + | Srec: + typ^.form := Comp; typ^.comp := Record; InStruct(typ^.BaseTyp); + IF typ^.BaseTyp = notyp THEN typ^.BaseTyp := NIL END; + typ.extlev := 0; t := typ.BaseTyp; + (* do not take extlev from base type due to possible cycles! *) + WHILE t # NIL DO INC(typ^.extlev); t := t.BaseTyp END; + typ^.size := OPM.SymRInt(); typ^.align := OPM.SymRInt(); + typ^.n := OPM.SymRInt(); + impCtxt.nextTag := OPM.SymRInt(); last := NIL; + WHILE (impCtxt.nextTag >= Sfld) & (impCtxt.nextTag <= Shdpro) DO + fld := InFld(); fld^.mnolev := -mno; + IF last # NIL THEN last^.link := fld END ; + last := fld; InsertImport(fld, typ^.link, dummy); + impCtxt.nextTag := OPM.SymRInt() + END ; + WHILE impCtxt.nextTag # Send DO fld := InTProc(mno); + InsertImport(fld, typ^.link, dummy); + impCtxt.nextTag := OPM.SymRInt() + END + | Spro: + typ^.form := ProcTyp; typ^.size := OPM.ProcSize; InSign(mno, typ^.BaseTyp, typ^.link) + END ; + IF ref = impCtxt.minr THEN + WHILE ref < impCtxt.nofr DO + t := impCtxt.ref[ref]; FPrintStr(t); + obj := t^.strobj; (* obj^.typ^.strobj = obj, else obj^.fprint differs (alias) *) + IF obj^.name # "" THEN FPrintObj(obj) END ; + old := impCtxt.old[ref]; + IF old # NIL THEN t^.strobj := old; (* restore strobj *) + IF impCtxt.self THEN + IF old^.mnolev < 0 THEN + IF old^.history # inconsistent THEN + IF old^.fprint # obj^.fprint THEN old^.history := pbmodified + ELSIF impCtxt.pvfp[ref] # t^.pvfp THEN old^.history := pvmodified + END + (* ELSE remain inconsistent *) + END + ELSIF old^.fprint # obj^.fprint THEN old^.history := pbmodified + ELSIF impCtxt.pvfp[ref] # t^.pvfp THEN old^.history := pvmodified + ELSIF old^.vis = internal THEN old^.history := same (* may be changed to "removed" in InObj *) + ELSE old^.history := inserted (* may be changed to "same" in InObj *) + END + ELSE + (* check private part, delay error message until really used *) + IF impCtxt.pvfp[ref] # t^.pvfp THEN old^.history := inconsistent END ; + IF old^.fprint # obj^.fprint THEN FPrintErr(old, 249) END + END + ELSIF impCtxt.self THEN obj^.history := removed + ELSE obj^.history := same + END ; + INC(ref) + END ; + impCtxt.minr := maxStruct + END + END + END InStruct; + + PROCEDURE InObj(mno: SHORTINT): Object; (* first number in impCtxt.nextTag *) + VAR i, s: INTEGER; ch: CHAR; obj, old: Object; typ: Struct; + tag: LONGINT; ext: ConstExt; + BEGIN + tag := impCtxt.nextTag; + IF tag = Stype THEN + InStruct(typ); obj := typ^.strobj; + IF ~impCtxt.self THEN obj^.vis := external END (* type name visible now, obj^.fprint already done *) + ELSE + obj := NewObj(); obj^.mnolev := -mno; obj^.vis := external; + IF tag <= Pointer THEN (* Constant *) + obj^.mode := Con; obj^.typ := impCtxt.ref[tag]; obj^.conval := NewConst(); InConstant(tag, obj^.conval) + ELSIF tag >= Sxpro THEN + obj^.conval := NewConst(); + obj^.conval^.intval := -1; + InSign(mno, obj^.typ, obj^.link); + CASE tag OF + | Sxpro: obj^.mode := XProc + | Sipro: obj^.mode := IProc + | Scpro: obj^.mode := CProc; + ext := NewExt(); obj^.conval^.ext := ext; + s := SHORT(OPM.SymRInt()); ext^[0] := CHR(s); i := 1; + WHILE i <= s DO OPM.SymRCh(ext^[i]); INC(i) END + END + ELSIF tag = Salias THEN + obj^.mode := Typ; InStruct(obj^.typ) + ELSE + obj^.mode := Var; + IF tag = Srvar THEN obj^.vis := externalR END ; + InStruct(obj^.typ) + END ; + InName(obj^.name) + END ; + FPrintObj(obj); + IF (obj^.mode = Var) & ((obj^.typ^.strobj = NIL) OR (obj^.typ^.strobj^.name = "")) THEN + (* compute a global fingerprint to avoid structural type equivalence for anonymous types *) + OPM.FPrint(impCtxt.reffp, obj^.typ^.ref - maxStruct) + END ; + IF tag # Stype THEN + InsertImport(obj, GlbMod[mno].right, old); + IF impCtxt.self THEN + IF old # NIL THEN + (* obj is from old symbol file, old is new declaration *) + IF old^.vis = internal THEN old^.history := removed + ELSE FPrintObj(old); (* FPrint(obj) already called *) + IF obj^.fprint # old^.fprint THEN old^.history := pbmodified + ELSIF obj^.typ^.pvfp # old^.typ^.pvfp THEN old^.history := pvmodified + ELSE old^.history := same + END + END + ELSE obj^.history := removed (* OutObj not called if mnolev < 0 *) + END + (* ELSE old = NIL, or file read twice, consistent, OutObj not called *) + END + ELSE (* obj already inserted in InStruct *) + IF impCtxt.self THEN (* obj^.mnolev = 0 *) + IF obj^.vis = internal THEN obj^.history := removed + ELSIF obj^.history = inserted THEN obj^.history := same + END + (* ELSE OutObj not called for obj with mnolev < 0 *) + END + END ; + RETURN obj + END InObj; + + PROCEDURE Import*(aliasName: OPS.Name; VAR name: OPS.Name; VAR done: BOOLEAN); + VAR obj: Object; mno: SHORTINT; (* done used in Browser *) + BEGIN + IF name = "SYSTEM" THEN SYSimported := TRUE; + Insert(aliasName, obj); obj^.mode := Mod; obj^.mnolev := 0; obj^.scope := syslink; obj^.typ := notyp + ELSE + impCtxt.nofr := FirstRef; impCtxt.minr := maxStruct; impCtxt.nofm := 0; + impCtxt.self := aliasName = "@self"; impCtxt.reffp := 0; + OPM.OldSym(name, done); + IF done THEN + InMod(mno); + impCtxt.nextTag := OPM.SymRInt(); + WHILE ~OPM.eofSF() DO + obj := InObj(mno); impCtxt.nextTag := OPM.SymRInt() + END ; + Insert(aliasName, obj); + obj^.mode := Mod; obj^.scope := GlbMod[mno].right; + GlbMod[mno].link := obj; + obj^.mnolev := -mno; obj^.typ := notyp; + OPM.CloseOldSym + ELSIF impCtxt.self THEN + newsf := TRUE; extsf := TRUE; sfpresent := FALSE + ELSE err(152) (*sym file not found*) + END + END + END Import; + +(*-------------------------- Export --------------------------*) + + PROCEDURE OutName(VAR name: ARRAY OF CHAR); + VAR i: INTEGER; ch: CHAR; + BEGIN i := 0; + REPEAT ch := name[i]; OPM.SymWCh(ch); INC(i) UNTIL ch = 0X + END OutName; + + PROCEDURE OutMod(mno: INTEGER); + BEGIN + IF expCtxt.locmno[mno] < 0 THEN (* new mod *) + OPM.SymWInt(Smname); + expCtxt.locmno[mno] := expCtxt.nofm; INC(expCtxt.nofm); + OutName(GlbMod[mno].name) + ELSE OPM.SymWInt(-expCtxt.locmno[mno]) + END + END OutMod; + + PROCEDURE ^OutStr(typ: Struct); + PROCEDURE ^OutFlds(fld: Object; adr: LONGINT; visible: BOOLEAN); + + PROCEDURE OutHdFld(typ: Struct; fld: Object; adr: LONGINT); + VAR i, j, n: LONGINT; btyp: Struct; + BEGIN + IF typ^.comp = Record THEN OutFlds(typ^.link, adr, FALSE) + ELSIF typ^.comp = Array THEN btyp := typ^.BaseTyp; n := typ^.n; + WHILE btyp^.comp = Array DO n := btyp^.n * n; btyp := btyp^.BaseTyp END ; + IF (btyp^.form = Pointer) OR (btyp^.comp = Record) THEN + j := nofhdfld; OutHdFld(btyp, fld, adr); + IF j # nofhdfld THEN i := 1; + WHILE (i < n) & (nofhdfld <= OPM.MaxHdFld) DO + INC(adr, btyp^.size); OutHdFld(btyp, fld, adr); INC(i) + END + END + END + ELSIF OPM.ExpHdPtrFld & ((typ^.form = Pointer) OR (fld^.name = OPM.HdPtrName)) THEN + OPM.SymWInt(Shdptr); OPM.SymWInt(adr); INC(nofhdfld) + ELSIF OPM.ExpHdProcFld & ((typ^.form = ProcTyp) OR (fld^.name = OPM.HdProcName)) THEN + OPM.SymWInt(Shdpro); OPM.SymWInt(adr); INC(nofhdfld) + END + END OutHdFld; + + PROCEDURE OutFlds(fld: Object; adr: LONGINT; visible: BOOLEAN); + BEGIN + WHILE (fld # NIL) & (fld^.mode = Fld) DO + IF (fld^.vis # internal) & visible THEN + IF fld^.vis = externalR THEN OPM.SymWInt(Srfld) ELSE OPM.SymWInt(Sfld) END ; + OutStr(fld^.typ); OutName(fld^.name); OPM.SymWInt(fld^.adr) + ELSE OutHdFld(fld^.typ, fld, fld^.adr + adr) + END ; + fld := fld^.link + END + END OutFlds; + + PROCEDURE OutSign(result: Struct; par: Object); + BEGIN + OutStr(result); + WHILE par # NIL DO + IF par^.mode = Var THEN OPM.SymWInt(Svalpar) ELSE OPM.SymWInt(Svarpar) END ; + OutStr(par^.typ); + OPM.SymWInt(par^.adr); + OutName(par^.name); par := par^.link + END ; + OPM.SymWInt(Send) + END OutSign; + + PROCEDURE OutTProcs(typ: Struct; obj: Object); + BEGIN + IF obj # NIL THEN + OutTProcs(typ, obj^.left); + IF obj^.mode = TProc THEN + IF (typ^.BaseTyp # NIL) & (obj^.adr DIV 10000H < typ^.BaseTyp^.n) & (obj^.vis = internal) THEN + OPM.Mark(109, typ^.txtpos) + (* hidden and overriding, not detected in OPP because record exported indirectly or via aliasing *) + END ; + IF OPM.ExpHdTProc OR (obj^.vis # internal) THEN + IF obj^.vis # internal THEN + OPM.SymWInt(Stpro); OutSign(obj^.typ, obj^.link); OutName(obj^.name); + OPM.SymWInt(obj^.adr DIV 10000H) + ELSE + OPM.SymWInt(Shdtpro); + OPM.SymWInt(obj^.adr DIV 10000H) + END + END + END ; + OutTProcs(typ, obj^.right) + END + END OutTProcs; + + PROCEDURE OutStr(typ: Struct); (* OPV.TypeAlloc already applied *) + VAR strobj: Object; + BEGIN + IF typ^.ref < expCtxt.ref THEN OPM.SymWInt(-typ^.ref) + ELSE + OPM.SymWInt(Sstruct); + typ^.ref := expCtxt.ref; INC(expCtxt.ref); + IF expCtxt.ref >= maxStruct THEN err(228) END ; + OutMod(typ^.mno); strobj := typ^.strobj; + IF (strobj # NIL) & (strobj^.name # "") THEN OutName(strobj^.name); + CASE strobj^.history OF + | pbmodified: FPrintErr(strobj, 252) + | pvmodified: FPrintErr(strobj, 251) + | inconsistent: FPrintErr(strobj, 249) + ELSE (* checked in OutObj or correct indirect export *) + END + ELSE OPM.SymWCh(0X) (* anonymous => never inconsistent, pvfp influences the client fp *) + END ; + IF typ^.sysflag # 0 THEN OPM.SymWInt(Ssys); OPM.SymWInt(typ^.sysflag) END ; + CASE typ^.form OF + | Pointer: + OPM.SymWInt(Sptr); OutStr(typ^.BaseTyp) + | ProcTyp: + OPM.SymWInt(Spro); OutSign(typ^.BaseTyp, typ^.link) + | Comp: + CASE typ^.comp OF + | Array: + OPM.SymWInt(Sarr); OutStr(typ^.BaseTyp); OPM.SymWInt(typ^.n) + | DynArr: + OPM.SymWInt(Sdarr); OutStr(typ^.BaseTyp) + | Record: + OPM.SymWInt(Srec); + IF typ^.BaseTyp = NIL THEN OutStr(notyp) ELSE OutStr(typ^.BaseTyp) END ; + (* BaseTyp should be Notyp, too late to change *) + OPM.SymWInt(typ^.size); OPM.SymWInt(typ^.align); OPM.SymWInt(typ^.n); + nofhdfld := 0; OutFlds(typ^.link, 0, TRUE); + IF nofhdfld > OPM.MaxHdFld THEN OPM.Mark(223, typ^.txtpos) END ; + OutTProcs(typ, typ^.link); OPM.SymWInt(Send) + END + END + END + END OutStr; + + PROCEDURE OutConstant(obj: Object); + VAR f: INTEGER; rval: REAL; + BEGIN + f := obj^.typ^.form; OPM.SymWInt(f); + CASE f OF + | Bool, Char: + OPM.SymWCh(CHR(obj^.conval^.intval)) + | SInt, Int, LInt: + OPM.SymWInt(obj^.conval^.intval) + | Set: + OPM.SymWSet(obj^.conval^.setval) + | Real: + rval := SHORT(obj^.conval^.realval); OPM.SymWReal(rval) + | LReal: + OPM.SymWLReal(obj^.conval^.realval) + | String: + OutName(obj^.conval^.ext^) + | NilTyp: + ELSE err(127) + END + END OutConstant; + + PROCEDURE OutObj(obj: Object); + VAR i, j: INTEGER; ext: ConstExt; + BEGIN + IF obj # NIL THEN + OutObj(obj^.left); + IF obj^.mode IN {Con, Typ, Var, LProc, XProc, CProc, IProc} THEN + IF obj^.history = removed THEN FPrintErr(obj, 250) + ELSIF obj^.vis # internal THEN + CASE obj^.history OF + | inserted: FPrintErr(obj, 253) + | same: (* ok *) + | pbmodified: FPrintErr(obj, 252) + | pvmodified: FPrintErr(obj, 251) + END ; + CASE obj^.mode OF + | Con: + OutConstant(obj); OutName(obj^.name) + | Typ: + IF obj^.typ^.strobj = obj THEN OPM.SymWInt(Stype); OutStr(obj^.typ) + ELSE OPM.SymWInt(Salias); OutStr(obj^.typ); OutName(obj^.name) + END + | Var: + IF obj^.vis = externalR THEN OPM.SymWInt(Srvar) ELSE OPM.SymWInt(Svar) END ; + OutStr(obj^.typ); OutName(obj^.name); + IF (obj^.typ^.strobj = NIL) OR (obj^.typ^.strobj^.name = "") THEN + (* compute fingerprint to avoid structural type equivalence *) + OPM.FPrint(expCtxt.reffp, obj^.typ^.ref) + END + | XProc: + OPM.SymWInt(Sxpro); OutSign(obj^.typ, obj^.link); OutName(obj^.name) + | IProc: + OPM.SymWInt(Sipro); OutSign(obj^.typ, obj^.link); OutName(obj^.name) + | CProc: + OPM.SymWInt(Scpro); OutSign(obj^.typ, obj^.link); ext := obj^.conval^.ext; + j := ORD(ext^[0]); i := 1; OPM.SymWInt(j); + WHILE i <= j DO OPM.SymWCh(ext^[i]); INC(i) END ; + OutName(obj^.name) + END + END + END ; + OutObj(obj^.right) + END + END OutObj; + + PROCEDURE Export*(VAR ext, new: BOOLEAN); + VAR i: INTEGER; nofmod: SHORTINT; done: BOOLEAN; + BEGIN + symExtended := FALSE; symNew := FALSE; nofmod := nofGmod; + Import("@self", SelfName, done); nofGmod := nofmod; + IF OPM.noerr THEN (* ~OPM.noerr => ~done *) + OPM.NewSym(SelfName); + IF OPM.noerr THEN + OPM.SymWInt(Smname); OutName(SelfName); + expCtxt.reffp := 0; expCtxt.ref := FirstRef; + expCtxt.nofm := 1; expCtxt.locmno[0] := 0; + i := 1; WHILE i < maxImps DO expCtxt.locmno[i] := -1; INC(i) END ; + OutObj(topScope^.right); + ext := sfpresent & symExtended; new := ~sfpresent OR symNew; + IF OPM.noerr & sfpresent & (impCtxt.reffp # expCtxt.reffp) THEN + new := TRUE; + IF ~extsf THEN err(155) END + END ; + newsf := FALSE; symNew := FALSE; (* because of call to FPrintErr from OPL *) + IF ~OPM.noerr OR findpc THEN OPM.DeleteNewSym END + (* OPM.RegisterNewSym is called in OP2 after writing the object file *) + END + END + END Export; (* no new symbol file if ~OPM.noerr or findpc *) + + + PROCEDURE InitStruct(VAR typ: Struct; form: SHORTINT); + BEGIN + typ := NewStr(form, Basic); typ^.ref := form; typ^.size := OPM.ByteSize; typ^.allocated := TRUE; + typ^.strobj := NewObj(); typ^.pbfp := form; typ^.pvfp := form; typ^.fpdone := TRUE; + typ^.idfp := form; typ^.idfpdone := TRUE + END InitStruct; + + PROCEDURE EnterBoolConst(name: OPS.Name; value: LONGINT); + VAR obj: Object; + BEGIN + Insert(name, obj); obj^.conval := NewConst(); + obj^.mode := Con; obj^.typ := booltyp; obj^.conval^.intval := value + END EnterBoolConst; + + PROCEDURE EnterTyp(name: OPS.Name; form: SHORTINT; size: INTEGER; VAR res: Struct); + VAR obj: Object; typ: Struct; + BEGIN + Insert(name, obj); + typ := NewStr(form, Basic); obj^.mode := Typ; obj^.typ := typ; obj^.vis := external; + typ^.strobj := obj; typ^.size := size; typ^.ref := form; typ^.allocated := TRUE; + typ^.pbfp := form; typ^.pvfp := form; typ^.fpdone := TRUE; + typ^.idfp := form; typ^.idfpdone := TRUE; res := typ + END EnterTyp; + + PROCEDURE EnterProc(name: OPS.Name; num: INTEGER); + VAR obj: Object; + BEGIN Insert(name, obj); + obj^.mode := SProc; obj^.typ := notyp; obj^.adr := num + END EnterProc; + +BEGIN topScope := NIL; OpenScope(0, NIL); OPM.errpos := 0; + InitStruct(undftyp, Undef); InitStruct(notyp, NoTyp); + InitStruct(stringtyp, String); InitStruct(niltyp, NilTyp); + undftyp^.BaseTyp := undftyp; + + (*initialization of module SYSTEM*) + EnterTyp("BYTE", Byte, OPM.ByteSize, bytetyp); + EnterTyp("PTR", Pointer, OPM.PointerSize, sysptrtyp); + EnterProc("ADR", adrfn); + EnterProc("CC", ccfn); + EnterProc("LSH", lshfn); + EnterProc("ROT", rotfn); + EnterProc("GET", getfn); + EnterProc("PUT", putfn); + EnterProc("GETREG", getrfn); + EnterProc("PUTREG", putrfn); + EnterProc("BIT", bitfn); + EnterProc("VAL", valfn); + EnterProc("NEW", sysnewfn); + EnterProc("MOVE", movefn); + syslink := topScope^.right; + universe := topScope; topScope^.right := NIL; + + EnterTyp("CHAR", Char, OPM.CharSize, chartyp); + EnterTyp("SET", Set, OPM.SetSize, settyp); + EnterTyp("REAL", Real, OPM.RealSize, realtyp); + EnterTyp("INTEGER", Int, OPM.IntSize, inttyp); + EnterTyp("LONGINT", LInt, OPM.LIntSize, linttyp); + EnterTyp("LONGREAL", LReal, OPM.LRealSize, lrltyp); + EnterTyp("SHORTINT", SInt, OPM.SIntSize, sinttyp); + EnterTyp("BOOLEAN", Bool, OPM.BoolSize, booltyp); + EnterBoolConst("FALSE", 0); (* 0 and 1 are compiler internal representation only *) + EnterBoolConst("TRUE", 1); + EnterProc("HALT", haltfn); + EnterProc("NEW", newfn); + EnterProc("ABS", absfn); + EnterProc("CAP", capfn); + EnterProc("ORD", ordfn); + EnterProc("ENTIER", entierfn); + EnterProc("ODD", oddfn); + EnterProc("MIN", minfn); + EnterProc("MAX", maxfn); + EnterProc("CHR", chrfn); + EnterProc("SHORT", shortfn); + EnterProc("LONG", longfn); + EnterProc("SIZE", sizefn); + EnterProc("INC", incfn); + EnterProc("DEC", decfn); + EnterProc("INCL", inclfn); + EnterProc("EXCL", exclfn); + EnterProc("LEN", lenfn); + EnterProc("COPY", copyfn); + EnterProc("ASH", ashfn); + EnterProc("ASSERT", assertfn); + impCtxt.ref[Undef] := undftyp; impCtxt.ref[Byte] := bytetyp; + impCtxt.ref[Bool] := booltyp; impCtxt.ref[Char] := chartyp; + impCtxt.ref[SInt] := sinttyp; impCtxt.ref[Int] := inttyp; + impCtxt.ref[LInt] := linttyp; impCtxt.ref[Real] := realtyp; + impCtxt.ref[LReal] := lrltyp; impCtxt.ref[Set] := settyp; + impCtxt.ref[String] := stringtyp; impCtxt.ref[NilTyp] := niltyp; + impCtxt.ref[NoTyp] := notyp; impCtxt.ref[Pointer] := sysptrtyp +END OPT. + +Objects: + + mode | adr conval link scope leaf + ------------------------------------------------ + Undef | Not used + Var | vadr next regopt Glob or loc var or proc value parameter + VarPar| vadr next regopt Procedure var parameter + Con | val Constant + Fld | off next Record field + Typ | Named type + LProc | entry sizes firstpar scope leaf Local procedure, entry adr set in back-end + XProc | entry sizes firstpar scope leaf External procedure, entry adr set in back-end + SProc | fno sizes Standard procedure + CProc | code firstpar scope Code procedure + IProc | entry sizes scope leaf Interrupt procedure, entry adr set in back-end + Mod | scope Module + Head | txtpos owner firstvar Scope anchor + TProc | index sizes firstpar scope leaf Bound procedure, index = 10000H*mthno+entry, entry adr set in back-end + + Structures: + + form comp | n BaseTyp link mno txtpos sysflag + ---------------------------------------------------------------------------------- + Undef Basic | + Byte Basic | + Bool Basic | + Char Basic | + SInt Basic | + Int Basic | + LInt Basic | + Real Basic | + LReal Basic | + Set Basic | + String Basic | + NilTyp Basic | + NoTyp Basic | + Pointer Basic | PBaseTyp mno txtpos sysflag + ProcTyp Basic | ResTyp params mno txtpos sysflag + Comp Array | nofel ElemTyp mno txtpos sysflag + Comp DynArr| dim ElemTyp mno txtpos sysflag + Comp Record| nofmth RBaseTyp fields mno txtpos sysflag + +Nodes: + +design = Nvar|Nvarpar|Nfield|Nderef|Nindex|Nguard|Neguard|Ntype|Nproc. +expr = design|Nconst|Nupto|Nmop|Ndop|Ncall. +nextexpr = NIL|expr. +ifstat = NIL|Nif. +casestat = Ncaselse. +sglcase = NIL|Ncasedo. +stat = NIL|Ninittd|Nenter|Nassign|Ncall|Nifelse|Ncase|Nwhile|Nrepeat| + Nloop|Nexit|Nreturn|Nwith|Ntrap. + + + class subcl obj left right link + --------------------------------------------------------- + +design Nvar var nextexpr + Nvarpar varpar nextexpr + Nfield field design nextexpr + Nderef design nextexpr + Nindex design expr nextexpr + Nguard design nextexpr (typ = guard type) + Neguard design nextexpr (typ = guard type) + Ntype type nextexpr + Nproc normal proc nextexpr + super proc nextexpr + + +expr design + Nconst const (val = node^.conval) + Nupto expr expr nextexpr + Nmop not expr nextexpr + minus expr nextexpr + is tsttype expr nextexpr + conv expr nextexpr + abs expr nextexpr + cap expr nextexpr + odd expr nextexpr + adr expr nextexpr SYSTEM.ADR + cc Nconst nextexpr SYSTEM.CC + val expr nextexpr SYSTEM.VAL + Ndop times expr expr nextexpr + slash expr expr nextexpr + div expr expr nextexpr + mod expr expr nextexpr + and expr expr nextexpr + plus expr expr nextexpr + minus expr expr nextexpr + or expr expr nextexpr + eql expr expr nextexpr + neq expr expr nextexpr + lss expr expr nextexpr + leq expr expr nextexpr + grt expr expr nextexpr + geq expr expr nextexpr + in expr expr nextexpr + ash expr expr nextexpr + msk expr Nconst nextexpr + len design Nconst nextexpr + bit expr expr nextexpr SYSTEM.BIT + lsh expr expr nextexpr SYSTEM.LSH + rot expr expr nextexpr SYSTEM.ROT + Ncall fpar design nextexpr nextexpr + +nextexpr NIL + expr + +ifstat NIL + Nif expr stat ifstat + +casestat Ncaselse sglcase stat (minmax = node^.conval) + +sglcase NIL + Ncasedo Nconst stat sglcase + +stat NIL + Ninittd stat (of node^.typ) + Nenter proc stat stat stat (proc=NIL for mod) + Nassign assign design expr stat + newfn design stat + incfn design expr stat + decfn design expr stat + inclfn design expr stat + exclfn design expr stat + copyfn design expr stat + getfn design expr stat SYSTEM.GET + putfn expr expr stat SYSTEM.PUT + getrfn design Nconst stat SYSTEM.GETREG + putrfn Nconst expr stat SYSTEM.PUTREG + sysnewfn design expr stat SYSTEM.NEW + movefn expr expr stat SYSTEM.MOVE + (right^.link = 3rd par) + Ncall fpar design nextexpr stat + Nifelse ifstat stat stat + Ncase expr casestat stat + Nwhile expr stat stat + Nrepeat stat expr stat + Nloop stat stat + Nexit stat + Nreturn proc nextexpr stat (proc = NIL for mod) + Nwith ifstat stat stat + Ntrap expr stat + diff --git a/src/voc/OPV.Mod b/src/voc/OPV.Mod new file mode 100644 index 00000000..faf311c4 --- /dev/null +++ b/src/voc/OPV.Mod @@ -0,0 +1,1023 @@ +MODULE OPV; (* J. Templ 16.2.95 / 3.7.96 + + 26.7.2002 jt bug fix in Len: wrong result if called for fixed Array + 31.1.2007 jt synchronized with BlackBox version, in particular: + various promotion rules changed (long) => (LONGINT), xxxL avoided +*) + + IMPORT OPT, OPC, OPM, OPS; + + CONST + (* object modes *) + Var = 1; VarPar = 2; Fld = 4; Typ = 5; LProc = 6; XProc = 7; + CProc = 9; IProc = 10; Mod = 11; TProc = 13; + + (* symbol values or ops *) + times = 1; slash = 2; div = 3; mod = 4; + and = 5; plus = 6; minus = 7; or = 8; eql = 9; + neq = 10; lss = 11; leq = 12; gtr = 13; geq = 14; + in = 15; is = 16; ash = 17; msk = 18; len = 19; + conv = 20; abs = 21; cap = 22; odd = 23; not = 33; + (*SYSTEM*) + adr = 24; cc = 25; bit = 26; lsh = 27; rot = 28; val = 29; + + (* structure forms *) + Byte = 1; Bool = 2; Char = 3; SInt = 4; Int = 5; LInt = 6; + Real = 7; LReal = 8; Set = 9; String = 10; NilTyp = 11; Pointer = 13; ProcTyp = 14; Comp = 15; + + (* composite structure forms *) + Array = 2; DynArr = 3; Record = 4; + + (* nodes classes *) + Nvar = 0; Nvarpar = 1; Nfield = 2; Nderef = 3; Nindex = 4; Nguard = 5; Neguard = 6; + Nconst = 7; Ntype = 8; Nproc = 9; Nupto = 10; Nmop = 11; Ndop = 12; Ncall = 13; + Ninittd = 14; Nenter = 18; Nassign = 19; + Nifelse =20; Ncase = 21; Nwhile = 22; Nrepeat = 23; Nloop = 24; Nexit = 25; + Nreturn = 26; Nwith = 27; Ntrap = 28; + + (*function number*) + assign = 0; newfn = 1; incfn = 13; decfn = 14; + inclfn = 15; exclfn = 16; copyfn = 18; assertfn = 32; + + (*SYSTEM function number*) + getfn = 24; putfn = 25; getrfn = 26; putrfn = 27; sysnewfn = 30; movefn = 31; + + (*procedure flags*) + isRedef = 2; + + super = 1; + + UndefinedType = 0; (* named type not yet defined *) + ProcessingType = 1; (* pointer type is being processed *) + PredefinedType = 2; (* for all predefined types *) + DefinedInHdr = 3+OPM.HeaderFile; (* named type has been defined in header file *) + DefinedInBdy = 3+OPM.BodyFile; (* named type has been defined in body file *) + + OpenParen = "("; + CloseParen = ")"; + OpenBracket = "["; + CloseBracket = "]"; + Blank = " "; + Comma = ", "; + Deref = "*"; + EntierFunc = "__ENTIER("; + IsFunc = "__IS("; + IsPFunc = "__ISP("; + GuardPtrFunc = "__GUARDP("; + GuardRecFunc = "__GUARDR("; + TypeFunc = "__TYPEOF("; + SetOfFunc = "__SETOF("; + SetRangeFunc = "__SETRNG("; + CopyFunc = "__COPY("; + MoveFunc = "__MOVE("; + GetFunc = "__GET("; + PutFunc = "__PUT("; + DynTypExt = "__typ"; + WithChk = "__WITHCHK"; + Break = "break"; + ElseStat = "else "; + + MinPrec = -1; + MaxPrec = 12; + ProcTypeVar = 11; (* precedence number when a call is made with a proc type variable *) + + internal = 0; + + TYPE + ExitInfo = RECORD level, label: INTEGER END ; + + + VAR + assert, inxchk, mainprog, ansi: BOOLEAN; + stamp: INTEGER; (* unique number for nested objects *) + (*recno: INTEGER;*) (* number of anonymous record types *) + recno: LONGINT; (* number of anonymous record types *) + + exit: ExitInfo; (* to check if EXIT is simply a break *) + nofExitLabels: INTEGER; + naturalAlignment: BOOLEAN; + + + PROCEDURE NaturalAlignment(size, max: LONGINT): LONGINT; + VAR i: LONGINT; + BEGIN + IF size >= max THEN RETURN max + ELSE i := 1; + WHILE i < size DO INC(i, i) END ; + RETURN i + END + END NaturalAlignment; + + PROCEDURE TypSize*(typ: OPT.Struct); + VAR f, c: INTEGER; offset, size, base, fbase, off0: LONGINT; + fld: OPT.Object; btyp: OPT.Struct; + BEGIN + IF typ = OPT.undftyp THEN OPM.err(58) + ELSIF typ^.size = -1 THEN + f := typ^.form; c := typ^.comp; + IF c = Record THEN btyp := typ^.BaseTyp; + IF btyp = NIL THEN offset := 0; base := OPM.RecAlign; + ELSE TypSize(btyp); offset := btyp^.size - btyp^.sysflag DIV 100H; base := btyp^.align + END; + fld := typ^.link; + WHILE (fld # NIL) & (fld^.mode = Fld) DO + btyp := fld^.typ; TypSize(btyp); + size := btyp^.size; fbase := OPC.Base(btyp); + OPC.Align(offset, fbase); + fld^.adr := offset; INC(offset, size); + IF fbase > base THEN base := fbase END ; + fld := fld^.link + END ; + off0 := offset; + IF offset = 0 THEN offset := 1 END ; (* 1 byte filler to avoid empty struct *) + IF OPM.RecSize = 0 THEN base := NaturalAlignment(offset, OPM.RecAlign) END ; + OPC.Align(offset, base); + IF (typ^.strobj = NIL) & (typ^.align MOD 10000H = 0) THEN INC(recno); INC(base, recno * 10000H) END ; + typ^.size := offset; typ^.align := base; + (* encode the trailing gap into the symbol table to allow dense packing of extended records *) + typ^.sysflag := typ^.sysflag MOD 100H + SHORT((offset - off0)*100H) + ELSIF c = Array THEN + TypSize(typ^.BaseTyp); + typ^.size := typ^.n * typ^.BaseTyp^.size; + ELSIF f = Pointer THEN + typ^.size := OPM.PointerSize; + IF typ^.BaseTyp = OPT.undftyp THEN OPM.Mark(128, typ^.n) + ELSE TypSize(typ^.BaseTyp) + END + ELSIF f = ProcTyp THEN + typ^.size := OPM.ProcSize; + ELSIF c = DynArr THEN + btyp := typ^.BaseTyp; TypSize(btyp); + IF btyp^.comp = DynArr THEN typ^.size := btyp^.size + 4 (* describes dim not size *) + ELSE typ^.size := 8 + END ; + END + END + END TypSize; + + PROCEDURE Init*; + BEGIN + stamp := 0; recno := 0; nofExitLabels := 0; + assert := OPM.assert IN OPM.opt; + inxchk := OPM.inxchk IN OPM.opt; + mainprog := OPM.mainprog IN OPM.opt; + ansi := OPM.ansi IN OPM.opt + END Init; + + PROCEDURE ^Traverse (obj, outerScope: OPT.Object; exported: BOOLEAN); + + PROCEDURE GetTProcNum(obj: OPT.Object); + VAR oldPos: LONGINT; typ: OPT.Struct; redef: OPT.Object; + BEGIN + oldPos := OPM.errpos; OPM.errpos := obj^.scope^.adr; + typ := obj^.link^.typ; + IF typ^.form = Pointer THEN typ := typ^.BaseTyp END ; + OPT.FindField(obj^.name, typ^.BaseTyp, redef); + IF redef # NIL THEN obj^.adr := 10000H*(redef^.adr DIV 10000H) (*mthno*); + IF ~(isRedef IN obj^.conval^.setval) THEN OPM.err(119) END + ELSE INC(obj^.adr, 10000H*typ^.n); INC(typ^.n) + END ; + OPM.errpos := oldPos + END GetTProcNum; + + PROCEDURE TraverseRecord(typ: OPT.Struct); + BEGIN + IF ~typ^.allocated THEN + IF typ^.BaseTyp # NIL THEN TraverseRecord(typ^.BaseTyp); typ^.n := typ^.BaseTyp^.n END ; + typ^.allocated := TRUE; Traverse(typ^.link, typ^.strobj, FALSE) + END + END TraverseRecord; + + PROCEDURE Stamp(VAR s: OPS.Name); + VAR i, j, k: INTEGER; n: ARRAY 10 OF CHAR; + BEGIN INC(stamp); + i := 0; j := stamp; + WHILE s[i] # 0X DO INC(i) END ; + IF i > 25 THEN i := 25 END ; + s[i] := "_"; s[i+1] := "_"; INC(i, 2); k := 0; + REPEAT n[k] := CHR((j MOD 10) + ORD("0")); j := j DIV 10; INC(k) UNTIL j = 0; + REPEAT DEC(k); s[i] := n[k]; INC(i) UNTIL k = 0; + s[i] := 0X; + END Stamp; + + PROCEDURE Traverse (obj, outerScope: OPT.Object; exported: BOOLEAN); + VAR mode: INTEGER; scope: OPT.Object; typ: OPT.Struct; + BEGIN + IF obj # NIL THEN + Traverse(obj^.left, outerScope, exported); + IF obj^.name[0] = "@" THEN obj^.name[0] := "_"; Stamp(obj^.name) END ; (* translate and make unique @for, ... *) + obj^.linkadr := UndefinedType; + mode := obj^.mode; + IF (mode = Typ) & ((obj^.vis # internal) = exported) THEN + typ := obj^.typ; TypSize(obj^.typ); + IF typ^.form = Pointer THEN typ := typ^.BaseTyp END ; + IF typ^.comp = Record THEN TraverseRecord(typ) END + ELSIF mode = TProc THEN GetTProcNum(obj) + ELSIF mode = Var THEN TypSize(obj^.typ) + END ; + IF ~exported THEN (* do this only once *) + IF (mode IN {LProc, Typ}) & (obj^.mnolev > 0) THEN Stamp(obj^.name) END ; + IF mode IN {Var, VarPar, Typ} THEN + obj^.scope := outerScope + ELSIF mode IN {LProc, XProc, TProc, CProc, IProc} THEN + IF obj^.conval^.setval = {} THEN OPM.err(129) END ; + scope := obj^.scope; + scope^.leaf := TRUE; + scope^.name := obj^.name; Stamp(scope^.name); + IF mode = CProc THEN obj^.adr := 1 (* c.f. OPC.CProcDefs *) END ; + IF scope^.mnolev > 1 THEN outerScope^.leaf := FALSE END ; + Traverse (obj^.scope^.right, obj^.scope, FALSE) + END + END; + Traverse(obj^.right, outerScope, exported); + END + END Traverse; + + PROCEDURE AdrAndSize* (topScope: OPT.Object); + BEGIN + OPM.errpos := topScope^.adr; (* text position of scope used if error *) + topScope^.leaf := TRUE; + Traverse(topScope^.right, topScope, TRUE); (* first pass only on exported types and procedures *) + Traverse(topScope^.right, topScope, FALSE); (* second pass *) + (* mark basic types as predefined, OPC.Ident can avoid qualification*) + OPT.chartyp^.strobj^.linkadr := PredefinedType; + OPT.settyp^.strobj^.linkadr := PredefinedType; + OPT.realtyp^.strobj^.linkadr := PredefinedType; + OPT.inttyp^.strobj^.linkadr := PredefinedType; + OPT.linttyp^.strobj^.linkadr := PredefinedType; + OPT.lrltyp^.strobj^.linkadr := PredefinedType; + OPT.sinttyp^.strobj^.linkadr := PredefinedType; + OPT.booltyp^.strobj^.linkadr := PredefinedType; + OPT.bytetyp^.strobj^.linkadr := PredefinedType; + OPT.sysptrtyp^.strobj^.linkadr := PredefinedType; + END AdrAndSize; + +(* ____________________________________________________________________________________________________________________________________________________________________ *) + + PROCEDURE Precedence (class, subclass, form, comp: INTEGER): INTEGER; + BEGIN + CASE class OF + Nconst, Nvar, Nfield, Nindex, Nproc, Ncall: + RETURN 10 + | Nguard: IF OPM.typchk IN OPM.opt THEN RETURN 10 ELSE RETURN 9 (*cast*) END + | Nvarpar: + IF comp IN {Array, DynArr} THEN RETURN 10 ELSE RETURN 9 END (* arrays don't need deref *) + | Nderef: + RETURN 9 + | Nmop: + CASE subclass OF + not, minus, adr, val, conv: + RETURN 9 + | is, abs, cap, odd, cc: + RETURN 10 + END + | Ndop: + CASE subclass OF + times: + IF form = Set THEN RETURN 4 ELSE RETURN 8 END + | slash: + IF form = Set THEN RETURN 3 ELSE RETURN 8 END + | div, mod: + RETURN 10 (* div/mod are replaced by functions *) + | plus: + IF form = Set THEN RETURN 2 ELSE RETURN 7 END + | minus: + IF form = Set THEN RETURN 4 ELSE RETURN 7 END + | lss, leq, gtr, geq: + RETURN 6 + | eql, neq: + RETURN 5 + | and: + RETURN 1 + | or: + RETURN 0 + | len, in, ash, msk, bit, lsh, rot: + RETURN 10 + END; + | Nupto: + RETURN 10 + | Ntype, Neguard: (* ignored anyway *) + RETURN MaxPrec + END; + END Precedence; + + PROCEDURE^ expr (n: OPT.Node; prec: INTEGER); + PROCEDURE^ design(n: OPT.Node; prec: INTEGER); + + PROCEDURE Len(n: OPT.Node; dim: LONGINT); + BEGIN + WHILE (n^.class = Nindex) & (n^.typ^.comp = DynArr(*26.7.2002*)) DO INC(dim); n := n^.left END ; + IF (n^.class = Nderef) & (n^.typ^.comp = DynArr) THEN + design(n^.left, 10); OPM.WriteString("->len["); OPM.WriteInt(dim); OPM.Write("]") + ELSE + OPC.Len(n^.obj, n^.typ, dim) + END + END Len; + + PROCEDURE SideEffects(n: OPT.Node): BOOLEAN; + BEGIN + IF n # NIL THEN RETURN (n^.class = Ncall) OR SideEffects(n^.left) OR SideEffects(n^.right) + ELSE RETURN FALSE + END + END SideEffects; + + PROCEDURE Entier(n: OPT.Node; prec: INTEGER); + BEGIN + IF n^.typ^.form IN {Real, LReal} THEN + OPM.WriteString(EntierFunc); expr(n, MinPrec); OPM.Write(CloseParen) + ELSE expr(n, prec) + END + END Entier; + + PROCEDURE Convert(n: OPT.Node; form, prec: INTEGER); + VAR from: INTEGER; + BEGIN from := n^.typ^.form; + IF form = Set THEN OPM.WriteString(SetOfFunc); Entier(n, MinPrec); OPM.Write(CloseParen) + ELSIF form = LInt THEN + IF from < LInt THEN OPM.WriteString("(LONGINT)") END ; + Entier(n, 9) + ELSIF form = Int THEN + IF from < Int THEN OPM.WriteString("(int)"); expr(n, 9) + ELSE + IF OPM.ranchk IN OPM.opt THEN OPM.WriteString("__SHORT"); + IF SideEffects(n) THEN OPM.Write("F") END ; + OPM.Write(OpenParen); Entier(n, MinPrec); + OPM.WriteString(Comma); OPM.WriteInt(OPM.MaxInt + 1); OPM.Write(CloseParen) + ELSE OPM.WriteString("(int)"); Entier(n, 9) + END + END + ELSIF form = SInt THEN + IF OPM.ranchk IN OPM.opt THEN OPM.WriteString("__SHORT"); + IF SideEffects(n) THEN OPM.Write("F") END ; + OPM.Write(OpenParen); Entier(n, MinPrec); + OPM.WriteString(Comma); OPM.WriteInt(OPM.MaxSInt + 1); OPM.Write(CloseParen) + ELSE OPM.WriteString("(int)"); Entier(n, 9) + END + ELSIF form = Char THEN + IF OPM.ranchk IN OPM.opt THEN OPM.WriteString("__CHR"); + IF SideEffects(n) THEN OPM.Write("F") END ; + OPM.Write(OpenParen); Entier(n, MinPrec); OPM.Write(CloseParen) + ELSE OPM.WriteString("(CHAR)"); Entier(n, 9) + END + ELSE expr(n, prec) + END + END Convert; + + PROCEDURE TypeOf(n: OPT.Node); + BEGIN + IF n^.typ^.form = Pointer THEN + OPM.WriteString(TypeFunc); expr(n, MinPrec); OPM.Write(")") + ELSIF n^.class IN {Nvar, Nindex, Nfield} THEN (* dyn rec type = stat rec type *) + OPC.Andent(n^.typ); OPM.WriteString(DynTypExt) + ELSIF n^.class = Nderef THEN (* p^ *) + OPM.WriteString(TypeFunc); expr(n^.left, MinPrec); OPM.Write(")") + ELSIF n^.class = Nguard THEN (* r(T) *) + TypeOf(n^.left) (* skip guard *) + ELSIF (n^.class = Nmop) & (n^.subcl = val) THEN + (*SYSTEM.VAL(typ, var par rec)*) + OPC.TypeOf(n^.left^.obj) + ELSE (* var par rec *) + OPC.TypeOf(n^.obj) + END + END TypeOf; + + PROCEDURE Index(n, d: OPT.Node; prec, dim: INTEGER); + BEGIN + IF ~inxchk + OR (n^.right^.class = Nconst) & ((n^.right^.conval^.intval = 0) OR (n^.left^.typ^.comp # DynArr)) THEN + expr(n^.right, prec) + ELSE + IF SideEffects(n^.right) THEN OPM.WriteString("__XF(") ELSE OPM.WriteString("__X(") END ; + expr(n^.right, MinPrec); OPM.WriteString(Comma); Len(d, dim); OPM.Write(CloseParen) + END + END Index; + + PROCEDURE design(n: OPT.Node; prec: INTEGER); + VAR obj: OPT.Object; typ: OPT.Struct; + class, designPrec, comp: INTEGER; + d, x: OPT.Node; dims, i: INTEGER; + BEGIN + comp := n^.typ^.comp; obj := n^.obj; class := n^.class; + designPrec := Precedence(class, n^.subcl, n^.typ^.form, comp); + IF (class = Nvar) & (obj^.mnolev > 0) & (obj^.mnolev # OPM.level) & (prec = 10) THEN designPrec := 9 END ; + IF prec > designPrec THEN OPM.Write(OpenParen) END; + IF prec = ProcTypeVar THEN OPM.Write(Deref) END; (* proc var calls must be dereferenced in K&R C *) + CASE class OF + Nproc: + OPC.Ident(n^.obj) + | Nvar: + OPC.CompleteIdent(n^.obj) + | Nvarpar: + IF ~(comp IN {Array, DynArr}) THEN OPM.Write(Deref) END; (* deref var parameter *) + OPC.CompleteIdent(n^.obj) + | Nfield: + IF n^.left^.class = Nderef THEN design(n^.left^.left, designPrec); OPM.WriteString("->") + ELSE design(n^.left, designPrec); OPM.Write(".") + END ; + OPC.Ident(n^.obj) + | Nderef: + IF n^.typ^.comp = DynArr THEN design(n^.left, 10); OPM.WriteString("->data") + ELSE OPM.Write(Deref); design(n^.left, designPrec) + END + | Nindex: + d := n^.left; + IF d^.typ^.comp = DynArr THEN dims := 0; + WHILE d^.class = Nindex DO d := d^.left; INC(dims) END ; + IF n^.typ^.comp = DynArr THEN OPM.Write("&") END ; + design(d, designPrec); + OPM.Write(OpenBracket); + IF n^.typ^.comp = DynArr THEN OPM.Write("(") END ; + i := dims; x := n; + WHILE x # d DO (* apply Horner schema *) + IF x^.left # d THEN Index(x, d, 7, i); OPM.WriteString(" + "); Len(d, i); OPM.WriteString(" * ("); DEC(i) + ELSE Index(x, d, MinPrec, i) + END ; + x := x^.left + END ; + FOR i := 1 TO dims DO OPM.Write(")") END ; + IF n^.typ^.comp = DynArr THEN + (* element type is DynArr; finish Horner schema with virtual indices = 0*) + OPM.Write(")"); + WHILE i < (d^.typ^.size - 4) DIV 4 DO + OPM.WriteString(" * "); Len(d, i); + INC(i) + END + END ; + OPM.Write(CloseBracket) + ELSE + design(n^.left, designPrec); + OPM.Write(OpenBracket); + Index(n, n^.left, MinPrec, 0); + OPM.Write(CloseBracket) + END + | Nguard: + typ := n^.typ; obj := n^.left^.obj; + IF OPM.typchk IN OPM.opt THEN + IF typ^.comp = Record THEN OPM.WriteString(GuardRecFunc); + IF obj^.mnolev # OPM.level THEN (*intermediate level var-par record*) + OPM.WriteStringVar(obj^.scope^.name); OPM.WriteString("__curr->"); OPC.Ident(obj) + ELSE (*local var-par record*) + OPC.Ident(obj) + END ; + ELSE (*Pointer*) + IF typ^.BaseTyp^.strobj = NIL THEN OPM.WriteString("__GUARDA(") ELSE OPM.WriteString(GuardPtrFunc) END ; + expr(n^.left, MinPrec); typ := typ^.BaseTyp + END ; + OPM.WriteString(Comma); + OPC.Andent(typ); OPM.WriteString(Comma); + OPM.WriteInt(typ^.extlev); OPM.Write(")") + ELSE + IF typ^.comp = Record THEN (* do not cast record directly, cast pointer to record *) + OPM.WriteString("*("); OPC.Ident(typ^.strobj); OPM.WriteString("*)"); OPC.CompleteIdent(obj) + ELSE (*simply cast pointer*) + OPM.Write("("); OPC.Ident(typ^.strobj); OPM.Write(")"); expr(n^.left, designPrec) + END + END + | Neguard: + IF OPM.typchk IN OPM.opt THEN + IF n^.left^.class = Nvarpar THEN OPM.WriteString("__GUARDEQR("); + OPC.CompleteIdent(n^.left^.obj); OPM.WriteString(Comma); TypeOf(n^.left); + ELSE OPM.WriteString("__GUARDEQP("); expr(n^.left^.left, MinPrec) + END ; (* __GUARDEQx includes deref *) + OPM.WriteString(Comma); OPC.Ident(n^.left^.typ^.strobj); OPM.Write(")") + ELSE + expr(n^.left, MinPrec) (* always lhs of assignment *) + END + | Nmop: + IF n^.subcl = val THEN design(n^.left, prec) END + END ; + IF prec > designPrec THEN OPM.Write(CloseParen) END + END design; + + PROCEDURE ActualPar(n: OPT.Node; fp: OPT.Object); + VAR typ, aptyp: OPT.Struct; comp, form, mode, prec, dim: INTEGER; + BEGIN + OPM.Write(OpenParen); + WHILE n # NIL DO typ := fp^.typ; + comp := typ^.comp; form := typ^.form; mode := fp^.mode; prec := MinPrec; + IF (mode = VarPar) & (n^.class = Nmop) & (n^.subcl = val) THEN (* avoid cast in lvalue *) + OPM.Write(OpenParen); OPC.Ident(n^.typ^.strobj); OPM.WriteString("*)"); prec := 10 + END ; + IF ~(n^.typ^.comp IN {Array, DynArr}) THEN + IF mode = VarPar THEN + IF ansi & (typ # n^.typ) THEN OPM.WriteString("(void*)") END ; + OPM.Write("&"); prec := 9 + ELSIF ansi THEN + IF (comp IN {Array, DynArr}) & (n^.class = Nconst) THEN + OPM.WriteString("(CHAR*)") (* force to unsigned char *) + ELSIF (form = Pointer) & (typ # n^.typ) & (n^.typ # OPT.niltyp) THEN + OPM.WriteString("(void*)") (* type extension *) + END + ELSE + IF (form IN {Real, LReal}) & (n^.typ^.form IN {SInt, Int, LInt}) THEN (* real promotion *) + OPM.WriteString("(double)"); prec := 9 + ELSIF (form = LInt) & (n^.typ^.form < LInt) THEN (* integral promotion *) + OPM.WriteString("(LONGINT)"); prec := 9 + END + END + ELSIF ansi THEN + (* casting of params should be simplified eventually *) + IF (mode = VarPar) & (typ # n^.typ) & (prec = MinPrec) THEN OPM.WriteString("(void*)") END + END ; + IF (mode = VarPar) & (n^.class = Nmop) & (n^.subcl = val) THEN expr(n^.left, prec) (* avoid cast in lvalue *) + ELSE expr(n, prec) + END ; + IF (form = LInt) & (n^.class = Nconst) + & (n^.conval^.intval <= OPM.MaxInt) & (n^.conval^.intval >= OPM.MinInt) THEN + OPM.PromoteIntConstToLInt() + ELSIF (comp = Record) & (mode = VarPar) THEN + OPM.WriteString(", "); TypeOf(n) + ELSIF comp = DynArr THEN + IF n^.class = Nconst THEN (* ap is string constant *) + OPM.WriteString(Comma); OPM.WriteString("(LONGINT)"); OPM.WriteInt(n^.conval^.intval2) + ELSE + aptyp := n^.typ; dim := 0; + WHILE (typ^.comp = DynArr) & (typ^.BaseTyp^.form # Byte) DO + OPM.WriteString(Comma); Len(n, dim); + typ := typ^.BaseTyp; aptyp := aptyp^.BaseTyp; INC(dim) + END ; + IF (typ^.comp = DynArr) & (typ^.BaseTyp^.form = Byte) THEN + OPM.WriteString(Comma); + WHILE aptyp^.comp = DynArr DO + Len(n, dim); OPM.WriteString(" * "); INC(dim); aptyp := aptyp^.BaseTyp + END ; + OPM.WriteInt(aptyp^.size); OPM.PromoteIntConstToLInt() + END + END + END ; + n := n^.link; fp := fp^.link; + IF n # NIL THEN OPM.WriteString(Comma) END + END ; + OPM.Write(CloseParen) + END ActualPar; + + PROCEDURE SuperProc(n: OPT.Node): OPT.Object; + VAR obj: OPT.Object; typ: OPT.Struct; + BEGIN typ := n^.right^.typ; (* receiver type *) + IF typ^.form = Pointer THEN typ := typ^.BaseTyp END ; + OPT.FindField(n^.left^.obj^.name, typ^.BaseTyp, obj); + RETURN obj + END SuperProc; + + PROCEDURE expr (n: OPT.Node; prec: INTEGER); + VAR + class: INTEGER; + subclass: INTEGER; + form: INTEGER; + exprPrec: INTEGER; + typ: OPT.Struct; + l, r: OPT.Node; + proc: OPT.Object; + BEGIN + class := n^.class; subclass := n^.subcl; form := n^.typ^.form; + l := n^.left; r := n^.right; + exprPrec := Precedence (class, subclass, form, n^.typ^.comp); + IF (exprPrec <= prec) & (class IN {Nconst, Nupto, Nmop, Ndop, Ncall, Nguard, Neguard}) THEN + OPM.Write(OpenParen); + END; + CASE class OF + Nconst: + OPC.Constant(n^.conval, form) + | Nupto: (* n^.typ = OPT.settyp *) + OPM.WriteString(SetRangeFunc); expr(l, MinPrec); OPM.WriteString(Comma); expr (r, MinPrec); + OPM.Write(CloseParen) + | Nmop: + CASE subclass OF + not: + OPM.Write("!"); expr(l, exprPrec) + | minus: + IF form = Set THEN OPM.Write("~") ELSE OPM.Write("-"); END ; + expr(l, exprPrec) + | is: + typ := n^.obj^.typ; + IF l^.typ^.comp = Record THEN OPM.WriteString(IsFunc); OPC.TypeOf(l^.obj) + ELSE OPM.WriteString(IsPFunc); expr(l, MinPrec); typ := typ^.BaseTyp + END ; + OPM.WriteString(Comma); + OPC.Andent(typ); OPM.WriteString(Comma); + OPM.WriteInt(typ^.extlev); OPM.Write(")") + | conv: + Convert(l, form, exprPrec) + | abs: + IF SideEffects(l) THEN + IF l^.typ^.form < Real THEN + IF l^.typ^.form < LInt THEN OPM.WriteString("(int)") END ; + OPM.WriteString("__ABSF(") + ELSE OPM.WriteString("__ABSFD(") + END + ELSE OPM.WriteString("__ABS(") + END ; + expr(l, MinPrec); OPM.Write(CloseParen) + | cap: + OPM.WriteString("__CAP("); expr(l, MinPrec); OPM.Write(CloseParen) + | odd: + OPM.WriteString("__ODD("); expr(l, MinPrec); OPM.Write(CloseParen) + | adr: (*SYSTEM*) + OPM.WriteString("(LONGINT)"); + IF l^.class = Nvarpar THEN OPC.CompleteIdent(l^.obj) + ELSE + IF (l^.typ^.form # String) & ~(l^.typ^.comp IN {Array, DynArr}) THEN OPM.Write("&") END ; + expr(l, exprPrec) + END + | val: (*SYSTEM*) + IF (n^.typ^.form IN {LInt, Pointer, Set, ProcTyp}) & (l^.typ^.form IN {LInt, Pointer, Set, ProcTyp}) + & (n^.typ^.size = l^.typ^.size) OR ~(l^.class IN {Nvar, Nvarpar, Nfield, Nindex}) THEN + OPM.Write(OpenParen); OPC.Ident(n^.typ^.strobj); OPM.Write(CloseParen); + expr(l, exprPrec) + ELSE + OPM.WriteString("__VAL("); OPC.Ident(n^.typ^.strobj); OPM.WriteString(Comma); + expr(l, MinPrec); OPM.Write(CloseParen) + END + ELSE OPM.err(200) + END + | Ndop: + CASE subclass OF + len: + Len(l, r^.conval^.intval) + | in, ash, msk, bit, lsh, rot, div, mod: + CASE subclass OF + | in: + OPM.WriteString("__IN(") + | ash: + IF r^.class = Nconst THEN + IF r^.conval^.intval >= 0 THEN OPM.WriteString("__ASHL(") + ELSE OPM.WriteString("__ASHR(") + END + ELSIF SideEffects(r) THEN OPM.WriteString("__ASHF(") + ELSE OPM.WriteString("__ASH(") + END + | msk: + OPM.WriteString("__MASK("); + | bit: + OPM.WriteString("__BIT(") + | lsh: + IF r^.class = Nconst THEN + IF r^.conval^.intval >= 0 THEN OPM.WriteString("__LSHL(") + ELSE OPM.WriteString("__LSHR(") + END + ELSE OPM.WriteString("__LSH(") + END + | rot: + IF r^.class = Nconst THEN + IF r^.conval^.intval >= 0 THEN OPM.WriteString("__ROTL(") + ELSE OPM.WriteString("__ROTR(") + END + ELSE OPM.WriteString("__ROT(") + END + | div: + IF SideEffects(n) THEN + IF form < LInt THEN OPM.WriteString("(int)") END ; + OPM.WriteString("__DIVF(") + ELSE OPM.WriteString("__DIV(") + END + | mod: + IF form < LInt THEN OPM.WriteString("(int)") END ; + IF SideEffects(n) THEN OPM.WriteString("__MODF(") + ELSE OPM.WriteString("__MOD(") + END + END ; + expr(l, MinPrec); + OPM.WriteString(Comma); + IF (subclass IN {ash, lsh, rot}) & (r^.class = Nconst) & (r^.conval^.intval < 0) THEN + OPM.WriteInt(-r^.conval^.intval) + ELSE expr(r, MinPrec) + END ; + IF subclass IN {lsh, rot} THEN OPM.WriteString(Comma); OPC.Ident(l^.typ^.strobj) END ; + OPM.Write(CloseParen) + | eql .. geq: + IF l^.typ^.form IN {String, Comp} THEN + OPM.WriteString("__STRCMP("); + expr(l, MinPrec); OPM.WriteString(Comma); expr(r, MinPrec); OPM.Write(CloseParen); + OPC.Cmp(subclass); OPM.Write("0") + ELSE + expr(l, exprPrec); OPC.Cmp(subclass); + typ := l^.typ; + IF (typ^.form = Pointer) & (r^.typ.form # NilTyp) & (r^.typ # typ) & (r^.typ # OPT.sysptrtyp) THEN + OPM.WriteString("(void *) ") + END ; + expr(r, exprPrec) + END + ELSE + expr(l, exprPrec); + CASE subclass OF + times: + IF form = Set THEN OPM.WriteString(" & ") + ELSE OPM.WriteString(" * ") + END + | slash: + IF form = Set THEN OPM.WriteString(" ^ ") + ELSE OPM.WriteString(" / "); + IF (r^.obj = NIL) OR (r^.obj^.typ^.form IN {SInt, Int, LInt}) THEN + OPM.Write(OpenParen); OPC.Ident(n^.typ^.strobj); OPM.Write(CloseParen) + END + END + | and: + OPM.WriteString(" && ") + | plus: + IF form = Set THEN OPM.WriteString(" | ") + ELSE OPM.WriteString(" + ") + END + | minus: + IF form = Set THEN OPM.WriteString(" & ~") + ELSE OPM.WriteString(" - ") + END; + | or: + OPM.WriteString(" || ") + END; + expr(r, exprPrec) + END + | Ncall: + IF (l^.obj # NIL) & (l^.obj^.mode = TProc) THEN + IF l^.subcl = super THEN proc := SuperProc(n) + ELSE OPM.WriteString("__"); proc := OPC.BaseTProc(l^.obj) + END ; + OPC.Ident(proc); + n^.obj := proc^.link + ELSIF l^.class = Nproc THEN design(l, 10) + ELSE design(l, ProcTypeVar) + END ; + ActualPar(r, n^.obj) + ELSE + design(n, prec); (* not exprPrec! *) + END ; + IF (exprPrec <= prec) & (class IN {Nconst, Nupto, Nmop, Ndop, Ncall, Nguard}) THEN + OPM.Write(CloseParen) + END + END expr; + + PROCEDURE^ stat(n: OPT.Node; outerProc: OPT.Object); + + PROCEDURE IfStat(n: OPT.Node; withtrap: BOOLEAN; outerProc: OPT.Object); + VAR if: OPT.Node; obj: OPT.Object; typ: OPT.Struct; adr: LONGINT; + BEGIN (* n^.class IN {Nifelse, Nwith} *) + if := n^.left; (* name := ""; *) + WHILE if # NIL DO + OPM.WriteString("if "); expr(if^.left, MaxPrec); (* if *) + OPM.Write(Blank); OPC.BegBlk; + IF (n^.class = Nwith) & (if^.left^.left # NIL) THEN (* watch out for const expr *) + obj := if^.left^.left^.obj; typ := obj^.typ; adr := obj^.adr; + IF typ^.comp = Record THEN + (* introduce alias pointer for var records; T1 *name__ = rec; *) + OPC.BegStat; OPC.Ident(if^.left^.obj); OPM.WriteString(" *"); + OPM.WriteString(obj.name); OPM.WriteString("__ = (void*)"); + obj^.adr := 0; (* for nested WITH with same variable; always take the original name *) + OPC.CompleteIdent(obj); + OPC.EndStat + END ; + obj^.adr := 1; (* signal special handling of variable name to OPC.CompleteIdent *) + obj^.typ := if^.left^.obj^.typ; + stat(if^.right, outerProc); + obj^.typ := typ; obj^.adr := adr + ELSE + stat(if^.right, outerProc) + END ; + if := if^.link; + IF (if # NIL) OR (n^.right # NIL) OR withtrap THEN OPC.EndBlk0(); OPM.WriteString(" else "); + ELSE OPC.EndBlk() + END + END ; + IF withtrap THEN OPM.WriteString(WithChk); OPC.EndStat() + ELSIF n^.right # NIL THEN OPC.BegBlk; stat(n^.right, outerProc); OPC.EndBlk + END + END IfStat; + + PROCEDURE CaseStat(n: OPT.Node; outerProc: OPT.Object); + VAR switchCase, label: OPT.Node; + low, high: LONGINT; form, i: INTEGER; + BEGIN + OPM.WriteString("switch "); expr(n^.left, MaxPrec); + OPM.Write(Blank); OPC.BegBlk; + form := n^.left^.typ^.form; + switchCase := n^.right^.left; + WHILE switchCase # NIL DO (* switchCase^.class = Ncasedo *) + label := switchCase^.left; + i := 0; + WHILE label # NIL DO (* label^.class = NConst *) + low := label^.conval^.intval; + high := label^.conval^.intval2; + WHILE low <= high DO + IF i = 0 THEN OPC.BegStat END ; + OPC.Case(low, form); + INC(low); INC(i); + IF i = 5 THEN OPM.WriteLn; i := 0 END + END ; + label := label^.link + END ; + IF i > 0 THEN OPM.WriteLn END ; + OPC.Indent(1); + stat(switchCase^.right, outerProc); + OPC.BegStat; OPM.WriteString(Break); OPC.EndStat; + OPC.Indent(-1); + switchCase := switchCase^.link + END ; + OPC.BegStat; OPM.WriteString("default: "); + IF n^.right^.conval^.setval # {} THEN (* else branch *) + OPC.Indent(1); OPM.WriteLn; stat(n^.right^.right, outerProc); + OPC.BegStat; OPM.WriteString(Break); OPC.Indent(-1) + ELSE + OPM.WriteString("__CASECHK") + END ; + OPC.EndStat; OPC.EndBlk + END CaseStat; + + PROCEDURE ImplicitReturn(n: OPT.Node): BOOLEAN; + BEGIN + WHILE (n # NIL) & (n.class # Nreturn) DO n := n^.link END ; + RETURN n = NIL + END ImplicitReturn; + + PROCEDURE NewArr(d, x: OPT.Node); + VAR typ, base: OPT.Struct; nofdim, nofdyn: INTEGER; + BEGIN + typ := d^.typ^.BaseTyp; base := typ; nofdim := 0; nofdyn := 0; + WHILE base^.comp = DynArr DO INC(nofdim); INC(nofdyn); base := base^.BaseTyp END ; + design(d, MinPrec); OPM.WriteString(" = __NEWARR("); + WHILE base^.comp = Array DO INC(nofdim); base := base^.BaseTyp END ; + IF (base^.comp = Record) & (OPC.NofPtrs(base) # 0) THEN + OPC.Ident(base^.strobj); OPM.WriteString(DynTypExt) + ELSIF base^.form = Pointer THEN OPM.WriteString("POINTER__typ") + ELSE OPM.WriteString("NIL") + END ; + OPM.WriteString(", "); OPM.WriteInt(base^.size); OPM.PromoteIntConstToLInt(); (* element size *) + OPM.WriteString(", "); OPM.WriteInt(OPC.Base(base)); (* element alignment *) + OPM.WriteString(", "); OPM.WriteInt(nofdim); (* total number of dimensions = number of additional parameters *) + OPM.WriteString(", "); OPM.WriteInt(nofdyn); (* number of dynamic dimensions *) + WHILE typ # base DO + OPM.WriteString(", "); + IF typ^.comp = DynArr THEN + IF x^.class = Nconst THEN expr(x, MinPrec); OPM.PromoteIntConstToLInt() + ELSE OPM.WriteString("(LONGINT)"); expr(x, 10) + END ; + x := x^.link + ELSE OPM.WriteInt(typ^.n); OPM.PromoteIntConstToLInt() + END ; + typ := typ^.BaseTyp + END ; + OPM.Write(")") + END NewArr; + + PROCEDURE DefineTDescs(n: OPT.Node); + BEGIN + WHILE (n # NIL) & (n^.class = Ninittd) DO OPC.TDescDecl(n^.typ); n := n^.link END + END DefineTDescs; + + PROCEDURE InitTDescs(n: OPT.Node); + BEGIN + WHILE (n # NIL) & (n^.class = Ninittd) DO OPC.InitTDesc(n^.typ); n := n^.link END + END InitTDescs; + + PROCEDURE stat(n: OPT.Node; outerProc: OPT.Object); + VAR proc: OPT.Object; saved: ExitInfo; l, r: OPT.Node; + BEGIN + WHILE (n # NIL) & OPM.noerr DO + OPM.errpos := n^.conval^.intval; + IF n^.class # Ninittd THEN OPC.BegStat; END; + CASE n^.class OF + Nenter: + IF n^.obj = NIL THEN (* enter module *) + INC(OPM.level); stat(n^.left, outerProc); DEC(OPM.level); + OPC.GenEnumPtrs(OPT.topScope^.scope); + DefineTDescs(n^.right); OPC.EnterBody; InitTDescs(n^.right); + OPM.WriteString("/* BEGIN */"); OPM.WriteLn; + stat(n^.right, outerProc); OPC.ExitBody + ELSE (* enter proc *) + proc := n^.obj; + OPC.TypeDefs(proc^.scope^.right, 0); + IF ~proc^.scope^.leaf THEN OPC.DefineInter (proc) END ; (* define intermediate procedure scope *) + INC(OPM.level); stat(n^.left, proc); DEC(OPM.level); + OPC.EnterProc(proc); stat(n^.right, proc); + OPC.ExitProc(proc, TRUE, ImplicitReturn(n^.right)); + END + | Ninittd: (* done in enter module *) + | Nassign: + CASE n^.subcl OF + assign: + l := n^.left; r := n^.right; + IF l^.typ^.comp = Array THEN (* includes string assignment but not COPY *) + OPM.WriteString(MoveFunc); + expr(r, MinPrec); OPM.WriteString(Comma); expr(l, MinPrec); OPM.WriteString(Comma); + IF r^.typ = OPT.stringtyp THEN OPM.WriteInt(r^.conval^.intval2) + ELSE OPM.WriteInt(r^.typ^.size) + END ; + OPM.Write(CloseParen) + ELSE + IF (l^.typ^.form = Pointer) & (l^.obj # NIL) & (l^.obj^.adr = 1) & (l^.obj^.mode = Var) THEN + l^.obj^.adr := 0; design(l, MinPrec); l^.obj^.adr := 1; (* avoid cast of WITH-variable *) + IF r^.typ^.form # NilTyp THEN OPM.WriteString(" = (void*)") + ELSE OPM.WriteString(" = ") + END + ELSE + design(l, MinPrec); OPM.WriteString(" = ") + END ; + IF l^.typ = r^.typ THEN expr(r, MinPrec) + ELSIF (l^.typ^.form = Pointer) & (r^.typ^.form # NilTyp) & (l^.typ^.strobj # NIL) THEN + OPM.Write("("); OPC.Ident(l^.typ^.strobj); OPM.Write(")"); expr(r, MinPrec) + ELSIF l^.typ^.comp = Record THEN + OPM.WriteString("*("); OPC.Andent(l^.typ); OPM.WriteString("*)&"); expr(r, 9) + ELSE expr(r, MinPrec) + END + END + | newfn: + IF n^.left^.typ^.BaseTyp^.comp = Record THEN + OPM.WriteString("__NEW("); design(n^.left, MinPrec); OPM.WriteString(", "); + OPC.Andent(n^.left^.typ^.BaseTyp); OPM.WriteString(")") + ELSIF n^.left^.typ^.BaseTyp^.comp IN {Array, DynArr} THEN + NewArr(n^.left, n^.right) + END + | incfn, decfn: + expr(n^.left, MinPrec); OPC.Increment(n^.subcl = decfn); expr(n^.right, MinPrec) + | inclfn, exclfn: + expr(n^.left, MinPrec); OPC.SetInclude(n^.subcl = exclfn); OPM.WriteString(SetOfFunc); expr(n^.right, MinPrec); + OPM.Write(CloseParen) + | copyfn: + OPM.WriteString(CopyFunc); + expr(n^.right, MinPrec); OPM.WriteString(Comma); expr(n^.left, MinPrec); OPM.WriteString(Comma); + Len(n^.left, 0); OPM.Write(CloseParen) + | (*SYSTEM*)movefn: + OPM.WriteString(MoveFunc); + expr(n^.right, MinPrec); OPM.WriteString(Comma); expr(n^.left, MinPrec); OPM.WriteString(Comma); + expr(n^.right^.link, MinPrec); + OPM.Write(CloseParen) + | (*SYSTEM*)getfn: + OPM.WriteString(GetFunc); expr(n^.right, MinPrec); OPM.WriteString(Comma); expr(n^.left, MinPrec); + OPM.WriteString(Comma); OPC.Ident(n^.left^.typ^.strobj); OPM.Write(CloseParen) + | (*SYSTEM*)putfn: + OPM.WriteString(PutFunc); expr(n^.left, MinPrec); OPM.WriteString(Comma); expr(n^.right, MinPrec); + OPM.WriteString(Comma); OPC.Ident(n^.right^.typ^.strobj); OPM.Write(CloseParen) + | (*SYSTEM*)getrfn, putrfn: OPM.err(200) + | (*SYSTEM*)sysnewfn: + OPM.WriteString("__SYSNEW("); + design(n^.left, MinPrec); OPM.WriteString(", "); + expr(n^.right, MinPrec); + OPM.Write(")") + END + | Ncall: + IF (n^.left^.obj # NIL) & (n^.left^.obj^.mode = TProc) THEN + IF n^.left^.subcl = super THEN proc := SuperProc(n) + ELSE OPM.WriteString("__"); proc := OPC.BaseTProc(n^.left^.obj) + END ; + OPC.Ident(proc); + n^.obj := proc^.link + ELSIF n^.left^.class = Nproc THEN design(n^.left, 10) + ELSE design(n^.left, ProcTypeVar) + END ; + ActualPar(n^.right, n^.obj) + | Nifelse: + IF n^.subcl # assertfn THEN IfStat(n, FALSE, outerProc) + ELSIF assert THEN OPM.WriteString("__ASSERT("); expr(n^.left^.left^.left, MinPrec); OPM.WriteString(Comma); + OPM.WriteInt(n^.left^.right^.right^.conval^.intval); OPM.Write(CloseParen); OPC.EndStat + END + | Ncase: + INC(exit.level); CaseStat(n, outerProc); DEC(exit.level) + | Nwhile: + INC(exit.level); OPM.WriteString("while "); expr(n^.left, MaxPrec); + OPM.Write(Blank); OPC.BegBlk; stat(n^.right, outerProc); OPC.EndBlk; + DEC(exit.level) + | Nrepeat: + INC(exit.level); OPM.WriteString("do "); OPC.BegBlk; stat(n^.left, outerProc); OPC.EndBlk0; + OPM.WriteString(" while (!"); expr(n^.right, 9); OPM.Write(CloseParen); + DEC(exit.level) + | Nloop: + saved := exit; exit.level := 0; exit.label := -1; + OPM.WriteString("for (;;) "); OPC.BegBlk; stat(n^.left, outerProc); OPC.EndBlk; + IF exit.label # -1 THEN + OPC.BegStat; OPM.WriteString("exit__"); OPM.WriteInt(exit.label); OPM.Write(":"); OPC.EndStat + END ; + exit := saved + | Nexit: + IF exit.level = 0 THEN OPM.WriteString(Break) + ELSE + IF exit.label = -1 THEN exit.label := nofExitLabels; INC(nofExitLabels) END ; + OPM.WriteString("goto exit__"); OPM.WriteInt(exit.label) + END + | Nreturn: + IF OPM.level = 0 THEN + IF mainprog THEN OPM.WriteString("__FINI") ELSE OPM.WriteString("__ENDMOD") END + ELSE + OPC.ExitProc(outerProc, FALSE, FALSE); + OPM.WriteString("return"); + IF n^.left # NIL THEN OPM.Write(Blank); + IF (n^.left^.typ^.form = Pointer) & (n^.obj^.typ # n^.left^.typ) THEN + OPM.WriteString("(void*)"); expr(n^.left, 10) + ELSE + expr(n^.left, MinPrec) + END + END + END + | Nwith: + IfStat(n, n^.subcl = 0, outerProc) + | Ntrap: + OPC.Halt(n^.right^.conval^.intval) + END ; + IF ~(n^.class IN {Nenter, Ninittd, Nifelse, Nwith, Ncase, Nwhile, Nloop}) THEN OPC.EndStat END ; + n := n^.link + END + END stat; + + PROCEDURE Module*(prog: OPT.Node); + BEGIN + IF ~mainprog THEN OPC.GenHdr(prog^.right); OPC.GenHdrIncludes END ; + OPC.GenBdy(prog^.right); stat(prog, NIL) + END Module; + +END OPV. diff --git a/src/voc/errors.Mod b/src/voc/errors.Mod new file mode 100644 index 00000000..1cf1269f --- /dev/null +++ b/src/voc/errors.Mod @@ -0,0 +1,213 @@ +MODULE errors; + +TYPE string* = ARRAY 128 OF CHAR; + +VAR errors- : ARRAY 350 OF string; + + +BEGIN +(* Incorroct use of the language Oberon *) +errors[0] := "undeclared identifier"; +errors[1] := "multiply defined identifier"; +errors[2] := "illegal character in number"; +errors[3] := "illegal character in string"; +errors[4] := "identifier does not match procedure name"; +errors[5] := "comment not closed"; +errors[6] := ""; +errors[6] := ""; +errors[6] := ""; +errors[9] := "'=' expected"; +errors[10] :=""; +errors[11] :=""; +errors[12] := "type definition starts with incorrect symbol"; +errors[13] := "factor starts with incorrect symbol"; +errors[14] := "statement starts with incorrect symbol"; +errors[15] := "declaration followed by incorrect symbol"; +errors[16] := "MODULE expected"; +errors[17] := ""; +errors[18] := "'.' missing"; +errors[19] := "',' missing"; +errors[20] := "':' missing"; +errors[21] := ""; +errors[22] := "')' missing"; +errors[23] := "']' missing"; +errors[24] := "'}' missing"; +errors[25] := "OF missing"; +errors[26] := "THEN missing"; +errors[27] := "DO missing"; +errors[28] := "TO missing"; +errors[29] := ""; +errors[30] := "'(' missing"; +errors[31] := ""; +errors[32] := ""; +errors[33] := ""; +errors[34] := "':=' missing"; +errors[35] := "',' or OF expected"; +errors[36] := ""; +errors[37] := ""; +errors[38] := "identifier expected"; +errors[39] := "';' missing"; +errors[40] := ""; +errors[41] := "END missing"; +errors[42] := ""; +errors[43] := ""; +errors[44] := "UNTIL missing"; +errors[45] := ""; +errors[46] := "EXIT not within loop statement"; +errors[47] := "illegally marked identifier"; +errors[48] := ""; +errors[49] := ""; +errors[50] := "expression should be constant"; +errors[51] := "constant not an integer"; +errors[52] := "identifier does not denote a type"; +errors[53] := "identifier does not denote a record type"; +errors[54] := "result type of procedure is not a basic type"; +errors[55] := "procedure call of a function"; +errors[56] := "assignment to non-variable"; +errors[57] := "pointer not bound to record or array type"; +errors[58] := "recursive type definition"; +errors[59] := "illegal open array parameter"; +errors[60] := "wrong type of case label"; +errors[61] := "inadmissible type of case label"; +errors[62] := "case label defined more than once"; +errors[63] := "illegal value of constant"; +errors[64] := "more actual than formal parameters"; +errors[65] := "fewer actual than formal parameters"; +errors[66] := "element types of actual array and formal open array differ"; +errors[67] := "actual parameter corresponding to open array is not an array"; +errors[68] := "control variable must be integer"; +errors[69] := "parameter must be an integer constant"; +errors[70] := "pointer or VAR record required as formal receiver"; +errors[71] := "pointer expected as actual receiver"; +errors[72] := "procedure must be bound to a record of the same scope"; +errors[73] := "procedure must have level 0"; +errors[74] := "procedure unknown in base type"; +errors[75] := "invalid call of base procedure"; +errors[76] := "this variable (field) is read only"; +errors[77] := "object is not a record"; +errors[78] := "dereferenced object is not a variable"; +errors[79] := "indexed object is not a variable"; +errors[80] := "index expression is not an integer"; +errors[81] := "index out of specified bounds"; +errors[82] := "indexed variable is not an array"; +errors[83] := "undefined record field"; +errors[84] := "dereferenced variable is not a pointer"; +errors[85] := "guard or test type is not an extension of variable type"; +errors[86] := "guard or testtype is not a pointer"; +errors[87] := "guarded or tested variable is neither a pointer nor a VAR-parameter record"; +errors[88] := "open array not allowed as variable, record field or array element"; +errors[89] := ""; +errors[90] := ""; +errors[91] := ""; +errors[92] := "operand of IN not an integer, or not a set"; +errors[93] := "set element type is not an integer"; +errors[94] := "operand of & is not of type BOOLEAN"; +errors[95] := "operand of OR is not of type BOOLEAN"; +errors[96] := "operand not applicable to (unary) +"; +errors[97] := "operand not applicable to (unary) -"; +errors[98] := "operand of ~ is not of type BOOLEAN"; +errors[99] := "ASSERT fault"; +errors[100] := "incompatible operands of dyadic operator"; +errors[101] := "operand type inapplicable to *"; +errors[102] := "operand type inapplicable to /"; +errors[103] := "operand type inapplicable to DIV"; +errors[104] := "operand type inapplicable to MOD"; +errors[105] := "operand type inapplicable to +"; +errors[106] := "operand type inapplicable to -"; +errors[107] := "operand type inapplicable to = or #"; +errors[108] := "operand type inapplicable to relation"; +errors[109] := "overriding method must be exported"; +errors[110] := "operand is not a type"; +errors[111] := "operand inapplicable to (this) function"; +errors[112] := "operand is not a variable"; +errors[113] := "incompatible assignment"; +errors[114] := "string too long to be assigned"; +errors[115] := "parameter doesn't match"; +errors[116] := "number of parameters doesn't match"; +errors[117] := "result type doesn't match"; +errors[118] := "export mark doesn't match with forward declaration"; +errors[119] := "redefinition textually precedes procedure bound to base type"; +errors[120] := "type of expression following IF, WHILE, UNTIL or ASSERT is not BOOLEAN"; +errors[121] := "called object is not a procedure (or is an interrupt procedure)"; +errors[122] := "actual VAR-parameter is not a variable"; +errors[123] := "type of actual parameter is not identical with that of formal VAR-parameter"; +errors[124] := "type of result expression differs from that of procedure"; +errors[125] := "type of case expression is neither INTEGER nor CHAR"; +errors[126] := "this expression cannot be a type or a procedure"; +errors[127] := "illegal use of object"; +errors[128] := "unsatisfied forward reference"; +errors[129] := "unsatisfied forward procedure"; +errors[130] := "WITH clause does not specify a variable"; +errors[131] := "LEN not applied to array"; +errors[132] := "dimension in LEN too large or negative"; +errors[135] := "SYSTEM not imported"; +errors[150] := "key inconsistency of imported module"; +errors[151] := "incorrect symbol file"; +errors[152] := "symbol file of imported module not found"; +errors[153] := "object or symbol file not opened (disk full?)"; +errors[154] := "recursive import not allowed"; +errors[155] := "generation of new symbol file not allowed"; +errors[156] := "parameter file not found"; +errors[157] := "syntax error in parameter file"; +(* Limitations of implementation*) +errors[200] := "not yet implemented"; +errors[201] := "lower bound of set range greater than higher bound"; +errors[202] := "set element greater than MAX(SET) or less than 0"; +errors[203] := "number too large"; +errors[204] := "product too large"; +errors[205] := "division by zero"; +errors[206] := "sum too large"; +errors[207] := "difference too large"; +errors[208] := "overflow in arithmetic shift"; +errors[209] := "case range too large"; +errors[213] := "too many cases in case statement"; +errors[218] := "illegal value of parameter (0 <= p < 256)"; +errors[219] := "machine registers cannot be accessed"; +errors[220] := "illegal value of parameter"; +errors[221] := "too many pointers in a record"; +errors[222] := "too many global pointers"; +errors[223] := "too many record types"; +errors[224] := "too many pointer types"; +errors[225] := "address of pointer variable too large (move forward in text)"; +errors[226] := "too many exported procedures"; +errors[227] := "too many imported modules"; +errors[228] := "too many exported structures"; +errors[229] := "too many nested records for import"; +errors[230] := "too many constants (strings) in module"; +errors[231] := "too many link table entries (external procedures)"; +errors[232] := "too many commands in module"; +errors[233] := "record extension hierarchy too high"; +errors[234] := "export of recursive type not allowed"; +errors[240] := "identifier too long"; +errors[241] := "string too long"; +errors[242] := "address overflow"; +errors[244] := "cyclic type definition not allowed"; +errors[245] := "guarded pointer variable may be manipulated by non-local operations; use auxiliary pointer variable"; +(* Compiler Warnings *) + +errors[301] := "implicit type cast"; +errors[306] := "inappropriate symbol file ignored"; + +END errors. +(* +Run-time Error Messages + SYSTEM_halt + 0 silent HALT(0) + 1..255 HALT(n), cf. SYSTEM_halt + -1 assertion failed, cf. SYSTEM_assert + -2 invalid array index + -3 function procedure without RETURN statement + -4 invalid case in CASE statement + -5 type guard failed + -6 implicit type guard in record assignment failed + -7 invalid case in WITH statement + -8 value out of range + -9 (delayed) interrupt + -10 NIL access + -11 alignment error + -12 zero divide + -13 arithmetic overflow/underflow + -14 invalid function argument + -15 internal error +*) + diff --git a/src/voc/gnuc/armv6j/architecture.Mod b/src/voc/gnuc/armv6j/architecture.Mod new file mode 100644 index 00000000..d8409c34 --- /dev/null +++ b/src/voc/gnuc/armv6j/architecture.Mod @@ -0,0 +1,4 @@ +MODULE architecture; +CONST arch* = "armv6j"; + +END architecture. diff --git a/src/voc/gnuc/armv6j_hardfp/architecture.Mod b/src/voc/gnuc/armv6j_hardfp/architecture.Mod new file mode 100644 index 00000000..761f8c99 --- /dev/null +++ b/src/voc/gnuc/armv6j_hardfp/architecture.Mod @@ -0,0 +1,4 @@ +MODULE architecture; +CONST arch* = "armv6j_hardfp"; + +END architecture. diff --git a/src/voc/gnuc/armv7a_hardfp/architecture.Mod b/src/voc/gnuc/armv7a_hardfp/architecture.Mod new file mode 100644 index 00000000..fab9a0e2 --- /dev/null +++ b/src/voc/gnuc/armv7a_hardfp/architecture.Mod @@ -0,0 +1,4 @@ +MODULE architecture; +CONST arch* = "armv7a_hardfp"; + +END architecture. diff --git a/src/voc/gnuc/extTools.Mod b/src/voc/gnuc/extTools.Mod new file mode 100644 index 00000000..cf176b70 --- /dev/null +++ b/src/voc/gnuc/extTools.Mod @@ -0,0 +1,79 @@ +MODULE extTools; + IMPORT Args, Unix, Strings := oocOakStrings, Console, version; +(* +INCLUDEPATH = -Isrc/lib/system/gnuc/x86_64 +CCOPT = -fPIC $(INCLUDEPATH) -g +CLOBERONOPTS = -fPIC $(INCLUDEPATH) -L. -L/usr/lib -lOberon -static -g +CC = cc $(CCOPT) -c +*) + +VAR incPath0, incPath1, ccOpt, ccString, CFLAGS, tmp0, tmp1 : ARRAY 256 OF CHAR; + +PROCEDURE Assemble*(m : ARRAY OF CHAR); +VAR cmd : ARRAY 256 OF CHAR; +cc : ARRAY 23 OF CHAR; +ext : ARRAY 5 OF CHAR; +BEGIN +COPY (ccString, cc); +Strings.Append (" -c ", cc); +COPY(cc, cmd); +Strings.Append (" ", cmd); +Strings.Append (ccOpt, cmd); +ext := ".c"; +Strings.Append (ext, m); +Strings.Append(m, cmd); +Console.Ln; Console.String (cmd); Console.Ln; +Unix.system(cmd); +END Assemble; + + +PROCEDURE LinkMain*(VAR m : ARRAY OF CHAR; statically : BOOLEAN); +VAR lpath : ARRAY 256 OF CHAR; +cc : ARRAY 256 OF CHAR; +ccopt : ARRAY 256 OF CHAR; +cmd : ARRAY 256 OF CHAR; +ext : ARRAY 5 OF CHAR; +BEGIN +(* +gcc -g -o hello hello.c -I $RPATH/src/lib/system/gnuc/x86_64 -I. -I$RPATH -lOberon -L. -L$RPATH -static +*) +cmd := ""; +cc := ""; +ext := ".c"; +COPY(ccString, cc); +COPY (cc, cmd); +Strings.Append(" ", cmd); +Strings.Append(m, cmd); +Strings.Append(ext, cmd); +IF statically THEN Strings.Append(" -static ", cmd) END; +Strings.Append(" -o ", cmd); +Strings.Append(m, cmd); +Strings.Append(" ", cmd); +Strings.Append(ccOpt, cmd); +Console.Ln; Console.String(cmd); Console.Ln; +Unix.system(cmd); +END LinkMain; + +BEGIN + +incPath0 := "src/lib/system/gnuc/x86_64 "; +incPath1 := "lib/voc/obj "; +ccOpt := " -fPIC -g -I "; +COPY (version.prefix, tmp1); +Strings.Append("/", tmp1); +Strings.Append(incPath0, tmp1); +Strings.Append(" -I ", tmp1); +Strings.Append(version.prefix, tmp1); +Strings.Append("/", tmp1); +Strings.Append(incPath1, tmp1); +Strings.Append(tmp1, ccOpt); +Strings.Append ("-lVishapOberon -L. -L", ccOpt); +Strings.Append (version.prefix, ccOpt); +Strings.Append ("/lib ", ccOpt); +Args.GetEnv("CFLAGS", CFLAGS); +Strings.Append (CFLAGS, ccOpt); +Strings.Append (" ", ccOpt); +ccString := "cc "; +(*Strings.Append (ccOpt, ccString);*) + +END extTools. diff --git a/src/voc/gnuc/x86/architecture.Mod b/src/voc/gnuc/x86/architecture.Mod new file mode 100644 index 00000000..84835238 --- /dev/null +++ b/src/voc/gnuc/x86/architecture.Mod @@ -0,0 +1,4 @@ +MODULE architecture; +CONST arch* = "x86"; + +END architecture. diff --git a/src/voc/gnuc/x86_64/architecture.Mod b/src/voc/gnuc/x86_64/architecture.Mod new file mode 100644 index 00000000..1f95d2fd --- /dev/null +++ b/src/voc/gnuc/x86_64/architecture.Mod @@ -0,0 +1,4 @@ +MODULE architecture; +CONST arch* = "x86_64"; + +END architecture. diff --git a/src/voc/version.Mod b/src/voc/version.Mod new file mode 100644 index 00000000..b9d3c14c --- /dev/null +++ b/src/voc/version.Mod @@ -0,0 +1,38 @@ +MODULE version; + IMPORT Strings := oocOakStrings, architecture; +CONST +(* targets *) + gnux86* = 0; gnux8664* = 1; gnuarmv6j* = 2; gnuarmv6jhardfp* = 3; gnuarmv7ahardfp* = 4; + +VAR arch-, version-, date-, versionLong-, prefix0-, prefix- : ARRAY 23 OF CHAR; +defaultTarget* : INTEGER; +BEGIN +arch := architecture.arch; +date := " [2013/09/23]"; +version := "1.0"; +versionLong := ""; +COPY(version, versionLong); +Strings.Append (" ", versionLong); +Strings.Append(date, versionLong); + prefix := ""; + prefix0 := "/opt"; + COPY (prefix0, prefix); + Strings.Append ("/voc-", prefix); + Strings.Append(version, prefix); (* /opt/voc-1.0 *) + (* will be used later in Kernel.Mod to set OBERON default path *) + + IF arch = "x86_64" THEN + defaultTarget := gnux8664 + ELSIF arch = "x86" THEN + defaultTarget := gnux86 + ELSIF arch = "armv6j" THEN + defaultTarget := gnuarmv6j + ELSIF arch = "armv6j_hardfp" THEN + defaultTarget := gnuarmv6jhardfp + ELSIF arch = "armv7a_hardfp" THEN + defaultTarget := gnuarmv7ahardfp + ELSE + defaultTarget := gnux8664 + END + +END version. diff --git a/src/voc/voc.Mod b/src/voc/voc.Mod new file mode 100644 index 00000000..dd23f9cd --- /dev/null +++ b/src/voc/voc.Mod @@ -0,0 +1,111 @@ +MODULE voc; (* J. Templ 3.2.95 *) + + IMPORT + SYSTEM, Unix, Kernel, + OPP, OPB, OPT, + OPV, OPC, OPM, + extTools; + +VAR mname : ARRAY 256 OF CHAR; (* noch *) + + + PROCEDURE -signal(sig: LONGINT; func: Unix.SignalHandler) + "signal(sig, func)"; + + PROCEDURE -fin() + "SYSTEM_FINALL()"; + + PROCEDURE -halt(): LONGINT + "SYSTEM_halt"; + +(* + PROCEDURE -gclock() + "SYSTEM_gclock = 1"; +*) + + PROCEDURE Trap(sig, code: LONGINT; scp: Unix.SigCtxPtr); + BEGIN fin(); + IF sig = 3 THEN Unix.Exit(0) + ELSE + IF (sig = 4) & (halt() = -15) THEN OPM.LogWStr(" --- voc: internal error"); OPM.LogWLn END ; + Unix.Exit(2) + END + END Trap; + + PROCEDURE Module*(VAR done: BOOLEAN); + VAR ext, new: BOOLEAN; p: OPT.Node; + BEGIN + OPP.Module(p, OPM.opt); + IF OPM.noerr THEN + OPV.Init; + OPV.AdrAndSize(OPT.topScope); + OPT.Export(ext, new); + IF OPM.noerr THEN + OPM.OpenFiles(OPT.SelfName); + OPC.Init; + OPV.Module(p); + IF OPM.noerr THEN + (*IF (OPM.mainprog IN OPM.opt) & (OPM.modName # "SYSTEM") THEN*) + IF (OPM.mainProg OR OPM.mainLinkStat) & (OPM.modName # "SYSTEM") THEN + OPM.DeleteNewSym; OPM.LogWStr(" main program") + ELSE + IF new THEN OPM.LogWStr(" new symbol file"); OPM.RegisterNewSym + ELSIF ext THEN OPM.LogWStr(" extended symbol file"); OPM.RegisterNewSym + END + END; + + + ELSE OPM.DeleteNewSym + END + END + END ; + OPM.CloseFiles; OPT.Close; + OPM.LogWLn; done := OPM.noerr; + +(* noch *) + IF done THEN + IF ~OPM.dontAsm THEN + IF ~(OPM.mainProg OR OPM.mainLinkStat) THEN + extTools.Assemble(OPM.modName); + ELSE + IF ~OPM.dontLink THEN + extTools.LinkMain (OPM.modName, OPM.mainLinkStat); + END; + END; + END; + END + + + + END Module; + + PROCEDURE Translate*; + VAR done: BOOLEAN; + BEGIN + OPM.OpenPar; (* gclock(); slightly faste rtranslation but may lead to opening "too many files" *) + OPT.bytetyp.size := OPM.ByteSize; + OPT.sysptrtyp.size := OPM.PointerSize; + OPT.chartyp.size := OPM.CharSize; + OPT.settyp.size := OPM.SetSize; + OPT.realtyp.size := OPM.RealSize; + OPT.inttyp.size := OPM.IntSize; + OPT.linttyp.size := OPM.LIntSize; + OPT.lrltyp.size := OPM.LRealSize; + OPT.sinttyp.size := OPM.SIntSize; + OPT.booltyp.size := OPM.BoolSize; + LOOP + OPM.Init(done, mname); + IF ~done THEN EXIT END ; + OPM.InitOptions; + Kernel.GC(FALSE); + Module(done); + IF ~done THEN Unix.Exit(1) END + END + END Translate; + +BEGIN + signal(2, Trap); (* interrupt *) + signal(3, Trap); (* quit *) + signal(4, Trap); (* illegal instruction, HALT *) + OPB.typSize := OPV.TypSize; OPT.typSize := OPV.TypSize; Translate +END voc. diff --git a/voc b/voc new file mode 100755 index 0000000000000000000000000000000000000000..b2eab5275c083e5b580406d8c9c0cef4fce29544 GIT binary patch literal 1324788 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 z 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

o@+6YPv-=zJ#3LtHa(`kB`W z;c{LFe&%gbcsy_a@2s;__#@VJ$B~Bv?n=XTR}B~b%fA^(cF4nWdg|ZKDew3q{mW*L zZEnN_+CL@CwkfkC)5pX_3E;4!*OYb>4bS`Q(!u)H{(#-@vjX1?uK^#;lJ)q3-M=l0 zh0sQ>Y16Egx4M4)@hza&Q7E8!t3`J)uW5mOAg z9|_jP{V$pWDRR2`ZOyDWNz4Ag+VC4<*mIPmV{7PtTAB@g zV0#V)(HshzI;buDKxOFn2{l#n^TYxmCSs3{h(|-80QzyX*T3xhM`L;Pcr^w-#%Ku* z%TF8iXQ+7vTfWDlrlcFC=8Y=te?5W3j!n4f@pgo?<4eBKe{<>%QVq93ZJ9@Je`8ZyRZ~uND{ihD@Ery?A4lLQ=~!R#HhVf4AE@V2z4FGl+-_T~eSTR7%F0J&^8zQvUi2RNg{?srPPQ9L`Sl*^XKVOYdG4?^JgYpW zt#O#haagta+rs1U+Ey1~v3@tNBiB*K;jmszsHN{m|mxuwn*itshDxL zTlz`Nsl>$SNAM4GBVs^shJo8d;iiEigtBupqEta=l=ZwV_$kvPy&&G6{;FiGP6YbC zCs{c|6_Z$7_;muL(f$sUMxzWnbkHh=8;NGz7Ji5Tp;wB~YnC#>u^z&=@J8rN_e2!u znk)Y%Yl&j-x(hV)BI zO0bu`Aj(nS=odNHRIn+m@T6*AGymmNH%D2MP^zP&d-t5_J=Du~qihk%sgz*SVg{4F ztk+7EaFN~ZJ>X8PYOoeyeM2v}NN>W|W z*7(2l1IbAilP!064|Q?>(tGF(TjOq?S^aaLk>3l7{Qw7e+QJ_bDhKa9x-^ z=3mv*m-=aydOED1Zj+}W(RdB=l=X5BrWiT4)vX$*CK`HgZ0P0D(BH>~j*Eug7aKY- z8v47~(9@!!cgBVqgxb~&54SNBLi(=(oh)g3vpK^wgZ}0zFYPp>iJL5;_FHhvoYrQJ zX1`fKL4v21AS|Mv~^RWJC5IYcYNie-jCwkagR8-!Br+v`4j&t<+Ik3cjH%@ zJSTZLU>nkT#Nen&UdU~@!Rt~Yp@RbmRYw$T4P6D3WvKKw_Hyhz76xk)9cAMa9qC&g z!E3s<@2jG-wQQ#2!uH_8uDRYNT`O!2-_V2cCUdQVTqtlf)^G3H&ieiTP!qEMv(P%1A4_4UZ}$o4Be_kD z&SJZD2cfch+6A=s>sua%;UvLuJgXG5!2%I=Sg3rj5FJGjR4)QKtnO}Yas>0cBoBGV z`)oa7hP#i<-YHTotpeJ`u(Wsm)|$URk-fOp&kEI0YDL_|47x~1btg%QZn>1Vs>*|T zlqxq|qC$`sdcdXIr98QSWmD*-FRZ@ch+a6X?n`0nTO-#}LC;)n)@@uMuY(IuV#st4w=kJJ^29PVv>Rk*seIJ8C!R<6w8ioE3I||cmE*PN$z3rHp%>{NVu&&NZFsHdd#yoNB zW?Lae%>}b{$O0>5MsuTNrUDVE{6R^uxl!`65bc>FYWagw&gMoTq7ENng|AZKLQfr@ zV}(Di!nb#X+pX{>75-L7c###pLxqPr!Y{YNcdPKWj_?^)_&yablvMd9Ny+5?Fn^;2 zKzpfZ3W3`i6<=ci;(jL5wX$9d*XuqZ#SXt8+d1@bO_*^?Nd<_9@|G2|VLF5a~V-0#7BpE+A9Zg|f2 zK68%paXg_?o@l$VfJBzNh?7>V(%ULyo&QX zvhwkLf0E~Z*)CLt@ccqd{v~7g05y11Wc7mt;TAr0am$Nxvx+LEdl#HYVS0AiRws=i zVRorTL>B>Fz0WE%&m@t(sh3-5xuA~y)>_j4h;gm48ilXsP*w(1x zW2nHiQ!pZYP)3Y@hvNc^?b{O?rLo}{RtaNf@a12~2vD?@QezyHvQAD#vxS9bikgb; zQjWVDHTepk;c>{>d%Gg`-{Jc0#Bg`b-PT~$*1_h)2tigHIdFXrIrzByqTytjCfee; ze)6KJvNu3NE&s6CcHk))U;ko~jXTVha~#u638f%eGSe5b=`WPA2dXH%Z!5gs8O#{n zC*E*ukOJ_R<6B}R&A(J8p0fN#!xI^WWGZzI?loa-emBw?~PZ*azaDt zhMuk7gT!o89NcJGqkD;PZna?fKwhw~d1{J^-3z^$drL}tS3E0PV>f4)Ah)0R z4_a^Re!6S82e|Df}e9`&&t~)iki~B(C}%p9>`n{yllxkleRo?Wma%HxY$(bh35*5=;#&5`XnMRV-ya?R@0@|!6lY+5 z@0OXqwj_^dJ)b-`3jJJ_wi{uKPNwfAh`hn}^<}>AliZit0}ZJnEC~ba+kv-Uj1e~w zZbWwYH~ZR7;7Yc(WKTbCzmQv>4olNo-fvj9`!|zbP{nCk`7{IE@V|vFNXixM@NNv%FDuUlyi0!?Je zM(J34;C96d(w`r)*OA3dBCMOXZu~T!%H5`RLt{#{IrJnqk?3Nr6cUIvyc`ISrVcUY9L(>M#?F%~m+|KC-kttA!t%b^vUfVvjzP!B*hR_@u) zPwNL;VI%IM`#y%S!R$fb_cKCUuXqv!cUNzAHy#c5$=>W_JlK-@NhQ?El`Y$nzB)w6 zwxqBHKDNMn7I@PFuUg;*3v9K(1`DjSz~3$K7YqE!0)Mc;Z!K`A1#T7K&0Z$J)+om@ z?EXKeN~=bD^$FX2dLn92;at`+f~8yzDEvo8z#a?F3ED5?R{k_qDp*`P{r{^7w|t8< zi<(cBOu3R?_sA1pS%T+69+co2u9eP+kq&B>Wu{#eZAot*RHF@x`@{pSH(C>QHyDGv zS7?LtV8r{(#cxTTZtT;z6-LZLEO?{z9Er|Cu8`)=wx^AkSjJV z>=$|+u+rf~rA|-kLHai~0c9i9--QP&(7z`7a+O9}tDqPo$knMVBQr4Okb%kN2yFF} zrrdSYa)2Zr*HJ|N;^LI$U(_+`9HQ<0)*ie=(Opg9h$Q|uS!>(Zfhd1;!kbfb1Q}`H z3Bwa5jiUXVq4SyKSZOsr2p(r{q{Uc;NhxI#CdIg3~R#&L>`=mbdC@hr6C-kEn zM+1}n{f5*9RxG3{;Vn{Mx!5N5sq-FraS>#h%_<3Y;|%^~w=np?bi^AE=VrbNB?!+B z-n)a&qbLPq!G;NWr)4aovI2JgxWs_^W(QYNHplI(sf)WnSW}ig_>UQq8m#G4x^K+m z8!YLB6aR&)oZoT=Dt2=vUx>5C`ikaAcCbhQM@` zZa*y%>*$^!R73L@k3!54EdVhc{#Myh2;Lh@QmOpoqCE;e8$;6fp=TkYa7v-S3M-A^ zKjfVhoujf+boUuYEr$OK?gqAyCEdfqHXo}p6iQd$|B!M05crw-L@mGg6@FH|DOf2&pOzGal<+)$g6MUK+8 z7EyoFXx~%TpEg=dQ{B#1oHSKZs9}N#?5Yi=S!T&0)1x(uTMdSPvtrnFbCZ8V3J9j}w^8yCFB|Jn&G9}+lCkS066h9-^_hXXVK@n#NY4xjO*<<(Aa*~pU=0zFa}{@zixRghYK!_*M_d8N(;#H?KnS&j}b zg6DEKvR{^no9wUd@xR8l#)9($15?v?Vo}v2*B=r#afk~Jgh!qN^8kU#r$^jd3qPXB z+}_;y&eD7~0v*As*HiqP(l<#B)bxaS=^zo*Nd?$G^ZksDgr293WCO*wHL3k*91Z(`r%i`t|;n=jqC=g?DR)8?o)X&0w6UZ7;E<48O_Sul?@R-=&Z_Qb(u9SUyiEKIOhcVcw4t#(1|!>G08 zDoXF-u8Z8(N4l^lX7?t}JAx@-$HJ33{0l;2{<_^Bw9Cr{-w`{`lhoo79b52{IBynV zq#VZ;5eqq>wMqLId}mud70IjEJ&tv9x0X}Ahn$`}Es+4Rdi5#t>U{5^A`d&KvPV0@ z_xUoV&gJV67YTbu*$ zXN^yupKwOg=C#6Blys*$S|8u%b-sw{HkY2_i)6a{_##E_o??$3`t3N?*-qEp$P} zyJcA=S6*XJn#*;P4YG>Q^%k0md=bnZoQkmGOikltIAbvlmIinO-irN?w#kGq&p##D zW2+=@U5ED?$D8(GX`P>%W^det3d=|CagI?1hKocCi~yI2U7e5^;FfJ`t00h<2*(TA zgOd_jsHSgpWWDUJQeWKYks5k}O!@9twouw#Vp|=Obvir*BTUNj1nq-Lnrp!dO#dbh zO0=C&x%^Pu3CPE(w#HQ20mHoSayjN%+5d#L{I2^dbNvNKQ!j^2-U;jt%(bolB5adJ z6G8zI)9^s)5z)n?Xh@<|Z29m=qO}S(6+eW94Yw{4V+hu9@&(y#q>eXp8$;q7>{d_Q8K3 z1x>-+*8Eg6(aksa=0ZvKm-uvuyRWd(DrvK=*!i_nFF7>NDo3IJtH!-099lj~^M(O`p=4~F4T@dyn@4L-2F?_kQ{9jGJY|7C11TRSaruGn>V~^sYT&iD zTpVpvlaGL?9-tc6=JX$wO@XXeZP%+KnR+~olI^Ltj@g=DTCI7Xv`4fx=_W|Gp@(QI z%24S4lGeN-wlz(s5bP@_W1Sr;HhE2ldxQte{vj}3H+F2}{lYe%2n+$JT zL$(?&G<`?4e4-hYWl`r==lZuj?Q`reH0wK8=GaX4FNF1V5B)J)*k0vI&#@Wb63{v| z*=!|~K?e*}&4*By)FC|uE;B_p(%ot-87se$#T<2F9dNd~&rO8Li@I7C{m>_q!DnlD zQLr$Ur74($J_z*!K{%ySv19XYy-|aW#pwceW#x`Z+Tj$rbfTXah-bp7FhW?G~&_W;8gUKUJ}0pPS1!27DC z6nptBp~_XpgWT;d?EVBom@R_mENJP+?xx(>q&6b2-kRdXyvjN1x>VC$;s{>7O*R## zf@IIy>`8CQvR`mDgJ$FRbi+K9gI8~*^7&h(@+`WO23Uyhld;w~4BtJ4n&pc4x1iZ6 zi~ZQ-J%12&HjDILNMSF-uK3oNtj|YL4|gBC?>cDCEl%4~JReZF{UGqkq9_7k$flXX zpqR!cQ!_q`Bcfsg^Hdh};;6i`US(Co?f2^98c-Dh6lE>BQW{qpQ8tMkftqCQsNn_) zp@fh1pPH6vDTw9_T!-2Ko!&VuTv3+)K6O*{%72?staX;rgY5qI?7?eL)w_a8>;+4RU@%@$d_+9&$@<-t z7ORwV)>fyP9i|^h22!RJM^>*?+l}WFli3cGhvGa_B*)*&f`)DdmIqA_#~#D+QV8Ex zimyW0iIM~)L$MlVy(Lo=mNzoKXU9yC53&0y*WHLLPVM+{24-`}g6{el!3ZA?*)@^Y z;M-B$zr(2|6C$#Y12Wf)T$ftZa;iNcKeb32Jf;43POc;^%=*&hniQOJ(~#fkQ^yhM9?bLbX20~~L+yiF5!Xvzd}ms)i(qXpEYpeBt9^b@>;{Ry{H%&%Bf z7L?eo@^pC}{=H;bALQ#*XTZh~EudEA!)+(n8bwl-FCjpy%cQy8@36v9r9Q)+;FeMg z2fF?v5gL(F`H;oDb!>)pv%eZ*Ts70fTy$%9>g9N7d*%o6OC;9@3e)m3m*4ab4Nw-D zs>$1!5&DptbQg|Oa{Uqv?ZfW56xZw@L4VnGdoH9i?V@OQcT+)D0QcnfHf#-XL=Ja@ z4;7MCZ!PCZ%cz!cz^Rh`&7mq8OoXNt1}bTzoeY|)dKOnp)`~-DZ z_th${QOSN?co9iLOsMC-%nX0PQz+wN=9B1`sMRK~tXJ)Pn<}`JUN&C!vNW_P$e)G5 z3O>*RQ`L9iga*-pIz$u10YmB%(>=f9nTYKXeiU_#7PaUPB0;>QOwDqT> zvG80=pXG;&K6RJd8lI=S`wqpk2yKH)kBCNcj}D~x4#j!ivitYg6N=dFNpNOun*T2H zk~3jJT47e3YX=7y9sXUp%G5VDu4hZ3@YXo1T!ZJ0<$@gSVc|iFO-xnHXdDNN3K+*p zT|O2LHV(<+)bBqM@3m<0CSvQg$Sm{^E%eW%vofpyU4~`CoD}a8x$04l#770Z%VW3` zmsf@_QnJcru;VFd_ED$a@~eJ~kr`4L|EbG)u={)7L`KeF&qoFLpR-mp&0v7joU23v zCwE{wIEP;tx83Q_MN_^pQwiq2LtQBJ~lm31hx@M_&pH1mkm(XJrW~6m(3`4#+M|FLM)KF z=!2k9=@SNsqMKn1|8YwSGMb|E1($J{i6XhcFb^o@Z64wT^QYLo*nTi>MCi0}sK$ceHutGFpTbJYxCx1=*}^#j z35EW*Mt9bOcUza1WaFwYQvE8|S^|2+$t_6MGkC zy@s8fiez=2LjRT0XPS5SGs17H3{HJo{7>UwOBaZQMQ_Y10~M28WF=HC6CMbKbC~Bf zkw>697n0>LE!rByR9No)x>u?b7-cWxjQk#Z)|FGbC^&rycSoeFnNRMGxO zqcf<^mM-EfOWfgz3pulz>(fMQ!L2mD2HtZ!^c4vOf%%&x=UOJ$KdpnZ7hZhc#w8w4bs(a0{ z6I_W-|6J4VpQ~GFr|`gZE~A+$n>W~=)a3_$!OgDj+4klxLNB@Q)9#;4FIr018E;Z% zqY{X4>dU@$1pS@c6@uBPeZZdKud<(nK1oCIvu{E@&pBVb!R)s8`x#e->#f(PsMq6p zeNi%A_EGr$ZumO#q72^$PGAEh{;JIzGRY`($Bzdn0aDxtSB2lOFupxT!M2Sz<13d> zwhH&n#nHkoB>T{JqgCPV#IFl?lX!#KSE<6iVZENGUaP{*m2j(Yjk<7Fp&~zY6zV^hF$j{?(L%d6j#Eg4ticM>(ogM(6aDjG!~09Gu(R(<7`tz=C(B zJ0D>j7I+nd;2jTN=R9W*(FAoUGWq-XTTWy2^|ogXaNA>0-KVtXnQ@*^RC=F-0f8~Z zuyUR+Ie#+>3Xo0)@|)V%R2x{zr_t?!#l1t%BU`p?Bd=>EuhpUM-0Y%sC9;51&69-m zm%KTYNZsumI^rRGCy`>N(HylX+s_A9s)tMcTdn%PEA^)o&OpYgBre|*J~{jhB;&Kv zY3fyG*^jnfzPPqc_*~|1u*|1 zRFE`#4$Uqf1#Zv8{rj-!rDCOu-%z~pFai-&zYwnKPfcxCQHdvos>)IhK~Q^4@em-h z1pOabRANIk za(W>PGaczP_2J>4#QBuVxFn7#HSl~u|KzG?={%+*Yn#m{rh&2!O_z~~#q}96HTffD zT{eLZ*(f7gRMrSS2=TJ0yPdff<>}8wy+xvCNK{#fa&B!L=it~cvo*ZJGsofFk8>1` z^CJzD!3`{ol?uZV@U-n`(8iI{@j?7i*dQ_)@MnIHeh2f z#q&F>_;y|V*O_TsxM+1BcWPR@7($W}_5^1AtgWsZQDm6B4!;R~R2yE-C=9nnpC+AcwZGU{7(>s&{fv66ge5$MkrQFmUOFd0w_``9pgMw5_uqpd~Mfnr^u>t z)Wu$McCZ{`*&4=x1wmHY8f62T=m|Rd`BIQb=m(}gNEE)pdi$wA!cx!cG@5J=%5$!MPT<+eHCT4F zioJuXI}^%N#a;<7-y)?oz`pNYvbJt-lgC?mR6FHgg~E8(vNANn1w^P^DfTdmQFq%Q z-**f@Iqb>E=9tkgQ=G%U{|K~D5VSzXt$z^v+H<@Dn8o{rZzVBWWqpn$D!QcCxx^Jl zza)B%j~h`P_79^)id0&EQAuH6t~dd@6Wbc^L4>b|f>|W!CwU zVqyDQgM5?Khq(f$_Ev?Wu+dV!@_Sv%z^T{CJ2BRV0de>wN{Ps8PyszHT;_w260m(+ z?0lVB-4`o+i4Y-a_dw=Mv|a9APd{|92CG23j}K6?)gT(MuSEbM24mgc-1HVTD~FEd z_GTdlmacfy#XFRIdgHPCudidV$J(tM zPrmFIRFv-fB0b{;?fjPHNYA!S_|DnPB>E*jYy-UH6x#FxI=z#+ZFT9 zDi~Pmj}HcChXj)i=A@R>Ap_sP6;*=F|!DN2QBp6{T-3f}!7G}RQ^5%ccPRQ#OF zq<3@lEzFORGm?liFa$d-Hpi&H|w#6uSur~=M8*NW)j$b0r8x%F## zY{?^`?8{$*WDR}j_036k{PIU|Dc&Q=T_~up?6+za=3*<|_s+RPA-_ZQ z2iW~BQWjYzC523t)?CKosL-z^9)-JA#ovqlnbjrRFRMY2;_G4?WV}(*8QH3C_n(Pu zYDIaL9<9HCD@kqJXxX0Pih8A;-l<= z$1S36i`ay=pBX4C?18mn(ia*+*+ITXkOSU_g!ulXo2{sxt&(uGxY9b9Z>ok3%fu2` z4Btez!p9tC+Ey(;7q*($+dE<~iy2lfEzy$E@OOO+@zoAjC<7)PTF7;V|g#-J`GFoQ3lkOuy{|AnQB`J|N z90Arp+%U?{!tBDVir({Aa~EOn(2j4UR~4Wmlza7i<&gYJK?U+1iv?!rF@>-sCG;R3 zHkU05s6KNCA?x-9oW@gf>Dl@^d>g#{gid<5t@Hg)f$W37wa9X!jPsz3h46Huvq;K* z@P&RxAn9>_8=EkVf_ChIUvxLm;j(qyPoJUi=nL!Hc0#H^c92)0Kb)gF;u8GwrwAv? z1R7P3)<@8kQT?mJUwnO_{XmZ$L&7pR$k|(0)o^<>A9m$Sf}^+Q+~b4|{(_l!t2sq@ zW#ZN*f~3E7^NS7D4)oT^>(A~-?LN!+QFY{`mcdT{$8;N&UpG6u?@6KZu|Fb`lqnYB zCSPF@RX`*Zdbv-Zg^`}!K3dOV3LDYoS2BeePkHCDLgYsI1nLx;Kwq(xo0Q{B&>km1 zp_va+IBq?Rg!;weNK&HmQaCdztfUYMjL;8=Qte3zT2mCwoMoXgEf}FU1Pza>dFO&v zTWEB3BP3s#I6B(yatn>^Nh5UQ&!Xl0kA=qIH$pRh7OhF6F*zHdte-{m)?2A{6||Fo z7A?nRp~+E$kbF(<=v8RaXx#-(&ISGqn#W3wujLt`dqGpZV}o1?6xw_NT|~w-4@Ojg zL}}3PIZJ79MIoDQ!udl*Umb`%E2L+;ybGpBuz%n8UEKSfWgjzI<0l2K`;>;BU`kIs zA+kd~ht49B@5i2=SH#%kL>@##l2qv5-|{DT^HbZSvtH8EcqQg!d-jg|Y7Ng6UjMIt z9k}Rk@-{Fc^dr}QFfl)04N=>L?T&?#@VDYYIq$I4*7ghO@7Aq*h-O0heK^!U0mSKYb$D$eE^#BFfw zA#<8o%(@r#=G2_pB+lCI`64t_a%`5dU@7_0%{5(RnN?jC!zSSg;XC0kqq3g@P=Q_) z7m+IT&0gYXo%2Tt#q>VA9*^O6=RVV$OD9o5%T{PeSm=1Hlt;kt+V}e@xu;vpIU=Z_ z{~)oFXTxg=~ytc4ZYX%l*2cgoTkdU+QDH0itQYgarll@qyA3H zc+KrH>p_h7>7qRE? zCn>P8toHyy@q)XYl$g40Bfhhy6P0+UpEx7lFf%eT%z3qCBh5KA?uz=F(kio}zP`5J zn0m$3X$6IbX;zocsWI#7YiHG$R`Xa>G2e78te#n0Wme9qsvx9dfxDunoNK>hgGthu zR$p4XMs^$TQ;S1?o@aEoEj1-tuLEB$6Zn8_S9DxavM2! zkQ=5km{MgJ3q}kt89qz^c-8ZUU#mgM?9%%3$~yIQacT5v5=5z}G76{UPj?nfHKvR! zD4sIe7&&O9F}P~ZOi6Jt^&Y8TlsFyZ3@B=hGz}qSO|6-28t&R!$XK&bQOsr5)>YIP zipmh(oL@i3O`$Dn+NTs281qZ(Yb0bm^mPrIQdMpm^%bS%W@UYCwL(*5D6g%lFv?16 zge29q^D3+aR2-wYqO{6o(6~c~47+&Phzo}g8$m;58s_BE$wppvc~#9cS`CbtztkN4 z;Oz)Bb36RX7xT_A?)i=UtsBc5ar$rfSTm!H+LOD>UFx1A{)}4FAj4_3wG?YG&kobb zsJe8HYj$bfl$jOv+z_AP9E4LuHI2OS&fE!8qbWwAX==)hgoJLnR^Bk@%&MuauP8Ul zChw2jb{y`y7@Q$7{)sXE<4Grq^F(3id=EQ2KS%WY7l6IVV@M4Cr`o?1cslNG{ami$ zM4;52K4xZ^7PU-^Tp2^nvfAo8I!L`Db!9DZW~qx&2wA4kQ)=Ai%!TIE+DbP>t1zck zRM%CRQwk=KUKuav)Of%JV{&bM>B4$5Z}yxj`dn%KoYESzw1#Bdvl%yv^rqxR|1GC4 z_oXm>HThlUVqpQ%rzL~vV^+hsz`Uw&MqhKW^}NKqW{}bT)|7Or`Of%+{~zjf-@t$vHt?^N}h*ViN)!>l&dUxqoWqNbuA21EtQ86Xfz zakFa0ISjM#xbPG?AkJK~cILJ46w~U~rBzi66?qKP^^3mRLk(ub2550(KsGg zg-NL^%o%kY1o&o+SzB3Yme$idC{y{I zvI>`};(=Eh#e)Z(@3w-?+^JIwil@2EQny*}p@UUd3^b(-?%8vM<*D%syK`5#}k-AznK~WaiWogx%MTElCRk_{Kc(LViFRZIDXL;c1 zE;CIELgw`{6v`MTF4N^Hn{Af5Od2Ais$yP6m2Lo+IiHSSVG>lo&@5Y6Mw^r|}hMOa|=W=*S(&Sgl&v(MhEjl)9=1 z=c(>$n0ZG@PWoX*y%94Jnx9}54LX=gCm;b6G0PAX9@>mB`#&yi579D9Q zI_^Lj?!sEk`E%T}qfMv!qsxTX(&cI@%8!nvI+95`?RaKdUHzPSG6o@+Th%!I7;#m5 zN;zt28G2^DId6_@4rDt<9LZ0r0$+2@p?B4|q3WD!K1o7P8%R;2^|8Vj2|@=$oH=3g zbO_=ut)ErlHq?V*SS`ZDWd#p}dUGojCNcw34p~%7Ijd?*%hl+Wp5~gfh+d_pXjr85 z4dL4g=Gk+Ljd4?^I16$obLsk&;%Sb_(+pg}go0wjIc4$$d7fG@%_uI&b*cd6DVkPn z6cta&BRFqLalTP7Ip0AFQdN&jGS(Sbop2ChNK|Ue7?N(JNg4o2-|`xR%8Ws?`Jago zVSqnlN>QPaS5@n(umlI?MdFxBTKN@K74C}374zl6!LXa62C>U<*3P;NX>1B&OcB*A zLM*9uS2$|iBCs*ZJMkid%#yaK*YPhy%BdjIQU1Kqu-xL}+$)T61(3rScZHFcD>C4e z$y28p`BRL1$E895qd+7>ejMYCg3BG#jPX;74g5rLOf?*ZMNk(CPAL+JO-pUYWQWrL zZOV8>&Vu~u#RW#u6ls9sC~b=iiVAY20j5nao@`9B7w|L1n07@`fiZpZG~!=M8(wC2 zI17x+9MkN^E57}a-MA1RDHXRLzl3#b*dNKkO~+k}TZX#>_b~2#+_%T+;u`lyhT|sT zytq4Y(Y&6=AAiIC$V}WOT;Ch_M|R={P!4h3R&@BE!v77f*uOt=6K)Sqa3 z1IR46=W)?A1dhTZZ2*Q?(DzqkJRCI;%cAR z9~txH{)k@F z&spISU=wai(KKtUTEA1vSV%BXrqP+<6uJ4uMqZxboN70Ur%W>@z)p&$D_D%whgZNj zM$Dz~n8^i~F*q(|dbFtBH$r5m-v{z7CWB8Bs zy&v{R8gU-nowx^Z|G;g&lw zZ95&?Jp&91EKIb6UIVD`D5GCgFqL^ln#CMo^g|gir_vZqB<3fR_De&wLZXT;4YU9u z@))xZ@*yh@C0QaCs<6C46Dn%#O4KcM%^GOVsWcbXdXPmCkD{_ky;&|o8zZ28pjld8 zE+TZb>8>To&e6&LfgY`qCvlr`J8?JST5)@D@8jZowni2J@4}sk|4iI@xS_Z)xPEgg z(Qi~rPnsQ_VM|IFPI-m-X?>;nq}9~aL#xSp4MG$kb{DzpU1{nmZ9q}F@(oB&KjM9n z4p1o2l$I|kDVRLHusH2J2tH(>35FG7b>WzR;xt1RG--&&kY`pILXtG;fB`(rOSj%x z;Z{HtZ&WPaC@DRCE-e?1#;#ffK(I6TG`eOe<`xMjH8a1Y?t;zZ~-jm!l~F>_wFxzsSPlZYAe za{)gkCBnzjU=Y&LjnmF+jlA2hHS#sCOKNMxALH)BzZ&;4?%MvXkpys&+l^8dE5=Mz zHFMF+xKPf}7KR9=ZuwP9Zi9YQ>Zx)w)QpNMa4P5~nqdHhK8!0Vw0p2&l3X8&D^ISvtD;j4q&s*_-fIFyN7GVjv({VYtq1s&l zjCB)umiPjrPM(kEqVEM}jFB0H9$`&n(*Kwth21M*8nz0%rxB#fTa%jN05Zp=$$To| z(Fr0t+gwiUl9J0+FU}ZKUg|ET+tKv~nAQ*|DVZ=mw>V#oi!x7ry>xafC|4q?myDJH z{Fmg_bHODFUHf^g*Pe4^-pq0c_ zySy&UojOS%!ifMR7=;Z~*gy$Js8PW{6%3SM)&(jppgh8N)FV(Hr%o%*E2LZ&7aouf z#m~e25;s`<@^GDagdw1|HLv3dc4Lf~*cy3uy5)-TKY+WBZ-KW?YmK~vzaIawT+d0J z-@n3h2)ESP8hH%28+T;<^1{wxPm|B6qSnX?+#AQ~R#Ps)eGz!clw-%6#rq|=cX97c zZH@enD=S{ciC=Zl#z-LYIcVO}ZpacO_%>sHEW(^bJya;n@1tq!(k$j?!g;BMVsvI&A7Qa(+Ne=dL;4e?u0{P8y-3*c4-=-)Tf2Eo?Ix?5T!H?M4s{Q6dKf#SakHxJk2zShX8 zzk-k6!Cb+C!i-b)xBaCxatOENudR{uAG6$V zfU$1zn$}3llk~M1Hy!^n+{3unbhzOCVzuRdBy7h&S|fva9=NtOvI+OU>!1nl72HKn zwMPDo+k`v$8Rp|>TO%#F;Ckw?u{APvgXPu$#bq=hU*Y0;=f~A;YK`2W-J3vhi#A(M z{JZgAw8aXq244HL<*p;YTX9d~Ucv3brSfh9E*^IuWfAvB{A+OU;tt@XjF;mU<1%og zUZuTXu%P&l$MxOX8W9)P?%{3pr|qqgZ*bB0l`pnN#GU$5XZI4%&X<`Na96(48Zmar z7#kNIR^F(`g8Rm5xZ$-IUwknV`D&Slk$ClD_ht>@Yem*Jp^FXCX}QjkCaPaHBU$Fu znzdEsV!$AO`la3rEJtZqUoDD%jji`TyBUL7G7YZuR8?8N8u7`Wj_9gzoBbFetr}1{m&n`78Y8337)-3eZ1+kCJC^LH=9Q=lGMDEU z6c?9Rg?GCb8rjyLIj*#9E^=~N#YmP0`mbC2+rkP~p9|Uesq1(RE!coy=N7HaVBWZ7 zSumR2l{&MgKD%%K^1frbjaC}nG2M*OgXIODYT33aqY`Opb?F&nK1q5@fd=>nOm%5)yt#%1M}$>gfY8(UHOxYDa1?HzrOoj9p+pR_a(k8F_| z)|_+D$dmSkM~fdN;}FV73hc(RIVM_p$DOAr> zL$)QVCtE1e#Z(U~!3v|=sIDi0P6)b%k*BbnC@ZnDjy@gnl1@zbi@vPu{0JYCm(?^y zHT z;DRUlBlcBeFt5bB^GOiPQZBGjf|Isu|J8-Pc2D8RaOR?9;NsDx`P z6)171%bz5kHdNNpl634l)^pK}(p5eK1`IG~N!LSnDCMR>C5W!0T;_uQE(wTEtHKg1 z%S(jOs8Yk`+8<;**QrGL0WaoNr%0XfBqcRoI-zumEcoqc(e&E`I-zz-#`{_ibKo)F_mN4{%7p_iN6d3lZ`Fy- zG>m*;7aB2&*D-0f4^Ty3%bMYs=}G;f*%~5%NDGh26oo+aX>^+C*wWMJbwBByX(c5y zJ#(s1>6KU$eQhQE&)Si&*qX%{2bwV*C_VjxWA{{)5XVG7b*%oPB|NgcY7`7(C=AIQ z8UysWP_{B*ckqpXfG7EN1?D>Yyj9XVVXuSdhD=SE*BLFxjrR?$+0Rd9Q3XU)5w#-X5m=v5yd|i z6Ntq>vOh@!rHi0)!*#8TCSY1I%M`7oX4 zR1IySHajmZt#lqTFRxrzrKJr?SIm{JHuM@;aEAGBj0cNppC=2Lc4;{?T@-Ie_DfS0 z>}RP%@&1i$+gbPj`7jhNp=3@WTI@mqvZz;``Gr)JJuzBD##42vYpyl>>E6!#*BL*i z)}xQoB^abfM)-e?5>^$Is*e@pwH{^Kh5k%UDb{c^l}w>}+L7)1lkPmT9?~3rp8t3H zGdxT>jf|+8nO2MZlw!v%V5FPR1;ydw*#>+!R! zp^wE>tf7;ZR;?yK8M#qDoMs`&06nVg6tg@VszzYP%8)Mgf0!ccz_APynFLr*RMx^q ze%b;4gF@32qSIu|B&Vmm&U2m2T#Qd$tC8k;vRPW9R=m=4`#|8jV^B|C|2JuOyy^YN zlsjey|3$hTi)jBHqg=)-HAYWP+f@er9^Oz!YY1t|%9UhMI_c5Vf6ja!IL%KJx^Kj9@DT{!#6ej zT*J7hExhwJEYNV6eqSAhs;C%~$g!X~?4es`<5r{cTcTA;C1_qtLnTSL0u=;Z6;Q z>Ug(lc)i9Sq~XgNo~!YfYWT8-gLJ%GG+e6j2Wa@bhG%O0MH)V@;Q$@)CJh&9{PQ&2 zrr~KCf1ZZhG(1noyFtTw8o#fGn>0LG_ic>UfJZyjJ6%rr~N0yJ-AM4OeS;nvOS5!%B^RvW8D+ z7_aeXYWRePC+m3i8qU=CCu;at4G(MhOC9g88lI@*)oA!jjn_@XM>IU7;gvexBN}$o z@vhbIN{!b=!v{5N)$mds??DZ_=y;VHUaIlpHN0QLZ!|2{@$T0!UdNlMVX?+LtjFotszx60wr@K+kXt6{$c>wUF`Yc=eWXoXMK@HZNMs^PFC>-{nfU()dGE>`$Do&S#- z=Ii`!*6>XY&(-Qof@8@ z^DEQvuNwZKVZP4qRt?|LaDdLwqv2)^PuBTArt|$)!;w0_>ot5y!(KX{UuyWUh6gkp ztMj`_!(AHo*ZI|HxL(7aI{!y>zF%s1k3pux@Q)gPqv1%MU!#VvYG~^G z=4!Z3!(^TR13KTZhM79Q1sZPFu$#_jnufpEaIc0J>HNGJzNq0@I=@N{pVTlx=f6tl z`-z4Z==@w7uGcV0=QBmado&Dbn5pwytYNc;r|JAkHGE9N!y5ip=lg+%=jr@vG+d{l zq4Sxj;hh?Otl2Uts`Htq;r$wZt>G;?-&Zs|P3QAV4IkEUpN1oKevKNwrr}vSze)|C&@fKt z-=ug@Shs~BB?F1?}WC<`(4^1 zyMZV1yc@TJ=O&&%OKgkW#`8>`XYy>|e;l`p=aoFa!TaSrU&8YxJYSOB7I_tS37=wk z6?aKDAg+`f^}og~??E0t+aiC%U2guwhBs;a;TrDJ@H~xwgNC~_9IoTtrQr=4f2f8#HSDYLuh(#=hC_9{ z+cdmh;}6pCWev~O_)9f>S;Ij(-Yps~)%XK6d|tydHU1(EpVx4Jj(3xWi!}au8gA3@ zG>tz`!)+R#r{mqA;XIAsSHn#jo~-ffHQc0OUmfpy4eK@jxf-t5@I;MYqv3iD&(-mk zYFMN3PuFmbh9_wJSsJd<@N^w-zJ{|jeu{>VYiMZv85%yWVTz7dr{Rn!zFtr)y1?Qu zriOVM=4d!o!y*k`8rEspMZ**gFVrwo!vqZt4a+o~q2ZuGT&?0Nuc&hkw(e{hT+Pv$ zIdZwnVBVFLa%xO=7BIHzWA@cnjNB-~x#YfvwJ$Hq(xGA)HK%-m><0}sIBiy5RUsBm z-0GqqN~_DGYp7UwdVy8{K^i`vZ#^gJ=Wq4%QyPA(;j0>^YCO-+zzrHN`ab$xqw%B9 zR~+$Nte+=on6Ke14QFV$NW*CQN5W|O(eUW=e=Gl6bpEk4jrDg)G!5>FF_H!5@Ldyu zUc=}XZzf21k3=BhJri>jJh2OK2Kw~m9In?&H2NmybS1XYFIixU(O*H+NLMh&7?=z` z>18I92rw&A;>8;yy9i7$M#Wptqg8mKk*&hJ7-Q6PvN2Y@Pc(89O%-pPf{8|+g2_g{ zf+3@f(V$?8(Wszl+@R}!qfTdsrt_-`rWiXFG>u)F?r&R zjQ+Dd{cA?X{2GNk4AKsS!4>YZ!Kk)NVHwpGa!ZsLLYGz<)2=k8Ps=kV6izeXB0T0h zij8_MT$y$yXYAaIycDCY_h?TU#UkT>S z+(IFjPH|QyZL!*8C~;#X;Tj^xjt7cwsQ5-<7}st|q)rN!VtH9-rk%Hl+nq{kN~UzLkOA8B_#Lzm|5Fga@&23+156Uq$Np`BuSDaNs=T< zl9nW?BuSFAN|J9$l925G`keDV+q1`pZ}si}`~QF6!)vc|&gXJI=k|HdbDs109RH3~ zV8gA)3kpwQ3SpuT&ES!njIoi4>2c{9b^;b*FPG;*c}9uF7MXv3$vol~k#$p=&*VRu zVileSzorQ=zw;JV{_A-pk6)vm2lyHlOjcAXvjeQ(r}Nf?s+=FO%)=H%m!XJq^PA7b z%1~4)&oWs1&U~D-;^CK0>`mukFg9=O*dlkI*}8@ArFMVfIQU1mz1h-v8~^eSBkNG7 zg|7W$WBxYsJj{#Q9@bMd=9fA1&{M%~-@B=E*B3#5`zcp1&$;t#7iP^)~&i&^o}>Fgz*DHIm8PJRNn}*%xucsh{Pd3#hb|so$ zmlRPvkB_8_*Cj<9!uIoDMbsrlrMY-rQdBDYBjTU0OPc?ibx9HBFS;%6~W(A3eTFvDaEB~5~~bWMez5O zq3D_<|5N){>+v6}Jz8Ed@f-5}oGAj0h$+8}PY-L%tOw3u#x8>Cn8 zbv0<#WTg3%;AC!nleZ^4`k!Tn)2^2L1=~6|t$wz-Qq=EkxAo-lFYAbF5}Rrs3u{8p zz-k0)IykXMV^hajaZKY-TEEf-i#f1t;5 zr2R_Xw0WeLc5cZ$gLLujOQz;oCDUY3LlMgiptneqUnAG`^kd@>L*XLB>ZRSS(A`hk zep=HzHSNqV%8x4k{qmjiIN3>;r0H0%`A&FI?(Y@9yVrD4>57`)QRxH5N2dj3(6zTU z!oD<>N+H{+7o7_Zr12-+`O$X-6FuooB+S*je>jb;gSv#%-7^h5yA0?~r)i9I@6mNY zue_1S{sSUR|7s@SmXI#}g1SWx>d~dInWoKhSeLL{?3|hI9~MNHhIx~rVLgKTcj<0o z(z|0%)1@Gzv?d+IvIY+{69d9~M4C8siPD8a^zYUsxO;!o36mMO3T(B)>=qdj)}>ny zdMpaJa}Nm)w?b*0+CO+;q*)WX#|Y_3zlPzFbRQQ)Z;GynexYVH?fV{PY4pTF#ut{m zYfwn{$dLYnOqj+CU0n8CcdzzkWuo4_(JPcVad^MM)6 z%LqIN^VR_~nAZxJ!Mr!X44vum-wfG~>Du26SzGMoWW6N6YTLX9!VLduUtarGZh3hP z1E_=4KHutX+_Zr;L&+EI`rzam+lS=Odd2%i+s(1B!h3tgYwR^W^JjazxBr{%l*8E%tCW9vIY;Gi;$80c`ER_x z=REnRx4Uz^I`zwMznwbun@{~y6;AzT52tE2_OEij;;G;2+fj;NV(>NLrHWUq8DCS$PWQB@8WnI4I%2%jZ$*)AoQYJy! z8vLoGiQL@s8nePocwS~@iWT=MQL>U>*(z65y|UU>)s>B3P4cR&374ye#;iq{#pI>u z7eoqI+}Bl1vnsgk61YmZiWe(Y!WxPfD^|kgSGh|5aEh0lmnxl_G%k%kAzaD!NO}j4 zY&BXOSAZ;D>Sl%|vNds;e@xMw;&~@2Mmb9qD^t2u$r8njxhlCT`Bkb^sT5SNbXBEF zbt+Y^#EZ`^GVrb)Gu$yigFTtssilUM_RwT*{UGbV!t2~x>mBRA^?Hv-AFc6GkE@1f z@JHEP`QjBfS^w=+K~*YiPtUx0O{f%lf?6;r=xTKK7Ym z4?ccfed9WKNvq#4XJE>AQ68Mt7;bdI$CC8{99Xf9TC&;SmD{4jO#R zkc^Z_`ann>mmHhnYLuKv7Y5@K_!^v?k-+yoekU6nV>MKvm7=*@PhTL`t&+wrI**A= zNQxfG4+Ra~tw>5|O^sEE{C1+`)0npL$?^Qo;x#w#%`a_S&aZ8X$!`O?9qRUoMBY|s z7|HyQV7-$jny!G|>G2~?v)2M0X5{scVd6X84K)aV9(#*#`ci5wtZ!v-u5)T#9R3vkgLVp z(`|zk9%Z|Br0sQbn;3igWPei?;|L^ku)cxGi+V z@-KJ&|LXZ)R5|{s^>^w$?{fT4TmLmp?c?>Iaw*m0XNTF#eV5man4uwWXfVSI;kGx+ zcQ&@CM_+6E_)WH}UT-@_Zd%u#F0Ob*t&g>ki~I?y)zb={<7emBrMf-cOFmWKo*tuV z{~Gr68%h^Z)1J=O{GOU0ulYS2+TkH`TiJ=%S<^)oF*2xsq;qv-J)mjcn?xUY39e*1 zK@Z{8H$mLWbh#42-0VtFMrJ%(^USOe=pvixAdTClGf(7kPacdNoL>tfc{PH$I*Uw5 z9Tl&;>&4$#-=25!!kdHxoh7fEVnhW;Xhp>{9CW^&%LId{B{>H-wFSJ#V>0;?tanUZeuh((QDcX z_qG%N@Ag=)6csz1*dNQvz}mn_e)7NzpR=s z+2gDydCk{sD(CS$X3P8Nc$1)0+Dm(G3HuYI@>lk8yXAA+SHElf_%_>9586I@%J!UH zww=$<;pgq?AHKA`rfDB*;p2+g`9E~Vp1=Ks?W@n)4wY}#=jfnIe4cu*k$3rz{zK)z z_CHnrPqcmh&F$ahKeYYL^^0}PMe>5;_%z<*GQpLYk}x4L&OA?^5X*1;87UKDBY7bV zZCdQd$~AXvOo6#3Co7%zE-Wye{ZsD((|>ki&bRhA4_;dUzf?>9&7?c>wLK992++jg$6f6=t}_4VPVc08wk zaIUYHD8GOA`ufk-58G9~tYh|i{MGV1*ZqIB{7qwH3%mX9x#_KOr+y1BZ*R|jC++oc zw!icJW<#z$zplbVRnI!x->ILE7q|0Sas5AAKRe~0pmG*f{xbS}c~-Y1S z+#FbQf_c9%@8p?W_pfJik3;sUGr4nqJChrA`b=)%nKQYrvxJd0aQ~Uy)XzzCfOuap z{Uy^mOn=4n*GwN``dg+CGyNUY-!pxb>3@;mXJ>K;==neURrfq!<24NR8ays7tpSYoCbN#}|FZ^uonh5e7cs4h5 z5b?X=GR!YaymF+gKt7dNUS;B4LAoo+=PKgWU^!Qlt~U9&$+sTMsZUs`v$9a}iN7|^VC&J$%q49-SWDWju$#0oaDsGG zp$aS|ZEx5>+TO5_bfe%j>1IH6SV7vhu${Dn;Rxw6!3P$Qwj-=2ZAaKi+7WP!bW@-r zEGBI;*i70GI7qr=I8VCS&qy%j_K-FXPLggKG=YVr zZ2}uf+XwcOZZw=F-At$nD@of9c93=m93|Z(aKjwZx?v4zJHsy0M!|8?Wq}_oA#EUJ zlQtA`NS6wJ>xut5^B{W@=^^_y4A~noWWS0bdjp0wudqCrL)y}?inL8(5ov3|BGT4^ zMWn3-i%44w7Lm3V%p&bM(j~#Um)Vb`tp{^STLtElwhGK8Z55bH+A1)Yv{hg#=}(Y0 z22PNE0coql4AT0*4AT0*4AT0*4AT0*4AS~QCh3omb}$?v{cO@!gejywPr4~^o^(^- zJn5#udD2aR^Q29NgQN|CgQTBE+LDk#`je#1fRm)nfRm)nfRm)nfRm(+gFU3}4tq#H ziL_@)I~tCXb~GF%?Pxek+R<>7w4>oDX@|fL(zb&gq)#RNaneRX4r!wxhqO_UL)s|F zA#D`okTw*uNgD{+q>mzf4rxPS7imLb7imLb7imLb7imLb7il}g8q&JK)R9XbW&AO` z2rtG@;3x4?ybM2$pTR5eO8gvt9g+YIj{uQ zKsM}x95@cHtA5Y*12+UhXNZDS$bu!14LRVdPCV!gQIG{oARBUE*VPz~gR2(#f*U$R zC`3Uj%z-tq3yy=|H7pxCLnx%e99RRp;5hizCJux`D$Id3unUfZU!C7`C&Z>@q>PQ> zUPff3#;r?F&zo!ZGxh!ZT5W4QZo1j?d-My9xP_O3^5A^o5rTq)d-UoOe9p2^_~d8j|_$vW6S+F0wPc)Fl25Z7uu zbU{O18rhro*C?j-D35s~K*48uc*ZB00#FPJpa#0Mon?vnA+9bV;X#puTQ+Ou-~7hb zZ36;$vOgp|n3e|@8RG2c&YXK0SzgoLDS1BX4m0ohSUcU}S+-wVY2QZ*e6;ZUNhW_o zNrC><;4I%+u2YWos|#PQvk+&wPC1mtA{Yzql$F3oI5=Y%Ceo zakY01bxm|FaIJTJ;yUT7QmlEg{>74uH5ePvATFT6L|21b{2Pq*Z$PILz1ubD=V}nd z-*yec-3?OhIgC5Ye{NGRYc%Zn|JrPbqP9bu|IfEm$Jgxre{{X=40*WhY?q#z4%lqR ztD$tKH(vbs`M8MivM&@&*YHJq`USRTPfbsb$0kz`F+_b@8$Z=m+XAL z&9?oTJYT+5cJgz|;ly|5AAHkJ|M9D~JF47Q${W0nqsm%8C;c$Ri+$ZrUqQ?L`el3C ziPuTtSISptdEdNZ$K!W@UWAimn&VlWPNe#uO>?ccH=9l!3M&ph zcU)MUB&Rsdn>J8s(!5IZrwVbK)wje2#o+0QwiF|V_wTtIQQ!*;bgM^!ZvC4|WI9#Q zzM}CmWk^j;jB^#(uclic`-NZHsO~1T%VuZWWwdskQ?yvNRl%Z}h^DKC%idwUMunf0 znpx@0j?=Pk=VIf($Cf#M3+xN81N?vRvBlM=b!@54x~WL)7H_<&pmnQ&v5D!i0oFSU zttRd%JPYO7RP}z?9{8!}XWhdS|uW4ugt(rel9xjK=LGq)Y+xd6W^bPX$a$Wf< zxq@6mc9!S(Tdn8kMXawA?^3?^Po_U{&|aS-@3UOIcR~Tv`Ss za1Vq3w6V8)SFq>l`-#(L%lrZ!o#8fb({AVPAK5LeN0$iqgv5+d+#Pd|4>1i5bnSnORbLY+7P!23@c?`B`s&GC9(dOA7C_H(9cFBh#YC znpe$od93wQ7UpMu_o(P}cXEn5ZX%syCdN_(>y7hv#DYsyX=38taY<&&G-@2LrvMbf z#xhOf;xpr8$7R^9<1(US$MBWJT`;G#_*=&%a-UDdarFr9$$PD%<9KB)uWC<@%YU6D zMa!_>3hJ+ylvznGj2{INWXSOzMluIP$PI zT4HjddGOI~e;Lf%zS>44pJ*31e@*Q*DP+5v)$(j8XsxsT#&zDV?&byXc})n-yVDD9 zC};aP#{s=DkIdV<>{;`UZu1^{C!X1%9XQ&CHb@#r4`S|-@yYRN(Y%Ctq}#k0*euOz za%j5n8G7Sz|Bi7yh}SI6e3LVGd7bZ;J(3byw~7plPl{H9O1E=(v~%+g@W3WXnQnIs z{f~G|T8TA1B-7VCo0Rf>uSVo zX1gHHezog?umK^aZ<>HG^OsX0b)vJL1>ejQ4>)%6no^xjKvp1hhm&J~yBZ?-zOl#+N+d8+l>LnC#r8`#)M zYJP4gSP&<~^h9hQI_6Mw=Ef$aq*D`{YSE*5RXNP5Iw?La#h>sbt4>OHrTKSEvtOiV z&Y!S|$S&QxyR=dL%_-Mxlxd!mGPFhD1!r3uLOAj057-)_E6pS*(S?3Gwlj*{uN2)-V-R+m> zu63o-LlJKXk4t3fbh@k*0oS?O-Q=RL*ErKTaG*Wb-fg-~OQssLj(nHS1J{H!UN3KL zoLF{pdOI`PEttNM_)cz8m|B`=)H6nVrFY_Pa#sOPBLUgDIam%_6NxjHZkkmujDTW{lM4LWrBR z_63Kp%iV}e3Fq)kpEx!qB`KYz`qqfs)!w{a*tsI<=xUl5)1}WcD$(SWG#ZMzoIJeB zWmTqhL_jZZahx0Wsp_&W$?Q)!(~~)M1lMGIdc^ZvqUkrud`9X7P*LnP(L5^1^x;%D zRyXR_M~1ay=$UC;Y9yCOqny(4Dr?RYs~Y0)_t;+MEU4?Yj$#gWb}1h_rjv55MSi-b z<|EkIAnYnWqg52GOkVA3RjJNaxNvEWtga8NH_CPorYE%ieFub^%7;GKLVJXC?-A1N z7WZU#eo(LQZv8_|mucPl(gQB}nIl2%o-CGroRjoLm zH0H9#8Mm%|waud%q+h4ws!>d0hI!3N|hiSs5!nmzi9)=O-~ozdJg?^igdka5bQ^ z3%5@iv(?&8ZreJN%e0m)JeHyl;(sT7XtxV<@J?^OBg7?|Z#w4k z%3Qygldr%veN!%2OucTcgZ0tpaa~~YqhbgRj-Y2huCUopCIekAo6jA4F!2i1DCStQ zw^ja@WOYps-u9Kcoz}EJE%+W3D!8#!j?@!;0`vTVmE3$-n<~^aAZB4Ca zMWRx3H%f}0G_kR(z4PVCI_1?_XGfQ>M_Gtr`oUyf&7q#ZCieQw>uvvT-=~l5PJL}V z^Bo^kxD(H@6YltQ5$T<9Z-1!xPs)-1W_s`Z{_g1~wSBq=7u+r-L+t64(1P=w<^SB@ zp6|qS?1VdBRz!Ly+}pDhe~a>eQ1*`Ze`|WM%JZc>F2Dam>zH(#*Ku%Y>vWPlVsQrA zwMF4EtxvEN`&+Mld1cp+rY1C*nd=dqR`jEv6m9*<;I$zI7nnEY)Vryv=6g67r{OV|m!a<9pb)yjbknhD-MV$HiqTXOc88Dl2}ixdH{5YtJ0x%^ zpJc_cu69i{>jQ}I7<`>5P_fuWw4b}5Fv?sNo9i5NDXdz}{IJ?DZUXV3XhQFr&tU6%2*D?<${SJR{LHY+*slO5754yO@CBh$_T&^F9@N+KH zxy4++=a#@_Tz}+Na{WexKXN+}b_dRNeMW@eb8}1JGVkQ(R$^YAFLHA`ndgs~pUWz< z$64bGJ_xyTh~;ZVQeq)ry38A-tSbxq_7LT?YihI3W=*Y+)9B1dK1um@l4)KuLL4(F z9*Hj=&!afjr?vG-#1{#V`PQwQvGkr9ng2CAzker>i23bVJZ9$QYL`pLukO&evIMbC}Y4M6ts8PQlj+I*8_|rvGn``;**mV#_Cw;aj7} z7b=s;d`Y0==#h!`_X>~CL+?j2*tK><_HIzGkp5N=9M1D*BRQAG6Ofpe7H?g9n%j9^ zm*8}0ZDLua=9DU=({K*@CWVH$tdx;)<^f4-;A$apynjclwdYWdtKmF&m_CYAkIQcJ z5;E^)n~3JwK`ufgX%}jaHjk@t)33R`1nMT!JuY9k;!`~~uPcH6r#azRs9nj}u~{9{ z*O>Xj>b*evRrj97H}>ds7ng;+>Bton-rv7@VCz<`0|s;p=Zj{CppXbU?d=lm-*H@Q zdMj54^Vh$lGuK5d|5m|00xpP2URGRgaplMM$UUNG+k$B_655i2zlF!|7T$vREWL$C zc)`-OxZsIOSBL2I*u=!bQ&>T+0U<%%`qR&IP%pC%CV%@#@hrC2Vidu}S5nV?VaA>P zWe(rGo8I1$E;4Ox^neTYg0+G1@$SObLg^8>k@87&#^BZq$ zSxBA*g01W?SZx3Bp7apVoPVtf$sj-UhKq)_E+ll2>0>xD!i4CE-=x!(3N&EZ*~DAw_6_D^B+^EX6bA*u31 zy~<+cnIBqM&Uw!ilW*R*o-eja%@#15_ku9b8Ep%V!A9WgS?gv&VFS$(V#?;3$UMR9 z>Jr{9D5$Ui5|h?{KzLz+1H%1_Ojvk|psxK|wr*2cUfn{A3J5Q98O|mRY+-iC1uLa0 zf+w>hteVc_Xvp8oMTc1DXMt))9~*jR&wO_9QNeYXb7jTncVl;e=Omww);+A7_55~c zujjT)GMH*5TH!4ox4%y~RgDvVo5D{&S$O#U3g7#5;o&bRyvi%y;l)auWxb*BpttOB z=lSwtrS0;4sqhuM3Z^e!+z$Uq;g9Ss7+#XjZ%zJw_ZR;BddZUZP0zXt_kOU(`V7Rk<&-&eY#&zbG6z=WiiDt8KtEalCZT&XcGAIJByVUi{&vpet^wy z-_X$Ah9l7_z8$}?SW`?iZiipcAjGqohS{YB250+P+thp!$?Fs>(z^V(Fx`Kiu-1=tcIm6UO9@ErCRwDn7*3Ct)FIn0s1&$AX0jFaIa`AX8i{e@Djk161 zvKA3w{q?uMr0_l7`kBaHcwCaHX=6tFchrq+Dy=}5bxYR2qrP={RlasYj}Ekpl)U~BB-Ao+#@`kmuc`?m~OoE zCA3GF6|ajO$ZsUP>ct9+=n>o_v^RN~@P0kIgbxVo(XU4cZ*b`r8N^R05kWnJx^*$H zgekaI`BUb1K{GhEr}F<6H9tSbUmMG;9`x5TxXjdS5MEJZy{3epkojhAUK(t=Y_dnJ z4#W7l%=@dd=kKm|Ot0ldCMQ{kG^d)$&@0sCa{oi`ueo5sno$v#0&`cT3iyL{;fT!z zmbr*4uX$!)o8IQleZ;)&!*7rABh8~&oKlgIY)1PSwy$6Fo0PB_ti}{pn-~*KN44i= zt=U$EMlu(>*43_aU3`&z%_(y6Oihfu94}c;ot+oYQjzj-$5LFbdKK;ZcXuV*FUYgxM7gKz#J^V4F8K@Pvr&Fb zzD=fDDRda9xz?9S#+@5%S7?4S+0vbBU{0f^k=aZRlt_kh$th$1Z zw4P=)m!PI00YA)hjc&%cMViVJb6kZsG!L3GX%_F&crzYqGhs?&J}c-+Lycmw)~aT1qr-nnDSfC7uw0}2OvGtn((|rjf*iq-|^j<9W7_P2{2xMCvG4Oj3067<2nLEy-oSaws~9r_f!l3|fAg zyfRYk-0WpI@2$*V;>E}K>6~BQT`uQyIqOaP^DXNY+fM4N7rmxmFF5VQ^LF+#c06C_ zd(m_Dv{|MZ?ws7ua+cn|>Aa7#w>8)0a{5Yf;ztMC>HA)5J6`rV)7MJzZYO(whTac4 zUamgRox-CAxVx0P>{`zS*DIc9*pGM^p{l&i2`=^|DhH{kOA@lbkhnep#|x z&VIq3A0@lwC9CcEo#mY8m0otsomXkTjwA1qn0nQe+0^@H+S4$k_ULh{#lIN2~*)Nm6qJTC z-~(mB7s^3-r~nnA68J%7r~+3&Rk#wW!BtQlYCui68fw8cP#fxi8|p$mxEAU|184}> zK_h4kP2hTH3jWXx0w55YLknmLt>6Y|4Q-$;+z9R9CTI^Gpd)mG&JYbT5DRe-4+$_5 zMnNKshB1%?V<8z*AQf(fG)RXG7zg8F0%XEOm;^&%7z~FI5D8K6Pc8p8mNgk}hbeFe zWWk*<74Cv*a5qecdte6K3p3$9m<9L4Y{f*0$rgSbcY_$6M8{!2!cM)7lNT5gg}1?g_|J^ z!XW|%z(5!TgW(n!0z+XK42KaA2~qG*E&n!_H5qP)DR2j5!GF*H|E1?Y`@Z1YrHU6Z zUBXQ~Z;FUpR31gmFBZjBXZD}RhmY9H;bP11;Ul|HxD@dD8!4&`K3pyo3YQ^1ekwb6NkK^#48o&5>`mLP;nMKHv-Gp(6M}6{rf;pgPoqT2LF@P!H-uLudp| zpeZziKxhH2pf$9GcF-O=LTBg-=DM>dnCne*t!b_^%{8XEzBJdC=DN~cQ=02Zb1iAE zBh58r6vRLrB)}*b4M~s;sgMR4Fdi~t5}4~ia}AgUQ(+oRhZ!&vX2EQj19M>>%!dWA z5Ej8=SOQC787zktuo70mYFGnnVI8c84X_b5!Dh&YEwB}~!FJdI@54^m1-oGn?1g=> z9}d7l$bqln5FCaha1?%kV{jZ!z)3g-r{OG|gY#f+eiet3P#S!|7s^9L@PjH)6{8Hn^c4)Q5)92%11sXa<4M0$M?9XbbJ2J#>W5&=tBvPv{MOAQ(a*6v7|^2Et$% z0>fYgL_rM1K?00|(U1hmkP2y#0plSPCc$Kw0$DH>ronWW0W)D1%!WBI7v{lySO5!Q z5iEu!uoRZTa##T?VHK=~HLw=e!Ft#L8(|Y{hHTgZTVWe)haK=f?1Wvg8}`6n*a!RJ z033uI_!_s0P)c zCe(u3;D&lo9~wdtO?IgiWv+vSABsg>A4McEJ0v6L!IF*aLfEAMA$% za1e6fYd8dl;RqasAK(}qhZArTPQht73+LcGxJt19p(KGr8J7^Cbp)+)a?$8r@Lmvo+5D0}Zh=74G7>2+w z7y(fb196Z5qhK^7K{BL58f3tD$b?BS8KyuMOoeGM9cI8xm<6+84$OslFdr7cLRbWg zVF@gSWw0Dpz)DyJt6>eSg>|qVHo!*M1e+lnw!l`{2HRl=ybn8J7wm>Tuow2hemDRJ zAqT#OLvR?5z)|=Cj=^y_0Vm-UoQAV-4$gzCB>NvsYtGW(1HMomDuN$WfvQjqszXhv z1+~Eq^`Jg9ghtQ=nnE)Ogci^WT0>iC2koIFbcU|b9eP4<=mWtJ0-+EF5ik%2!w?t- zBOnT5APy2>6pV%>NQP8MgA5oCnJ@_^!xYGZsW1(u!wi@SvtTyNfw?db=EDM52#a7b zEPO(_l1WlkRG=o5B0j;1lw1sxi9y&s2=nCDTC-jCs5DXy@3Skfd17R=>fnhKL zq96w1AOS|fXh?!&NQE@WfbozClVCDTfh?E`(_lKxfSE80X2Tqq3-e$;EP#cu2o}Q< zSPIKvIjn${unJbg8dwYKU_ESrjj#zeLpE%It*{NY!wz^KcET>$4SQfO?1TMq01iS9 zd<}=-FdTuS@Beb0Z|DQT5CWkP1`#k22Ez~-1|uK} zVjvC@U=)moBuIu-NP`R*51B9tCc_lSf~hbKro#-F3A11}%z?Qu59Y%HSO|+?F)V?l zund;N3RnrNU^T3PwXhD>!v@$0n_x3!!xq>I+h9BFfcIf1?1J5}2lm1~*bfKbAmqT; za0m{=5jYAzz%e)uC*UNUg41vo&cS(bm0|xwNhl3I;0xuUBKScSs0!7fI@E+(P#fG( z59&ihXar55DKvvXXaTLDHME6x&>lKMXXpyup(pf)J`fBc5DH-s0Rv$$41r-V0-_)W z;vfM=!DvW=WJrZH$bj*X36o$lOo1$z3e#XZ%z&9N3ueO{m<#h@J}iKRum~2z5?Bh$ zU^%RSm9Pp{!x~r%>tH=>fQ_&THbXXSfvvC&w!;p1A9lhn*bRGNFYJT;Z~zWM4tx!V z;4mD4qwoV9gX3@lPQocT4QJsToCouTzc`eH(%=KWP#!9RA5?*=Pz|a>O{fL6!437G zJ~V_z&;*)7GYEth&*24za2%BItWWyHN3fo{i?11-SC+vdVum|?SKG+Wj;2`9{*Ki09 z!x1E|!U<5=#48%bK zjDpdS1j&#JX^;WqArmISWS9b3Fcqf3beI7%VHV7WIWQOI!F*T%3t=06KsZT*aBN&8*GOi@ILH>U9cPWz+Tt~`{4i_gdF%94#8nK z0!QHoI0nbz1e}CZa2n3SIXDmIW?ykA38ldYOvk$Ap(6M}6{rf;pgPoqT2LF@P!H-u zLudp|peZziKxhH2pf$9GcF-O=LTBg--JvJ+hCUDsArJ~-5CH>WFbsiVFan|=2I3$A zM!{%Ef@Cmn8%To;7!R2+2`0l7$bzXb4W`2kmu(k8Ge?{y(BaIBAfddW-#|I%wXmrKc|Wna0RTwbmqSCswa%5oL?3i(R8np{J!DPJwulCP2L%Jt;>aznY1+*J0L zo5=xkpxj(;DYueulzYfM$I0X6338@9QJy5?{I{$Kah9IAIiJrkL2C*$MPQe6M3)vsk~4AOx`blE+3G;kPpgV$~p2^^4Ib= z@*(+K`LO(*d_?|UJ}O&{Bh2+m1H0ZWFZ;<=zUzaz_Z^&EZx8$wz z+wwN~9eKO_uDnBjPkvwiK;9{TDDRR#l6T7=%X{Qc=9dB6O*d_ev}wi=Ug zN)-FuJ}-*PCFGKFX}Pg%KXgMn>){*fF}Z|XQZ6NzmdnUKa#`6|E+?0lE65e)N^(Cr zMD8z#%3*SZJU|{O50Y<@hsZ%#S$T#k?j$OGj; z@?iNEd5Anz9wrZ$N66NLV5Z*LQ_MQ>i_0bCl5#1zv|L8^k;}@yayhxYTtTiVSCakY z%5oL?3c0F$rCd$EO0F)~kZa0U%eCZd&e&3_2mX~L-{(nk=$5rB3~~z zmHp*ra)2BtH_0< zZ#hWrBlneq<$iLA++PlrZ}xT@;3P$dAt0syhDCZeqa7T-YI`5?~*@~cgr8kd*n~#z4E8>KKV0wzx=s;K>k8L zD1RyE$Y04{%iqX{hcz)^Z!Ut$d?=liXhJAa|5I%U$HIayPlV+*9r&_mzX?esYN1Uk;VS z@=EzRd6oRUyjp%iUL(IKua#et*U2x->*ZJE4f3neY%N68`awXYMt}IuP zuaK+CSIX7otK{l(4Y{U#wOmWSMy@T_k==4#xt@HjTwiV=H%p=gWOT>BzKm($X(@ba(B6h+*9r)_m+d? zK5}0$o=I|`DQsx4wob30rEh3kUUtvMIIs#m50g0kE93@A~F>2OJdFQ8gz4)QLOa4gSEq^TUkw205%Ad;n^&^5^ma`3w1={H2^D ze z<#X~M@_9K|wmziv$28M3k7}2PN>CN9f|^hp%um-%!TdDU2HHVK=n6fd4}?G%41^&t z0-_-v5@9Ud3gciRm_Cy3gu7t|+y}GaL6`@Rz(RN&mcUc69G-<$@B*xbb?^#ogx4V( zw!%BG13m!L#{FY3?b|q(LT3hCARcm;v{JX)FC8 z%!3862%dze;aMHBc8CKobanR&XP9gl^Cq`au{BgrN`xaWD#!AQduTB20!XxEp4| z127LBg~jj`tbpg?C3qFyfVbg2_y|6QFW?*a9)1GTF82(Wwzwrqa-Ks4r~+3(EvN^L zpc%A+cF-AmLNJ8EU>E^0kN~408PZ@pOoAye74Csq@F2{G$6yIO4J+XVSO>4dW_Sy> z!w0Y%K7|AD6&!|t!EyK%&O$DfEXBToif{!~hijl7Tn9~|IkbkGpfmJX{Y%xn6{Zuz%qCiOdHIXz_h!39ZXxxcfho-{0K~&%FiJO zz6H~E@+UCuCC`9qBUz#}`vodM6}Sp&L0xDF*FzxO0PUa?bcbHh2l_!Mgu_6%1%^Q+ z#6UcZg0XNbjE9LZ8K%MvFl`Y{8^ndM1eSwoV`$nInl^=|Eum>cXxa{%HiM?E-~ljg z15KMi(-zRQ0W@v@TxIOGe&ul$s1CKEJ~V+qxB+g24$u{PLLUf$Fc=6!UJ_FP4&9rwj?c7ZJ zwqN0QFdvd-pd9$Yl~5DvKtl+Cme2-nf=oz#7z4z(>81gm^NXiJ(y_=wgyZauvg)AcoR%}ulL|X_ykP5F4LyVwC6Hy zxlB7Q(}v5m-!g5teg{`s&MhbdWuY8YfJ#squ7E4yDyRWh!!=L`>cX|q0Iq{3;17Y& z5?aHJ&>lKLSLgw~p)Z8M%@6^DU7b<`sTmhynR1Glgpz1(9 zXaJ`D)AeB5J~f9{&<0GKrw(A+J9Puo)+q=~JE#6&+BgjW)4pjan6^#PVA?f}1k0sJ2O$5`9=?*Y$nC=GCe(63iZI>Pd({AYzSO|~95_k%h!?UmoUVydmGHig? zU^Bc4Tj3qp0Uy9F_!#!WXK(<%gs{ZKw=m^L`Z@ZNP}^Z z3Ae!%xD%$qJunmQhdJ;N%!fx|5j+7);b~X_&%tVV5!S&gun}H|Y zmr0@z$rKb=O7n~b7PV=Mx4h0f-heIeHf)FYU?+S8d*D;p z4_`nId;^E!d-wrvzs03BuN~jK3Lv5%F_2D{b0{##PEul5s2<@R0bcG(!8~Q>B z+zb&g2!_CLh=N#1fJ8`w6i9<{kO{ZJ6u1+n!96e&?uR+>5X^^1VG%q5OW|o)0nfo| zcoEjYE3gq>hirHYw!ypbK70tf;S<;gpTj};3J$?{a1?%o=bFc5BmVGs#15D%kZ z3?##?kO32565I}1a2HI6dtnwl0CVACSOAZ~Vt5jk!85QDo`*H?60C<;VH3OoTcEJP z?J=_vDqr zgnQ=iJ#EV448e?eF566dE<4Fal!nf8ot%IP`XooRDV+ZoLCBxeH0c}<&jbp~@E z+!;LQM>#Wbq{nzWkMSuU|PxRbr-@p-x9MaA=6U(a#RynSb83LRU+(|gI%(Q1*Gj8TN zgWDOo44XQrgGW45$9SGE=DZsKX1+6+^EU)M=S4GZ${Y*M;LP*P&n(XwOk9)3b6+^~ zJnOcRP6FKfGR8-F#4%-c2G8+eXC_Ya7&q(X3})Q3Y@tp7zS(2kb2}6@9zlGwEj^cO z>U1-|A2bGM@T@=jGt;ckSSJvBhIjRt@40O~>qF0RQwC?~>5O1g250bG=R{{FHg%aZ zn0m|^JoERA?^!RpiR^sNv}D{&JA<2%77zf1g*oYNAlwbk;AX^0S6G)a9{GBYd&V_k-uZggL#7^d2G4WNvmP*?CH_t%jeCBk zIN{#&JnMTiURb#2JkMpAW6>FgIU~4<$M|HA@uIF#OxZlkVV37PZNd%CV8T7i^nciU z6S%0V_kVnt!3`BLwOlaAgv1R|aZ5@OP*Fq_+!8}z20@2KW)K%NOFvqMOMP&uD7DBe zZ8I$^QY$PgY*BM5GAk>~rD6uNlR^N9l}L1mKY%YP(|u z8I9GXEBZn*N?WVmNXaY2?4ocizb8h0iqaszl#66!hsGD> zQe-sVDwiVbrwG6mS-2phvZ3-2%Yyu%zr{tEaw+BQI;T-wS3R-+lP#)aF&^0>IpssS zsGLZqTqAKKhN;}dFxeEtbT6&}D6g*dDX!1SXR)qnzNa$n22w7PQJK2R`ni!&nY!xH z+~F!4;6_ICh^yWpH?qNQWaM+02f4fakj!14NbW9QBzKoLlDo?v$=&6VPww*LE-#cvPkABCH9sVCmnV|D%NNPr<&EU- z@<(!ac_g{Je3INRk z{GmE=mAU#!VOL*C=ISrWTzw{)tKTGZ^_^s{{*%l#4yJK4?5k1-Z7XG&izz zH!_nOnc0mj!;Ord6J68IbR)}hBco>(*SNFY$SiJTv?gqeI6MmEQdEZ>dH z>PBXBBP(zto9jka=tefrjcmRf*#b8*nzvoch305i8O_nIGMZamWi;2i%4kk^mC?NJ zDjVfS7VAbf+Kr6XEw1)xUU!wzn#5HW??y)JM_0WBH?r|=WE0%T65Ys>+{h-nkxgfuqZP^N4Z3~vbLwW)3xqt?j&+2r}^EToaT6Ua+>Ge$!V^4C#U(|ot)-;cXFEd zUFGDXYkg9FN$xJcBzKozk`uYJ?=HWj>n^_}cb8w1yUQ=h-Q}0$?($2%xXUle-Q}0$ z?($1=O2ak3Bqwqwcb8w%b(dd~yUQ=h-Q}0$?($1%y5^VGQVAd$&y|bTYhsw@{D}$( zPU}9x^9338IhuErD-Soc7E~?@lO5%vwUihxa0%1;OT=m2CWdML7WW2do)*KjUJ%3N zODc%gddfvM-O0&UasP#U6~pAKYnaxl%0<45VM<2~)4GM$R?0=VtBmsFDx*BP%97m3 z$UiZke*F~`Wm%gsypQp zWv+g?!(9ENb}r_H>RAj^J&R$=s~D#EVxOn@VwmEKVTvz?sXW9mm4z54`?PLVF0wC% z$-WpS`(l{vi(#@ahN(P5K@^X;a?!XkM+tya+aXdex)A+PB&Tsvv`z8E zaf#}BK1jJTaYKG77xi~)3(A#+8!89o8iN}m<)VAar*e@`HYET~{hacvToe}VQJ8!d z^FgwCAmyU?X-WW`!sHj}DHqAejwqviP=1t)>X*ufbj30vJ)*H7<)ZKeB>+zCklMI% zCE{kT5&)-q7JZ~KjYzrZo_tm=3X8rf`mQ>zdgO;#zC9F!{{>v!xAt`3Q}9!)gCT;P z*3Zf%o=NDe2*E>y`)ZdIPtRJyX?oc9vi|uHbAdeL8#c`6xQss(PZop~( zNV!HRH{dj`DwjCs#418?+80tT8aI_IPPqXW$DnvYK2Er&u}QhcD>vZcctzura?zSi zxh5(%;NsjT&QntaovFh8ox=Sz;a+U}(*-%r|H>tf2Qw5QxH$KS<7c{{LvxsN(LSzn z(b%Y5;{1`R2*Jhibe15ec}ls&aX4EMg69bLG`A>Mo^k^&&fDVrK;yJ>iQ_e`A(Ts; zKMEBgxH$KTbG5jJ7st6GA+9*)Ef(b0+qqmAf3=-oZ=Z6x{nhq)y}kYSw736P$H41t z?7ydt{a=`K#rEcDeJHL2J+1ft>bmYfy_Wl{bDX&D`m6QsX?^wIu%;60_xiJdJhs&5 zS>Ug>pX+OQxokbPx4-(l>1mw#cRg4BC&r)aZANYb|E_iQUu`r0%D#lS7jeC9$n|)A z{*ue#-!*JeTcb?u2 zT_4}Bk8jt2{l6QpfFG>ex3`8>p=;R3Z7t!q_IN$I!hg5^8gfH#hsy2GwOo|?Rnk+^Pb|pM zjm^!`B^8);lg%bwQf7f}M1GboG1aC6W=fq;FfnLYi9;(#zJqQ)6Cna2h*OYHH=|Q? zbR*1Zy0NMGy2!kIaLAC*=mLu_vS6kz(VV9nmu}O==g!qdo6||ZAT@tJ#mQ$kh?t&9 zQL`)*(M&PtQ`7=0+%o6c%-Lz?e6o>C9Cl;@jLA2VV|58*b-}5|;51{f*%&AW1_%6lq0Geq~wIW)rQy{B@P zYXt7|LCQG`+7qW|ARCA-3M=W64Z`Mw=n~U*#YDTV7`^i$JBrVwOFk-R=*TYN6(C_S=C7rhgpGkZ#&<8e=As+@6)#y#ni z4qZz6m#zema!+BZQ_?5f6vwr^ z#Wp}??n#gAC~brC=FS$xtWBhXlW&wR>AI!~5z8a#QJSPj_oS=jSFCrEyVHS~rAIzf zeNmcppADk+LiZGxF0me|{#+jAlRM&K^ok=;v@9c8Ek@Hf{H*;Rb`8LjXaQ-squXFx3=arm)#(5Rz z-*NsU=NCBtmGc_Tf9JfGb05BLYQT9D&YN@IlJhp4cjWw5&U=vORmq> zoQH9~XO=8K!MSd>9FF672oGoS@I21%<9s9M+c@9D`9aQ4aDJBa%bYjn>9yrNfv1zl zc?g#e<6N;ng@-MiFX4P6kGG%m)0{W9$oVN%>~J2&<@a&^BIhSK4__t6^TzMx<$GIs zm=D#_G9F&e`F$>7rT$iOdE;z39c7)S)bro%zXooA{vH@zhh?U&Lxb~zZNW1^*`N## zx?z7e{YKo@#yN7nl>B<*O8$dWgX4oUKqgQc$Z8DEWJ|kz1fqHcFE9ot;VwOxW+2bk z-}S#aH#sQ(ulesSf3CQa-yXr~#^6+Au(G~Ua`booZ@>+NSnKv*Nnc6NmH*xJ_1uus z{*`oM6UX(Ajfpb$2_MkEuQ997pd90f=%}b(RpmqW0r>k}HL>oa)pz+Qd&_UapkxtXUkIw`78 z@5HFSeS1$H**DDC%b1m8Gw0`|+Ol$UQY~2v*bRJ*>YZ!Uq~Ft+INKI#9G#m#)0|^9 zMp`UpiLIIlqnbQJhcWTGpUKQrcO^QC&^qc`|AXxON66Tha-n)|m1Xn8}c)@^RQscpOV9RfSv+{xJamM%fT zw{{Kb*1bp1UZK6i`t+Mw=rM6)Z! zEMIZo{VN|RUbTA7+6N!{XUV$t8#X@t$fKo?J-%u4mM5Mpdur>`+n#xL`;OPQ8wSP*DQ4lo65vPkb*V=*t zDS(SG8jEN?^aatl*bqeX6UAu)@&h#mH3KyV`GZ=3s13IS-2kHY&>GYRbR*~{5T(-& z)E?9UL}_*e-3;mkGJ-mTZUJ=x1%YVoe=CT#kwQS-K;1#~t!YnCFHk6mo=q@}vF|DS zg7*W3gZhJLzmoPUX`ga1h@L^{`^N~-?I8NjaVTgQC=xUr6a}JZuo%z?&`8iI5Iw`t zb2EK^NGnuoWi+FX10{gyd%_7Idagos9%w#j z0f@eTD*`P7(RXflgO-5q0o@B)3R(vG2WUBH1?WD|{h*bg2SCN3RiM?NHK4Vi2SE>k z{s}4ptplwGZ2)ZqJq&sT^eCtl^cd)I&?eAk&=$}WpeI3Ppr=4vK~ICWft~?93)&9a z0eTMfJm>|`i=dZ4J3%jlc7b+-UID!d+5>tG^g8GbP&w#L&|c6!(0#bP%A3mn1|C-I(cjhG3Tn^g zEjUkv!30n@9uDOEDLD89D29gzay}Xfjsz9)u!Zvy7+wpaI--l}oUX3@F^+*;FC{;U z+@#!a9?;cA@U^^u?v%cjTfMxCGl;u;e%|qqX_48zE-HmCpgx^u?K52%lyhOj)1Nzj zANr$V9F?}`%jb@Dp-mqC%1}F~O^e=VY+cURe0-#Fm2bu8FCHpycXz+7hFd%R7_U^4 zXEQ3|Qxv*!+KMB4^EaJ5v7&dI8{SPgH9Ie7^v5kutotly&dyt3%y{>?paE?<-g#tr zgnyEhzTY~r@}{4EH&=(0PyFq@swGtyavUH1T$S=$qEgeU>3`|Q=d$JM%>3%YsuAnf zgp{59=CUeJ7~hGyk|NJ>~b)tJm&4^W64-cDH7< zN-m5o@t?LgYsU*w)_ckyesM&{r(;HK$a=zHeX+Pzr=}}6tlVCFa?s(oj4pfArscWv$PI3l*C> z#FpPTy5+DNBbQ9m-POhJh#j%&=7y)X4Tw!VVD0|q_fI$5u=TByytX5Mj{V~Bw4s)V zjy6eqK6Y?auXmqxgqKVYJKCWAv6J+-rLSMk67V_Qua!Bo$+tttF53C=s&8UDj|@GZ z^zDj^%L*F4^2W*s20XasyQd~*e->&jytj7vrwKppT=nYs$9slvEdM;=;IGGWmfz4b zyxoe}`47FFb@}k<&<8Wt)V?>T*RrQ4pPMkTOXY>Tubd8CZvVQ}I4E{ks}12kZ-t*q zvJ{twYyuvyE;SI#~#f8^!^DWU!+mPI?BX&+&1Vcq`H z>gg3yOialP-;80s%ib!SK5)nTKOfIH`^&l!wto~4zi0jIt6LTpJ$Srb z#4igY&-I)3;BRdvr#x?2Q`@-F7pr#!zx3+&$@8Y&^X{ZCej1T`aqq?W6B85LMVyL$ zV*mZt$KGr|H?iF(4}U!7?Z;0I{%CIVdtTa`ck%qh(D^eie>Uc^?3ydf@4K?}&YxQy zh*~qO?EZd3qvjv^BiT_oWyIxPm+!bcIkN59Hr*V_w?EJ|C3@C^-CtbJ)2;d7yy3*k z@S?LjV;)*#u&n%Y@99(Tzc*>o4*%AF9O*u+@u|~AGYfwE%1%A64|L)giz{cXP zVJ*I!)Ag2;W8XCH_UJf5^26VaNd5emBmR~pd%v5t=bv}AiFrG4>i+Pen-_oHWmM5e zah*Dz-SWVr1z+tu7O*$++j-A__4dx0vwhm%-KE8$?R#&x1i zrM4W^rKisZ-HLmEAM@d|(i<-q_ik|C(eJ;^Ouea9d4ncRrO49lNkKbX&5aKWY`^fv zKZlI$6&PLmlV#jJslUwIv&noe^7;3|{F^T>IsU=9EtA$QIyp8Wtn-IWmbP#7*^cV& z@2wts+rWEk%ZG1U*LQ4-ko_xD?Y`sM-?Qtfcd|PySbt>W!98u(4EnQb^UnB~Ca(=z zvHr)3fR>dfdo(+=p>Npv6!S~Ljh;X2-^6jT-6F$<+~UErs~;JXP*(DO)J@^LcW&5P z@YZVyJ06<$VMK$p(^Be&zT1XR`01-JK3ID0x91-FA?u}zigy|L=9CLJ~%oI1UBTc_I#29595!*6ig-fflypFGj)juXp%w}q})@It4@-|Ce# z_QEH-e?MRFQ(DPaeh~-4w>;l$@X;p*t_=O-;Nrgbbnd!mVUDqJP_NSgdlU8?{pXa| zdi2?TOP3yMZKD9V)-~I1>p1*ES<5#*bo;UB8mrpIZ|u>-J9R1Xw~C~PM^5CZ9~aBJ5NT=4SQ?w`+*-@NxH-&R!`loY}tewsV7)KH2M?muB5?W!tc! zn@7}4yAU+;qaSN+qvKA5ZL#+9Uw`tgW9ObYm%F{BXh@gbB{Ob_wLY?N^@D4R$2|P| z#>2Y@ob4~2%6_KLqb=8$pKLyR)zHd!uVe&={BZA{{2`m>9=ko6NV-41QTV!+hUUW(?>ydobxgnA-#yoEO+fkm4+JE=Uly6(W60^dZ(kU- z`ofM4c^St(e7o_)o>}Go=3hd`CGWd5ZtYi3{Nv%rzkF`f;KL{G>N{mh@N0qJeS7p* zM~g>#?Vsd(Ilj2n%FS;b^r>w%XYS$e9pP_3T{+k1vFh88e{%mH4~#t&FfM85>6>~i zO7?p-_RrwTj~zFv0k`yZUmdHn6?2j!h#(e5c- z-jIG5pYM4lLkgZJQ?8|apuP;|OJT}HplmHqJngB`!C4nY_CV?h{rhuk`?gY7B_4O|m5h;J^AbNH+gEBxfL7AW|&@9kw z5IrMjgK|K*pghnVP(H{CvVjUfb3uimd7$~A1)!AJaVc{%3USgY$42%;KxBvPlihA0 z@xmj%FE%9c&D6Q$Kz%GE9bt$8-`0?>OC{7N?B*?tyD4GAP%oAKMf2=IOZ6xO&^5vR;*YJG@)cQ zVP(BQ>kC>hxULy&xhYvWc?CH*Z9O-`nx2}I5lTxMU3!kq7-0+v2`RwBqhH??TQ_4! z_mmtqer2U( zl1?bk|Kq$JE4V9H^jo@=pCWhVw{d&>UX=a*+=KreUGo1FkLPMn$-g{0D9=A^V8TGf zj$+XeCSFU#Kw?39y4h;gjmtCVv$I;poLrj`f$S`s4d1WC=NhdA>6yliES%5E%{Q8| z^3C{41Rs|uNM3#}vk*(ES^L^f(N z&&^6_W>Zb3d~zc)e`Y~8hD)O*%W5;)a&wKA+?<)Zn0e-OV@7U%cB*1xc&bVE$z-;s z=V#@?B{G|ynT0cM+$FPB7nPbr`GFs~>8UoeG25I?z9&%rtX7;+Gn&jfS;!~ZQ=AwM z<=Ft3bNS{u1<11rAJ!<&!qeP>d^ny~V8ur^R5Ipy@YjmGVrvk)4_|-{mypv-R-UkF zX71#rA`2FChRw)|fpVvd#WB2@sTQNvY@V%~U`{pl%FVINm+i=v>P(FCWz`MO&z%jI z^0M+^6?K=Ng<3bFhzcw)j4IE~Fy^P`Ak7I%v6*0(6>;j^+$HpvikcAky3&TKTO)R|~r8K_Gu)uGWg zA6~|y%57O0S>}AWnT=1KOuDE{v=g(%m{UOCL22ENGtULmm)W+?&q>eB&&|nNfJidX z&zPBNAup65vW~NsaVQ+O<`VLAZMo^W7NaRYYcA4a&C_N}P0xf4+PLYv| z-pG2t-2aq*!2Bjp&8gXB)0ApU72HkALQ_Du$YXtHoZJp%Z7a17)`6_}k_|mJ$85~9 zvVuV6+A__?9J38;p4qyD)b!a@gRH`HtTuFG6w*!F4&$hBGG8gGpC~!rE`NcfbbTli>IbcP9p`>1{qee#G1OZZm1KdAtv&Mj7(tp zQN|$*W>m8#T_P)FE9+xCHFZ2Fu$uF&s1vI#OFnd~##RTevAiFsqp6xdR)=c;(ul1E zd3m|{l-ERbLo>!=bRCu_C!(D*oO0DrMrw8zMh{BHiAKspJ;r1-9n*X&0c1iKFV{I$ zt0}iIM+_I_Kof;QgFsX+I;uPju#RR-n~&Mb%m)9of{Y9_Ix8F4oa2TN#fDaCqVBD= zlK}@zx>334Hfr*@#(e0}h-AzJAWV>g<9YeHGvS7I`Yfa@sYoJPt=Sll2E#fLs?>yR zph|fU&oP@#R%5!woSKt`nJ%793{zs_W2YEtM3l!Y7MFUN3|P(Csd<^XNLlD{u{4Fa zM&T_gw)Z&RaH6xUvyF2Ka?x2abRcbH9CndVRzWtVSbU)Pk_?z*wEnS^@T|mC1yA*^pigkW=TCN2HfIJb(dXwncPM*eS zqUC92V2m@#LnJFt?9->p^H?fdeo@V_x-eQZQ)!~Y(K_S_o7#~KN6Uapdak;@a?!$> zR>VO0$vp$@FEy0rUNwd;QXad=5Lz^OOs$lL1h%ZuB%5Vc7fxncc%`~{#n&zPf*9`= z_(}yunw68DOS3X9vuMann~yul3o*yjSeBoPdZs;mx;(5Fky35}R&Z%%nj~zgYy={G zJ_=#^!!Wzj+Bd!rM zP+l&U?lcrBLk+i%{@`AZ`iE18Y;yl;J~O6fpxlkNYg4dh7TDNei}aP2kZ;BqYDOow z-Ugr9>e-ryR&JI(b&dp-W*(NgSs0d$Cf4YU6Grr!orN`q^BVRDy=lTbD9&eazJT+U zoIk<&Zq7gE{CmzXbKdMx+1}+RWZsE~2XH=$^CZq^aego7t2y7s`Kz42$N4eNf8e}9 zshp1SNtw6f;SkOTaz2jpWX|(BzlZZ-JpL*k-p=^}&QEZDj&t9~)<_uV9?*Piq4oDbqWiSu;M=W>2O=WBVntmEMqIX}et9*&>pym6VFUI^z?IA6l~ z9?sA3_`h*}mdhJ%mg9Hfyzx_VIGl&aaGu6_5$7eGhj9I!JUoSm-{;|zoX_L(&7A+j z;zsC7zoS)`AkNd5(D}}G%H*a^Px7K*id#jf3@gP_9p7(;6x!{kugcUmv zdXOvl|6h0k&qurNayf?baC4Wig1d4>|KH7hT+;Vs|Hp1xzdh-BlPmdB^uFYF75fVA z$`yS@PYHYCpSsvR;KBdbT;!hYEAm3Fe~I^p|1|F!BA5GrIvvISV3+*4rl077EAd>p zr*d+&=Niv7tmyOM2p_y@zXzn>n-Z?E?2`ipAu3? zOXC!qv3oc6fDoFJf|WZSWxGx5)n~f#_S=ndU6aGQ>Ow<%n=Ki=O_pBy*u}teEZH(y zQZlmU72tqONJzdJ8)m)k$j7#CMy~Vy5qpP3W(Kk>P!v25(X%Lz8th!?VRbEUF5YGg zw)*J=g!U)cL+CXKo3C?z0|2EYM`G!dP4*y+)ol*;Yw<`!n>pMi`4NfXw0NHp zZ0+hNm;5++2T9()H5Ou<7f*9JS+*?t$e5mLxP^Q_-N?Au;ZZ3G6JjStCdIHaqI{)f z=H|}UQ51S?(OftK#J(S*&r=L8M4!ggMLOM*yFvIIYCpJc3Fw;ZU$alZalm%oHsvVJ2A>y+<|K6qpZ6P#(9MCGVE zJ9pGg!~>o>dY1U+{P?y_z=tgeu+u@ZCGVCkUPXy0-zBY_J})L6iI|>#`IXbnVc>q> zF7K@jw$eW|MfykWh$=KAomXc;j=Ha8G~uB(1G_fzqZ$me>)F@j@#`e#-*c|Wf9ByU zocp~l>npgzJ8*dg*URG1y|m%NHk@=5b7tpYfq%L8kr6N77| zJws}xjkniI^M=++QzC1nK~c3*+Zf;@fR6$`8hBi-bTF(|x^H}~)Ho45349XxWbmor zcY-H_PX|u{p8=i*o(^sX&w$+o*lAiToo$Z$0LX5D{nqg1CZydC_B$Zmn`@;^BhtJD z@q*z`*IH>?H~7*6)C9V-foDUO3p;ZVwjn$h;duxzKzI?tcO!fc!b=fej_`d5uS9xT zwGw}H#7hWz0-b5eO-sdFg>>{p^g;P0NjCPI<^2&0biF%!G1YBUULXvt1h8m~>}w1Sz;NjBPgaG)SR zg~n$yWnn^6O4K-fl9`wk6Hn(j>x|#)4zC8tXBu8MU+mv>bD0M__2{X zDK627A9PT5X&8vjhr)bp!hEMyUBE z%d-@h1a(oS)yBD5r7UUtU(6dzM?o_zsWYu9eb}KD>U_8cbt82;9?UL3mj*=dr)>GT z^C^pLHxlVk1Nw{Y2OG%p%akwI>oA&Lw1Zb3_B6Ax--+=dIx&guQq!B} zLfMzZiLueW6Gz5I%P#{`v+3-zrkxke%d%u)o0lzgu;YZDvrypmv-=_82DAva#tm3&e5@lFjJ zf@ZX8yl73IFORvr8ClKrOO*6-KQupuz2iqC2??S1z*qo>b-TunyvdH8ZHgzGVpTJO zxhB6gbglu|ND&vEk~ASQDh5lyn7G*ZF|qMD1n(*RX<=-Q4VZ=%cx}a~!VYuMH~~ME zhQK+s7bvI5C4!+j&*~gBsGqa7uAftumv0utNCWQzvXDj=j*BS+5vH-u)OCxBj9KCU zMTwC*(w1ksYgAmL;0Jj6=nBoLvyFIF!p=9$pnUNFlErV0q~vB~V0)S+siW35$(#={ zhGeY9O}ehE9kVw0KLB87BDT#?=p}lv1)O6BRw-k zu23Cbcc;&0;~Uobis2bp?^7?PW~h$6Y(>Z3-tz{kBGi8|?<%pWf6@sNIwGLH2Xe{6 zHSJ4@tZsW7ZTtP!lPa2QG_1^y#^w@;!v&B@1t7D1X>Du0<<3#^l_~;6|@@k4ye;7 zwbD4yT+lI4i%)B%J3w>qovr-O(39}_6zo@mw>?@bHR7~^ z^Ht#Yg64s;K_<|hAkrmz=om0i3MdZL7t{#!#b>qB77*DZTg{JOOC%RD@m|sY61J3k zSN<-r*Z-Gk7V`DKNu!be|0eB0`c%i=gu15iM3B;!uJiwFS)4*y_ec3hfu@3Hf);_s zU~C~O#{DBaybb&nPzC5Pmz@T`1Zsx9bPH$@C?3@Pt6J#@=xNZ`r)s4f@C%^h=WC^m z3rGu;0HW~QF4P2a39^wKf5`Bs)YsWqr6h{B6pr~={FL3)nU(0#s=zJ$ZJ#37k~ z#reY@$>Eq!WS-0Udz{byRFHn!<40_Y#wm>M$=h-!`1X7 zfNuhxtihe_BN_M?z^7~QDQf&8;BAwtrO_fz_qZtiQsBdZKhXdICI5!U8jt~&f8Z5U ztEJy4f`aR-Rr^)IAHB0$dO?FftKwIIcb`@*brW$DgXQ|i_Fq5XH;edGCmsR35AfY0 zu76RrpA7t6;3qWr5fv{2zBsvBGBt#P;=duKAt|u@1AjZMS~{tTe^iZM4t!yHwX_iR z=!`#C?H^UZkD00^{EU+mpU9#!`&WT~0{j`2gEM}aUP(U?8_QE?R!c|3`1+63^do>b z%dD23)8N}wJQ?`Iz!Nn7jZyt80{(thwKPi;->k+j1>R~_we+F}->%~2z@G%pPO2;A zr;k?gD&UpC6E*3_tLa|_F3ql%x}qGM`MWOxu{RlwI4R!g6VTvR8uasI9THQ0TcGz0^oEOi zi=62c1OE{CJ`vZy&J-yA4&bvER!dK5@Xab-3H%q}$r@Z9kIB#Tz33?Wd;lQW-qguKMJF0!dkB!L!;Yq+lR(tl}2HXUEyT<-j<^a`G3GknRPZQg% z-h_IpW@SXtNUt1vw>(%a6^iAkr}}KE(K`dZIS*A!4Mjbu=}*gfR_ryyhQ+vlR!gso zdMw@X8hhc;`?{oBx>ut&6Y1Wl(MyKjkoDEl_ZmGj^olfk%b@rBhHB|;azv@GN$~G! zr+-wgJD~T^jnxvpH&FHTZ&jjevU^$4$U* z1RgBfpW(E>40s3NFN%H|wyX1C8Sout?#q?@s{no$cxSO(4S}pM2tNb-$ET{LYz>~t za4Jt_pySY_{G5A2hM)LL$NPEt}y#MfbRuf6)(GQSCoD;fBg0=@O(}DY&CvQ;JV$_(z{qUsQw$?YM|yH_}15}rSY2haV$QS zvjzC^H>#x>BA$!p*psP1LoVkM=(Ttg^+^Jy9OPveD~Dac1Au?8X)j-^?d2%&WBV{) zi|H7`)qFUB|GeL2+%)8?cxy~7Bi^o-+KK5WIooSE@S(t)YV0>u^O*#^`#V@yi}-Bh zbG|m8MbO(`Q7x?z)6uU~+e0bv_6Mq^=9>1_SZ#0Rz#F~ql8&KF%|{jRwI5VVk813% zSM6T~-t$gC3_?f_aiSaX?5%6Du=V|cS zs(+=xBP*+=aT;8n=qY|V@Vq+kD&U)dCu-uyGyBvYuL3^|yo*>*Xpj1zVQr9I|4%OM*0*TADhe6bTZ0r&mL^K5K^p4O$&!2Le)Tu&z8gMp6~$5+EB zb>3VCJoAX>@x2Uq8Sqq%|MGx9^;iM?JK);#8|Q}%Mq&zN7v=Lj^lmwd`IjV0J<7$v z>bY4f{C+#|t|Ff1tjC_fgMhnhPh>w1_+;R*VtoEQ%Emw7OMs6R+Z#>Cw`#|Q66ihk zS+#UkW9K)uzIFk>=UBD0U$kR*L+$rRfpXoR4!kus1tWobT4#j= zp9efyv@h%nCIR0C{6P&~tom;Q9()r0LF4}v)&COUX`fe1r!@FUhEqB20&c9TmUfBb zzkUP?GE1|rse;~)Q53v`7<5WcLeaJr#+9K z$-rjYSWf`ItSRSlC}(+(h@w$C(a_s=wpwbY zNvDyTjtO|lkJZvailFp6{W~lnN@p4Hh@YyZjbeN~9-s}wm<@_X>Fj{sj&sup zF&(l~2|VQj);A)a4Kr<2GjjWf-r|eZ(gHDGh5~i{&>9B=PyA9X9T)8w4y*YI2fn7d zS{kLnqf|Tz_^Wo$>lYjFJ-}lqV`_N}Q|rA1_?N)xw4sU{?o#u)3%IeSS~@@rb~XMY zWHgG#JhIC2Sp~f}rE2MM5~z9)tLaGadnaU>$fe@czIx&#{I{ zYB?7H&(qtbDvf`~RsTwX_cYk0?jmlMb4cx>9QXj>mqc9uD^sBMPzAi1uU%>&)^j?F z=}T>U@Wn#!#|Czf<82V|0}W9QzA&nkqoJL;4vPlf8PPT%-`;Izm2tj;JOwlPtngik>59&tCWn~{-L+4m3uqn zM{8^t2eh_JahmowQf=Siz$4n&-R=vMA4$M}20mYWPGHYdt=O{y`9XR`&>PmlE=i)l z`gh>)K-FQ=D}&xmM!Qr(5tZ^sJ?i;hDv8POO6V&(iJ?3@RFe;2#7QIp=V zrM|@mLn2R+^jc$q@OxM2Vc$eePyZa#`=0Ic$mvBuFRPDTsutUq;ey(}lYtKjw`<@3 z6gk^(5%6T-C&YeiIKuic<);*Q>!Eg!^K3cr1mHoM^gF5PR{>9ov`Y~he4vV71)djW zm-=hUD@<)~fpFr!5uVeJ0A2wc#p*04;r&7~@V&qnh`7Fh6#(V02>-PmY4^ARot0R}Q=}@co+ny`ko>3i!5IyEH(oZ$lro-(Cg2cdT9dUE`la^)C>=sktE@ z^{eRz7u0?b0X!?gE>&vczo*7e2Hs}8U9xE6&s5_V0Z*M^_qeVu1+Gi9OOI;&U$6RK z4t(KcyOgd;U!K5`HC+|(y})~l_)KT}y9)dR;K3p;?8^k=#n;EcyNS5T89xH}3E+t$ zu9u&$DE(yMO{dtUDVqEzI`a=aYO3Ai`l=N84B#ee080HEQks$nWWOAEnaM8o5Yx|a z`d0<~g*x!7z+bNe55$Yv19jjLz(1)2PX_)4aJ+_a`XA}^uL$^Czz>VK{t#23{FMT? zn(Y#{ZJhB(IpdcDp8?!c{Z;|D0QXcrSAiGSfd?A#x08T-eEtW%rVczAcq#Bva9^!I zeUzHNBH$IkJ(W)>@MnQ<*Ti@3la~YUpJA7liuiaMruBR`U!G^qKyNMdJ`we%Fuj-M z(v({(0bKz>_t&^ZiIOWacz*PvzVb_;KKU#Q4Jd z>^R_O>%c9*e+TYqU!WNHtd;J|nd)H&@CSfLi|OAjmoVX#z+V8qO2qZ|Ir9%Z@B#EU z5tomnu>RN#6Ja~xjWq38ueRf!G*K4YC5ITFZx&MealnrP|3HHuP}8>nU%blmcwY=W zY_(nc9!&qH8h;1y!@zfF{CisUuM+rOYwaHQTh9aE4qUU2)~`|RH@g*ox9~x`bVy_W zplZJ-@XCkm(hC~=Srv~1KCQ$qg=_HMDsBOuyUs3st|_0-So)|MT`}-(>s{8<`pM`= z>(zmi^makdzR@nVG9aMzH+t`*cwrOPA7oHTN1vjWR|N1ro9)uW8v7-x{bbK9naKVT&-2bQ;7P!r(4_yEntmDZW5BVU;q!KBnW&cndo#4{A{lz27wu9G;yBwymRjybz>9!aYH;WNNh$DSrzY@zs z|GC;O9KcI_9Uj|VYdqi#Yv7Q+(A38eVi-6@H`0v2)5plizU{3v_3izFE9nynhJ>p!UVXkxBBRjtR@cyQ~Lt3CIrvkN{ zf`E4nbV%Qbb_`#t?I9ZYS2sJPgPQp7sPRp}?=w0)K6ftzUI9E(%!lxvpbYqTz~eOI z%t&>9tN`9J$RRBfDs-k;qZQiP_w1~OxmUJ3B_JseU)(atp3k&h6w^jQ5v z?{ZIvw1*^0KheuudW2U2U)#&!_S_4la~1f9z~_na>0B(|TOu*pp}%+CA=Dv#Df(kL z!7@d5qJf_Xb4X!ge&{@AD`)wT9SihM_i<>~aeSYS>=Xlkp)cA=BLvj^%!i><>OKpyD{10-rf8cA!IwZXYuXVP6;Q8Ym5}KjY5BV5BE8k_n{{eiQCjMyEei`sx z;~mmaF~0nG!s1r|KjHzWe4YVb4g3y&A$@AUE&P>iGCR!%;`wj}{1DU8k7hble?5T@ z1U_4=XG4aX&p6=AQa$%`3-JBGZxZbb`m zGerCPX{!I{fv*GZasO)&zE|^rQ#tkozQ#3uY|rRp)na7jm;}8_=nd24V~Cm$8}Rcc zhsXCuCBQqGJ>$E8PXPX-CZA{2d>#efA;Te!*Whs~?f@PKJVS%0GMw_+dN9fX_)yV* zdXH{oS)f>Kyo-R|Gcz61GbB*@S3b%kUt1m~=ylI@czjQ{40ty1SkaC?TJ^UK_qw1dLDt&X*LAyyU-yu7X39Cn6rfU1YS7LAa@-@7!&L<_n9Yqc)zK!VbHu$@xwPK0# zRSv!O4>_b?L_7Le=sm$~L520lGtm2{#Nl>dnC$pQ;Q4tS#ud>{2F%>1nqlp|C-f{E z9MVqBd@&P>Bh>kV>?J|((vw*KiuPz9tc%uO5%g}@it$J+PntJ%&h|m}%AnWiX@_*5 zF9K@)(Y|m`b;1h-R0+MA+Z}Gd3nDw`flmS+*Icwi?`aw|SIU*_w7wmGt8#<6bWJ%VLvPvvhtxqV2Ub6a)C`inWzdU%&msLG>dl3@ecJNc z0X^df4(U~~ycR=Go+8LwR^LaV_riw`X)FoU@{(U1Q+f{IRlqgRX|(Q zm{%(u(t6P^e6J!Lvt;Q-Lof1Uhm=MU)%4^SgjAj;;7bV?{Wdtii&zHyz$fn4DHOj9 zc_#OC8js53T`$52qk9wZhqk$g; zev=qqnAc6f_W{Rp(^)?J{5Y$B;75SRi{(T8ppV*2SUK;2-tV7zey*$p-tm}2DiG7r z=dpZHI_H7s13x6pk>v*vk2K8Hqj!huit+#yX8+Xd|(hH2Yt zGW3>IIi!W697*0jU8m)Hxm0yXB{5j!vq2U1-RyWH^U-UITSw{_=KO_uO|pM z0pAFG6Yib<$%p?4Uk3c9a}MckO?khmKHrrAf9;|}%Gbn~k2p~L3gAtDc1Wi*_(^B} zfxi!2)87s9z6{0p9gg<R12lT*5PCUJ)c-0{Vi{-1|3dIF1kBYr!QF#9=VZ77m(Yf+5tS%J2aOkbj*GLUCdNI(G z&z_MUm1{EeObu$>_ItvMfX@TIiXy1xA-}Jt{FMU#4tQhDe68rd^F>5X;K~wZm%mnBT3VG0$|Yk;Z8J8lkqQaNuJI7wg9`LhTPp zz~|ju<8i;k27DLrxmb^?`8LcMObG-*R06#1lp47`4)+fz)<^ocU2cfA#;+ zWq)V99D2GtYotd=aE;!JKFNOmM#MzP4)<5S1ZfRb2jZn69=3P= zbpkn?uVHVEezcyMEZv63|3n7#85CFB}xm)KIuz7tqX5cu*J6+)((5F2LVVctRJ@!ccfx z7tp{^cvctSYbg9h7tqj9cv%-st;Qb}^S^J|nxXAAyiIa_eC%E=zFiB^|DvW z?Ctbo&)1;S`Pa){BC~hOi@hY+`x2Vo>%))PJ6eZ5YUibxfY;ttqrTrnJAYLfpsAgg z1Mh}@;O~n7TR&j7TWT2Tzm^`|<%S-~$1&1B5B)~zHR|s%E!9W+8x#Hf1E3Vsbdr3- zznG-)ArPG)44x`u1w=Zs6At+x$Zt{8#qWa6UD~L);i?9!eb*QaWA$|QgIS`uCg^w1 ztWm!cSc-atNVg2}0}s}xyncO;+Q&55sH=Y+g}rmo>;T)WKeUMQFm9DGd%<4p1vS9$ zN0rw~R2OykuVJLsyygx3j$9q%pbhqB*2|s)mI9ma^&EO!8|wD20`|_KWW3kM>9;7q6<+MMZi?@L>Sb>Ovv7HDLDEd$H%+OsDHwFMH+tsr=@9v6lpUmr!%w>%+?IP507X=y!h()XQFX zX0M+Ydk)wufj#f@+n4(&zcpU+8;yOLlzQ1)%j~6i@vj8-y4TBI6tg$*;kx_B8Q7~q zOYmMFf9$3FUh(2zINqOE)XUyW%wDAzd&^+&pY^hr$?WYdtvkQ;yFY35ve${(d(ex$ zAZ*a|sh7QDZ&LX^^H|;f*=WP3UiMZod#5+oZLb3MK1R#;-kygsdt0{DZLc+U03NBA zJ$pIjceWRMCfGCA%idOIFU52`4EDU&?_y@}Jumhgu$Ngc|N1j~&wH^KeFM(J)XU!a*D1fV zyx1#&y@vI&_aw9D&A&6S_ZfP+_xin)+56s0dkMz|S{dwluaD-;-o7X5ZZFGVFSlOy z_P<8ux5A4(`rV(~Xk_#HykKMY`jpk}Ul1PN8`jHS2(x$j$-3>)@BSRdNaVdfzS=|i zZR^Fq3fS9HFMI2my&t^z*Ba+7@@S;=T7ILMy=GqgGr?X2?0Ii5wXafs6TH~l1$&L^ zW$#61uag&hzBi&iFtT~CkD1KgKri-^U~fyk?A^@lHS}Vy4EFM1&wKfO`U;ibU@!I@ zus5V$_LebwX_vF7N5A{?DMnuJ^>J}G<#&P?duL#8bG__6#q4$V zVlTWc#w*zKULRAKy^&t*ErY$=Xr}Sn-JB zxvv@L;1g@)ze9j`ri4X+0wM38R3kk>?=n5SU)7iSvDfQ(^8yX^^*?*Rk&O5oCe}y? z@m|Qwd*G4&OS%|tHn@G`8-r~h_TFU&?6sI$BY*FW)WmZU`mNd*o0P9A=+{918Qd!u z<;wy2@;ja9COn)Qh>~-r9voorbD|MHJOlfnh`*bRy7&?8KP*Fg>_VTS4O1lf{ZA3> zjGa~^h16BPXRj$=ys@GK4cZb%)#@r?FE|7~8E zfBml>+%$~y^?*!pE01YvNONBlXnApPB`6br$7fcJl#k~}uYPUz(SP7J8TrK`m4glT zb}X!sHsGG#TjIUuLRJzJ{Tov~mH_WkR3rax8QNE!=WvF3az3)@Vz+*6eZ0N7??>nn`Vv2O zOh`P26WP?T9HmaDhqPjHMjo$9VgJHCHPT2~#QqP$|GOX$ythU@uZZ%yhn;`OWTj}O z_C)1a1-&Zh#nX7_tsG|iUk3RdkQefDba##={+dp&fAbmz1ZIlD}~;N(DUJbx@#Bu1J|?y*QNr8{Cu=ihJ1eND(qVxt`UCU zOlc=GR6pY2Vh|P*bD+o0$D$v(^<(cfei#N`ld3%L*>9u2*C=rvUPA)S!JWJ?EYFo;ws zchIHuY|!8H9Dk0%I$#p|EXj)@-w$~#o@14ZJ290p zhhjdOr%3htSeToL0FOregC}YvGmBs5v)T}|$~UICLCn&IVtg*u#wUN5A^zp6nrqha zrI06liF{+!vC%FF(0?OB+t`W4c*CHpNjuu znvUl43)OoB^zx4XD&5P+F>xIXZS~-_;U;uYHN=u(?Y#)`gOE;hS;YRQ`YM6E9po)s z>_D|- zO{W{x@{%-6sCR0o<&ft=-jBu|=Q=|Fl`!72@gI6^*VU@uk1y3PQrA&r-?sqY>9x5e z-7nau_8ka$CFIYN+++XL-*?SC4RsWOE*bF$+;~aak8^9Xe>f+ZAe@tI>7$;Lr178_ z`tJr_5`HgOS&!&HRoAUCO);KOXOia@3@bb!Ki5!xj>67Q9WN>S83B5;e`E6JJme8K zUy}dc0rDgESN&XV7bQD^b1^SKe+};G+_-+Ff8%i6hC|+|(C@T|U29*NHK(8sIA!Jc1Ap+7hDlJsqT#P`1}C{M7DhWDcO7p7AuoeG%0)jM z@=qWi?jnzaTsQEN{M~)3e?U54*O(w5$hnCJex2$K+N(#ALGN|OV^xp4usqYc@mzd)%I$3 zwpaY=E49HUK_w3Q(UF(r-+OfFU(_$Kh%ll@qvf-GLVO(~28*;o*rSX5D}&v6!?pf} zLtYN~63E%O#rl&vUSRJ|9V4=Yd)5veh<6n6LMZ|C>jal}*m?n;4}ni6+~gmS!RxUn z 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

sA~xp z12wv~Ks?r6%_8=#zIAk}z;6rgy`usKF_AL2gWgFUjy~v}riHNpZ+kt;Nsm!ddjfP` zBjF}qSY~=~c+9Yx8rUM**ct}hG$DAG%2W>b;J)n;hkFS8`X@SX{S)mZjs0#ahkK{p zt)5y^VnByoIDa*Yg7HB|PoqsQ@X9D`@EFnx04Mo$ht!es&Glm??(U{$ zb>_GO6ez~aqB}>PeGI#QSp5(sltB*&*j6u85N|kH3xcniI0I-eYeifWy}C)-UEvtk zM-o>NDhi=*Zo%_B`x97K^`a9YR=#&i=)S#oB<@+E(!O>!bv@e0X)zI^vOeeuqa}!!qCY-f=7> zF`uJj@*JuO9fG78zkV6_cyF)9_G9s;{LbUOEpf$9-q|knaEqdk3GBBd_3L{S_HW^E z+{L~t@98PKpita#5B0Ww&lUua_xC)IA$aU4di&)5QHz1c+uOv??b&b1*yDrPwHWn~ z*lRT(DKllRM})Vldq+5?+Iw3_b9}VDjniTL^$a>NnkV`lN5n6msElfv+I{faV{ingAQ!x;w~}VG}_d`Oj#~S zRbMt(o;p$R6&`)JKahFzg-#K-1#+*)q#69J$)H?qRiS z-NXHwLc50oC@|Rq+74*tl>wp6KV!Vrz+$tK8zNlI(a79s_I<(^Kl0^FaY1sFW+d~p zkN7vH&DwXSC@kv^t{DZVfEF1o9}bUBPdXdAC=CQqxwC_-bBvaCC!PUsxd2za50mfHbBB z7eqHmxrhdyAOd%K@|$#zQw6{2xg?&uW_x*l*Bnp*34F-4y?CNaTqHfW5dWd`f#}hq z4sQGh3`qXi&B0#>1yG;nSbez8?mgrgVPSQ`hMN%4d(*XT$boXDrte0)?yp;?*8F!sgYS%R&VUaS1WE3r*-`1oU0V0-0 zhKJ>`Qv!AZt9vLM0l#=2y6tw4Kz`?k3}q{UOm6EU6rP~P(dv&7uL6GJM<*TW_}S=b zmh#7NFOycw@*-U?wWFv#5`qPz2inPUopKCI<{?_n_v&R^y3&@!K~q*H-TGxI7bK6o z%-1q3Mh!_9bN=|2V*=UK}P+(6bfX@#XI&=Mp=p<2fy{@c7xNcbcW`(cT5=EGj6u+7sR zI$p~rKJc4NJ)BtcAIyP&HDJLuIFobaXrHWb$3;dPB=8bucfvA^y=rE?&_6x10}?b_ zc2KKMhg+&KR)?6(AHU=xZW-6amZAf>w9liTOn4_-L%g4QwAo@f8RH%ICSsX9;(N&; z#gb_!)=jUMl+;%Ao3Lc~S@l9K#JJSDk`S*3fDZBAp^7+LdWUrEl2eS+Xfd{^(9{zL zm9m+YyIS?wrrhlWYTOTuG*;qGjFdJ4cF@iVlYvg~9T8XCd|bbTWMXw9>rg^F&jWO7 z`(wwci<7dq22$Q()eY5mvRL+q;th|}{+x8be@3eXh%!Moj=nSB`W0K*nW$OyP^h?* z#cLYt6+L0Gw98L!C&W$jDuI!?>t5$o+Yw#z3Q%^d0Z)*sJ23@;x6Lh4rpa{ofXFby zYRYuSo!h_m_25+!;LkE)+V?8xPcTjRYt%FzbY5|p`ctPR6?B*l-mwWYmm zFIz+QpNa&60@|4dRh#Gbwq_|gu6-+Sx2{*sY@c+_yx@Z{aDsJ*k27(WgRMaiIk=FY z=^mk(mmkM4lon#$1sPwbxrJbcotf0YS?V~N|ZMjQ#R~L|~ z>aw@13pUM$OeDQ=G$((7q*i=vE2*ko*X<&1~wv5F2gFXf1wZSRgxyjdMWULmdor#C8R_#cD$+qx@;}$NpV* zBYqaw%7_y`AP{=KJS=3Z^^tMt zt5ThJ0c;<~j!b*j7}{344$j}$qcQ%eeX;eiB(OOiqUque({ZA$#uHqI76(#)8$wnK z9qx%1d1b zWCv{IVN^hQ=W2+eAlh~U19A1cJ8)3m0WW#7(Y*8dy+af>&15aAmelxgdWe1UBqDBv zvNUH>3^$;UV2h%J?2KcWFygE-jI-@6Cl@wWcL z@k;yHa@Ru)-2g=58=P?1yv2b$`L%(tsI|dp#2e~!k8v6F+f5Hg8x8@2(VQ9d%2N=n zmmD30%v$xxLBW>g$$P&GCWIt=sDTsMGJ0+7PxW4k7|cOozN&O4_v(0ARz*Yq2r*gJJ_ZHI`1d;JDHgxr5;!u4?Y z?w-Mc;*UG$#+f;`dxn1&mgy+&&TdDtr+3~t6dLZla{|5XzH{st%dTag{?aDfKgJsE?%w(Z$moj2zX z|GB-`(f;k<*B5t} z_U!iJZb$pKvz@O$`}FCK!FD|GaB+2U`;|HDxOaVVcK`3Yi|dPT4?FH&exm*I^X2)O zst9;1e7^68HdR@>JA=bNyT4rNXiYpPt^)- zYA!z?UP2DUC{$!#rAVMoGK>juDaH#cSj?O-qg0u}dTA{W(@pBu0`k?r+A81GE0mMR z_*U0SHe))zPV{>&nd3J{Vdi|P&g=8!&`*|TqU>%aQZE+FDSHJUxrz%sZb%SXXGxV! zSE(JzkuXjZ2>%Rx4U zxdO!@h54G8sIm<5Us6griTvU82#@`Oebp68Fxq`+=u!s(T%_62Zq2>nAj5a!v^(*s zx99AQohktWl%aF50M8}|mz#nKJBRC@5^dqVe#mS`^)Q^PxQisar@zBrXxerG;PePLAzg5M_^36hjIxTA%KoUZ^bR1LI#96l2D%bs#r!=3W*f${$clC> zXgM$b7{2zHkfWFD>FAL_PyBEY0P{M8ts`=eU^a>;?t$TJe>H~Wo*cK0Iyar2jiaA< z7f=NT<34n~c;c)QCoiK7(L(r-qm3`G2n2MF*mXG{)PzN|5$rH{#G0C}8dE0C|I^mt z43t*Zd|s?bHcvlpVQ3`tAh$(oGy!N}(&n{?MNWqIxBs-2;AiZ8A|oE$3IA&vM+ zCi_<<47ZT{V>}%F@l?2R7 z29I_L2U}ItRZ2m6QAeZBbV}>jL1$E@fbpDk2?^r&nNfZM@8pLQr)DNtUUCDDfBQUK zowMZ%4-(Ng54`&~*F67s*y5-TfA5N|4x9622+`z1qK&0#wMtN4)aUrfMvO_}2k4-zd zFoTWq<&a-?oKY4bG{%VFwG1o#?uJns@2^}|AeX1O`FL@MzAP3m*6#~IMa?hiMJXah zCO+X$PJ;E{$hLn50TMQUHuw2-VdPV80-dUSSLS=2&I^0s@ckvvADre%*?^9z5d9V@ z5Xs!NJ7fzz050S@W_Pp8zos z&I`;S5t?%nMeI=7v;t^K1+1{i_(0&O)SyWR9uk!dmM_hi8Xu%gY0BpuksEV_Yu$P6 zPd3YmF^cfVe_6ivG&x~)Y#mV}#Q33;f<6!bmySIOsE+3*h@Sf(!ieKp@E~nQg}K|- zSxbqEq7fudxIA7fA`MZjLXp-WvOq{0ilie?n?flcr{Bp55JC!V0HIR&6o2>m96`tW zDHjaZY%QEnpmOV08H*p#__lY6r`SYkf?S~^H@MVr*u6}fIWbv6T9WXoL<1O#!O zw5vdFgNQ)i$KY8D6gAI_c~hUSnIa&ijuI-Wr%?FLS0t5mZ5*To8ON{o%<2G-Cx5Q< zADmM|9zr}qaL#~^UN7gIm_tW0O0$t@6_f^Oo?le}k4_H_=g#5N2ETF#jL|>WaFwvA z5MUgEdISY!o(G%(bp$yDQ~8xP&1>e^6)23&2|0PNY^a5HOFr(Vk=m^y!52=NH&wtX z+nSgTSfLZ&avc^FUH`qRQMBPKex!H1xY=hRYQu@Wu;c>b(P$7ynVyU#UQf)?X%B!3 z`GeDH3V1IqM&ivVow9&I3?ipsoLmeVBob^QjYJi#nlC=S>v1?tj+~Py+R3wjx_Dv| zJEBh=Ee;|P|GDn}yk}ckd0wBj7+Dz54X^eVnmcHznSZ_KwEgv9GHKzOn54o@38pAd zjYL-jWThN%LXqwK!5Xfy0UsBXP!R?(h^$}CTGev|zeg{obtm+i$;%}|Z6PCJ@+>Ii z1(KzAN#+1gJ3{iY4+aWdAJ5X$KaG^r^+?@*o*Xqt2a$VV4{I10&;6;=xrGk&6~B^? zLlo8DC`Un*rm(%IKU$1a@fFD;ZW=uN9mpS{bRk)z?h3rGEG2hHtHHWggD_Z4VO7cI zVe1AgroTbr)d&{{yRU^Axtf|haq;Y#~!4g0*r^2|hJ4^_ZWoc4^#5%52Hzk#LJNtN_PRuc2C|xlM z>YQ+Gu9PlepIOnh1mM(+ROR+U2Q;GR*U%O3gTqn`70*#aH{Z4mCKI*LXjw#}T z%g6F1h};two@)`3_?}W`Op(={iHiLf9kNvCm(kxje*&hoV8fB)RLsSpyY4(@YBPt;Sx?GSQkGIOB{%=1(7>zw z4X&SJz$8>2lrXqefA9u|XvGd5#0s+TDJjp{ zg!w{EiP&ZteJYx4wy#BpRFjAkiiA*P3Fyj!2Ni;UBK~TYEgRnl zm#k0<<@1A%a)l8*SRWuDTe@Rrq-m+vz|8E9-{kawhAt2h?hq!t#siDH4PHt{xzjv~ zp?1&v#nOMHJaNNPSymsmp~2qPKB(5Al7S&|w}>5eWihu#S-6eh`uU8ZRDr_BH<2G% zI+5 z_0C-yV}`BxY}9%EqY!7M7OKoXYoCsyFmSd;mH8|b2??A?Qq;CJJC-7ASUuM-BrR^x zt+jWsPwQpy(!7c6C&Le?Ye}g}DQY-xTiS*a?~pcZA@7vye?G3glIex zCQxDbsYBsSnv5iLDA!qW0@qr39D8;9qDrDhhAdnvd`m3w^4sMDl!^B-S@9W&ZSWW% z{7v#CrXn>G8$(AORKiXB3JsLv=~>8xDU?Y$ z6=Y$A3I26XqUPjKjh>nIJ9b=0?(sBR$EL0Pa?UO3vqn6e^HGaMO3At?*zzf}QS=lS^y@3PnqAYJ zmd57N-0k1CGh0NKq!Yp6mNK+`#(x%5@hSKfUlf>=FPqe8=1j)GNa&vIVyGG?xj}u6 zR4zOqsW0TZ(f7UaUGU)rR*Ir2tM%}z~@YI2-C7$a+*md~q=c)yq*v!% zL|K-+5zW|vXzxs0P!-V2X`o|6OcFwflDV;$P2R7>kN8jU5Lm+Y~i?po4PEZ=M9v;jx zQkYtuI%$t9eY8Nu`D78t>b_C(Rs4PXWpEM|QO(;c`sE$vn_^jH| zX=ZSF?o!wj^==_j5cbGZqBn;N-$*Hi(V;@Jaf2tV-s0D2-c%!&T%@XTbz_Im;8?AZ!?QzT9l@#(Ee+I9FKrOkho| zcH@#wR&lV<`b8BCl#&dg=HA zoDL9#JjVwr6t;r8m``CdnfE6DfuZ}z1iz!MzI#JtmkAB=w@LUki*?dyqiY0Id1TMj{VnyF7kxHZ2F$1U!~ibG0)ZIz5B zp7@1+L;J6{HIz9NOC}~8j(HZfXl#K6b4vEEiKQs})yu7UiXbUZ-iZUQ?MNO(7%b~0 zf~Z@55kfiWUrLCGQ!QDtJaT|%KxI%|y6;h~O+J*wviZQgvxpA;l}+HR2~dt`mmQ~G zfVLC3=YzkI@RthzC%_5M3v04H>M)XrJP8q}|ObP#3)C;pXb* zFFAsL(Hu}1dMjeBa(5Mqsn9EsUUW+uF3~{B-7Na^AnZgECv(Qa)+zz3!LZ_8cmd~D^2kf;5}KYMq9`nlaPB|6CC z6m<*O7jGE$T~Yxo>LH_v;>V3N)~pBJU3~d``OR~*=>#b}AkuMy!u_%`_Sw1RS^2@Z zOzyG@YPdu6B>@j4=d1X6o(CZgkw{|w;!8eS?sep}>tLQb(G{KuI{Dt=m@HoTPb!^-#l2WNLGozc#9$&J?G@Se({uaphcfvtH$>y=4ivLTd zJV-*M+Njqq%o_lzx5V-=;X;uL*~PNchs>}wSS6=7*n z#$y8)OlVJldKkM-(>$cq@Rb;;R!J5%&39^ElW0P0*s#&2rAbohT`DNQsZ4+=reKl|f=XmWE79W^I1-^4nLE@*i5s z+qxVir))4(2$`Eq8QD!%fh$%j3|~87Bxk52EH!-y_|u{D9zp~PQ=v9b|d>YnFHO|tm*%`X_MU32bBq)f=4u3SDA z5gaK}7y>R?TTQqH`{(RQnVY?BEH@?SOQ~K=5f*@sq;n6M4j{CPNUkF0>-d}*P0N78 zMJ@{@YPcqePpD~-N9QkTiV;uBD3GEtad_IFsti{^hCg_l0Mw3zvu5=7&01&|Sc z(?>4IY?4#c4!3P3F@-)vipm&Cba6pg`wq-f&Hl8<0(}(YVkm|*gFqqu`-LQA>}zH` z?f(-OF-<>VCWg32(b0ThdUZl!W(Cl> zWNuIVw_Prsk5dm_WP+2A@`e>ZGe}3d$>j42v1rktMGEOjc1*SyUQ@+%@QTd(!yja% zv&iB=b+#qD(X!nN+1d|JCH8F{xWphU7Ls0SHL9eJU8&&y;Mvx^-6Tk~glSio9}V^S zLTZ-SL-|s|butU3LWRPVHryMrdReN}pcn-asqr@nVZp{*opW&cor}!KE+k^f3eBCE zCw^(Hni?xH#vH`2jE7ti+tM@z21I+864DiN;FX&>kQ zSnU6UVKU7KhL<#)5^R$Oi)Qfr8a0b*28jP471I{(<{)F;;{k_N>#Pv0AL5%1hJySL zRS-2PQ-&OpRbvg^Y~n52>{_Kzm@)GpW##sXJL|+TELv%|h7^?PvWyTrG~tlfjNEKwRDo zKY*f|Q!tgZ+$Z+hDWxKm2qGsPrcfY=E>;%pZBY^qs;ZZaTWoY6==B|Dg0gl>f{BU(IPZ!6XYE($$6Q)qrfd|GKpau z1OVDQAgzvaGbs(>fv*Fl+fL0DucIQXWb&GjuQF%^%7|ZFI#;y=9ZpnMjBb2sOh?6e zNODVdem*P4Mv>v#CKM&6MbB)7_z~ko;$SNv`W8xKa#}$wc3f3EmOf~fNj|X*+-OKY zK&{D|DTJdg>eFaXIl^T1N^(Z^Xgfu_-O2QmW+@Sbn{`{gu4cn*Z^G+m%PdfQTh!h~ zHJ3ouoa-TJ&3{Rt5$yAAF^-hg0g>BqzfW8i9JV1OWOv`>$W4A+^Xojg^s4X6w81f@ zJY4*W^g5toWe{<}Ig(ax*5AgA{z=tGSuyg2!Fr2+k(~IP93eA*gSKm>l?1Ku4;c0R z4sA06g*CH7w|o>Nw9Di&)W*|JD1_V#eY7`9$gi$_8g>`hoV#x*%-xhK)b@$t5x zsP{ZRMC5IjdsCmE@xmi_4&`pT=_fq@>R??UpgKz*Kl_BK0=`_jme_I9m9Lu z^G_CJF3!}7abE1q(8%A*^vi^m^5ZmiV5xk0agbQ4ki(Mt-i-K9WzSa9?nx&$vMgeI z>e9bW`>~(ENd?3LDMbe`heY${P?X@2t`ejao^cLvq?C74zV;}&St|+T$z5^K;SRX# zIErR0Z&BjSk9-P8{56!y1XCO!=hr}0TNJR}q7ff95-Jh~(Qwx!pNa?A=UFx^p;(m) zUhx5pN+swx{^K`fpRahC8!YU!COc{ZAinXNZBEvwClnF%a3Ut<;riy&zpqj`k4neR zk+#fo#n9yunCIkcwl#wP)kC=giToJvmG+X?kbRNl8&x`YPJG=){v6TBrp@*#W_F!K zN~GqSzVhe=R(h%S0kJ4_nP%W6KAa6GAk9D`1uxH3K19|DFr7AKad65gp^Zn(hGHo<67 z&#d`ZLc_EcX9>}Sc)OS(L@q0PS*s?l^A2p&k<@S?i2$q2;q<1@e9nZU zAOIJ-PEbxL|50lo&`(pB%1yG0QyJKuIuPsqArt_Wm#j4x zp;eD_gM`2*Ca4bNw-F}f5@A8l3BnJk(ybNjZR6mnBGaL;V8kYVUZjU|qs$a+lq7@5tB?-^gnRwF{fyIsOON(+KU{-l&Uw2@Sp zRMIN$TP~?JhQ~|}hH<7M%pO%Tcp%{{GzR${-x<{#1P7po!~uTt2WJbiq-rR|8xDwj zw!#rY?c|?ckr$OeMPJCC`4op(n_J@VXc$o2YRat&x>&I5$dPl9afOR>E1I7KL7r0_ zo@X6~Y&-?U7VYp|B+onU3}}$gCxCq(n9?&~o94L1-Cul&ASr3uO&$ulmS3L|v82!F z)P+#_lM6z!8GuKVmSqvzn0_fkffni8)zJk*T#kF)_EQR=Ne0?MOy`(H3j75QD4dbR z2-5~Xg2CCv#uzel!Le$GydU0j&KWzq&?2zSGcwvykS@r6@VA|^Xp z61gj0hVf$5v~{*EB9l*9Qw-5}BU)ww_7>}Wd->J6-92v+u=%Ypd`n+;zPy}tt(8y? zsPL%0m=z_9i4~EJN0}2iUNJN0Lm{!p$@6KStv2?7)2Vy}HszDeBkN+FnL;R7h|w9f zOD3dBQ-8dnVkHOiwNRGWGMB_hA~fGN+vGsi*d~W_j)>*M5!)Gia#`_Jb?R({s|E-T zrr$RbN4oT>B9R5YIuVAva0Kz@%^QAcCWRqF&bp&4>W^PdDtyWOPIjk|P)1P8t@I6{ z!n#y_gJGTix|}RAgpzq}-&A`l(fF7gE6{Mt;7<>FH+`Dt%NrZIuPBZ6sl$9GdN+DDKH;X0{))UE(*_188#; zw-gd)BP%}oN3dQ4t6Dk%Kqrw{=`G&Lq>P90N?Bu_B1n=jP+16~ldHCT^ARY#2M=g1 zYoFe{7PAUe!&ae0iNm!vti;3R19#bqlFytnlvrTapV^y$0&TZ9_m}@0hNIps4#?3u z;hu6nd^Ww=y!KHO#6T4MW`!^Uxk5b+TWYp`5W=7k?1V{xD3R!_gH>p9oIr?}uY$xm zlj4_?coKqkc<_!QOag6EbpvP#?RynRKte6S3ts6yjNYmoVNG#xDNBy6=(B*xY!M@E zMD>}EcDcftyi|$>XS}eiV#PMQlr4r(k&T+{Myq9J4dshM0z=CU3(_Z(r<`*uc6M&b zr;B;B7%s3+<*BoZptP#wH-Bft`k2!YK1exRd8v8cM+{jgsA?;oG~=+@R5hk5UlHV$ zqWX1Cp0L6)O{~d0Njb^hdV`1n4uzT8F(c6}Qmgt?atxU4d-rJ2D2Hft?|np6ct-ns zfFT|N`E1*Tsv?$R8M&&nBB^Ra2H7 zNQ%9)4Rem7X(Jdw$sNn9E(JTX5`n=$M99Ds{gz@E!MRmQ&;G?b@>BR~ftBV2z&4}v zV^&3Qlc{KnNG{X?L3EuQKZ;)_v*pWZqtM^oXlj8Gy(DWq4?|k)()!E&X4S%q$PP$i zc%$c9Bd>rV-k&1e6>{w+OMm0$7YQD`Ub0&!PolB{R<=X0k#UADW3v&*sPt?3FA;y+ zr^HkzNg_aK!MPdPNA1F*Y(_O}1-?RRA*q8iruv4W3Hj5aZi5M~>~Uxyi3mCF<5@{j z#0n7C&4qu0ayZb$mx5G6DkFk@GVf+laKCD|>h5Aw#O4$wt~d)+k;SuM!f6E8{SY@3 zD#04FFqBGU>0zGf3N6SEpR6l9Nm4TDr%Ir>Wu{^o676I1y^u7Po4^Fk${H9ww2V;9 zxmF#6c6z}W;T4YZUJ;-6H*u;ORTp!u22wUFp0z<$~yC= z_;ZWXPJ+iZCB}T@ex1ISUfiN23;ajlk4K-@@)%dDaC-`Ujk(W$CPCQBK_^Zj1Q|U} z0QtLud3Te(!_D{-77_wi3nvOv88PY2I%ZQO3|=#J(C4-g*nzFKX%pk*L_|{YQp!vF z;(YWdv;aR^^p<3B36_QZTmAm!P?SZR)Cmi1Q4S}ZHbrU%M<sOw%C4{o~cYSVuPRFO(=PJ5T5EYBNs!D5BR8mZK}#S1qQ+2-03)n%`XJ!R2xU z#B^RW6@&_@X=!CriD|KoL6v0S<0_1k=~Y&&a7ec6L`ky-Y&TqU^@!w$!Ghy%6#!GN#JXxH$3sH%~jr9Lx| zz2KQNK3AngJIx3~++>lyAjS~soDth;Wf3aWNxVN3n{(L*u(_s#$T$*{Ehqbh1>iF( zE*w6wn{e)ZBI{e<^a;{Q)kAnT<&zp?N~(|*mPmL{XFL*qAVF00CYL1b0PAK_yyl&MHO|_L#8DZoIC%*#f73Iu3kVD(2u2;4q*Yz$ zI~zR1o!9KWfTYY50^e!ZKRi^hl$77`E;dO zaE{+NB?|PS>Sd}{mZhOwgN_TN)o%rwtglFd^s~!n8;Qc`w!oDunoJ+ZEpG_* zG_(l<;Mx=KqEG81@_bs~=r4ky7GA5ba~55RvMTgQ*$Snqcx^5-lNblWi+kP!a(t!l zJ3pXgz*bXZ4ZPp@YdOorTQc4b`lPDooQ_s1Y#X=ua>vUY--^UEX+EuJP2s^DZVX{m zBub&XMhAG}NO3^IrSHn^uwB4b`^#W^{wS>oRE`}HD|4_u@}uTWH|YNv60Mc)6aIg{MU z(t~5_>Ex{FsQ>bly%t{a!&XJTjdw5e)^gNGxlKrDK0XA}F1|ME5e!6vw`5=yrGvDz zB~g3T4pqBr(=Mgxa>bqK?xR+8P_eP#vj*RmlAkO^Y9GR8)5eRPu60szamCY-x-Thl zZZc+nyyji5JH(2MYXK6$CTEM?EB{1MPf&`o4ji^6WfuWN&RR*?G-j-%P^24PxVcu+^k#>k|#{X(vb2m6rrp3fUv1sATx2^3v@8r_Y=#y}cVR$YB4FuWvj6zoi- zZ?=)P;0i?$U&>kgy^Gm!I+rIQ`4}RHl!aRfF=1;q5te9S1BUNU3A3Lqztz04_soikH?8p~dDihNkCeUEYy@CMh3$w&OE<=;;D zR$EI!zjs+@ks41Be~cfr~ho3q-sOZx=s`N)rY>8$jw5Tuv%( z`++!6H7Gwx`rWc2A1C%8rFe*aA3;nxeH_&pss>qdv5Lx?vlB=vj1pekL#C>FTv7*E7$ zga~8*&kr=*i07RPjpVQi`Us?TvL~ zrcb0JXR^Ac>z#5{{GOdPYts=|z(1KkQ$dO#s!PX;$m+zJWYKc^{?dR)s}bDv=1f&B zrVDCW`iU8g9pWZup)RMmb9sz?n`?$??81K)2MPw|Qwqg`YRp-&Sm{eM#!>ahrxwG*@|8^4 z661Evbot!(*R#TcyOh6f1x&L++vdbdz5GT+1rfD~q|KJ77Iv?i6H2d!&yC!>JYIpem0n&=qYybcN literal 0 HcmV?d00001 diff --git a/voc.par b/voc.par new file mode 100644 index 00000000..4e15dfd1 --- /dev/null +++ b/voc.par @@ -0,0 +1,12 @@ +CHAR 1 1 +BOOLEAN 1 1 +SHORTINT 1 1 +INTEGER 4 4 +LONGINT 8 8 +SET 8 8 +REAL 4 4 +LONGREAL 8 8 +PTR 8 8 +PROC 8 8 +RECORD 1 1 +ENDIAN 1 0 diff --git a/vocparam b/vocparam new file mode 100755 index 0000000000000000000000000000000000000000..c6b6f164bc28fdcda8847ba4507709c5daef047b GIT binary patch literal 11001 zcmeHNeQX@Zb)Vhikw=j{9={}7cH)&KrBo^&DTQWfsj~J+o_LIDk*26bPAo5v$0KLY1j39MCLBqdUu1aJ@pLQ)_I`T-#@j6yaPs&XXjN> zBqC13{@(1o<#KgI-9L){;~{t7d%yQFZ)Rs_XXo~r=)gW*(*ze?JSs@KP-aTVJ`2%u zpA;3=CDsX3Y!RD8IS@Y%Q)-CX9Mg8)Rxk}HJ0EBnj;zvWbrTZFCK2&~Jg-pBkSNu+ zQcT6#^p$nC$W#bJ0^~=zwg;sMIw~2aA z;-1k>NF@g0q1wk( ziQ+_4SyHro(AtFH`r4*bW1Sss)8nnvsr2lz)?;0rt(_g=d?vh8_E!iYsgAz=2W4>X zf7Km=E)QLQYB%w!d%@X-^CQX!>plqG2&4KEh7YcRe{2n$>NarPQ!Hz8CX=@Eg?O%D zSpwaWpw@Sa>}(+~vbj{cFd;09aAh1K(r?;Ss z&Al49%JG&T{&tlimbd;D&b1Gk;7Fb#^}7qpC|kclGNthD4Jm(xWUBhzdB{8dy}$VS z)3M^)vAKV}Jv7pPeLfs8MeO>OA6F2$KJPch;&mAQdg2`A5^Lu@-m%b#p^Pe#TS0RybSHPN^3uFYrkAtd)U^V zBrOe}%XD%g@3pl#($WonnNE&&ldVmZ*7|JiQ0d6;{Flu6(bB%xZEbsL?e}c$M@nl? z+uAD9-rH9*q`e+pkR5n7N*AQ|@@we5cY$0&>qPNKP6JJ4OfZ}l_YyrF#Wns18p*NZ zPl{J!Z~Pme#Y?0szOn6U@us7FgS59|KsMcu%`Gh#s$*yOd=>R9zWKZ5{zy~9;3nMb}>By%d2O}c~<)Dugf7f69 zO@Hwxi$gFOIJ@WJasv@t!yx_J{-giOvais*<6j1f|2a_nWpD9k%Oh{$7QU(tJo5hR z&+RcDc`9-^@^r+ydUfSq!Yy>$k3f`o*kq*gB5?b)tK4a3C7l&*FjD;P6QQ{t=eJM*E_U^}yi%K9}}D)G-{6Mh4i4 ztlaX@h!bFFc(8}fhNC@$!@Vp;_xJX%aj~r@&v~8QQ zX^+vmLmI8vS=ND(;hx8bTH@P{v2BKNG*y@~lE(_k^muaIi02cjl#!T<=MsfvF2CEz zPi1DO$BnV1F`Le(Cez7ril^Q0+uaUI&%0NDi)#n^+WX7P1<)<%&aZ-Y;Wl~&^edoc z7zd5usc4@Y7TU3pc7Jt6;2iKRz-UdCMH~}U1Vj6R&7Z8TIvO}3_HNw$@lR}dh+wkm z#W8?-o+2O;44u+@YRdIbBa$75l6wyNM%+V={^>cN?>$Z0kQ>D~gQI|9`WXVcgP||$ z-NEKB`MQI~*|P3n%Nc(p*nX-!66~6*=na}W7yyxA3k+Zghwfm2+Vf)^rw|9t_^^D~ z10VLl|6>o(gN+KOU`s19<9x63y0ls;%raAQHA)^2*m9YYFY31Zo8K>I2)e0ce&@^j zY(2m0EGhju*ixZ+hf0-AM6;qziZa1E)h=pXOH&z@m`$8{l-9>oHrPZgsrngTP%^E2 zsBnG!zQQu5XW5>4WsiQ7vSz!9+e&^>=@tBcPWV06ThS49olYtGbw#~)eLX$9jF!G+ zx{%2j9pTRKCyeZlaOZX-n@YB}haV2_+-AeVw%j-CSa#T&4zV3U?f$oWaolgpYO;J$ zJe59#!J_Q7S?DzClFuxlvSJ}qLueaP>!#%GCy9w zgdXt!v8~$=;@9=+bD-skDWO+)l47$cKj!cnS=4-=EoxjAHIvd>S_J7SCSwF$7Qx5Z zBB0maVT)RqMeUQ)qD=ThdZ-!0MaBrZEaV8*HwVa~ZWmkBxh(2hWeivZ^!lgRqTXd8 zQGIh6`lXCuglc$}4I5mB5~a%YK-u%QVdLMiVWZ2iv4iUj=}okIAoFf=Sv0)~ltNVy z6A+aFGV^Qt`d_j6dSy=eY-qwYmq9kTf^48HW#c1y^T){oS4J|pN@5*dfL%bVs0U0@ zP1A(-9Cay=6?%c>La#_Q$AnfSMn8Y3=D5QT1ye%%;wUWj^HagZ)DB28jq{U`b~@4o znn8H2)386R97=rU{h1E}> zQhohfHhO~5KP7Yn4G-9wDrS9_&}JGQKrbj;q197NuXnRqWW;tnV{7xtxp@JQ&#M-d7x7v1EaS2r+`FganZpCS?=ai7v*ya+HPyhAI}$(Gi{UU*+d)m+pNwGK`PAH)A_a|nM5|8 zi_Zvg;K>6c(Z|D6v>(K17()u7MWxR7i?66@m*xV$!c3u+Pn6G{f3r;Yop~nweBg(r z{^or3`c}=h*7wwxU!HqRdItWc{1v?d+2YkFS1@SW<##3_H@xo6&`A|ZO-yIv1u>mT zPfAyQYm)C&!Vc+R6g!tpw9{z^op#dhqR}ItOC5HQRmS6)*|F)QXq(E+B-_%N#1z#` z2la$3=pk8jaWud@uV8?Mn5WA^MHfdx%*(ebi5=xdgS4R&>kcb~;xj+Gf`ypR$ctmg zXP%#$Lw6c zpG)HWUgPz*wL!%r)N)HY^=^TH456BXT(rXjv z?CrnDprJK4=g;fx7nMIP45)DaY{&EvbhL(Nnb-02%HJSo6mR}EDg-S=s4v-n!DmX< zg7W8fa{b=+|Cz_1-$Ry^e@sTR^QU($um9(PQJ+wLRQNs2R2P`*x3#N(DH8zuR#?a~QAxiynXaO@oT5I_`h+e;Ky!`sv3FDnrWOTc1~+hb@gg&Y#~q z`FGU|6dZ-eC;M|=KZMR*KmV?^R4d)?=`Z$Y`Xi6O;Ag0+pxqARoY{}*n;!pm<=?LS zIZqD2ek{KQhA?iwsr*glXsGtHy}^v4Z-bJFH&6EO_1JSbrni*8$4vZ%s^1%z{n-Au zYxuvY{6FRy@LvCN0A7q@|FqGr;b%5+&R*NbHT)W3vz+j(-mZBO@? zyRbjgKUDs18{)%iV`$!^U_XZI!0@$ajOZ_wf2YU6Bg)))?s5CKJY-8^ZD^SWE< z6HWO3rIh`8=lg=y_88PWzq%AY?2huh>4GsD?h`y8uEsaIMThqZT20?ue9kI#wazC# zvKmm5PkeL@{J}MF;~t#ulQQw1vmfp@D23B~Sqg6eu4A11lV|*_Wl#5csW@R3hhNwE zjS_H4`#&Ous2AHk*Ea@KD{NP+3ePKF1aFiW546szCqqy9 zF626llTkIUcrN^&!g<$;=e@rM9zuNYxca`b&#E};@g-<|RA1tLyrk?;D0|NT2MWKS z@Caloui~IQZ+qfj1750KKUMZZZDw&kv|gyw8w7o!;x0djP%2I(5~KEd@2~a14R-*= zZv|ebH;XQnC!6dfT&&DL{8*0wugCc0eaz1&hbMrC=(?!J}l$kCwPC7 zucM`K-g@Ng7+1LA=^xrxq2!%Ta)AGfK&dwA1i;mMzTkhz3GYn=fDkajEkOA z_Pn9V*Xw!U^`)K*wC#ZnD_w!kcl9I$(liyyb}(SWdepWGjL zyuSy#WG;>TicDC21B2a>0c&vIK75g2jYPT!q85KcmdMXqa=V50NbE1lHef_ zOyq=>l-np-VcYYT*-kN`K1*Beg1uqO>Kz#zw(z+GzGS=So3+*EmgP#o^AQ|$`HVFc zPmg2U&FUXSn&YXoHJitG5GpJ+gBp%3sWoTa0Zx`MX#fBK literal 0 HcmV?d00001 diff --git a/vocstatic b/vocstatic new file mode 100755 index 0000000000000000000000000000000000000000..b2eab5275c083e5b580406d8c9c0cef4fce29544 GIT binary patch literal 1324788 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 z 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

o@+6YPv-=zJ#3LtHa(`kB`W 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 z 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

sA~xp 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 literal 0 HcmV?d00001 diff --git a/vocstatic.linux.gnuc.armv6j_hardfp b/vocstatic.linux.gnuc.armv6j_hardfp new file mode 100755 index 0000000000000000000000000000000000000000..26fafc676081ed489e92fd3d77781874a5be58f8 GIT binary patch literal 1077621 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%0Aa}hvg@A6lzZZ& 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

1A})X z?+AmpvWmfz4fr%^!kvALxSeDzg6wyuh;`6b#yDdGe0&~!0s2H@m;aX8et3GcNRO#va;QgPkJVPPUV$-(QEzOIL);Q(W2vm&Y^u zJh;3c@m?)sLi`Er)-d<3un#BSLU8p&y(OOj2eB9ujja;=GOwOq(u>Q_i zHUzxOR+igj@EQ`PkF%E&$yn*I%BY2sMwNZ&a=nB;UTN|I4`+l`G&5K z*4p6jlHw2hSHa);{ORjyPr{q}H7gb*XZHvz|1tE4^nR$7^Q6<4f*opLo|s>*Z_Je< ztkoxzVfUBVHL@|&Idoo5mG_F?QYXMQ}YoB}RNP^7}kb$=^iI zybMFT=7-g_J~nR;n7Kgi$71td0bhr|>*c+RyuSZ)0-Kjcj?QI#oac>?E^mB1TCHaX z?*{c?i+KL^H&4Rm5!{OZ1@8uR3!C>4?|XJ8Hk0=M%a@qSxL90`qj~tes!cu?o3|uv zJVYF=BEATlC)@5+$-DnASAA9=C*o>;!qK}%SkoAb*^|#B8+8Z%!9>;;G!JN=8H?59 z?6JeY;CIcNlIsY24m9VqlecyWKB~>!WBGdxIKSW9YoI<3_8N5DGQl0J?ln*uXR(H_ z^{=i}zkA~c`^&c%*>8|q>R9NK4#w{+(#P&MkiDQj-M;165q-v%E$RCig=0r%6|pra zv*VV@?!bR@zk$lCqnvxH<&NENkf3bgmH#{Y4Z7in_8X|}|EKpGbeM0x-#|8q=Grcc z_1dqG9??9m{RSPatew&ywaB0HNGA&?-EMDozjTBcA2!k_kvU;x@^5vcrh|8T_^dFuH%frxMWj)-^u$8PWy6yc_wuq<+l;* zho$C-aX|Kj>Ys?7G8wZW>l!DP>~q?{N_5;(@5=6&iLWEOX9G5nKSodNJD`otYF8{L zS$yL?2eLy09V@?4zOnEXTB8ugB2AmO|73YdcpU>-JdVpjCjSZC*!Nk}3H0-u>E$=V zeBR5PrE|iJ)c-!_^Oa*KFrV@-n2Smup90^r{qB{&VjY+}n#N*2H_6^v+bl9y& zj@S!j*e;(LI0X<3}ZD9_`@XBx}NuO4ei-@4pr~I$!eN`Mb^iZYA$~rmNc_gXAj4PBaInnJL9T2Qu+D9l8zXAj$=tX zOVElRDq3rx)2zSS5gi__>3;X_Dy_nlDy|SO!b4+WsjdL_2_9?zc>AD_EtPK4el=k^ zrv1prmfm=mk1g$JIe{%T>$rc?>US>#8!kDXi5x$LJuwp-c#1K(ymuG%6AMhVu6AS> zhmCcIZu|}B@3-FVsPCsZTAx~VsH48Y%@{r(nM)gpt29UKM~Us{&|m)k3(bQyU|`ME zmg!x78JLJ4={;Y(B8olRdo42JL9$W<-BOXgpPF-`4r zc7ZYdfpiJ&4(8X)7I*#{lrm%MRWytCYfj66?U1D&ol5Y<2LZ%2`LYr?=H77xK!D!qHz`FnbzELhVMrUibwdk)KH$gaPmE8 z$nIfaHH#0zrG73w`b)`m1o>WuEb6m4=zp)_d)*_#lGZxt3jD4Gr6}0vxUkPvT&mJM zT&l3o*^fCvS)V?stbg5fqO8}IQ^lovd?BjAZ-?P8Yh1Y@oC5-A= zY^vtFnY`=UUwcdRpJ#vhGIot4ogj?rOfafRFscg!S&@uYF{*(bCEF>$sLFnNBaG_J z;0`|p&P;k|;uv}I z*+FW{1++stF~E18!|#fJqnn#G@4gvUb)w=>%r^}@zY7mJqq_2b=8_OtRq<1{$iymE zRXX_#@RRta=QE&Jy?HZC>>+IRv3?a|J}?d_h7x8^zUD5Sxg?y6_FHM*)SM~5TEBUE zDD`@uzWnc_N7#&cxEK zXLw^yryuBxTI;`tY5fa)b=|XTI;ry0v@3B7vFk5!=d=aBGoLAU)K740v#Xu!Kg!w_ zZA+xMH!6p2u)YhweVpfnRVz!8+}~Dlp4_tnpP_%(OW-_b@Q&J|Ie0(5yw*0-$jcDx z8;WxT`w`df*n0N3^2fw4%6OFbMYsF| zm1C1X#Ty8wo2bA*1Mh9&kb+T$9K`kMw)&f zJb@X0oV1g%!HU;OFU$8CAx@_{Z>C(ucM{;ZJ6hP=MctRcv*Wx+UIN~qi`Q@3!B+al7YlD3#MVN*AfCLC%zX#qBMJ!wq_YXXevmHgJl zZ++zNCjZ_1HbB~9(l(HG6KShRE0A_4Xgi+l_ z+UH0MFsjV4@c^T`6MUxRF@)b2U{oLTFq?0TQT}lk0 zM`ui>tanlN?kY_eLrYM2`**PT|2}%S%b=~qfYZcnbqCBJ zb+;Tgkynv0*tz_=plq8g#IzmW4+YZ!(Z_I zE(@1ca z4dsZB37atjkNfD$KKfMeuOy%9Svq@56txu3&DK3q0|$e$8UOXVV_13c8{$dsWApG2 ze2(&d7iH~wmmhaTEqZBh`zP^>y^P$kmN5MLWk#S+_atj=6MQoLJmAfDDpzOvCMY)n zEs34blX=0#HetVtXq#V2WQciWz)>T2uhMSWEj8jFW1jo3%6Gg?_tR&&3yU?2DvggR zAN1W{rA_B(h?XSx^q9~Vfi|51k>LKS0r)#mq^|5wy?XoLuY51o0PDlqf?2PzlvaHM zE|+Q^xs9@GprKYYq_J_Tbj*j2mnc*9zV!WLN3KD$5YEIJT zuhACS(xRsc*$V2Xtw$oX^#OkO?%n1c?w5)s;iqR;80$DUSaK=e`Ld}#mRzcQ?;QRN zwlTbIgZ@{cQT?m@BU$K8-OJ}Lt)<3AhiH|I#yFQ%?`yp^kTb~xcapN!w3K-E(z5#H z;!kofR+abU^Ug9EXDk&xVUrk<&i$8M-U9vF-l@lJ~5 zPv7-t^LdcxtdQg;T{&H2&EtD7d!4=hmz^nnSGogUU3n9j6zcTk%=(|z<9ENv^ zB>fGolAjMX%fwpNjQs|IV;=Vcos8)Vt>_D;`1jsRrw!@JQn) z36FG-n8tr_mso<&qFwh+hmHQ1+YEn9i*DT$e)e(N{r&Yx^xeoo#sE)z2k)snm(`{| z`b>4IO{!D<{>gT~?a{D0kF0|~(7E5Tox|KO%bUK;bMN%``Q87Gb1pNv zVd-D#1nv3A(s$kTi&;mXaL2r1EOSTb1M#~l>95Z!&-ecM*x?PdbzpVKxPw3GI!kR$ zz1=m6L-3O|A?BgFpls+h?dO=Iy!kO6CI+o@L6U}lzn58j)qCe(NmDGFeRzzEG-GmZ zL)MV)DTGy4yY5#>Q&#GQgQorL!N|^ghQqD=84I1TbPKx2B%fkRoKex7t(KpIXFto* zrr^GMWQcsLP3p?!n4jUBVP(qV%V)$taBN{KH_SYJIKvfKvuOK5Yb|?Z*Bpv*r?>W% zK6r7jvzvCUo!;x5PAoM{EERf7JyxMLVXv9_?c};v_NL7EcCxoscTR6YKa9+#E$E>F z@?d7L-)KuX$6dD2JpC5t(yHFkyd6TelI$JPn0mFkrk!GKV=H+k@f-KRa1O2i`&Rao z92MQjF=ah^kp5a}v;LAqcCaJ=j=B=56>coE!nMp5hcy2M>xc58X3r>8yfVqZ-SXab z4_3=NgYu+zHb`E%D-9VeX}qP*Io{bsnPFq{%evoLw1>&}By<;s(Ai7A zf2cD}`wZQCp7!hszkSQf5qS7mwS6(Ked}E-NjmM*Z;8}0cdNb3Yx57FiL*lwGuA7I zc#5a{-xW6=<2_F5DAt+R!Dtkc|6+j6Fp$g3?^R&*~@EXVzK)&_j5 z6~q*-EKMU8Tb=Kie5uDAa7{BmJg}4UGl}x;8I?a@x}N>LeU*WoMb@<_4}B9d`-Vje zvV+c;^;(b@^-q6jTYB_ zT7&a#c07LUNX%OAW?H$|7dbYJ(iLX=SzGLo$GBP@2p1Y={*K;c;)S!cmY@uO_`WxM#GjX=V1MQE3{)+~ypU1IA zvA*?rH)V&tv&d8iV~{0r{B7j8L-#Tv59Di3q?jit3;P3GW}}OY&`%3EJ5RBB7>!)UQd~N*EA$o|i_ z=G+a{^6ht`%PB8xCs=o9-N>SyHnPJwl#F;hgjWk&2H4xZc6g$(*3B|j>0$2HI1{=LE#)48Ih+e| zm)3WU!#ZnEIHU+=ql-2!tRHaqOhxW8Ylgp@yr&ehOh;?U>Vtq6@@3ZFckD=@V=x$+ z*SG%E8xIlsdVTAYjPnhi?oj$z`S=NW)rPV4g17YKQ~E(;xe59$dy_jE9e7vVIASxl z%tU?VTHdu8PbNA?X9iA%&d7{`#+cpP5Sg*Gv8hdM@A33jian^`ApfkPNv<_?g@5N_ zQMSe0N*`^(XFO~oCwmh9SkhX+czcy6tCu3Hft-e+r#49}ki1>U?C37mCy=@6qNxB6 zbLar%aa{cpCzY%NUsVVGv(Bxx_Yb#eoO>9B1ts;7_DI#*dxmRgZyH8#otrWyxov6M zY}xKez4ZMYPv-D34uk(I$-anKYhbT;ZZ`6F8RL0@?r*+G_qN9wPdbM<&fTx$tQ) z@2lifTcgm7kHvWo(91iQ4oz~W@LheCUsLXWAHM6}CHHt`wNa+_jO}S%?%i20 z9T-7wK8<_~5hEEQ2JS|MToY2<8^e zE4^cQ06r={K$$C(Tik8bwNy3*v})eG3_t8--Qej3>XJT+7C0NJh;F7o3-CiW%0kLn zL>XJ4Jwv%R-}hSNA?@(bj~%%K+eCH>_UXzj&&)q_O2#mL9zwUBXPUHa*f0zEOWCX$ z@O*^7#pfrC(-4jb&-?{-#w?yDj>jQ>>*P=NPPkZK4s0I9RmK-&gW(%62E!?EkOe~ug06g`YiwDw#sMtE?a~?Z^*zm^*!Gk&Qv;Wyp%RZiua>at|-sqbBxbtT33{r zXWay!hi1^Nv$-=ILlpKc|JY^7XUy)j{;tnf8Z|w@W-2LVrk3CCkWuMfTGv z(9(&0kYoI;0}m5U_BfHG=4}65w6MK)cs+JaY>d3GL6#Lqs7ccAl#^x*{qbX?M^bB` zJ*mCUb1E(9vFW6DR{0dRxSt~B#|&_K4|n1(bYi24U##uNwcg2|8u`(Tr8%WZk_YOL zz4Q2zk{mA<-sQY=w!1IiO=NVhilXebcKznqEDK;1Q9`vstcP*5H zGDQD2et(8CI&+-e$@dLy)4cg3iJ$Ub_-NYDM*3uHC33LJi|H<+zD3lRr9O?rw@_al zeHF6k6OS)F&Um}$Px_}Ov&{J)lxZWc_s|ynd*e>VW9r>Bmwy_w8oLV_uX`DLOZj`1 zKaJCGGcMa0s|CKV=krlw1fi7rfd0xXazd=vYdkWJwty(CC$yB3++#f0oKu-TU}`I(;ymK6n>>qq~W=bD!T-(iHdk0BQ2yzDn96cq#qY z#a|l!E#fafBVlBDj`iP=u~NPT|3fiK#&*6%XKWbF1NB30IBAwS6Q&ZSEvZS+$rwp- zPuWMn4F-B*`j1FAHu0CPSU=j*Xe9d@6(4F!<4Yc4EFi<{+%ud`=JQU*V`q_hd`Z z8OC?3)!1Qdppz?!YkRRddk!YxtM*#!9og5O&4#>8g?{yibcS@p>Y|TP3euMI-6(>s z&QVrg_FW(T#{5#6@txq_BY(cbw|-#luzZSvR?gEwS12z0ZscQ+2|&6PYsKw ziM6X;jD&c^mTb)P{M#7)pCFcM8n^169tOg^%DL=o2~*EBaEQ8#Omc)?Z4Ogj#Gc?P zzlW_TUh*7epwby)o>l%&U)=nV6Ax z^=?q6-j!Tx%^o}&XS*ZM#AuXHbmB*PbQ0TnXx6wb?yS?Kd$2p+g-?OZt_yZmKu9U#rVX$!jxIeY@YRyL`8nSX*O(~uV< zqj)xVUP064@M2n?v@GL-bweAOYS-MyUy8rBlx%P25c?&sz5#rXi^V@neKWW606ts< ze=df-^JPBANDq8H^mBY+Okuag!bKA?NUr_LVq)&n9- z@H_2x&)+dqUFAQ}=C10yj3xSkcQnR%NAVQVC0lAezN35s)nQpZ#H*fUzX85>5&y>S zoq!+SsCh6|#2>-#x3hIKHK!?-p}k?ZPZ9q2YGQkk2|R$=J$CcDgH9kj5BeuZpKvD_4GSIsD^}NBi3zKjeE0 zH!r*JQt-i1blfHIYf$42If4EL=>X+7t2kkN7Fg`v(Z`*clW0%6@~QJRHVeJbLD+t7 ziO;YrUAfe%b1zld^d)m)MYJIw=x2?4`S*a@wi=_=RwXT^D5x#{Uv~xC6RH zA3C#vbg=J}+&$!lXpbi7Z&+w9Z_My_QUm9+zU+(p(Vot1cwn&DBuau3{ zmQwk1bgp3Y^No^4#i8a^{>bn{(>mE%&FRgZwcX!-iA)YQ-yydoJN`BuRgHJe;F5gPXmxoA4P! z)@o;A%W~q9%iRTkFIgy5Zh_`>l=Xb-`T_mYMt$RuHN~soLuJVgqdFJMvtQbbI`>Y# zBiqnIJc&9x9el6im)(e^xnpkST+%d;nA|lHF6CJ-$T{ole?g4d^zLXEUntKcQ#?!^ zd@e;LlTNFKUKxCEh!?w8g7qUS+eM&>Zq;Ro_uB zb*{gLayT0*i2EWx*y?jip;GRx(u+Z?SF#+j`rNMdCt@HEkoVHZH5YPU1m(|)=rcAg z^=k}=jjK!FK?j?;OUhmxv{0yYW{6#-vG8R3@dN9H;YjKck2mk5 zZ24c|r1aRF%8&RyeS+eDb1Gls^LFCagT!sjWX8GV*<;??Y(nc~@H%1jHb&50d~YF$UZ}Aa~QU zbztp@Q$sg=f`?rdPnKwNjQo+5A1jq@`x{SAySzIzYg6o7$WC%cDF0>B_wxMI#Y>3| zXdTIjA0$m}&5g0W&!OH8W9a)ic@B;F{vzKskH5gvo8!@swe%b3x~^_dPjYvR@in$q zeI3OSB}<#CevSH9e8I1AKS=t@YP#;ECH@)34vR`=4g1R;UxnXq(|2S&VchLL&RDD0 zn1HT_q2oC|cTiW;ge~rTutO6mZ#MTk;uDl^<~N()UaQ~Y{u^?56rbTDezQnBMA}Bu z4w5#LG|8!9Ex~4*xuqqlBNJlvlH=4w7iXDj`Knmed7i1`~C<(Xf3pO?qa|6V?O_tV(uyjJe3!8W*q zwqh3?HVT|~iQGztzruIv2w|ayph@wFKRkWxNOy_ylj5ImA3sQZ*rcClg$CRhaRlks z_E!0h>!NMmvp3p4LvlG!{?bOpFy%K*KYhTZPu!5z%X$hiCerph!~@W!W*&Y~he=+e zcy}~Z;0`P3IfRYehmCyD^6w1&#f$PW{rvCX_vxyKcjJZYoOAhJB!3VKxr;WWNE_r` zFSg44fr`I=0om@PZPSZe-2BcKM|{*=(a9L=H0o(5Yg6_mA;tiF?r}d&8Hz!4yv>hO zj8yINJF&|rw{&w(tAAh&;`A*97)@1nHO&;0( zviZ03{S*e~9-i{8BG_=kBFH8)Qux5gMc&jHO|w33#O2S4e(A1-v|YMOW9naD8$A-> zFu)wdgm($BCj+fRuk(@ly(zdmbsD^qf3g%li;u{0Nq1A*UOe9S|J1fLZI^E{46Oxy z=I<_i0O=gv=eUIPB74|x9h@5(oEfQg!_kXbdt<(`S$pmUXV>%5Lg}ulPgEY{Gx)no z_^O^#gmtMi`EH<(gu}aTJ~7KHE_=nUt~p1NKK`J7*3QbiTlZDQVh|S5uZEF#GZ~(& zRW0v6TTd|?oTlZ+u?)O z>&IX!4%xgfT!nB6A@&KV?U^azv&s^EE3&u16e(+`h9FWTTez7T-RuilgASF8WQsdAvbJV$=^#;*dAbQI=$-y-M3llxvgU zD?0@iD785n$W^kMS8|mc>MtWN__e+)G+l`{=3hX=DbV1=46qeTJsgYDg~`&Ic$#up zGxzF9vMwfmoJ@-_S>HQ}mWgjd%W*tcm6lCaT0DaIueMkyEzZ(k;1ay^E8^J-^4D7U z=`rTLLMbc0rRmEIVW!6G0*2gtB4z%vnnswY83+O-mvUr5}kLJ!u zatCekb)w$QFh=FCMk#xk*hTQWL2LqD+Z;{b;9Q3N2cG0mz%R*ZEIIIU3?2=%uzsyE zSEQe;3G7+TyZAY$n%I01(yp7w-bnZwtM)-pvBwEw0*a?EqKvcfc^6@~En<$VE$$Vj z%#mMCdn;hv%8OIjE%Zgg>35TqIk58=v;mtrRS2iZ&z`tS7X3P~^T%#?sxAtqC(fCB zWyx2hxaMGjvr=NkFm`>|9Vop-|K;FCx|DK$T(O+HD+8sy;4FH}vdwc=4*QMYu|>O~ zX)(H=aw;MAPjp$(k?L{(ZSAomO1GhFVG&=3Hs3_v+w?h=a~Gzx7K4qOg)iU(7qy~X_)`oPXp zCN_%vP_0u8)bDdM$@=nL&?g_Krgi08iET`Xv2G_CMcY5aEB)rh7Sqc~FI1KxC*&QD zz`uX{7P<#q3;RCt->{!q2h{pU)S^$axq}0bX&qsC8J`QR`BF#eUm{Iwk0Y~Jcsvxo zRCPVXoQ6+^t>@bhUW{A*F*cNBcOiZM=Xj2d(7cHL8lfK&+(Ti~4=UI2p52v=l)rM; z7Wd)Yz39sB$~}CKVJ~Ps`7I9T$Mdv%MyyNlB`ZDL{&8@uEDqJ9+7C)sWZ7IHSNqOzMb6CeORK|0bN^Sm! zm2nzVR)0Awdh8*u{yU&^lVWPnqjPkZLtnm5wn(A$5$4Vw+R%->b-_F7L%pv!auR*W zIAhGP_Zr_s`cX2Y@sT2yW+j(Y2I_aavOOc>kG;>U?@nT2YU^Zd9JSRKt#H92Xt<5^k=c?5aAfi)tq@@*;$7TbtFa)xcN6(E-V`fP ze-E_2L>$DAmBEXK3^5LrN?dJPimXabuaKPP)8(s>Q>E)Y#iOD~G?`!$u&XzsPZcA;=JWk##b|^b z3iO}wLh?a99a3bRB41jc6pl>#D~j&-+D8Aq+De_!p}5LBC_C~1{-C|gi4?)7litO9 z!b)gvAeIq7N}NJE(ST>8gYYYtE)(~Ur;}R4T#yXBxTrG<1)*@!^<1vqLA=;%oUm z%sA5+_GFfPlG)mp%NYZgmltQzzd7cG0_*Zw+EnCo%PL3XLj1eQs&l)^-$j3hIfu>f zJMQ&0PD|D=|CGE15DTH6W3hZyC>lPjD$@~ItB+VB)(H9JIno%UtaKax#*m4_YC_)wpX ztm&g~z+@Sd+~xSJ3!zPNIUBtf#Pk1_UpC+43=)(pyJEHdUx zG1C6>8uVAn@52?Ww+RDvicMUf{?j_0Y2`SBufO~nv`)`ZUs`K=w3EDAPaB(8Wy%*< z{t@yA>v@X(H$tOyik)U|p$(p1f{$bM(tiBk8uQl5c=OhVce0iq$@}y0xcq8IYwgzC zeck^L^rh(3*lbVMx#X`bqfF~8>0a~(F z=5NjAn#1=J3%ebj*eUV0tMY#8@^p2I{au#yMWK{QPI4cieVW_7zG9A}?ZguL4ry*D zy;1Y~K#RuwgbHJ$p14`F@+O&QW2rt*zjyOp`Yh1#TC3S2add=9=#z7moR`Y@8*Lu4BnbVsRRB>AH=9v^l0o$4kb(C%Wd#O=f)X% z-iJr8epkNZ>*XVmrH@ON(zHFLI3RZ}kyo+DHt*T^+7>$~8Bko|gj@tNk%&kp@=>0yXj|=S?UYqyN^AGXF|(r z+VAx-{h>bAJRdXG!q;>uR4kY=?0nx>=)vz<$2qpl`SdHFN$1QN`g<9AKssjn2Ts^I zmr&QN3iPEEf9cXX75B8Wj|aZpVbr;SeKS>kRJCsg_)Ywc5d-wcO5U?`bXU(?ZQUIQ zZp<#UMmXy&jU3;Rn&hr~&*{F6!x+}Op4RYWqr6kJ&_9MDJBPJG`d(vC<4(T8wq4?{ zZ}YqlUTh-Hr8+Hmc^N$MY?jnMk9NhhMzE1hOSa0VJzE8g!fM6bJUXpHX({oxMtGg0 zoNi)px&u}ih79-CNPh+SI!LRl_Q?~>qrarDwT7X2MzKWlhBYpIJi_Ra+FN`*r@1K2 zeDf4G;8%F37JF3ulx|Mjb?#2mH3!~*Y;>b{R}6FrPqcXS!^Gi-vs zkb!-J9rXQgs&BpZnbMHCk}-oXSIl|m?x?>b%&n1BFTP=~dnNrdNO^YA)Z4UKnFHZv%r?rQbfFZi z5guLk{U*hFV@3{J_DOi~Ec}~WIh%H-t1(@R&yRU=7Oi6@D~xBvWnQJm<2N!xKIvAi zMM_^vj|OF5T52d}%(-Q}a{xYPS?3I+J6WUleiz-|eieHQx^rC=?0NJ|=1jFi<5>LN0dK@d zZ(l$Ld`})sL;+tqCp~hX$0yZMNZ;dbP2J;a-AuX-JH5fP&+-HAIco+L>x^%wA7x)_ zZI?`}P2w~24z@@oj6EA|9T<+&CdspSBCM_WGLEsQHf3h3J)D2L;`_1MIhU5@JC9&n zYcD)&X^hWx!?kvygwJ_IYrwjHS+N@J0Z^YQc4ye?uX)049B=a>bkEOeFY!6~lB_MR za-ZRQp(uM%T0t)w#3PznS}8;cuk-1KX>{zQ!>!x0XS| zmBN|7bEc8^1K3@)t?w&KztucII_vx<@q$^Dg>F5pHb*nuDM*>ZD~_|SccMnGhYz}# zccZ)`{%GA^>-Z*g$FpmPYwVrFajVCfn7r539ssSu$X-p%knXuvdqLtlQzL?$u;=&O zSq8c<$CxZ85013R=JYYw5zoe+Q<82QYh%A!&BGcnccNbEmBZcyu&_S8`>3mZ=mdsM zc3ijxY?rsT>C`lLvwPpzQ?n_Q}AIXb6*>6GqT{HuvJp< zLH1xx_SxYYV+pprWMHf3C{uT8%5K2_B(4{?tzEi+>D*AvLr{HhTctAR`M>gSTc&t zd$b4j#9k49zERwABKlde4e>95E?-62d3>Zq>ylyF?ulK!ZoZ|LSOk8xhi~_I53d(G zw3|53RkC#(Oe;*$b1S!bU z9@NC#if}u5bdrbbBERO{khR1)qjk{3XG^}O6xnDDCzlv) z$-1cILu31PXhA+`;~V$sYU=Nzo~|T&9hs{&kDAYdq?64O83Or z`y$&Hdnlgdv)((K&kx(*^YX}snTj8%@zYqm7C)>|8Z>@JJO}+wto%yutGNxklex^p zFlju0ZwK}li6h#9+_+bk6-k{txifIM~k2zCoGzKW4u;YgPSF(;4iEEq(1 z=h-{SfnnwS9P}!`+Nil+^vYI=AR|M_a1H$&_=MYnIUawoNwQVnf9O|Nj~-b>etzQ| z^!u?l>$u18gdB*@oA^GK&$ZAxL$sm`CgK|y*kV4dtB=Q5gpWL#)(=AK#4)r=*1jsf zF`h;kE0GJaOLRo|EcvP$!3F`$dd!LB6b0tFkhjtX7 zXKxaFuQ=Z~R7{k0#%YQDFaKaYU(&w(9`+Z1g})H`I+QK6s$L_vQnrp)cLIAvX|ij= zR*%OAo%@%mV#NkXH&Xt-ETt*7s#qiX>0IIV)XoTYXQY1J@QP|%*_Rd9Z_)I+VU^XD z#ZJkwPF8IGlY{EwtkF(}-H$~Y8>8~#MdfV*f-rT5iwlY_>sNSsl{2sT1aTjKcMWCxDkKSed zA#AU34EP_id!2tM?kn{jr>7g6+t?V(;1j1=r$}K#oSt(+KTMQsGOL|vdbLB0<7M;O z+;Af8#X#WcTyLLeurHgsk{-`<*shrqyg+Zfju+py_Hp(B<+Dbrn8FU|FyUj2I#o~K zoCoz}xgwztnTDJ;{N2Rz@Q@oY$U;UiS_)+XzO-ZGHo-+p-Xh&LzD zzi&xh>ppC(!N*pNA6=K?yvIYFzeG9Gt%`Nde33dQpwGA`;PCp^7d#v0J+wE&cMIKQQPwY^Ll_M04U!M4F~5+py_7%cgAM#? z><{u3&R%PUCj3K|g-bJK3wi#M#$SrDkzVH6TJo>7FIRdybON_k`ZxF^nxq$NtwQNn zj1_-hZoX_9vIFteC>Dv9F1Y$-S*>Tr1sw zD8cyKJ4a)FsfTs2c|XuoZP&3siuXjj;oRd+Lx-r01UNj#SSg+K_n5U6nak2^Iky?y zPNAn9&C%a^-a)U)hulugMe90PAM8W+KO-ybL*CE&{)v6a=T*l{Ep0vP8GnpmV>Typ z8{kWKbssWgnzg?$d(S(G{deY?XCCzS5Oh`0X>sip(jE}SW<{&vu>aq|Mxo5K0X`I) z;%$Gmw5&D!7{96geY9UOWa*W#;p5;F);_+oC&#nd^NpvlrE;Pu`TJ*RtGQCmc7KZ%;MdZlgm;$tYN;KNcFo5C_{66#Jb;2Q)krfshC!w^4L_v z(>3zX+K9V%rdfw)F3~*N;o!d%uPAG+TKlB5mrAjCaAfZE6nzYRYZ!ybZ>ixe??s>G z%8#|3>MH-1^Yhpwx>ppO<@q_dP<*$Xji@X{qZxp{){%?>!h!u;kCjBHV z_=d0Jk5iXtdq7i!K6{aU=eA-x@KEz$l)T&FyW|+%jvV`+`TZh|S%Z4fQOsdm+&#P- z*xs8y8#nf&3j*woQGCud9WdBdzb6w(`V1#2ZaUBL{c3Ms3#FcO6T9w4w|7+-;PEiO zC3Y?4`_&cciO87Wk%@S8%GgiW(`ohET;^9!e zvzv1(cHg{`^Lsp7hrNI7V~aSPf6w~~!#@i}`Z0_wg;MY?Lw{tspPqa=M{~gHbq36c zlfP`L6SkK+A!|O*r?~rTZ%I1t_#UR}dn#up=U?gFd^GChr}F-sH-1<8&C`d_9WGLL zw(#IOo&CWW?bow7uWaO@CkJhXDt(l1QkP=>!a={E`E|m@HzVisDwcKKgyu_FTROc^ zUw>Us{nV9(QgU9QUU9G*gL8UU`1>_)D~$fq9E9(rHHqtiIp^M+G)XJ+_y7NV)|=0hbIzP+o|$=O z=9y=nnR!mZQhfJ5y!+t2&J^rR^5c7{u`y)Jk1yZogJ<&Fn7M|qlozpy9@8R1W z@am3i&L#_2{!290QyzH7_(r~;BaiC0vpgQ2&%2zqj={MP4;(anB0tK@RB&rN{$=d5 z&rcAy03C74J-aAlmf@YgPi@M%?<0d+)A%gqRG8u2zMJ|#4G*U5Yd3ro&9Zd9m07yk z?EClvw6pP5nYGmNPy1yJ-Lg9jUGYz0KL0X3{(XTmPL2*D17g^ohKG7hnJxdE=-}{X zo@Z5|54!C`D&vw}v{!r{OGi|G-qybB;HfR>GUQ8Ph6i4GZzfOk(#zYgb&`?gP59;Q zr>#)l=&16(3JtZBt!=cEwDQK2<-Gx3W)4b*BSY?G+#9s}SX5s2;Lu(;8`7^fLmeK> zYTGoJdt?8>yC|1i)-g0=?!duipJadP12-RB+RhrrJ@9xD`J`;B$J6%gW_|M3Lq8%t zJ*%ziT?@}wmmU38;c4*U;hhKXAP=@L@NISSVSHM%p9UdIyCom=1^J?0!n>*aH_^T= z9o5~}p{3{T{glzQ;gYk=yN%J2Lun>3183&t`nn_v#4KI^N;Twt<7|xr(=gy7K&l!uyRq z+}JmbPdem{#@~zz8o~JHvaI841$ks1G{r7 z26i$>y?JItGHCtqa>_4zl953b$e;>%4P+yKm}49xf4)Lq;QhhVJo&@kJN6rP4Hj;P zAN$F(m$r1#0<|CVkuiV{&hw`|9_2l_``}+WlLjTn^3eO#o^l87HM09&%A>H%3V1Yd zbN}7E%WKjafTfWSP2C&*cy#wcH}AolpgDCgk8eR3{&@6u8+scJfBK=74S)WQa=H1P zLo;r`|MOMoWLrOQa53u&W!S5;`|)9QqpfF+6SG$DKKP%aPnz4jI#GC>u(`;VsSocu z_z}rc@}h6bAgk}4tolZlhS7I44o=`t4Dr5I1Y&Z;$=mSRXs%{s5 z!pdFoL3KH+3b}g+b5xHvUfr8_#U5{Rx^__~@TN(!%*u`2wz~~)uy@Z_nCS~`H}n_6 zx12WQhDZNyXz1SXX~3rWHl_989z#=p8cg3(J)5<7wHqsk)NUN)t@xE!(LOi{S#&Ao z$>Mp5cU3z$Pxlq}JK^HDWY}b6^{40`@+YGD%p4$$zIrQRw-A;|Sy)Fja>a?ZFb}xx z(BrI~6r-e#c!@LiR z`5D=a7t&i8kF)ZiRe>GGA#6EkcXZ|n`8F&+2NgVL$__)CT=N)bhl@R($)>SkIP*6A zH}THRhc~Pj=uBK2&*A}j`I6?eQ`npSFm zKQO>tstt%TX2V;5eG(%ZYYSgz?SQi7w+uNhb&&s8Z&!Ke5?^K3I;_&sT29UZXwWBe zp_NCQ&qv4K_*XLI>-Eb=Wp4mnj zu7vg@7i2m;2oKfgB;|u^7FYV?a0b_xnA5++T7dex=0j$#=ic#a2i~iUnH7~o-QqQA z=p2ZjR=#t~r0ju@awcvdt5Q5Ccm+*AHs{N(Os#_nxxv*LxoYC*u^pd9ib5<|&V6Ww1{+gYU6Twrd^e zpz9BwBmDlVpT{{bornWHnuH_FvUE-NN3LTavPhy{#i~;mNRY^TG4= z6Y-ZcWM`KB!)=~?IBly|-h zNaxv>^L^fv(r~e>pYaSbpZ(t^zT(j*&v*y;oU1coJ`L$;+M|*^xN}H($fR$~`1xA= zGk)VG*$}W(45@A5`SPV4`l`a|KQpHd;NNNAore@YrD-5b;gTU*&r#TP=VQR$m(-5+ z9pKzHd@pOCNSm=W9Il|h@x5uj`F87}e%2>4;Js{f*)Bl)U4{+F%23JU^}}bw8~WM7 z+xh0hl#&6y`K|eymDhe6=Rlvl3@Z)AF?Mv)k-nigv*^dS^R0*}#FYD{-NTD!FN z%k(e&sL6}+l%5x-ADKh`{5)YJ%$ovFG^#}d2ZkQNCbHDC z2WK>?ZU+ulb2c!BGmo3(-Z1DACm$Jy zOwo6&mSs3qe6JB(MD(u*r(?^c9Wf6b*ge@f?I7bb?V7Vt?2AV{;HQ{9H|VhW{i~4q zBlV^)f~)w{`OR9_%V1A6x@%rW{$t9^u-cYGxwjIQ#r~LDxBtbdh6m_Bg!wY0gLGtT z+HBg+y5TEGPibAk^HS)l&tx8;ukh^~*(h&l;~Q9~;D4Y@Hs{-4)P4@>K-tdD7qyO@ z^XT3|#Xp%e@@1>dADGQL+ai7ceJAm5B>w5|szeU29@74o@o8KlzY3;|@SgHHH){|5 z3&sc62I+wrnp^B6>}Q@|E{)N1y5N1&(O>11F&4lFY&|!t9ZBAu2E9{GzIEtD@Kv_! zoA#rhGY=rIr~D&j3+^49R7RfiRjwA!jot8~)(IwM^bam|_8d~&$Gx|#L zC%GxvVKJO(jGf8ifmoLdm;YoJt zx(&Q+=lY>a_@%r^rhkO^#wR>!WP!8%z-=ZE6$f@6T23B52Vccgoi%pAmp=%}5Y8Fr zN)~9G(3xY)^IhcSVan~W`Reb$xpXY0j&vVW9#Bb$q8$4GYH9m;1=xJx@J3C8A zQ)LzZ^^X2vV^zIlFn=OG}-S ze>pmR-%HNmM_-yfb>Ay0^X#ep=IVOSZu0pVFZ_VHW@a3DCG!+uHc$>!0v7{8;3{Az za2s$x@I~NJ;D^9L;5SD+8iUXPW&`CwC2%ni1g-*h0=EJ8178Fl1%3z|1b#DUXk_f% z|9Zx4!2Q4%_rI<(Wb7Ou47eZo;(!Tr1}W=V)Fsz#G zolloOqIr{Kc5d0X56!99J}&$?VlQ^w>ks`0eYZbixuiL{B6}#q-7_RTh_P`v^PFA7$kgHAd9vfj(vxVb=u3yQ zcWO?Fu2g32(zIpv&)j-wd;h=xigPpgSELW%-@1Z*ZuGn1tp2Y2-2UB;XbV^Iru8$= zB+d`O*Zg+6n~g5tjBeVjwm&l?I*^47&I8Z*^qcIZJRy;wDnHmj}ZPDz68W%$_1{bb4^{%QZIXo-(1@25R_J3V?gLQnOd zT`f6)zl*Y}8Px5m8teSFu-_fXVm!vC%6C_%v<@@A<*&+A!ui>5}l@D z@_R<+6!sVH8<^QS0WUJKJ307WpHn<=P;Ym9%-fB<&$cPGrw)$~^drO9)uip0_wlno zK1t)yc=g8|fc+kffBBrhrX5Y8?4qrGE5*>&z1~gt-YNWi!fCe$i;0^>-DIZKO@>!D z@AmR^hL@+=;Epb%`iP&;9(lBUc?6wPkr!tuugbG%?kwFkbjr7&OWyo)8$KMca^U-v|7(odJ`eo1MWRW* zKfoSL`c~Gde!0fz;}f+*^~;NY)%3ew0Tjo0ysJYGATC=KEcv%lz=a-_GPhbEw% z-hMs--jT8yL--vwwpH|o;XBP4r>5bE_1Qd(e`g~*m98&y@(QiYxyi%r@Nl<`kuT;4 zN&eQdS8V19@HQX6IN9)VJpNqGy9{Tlli_eiNxB{TAhcH?`+)ZAGw!kXf12}s+U$=H zO?w>KKtIqpZualcmQTV4UXE_(`;Ae2wHwi3?qT{*=7C!WwVz@EWz=|6>)_{;u~Pdg zM&k=tZB6)dJp6k0Bu#dId=9i5nQIgMK>H*vrhiO7;E?aj zho><&W)A~v0?uLV(T8gQ>h~}m^)PGjhnE270gHjT0DHO)I{@~w!x`*5(f*apwjUkJ zYWmTk?8o;WM7|H@Jh}Jaq^I}N7p?#NXp=Lfc^L94gR={R{hXoVdmpFj%$W2`zP_;Mogzc)tuPY{+xUa~44AI?5-=Zop($#PgD zf!{|sgO)+Q7E|BKBl=O^B-2LthAX<2r#ELI*Jm!K&W~J=enk5yYhz!G*FMCf?526> z^S2)QDt?gkyj^jl);|GzE|8&49`j80QscL$|EDh=Wqw8-@oli&A(yf5>)d~t`Ev#L zk8t0_m1oZDws>o$%vnV^R8P?j4Q#O#r8o?y` zU7qr+cA4S+^u_C(O!z+od&bU#lI7yR_R+JRLj9?4{}ey60|&LHVDS0YgYZxJ7WL)f zi{7*Yd{YKIl~?27nY4NFpaUKh_w!wP`btLslf(LUyY^u{$oZ$)13y1>6dN>cn6l@Y zvIn@Q4L>E_B$NAmuHx6Js(aGOgTBhFHG}gguTMkeR(<(&)^SfiFmy6JI%dryjYc6f z=8mEyde*dJRlb&QVdCxUG7pwfl zm9C_9pxpjD2H(y-JQBS#Kk(kEt@`g2{xIQ6 zOEk3}$^0SNriEABZ{vSc@!yo^k!5 zjrWU>twX;DKb!ZL=($YmS=S$0O8osZIh#v-=^f9A2Jh@X&%0R9xBEPAE4>~$F>;@$ z-o1-d_r9@ZtCHspWBU5Ac-MrqyU?Hf(eyL$|JTI*MtWbb6mqA#|} zw>PF0tw#(TEHdT5=2tOb&eCaYk-S~PcRsa`dlu>MqztM*mBHU@`U>w}oyGT<*u(uh zuGN#+?M8X;R9VTR($N~njcwYOekW@V+7p3XWL_XyGL>}s7U`iWT$PW>%7+(^IW4}6 z#rHeR+2<^+Q4{Blfj3^Ru3%4fzTVw=h{LhOrLM`B>PJ3)qNZ%<9Zh=<{RjB$JvDVi z_)F6ca_;1$sm^}(oM)dr)oH`RviRIdrk-^U%&pKqW6mu?L+34M>t>ulUcanwm@3Vm zLsR+vnWb&`CjP3!~Rl+syFD0LU%YB96 zq3!DxtRo>a`2N$KhaTeH6zW8MIg7UTAkQk(?<)S`rB4m8=QRJ$LqEc=jn?1J%qIu@ z)W1&ur#D`n1^;Kkf7RVC_%Gh)!guwVY45Q7R6D4q-gWLmY1lfUyyQK-AKgs4>O->E znls^)=jilx<~u)XEBb!mPV#da^`^ckzRrTDrmo==`FmOZU;XF*;#oG%)0)&Ketf8u zv@^kTD%K5YO+a;|a`up}$|gPUQ`GIX#Iw9o{WJF=&SJ{=9?EC^2-14IhgB; zCcdlCJKQ$iuh&{Rc7NR)zyEnThb{tej_MPnMzIuDKg@Zj=_Jwu0S57Y2@ zQchWQCM6diGO~+gEo>jmD&K{j{f&UJq(@vA9&EqLOSEt4&m+M4()Jo%5k;OlQ3o&tV9 zd{X=J+m`y-%L{GWQlD1a+6&Io&!IMX?ZEmVv1@AI`i|A{w1)a$AAjTUe$v(cLA67t z&8~$ym3RDF^5`DreYVBOsZbqjF0K6?l37hNkqvpB*P&;6alY@x`CeKa$ve@lg>Pl6 zraDb{$1KM0rrPJ3?2}R5ORtju-si8i-{hRene42xeZQuk4C|YDkJ2t*XHSBUt233~ z_i$e^`xN$3E{ltP@bU|3xX*I`n1}nchf6;(bkQwdek2X|%iRB+hx?F+D|@=~FaYj- zX}EWC|B#2f*Tc>9aPI>5nl#)5_xF3aJsvLOkfD1sxRBhg@ z8t!85Z}D)8JzUw{g_{8P%rx9t-1mF9(>z?+J%x)M=jGSccD%ZHmHR#q_Z8ZY>H@vg z;9d#t3u(B|a{pcr_h}Dzs)ySG?jvcqI>#08aP@sn(Vgbu)`Cl$9KI)?Zw>802GHI$ z$CP}Yby}u#X0GPl)biUhok!N%dxhVZW$(XCcz?E)=X*|Nr`cp$E59D@Tfx!qnOT|6 z0T1U9@Q--+FMv}q$>O{^Gt+t8yRQa6H^+wW2mb}`)poU}{8B&sYSY=H_2yiL&NwYU@JM2GO~ zGU@Tn=DR>I4G7=*?03O+`Ui%ek0OiqA>Z4G*Tfk~>;>A7bS8SKd~#=_tEz0UfwK*2 zqpjFHk&UtmRoJ@KJohHU*H%*o|2(bci2gZB*}%=WGg(v6T&|uo$gB-4YlG*~55>n% z!AGMnx|E+V`AC~S3QeT#0YBH?%h>Z^PD;$1w~he@Y5($Uuwa_8_o z#|=jkZfB$~+~K(Gk>1{5xI-@%@UAc16A5;7hc~-(f;~MJb4MuQ#`~htNGuWR0LLSh zB0^YuPj@Jsh`W(aH__D{_mc~4?~W&U?W{G)$DMWIZkA9SClYCI3~p&j#7Ig7+8T<* zyCY%8-MFx8oWw-nYdBffnXsIOb)IMkxEj6_s>;fT9}TPG2TP;=oO zrj965G!!OHSkT_(c67%=?TJWi2Y9MN!^-wph*}bB9McGB6YjQHcS3CR>bbUYt*N7J z!B|+qtBD(5(Ad-AIu5Zr+|F2}*B~2;9g%RzX%B`~)ZWO}kWa=j@kpmR6znk#fqS=P zVL44<>7pfzm-0xPDs$Y1Af=}*^mg=wTWMn;x9kWfg4@f>7PPd77px8&p1LLNuJH74 zLAz+h6Tw8c33N*$3U-Ly8j0BC;<0wa&iIaaBGg;DIo#J?x_#-Az>>wTAfbN zThiH7SLK#$c1!9MPzrdrPD#)D?s!))+PEnci-g^h`UQY+AR^qV)%BHYT2vN~W6P+A z1TBP@ZujPJBxd;B@5N4qcAw;Iy7_sJIfv zFzl)?MG{>!XY%fMt`+VaGCIdALfn0yX*#w*@%O9Wxyg4c+>LWe=D6>(Z{P1;q1Vax zE=_b!?;Q6Ucg|Y#KW_eq%>QolpI*z`E#`mB{NHZ=2hIPe`JXWVo6P?f^S^42Yx2?S znqP^#ITQ}XXx0>>gZ2j-jWn~J-*MNT5T0QN%-Q17DCjt@ZC!{KI*=PbhQ=`h(hd1I z#EES4q@{WgJocrG5y73o_7F6?ef;ildru!Z@1l3n5>zjnA{{#r$Dz*d?WRM;-NN>= zBFF9VYTx2+4fgbfTmeLO>=A94JO=J9}TNFRO~7bMud9p9a)kH(b+mQ zkaYC5n@*rQaong+GnIB;v>xVw#p9&!na?Qq+7v?CAO8CDYUBEy>|KP{15 z5Dmtx7;{_va4!#3t*KZuj0WTJQ12!>Z>isli|Lm=J5mi&H6M)kmR6aj32&>$pr=L` ziaAD_+M&*I-Gn!y(tb>zLR!1T_hpQ^*RyE@T%(b=35yze$o~;zp368#gDqA!m$-4a zbtk%fF=g6f+(k^$+`^%bv9W9$f=&|8EsVyxx2oU4uY@Ui(Q)E3HuXekkTG{_cf1?c z9T%VWhmOF|%-{)U8A#38UQ9Opve+=2Kk)&6>A&jR)uyRW9TnUN52sRrZt*Q(meX5p`DY^<-TY;am?8=G6} z8d?>`rDjb{vs2&Lutq^GHLXr_O{Int6XxGHwKh9V&5czGZ?36oY_4{knuh8+$T_Om zzPRLym!db~EP!S@DP+d474UaLo zo?GHHhc>G!V?LEjP(4CKtZZ(syp;E=YG8}5JXBR07160`Y-kblsvCj2_2Pq5W7S7p z>sIrwW<#Cf@9M^8M*$*I*8;3UGUhe3}|n zOU+5XH`g@PR6?V1r0+AJl2dvjd{d)Cv;8fq?~{Oe78zn!MH!O`v0Z#HCML_7A| zwy($gdVOtWy{U)FRV~zC6a1yF;0^3_8mr+w6|=T-gHu)8Z0SK)X&Cx-mzjLkHB>p( zHC5DMmFX8X8|<|nwpTSashK#Hl-G_(juQxI;3(W0>FzMH+;Vhm5NDth-~P)DQ>0dDJ$_^#;sC7;hd>8p#8msDtB(S^?0zPbaBWRU8_ zCBoUvExT#>rQA!jxx6oA_-54h)KAwNpfu(qsn9*pVvW{<%3;E)7OV+{YmFMUHom#o z?e27UMEcNk7>50^F9sPD1Nu^|*bR1cNImOy6A?&`j86JzcXu-3?NnCaS68x+1_E@e zs z9N4x|I08EmsIFNp0m{#me{E%50}QbDjXp2@lAChT=FnP&znaE&Ay-;DG*rl*@D?Y) zU>yh`*Q8^waOn+tu3p!~fS>}Idv07hDeoPRiOz+t-XW2zYA+Hk<*nZEj5foyWF=v7 z{TE#`Rd(Fj-gP;&mV5UrxnF7Tr9eW~DPz{Zj2m~}3Kw4&j(d%VTjE{MwbwvE(yq`5 z0X1~=JST`!OB81l6Xh*jMN`kJ2y@kFsAq3(rZC!9u&*aUe`5aHWAQ^YAHB1EU02Bs z=J6;Yiq9NJASKb+9IJ@#(sE$s|8*@c37Lxw$IPoq+&WSTW)$CO2OoaGW zPU$N7$Q3=Yy-T(hY2>>4G1Sg6_@GOQ?l$I?x}gg>t3sPs^-y@OElkjznsA4Cw%0N} zd*R5jRm^jUSF^o4;oUmw!5y(WJ13%jNY79jB`YPFRo8Yzp_;j8^s?g8>Np4@wKw$v z+wP3^MPCuFMjhU1;NxYwtPKQw8NR{D-auf3$eVUlveJ$O?zyy;`K}39dkh5DtgCFU z_S$KCUo2+Zn-^Yb^Jj2Ohn-IVqTG*Hb1^YJ+?tEQ@Y}Y@pJcujuqp<4l(V^Ejip&< zqAZ-j`L6~jRZnBSh z{ZCyUJZYU4Px2^$!sLk}UoZ5ViqRiY9*oK={UH#LW>qLTmCS);*8HM*yn_(swQW*b zjH&w?%OkWj%Zp1}EE@P$yCK;2Ei%^;p^T=ZxrMU{mz|^V!V3+*FkU9a2gw5Fr{=-R zT$RbnT%siVe`C}7WWQ=`TIEz!pyx=a@M~;pvbI6`9(LDIdk@1W<7)>qu@g!su$?}xq1jp~oH5@aY&6SFCE#{Mm|PiyVi55oYeIXd zqmMy69PG976jLzSF*xm-uOP$DS#b_Uk7By9_BJz5Gx@`;fVm9W7Q^goX1=H(k(kV* zo+(@9#wvrgbYe8gM`OpG7!8>&t{FRq+ZmBL$eQ8CN|&C19XOTsa~7QA_IAfL!*k9l zPP<>0c3+fse?{8;`&0LgtCM8RoF(<7xm4<@HSPYK!c_comcdXzBk)Igfj^KU)*Fm%8QB6!EEa-As@ASZ zAGYaDvga_k2F*Ovzcutx5*ZFcSRKY}W3*hRs_2JmFqAW`Ov!eb#F5n@hRSGB=}&Qb zf_c<>LaL$4-oiXR=whvvX~Dx!A+*bqM3kW0*%vmJGPOZ0N{q;+Y15Izk#NaY*=miR z?VHI&cav5`q_cYYp0N#snrGo#KFpnoN@XAu8h02-6cW zCc<8((Pg_oB1{8_V&f8Fzw+L zi#r{d7X5Ni;UTJ973jzDJEX9@G9|H6?a)s@*`k7eD%6b3mvLH#8@HwhXH>kdAT7+A zSDBiq#L)ckEjQQM)$ndSkoAVdZKdHfHjjstmN!$lXtbxhUGiFTqOdOu~U9FbLYXTQ8-zArt_dl_brmxgCMm@u7l zkCRTxao(>`V>o-_vcy7~xSIJa>(#MXw~_0Ne_fG|q_C#{Gewpr>E}1uOT?hGvN9%) zU}d2MSy5_OKPJB4?4cojFj;@8!QZheF>T1Mm#8r@fLH|ODb>rQqG*+lr8Fk$R?Sv7 zNn*r}Hl0Fo(sh=Rv3)y(QMg7%vuZPgCd>7i5v1|25s@LlTUVZr86JOS;Qb&Ys7=6*BArr~<~Hq^GP@PkE2b$`B<)YY^qN|Eiz zO4`_g=t6Nb==qHzIRcOKK1J28jkvTS(M>AZb{yS729nIi=5Iy2dKi^UKQKds%HP2n zv>oEmGlXb*3nojl%7DNeG=WCscs5%@#$P>jwuH3oEydHUEVl1Z>HN3elCjblJzw*d z+8mbJ{GCx_#58GnE4j!ItB#PT^jI1RkPKMg+`^9T_!i_vPtUt$AE4iOy1Tb}kTz;6 zPu^|^Z)_j64Z(8D4zb`SrGUx!$b7}k9vkf@QomsHmp=*c3aMmA?_JVFHszI<20KZQZ=eD+K=`W zj0o)L);cm;4qIHVW_ynC;(fB_BRJI*c(y%Bs^N%WN3tJ#>Nb^~NminZ5r82x-qqb{ z?2V>h+0vzxbM#>LTnQnr*akCg=1RNq=2*!&PKvpOWimcT-R17W^OmT-dxPyvf7z+w z*=gB`VRuuhSGKb;!&o;aqKPc<^Wu?>xk8@BsUY>~_?$?M)}2%TOh$^Hh=x0( z=t!}OUud=l1^c$M+YAl(7*blNARpb{w1xgdk288yEW(}=NRN<}sZDgND_bk;m$_`0 zVGE^UTcoEWPy0ztxYuzyWXkAOpYjmlfTTp8Q_9j`X`iMN5wpHxo+WwVjkyoodw&LN zgd^{Iw0KnLTd2*FmeamH7$Bz@TeX`)c2;C@K+m08Dsf5(E#1@|E@fw{LfPu*u#vMW zU@{wMX|1klZpLP7(oH0^4C1V?KX+BIeG7{_?V)9?UU@%?nS8%Cgr!7=v1kfG?@QGj zOSOTZly`BbAg;e<1%1n0-Bcn=V#XNSRuDgjX#}e_9SexKoULb3Hym3rr=Vlb%Dm-f zd&|l^$K050F1)$AZw@R^-XwxO-o4pKW$#Og#BVtYg6-SdB9n}gyqPd=sh9flLaqMG{TlGkBYF8iH^WU7)*$3_w;y#wQxhXp5u>ZrNl}{+4hBYd|)_lw{5Jj(7Zbr3DL>m zTLe~NZ#2OEBR2UFi#Z(=OMUO;<$(Xq|aJH(HP68f9+kE}UrW772U#^4fqg18EU<{`~pwX7m@n6?{e@1heH7HQYIwHtZz2>mGG7m=}3yje!GjI!Q91S$Bk z*P+`h58f@w*~PRHv)8VJEnar7H`(v(px?6TSlnB=X-o1!X=q!A15R4-hzLm>Q84L` zcs(MbaFb}Fn|v67HiE!0aXMq6&{#Yf9j?+SjnUys(==qaP#wyQ$Cfj6@{m!SJ(fwS zGB~id2-$4wK#>q>uExO~yeH1_XqfmDq=6Bw$eG~%Y_%^XGC^4|KhY9E@^Mo2o)ko; zdZZ+%x0S36#scic5`%*{FeJcl!G&ellx=70oWrVDI7qjXRM*RuWm<{!pOzPDeZ8oV z-g8VZD+~lS^>wpC77p0{z<4edL)xotv9@&=yJ?NDsOa2@dmKxj6C$v+WZb-(o_t=p zF6Ctl7Yh~nFgoK_DnyY9ekqL{Fv8{PbkRcGv2bCg|H6zX=W0i@$6D<_QD0T-?X{!V z=$1yNQaEwls;PNRBdz259UMbQ3V-|>KLH$fA^b?;9g{z&a8vshb<;H2yx14Cg`L|v z#tPrs&9YAKi2gjHr>pH*9QIOpxDyE)A9oX~1low1CylN`wbLSPXc_$?yh&AlY@HL% zOk^}RJ7$smV~T&%bfBY@7%Pq$QhIyG8&ghbNKqb9=>ihyra2Y%(g^6OMKmqb=v;OP z%quJmZe^h4ReWP%VR?}ml*seKD;T;;+&`lK*}-m}t3-VfP*$Y91*7|iYce)2hsoX_ zk!*69`O~|-q*9^Jv~=wOwwPBVySWO=PCIHt{kk_8-(nlGZ670X(@K17BMEOpP>gOl z|IfHkWKzF zI#C(zd=x`QYfzhFuy1S~>O|W+veq;_5`?9u#*RsKbh6_sZbfc^%QBl?MD|4#I#W{k z`a?PGz-R(vy-TVIk{R$7+++1pAx$jZgkklZ5rS_-Bwxh=k2OZkt>MEWr8}Al9-qb) zZ)23vR~gxFTvK%sbFJ3Kra)6=HFxZ>G7tZfKchMEfK9aaA64??*SD0;uv=twPg}p}Uko5A$#X^f9AvLDn zoi>mxG*T#~r_j9rM2ZYq??zN;P-f3`X9Q7tYy*E2nWm-ts!6(zA&mif97 zxP&?aWE>go)7GTHj$)`48h(5X&T42L)Apw2SOzr_Gv!UUwTPb#3yFZ#BEwsuu{mEy^t;&uO`sV%FoDZ> zYH%$rCw^(m+RFO+Mj1kFIGUxJf#}4z_v|@5+V|dIZJq;`NC1OYz^tNx6OggUd!ab? zIT_1;@2BEDW27Lx-cRo5! zU$1tW)A-RF%2|uJTF0wV9Qbi&v3q+A&j%POM&L0y4PaOHHuSK?x$u3auLTlJbmHYY zc2umpg}S@YO`C@JD;$BSTR87(4(bQAfi}KTgMZ1&?vCwOm?=VP-jW`Hjm}pKePeC)d)k+E=)fpJqx<#Ehd<0MziX6Mvw)8voCK{_#n?lNAP&c#HD zhLxP8j*K>5ELDloxss(r6-BU1B_BTzVe zK95~<%icuW__Oj}oK7B zVeB{Yh1?Zgr~`bE^@Pnz*O*{ai8A*p;s|Fd;H}C2@%V@Z{9GMYAEO)OQ$Y0TD^GfqLri!-rQ884O{HvarlrTmYSD&ypTe5s~M5D%e0J=R35z;_*EkmEMCptJI$CjSN4)&RJN7ysBgY|nk zN%KxZU=z@`l#R~vf(~=`x}eJ~2)PBuIl#t(4!kOO^dEsd{3J7%FIX_&q{-FH zm2~#;Tn=NG02_f)cA1qXdZYG+%@nFUaMs`;WIa}0ylvqAf``=sO}uIwTi6p+SJ{G# zHO#n`>#FgA!A*6|s UH-W}=t#X*57ne3vuC1#ITvAhck)GMB(_Gnnsin+wV{;wO zNs^CE%{BFnmDR$;d&p|}{NNUw@g=0SVZ9#KwbTTJ!{OOVGSOI7Szq0#Q}env88(yV zsz7UVWmOFaN?R=ThWZxs787)1{rZ4P5>UAu0s^=Nsly|R)4H}v#q?*H)YUe#T>*}C z1&sp{?h;*Wq~wa_KW?Za?%lpOxYc{zy{)%bmVEY8 z;QLAE!9B{xP7n@7%zh_BWvemWi{92n9p!vpf;~^w0nX4;=3`m9s;;3r(9n2^-g)<9 zR)xo4zp}h}c)YK>qogCWsc$nrMKC^8alqS}`9+Ui;_KGd1TLy+Zm6kOKD@nAJL08w zS6FEz&PjlfIiWBAqw+N>AEWY1Dj%f2k5Ty-m0wZ$6O|uP`45%f(54Wu9=P245S1U% zKNgg)(Z8eo6gCOiOFr%dUR*HEz?r0R<;ESCsv}*wG2Ec5(j4pO(^JB$qcZC!8oEDT{48*a zNc=}$oa5n72Cs~^;HQ^%*vjWGdXuk-qdL)ojg7Nlo>N;o%*)7 zpLY5g?>O_F?>ft!J?HGX1@q1+ESi6Aamj+xvhszC7N57|{G}HxyKwo6mG7>oTvdf9 zn>Dp{@42XcZ9`+z#mz0P>(*bg;nK@CUVg=ufwthLc1|>H?&^N;mY&{lBzjdWp6J`U zZTpU^-*?UXuf48+=dRs*uD{^}H{NvfEqibM;D`3zcKaQ7-gWnf@A=5Re|6tSKlbr~ z`#7Rf0!q0#4%fW*~!!I8C)vsUrm%}f=@~{8) z??-;~AOHF4f4%nG-~IRR|L1i+_>v1V)wgujPxA3J;7mR6(>wJ;$+T=h{aW%-GD~r$ z08+T70vb6adrk(X18VE|MRsNYs<&CdsleL+z5!s;Ih`wx@tt=7O7oq-yMVI*7nlvq z0nP^I0tLW408#H00$Tf>4{+4aDF!6tC8IfF=+K-T%;F9vZ%6HKF>oFrMMAz$gWR0B1@YG4ge3)BJc0WJdSfwe#b&hJ^TN}l%2Hpo;1H2!&7Pt=R2X+FxfZf0z;CkQ&-~+&oz)ir- zz%9UD;8x&+z=wc+z-_?oz#YJyz+J%Iz=wf*fR6z80)GYE2YeLx81Qjm0JtCc1n^1V z0pL@>r-8o)9t1uEd=~f|@DT7fz~_N40Q-S20$&3D7Wgvo72vDD-vJK;e-C^O_&V?i z@DIQ@fNuf^fJcGHfNueh1K$Ro0KNk}349lL3iuxIH1K`kAAuhL&j3FJegym&coujL z_zCb+;CbMmfPV&l2D||L9QXzBOJEQ<2n+$kz>B~k;8(z}ftP@P0S*H%1Fr!83j7=J z@4yk@H^6@Y{|USb{1@;V@LS+_z<&e32mS|m9ry$A25=Nu$CexG0mYu{(%ybM!$CK$ zY?iA(pA2%&^8@NxKFPqh_5MeAF#kI{`xP3rRPY2Kq zM1VeEJFvm@FS|w-TEMs!RD|w$#QE)SUwiGhxpQAT>9yb5-)mF?;hk$%|7Ym+$nr<$P8`XKsV)d z-cI)(jvk%n-I+m95uM2ynYmfn)AOfzL!lQv{|pU}-h<dXtjIP>O}_R=S&7I(~^3Z1-9MpxwB z^wH<1T)FCfQy@8I{|i6Pz468ybNA%0$|e5fYmPiR`2!#Lz~sq&O_ND#at3_J%9@-7 zBXYACA+sh;&&rxQeb%X`W=)@-byn6Xe2GB63>E4ubK4J{qn{%&Q_xw+(|0`kgSpGs zUuf_$!JTgKDunlaGARaTz`(oWkJav(cll!`E@5VH&j04lum12I|6M?4RRN|QG5KwVp2Fzk{0zMdD7;CRFh50i0`lkaYP5{JHwZ4Id#SI za#J?&r110~eCW=>&piF`cUQgbOG;N^n|J@_sekGH*Hxyxgk|Rt?sQC@dh$J+&$|BQ zi&YMVUHqO~Po8nlj?)bf#23OUKHoj#?v|Gx`PoHXrAk*}b+^6!?Vrhdbd%wW7v|*u z{h3uO&U@#S@2$91>1KlWk=n%BhhKT;KN?r& zd~uF*gzK~gInIqG;Ba+TUK}ZPT1n-+`#rdzI;U@K%@UcF%w_ao!9ZD5noBrccrK2guKIpcZ%u-d+w( zXJwA_5YNwW&92IEp1ojXI*CXC(|=SR%$&k-w~k?>n^ zMf)5$LTXlp$ShmA1Ln8@3t#SHOV{5ZU(hhuY)BkUFi_VR@bj#_ZswCZD!0xKLoU%lFCz+roscR@f`{kj3&cj|#(9nb)*)&oD?S9(`HmjMgBtL_EmfPVAw#L~_7 zIV}O5b9vc0T5|S+wzVs;UZKn@4Tl4r(XP;T@i~AWXYt&IkoUsE&fdhvZf);!uPxht zerM`XNGG1K{Q3z5{3pj@_vVOS*{Gk*AtUQ|Xj?NFcma(G{apPq;ek^pC&z?r@WvYx z_AoB&O&c4kq4E4vw9n(voM@c!X}VQ{HN}cVA_<}@aTYG?AUo1v@+e)1@);S(d@1{{W z;weWK0%i@oQ@&`DEOpesPNdJCNdK}&V6~5tV?>-hQ!1>Cdo_!FENnc61lar?V>KHa zhFxp6j%kFOY9n^7xA7vg#(hk9&Dy5cOYv&Yg6`M|b@lZ%Ybxs}L}{pMT-#J%(^@kT z*6MZj_5Nz)w)Plbve~3&id^-cxR=-H1p$qZlxkxM`$t&Vx8m5@)*d&J)VN3BnYH|5 z_Rq2LRx;YdG-H|0V~rfll(t8eGhN0nDI4an+iZ%5NsN~!i{vpCqPlqHEc?C1Lf2ju zrXSO_>pBQ~U>WP37vwr^XPb$kd54Z{rkT>#QyRN@W&SCy;wk>p6{&c7>BsSD_^~P* zTIvED7A;s@QhvdbrKP1TiZ`^>+wXd4a(y9I*X>v#zk*fnKb=!D$}$=8~#*#=>Dm@q!K`w;ibROGF!eq^UcaHDk$Uj2g_7c9877A|a?&>VHmOwV4l#cyYZ&El+jO=;<(^0d| za9vIP>WmE4wEcO{nuR*veTDATCh`Gc^4T8#W2dxUkn9)h@QK8S9^~y5r&Ds8!!eUY zmyct%^~-CF_N%i)mBZlJCfVl@9kn+`bUS+RR}<8(7uFF9_)bt7LD`?COetg;)qL7V zq7erbMMjS_;oM5;@pZ(wcUV;W-V1vAid`K#(Rl|xNrLw}g7Tc8SP5MdPoIO+8-GJh zFo6>SpGrYo2^l=k-$J}^lmC(=HuKGk+c$f6>%r+;(G>NKI{AB%j8-!GiG-G{h();LH z3fH*vw(iQ(Q%L$zGvvGQ9?CALjvZ9Ee0JGtV5~^bKW)Z*l@Omr9s1lyxUdM90e+b{ zlq9E_xPxu)^JWkUyzaXf&>M zoK@-#h;r!!6Yy+`w?scuiVsPiwbr+|VyA1jlgZVU=?D7i4SEt@)9eN|ue2Udh`z&S zHC4hfd8p!~PoPXWt!E&ek>=C zg6}k-9WLkyaOlVALFY>e81L=*j>jnD5@tb{N9TfL$Y=s8{~a|wor@L*n(-aV9M4cK zKLKQLUB8(w!=q0@+58^9!zTxrX^&>Vp7(s&_B{1w<6$KYCEC>y8}Y~yp=IC|%TYjL0Ki_k;AmgG^hV+&uRCscwm#&;ma!z8YEAkKRGXBJLdQv~B( z)b(5?@ufG78Ob<}EpFwiIyi0ekP25|lAiaHcsLAG8=(3-Oorr6CSV+ziLZ7#ZC9_- z((vg_kR$Wuy_#0-<1?R75V;(2>+$KMcNSwvzR9?J`x_fZvnyKjd$?KNyQUb}aY_2v4?R=!at z^+UeEoN)$Lr?3b0uE(6#((Y$Zaa4OQOZGQ7yTZ0y$2mBX#qALr#8qNta?lfF>&#_>=0eo)NtJ;-Pyw-e8d_*a=rvGeI38pa?-R3|9CsnWP>dPycLouv96W_ zp5J=4N*s&E@hrt{RXy7P`GBg&3k?FJq`NYN-cBJTPnmosx+n|B_e_`$F8WSSX|AS1 z@J*5oqq*QqF5rn0q>~1B5VkOx63tY6PE|&F1D!NLwiIi(Z8DOl)+O~2qv=p+mC>Fz z>=5%zFhTH@$CB~|=d%yT_|z&fAr_&0fiVqPZ3+9&D4%ucKIWB_pETOxNY}RZVAPgb z9VK9}0(_ETOCQ1hH;?h$0K1HmMUzaUt(H04HU-)Z#l{kHWg1A68@x&4kp@U z#Ck=gz{q}^Afm+YJa$wtZDPb8V?sE?3!bM&tVGThq7nFV!V)z;89lG7d;`dTDSMb1 zo{T)O&ZClLRA(DivO?dZ$hC#l_3Y?vyl7pMMj!SPH}Qpwnue-N`8ZAL)tVN*@S?51 zRTp^Z5DL2w2}0yjOA;eCs~g41qdqidyM;xaS=kS2=`g{FL}E3OzphEVRKV z(BIs`G-7OMXHa0Q*ipo&!af##8`cwLD8jZjq!#%1%qGy6tT)^?dI z$8s+d2ya6jHx5}wg`_;m5zX`$TmJz|Ft8mz!#-nd&@vZ&Lvq(PF%yTq41Li68X;qN zUuyq@DV1@~$FM8<`lY>Zs&9p*urVEHwmS#=FjFQw=tYf=Vzezj#M>90BO1)(Nb)17Ut(c&e!$?5Mtg*>bGuTPw?s;MSdE+LB3Y%YiLPpxHRlkz52LvjHvJF`RM8fZm?6Q z`3$nN-0MzuBIQj|=v#8sNAH4X?0SbE)QdW)=i1oHD&dUiqiQEMy;M#}N0tez!PUnh4sU64YFH_{EvXjfO857D`g+dn#MgAqUtg8gP-V(x6g+>-2vjz&4K!6PT%5)o zKi9_BuWg4^ztO7gpkV7vHKh8dB?LAhBBSjKSuse}H7=^rDKjV^5OD>VsYh?Wl;O9Hs3$P_%wNEypOj{q8sKJDE51 zczA}U*lPMLb6n=KBkBu0tn_9TQ(GA{7rqYAKBGS{G5-Uz_TPf=2lg)<1>q0xX73UR zzd0&fQHJwBN3*z2cK&d5y7OBQ{&4i&yt|I;QRkmP_@ARkv$#(F4*N6+JL~7{?~t8{ z@S~ipF=~a@FMNfYFb)W+H!N2B=d&}`2_~PS+scBHK8x2|^G0eT!t=yn}6gf8jv!k7qre1?Vb@sH`lV7K!nqO@?+ z+l{V?B{VJEOyhc)3K{ofq%Gf+W7#c~JIG?uQ~s>IcBGCs#!L}h<=WVKk`l&-`NGMt zK)LX6rRSjHaPWs_#5pO?7KPeU%2ZPM3vWTwAE6vhVB3O~m^?Ojhs90hMY@j-VSgYt z!n!pLjr#CzDLPj-zF5sTsj2y>fpRkqdn-h&L3PwyHJtflzR}qx#dMGc-COamBs=*= zD(4D}v+*vv6JtlXW1RE?9mcS$NV2ywI0mq%kJ1q+mraACWadB#ieN};lkrDM12mt> zW-hEC^IKQdvY7I+ow}sFY{}v!r6$1Pf62Jvt7^uGQPnaIsTApBlQBt_lxt)DqA_TW zcx^M5qGq2PTUN8$SI*y9*-gDYZw&IOw@b!&dx`cb23qw-UtwQ7jG*;EEAq8|r_PuIKJxW?RMk2`>gW2_f4zbOgFio3xpcnGF1IsLf_a{g@QOWhiPOXHk23MC>^1Xy)q22tY9H@;oyrV-Q<8~7T)Fkq>F1U5t&AxwwH`XpJ)e@Glh|~bRLag^ z(?qG5=f&K(_zK7;^J3|aMeSOV8-<7Zc)nk562V_QcuT?>nEvNT9}q+5gAe3vGNR(C$dt>t8R`79YtykS|jq2l!If1j;3YD zH`5X|%IVuL-k4`4NBVnj>XH6ldbVRQOI8|dc$M}gHcng)n0Ku; z^)*ek(9-+0HI*&vnrqhbA$C31VFGQfTU}RGDc1zbE9L?Ny4O$7$Nha}(s5BnBlvz4 z-pu*^lOd)QH7lC|lmOX)ewhHf+syuMg(?4-Jycjc4cK#2JUaGpl-at58FI9iCtDFS zOSud5eEcPKIUDE%!ab&`(tm_x&KWA*2rv^^0Qg+N{F1cKC`@_G2cD^#>bz1t)yb}z z>Ks@-)tR;iKLvn(&vSiI_qFH(KrPS&NGq_K!Le5p(fg;o2*d-WDL(jd_3VRR-^aTO z-;aO1>+xv$@BKWS$aQp@etvWnJ^!kEzs!D^_&wh5&AuCp-bAz}!uR>%UsZ2o-TUR4 zG8Qo}?9IL#i{wPKCc+%&?Vq=9X%%?ft`{RWxzv&=buK(=Q9(_ID`_cHLpA~;}*hJ6i<(vp_ zym#swdS~Y{=5T=aW=M=;lI+8y9L`k(NNI1ROP}J5i=>GU3cl>@>9YE`X=n(YI00dJ z)K4JK-sn9sNe{`RdfYtvqyNN2eXJAD>sn83I1XJ8>%{3A6=Y(f2IWM{k4vZH)R8bw zJb#`>G;t0+q!Z0!Qni|xY7*^4>85FE6H`t@JW<*sRlbSIkHk&!nmPMsxeG&O4yeys zmDMS2xwIufA6I|1a}7^B3fN7B`V2ypPc>@wnA0k{PaalLAJ#4%yfT}4f%bqhg<$%j zRIqtO&62-kmioL^0JE!&H5pw=mhV2bcUerunWybkJf_*fYQF{BS)R&|0s(XJq0EZxj%%yxURA0{!2R}LE{qg~FX zo?v*3L}0APu}80hJ?sWk-V*Oyqz{qzFnBd> z#)fwdK7BrokFT%WGBuIb=wBf`8EnB`2ebmYz~jxt1&V=}F2-jV&;(=y%bO@OJkl7f zGD=6#z2*?70ZRe>#Iw;*rx&b=rvKPOJ>tibYm&CcV2!J10ix~y3jG_d?w<+Ll1$$E zJQy#ZLiF=GNTL56kj&gMH%GJHV2xTZ`juY}|AlxiexI2{92xhGqt5Hp{qKP7Nfhtq zc(l^vsvV@o?@zlow-eDiCN2t;+T(aXf6kz*e!@+bF)c3q@qgDD#I%1CfO~`8#Cl&X2ZPKUZ*O#KZz*zAV zruXSTzg*+d5pH_C^!q=Cjvud|NIQXDz;0j40PhDRQzhj4ft|o#`v3ni#1CoeE@MC9n#p z0;+);U^TD?s0HeP_W&0G^}t%70cZr8fQx}6ITIYc`54q2yrJevxlt%7z z&=?E8P54^~Gs z)xb5twLm|x3)lnP0Ne=N4D1Cy27tv-&;X=f01g z?k;V8m%rbBzn`ZbzRvlazn}B}9_|6O;#KUz8)(DZ*p2tF2k&DqK14e{Mh8B{K75A# z_#6lD1v+sMhwu&L;15L@dLSGTh(upRp+BNA00S`ygE0gS3_}b?AQqz#hcSr9I3!>K z5-|};n1sogie$_{3T7b{bC8B~WMBa@u@G5UgdF6-i2@X23Ec3Y1f}p|IV!LUmADE% zT!U(?Mh$L6E!Ln8Yq1WuVLdirBko2$?nMJ0z$R=)BOXB$wxSu2V;i2tc07X?Jck{4 z9y{?8TJb7&;SIFmZS2N-*n{`67ayV>AEN`GVjn)keteDt_yV0ch(q`WMmM%U!q5Z! za&bd`m3SojA`1NxjR6>lK^Tl7a9|i>Faog{g*c2sJjNjb6Of3BNWvsc##AI@22wB! zshEQ_q$2|hkcoxJ!Xo4#4^9-I5KG{O2PG(l7t2wBRj9;O@ZlO%V>N1UBWke*by$ma zxDD&E0UL2Q>Txd`@BlVpGaB&-ny?kkcpTgCB(~!jwBR}H!1LINm(Yq=u?ugY4R2#N z-oqZekG=R1?f4iS_!Rr_8TR9I9KaXo#6cXwH!#B3{@|@4qX)tffk^a46#63?127PS zFc?GNz%ayM1Y$7?aTtSmj6(t@AQ2Ohgh`l;sYu2Qq+k|OF$ZZ#M+O!k6AO`rMaV%O zoG3scmcR`UN>BHMH!!@YJYSiFH)M5?luomlZ8`fh3HsWs7<6bo20c^r% zG~y97VJn*PIJV(QY{xTb!E@Mw=dlwnp%t%U7v4Y{-o|dchdp>7d+{OK@i98^DfZzr z?8oOgfG^OAgE)k5V035uBMdzdjtE4eFQU*N(HMY%7=*zX0tbd61|txQQHaAB#A6&1 zFae2}h$KwHWK2aeW*`OfeVA0tK^oGLfd$CKLS$hPa*zin3Q&k8aKnQVl){VUsK6>z z;wt!X4XUvkHMkMASc5vO#X8)E_1J)oxEuAj7Y%p-o3I&;cmz$@ie@~HZFmyf@eEq< z9CqM&?8HlG#jDtbH_(Q+u^aDU58lUKe28{@j1GK?efSLf@i`9Q3v}Wj4&fUZJ=p#T zLl1-_0+Hy8DD+1(24EltVK9ckfnkWj2*iS4k#F$p>kavp_VE}8ezmtT0g2#Od>j0F zeEF5$#$-%IGWgZ^Mha#j6?2e=bYx%wGO-X@ScDwp!HEJCVhP;vpaiAxVmT_X3YEAD zK3s!ptVRuPL@m~!4r{Rvw_!atU?c8EJ?=#V9>6ASMk5|U6Skrmk7FC2#CAM`7CeU? zcpf|P5?b*pcHs@Q;ce{3d)R~bu@@hr9Ur3upJE?A!+v~@1NZ`+IEX{|21ZY|Kf=JT z5av5@Y=1K5-|};n1sogie$_{ z3T7b{bC8B~WMBa@u@G5UgdF6-i2@X23Ec3Y1f}p|IV!LUmADE%T!U(?Mh$L6E!Ln8 zYq1WuVLdirBko2$?nMJ0z$R=)BOXB$wxSu2V;i2tc07X?Jck{49y{?8TJb7&;SIFm zZS2N-*n{`67ayV>AEN`GVjn)keteDt_yV0ch(q`W@_|1TVd#NyL?9A<5rzJU#sCb& zAPmM3I4}$`7y)?=c@*LxuOP=`91<`AiI|8aOu}SLMKWd}1+$QfIpDQqBOMu7fJ`hz z7UUJ>9OS`?0u*8i-0+|TrSM`omsK#p4;6~J94eGEK^{gss9`uL#Hv^^hVeOV@ebPMU5A!*nv_7TX^1M%)r~P3* z`;*q^wfh~-4>Uj494F6cXvS;K)JzY^dD?Adm3F_NDbJOpc~MiIF-h~XraW(w=C7La z%t)HQY0C2oY2+D&H1eE6nwK?S(Uj*E(#Z1(X+j-l7~M3(G`nl|&z_STHl?4#LN zGfML~&HkFlYo4GvK=UNcL7FFP4%R$HbExJp%^1xQnz5R3nxi$xXpYs4*E~~myk>&t zIhxZoXJ}ranW8yUbDm~~=6uZsnip$kYF?tbQ1epFEX~U_7inf|=4j?>=4s|@IyGII z1)7UB3pI;0muN24bZait^k^1qmS|qCS*ls4>D4UPT&}r7vqE#F<|@rAG%Gc))VxZw zO0!OLt>!w-U7BxbwrTbs=HH)B&>Wz7qULFu6Eu@FotiGqC7Me$cWb_@Y5qWqS%t*- z=NGEkO*2fhyJio~o|@sBy)+{1S(k#$itXZg8q`5?Msis?VnWjgx zShGa)a?MiBGEJ{$x#n`s6`B>AD>YYXUZGj3d8Ou6npK)U&8s!9(Y#i(TJt*1)tc99 z)@a_Kd86h{nzfoYYp&7!iDsSVEt+dJf2z4o^H$B=F^(bXg;giqWLS$=QMwzxh-)X+D`GMwM&EIQ&sQHm*yXGG> zKi2%CW{2h{nxAT#FF(lr%5eXAH&Qc7Gg@ zvqtj<%^Nju(yZ0IS#yo%Pc-W^Z_!+<`BTkxnzw4+rg^*Odd)jDH)!6exl!{j&AT;! zrdh9fkLJCa_h~k0-mm$9=Fc@ZX+EgAS@R*yM$LycAJN>R*`)cX=2p#LXf|s;run$$ zFEzJmKB4)f=2M#6HJ{deM)O(C=QMwzxh-)Wk^Y??zN8bZHi77HSr0F40`7`K@M%|4Z6NsAf0KFwO3o zJv4i2hHLiHjL__@8L8Pvv#(}9%_z;|H2Z5FuNkd*g606t6Ez2Fo}@WQ^JLAznx|+E z(L7btp*d7@nC5AkF`C0QM`)g|8LK%`bCl*8nsJ(=HOFX<)r{9XQ*)f=c+CXOvot4Y zo~@avd5-2p&2u%AG|$tVqQ#Ge)CTmXDoS}JvW{T!a%~_fkYNl$=)|{g` zS2IoXBF%Kod72rT^EDS}UaXm^d5Pvi%}X`2G%wR!q-lQ9OU^rOA?ArERI{6Am}Ym) z9-2Kh!!>(pMriidjMVI-*;lilW|Zb}n*BA8*NoOYL34oSiJAj7PtqKud9vnUP5vsp zS-&Bgr)oMhhiVSfJWVr3bGYUR&C@kwHAiZW(mX>mPII*87|pSo@tS99j?)~knV@-= z<^;{NH4`<@(VVDxu4a6mus%jtk7Jkxk~d2%}UKHHLudF()4Lw zt$B^+wVKtM*J-ZSyk4_L^9IcuHE+_a)x24Ajpk1@>ojlCT&ww0&2^f$YTl-KyXJb$ zJ2W?F-l@4!^KQ+bY2K@Ozvcs)4{C1Kd`PoV^AXK0noXLIYHrp1g=VwnW15d^{!(+B z<`bGvX+Ev_jOMeNEt=11{#x@ln$K&#pt)1?Ma`EqU)F5Zd`0tB&DS({X}+%chUS}^ zZJKXszODI==5Eb*HQ&?xt>zxh-)X+D`GMwM&EIQ&sQHm*yXGG>Ki2%CW{2h{nxAU^ zNpqj(pEWuGv#FT(g&Egk~SjzMB0sqco4x?5}yeX0+x2%@Z{TYM!JyNb_XP!J0!f zPt|m24%Hl{d75U7=5Wmsnx|{VYL3(#rFn*CoaSiFF`8pF<2BFJ9H%*6GePq#%?X-k zYbI)*qj|1olID4ulQbu5PSKpIIZZQJbB5+D%?mYCHD_zi(VVN9rkSoePcuVvzUBhW zi#0PfFVS46d8uZW=4G0TG_y5xG;=lcH1jo`nl8-(&BdC9nnjvRG?!|+HJ536G>bJ$ zG%wdI)hyHWYL;s**Ic1lp}A6XmF5+im6}&-UZq*3>C?Pg^BT=-HLEqR(_F22y=IN( z4VpJ<-lSQpd9&sk&7Wx2Y2Ko_R`aKt>ojlGyiN0V&GnjhXl~HFQ*)!{U7B}m{!Fu8 z^B&E6HSg1G(7a#s0nMLlZqj^EbF=0{nvI$dYd)g6MYBosQO&KIztC*fd`$Ck&0lJ6 z(|khnNzJD;w`)GF`HbeXnk|~Y(tJ+y*P1&tf1~-l<_nrTHDA4pnr~>nsoAFamgd`$R0cg-&}|DoBb`K9JT&95{MX@0Hw zjpnzS=F3s?xmjM4q6yXPrWvN$U9*Q~Pt9=6UYZe_y)`2>`)Kyn?57!}d7Nf{&Eqwr zHBZnSpn0O^K+Tgh2Wg(HIau=)%^{knYC1HBY7WypO*2MwxaJ7W(=}r?M{17JJVP^1 zbF}6d&9R#CnrCW`(;Tmvpm~<&1kJNG6E)A#oTz!OW|HQ4nv*oo*PN_5MRTg=G|gnq z>6$Y%FVIZUoT)iW^Fqy3&DolBH0NrjXvEEnuVH0noBg7YPvO-X?iq^HA^%v*DTd6)AVYVYcAJZ zp;@81QgfB&6`GZrS886RS*7XIyjt@b&1*HQHLufLt$Dp>jphxSH)`IbS*v-o<{HhP zXx3@oqPbS{r<&_DZ`Hg_^LEYkns;b!(7aP~qvl z&0U(WYrdiRre>SwTbgfczN5KY^IgsNG=HnPNAq`@?`wXbxmWY|njdO@q}i_d2hEQ) z|ESra`HAMInt#&Vr}<~i&ouv{xnJ|InxAX_P4j@}-!;F`{D)?z=9iiWHNVn4r1`bx zH=5sS$~8(}zmuq|E z&ckF($1Kc78s=dEEI| zRy>Ancnb2q_lwvC*&XCP?mu83{)U4H31#0vKSbk1oD2tIa5~OFJSJcw&chVUz)YlK zF48d{mtYa{;6f2R@S*}&pbFKv9yj7<)L|Xg<1XBT`>`1hqY1yj<9Gt{UEyc(YrFvY zj__+}!@H38mOp~LtNdrk`^o=+yptTlLD3z(&JhfLHJ)-o*#_1O5bg=l1WA z_iW`i=Z1w*AN0lX7>FT=!6?LI0+KKlDVT!{EW{$@p#V$ZK`EAF6|TaysKL!xi`%gg z_uv6MgeE+OC-E$H;6=QOH?bSP!-x1I_TjJi0$;)C&i{x&KSbjs48duL#b}Jf*+{|^ z%)o_6!+b16Hk>Ge2W6f4tf9aTZHvsyPz+Q$3UEdVK^OeI1>|aE+%6dW?&{#F&F8W zk4#*OMaYE{MOcPXl%oPyp&Ig@p}b#s8{~b$dm--+%6o(IzM#A(*aCSkP~HcW_W*Z8 z-usjH{p3AAdB0EI>y!8SLVI$~Kwm^-5F8kRIGl;Ia1JJ6DrR67<{%vlun>!ohXO3c zz zzU4i&Zd@dLA`-`808Yj*oPn{BKW}+9&c*qdh6`{Z=3*W$#-+$cJ{DssyUT0|i|u&&Vqy%33h=#LX1?>L9`ZiZIgodm&WF6mG#&B|(}j@tmo9?5yL2(+y`{?_?=0m*-d8GuysK0Uc~7Yv z@{ZCKkoS|WhP<0}J>$14s68Fa4+u1COm{k@F<$`OFW6E(Sl#&dAx{L zyoNXM7Ix#ecptw3q;&rs) z9lVF%VJ|+y$M^*M@E3fJzoQdh;TweT;UEn1r$8dm2T?d418@=s<5Ud8aKz#ajKP^m zz}c9H^Dr6HFatA@in&O~d}QKMEJ7}vSd1lDh7y!vIaZ<)Rk#M%p$0c$4Q|0Y+>Q;n z3-!1U58y#GVhgt7F>J$Acm}`14!nSu@CtU}O}veFu?HXEL;L|9_!BNj!}f{2I^W zMYQ5Iyn(l{8^6W-_&wV3M|_GuV?X|eFYqM};ai0E<@iT9dZRCnLo`mrAe;gRPQwU{ zL>$Iq9L_=_&c!55K{77DEX+n4=3xOYK^C%+2Nw#l6dqg-FIHd`u7nTQVl{3+Eq;Qv zxE1ShC+@~QXu!|084sfgzrf>o0^9K{p2Kgj6EEXcypA@!gZJ<|?8Qg;7@uGt{({f( zcXZ+_e1i}k41}R4BG3m>I35FV5(eW`48w55;tY(znMlCdn27T*8PhNWGm(n9NXL9+ z;!-R^E}U45C0K?Mlwmnmq7qfO2G^kmH(?EK!8+WI4Y&*SxDOBDK{R3uw&F2t!&7($ zzrqf@fS2$JcHvFDjd!sJAK*j$0Uh`gKEq#e0RO;2d=2@fhTYHuy%33h=#LXH5GP{@ zh9U;1V-!Xs9^)|q=O78^V=AU21s7rtE97wk&q1vw&T1j$xvH=l2Q6n}EE3>=)i`Le`i-Mqx~;}Ri#)FlHr^Dpq=!kF9$y?e=*Eb{Es%KK;OMSstrNrNusP>9)_? z9nd`|V0h`a4=>AU?@p#$o?Tmwbg!~HNM}H|)YWR_dAHTr%X6$kGTYWZ(bj&It=(~y z+pWpl_s@T~y{qBu^|iO#_iKCkFl!-5d%Fy8AIIMB4BI%ek66tZtA&*IVBPjIhi&+r zfc9YB_A)uft;T+g4y907%~-32JYQKw(rq7B+NI2D99GM}k#bJ4A0Kj@&4-j*jU2CY zU@yz1Tb3~&R%4afrzht)tC3-49Q(Sr%IxQ|#nuR9%D>TGXd6bB)oSeRsa7HBwzW&W ztVY`H%a&&KATP4D+t))^?HLR&>(V}7IfqO6Y>b4}*v}VpDU|vwvwD*D{!?w`_H}DN z|JmDR8LVc8)k4ZLSdG2TMOGmx=Ps*}^On`vr*9wLejao%uytJ-PrGzmjf0kP7>i*2 ztntpGzXMj|pv4+5SU;JTOfy(Nx$bq<&zj!^hH=1Z9JI)^WV~Sgtnm`*?|{`fXt9FL0XnGW)R7o@q@qNV|Pl z87^?T_G84pPuurD`~F&Fo0qf)>kceiZW|}C-9D`J3!J9C%s#BNSJ)Gb-O^uJjr6xKlhr@iF!tf(96lfReQF-vb78-hNSU0AWq-69IadZNlX0co zYGgQ>&qY=NIR&!sUT7Ulu8od0UMvlYQDUto=N_AfUhWv-g*I+OI)YT`4vj z>7J?W5^_w*JY>17M#^M5a(=NIt4z+fR%4Zow+cwBEWuVL>qgdxeO<_M$luPAepX|x z@4#!Cj2k$d{rHz@$u_o+C)1L0sfX3bdXh4$xqudXx2!jNw@lOCE$#Mu0I6%>_O#!R z%QD-ywOsFIosNXnNSUnDz_Rf{%4D4e4ky=+z_JNJ%H%o{I9y_ovU7rz$uh@xQ68*5 zQWmUEQXZ^cQXZ^sQXZ^+QXZ_1QXZ_HQXZ_XQXZ_nvg}>eH*g&Wt7ot}2CHANx&^CO zusQ{+Pq4a39lNTF^b4$ylm)Akln1Mqln1Muln1Myln1M$ln1M)ln1M;ln1MCux%&9 zj)B$4F!pY#m%Ur+WAB!F*t=!&3^upZXBw%0?>XSoR6ukwPF%l?Ev*3sU9{QdSf|RWcQno5cnOwI6*Na@E1Iy$Z9atvU*1$5k)&`czH9fFQuIqtiDM89+1}U2r zq)hHx0;ea}^}sT@CkZT@6QoS;9|MO=3sQDbkh1h3W%GiRWdtdkAEazSkg|(|lw}4f zyCg`NJevrt+p+V3|M_*`dinqDd=PjaV*gxO$$n!sXIL%d(QcP*U^VhtRoFj=N_((w zdzph_tj1n$-P_BxGjQ9>wNnHum+O15a=FF_E0^nhuyVQ92P>EBeXw%5<_9a6>waLl zEMwsIl=@0}u=+}Qu=+~52sZs-^_5|R)mO@c)mO@c)mO@c)mO@c)mN4!Sbe2DSbe2D zSbe2j<`Gz5DHp-YgVk4t4OU+%4_03(4_03(4_059XJCEhUMdZ8KDQdVU$b}1HGjU< zla%{D>0fFqlVeV% zV42h@uq-1;nJk~Zp0YglZrQ%}ZkfNmyMS&P$7-bh_HLQJy<6Jt-Lg*Y-7A7C z%H?>n8f(13av46b%$jCkxqaGlOj?b7+V*m5+V(R0wC&|G>{ygp6D93sfy)wjT*-6; z%Vq~DlkFThoE&Si|H`(r8hcsbas}%bxO}po+v_6R+1@SN+1@R6wRg+-_G4bgw|C3< z_HG&9-Yx6H-Yx6G-YwIY`&O%w>D#+y`u1*_zP($fZ||1r+q-3bj)9CPX*F`*xZLU> zW#182BklI>FpX|m|1v-OaW3U@UbIhJ#`9QO5lhBd+eg0w%k?y5b`ww(5DaIURf?w_s3{vCv&Rv{T{YaeNAzrxmj zrLFxmTl)xGyZvWQ_H{YhHca5phpb-q`}8cUkc_dl54W{XwzXTW_Bsu-3Q7C&b~QbF zJx;fc+ts@1s;>5JVz0M-`^fpmYT~UHQtn%=W}MYRj<>bT{h`&IWwnqKZ0%>;+T|Y8 zYUIAsYV7-keSfiUANw|$WQ|DL_oKBZ{w)Ta#_DgN;_I>{{Te)2St;T*n$gv7Z`?be@{>--xBiAsik>|KpBj-k|v0pz5 ztwPd%K3!rfm+O?(*w4eutU}UbYnN+_)s$E*r2V>Wzdp!$+G_0QYq^K88vFHQg;hw} zuYLAwwf!F6ex9qejcY&WU1cjjwx9b~#t+@kkL{oS_4Y&e&tv=Bf6xB*|LQsL*gp2( zvyc7%aLu*vZ(ZFV+V2Cqy5IYu_jO16Uhaop z&S!xiy8j%zhxf1BuJ*Sd`gyaf^URO+x$R->t_P1mE+p+VTe;@d7e#YL_{rR!; zn}6GN^|PU4=eJ|$w`1qGW9PU3-{Sp?X#V@Z^Lr!5=IdYa<814H zysiDm`hL#;sr4-1DU$CJoelZ!kbGyzS{AF$R(-9yTHiymzJny=N+aV-Bh!$^`rc4n zzes;Uz`x(pNRfO$B(Ybdk%Y-eMha4qh74rE2{$TGjasb7M%1GLo6v|RG-DgKqXj## z6T7en?U3R3;Q$UHj9-Krg@K4cJQ9$IW`4QsUbLZ|Uw|5n)JMv_3}20PXpnKS18r!B z(L2%@j3hWwg9hxxZgij%;gKv0Vv&dxWTFrisKF+*q8;HlgeZQQYYZl%5H)DTF6==E zlKMs(IjBYpzwk9s8p}CxdwfU+nb4!Rk*O*5%c8xR@dmSP=aqYm*~K0squga&>~b0z zh2_SK(jsGCu2=dwbNM0;{mo>UGHGErkH3xIw@_GKY8JBY7|$Gzam!21Hop6n>oI1y z@{HNJrN)$!QgWp+i+Ro}cN>pFMH-Jjd`$WSTt@hEN0w|?$(G2PN` zeXmRUOTDb`M$MpImfiZ^f=pjNQ&2UtvCmJYA^pr1K-%XW*w4NkWegkG-@aV3?6Qo( zhO;lPEN8G`>~#p7k1W4cAE~oUBXAh`nT`x&twWifERXdaIjN`gmvN<;f)ZHWR)1@~ z$n@;n$m*8;NE#Vm`di?2}fzweDn?@0%vQ&FRR!zcsI}=4-YJt#8PwOP+Q9Inndy+kgJvfiKVh zq}yDnP4FgU(ye29-SI)UuM}>>a?JWmuYdEI(x1J%`}(mb^nX6>{iP+IS+Dimed}AE%eRhbDtP|km`;46Dim(K-AIZ5(j!QYO6{7@~qZDP3^OT&&mSY7fAjj(} zc#E@(JSF8GZY_*_kJpjph>eXcFY)zlSoii}f^9>4e`%L(7+Ch7b_bj9 zzuI^Hr}LEk)f)Fdo$tEEy^Q~fO-nc~u!lcX<6O!ya~W45j-A^191CPaI^9gW5cT{~ zn^?N-^YQQS{4Vyk9>%6=y^MkUAuI>t-|S&H-|Au1^M{t)uY?&nFNYZ|FNGOxtzm}m z?H-2r-7upPIgm0pX*K@y!3sXTc)W71i-nxi4=9TB?yUNOp zxh1aBTyIga$KfgVI_OwdS=nfvhP%ik*QxKWBk5-0Y+GPv*>^e*Pb*i~ACoXLSbNKI zJu4l>B`%M-rpg>e9^E{_`!k)~5>_4im8^xL;(V`LR=d`aX}T)B{*`W4$6p_FGcjk@ zq%3zyF6-LuD)2hYwI-{^nCW)A7U#MhWiFRgk8P6c99`^TLzsJ)f0wZ@ldK1}-PF?J zr7V0&QHjf#!=6!E#BSxVYUyCdaugRhoW;v>i)8n=4a0gbchlEDL}{)^7VpTu;A8>J zZI`>exX5X4GjrQ`a+k5A9NzD!j||1yKC-vWkXr!ja4A|=;&#a%Yfi#QwvG|=SYm(k zt~|0G+^*#=cbP13*~(>k#qOefc5}0uvfh?)1mrH}c%VM6GTDzD-j!6_n8}{!Eh;E- zl{!k1m(SmCyrVGJZ7#9Z z&DwIwy-zC36Lg~VODiq*7Uvhc9nR9C<;>JPV7%Vk{6hbr7%=B7Ek56fZX;^?;>)*S!-;T#3!oK?*IEZ0-)G>=_tTGn{^0p(@x zVyT+{d{NA~#oXomCle{xW7VvVEWImtnQRYdt~b|S1tX(~{f~pUM33>g{$0yIMj6}2 zf1t~0jOR<7hCCcWW#($)K=2m293GdKn>#rG(sJ{c%Ep$N7J16NoOsNYI5%$z=U5p{ zHnrERpSev6bITlgE)Inb_woSvlOrMdZBW7&7QxYjb4;&QHhc`n%%y}6~b5$Bn^bD4Pp zwYK5m>q2>%tCYQU9w#^#XUfC30kVOLJ)_IaaydTAyhR@WUZmGO=5Y8@XUx_U*O9ZP z?Od^flMm~R6PdYxSkpXwE-{a~Bj?udl$Vv4aJ@G7MO{X7Ix>o_SHS(tkv@l~Rgk+( zF8P7uP4VA#ID++de8@3 z1s_h-k8% zyqt!ea>e_n`WDD);Tc3R7Y}QNGZ6JIWpFuFIST0~;~lx@wd%+gWrHtft;q@eNPkc9 z3fbDWe)Bk6yBu>kJDL{~PDxJlCX!=KFMM(`Ds$w!UAZ347&5;(tf5>-=JYu;GaYh^ z;lH+<6OiTe_b78M%PlD^W)Z$~-I*!(dVwP`O+7cx96Q%KvN=|Z%9c7VFE8fO#ii9e zC(87hVNv-qjzE6=Vq9z17D`Zyjo5@1NVALVz#&BO2N@kmLKeKJK|Pw#f<4#=;}n)34y3?|YHY*~>_g-b zrUfU~V+VGl1L6GP$56I!qrkq*`ml92&7>d=f`*oWw${Ol5is6_*|VJG(B z5C#roT_6>Os6joNu@k$o55{S1Z^R)PIdG#IR&%|!$YWKD6!8qp?3R?q>L)4959!}n z9qu0~;NO7{@(gAZ&j+ym=e>-5Xr}A{d9<3M;sUv6IQ-nu>|$oi@=CqMEAsv2+1f>U zZ0riTy~y@DMvXLY+{R>QbH3zSG4j&UXI|zw?>tB9=~?lo%knPED>EljmhC<~ox>&O zv`SrkU>ZHCl*g0>#nyApkus5S<9I&n9$m^kDyMLBbR*m8&MqjbD3|B3(#~mCPO68? zh99{U6kDHSCpw0g$uoUhKe=BtPo_coaZdeCFZ+1;T!K08$SnP1atp{$rpt^mx**KP z9Ns+Bb4~H^e1Y3YxkuL_{I|MhfBB%CGrUaxe(zlWX9NFZ1jh;~Q{*k;6aOl? zi`22@@9uW~>sXd!yIX)Ty1$RJXt6x* zpXA^N5`5V67CZer|0quxAFKU828ca#T%zL)K6HT^=M2ko zE6g7>oHK6R`0;0tiyuEB@vMZi&psaf!^3VTH(2HqCUbLqXBeIs$*lP~)k^tW%F~bWhLg* zvm@8M|H*Ok-QyvCT!J1DXN~{<1L8aDsmp=6K3H|&__NnR){k5dWPNmSaLdni>sN;u zlc)AGe7CLl|7`cA4d)IolmFy=F8|5--n`}%-};e-C#3SpXR*6DPab&Yb1G-sl*vYNkDlbt_Q>Z8u7h%l z_g_P~?m1m~<%_A5ULjnL*!Vbk%vm;i5?j*APZ3MmesZm1GU*xF)8_I6_<0%A=VWkA z=6RR-^TT+W1b(i`gyj+=*QE1?mpLvS?k>OVTz%@0Eq(LlInjB;%Ohm98M@qhEi@O{ zeEcr`GE(O`7Q47l_ka91N93k`MJbPoUCyBnM;d1>P6(wg^TVUJu&8W|ZJO?4c~;IN zXr89?FvI_FYekW_(0szfVp=GfMU2Q%+My4)6H{^h1H$Cr7^I$*O( zYqmV{lTYA7^$AUOo-3QDfu-ygvLEETi_6Trp<=f)TUUjw1**&s2Urb7&I%(!hO%wc z;G2{6<*blVJhI~D6IkphcL_TW#|u3;tDBdV?-V8-9(ak)+&-wi?8uPJ$J%D*el6?e zNSXPNhJ|o@v;B)9C#+a&i~@J=;<9W`V*J2cc37H3^Y+j@&qc^jjr{fW6v-j#-+Rp+ zmFtXuKe5fz={8s2;pO?Kd9#iq0uBUuu}jEhi^)U-Q>K;5aGaS>ZCCBeKsW&&x1BRm%^yR`{25-u#)# zW9MBkGui)4BX^mekDRWOGV^?-=L7$-TV7G*F5*$Dd1K47Mf2H{{EWhX<#Dd$P~tdd zh05ymnm?^6E6?MJp|@O~J5%p}b4Vj#hW>RTConw=`=1`@#$>wY@N`m9di~46t@E6$ z3Z9Ac5W&UK$(538r2Mqe+CF72`EIC`j491Fe+<)4=2(s=Xp z7`^?UmuSiM*PKg8Ng3w}J$~d;Vt%BFI8s(p>arCZMchMJCkoC(Jh(41w?Ee^xs!5K zRyvC8ClmiQ?4Qa5hm)ILbKjH+N?lgCa+f-Iq+|XRHHW$uy7HHr$2gyt4wv(}Nsc1f zyoV2abIY4Q3FEQRclyZj%6+Oewj2-gvtjwE+~KEGj#%p{wLEp=TxE-onG2VMSq zBI>N;`#+1yUcJCo%3#cwPkC}bVZSG^W=64bx_MNY&(i{DV_3uGFr3xy=A&GB$>Cdt zf7*wv;SN6nb$HDuV7g55Kv5Se!q6Xeu#N0{rGI}g*R5PdvUQ3a+^m=U!fgLuD$Aap z!7eywdS-?^!ZuG`@)I+&LV7r}4{=QBCB#U(Kf-80JK7$IFq$?+7<*9tV1%)KGv$bS zD8leIMHn@&hZ&EChFsnB?N7`PUyt^*wU4y5pMIo0{88GQjA~gndwaD^r|+ZYgO%!T zW_vFgraDZ9ulJW5N7{3WzNu>3;^6ag$k^JDy?o?r?H0DKm(day=HnYr-NX3v=-rz_ zXs_+rPT$UODX;4_P^KyKihNWiZ&Zhv^D^5bWtyA2$uuL}gKI;K^&#eir2~bOZ}OLC z#Mguv>-^<=q`aw7hL7AB(iqYjYV7XDjHlfx%Xz(7$H`{9&unjG_$?RQDZ|gN4cW){ zsT%rMv|b%z)JJcRF^mHfE7q+v+Rj^dmSOBK3#(gUw3ct@7Poa}809rrv~*{2uMP>5 zG4@>@;*(lk8xpqnx)9?)b;x!m7f_!h=J!zeqcXpfcZTrWMt5`z+t1fd!dS+RFlpT{ z>&b|gdi1WA;RaNPgf)g58$&5?2$j}GsSyjb`0%tMn?f2wc57XCQ+{rBh`A2xLUx6= zcQe{$`Yn`Kvw@qMnzEU0@4capjoplm(#vR|U(-XO<~SQe>O)#WjTV_pt*v}L>vLzQ zu~W*u-Q%QnDy@O3*8pl(A{Y0!7w{|gwbjk_n5;z!gjUlV^m9f^Na&kQrK|8 z0oi|il{5X_jdT6o2h#lA39inn#`Amo_Ac%;hu>G+S(S6>+p0sPlME~AtSTfUNjEu| zlsZlQ_0ai!eRY+cRS$+g>f1+3f5(mVZ`$NrPfGVbGLiAaZ}OK%-Rv*l zL&|W6%xv^Euj#BB%y2Cv$B8fNCz6|e2S^S=-@rQmc*ajD-_pYuc3WrF7Umna-d`>$ z<@FnMc}SW6-YH+o{^P5k`lZ>OGxN);@ak^9Lb55m+PBy24)Jwpcg`&BPn!L;yFo+#dH(rSkWx>db~lnTTv|T;S?>oV zdsX`?oc{8Jf-kGGm|l3{msM`kO_q?mNExs2Isfvukxg5|e67EsoBgYC=a=U8X(44e z$H!mF{_SfarMs=;%c=yXvuVshvpad|L9;$?Qu^;)e$cGvj+F1I! z{%*-l^v}8KVAVFV)pxLJC)s|DzyHQ-8NM;ZS6h9ss+IDT)jHnw2dmoXPP@V19l7RU z)gI}t^LHoQ&UmbkOj7pa8d8Q&S?}+^kCgr;clf&-Na^0V!M_~Iclx_0Z}j(1xywJD zjil7C_HO!barlgegXZ?i+Uy_RC;4CxU)w|EBi(&r4WqOg% zlMjdbc1SXQyCloq`hveZd8g!NU)_rbt9BpcIDh3})d6zTE`NFB8~*84pY|2gi}X20 ze`U@$c8qj~`r1iZ4(C|9<-9=3^2Nvd%h#PrIs0YvIDh|6Qufd2v;F}%o~Ydu z{rzjsWq8(iQj)*Cqe8}S^kuI6%G{5mu8`^W^+jFnA3nU+Ki^HHEKmDQhpM)m&-tkC zklDTIHoE1!+wE(!TT+gP*s!n7@`eTe^5(p+s|K??MgisYPhR}Bc^u`CGTp2zzOKry z?%|8M@@wYb!xvvgHZ}R;Na^2lo_QVd#ZQv!M3`^SRP%b_i@U(Qp83Kq{KgzEn&dj- z8#tR}yR0X7eEDrv$DD7>^_Mu;KioF5@%+<$@$>xMk`F~~^|fku2Px}2CBxs}N!Bo( zO7fu*TYYi!{pGC-n9n2Kd@YxKLw&-0g^T>#yAGFr7p#+eSW#9LC=`k)Oq~Ol>kA!(%JwvvjjWQ?07h>HCSzR;%SvVp|vVWj2BCtlPKRy_arisvdQFBBqNIMXjC#z z3f+?#K9%m45B$4TGi8nR8%SBE%#(DWo#{DP79ag$=$<9RQI<+(F28nFx$$@p=URWnQ`^Oa$8=%0rUrWHf~9ENk!eTaG$lH1rncX40nrrk-u zc*ZZGy(Tr(NT9v4PpGkvalMq)GF=DjC5q`J(k}@WlvlzBgYgRyhs;Mp&G~116k_aW ze0w8n!oN0-l+G@8mb+bi11$eY*^kv`KJa5=a_k=9hkn84KW&-w=**mXIv`DF7xSJ` zVqcT*Kb6aa*rU*7 zGR>~$E8l76CtF8hu6$no7xP`kPm7PnjK6QbGv%u%rAMd6a!hx%p63-U<|~X|em3~y z*I3S*UCmeCNAMhlc}guJnQ>S1O)r;s8Gih_$`n)3)qH32-NB=9sWL0_efw2fvD;nX zGza_9|M|Z8%J-t>yT(8IOqt;K?a%TZ+oQE($-Q4!+gHw4N9&>-`#tkbvA*Pc6jpR6 z(`-iv_F=zd7uN|cPDiWyMwH%^bahXX&X)?0%8o{TWt+=>-qpPSPi^-ZoV1VD3U^T7 zuJ-fv@}qa}DeGDqxd)WbCi}bC*V2mk z9j%?zde++2@i8}V$BzwGSU7vM!P^8SP!Hi+SGCqqaPW%r_2l+$5l@>+~GH zy>YY_!hW5W^F|b8UzP3D)jFBEtYn(^XnfFRp2=(!`!dM#IUxIMEbQw`)}OWgl4(yt zD$#!ahQI7^}LL-{cjBVJC7VN-Iv|<<9up4`@ z7wzc4KJ3Q4#Xf9afn9(5|M<-NJa{Hd~T#61DVJ|4xA{28zu0f0+sNg z8a1dz9oAtzHliL4*n~zjp&8q-9WB^_ooK}_v|%^)U@zLyfqmGI1L(vd7<}O;4B?1G z6rwQ@gW*67ViAXUBp?w_QuMV-NPC9Ua(*{WyS59D)(X{|JYCM<)u=7>L1eAO^9B zLp&0Yh$Ku#GE$I=G-MzXS;&DCg>a(;UR0nGK2)OywWz~7tj9*wqXC=Hh$b{+8@8hb zJFpY2*o8Li#vbfNJ36or`*8rBI0S<)0)-(Qk%&Sx24XNAh(Rpk5RU{TA_1f|7Zs?457nqaE$Xli>#-5_Xuu{kq6y8|hV5v<4(voLcA*Wsu?Kt6 zjt=a@ejGq24#D7SY+(pTB%%fj-1DVJ|4xA{28zu0f0+sNg8a1dz9oAtz zHliL4*n~zjp&8q-9WB^_ooK}_v|%^)U@zLyfqmGI1L(vd$Oo1%!A+rD4urj#UUBs9 zH&U2USDzE7R}^_?$`|pELL-NLSMxmzvpYOVR<*WH0ET4T{Sj*QIWcdm|{?C`sKCl0q+QW4F|KGIC*0TP;u1{sWl5>`vd*t|*d2jowr_nI6x3S}#-sbcus%oR%-bg8| z+XMPbzXP`M4Z7`(^s|p29nfF;#lo6?VnBcCXCFT$pnqmS|H6R&GOi3`O}`?be+}LC z>2D0^Fa2Z~Yy75w{yXTlkKY#1U;4=~*7*AZ`fs1zn|o=Nu_wQ?BfK}C9eVRQ#J>(( zDBq9C-I)f$`TGKUkmkYyWc4=W??(Jk@vXg#l9%{hw`k0aFgg)`Nrcgiq;U~O?1Ts- z0hwn<7}1IHR?&Bx3#Luu{q*GjMcuoAS5;kW!)va!_Rh|Y?2wRzWQT-Y03j+0Dpsmg zqoPKP8Z~N!06{kzAW8(P+`OY=Wh*M)ZP6Alt=C$PMQarm6&0;TdX8FD6jZ#_T5DTd zzxN$;%*|ds=l{RI|M!3A`F@^fhc(8WV~lr>d0q3ii?7dv8!Ep`fcNF0vh+v>c8?a7d~z{cIwr+P^Z83S1x?S;W%4! z`ag$ndfSDs|EceF&;IA|BQQCn`JW2Bg}gdj|5^L<;1wHw$K1e6UGGAj{lZ2U{$xIm zrNA5RpOxQpe;2-NUg(vhG`N3Xq2y`#G@R)$EPL(9Ko(RMM*j1|ya`2^xR}cbL-r%b zB#r3u1=OBFB%NLQV^%8kUd~#;%5DKMboFfNhMP zXK27xb+c6yZ5m z@ICyEhlk^D9tsHF;FCAuxscm}Vx@cpn#7h7h&r$z;eKP7NQ3LBL}DtbG89gP6(x2u zX8Bb@CB0xIJQ*v#3sK@BVFiaGBv$pPFgO#J$LXk4Y$%GHm$;g-8}0?0MlWVmrNYEF z7@<2Vk$4fO&ti@3YP1K!jw()EMyjbr!Uh!L__Y^nrh30IS%`zFUToMb*zp_76aQe$ z;q-~$SmgzMc!<>;2WC9%#NWIVz!(?XpV1TNGw?gsqL(;;l1iDvS+nP4DL-*@PFPTg zCc0#y{5#CjH%R!#CTE@te0A>ufJ!#G&*q?OvRKM z>jjNeGh_i05)T*SZ{866X^)Mf8JmMGR#J0NDa}Ep5(!iTFQ!yc;%gS0-PungmlFFC z%^o&|qZ2pKGkaRk@0AFdUZwUfoHuiBmKu{tQ>TWFP29Tm1d(b9w-};|0>9Wcmk8Pwxea)!EO?1+{mU zI>##sW4KYqOTLd(_=62~Z@`a9Js<}CxcL!$!JO$W9gO^ORJwTX^gd9ZiQXP>py8Ca zKip8BJLNkOa3yq<&VaxC;e7NnJpORu4Dd7Q0kb@R9?#6if~Jpgfxo$%F1pAmj)$WWFCMaSE#ri-KY&dm zB7cMn-u4IA{E}`n82xl3W;M%%SG53tVu#KG!u#k<0;}yGzrHpnY>kklIh5zD(7H$=nIr8$S z!5Tt-ivO|%d*Cc_TW+-Tp*kBfG&h7F0?CG)4WL=#t6XiL=0;o1kRs+e5Ok3!VOIsB zk3=cE4iLrEHc+D#Qh_55$qgAu84dA19fU0OWi$QbD3a9jyJs7a6ry@2Z#{u}=QnFu*7iOq(FdVlKyc+Rh9 zWq5}gpgo_hs{bwnAelFPR*&buccM@!FSw0*{{1kJ1++tcVKW{oy@1ob{#)$W6X6;7 zTV#UO39z>J3+p`mEjGB$$Q!^vh_qZdtH>cv+=0e+Do#j^$Z z2gU}-Ja)3U|fVy+X1(fG!x*G;35g_ zElD%2PPVVKum2p9mrH2BS3na~B$$x~wvyDO#iC#lp7|5H1dgXbLK;(%z0rl?;LmIn zfQA0j;JYws)4NpCo=xx4XnGx~>2;*0*O8jurP1^*jiz^LG`&t%(`zC5jhf!0fltz7 zyktI#&_e%$fW3vqd_ffR1yRh7RLqW4%#Kvd7ep~%5XF2!6tk06%om6oi8=YO`1Qiz zI{a@jUKquAVHBey6{8~+qazjLg;9(bMloI(#pq-en&F$}1UZl+~Wb7KPDlRQ91j8-8OUG}!!valgYj6KCDs_;G~qG)QhZ?GPb8g6T0EGkm6DsZP`ITY|YL-Q>c@m zze`gTXvc3Ggi67skOaUKB3=PK{(%=FA|tKAFNtR8I~q{}{7j!$VP0j#35<}s0scdz zUPi(=?|ZD|1l~V7OHg7nflp-Y1^A^QaW5q}LiUevGJt)g^>trayXPPE5TYO#ylOtw zpt+z-h50RA*G@excvW5rUAsfO)pe}2S12KTck_?4n$wkhL-LQax_jszeeR~6~hNsc+0?+Th905%B_p{IRJl79>`4R;Mk~d;S z5JKz^DRjCOVrh2I>2eH0&roGh@D>%wi5CjrhhG(NY*7VsE)=Wjaws_4LhXlto+Q-s z7&&Kj!f0(uG%Y@1dY{+X23mn)HaJ%D>Kn%rN(P7$6ZtY@~6ac z6TBgYuJOkhaRi<4HHMV809Xc&sFUu0jIk|EN1gQOV{DI}X|G3C?PFx5km(&-MLGQH zr%XlVGqxD^)K5XJcT{)%6joAWy^*d*Y06R<+cubbCcD)bV%T{HUd(`FSRrnOhNV`u z)MY`nDyYsz8Je{k8JlG~>Zg1DVRl54=^Hv4N*=*aKuuIoy#mTnfB{ew6;!`~a#RmN z{gk;h$ru6}@k0!aL7%3eCMl@?MyYO-?C1tfM1%R5nbTnmMLO~0$m9|g>u_RT(+woJ0KL|?OvpB&kX;&A|r$ECJ-(8fwk#oY-zU%*bI48ATE#jGgxaO5%v zuYTs}T~sHotK3DkH%r1?)UM_eXvC3i^(YpOXvL=&&_X&g&F>lPA}3nBF0`Zh4d#_2 zd+-$zylY=BMcdDGBQ-}dQ$De&VM^|}7qjh1&CzHc>%>i;DE=;s@iQfH!9NF@j!awC zpQ~!*#S_&0cVnor3$KdY>GJ}#Hl9uPOb?-%u6k6xZeY z^fdp1+8vp0eizEKB#b}Jf-urIG`tkQ5upD-+k6sMp^%W-8FOp z=JIWc*vq#l@nr+L+>yBDj4pR%PxGIdS&rXBi-03~o5iD!>};Mvn2t<)!^SWf zvwcG>J23IE6yaY3Ph&6H7EMnhusEW-5pBzCpK;*Lx*#7IJi?TigN=Nk3o+FSu z3BtVAH?-3Ch}|f)chXwARu#0>T|+$As;!B2Us%#Qq1EQlby;hYLyqjTdEm%yTPYmb zfh!Erd^)nH`IoFCj_jq^9FeY zNA}@sE4!#()@T>h(>xfqvt)X>c+-Y9b5h#>+ZEAE()m_vy1AgpE-6Hg{rd8 zE~=w`=DxeA_WGIo?V{T1XO7!NO{|}}|1PQ()<^FmCxFbNvAw}wSv(v!Av}wS11Hc~ zOhM)W(pgkN=04I{TtQ|H=`6A!b0_I6wjgr{=`6Y+a|`Ibv+#nf4i5#AuY6nd!j_ z$?x7enT(kp$ZSjo-(bY3IMDjy?KVoS zeicuAXDK#(8o((rG;9nXVmgTlH!PA#NzUcS%A0+@*DQ0z1*Q_LSkQtP&EIDUEtGyN7IcvF8kH0qmf2X)NzM^W(*TXr zMGp5*W;xyDa2(+$4gC-cddT5S4`x+3`4bC1Uk?uFLNFD=>5*8__Y63kX~0ASCm&+L zPICBO?_VfW4@lLsMczp6KlW>xC<7^6s4}vgwuUH&*T0NBh#YydLL6QOG;)8$_iHo` zuk{%@owicS;RQsa3Ydy~>GvVVyMso(OYaP`wvGjJJ->=BbrE%sxBi-4fNR?^@j{Ux zvvZLa0B7V|q;L*pk1$kTzrph+z(6O;EfR%+))CgxUB%@R%O<4LCRoEdY$hCG!`chb zO&`TFgz1}7vm3>ZW?3;@-y7%+SP45^mXd5aCO2D@u-S6VOi^L8MG0g}(u}6Y6U-$D zCS2B~UO>JC+6&O)p2PrDXf$zN8QUhamcWcDW3y!b%@XDK5I5RYAz}fqfhzCHWvwBZG8M@Gb>5HUU-D?_OR1<-s%yPIMo45O?=>yiR_C8MDj zk5JgQ6pxrGG6e3Alr}Fj5Au^}W~`wsZ$z62`FAOgSYxe3YaDe_pC{x&@4k%SXC~%x z=(eAY)SHL;sLyF{0P%f+SW@HaP`cJaFQyV`Vk3V2APdZI$UNDQG2#_8O(1ti4T_^F z(KTYGa33O^W*Fm5{IGq_JBzV^aN0~slNiU_IZ^fJ0j)mwLHZU%_s=$zY}y2$gT(eF z>&COyK@^#*;)P}_CC>d6+H6Mrf%N%?(ur501#rHBhTsW9=YCnr zTWm9Iu2*V&id`waFV(TUw}Z7C%6}f}*;O2F#ey$c&%}-UBS74^#2c8TY>ZJcBtVRT z@6&3Wxrwm`MIL1L=lwmF?H^}BgmsH{xG`=9Rs28S3-!NRx1uYes|yKt4dI4A!{7M* zVAT6X@8dbI9_@%0jaa*Umx;*#9Aqr~3V*S4kq+hp zfG$=AD`~2%44hav7=PoZKxVW*_+@tPvF;U-Ys!dKH5M)NJ&-jhKc{0zXa(xMTA6#{hgy|9*l}KWcxcz{cYBU!L zZo@NwLYE*pL>k+*WcZj1^SyWn61mX7@px7QN#u=8Z#I!PMiQx%CQ>O)q*9v58zYIl zF_Op|BZ*WwO{4(Ht`klNDoKR#2H4KxS6Znyp<*pW*&t zEOQ#t2?YK=w$-1V#Ke+5_u|;@#f*2TVQrw5m7B4Y1xv5OQkm4kLuo6>tXxuddLyIK zSddwb$KxgFwRRTZI(v!^kp=2r}DV%fmk z8E+C5mvaqBT>hgs^~9-En7EVFv27BT$eW2hp#E_-W|8b!bW}3&H>A-~<$34g%S4W<$~z;6 zN+tF$*%h-saUCtF&Zfk@q>i`tM#z3qzr)&VNep6`Qlk^?beB?N6Ugu^H7@ZLb6dm4 zCl1Szn~?ZNPFQQ=Qli$F6BF?qEp3T=a;WyiBRN!u7tn$J30KiEe%>T#$+xYVpNL(- zphVuj_%9g1Kl^_QHwPgi1(*Jbj~4<_a9J~igWmv7uuLA?$h~|qxwlj7O5skW*m8M% zk#Vn*mgz~xy-pr~#|U@I<2s7n%}4tN8vib$CBg-_qE;mCL%i_3qqV!alhpZ)it&IK z{}z&+vEe)ska!+KvE5Kur9AwI)X3ifw%?dYtU|n43vM(9Rg_o>CD?B&R5I~3slE0S zsytCdYH#jw!@lFh&D1icLa0!(PI}gFY)?Ey>SRlG zc<}=PW`X|{JDr4d$?}M*kSF7gr_@IY8Fwg^NXWQDsiK68JCuSWM!?Wh--AMKz?N~x zQ^yL`l8|x7Q?}FZO~|-I<@)ku+@aPn?x0~RkroP_Lm$IFQea9cFr^gO`UtS~5n$^hz*J6wsdWIGEx?}H8;!Uv0MA5#Jre<@lmb&q zfhncHo{0c^CIal42r!jXU}_z}%22=;_|LwW1@>$N*s~E}N+~d<6qr&9?AZvgXCuI# zjQ~?Q1*X;k>_hR`bDXTU9(yhV?70Xqr4*P_3QQ>l_FM$ma}i+AMS!WC0#oY%h9ima z*oMDnfo+HY+YkY!lmb&qfhncHHbj7JhydFV0j6>aOsxahZw1)%*JFaidhGcKu;(Md zlu}?yDKMoJ*z*x!&qshg9|5Lv3QVm7n31e}Vb6RA?1c!h7b3uvQea9cFr^gO3lU&1 zM1Z{z0j6>aOsxZ0Qkvx#H)Mgm7yIuool1R8E1ZbpZR0 z)XI%hF~YN1xiJE4V+5E|3QQ>lrj!EP7y-610&HUhn93<@_H@0GS=X$J81EIN&Ok z9{R^>xK!R&eoPHGT~Ydy$T1oYg_Mq_`XB#JsO|yh%)r#(8XFU5$3l*u?fiSv{DpE4 ziapv|j~@>Jjm59{bc}`{v|_#1z=PI6+8TJ!8tAbG9(D!>n!!~1n4z-qTdlH7s8HsL z9&-s;gd*ubrU@8;nfG;Vl9+jAW(XBLLEoEldSwaeS7Zj93i;yE4Hm~lJXiASB@m1S z-^e=_M@Ifr923TZtr%es;@HA}`V5RGu%xyD4EE{%dX6<>!6q`;m-^4JkB!Z)8SFd!=h&ykf^jc^!8Y69z`g`;S!A%S^q*%Nj+M?A!C)KZzreOL7TiGw z+Xnx|J@d(^+6V^gq`z^4FjkPky5PUWIvNWS$kB>+icF@P@iNCxepGB?lqt&L2Q4bj zqLyyu@KYca|G|8psvLggqN0I%rYVP?a;SKiQqz^gk8M;mGXXuy;io1lHZaZ%B`|JB`Urp=M3fW10xmhQ!1?-eyXHm1UWO6!;hbMzvSS~TMOUlI>X^f`&!AI zvKnxduf+-g`rZO{14PWbNrVTdM!qh=1?OYou)p_f} zRul}s)V3!wZ(U|*iRNJ*@-6D9HIyy?16nA^|3T!>!R$$`)zDQq175WY)qbWk-Zux@ zYpsqG<30FxsEgTNI8XFhTVC;G%GKGJvx{fvP`$+`MduK{Pm z>Jp-8Gqm{mAJH1Y>RW2HEn>CJSrsp}S=E!dzM{`v#ha;Xk`3w2!@QV2&n|vBCxlkl zlI}9JxD8g)uzEV$qxf9rPM5PQxziP~+vV&^?r6+Tn|6)qN!llC+HH0yb!KsbPM*?& zlI3S+0mv5w(q{-_)t}ML0La@}Abk-aeGwpi4hS5e&s{b{RLZlUR4Sx9&QVNQ+DQ_} zQYqrJd*5HMJpi^(K(&weO+~?5>TK^PF`aD`1`X-5g<+`;(ZajbTJVY|Q0hXpH$Wx{ zZ$NU-CHp2ra~J;=n|xuChqzeAZgK{tR^6lq3HufYyTq)dyY7+&Aj-2LszO7=GWC-c z(#3c?QPboyLErmPezy7gcNpfZ7$tZI!Na9c^uK+pgRYIf2ShZy4!>5wB`s~%M|f~+ zqxP8~3!C8NMxPtO)h2TU_eV;@Z2h&G4bDX|@J2=Acp@w`*W z=cIB4V_-y*$4O-+y7M@xTw$}IH;v(T8i-Rz1*`4f>4tPdotnzoTo@%MDfn8_e0u4T2a7 zW>B&Qy!hq#vlc(u^pfW#mLVt+)V%{%{@fYUy+GH0iVMhu2hH1QrD>x12< z!?XF*7T{6=$rhY%#G0)m!u+0HL?VA$UpAyDAI-Rnmdx*iO;u1{@DzT1fg2T3m*+riIh8(!~H;0jnI`|ob4!oLYE+OD4;8Q%m~(_j&E@s z1ntj5h$kz1vyoeFWzRnU3oCo(4LbKAL#?p`K3iuW*Vuum8kh1Qy8-Jl$yUVpN}*&bq9W5 z!rW9fcchdrYfhirlQYi2%TXJnzyzj#q2z23;-D(LXgo@N#~O-KU$<|(dh}$EAaC#s zOj~lkBe<(JxnLKyd`S`oUq>yy;MUZaWE+h>s=pE6 zE9{`Fj z#tzO@Eu#!M-U{&(o~bGts#6X>3Yj{eoO)Hfl8KDxa@LLn=S1phWEF>TekKy%SOmu_ zLN(Uz`yL3fIbv3J;CiT+Q8fOA?)(4UjYYwB=2l|{$&FrKw3?jAhPis46q&?}ADZg3cwpcnJJd@crd2FHy;0W08YYH&PTTJ#WwTupUUSSb5CI~WaX zX$4$O4eZIy#-c*r0OP1+Ay-o!RbIf=R7X`6a5dFYsY0%%I;y^qtErA^Dm<_P)QQ&K zh(ez72~M)eS_-+E>Zs9$TupV<*g~$RI%-@YS5qA|zL2Y_j+#)&)l^5d7IHP!Q45W_7&5iK_^`ttYA^gKNf-U@Fe`r{|$2EYrlFB zN>brdNT6RMmz==ag;l$#8HGP&SgM6O8ecGyFMcgkA2e<>;(SMLGLkAszHSOQU#D@m zn1bFJX#JFY(-hdZf2(P$DcrXlc81&!I6>n!Q@Dj@>!yjFFHPb17^>t~#w+@9CEBl~ zUvviI7vOk7F}{4ul7hX>*lIg~aIqj;Fozp&(QA@QNX|K`sPJQ|Oi}^v5%Th$N2CQH zils`IcmYlLrSwnmBEgjZ0FUvIaf038JiqdGJm#?w6Serf$IH72&)namd62&rQOo_t zfvD02(&9H+I9|bwIRM`5piaYw8~tIFW}z0~!)?r>LOBno6mH6*N`C~61bCUif%Oqk z9uN1x-~0oCdW65nb2P_6v%jY^Cj&&K!a^A!DwQad0isex1u{TXDp@E4M5W3LWq_zu zRiO+Jl}Z)L08y#>LKz?`)#R4<2mDvd`}UHZl7&diGJj`q75g+9A=+nTtG)MPXRyTP zYf{FDj!YzFkm$&wq>K_BnM}$sac6KV)MA{NlyTzD;HN^iBxRtuGk6aU!xpxrj1--$ z-dC_QkQ0ZE{azjcP?6*=a-TJhnuM2TiHKmT!lsZyV`bjjUpF~soNi?NSR#R#raVMK#z6|&zCB`ec8o9I3 z|1=ndKF(tPG>ZAtC}u}0W=AS!M=It|qnJO9V*WIW*~u#APsNSIT=Eqfxdr}b0ngG| zjGsj@eip^(NX6(##pp=I_*oR=XHkrwMKL;A#pq!4dwS!=%P4N_z;9tEj&QE{!ZO-cl%DK*bmX&$7z;D`dJ!x1#lxq0N~k zO=qUJ;%anBzJ{c|LDg(pE;dwjOOf&JgEF~Spl2oq{}(IHio41gt6xy3E2OGvSWks4 z2x(Y%#a6aj8s=5pDU_89d6@rFw)K8yUO9Fg>T|z0=u?8Y)et~=sqwY|#0B|y0XUIn zZ+%@vx+-pF=XR@A)@ea#Sce6nVePzi;C36YmqztDO{4nUQ)!3Y&oGO4U)P|o>D5;Z z?XNAz#gZ7J^u7=F$&~s(za*j3>MG+#@bDn%iGiI zR1su8UtB#NdY3_Ojk%USd0Xs$gG5$=bvs$V7gh-bs=QS9Kx8g{M}Vxc$0|RN@I58G zdLhDA;8$rLqF1)LWO&s(z)fM7^M4AlomfBQrLxy~wY4;xXAIMus4(7W4ofjc86v$@ zp4==DWR@?flO8SKXwvH7k^-aUsa{-CXq-=~cR<;fgA6X(lJg4#jX?Xr!Y)U^IQ$w+ zjKhzl4a6gk0Gi!d3TllZl(5oxU4YX~IIvgi?A0MZ>l8`91?I@U>hX~L8ovf}4|NUS zrM}6?&0u>N5vBGP{5YkwTrKRO7W#4eqJxgX^$|=Xd6&|YJ_t$=YAU<{Fg)ggw@JeV{@D(oQwizkzsrOF;6xPr`^i|DsQjjesN>v&}3 zFvCF&ChY5PqK(7NwW5kAmqNyqG0$r7q_}+R4NEc_Zf0mfAfdd8UlCrT{)#x(D>KzA zz1Ax;)hlTlKTD0z6XU&V{9JEXKh@5&&Zf#$wJ0M{djZDBLu9+KH-$$$8cUEmVJx|N&N-fjpE5cr6`cvh=ah=6M4E>G9>j93_@y=kA zcb$6o>&fu2WoF&ZFHM)NXGb2gIvXbJ~_sM^3DlR>F}zb&`!Y3d$h!*phl_Qf?9- z`TKc-A^f{`{8^MYhX`Oxwb!eTI)fum;-gw(VMp~zrB)s|#gx`nXe`W8)<1Yr?Xx7 z9IXH{cS{r7P)shs9NU=BB?G0wL&^EVRTk^xKW1Avo1tI2{H-1bHNE%^HRn+IKWwA( z29#F)7wuf58N!w?;TxJy4nsBp0`D6jgoJOq8kBUj0|}q}AhT@A5R@oKUA)91D)3#K zyW1rk))x9~pDjB3j13y~GBa4@*D^+?7gd{)n#|`c?B%{Bf*>a1w*x@#CJ^-ee8*`tKVz*O>>CQcz8m^&bVDo9Hc@!63U^uI!7ALz6b_aY`k4;f zfDIPVex|)n-i2zE?5~%XAxBD8c0_L-x_3u(+w?lJr%t-AlrL{snRNA<5h!nfH`E^D zn&3-s)X%out6q=5t@!#Elzeya`C)7n;BmHG#c0fhTGL(?f7a#)&>- zVTRTwq0^>|Rj$k(NTNw;G`msl7F_-U zmEk_9)1bdV{tubMOL(@3THG-)x%qt-iY=ly$lNh`h}#;y7B%eE zzskJ)cZJnce*n!ovYVCD5xusvb7WT?GTRa9`Vmy~AKHkaQLAFR=;-?v+YEoxX9_UK zKY7Gxcx9;RrnUENH9i1AsK(`EFghE{p>@tU`XmX9R{OJrSCczrUM#FsKUA#1?`Dwy zsatvk0pp>6GXkTd+I1pby%iBsi15#nUUfgXt0W|6)X!d3hgSg#t(%H!G&j&A)q!E= z_3n!i2-5l!#9+Hw9oU}X%f%yS_MrNw0*=wFgYC1QnO1i?&fnHbOtjVY`?E?638*5- ze7(4O74)W{SGv$)_Ek26At#2Tj!H`xI?TR6XZocJbySan{sr{OnD7h~y1z0%_6!X1 zmhXoy8gwJl(JUjCJ%iVQ5~a2IOt=d1`h`r}BDH5=%W}_9Gmc5$JCN3SAfDNE%0k5$ z%Y)Bq=P}NHxKRXVUdNBs=vwfG$o`i70^9EPHp>Q={hX<0c_Ve9JO#9YM%-Vc z_SfP4&=G7>4u=8%@W9YmI1aBCpx>auqDz zT6*zof;aX+ny9HwHT5=&rnbOplFp>fc?grD{-l5+T#=HY`GFvG+NRMI(!lY^1}NW( zUpow3tp<*d8aO`JfFsax;)G5>k*tB+oq+%;7{C;r5*RA)+~0T$Vc>H$a7xs`DY*tt z2^b6AAq{k84aCEH#4*)$-qgTQU{+H}BJs`kv_-=(y&uU;i;C0pkNhAJ1}$9dU-)fVlXsMXSY9Z3HNgnK{WLh~B@67XqR%BKJRsP_AFwcj7G(5m(abKqXeOnEdg zR2CkH@fPSFRrqLB;iI_<9}QSsaXBCzx;9&i8x0-kKaOSy$`<0+4TbAf;p0(-kLN0U zJX(Gq&n>^da^)8uxQzaNE-=(xbdd3uLw};ydf++LuchcY)i0&!IaS!})fQ64rod2q zBYtb4;sUC`VaiRxI&~B}#MiW&>$PtHzfl$G>Q+kO7wP9uhYAc8)@ay251!Dw91TPM z*1*tc#{}bT1HA@P>>=LG=5mu6ho;2;Ltwbv$#`6xO`?f=gK@Fe{>MNTLWA;8Fiy+s zN387#k%sypZ}26Q9>ch?Ac@uX!H>}FSoY;$K%}1QBUm2!5N}yn8-58Kt|MR>flCWm zk$)K+&eCI&o)h=jeohYO#4#n#X?xt(^h%L8iaWN0Y3xgk8O4?Nu#{jxaJf7zXU7DB ztKMM+r+$o)ZsqzRZb%Y%qqyK5R$c-YrhQu2knbxR@qGj=*0)S2`2CdALe3e)I!-ww z$a#&(_E%0lINp!>F6w1~PuIFXfnu(8^D{_IlklpAD)~R##;6P2(zrz~Z=x&zFK>I% z1#YQt|H{{SbXA*ea~$s%o|#vTzr?!}zwy9NI**6_F@J%o*PF+~{`NVY$T{qvh+NVH zD)*8mJr-LKj)9><^AkFJkU1X&&8#>K?@nNyMN=~nauSo8IX!`4b>&s^+*foiWt2)o z$C;#?41*~@?r`I+1nW`N(UhZOSVV_X>0+5u8Ut0wQ`Nq*yOwJD@p}@itv2QUzQoDF zL!nvEmDPa<}5qVcNG6HlZBl6tU( zIgio@lgX)wf{+#m7!HImeMy-<{8}NmT;&e8aKc9m>roz{z!I+54@u{KS;3EY6A&$t1{ zTtOSB8tVTXU-7sFHZDV{r;SssN4ja_RBK~0ZJcUtbXpsyTD=`bM^lqtT+mze^gg>N zmNggBpODEAjn|hn4^nJ0OR7P=9=M6*S%z4WN27-Yp1%?gI*qgVfF7wtu8cU#+U+JH z4bfC>Ke6N+i%%VtR3)E!FUu7Ny7|OHF zX@iagn(wR0#6cOh-roCrBcAs#rt-9+8lVKtuk2=&l@W#o=y{ApdzJ zBp$wkzj?A7Bq+*539w%mE9N8Cqw_Ik9SmUq5HxNv3E2u$Qi-sj@lB+1KLn7H!_#kA zdbp!&ygb?c5R^>@E1$Cz0WMv)db#@{7{tB?8#S!W3P$rAV^+;OuXtrfL~IYibAsm>S*-6xP|4RwZ~ZP*`t4 zr4qasC>(0T>ap_zR0A&-z&At03t{7Gp+e&%1 z73ND-O z;~{UU&zsnQc?$oeDYP$ZXPwVtBm?_i@Has7E6$5t0zlgKPsk0L@fwlh= z(t0%I%L;*fk^}c?C0?jULX>L3Zg;fz2iSr&IxzvY&r$8RTJhc;$rpSAF-0F7^bR=j z@GW}wNH+fd!AXc&&mI!-Y^!?K3mDNqbUP%24{3kmFo?uM3g+F5QF7=X#cw?2W609R zyp>YU0RQL~#51%YgRt6==jTpgW!oBld{liW2rQ9qknV zh8?Bf#Y<;xiciz3WK*nEy%#W|Kly6J3!Y{EPkkAW@$hvjc^`06e$N!VD%fnF5y^I? zG}}*)WcwMBY)?nBT`A4>nVRi33(vG!SZ=fMEUOdWS0og_S5Vyn&yM!z{0XS?XUsv{ z(`PlHYhp`uwzZ7*oh{Kh)^ftOL`vl+Dp_OZTE7=17BQFmts9g1=bVe7)wwpMT9oEl z93%4Os~}3@YBoag=bs5Ad2R6h3je%s(b8K~=SNU2jG$T+L8X+US{y;OB!X&b1l0u* zR7$lZHZyG(9w^0SbV6<#yvP=wz2)1NzEWfJF#x>S>KKPxWBp4m6`Aq4HP*j$l{`<# z$Bx0vtgeZ+z%R4dkKkpemovG3j929)k0}#AB1clDER<%P{l0 z8Wb*+cbi|=M?7;w#4}3e+ZoNF-6e z=Y@S@p~xDXAI=jp2~+f(boh)R4o-mE4I&=q;cv+fbQwkdzOkQ!pwazeG@ms(F6N9% zTK1QCY%t;>FP|&k{6IuYg+EER~I@Z^iErvZYiuqP`V>RLI^^*@)_7`;u~I$-%&_Mg%}b z;xip#P?ONO)#w2{^Cz_1h^iZHZ$sE@ zw?;8^t#&@C^--%*; zCyLR@D#mvtt7Tj7U(sMK^xusqlMds%QH<|KF*;H)I#Mw@QZc?8#rSR%{qazigBNd|~732F+jPFM=z8}TtWEJE4yZjhK9a`#t5a&T^i}8af z#t)(x9jO={sTdup7(a+&{2+?)gD6HPs~9b$Z25c=_@sRLIB$-wewn{L-h-JSi+Ot# z^Y$oaM=EAVDrQG2=Iv3;+oPDbM=?8D#k_r2y&r(l-7VX`u7hvfQR_l+) zSz=hOt@OMa(NbV+^qv}+D=^kxcMV^Z9o3b>LFgj$G+*s9y{Qv+5oxcwn4WDghMMb7 z#ED~eG}MlCH5i*P(cNGy#_k&6ZBRp^x+$yrY_3vSJ5b$2kL?51P&@V{EV4rNW~wH* zeN=C)bDd-iMIOO# z3&fUC?D#{;m)U_#e@$x+)#uflGGv%P%}6>Z_9lKI#vJ!j6mh3HNyN=?hTsfrZAKwv zyv~zxq654?YTPrj=-`c+>W%)C6udLFDD-*NPqEDO8$KvjoSou}9w)z1|dG*}pG` z0fNj=mJHnitM{E^ydS_{4OcQniwv#v27;kqBOujfyfI+dz{?Ha7;($gQ14W1IKl68 z2&Py~uQ0ZrcBEKO9o3#kxKcIrhz3VZ zz*}q@;`Q*G1-QcSz140%kB2M|b*2NIiGRB>^zKIdmLZv!)58aoEz>9{Ldc{ax=e!5 zo%F@s#!#Sd3JMYE9TYkqQg^FVS50dUCB^<;SL{=$ERIO0=Aj-rst4*#OSq0idppNKHp;kMhH#Hxq9hFX8o!I}|X00G6W!z9YKX ze1516NIzQ>NAwB$k0R(D)tQo|7)SO3@SjkJ{XZK+uv>d@E(L(ME8ssX;2t9Uvm)%K z7ypvYdr8V))mp#R@5nyrAH$|R?i=b}dpdea=>G+NbV%H{O?j)$(70~=onSN6k}TjU zOe!WY-v&*#_&TCT9ONiL=7=sSh>q$^O-Huns{xzAj_QyMc2v7$u%p@}gB>*y=~)8o ze#$pY%i1(X7NDO(8kwGyrbi2CO3i5jb!2PJ+!>f@PWktsIrTFWYGfKZ<=Y{FS0nS# zn97&XuvV7D9GRdihNvt0Symi@YK^kuC{)8;1PV@0P`9|EPO;h2;wW3z9c9b9qik7s z6w7)m%lZVk0&ZwI6TAE1iUzbmHQ0JO!RHg&)>_$mI>An)W;*Gn3F;=T2NM)ZJCk#; zrmY7p0%z>&%wcRHCi#XIzV5|H3C=!GtxQrYJ=V%3wbEU~wtteHuFW7(p5N|@4>V3; z7M|@JYD><+rXXnCs2b0XYCPL%q>i~xhq&5NX=wb4t=3h(p|%x$*oX^_$$IOFt5jpJ z#dwu!L>a_Vn#)OavKO(NTW!zHP{#)RRzc5Es%N$8>9=}Ts~*;|7ifNsZzxiAHjY3* z>^6#FMthB&(a!YO%8d3JC&r9eqZ!d_8>BU^dU%bGQsZO3p|%xs(f2_k+6rdrM&FRL zW(oQ-(9a+y?Q9e~yb8w}+9-yC%u>`|WX8+>fgXf2hc%tZ{=kx{*=)yO@mnP5jD|gd zIZGazO3%O|g9|;Ko%<%O6*E%UPwj}F6!bgda1IY%^{0u(gHxD_e@#=>or1RC_?JpZ zR|<2}j_6Eb0poRlm4vjX0Lc*(Q)u3Q>vJhAz(?UyQ?Q1y+2_PPk50iOufQ+@B5+rVB8B zgqD|8%l%O;_d6}NQMx}z%ZbGD2tLnB4Hsc3iL5-J(WdAT)zW2C^oVNdlv?_T?i)Ud z_2JPV+sLEEa#Wgq-7f+=gy)cAxD+9L>l237UyQLRjNPQhURGo3^_SIHnxp8K13MZ< zw}BF)w$O^gmZMmmu4nu3PGG3|bNsrX{#8}~PShjsIFCT=yKtQU0UQaDFE7F13u1dU zSr>c|MfE`z6$;b`fqhNvsgZ(ct5qK_W>cM^I@75#cv4>&EEF|3=aY2XKK17YPu!YbW3RKeFuHeqNa~yTd_wL z2Ys-o#_MCnA1!NU1X8`4^?XriXtU*N4C`R`J=$g4wn(n*^E30Qe39zw_p0Zzm|hYZ z3QSyqp%sJ*hCv9?F41VGBT=JK+x#DdhH<`Gi3S((9%DST20ze5wON1uKod2Q{``T0 zZKc8=sKSG5(B?T}0#mpmn?ktV5wja)Z(l~CpDQKcn%vZ1>ryYR-bz_H#A!<4y$Sj4 zZw?KyuDT8_81PmNw|F-z-X4p0v*PV0-p#7Mi}}ALiwd6pT}XKh?rfHi03lhP2Ww+# z?cLDO(t?{Y%7C>WswP~J-AEMN!5Z09+LUOX^nYZ1pCWvmW|#tbEHxeenENUc^# zhbkn^i9;1qcTGP8m>|e_7&by_7(mr)nF$995sRK z!#a46?U9NE?&OZ=ALGLD?cA=r(vC&bsSc3$hI7+3XKiW)}N zL(|PMuH=KB(;yoJvhvy*) z-z{$IHR`R@>)qmZ-VOCu-t>2iv*nO^Iuxnh;w(~}rAwW&7q&UZ2~}p|q=>ahWW3@w zyujSFq^++kHoM2|JMI}nn}DR~0plGH6jHnPu+#n-v`N#@M=OO1H#DJp*u@4+{;_^K zsvTFTK*QJgiH1E@rcE?B3bhp)_EZgBqQOzE9SG=kNMP^Uyo5R&N z>rSw~Ib40S_5^0|;c;6jA2~sMafJE;tr7C=$aroYbyS+w@+k2kt}U?DvQ2%~ZmXpu zdm0X60e57#%~VIWHGGvD+GT6$(c)h=fVP@i+RvP7tEnSTkr%W{awlbwd31@bipRul zRa~{CLH5P8$GO2J$ZT0`tLCwBTQ#@LwpBArPqtO@xVWu~TTW}(!FPk><8&kBPmrqF z5$8^sAoJu2wx>-Yki$M+hFNDWVlMnLZkPjaK82&d$c0as3-I$V)z9B7wl(ROan>ZB zLbg@ums&!%eYOzA$L&0oT9l8G=uE@KnLD?JNbi zaV9kuq`(<=$xtwEXWJJG>cMEJs|Vvz*`0=yR^3>?E3H`%^3!D{*N1tvJ8!g6{+4oLIxHH2!v+U&D(9=}q8p6At#^ za9>U=*hvnzxL}71cfH^$*H^*eh7#;2;hq=7A&1*HuzQ0$Oc3WaaJV@Fdn34C0=CHE zRs`%s;BE)>z^8*A8H*Nz2S$>EYQR*bo- z4b1oiN&^>Yu|CT+WY{9-QtJ6gR%~%1ZgY`0{0syJDYlfxj95vyx3Xcx6|56+EN#RY zRPjRzjs>mcJVX^gQcgEH;|XQ8a(c*Vq_gf+P8T^prJlQ#Gmf0I2=~Xz=_KbNX2VaE zGoGB&h-Zy*+Q~VToV%4Xft>Sc{T}7Ck#jT=-m9Dra)wj$eaab2&Z~6#PnDA<=XJ*U znQ}&h!}{#`-aoKIL=U}r%Wy#=LUTt?xJ# z@rt)Xx_dK@5mS1wmF^a4CAvg| zG7HQ)CV7~lPr`r4DPj1f66Jt?8D{;malZA-Fzc5M^9v`@m&01bP0!6wUPBclB5vAE zsq>R3Gww(wzi(YSO3C@wi7j7<6F1E-S`HM+Ef{zMr?_Est`n88P8^-24l1wTSQ$Y%VoP~Q7-K#S*#!XgG>7qUHH^biPnJHo}!JdF|-e;*t< zjS?m|;4vODian+jmVJn4tEQZf*!yeM`~`%lfh>> z;t-F;Jmyx+Lv9EoJbMgE4psdGTtQpr+2ds4xTnCfi1z1WHes*1s5s}tlV{;~C@iPa z!td_DBhCThugsVJ0}uM9nJ4E@!b3SAkdq$aVQkNsP%iw1hrflm$OJim5>9NFFnj*Q zQTC)qcmxx}@BK>V9cjVgI%gUPkD^I?swA9rbm(jy6S37Ev2|?3mQrf#xQMOeWd;l9 z^Tg>LRL`#o^W;c)f^>lRDlkuugeOiD{PyICqj+*8)Em!vawP1$RATYuNO-c<&66YH zDOQ&~ITD^~@$uwH*mauN#K{qMCM3kY*r-mCS&r6|B;jd1`6uVx!tRR@7!NPUUwh6i zoc<7=ZGGs8)Q1@i$kvCaK!}k-J(Cj792A2f&!mKBK5omr&BL=Ie(jC;RjGWNYqO}r zZ!ECsXa*rB2HR69;cOZW_Cx#V7k-Ki)vtuyfOu>yzrpYICeI@+UkSO5+A_T*yb{1Z z+pmNyp?@>|IJUBvXBLQ8Gjl=lN&ripM3>2>nXJnPC`z6Mh#%X3*aFh%J+OVIdcxX1 z(`rqZ%<03>==>QUaK-K- zTgYAmC7JcDS7DAOlqzE=)A2Dz0mD4+Z-`I{xoVRYtS~=ByXfO`SVruHjX5o@b4kR4aUCA-ycXj_!ZzYF)j_P6^ zVq0R5fK-^hnWsmicSo99KErqt>G}prWisJtNd_m8YyVD1O*V#cHhzv(Qp8(@SL-U7 z2Ak|6R>?HjWZg%Su6k&=h}m52scMB3wAgIzPRWSa$$C{^vaGn!5aV1FHqGZsEEGGU zzmjEns%#1KGjqM#_vvEX4@+DghK6fl#mh$;uwpPzGz6K=^D2+$t}-?;oc&-vd|&gS zcQ6&6Ckin>_RklYN;$N)&`=X3=GoFy3Tg;^!55+mGnj~%!F#a!`JZtm3@lGn%gYq| zY&!$A%=rXjw^Qt6V<@uxYm8vwr9Kt=*d-b9meJ{78pAl7@EebKYZ&kJKJwWWqIF2k zn~LdKcim_o0l9ih~10~}xh82jnWmK34Ss4C-O+=7sK@YnU za_kPo-anjN)dCys(yZLIv=?A+2V@rF_ax+II=R5NID1pQn7avdeZIRAm}9!8-(Ly; zJEG649l&Bz|K)Hc#{3ez(hcUwZ!_=GPjLbIWbg>Y|7+8`9yH6n3id{;h^8-Hgh`Gs#N zu^hiXV7P%8SXzIf3GK(^(pmyuX8|+fHvDcum;#`d1mxxzZgm}oq4L+YZ)rHfKCdn)r|OsZx|^o@;xqs?a7EJ9AD)4`US@Ovu_xu z6TcB7J?|vOgRlRr+s5eY?S%A=Zy09{ejSLngz@0KZ*->%D34So=d~=z%bInV&A(D5r>+4Sqh7B_ZB!S@Y@1zg&EGcrGX)5)c_=D6cl38 z&U(Exu=T0Udc9Ql7EH8$Eeot)+o9(>ELcMVLmjPnKNt-?heD5dZ-~294iS0LmERZ` zM(Ri+0}%0YMub-y)f{??e2Jw!1^a?#x61)K2D1R|9vI5^l=|K>=-|!L)UkV1$L?+) z26gP2qvI;N1D8cozJ4IG96CxdH_2Rdw?Fo>_uW4r8!co*ni=&S)u9~%ucDUWgb!Tz zGi^r&hWd)|dbAZf&sLpBx&0f|d2~QFRtqX;V!>sS21z60h_vl+E^zwGp#Ko28@Cox z_qr&-BFRsJ}gfjyUQZZ-FHs`EB2OyQlVJIcL zX}Beuz-9#;uLhYf7fVH&txEp5nC_dCb>C3aLMS(2*AifK4fefpfKq!5eR@k^$ath0 zc?0I9#0NXK1bo66X-bvsCA=kIzko5)l+gXSy2Lcloym z%SHChDQI#SBCiX#f@k~U68Pp?CK}tQXt#3+ia2cVhWW~>UV^$uN(C3Ks`8nO_lV1b z%-SUlGDf*i(#>t0n;_p&>D zwhl#J0n0RCv9>m){qk@dT)Ah=zB%_LzSs7JeG#`aFDV9(F7}IRm3Rr|e zaNa#UUx}mZK`c~)v+dy`B{nk z^9Pn%$5~FzLvlI&K81XJl@irR1z;NhoDSgPx7#{DRg8YARZ(=V0n_oDGcA&a^wuBjgm3Q>G>S8gkY% zU5?X7&b_&u739n(9v5dGZQ&Idt1>K&z>^~90>&A{$tZBPP^yn{D(NQJ>Jh@*Y|j%x=yRF#Bh?+>TIl=4u?)m zmHi(vt)5+l3(jOpWl3H(tGtXv#gT;`rc^7~T;%@_gam!)g1+_g&PBpP|AY`R5^^QU ziG0KiDi+-suizzQafs7|a&w%-D3)g%r2vtO_P`%A?{fU5dp6?Ni~fvsF<1Up-~pXs zF(=aOb9w;p*8Csry$gI))wMr<9+Sxl2_cY#guKX0LBu2=qE-;vq9T(3D%Gf|4G=OD z2q8jvXi+eepjCTITD4d$lc3jYA6i@O)iS|quea6K_FBs&pw??!ZSAkNwFa!M*8acW zwfCMm14(_g|KI(6K8?;WYoEQ>T6^ua*Is+Aea_K=wCt2X8X$ilZJY|EWk`xK=L=vK zFBKw%!}#n1l{l#&rck;9%;Lx^o;<=zl{PDEJ;AXaL#4M^X~Pv*Tr2q#!5J{%RI4T( z+3UD@J5I&n)}r4_fhuPj(JZiu;_hjV^(xSu0tqWL3w&tK)@ZEpRcz8^b9%B#faG-{CFZ*E5QafK8VjkAowN`kjJ$;RybCU z@2{nvqstTIS)ZG&oYUF-N}J7Qf!8iHT>_nDU$<%|vmpchyFD9X)4x||<8+|@9mxi- z`gdz~OB>GYUqv+Z)3R~w<7&lvW9~MR+oo8$C|m9~*sfT*Fq^0OulY6jqc^9tjxLKR zWPz1;A)8LHZL--s+p+q=YQDXgr88`sC4sY{NhtjmT1}Lpn_+9A( z%Iy{Q*fSjMKuPX$7F@)cfs-95DEbSjWXnXr$qtkh(}22Tl_OG2+i8FjZquEt`+*In z>?RnTk{gL`?2lB*11t%$#4K|+vSdG78RNf`B`>oiXNPKa9ZL$?YP?u!K^uE7r2aNxOt4)7h$0rn5RI@c!ONi+mt$n11#prB92M?z3TT){7{S(^QAe zrN3Hk76(85uPE^XY51M77e5P~v5ojWM&g;-{0WPdc`zYW&GLSuHEzkeyYfk2EzH6>xEo4}OE03MAf`VgU4eC`F^xIf9l$E)F z)HIZn$pe@M%FEo74yXZaqeF$6dq_<~lQMtIni?v~T*^+aqM@moa|kVYg5OosGv9*BJ4-1Nr>ZXVUx`ISv+xj9qA8zAC{z#Ya@{ z=VUT1>3sCC@G^hQ@)iUf7O0vFGMP>`(84iTan4#H_3EvxYKVS8mQ(cz<*<$FS*==W zMb=Ot^AcV=PPOwg??PzGKx33z>uXt=?N}YvSrVrzTWQ%8qKAye$a`$2J_X3Fy3td^ zdBO_ked@t9P6)TE2Tvno-&j{>#M@SoBgD!ECa13^VV9k8PUMifXR(7d!8DF{ z7QQnEA)gXw1~YnUyl1|NdNcz)tg0bB-Wu{Ue{c$}ovcPNE3<_%*3j6@YYEL#BbBX2 z;}kU-=;sQAo@XnK%2Q)=sv4U@YwT+fP?mGI{WN&Vo<-_klHXt^TNK=YfpOwvec3*U zny^af3%l$E*o(2>0qL#I#$b04Xy)Nd{|1_Ia%6g=d0I$zIlF2=FI%2|X27g$dHR_F zbFxLNHwHgTj8%Er@*IYZ!94;_&pyr*R6L~WRJCWz)6Y!X&T;bevyH)rkBanTwn#if#3WHJPti$15XYzNn1YjQm)z7*m)4!PG?haJ*{?^nG1GTCTY}Fd zc;1rA^OjVe4XAlGpyt_tn&&O4Ja0+mc}ptKrmg0Aiwr$^&SBiP({ru}Zp$!&y&{!K zT!JcLVOPp;K+U89HIoL^OkR=7NhqsF^mPX4-(7>048ozBQHUTT_`fZ8g(|jl^q@cY;HDiG%nog=#367o$ajiCmb$-U z+b`L)*Q~dI9&a6Dz^FS(9I7vg(eDdS5{F7dt$DKOenreYLb?TZCh{KHw;_mlN@G zHVdw+cdX}7co7lH8t|MMY&qTW+?P3@u&pYxzjY#h{l;dC2O1p9n_*d3p;aFCmcLa) z*MVB~to4@78jm0%ISaKOMXg+U(DPf0v6ftku)oC%c+89%rne2#UVy(!?0+SuJliIk z7nWd`2vp<7BJeJa^K8|+rA!8Sq9_1#bh1dmfDz!yp~$hPB#yzQNZJBVEAW&{cW2nT zzojzBGekMiVMS#|DwUHpl`f$D6ZP&aoKXSFr_Oh*hk&*;+n_y5qpdF$_Ri9H7J}P4 z%Q?qz3lM1)14br`Pr8tM00<^LSsci7^+xxCiY$=XiBH)laLT0Bmeshgsf?#g4AfZ0 z97wA^Wzt;6QziylhD^t66zV#hK>(V@3or@6_0{0IlxG*#DTk!5U5RF$?n9(pj*qO< zMnDv=AlB=x+c(4+R9fleq9r2E)|da z>zY6l1#`a!y2{`S8X&@#dm5lqG5vsH+Nvxg@gLhZ2|sqRW8DPeeMnDvS5WiY ztSQocO>G7r;GaY3onkGLXp14lzw~*IU9KD2;A)aG^ z)swHKcxUU3eS4Xh*;5^5XFEY~BIg9&5hF-plyh4w^p$O=V&pceM3Y zCgyQHnh^^3`&zil#QZ?Z6DH;}RFM5RkwSE9a99Q?ug%4HN!(+nfJDVG7|R(tbrtTUlBIDNFlG%6J(Fme!LP za^>@!X>U6=`8;hcg4W>mE%FL=ecR}6xoqR#c9c`oEc#=avl(Q}c8y|-@;a_oUZvWu zeh*#5s(hPf^F-Gssf8U#R%7aQ<{8nPs2?d3R*Tz-E-#_)%KV<_ssV4B{9}&UNv@h` zUFtQn25c{rU1p6w8_|i5(l4q$z&3d2CL59R;5r;20`+fzglclGZW4jYV7e^Q_}i`O zIu7V6)t2q%Uyfr&X!{qmRfD?9aIR2=Q&B|{s47>Jjcu+?6oXg6H3OQ5k;GA!ZJYF% z_swJQ5hJ@sqrC|4HN}8*YcY2yDp5m4X-Tq1`OC(CI)}D3?Zzq>i4Mflz$V$I9XPgyAk8#HxfQL4HR*O`NFLT*5JU2a7K<_@ zkBV5FJ{XeaB=r4&O>{3@i}NKw$=hj^oWE~GYgI1epx~Jttn|XCaKsB0pJGK3-vKQ? z?HwG@{nFmS0nLhd2M0AE-hlzcJ1~Iu4i0IY?N;S)+40vw9E1;Ek7HvXUQh_)qFS$O zYT7$^T@%pW!RsPBzUH&?0Q-=EJMw{I>kU8!G)sU+xndb!ITL55*=!Tp2|okvzMW_{Q@3kTuEQ+d4&6P8 zi%$=3^GBPTa44e*?E;fPPYCpwid^q^q-nFL?BKO&JH&4W(^ELIccs}x(0DVpIY7ck zV<{weX(Zyw-ffU@4L3lCQvENbCB1}ODZe+;Y@*w_3wt1-+)I=)N#01KawDx+Dlg?W zpe!qY))YD>&m>!K>c=~*oh;Mhtu(4Pj|x@(p4Ph(H)aF<_FJK9An_VWh^Q-r%3QaX z%T~2gQU^}o8mn?6ho~-Sv(5A`;QSc^ZVPe3MNN&mpqZ7Ia!Bg*E%5WzESxFvRc@TN zlDU&5eathNm7m~1%n91WxD-i*(}48{39NH8)_TRw9L-IrT#oe4396AesEUR8nuVoS7ZB-JBm$l0KE)Eooe@la9&UP?8yL#6CNnaNz$}Bcc)cl0823cj zvm2pMycG2yN*Gl{P?3Q~BtBWf7#<>c3^O8;dI%+qk0Ct9m>KH)EXz9KG4wx>K@GC) z6Yjx33E&n#z++O0E1z_H01rnct{{An1b8GWapiSCw%_@yMW^_x-N9-+(@A!i*A3_- zucRSAi5tl!h&sC+PGK(cwqkf{!X)M8gD9MtifPdQc{#K8( zX->Qx!r}{CMuw;?Hj>Qrf=_IW;i2192p7*naXO0sb2H5IGs)gy-TdY&& z$CJZ4OQ=j2Ed`(G`y7yWwhYja5_-~(e0qr?mR8Q&@aAK;rpRRTURoGmuL68Azr30#(#B5@ov2Kq}oAsHXlft;uyba2(M~S`*ut!13jrB~>cj z7nnksAPugP_krRxAVWM8-zs?@IGxocc^~+YqNtMh22#m;1F7V_fmHH7aK;Lu5y)in z-at&=2j*~{;5mlRK=%x!lJ^Eu$$JB-Yqy98%QPZ4OEmVx5b`$8gq(O#gd>8 z%v1DKg5E$XK_8f}q@)t`fe$MwsRX@&bb>xmb|O0B1!mw|CFlbul8hv51JhMYm9RCC z9zlIgCFspHm7outbic?#CFlb+s)s5;AE;H5R|$FpsRX@&RD#|>DnTFMJ{7%J33>ym z1btwJl7&jp2WG0?s|0=EWTh1;QiS74_|{&)_HRP2;_Yz`$7{EVsA*3_sxM z$nCA__j|s*Rb_Q1*dIe!1Gl%5#MZCjDEw)N_}ir{TyC@ADSYOmuo`AJ?@vh2ILoE4 z$oAyg+t4`#sadD|KAapxy+x?U8%iUl)&x5frqk)PS>rT(cA?e;yAt__NxFu*88Hm}0iT65ux`6w1cuK?_OTit}xQSxG zba!G8S^JWpVDl&M#|b&0xK5+^l0wm<*!z+~(M%LyQ7Afc5CPD?+acp6Wa*nW@svLZ ze86>(xMWlHO_^i3U-k2_8_t6oLxJR(G}KOf`uA!p{|ZX;fGwyV!U;Q|D~8uMPVI+9 z`SGHSo7jm1ynx6rY6!}DsT8TV5CH_&eN5fOD`kR`JxVZaeRrq2IRvg?Z6vq4bWIB z5hVjIv&!tV*mkQewaHNDcaR|kQ!kP!;bN=iqNPMa3Rj!XluCAGo4(pfI@>kT_Q`VO zG-g}Hnbd_ncm)CQ&iPNs_zcThnPG76F}Np5u4IpH-#lq$2cl?uY}VxC{)F+ZEs;8CSDt?sA9p~6=vmc-5 z&@RSyqDIH*cI_p?>lA~=D!!Ofn}s_*(PsV+kkg%GSwo3-vrN14EvlZL$p)|NSXHmNtf7_hTM;;uCKPj(kFKUg&2}}~o~uTir?Ky$ZWg*W+n;t2u|VKhNF1UUg}P=->GfPD zicH9zNQ(_pV0nomoQ}i>FytIUWDr=^C$LP{Sh`U2x1@KbYqM7QGl*HD=2uu#?9Z95 zGB{o3a>DIQO|KI=J%TO26$FU zA)JDXvOzJt9Gc&)NwiE7t8KvMaye6Lz$S{cTQk>Kem(_nK&wPp@6m`bNxsZU5(7n0 zd+}#jIzcgSoRMivv$?EX5;-xK>gx1epcsg0BK4$bfQ5>p0r6-7=D7#V0H{g3$Bb2p zbnK4ASP6RuY%GT{&VEGo$Sk1#A-7`7%~w5DDcNB1HkJE0cibJ2~n_ z5+-;1?%$@KdRZdL2e}P(*)I_)$Hzlsc}C@w0P($gY+qTP(~hTfH$Ub~`qWnhJ9 z=xVF@7aUeR)tzmY{SIkBwA;jXP}bgnvN*bxdC0q7Rj&;gf348|clP%7fK3c{{~ilA zuY1)oj#V#wJ zl4i5gt4FZELB*Ct#ZwX$3+=~dpyq-!o3(EG6B0zI`DNDJ#8Wj3Oig8)&rZ`~qBnPr zer$0kdi6SO$_}JVfFb8C^bA<4?YGHAJk4fF7e0Xxv#)z7f$yc+EZP4Ta97st5P1E7LelIxNDPeY~j46G5(_kxPOu2OY+PlKC)r-Q=$ zdC(?~)3RLa1>m`mc({7}+@LuQI{BisLX$llt3L*9RTqYwEV z>{Cv<&05XbAb^_RL(TH_>`qR47e@#OzGSDAldhOtEl-D-kPaJxi!={9TC<1>hwA4N@0 z^?8~x>dc#>-sv{$yo%4usCNVF$&6W$ZcN@Vd0ddL)Vp(%XvG54LEu@#>ldcm#Bo}# zYvp|uI40t=avdmMnEq?&?J^~b3$-ZDr!8pIK!gMM$iO-82YyViU#vzyES$-U{ysy3BN@ZnyKq>*ppxlgmQ zzUmdUd@|2fOUeW3{zb_^YEgP1eVg#479|6tVV)QL3r85aDJTA~Y{WdRn+jD@&9e&jky2)tRI7&%TQI}|$?BxJJHef_8#L{*tb$v}?AWhLi zAMhLh72X`5sK)!^6Tlbz)p$32;tFqRPXN4sJ1v_-!p9Y`jRBg-waH&~5*SbAMm64b zod6z3S>S9=LR`UbD{u~{AOL2R5&%;^34qxi1Bii}HAxTXJnML-bpq#BqXamZn+YtY z&klfTnZObS$Z)MO%_icO`y6B}GWezsJot-G7;&s06{Eh5h@WLInT;JAc%**zZ*Z;S zm!ZNx6E8Xq^UuUf)jtz2m>~a5yqpRH=1aU}G@Swy;$&Qo1us)Pw=p!8Ok)Od#nF&s zxvc19vT4@xS-jz=E?ACS!dSUQPyI%#Y&kqxXKwfzE4Szw&>Jfh445@mZqYMf&RE%U z)dl6@UR8NxC4f;EoDV9v5q7NHqE{EZP{8)F5pV(?Wa+QMLk1WHGi>Nv)`&=!M}3PP zF$s)Y^p@f`KLV%TqBl-G?BO9?r8RvBpU1G`6VBno9=?qqa1L^Kvyl278Si`8!}yek zJpl4Q>|ug>*n>(d<-SRo&XRx(sZ^K30R*M-*y`pn#p$S28fdLuj_8|)NX?neMHw6M ze2LV|$HSj^5)@AaCz53qaGMrb*8M=FvI!qmUSs`uoGLp@M!0XqcpP}wzncplOh@ap z71E^zLR>>l1u_sCYA={arZv=95F=F$EgLUUm2;HC8Yz(I`a(sy1rF*X^a($0le^|h zcx2#k(rYZ+WfQ)$%C)*!23B&!_uZv1H5Fu$<`)!qk?|5(yG`M3FSw1@ZdWy1tVsg| z@3V<)dNtNUAe>Kx(&#?bsLPskANd}%S!KZ#IGU(-GpoTp9aMwbL@__CWYsYqXXo_q z_VIkSp(CV^?{oeo}e&pQmH7mI*8BR zXqgEQi7jt3Ez5=2ZMIc*6PxU|ZB}irbFKZT{$X8xx2awnr=smPoLgmQkv+V(nk}9@ z84RBd4bZK=q+7M9{;D*k)3-t)F<^5=E^&NC8&KbFCg=+^;cC z&=~6#k_j5gqDq-!c{(=USSb@EU*{3pD?|?_>dMP1y2!HuS69fu8}PzP#8L}1nU+de zDg!iEEa&c}P@}o55>v_mO%)H2YXhEdmHn3RqmIoUcxSuTedxt{q&O&-M>YColX)Z8 zqnhibitGPKaD6G+G+;!r`Ix4@qC&LSfXx+>4L0Cq6`~;qY^@Z{G$77~caggiSEdoU zy9uA?z+qf-SfcXIwvJzovSG!0%>A=A=;O{!xCyrkl6+7JWkkv-8wmMalKnQn3$l~^?m&|D!g){`{j z5vzW!>yRxnI6UaK~%3Vq} z7wGV)md!F9*=(NpZlobr*up>PPV1l@HDW*3V=)%HCQT1q?O^RZV#@SfWMt*h} ziWTC=7_hUleI4HYcdaJTUhyGTHeibqJz zIeOU8w91xJ2;U9Ztg`Gf*ke>1mkq`-Q@*RKwM@oLF+j6YlgCYvw?Yh;jY@fPG}vA-pE$;+(XqtZNTr*g2}G!L2EfZJ z?N71l@d#&vR2M!GkUIi$#eb#oI6kN?BA%jqHfzodN;HNwxzoJ~wX4VB1`0%DW(8F= z<`Id;{E8DTo1>NHeibDJ)1+Uj;2su~azu5Fds#5oSMW6!)KReGXm``x`&h7zIC8qA z-~kr=g$3i;&ouWT793*11l44a1y7KVTt)U_6jacGhO@d=+GPD44}E+b_)L(Ynx|q- z^q?9SlEBrN28k;?2Acq`_gDLkAMi&hs(Iu!(T1m86TnW#2k?w*;tG$qCIEkAqZ-+V zM4+XbM~Y3{NoWC!O7S8II*hEPFQ`2nIIfrhHj`}$z3=x#b625XD}mR-GWfi zKRj6Sf8mKyfiZuDeEd(03gqyH4|!r#U_5_1@9Mznmw_gEV0D*3i36+2Cr0T5t6jkB z1+K)mIk1`rMN!8cD|wogM0^NEt3aU4-2!21FJcx>IEj^ z+ZU1|HrA`cb0g}nO1^5Hb5&J0s zs?qE68x&CSepbmrEGN%-#yK%fvGA-zX2=3I`Oir)9~6^`YR*rc8K{M$)7gVu;S89i zP(SaSDpzxWdId(w3s62@-~h=iLkF^)XrPN^fVn3?f+T~-CK@215cNte^-QO^sFk$| z!~@RP)8)}la+LQQ@>_M|N>tI&mOtSq&GD=**LnmiI$?>nSoCysv_<`XztI-n-{s7= zNudd!S3u=NAkTq|G@rfZqc!vFhaq@8_JYI0TGl3{`Obxd&YCi`XNgw#wdBjAPtFmW zg;dc*dp_~6vf1J~d={V;126@$lUlV@D1^}`XO)aoUo#>|&MMWuNnr~ov4yBN>uh53 zHoI0Qunm(3v|p#%cNNI-7Y%h1+d9*}a0;7mm3=jvFTm$^puiLPtQ_2wzm?tyQlFD# z7ag?19Qj@hhuf%>EH7h(-^9fTk*THd7JZXXzp8O;t zQK+;Gl?r5tf2^vtjNfEAKT&dM2OC@2k)I24wwb!swVpz|8`6)(-i@+Z^nqAg@4VB2gx2fpPpU}yjazVkjHxN+1^lE6Xz0F-rB z(Z5st`8bJ+2KV8!9gXfqqf*iHeDl=OViixY75fpsdp=*;$i9|hsA|5(-&`g_F3@0? zHTiOOZL$ghk-)5N*wcW>A#w&ZlM_|T?XR+KHJ-AHI_=vLE<(MzV^qCrL#|AonsU6Y zCT>^RozP6YN>YKH>a@ia&1id>L@f;%!PD%+q;ZCA6MuU*RJ|TgmC!WKFf`buGfbCC zU?%74u#i5zbEd%$g#SW?ZUjOg+ZDwL2O#_pjj&N8Y$w7-%_E*p^l?hP)3#av&K7I9f7iqC?VrpH5*OE zV)Jg*j5LNR^vJt7_lbrrsV%yo$MyI8*jkr5n%j<#`xd5Djp_vC*|`qyt4>Z4&R6qBMorz zv(Om~#m_YQ%ZfX&^E6Ns`}s3@2A6|3g|BUc(*Hu9Y>anqlt{qcfDyjv!T`XG6rc}?3BrTBl*Am6BS8Al`y$5??c?Z+^CZMT-X2HI!uDbw1~O2j^pE6jk3N_jE@=hMI}_BF`=Cy%=oJ$9u45B< z&Musv0f7k&AD}1SHH|o(zN?9KT9a>Kn_oDh7;IB=J0!l?vgV zcWqYs>ir1qqN2nnIMn45lXLqX-bQ-mF2&7*l_Y4O2k;7YMBH`sP6TOyjxzDjs@%h3 z^qb1WKQmxs$rda+)ro_sSNNcovPSCsar%hpN*UneUHWWz--=Z4t#Pn59Z3mxxnJ(+{qf>X_3C4!;4KIZ@BkL9`~$j`IV%)T(6_ zwNkb>1Z)z04xe2h{38;kxNgu#FV`u`H)zVTKHQ+W61BTQGoh{6r!|Q6VIDhniweUL z|NJ=Y7ii4PQJuTRkH!GaCF{WQE*+&@TXq>uivib_{Tp!_umf8ACa*sbu!(%?50IAw zftN^top?ZZ;vCBI0Znc`NBjX{lg|L5?EYQL?lQ{G08N}A4<8VS|o(aKvD+iWXC9UeGQ< z{Rj3Vnuj)g=?hu#f=bDjmHvT@dO^j+QVMEJP&wctC3L7OBG;?obZ6DKILS7a3HjZo`R!06wmrcl`gx5e*kVmy%!Uu9i-jkF?fAR_B78oSa+e;|r_k1w zw$Nr9u%q-d*m?j|GK!S;aB>;2MNQLh>8o5ho*|`2(``~{K8(Bqwi{b=O;;XGH`5*b zJ*t~6RsDKYbFhT{`VW2jZbeCb640G|EM1MCjKqIxB%;g)Xc3kCZaTMhSW>~3M?v1} z*<|U3*O6reTZa>D-Ro%yQ$6nWR9_nvTldN-I;ZbK`l1F{raFF~uG&tPzpg8`QbE3< zuTXziQ6$fLHtF{N8H*ffugWtbdDhTYuEcM07bx$K7aA zD=*H=u!--qzaX^s4x()deCsfM8)&x zG|w%izao~;X;zwrmCtD;&_v#cb+cxsi=%UkuGxumtynofZ^(n*ABgF`44bs>#OFTH z3xi(izpD#Mwk@T91*fQ|I^SF>8M6BlBry!%(AT8*RDpPgO@z0n1+3?Q^d8-bc%l=6 zBW@(9RC=Ee%NxYn*whM0w`##ZHW8}47M9a{5Gf-~?YMzC4#tdRu zaY_|A4lBQNHfoD1f)J?n19^yOQrIN&tLCQ3BxGi4uT6nNj&Tng-71)CB^S_n~0` zfD6dFXaKw5B=8D6%*2)J{ndWs2UOliBRJKMK;?b(6_xkVfXe%5K;?ZjppLg{KqY}R zz~_ww8dgst*DB#sWp4#k&Fj{2pJu$@`xjou+uS56(+R*ThekWrh2?0hk}{`aT$z-4 z1X^|7rhwJA78U-{Cs_ZPl%Zn$Gbw}TqVTRh^W2aR`V^6WCS~5;Q$%PYoT|T9QYM3s zBJdoKdG#@J&Lg7>mc~K0QI2_NC}6o!+=J|ly%zO?j9q;mA4%+Nv$FDVYk9eIty>Hy zmWiF~pYAFfaQq z5OHpFPnN5NDtGc}_jCbEka(fH;RU!XcygzvdFlzhM7$>h>}Ksl7d+<&fi-9}wsRf! zf=|kCaH{bAFmSox<1s37^O-mh_b`WXW1_iLPG1Y-n0 z!6GJsadG{^{mte z1zRBMhVZ|{VZ~EGWN*Cqv*&1U+RDwwpyCNLY&~^sz?uULm+PcTD;1e?^vJveHkD7ztt5Z9+QiqD8?YV$&W*@-s0_!g{E3IN=FN~=3R?|()te^WT@bKND@1MHKK&tErb%C<@Ds??8K|X@H(-BAKlr}AkPp5$ zP&2|EU!yuMvuzT+sWf0M0O6m3aM7PQQp;?mN6U&j$lx-~$I@c4Qx}?Wb)h^!<08#h zbFoO>fRSPmy8&AY8BaucZtSe@W#3ep@(6kpOTv=qs( z8?ad<^A*hj(yANC{!7SF0mET@ZU>f6B(S`sv9v2J28>t}PopyZ*0$LuG9_R=j&@J6 z9R~8ZHYbI=m070M?=`tdvDkP6wiIHM^{S4~H>>{r!6Zqu1$2!GXvIBK)GI{%us7|UpraPln^{}IK};J zlBFMkz1f=h3vxBlwb{J?%8<1e|AcBXBZ=`OGKqJ$6I%d}g&LXWP|J4d>_$f+IJwniEUePI*x!d;o6Q%T z8L$ol#l(*i?*Z3lfi)i;zX(V6vk~o)=*vMZyGU^@`8Hq+F(1;HVHtu%@``H{!3$>x ztU4gMi%6bitKXU47oSJ)_qvCX;`2GA25cz~5`0yU$I9ZZMEVDL5<1?>4kO0Pv+!_g z5a!ANxg^colNL)S_k9D^u9;Q6;00}bl;u36?!O$yYsC_xcu2)z>KA@J6yHdqF{$s>){QWFd6-TAhz*;tVoCWAS4YodK5>`i?_)6k?e-XQNjXOA_l- zIyDg~mL!$|Td?e2fN`F2S1cPa!hSdC+|07#f9LctU<);SaZovNE37j6*X-Rd zf;KrT=?Yjo!JU)G(W;XRYTmzcb%DG?>KDN;OE+J>y7)q(eMuh0Ep|a(8(`qKu2%N# zm%@eH_r}%Az!~`P)wFQG3U&#$!EMFz{PdS4W99Y@Up@J$byy!d1J)I}Fu`;c-wG;M zu~}S212u`O_?Egi64r>WqJbK%$;7Z9pKlv1f6-W$2^Iq_6)b<(@()K z?pw-j{;C*+P+&-Sz0&?1C*2u%2nWj8lJUZq(Rwwm(*K#8&MRr|TLCOq`S)^Aa+XTT ziwFcj0(liv&Fy2E*~Y}toXlKAYJ7vTo3~2=kK-Q` zZ?5vko2&d$<*MshO$VQ={ITOIf9$x*9~7?I&iL6PPIz#@$5IDE3|9cSuNuA4NB*ns zK$$t%U*(U5SJzSI6B*AyqCx@poCFE@a8!D__#fm|7^3eufi}p9$P?Q^%R&r-aaln zH`C27&K_@1uyYvfsJ1dQ&qNWlV4~$_e<<^e%yV-PBbA_91%n!2i*tA3)2X*j@Skr{y zIL)SqsDNobB`eu_JX&j%tUjT}o|mNx{Izm{)K@Dn69Sn4`Q#_7pPM@eLp`w&A}mOj zPRTkqH%Y88iDq6Ft53?er)04cMQP|Un!Xo7E7_){iZn=(o|}8xm{~xN9fXku#pjt} z$Vip@7$f&gBloO)YYN(rHSA?8_QvUUX(RxFCP=5T592j8eHEfKGD}JzH+8V`QU@zP zIam{uGEBBENFA)g8p{lpssn*0oB0J_gmb0fu$ZG$lB|+CI;F|cp(>Om>ZPUDo2(Mx_Y&i(or;y)4b?f$0utgF-=Jl#yd7-=wRbcs8Om4 zghnX1JfHxZqg_x)k+rM zQD$eVRe=gdo^FL^aQ%c+oFlam8pp^#4s=XQ z`~_6OQnR?fr{!Rz5i%l9H$&waZOBL+DvphBsJIvKEgo4?In8V(#v1;zlS4KxflvI? z9E|`z6_=a8gS$GCkdGOkgjb?Qw~&TwQc}DWZjqTG#mP};ZH{+|y2hWSnqI=SV__Ne zfl|_*A|9>b2kD$rX!>eJ0zV2AexIAF7_3Ux@hcA;Rc&~Vc2%`PY7#zI)o%@upi_*% zRi$Boqncz5@9;{popev(7pT>7x~?h(?|F3`NeRu!`B_ZYlGHA#r&-cqMpCcF7!~%p zW2uuAPvSAUN_NL4?KjLw(tf9UFFyan=gX==8BeVl*>mwDG~IcR3&KbeGJSl9Eqm%5 z9l?VbWhZ&;)YM9Brl!_ff{A{c?osdG%T7{_Md}b8y_Ymo5Ju8ePYzGfNHY(?TK`m| z$@ERc($r~z-K5h0R4yhbMlWSjm-~zTz1F)+3ZPQ!n4Wi4$L{;8lQk^sIAb7>Pt{HC zBDLnJ$u`wr@SZ0d)dm43qdh?*O@Ale{X|QMA=7V)j`pFF7ILf^#cZ>(5)q;CtvCzw zjx}1zkZNKuXzl1$`84Qgg&JuDlkP4s`T6mw7@0`fdynY+e&D%pMliW6F$VGj`Mjy) zo1N<4GFYo6#^F}MTKdZ>SZgNB-)(VCu9oj6{!PJ8(q=$=SXg97vPH#-u}v%j{vd9O zmT=MaX-Qequ#g^oW1llzuF2~K)E~Gt<|Emss^lW`H$t|WHV$Z+$T`mK(vVF}^zA5J zG+uDRVjL5!{okd0%-x6rjZIar_p?1tdejp}8e`wa*uVPcrE1M+%aB={{1cy6!{=pV zlbp2a$)ToN`jp7$`}uKUt9GoG9PI<9D%|K9h2-YwXr(k)#v|KQnbbk8j#z*al1oek z_T^+%&-XhEx^g zromS+Wv}li>GNxp(xiAcG^YQHwaBM7N3V%S5Bz<7KU$O&{ku*TB#cd}MrjSuI_rzu z`B|Kl)J&f_N;2`@wxX#j@ov23Bqd)2Db=Ym+tI{AR%MpJYPAIZQ-ct+F#7km7BoFP zS|ebIj7><60)rR6Y0Ps4K5&xRHQ`i&-@F({S35kTS({^h@|1-u$;IU4dQ@%(8@B_{ z-|Yuu z2Mg)gZ^HiA_@lYR{~Ok?tZi>wQM=)a4PC3&)`mMauB=_Yer==`4@A58f@Nnl)I?Zs z)4G*4E78RISV!9y6ya~l(hJOwW#-36%nvq`zclB*8*v=xkCweV{3&!dR^Cj_&%nFzuIsNQh??FJd8#k;M*@ah%%uZ@=>)5#EB#3a;@)d27*4kM$vuoQrR<>_! zS(PeHEm;xhhOU<7>%$Ni&S=e9v9Yba>!h|0p6SA0np1t#D8l>Nwr+MPRvWE76soNg zF$KFRGJd%=!SJX>IL)kUbqAx}L#%HHUt=M!py|W0FdpIp;n(nzHzycvkNe=pV0h`l zFl6g1+ZiNeKi$4qk!=meyo%Loj9P>7AzlnB!oj-LJ;OawDe)SKV^OevM|Vh-U_jl> z-3Jyg4%K>d6Rqsv!ZqPAnV|X%#)l$3k)fzJ*SnbQHJ^>aXxwX3Y9pMt28W_ji+ZPO zIl+)1@m>rHz5P4l-kEKSS!mF71#vrDRcci;vC>#!jF>iS7_BG)s8iqyThhhWK`fw~1_MYIi-~l$2 z-nrh+;2>&Ao78gDaf5MarC$MZJ|&U7{fjMj>cl)P-t=3ZLM)jYucjWhSvIM zs8&?0Wi_S(Xu@cqBKjQ)4-Lk9!{P97e^>~(t=(>ExBnu^y63gJGg`f09SjX>_3I9L zct8j{-5opvqZ4l%42QK$SJ#Gz;v%YB*ES4BLqqIkJ!nSzQHPCI9qEk@i;&!oMQ*;# zEO(V?3I@uZu-nb7X={tZdWHLiio2!N9n;ztK}VwT!#(kEf3J+KdwHunq4iLtHYzjc z!8`Un9FDI>|D&O3M6nax8;ql?^=gdVjot28^v`YG4e1QLwpjWAyLs_Yv^Gk;wO6#q zLL>jVWvy;Y4Wu>VpJ0N`9-85_OoZtb*ywuA%ULW3|mOR?w!`~Uj4&Sz|`#>lZS6VFgmpr>1^K>x`0sc(mm7v!c?BBO96c2^# zm0XfGg!ak}4%K=UYA&W;v4cOsbxw9z!ALmLu)D!IJ~tGv6|xV>wY|Y-Ljyx0l*@D; z$=C!37LPn2mB3(&brm~*^%|!HGCYx|hWW0L_btPZuIt#au6kfGr zM|)%OI`R_S%RX@_5lOnDKdv`7Tz90OJy%MYDsE+g?d@zS?cLVk9Ss9vuOgyGM`Y?f zPNXz}Zct&7VkzJns7hT;;izFa27_21wXPk7!Cu)u(n!Lll1N0G@Ev+CA4Mm)e|2vt zG$R%s?CpK7(D~_Iq-62l6sE8IfV#!oI5{~v0!$>m?#o8gD z{dR}Es#&naSG09) zu>7@BU1!;Uh~tcVu%RnhMsb&L+uBw5f>T!yfj-L6a-*3eUBoTCv#sGesnB`#1=WW|R)b;-ir8%7G)5Cv1QTc`> zxQFZ>vz+w^0rXPsU;MNO#Ov|52o5OU%vXy@g^F50g0bkeCl1xu_m0Bx(QA#6NO4Q{ z$cB^Aixf*-$xdx=b0%Pp{fV>d136!tR;}OAwyq=Td`*3Gl-bp{t-Doq8Vnu7kv+`* zOEJG3?*e=Wu4SR#(c`D<-vs;DDmJF)%j!ulXSCYUFrI^K+ePAeHhlmC6I!*tV^#an zAuA)2L~QDjw?`4lN4p0?v8cCEdMVuM9W(X74TjtLy^2s<+tL1?C~H6h1R|SsR`;Y7 zu^jGsGAM*GEY6hTtf05?Q1{|tt^7$5=^X(o`o;XWN@a*vw3~n$S~|k5&`I%j)#jgi zs@>h;uvfV++7_zq?TI(EHiSa4JCe&F_jAI=yIBhJNS0Q@p==z{n4`Yrg6N3zZoZSP zV`1lPXh#Q5YC6^>A3!_KZcDhC$#|w#nS^e58TQC=%geimU`ya{BiJz58;(V4>j$_7 z;eS|BnJwEN9*XtU4o7bjxzz-}JQB_r>|A zop`Y%?{3FpuUv!ph%(Rbty%w(?j_OKa5RSPRU|qbQ)C3ZMI zgb1N`aX8$IppuT#1;gH%P$F-0cYQqqFmbQa+ZaAPgldt29zg)(0{N)=#!>a=$HGV2 zqM_d1;v7qOiLiGG*)7SBjjIc2O+b$`{L1K<*$}ZgkT~FH0aC0_#t9IAH9lr zR4r_%L8Yw2mUkF+5&JGa;D&4BF%B30Mxl)2W1^QyDM#uf_1@gU88f`kbxTk-*~w`9 zAh1FYdiTO)co)Y;x0eI4Snq*)#3!TS`lxoM^hS!^K#bYj3{_$n32HQtk=^=OtS1yZ zh=|DHSOl6DLiiJZ1B2*T9Ho)iFk;M*d=ECh2SZU{H`68Rsh1U5*d;^Hk7 z6I;XKwph4#2-sMLFq%{z3ddpx5q2F3QCK61VN8`Nbl0@H1+C$>IEFOd-{8Ht*qNP+ z|Dp0)2Cc#2!^6Ni6mF|SWVWqt7&9Fl9u!8lyoRtJpm40``JStgpYSg2QDcZn5(!~L zs0VA5P%}mZo!-m+WV|1OrTZ2Z9bO5In02r>9&H#L_U7`dk6-uTD=r^V8=)o2D_;nv zJ`9_$tcT2earxv+0{hCFyX_8&A#D=_)%tH^>9OXs6K>9cX%k;JJ4F62<%3q&%e)=C|8(uW=f=yo|_YVFVRJ{ zkf~_mcV(x$-~+5U=dW7c?h9-*o;Awaaw|4E(At>Fk1SssI?@kCM_hf$w&=H`L%lut z#J!8TWsSBS9>x9VxH<23*|@gtus2sP91MW@qizy>ZrPy~Bh@3;n~Ijz4Tsd;;aI<0 z1|KZ(gOQd3kpL$q*0iB|M)||h zo@hL-lO5PL%o5v$EKeL)+V&z%g3E(iXv$p`fpf@==O=@!<^e5*L+a{_!>rsjqSZcI z1S_0c_+^qiP6sEFO9#|e(SJojCH_=WOy?e1PX|{=;bkvYt=Mop8W|esMfhBnr-=3> z6glC%CRiWt>FrjM(m6_B4{8UHFCMNPkcQUTvwz|39sN6thh(Nx^trRPkR4ZHQlU9zy0|=>dWZ}A^4LH>{$ond} zMh?73Eu_avB@%~cN`LL*`fvok8Ir2X*m?8OM5Pf0-!TFSsb+1`49>i-nIs>NX@x&(ja-j)`eSI&XpGtTsUcg$Wm%E)Mj>mf$D+8S(& zoj6l|iWTM;9COJbs!g~GO`uq37-ZZyrjFRwq^qfZaqa?v(jo%>@IOmk*SlBf>Hw~FH`KVU;m%G7mX2c-Tn9aINlwq1(^vRByy%T(Ebv>t+$N<8lq8ytUNf`{r%%Ok!>*zMoe z>i)v2(IElZbR6A(aEWAe*zH5rKUg*HXYlV4Gzs^F-5uNZx^Lrmv~70?8$?WI1S{g< zHaNBTAIS$yhM}n6s_2X?@VXM0_(4)D3WpsB3ltCA0i3LKs+X8mjqq@^ zr)Ma97-^h}c+W8WKN#WBNa&L_N6!b?M>q-nzR4n{)OhedY~G8M&1=CPH`|+ojI+H?OjT@&WOU+n+ZwOx4HzztDGb-e+*S>Fl|#d!o_fPO!t~L4bi%tB z{tSXn_rPTKVB-j#I1=?X?~7^sK>WV(7c1yumol>SqVHOIQITHsA1OV04lZY~ae-tc z-ci`z*WRh~Zswx6K0&8eL0Oto2T)&loa9B%vAL}}h!H_{1o@Guo4xx$sJ;PbX|QC{ zplPQ{7F0Es$CToP(1;adYC3QxX&0ST;kjcnV?4pDSJ4Ki3-ccNH9dJ!Yo|*WQcg$! zM^KJZ9nIOObt5=UApJBFRm57kdwIQlz=KzUR;Ye2WM&GI0NHtbZT-z_-liZ^k<`R z(d$(TIXtKsL`w#55GEsCC3LKEauLo!k zk0wPGc6Q!PWgK-Qeiau}+LcsZl>sqA+w8qWtpdCE;B#gi<2Z9(MMHqF} z*Z45Upd!xGNAPMzR!4iGsh-`z`eSS@I~$Zi@N>yU2HQ&S2i{yPqno^q_`rYDI{;jC z6d@Zsj+ea(tTyan(A&vNqV@DCw9f=V^QwDkt2^}oIDW$GbE0-noa0XxOU~T$i=F)f~f=EshvHM994#U>C#CA))vumI zZ@`|v<7t_{&5rUWWP^aYi#$bz*r{3^Jol=7iBK3gweo3wtpqQ&+LV(^$&0?nY^Wmr zLB5e8y##|kjqj$gwts*@U$V48rAK`MEMII(VpwtpQhu#kzkc0%p0>f?F$xlSeiQ|1 z>}H4nDiUeHk5KK5!DAi#pmSwjtnMBDQwCLRkk2iYH8@r)CkEZK<*L~qxN~;*w${gR z)K*T0#N+)OUfeg}|3?8we=|RUhFH#os#nrJj3d~Gdxrac{}1)|)Hy5iTkGRk+K#R3 zeQj^3K_wlq{q(9(3Emf!W^~Pr#t_s;>;vmq+--l&&98Be&&Q$23Z$Xu#*e7LX?HLd zIl}WA%1=I8AW?O4{g`5zMAJ?lr4e=cm;fx9RTD27X?U%EF>bRstPj}8_Eh`{5<)WE ztJ;eYo|-Fraps<>QT!o*z`vpJU<}Tc`VVPN6d}aD_^A2}H-wL^ivZS4r#^qTQh?p` zmktiV?P$Y>F&1k;HWEQ2remcOyMs)*^h9E@mYFL~X+vb1#nNrz4jb~`)=)jp&D3&o zANx1@mHyG1^x`IxIQ*ZAA*V9;9sfVr8>?fbYN=|zu~7E&1BYp2+}UBvxFZV!pLHKq zU?BMwYTMi3T@3Fw3jca8GQMrzrJ?WuZmyY|sFnOxF`!ppI4i^b`$BEI>(Mxdrf1gU z*tU|YjHh@+t{Twzq1{NpP;|-_^!XY3WUjxqH}}0($HDx;{wO}7Xagemp{U+rC}-2R zc@ZAe-u~!ayEY`!M7WmN&@mWB-}fV7?(;DdD6}hR4%r`tKe&I*zPlfgfl%C zy%qdm6z&$`C1GaaExw^$OcT0cdycy#6Jl2!o$7TyVseS--;RNZNf%! zXb^fE8}$0H=Zg=>tWtXcemke-FA5FSw?TzB#^ImKe^B;#+^L+H;v1r&^vk%11oUBJ z-sbb}eqX|xT%H}b3%5kH;_WcD-7W_fLmz0hyg;p%Ts9N=oztc`BOehN*v6HwyCKvQ z-4_ehg+p~iQMaqc9b3b#cQ|@D!gCU2RlX#?r7RRVPi|Q%up^Cy-7(%Al@(Om7x&6; z9Qh6%8G=zA3^la1o`)sN1P>`a$>AZqt1}3=84DZBo*r!fyAe0Vy>qxz=DZV@OrL=W z9M(ESz+jNbjU0iDu!IoyH{qU?OSpFhfgQOfbkxzJ*Ko7fy)4ANb~r=Hn_O_Kic(_l z?bWI}PR)T<2*R`Jn_z0v~D1J;!OM#3(bJQ8<1eZ+7wj|1BJNT z`M#YOt_wx^KW?U5J-uE7sz^$si=}i%Z3tB~aO^Ln6Y6pDV(#J-NBwa=BG}&Cr6>3* zNt4ma6R1W(oPsF@kOs+CGfWpl(NmH?6Fqf*bal=7=b!IpEn3RY`AhM8%p&~1bm{r- zOoV@(J$8O5y2CeH)fmdRc(dw$0B753rwH?HDxS~oSRZ6dvSjHpGv5+-nffN))N@9e zctxCdt;ogI4ybS5oWl@vKe8Ezm~#!+4ur8-)*>W>1Z?2o!irZK5 zZ$_)hdEi*c;^`5Zka0C(Y^|g2#NBRt4QsbUpH{n@YtEa|77kB4B|H$vSrD8(8`jZ` zD{64ogd^p4wYu4@Vcg8n%LwgoDC|yJ-OvBuAWd)MpRs%bmgSq>&4j5m`x=g5A4=r|64VwT2FQ z^M=%F4O=2B7QCvth_au_O72D>#URhv-G>l7k3|{c+UU*e+1C@oc_ge?$UYvFV>}Y7 z6V$M}7l-1J@DRU3NXo-6;9Z+KT#D`?HxoUy0|86i+!>E~-yf8@LZG%IeDrLu8S zN4fPvi1d;e7WO0X@}snlh@4i0V}s1u#KQfxhq{+Q=<3`+3WEnRJBDz3E{^dx?e*^o-@-dpE1nV0Yg^V#EH<9Gk)`ewCE{UrG zhQjfB?@Sz-iq%0hu_1mVHPs_Oa4)(!Ytgcrh6r*T!tqJ20Jgh@gNEDX5b51r8ykL* zg~6KO9d$4U8*A&e{WzLEv5ex&ht1hcqVWwMwHmbajibKy5Ft+Q37OQ=XtYOif_@26 z-thtKcv;`QsM|g9K(Dhfe|G~;LsB|jc0b**ZAksCJGR}2%wYYV@->amPJ5gbsc_L8T#Yhoj#hSej=4(iBjky%&{478`y0QO5FAWg4Qv!DlmJv)t^ zfhpT!CdPdsF68~*Xf;?KsC zH4)d@ zSV@eHrx`?(eLwW~l-Gw7SPJ`r{$yi+$j3Kt1l%jV_JPhOnk)87r7!ZBO;g30{grPl zvxD0G`gYzw=l?KYEc)NX$tqjGN~!3g?dk`O7$i#c5@^ZTT6bh}OqLL7oFd*GU=CM<_H$`y|h-cuhjf{HWJ_WRtd{ z?da=xZ9sG!|1o?4W?H5OXVH{2qY_470_rDo4O6Y&+IW4%Qfm`~U?!f-F6g{bz8WoP zt`YHy%QG7E?G+0%@%`Vz;e`K95t%D_@N;>@hPw$lb6C=cT%cU>7G8LmY%?DTI5N;a z+ioT+>bW}VE16nn8jg-2Uc1rN4<{ulYXvEf#365wR-^HVr`7FO0{Ir5eFQqBCyqiO7A;4Lu_iyjwuP%nOoH;u{lPIlUu8|OKg z#5KVc+9`^q_+)RGvySO0E zP7^i;i~SZ}YiDSawErDM!A=?X)A0J@!raXCH2<|FXZ$~Uy-iE=Ei{t^=b<5%-J^KY z0>g+1%_V!lec+HhuAxuQA|V#Wmabsq;>%iX{9X<2{$P@r#a)2x3zz3GN$5b=2|(6p z+Bo_O@iH&*F68G@=AI1KY}59yufWMAYL%MNBFa81;)F_Fj=YhadlS!}q-+>kt68Wmepx0FP) z>;IED>5etjwZB>VZ+hl3?!$c(uRmEQV`-^zVHW?JSwiQ>Sq;8=;vamMZ#dy$-%maV z2U}|+1CK)(*H@Ob5h5>5omp|D2@$5z?*7v>_Y%9hz6NBPh*8h1h&8Q@_tGdepTZyM z&rh9^J@pKp-Qf~7-rmv-Wzv+PTRMh;6U<$xy$g&_N-!Zz5qSCWO(A*C{M+kZZn7V> z0h_|5863mfjt7RFRYIfjz9I4AJ4&PLg)`Zt{~L2UoYC(;Lzb9d%#jF&hE#H1Z8m<8)En2n$$wu&#SHQM^)pXtZ5d|V&fjvP6ZEX=$!xF(NKb2E*NM|m89v=E26;m8a_L8{yM4lWtvz=L1tqG}o&6)iuSWO@

$PB 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 C)kZ@A literal 0 HcmV?d00001 diff --git a/vocstatic.linux.gnuc.x86 b/vocstatic.linux.gnuc.x86 new file mode 100755 index 0000000000000000000000000000000000000000..e5f74e250a372b81ea24058365e5a8847bfc2d84 GIT binary patch literal 864645 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

!Xqj)b_hDKT7qAsXqE&@!%H@#~4S~ZD>%&(> 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 InrxWixG0W+S7#Dp^-oG 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

q|}`=>hDASj~F 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

o@+6YPv-=zJ#3LtHa(`kB`W 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 z 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

sA~xp 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 literal 0 HcmV?d00001

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 z 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