• 検索結果がありません。

FOR I=1 TO I .MAX

K=VAL("&H"+MIO$(PAT$(VPAT),3*1,2» 'piece of pat.

TILE$=TILE$'+CH'R$(K AND BLU)+CHR$(K AND RED)

+CHR$(K AND GRN) 'select colors NEXT

"- - draw patterns

PAINT (WX,WV-T-l),O,C 'top color IF' T<2 THEN RETURN

PAINT STEP(-2, O),COL,C 'side color PAINT (WX+2,WY-l),TILES,C 'front ti Ie RETURN

'---<#7-3~ Height Scale 2

----*H.SCALE2

FOR K=l TO 10 : SC=I: IF K MOO 5 THEN ELSE SC=5 POINT (XO+SX,YO+SY-K*lO)

- 30

-4210LINE‐STEP(SCX,O),SC,,&H8888 4220LlNE‐STEP(-SX,-sY),SC,,&HAAAA 4230NEXT

4240RETURN

4250’--<#7-4>Tallbar‐‐‐‐---‐‐

4260*TALL

4270、=T¥100:R=TN0DlOO

4280FORT1=lTOD,drawlongbarsinarow 4290T=100:COL=2:GOSU8*BAR・SET’

4300WX=VX+SMW=W+SH,towardsfore8round 4310NEXT

4320T=R:COL=2:GOSU8*BAR・SET,draHresiduaIbar 4330RETURN

4340’

4350,********Tailof3D8arDraHin8***********

4360,

10#8ファンクション・キー設定*INlTFKEY(リスト8,4370-5460)

諸設定変更のSubroutine群をFunctionkeyにも割り当てる。

BASICでのFunctionkeyによる割り込みはく1行分の処理が終了すること

にチェックされ、そのキーに割り当てられたRoutineにとんでその機能が実行 されるので、頻緊にあるいは不時に使用される機能群を割り付ければ、プログ

ラムを簡潔にして見通しをよくすると同時に決りきった入力を減らすなど操作 性と融通性も向上できる性質を持っていろ。本件のように設定事項が多くその 変更機会も多い場合には、きわめて高い効果をあげうる。途中の段階から抜け 出て最初から設定しなおすことも前に戻ることもできるなど分析上の使い勝手

も大幅に向上する。本プログラムでは、この機能を広く活用している。

〔4410-4480〕*INITFKEY本体各キーに割り当てた機能の名称を表示し

た後、ONKEYGOSUB.、で各機能のSubroutine名を指定し〔4460〕、この 割り込みを有効にして、キー指定変更'のflagKEY・CHGKをたてろ〔4460〕。

またSTOPkeyで、既定の機能に戻すSubroutine*FKRESET〔#8-0〕に

飛ぶようにしておく(これはf・10で復旧する)。

31

10.1#8-of・KEYリセット*FK・RESET(4500-4530)

*KEYCHG〔#8-10〕を呼んでFunctionkeyへの機能の割り付けを本来の ものに戻し、STOPkeytrapも外して、終了処理をしやすくする。

10.2#8-1簡易説明文*HELP・MES〔キー:f・1表示,Help,〕

〔4550-4700〕Helpというにはあまりに簡単であるが、X、Y、Zの項目数、

棒の正面幅、高さスケールの現在の値を表示し変更時の参考に供する〔#8-1-

1〕・確認するまで時間を稼ぎ〔#8-1-2〕、確認後はもう一度表示して、復 帰する。

10.3#8-2棒幅*BARWIDTH〔同f・2BarWid'〕

〔4710-4800〕棒の正面幅をX軸の成分間隔INTERVALの何分の1とするか を決定する(既定値は3分の1)。CRキーのみをうてば、それまでの値が残 る(この前数値再利用は以下多くの機能においても用いられていろ)。

10.4#8-3棒高さ*BARHIGHT〔同f・3BarHt,〕

〔4810-4890〕棒の高さの尺度を変更する。最長の表示棒高さに設定された 100dotsにデータ数値単位のどれだけを割り当てるかを決定する(既定値は 200dots)。

10.5#8-4棒間隔*INTRVL〔同f・4,Intrvl,〕

〔4900-5010〕画面幅を最大限に使う値を自動的に行う,AUTO'か、使用者の 指定値かを選択し、後者のときはその値をdot数で入力する。

10.6#8-5棒色彩*BARCOL〔同f・5,BarCol,〕

〔5020-5160〕棒の色は大きい順に,赤黄緑水青,としてあるが、それらの境 界値は、一応#1で既定値を与えてあるが、対象や分析法などで変更したいこ

とがある。それを可能にするのがこのRoutineである。

10.7#8-6項目順〔同f・6,ItmOdr,〕

〔5170-5180〕*POSLSW〔#3,既出〕を呼んで、項目すなわち変数の軸へ の割り当てを変更する。MAIN部においてもcallされており、種々の局面でこ の視点の大転換ができることになる。

10.8#8-7行消去*CLRLINEx〔同f・7℃lrLnl,〕

〔5190-5310〕表示画面x行目(x=O、1,2)のCharacter文字を消去し、

カーソルをその行頭に戻す。これは、グラフを見ながらさまざまな設定を変更

32

することが多く、画面上端の3行を表示や入力などさまざまな作業に繰り返し 使用することにしたため、これら行の清掃を行いただちにつぎの表示を行う必 要がでたことによる。これにより、操作手順が簡略化され、操作性が向上した。

10.9#8-8テキスト画面消去*CLSR〔同f・8,cls,〕

〔5320-5340〕テキスト画面を消去する'CLS,命令が実行されろ。

10.10#8-9グラフィック画面消去*CLS2R〔同f・9,cls2,〕

〔5350-5370〕グラフィック画面を消去する,CLS2,命令が実行される。上記 とともに単純な機能であるがプログラムを中断せずに任意の時点でこれらの操 作を行えるように割り当ててある。

10.11#8-10ファンクション・キー設定変更*KEYCHG〔同f・10

,KeyChg,〕

〔5380-5460〕このキーがおされるたびに、通常のFunctionkey〔5400に格 納〕の機能と本プログラムの上に述べてきた機能とが切りかわる。そのチェッ

クにflag変数KEYCHGKが使われていろ。

なお既に指摘したように、上記で割り当てられたSubroutineはFunction

key専用ではなく、プログラム中からも呼び出されるものが多い。使用頻度の

高いものが割り当てられているのだから当然といえよう。

リスト8

,-,------:-_=--=--=二一一一一一一一一一一ニーーーー-=-D-------

-----Q■-------------------------------------

,〈〈#8〉〉 FunctionKeys

l---==_一一一=-------_ニーニーニーーニ一一一一一一一一一一ニーーーー------- ̄-=二一一一一一一一一ロー■_~~ニー_----= ̄ ̄ ̄ ̄-------- ̄---------------

4370 4380 4390 4400 4410 4420

*|NIT・FKEY

DATAHelp,BarVid,8arHt,lntrvI,8arCo1,

ItmOdnC1rLnl,cls,cls2,KeyChg RESTORE*|NIT・FKEY

FORl=lTO10:READO$:KEY1,0$:NEXT

ONKEYGOSU8*HELPJvlES,*BAR・V1DTH,*BAR・HEIGHT,*INTRVL,

4430 4440 4450

33

'---<#8-0>---*F'K.RESET

GOSUB *KEY.CHG: KEY OFF: STOP OFF: FK=l RETURN

., ---<#8-1>- -~-- -- - --- ---

----*HELP.MES GOSUB *OSP.MES GOSUB *HIT.F'K

GOSUB *OSP.MES: F'K=l RETURN

'---<#8-1-1>---*OSP .MES

GOSUB *CLR.LINEO

PRINT "X:"NX;" Y:"NV;" Z«="NZO;"):"NZ;

" Bar-Width="F'W;" -Height="HS"deg. at full-height"

RETURN

'---<#8-1-2>---*HIT.FK GOSUB *CLR.LINEI

PRINT "Hit rune.Key to change conditions,";

"and [R] to retu rn to prog. ";

INPUT TMP$: IF TMP$<>"R" THEN *H IT. F'K GOSUB *CLR.LINEl: F'K=l

RETURN

'---<#8-2>---*BAR.WIOTH

GOSUB *CLR.LINEO

PRINT "Input Bar Width scale. ";

"(interval X)I N fat=l -3- 1=thin ";

PRINT "Now N=":B.WIO.O;: B.WIO=ASC(INPUT$(1~)-48

IF' B.W10=- 35 THEN B. WI D=B. W1·0 ..0: GOTO 4780 'CR?

IF B.WI0<1 OR B. WI0>8 THEN *BAR. WIDTH '.too fatfth i n B.WID.O=B.WIO: GOSUB *CLR.LINEO

FW=INT(XPfB.WIO): FK=1 RETURN

4680 4690 4700 4710 4720 4730 4740 4750 4760 4770 4780 4790 4800

tBAR.COL.*POSI.SW ,*CLR.LINEl,*CLS.R,*CLS2.R~*KEY_CHG

4460 KEY ON: KEY.CHG.K=l

4470 ON STOP GOSUB *FK.RESET: STOP ON 4480 RETURN '

4490 ' 4500 4510 4520 4530 4540 4550 4560 4570 4580 4590 4600 4610 4620 4630 4640 4650 4660 4670

- 34

-4810 4820 4830 4840 4850 4860 4870 4880 4890 4900 4910 4920 4930 4940 4950 4960 4970 4980 4990 5000 5010 5020 5030 5040 5050 5060 5070

>##";

5080 5090 5100 5110 5120 5130 5140 5150

'---<#8-3>---*BAR.HEIGHT GOSUB *CLR.LINEO

PRINT "Input Bar Height Scale ";

"(degrees at fu 11- he ight; def I. =200 ) ";

PRINT "Now HS=";HS.O;: INPUT HS

IF HS THEN ELSE HS=HS.O

IF HS<l THEN *SAR.HEIGHT ELSE HS~O=HS

GOSUB *CLR.LINEO: FK~l

RETURN

, - - - <#.8 -4> - - - ..

*INTRVL

GOSUB *CLR.LINEO

PR INT "1ntervaI of X: now=";XP:"(max": XP.D;") ";

"H itA to use <auto>, C~ to redo, C to change";' INPUT" ",OS

IF OS="A" THEN XP=XP.O IF' 0$="" THEN RETURN IF' O$="C" THEN ELSE *INTRVL GOSUB *CLR.LINEO:

PRINT "Input intervals(dots) within ";XP.O;

Q=VAL(INPUT$(l»: IF' 0<3 OR Q~XP.~ THEN *INTRVL PRINT 0: XP=Q: FK=l

RETURN

'---<#8-5>---~-- ..

-~--*BAR. COL'

GOSUB *CLR.LINEO

PRINT "Set border deg rees(dots) of. da ta for Bar co 19r."

GOSUB *CLR.LINEI ' , I

PRINT USING "Color>init:~>## Jl>## ~>##. 71<>##.. W WB(1),WB(2),WB(3),WB(4),WB(5)

FOR 1=1 TO 5

LOCATE 1*8+9,1: INPUT "",AS: IF A$="" THEN 5120 IF VAL(A$)=O THEN 5090

WB(I)=VAL(A$) NEXT

LOCATE 55,1: PRINT "OK ?";

IF FNYES THEN ELSE 5060

GOSUB *CLR.LINEl: GOSUB *CLR.LINEO: FK=l

- 35

-5160 5170 5180 5190 5200 5210 5220 5230 5240 5250 5260 5270 5280 5290 5300 5310 5320 5330 5340 5350 5360 5370 5380 5390 5400 5410 5420 5430 5440 5450 5460 5470 '

RETURN

'---<#8-6>---, =

#3 [Switch Positions of Items]

'---<#8-7>---'--<#8-7:.0>

*CLR.LINEO

LOCATE 0,0: PRINT STRING$(79," "): LOCATE 0,0: FK=l RETURN

'--<#8-7-1>

*CLR.LINEI

LOCATE 0,1: PRINT STRING$(79," "): LOCATE 0,1: FK=l RETURN

'--<#8-7-2>

*CLR.LINE2

LOCATE 0,2: PRINT STRING$(79," "): LOCATE 0,2: FK::;I RETURN

'---<#8-8>---*CLS.R

CLS : FK=I: RETURN

'---<#8-9>---*CLS2.R

CLS 2: FK=l: RETURN

'---<#8-10>---*KEV.CHG

DATA "load ",34,auto,32,go to,32,1 ist,32,"run ",13,

"save ",34,key,32,print,32,"edit .",13,cont,13 KEV.CHG.K=-KEY.CHG.K

IF KEV.CHG.K <0 THEN ELSE *INIT.rKEY RESTORE *KEV.CHG

fOR I=i TO 10: READ 0$,0: KEY I,O$+CH~$(Q): NEXT fK=1

RETURN

- 36

-11#9初期化作業(リスト9,5480-5680)

冒頭、タイトル表示と棒模様の設定を行う。

11.1#9-1タイトル表示*TITLEDSP

〔5520-5580〕プログラムの表題となっていろ#Oの1040行から4行分を画面 にも、タイトルとしてそのまま流用し、合理化していろ。

11.2#9-2棒模様データ*TILESTR

〔5590-5680〕グラフの棒の所属成分(ここではY軸のそれ)を識別するため に模様(タイル・パターン)を正側面に描くために、6種類のパターン(図

表2)を用意しそれらを指定するSTmNGを配列PAT$()に転送しておく。

図表2 T11gPatterns

:ZItrlrl員トに,、1 「・0.I ビ’

凝讓懇llll鰯薑

リスト9

ワーーーーーロ-------------------------------------=ニーーーニニニ ̄ ̄▲ ̄ ̄ ̄二---℃-.,-----------.-.----...----...---..■-----

,〈〈#9〉〉 Initializingsub‐routines

l-,-=-----.---__=-.------------------,-----------------ニニーニーー6-.===--~------.------.--...■-----口.■D----..■----------

5480 5490 5500 5510 5520 5530 5540 5550 5560 5570 5580 5590 5600 5610 5620 5630 5640

,‐‐‐<#9‐1〉displayTitle‐--

*TlTLBDSP

CLS3:L0CATEO,0:RESTORE*D3D FORI=lTO4

READDlSP$:PRlNTSPC(12);、ISP$

NEXT RETURN

’一一く#9-2〉defineTiIestrings

*TlLE・STR,TilePatternlist PAT$(O)=''4#11+22+44+88,,

PAT$(1)=''4#22+22+22+FF,,

PAT$(2)二''4#88+44+22+11,,

PAT$(3)=''1#55,,’2A',

37

,grill

'--6patterns

,PAT$(4)=''3#88+02+20”

PAT$(4)二''8#81+42+24+18+18+24+42+81,,

PAT$(5)二''3#00+00+FF,,

RETURN 5650

5660 5670 5680 5690,

12#10原データ入力*DATAIN(リスト10,5700-6040)

MAINroutineの最初のSUbroutineで、原データをfileから読み込み、原 データ配列に転送する作業を行う。(注)

〔5740-5880〕3次元データfileのあるdrive番号を入力させ、確認後*NA MEINに飛んでそのfile名を入力させる。

12.1#10-1データ格納*TRANSARRAY

〔5890-6040〕原データfileをOPENし、項目名等が記されているHeader部

をそれぞれの配列に読み込む。項目番号を示すN()、英字略号のW1$()、日本

語項目名のW2$()、最終項目番号のS()が、3つの項目ごとに記入されてい る。そこで得た各項目のサイズsoに合計用の欄を1つ加えた原データ格納用 の3次元配列,(X,Y,Z)を宣言し〔5960〕、file中での順序にしたがって原 データを転送する。

リスト10

,---‐----‐=--二------ミニーニーーー------------------------------------------------------------- ̄-----

,〈〈’110〉〉 GetData

l---==‐=----=----------=------ニーーーーニーーーーーーーーーニーーーー

5700 5710 5720 5730

5740 *DATA、1N

(注)元のversionには、RAMDiskに原データを転送するRoutineがあっ たが、プログラム完成後は原データを一旦配列にいれてしまえばfileから読み 込む必要がなくなるため、ここでは省いた。

38

R0$=''8,,:PRINT

PRlNT,,InputDriveNo・ofDatafile[B(defl)-E].,,;

INPUTA$

PRlNT’’0K?[Yy,CR/],,;

IFFNYESTHENELSE*DATA・IN lFA$=,,,,THEN*NANE・IN

A二lNSTR(,,BbCcDdEe,,,A$):lFATHENELSE*DATA.lN RD$=CHR$(&M2+((A-1)\2))

*NAME、1N’:QQ$=''101870,':GOTO5760,######

PRlNT:INPUT,,lnputthefile,sname.,,;Q0$

PRINT’’0K?,,;

lFFNYESTHENELSE*DATA・lN FlLE$=R0$+”:”+q0$

'--<#10-1〉・TransferDatatoArray

*TRANS・ARRAY

PRINT:PRlNT,,Nowtransferrin8datatoArrayD(X,V,Z),,

OPENFlLE$FOR1NPUTAS#1 FORJ=1TO3

INPUT#1,N(J),V1$(」),M2$(J),S(J)

NEXT

DIND(S(1)+1,s(2)+1,s(3)+1),

NX=S(1)+1:NY二s(2)+1:NZ二s(3)+1

FORZ=OTONZ FORV=OTONV

FORX=OTONX INPUT#1,,(X,Y,Z)

NEXT:NEXT:NEXT CLOSE#1:CLS RETURN

5750 5760 5770 5780 5790 5800 5810 5820 5830 5840 5850 5860 5870 5880 5890 5900 5910 5920 5930 5940 5950 5960 5970 5980 5990 6000 6010 6020 6030 6040 6050

13#11終端処理*ENDORREDO(リスト11,6060-6190)

終了か再実行かを指定する。グラフを描き終ると、図表8に見るように

上端行に、やめるか(E)、もう一度見るか(RorReturn)をきいてくる。

39

Eの場合は、*TOEXTへ飛んで、Functionkeyを元に戻し、STOPkey のトラップを外して、MAINroutineの*EXITへ戻って終了する。

RまたはReturnの場合は、MAINroutineの*REDOに戻って、各軸の表 示成分の選択から、作業を繰り返すことになる。

なおこのとき、Functionkeyを押すことで、それらに割り付けられた諸パラ

メータ変更機能を使うことができる。むろん、割り込みはいつでも行末で実行 できるのだが、項目の順序を取り替えろ(f゜6)など大きな変更は、一段落つ いたこの時点で行うのが、使用者の思考の整理のためにも好ましいといえる。

リスト11

,----=‐==---=ニーニーーーニーーニニ-.---.-.=_=------主=---_ニーーーニーー--------------------------------------------------

,〈〈#11〉〉 EndingOperation

l---ニーニー-------圭一=‐=---->--ニーーーー__--------二一一----==_ニーーーーーニ

6060 6070 6080 6090 6100 6110 6120 6130 6140 6150 6160 6170 6180 6190 6200 6210 6220

*ENUOR・REDO GOSU8*CLRLlNEO

PRlNT,,Push[E]toExit,[CRorR]toRedo,,;

INPUTl〕$:lPlNSTR(,,Rrス,,+CHR$(13),0$)THEN*T0.REDO IFlNSTR(,,Eeイ''’0$)THEN*T0.EXT

GOTO*END・OR・REDO,elseinputa8ain

*TOEXT,end

CLS2:GOSUB*PK・RESET:STOPOFP:RETURN*EX1T

*TqREDO,redo

GOSUB*CLR・LlNEO:RETURN*RED0

,***********TailofPro8ram *************

40

Ⅲ実行例

つぎに、このプログラムを実際に動かした例をまとめて示そう。

1初期画面(図表3)

プログラムをたちあげろと、図の上4行のタイトルがまず表示され、ついで 処理対象のデータfileが入っているDrive番号をきいてくる。INPUT$()関数 を使っているため、入力は表示されないが、入力直後なので忘れる危険は少な

い。不安があれば、確認の際に,Y,とRETURNキーを除くキーを押して入ノルな

おせばよい。

’0K'ならつぎにそのfile名をきいてくる。ここでは、冒頭で述べたアンケート分

析で作成したfileの一つ、101870,(アンケート項目番号10,118,170クロス集計 の意)を選択している。確認の後、同fileの読み込みと原データ配列D(X,Y,Z)

への転送が行われつつあることが表示されろ。それは通常数秒で終了し、この

画面は消去され、つぎに移行する。

図表3初期画面

仁・●*中中◆し中中中や+*中中◆+十十npOp中◆◇・仁1ケCOO中か中中中中中中中中中中中中中中中中*

3-DBarGraphDi=play゛

・I:bpyright(C)1981〕1)yR、FII,le噸

4・・し巧。*中中9●*中中**中**中中***木曾+・bt100中本**中中*十十*1*・占中****中中of*

Illpl」t[lrive卜10.ofDatafile[B<<lefl)-E].?

〔1k?【Yy,CR,'l

In[utthefilEP,sname.?lQlj917Q 11,1.jtrallsferriI1q(:IatatoR「rau[l(X、.I「'.Z)l】《?

2諸事項設定

2.1項目変更(図表4)

3つの項目の軸・項への既定の割り当てが,fされ、割り当て変更の意思をた ずねる。変更するときは℃,を、それ以外は他のキーを押す。ここではRETURN キーで変j更せずに進む。この作業は画面をふくめ、fo6に割り当てプこsub

41

関連したドキュメント