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图形界面程序开发方面有所帮助。
Comments NOTHING