PL/I-86で簡単なサンプルを作ってみました
用意したものは、Borland C++ 5.5のmakeと、PL/I-86です。PL/I-86の実行ファイル一式はc:\pli86\binに入っています。--- Makefile ---PLIBINPATH=c:\pli86\binSYSFILE=pli0.ovr pli1.ovr pli2.ovrLIBFILE=plilib.l86PROG=tensort${PROG}.exe: ${PROG}.obj ${LIBFILE} link86 ${PROG},${LIBFILE}${PROG}.obj: ${PROG}.pli ${SYSFILE} pli ${PROG}pli0.ovr: copy ${PLIBINPATH}\$@ .pli1.ovr: copy ${PLIBINPATH}\$@ .pli2.ovr: copy ${PLIBINPATH}\$@ .plilib.l86: copy ${PLIBINPATH}\$@ .clean: -del ${PROG}.obj ${PROG}.sym ${SYSFILE} ${LIBFILE}clobber: -del ${PROG}.exe ${PROG}.obj ${PROG}.sym ${SYSFILE} ${LIBFILE}--- tensort.pli --- TENSORT: PROCEDURE OPTIONS(MAIN); DECLARE 1 KYOKA(5), 2 NAME CHARACTER(6), 2 TEN FIXED(15); DECLARE GOKEI FIXED(15); DECLARE I FIXED(15); DECLARE J FIXED(15); NAME(1)='KOKUGO'; NAME(2)='SUGAKU'; NAME(3)='RIKA'; NAME(4)='SHAKAI'; NAME(5)='EIGO'; DO I=1 TO 5 BY 1; PUT LIST (NAME(I),': TEN ? '); GET LIST(TEN(I)); END; DO I=1 TO 5-1 BY 1; DO J=1+1 TO 5-I+1 BY 1; IF TEN(J)>TEN(J-1) THEN CALL SWAP(ADDR(KYOKA(J)),ADDR(KYOKA(J-1))); END; END; GOKEI=0; DO I=1 TO 5 BY 1; PUT SKIP LIST(NAME(I),':',TEN(I)); GOKEI=GOKEI+TEN(I); END; PUT SKIP LIST('GOKEI ',':',GOKEI); RETURN; SWAP: PROCEDURE(K1,K2); DECLARE K1 POINTER; DECLARE K2 POINTER; DECLARE 1 KYOKA1 BASED(K1), 2 K1NAME CHARACTER(6), 2 K1TEN FIXED(15); DECLARE 1 KYOKA2 BASED(K2), 2 K2NAME CHARACTER(6), 2 K2TEN FIXED(15); DECLARE TMPNAME CHARACTER(6); DECLARE TMPTEN FIXED(15); TMPNAME=K1NAME; K1NAME=K2NAME; K2NAME=TMPNAME; TMPTEN=K1TEN; K1TEN=K2TEN; K2TEN=TMPTEN; END SWAP; END TENSORT;実行すると、社会、数学、 国語、理科、英語の点数をきいてくるので、入力すると、得点が高い順に一覧を出して、最後に合計点を出します。--- 実行例 ---C:\home\neko\src\tensort>tensortKOKUGO : TEN ? 90SUGAKU : TEN ? 100RIKA : TEN ? 98SHAKAI : TEN ? 60EIGO : TEN ? 85SUGAKU : 100RIKA : 98KOKUGO : 90EIGO : 85SHAKAI : 60GOKEI : 433End of ExecutionC:\home\neko\src\tensort>SWAPプロシジャではポインタを使ってみました。融通は利くけど、わかりにくくなりますね。