PL/I 语言 项目实战 图形界面程序 与 GUI 库结合

PL/I阿木 发布于 15 小时前 1 次阅读


PL/I 语言项目实战:图形界面程序开发

PL/I(Programming Language One)是一种高级程序设计语言,它结合了多种编程语言的特性,旨在提高编程效率和程序的可移植性。尽管PL/I在现代编程语言中并不常见,但在某些特定领域,如大型系统、嵌入式系统和图形界面程序开发中,它仍然有其独特的应用价值。本文将围绕PL/I语言在图形界面程序开发中的应用,结合GUI库,展开实战探讨。

环境准备

在进行PL/I图形界面程序开发之前,我们需要准备以下环境:

1. PL/I编译器:如IBM PL/I for z/OS。
2. GUI库:根据PL/I编译器的不同,可以选择不同的GUI库,如OpenVMS的DDT、UNIX的Motif等。

以下以OpenVMS系统为例,介绍如何使用DDT库进行图形界面程序开发。

DDT库简介

DDT(Data Display Kit)是OpenVMS系统提供的一个图形界面库,它支持多种图形界面元素,如窗口、按钮、文本框等。DDT库使用PL/I语言进行编程,可以方便地创建和管理图形界面。

图形界面程序开发步骤

1. 设计界面布局

在设计图形界面之前,我们需要明确程序的功能和用户交互方式。以下是一个简单的界面布局示例:

- 主窗口:包含菜单栏、工具栏和主工作区。
- 菜单栏:包含文件、编辑、视图等菜单项。
- 工具栏:包含常用的操作按钮,如新建、打开、保存等。
- 主工作区:用于显示程序的主要内容和用户操作。

2. 创建DDT窗口

在PL/I程序中,首先需要创建一个DDT窗口,作为程序的主界面。以下是一个创建DDT窗口的示例代码:

pl/i
IDENTIFICATION DIVISION.
PROGRAM-ID. DDT_WINDOW.

ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
SPECIAL-NAMES.
DECIMAL-POINT IS COMMA.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT OUTPUT-FILE ASSIGN TO "OUTPUT.DAT".

DATA DIVISION.
FILE SECTION.
FD OUTPUT-FILE.
01 OUTPUT-RECORD.
05 FILLER PIC X(80).

WORKING-STORAGE SECTION.
01 DDT-WINDOW.
05 DDT-WINDOW-DESC PIC X(80) VALUE "MAIN_WINDOW".
05 DDT-WINDOW-TYPE PIC X(80) VALUE "WINDOW".
05 DDT-WINDOW-POSITION PIC X(80) VALUE "0,0,640,480".
05 DDT-WINDOW-FLAGS PIC X(80) VALUE "MODAL".

PROCEDURE DIVISION.
PERFORM INITIALIZE-DDT-WINDOW.
PERFORM CREATE-DDT-WINDOW.
PERFORM MAIN-LOOP.
PERFORM TERMINATE-DDT-WINDOW.

INITIALIZE-DDT-WINDOW.
INITIALIZE DDT-WINDOW.

CREATE-DDT-WINDOW.
CALL "DDT$CREATE" USING DDT-WINDOW.

MAIN-LOOP.
PERFORM CHECK-EVENTS.

CHECK-EVENTS.
IF DDT$WINDOW-EVENT-FLAG = "CLOSE" THEN
EXIT PROGRAM.
END-IF.

TERMINATE-DDT-WINDOW.
CALL "DDT$DESTROY" USING DDT-WINDOW.

3. 添加界面元素

在创建DDT窗口后,我们可以添加各种界面元素,如菜单栏、工具栏、按钮等。以下是一个添加菜单栏的示例代码:

pl/i
01 MENU-BAR.
05 MENU-BAR-DESC PIC X(80) VALUE "MENU_BAR".
05 MENU-BAR-TYPE PIC X(80) VALUE "MENU_BAR".
05 MENU-BAR-POSITION PIC X(80) VALUE "0,0,640,40".
05 MENU-BAR-FLAGS PIC X(80) VALUE "MODAL".

