/* * ***************************************************************** * * * * * Copyright (c) Fast Corporation, 1997 * * * * * * All Rights Reserved. Unpublished rights reserved under * * * the copyright laws of the Japan. * * * * * * The software contained on this media is proprietary to * * * and embodies the confidential technology of Fast * * * Corporation. Possession, use, duplication or * * * dissemination of the software and media is authorized only * * * pursuant to a valid written license from Fast Corporation. * * * * * ***************************************************************** */ /* CSC90X 高分解能エリアセンサ画像保存ツール IMAG_FHC.C */ /*[作成者]Y.Hori */ /* 履歴: Ver 1.0 99/9/24 通常カメラ版IMAGHOLDをペースに作成 Ver 1.1 00/1/26 ボードとカメラが無くても動作可能に変更 注記: FHC331, FHC331LV使用時 902_FHC.LIBをリンクしてください。 */ /*--------------------------*/ /* インクルード・ファイル */ /*--------------------------*/ #include #include /* 標準C関数 */ #include /* 標準C関数 */ #include "f_math.h" /* 数値演算関連 */ #include "f_gui.h" /* GUI関連 */ #include "f_stdio.h" /* 標準入出力関連 */ #include "f_stdlib.h" /* メモリ領域割当関連 */ #include "f_graph.h" /* モニタTV表示関連 */ #include "f_image.h" /* 画像メモリ操作関連 */ #include "f_pinf.h" /* システムパラメータ関連 */ #include "f_system.h" /* システムパッド操作関連 */ #include "f_video.h" /* ビデオ入力制御関連 */ #include "f_gray.h" /* グレイ画像転送関連 */ #include "f_file.h" /* ファイル操作関連 */ #include "f_time.h" /* タイマ関連 */ #include "f_hres.h" /* 高分解能エリアセンサ関連 */ /*--------------------------*/ /*   固定データ定義   */ /*--------------------------*/ #define MAX_IMAGE_DATA 16 /* 画像取り込みの最大面数(メモリが許せば何面でも良い 良いのだが、とりあえずここでは標準のGRAYMEM0.SYS〜 GRAYMEMF.SYSファイルを使用するので16面とする) */ #define GRAY_MEM_SIZE 1318400L /* 1280×1030画素のサイズ */ #define GRAY_MEM_SIZE_SMALL 245760 /* 512×480画素のサイズ */ #define INPUT_MEMORY 0 /* Lib_freeze()時の取り込み先メモリNo. */ #define NON_PICTURE 0 /* GRAYMEMx.SYSファイルに画像は入っていない=○ */ #define LOAD_PICTURE 1 /* PCカードからロードされた画像が入っている=◆ */ #define CAMERA_PICTURE 2 /* カメラから入力された画像が入っている =● */ #define FID_SIZE 7 /* ファイルID桁数 */ #define FKIND_SIZE 3 /* 拡張子桁数 */ #define MASK1 0x1 /* BMPオープンで使うマスク */ #define MASK2 0x3 /* BMPオープンで使うマスク */ #define MASK4 0xF /* BMPオープンで使うマスク */ #define MOVE_SIZE 30 /* 切出し画像の移動量 */ #define FX_SIZE 1280 /* 画像サイズ x */ #define FY_SIZE 1030 /* 画像サイズ y */ #define FX_SIZE2 512 #define FY_SIZE2 480 /*--------------------------*/ /*   構造体定義    */ /*--------------------------*/ /*** BMPヘッダー ***/ typedef struct { unsigned int bfSize; /* ファイルサイズ */ unsigned int bfOffBits; /* ヘッダーサイズ */ unsigned int biSize; /* インフォヘッダーサイズ */ unsigned int biWidth; /* イメージ幅 */ unsigned int biHeight; /* イメージ高さ */ unsigned short biPlanes; /* プレーン数 */ unsigned short biBitCount; /* ピクセルあたりのビット数 */ unsigned int biXPelsPerMeter;/* 水平解像度(X Pels Per Meter) */ unsigned int biYPelsPerMeter;/* 垂直解像度(Y Pels Per Meter) */ }BMP_HEADER; /*** BMPパレット ***/ typedef struct { unsigned char rgbBlue; unsigned char rgbGreen; unsigned char rgbRed; unsigned char rgbReserved; }RGBQUAD; /*** ファイル情報 ***/ typedef struct { char baName[13]; unsigned long ulSize; }FILE_PARAM; typedef struct { char baID[FID_SIZE+1]; /* 高分解能画像ファイル名 */ char baID2[FID_SIZE+1]; /* 512*480画像ファイル名 */ char baKind[FKIND_SIZE+1]; /* 高分解能画像拡張子名 */ char baKind2[FKIND_SIZE+1]; /* 512*480画像拡張子名 */ int wBmp; /* 高分解能画像ビットマップON−OFF */ int wBmp2; /* 512*480画像ビットマップON−OFF */ }FILE_NAME; /*--------------------------------*/ /* グローバル変数  */ /*--------------------------------*/ int wMax_image_count; /* 確保したグレイメモリ枚数 */ int waStore_index[MAX_IMAGE_DATA]; /* グレイメモリにデータが入っているかの確認 */ char temp_fkind[FKIND_SIZE+1], temp_fkind2[FKIND_SIZE+1]; /*----------------------------*/ /* プロトタイプ宣言  */ /*----------------------------*/ void main( void ); int fnStart_load( FILE_NAME * ); int fnSelect_camera( FILE_NAME *, int * ); void fnPrdm_form1( int, int, PARADIGM * ); void fnPrdm_form2( int, int, PARADIGM * ); void fnEnd( int ); void fnInput( void ); void fnHigh_res_freerun( void ); void fnDisplay( FILE_NAME * ); int fnExpend( int, int *, int *, int *, int *, FILE_NAME * ); void fnEx_position( int *, int *, int *, int * ); void fnSmall_save( int, int, int, int, int, FILE_NAME * ); void fnSave( FILE_NAME * ); void fnLoad( FILE_NAME * ); void fnSort( FILE_PARAM *, FILE_PARAM *, int, int *, int * ); int fnSelect_img_or_bmp( void ); int fnSelect_file( FILE_PARAM *, int, int ); int fnChenge_name( FILE_NAME * ); int fnLoadBmp( int, char *, unsigned long ); int fnSaveBmp( unsigned char *, int, int, int, int, char * ); void fnGetInt( char *, int, unsigned int * ); void fnGetShort( char *, int, unsigned short * ); void fnCut_space( char *, char * ); /**************************************************************/ /**** メイン関数 ****/ /**************************************************************/ void main( void ) { FILE_NAME tFile_name; /* ファイル名称 */ int wGraymem_num=10;/* グレイメモリ枚数 */ int wRtn_camera; /* カメラ選択戻り値 */ int wRtn_cam_init; /* カメラ初期化戻り値 */ int i, j; /* ループ */ int w, h; /* キーサイズ */ int x, y; /* カーソル位置 */ char baStr[64]; /*****----- 画面表示初期化 -----*****/ Lib_input_video_control( GRAY_PLANE ); Lib_display_control( GRAY_PLANE | LINE_PLANE | CHAR_PLANE ); Lib_freeze( NOT_TRANSMIT ); Lib_memory_clear( GRAY_PLANE | LINE_PLANE | CHAR_PLANE ); Lib_init_cursor( ); Lib_draw_cursor( 256, 240 ); /*****----- 初期名称 -----*****/ strcpy( tFile_name.baID, "GRAY_HI" ); strcpy( tFile_name.baKind, "IMG" ); strcpy( tFile_name.baID2, "GRAYMEM" ); strcpy( tFile_name.baKind2, "IMG" ); tFile_name.wBmp = OFF; tFile_name.wBmp2 = OFF; /*****----- カメラの選択 -----*****/ wRtn_camera = fnSelect_camera( &tFile_name, &wGraymem_num ); if( 102 == wRtn_camera ) return; else if( -1 == wRtn_camera ) return; else { /*****----- カメラの初期化 -----*****/ switch( wRtn_camera ) { case 0 : wRtn_cam_init = Lib_high_res_init( FC1300 ); break; case 1 : wRtn_cam_init = Lib_high_res_init( FC1300EXT ); break; case 2 : wRtn_cam_init = Lib_high_res_init( FC1300NRM ); break; case 3 : wRtn_cam_init = Lib_high_res_init( KP_F100 ); break; case 4 : wRtn_cam_init = Lib_high_res_init( KP_F100EXT ); break; case 5 : wRtn_cam_init = Lib_high_res_init( KP_F100NRM ); break; case 6 : wRtn_cam_init = Lib_high_res_init( CS3910 ); break; case 7 : wRtn_cam_init = Lib_high_res_init( CS3910EXT ); break; case 8 : wRtn_cam_init = Lib_high_res_init( CS3910NRM ); break; case 9 : wRtn_cam_init = Lib_ExtraCameraInit( FX_SIZE, FY_SIZE ); break; } if( ERROR_RETURN == wRtn_cam_init ) Lib_display_keyinput( 0, 0, "初期化異常終了" ); else if( ARG_ERR == wRtn_cam_init ) Lib_display_keyinput( 0, 0, "カメラ種別不明" ); else if( UNUSUAL_ERR == wRtn_cam_init ) Lib_display_keyinput( 0, 0, "初期化に失敗" ); else if( NO_DEVICE == wRtn_cam_init ) Lib_display_keyinput( 0, 0, "ボードが存在しません" ); else { /*****----- 初期化終了待ち -----*****/ Lib_time_delay( 60 ); /*****----- STORAGE上に指定された枚数のGRAYMEMx.SYSを生成 -----*****/ for( j = 0; j < wGraymem_num; j++ ) { if( ERROR_RETURN != ( i = Lib_alloc_gray_memory( ) )) Lib_gray_memory_cls( i ); else break; } /*****----- グレイメモリの確認 -----*****/ for( i = 0; i <= MAX_IMAGE_DATA; i++ ) if( ERROR_RETURN == Lib_change_gray_memory( i ) ) break; if( 1 >= i ) { Lib_change_gray_memory( INPUT_MEMORY ); Lib_memory_clear( GRAY_PLANE | CHAR_PLANE ); Lib_chrdisp( 20, 13, "STORAGEエリアの残容量が少なくて" ); Lib_chrdisp( 20, 14, "作業用メモリが確保できません。" ); Lib_chrdisp( 20, 15, "このままではプログラムは動けな" ); Lib_chrdisp( 20, 16, "いので処理を中止し、90Xシステム標準" ); Lib_chrdisp( 20, 17, "機能に戻ります。" ); for( Lib_strtclk(); Lib_readclk() < 1000; ) ; return; } if( i < wGraymem_num ) { Lib_chrdisp( 20, 13, "設定されたグレイメモリ枚数が" ); Lib_chrdisp( 20, 14, "確保できませんでした。" ); Lib_sprintf( baStr, "グレイメモリ%d枚で作業を行って", i ); Lib_chrdisp( 20, 15, baStr ); Lib_chrdisp( 20, 16, "ください。" ); for( Lib_strtclk(); Lib_readclk() < 1000; ) ; return; } wMax_image_count = i; /* 確保出来た面数。ただし最大"MAX_IMAGE_DATA"分まで */ Lib_change_gray_memory( INPUT_MEMORY ); /* FS0にある画像をロード */ fnStart_load( &tFile_name ); /************************************/ /* IDLE(トリガー待ち) */ /************************************/ Lib_get_key_size( 14, &w, &h ); /*****----- 終了項目 -----*****/ for( ; ; ) { if( 9 != wRtn_camera ) Lib_display_key( 0, 0, "画像の取り込み", 1 ); Lib_display_key( w - 1, 0, "蓄積画像の表\示", 1 ); Lib_display_key( 0, 455, "セーブ (→FS0)", 1 ); Lib_display_key( 512 - w, 0, "90Xシステムへ復帰 ", 1 ); Lib_display_key( 512 - w, 455, "FS0のファイル削除 ", 1 ); Lib_display_key( w - 1, 455, "ロード(FS0→)", 1 ); if( CURSOR_EXECUTE == Lib_get_current_position( &x, &y ) ) { if( 0 <= x && x <= w && 0 <= y && y <= h ) { if( 9 != wRtn_camera ) { Lib_display_key( 0, 0, "画像の取り込み", 2 ); fnInput( ); } } if( w - 1 <= x && x <= w * 2 - 2 && 0 <= y && y <= h ) { Lib_display_key( w - 1, 0, "蓄積画像の表\示", 2 ); fnDisplay( &tFile_name ); } if( 0 <= x && x <= w && 455 <= y && y <= 455 + h ) { Lib_display_key( 0, 455, "セーブ (→FS0)", 2 ); fnSave( &tFile_name); } if( 512 - w <= x && x <= 512 && 0 <= y && y <= h ) { Lib_display_key( 512 - w, 0, "90Xシステムへ復帰 ", 2 ); fnEnd( wRtn_camera ); break; } if( 512 - w <= x && x <= 512 && 455 <= y && y <= 455 + h ) { Lib_display_key( 512 - w, 455, "FS0のファイル削除 ", 2 ); fnDelete(); } if( w - 1 <= x && x <= w * 2 - 2 && 455 <= y && y <= 455 + h ) { Lib_display_key( w -1, 455, "ロード(FS0→)", 2 ); fnLoad( &tFile_name ); } } } } } /* 一応キーサイズを10に変更しておく */ Lib_set_pad_maxstring( 10 ); } /**************************************************************/ /**** カメラの選択 ****/ /**************************************************************/ int fnSelect_camera( tFile_name, wGraymem_num ) FILE_NAME *tFile_name; /* ファイル名称 */ int *wGraymem_num; /* グレイメモリ枚数 */ { PVAL tMpad_value[8]; int wPad_level; int wWidth,wHeight; int wNo; int wRtn = 0; char baStr[64]; char *ubpSelect[10] = { "FC1300 ", "FC1300EXT ", "FC1300NRM ", "KP_F100 ", "KP_F100EXT", "KP_F100NRM", "CS3910 ", "CS3910EXT ", "CS3910NRM ", "NONE " }; char *ubpSave_type[2] = { "90x形式", "BMP形式" }; char baTemp[FID_SIZE+1], baTemp2[FKIND_SIZE+1]; /* パッド表示文字数の設定 */ Lib_set_pad_maxstring( 12 ); /* パッドCANCELフィールドの設定 */ Lib_set_pad_cancel_field( "QUIT", "終了" ); /* メニューサイズの取得 */ Lib_get_standard_key_size( &wWidth, &wHeight ); /* 初期化 */ strcpy( temp_fkind, tFile_name->baKind ); strcpy( temp_fkind2, tFile_name->baKind2 ); Lib_sprintf( baStr, "高分解能\画像の拡張子は %3s です", temp_fkind ); Lib_chrdisp( 30, 29, baStr ); Lib_sprintf( baStr, "512*480画像の拡張子は %3s です", temp_fkind2 ); Lib_chrdisp( 30, 30, baStr ); /* パッドのオープン */ wPad_level = Lib_view_open( ); /* パッドのタイトル */ Lib_view_set_title( wPad_level,"カメラ・ファイル設定" ); /* メニューの登録 */ Lib_view_set_select ( wPad_level, 5, 5, "カメラ選択", 0, 10, ubpSelect, 0 ); Lib_view_set_uniq_numeral( wPad_level, 5, 11+wHeight, "グレイメモリ枚数", 10, 1, 15, 1 ); Lib_view_set_comment ( wPad_level, 3, 20+wHeight*2, "高分解能\画像", 2 ); Lib_view_set_uniq_string ( wPad_level, 8, 26+wHeight*3, "保存名称", tFile_name->baID, 7, 3 ); Lib_view_set_select ( wPad_level, 8, 32+wHeight*4, "保存形式", tFile_name->wBmp, 2, ubpSave_type, 4 ); Lib_view_set_comment ( wPad_level, 3, 41+wHeight*5, "512*480画像", 5 ); Lib_view_set_uniq_string ( wPad_level, 8, 47+wHeight*6, "保存名称", tFile_name->baID2, 7, 6 ); Lib_view_set_select ( wPad_level, 8, 53+wHeight*7, "保存形式", tFile_name->wBmp2, 2, ubpSave_type, 7 ); /* パラダイムの登録 */ Lib_set_paradigm( wPad_level, 4, END_TIMING, fnPrdm_form1 ); Lib_set_paradigm( wPad_level, 7, END_TIMING, fnPrdm_form2 ); /* パッドの表示位置 */ Lib_view_set_size( wPad_level, 80, 80, 5, 5 ); /* パッドの表示 */ Lib_draw_menu( wPad_level ); if( ERROR_RETURN != ( wNo = Lib_process_menu( wPad_level, tMpad_value )) ) { switch(wNo) { /* 実行ボタンが押されたとき */ case 101: wRtn = tMpad_value[0].select_type; *wGraymem_num = tMpad_value[1].value_type; strcpy( tFile_name->baID, tMpad_value[3].string_type ); strcpy( tFile_name->baID2, tMpad_value[6].string_type ); tFile_name->wBmp = tMpad_value[4].select_type; tFile_name->wBmp2 = tMpad_value[7].select_type; if( 1 == tMpad_value[4].select_type ) strcpy( tFile_name->baKind, "BMP" ); else strcpy( tFile_name->baKind, temp_fkind ); if( 1 == tMpad_value[7].select_type ) strcpy( tFile_name->baKind2, "BMP" ); else strcpy( tFile_name->baKind2, temp_fkind2 ); fnCut_space( tFile_name->baID, baTemp ); strcpy( tFile_name->baID, baTemp ); fnCut_space( tFile_name->baID2, baTemp ); strcpy( tFile_name->baID2, baTemp ); fnCut_space( tFile_name->baKind, baTemp2 ); strcpy( tFile_name->baKind, baTemp2 ); fnCut_space( tFile_name->baKind2, baTemp2 ); strcpy( tFile_name->baKind2, baTemp2 ); break; /* 終了ボタンが押されたとき */ case 102: wRtn = 102; break; } } else { wRtn = -1; Lib_display_message( 150, 150, "エラー", "メニューパッドエラー" ); } Lib_chrdisp( 30, 29, "                " ); Lib_chrdisp( 30, 30, "                " ); Lib_erase_menu( wPad_level ); /* メニューパッドを消す */ Lib_view_close( wPad_level ); /* パッドのクローズ */ /* パッド表示文字数の設定 */ Lib_set_pad_maxstring( 10 ); /* quitフィールドの初期化 */ Lib_set_pad_default_quit_field( ); return( wRtn ); } /**************************************************************/ /**** 拡張子変更パラダイム ****/ /**************************************************************/ void fnPrdm_form1( wTiming, n, val ) int wTiming; int n; PARADIGM val[]; { char baStr[64]; if( 0 == val[0].int_type ) { /* EXECフィールドとCANCフィールドの初期化 */ Lib_set_pad_execute_field( "YES", "は い" ); Lib_set_pad_cancel_field( "N O", "いいえ" ); Lib_sprintf( baStr, "高分解能\画像の拡張子は %3s です", temp_fkind ); Lib_chrdisp( 30, 29, baStr ); Lib_move_cursor( 350, 220 ); Lib_sprintf( baStr, "拡張子は %3s です。変更しますか?", "IMG" ); if( PAD_EXECUTE == Lib_display_message2( 80, 200, "確 認", baStr ) ) { strcpy( temp_fkind, " " ); Lib_get_string_by_keyboad( 70, 200, 3, temp_fkind ); } else strcpy( temp_fkind, "IMG" ); Lib_sprintf( baStr, "高分解能\画像の拡張子は %3s です", temp_fkind ); Lib_chrdisp( 30, 29, baStr ); Lib_set_pad_default_execute_field( ); Lib_set_pad_default_cancel_field( ); } else if( 1 == val[0].int_type ) { Lib_chrdisp( 30, 29, "高分解能\画像の拡張子は BMP です" ); } } /**************************************************************/ /**** 拡張子変更パラダイム ****/ /**************************************************************/ void fnPrdm_form2( wTiming, n, val ) int wTiming; int n; PARADIGM val[]; { char baStr[64]; if( 0 == val[0].int_type ) { Lib_set_pad_execute_field( "YES", "は い" ); Lib_set_pad_cancel_field( "N O", "いいえ" ); Lib_sprintf( baStr, "512*480画像の拡張子は %3s です", temp_fkind2 ); Lib_chrdisp( 30, 30, baStr ); Lib_move_cursor( 350, 220 ); Lib_sprintf( baStr, "拡張子は %3s です。変更しますか?", "IMG" ); if( PAD_EXECUTE == Lib_display_message2( 80, 200, "確 認", baStr ) ) { strcpy( temp_fkind2, " " ); Lib_get_string_by_keyboad( 70, 200, 3, temp_fkind2 ); } else strcpy( temp_fkind2, "IMG" ); Lib_sprintf( baStr, "512*480画像の拡張子は %3s です", temp_fkind2 ); Lib_chrdisp( 30, 30, baStr ); Lib_set_pad_default_execute_field( ); Lib_set_pad_default_cancel_field( ); } else if( 1 == val[0].int_type ) { Lib_chrdisp( 30, 30, "512*480画像の拡張子は BMP です" ); } } /**************************************************************/ /**** 起動時のロード ****/ /**************************************************************/ int fnStart_load( tFile_name ) FILE_NAME *tFile_name; /* ファイル名称 */ { int i; int w, h; /* キーサイズ */ int x, y; /* カーソル位置 */ int wFlag, wKey; /* フラグ */ char baDisp_buff[64]; /* 表示用バッファ */ char baFile_name[64]; /* ファイル名称 */ char *bpGraymem_addr; /* グレイメモリアドレス */ unsigned long ulFile_size; /* ファイルサイズ */ FILE *fd; /* ファイルポインタ */ /***** PCカードに保存画像が有れば、それをロードすべきか聞く *****/ /***** 必要であればSTORAGE上にロードする *****/ waStore_index[0] = NON_PICTURE; for( wFlag = 0, i = 1; i < wMax_image_count; i++ ) { waStore_index[i] = NON_PICTURE; /* ファイル名 */ if ( 0 == tFile_name->baKind[0] ) Lib_sprintf( baFile_name, "\\FS0\\%s%01X", tFile_name->baID, i ); else Lib_sprintf( baFile_name, "\\FS0\\%s%01X.%s", tFile_name->baID, i, tFile_name->baKind ); /* ファイルが存在するか確認・存在したら開く */ if( ( FILE * )NULL != ( fd = Lib_fopen( baFile_name, "R" ) ) ) { ulFile_size = Lib_fsize( fd ); Lib_fclose( fd ); if( 0 == wFlag ) { Lib_chrdisp( 20, 10, "FS0には、過去にセーブしたと思われる" ); if ( 0 == tFile_name->baKind[0] ) Lib_sprintf( baDisp_buff, "画像データファイル( %sx )が", tFile_name->baID ); else Lib_sprintf( baDisp_buff, "画像データファイル( %sx.%s )が", tFile_name->baID, tFile_name->baKind ); Lib_chrdisp( 20, 11, baDisp_buff ); Lib_chrdisp( 20, 12, "存在しています。" ); Lib_chrdisp( 20, 13, "このファイルをロードしますか?" ); Lib_get_key_size( 8, &w, &h ); Lib_display_key( 180, 230, " はい ", 1 ); Lib_display_key( 210 + w, 230, " いいえ ", 1 ); for( ; ; ) { if( CURSOR_EXECUTE == Lib_get_current_position( &x, &y ) ) { if( 180 <= x && x <= 180 + w && 230 <= y && y <= 230 + h ) { Lib_display_key( 180, 230, " はい ", 2 ); wKey = 1; Lib_memory_clear( CHAR_PLANE ); break; } if( 210 + w <= x && x <= 210 + w * 2 && 230 <= y && y <= 230 + h ) { Lib_display_key( 210 + w, 230, " いいえ ", 2 ); wKey = 0; /* Lib_freerun(); */ Lib_memory_clear( CHAR_PLANE ); break; } } } wFlag = 1; if( 0 == wKey ) break; /* ロードしないならそのまま抜ける */ } /* 保存画像のロード */ bpGraymem_addr = Lib_adrs_gray_memory( i ); Lib_sprintf( baDisp_buff, "現在[%s]をロード中・・・・・", &baFile_name[5] ); Lib_chrdisp( 15, 13, baDisp_buff ); /* ビットマップの場合 */ if( 1 == tFile_name->wBmp ) { if( 0 != fnLoadBmp( i, baFile_name, ulFile_size ) ) { Lib_memory_clear( CHAR_PLANE ); Lib_sprintf( baDisp_buff, "%sをロード中にエラー発生!", &baFile_name[5] ); Lib_invdisp( 20, 13, baDisp_buff ); Lib_chrdisp( 20, 14, "STORAGEへのロードは中止します。" ); for( Lib_strtclk(); Lib_readclk() < 500; ) ; break; } else waStore_index[i] = LOAD_PICTURE; } /* それ以外のファイル */ else { if( GRAY_MEM_SIZE == ulFile_size ) { if( GRAY_MEM_SIZE != Lib_fload( baFile_name, bpGraymem_addr, GRAY_MEM_SIZE ) ) { Lib_memory_clear( CHAR_PLANE ); Lib_sprintf( baDisp_buff, "%sをロード中にエラー発生!", &baFile_name[5] ); Lib_invdisp( 20, 13, baDisp_buff ); Lib_chrdisp( 20, 14, "STORAGEへのロードは中止します。" ); for( Lib_strtclk(); Lib_readclk() < 500; ) ; break; } else waStore_index[i] = LOAD_PICTURE; } } } } Lib_memory_clear( LINE_PLANE | CHAR_PLANE ); return( 0 ); } /**************************************************************/ /**** 終了項目 ****/ /**************************************************************/ void fnEnd( wCamera ) int wCamera; { int i; int wRtn; /* グレイメモリを開放 */ for( i = wMax_image_count; 0 < i; i-- ) Lib_free_gray_memory( i ); /* 高分解能カメラの終了 */ if( 9 != wCamera ) wRtn = Lib_high_res_finish( ); else Lib_ExtraCameraFinish( ); /* 高分解能モードの終了 */ Lib_memory_clear( LINE_PLANE | CHAR_PLANE | GRAY_PLANE ); Lib_freerun( ); } /**************************************************************/ /**** ファイルの削除 ****/ /**************************************************************/ void fnDelete( void ) { Lib_system_process( FILE_MENU ); } /**************************************************************/ /**** 画像の取り込み ****/ /**************************************************************/ void fnInput( void ) { char baDisp_buff[10]; /* 文字列バッファ */ int i; int w, h, ew, eh, fw, fh; /* キーサイズ */ int x, y; /* カーソル位置 */ int dx, dy; /* 画面サイズ */ int s_xpos=0, s_ypos=0; int wCursor_rtn; int ID; /* shelter_planeのID */ /* 画面サイズ */ dx = Lib_get_dx_size( ); dy = Lib_get_dy_size( ); /* 切り出しウィンドウ範囲 */ Lib_set_extract_window( 0, 0, dx - 1, dy - 1 ); /* 画面クリア */ Lib_memory_clear( LINE_PLANE | CHAR_PLANE ); /* タイトル表示 */ Lib_chrdisp( 13, 1, "★★★ 画像の取り込み 及び 蓄積 ★★★" ); /* キーサイズ取得 */ Lib_get_key_size( 8, &w, &h ); /* 取り込み可能面数分のキーを表示 */ for( i = 1; i < wMax_image_count; i++ ) { switch( waStore_index[i] ) { case NON_PICTURE: Lib_sprintf( baDisp_buff, "○画像%02d", i ); break; case LOAD_PICTURE: Lib_sprintf( baDisp_buff, "◆画像%02d", i ); break; case CAMERA_PICTURE:Lib_sprintf( baDisp_buff, "●画像%02d", i ); break; } Lib_display_key( dx-w-1, h * (i-1), baDisp_buff, 1 ); } /* 終了キー表示 */ Lib_get_key_size( 4, &ew, &eh ); Lib_display_key( 0, 0, "終了", 1 ); /* フリーランキーの表示 */ Lib_get_key_size( 8, &fw, &fh ); Lib_display_key( dx-fw-1, fh * 17, " フリーラン ", 1 ); Lib_look_current_position( &x, &y ); for( ;; ) { /* 取り込み作業 */ wCursor_rtn = Lib_see_current_position( &x, &y ); if ( s_xpos != x || s_ypos != y ) { /* マウス表示位置移動 */ Lib_move_cursor( x, y ); s_xpos = x; s_ypos = y; } if( CURSOR_EXECUTE == wCursor_rtn ) { if( dx-w-1 <= x && x <= dx-1 && 0 <= y && y <= h * ( wMax_image_count - 1 ) ) { /* カーソル位置が何処のキー上にあるかチェック */ for( i = 1; i < wMax_image_count; i++ ) if( (i-1) * h <= y && y <= (i-1) * h + h ) break; /* その位置のキー表示をプッシュ、及び蓄積中状態にする */ Lib_sprintf( baDisp_buff, "●画像%02d", i ); Lib_display_key( dx-w-1, h * (i-1), baDisp_buff, 2 ); /* 指標テーブルを蓄積中にする */ waStore_index[i] = CAMERA_PICTURE; /* 画像凍結、及び蓄積 */ Lib_high_res_freeze( GRAY_PLANE, NOT_TRANSMIT ); Lib_ex_video_transmit( 0, GRAY_PLANE, REDUCE_MODE ); /* 入力画像をキーで指標する画像メモリNo.へ複写 */ Lib_gray_memory_move( INPUT_MEMORY, i, 0xff ); /* 画像凍結解除 */ } if( 0 <= x && x <= ew && 0 <= y && y <= eh ) { Lib_display_key( 0, 0, "終了", 2 ); break; } if( dx-fw-1 <= x && x <= dx-1 && fh*17 < y && y <= fh*18 ) { ID = Lib_shelter_plane( 0, 0, dx-1, dy-1, CHAR_PLANE ); fnHigh_res_freerun( ); Lib_memory_clear( GRAY_PLANE ); Lib_recover_plane( ID ); } } } Lib_memory_clear( LINE_PLANE | CHAR_PLANE | GRAY_PLANE ); } /*************************************************************************** ** 高分解能画像フリーラン ** ***************************************************************************/ void fnHigh_res_freerun( ) { int wCursor_rtn = 0; /* カーソルの戻り値 */ int wDisp_mode = REDUCE_MODE; /* 縮小画像 */ int x, y; /* カーソル位置 */ int xs, ys, xe, ye; /* 切出し表示位置 */ int s_xpos = 0, s_ypos = 0; int dx, dy; dx = Lib_get_dx_size( ); dy = Lib_get_dy_size( ); /* 初期切出し位置 */ xs = 0; ys = 0; xe = dx-1, ye = dy-1; Lib_set_extract_window( xs, ys, xe, ye ); /* カーソルの初期化 */ Lib_look_current_position( &x, &y ); s_xpos = x; s_ypos = y; if( REDUCE_MODE == wDisp_mode ) Lib_chrdisp( 44, 28, "縮小画像  " ); else Lib_chrdisp( 44, 28, "切り出し画像" ); Lib_chrdisp( 5, 27, "EXECUTEキーでフリーラン終了" ); Lib_chrdisp( 5, 28, "CANCELキーでモード切り替え" ); Lib_time_delay( 40 ); while( CURSOR_EXECUTE != wCursor_rtn ) { /* 画像取り込み */ Lib_high_res_freeze( GRAY_PLANE, NOT_TRANSMIT ); Lib_ex_video_transmit( INPUT_MEMORY, GRAY_PLANE, wDisp_mode ); Lib_draw_cursor( x, y ); /* キャンセルキーが押された場合 */ if( CURSOR_CANCEL == wCursor_rtn ) { if( REDUCE_MODE == wDisp_mode ) { wDisp_mode = EXTRACT_MODE; Lib_chrdisp( 44, 28, "切り出し画像" ); Lib_box( 25, 0, 486, 19, SOLID_LINE ); Lib_box( 492, 25, 511, 454, SOLID_LINE ); Lib_box( 25, 459, 486, 479, SOLID_LINE ); Lib_box( 0, 25, 19, 454, SOLID_LINE ); Lib_chrdisp( 32, 1, "↑" ); Lib_chrdisp( 63, 15, "→" ); Lib_chrdisp( 32, 30, "↓" ); Lib_chrdisp( 1, 15, "←" ); } else { wDisp_mode = REDUCE_MODE; Lib_chrdisp( 44, 28, "縮小画像  " ); Lib_box( 25, 0, 486, 19, BLACK_LINE ); Lib_box( 492, 25, 511, 454, BLACK_LINE ); Lib_box( 25, 459, 486, 479, BLACK_LINE ); Lib_box( 0, 25, 19, 454, BLACK_LINE ); Lib_chrdisp( 32, 1, " " ); Lib_chrdisp( 63, 15, " " ); Lib_chrdisp( 32, 30, " " ); Lib_chrdisp( 1, 15, " " ); } } /* カーソルのチェック */ wCursor_rtn = Lib_see_current_position_real( &x, &y ); if ( s_xpos != x || s_ypos != y ) { if( x > 505 ) x = 504; if( y > 474 ) y = 473; /* マウス表示位置移動 */ Lib_move_cursor( x, y ); s_xpos = x; s_ypos = y; } /* 切り出し画像で、上下左右にカーソルがあれば切り出し領域を変更 */ if( EXTRACT_MODE == wDisp_mode ) { if( 25 <= x && x <= 486 && 0 <= y && y <= 19 ) { if( ys != 0 && ys - MOVE_SIZE <= 0 ) { ys = 0; ye = 479; Lib_set_extract_window( xs, ys, xe, ye ); } else if( ys != 0 && ys - MOVE_SIZE > 0 ) { ys = ys - MOVE_SIZE; ye = ye - MOVE_SIZE; Lib_set_extract_window( xs, ys, xe, ye ); } } if( 492 <= x && x <= 511 && 25 <= y && y <= 459 ) { if( xe != FX_SIZE - 1 && xe + MOVE_SIZE > FX_SIZE - 1 ) { xs = FX_SIZE - 513; xe = FX_SIZE - 1; Lib_set_extract_window( xs, ys, xe, ye ); } else if( xe != FX_SIZE - 1 && xe + MOVE_SIZE < FX_SIZE - 1 ) { xs = xs + MOVE_SIZE; xe = xe + MOVE_SIZE; Lib_set_extract_window( xs, ys, xe, ye ); } } if( 25 <= x && x <= 486 && 459 <= y && y < 479 ) { if( ye != FY_SIZE - 1 && ye + MOVE_SIZE >= FY_SIZE ) { ys = FY_SIZE - 481; ye = FY_SIZE - 1; Lib_set_extract_window( xs, ys, xe, ye ); } else if( ye != FY_SIZE - 1 && ye + MOVE_SIZE < FY_SIZE - 1 ) { ys = ys + MOVE_SIZE; ye = ye + MOVE_SIZE; Lib_set_extract_window( xs, ys, xe, ye ); } } if( 0 <= x && x <= 19 && 25 <= y && y < 454 ) { if( xs != 0 && xs - MOVE_SIZE < 0 ) { xs = 0; xe = 511; Lib_set_extract_window( xs, ys, xe, ye ); } else if( xs != 0 && xs - MOVE_SIZE > 0 ) { xs = xs - MOVE_SIZE; xe = xe - MOVE_SIZE; Lib_set_extract_window( xs, ys, xe, ye ); } } } } Lib_memory_clear( CHAR_PLANE | LINE_PLANE ); Lib_set_extract_window( 0, 0, 511, 479 ); } /**************************************************************/ /**** 蓄積画像の表示 ****/ /**************************************************************/ void fnDisplay( tFile_name ) FILE_NAME *tFile_name; { char baDisp_buff[10]; /* 表示用バッファ */ int i; int w, h, ew, eh; /* キーサイズ */ int x, y; /* カーソル位置 */ int dx, dy; /* 画面サイズ */ int wFrame = 0; /* 画像番号 */ int xs, ys, xe, ye; /* 切り出し位置 */ int ID2; /* shelter_plane */ /* 画面サイズ取得 */ dx = Lib_get_dx_size( ); dy = Lib_get_dy_size( ); /* 切り出し初期位置 */ xs = 0; ys = 0; xe = dx - 1; ye = dy - 1; /* 画像凍結 */ Lib_set_extract_window( xs, ys, xe, ye ); /* 画面クリア */ Lib_memory_clear( CHAR_PLANE ); /* タイトル表示 */ Lib_chrdisp( 13, 1, "★★★ 蓄積画像の表\示 ★★★" ); /* キーサイズ取得 */ Lib_get_key_size( 8, &w, &h ); /* 表示可能面数分のキーを表示 */ for( i = 1; i < wMax_image_count; i++ ) { switch( waStore_index[i] ) { case NON_PICTURE: Lib_sprintf( baDisp_buff, "○画像%02d", i ); break; case LOAD_PICTURE: Lib_sprintf( baDisp_buff, "◆画像%02d", i ); break; case CAMERA_PICTURE:Lib_sprintf( baDisp_buff, "●画像%02d", i ); break; } Lib_display_key( dx-w-1, h * (i-1), baDisp_buff, 1 ); } i = 0; /* 終了キー表示 */ Lib_get_key_size( 4, &ew, &eh ); Lib_display_key( 0, 0, "終了", 1 ); /* 表示作業 */ for( ; ; ) { if( CURSOR_EXECUTE == Lib_get_current_position( &x, &y ) ) { if( dx-w-1 <= x && x <= dx-1 && 0 <= y && y <= h * ( wMax_image_count - 1 ) ) { /* カーソル位置が何処のキー上にあるかチェック */ for( i = 1; i < wMax_image_count; i++ ) if( (i-1) * h <= y && y <= (i-1) * h + h ) break; /* その位置のキー表示をプッシュ状態にする */ switch( waStore_index[i] ) { case NON_PICTURE: Lib_sprintf( baDisp_buff, "○画像%02d", i ); break; case LOAD_PICTURE: Lib_sprintf( baDisp_buff, "◆画像%02d", i ); break; case CAMERA_PICTURE:Lib_sprintf( baDisp_buff, "●画像%02d", i ); break; } Lib_display_key( dx-w-1, h * (i-1), baDisp_buff, 2 ); /* 表示 */ Lib_ex_video_transmit( i, GRAY_PLANE, REDUCE_MODE ); if( 0 == wFrame ) { Lib_display_key( dx-w-1, dy - h, "切り出し", 1 ); Lib_display_key( dx-1-w*2, dy - h, "切出位置", 1 ); } wFrame = i; } if( 0 != wFrame ) { if( dx-w-1 <= x && x < dx-1 && dy - h <= y && y < dy ) { Lib_display_key( dx-w-1, dy - h, "切り出し", 2 ); ID2 = Lib_shelter_plane( 0, 0, dx-1, dy-1, CHAR_PLANE ); if( -1 == fnExpend( wFrame, &xs, &ys, &xe, &ye, tFile_name ) ) { Lib_recover_plane( ID2 ); break; } else { Lib_ex_video_transmit( i, GRAY_PLANE, REDUCE_MODE ); Lib_recover_plane( ID2 ); } } if( dx-1-w*2 <= x && x < dx-1-w && dy - h <= y && y < dy ) { Lib_display_key( dx-1-w*2, dy - h, "切出位置", 2 ); fnEx_position( &xs, &ys, &xe, &ye ); } } if( 0 <= x && x <= ew && 0 <= y && y <= eh ) { Lib_display_key( 511 - ew, 0, "終了", 2 ); break; } } } Lib_memory_clear( LINE_PLANE | CHAR_PLANE ); Lib_memory_clear( GRAY_PLANE ); } /**************************************************************/ /**** 拡大表示 ****/ /**************************************************************/ int fnExpend( wFrame, xs, ys, xe, ye, tFile_name ) int wFrame; /* 画像番号 */ int *xs, *ys, *xe, *ye; /* 切り出し位置 */ FILE_NAME *tFile_name; /* ファイル名称 */ { int w, h, we, he, wf, hf; /* キーサイズ */ int x, y, wRtn; /* カーソル位置 */ int fx, fy; /* 画像サイズ */ int dx, dy; /* 画面サイズ */ int ID; /* shelter_plane用ID */ wRtn = 0; /* 画面サイズ */ dx = Lib_get_dx_size( ); dy = Lib_get_dy_size( ); /* キーサイズ取得 */ Lib_get_key_size( 8, &w, &h ); Lib_get_key_size( 4, &we, &he ); Lib_get_key_size( 2, &wf, &hf ); /* メニュー表示 */ Lib_display_key( we, 0, "戻る", 1 ); Lib_display_key( 0, 0, "終了", 1 ); Lib_display_key( dx-1-w*2, 0, "名称変更", 1 ); Lib_display_key( dx-w-1, 0, " セーブ ", 1 ); Lib_display_key( dx-1-wf*2, dy-1-hf, "→", 1 ); Lib_display_key( dx-1-wf*3, dy-1-hf, "←", 1 ); Lib_display_key( dx-1-wf, dy-1-hf*2, "↓", 1 ); Lib_display_key( dx-1-wf, dy-1-hf*3, "↑", 1 ); /* 画像サイズ */ fx = FX_SIZE; fy = FY_SIZE; /* 切り出し画像表示 */ Lib_set_extract_window( *xs, *ys, *xe, *ye ); Lib_ex_video_transmit( wFrame, GRAY_PLANE, EXTRACT_MODE ); for( ;; ) { if( CURSOR_EXECUTE == Lib_get_current_position( &x, &y ) ) { if( dx-1-w*2 <= x && x < dx-1-w && 0 <= y && y < h ) { Lib_display_key( dx-1-w*2, 0, "名称変更", 2 ); ID = Lib_shelter_plane( 0, 0, 511, 479, CHAR_PLANE ); fnChenge_name( tFile_name ); Lib_recover_plane( ID ); wRtn = 0; } if( dx-w-1 <= x && x < dx && 0 <= y && y < h ) { Lib_display_key( dx-w-1, 0, " セーブ ", 2 ); fnSmall_save( wFrame, *xs, *ys, *xe, *ye, tFile_name ); wRtn = 0; } if( we <= x && x < we*2 && 0 <= y && y < h ) { Lib_display_key( we, 0, "戻る", 2 ); wRtn = -2; break; } if( 0 <= x && x < we && 0 <= y && y < h ) { Lib_display_key( 0, 0, "終了", 2 ); wRtn = -1; break; } if( 511-wf*2 <= x && x < 511-wf && 479-hf <= y && y <= 479 ) { Lib_display_key( 511-wf*2, 479-hf, "→", 2 ); if( *xe != fx-1 && *xe + MOVE_SIZE >= fx ) { *xs = fx - 513; *xe = fx - 1; Lib_set_extract_window( *xs, *ys, *xe, *ye ); Lib_ex_video_transmit( wFrame, GRAY_PLANE, EXTRACT_MODE ); } else if( *xe != fx-1 && *xe + MOVE_SIZE < fx - 1 ) { *xs = *xs + MOVE_SIZE; *xe = *xe + MOVE_SIZE; Lib_set_extract_window( *xs, *ys, *xe, *ye ); Lib_ex_video_transmit( wFrame, GRAY_PLANE, EXTRACT_MODE ); } } if( 511-wf*3 <= x && x < 511-wf*2 && 479-hf <= y && y <= 479 ) { Lib_display_key( 511-wf*3, 479-hf, "←", 2 ); if( *xs != 0 && *xs - MOVE_SIZE < 0 ) { *xs = 0; *xe = 511; Lib_set_extract_window( *xs, *ys, *xe, *ye ); Lib_ex_video_transmit( wFrame, GRAY_PLANE, EXTRACT_MODE ); } else if( *xs != 0 && *xs - MOVE_SIZE > 0 ) { *xs = *xs - MOVE_SIZE; *xe = *xe - MOVE_SIZE; Lib_set_extract_window( *xs, *ys, *xe, *ye ); Lib_ex_video_transmit( wFrame, GRAY_PLANE, EXTRACT_MODE ); } } if( 511-wf <= x && x <= 511 && 479-hf*2 <= y && y < 479-hf ) { Lib_display_key( 511-wf, 479-hf*2, "↓", 2 ); if( *ye != fy - 1 && *ye + MOVE_SIZE >= fy ) { *ys = fy - 481; *ye = fy - 1; Lib_set_extract_window( *xs, *ys, *xe, *ye ); Lib_ex_video_transmit( wFrame, GRAY_PLANE, EXTRACT_MODE ); } else if( *ye != fy - 1 && *ye + MOVE_SIZE < fy - 1 ) { *ys = *ys + MOVE_SIZE; *ye = *ye + MOVE_SIZE; Lib_set_extract_window( *xs, *ys, *xe, *ye ); Lib_ex_video_transmit( wFrame, GRAY_PLANE, EXTRACT_MODE ); } } if( 511-wf <= x && x <= 511 && 479-hf*3 <= y && y < 479-hf*2 ) { Lib_display_key( 511-wf, 479-hf*3, "↑", 2 ); if( *ys != 0 && *ys - MOVE_SIZE < 0 ) { *ys = 0; *ye = 479; Lib_set_extract_window( *xs, *ys, *xe, *ye ); Lib_ex_video_transmit( wFrame, GRAY_PLANE, EXTRACT_MODE ); } else if( *ys != 0 && *ys - MOVE_SIZE > 0 ) { *ys = *ys - MOVE_SIZE; *ye = *ye - MOVE_SIZE; Lib_set_extract_window( *xs, *ys, *xe, *ye ); Lib_ex_video_transmit( wFrame, GRAY_PLANE, EXTRACT_MODE ); } } } } return( wRtn ); } /****************************************************************/ /**** 拡大位置変更                      ****/ /****************************************************************/ void fnEx_position( xs, ys, xe, ye ) int *xs; int *ys; int *xe; int *ye; { int ID; int x_min, y_min; int x_max, y_max; int x_box_size, y_box_size; int x, y; int wRatio; wRatio = Lib_get_frame_ratio( ); x_min = 0; y_min = 0; x_max = FX_SIZE / wRatio; y_max = FY_SIZE / wRatio; x_box_size = FX_SIZE2 / wRatio; y_box_size = FY_SIZE2 / wRatio; if( -1 == ( ID = Lib_shelter_plane( 0, 0, 511, 479, CHAR_PLANE )) ) Lib_display_message( 150, 150, "エラー", "メモリ不足で実行できません" ); else { Lib_look_current_position( &x, &y ); x = *xs / wRatio; y = *ys / wRatio; while( CURSOR_EXECUTE != Lib_see_current_position( &x, &y ) ) { if( x + x_box_size > x_max ) x = x_max - x_box_size; if( y + y_box_size > y_max ) y = y_max - y_box_size; if( x < x_min ) x = x_min; if( y < y_min ) y = y_min; /* カーソルの移動 */ Lib_move_cursor( x, y ); /* カーソルの描画 */ Lib_draw_cursor( x, y ); Lib_box( x, y, x+x_box_size-1, y+y_box_size-1, SOLID_LINE ); Lib_time_delay( 10 ); Lib_box( x, y, x+x_box_size-1, y+y_box_size-1, BLACK_LINE ); } *xs = x * wRatio; *ys = y * wRatio; *xe = *xs + 511; *ye = *ys + 479; Lib_memory_clear( LINE_PLANE | CHAR_PLANE ); Lib_recover_plane( ID ); } } /****************************************************************/ /**** 切り出し画像のセーブ ****/ /****************************************************************/ void fnSmall_save( wFrame, xs, ys, xe, ye, tFile_name ) int wFrame; /* 画像メモリ番号 */ int xs, ys, xe, ye; /* 保存位置 */ FILE_NAME *tFile_name; /* 保存名称 */ { unsigned char *ubpGray_s; unsigned char *ubpBu; unsigned char *ubpGray_h; unsigned char *ubpTop; int fx, fy; int i, j; char baFile_name[128]; fx = FX_SIZE; fy = FY_SIZE; if( NULL == ( ubpGray_s = ( unsigned char * )Lib_mlalloc( GRAY_MEM_SIZE_SMALL )) ) Lib_display_message( 150, 150, "エラー", "メモリ不足です" ); else { /* 先頭アドレスのバックアップ */ ubpBu = ubpGray_s; /* グレイメモリの先頭アドレスを取得 */ ubpGray_h = ( unsigned char * )Lib_adrs_gray_memory( wFrame ); for( i = 0; i < 480; i++ ) { ubpTop = ubpGray_h + fx * ( ys + i ) + xs; for( j = 0; j < 512; j++ ) { *ubpBu = *( ubpTop + j ); ubpBu++; } } /* セーブ先 */ if ( 0 == tFile_name->baKind2[0] ) Lib_sprintf( baFile_name, "\\FS0\\%s%01X", tFile_name->baID2, wFrame ); else Lib_sprintf( baFile_name, "\\FS0\\%s%01X.%s", tFile_name->baID2, wFrame, tFile_name->baKind2 ); /************************/ /* IMGファイルの保存 */ /************************/ if( 0 == tFile_name->wBmp2 ) { /* セーブ中メッセージの表示 */ Lib_chrdisp( 20, 15, "現在、画像をセーブ中・・・・・" ); if( 0 == Lib_fsave( baFile_name, ( char * )ubpGray_s, GRAY_MEM_SIZE_SMALL ) ) { Lib_chrdisp( 20, 15, "セーブ中にエラー発生!" ); Lib_chrdisp( 20, 16, "これ以上セーブは続行できません。 " ); Lib_chrdisp( 20, 17, "PCカードの残容量を調べてください。" ); for( Lib_strtclk(); Lib_readclk() < 700; ) ; Lib_chrdisp( 20, 16, " " ); Lib_chrdisp( 20, 17, " " ); } else { Lib_chrdisp( 20, 15, "セーブ完了            " ); Lib_time_delay( 500 ); } Lib_chrdisp( 20, 15, " " ); } /************************/ /* BMPファイルの保存 */ /************************/ else { /* セーブ中メッセージの表示 */ Lib_chrdisp( 20, 15, "現在、画像をセーブ中・・・・・" ); /* BMPセーブ実行 */ if( 0 != fnSaveBmp( ubpGray_s, 0, 0, FX_SIZE2, FY_SIZE2, baFile_name ) ) { Lib_chrdisp( 20, 15, "セーブ中にエラー発生!" ); Lib_chrdisp( 20, 16, "これ以上セーブは続行できません。 " ); Lib_chrdisp( 20, 17, "PCカードの残容量を調べてください。" ); for( Lib_strtclk(); Lib_readclk() < 700; ) ; Lib_chrdisp( 20, 16, " " ); Lib_chrdisp( 20, 17, " " ); } else { Lib_chrdisp( 20, 15, "セーブ完了            " ); Lib_time_delay( 500 ); } Lib_chrdisp( 20, 15, " " ); } Lib_lfree( (char *)ubpGray_s ); } } /**************************************************************/ /**** PCカードへのセーブ(サブルーチン) **********************/ /**************************************************************/ void fnSave( tFile_name ) FILE_NAME *tFile_name; { char baFile_name[30]; /* ファイル名称 */ char baDisp_buff[10]; /* 表示用バッファ */ char *bpGraymem_addr; /* グレイメモリアドレス */ int i; int w, h, ew, eh; /* キーサイズ */ int x, y; /* カーソル位置 */ int fx, fy; /* 画像サイズ */ int dx, dy; /* 画面サイズ */ int wBmp_Error_code; /* エラーコード戻り値 */ int ID; /* shelter_plane用ID */ unsigned char *adrs; /* アドレス */ /* 画像メモリサイズの取得 */ fx =/* Lib_get_fx_size( )*/FX_SIZE; fy =/* Lib_get_fy_size( )*/FY_SIZE; dx = Lib_get_dx_size( ); dy = Lib_get_dy_size( ); /* 画面クリア */ Lib_memory_clear( GRAY_PLANE | LINE_PLANE | CHAR_PLANE ); /* タイトル表示 */ Lib_chrdisp( 13, 1, "★★★ 蓄積画像のセーブ ★★★" ); /* キーサイズ取得 */ Lib_get_key_size( 8, &w, &h ); /* 表示可能面数分のキーを表示 */ for( i = 1; i < wMax_image_count; i++ ) { switch( waStore_index[i] ) { case NON_PICTURE: Lib_sprintf( baDisp_buff, "○画像%02d", i ); break; case LOAD_PICTURE: Lib_sprintf( baDisp_buff, "◆画像%02d", i ); break; case CAMERA_PICTURE: Lib_sprintf( baDisp_buff, "●画像%02d", i ); break; } Lib_display_key( dx-w-1, h * (i-1), baDisp_buff, 1 ); } /* セーブキー表示 */ Lib_display_key( dx-w, h * 16, "一括セーブ", 1 ); /* 終了キー表示 */ Lib_get_key_size( 4, &ew, &eh ); Lib_display_key( 0, 0, "終了", 1 ); /* 名称変更キー表示 */ Lib_display_key( dx-w-1, h * 18, "名称変更", 1 ); /* 表示作業 */ for( ; ; ) { if( CURSOR_EXECUTE == Lib_get_current_position( &x, &y ) ) { if( dx-w-1 <= x && x <= dx-1 && 0 <= y && y <= h * ( wMax_image_count - 1 ) ) { /* カーソル位置が何処のキー上にあるかチェック */ for( i = 1; i < wMax_image_count; i++ ) if( (i-1) * h <= y && y <= (i-1) * h + h ) break; /* その位置のキー表示をプッシュ状態にする */ switch( waStore_index[i] ) { case NON_PICTURE: Lib_sprintf( baDisp_buff, "○画像%02d", i ); break; case LOAD_PICTURE: Lib_sprintf( baDisp_buff, "◆画像%02d", i ); break; case CAMERA_PICTURE:Lib_sprintf( baDisp_buff, "●画像%02d", i ); break; } /* カーソル押された状態 */ Lib_display_key( dx-w-1, h * (i-1), baDisp_buff, 2 ); /* 画像が存在するか確認 */ if( NON_PICTURE != waStore_index[i] ) { /* セーブ画像の表示 */ Lib_ex_video_transmit( i, GRAY_PLANE, REDUCE_MODE ); /* セーブ先 */ if ( 0 == tFile_name->baKind[0] ) Lib_sprintf( baFile_name, "\\FS0\\%s%01X", tFile_name->baID, i ); else Lib_sprintf( baFile_name, "\\FS0\\%s%01X.%s", tFile_name->baID, i, tFile_name->baKind ); /************************/ /* BMPファイルの保存 */ /************************/ if( 1 == tFile_name->wBmp ) { /* セーブ中メッセージの表示 */ Lib_chrdisp( 20, 15, "現在[画像 ]をセーブ中・・・・・" ); Lib_sprintf( baDisp_buff, "%02d", i ); Lib_chrdisp( 30, 15, baDisp_buff ); /* BMPセーブ実行 */ adrs = ( unsigned char * )Lib_adrs_gray_memory( i ); wBmp_Error_code = fnSaveBmp( adrs, 0, 0, fx, fy, baFile_name ); if( 0 != wBmp_Error_code ) { Lib_memory_clear( GRAY_PLANE ); Lib_chrdisp( 20, 15, "[画像 ]をセーブ中にエラー発生!" ); Lib_chrdisp( 26, 15, baDisp_buff ); if( -1 == wBmp_Error_code ) { Lib_chrdisp( 20, 16, "メモリ不足が発生しました。一度終了し" ); Lib_chrdisp( 20, 17, "プログラム実行時にグレイメモリ枚数を" ); Lib_chrdisp( 20, 18, "減らしてください" ); } else { Lib_chrdisp( 20, 16, "これ以上セーブは続行できません。 " ); Lib_chrdisp( 20, 17, "PCカードの残容量を調べてください。" ); } for( Lib_strtclk(); Lib_readclk() < 700; ) ; Lib_chrdisp( 20, 15, " " ); Lib_chrdisp( 20, 16, " " ); Lib_chrdisp( 20, 17, " " ); Lib_chrdisp( 20, 18, " " ); switch( waStore_index[i] ) { case NON_PICTURE: Lib_sprintf( baDisp_buff, "○画像%02d", i ); break; case LOAD_PICTURE: Lib_sprintf( baDisp_buff, "◆画像%02d", i ); break; case CAMERA_PICTURE:Lib_sprintf( baDisp_buff, "●画像%02d", i ); break; } Lib_display_key( dx-w-1, h * (i-1), baDisp_buff, 1 ); } else { Lib_sprintf( baDisp_buff, "○画像%02d", i ); Lib_display_key( dx-w-1, h * (i-1), baDisp_buff, 1 ); waStore_index[i] = NON_PICTURE; Lib_chrdisp( 20, 15, "セーブ完了            " ); Lib_time_delay( 700 ); Lib_chrdisp( 20, 15, "                 " ); } } /************************/ /* IMGファイルの保存 */ /************************/ else { /* セーブ中メッセージの表示 */ Lib_chrdisp( 20, 15, "現在[画像 ]をセーブ中・・・・・" ); Lib_sprintf( baDisp_buff, "%02d", i ); Lib_chrdisp( 30, 15, baDisp_buff ); /* アドレスの取得 */ bpGraymem_addr = Lib_adrs_gray_memory( i ); /* セーブ実行 */ if( GRAY_MEM_SIZE != Lib_fsave( baFile_name, bpGraymem_addr, GRAY_MEM_SIZE ) ) { Lib_memory_clear( GRAY_PLANE ); Lib_chrdisp( 20, 15, "[画像 ]をセーブ中にエラー発生!" ); Lib_chrdisp( 26, 15, baDisp_buff ); Lib_chrdisp( 20, 16, "これ以上セーブは続行できません。 " ); Lib_chrdisp( 20, 17, "PCカードの残容量を調べてください。" ); for( Lib_strtclk(); Lib_readclk() < 700; ) ; Lib_chrdisp( 20, 16, " " ); Lib_chrdisp( 20, 17, " " ); switch( waStore_index[i] ) { case NON_PICTURE: Lib_sprintf( baDisp_buff, "○画像%02d", i ); break; case LOAD_PICTURE: Lib_sprintf( baDisp_buff, "◆画像%02d", i ); break; case CAMERA_PICTURE:Lib_sprintf( baDisp_buff, "●画像%02d", i ); break; } Lib_display_key( dx-w-1, h * (i-1), baDisp_buff, 1 ); } else { Lib_sprintf( baDisp_buff, "○画像%02d", i ); Lib_display_key( dx-w-1, h * (i-1), baDisp_buff, 1 ); waStore_index[i] = NON_PICTURE; Lib_chrdisp( 20, 15, "セーブ完了            " ); Lib_time_delay( 700 ); Lib_chrdisp( 20, 15, "                 " ); } } Lib_chrdisp( 20, 15, " " ); Lib_memory_clear( GRAY_PLANE ); } } /***************************/ /* 一括セーブ */ /***************************/ if( dx-w-1 <= x && x <= dx-1 && h * 16 <= y && y <= h * 17 ) { Lib_display_key( dx-w-1, h * 16, "一括セーブ", 2 ); for( i = 1; i < wMax_image_count; i++ ) { if( CAMERA_PICTURE == waStore_index[i] || LOAD_PICTURE == waStore_index[i] ) { /* セーブ画像の表示 */ Lib_ex_video_transmit( i, GRAY_PLANE, REDUCE_MODE ); /* セーブ中メッセージの表示 */ Lib_chrdisp( 20, 15, "現在[画像 ]をセーブ中・・・・・" ); Lib_sprintf( baDisp_buff, "%02d", i ); Lib_chrdisp( 30, 15, baDisp_buff ); if( 0 == tFile_name->baKind ) Lib_sprintf( baFile_name, "\\FS0\\%s%01X", tFile_name->baID, i ); else Lib_sprintf( baFile_name, "\\FS0\\%s%01X.%s", tFile_name->baID, i, tFile_name->baKind ); /* BMP保存の場合 */ if( 1 == tFile_name->wBmp ) { /* BMPセーブ実行 */ adrs = ( unsigned char * )Lib_adrs_gray_memory( i ); if( 0 != fnSaveBmp( adrs, 0, 0, fx, fy, baFile_name ) ) { Lib_memory_clear( GRAY_PLANE ); Lib_chrdisp( 20, 15, "[画像 ]をセーブ中にエラー発生!" ); Lib_chrdisp( 26, 15, baDisp_buff ); Lib_chrdisp( 20, 16, "これ以上セーブは続行できません。 " ); Lib_chrdisp( 20, 17, "PCカードの残容量を調べてください。" ); for( Lib_strtclk(); Lib_readclk() < 700; ) ; Lib_chrdisp( 20, 16, " " ); Lib_chrdisp( 20, 17, " " ); Lib_sprintf( baDisp_buff, "●画像%02d", i ); Lib_display_key( dx-w-1, h * (i-1), baDisp_buff, 1 ); break; } else { Lib_sprintf( baDisp_buff, "○画像%02d", i ); /*Lib_gray_memory_cls( i );*/ Lib_display_key( dx-w-1, h * (i-1), baDisp_buff, 1 ); waStore_index[i] = NON_PICTURE; } } /* IMG保存の場合 */ else { /* セーブ */ bpGraymem_addr = Lib_adrs_gray_memory( i ); if( GRAY_MEM_SIZE != Lib_fsave( baFile_name, bpGraymem_addr, GRAY_MEM_SIZE ) ) { Lib_memory_clear( GRAY_PLANE ); Lib_chrdisp( 20, 15, "[画像 ]をセーブ中にエラー発生!" ); Lib_chrdisp( 26, 15, baDisp_buff ); Lib_chrdisp( 20, 16, "これ以上セーブは続行できません。 " ); Lib_chrdisp( 20, 17, "PCカードの残容量を調べてください。" ); for( Lib_strtclk(); Lib_readclk() < 700; ) ; Lib_chrdisp( 20, 16, " " ); Lib_chrdisp( 20, 17, " " ); Lib_sprintf( baDisp_buff, "●画像%02d", i ); Lib_display_key( dx-w-1, h * (i-1), baDisp_buff, 1 ); break; } else { Lib_sprintf( baDisp_buff, "○画像%02d", i ); /*Lib_gray_memory_cls( i );*/ Lib_display_key( dx-w-1, h * (i-1), baDisp_buff, 1 ); waStore_index[i] = NON_PICTURE; } } } } Lib_chrdisp( 20, 15, " " ); Lib_memory_clear( GRAY_PLANE ); } /* 名称変更の場合 */ if( dx-w-1 <= x && x <= dx-1 && h * 18 <= y && y <= h * 19 ) { Lib_display_key( dx-w-1, h * 18, "名称変更", 2 ); ID = Lib_shelter_plane( 0, 0, dx-1, dy-1, CHAR_PLANE ); fnChenge_name( tFile_name ); Lib_recover_plane( ID ); } /* 終了の場合 */ if( 0 <= x && x <= ew && 0 <= y && y <= eh ) { Lib_display_key( 0, 0, "終了", 2 ); break; } } } Lib_memory_clear( LINE_PLANE | CHAR_PLANE ); } /***************************************************************/ /* PCカード上に存在する画像保存ファイルをロード(サブルーチン)*/ /***************************************************************/ void fnLoad( tFile_name ) FILE_NAME *tFile_name; { char baDisp_buff[10]; /* 表示用バッファ */ int i, j, k; /* ループカウンタ */ int w, h, ew, eh; /* キーサイズ */ int x, y; /* カーソル位置 */ int dx, dy; /* 画面サイズ */ char baFile_path[256]; /* ファイルパス */ int wOp_rtn, wRtn, rtn, wSele_rtn; /* 戻り値 */ int wFile_N; /* ファイル数 */ int wRead, wWrite, wRandom; /* 保存タイプ */ int wQuit, wPage, wOpen_num; /* ページ番号 */ int wFile_count, wPoint, wMax; /* ファイルカウンタ */ unsigned long ulFile_size; /* ファイルサイズ */ char baFile_name[13]; /* ファイル名称 */ char *gray_adrs; /* グレイメモリアドレス */ FILE *fd; /* ファイルポインタ */ FILE_PARAM *tFile_param, *tParam_bu; /* ファイルパラメータ */ /* 画面クリア */ Lib_memory_clear( GRAY_PLANE | LINE_PLANE | CHAR_PLANE ); /* 画面サイズ取得 */ dx = Lib_get_dx_size( ); dy = Lib_get_dy_size( ); /* タイトル表示 */ Lib_chrdisp( 15, 1, "★★★ 画像のロード ★★★" ); /* キーサイズ取得 */ Lib_get_key_size( 8, &w, &h ); /* 表示可能面数分のキーを表示 */ for( i = 1; i < wMax_image_count; i++ ) { switch( waStore_index[i] ) { case NON_PICTURE: Lib_sprintf( baDisp_buff, "○画像%02d", i ); break; case LOAD_PICTURE: Lib_sprintf( baDisp_buff, "◆画像%02d", i ); break; case CAMERA_PICTURE:Lib_sprintf( baDisp_buff, "●画像%02d", i ); break; } Lib_display_key( dx-w-1, h * (i-1), baDisp_buff, 1 ); } /* 一括ロードキー表示 */ Lib_display_key( dx-w-1, h * 16, "一括ロード", 1 ); /* 終了キー表示 */ Lib_get_key_size( 4, &ew, &eh ); Lib_display_key( 0, 0, "終了", 1 ); /* 表示作業 */ for( ; ; ) { if( CURSOR_EXECUTE == Lib_get_current_position( &x, &y ) ) { if( dx-w-1 <= x && x <= dx-1 && 0 <= y && y <= h * ( wMax_image_count - 1 ) ) { /* カーソル位置が何処のキー上にあるかチェック */ for( i = 1; i < wMax_image_count; i++ ) if( (i-1) * h <= y && y <= (i-1) * h + h ) break; /* その位置のキー表示をプッシュ状態にする */ switch( waStore_index[i] ) { case NON_PICTURE: Lib_sprintf( baDisp_buff, "○画像%02d", i ); break; case LOAD_PICTURE: Lib_sprintf( baDisp_buff, "◆画像%02d", i ); break; case CAMERA_PICTURE:Lib_sprintf( baDisp_buff, "●画像%02d", i ); break; } /* カーソル押された状態 */ Lib_display_key( dx-w-1, h * (i-1), baDisp_buff, 2 ); /* 画面クリア */ Lib_memory_clear( GRAY_PLANE ); /* IMGかBMPを選択 */ wSele_rtn = fnSelect_img_or_bmp( ); /* FS0のファイル数を取得 */ wFile_N = Lib_get_reg_files( "FS0" ); wFile_count = 0; if( 1 == wSele_rtn || 2 == wSele_rtn ) { if( NULL == ( tFile_param = ( FILE_PARAM * )Lib_mlalloc( sizeof( FILE_PARAM ) * wFile_N ))) Lib_display_message( 150, 150, "エラー", "メモリ不足です" ); else { for( j = 0; j < wFile_N; j++ ) { /* ディレクトリの情報を得る */ Lib_fdir( "FS0", j, baFile_name, &ulFile_size, &wRead, &wWrite, &wRandom ); /* IMG形式が選択されたら */ if( 1 == wSele_rtn ) { /* サイズがGRAY_MEM_SIZEのファイルを探す */ if( GRAY_MEM_SIZE == ulFile_size ) { strcpy( tFile_param[wFile_count].baName, baFile_name ); tFile_param[wFile_count].ulSize = ulFile_size; wFile_count++; } } /* BMPファイルが選択されたら */ else if( 2 == wSele_rtn ) { for( k = 0; k < 9; k++ ) /* 文字列13(NULL除くと12)で拡張子4文字。よって8まで */ { /* 拡張子 .BMPのファイルを探す */ if( 0 == strncmp( &baFile_name[k], ".BMP", 4 ) ) { strcpy( tFile_param[wFile_count].baName, baFile_name ); tFile_param[wFile_count].ulSize = ulFile_size; wFile_count++; break; } else if( 0 == strncmp( &baFile_name[k], ".bmp", 4 ) ) { strcpy( tFile_param[wFile_count].baName, baFile_name ); tFile_param[wFile_count].ulSize = ulFile_size; wFile_count++; break; } } } } /* ソーティング */ wPoint = 0; wMax = 0; if( NULL != ( tParam_bu = ( FILE_PARAM * )Lib_mlalloc( sizeof( FILE_PARAM ) * wFile_N )) ) { for( k = 0; k < wFile_count; k++ ) fnSort( tFile_param, tParam_bu, k, &wPoint, &wMax ); for( k = 0; k < wFile_count; k++ ) tFile_param[k] = tParam_bu[k]; Lib_lfree( ( char * )tParam_bu ); } /* パッドのコントロール */ wQuit = 0; wPage = 0; while( 0 == wQuit ) { wRtn = fnSelect_file( tFile_param, wFile_count, wPage ); if( 12 == wRtn ) wPage--; else if( 13 == wRtn ) wPage++; else wQuit = 1; } /* ファイルのオープン */ if( 0 <= wRtn && wRtn < 12 ) { /* セーブ中メッセージの表示 */ Lib_chrdisp( 15, 15, "現在[画像 ]をロード中・・・・・" ); Lib_sprintf( baDisp_buff, "%02d", i ); Lib_chrdisp( 25, 15, baDisp_buff ); wOpen_num = wPage * 12 + wRtn; Lib_sprintf( baFile_path, "\\FS0\\%s", tFile_param[wOpen_num].baName ); /* IMG画像なら */ if( 1 == wSele_rtn ) { gray_adrs = Lib_adrs_gray_memory( i ); if( 0 != Lib_fload( baFile_path, gray_adrs, GRAY_MEM_SIZE ) ) { Lib_sprintf( baDisp_buff, "◆画像%02d", i ); Lib_display_key( dx-w-1, h * (i-1), baDisp_buff, 1 ); waStore_index[i] = LOAD_PICTURE; Lib_ex_video_transmit( i, GRAY_PLANE, REDUCE_MODE ); } } /* BMP画像なら */ else if( 2 == wSele_rtn ) { /* BMPオープン */ wOp_rtn = fnLoadBmp( i, baFile_path, tFile_param[wOpen_num].ulSize ); if( -1 == wOp_rtn ) { Lib_chrdisp( 15, 15, "                 " ); Lib_chrdisp( 20, 13, "ロード中にエラー発生" ); Lib_chrdisp( 20, 14, "メモリ不足です" ); Lib_chrdisp( 20, 15, "STORAGEへのロードは中止します。" ); Lib_time_delay( 1000 ); Lib_chrdisp( 20, 13, "          " ); Lib_chrdisp( 20, 14, "       " ); Lib_chrdisp( 20, 15, "                " ); } else if( -2 == wOp_rtn ) { Lib_chrdisp( 15, 15, "                 " ); Lib_chrdisp( 20, 13, "ロード中にエラー発生" ); Lib_chrdisp( 20, 14, "ファイルのロードに失敗しました" ); Lib_chrdisp( 20, 15, "STORAGEへのロードは中止します。" ); Lib_time_delay( 1000 ); Lib_chrdisp( 20, 13, "          " ); Lib_chrdisp( 20, 14, "               " ); Lib_chrdisp( 20, 15, "                " ); } else if( -3 == wOp_rtn ) { Lib_chrdisp( 15, 15, "                 " ); Lib_chrdisp( 20, 13, "ロード中にエラー発生" ); Lib_chrdisp( 20, 14, "このファイルはBMPではありません" ); Lib_chrdisp( 20, 15, "STORAGEへのロードは中止します。" ); Lib_time_delay( 1000 ); Lib_chrdisp( 20, 13, "          " ); Lib_chrdisp( 20, 14, "                " ); Lib_chrdisp( 20, 15, "                " ); } else { Lib_sprintf( baDisp_buff, "◆画像%02d", i ); Lib_display_key( dx-w-1, h * (i-1), baDisp_buff, 1 ); waStore_index[i] = LOAD_PICTURE; Lib_ex_video_transmit( i, GRAY_PLANE, REDUCE_MODE ); } } Lib_chrdisp( 15, 15, "                 " ); } /* メモリの開放 */ Lib_lfree( (char * )tFile_param ); } } } /* 一括ロード */ if( dx-w-1 <= x && x <= dx-1 && h * 16 <= y && y <= h * 17 ) { Lib_display_key( dx-w-1, h * 16, "一括ロード", 2 ); if( 102 != ( rtn = fnChenge_name( tFile_name )) ) /*ファイル名設定*/ { for( i = 1; i < wMax_image_count; i++ ) { if( 0 == tFile_name->baKind ) Lib_sprintf( baFile_path, "\\FS0\\%s%01X", tFile_name->baID, i ); else Lib_sprintf( baFile_path, "\\FS0\\%s%01X.%s", tFile_name->baID, i, tFile_name->baKind ); /* ファイルが存在するか確認 */ if( ( FILE * )NULL != ( fd = Lib_fopen( baFile_path, "R" ) ) ) { ulFile_size = Lib_fsize( fd ); Lib_fclose( fd ); /* セーブ中メッセージの表示 */ Lib_chrdisp( 15, 15, "現在[画像 ]をロード中・・・・・" ); Lib_sprintf( baDisp_buff, "%02d", i ); Lib_chrdisp( 25, 15, baDisp_buff ); /* BMPオープン */ if( 1 == tFile_name->wBmp ) { wOp_rtn = fnLoadBmp( i, baFile_path, ulFile_size ); if( -1 == wOp_rtn ) { Lib_chrdisp( 20, 13, "ロード中にエラー発生" ); Lib_chrdisp( 20, 14, "メモリ不足です" ); Lib_chrdisp( 20, 15, "STORAGEへのロードは中止します。" ); Lib_time_delay( 1000 ); Lib_chrdisp( 20, 13, "          " ); Lib_chrdisp( 20, 14, "       " ); Lib_chrdisp( 20, 15, "                  " ); break; } else if( -2 == wOp_rtn ) { Lib_chrdisp( 20, 13, "ロード中にエラー発生" ); Lib_chrdisp( 20, 14, "ファイルのロードに失敗しました" ); Lib_chrdisp( 20, 15, "STORAGEへのロードは中止します。" ); Lib_time_delay( 1000 ); Lib_chrdisp( 20, 13, "          " ); Lib_chrdisp( 20, 14, "                " ); Lib_chrdisp( 20, 15, "                  " ); break; } else if( -3 == wOp_rtn ) { Lib_chrdisp( 20, 13, "ロード中にエラー発生" ); Lib_chrdisp( 20, 14, "このファイルはBMPではありません" ); Lib_chrdisp( 20, 15, "STORAGEへのロードは中止します。" ); Lib_time_delay( 1000 ); Lib_chrdisp( 20, 13, "          " ); Lib_chrdisp( 20, 14, "                " ); Lib_chrdisp( 20, 15, "                  " ); break; } else { Lib_sprintf( baDisp_buff, "◆画像%02d", i ); Lib_display_key( dx-w-1, h * (i-1), baDisp_buff, 1 ); waStore_index[i] = LOAD_PICTURE; Lib_ex_video_transmit( i, GRAY_PLANE, REDUCE_MODE ); } } /* IMGオープン */ else { gray_adrs = Lib_adrs_gray_memory( i ); if( 0 != Lib_fload( baFile_path, gray_adrs, GRAY_MEM_SIZE ) ) { Lib_sprintf( baDisp_buff, "◆画像%02d", i ); Lib_display_key( dx-w-1, h * (i-1), baDisp_buff, 1 ); waStore_index[i] = LOAD_PICTURE; Lib_ex_video_transmit( i, GRAY_PLANE, REDUCE_MODE ); } } Lib_chrdisp( 15, 15, "                 " ); } } Lib_time_delay( 700 ); Lib_memory_clear( GRAY_PLANE ); } } /* 終了キーが押されたら */ if( 0 <= x && x <= ew && 0 <= y && y <= eh ) { Lib_display_key( 0, 0, "終了", 2 ); break; } } } Lib_memory_clear( LINE_PLANE | CHAR_PLANE | GRAY_PLANE ); } /*******************************************************************/ /***** ソーティング *********************************************/ /*******************************************************************/ void fnSort( tFile_param, tParam_bu, wObj, wPoint, wMax ) FILE_PARAM *tFile_param; FILE_PARAM *tParam_bu; int wObj; int *wPoint; int *wMax; { int i, j; if( 0 == *wPoint ) { /* wPointに入れる */ for( i = *wMax-1; i >= *wPoint; i-- ) tParam_bu[i+1] = tParam_bu[i]; tParam_bu[*wPoint] = tFile_param[wObj]; *wMax += 1; *wPoint = *wMax; } else { /* 先頭文字が同じ場合 */ if( tParam_bu[*wPoint-1].baName[0] == tFile_param[wObj].baName[0] ) { /* 全体チェックを行なう */ for( j = 1; j < 12; j++ ) { if( tParam_bu[*wPoint-1].baName[j] < tFile_param[wObj].baName[j] ) { /* wPointに入れる */ for( i = *wMax-1; i >= *wPoint; i-- ) tParam_bu[i+1] = tParam_bu[i]; tParam_bu[*wPoint] = tFile_param[wObj]; *wMax += 1; *wPoint = *wMax; break; } if( tParam_bu[*wPoint-1].baName[j] > tFile_param[wObj].baName[j] ) { *wPoint -= 1; fnSort( tFile_param, tParam_bu, wObj, wPoint, wMax ); break; } } } /* wObjの先頭文字が大きい場合 */ else if( tParam_bu[*wPoint-1].baName[0] < tFile_param[wObj].baName[0] ) { /* wPointに入れる */ for( i = *wMax-1; i >= *wPoint; i-- ) tParam_bu[i+1] = tParam_bu[i]; tParam_bu[*wPoint] = tFile_param[wObj]; *wMax += 1; *wPoint = *wMax; } /* wObjの先頭文字が小さい場合 */ else if( tParam_bu[*wPoint-1].baName[0] > tFile_param[wObj].baName[0] ) { *wPoint -= 1; fnSort( tFile_param, tParam_bu, wObj, wPoint, wMax ); } } } /******************************************************************* **  BMPかIMGかの選択パッド ** *******************************************************************/ int fnSelect_img_or_bmp( void ) { int wPad_level; int wWidth, wHeight; int wNo, wRtn=0; /* パッド表示文字数の設定 */ Lib_set_pad_maxstring( 12 ); /* メニューサイズの取得 */ Lib_get_standard_key_size( &wWidth, &wHeight ); /* パッドのオープン */ wPad_level = Lib_view_open( ); /* パッドのタイトル */ Lib_view_set_title( wPad_level, "選択" ); /* メニューの登録 */ Lib_view_set_null( wPad_level, 10, 10, "90x形式", 0 ); Lib_view_set_null( wPad_level, 25+wWidth, 10, "BMP形式", 1 ); /* パッドの表示位置 */ Lib_view_set_size( wPad_level, 130, 100, 10, 10 ); /* パッドの表示 */ Lib_draw_command( wPad_level ); if( ERROR_RETURN != ( wNo = Lib_process_command( wPad_level )) ) { switch( wNo ) { case 0: wRtn = 1; break; case 1: wRtn = 2; break; case 102: wRtn = 102; break; } } else wRtn = -1; Lib_erase_command( wPad_level ); /* コマンドパッドを消す */ Lib_view_close( wPad_level ); /* パッドのクローズ */ Lib_set_pad_maxstring( 10 ); return( wRtn ); } /*************************************************************************** ** ファイル名表示 ** ** 画像ファイルのファイル名をコマンドパッドのメニューとして ** ** 表示します。 ** ** 引数は名前群、ファイル数、ページ番号 ** ***************************************************************************/ int fnSelect_file( tFile_param, wFile_N, wPage ) FILE_PARAM *tFile_param; int wFile_N; int wPage; { int wPad_level; /* パッドレベル */ int wWidth,wHeight; /* キーサイズ */ int wNo,wRtn=0; /* 戻り値代入 */ int i; int wXs, wYs; int wKey_N; /* 1ページあたりのメニュー数 */ int wMax_page; /* 最大のページ番号を入れる */ char baStr[64]; /* 文字列バッファ */ int p, s; if( 0 == wFile_N ) { Lib_display_message( 130, 150, "確認", "画像ファイルが存在しません" ); wRtn = -1; } else { /* マックスページ-(0ページからMaxページ)の取得 */ wMax_page = ( wFile_N - 1 ) / 12; /* メニュー文字列 */ Lib_set_pad_maxstring( 14 ); /* メニューサイズの取得 */ Lib_get_standard_key_size(&wWidth, &wHeight); /* パッドのオープン */ wPad_level = Lib_view_open( ); /* パッドのタイトル */ Lib_view_set_title( wPad_level, "ファイル名称" ); /* 最終ページなら、余りのファイル数 */ if( wPage == wMax_page ) wKey_N = wFile_N - wPage * 12; else wKey_N = 12; /* メニューの登録 */ for( i = 0; i < wKey_N; i++ ) { p = i % 3; s = i / 3; Lib_sprintf( baStr, "%s", tFile_param[i+wPage * 12].baName ); Lib_view_set_null( wPad_level, 5+5*p+wWidth*p, 5+3*(s+1)+wHeight*s, baStr, i ); } s++; p=0; if( 0 != wPage ) { Lib_view_set_null( wPad_level, 5, 5+3*s+wHeight*s, "前頁", i ); i++; } if( wMax_page != wPage ) Lib_view_set_null( wPad_level, 15+wWidth*2, 5+3*s+wHeight*s, "次頁", i ); /* パッド始点取得 */ Lib_get_start_pad( wPad_level, &wXs, &wYs ); /* パッドの表示位置 */ Lib_view_set_size( wPad_level, wXs, wYs, 5, 5); /* パッドの表示 */ Lib_draw_command( wPad_level ); for( ; ; ) { if( ERROR_RETURN != ( wNo = Lib_process_command( wPad_level )) ) { /* ページ番号がmax_pageよりも少ないなら */ if( wPage < wMax_page && 0 != wPage ) { wRtn = wNo; break; } /* それ以外でファイル名なら */ else if( wNo < wKey_N ) { wRtn = wNo; break; } else if( wPage == wMax_page && wNo == wKey_N ) { wRtn = 12; break; } else if( 0 == wPage && wNo == wKey_N ) { wRtn = 13; break; } /* 終了が押されたなら */ else if( 102 == wNo ) { wRtn = wNo; break; } } } Lib_erase_command( wPad_level ); /* コマンドパッドを消す */ Lib_view_close( wPad_level ); /* パッドのクローズ */ /* キーサイズ */ Lib_set_pad_maxstring( 10 ); } return( wRtn ); } /**************************************************************/ /**** 保存名称、保存形式の変更 ****/ /**************************************************************/ int fnChenge_name( tFile_name ) FILE_NAME *tFile_name; /* ファイル名称 */ { PVAL tMpad_value[6]; int wPad_level; int wWidth,wHeight; int wNo; int wRtn = 0; char baStr[64]; char *ubpSave_type[2] = { "90x形式", "BMP形式" }; char baTemp[FID_SIZE+1], baTemp2[FKIND_SIZE+1]; /* パッド表示文字数の設定 */ Lib_set_pad_maxstring( 12 ); /* パッドCANCELフィールドの設定 */ Lib_set_pad_cancel_field( "QUIT", "終了" ); /* メニューサイズの取得 */ Lib_get_standard_key_size( &wWidth, &wHeight ); /* 初期化 */ strcpy( temp_fkind, tFile_name->baKind ); strcpy( temp_fkind2, tFile_name->baKind2 ); Lib_sprintf( baStr, "高分解能\画像の拡張子は %3s です", temp_fkind ); Lib_chrdisp( 30, 29, baStr ); Lib_sprintf( baStr, "512*480画像の拡張子は %3s です", temp_fkind2 ); Lib_chrdisp( 30, 30, baStr ); /* パッドのオープン */ wPad_level = Lib_view_open( ); /* パッドのタイトル */ Lib_view_set_title( wPad_level,"名称/形式変更" ); /* メニューの登録 */ Lib_view_set_comment ( wPad_level, 3, 5, "高分解能\画像", 0 ); Lib_view_set_uniq_string ( wPad_level, 8, 11+wHeight, "保存名称", tFile_name->baID, 7, 1 ); Lib_view_set_select ( wPad_level, 8, 17+wHeight*2, "保存形式", tFile_name->wBmp, 2, ubpSave_type, 2 ); Lib_view_set_comment ( wPad_level, 3, 29+wHeight*3, "512*480画像", 3 ); Lib_view_set_uniq_string ( wPad_level, 8, 35+wHeight*4, "保存名称", tFile_name->baID2, 7, 4 ); Lib_view_set_select ( wPad_level, 8, 41+wHeight*5, "保存形式", tFile_name->wBmp2, 2, ubpSave_type, 5 ); /* パラダイムの登録 */ Lib_set_paradigm( wPad_level, 2, END_TIMING, fnPrdm_form1 ); Lib_set_paradigm( wPad_level, 5, END_TIMING, fnPrdm_form2 ); /* パッドの表示位置 */ Lib_view_set_size( wPad_level, 80, 80, 5, 5 ); /* パッドの表示 */ Lib_draw_menu( wPad_level ); if( ERROR_RETURN != ( wNo = Lib_process_menu( wPad_level, tMpad_value )) ) { switch(wNo) { /* 実行ボタンが押されたとき */ case 101: strcpy( tFile_name->baID, tMpad_value[1].string_type ); strcpy( tFile_name->baID2, tMpad_value[4].string_type ); tFile_name->wBmp = tMpad_value[2].select_type; tFile_name->wBmp2 = tMpad_value[5].select_type; if( 1 == tMpad_value[2].select_type ) strcpy( tFile_name->baKind, "BMP" ); else strcpy( tFile_name->baKind, temp_fkind ); if( 1 == tMpad_value[5].select_type ) strcpy( tFile_name->baKind2, "BMP" ); else strcpy( tFile_name->baKind2, temp_fkind2 ); fnCut_space( tFile_name->baID, baTemp ); strcpy( tFile_name->baID, baTemp ); fnCut_space( tFile_name->baID2, baTemp ); strcpy( tFile_name->baID2, baTemp ); fnCut_space( tFile_name->baKind, baTemp2 ); strcpy( tFile_name->baKind, baTemp2 ); fnCut_space( tFile_name->baKind2, baTemp2 ); strcpy( tFile_name->baKind2, baTemp2 ); wRtn = 101; break; /* 終了ボタンが押されたとき */ case 102: wRtn = 102; break; } } else { wRtn = -1; Lib_display_message( 150, 150, "エラー", "メニューパッドエラー" ); } Lib_chrdisp( 30, 29, "                " ); Lib_chrdisp( 30, 30, "                " ); Lib_erase_menu( wPad_level ); /* メニューパッドを消す */ Lib_view_close( wPad_level ); /* パッドのクローズ */ /* パッド表示文字数の設定 */ Lib_set_pad_maxstring( 10 ); /* quitフィールドの初期化 */ Lib_set_pad_default_quit_field( ); return( wRtn ); } /******************************************************************* **  ビットマップファイルのロード ** *******************************************************************/ int fnLoadBmp( wMem, bpFile_name, ulSize ) int wMem; /* グレイメモリの番号 */ char *bpFile_name; /* ファイルパス */ unsigned long ulSize; /* ファイルサイズ */ { BMP_HEADER tBmph; /* ビットマップヘッダー */ RGBQUAD tPalette[256]; /* パレットデータ */ unsigned long ulOp_size; /* ロードされたBMPデータのサイズ */ unsigned char *ubpBmp; /* ロードされたビットマップデータの先頭アドレス */ unsigned char *bpMem1_adrs; /* グレイメモリ1の先頭アドレス */ unsigned char ubPt, ubZ; /* ビットマップデータから取り出した1バイトのデータ */ unsigned int uwTemp; unsigned int i, j, k, r, m; unsigned int uwPosition, uwPosition2; /* 読み取り位置、書き込み位置 */ unsigned int wFx, wFy; /* グレイメモリサイズ */ unsigned int uwWid, uwHei; /* オープンするサイズ */ unsigned int uwRead_byte, uwLine_byte; /* 一行あたりの読み込むバイト数、一行あたりのバイト数 */ unsigned int uwEnd; /* 終了バイト数 */ unsigned int uwWidth_b; /* 一行あたりのビット数 */ int wColor; /* 色 */ int uwWidth_bit, uwZero_N; /* 一行あたりのビット数と0の数 */ int wError_code; wError_code = 0; /* グレイメモリ1のアドレス取得 */ bpMem1_adrs = (unsigned char *)Lib_adrs_gray_memory( wMem ); /* グレイメモリ1のクリア */ Lib_gray_memory_cls( wMem ); /* メモリの確保 */ if( NULL == ( ubpBmp = (unsigned char * )Lib_mlalloc( ulSize ) )) wError_code = -1; else { /* ファイルのロード */ if( 0 == ( ulOp_size = Lib_fload( bpFile_name, (char *)ubpBmp, ulSize ) ) ) wError_code = -2; else { /* ロードされたバイト数と要求したバイト数が一致するか確認 */ if( ulOp_size != ulSize ) wError_code = -2; else { /******** ヘッダーのファイルIDチェック ********/ if( ubpBmp[0] != 0x42 || ubpBmp[1] != 0x4D ) wError_code = -3; /* BMPファイルじゃない */ else { /******* ヘッダーからデータの取得 *******/ /* ファイルサイズの取得 */ fnGetInt( (char *)ubpBmp, 2, &tBmph.bfSize ); /* ヘッダーサイズの取得 */ fnGetInt( (char *)ubpBmp, 10, &tBmph.bfOffBits ); /* インフォヘッダーサイズ */ fnGetInt( (char *)ubpBmp, 14, &tBmph.biSize ); /* イメージ幅 */ fnGetInt( (char *)ubpBmp, 18, &tBmph.biWidth ); /* イメージ高さ */ fnGetInt( (char *)ubpBmp, 22, &tBmph.biHeight ); /* プレーン数 */ fnGetShort( (char *)ubpBmp, 26, &tBmph.biPlanes ); /* ピクセルあたりのビット数 */ fnGetShort( (char *)ubpBmp, 28, &tBmph.biBitCount ); /* 水平解像度 */ fnGetInt( (char *)ubpBmp, 38, &tBmph.biXPelsPerMeter ); /* 垂直解像度 */ fnGetInt( (char *)ubpBmp, 42, &tBmph.biYPelsPerMeter ); /******** パレットデータの取得 ********/ uwTemp = tBmph.bfOffBits - tBmph.biSize - 14; /* 14はファイルヘッダーサイズ */ if( 0 < uwTemp ) /* パレットデータがある場合 */ { for( i = tBmph.biSize + 14, j = 0; i < tBmph.bfOffBits; i+=4, j++ ) { tPalette[j].rgbBlue = ubpBmp[i]; tPalette[j].rgbGreen = ubpBmp[i+1]; tPalette[j].rgbRed = ubpBmp[i+2]; tPalette[j].rgbReserved = ubpBmp[i+3]; } } /* 画像サイズの取得 */ wFx = /*(unsigned int)Lib_get_fx_size( )*/FX_SIZE; wFy = /*(unsigned int)Lib_get_fy_size( )*/FY_SIZE; /* 1行のデータビット数 */ uwWidth_bit = (int)tBmph.biWidth * (int)tBmph.biBitCount; /* 1行あたりのゼロビット数 */ uwZero_N = uwWidth_bit % 32; /* 32bit */ if( 0 != uwZero_N ) uwZero_N = 32 - uwZero_N; /* メモリサイズ以上でないか確認 */ if( tBmph.biWidth > wFx ) uwWid = wFx; else uwWid = tBmph.biWidth; if( tBmph.biHeight > wFy ) uwHei = wFy; else uwHei = tBmph.biHeight; uwZero_N = uwZero_N / 8; /* ビットからバイトに変換 */ /******** IMGデータに変換 ********/ /******** 24bit colorの場合 ********/ if( 24 == tBmph.biBitCount ) { for( j = tBmph.biHeight - uwHei, m = 0; j < tBmph.biHeight; j++, m++ ) { for( i = 0; i < uwWid; i++ ) { /* 読み取り位置の計算 */ uwPosition = tBmph.bfOffBits + i * 3 + ( 3 * tBmph.biWidth + uwZero_N ) * j; /* データの取得 */ wColor = 0; for( k = 0; k < 3; k++ ) wColor += (int)ubpBmp[uwPosition+k]; wColor = wColor / 3; /* 書き込み位置の計算 */ uwPosition2 = wFx * ( uwHei - m - 1 ) + i; /* 書き込み */ bpMem1_adrs[uwPosition2] = ( unsigned char )wColor; } } } /******* 24bit未満(256色以下)の場合 *******/ else { /* 1行のバイト数 */ uwLine_byte = uwWidth_bit / 8; if( 0 != uwWidth_bit % 8 ) uwLine_byte++; /* 1行の読み取る量のバイト数 */ uwWidth_b = uwWid * (unsigned int)tBmph.biBitCount; uwRead_byte = uwWidth_b / 8; /* 1行あたりのバイト数 */ if( 0 != uwWidth_bit % 8 ) uwRead_byte++; for( j = tBmph.biHeight - uwHei, m = 0; j < tBmph.biHeight; j++, m++ ) { for( i = 0; i < uwRead_byte; i++ ) { /* 読み取り位置の計算 */ uwPosition = tBmph.bfOffBits + i + ( uwLine_byte + uwZero_N ) * j; /* 1バイト取得 */ ubPt = ubpBmp[uwPosition]; /* 行の最後かどうか確認 */ if( i != uwRead_byte -1 ) uwEnd = 8; else if( 8 == tBmph.biBitCount ) uwEnd = 8; else uwEnd = uwWidth_bit % 8; /* 必要なビットだけ取り出す */ for( r = 0; r < uwEnd; r += tBmph.biBitCount ) { /* 1ビットの場合、白黒 */ if( 1 == tBmph.biBitCount ) ubZ = MASK1 & ( ubPt >> r ); /* 2ビットの場合、4色 */ else if( 2 == tBmph.biBitCount ) ubZ = MASK2 & ( ubPt >> r ); /* 4ビットの場合、16色 */ else if( 4 == tBmph.biBitCount ) ubZ = MASK4 & ( ubPt >> r ); /* 8ビットの場合、256色 */ else if( 8 == tBmph.biBitCount ) ubZ = ubPt; /* カラーパレットからデータを取得 */ wColor = (int)tPalette[ubZ].rgbBlue; wColor += (int)tPalette[ubZ].rgbGreen; wColor += (int)tPalette[ubZ].rgbRed; wColor = wColor / 3; /* 書き込む位置を計算 */ uwPosition2 = wFx * ( uwHei - m - 1 ) + i * ( 8 / tBmph.biBitCount ) + ( 8 / tBmph.biBitCount - r - 1 ); /* 書き込む */ bpMem1_adrs[uwPosition2] = ( unsigned char )wColor; } } } } } } } /* メモリの開放 */ Lib_lfree( (char * )ubpBmp ); } return( wError_code ); } /******************************************************************* ** BMP保存(グレイONLY) ** *******************************************************************/ int fnSaveBmp( bpAdrs, wStr_x, wStr_y, wSize_x, wSize_y, bpName ) unsigned char *bpAdrs; int wStr_x; /* 保存領域 左上x */ int wStr_y; /* 保存領域 左上y */ int wSize_x; /* 保存領域 サイズx */ int wSize_y; /* 保存領域 サイズy */ char *bpName; /* セーブファイル・パス */ { BMP_HEADER tSave_bmp; /* ヘッダー */ unsigned long uwFile_size; /* セーブファイルのサイズ */ unsigned int uwZero_N; /* 1行あたりのゼロの数 */ unsigned int Z; /* ファイル最後のゼロの数 */ int wRtn; /* 戻り値 */ int sx, sy, ex, ey; /* 始点終点 */ unsigned char *ubpBMP; /* 保存ビットマップ先頭アドレス */ int i, k, wPosi; int wPt; int wFx; /* 画面サイズ */ int x, y; unsigned long ulSize; /* char *bpAdrs; *//* グレイメモリの先頭アドレス */ /* bpAdrs = Lib_adrs_gray_memory( wMem ); */ /* 関数の戻り値を初期化 */ wRtn = 0; /* 画面サイズを取得 */ wFx = /*Lib_get_fx_size( )*/wSize_x; /* 始点終点を計算 */ sx = wStr_x; sy = wStr_y; ex = wStr_x + wSize_x - 1; ey = wStr_y + wSize_y - 1; /* 1行あたりの0の数を計算 */ uwZero_N = 4 - ( (unsigned int)wSize_x % 4 ); /* 行の後につける0の数 4は4BYTESの意味 */ if( 4 == uwZero_N ) uwZero_N = 0; /* ファイルの最後につける0の数を計算 */ uwFile_size = 1078 + ( (unsigned long)wSize_x + (unsigned long)uwZero_N ) * (unsigned long)wSize_y; Z = (int)( 4 - (uwFile_size % 4 )) ; /* ファイルの最後につける0の数 4は4BYTESの意味 */ uwFile_size += (unsigned long)Z; /* メモリの確保 */ if( NULL == ( ubpBMP = ( unsigned char *)Lib_mlalloc( uwFile_size ) )) wRtn = -1; else { /* 初期化 */ for( i = 0; i < uwFile_size; i++ ) ubpBMP[i] = 0; /* ヘッダーに数値を入れる */ tSave_bmp.bfSize = uwFile_size; tSave_bmp.bfOffBits = 1078; tSave_bmp.biSize = 40; tSave_bmp.biWidth = (unsigned int )wSize_x; tSave_bmp.biHeight = (unsigned int )wSize_y; tSave_bmp.biPlanes = 1; tSave_bmp.biBitCount = 8; tSave_bmp.biXPelsPerMeter = 3780; tSave_bmp.biYPelsPerMeter = 3780; /******** 代入 ********/ /* ファイルID */ ubpBMP[0] = 0x42; ubpBMP[1] = 0x4D; /* ヘッダー */ for( i = 0 ; i < 4; i++ ) ubpBMP[2+i] = ( char )( tSave_bmp.bfSize >> ( 8*i ) ); for( i = 0 ; i < 4; i++ ) ubpBMP[10+i] = ( char )( tSave_bmp.bfOffBits >> ( 8*i ) ); for( i = 0 ; i < 4; i++ ) ubpBMP[14+i] = ( char )( tSave_bmp.biSize >> ( 8*i ) ); for( i = 0 ; i < 4; i++ ) ubpBMP[18+i] = ( char )( tSave_bmp.biWidth >> ( 8*i ) ); for( i = 0 ; i < 4; i++ ) ubpBMP[22+i] = ( char )( tSave_bmp.biHeight >> ( 8*i ) ); for( i = 0 ; i < 2; i++ ) ubpBMP[26+i] = ( char )( tSave_bmp.biPlanes >> ( 8*i ) ); for( i = 0 ; i < 2; i++ ) ubpBMP[28+i] = ( char )( tSave_bmp.biBitCount >> ( 8*i ) ); for( i = 0 ; i < 4; i++ ) ubpBMP[38+i] = ( char )( tSave_bmp.biXPelsPerMeter >> ( 8*i ) ); for( i = 0 ; i < 4; i++ ) ubpBMP[42+i] = ( char )( tSave_bmp.biYPelsPerMeter >> ( 8*i ) ); /* パレットデータ */ for( i = 0; i < 256; i++ ) { ubpBMP[54+4*i] = i; ubpBMP[54+4*i+1] = i; ubpBMP[54+4*i+2] = i; ubpBMP[54+4*i+3] = 0; } /* データ */ wPt = 0; for( y = ey; y >= sy ; y-- ) { for( x = sx; x <= ex; x++ ) { wPosi = wFx * y + x; ubpBMP[1078 + wPt] = /*( unsigned char )*/bpAdrs[wPosi]; wPt++; } for( k = 0; k < uwZero_N; k++ ) { ubpBMP[1078+wPt] = 0; wPt++; } } /* ファイルの最後 */ for( k = 0; k < Z; k++ ) { ubpBMP[1078+wPt] = 0; wPt++; } /* セーブ実行 */ if( 0 == ( ulSize = Lib_fsave( bpName, (char *)ubpBMP, uwFile_size )) ) wRtn = -2; if( ulSize != uwFile_size ) wRtn = -2; /* メモリの開放 */ Lib_lfree( (char *)ubpBMP ); } return( wRtn ); } /******************************************************************* ** int型データを取得 ** *******************************************************************/ void fnGetInt( bpStart, wOff, wInt ) char *bpStart; int wOff; unsigned int *wInt; /* 出力int型 */ { int i; unsigned char baChar[4]; for( i = 0; i < 4; i++ ) baChar[i] = (unsigned char)( *( bpStart + wOff + i )); *wInt = 0x00000000; for( i = 0; i < 4; i++ ) /* char型からint型へ変換 */ *wInt = *wInt | ( unsigned int )( baChar[i] << ( 8*i ) ); } /******************************************************************* ** short型データを取得 ** *******************************************************************/ void fnGetShort( bpStart, wOff, sShort ) char *bpStart; int wOff; unsigned short *sShort; { int i; unsigned char baChar[2]; for( i = 0; i < 2; i++ ) baChar[i] = (unsigned char)( *( bpStart + wOff + i )); *sShort = 0x0000; for( i = 0; i < 2; i++ ) *sShort = *sShort | ( unsigned short )( baChar[i] << ( 8*i ) ); } /*********************************************************************/ /* スペース除去                        */ /*********************************************************************/ void fnCut_space( instr, otstr ) char *instr; char *otstr; { for(;;) { if ( ' ' != *instr ) *otstr++ = *instr; if ( 0x00 == *instr ) break; instr++; } }