|
|
1.1 root 1: /*
2: * Common includes
3: *
4: */
5: #include "anicur.h"
6: #include "anidlgs.h"
7: #include "animsg.h"
8:
9: /*
10: * Constants
11: *
12: */
13: #define CMS_WAIT_FOR_PROCESS (60 * 1000) // one minute
14:
15: #define AIM_PROCESSTERM (WM_USER + 0x0FFF)
16: #define AIM_SETCHILDAPP (AIM_PROCESSTERM + 1)
17:
18: #define CCH_TITLE 80
19: #define CCH_CREATOR 80
20: #define CCH_JIF 10 /* Numbers are small even in German! */
21:
22: #define TITL_ERROR (DWORD)(-1)
23: #define szPREVIEW TEXT("AniEditPreviewClass")
24: #define szBNTBAR TEXT("AniEditBtnBarClass")
25:
26:
27: #define PM_NEWCURSOR (WM_USER + 0x4a50)
28: #define PM_PAUSEANIMATION (PM_NEWCURSOR + 1)
29: #define PM_UNPAUSEANIMATION (PM_NEWCURSOR + 2)
30: #define PM_SETSTEP (PM_NEWCURSOR + 3)
31:
32: #define ID_PREVIEWTIMER (0x0050)
33:
34: #define MULTISEL 1 /* listbox is mutliple selction */
35:
36: /*
37: * Structure defintions
38: *
39: */
40: typedef struct _FRAME *PFRAME;
41:
42: typedef struct _FRAME {
43: int cRef; /* refrence count */
44: int iFrame;
45: PFRAME pfrmNext;
46: DWORD dwCheckSum; /* checksum of the icon data. Used to
47: * compare new imported icons against existing
48: * ones to see if we can sequence them.
49: */
50: HICON hcur; /* icon representation of raw data below */
51: WORD xHotSpot;
52: WORD yHotSpot;
53: RTAG rtag; /* icon chunk as it appears in file */
54: BYTE abIcon[1];
55: } FRAME;
56:
57:
58: typedef struct _STEP *PSTEP;
59:
60: typedef struct _STEP {
61: JIF jif;
62: PFRAME pfrmFrame;
63: } STEP;
64:
65: typedef struct _THDDATA {
66: HWND hwndCaller;
67: HWND hwndMonitor;
68: HANDLE hprocMonitor;
69: } THDDATA, *PTHDDATA;
70:
71: typedef struct _ANICUR {
72: ANIHEADER anih;
73: BOOL fDirty;
74: CHAR azTitle[CCH_TITLE];
75: CHAR azCreator[CCH_CREATOR];
76: TCHAR szFile[MAX_PATH];
77: } ANICUR;
78:
79:
80: typedef struct _CLPBRDDAT *PCLPBRDDAT;
81:
82: typedef struct _CLPBRDDAT {
83: PCLPBRDDAT pcbdNext;
84: STEP stp;
85: } CLPBRDDAT;
86:
87: //
88: // Structure that contains data used within a preview window. This
89: // data is unique for each preview window, and is used to optimize
90: // the painting.
91: //
92: typedef struct
93: {
94: HDC hdcMem;
95: HBITMAP hbmMem;
96: HBITMAP hbmOld;
97: HICON hcur;
98: DWORD iFrame;
99: WORD xHot;
100: WORD yHot;
101: } PREVIEWDATA, *PPREVIEWDATA;
102:
103: typedef struct {
104: int id;
105: int idSys;
106: } RADIOCOLOR;
107:
108: /*
109: * Header of the resource file in the new format
110: */
111: #pragma pack(2)
112: typedef struct tagNEWHEADER {
113: WORD reserved;
114: WORD rt;
115: WORD cResources;
116: } NEWHEADER, *LPNEWHEADER;
117:
118: typedef struct tagICONDIR {
119: BYTE Width; /* 16, 32, 64 */
120: BYTE Height; /* 16, 32, 64 */
121: BYTE ColorCount; /* 2, 8, 16 */
122: BYTE reserved;
123: } ICONDIR;
124:
125: typedef struct tagCURSORDIR {
126: WORD Width;
127: WORD Height;
128: } CURSORDIR;
129:
130: typedef struct tagRESDIR {
131: union {
132: ICONDIR Icon;
133: CURSORDIR Cursor;
134: } ResInfo;
135:
136: WORD Planes;
137: WORD BitCount;
138: DWORD BytesInRes;
139: WORD idIcon;
140: } RESDIR;
141: typedef RESDIR *LPRESDIR;
142:
143: typedef struct _ICONFILERESDIR { // ird
144: BYTE bWidth;
145: BYTE bHeight;
146: BYTE bColorCount;
147: BYTE bReserved;
148: WORD xHotspot;
149: WORD yHotspot;
150: DWORD dwDIBSize;
151: DWORD dwDIBOffset;
152: } ICONFILERESDIR;
153:
154: typedef struct tagCURSORRESOURCE {
155: WORD xHotspot;
156: WORD yHotspot;
157: BITMAPINFOHEADER bih;
158: } CURSORRESOURCE, *PCURSORRESOURCE;
159: #pragma pack()
160:
161:
162: /*
163: * Globals
164: *
165: */
166: extern HANDLE hInst;
167: extern HWND ghwndMain;
168: extern HWND ghwndLB;
169: extern int gcyCursor, gcxCursor;
170: extern HBRUSH ghbrHighlight, ghbrWindow, ghbrPrevBackgnd;
171: extern COLORREF gcrHighlightText;
172: extern ANICUR ganiAcon;
173: extern TCHAR gszTempFile[];
174: extern BOOL gfEditFrame;
175: extern TCHAR gszWindowTitle[];
176: extern TCHAR gszDots[];
177: extern PFRAME gpfrmFrames;
178: extern PCLPBRDDAT gpbdClipBoard;
179: extern TCHAR gszCursorEditor[MAX_PATH];
180: extern int giradColor;
181: RADIOCOLOR garadColor[];
182:
183: /*
184: * String table pointers
185: */
186: extern LPTSTR gpszAniFilter;
187: extern LPTSTR gpszImagEdit;
188: extern LPTSTR gpszCUR;
189: extern LPTSTR gpszANI;
190: extern LPTSTR gpszUnknownError;
191: extern LPTSTR gpszCurFilter;
192: extern LPTSTR gpszUntitled;
193: extern LPTSTR gpszImport;
194:
195: /*
196: * Macros
197: *
198: */
199: #if 0
200: # include <stdio.h>
201: # define DPRINT(p) if(1){ printf p; fflush(stdout); } else
202: #else
203: # define DPRINT(p)
204: #endif
205:
206:
207: #define WRITEME(hwnd) \
208: MessageBox(hwnd, "This function is not yet implemented", \
209: NULL, MB_OK | MB_ICONSTOP)
210:
211: #define FALLTHRU(label)
212:
213: #define COUNTOF(sz) (sizeof(sz) / sizeof((sz)[0]))
214:
215: #define FreeMem(pv) LocalFree((HLOCAL)pv)
216:
217: #define IsValidPS(ps) (((ps) != (PSTEP)LB_ERR) && ((ps) != NULL))
218:
219:
220: #define PADUP(cb) (((cb) + 1) & ~1)
221: #define RET_CLOSE_IF_ERR( func, hf ) \
222: if( !func ) {CloseHandle(hf); return FALSE;} else
223:
224: #define GetStep(hwnd, iSel) (PSTEP)SendDlgItemMessage(hwnd, \
225: DLG_MAIN_FRAMELIST, LB_GETITEMDATA, iSel, 0)
226:
227: #define GetStepCount(hwnd) SendDlgItemMessage(hwnd, \
228: DLG_MAIN_FRAMELIST, LB_GETCOUNT, 0, 0)
229:
230: #define GetSelStepCount(hwnd) SendDlgItemMessage(hwnd, \
231: DLG_MAIN_FRAMELIST, LB_GETSELCOUNT, 0, 0)
232:
233: #define ResumePreview(hwnd, id) \
234: SendDlgItemMessage(hwnd, id, PM_UNPAUSEANIMATION, 0, 0)
235:
236: #define PausePreview(hwnd, id) \
237: SendDlgItemMessage(hwnd, id, PM_PAUSEANIMATION, 0, 0)
238:
239: #define SetPreviewStep(hwnd, id, iStep) \
240: SendDlgItemMessage(hwnd, id, PM_SETSTEP, iStep, 0)
241:
242: #define PreviewCursor(hwnd, id) \
243: SendDlgItemMessage(hwnd, id, PM_NEWCURSOR, 0, 0)
244:
245: #define FmtFree( psz ) if((psz) != gszDots) LocalFree(psz); else
246:
247: #define UpdateStepSel( hWnd ) \
248: SendMessage(hWnd, WM_COMMAND, MAKEWPARAM( DLG_MAIN_FRAMELIST, \
249: LBN_SELCHANGE), (LPARAM)(GetDlgItem(hWnd, \
250: DLG_MAIN_FRAMELIST)))
251:
252: #define SetStepSel(hWnd, iMin, iMax) ( \
253: SendDlgItemMessage(hWnd, DLG_MAIN_FRAMELIST, \
254: LB_SELITEMRANGE, TRUE, MAKELPARAM((iMin), (iMax))), \
255: UpdateStepSel(hWnd) \
256: )
257:
258:
259: /*
260: * Function Prototypes
261: *
262: */
263:
264: /*
265: * In aniedit.c
266: */
267: BOOL InitApplication(HANDLE);
268: BOOL InitInstance(HANDLE, int);
269: INT APIENTRY GetHeightFromPoints( int pts);
270: BOOL APIENTRY MainWndProc(HWND hWnd, UINT message, UINT wParam, LONG lParam);
271: void DrawCursorListItem( DRAWITEMSTRUCT *pdis );
272: int FmtMessageBox( HWND hwnd, DWORD dwTitleID, LPTSTR pszTitleStr,
273: UINT fuStyle, BOOL fSound, DWORD dwTextID, ... );
274: LPTSTR FmtSprintf( DWORD id, ... );
275: PVOID AllocMem( DWORD cb );
276: LRESULT CALLBACK PreviewWndProc( HWND hwnd, UINT msg, WPARAM wParam,
277: LPARAM lParam );
278: VOID NextFrame( HWND hwnd, BOOL fRun );
279: VOID SetWindowFileTitle(HWND hWnd, LPTSTR szFileTitle);
280: void AniAddFontModule(HINSTANCE hInst);
281: VOID ReadRegistry( VOID );
282: VOID WriteRegistry( VOID );
283: LRESULT CALLBACK BtnBarWndProc( HWND hwnd, UINT msg, WPARAM wParam,
284: LPARAM lParam);
285:
286:
287: /*
288: * In anicmd.c
289: */
290: BOOL DoCommand( HWND hWnd, UINT wParam, LONG lParam );
291: VOID ExitCommand(HWND hWnd);
292: BOOL CheckDirty(HWND hWnd);
293: void NewAniCursor( HWND hwnd );
294: BOOL ExecProgram( HWND hwndCaller, LPTSTR pszCmdLine );
295: BOOL GetCurrentSel( HWND hwnd, int id, int *paiSel, int ciSel, int *pcSel );
296: VOID SetCurrentSel( HWND hwnd, int id, BOOL fExtend, int iSel);
297: VOID EditFrame(HWND hWnd, BOOL fEditFrame);
298: PSTEP NewStep( void );
299: VOID DestroyStep( PSTEP ps );
300: VOID CopyStep( PSTEP psDst, PSTEP psSrc );
301: VOID LinkStepFrame(PSTEP ps, PFRAME pf );
302: VOID DestroyFrame( PFRAME pf );
303: PCLPBRDDAT NewClpBrdDat( void );
304: VOID DestroyClpBrdDat(PCLPBRDDAT pcbd);
305: int __cdecl RevCompInts(const void *elm1, const void *elm2);
306: BOOL APIENTRY About(HWND, UINT, UINT, LONG);
307: BOOL APIENTRY OptionsProc( HWND hDlg, UINT message, UINT wParam, LONG lParam);
308: void ClearStepSel( HWND hWnd );
309:
310:
311:
312: /*
313: * In anifile.c
314: */
315: BOOL CreateFrameFromCursorFile(HWND hwnd, LPTSTR pszFile, BOOL fEdit);
316: HANDLE PromptAndOpenFile( HWND hwnd, DWORD cchFileTitle, LPTSTR pszFileTitle,
317: DWORD cchFileName, LPTSTR pszFileName, LPTSTR pszFilter);
318: BOOL PromptForFile( HWND hwnd, DWORD cchFileTitle, LPTSTR pszFileTitle,
319: DWORD cchFileName, LPTSTR pszFile, LPTSTR pszFilter, LPTSTR pszDlgTitle,
320: BOOL fSave );
321: BOOL ReadAniFile( HWND hwnd, HANDLE hf );
322: PFRAME ReadIconFromFile(HWND hwnd, HANDLE hf, DWORD ckSize);
323: BOOL ReadTag( HANDLE hf, PRTAG ptag);
324: BOOL ReadChunk( HANDLE hf, PRTAG ptag, PVOID pv);
325: BOOL ReadChunkN( HANDLE hf, PRTAG ptag, PVOID pv, DWORD cbMax);
326: BOOL SkipChunk( HANDLE hf, PRTAG ptag);
327: DWORD CalcCheckSum( PBYTE pb, DWORD cb );
328: HICON ConvertDataToIcon( PFRAME pf, WORD *pxHotSave, WORD *pyHotSave );
329: BOOL GetTempCursorFileName( LPTSTR pszName );
330: BOOL SaveAniFile( HWND hwnd, HANDLE hf );
331: BOOL WriteTag(HANDLE hf, PRTAG prtag);
332: BOOL WriteType(HANDLE hf, FOURCC ckID );
333: BOOL WriteTagData(HANDLE hf, PRTAG prtag, VOID *pvData );
334: VOID SaveFile(HWND hwnd, BOOL fPrompt);
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.