Введение

После публикации первой версии COBOL IDE на Delphi я получил несколько откликов и продолжил улучшать инструмент. В этой статье расскажу о новых возможностях: подключении внешних библиотек (например, GMP), улучшениях в подсветке синтаксиса и отладке, а также о небольших удобствах, которые появились в редакторе.

Что нового

? Поддержка внешних библиотек (на примере GMP)

Теперь IDE позволяет компилировать программы с подключением дополнительных библиотек. Например, библиотека GMP (GNU Multiple Precision Arithmetic Library) может использоваться для работы с большими числами и точной арифметикой.

Для этого была добавлена поддержка дополнительных ключей компиляции, включая -I, -L и -l, например:

cobc -x temp_compile.cbl -IC:/msys64/mingw64/include -LC:/msys64/mingw64/lib -lgmp

Это открывает путь к использованию математических и системных библиотек прямо из COBOL-кода.

? Улучшенная подсветка синтаксиса

  • Обновлён TCobolHighlighter:

    • Добавлены новые ключевые слова и разделители

    • Улучшена работа с кавычками и строками

    • Исправлена чувствительность к регистру

  • Подсветка стала быстрее и точнее даже на больших файлах

Пример с GMP

IDENTIFICATION DIVISION.
PROGRAM-ID. PAYROLL-CALCULATOR.

DATA DIVISION.
WORKING-STORAGE SECTION.

01 EMPLOYEE-NAME       PIC A(20).
01 HOURS-WORKED        PIC 999.
01 HOURLY-RATE         PIC 9(3)V99.

01 GROSS-PAY           PIC 9(5)V99.
01 BONUS               PIC 9(5)V99 VALUE 0.
01 TOTAL-BEFORE-TAX    PIC 9(6)V99.
01 TAX-AMOUNT          PIC 9(6)V99.
01 FINAL-PAY           PIC 9(6)V99.

01 F-GROSS             PIC $ZZ,ZZ9.99.
01 F-BONUS             PIC $ZZ,ZZ9.99.
01 F-TOTAL-BEFORE-TAX  PIC $ZZ,ZZ9.99.
01 F-TAX               PIC $ZZ,ZZ9.99.
01 F-FINAL             PIC $ZZ,ZZ9.99.

PROCEDURE DIVISION.
    DISPLAY "Enter employee name:".
    ACCEPT EMPLOYEE-NAME.

    DISPLAY "Enter number of hours worked:".
    ACCEPT HOURS-WORKED.

    DISPLAY "Enter hourly rate (e.g., 15.75):".
    ACCEPT HOURLY-RATE.

    COMPUTE GROSS-PAY = HOURS-WORKED * HOURLY-RATE.

    IF HOURS-WORKED > 160
        COMPUTE BONUS = GROSS-PAY * 0.10
    END-IF.

    COMPUTE TOTAL-BEFORE-TAX = GROSS-PAY + BONUS.
    COMPUTE TAX-AMOUNT = TOTAL-BEFORE-TAX * 0.13.
    COMPUTE FINAL-PAY = TOTAL-BEFORE-TAX - TAX-AMOUNT.

    MOVE GROSS-PAY          TO F-GROSS.
    MOVE BONUS              TO F-BONUS.
    MOVE TOTAL-BEFORE-TAX   TO F-TOTAL-BEFORE-TAX.
    MOVE TAX-AMOUNT         TO F-TAX.
    MOVE FINAL-PAY          TO F-FINAL.

    DISPLAY "Employee:          " EMPLOYEE-NAME.
    DISPLAY "Gross Pay:         " F-GROSS.
    DISPLAY "Bonus (if any):    " F-BONUS.
    DISPLAY "Total before tax:  " F-TOTAL-BEFORE-TAX.
    DISPLAY "Tax (13%):         " F-TAX.
    DISPLAY "Final Pay:         " F-FINAL.

    STOP RUN.

Итоги

С каждым обновлением COBOL IDE становится всё удобнее:

  • Подключение внешних библиотек

  • Более стабильная подсветка и редактор

  • Поддержка современных фич для обучения и прототипирования

Где скачать

Все исходники и последние обновления выложены в GitHub:

? https://github.com/VohminV/COBOL_IDE

