home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
FreeWare Collection 2
/
FreeSoftwareCollection2pd199x-jp.img
/
watch
/
watch.c
< prev
next >
Wrap
Text File
|
1990-06-14
|
8KB
|
226 lines
/* 魔女の アナログ 時計 */
#include <EGB.h> /* グラフィック */
#include <math.h> /* sin,cos */
#include <time.h> /* time */
#include <mos.h> /* マウス */
#include <stdlib.h>
#include <stdio.h>
#include <snd.h>
#define PI 3.14159265358979323846
typedef unsigned int usint;
void main()
{
char *fn = "MAJO.SND"; /*音声データの読込*/
char *mp;
FILE *fp;
mp = malloc(60000);
fp = fopen(fn,"rb");
fread(mp,1,59999,fp);
fclose(fp);
*(int *)(mp + 20) = 0;
char *Gbuf; /* TIF データの読込 */
char *fm = "MAJO.TIF";
Gbuf = malloc(154112);
fp = fopen(fm,"rb" );
fread(Gbuf,1,154112,fp);
fclose(fp);
char swork[16384]; /* サウンド作業域 */
char work[1536]; /* グラフィック作業域 */
char mwork[4096]; /* マウス作業域 */
char para[64];
int t1,t2,t3;
double s1,s2,s3,sa,sb,sc; /* 秒 分 時 */
int cnt,o,chm,xm,ym;
double i,j,a;
struct tm *newtime;
time_t ltime;
static int moji[12]={0x2330,0x2331,0x2332,0x2331,0x2332,0x2333,
0x2334,0x2335,0x2336,0x2337,0x2338,0x2339};
int tifx,tify;
int c, off;
tifx = *(Gbuf+31);
tifx <<= 8;
tifx |= *(Gbuf+30); /* X Size */
tify = *(Gbuf+43);
tify <<= 8;
tify |= *(Gbuf+42); /* Y Size */
EGB_init(work,1536); /* 初期化 */
EGB_resolution(work,0,3); /* 仮想画面の設定 */
EGB_resolution(work,1,10);
EGB_displayPage(work,0,1); /* 表示ページの指定 */
EGB_writePage(work,1); /* Write to Page 1 */
EGB_writeMode(work,0);
EGB_color(work,1,0); /* 背景色 : Black */
EGB_color(work,0,15); /* 前景色 : L_White */
EGB_clearScreen(work);
EGB_displayStart(work,1,0,0); /* 仮想画面位置 */
EGB_displayStart(work,0,0,0); /* 表示開始位置 */
EGB_displayStart(work,2,2,2); /* 画面の拡大 */
EGB_displayStart(work,3,319,239);/* 画面の大きさ */
off = 0x200;
for (c=0;c<tify;c++)
{
DWORD(para+0) = (usint)Gbuf+off;
WORD(para+4) = 0x14;
WORD(para+6) = 0;
WORD(para+8) = c;
WORD(para+10) = tifx-1;
WORD(para+12) = c;
EGB_putBlock(work,0,para);
off += (tifx * 2);
}
EGB_writePage(work,0);
EGB_paintMode(work,0x22); /* 面塗りモードの指定 */
EGB_color(work,2,0); /* 面色の設定 色=黒 */
EGB_color(work,0,15); /* 線色の設定 色=明るい白 */
EGB_color(work,1,8); /* 背景色の設定 色=灰色 */
EGB_writeMode(work,0); /* 描画モードの設定 */
EGB_pen(work,0); /* ペンの設定 */
EGB_penSize(work,2); /* ペンの太さ */
WORD(para+0)=300; /* 時計の外枠 線色=明るい白のまま*/
WORD(para+2)=250; /* 面色=黒のまま */
WORD(para+4)=205;
EGB_circle(work,para);
EGB_color(work,2,8); /*面色で塗る 色=灰色 */
WORD(para+0)=10;
WORD(para+2)=10;
WORD(para+4)=1;
WORD(para+6)=0;
WORD(para+8)=15; /* 色=明るい白の回り */
EGB_closePaint(work,para);
cnt=-1;
for (i=0;i<60;i=i+1) /* 目盛を書く */
{
a=PI*6*i/180;
cnt=cnt+1;
WORD(para+0)=2;
WORD(para+2)=300-205*cos(a);
WORD(para+4)=250-205*sin(a);
if(cnt%5==0)
{
WORD(para+6)=300-195*cos(a);
WORD(para+8)=250-195*sin(a);
}
else
{
WORD(para+6)=300-200*cos(a);
WORD(para+8)=250-200*sin(a);
}
EGB_unConnect(work,para);
}
j=0; /*1-12の文字を書く */
for(o=0;o<12;o=o+1)
{
j=j+1;
WORD(para+0)=300-175*cos(30*PI*j/180)-20;
WORD(para+2)=250-175*sin(30*PI*j/180)+20;
if(o<3)
{
EGB_textZoom(work,1,20,40); /*10-12を書く */
WORD(para+4)=2;
WORD(para+6)=0x2331;
WORD(para+8)=moji[o];
}
else
{ /*1-9を書く */
EGB_textZoom(work,1,40,40);
WORD(para+4)=1;
WORD(para+6)=moji[o];
}
EGB_penSize(work,4); /* ペンの太さ */
EGB_color(work,0,7); /* 線色の設定 色=白 */
EGB_jisString(work,para);
}
SND_init(swork);
SND_pcm_mode_set(8); /* 音声モードチャンネルの設定 */ SND_volume_change(64,127); /* チャンネル音量設定 */
SND_elevol_all_mute(0); /* オールミュート */
SND_elevol_mute(1); /* 電子ボリュームミュート設定 */
SND_elevol_all_mute(1); /* オールミュート */
MOS_start(mwork,4096); /* マウスインターフェイスの動作開始 */
MOS_resolution(0,3); /* マウス仮想画面の設定 */
MOS_disp(1); /* マウスカソールの表示の設定 */
/* 針を書く */
do
{
ltime = time( NULL ) ; /* 時間 */
newtime = localtime( <ime ) ;
t1 = newtime->tm_sec ;
t2 = newtime->tm_min ;
t3 = newtime->tm_hour ;
s1=(90+t1*6)*PI/180;
sa=(90+(t1-1)*6)*PI/180;
s2=(90+t2*6)*PI/180;
sb=(90+(t2-1)*6)*PI/180;
s3=(90+t3*30+t2*0.5)*PI/180;
sc=(90+t3*30+(t2-3)*0.5)*PI/180;
WORD(para+0)=2;
WORD(para+2)=300;
WORD(para+4)=250;
if(t2==0 && t1==0){
EGB_displayPage(work,0,2); /* 表示ページの指定 */
SND_pcm_play(64,64,127,mp); /* 再生 */
while(0 != SND_pcm_status(64)); /* 再生状態のチェック */
EGB_displayPage(work,0,1); /* 表示ページの指定 */
}
else{
EGB_color(work,0,14); /* 秒針 色=黄色 */
EGB_penSize(work,1);
WORD(para+6)=300-165*cos(s1);
WORD(para+8)=250-165*sin(s1);
EGB_unConnect(work,para);
EGB_unConnect(work,para);
EGB_unConnect(work,para);
EGB_color(work,0,15); /* 色=明るい白 */
EGB_penSize(work,2);
WORD(para+6)=300-150*cos(s2); /* 分針 */
WORD(para+8)=250-150*sin(s2);
EGB_unConnect(work,para);
EGB_unConnect(work,para);
EGB_unConnect(work,para);
EGB_color(work,0,7); /* 色=白 */
EGB_penSize(work,2);
WORD(para+6)=300-120*cos(s3); /* 時針 */
WORD(para+8)=250-120*sin(s3);
EGB_unConnect(work,para);
EGB_unConnect(work,para);
EGB_unConnect(work,para);
}
/* 過ぎ去った針を消す*/
EGB_color(work,0,0); /* 色=黒 */
EGB_penSize(work,1); /* 秒針 */
WORD(para+6)=300-165*cos(sa);
WORD(para+8)=250-165*sin(sa);
EGB_unConnect(work,para);
EGB_penSize(work,2); /* 分針 */
WORD(para+6)=300-150*cos(sb);
WORD(para+8)=250-150*sin(sb);
EGB_unConnect(work,para);
EGB_penSize(work,2); /* 時針 */
WORD(para+6)=300-120*cos(sc);
WORD(para+8)=250-120*sin(sc);
EGB_unConnect(work,para);
MOS_rdpos(&chm,&xm,&ym); /*マウス状態の読み取り*/
}while(chm !=3); /*マウス両ボタンで終了*/
MOS_end(); /*マウス動作終了の設定*/
free(mp);
SND_end();
} /* main */