diff --git a/Compiler b/Compiler index a36067d..c44e75c 100644 Binary files a/Compiler and b/Compiler differ diff --git a/Compiler.exe b/Compiler.exe index 7a7530d..317a92d 100644 Binary files a/Compiler.exe and b/Compiler.exe differ diff --git a/doc/MSP430.txt b/doc/MSP430.txt index 9548eb9..68091a5 100644 --- a/doc/MSP430.txt +++ b/doc/MSP430.txt @@ -15,6 +15,8 @@ UTF-8 с BOM-сигнатурой. совпадает с именем главного модуля, но с расширением ".hex" -ram размер ОЗУ в байтах (128 - 2048) по умолчанию 128 -rom размер ПЗУ в байтах (2048 - 24576) по умолчанию 2048 + -tab размер табуляции (используется для вычисления координат в + исходном коде), по умолчанию - 4 -nochk <"ptibcwra"> отключить проверки при выполнении -lower разрешить ключевые слова и встроенные идентификаторы в нижнем регистре diff --git a/doc/STM32.txt b/doc/STM32.txt index 2921274..d2e903f 100644 --- a/doc/STM32.txt +++ b/doc/STM32.txt @@ -15,6 +15,8 @@ UTF-8 с BOM-сигнатурой. совпадает с именем главного модуля, но с расширением ".hex" -ram размер ОЗУ в килобайтах (4 - 65536) по умолчанию 4 -rom размер ПЗУ в килобайтах (16 - 65536) по умолчанию 16 + -tab размер табуляции (используется для вычисления координат в + исходном коде), по умолчанию - 4 -nochk <"ptibcwra"> отключить проверки при выполнении -lower разрешить ключевые слова и встроенные идентификаторы в нижнем регистре diff --git a/doc/x86.txt b/doc/x86.txt index 0fe277a..ad72419 100644 --- a/doc/x86.txt +++ b/doc/x86.txt @@ -24,6 +24,8 @@ UTF-8 с BOM-сигнатурой. (соответствует типу исполняемого файла) -stk размер стэка в мегабайтах (по умолчанию 2 Мб, допустимо от 1 до 32 Мб) + -tab размер табуляции (используется для вычисления координат в + исходном коде), по умолчанию - 4 -nochk <"ptibcwra"> отключить проверки при выполнении (см. ниже) -lower разрешить ключевые слова и встроенные идентификаторы в нижнем регистре diff --git a/doc/x86_64.txt b/doc/x86_64.txt index c4a523f..8c031da 100644 --- a/doc/x86_64.txt +++ b/doc/x86_64.txt @@ -22,6 +22,8 @@ UTF-8 с BOM-сигнатурой. (соответствует типу исполняемого файла) -stk размер стэка в мегабайтах (по умолчанию 2 Мб, допустимо от 1 до 32 Мб) + -tab размер табуляции (используется для вычисления координат в + исходном коде), по умолчанию - 4 -nochk <"ptibcwra"> отключить проверки при выполнении -lower разрешить ключевые слова и встроенные идентификаторы в нижнем регистре diff --git a/source/Compiler.ob07 b/source/Compiler.ob07 index 0a30e61..b1e760d 100644 --- a/source/Compiler.ob07 +++ b/source/Compiler.ob07 @@ -30,6 +30,23 @@ VAR major: INTEGER; checking: SET; + + PROCEDURE getVal (VAR i: INTEGER; VAR value: INTEGER); + VAR + param: PARS.PATH; + val: INTEGER; + BEGIN + INC(i); + UTILS.GetArg(i, param); + IF STRINGS.StrToInt(param, val) THEN + value := val + END; + IF param[0] = "-" THEN + DEC(i) + END + END getVal; + + BEGIN out := ""; checking := options.checking; @@ -57,25 +74,14 @@ BEGIN out := param END + ELSIF param = "-tab" THEN + getVal(i, options.tab) + ELSIF param = "-ram" THEN - INC(i); - UTILS.GetArg(i, param); - IF STRINGS.StrToInt(param, value) THEN - options.ram := value - END; - IF param[0] = "-" THEN - DEC(i) - END + getVal(i, options.ram) ELSIF param = "-rom" THEN - INC(i); - UTILS.GetArg(i, param); - IF STRINGS.StrToInt(param, value) THEN - options.rom := value - END; - IF param[0] = "-" THEN - DEC(i) - END + getVal(i, options.rom) ELSIF param = "-nochk" THEN INC(i); @@ -237,6 +243,7 @@ BEGIN C.StringLn(" -ver set version of program (KolibriOS DLL)"); C.Ln; C.StringLn(" -ram set size of RAM in bytes (MSP430) or Kbytes (STM32)"); C.Ln; C.StringLn(" -rom set size of ROM in bytes (MSP430) or Kbytes (STM32)"); C.Ln; + C.StringLn(" -tab set width for tabs"); C.Ln; UTILS.Exit(0) END; diff --git a/source/PROG.ob07 b/source/PROG.ob07 index f2e3b6c..3572b5f 100644 --- a/source/PROG.ob07 +++ b/source/PROG.ob07 @@ -71,7 +71,7 @@ TYPE OPTIONS* = RECORD - version*, stack*, ram*, rom*: INTEGER; + version*, stack*, ram*, rom*, tab*: INTEGER; pic*, lower*: BOOLEAN; checking*: SET @@ -1211,7 +1211,7 @@ END ResetLocSize; PROCEDURE create* (options: OPTIONS); BEGIN LowerCase := options.lower; - SCAN.init(options.lower); + SCAN.init(options.lower, options.tab); idents := C.create(); UTILS.SetBitDepth(TARGETS.BitDepth, TARGETS.RealSize = 8); diff --git a/source/SCAN.ob07 b/source/SCAN.ob07 index f32cf45..9fe6c5a 100644 --- a/source/SCAN.ob07 +++ b/source/SCAN.ob07 @@ -711,12 +711,13 @@ BEGIN END close; -PROCEDURE init* (lower: BOOLEAN); +PROCEDURE init* (lower: BOOLEAN; TabSize: INTEGER); VAR i: INTEGER; delim: ARRAY 23 OF CHAR; BEGIN + TXT.setTabSize(TabSize); upto := FALSE; LowerCase := lower; diff --git a/source/TEXTDRV.ob07 b/source/TEXTDRV.ob07 index 7f2c416..7815751 100644 --- a/source/TEXTDRV.ob07 +++ b/source/TEXTDRV.ob07 @@ -1,7 +1,7 @@ (* BSD 2-Clause License - Copyright (c) 2018-2020, Anton Krotov + Copyright (c) 2018-2021, Anton Krotov All rights reserved. *) @@ -12,7 +12,7 @@ IMPORT FILES, C := COLLECTIONS; CONST - CR = 0DX; LF = 0AX; + CR = 0DX; LF = 0AX; HT = 9X; CHUNK = 1024 * 256; @@ -45,6 +45,7 @@ TYPE VAR texts: C.COLLECTION; + TabSize: INTEGER; PROCEDURE load (text: TEXT); @@ -91,8 +92,11 @@ BEGIN text.eol := FALSE END; text.CR := FALSE + ELSIF c = HT THEN + text.col := text.col + TabSize - text.col MOD TabSize; + text.eol := FALSE; + text.CR := FALSE ELSE - text.eol := FALSE; IF text.utf8 THEN IF ORD(c) DIV 64 # 2 THEN INC(text.col) @@ -100,6 +104,7 @@ BEGIN ELSE INC(text.col) END; + text.eol := FALSE; text.CR := FALSE END @@ -187,6 +192,17 @@ BEGIN END open; +PROCEDURE setTabSize* (n: INTEGER); BEGIN + IF (0 < n) & (n <= 64) THEN + TabSize := n + ELSE + TabSize := 4 + END +END setTabSize; + + +BEGIN + setTabSize(0); texts := C.create() END TEXTDRV. \ No newline at end of file diff --git a/source/UTILS.ob07 b/source/UTILS.ob07 index d854e06..1261e8d 100644 --- a/source/UTILS.ob07 +++ b/source/UTILS.ob07 @@ -23,8 +23,8 @@ CONST max32* = 2147483647; vMajor* = 1; - vMinor* = 52; - Date* = "07-may-2021"; + vMinor* = 53; + Date* = "26-aug-2021"; FILE_EXT* = ".ob07"; RTL_NAME* = "RTL";