Комментарии (3)


  1. georgiy08
    23.07.2025 06:57

    Рекомендую добавить скриншоты демонстрирующие внешний вид программы, а также оформить README файл для большего привлечения внимания.

    (А коммитам давать более ясное название, нежели просто v1.4)


  1. SpiderEkb
    23.07.2025 06:57

    Скажите, а чем это лучше Rocket COBOL для Visual Studio?

    И тут еще такой момент - COBOL в большинстве случаев работает не на десктопах, а на "больших машинах". Серверах с совершенно другой архитектурой. А там процесс разработки несколько иной. Пишем на локалке, потом отправляем на сервер, там запускаем сборку (с получением ошибок и предупреждений обратно на локалку)... Отладка - тоже на сервере (с подключением локалки к серверу в режиме отладки).

    Если интересно - можно попробовать взять VSCode, установить IBM i Development Pack (там есть в т.ч. и COBOL, зарегистрироваться на бесплатном публичном AS/400 сервере PUB400 и попробовать как все это работает на самом деле.


    1. SpiderEkb
      23.07.2025 06:57

      Например, сборка на нашем тестовом сервере с использованием нашей же системы сборки (на основе gradle) из VSCode выглядит в терминале примерно так:

      PS C:\Users\***\GIT\vpom> chcp 65001
      Active code page: 65001
      PS C:\Users\***\GIT\vpom> gradle as400syncanddeploy -PreleaseFile="VPOM#170"
      Starting a Gradle Daemon, 4 busy and 1 incompatible Daemons could not be reused, use --status for details
      
      > Configure project :
      Found config file source:  https://***/config_20241112152851.zip modified on 2024-11-12T16:28:51.358+0400
        setting.yml
      Current plugin version: 1.1.55.6 created on 08/07/2025 11:35:03
      Log location: C:\Users\***\GIT\vpom\2025-07-23_15-41-05.log
      Temp files location: C:\Users\***\GIT\vpom\build
      add folder <DTAQ>
      add folder <USRIDX>
      add folder <ERRORS>
      add folder <CONTAIN>
      Include packages for deploy ...
      [buildinfo] Not using buildInfo properties file for this build.
      
      > Task :as400generateMemberList   
      Getting files list for release ...
       add file C:\Users\***\vpom\src\main\ERRORS\DSERR37.RPGLE
       add file C:\Users\***\GIT\vpom\src\main\ERRORS\RPGPSDS.RPGLE
       add file C:\Users\***\GIT\vpom\src\main\ERRORS\ONERROR.RPGLE
        git: ssh://git@***/vpom.git
      Using enviroment from class: ***.gradle.as400pluginEnvironment.EQEnviroment
      [maven][0][jar][0]pgm
      srvpgm
      cpysrc
      command
      display
      printer
      panelgroup
      bnddir
      
      > Task :as400validate
      Validating project structure ...
      OK
      Validating data ...
      Validation completed
      
      > Task :as400connect
         ...
      Connecting to server *** using credentials for ***
      IBMi job: 441572/QUSER/QZRCSRVS
      jobUserID: ***
      
      
      > Task :as400enviroment
      Calling RTVATTR        
      Creating eviroment completed
      
      > Task :as400sendFilesToServer
      Previous copy failed or status unknown. Copying all
      Add generated installer @CRVPOM to files list
      Copy file C:\Users\***\GIT\vpom\src\main\ERRORS\DSERR37.RPGLE to member VPOMSRC170/DSERR37
      Copy file C:\Users\***\GIT\vpom\src\main\ERRORS\RPGPSDS.RPGLE to member VPOMSRC170/RPGPSDS
      Copy file C:\Users\***\GIT\vpom\src\main\ERRORS\ONERROR.RPGLE to member VPOMSRC170/ONERROR
      Copy file C:\Users\***\GIT\vpom\src\main\@CRVPOM.CLLE to member VPOMSRC170/@CRVPOM
      
      > Task :lockObjects
      Allocating necessary objects for deploy ...
      OK
      
      > Task :as400disconnect
      Disconnected on AS400  
      
      > Task :as400result
      BUILD SUCCESSFUL
      
      BUILD SUCCESSFUL in 1m 4s
      14 actionable tasks: 14 executed

      По gradle скриптам автоматически создается программа инсталлятор которая собирает на сервере все объекты поставки.

      Дальше - подключение к серверу, копирование туда всех объектов поставки (включая сгенерированный инсталлятор), компиляция инсталлятора и его запуск. Если будут ошибки - они отобразятся здесь же.

      В принципе, плагины для VSCode позволяют работать с кодом прямо с сервера, без копирования его на локал.