01 MENU-ITEMS.
05 FILE-MENU.
10 FILE-MENU-DESC PIC X(80) VALUE "FILE".
10 FILE-MENU-TYPE PIC X(80) VALUE "MENU".
10 FILE-MENU-POSITION PIC X(80) VALUE "0,0,100,20".
10 FILE-MENU-FLAGS PIC X(80) VALUE "MODAL".
15 NEW-MENU-ITEM.
20 NEW-MENU-DESC PIC X(80) VALUE "NEW".
20 NEW-MENU-TYPE PIC X(80) VALUE "MENU_ITEM".
20 NEW-MENU-POSITION PIC X(80) VALUE "0,0,100,20".
20 NEW-MENU-FLAGS PIC X(80) VALUE "MODAL".
15 OPEN-MENU-ITEM.
20 OPEN-MENU-DESC PIC X(80) VALUE "OPEN".
20 OPEN-MENU-TYPE PIC X(80) VALUE "MENU_ITEM".
20 OPEN-MENU-POSITION PIC X(80) VALUE "0,0,100,20".
20 OPEN-MENU-FLAGS PIC X(80) VALUE "MODAL".
05 EDIT-MENU.
10 EDIT-MENU-DESC PIC X(80) VALUE "EDIT".
10 EDIT-MENU-TYPE PIC X(80) VALUE "MENU".
10 EDIT-MENU-POSITION PIC X(80) VALUE "0,0,100,20".
10 EDIT-MENU-FLAGS PIC X(80) VALUE "MODAL".
15 COPY-MENU-ITEM.
20 COPY-MENU-DESC PIC X(80) VALUE "COPY".
20 COPY-MENU-TYPE PIC X(80) VALUE "MENU_ITEM".
20 COPY-MENU-POSITION PIC X(80) VALUE "0,0,100,20".
20 COPY-MENU-FLAGS PIC X(80) VALUE "MODAL".
15 PASTE-MENU-ITEM.
20 PASTE-MENU-DESC PIC X(80) VALUE "PASTE".
20 PASTE-MENU-TYPE PIC X(80) VALUE "MENU_ITEM".
20 PASTE-MENU-POSITION PIC X(80) VALUE "0,0,100,20".
20 PASTE-MENU-FLAGS PIC X(80) VALUE "MODAL".
05 VIEW-MENU.
10 VIEW-MENU-DESC PIC X(80) VALUE "VIEW".
10 VIEW-MENU-TYPE PIC X(80) VALUE "MENU".
10 VIEW-MENU-POSITION PIC X(80) VALUE "0,0,100,20".
10 VIEW-MENU-FLAGS PIC X(80) VALUE "MODAL".
15 ZOOM-IN-MENU-ITEM.
20 ZOOM-IN-MENU-DESC PIC X(80) VALUE "ZOOM IN".
20 ZOOM-IN-MENU-TYPE PIC X(80) VALUE "MENU_ITEM".
20 ZOOM-IN-MENU-POSITION PIC X(80) VALUE "0,0,100,20".
20 ZOOM-IN-MENU-FLAGS PIC X(80) VALUE "MODAL".
15 ZOOM-OUT-MENU-ITEM.
20 ZOOM-OUT-MENU-DESC PIC X(80) VALUE "ZOOM OUT".
20 ZOOM-OUT-MENU-TYPE PIC X(80) VALUE "MENU_ITEM".
20 ZOOM-OUT-MENU-POSITION PIC X(80) VALUE "0,0,100,20".
20 ZOOM-OUT-MENU-FLAGS PIC X(80) VALUE "MODAL".
END PROGRAM DDT_WINDOW.

4. 处理用户事件

在图形界面程序中,我们需要处理用户事件,如按钮点击、菜单选择等。以下是一个处理菜单项点击事件的示例代码:

pl/i
01 MENU-EVENT.
05 MENU-EVENT-TYPE PIC X(80).
05 MENU-EVENT-VALUE PIC X(80).

PERFORM CHECK-EVENTS.

CHECK-EVENTS.
IF DDT$WINDOW-EVENT-FLAG = "MENU-SELECT" THEN
CALL "DDT$GET-EVENT" USING MENU-EVENT.
IF MENU-EVENT-TYPE = "FILE" THEN
PERFORM HANDLE-FILE-EVENT.
ELSE IF MENU-EVENT-TYPE = "EDIT" THEN
PERFORM HANDLE-EDIT-EVENT.
ELSE IF MENU-EVENT-TYPE = "VIEW" THEN
PERFORM HANDLE-VIEW-EVENT.
END-IF.

HANDLE-FILE-EVENT.
IF MENU-EVENT-VALUE = "NEW" THEN
PERFORM CREATE-NEW-FILE.
ELSE IF MENU-EVENT-VALUE = "OPEN" THEN
PERFORM OPEN-FILE.
END-IF.

HANDLE-EDIT-EVENT.
IF MENU-EVENT-VALUE = "COPY" THEN
PERFORM COPY-TEXT.
ELSE IF MENU-EVENT-VALUE = "PASTE" THEN
PERFORM PASTE-TEXT.
END-IF.

HANDLE-VIEW-EVENT.
IF MENU-EVENT-VALUE = "ZOOM IN" THEN
PERFORM ZOOM-IN.
ELSE IF MENU-EVENT-VALUE = "ZOOM OUT" THEN
PERFORM ZOOM-OUT.
END-IF.

总结

本文以PL/I语言和DDT库为例,介绍了图形界面程序开发的基本步骤。通过设计界面布局、创建DDT窗口、添加界面元素和处理用户事件,我们可以实现一个功能完善的图形界面程序。尽管PL/I在现代编程语言中并不常见,但在某些特定领域,它仍然具有独特的应用价值。希望本文能对读者在PL/I图形界面程序开发方面有所帮助。