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

生物材料の観察に適した原子間力顕微鏡の開発

N/A
N/A
Protected

Academic year: 2021

シェア "生物材料の観察に適した原子間力顕微鏡の開発"

Copied!
211
0
0

読み込み中.... (全文を見る)

全文

(1)

生物材料の観察に適した原子間力顕微鏡の開発

著者 安藤 敏夫

著者別表示 Ando Toshio

雑誌名 平成5(1993)年度 科学研究費補助金 一般研究(B)  研究成果報告書

1991‑1993

ページ 63p.

発行年 1995‑01‑01

URL http://hdl.handle.net/2297/46866

Creative Commons : 表示 ‑ 非営利 ‑ 改変禁止 http://creativecommons.org/licenses/by‑nc‑nd/3.0/deed.ja

(2)
(3)
(4)

lIll・1

付 録 B

スファイル)

(プログラムソ

:

1

(5)

付録Bプログラムソースフアイル

B.1MenuProgramFiles

B.2HeaderProgramFiles B・SSensorProgralnFiles

B.4MotorPrOgramFiles B.5ScanProgramFiles B.611nageProgramFiles B.7EditProgramFiles B.8CommonProgramFiles

(6)

1

プログラムファイル

(B。1 M e n u PrOgramFiles)

i

(7)
(8)
(9)
(10)

if(!̲̲̲DiamondKey){

.KeyChange=1;

̲̲̲pushskey();

intgetftime(char*fname,unsigned*date,unsigned*time)

FILE*fp;

inthd;

if((fp=fopen(fname,''r''))==NULL) return(1);

hd=fileno(fp);

̲dos̲getftime(hd,date,time);

fcIose(fp);

return(O);

intsetftime(char*fname,unsigneddate,unsignedtime)

FILE*fp;

inthd;

if((fp=fopen(fname,''a''))=NULL) return(1);

hd=fileno(fp);

dos̲setftime(hd,date,time);

fclose(fp);

return(O);

/*‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑.‑‑‑‑‑‑‑‑‑‑‑.‑‑‑‑.‑‑‑‑‑.‑‑‑.‑‑‑‑‑‑‑‑‑.‑‑‑‑‑‑‑‑‑‑‑‑.‑‑‑‑‑.‑‑‑‑.‑‑‑‑‑+

関 数 名 引 数

返 値 コ メ ン ト

DIR int

intget̲file̲name(char*file̲path,char*name,char*slct̲name)

char char char

*file̲path:検索するファイルのパス

*name: 検索するファイルの名前(ワイルドカード)

*slctname:選択されたファイルのフルパス名 選 択 し た フ ァ イ ル の 数 何 も 選 択 し な か っ た 場 合 O

引数で指定されたパスから、ファイルを選択する。

buf[1];

flag;

strcat(file̲path,''*.*");

flag=dir̲select(buf,file̲path,name,slct̲name,1,0,

POPUP1̲X1,4,POPUP1̲Yl,POPUPl̲Y2);

strcat(sIct̲name,buf[O].name);

return(flag);

(11)

関 数 名 引数

FILE*open̲file(FILE**f̲ptr,char*search̲path,char*wild̲name) オープンするファイルを示すポインタ

検 索 す る フ ァ イ ル の パ ス

検索するファイルの名前(ワイルFカード)

FILE char char

**f̲ptr:

*search̲path:

*wildname:

返 値 コ メ ン ト

オーフ。ンしたファイルのポインタ何も選択しなかった場合NULL 引 数 で 指 定 さ れ た パ ス か ら 、 引 数 で 指 定 さ れ た 名 前 の フ ァ イ ル (ワイルドカードを含む)をオープンする。

+‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一*/

FILE*open̲file(FILE**f̲ptr,char*fname)

if(getftime(fname,&fdate,&ftime)==1){

/*ファイルをオープンできない*/

charmsg[200];

strcpy(msg,fname);

strcat(msg,''¥nがオープンできません¥n'');

errer̲msg(msg);

putchar('¥a');

return(NULL);

*f̲ptr=fopen(fname,''r+b");

return(*f̲ptr);

関数名FILE*open̲temp̲file(FILE*fp,char*prmfile̲name,intpart)

引 数 フ ァ イ ル ポ イ ン タ ー

A F M の パ ラ メ ー タ フ ァ イ ル 名 パ ラ メ ー タ フ ァ イ ル 内 の パ ー ト FILE*fp:

char*prmfile̲name:

intpart:

選 択 し た フ ァ イ ル を 指 す フ ァ イ ル ポ イ ン タ ー NULL:何も選択しなかった、エラー

返 値

ス キ ャ ン の デ ー タ フ ァ イ ル を パ ラ メ ー タ フ ァ イ ル で 指 定 さ れ た 、 パスから選択すし、指定された名前でラムディスクにコピーし、

そのファイルをオープンし、ファイルポインタを返す。

コ メ ン ト

γノ

一︑ノ8t一r一a一p

−0t−Ⅱ一・一︐一e一Ⅷ一a一︑一一一e−l−・一ハーー肌一r・︐一pe−*肌

一rn−a一︲Ⅱe一Cl一︐.l一pか1.1−ハー*︲t一*︐l可﹄u一両姑︵US一−︺4△e−T1rLr一両I1J︐一/1︿0肌一eqUr−lrLp一・1r一一ハーef4−一︲tO一pe一一ⅢⅢr一eae一︲Ir︲0−一aⅢ一npu

一e︑

一pr−0a→し一*hnC・一P︺一vL−I+nrfi

number̲of̲prm=read̲prm̲file(prmfile̲name,parameter,part);

get̲file̲name(parameter[O+number̲of̲prm],''*.d*'',file̲name);

/*スキャンデータファイルのデフォルトの拡張子*.dat*/

result=̲spawnl(̲P̲WAIT,''a:¥¥afm¥¥afm̲menu¥¥image¥¥movefile・bat",

"a:¥¥afm¥¥afm̲menu¥¥image¥¥movefile.bat'',

(12)

file̲name,parameter[9+number̲of̲prm], parameter[10+number̲of̲prm],NULL);

/*ラムデイスクにファイルをコピーするバッチファイルを立ち上げる*/

strcat(parameter[9+number̲of̲prm],parameter[10+number̲of̲prm]);

if((fp=fopen(parameter[9+number̲of̲prm],''rb"))=NULL){

/*テンポラリーファイルをオープンできない*/

charmsg[200];

strcpy(msg,parameter[9+number̲of̲prm]);

strcat(msg,''¥nがオーフ。ンできません¥n'');

errer̲msg(msg);

putchar('¥a');

return(NULL);

return(fp);

関 数 名 引 数

コ メ ン ト

voiddel̲temp(char*prmfile̲name,intpart) char*prmfile̲name:AFMのパラメータファイル名

i n t p a r t : パ ラ メ ー タ フ ァ イ ル 内 の パ ー ト パ ラ メ ー タ フ ァ イ ル で 指 定 さ れ た 名 前 の ラ ム デ ィ ス ク を 消 去 す る バ ッ チ フ ァ イ ル を 起 動 す る 。

+‑‑‑‑一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一*/

voiddel̲temp(char*prmfile̲name,intpart)

charparameter[30][40];

intnumber̲of̲prm,result;

number̲of̲prm=read̲prm̲file(prmfile̲name,parameter,part);

strcat(parameter[9+number̲of̲prm],parameter[10+number̲of̲prm]);

result=̲spawnl(̲P̲WAIT,''a:¥¥afm¥¥afm̲menu¥¥image¥¥del̲temp.bat", ''a:¥¥afm¥¥afm̲menu¥¥image¥¥del̲temp.bat",

parameter[9+number̲of̲prm],NULL);

/ * テ ン ポ ラ リ フ ァ イ ル を 削 除 す る バ ッ チ フ ァ イ ル を 立 ち 上 げ る * /

/

....................................................

終 わ り

..................

*

(13)

+llllll+

︾ン肌鮒一

・の一Uそ一

Nと一

一E義一

一C一M一帷一一●一一5−一睡一剛ウーー印一A一一一川一妬叩一

鮒剛一︐

朧A一h・

︐h

うぅclhhbb

環−︐..it一htyly尚ノ・reSeOCkbkユ一︒y士yryTYt−dbbbb一一一口↑Ⅱし●90凸●GIB●1Ⅱ凸●︒ⅡJSllll︐メ一くくくくくeeeeeF|ddddduuuuuA|lllll

︵0︶ハⅡ︶ハⅡ︶ハ︲︶︵日︶︽叩︵叩皿︑叩n叩一両叩出

塾︾︽.一一〃″″″●︒Ⅱ凸●aⅡ凸●■Ⅱ且OQ1A●00a

〃″″グ︲や00ⅡⅡ0.1日100IHI11110110−80000︸0.︾︽で叩や恥や叩刷や妙叩鈴川や叩叩寺叩守叩岬一m冬Ⅲ

#include''popup.h''

externinthorizonal̲select(int*,int,int,int,int,int,unsigned,unsigned);

+十

一角ソーーユ一

一一一一一メー

*一〃ノ+十

*

MenuDef(Help,''ヘルプ'') {8100,''1:バージョ

{8200, 2:項目別 MenuEnd;

/*−−ヘルプ−−*/

NULL}, NULL},

'9

MenuDef(Kakutyou,''拡張機能'') {7100,''l:摩擦力'',NULL}, {7200,''2:力測定'',NULL}, MenuEnd;

/*−−拡張機能一一*/

MenuDef(Hensuu,"変数設定'')

{6100,''l: 参 照

{6200,''2: 変 更

{6300,''3:パラメータファイル"' MenuEnd;

/*−−変数設定−−*/

NULL}, NULL}, NULL},

/*−−終了‑‑*/

NULL}, NULL}, MenuDef(Syuuryou, 終了")

{2200, ''l:ウイズドロー D

{5200, 2 : ,終 了 MenuEnd;

/*−−色‑‑*/

NULL}, NULL}, MenuDef(Zahyou,''座標")

{4141,''l:広さ表示'',

{4142,''2:範囲表示", MenuEnd;

MenuDef(Houhou,"方法'')/*‑‑方法‑‑*/

{4110,"l:ワイヤーフレーム",NULL}, {4120,"2:クイックペイント'',NULL}, {4130,''3:シェーデイング'',NULL}, {4140,''4:トツプビユー '',Zahyou},

MenuEnd;

(14)
(15)

{2200, {2300, {2400, {2500, MenuEnd;

"2:ウイズドロー ,

"3:フォースカーブ",

" 4 : ジ ョ グ

" 5 : 一 時 退 瀞 ,

NULL}, NULL}, Jog}, NULL},

/*子メニューはジョグ(Jog)*/

MenuDef(Senser,''センサー'') {llOO,''l:センサー'',NULL},

/*−−センサー−−*/

MenuEnd;

+十十

一吟卜一一一一一コ一

*一一〃ノ*〃ノ+十*〃ノ

関数名 引 数

intparent̲menu̲sct(int*selected,intmenu̲max) 現 在 選 択 さ れ て い る メ ニ ュ ウ の 番 号 選 択 で き る メ ニ ュ ウ の 個 数

*selected:

menumax:

返 り 値 C R , E S C , D O W N

コ メ ン ト メ ニ ュ ウ バ ー を 表 示 し 、 選 択 す る 関 数 を 呼 ぶ 。

+‑‑‑‑‑‑.‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑.‑‑‑‑‑‑.‑‑‑‑‑‑‑.‑‑‑‑.‑‑一一一一一一一一一一一一一一一一一一・‑‑.‑‑*/

intparent̲menu̲sct(int*selected,intmenu̲max)

intimput̲key̲no;

disp(MENU̲Xl+MENU̲DX*O,MENU̲Y,MENU̲COLOR,''センサー");

disp(MENU̲Xl+MENU̲DX*l,MENU̲Y,MENU̲COLOR,''モーター'');

disp(MENU̲Xl+MENU̲DX*2,MENU̲Y,MENU̲COLOR,''スキャン'');

disp(MENU̲Xl+MENU̲DX*3,MENU̲Y,MENU̲COLOR,''画像'');

disp(MENU̲Xl+MENU̲DX*4,MENU̲Y,MENU̲COLOR,"終了");

disp(MENU̲Xl+MENU̲DX*5,MENU̲Y,MENU̲COLOR,''変数設定'');

disp(MENU̲Xl+MENU̲DX*6,MENU̲Y,MENU̲COLOR,''拡張機能'');

disp(MENU̲Xl+MENU̲DX*7,MENU̲Y,MENU̲COLOR,''ヘルプ'');

imput̲key̲no=horizonal̲select(selected,menu̲max,MENU̲Xl,MENU̲X2 MENU̲Y,MENU̲DX,MENU̲COLOR,MENU̲SELECT̲COLOR);

return(imput̲key̲no);

/*‑‑‑‑‑.‑‑‑‑‑‑‑‑‑.‑‑‑.‑‑‑‑‑‑‑一一一一一一一一一一一一一一一一一一一一一一・・‑‑‑‑‑.‑‑‑‑‑‑‑‑‑‑‑‑.‑‑‑‑‑‑‑‑‑‑‑‑+

関 数 名 引 数

intselect̲from̲menu()

現 在 選 択 さ れ て い る メ ニ ュ ウ の 番 号 選 択 で き る メ ニ ュ ウ の 個 数

*selected:

menumax:

返 り 値 コ メ ン ト

C R , E S C , D O W N

メ ニ ュ ウ バ ー を 表 示 し 、 選 択 す る 関 数 を 呼 ぶ 。

+‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑*/

intselect̲from̲menu()

(16)

staticintparent̲menu=1;

intimput,menu̲number;

do{

imput=parent̲menu̲sct(&parent̲menu,MENU̲MAX);

if(imput==ESC) return(O);

while(1){/*リターンか、エスケープを押すまで抜けない*/

intx;

switch(parent̲menu){

casel:

imput=MenuSelect(Senser,&menu̲number,1,2);

break;

case2:

imput=MenuSelect(Motor,&menu̲number,5,2);

break;

case3:

imput=MenuSelect(Scan,&menu̲number,12,2);

break;

case4:

imput=MenuSelect(Gazou,&menu̲number,28,2);

break;

case5:

imput=MenuSelect(Syuuryou,&menu̲number,36,2);

break;

case6:

imput=MenuSelect(Hensuu,&menu̲number,43,2);

break;

case7:

imput=MenuSelect(Kakutyou,&menu̲number,59,2);

break;

case8:

imput=MenuSelect(Help,&menu̲number,65,2);

break;

/ * メ ニ ュ ウ を ポ ッ プ ア ッ プ し た 状 態 で 左 右 の カ ー ソ ル キ ー が 押された場合、親メニュウのNoを変えて、選択を示す反転表示を 隣に移す。*/

if(imput==LEFTllimput==RIGHT){

x=(parent̲menu‑l)*MENU̲DX;

color̲(MENU̲Xl+x,MENU̲Y,MENU̲X2+x,MENU̲Y,MENU̲COLOR);

if(imput==LEFT) parent̲menu‑‑;

else

parent̲menu++;

if(parent̲menu<lllparent̲menu>MENU̲MAX) parent̲menu=MENU̲MAX;

x=(parent̲menu‑l)*MENU̲DX;

color̲(MENU̲Xl+x,MENU̲Y,MENU̲X2+x,MENU̲Y,MENU̲SELECT̲COLOR); }else{

break;

}while(imput!=CR);

(17)

return(menu̲number);

(18)

/

+・‑.‑.‑‑‑‑‑.一一一一一・・一・‑−−−−−−..−−−一・‑‑‑‑‑‑一一・一一一一一一一一‑−−−.−−−−−−−..−−.−.−−−一一一一一一一・‑‑‑‑‑‑‑..‑一一一一・一一・‑一一・一一+

menuslct.c

I A F M の メ ニ ュ ウ 環 境 を 提 供 す る A F M ̲ M E N U . E X E の サ プ モ ジ ュ ー ル | メ ニ ュ ウ 選 択 を 行 う 3 つ の 関 数 か ら な る 。

+一一一一一−..−..−−−−−‑一一一一一‑‑‑‑‑‑.‑‑.‑‑‑‑‑一一一・一一一一−−.−−−−−−−−−.−−一一一・一一−一一・一一・一・一一一一一・‑−−−.−−‑一一一一一一一+

*

#include<string.h>

#include<lib¥crt.h>

#include<lib¥key.h>

#include<lib¥bslib.h>

#include<lib¥keytbl.h>

#include<lib¥window.h>

#include''popup.h''

+十+十十

︒︐.

●0ヶ︑Ⅱ日″〃︑ノー090ee︑︑ggi︒SS︑︑uⅡ︐︐︒000eennggi︒SSⅡ︑uu︐︐→し→し︑n.1

■Q○■且

一言一L成

一一旦一.m・狐一吟トーープ一心吐.︐一一一一イ︲一m・狐︑︺一コーーターL雌︑一︲トーm・狐4﹄一ロ一L城︑一プーm・訓氷

●夕︒︾︽ロ.︾︽.+口I︾

︲守Ⅱし孟叩

︲↑し︻叩000凸

面叩皿●●0凸0″

■GIA/″Ⅱ1︐.斗︽Ult︲ICwUCeN邸elEleMeSr︑S一︲t−lClaeanlCOe・1Z︹︒→︾・urrneOeV0nM肥ttt*一一ノノn︑n*一一ノ″*〃ノ+十*・1.1.1〃/+十*ノノ

intvertical̲select(int*no,intmax,intxl,intx2,intyl, intdy,unsignedatrl,unsignedatr2) 関 数 名

現 在 選 択 さ れ て い る メ ニ ュ ウ の 番 号 選 択 で き る メ ニ ュ ウ の 個 数

初 め の メ ニ ュ ウ の 左 x 文 字 座 標 初 め の メ ニ ュ ウ の 右 x 文 字 座 標 メ ニ ュ ウ の y 文 字 座 標

l メ ニ ュ ウ の 文 字 数 非 選 択 色

選 択 色 引 数

■●●●●●●og190X・・・.・・・・rrnal91聖y→し︲t*ⅢXXydaa

返 り 値 コ メ ン ト

C R , E S C , L E F T , R I G H T

縦 方 向 に 並 ん だ メ ニ ュ ウ を カ ー ソ ル キ ー で 選 択 す る

〃ノ一︐一y一○.

一→し一︑一・1−P

−.1−y

−0t−︑一・

一︐

一○ムーX

一→し一n一・1−︐

一1八一X−→し?︺一Ⅱr一・1→﹀一︐90−Xe一an一Ⅲg

●●■■凸一→︺S一︑n一・1u一19−0.1−nr−*jt−→し一︑0−.1e一/I︑

|︲tg

一C・一eS−ln−eu−S−l−a

一ハ0︶

一G9Ⅱ8

−︲TI︺一r一e一V

一→し一n+・

registerint int

unsigned

ch,y;

Cursor Color

/*カーソル属性*/

/*カレントアトリビュート*/

cursormode();

currentcolor();

一一一一

(19)

if(*no<lll*no>max)*no=l;

cursor(CURSORoff);

while(1){

y=(*no‑1)*dy+yl;

color̲(xl,y,x2,y,atr2);

ch=inkey();

color̲(xl,y,x2,y,atrl);

switch(ch){

caseUP:*no二(*no>l)?*no‑l:max;break;

caseDOWN:*no二(*no〈max)?*no+l:l;break;

caseLEFT:break;

caseRIGHT:break;

default:if(ch>='l'&&ch<=max+'O')*no=ch‑'O';break;

if(ch=CRIIch==ESCIIch==LEFTllch==RIGHT)break;

color̲(xl,y,x2,y,atr2);

color(Color);

cursor(Cursor);

return(ch);

/*‑.‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑.‑‑‑‑‑‑‑‑‑‑‑.‑.‑‑‑‑‑.‑一一一一一一一一一一一一一‑‑.‑‑‑‑‑‑‑‑‑‑‑‑‑‑.‑.‑‑‑‑‑‑‑‑+

関 数 名 inthorizonal̲select(int*no,intmax,intxl,intx2, inty,intdx,unsignedatrl,unsignedatr2) 引 数 現 在 選 択 さ れ て い る メ ニ ュ ウ の 番 号

選 択 で き る メ ニ ュ ウ の 個 数 初 め の メ ニ ュ ウ の 左 x 文 字 座 標 初 め の メ ニ ュ ウ の 右 x 文 字 座 標 メ ニ ュ ウ の y 文 字 座 標

1 メ ニ ュ ウ の 文 字 数 非 選 択 色

選 択 色

●●◆●○●●●91ワ0X・・・...rrna︐19﹈..X→し→し*ⅢXXy︲︒aa

返 り 値 コ メ ン ト

C R , E S C , D O W N

横 方 向 に 並 ん だ メ ニ ュ ウ を カ ー ソ ル キ ー で 選 択 す る

ノノ一︐一X一0

一n一・一︐一y

一→し一n一・一︐

一︑ムーX

一→し一︑−.1−︐

一利1−X

−nt︑ノーnoムー・r−︐a一X○0−ae−Ⅲn−︲t・一nS

−●91A︻叩型

叩皿哩一7

一0−︑利1−*r−→︺a一n一・100−/1e一→し︑一Cg−e・l−lS−en−Su−lla一n一0−Z|・一r一0−︲n−t−命叩型

十︐G9I8

/*register*/intch i n t C u r s o r unsignedColor

X;

cursormode();

currentcolor();

/*カーソル属性*/

/*カレントアトリビュート*/

一一一一

if(*no<lll*no>max)*no=max;

cursor(CURSORoff);

while(1){

x=(*no‑1)*dx;

color̲(xl+x,y,x2+x,y,atr2);

ch二inkey();

color̲(xl+x,y,x2+x,y,atrl);

switch(ch){

caseLEFT:*no二(*no>l)?*no‑l caseRIGHT:*no二(*no〈max)?*no+1

break;

break;

max;

l;

(20)

default:if(ch>='l'&&ch<=max+'O')*no=ch‑'O';

if(ch==CRIIch==ESCllch==DOWN)break;

color̲(xl+x,y,x2+x,y,atr2);

color(Color);

cursor(Cursor);

return(ch);

/*‑‑‑‑‑‑.‑‑‑‑‑‑‑‑‑‑‑...‑.‑‑‑‑.‑‑.‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑−‑‑‑‑‑‑‑‑‑‑‑‑‑‑.‑‑‑‑.‑‑..‑‑‑‑‑‑‑‑+

intMenuSelect(MENU*m,int*no,intx,inty) 関 数 名

引 数 メ ニ ュ ー 構 造 体

現 在 選 択 さ れ て い る メ ニ ュ ウ の 番 号 ポ ッ プ ア ッ プ メ ニ ュ ウ の 左 上 x 文 字 座 標 ポ ッ プ ア ッ プ メ ニ ュ ウ の 左 上 y 文 字 座 標

●︒..0Ⅲ︑︒.:

**Xy

返 り 値 コ メ ン ト

CR,ESC,LEFT,RIGHT

ポップアップメニューを表示し、選択する。

+‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑.‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑..‑‑.‑‑‑‑‑‑‑‑.‑‑.‑‑‑*/

intMenuSelect(MENU*m,int*no,intx,inty)

,flagl,flag2,len=0;

l; m;

registerint int

MENU WINDOW

int unsigned

X三二raor

Ⅲ→しr・︐SOCtハーrl1lpuu01S*0︐︹しr︺

/*カーソル属性*/

/*カレントアトリビュート*/

cursormode();

currentcolor();

for(;ptr‑>item;ptr++)

if(len<(int)strlen(ptr‑>item))len=strlen(ptr‑>item);

max=ptr‑m‑l;

if(max<1)return(‑l);

for(i=1;i<=max;i++)if(m[i].code==*no)slct=i;

WINopen(&buf,x,y,x+len+3,y+max+1,0,MENU̲BACK̲COLOR,MENU̲FLAME̲COLOR); WINtitle(&buf,0,0,MENU̲TITLE̲COLOR,m[O]・item);

color(MENU̲BACK̲COLOR);

for(i=1;i<=max;i++){

dputf(x+2,y+i,''%3,m[i].item);

do{

flag2=CR;

flagl=vertical̲select(&slct,max,x+1,x+len+2,y+1,1, MENU̲BACK̲COLOR,MENU̲SELECT̲COLOR);

if(flagl=CR&&m[sIct].sub)

flag2=MenuSelect(m[slct].sub,no,x+3,y+3);

else

*no=m[slct].code;

}while(flag2==ESC);

WINclose(&buf);

color(Color);

cursor(Cursor);

return(flagl);

(21)

/

+‑‑‑‑‑‑..‑.‑・ −.−.−−.−‑.‑‑.‑‑‑.'‑.一一一一一一一一一一‑‑‑‑−−−.−..−−.−−・・・−−.−.−.−−−−−..−.−−.−−−.−−.−−‑一一一・・‑一一・一一・一・一 ‑.‑..‑,‑‑.‑.‑‑‑+

終わり

+−.− −.−−.−−−..−.−.−‑.‑.‑‑‑‑‑‑.‑.‑‑−..−.−.− ‑.‑.‑.一一一一一・一・一一一一・‑−−−‑.‑.‑‑...‑.‑‑−一一・‑一一一一一一‑.‑..・・・ ‑‑‑‑‑‑.‑..‑.一・一一一・・一・・・−.−.−+

*

(22)

プログラムファイル

(B.2 HeaderProgramFiles)gra

可『

(23)
(24)
(25)
(26)
(27)
(28)
(29)
(30)
(31)
(32)
(33)
(34)
(35)
(36)
(37)
(38)
(39)
(40)
(41)
(42)
(43)
(44)

'1

プログラムファイル

Files)

(B。3 SenSorProgram

I

(45)
(46)
(47)
(48)
(49)
(50)
(51)
(52)
(53)
(54)

1

ll41ll

111lゞ4︲岬昨岫州皿晒恥恥賑岬!衙届且側ⅡI酬加酬副祁蜘剛圃一コg副画馴勵副剛献訓馴剛郡91トドI卿8即恥即畔gEIHLⅦⅧⅢ蛆側朋椚1脚MFNm1

プログラムファイル

MotorProgramFiles)

(B.4 gra

4

a自画﹃凹面刀蝉畑︒暁匠皿︒■d到

(55)
(56)
(57)
(58)
(59)
(60)
(61)
(62)
(63)
(64)
(65)
(66)
(67)
(68)
(69)
(70)
(71)

I

プログラムファイル

ScanProgramFiles)

(B。5 rOg

孟緊

(72)
(73)
(74)
(75)
(76)
(77)
(78)
(79)
(80)
(81)
(82)
(83)
(84)
(85)
(86)
(87)
(88)
(89)
(90)
(91)
(92)
(93)

+‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑*/

voidlast̲job(no) shortno;

piezo̲set(Y,last̲drive̲v[Y],(float)(t̲start[Y]+d̲displace*no), (float)0.0,(float)MAX̲SCAN̲SIZE/2);

piezo̲set(X,last̲drive̲v[X],(float)t̲start[X],

(float)0.0,(float)MAX̲SCAN̲SIZE/2);

piezo̲drive(Z,(float)0.0,last̲drive̲v[Z],(short)SAFE̲DRIVE̲Z);

last̲drive̲v[Z]=drive̲v[Z];

voidf̲drive(ch,i) shortch,i;

/*ver.4.6*/

drive̲v[ch]=detv̲ex(ch,start̲v[ch],(float)t̲start[ch],

d̲displace*i+(float)t̲start[ch]);

piezo̲drive(ch,drive̲v[ch],last̲drive̲v[ch],t̲div̲times[ch]);

last̲drive̲v[ch]=drive̲v[ch];

voidb̲drive(ch,i) shortch,i;

/*ver.4.6*/

drive̲v[ch]=detv̲sh(ch,reverse̲v[ch],(float)t̲start[ch]+t̲scan̲size, d̲displace*i+(float)t̲start[ch]);

piezo̲drive(ch,drive̲v[ch],last̲drive̲v[ch],t̲div̲times[ch]);

last̲drive̲v[ch]=drive̲v[ch];

/*‑‑‑‑‑‑‑‑‑‑‑.‑‑‑‑‑‑‑.‑‑‑.‑‑‑‑.‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑..‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑.‑‑‑‑‑‑+

関 数 名 voidmain()

+‑‑.‑‑‑‑.‑‑‑‑‑‑‑.‑‑‑‑.‑‑‑‑‑‑‑‑‑..‑‑‑‑‑‑‑‑‑‑‑.‑‑‑‑‑‑‑‑‑‑‑.‑‑.‑‑‑‑‑‑‑‑‑‑.‑.‑‑‑‑.‑‑.‑‑‑‑.‑‑‑‑..‑*/

voidmain() /*ver.4.6*/

shorty,xl,x2,i=0,j=0,repeat;

registerfloat*dp,*sp,*rp,*srp,*dq,*sq,*rq,*srq;

init();

init̲loop(Y);

init̲loop(X);

for(y=0;y<=t̲number̲of̲samples‑1;y++){

f̲drive((short)Y,y); /*y軸スキャン*/

dq=&t̲height[j][O];sq=&t̲subdat[j][O];

rq=&t̲rev[j][t̲number̲of̲samples‑1];

srq=&t̲subrev[j][t̲number̲of̲samples‑l];

repeat=t̲repeat;

for(xl=0;xl<=t̲interval‑1;xl++){

/*行き*/dp=dq;sp=sq;

for(x2=0;x2<=t̲number̲of̲samples‑l;x2++){

if(x2==t̲interval*i+xl){

f̲drive((short)X,x2);

sampling(dp,sp);

i++;

(94)
(95)

プログラムファイル

mFiles)

(B.6 1 mageProgra

1 1

U

(96)
(97)
(98)
(99)
(100)

/

+一一一一一一・一一一・−−−−−−.−−一・‑一一一一一一一一‑‑‑‑一一一一一一一一一一一一一‑−.−.−−−−−.−.−−−−−−−.−−−−−‑一一一一一一一一一・‑‑.‑‑‑‑‑‑+

vmath.c

ベ ク ト ル 演 算 パ ッ ケ ー ジ . C プ ロ グ ラ ム ブ ッ ク 2 参 照

+一一・‑‑‑‑‑‑‑‑‑‑‑‑‑‑一一一一一一一一一‑−−−−−−.−−−−−−.‑‑‑‑‑‑‑‑一‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑..‑一一一・・一・一・‑‑‑‑‑‑‑‑.‑‑.‑.一一一・‑一・‑−−−−−+

*

#include<stdio.h>

#include<math.h>

#include<process.h>

#include''vmath.h'' Vectorvzero={

0.0,0.0,0.0 }

Matrixmunit l.0,0.0, 0.0,l.0, 0.0,0.0, }

二{

0.0, 0.0, 1.0

#defineSTKMAX300

staticElementStk[STKMAX];

Element*stkpnt;

voidsinit(void)

stkpnt二stk+STKMAX;

voidprints(void)

Element*p;

inti;

i=0;

printf(''¥n‑‑stacktop‑‑¥n'');

for(p=stkpnt;p<stk+STI

for(p=stkpnt;p<stk+STKMAX;++p){

printf(''%‑10g'',*p);

if(++i>=3){

i = 0 ;

putchar('¥n');

}else

putchar(',');

printf(''¥n‑‑stackbottom‑‑¥n¥n'');

voidvpsh(Vectorvct)

(101)
(102)
(103)
(104)
(105)
(106)

+lllll+

し一J一

ユ一寸ン一モ一Cる一巳す一

一狐を一 一帥グ一

ン一イ一一プ一

エ一︑ン一

一クh一︒︑︒う0︐0Ⅲ・000︑.︑0.1︑e0nl・llhdt−O090jtaa−→し→しa.︑ⅢSS川SV

一くくくeeeee

−の一0000.0000duuuuu

llllll

CCCCCnnnn︑*一一jiii・lij+lllll+*#####

/*‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑Externfunctions‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑*/

externdoublegetdata(int,long,long);

externvoidviewedge(void);

externvoidpxIset(void);

/*‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑ExternVariables‑‑‑‑‑‑‑‑‑‑−一‑‑‑‑‑‑‑‑‑*/

externVectoreye,view;

externMatrixlens,inv;

externintpx,py;

externdoublewindow,sx,sy,hd,hv;

〃/

一三口一旦

プル

ー●B・ローロⅡ︺●︑〃

一︑画u■″クハ叩叩︑︑日″〃一︵︾︶●90凸︽恥F︾

−1︐1

−00e○︐一ulu一0900−00u00−︐0︐一gdg一n/1n一0V.︐0−101ノー︒︐一ypd︐︑ノーgiigd−Ⅱ0n.一OeVOO−llrKlV−flby/lfl−eupⅢV−000︐rW−a0aOe一︐︑Cn.一SCS︽IV

e9Ⅱ4−90tしgo0000−.1a・1.1.1*0→し000ノ/VSVVV

/*‑・・‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑・‑‑‑‑・‑Public‑‑‑‑‑・‑‑‑‑‑・‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑・‑*/

サンプル表面の性質*/

拡 散 反 射 係 数 R , G , B 鏡 面 反 射 係 数 R , G , B 小 面 分 布 関 数 の パ ラ メ ー タ

0.0}, 0.0},

/ / / / Surfacesurf=

{0.0,0.5, {0.0,1.5, 500,

}

*

*

*

lllumlampO={

NULL,

{0.0,‑l.0,l.0},/*光源の向き*/

{10.0,10.0,10.0},/*光源の色R,G,B*/

}

Vectornorm;

Colorccolor; /*ペイントする伝.のR,G,B成分*/

Surface*s=&surf;

Illum*l=&lampO;

〃/+*一一一一一一一一一一一一一一一

一一一一一一○一一一一一一

一一一一一一一一一一一一一一一一一一一一一一

一一一一

一一一一一一一一トトー

ーーコ一一一一一一一一一

一一一一一一一一一一一一

一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一

一一一一一一**ノグ〃ノ

staticdoubleipow(doublea,intn) 関 数 名

(107)
(108)
(109)
(110)
(111)
(112)
(113)
(114)
(115)
(116)
(117)
(118)
(119)

+十一C一●|

e一一n|

︒一

一●

*一〃/︐/+十*

#include<stdio.h>

#include<stdlib.h> /*abs()*/

#include

#include

''afmdef.h'' ''vmath.h''

/*‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑Externfunctions‑‑‑‑‑‑‑‑‑−−‑‑‑‑‑‑‑‑‑‑‑*/

voidedge(long,long);

voidshade(long,long,double);

voidpxIset(void);

voidscanpy(void);

voidviewv(void);

doublegetdata(int,long,long);

eXtern eXtern extern extern eXtern extern

/*‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑プロトタイプ宣言‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑*/

voidline(long,long,long,long);

voidpoint(long,long);

intcomp(long,long);

/*proto*/

/*‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑・‑‑‑‑Public‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑・‑‑‑‑‑・‑‑*/

Vectoreye,view;

Matrixlens,inv;

intpx,py,mode;

shortnumber̲of̲samples;

doublewindow,sx,sy,data̲min,hight̲scale;

FILE*fp;

extern eXtern extern extern extern eXtern

doublehd,hv;

/*‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑.‑‑‑‑.‑‑‑‑‑‑‑‑‑‑コーーーーーーーーーーーーーーーーーー・‑‑‑‑‑‑‑‑‑‑.‑‑‑‑‑‑‑‑*/

/*‑‑‑‑‑.‑‑‑‑‑‑‑‑‑.‑‑.‑‑‑‑‑‑.‑‑‑‑‑‑‑‑‑‑‑‑‑.‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑.‑.‑‑‑‑.‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑+

yl,longx2,longy2) ine(longxl,long

関 数 名 引 数

voidl

longxl:視点から眺めたときの手前のデータの端のx座標 longyl:視点から眺めたときの手前のデータの端のy座標 longx2:視点から眺めたときの奥のデータの端のx座標 longy2:視点から眺めたときの奥のデータの端のy座標

引数で指定される2点間を 離散データであるスキャンデータを、

結ぶ直線に沿って順に進めてゆく C プ ロ グ ラ ム ブ ッ ク 1 参 照 コ メ ン ト

+‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑.‑‑.‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑.‑‑‑‑‑‑‑‑‑‑*/

voidline(longxl,longyl,longx2,longy2)

1 .

(120)

longx,y,dx,dy;

longe,cl,c2,inc;

x=xl;y=yl;

edge(x,y); /*視界の最下点の処理*/

=labs(x2‑xl);

=labs(y2‑yl);

(dx>dy){

c2=2*dy;

e=c2‑dx;

cl=e‑dx;

if(yl<y2) inc=l;

else

inc=‑l;

y=yl;

dx dy if

if(x2‑xl+y2‑yl<O

II(x2‑xl+y2‑yl==O&&

for(x=xl‑l;x>二x2;x‑‑){

if(e>0){

y+=inc;

e+=cl;

}else

e+=c2;

point(x,y); /*描画処理*/

}else{

for(x=xl+1;x<=x2;x++){

if(e>0){

y+=inc;

e+=cl;

}else

e+=c2;

point(x,y); /*描画処理*/

x2‑xl>0)){

}else{

c2=2*dx;

e=c2‑dy;

cl=e‑dy;

if(xl<x2) inc=1;

else

inc=‑l;

x二Xl;

llll︲llIllIli1I1lIIIIIIIj

if(x2‑xl+y2‑yl<O

││(x2‑xl+y2‑yl==O&&x2‑xl>0)){

for(y=yl‑l;y>=y2;y‑‑){

if(e>0){

x+=inc;

e+=cl;

}else

e+=c2;

point(x,y); /*描画処理*/

参照

関連したドキュメント

Two Steiner triple systems (X, A) and (X, B) are said to intersect in m pairwise disjoint blocks if |A ∩ B| = m and all blocks in A ∩ B are pairwise disjoint... are said to intersect

Such bounds are of interest because they can be used to improve estimates of volumes of hyperbolic manifolds in much the same way that B¨ or¨ oczky’s bounds [B¨ o1], [B¨ o2] for

We study the classical invariant theory of the B´ ezoutiant R(A, B) of a pair of binary forms A, B.. We also describe a ‘generic reduc- tion formula’ which recovers B from R(A, B)

(シリーズ 事業拡⼤ B 〜相当). (シリーズ 事業展開

締約国Aの原産品を材料として使用し、締約国Bで生産された産品は、締約国Bの

 原子炉建屋(R/B)及びタービン建屋(T/B)の汚染状況は、これら

PCIJ,  series  A/B;  Permanent  Court  of  International  Justice,  Judgments,  Orders  and  Advisory  Opinions . PCIJ,  series  B;  Permanent  Court  of 

給水系に接続