Jump to content
Excelsior Forums


  • Content count

  • Joined

  • Last visited

Everything posted by AlexIljin

  1. XDS 2.6 beta

    First of all, thank you for the release! This is a great new year present indeed! To make the forthcoming final release even better I'll post some of my notes I gathered after installing the beta package and diffing it against the previous version. Everyone else is welcome to share their notes and opinions as well. 1. The def/Win32/edu.txt suddenly appeared! This isn't the limited education version anymore, is it? 2. The following lines were added to the samples/buildx86.bat: But neither the folder VTERM nor the file golygon.prj were added to the samples folder.
  2. Oberon Visual Component Library for XDS

    Fine, but now I'm offering my volunteer help fixing those bugs. Is there any room for discussion? You use the compiler internally, don't you?
  3. Oberon Visual Component Library for XDS

    I'm not sure what you mean by "didn't take off the ground". The Amadeus-3 library is currently being used in several commercial projects by its author, Stefan Metzeler (see project list here: http://oberoncore.ru/wiki/применения#amadeus_it_solutions ). A number of developer licences were sold during the 20+ years of the library existence. I bought a licence for myself and created some commercial projects based on it, as well as worked for Stefan full time for over 3 years (until April 2011) improving the library and adding new features. Sure, it is not widely known in the industry, but I wouldn't say it didn't take off the ground at all. It is, in fact, in a successful flight. Being the Alex Iljin in question, I confirm that I do have a list of XDS compiler bugs, including some nasty ones in code generator. I have created minimal projects that reproduce the bugs on fresh installs of XDS (for Windows), but I didn't have enough time to publish the information yet. Some of the bugs were reported by me on this forum and via support email, but I got no answers, not even a receipt confirmation. If Excelsior would agree to provide the sources I can try and fix those bugs (I do have some experience with compiler development). I'm ready to sign any kind of NDAs and can even visit your headquarters for the occasion.
  4. Module text: MODULE Test; (* ------------------------------------------------------------------------ * © 2011 by Alexander Iljin * ------------------------------------------------------------------------ *) VAR tmp: SHORTINT; (* any integer type will do *) BEGIN INC(tmp, LONG(1000000)); (* Compiler breaks with error F450: "compilation * aborted: invalid case in CASE statement". * Remove "LONG" and it will work. *) END Test. Compilation: >xc Test.ob2 XDS Oberon-2 v2.40 [x86, v1.50] - build 10.05.2005 Compiling "Test.ob2" * [*** 0.00 F450] * compilation aborted: invalid case in CASE statement
  5. I wanted to create a console tool to process some text files. I took XDS Oberon, for it's the simplest console implementation of Oberon to date. It was required that some of the output files would contain Unix-like end-of-line markers (the single LF character = 0AX). I tried Out.Ln, it outputs CRLF, which is normal in Windows. There is no setting to change that AFAIK, but that's OK. Out.Char(0AX) also outputs CRLF. This is a bit weird. Alright, the Out module is a just wrapper for the standard IO channels subsystem, which is written in Modula. Let's dive into that subsystem. RawIO.Write(StdChans.OutChan(), 0AX); - outputs CRLF. ch := 0AX; IOChan.RawWrite(StdChans.OutChan(), SYSTEM.ADR(ch), 1); - outputs CRLF. I feel like an idiot. Is there a way to push a single 0AX character through a channel without getting the CR in front of it?
  6. XDS 2.6 beta

    When I compile my projects with XDS 2.6 beta I often see the string "==== r386.SaveCallFRegs: 1" output by the compiler. I presume this is some debug output, so I just wanted to remind you remove it by the release version.
  7. Did you mean "a compilation error"? Or did you actually see a compiler crash? It would be helpful if you posted the error you saw. Just to be on the same page. I see E054: "object is not variable", which is perfectly valid in this context, see Oberon-2 Report. The following code will compile: PROCEDURE DemError(); VAR v:PRec1; tmp: PRec0; BEGIN tmp := v.pPR[0]; WITH tmp : PRec1 DO (*!!! repl with ln below, and no error*) (*IF v.pPR[0] IS PRec1 THEN*) | tmp : PRec2 DO (*!!! repl with ln below, and no error*) (*ELSIF v.pPR[0] IS PRec2 THEN*) ELSE END END DemError;
  8. Oberon2Lexer v0.3 - the new syntax highlighting plugin for Notepad++ is now available for download. Both flavours of Notepad++ (ANSI and Unicode) are supported. This announcement is also available in Russian: http://forum.oberoncore.ru/viewtopic.php?f=30&t=2205 Can do: the plugin adds "Oberon-2" entry to the "Languages" menu, and is associated with the .ob2 file extension by default; text is highlighted with the following styles (the background colour is always white, unlike on this forum): Unsafe - the word SYSTEM, highlighted in red; Flow breaker - the words EXIT, RETURN and HALT, highlighted in bold blue; Keyword - all the predefined identifiers I could find except for the ones mentioned in "Unsafe" and "Flow breaker" styles, highlighted in blue: IF THEN ELSE END; Number - REAL (including the "E" and "D" syntax) and INTEGER constants (including hexadecimal numbers with the "H" suffix), not highlighted by default; String - 'single-quoted' and "double-quoted" strings and hexadecimal numbers with the "X" suffix, not highlighted by default; Comment - (* block comments (* with arbitrary nesting level *) *) and -- wing comments, highlighted in gray; Compiler option - <* XDS compiler pragmas (* with nested comments *) *>, highlighted in green; Error - unterminated strings, comments, compiler options, as well as invalid numbers (1.E+), invalid characters (e.g. %, @, $), etc., highlighted in underlined red; Default - everything else is black on white by default. [*]you can change the font, colour, etc. for each of the styles in the standard "Settings - Styler Configurator..." dialog. You can also assign other file extensions to be handled by this plugin. ' Can NOT do: modify the list of recognized keywords; code folding - planned for a future release. ' A direct download link: http://cdnetworks-kr-1.dl.sourceforge.net/project/oberonrevival/Oberon2Lexer/Oberon2Lexer.v0.3.zip A list of SourceForge mirrors is available here: http://sourceforge.net/projects/oberonrevival/files/Oberon2Lexer/Oberon2Lexer.v0.3.zip/download Full source code is included (two XDS Oberon-2 projects, the one with the "U" suffix is for the Unicode version of Notepad++). The scanner is implemented in a portable manner (see the project structure on the attached images). There is a separate module to attach the plugin to Notepad++, another module to attach it to Scintilla, and the scanner itself is completely independent and can be ported to any application. Legend: red = modules importing SYSTEM, square frame = modules importing Windows.def, oval = the rest.
  9. Oberon2Lexer v0.3.1 was released. This is a minor bugfix release. The only bug fixed was invalid highlighting of hexadecimal constants (H and X suffixes) if the constant contained lower case characters. Release notes can be seen here: https://sourceforge.net/projects/npp-plugins/files/Oberon2Lexer/Oberon2Lexer%200.3.1/ReleaseNotes.v0.3.1.txt/view A direct download link: http://citylan.dl.sourceforge.net/project/npp-plugins/Oberon2Lexer/Oberon2Lexer%200.3.1/Oberon2Lexer.v0.3.1.zip For a list of SourceForge mirrors visit this page: https://sourceforge.net/settings/mirror_choices?projectname=npp-plugins&filename=Oberon2Lexer/Oberon2Lexer%200.3.1/Oberon2Lexer.v0.3.1.zip
  10. Module text: MODULE Test; (* ------------------------------------------------------------------------ * © 2010 by Alexander Iljin * ------------------------------------------------------------------------ *) CONST c = LONG (0 + 1); (* This makes the compiler abort with "invalid location". * The value of the constant does not matter, and neither * does its name. Just as soon as there is an expression * inside the LONG: +, -, *. *) BEGIN END Test. Compilation: >xc Test.ob2 XDS Oberon-2 v2.40 [x86, v1.50] - build 10.05.2005 Compiling "Test.ob2" * [*** 0.00 F450] * compilation aborted: invalid location
  11. A Bug in XDS x-86 Native V. 2.51?

    I could not reproduce the problem. In debugger (xd.exe) I see that pt2.pc.next is being changed, NOT pt2.next. Also, adding the following assertions after the Insert method call triggers no run-time errors: pt2.pc.Insert(pt3); (* for some reason does not work; must be some bug pt3 gets inserted into pt2.next instead of pt2.pc.next *) ASSERT (pt2.pc.next = pt3, 60); ASSERT (pt2.next = NIL, 61); (Assertion generation is ON by default, but still I added "-ASSERT+" to the project file, just in case. Still no errors.) Conclusion: unable to reproduce the bug in compiler or debugger.
  12. XDS-x86, v. 2.51: XDS resource compiler

    When I realized that XRC can't handle the VersionInformation resources, I started using the GoRC resource compiler by Jeremy Gordon (http://www.godevtool.com/). It's only 54Kb, no dependencies!
  13. (This announcement in Russian.) The freeware Obide (Oberon-2 IDE) plugin for Notepad++ is now released as a standalone download. The previous version 2.1 was distributed as part of the NO2 package v0.1. The current version is 2.2. Changelog: - Added Unicode build of the plugin. - Added code hint for modules (alias and full file/path to the module). - Module lookup paths are now read from Obide.ini, if any. - "Go to Definition" menu item is renamed "Go to Declaration". - When trying to "Go to Declaration" of a module that can't be found, the appropriate hint message is displayed. Fixed position of the hint, added lookup paths to the message. - Fixed invalid Version Information format. - Added version number to the About box title. Download link: http://sourceforge.net/projects/oberonrevival/files/Obide/Obide%202.2/Obide.v.2.2.zip/download Release notes and change log: http://sourceforge.net/projects/oberonrevival/files/Obide/Obide%202.2/ReleaseNotes.v.2.2.txt/view
  14. Obide (Oberon-2 IDE) plugin for Notepad++

    (This announcement in Russian.) Obide plugin version 2.3.1 was released. This is a bugfix release. Changes: - Fixed: changing Global.mouseHintDelay in the ini-file had no effect. - Fixed: Code Hint will be hidden after keeping mouse cursor for Global.mouseHintDelay milliseconds away from an identifier. Download link: http://downloads.sourceforge.net/project/npp-plugins/Obide/Obide%202.3.1/Obide.v.2.3.1.zip (151 Kb) Release notes and changelog: http://sourceforge.net/projects/npp-plugins/files/Obide/Obide%202.3.1/ReleaseNotes.v.2.3.1.txt/view The plugin will soon be available for installation/udpate via the Plugin Manager.
  15. Obide (Oberon-2 IDE) plugin for Notepad++

    (This announcement in Russian.) Obide plugin version 2.3 was released. Several new features were added to the plugin: - Added Global.autoCMaxHeight option to set the autocompletion box maximum height. Default value is 32. - The height of the autocompletion box will not exceed half the number of lines visible on screen. - Added: on selecting an item from autocompletion list the rest of the curret identifier will be replaced with the selected text. - Changed: don't close the autocompletion list unless the identifier being completed was fully erased. - Typing the following character now confirms the selection from the autocompletion list (previously it was only confirmed by pressing the Enter key): ([{}]).:;,+-*/|<>=#^& tab space Enter. These are all characters allowed in the Oberon-2 language after an identifier. - Added: code hints are now displayed after holding the mouse cursor over an identifier for half a second. See Global.mouseHintDelay option. Download link: http://downloads.sourceforge.net/project/npp-plugins/Obide/Obide%202.3/Obide.v.2.3.0.zip (151 Kb) Release notes and changelog: http://sourceforge.net/projects/npp-plugins/files/Obide/Obide%202.3/ReleaseNotes.v.2.3.0.txt/view The plugin will soon be available for installation/udpate via the Plugin Manager.
  16. Obide (Oberon-2 IDE) plugin for Notepad++

    (This announcement in Russian.) Obide plugin version 2.2.1 was released. It fixes a minor bug in procedure end parsing. Download link: http://downloads.sourceforge.net/project/npp-plugins/Obide/Obide%202.2.1/Obide.v.2.2.1.zip Release notes and changelog: http://sourceforge.net/projects/npp-plugins/files/Obide/Obide%202.2.1/ReleaseNotes.v.2.2.1.txt/view
  17. Bug in Oberon compiler?

    This is a known misfeature of the Oberon language family. Other compilers are known to expose the same behaviour, including the original Oberon System.
  18. Module name must match file name. Executable name can be configured in the project file.
  19. Out of heapspace error

    Can you create and post a minimal project to reproduce the problem? Did you try IF-ELSIF chain? Did you try introducing local or global procedures to separate the code?
  20. Syntax highlighting

    I tried contacting the author, but he does not reply. Did anyone get those API-files?
  21. (Original message in Russian.) A little announcement for those not following the news on the Oberon Revival project. There is the NO2 v0.1 package now available for download. This is my personal assembly based on Notepad++ (free text editor, v4.8.0 is used) for working with XDS Oberon-2. The assembly includes some preconfigured plugins: - Function List shows the list of procedures in the current file; - Explorer displays the list of files and a folder tree and provides the standard Windows Explorer's context menu, including TortoiseCVS/SVN/GIT commands (for those who have it installed) for version management; - NppExec allows one to execute console commands, preconfigured to highlight XC error messages (double click on the message opens the file/position of the error); - code folding and syntax highlighting are supported via userDefineLang.xml (associated with *.ob2 file extension, use "View - User Define Dialog..." to configure); - Obide plugin supports code tooltips (e.g. parameter list for a procedure, value for a constant, type name for a variable), code navigation (jump to identifier declaration and back) and autocompletion - a popup list of fields and type-bound procedures respecting ancestry and visibility rules (see plugins/doc/Obide.txt and "Plugins - Obide" in the main menu for the shortcuts); - other plugins can, of course, be installed at will. The assembly is portable, i.e. all the setings are stored in the installation folder, nothing is stored in the system registry or the "Application Data" folder, so you can run it from a flash drive. You can download it, try it out and delete. I didn't test it myself, but I've heard that Notepad++ decently runs under Wine in Linux. Suggestions, bug reports and acknowledgements are welcome here, or - preferably - in the mailing list: oberonrevival-xds-usage@lists.sourceforge.net (subscribe).
  22. You should avoid using spaces in your paths. Xds.exe does not seem to support them at some level. Try looking at settigns in Compile - Tools.
  23. Enumeration problem

    XDS 2.51, default configuration, Windows platform. I'm trying to use an enumeration type FORMAT declared in a definition module (Definition.def) in my Oberon module (Project.ob2). The enumeration initially comes from a C header file, and I needed to create a special constant = "-1" belonging to the type. I did it the way I saw it done in the Windows.def: CONST FIF_UNDEFINED = SYSTEM.CAST (FORMAT, 0FFFFFFFFh); When I try to compile the following assignment: VAR fmt: Definition.FORMAT; BEGIN fmt := Definition.FIF_UNDEFINED; the compiler detects an error: E122 expression out of bounds. Here are the files to reproduce the problem with some additional comments: make.bat, makeDef.prj, makePrj.prj - needed to compile Definition.def, Project.ob2 - sources File contents: Command to compile: make.bat Is this a compiler bug? Is there anything I can do to make it work without using the SYSTEM.VAL? Will the SYSTEM.VAL always work as expected, or are there any side-effects possible?
  24. Enumeration problem

    Well, 0FFFFFFFFh is a valid CARDINAL value = MAX(CARDINAL).
  25. XDS 2.51, default configuration, Windows platform. Problem: if a type guard is applied directly to a procedure result, the procedure will be called twice. Test.ob2 module: MODULE Test; <* MAIN+ *><* O2EXTENSIONS+ *> IMPORT Out; TYPE Ansector = POINTER TO AnsectorDesc; AnsectorDesc = RECORD END; Descendant = POINTER TO DescendantDesc; DescendantDesc = RECORD (AnsectorDesc) END; VAR desc: Descendant; PROCEDURE GetThis (): Ansector; VAR res: Descendant; BEGIN Out.String ('GetThis '); NEW (res); RETURN res END GetThis; BEGIN desc := GetThis ()(Descendant); (* Although the GetThis procedure is called only once, the 'GetThis' string * will be output twice because of the type guard bug. *) END Test. <<EOF>> Test.prj project file: !module Test.ob2 <<EOF>> Command to compile: xc =p Test.prj