愛知工業大学研究報告 第22号B 昭和62年
27
プログラム開発環境の改善について
秦 野 和 郎 @ 陳 的 虎 @ 竹 松 英 夫
Imp
r
:
ovement o
f
P
r
:
og
:
r
amming Envi
r
:
onment
Kazuo HA
T
ANO
,
Chen d
e
HU
and Hideo T
AKEMA
TSU
Recently, we introduc巴da new personal computer PC-9801 VM2. This computer is controlled
by the MS-DOS operating system.Itis the first experience for us to work on the MS-DOS. To improve our programming environment, we must develop many utility programs. In this article, we introduc巴someuseful utility programs coded by C programming lauguag巴
1.まえ力《き パーソナノレコンピュータが出現して既に相当な期間が 経過している。この間のノミ ソナノレコンビュータの発展 は目覚しましくハードウェア, ソフトウェア共に初期の 製品とは比較にならない位に高性能化してきている。 筆者らの研究窒では従来16ピットパソコンMULTIl6 を主に使用してきたのであるが数年の頻繁な使用で老朽 化 し 誤 動 作 が 目 立 つ よ う に な っ て き た の で 去 年PC -9801VM2及 びPC-98XAを購入した。これに伴なって使 用 す るOSをCP/M-86からMS-DOSに 変 更 す る 事 に し7こ。 使用する計算機が変るとそれまで使用してきたプログ ラムの多くが書き直しになるか或いは手直しを必要とす る事になる。これは共同利用の大型計算機の場合と伺じ である。又,従来便利に利用してきた機能が新しい計算 機には備わっていない事もある。このような事情から計 算機の更新はなるべく避けたい。しかし技術革新の激し い今日,古くて遅い計算機をいつまでも使っているのは 損である。そこで計算機を更新するのであるが,購入後 しばらくの間は実用にならない。 共同利用の大型計算機の場合は更新する前にセンター 職員なり然るべき委員会が導入前に更新による影響を少 しでも少なくするように努力する。しかしパーソナノレコ ンピュータの場合は不足する機能を自分で補なわなけれ ばならない。基本ソフトウェアであるOSやコンパイラ を購入してもそれだけでは十分でない。 筆者らは数値計算のアルゴリズムの開発を専業として い る 。 開 発 し た ア ノ レ コ リ ズ ム を 検 証 す る た め に 専 ら FORTRANでプログラムを1午っている。プログラム開 発を効率的に行うためにはOSやコンパイラの他に種々 なユティリティプログラムが必要である。筆者らは今回 の機種変更に伴なっていくつかのユティリティプ戸グラ ムを作製している。従来はそのようなユティリティプロ グラムをFORTRANとアセンフラを使ってい書いてい たのであるが,そのようにしていては次の機種変更又は OSの変更時に又大巾な変更を必要とする。そこで今回 は最近とみに評価の高まっている iC言語」で書く事に した。 本稿では{乍製中のいくつかのュティワティプログラム に つ い て 述 べ る 。 本 文 中 の プ ロ グ ラ ム は す べ てMicro -Soft社のiMS-C V. 4.0Jの仕様に従って作製されてい る。 2.ソースファイルの番号っき印刷 使 用 す るOSをCP/M-86から MS-DOSIこ変更して 最 初 に 困 惑 し た の はMS-DOSではソースファイノレを番 号っきでディスプレーやプりンタに出力するコマンドが 存在しない事であった。 CP/M-86で はPIPCPeripheral Interchange Program)とし、うかなり広い機能を有する コマンドがある。ファイノレ名が,MAIN,FORなるソ ス ファイノレを番号つきで表示するには
B>A: PIP CON 二MAIN,FOR[N]
とすればよい。又,プリンタに出力する際に60行毎にペ
ージ送りをし天地をあけるには
B>A: PIP PRN: =MAIN.FOR[NP] とすれはよい。
MS-DOSのもとでソースファイノレを表示するには B>COPY MAIN.FOR CON
とするのであるが番号を表示する機能はない。
そこでまず,図Iに示すようなnuprinなるプログラ ムを作った。これは番号つきで複数個のソースファイノレ
夫 英 松 虎・竹 的 郎・陳 和 野 秦 28 NUPRIN .BAT 1987
TYPE NUPRIN .BAT SET PATH=C:¥MSC¥BIN SET INCLUDE=C:¥MSC¥INCLUDE SET LI B=C:¥MSC¥LIB SET TMP=C:¥ B: CHDIR ¥NUPRIN
MSC B:NUPRIN
,
B:NUPRIN,
CON; LINK B:NUPRIN,
B:NUPRIN; B:NUPRIN B:¥NUPRIN¥NUPRIN.C 10:03:51 16 Jan Fri 1 : 2 : 3:4
:
5 : 6: 7 : 8 : 9 : 10: NUPRIN.C1****
本**** **************************1
1
*
Print Files with Number 1- culumn only*
1
1*
Usage nuprin filel file2 ... */1***
ホ***** **キ***キ*******************! #include くstdio.h> #include <time.h> 1987 10:03:59 16 Jan Fri main(argc,
argv) int argc; char *argv[J; ( inti,
j; Iong ltime; char buff[256J FILE *fp; bufft[26J; for(j=l; j < argc; printf("¥n") ; for(i = 1; iく 1() ; time(&l time) ; sprintf(bufft,
"%s",
ctime(<ime)) ; bufft[24J = ¥ 0' ; printf("%s",
buffU; for(i = 1; i <6 ; i++) printf(" "); printf(" %s¥n¥n",
ar gv [ j J ) ;if((fp = fopen(argv[jJ, "r")) == NULL) (
printf("¥7¥n Cannot Open File : %s¥n¥n"
,
ar gv [ j J i ; continue;i
=
0 ;while((fgets(buff
,
255,
fp)) != NULLl printfC "%5d: %8",
++i,
buff); fclose(fp); printf(" i + + ) j + + )••••••••..•.•.•••••••.••.••.••••••...•••••••••••••
••••••••••••.••.•..
1 A つ -quA 吐 p b a u 弓 'aun ヨ ハ U34ヲu つ U 4 噌 ロ υ 広 U 同 dQUQunu--つ 町 dQUQunu--つ d4tRURUFioon ロ nvtょ っ
-qU4 唯 3i141A141ATょ
1 ム 1A'A1ょ っ
u う ﹄ つ ' ・ 9M9-9 剛 つ - ワ M 9 -9 -q u q d q u n d n d のtime及 び20行 自 のctimeな る 関 数 はMS-DOSから 臼付及び時刻を受け取り(time),文字列の形に変換する (ctime)ものである。将来OSをUNIXに変えるときこ の部分のみは変更する必要があるかも知れなし、。 nuprin.cの30行自から31行目までがこのプログラム の主要部である。 fgetsなる関数で、番号をつけbuffに一 行分入力しprintfなる関数で、番号をつけて表示する。 最近の殆んどのプリンターではファンフォールド紙の 図1 を表示するプログラムである。図 1自体がこのプログラ ムで表示されている。 nuprin. bat及びnupnn.cなる2 つのソースファイノレを表示するには B>nuprin nuprin. bat nuprin.c と指示する。プリンタに印刷するには B>nuprin nuprin. bat nuprin.c>PRN とする。 指定されたファイノレの表示を開始する時点の日付と時 nuprin.c 19フログラム開発環境の改善について 29 ーノレト紙に印刷する場合には左右に幾分かの余白がある ので紙を切り離した後それを綴る事ができる。しかし, たとえば筆者らが使用しているPC-PR101Lではカット シート紙に印刷するとき左端ぎりぎりの位置から印字す るため綴じ代がない。このためにCOpyコマントのよう な既製のコマンドでは不都合な事がある。nuprinでは左 端 に 綴 じ 代 を 作 り た け れ ばnuprm.cの31行 目 の%5dを たとえば%15dに変更すればよい。このような簡単なプ ロ グ ラ ム で も ソ ー ス プ ロ グ ラ ム の 形 式 で 持 っ て い る と 種々の状況に容易に対応する事ができる。 長いソ スファイノレを印刷し保管しておくには,たと えば60行毎に改頁し天地をあけると具合がよい。図2iこ 示 すpapnnは そ の よ う な 機 能 を 持 つ プ ロ グ ラ ム で あ る。後に示すプログラムはすべてこのプログラムで印刷 している。 以上2つ はCRTディスプレー及び80桁 の プ リ ン タ へ の出力を想定したプログラムである。 132桁 や136桁のプ りンタに印刷するのにこれらのプログラムを使うと右半 分が空白になってしまって紙が勿体ない。この場合には 枚 に2列印刷するのが合理的である。プログラムのデ バック中には一度になるべく多くの部分を見うる事が好 ましいのでこの面からも2列に印刷するのが好ましい。 図3は136桁のプりンタに複数個のソ←スファイノレを 印刷するプログラムである。このプログラムはl行が60 桁を越える行を改行して出力するようにしているため幾 分複雑である。プログラムの大雑把な流れは次のように なっている。doprin.cの54行目でまず, buffiにl行入力 す る 。 次 に 関 数copyliを 呼 び 出 し てbuffiの 内 容 を buffpiこ移す。その際buffiの内容が60字を越えているな らそれに対応した措置をとる。buffpに120行分以上入っ たら関数oprintを呼び出してプリンタへ出力する。関数 oprintの 主 な 操 作 部 は115行自から128行目までである。 この部分でbuffpからbuffoに移しながらプりンタへ出 力する。 3.文番号のつけ換え 殆んどのプログラム言語では,名札は文字列である。 アセンフラですら名札は文字列である。従って名札に意 味を持たせる事ができる。しかしFORTRANのみは名 札すなわち,文番号は5桁以内の自然数となっている。 数字であるから意味を持たせる事はできない。文字列で 与えることのできる名札はプログラムを見やすくするの に役立つ。名札は人がプロクラムを見てわかりやすいよ うにきめればよいのである。 方, FORTRANの 文 番 号 は 意 味 を 持 た せ る 事 が で きないのでプログラムをなるべく見やすくするためにど のように文番号をきめるかについて種々の流儀がある。 たとえば文献イ)では o READ文 に 対 応 す る FORMAT文 に は500か ら 始 まる10間隔の3桁の数 o WRITE文 に 対 応 す るFORMAT文 に は600か ら 始まる10間隔の3桁の数 o DO文の端末文は10から始まる10隔の2桁の数 o GO TO文などでその行に制御が移る文には1から 始まる 1間隔の1の位が0でない数(通常1桁) とつけている。 このような原則は100行程度迄のプログラムなら守る 事ができるかも知れないが,一つのプログラム単位が500 行とか1000行以上になると守る事が困難になる。又筆者 らの経験では文番号の桁数は 定になっている方がプロ グラムをキーインするのに操作しやすい事がわかってい る。そこで筆者らは文番号を4桁として第2欄 第5欄 に書く事にしている。 文番号は定義される 11厨(第 2~ 第 5 欄に現われる 11頂) に 定ずつ大きくなるようにするのがよL、。て、たらめに つけると,たとえば, GO TO 1241とあるとき行先はそ の文の上にあるのか下にあるのかわからない。従って文 番号1241のついている行を始めから終りまでくまなくさ がさなければならない。 50行程度の長さのプログラムな らそれでもよ L、が長いプログラムになると大変である。 そこで文番号をたとえば1100から始め10間隔で定義され る順に大きくなるようにつける。 そのような方針でプログラムを作ってもデノミッグの段 階で,挿入,削除,置き換えをするためにプロクラムが 動くようになった時点では文番号の大小11買が狂ってしま う。又最初10間隔でつけていた番号も10間隔ではなくな る。 プログラムが動くようなって答が出れば,それでその プログラムの寿命は終りとしづ場合はこれでよい。しか し多くの場合,一旦動くようになったプログラムは将来 役に立つ可能性が大きい。又それを少し変更する事によ って新しい機能のプログラムが出来る可能性もある。従 って動くようになったプログラムは見易い形にして保存 しておくべきである。そこで筆者らは文番号をつけ換え るプログラムを作って十数年来使っている。 図4に示すプログラムchgstは図5に示すようなプロ グラム(SLEQF2A1,OLDという名のファイノレ)を図6に 示すようなプログラム (SLEQF2A1,FORという名のフ ァイノレに入れる〕に書き換える。図5と図6とでは文番 号のみが異なる。図5のプログラムは文番号がて、たらめ
夫 英 松 虎・竹 的 郎 。 陳 平日 野 秦 30 PAPRIN .BAT 10:05:10 1987 TYPE PAPRIN_.BAT SET PATH=C:¥MSC¥BIN SET INCLUDE=C:¥MSC¥INCLUDE SET LIB=C:¥MSC¥LIB SET TMP=C:¥ B: CHDIR¥PAPRIN
MSC B:PAPRIN,B:PAPRIN,CON; LINK B:PAPRIN,B:PAPRIN; B:PAPRIN B:¥PAPRIN¥PAPRIN.C 16 Jan Fri 1 : っ ・ 3: 4: 5 : 6 ; 8: 9 : 10: PAPRJN.C
1*********
**************************1
1
*
Print Fil己s with Number 1- culumn only*
1
1
*
Usage paprin filel file2 ...*
1
1*********
**************************1
#include <stdio.h> #include くtime.h> 1987 10:05:18 Jan 16 Fri main(argc,
argv) int argc; char *argv[]; { int i,
i1,
j, 10 ng 1 t i me ; char buff[256J FILE *fp; line=O; printf(川¥ 014") for(j=l; j < argc; j++) if( line <= 63 ) { printf("¥n 11 ) ~ for(i1 = 1; il t i me ( & 1 t i me ) ; sprintf(bufft, "%s" , ctime(<ime)) ; bufft[24J = ¥0' ; prinlf("%s",bufft); for(il = 1; il く 6; i1++) printf(" 川),printf(" %s¥n¥n"
,
argv[j]); line=line+3; printf<什");
i1++) 1 i ne; bufft[26J; 10; n H 以 す { n・ '
ー す っ d、
f n b + T ︼ % e y l ] nu
-i
N i ハ ヒ = = 1 4 e = l n FAI ) l 、 jn " O L・ '
VAny、
J H O ] ー j'
t
[
] O V-J
n
g
rLnrvaa
gc'
ran
J 、 ¥ すn
円 , , 凸 -u I す D L H O /、 2 4 F 令 ム ふ 目 、 = n H l b&r f p ︿ ( P T A }il continue; 、 a J 1 J 、 , っ け )十﹄ H = e f f m f " n l l u r 、 ・ i + a u h u s i l a 1 a 4 a T L 。 臼'
n
r t " ・1 ρ ﹂ c u r A .,
m % P ) 。l H 司 Jt
(
・ j c f ) [ t + V ' n + g u ) ・ 1 1 4 r ﹀ Hrela p -9 S P f ; %・
'
'
) O " ; " ' H ' i p o n 5 n く・'''く¥ 民 υ ¥ 士 1i+Lハ
υ ' i n 2 { 4 1 ) f ¥ 1 ¥ 1ifti , 5 9)0 ・'mu= ・ ' % f 3 事 l b ] t i A U H -ι L r L 4 4 τ s i H U ( = l f 2 = ( b = f 1 8 t [ l f J t ¥ / + し Ir 、 n ι L ・14 も snfkeels-f 、 n t f l r m r f r・
-enro--puorg
・ -p f t s b f p ぷ A 1 1 ; ( ( , t、 2 io e
-ー = l h } 1 W line++ buff) ; ++ 1, %8 11~ "%5d: printf( fclose(fp); printf("¥n¥n") く NULL) il++) printf(" "); . . . 。 . , . . . . . . . . s ・ a ・ -a v -. ‘ v e -a ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 T A 1 4 τ i 1 i 1 1 1 i 1 4 唱1 1 4 V ょ っ ゐ つ ﹄ つ ︼ つ ︼ つ M ワ ︼ つ ︼ つ 畑 つ ﹄ つ M q u q u つJU 勺 U η J つu q J n J 勺 U つu i t i -A せ 4 -A 4 t 4 - A i t -せ
プログラム開発環境の改善について 31
Fri Jan 16 10:06:29 1987 DOPRIN .BAT 1: TYPE DOPRIN .BAT
2: SET PATH=C:¥MSC¥BIN 3: SET INCLUDE=C:¥MSC¥INCLUDE 4: SET LIB=C:¥MSC¥LIB 5: SET TMP=C:¥
6
:
B
:
7: CHDIR ¥DOPRIN8: MSC B:DOPRIN
,
B:DOPRIN,
CON; 9: LINK B:DOPRIN,
B:DOPRIN; 10: B:DOPRIN B:¥DOPRIN¥DOPRIN.CFri Jan 16 10:06:36 1987 DOPRIN.C
.•.•...•..•....••.•...•.••.•...••••..•.••..•.•••••••••••••••••••••••.•••.•••••••.••••
12345678901234567890123456789012345678901234567 141A1it--A14TAti-AtA9-9E9M つ M つ Mっ し
Mっ し
w nノ ﹄ ワ M つ&勺 u n 4 u n d n d n d n J n d n J 勺 uquA せ A 崎 A A -A A 1 A t A 斗A A “ 1 4 -z1*********
** ***水***********持、********/1
*
Print Files with Number 2- culumn print ネ /1
*
Usage doprin filel file2 ...*
1
1********
ネ * ホ * * ホ*********************1
#include <stdio.h> #include くti me. h > 1 1 Q u n v n d つ 恒 噌 EAFEL r L 9-oe
f mf
a
un ' h U 2 4,
.
1 Q U F O [ 1 1 5 0 η 4 ワ 耐 唱 E ' ム 晶 r ﹃ . ﹄ . . , r E . ﹄.唱 a D p ‘et
乎 ムm .
l
2 ' l . A A 2 M n H u n . 1 噌 弘 hUsi, ,
、
J h U 6 ] m 5 0 u n r -唱inu I f ; ・1n' eIPZOL4L s i F ム n p e uuif b b l *r
r
E
aatL
h h n Ic
c
-F
main(argc,
argv) int argc; char *argv[]; { int il,
j,
j1 FILE *fp; line=O; init = 0 fpt = fopen ("PRN",
"w") ; for(j=l; j < argc; j++) { spacel() ; sprintf<fname2,
"%s¥n" • a r gv [ j ]) ;for(il=O; il<40 ; il++) buffp[line][il]=' '; il
=
39 ;while((buffp[line][il]=fname2[il-39]) !='¥0' ) i 1 + + ;
!ine++; space!();
for(il=O
,
jl=O ; fname2[ilJ != '¥0' ; il++) if(fname2[il] 1= '¥n' ) fname2[jl++] = fname2[ilJ fname2[jl] = '¥0' ; if(j == 1) ( il =0 ; while((fnamel[il]=fname2[il]) != '¥0' ) i 1 ++ ; if(!ine >= 120) ( oprint() ; !clear()if((fp = fopen(argv[j], "r")) == NULL) { spacel() ;
sprintf(buffi
,
"
Cannot Open File : %s¥n",
argv[j]); il = 0 ; while((buffp[line][ilJ=buffi[il]) != '¥0' ) il++ line++ ; space!() 図 3ー l夫 + 央 松 虎・竹 的 郎・陳 和 野 秦 32 DOPRIN.C 1987 10:07:18 16 Jan Fri lclear() if(line
>
=
120) oprint() ;NULL)
} continue; numb = 0 ; while((fgets(buffi,
255. fp)) numb++; copyl i () ; if(line )= 120) ( oprint(); lclear() fclose(fp) ; if(line ) 0) oprint() ; fprintf(fpt,
"¥n¥n") ; fclose (fpt> ; '¥0' buffp[l ine)[l] '¥n' spacel() ( buffp[line][O] line++ ; -n , ﹄ . , . df
n H C 工 f z u = h u -= 、 J 1 1 9 M 唱i j j [ [ 司 J I C β し g i . , n f o 白 i U 8 ; 、 , t l h u 、J ' b I , . , + m p = n ; + , U ヂ ム ー す ? ・ ワ 凶 -n H a i 可 J ' n H A U -J 噌 ﹄ U 7 ; ¥ ¥;
2
' b + = , , . , ・ J ' i ﹃ J ' ・ 一 -n v r t H ) K I -6 7 1 ; + -・ j c 7 8 z ︿ e : + 1 [ 6 6 + 2 n c d 2 j i 8 r L [ 1 j i 5 j [ f a ] 1 k l ' % 1 f e e -' f " ; e u o n n P 1 ・ ' n b l ・ -' o f k'mio--z=11=f く lc=IrL+2u 'n22rLPP+・Jb f j p o f f e r 、 q L P Z 唱i t I C o s i g i n H V A -JU;kf・'%uuio b u l b b l f,
( O ; b + ・ J s i = / 目 、 4 , 〆 t 、 唱i 4 ・ ・ 9﹄ ハ ︾
r 、 1 4 f ι ・ j n , j e z J i 、J ・1 ﹁ 、 -E i ( t r r i --nP01h lisf・JW Y po
c ,
t '¥0' ) '¥0' ) } line++. ,
) a ? L F? ム , ?Au
・ '
h u 、 , , 、 y " ﹀ S ' e % t ) m " P 1 ・I s l e t ' ( m B i s -a 8 t t ; n r 、 D ゐn
干 & e f -) ( m ( r 1 n ; i f p e e ) t t f m l " c n a r i ) n t " ' r + f s P +-,
H 2 4 唱i ' 唱i S4JntU4L ; % ・ ' " く P H ・ ' q u ' I 2 4 9・
' o ' χ j ( ・ 1 + も + t w t A ' n v 氏 U H , . 、 f a -] P P く ¥ く ・'
t
' c u 、 , t i e -唱i ・ ' ι ι ' 唱i , 、 y n H . , 2 0 ( ( j ) f j o o -9 -r L f -s i e F I Z + L 氏 U=r i e t -t t ・ ' m u ・ ' P I P -m f = n n i b -f ﹀ ・ j f , t a p -E A -1 ・ ' 1 晶 & L r 1 8 4 a ' i , t r t t u t r r = 1 & f ? " = f e r -b i p p + 1 8 t F L I t n o -n f f + ・ J { n t ・ J n i f ) g r ・ -e t ( e i f ( i l ( t n a ( S i r m r f r r ( t n o h f I n o -p u o p f n i l e -e i f t s b f f ・ -. lr
p n υ r t ttI
t
、
.
,,
j 1 ++ ) j1 "¥n")
"¥014¥n") fprintf(fpt jl++).•...••••••••••••••.•••••••••••••••••••••••••••••••••••••••.•••••...••...•..•..•.•...••...••..
8 G d ハ V 1 ょ っ ι q J 4 t F D G U 弓'員 u Q d n ︾ T A う& q U 4 t R U 氏 U 円 t 且 M G d ハ U 1 4 ヲ 幽 門 J A t F D 氏 U 円 d a u Q d ハ u ' i。
F M つ U 4 4 1 F 口 氏 U 円 t 且 u Q d n v t i ワ 館 内 J 4 せ 戸 b 氏 U 円 , e Q u q d n v ' A ワ M q u A 三 戸 b 民 u ゥ , 4A 宅 F D F U F U F b 戸D R u ' b R U F U ロ υ a u R u a u A U 氏 U 氏 U R U 侭 u R u 日 u R i 同 / 門 t 円 , , 問 d m i 同 , , 巧 t 円 , s - i a u 虫 u a u a u 員 u o o 且 U Q U 且 u 且 u G d q u Q d Q d Q d o d Q d Q d Q d n w d n u n u n v n u n u n v n v n u 1 4 1 A ' A 1 4 1 4 司 2 4 3 A 1 A33 プログラム開発環境の改善について
DOPRIN.C
&E D A ι a L、 2 i n y 。 , / ' 、 、 、 、 巴 、 ‘ Z i 2 i f 、 、 J + L P T 山 η 4 n t E ・1 n mr
・ 9 ・1a p ) r n f t p f g i £ ム 、h J P す A g + U ) 十 -b + H 唱 f S 4 ムT n u - - J , 、 i I t -d n P E-;'L2
5 ・' s ハ ν 町 川 町 A 1 ょ " c u " / ¥ ノ 、 1 3占
,
守
'
-'
. 可 ﹄ ω 、 B よ し み L @ , p . , p 2 5 -n + i I ( 1 ( 2 r I Z P I 1 よ L L 1 A L L -j n ・ J n ( i ( i r r r r oPLOP E -s i p -P I 1987 10:08:06 16 Jan Fri '¥ 0' ) '¥ 0' ) '¥0' ) buffol ) ] 1 i j [ ] ハ U η ノ ﹄ 唱I + 唱 E i lf
p ふ £ i e d a p -u 、 ) 唱 。 ふ e -" + 1 J・ '
唱 EA ‘EA 。 I J + r L + ; 1 1 l j n l ; i [ 包 91ip晶、, ハ U L A t i , 1 2 く f 0 ・ J 1 1 u ¥ f t -' I 弘 U E Y ' ρ し 〆 t、)
n
・ ' i 、 = 可i ハ リ i p u ? i21031 T i -、 A , 一 向 。 i h ﹀ l wn
n
(
I E l r 1 A n -o k i k f ) l ︿ t ( r n c l a -i ‘ ρ ν l p ﹂ l { line -c ・ m ・ -e e -@ 。 . . . @ -a -O ・ G ・ -。 . . . 。. . . 周 ・ ・ ・ ・ ・ ・ o ・ e ・ -a v -e -e q QU901 ム ワ 信 3456789nu--っ -3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 ハ v ハ U 1 4 1 L 1 A 2 i 1 i 1 ム 1ょ 1 ム 1 4 1 1 n λ M つ 白 ワ ︼ つ ︼ つ 箇 つ ︼ ワ 切 っ ι ワ M つ ︼ つ υ つ u q u q u つ d q u η ο η J 勺 u q U 4 1 1 1 4 1 4 企 4 1 1 ム 旬 i 1 4 t i -i t -唱i 1 L 1 4 司i 唱l 1 A 唱i 可i 1 L 1 4 1 ム 1 4 唱 i 唱 i 1 4 1 ム 令 i 1 i t -4 1 ム 1 i 1 4 1 i t -i t -ム T i 噌 l -1 ム ] Q d ・1 [ ] η ノ 臼 ) -] [ q u p -宅 ' -P 7 4 r L z i ] U 1 A b ・ 9 a 1 = . , . , r L Q u o -J ー 、 ハ v p & F D 口 J 、 J n s i r 、 P F b H1Jr=2 ょ 1 -+ n + u u j = 9 ¥ + t Q d b l n マ1 告。 1 = 。 9 1 4 r L ¥ i r -o " ハ ョ , t 市iiJPI . , 、 j e e -一 r L P I . , ' f n L 、 y Q d o u o n O O E -f ・ JD+ ι t n b ・1FOP-n=PIi、+ P く l f ・ '11uO(Qd f l + u l j b E i ( i = b + ( = l 2 i ﹀ 1 -( 、 + / ¥ r I ιLe,alf、QdoquLH n I E i 2 f i w i o i = l i r = ﹁ 、 ・ 1 〆 L P l f 2 h f f I i l v・
-邑 (s
r
1 0 、 f ρ u z i jl + +) "%sl! i1=
0 ; while((fnamel[il]=fname2[i1J i 1 + + , fprintf(fpt 1 2 () して新しいファイノレを作る。FORTRAN
が新しい規格,FORTRAN77
になり,ブ ロックI
F
文 を 使 え る よ う に な っ て 必 要 な 文 番 号 の 個 数 は激減した。又,紙カ ドの使用からファイノレの使用に 変 っ てFORTRAN
のプログラムでも「字下げ」を普通に 行 う よ う に な っ た 。 そ の よ う な 事 情 か らchgstなるプロ グ ラ ム の 必 要 性 も か な り 薄 ら い で 来 て い る 。 そ れ で もFORTRAN
が 使 わ れ る 限 り こ の プ ロ グ ラ ム は 有 用 で あ る。 4.プロットファイルの出力 かつて計算機はカードリ-1jIーからプログラムやデー タ を 読 み 込 ん で 計 算 し ラ イ ン プ リ ン タ へ 結 果 を 出 力 す る ものであった。しかしX Yプロッターやグラブイツクデ 図3- 3 であるから見にくい。GOTO
8213という文を見たとき 次 は ど こ へ 制 御 が 移 る か を 知 る の に 苦 労 す る 。 こ の 程 度 の 長 さ な ら ま だ よ い が5
0
0
行 程 度 以 上 の プ ロ グ ラ ム に な ると困ってしまう。図6で は 文 番 号 が 規 則 的 に 並 ん で い るので,たとえばGOTO 1
1
7
0
という文を見たとき次に 制御がどこへ行くかを簡単に見い出す事ができる。 図4に示すプログラムて、は文番号をつけ換えるべきプ ログラムが入っているファイノレのファイノレ名をchgst.c の25行 自 で 読 み 取 り , 文 番 号 を つ け 換 え た プ ロ グ ラ ム の 入るファイノレのファイノレ名を27行 目 で 読 む 。 次 に29行自 で 新 た に つ け る べ き 最 初 の 文 番 号 を 読 み (4桁)31行目 で し べ つ の 間 隔 で 文 番 号 を つ け る か を 与 え る (2桁 )041 行目から68行 目 ま で は 文 番 号 を 抽 出 し そ れ ら を 文 番 号 表 noldに登録する。69行目から7
7
行 目 ま で で 新 し い 文 番 号 表nnewを作る。79行呂から131行 目 ま で で 文 番 号 を 更 新夫 英 松 虎E竹 的 郎@陳 手 口 野 秦 34 CHGST .BAT SET SET SET SET B: CHDIR ¥CHGST MSC B:CHGST,B:CHGST,CON; LINK B:CHGST
,
B:CHGST ISTACK:20000; B:CHGST 1987 PATH=C:¥MSC¥BIN INCLUDE=C:¥MSC¥INCLUDE LIB=C:¥MSC¥LIB TMP=C:¥ 10:09:05 16 Jan Fri 。 。 , . . a w -@・ ・ ・
1 2 3 4 5 6 7 8 9 CHGST.C1*********
** ****************ホ*******/1
*
Change the Statement Numbers (FORTRAN) */1
*
Usage chgst [-p] */1*********
**************************1
#include <stdio.h> #include <ctypε. h > 10:09:14 1987 16 Jan Fri main(argc,
argv) int argc ; char *argv [] ;{ int nold[2000]
,
nn告w[2000],
i tabp(2] [] 00];int inst
,
intv,
ipnl,
ipnO,
kosp,
kosl,
ipn2; int il,
i2,
numb,
kpl,
ic,
icl,
irl,
exill ; int kprin,
line,
kchg ;char fi 1芭1(64J , file2[64]
char *sl ; FILE *fpl , *fp2 kprin = 0 ;
i f (ー-argc > 0 && <*++argv)[O]
sl = argv[OJ+l ; if( *sl == 'p' :: ,jcn[5J buff[82J kprin = Source Fi le="); }
if((fp2 = fopen(file2, "w")) == NULL) {
printf("Cannot cr日ate Destination File¥n 11 )
,
break ; ー 一 一 一 ー 一 一 ー ー ー ー ー ー ー ー
*
1
) ) ハ υ ! = NULU } f 0 r ( ; ; ) { printf(" s c an f ( "%s ",
f i 1 e 1 ) ; printf(" s c an f ( "%s " , f i 1 e 2) ;printf("Initial Statement Number(4d)ヱ11 ) ;
scanf("%4d"
,
&inst); printf("scanf("%2d"
,
&intv);if((fpl = fopen(filel
,
"r")) == printf("Missing Source File continue ; *sl Destination File="); NULU ¥n H ) , 民 υ [ 門 b 2 1 r i 、.fn+ie
)
u
b l bm
・ , . ,
P u f 1 8 n 0 0 1 8 L L = = t i, ,
naufM 円 J ε P I,
,
=
m S S 9 ・ ' く E o o s i -= ' i t k k f = ! ε 1a
u
u
・ '
品 L h U 1 J 1 J n・ '
s
・ ' ・
9 ﹁ 、 ハ URu--nv 内bri ‘ rL ふ し ハ リ e 1 A 4 L 2 i g よ n = = -n n E 千 A 干 4 0 1 i t p g u u C I -o i f b b t ( p ( { ( i ru
-=
﹁ 、 干 A X O E 1 e f k 1 0 1 cnn ・ 1 i p p h } P I i w i 1 + + ) 'P' Interval(2dl= /* ー ー 一 -g -e e -m w . 。 a v e -w . . , a -e e -e s -. -. 。. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 i つ -つ U A 叩 AFDnbFjRUQd ハ V 1 4 勺 ゐ 円 J d ﹂ 1-UFO 円 , sQUQd ハ U 1ょ っ
u q U 4 ム 戸 hupbmiooQdnU1 ム つ 恒 つ υ A ゐ 戸 bkumjQUQd 内 U 1 1 つ ︼ つ υ 4 4 A 戸 U F O 向 / Q U 1i1 ム 1 A 3 4 1 4 1 i 可 i1i1i1A ワ 町 つ 恒 つ 町 つ ﹄ つ ︼ つ ︼ つ ︼ つ E ワ 恒 つ M 勺 d つ unJ つ und つ u つ u つ υqu 勺 U4141A 日 L A せ 4 せ 4 品 1 9 4 1 4 A 4 A35 プログラム開発環境の改善について CHGST.C 噌4 ム 内b n リ k { ; ; . , . , .9 ) 8 8 8 ) 0 1 ] 8 8 8 n s l k ) I , p o n a ] + , , , n i k p f 1 1 E N D ¥ l r +el,,,?==、0 1 4 r L = ・ I r i -= = Z 1 J 可 ﹂ rLSi====PD み n u 干 ム u s s n 干 ム 1 0 1 4 1 J 1 J 1 J 0 0 D L @ 9 U 6 7 8 9 k k l 司b z r L r L r L r L r L r L 1 4 r e 、 c i S A I l s -守 3 4 1 J ・ ' ι L 1 J s i s -s i f A ハ リ 司 1ム= i l u u u u [ [ + g i b b b b p p + 1 i [ ( b b p t d n f a a B i s e -1 t t o x -J i i k e 凸 し 〆 t S P Y A E
-e
198i 10:09:59 J an 16 Fri = 0 else { εxi t 1 1 brεak }if( exit1 1 continue jcn[ilJ='¥0' , sscanf{jcn , 川%4d" nold[ipnlJ=numb ; kos1++ itabp[1J[kp1J; i 1 + + ) i 1 司 同 ー ー ー 一 一 ー ー ー ー ー ー ー 一 一*1 1 i ne
=
0 ; = i tabp[l][kosp] ?ー.
ー
'N' && '¥n' ) continue ρ しu
n H = = + ・ 1 = = ÷ + も P & n 可 ﹄ 句 J c d n υ 円 f Q d 0 ・ , . , c [ [ K c i g A -J 1 ﹄ 干 A f i P 4 P ‘ . , u u s s ' h U -h u -' n u 凸 U 1 1 k k s o 四 & ) [ [ 0 8 8 2 1 1 k n y ハ U 1 i ' T P Z r L F L + E D P -P ' ' ' b b o fiaan -= S A + ﹄ ふ L P ‘ = = u ' 1 ・ 1 ・ 1 h U 1 J 1 J J a 、 = = = c u o o g u r L F L + られ U 3 i ワ 信 f f u n s n f f p p o p u u f l k i h u h u 〆 ‘ 、 c i } 1 i f ( continue fp2l ﹀ -v , 1 A 司 J C ) 1 1 f c r L z i ・ 可 A g iu
・ ' [ f b ・' 3 f u r、.,PIhu n n ν = u e く 1 b = l { = i ( r l t ] & L 、 J 唱i ・ 1 + 4 1 1 i S 1 t g i I r---'ci[t = i x o i d n l E S C { X 1 = = = 1 j Er
︿ e ・ 1 胃 i ' i f、
S 4 ; i c f l +﹁、・1・1e.
,
C + 市白晶る T r i o ( C O E ・ 1 2 i = 3 1 ・1 c ・n } i v break ; 1 continue,
&numb); ipnl++ ; * V 噌 E 4・
T E-n
' E ム 。 、 A 刊 b , , O + K 1 . , . , = ・ 1 ふL -J / ミ 、 σ。
‘ 1 1 i t i + n 一 P ゐ ・ 1 ・1 p : K I、
n u -S F L e ' n 1 J O ] 1 P 2 k o o e l i -r L ハ リ = r L く p l z w l b = i f p a ! つw n k t ( i n J A S -9 n b V A 一 目 白 υ ハ リ ハ ︾ 、 k g i =ハリ 1 n ( p p f k e l -J t rA O 、2 ' P + R A NULL)change the statement numbers kosp = 0 ; rewind( fpl ) ; ipnO = i tabp[O] [kosp] ; kos1 ipn2 = ipnO + kosl ;
while((fgets(buff, 81, fp1)l line++ ; kchg = 0 ; if(buff[OJ == 'C') { fputs(buff, fp2l 1* i 1 + +) exit1 図4-2 kpl++) kosl = kos1 == 0 ) fputs (buff
,
i f ( -e -a g -. 。 . . . . . . . 0 ・ ・ 個 -e ・ e ・ -a ・ ・ ・ ・ ・ ・ ・ @ -a -e -m o -a v -G d n u 1 A ワ E q u A “ A R U F U 7 a R U Q d ハ V T ょ っ ︼ q u A t 戸U n b 円 , d o o q d ハ U 1 4 9 ω q u A & 戸 h d 伝 U 門 t a u G J ハ U 1 ょ っ 旬 つ U A U Z E U に U 門 i R U G d ハ V 1 4 ワ u q u A t R U R U 円 t Q O 白 J ハ V T ム ワ 旬 つ U A 吉 良 υ 白 U 門 , e 且 U 4 5 5 5 5 5 5 5 5 5 5 6 6 6 6 6 6 6 6 6 6 7 7 7 7 7 7 7 7 7 7 8 8 8 8 8 8 8 8 8 8 9 9 9 9 9 9 9 9 9 9 0 0 0 0 0 0 0 0 0 ー ム 1 4 1 i ' i 1 S A -唱i ' i 可 l夫 英 10 虎・竹 的 郎 。 陳 手 口 里子 秦 36 ) i 1 + + ) numb) i 2 + +) ( CHGST.C jcn[ilJ = ¥0' if(ic !=1) ifC isdigitCbuff[ic-l]) isdigit(buff[ic+4]l continue ; sscanf(jcn
,
"%4d" &numbl for (il = ipnO ; il<=ipn2-1ipnl = il ;
if(numb == nold[il]) { numb = nnew[ilJ ; sprintf(jcn , "%4d" for (i2=0 ; i2<=3 ;
ic1 = ic +- i2 ; buff[icl] = jcn[i2 198i 10:10:56 16 Jan Fri lC += 3 kchg break } fputs(buff
,
fp2) ; if( kchg && kprin )printf("%5d: %s"
,
buffl}
fclos己( fpl l; fclose( fp2 ) ; ipnl++ ;
printf(" Number of -END- statement=χ4d¥n"
, kosp); number=%4d¥n" i pn 1 ) ; Number of statement printf("¥n¥n" ) 1 i ne printf(" - A ・ @ B ・ ・ ・ ・ A w -e -g . . . . . . . . 。 ・ ・ ・ ・ ・ ・ ・ 2 ・ ・ ・ ・ 。 . . , •• E ・ ・ 0 ・ ・ ・ ・ ・ 901234567890142345670090123456789 01111111141122222 ワ M22223333333333 1よ 守 1 2 1 ' 1 1 A 1 4 句1 1 ム 可 i 唱i1 ょ 1 4 $ 1 4 1 i 1 1 1 4 1 ム ' I 司 上 司 i ' i ' I 唱i 噌i 唱 i 1 ム 市 i ' I T i 市 上 旬 1 しかしPC-FORTRANはそれ自体使いにくい処理系 てーあるし, Pro FORTRAN77用のプロッターノレーチン も使い易いライブラリではないように思われる。 筆 者 ら は 使 い 易 い と い う 事 でMicro-Soft社のMS FORTRANを使っている。 MULTIl6ではVersion 3 13を使っていたがPC-9801に変ってからはVersion 3 31を 使 っ て い る 。 パ ソ コ ン を 変 え た 時 点 でOSがCP/ M-86からMS-DOSに 変 っ た が と ち ら もMS-FORT RANを 使 っ て い る の でMULTIl6で 作 っ たFORT RANの プ ロ グ ラ ム は 全 く 無 修 正 でPC-9801で動く。 MULTI16で作ったFORTRANのプログラムが豊富に あるので今更日IjのFORTRAN処理系に切り換える訳に ゆかないO MS-FORTRANには図形出力や図形処理に関するラ イブラリは{可もない。そこでとりあえず最低限必要な図 形出力の機能としてカノレコンフ。仕様のプロッターノレ チ ンによるプロッタ への出力と CRTディスプレイへの 出力が要求された。 筆 者 ら は 先 にFM-7用のプロツタ レノ チ ン を 作 製 図4-3 ィスプレ←の低廉化に伴なって計算結果をグラフ等,図 形の形で出力する事が普及してきた。パソコンは出現当 初から図形出力機能を持つのが当然と考えられていたよ うである。但しそれはBAS訂ICという{個固々のノ之ソコン毎 の閉じた処理系の上で MやMS-DOSのような開いた処理系,すなわち利用者 の意思でソフトウェアを追加してゆけるような環境では 図形出力のような機能は提供されていなかった。必要な らば利用者自身で構成せねばならなかったのである。 しかし最近その聞の事情が少しずつ変ってきている。 現在発売されているFORTRAN処 理 系 に はGraphic Libraryを 含 む か 或 い は 別 売 り で 入 手 で き る も の が あ る。NEC製のPC-FORTRANにはCRTディスプレー に面像を出力するライブラリが含まれている。ライフボ ード社が発売しているProFORTRAN77には別売りの ライフラリとしてGKS仕様のGraphicLibrary,カノレコ ンフ。仕様のプロッターノレーチンがある。従って図形出力, 図形処理をFORTRANで行う事が以前に較べると非常
プログラム開発環境の改善について 37
Fri Jan 16 10:00:55 1987 SLEQF2Al.OLD
1: C*
2: C********* SLEQF2 ** SLEQF2Al ********ホ******************ネ**
3: C* *
4: C* SOLUTION OF SIMULTANUOUS LINEAR EQUATION ホ
5: C* GAUSSIAN ELIMINATION (WITH PARTIAL PIVOTTING) *
6: C* *
7: C********* ** *****水************************
8: SUBROUTINE SLEQF2(A,B,N,NDl
9: IMPLICIT INTEGER*4 (]-Nl
10: IMPLICIT REAL *4 (A-H
,
O-Zl11: DIMENSION A(ND,20l,B(20) 12: IF(N.GT.1l GO TO 1207 13: B(ll=B(ll/A(l,l) 14: RETURN 15: 1207 DO 1194 IP=1,N 16: AMAX=O.OEO 17: DO 3124 IR=IP
,
N 18: IF(ABS(A(IR,
IP)).LT.AMAX) GO TO 3422 19: AMAX=ABS(A(IR,
IP)) 20: IR1=IR 21: 3422 CONTINUE 22: 3124 CONTINUE 23: IFCIP.EQ.IRl) GO TO 2421 24: DO 1153 IC=IP,N 25: AMAX=A(]P,
IC)26: A(IP,IC)=A(IRl,ICl
27: A(IR1,IC)=AMAX 28: 1153 CONTINUE 29: AMAX=B(IPl 30: B<IPl=BCIRll 31: B<IRll=AMAX 32: 2421 IF<IP.EQ.N) GO TO 8213 33: IP1=IP+l 34: DO 7269 IR=IP1
,
N35: DEL=A<IR,IP)/A(IP,IPl 36 : DO 6 5 3 2 1 C = 1 P
,
N 37: A ( 1 R, 1 C 1 = A ( 1 R, 1 C ) -A ( 1 P, 1 C) *DEL 38: 6532 CONTINUE 39: BCIRl=B(IRl-BCJP)*DEL 40: 7269 CONTINUE 41: 8213 CONTINUE 42: 1194 CONTINUE 43: NP1=N+l 44: DO 6916 IPD=l, N 45: IP=NPI-IPD 46: SUM=B(IPl 47: 1 F C 1 P. EQ. N 1 GO TO 3421 48: IP1=IP+1 49 : DO 6 1 2 3 1 C = 1 P 1 , N 50: SUM=SUM-A(IP,
ICl*B(IC) 51: 6123 CONTINUE 52: 3421 B(IP)=SUM/A(IP,
IP) 53: 6916 CCNTINUE 54: RETURN 55: END 図 538 秦 野 和 郎 ・ 陳 的 虎 ・ 竹 松 英 夫
Fri Jan 16 10:01:53 1987 SLEQF2Al.F0R
1: C*
2:
C*********
SLEQF2 ** SLEQF2Al ******************************3: C* *
4: C* SOLUTION OF SIMULTANUOUS LINEAR EQUATION *
5: C* GAUSSIAN ELIMINATION (WITH PARTIAL PIVOTTINGl *
6: C* *
7: C********* ** *****ホ************************
8: SUBROUTINE SLEQF2(A,B,N,NDl
9: IMPLICIT INTEGER*4 (I-Nl
10: IMPLICIT REAL *4 (A-H
,
O-Zl11: DIMENSION A(ND,20l,B(20) 12: 1 F (N . GT . 1 1 GO TO 1100 13: B(ll=B(ll/A(I,11 14: RETURN 15: 1100 DO 1180 IP=I
,
N 16: AMAX=O.OEO 17: DO 1120 IR=IP,N 18: IFCABS(A(IR,
IPl).LT.AMAXl GO TO 1110 19: AMAX=ABS(A(IR,IP)) 20: IR1=IR 21: 1110 CONTINUE 22: 1120 CONTINUE 23: IF<IP.EQ. IRl 1 GO TO 1140 2..:1: DO 1130 IC=IP,N 25: AMAX=A(IP,
ICi26: A(IP,IC)=A(IR1,IC)
27: A(IR1
,
IC)=AMAX 28: 1130 CONTINUE 29: AMAX=B(IPl 30: B(IPl=B(IR11 31: B( IRl )=AMAX 32: 11..:10 IF(IP.EQ.Nl GO TO 1170 33: IP1=IP+l 34: DO 1160 IR=IPl, N35: DEL=A( IR, IP)/A( IP, IP)
36: DO 1150 IC=IP
,
N37: A(IR,ICl=A(IR,IC)ーA(IP, ICHDEL
38: 1150 CONTINUE 39; B(IRl=B(]Rl-B(IPl*DEL 40: 1160 CONTINUE 41: 1170 CONTINUE 42: 1180 CONTINUE . .:13: NP1=N+l 44 : DO 1210 1 PD= 1
,
N ..:15: IP=NPI-IPD 46: SUM=B(IPl 47: IF(IP.EQ.Nl GO TO 1200 48: IP1=IP+l 49: DO 1190 IC=IPl,
N 50: SUM=SUM-A(lP,
ICl*B(ICl 51: 1190 CONTINUE 52: 1200 B(]Pl=SUM/A<IP,
IPl 53 : 1210 CONT 1 NUE 54: RETURN 55: END 図6プログラム開発環境の改善について 39
Fri Jan 16 10:12:00 1987 FIPLl6 . BAT 1: TYPE FIPLI6_.BAT
2: SET PATH=C:¥MSC¥BIN
3: SET INCLUDE=C:¥MSC¥INCLUDE 4: SET LI B=C:¥MSC¥LIB
5: SET TMP=C:¥
6
:
B
:
7: CHDIR ¥FIPLl6
8: MSC B:FIPL16
,
B:FJPL16,
CON; 9: LINK B:FIPL16,
B:FIPL16; 1 0: B : F 1 PLl 6 Fri Jan 16 10:12:10 1987 FI PLl6. C••••••••••••••..••••••.•••..••••••••••••.•...••..•••.•••.•••...••.•••.••••••.••.••..••
12345678901234567890123456789012345678901234567 ' i ' i 唱 i 句 i 唱 i'i 唱 i 唱 i'i'i ワ -q4n4q ,岳ワ脳内 4 q ノ 園 内 , , M 9 u q , M つ υ n d q d n d η d 円d n d n J n d n d A a τ 4 4 τ A A τ a 凡 1 4 -A a τ 4 -a q1*********
*
*
1
*
Plotting of Plotter1
*
Usage fipl161*********
*
*
#include くstdio.h>************************1
File*
1
*
1
*****刻ドホ*****************1
' ' 4 0 p g d,
. ,
d m e o e c p k g u, . ,
] + -b r ・- A
h H n u o o g t I ・1 C S A e a 干 品 h f u h u, ,
g b ' l r p Y 0 1 p i Y 4 f 6 *' '
r E
﹄ g e ' l r 1 A X O -p i x f f * ι E a r 官 臼 t 0 a L ) n 1 -h h τ I A { . i 1 f c F n H ia
m {" . ,
n H 、J ¥ すe
n l A ¥ i s p 工 % ' {e
) l L i L F H U N e C 2 V A. ,
=u ) O H、 ,
S=
、
y " グ 白 戸 U V A n H 1且"・ 1 ・ ・ 1 c d F ' se
・ 1 e l Mc
・ ' ・ 1 r ) f n u e ( ¥ o l n 7 Q U ・-e
I
含 干 & P L H ' O ( n"sis-¥ s t { H % = n (円 i ) f { p r &LSI , 十 ム n y. ,
n n { i a (.
,
r c f n M E S -(r
0 2 i continue;. , . ,
) ) -o , d・ '
t e・ '
ceo a p・
1 8 4 s n u + o a。
a A V -' ' 1 4 n u " H 司 i、
J f d * L % % % L"
"
g
白 U U ( ( r ﹀ N 2Igi 内 u・ ' 唱
i n n v d -=aa
・ d 、 q ・ ' z 円 i u n u z ρ i ︾ 0 ・u 、 . 2・ '
s s e e d } k. ,
. ,
g p p f ) a.
,
、
J ., . ,
r s s e D ゐ e、
J、 ー タ
口 、 ,
、
J O -r、
D 晶 S A r " " r " " y s b w = o = = = = ' 川 Y ﹀'
2
;
島 u n v・
'
噌
d , a・
'
"
且
u 、 J a ' y ' l e e ) n ' g -o e e " ¥ 'P H X r 0 ・ p p n d f p N O ( O S S 草 % f f R n x r O H T u P A -8 0 d l ) b { " g ' t e ) " " ( h ( ・ IHce* ハ リ ハ U S S r f a p, ,
{ t u n O % F s g ︿ z p p e l e r ! p p ﹀ g f n r g A O 弔 d s i s i s -乎 ム。
"%"Hxed((;( f ( " ( ( e e f f ( f(ff=pett・ ' s i -t f t t s p n n i nnnnF ロ s ・ l ・ - 〆 1 pia--lr{(rrr prcrroffppo } f p s p p ・X i -f f f }kcom = buff [OJ; swi tch (kcom) (
case 'M':
sscanf(buff
,
"M%4d,
%4d",
&ixl,
&iyl); ixl = xorg + ixl*
factor ;iyl = yorg + iyl
*
factor ;fprintf(fpp
,
"
M%4d,
%4d¥n",
ixl,
iyl); break ;case 'D':
sscanf(buff
,
"D%4d,
%4d",
&ixl,
&iyll; ixl = xorg + ixl*
factor ;iyl = yorg + iyl
*
factor ;fprintf<fpp
,
"
D%4d,
%4d¥n",
ixl,
iyl); 図7- 1夫 英 松 虎・竹 的 部・陳 和 野 秦 40 spo 1) ; FIPLl6. C 、 J ・2 4 L 、 J h H
t
g
L H-g
・'色 i l 冒h 由 ﹂ V Ah
o
'
O 由 a L 川 c n'
a
芸 4 9 H f ム A U H d 2 d つ 町 * % 2 町 九 Q U 町 布 ' q U 6 L T I P L 刊 h H H ) P ' P D 9 ハ UIi 1 9 ( , P I e p -r i -千 ム P 晶 r i h H P 品 ヂ ム 一 四 + L P ι u f u n f b = ( b d i (. ,
( f ・9(Er--'f ・ 9 f t t f f p t keqnhnk--npfk ・ ・ n k a'au 白 l a T a s a -a βuse--rfTC(etre r'SEpr'stir-Apr b s h f b s l b u f b f E a q u C U 2 1 a a E C c d 8spol) ; " T%2d¥n" , 1987 10:12:54 16 Jan Fri buf f) ; 11 %5",
fclose(fp); fclose(fpp) ; -a ・ ・ ・ ・ ・ ・ ・ 。 。 . . a v -e -QUqu ハ V1i つ 凶 q U 4 必 巨 叫 ︽ b 円 i 良 UQdAV 句i つ 釦 ﹃ UAtRdnb 門 f A 1 4 志 向 。 に J U R U R υ F D F D = υ 声 U 声 U F h d に U に U 戸 b に U に UFbnb に U 図7- 2 GRPLl6 . BAT 1987 TYPE GRPL16 . BAT SET PATH=C:¥MSC¥BIN SET INCLUDE=C:¥MSC¥INCLUDE SET LI B=C:¥MSC¥LIB SET TMP=C:¥ B: CHDIR¥GRPLl6 MSC B:GRPL16,
B:GRPL16,
CON; LINK B:GRPLI6,B:GRPL16; B: GRPLl6 10:13:38 16 Jan Fri 1 : っ ・ 3: 4: 5 : 6 : 7 : 8: 9: 10: GRPLl6. C ***************,永六*******1
*
1
*
1
************************1
19871*********
*
*
1
*
Display of Plotter File1*
Usage grpl161**
ホ*******
*
#include <stdio.h> 10:13:49 16 Jan Fri kp日nm
o c ' K 9 w η 4 ' Y y r iAgio-d &L1A ' ' n u o o a r L q F M n ノ -cipIx
x
f
i f ' u - A 唱b ' ' v d n p 唱 E A ‘ s i n u v d y e -d i f 4 9 C U 9 9 1 [ X E 1 i 1 i n 1 i ・ ' X X 0 1 p i f c f f s * ・ ? し a r p μ oaL 11hHYA f c F main() { i n t for ( ; ; ) (printf("¥n Source File ="); scanf("%s",file);
if((fp = fop己n( f i 1ε"r")) == NULL) (
printf("¥7¥n Missing Source File %s¥n¥n"
, f i 1 e ) ; continue; - ・ E e -m e -. 。 a o -・ 目 -・ -・ -e ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ 1 舟 つ 旬 勺 υjtzυP 口 周 iooqdnv1A 勺' u q u 4 -F U に U 円 /OOGJnυ1i 唱 h 4 ' E A 唱 E 4 苛﹄主唱﹄・晶唱 E A ' E A 唱 E A 司 t A 1 B 晶 n f u n J M
41 【 i kpen
NUL
Ll プログラム開発環境の改善について printf(" Factor =け) ; scanf("%f",
&factor); conx1 = (639.0/3600.0)*
cony1 = <399.0/2iOO.0)*
printf("¥033*¥033= "),
printf("¥033¥OOiinit¥n") ; printf("¥033¥OOiscr官 官n 3,0,0,1¥n lt) , printf("¥033¥00i1'oI1399,
0,
1¥n")printf("¥033¥OOi1'oll 1
,
0,
1¥n'l) ;f 01' ( ; ; ) { i f ( ( f g号ts(buff, 82
,
fp)) == printf("¥7¥7¥7¥7¥7H); scanf("%sけ , buff); factor; facto1'; bl'eak; } kcom = buff[OJ; swi tch (]{com) { case 'M':s s c an f (bu f f , "M%4d , %4d " , & i x 1 , & i y 1 ) ; b1'eak ;
cas色 'D':
sscanf(buff,"D%4d,%4d",&ix2,&iy2); fxl = conxl
*
ixl ;fyl = 399.0 - conyl
*
iyl ; fx2 = conx1*
ix2 ; fy2 = 399.0 - cony1*
iy2 ; printf("¥033¥0071ine川) - - m ψ ・ @ . . . , e ' a a -e ・ e ・ -e e -e , ..•••• 。 . a 図 。 a , . つ ら つ υ4t-bpb ︻ iQuqunU14 つ M つ υ 4 せ R U に U 円 JRUGdnU 咽 i っι つ U4ARU 点 U 円 i つ ﹄ つ M つ ム つ 匂 ワ 匂 つ ︼ ワ E つ 旬 司 J つ dqJ つ U つ U 勺 リ つ υququqdAAAtA 品 144Atィ14&A せ GRPLl6. C 1987 10:14:33 J an 16 Fri p1'intf("%d,%d,%d,%d,%d,%d¥n" ,fxl,fYl,fx2,fY2,kpen,0); ixl = ix2; iyl = iy2 ;break ; case 'J' sscanf(buff
,
"J%ld",
&kpen); kpen = (8 - kpenχ8)χ8 ; break ; default : break ; } fclos色(fp); 48: 49: 50; 51: 52 : 53: 54: 55 : 56: 57: 58: 59: 60: 61 : 6?' 2 )マイプロットII用コマンドの出力されたファイノレ すなわちプロットファイノレからコマンドを読み出し てプロッタ へ出力するプログラム。プロッター上 のどの位置から書き始めるかを指定できる。又,尺 度を指定し縮小して書いたり拡大して書いたりする 事ができる。 MS-FORTRANとマクロアセンフラ で書かれている。 3 )プロットファイノレからコマンドを呼び出してCRT ディスプレー上に図形を出力するプログラム。尺度 を指定する事ができる。 MS-FORTRANとマクロ アセンフラを使って書かれている。 今回PC-9801に変更するに当って2)のプログラムと 図8- 2 し そ の 概 要 を 報 告 し た 。 こ の 時 に は 富 士 通 製 の8ヒッ トパソコン, FM-7と グ ラ フ テ ッ ク 社 の マ イ プ ロ ッ ト ジ ュニアを有効に使うためにカノレコンフc仕様のプロッタ ノレーチンをFORTRAN-80で作っt::.oその後,同じ考え でMULTIl6とマイプロット IIのためにカノレコンブ仕 様のプロッターノレーチンをMS-FORTRANで作ってこ れまで使用してきた。これは次のような3つのプログラ ムから成っている。1 )PLOT, SYMBOL, NUMBERなどのノレーチンが
呼ばれるとそれに応じたマイフロットII用のコマン
ドを, PLOTSで指定されたファイノレに出力するサ ブルーチン群。 MS→FORTRANで書かれている。
夫 英 松 虎・竹 的 郎・陳 平 日 野 秦 42 "11'ι"
・ ・・
・
F・
'1"・
・
・
・
‘
・
・
ー
"
・
"
,
・
.11・
e・
・
-
・ ・・
J-1・
a・
.A,・
・
・
・
a・
・
・
I,
明ベ細川
司
,
・
E・
・
IICTlI・
,
u・
111,
orFlLI'I'・
-
・
』
・
a・
L・
a・
・
a・ ・
・
・
・
・
・
・
・
・ ・・
・
・
・
・
・
Ir
市. 守 ! ﹃ ; 4 B A -1 -a v•
•
•
•
•
•
•
.
,
'
•
•
•
•
•
•
u
a
l
.
,
.
'."11,&'
.
"
"
"
1
1
1
1
・
-
・
・
.
.
.
,
・
.
.
.
"
.
・
a・ ・・
・
・
・
・
・
8・ ・・
・
・
・
・
・
a宇『
州
. I H.
,
,
.
,
掴
11&・
.
"""111・
-...1-‘
h・.&JIII • • • • I • • • I • • • • • • • • I,
.
I~i岬
4
1
和
州
.
.-
-
-
-
/
¥
_
j
ザけ可。司、叫ト咽出獄州坤叶開局)山片嚇打、urJパ 必h Cλコ 三孟;;:~ニ ーモ Z コ ーョ=ト d 罵宅~ -~ -=-:._ー--=二=二 7 ι~ t
一一
1 τ 壬ー 二五 ι ーで室主ご .J J __"....ζ 一長 F ミ 3ε 一三事 モ三函盛 -ヨ酔峰 三主産二三号酔 Z世二三云 1fE= -=::::;ご---=-:;::-2 三、 二三 L 9Eft-¥Jla 仲4Fイ
ょ三三[
回目。44 秦 野 和 郎 ー 陳 3 )のプログラムを「言語CJで書いた。 1)のプログ ラムはMS-FORTRANのみで、書かれているので無修正 で動いた。従って今回は手を加える必要はなかった。 2 )のプロクラムを図7に示す。使用しているマイプロ ットIIはセントロニクスインタ フェース付きであるか らPRNへ出力すればよい。プロットのファイノレからコ マンドを読み出してプロッタへ出力するのであるが,位 置,尺度に関連するコマンドは引数の大きさを計算して 計算された値を出力する(Mコマンド, Dコマンド)。文 字の高さを指定するコマント (Sコマンド)も高さを変 えて出力する。 3)のプログラムすなわちプロットファイノレをCRT ディスプレーへ出力するプログラムを図8に示す。この プ ロ グ ラ ム で は カ ノ プス社のEGR98を 使 用 し て い る。 grpll6を走らせるためにはあらかじめEGR98を実 行しておかなければならない。 2 ) の プ ロ グ ラ ム す な わ ちfipll6で 書 い た 例 を 図9 に, 3)のプログラムすなわちgrpll6でCRTディスプ レー上に書いて, コピー機能によりプリンタ ヘコピー した例を図10に示す。 5.む す び パソコンは優れたプログラム開発環境を提供してくれ る。標準的な入出力装置についてはOSにほぼ十分な機 的 虎 ・ 竹 松 英 夫 能が含まれている。従ってその範間内でも有用であるが, 本稿て、述べたような機能を追加する事で更に使い易くな る。ソ←スファイノレの印刷のような一見つまらないよう に思われる事でも本稿で紹介したようなユティりティプ ログラムを{乍ると非常に便利である。 応用によっては十分な機能が備わっていない事はパソ コンの短所であるが,逆に利用者の負担と努力によって, よりよい環境を作り出してゆける事はパソコンの長所で あると思う。今後種々な周辺装置が開発され我々利用者 に提供されると思われる。そのような新しい周辺装置を 有効に生かすには利用者側の努力が不可欠である。 本稿ではいくつかのユティリティプログラムを紹介し たが筆者らもこれだけて、は十分な環境と思っていない。 今後もこれらを改良し又,種々なプログラムを開発して ゆく予定である。 参考文献 1 )森口繁一 JISFORTRAN入門[上], [下]第3版, 東京大学出版会,東京, 1984. 2 )秦野和郎@葉建勲四竹松英夫 FlVI-7用プロッターノレ ーチンの作製,愛知工業大学研究報告No.l9(1984) pp.51-59 ( 受 理 昭 和62年1月25日〕