Develop and Download Open Source Software

Browse CVS Repository

Contents of /enbanfukusyaya/EnbanFukusyaYa/DriveAccess/image.c

Parent Directory Parent Directory | Revision Log Revision Log | View Revision Graph Revision Graph


Revision 1.14 - (show annotations) (download) (as text)
Mon Nov 1 14:34:11 2010 UTC (13 years, 5 months ago) by bananajinn
Branch: MAIN
CVS Tags: HEAD
Changes since 1.13: +8 -8 lines
File MIME type: text/x-csrc
*** empty log message ***

1 /**
2 * @file image.c
3 * @brief イメージファイル
4 * @author BananaJinn
5 * @version $Id: image.c,v 1.13 2009/12/27 16:27:13 bananajinn Exp $
6 * 円盤複写屋
7 * Copyright (C) 2004-2006 BananaJinn<banana@mxh.mesh.ne.jp>.
8 */
9 #include <string.h>
10 #include <stdio.h>
11 #if !defined(WIN32)
12 # include <stdlib.h>
13 #endif
14 #include "mem.h"
15 #include "image.h"
16 #include "ui.h"
17 #include "text.h"
18 #include "ebstring.h"
19
20 static int OpenImageFile(IMAGEFILE *image, BOOL reader);
21 static int OpenNextImageFile(IMAGEFILE *image, BOOL reader);
22 static int CloseImageFile(IMAGEFILE *image);
23
24 #define IMGFILEMAXSIZE 0x40000000 /* 1giga-bytes */
25
26
27 static int OpenImageFile(IMAGEFILE *image, BOOL reader)
28 {
29 char *filename = NULL;
30
31 CloseImageFile(image);
32 if(image->fileindex>=10 || image->fileindex<0){
33 UIDispMessage(MSG_CANT_OPEN_IMAGE
34 /*"イメージファイルのオープンに失敗しました。"*/, UIDMT_ERROR);
35 return RET_NG;
36 }
37 filename = EbStringNew(image->filename);
38 if(image->fileindex>0){
39 filename = EbStringAppendWithFormat(filename, ".%d",
40 image->fileindex);
41 }
42 #if defined(WIN32)
43 image->fp = fopen(filename, reader ? "rb" : "wb");
44 #else
45 image->fp = fopen(filename, reader ? "r" : "w");
46 #endif
47 if(image->fp==NULL){
48 UIDispMessage(MSG_CANT_OPEN_IMAGE
49 /*"イメージファイルのオープンに失敗しました。"*/, UIDMT_ERROR);
50 EbStringFree(filename);
51 return RET_NG;
52 }
53 EbStringFree(filename);
54 image->bytecount = 0;
55
56 return RET_OK;
57 }
58
59 static int OpenNextImageFile(IMAGEFILE *image, BOOL reader)
60 {
61 image->fileindex++;
62 return OpenImageFile(image, reader);
63 }
64
65 int ReadImageFile(IMAGEFILE *image, void *buf, DWORD size, BOOL split)
66 {
67 int ret;
68 BYTE *bufp = (BYTE *)buf;
69 size_t readsize;
70
71 if(split){
72 if(size > IMGFILEMAXSIZE-image->bytecount){
73 fread(bufp, 1, (IMGFILEMAXSIZE-image->bytecount), image->fp);
74 bufp += (IMGFILEMAXSIZE-image->bytecount);
75 size -= (IMGFILEMAXSIZE-image->bytecount);
76 ret = OpenNextImageFile(image, TRUE);
77 if(ret!=RET_OK)
78 return ret;
79 }
80 }
81 readsize = fread(bufp, 1, size, image->fp);
82 if(readsize < size){
83 UIDispMessage(MSG_CANT_READ_IMAGE
84 /*"イメージファイルの読込に失敗しました。"*/, UIDMT_ERROR);
85 return RET_NG;
86 }
87 image->bytecount += size;
88
89 return RET_OK;
90 }
91
92 int WriteImageFile(IMAGEFILE *image, void *buf, DWORD size, BOOL split)
93 {
94 int ret;
95 BYTE *bufp = (BYTE *)buf;
96 size_t writesize;
97
98 if(split){
99 if(size > IMGFILEMAXSIZE-image->bytecount){
100 fwrite(bufp, 1, (IMGFILEMAXSIZE-image->bytecount), image->fp);
101 bufp += (IMGFILEMAXSIZE-image->bytecount);
102 size -= (IMGFILEMAXSIZE-image->bytecount);
103 ret = OpenNextImageFile(image, FALSE);
104 if(ret!=RET_OK)
105 return ret;
106 }
107 }
108 writesize = fwrite(bufp, 1, size, image->fp);
109 if(writesize < size){
110 UIDispMessage(MSG_CANT_WRITE_IMAGE
111 /*"イメージファイルの書込に失敗しました。"*/, UIDMT_ERROR);
112 return RET_NG;
113 }
114
115 image->bytecount += size;
116
117 return RET_OK;
118 }
119
120
121 void RemoveImageFile(const char *basefilename)
122 {
123 char *filename;
124 int i;
125
126 remove(basefilename);
127 for(i=1; i<=9; i++){
128 filename = EbStringNewWithFormat("%s.%d", basefilename, i);
129 remove(filename);
130 filename = EbStringFree(filename);
131 }
132 MemFree(filename);
133 }
134
135
136 static int CloseImageFile(IMAGEFILE *image)
137 {
138 if(image->fp!=NULL){
139 fclose(image->fp);
140 image->fp = NULL;
141 image->bytecount = 0;
142 }
143 return RET_OK;
144 }
145
146
147 int InitializeImage(IMAGEFILE *image)
148 {
149 memset(image, 0, sizeof(IMAGEFILE));
150 return RET_OK;
151 }
152
153 void FreeImage(IMAGEFILE *image)
154 {
155 CloseImageFile(image);
156 if(image->filename != NULL){
157 MemFree(image->filename);
158 image->filename = NULL;
159 }
160 image->fileindex = 0;
161 image->bytecount = 0;
162 }
163
164 int OpenImage(IMAGEFILE *image, const char *filename, BOOL reader)
165 {
166 int ret;
167
168 if(filename == NULL){
169 return RET_NG;
170 }
171 image->filename = MemNew(strlen(filename)+1);
172 strncpy(image->filename, filename, strlen(filename)+1);
173 image->fileindex = 0;
174 image->fp = NULL;
175 ret = OpenImageFile(image, reader);
176 if(ret != RET_OK){
177 return ret;
178 }
179
180 return RET_OK;
181 }
182

Back to OSDN">Back to OSDN
ViewVC Help
Powered by ViewVC 1.1.26