|
|
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.