- Timestamp:
- Aug 2, 2000, 7:18:33 PM (25 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/winmm/mmio.cpp
r2812 r3932 1 /* $Id: mmio.cpp,v 1.7 2000-08-02 17:18:33 bird Exp $ */ 1 2 /* 2 3 * MMIO functions … … 32 33 * mmioDosIOProc [internal] 33 34 */ 34 static LRESULT WIN32API mmioDosIOProc(LPMMIOINFO lpmmioinfo, UINT uMessage, LPARAM lParam1, LPARAM lParam2) 35 static LRESULT WIN32API mmioDosIOProc(LPMMIOINFO lpmmioinfo, UINT uMessage, LPARAM lParam1, LPARAM lParam2) 35 36 { 36 37 dprintf(("mmioDosIOProc (%p, %X, %ld, %ld);\n", lpmmioinfo, uMessage, lParam1, lParam2)); … … 99 100 100 101 case MMIOM_WRITE: 101 case MMIOM_WRITEFLUSH: { 102 case MMIOM_WRITEFLUSH: { 102 103 /* no internal buffering, so WRITEFLUSH handled same as WRITE */ 103 104 … … 129 130 */ 130 131 131 LONG Offset = (LONG) lParam1; 132 LONG Whence = (LONG) lParam2; 132 LONG Offset = (LONG) lParam1; 133 LONG Whence = (LONG) lParam2; 133 134 LONG pos; 134 135 … … 139 140 return pos; 140 141 } 141 142 142 143 case MMIOM_RENAME: { 143 144 /* Parameters: … … 155 156 return 0; 156 157 } 157 158 158 159 return 0; 159 160 } … … 208 209 209 210 case MMIOM_WRITE: 210 case MMIOM_WRITEFLUSH: { 211 case MMIOM_WRITEFLUSH: { 211 212 /* no internal buffering, so WRITEFLUSH handled same as WRITE */ 212 213 … … 240 241 return -1; 241 242 } 242 243 243 244 default: 244 245 dprintf(("WINMM (mmioMemIOProc) unexpected message %u\n", uMessage)); 245 246 return 0; 246 247 } 247 248 248 249 return 0; 249 250 } … … 256 257 LPMMIOINFO lpmminfo; 257 258 HMMIO hmmio; 258 259 259 260 // TRACE("('%s', %08lX);\n", szFileName, dwOpenFlags); 260 261 261 262 if (dwOpenFlags & MMIO_PARSE) { 262 263 char buffer[MAX_PATH]; 263 264 264 265 if (GetFullPathNameA(szFileName, sizeof(buffer), buffer, NULL) >= sizeof(buffer)) 265 266 return (HMMIO)FALSE; … … 285 286 lpmminfo->pIOProc = mmioInstallIOProcA(refmminfo->fccIOProc, NULL, MMIO_FINDPROC); 286 287 287 } 288 } 288 289 /* if IO proc specified, use it and specified four character code */ 289 290 else { … … 302 303 } 303 304 } 304 305 305 306 /* see mmioDosIOProc for that one */ 306 307 lpmminfo->adwInfo[0] = refmminfo->adwInfo[0]; 307 308 lpmminfo->dwFlags = dwOpenFlags; 308 309 lpmminfo->hmmio = hmmio; 309 310 310 311 /* call IO proc to actually open file */ 311 312 refmminfo->wErrorRet = (UINT) mmioSendMessage(hmmio, MMIOM_OPEN, (LPARAM) szFileName, (LPARAM) 0); 312 313 313 314 GlobalUnlock(hmmio); 314 315 315 316 if (refmminfo->wErrorRet != 0) { 316 317 GlobalFree(hmmio); 317 318 return 0; 318 319 } 319 320 320 321 return hmmio; 321 322 } … … 345 346 { 346 347 HMMIO ret; 347 348 348 349 if (lpmmioinfo) { 349 350 ret = MMIO_Open(szFileName, lpmmioinfo, dwOpenFlags); … … 361 362 } 362 363 363 364 364 365 /************************************************************************** 365 366 * mmioClose [WINMM.114] 366 367 */ 367 368 ODINFUNCTION2(MMRESULT, mmioClose, 368 HMMIO,hmmio, 369 HMMIO,hmmio, 369 370 UINT,uFlags) 370 371 { … … 399 400 ODINFUNCTION3(LONG, mmioRead, 400 401 HMMIO,hmmio, 401 HPSTR,pch, 402 HPSTR,pch, 402 403 LONG,cch) 403 404 { … … 505 506 * mmioSeek [MMSYSTEM.1214] 506 507 */ 507 ODINFUNCTION3(LONG, mmioSeek, 508 HMMIO, hmmio, 509 LONG,lOffset, 508 ODINFUNCTION3(LONG, mmioSeek, 509 HMMIO, hmmio, 510 LONG,lOffset, 510 511 INT,iOrigin) 511 512 { … … 545 546 * mmioGetInfo [MMSYSTEM.1215] 546 547 */ 547 ODINFUNCTION3(UINT, mmioGetInfo, 548 HMMIO,hmmio, 549 LPMMIOINFO,lpmmioinfo, 548 ODINFUNCTION3(UINT, mmioGetInfo, 549 HMMIO,hmmio, 550 LPMMIOINFO,lpmmioinfo, 550 551 UINT,uFlags) 551 552 { … … 564 565 */ 565 566 ODINFUNCTION3(MMRESULT,mmioSetInfo, 566 HMMIO, hmmio, 567 const MMIOINFO*,lpmmioinfo, 567 HMMIO, hmmio, 568 const MMIOINFO*,lpmmioinfo, 568 569 UINT,uFlags) 569 570 { … … 582 583 */ 583 584 ODINFUNCTION4(UINT,mmioSetBuffer, 584 HMMIO,hmmio, 585 LPSTR,pchBuffer, 585 HMMIO,hmmio, 586 LPSTR,pchBuffer, 586 587 LONG,cchBuffer, 587 588 UINT,uFlags) … … 641 642 */ 642 643 ODINFUNCTION2(UINT,mmioFlush, 643 HMMIO,hmmio, 644 HMMIO,hmmio, 644 645 UINT,uFlags) 645 646 { … … 684 685 */ 685 686 ODINFUNCTION3(UINT,mmioAdvance, 686 HMMIO, hmmio, 687 HMMIO, hmmio, 687 688 LPMMIOINFO,lpmmioinfo, 688 689 UINT,uFlags) … … 753 754 static struct IOProcList *pIOProcListAnchor = &defaultProcs[0]; 754 755 755 ODINFUNCTION3(LPMMIOPROC, mmioInstallIOProcA, 756 FOURCC,fccIOProc, 756 ODINFUNCTION3(LPMMIOPROC, mmioInstallIOProcA, 757 FOURCC,fccIOProc, 757 758 LPMMIOPROC,pIOProc, 758 759 DWORD,dwFlags) … … 777 778 /* Find the end of the list, so we can add our new entry to it */ 778 779 struct IOProcList *pListEnd = pIOProcListAnchor; 779 while (pListEnd->pNext) 780 while (pListEnd->pNext) 780 781 pListEnd = pListEnd->pNext; 781 782 782 783 /* Fill in this node */ 783 784 pListNode->fourCC = fccIOProc; 784 785 pListNode->pIOProc = pIOProc; 785 786 786 787 /* Stick it on the end of the list */ 787 788 pListEnd->pNext = pListNode; 788 789 pListNode->pNext = NULL; 789 790 790 791 /* Return this IOProc - that's how the caller knows we succeeded */ 791 792 lpProc = pIOProc; 792 }; 793 }; 793 794 break; 794 795 795 796 case MMIO_REMOVEPROC: 796 /* 797 /* 797 798 * Search for the node that we're trying to remove - note 798 799 * that this method won't find the first item on the list, but … … 800 801 * let the user delete anyway, that's okay 801 802 */ 802 803 803 804 pListNode = pIOProcListAnchor; 804 805 while (pListNode && pListNode->pNext->fourCC != fccIOProc) 805 806 pListNode = pListNode->pNext; 806 807 807 808 /* If we found it, remove it, but only if it isn't builtin */ 808 if (pListNode && 809 if (pListNode && 809 810 ((pListNode >= defaultProcs) && (pListNode < defaultProcs + sizeof(defaultProcs)))) 810 811 { … … 814 815 }; 815 816 break; 816 817 817 818 case MMIO_FINDPROC: 818 819 /* Iterate through the list looking for this proc identified by fourCC */ … … 836 837 */ 837 838 ODINFUNCTION4(LRESULT,mmioSendMessage, 838 HMMIO,hmmio, 839 HMMIO,hmmio, 839 840 UINT,uMessage, 840 LPARAM,lParam1, 841 LPARAM,lParam1, 841 842 LPARAM,lParam2) 842 843 { … … 882 883 */ 883 884 ODINFUNCTION4(UINT,mmioDescend, 884 HMMIO,hmmio, 885 HMMIO,hmmio, 885 886 LPMMCKINFO,lpck, 886 const MMCKINFO *,lpckParent, 887 const MMCKINFO *,lpckParent, 887 888 UINT,uFlags) 888 889 { … … 891 892 FOURCC srchType; 892 893 893 894 894 895 // TRACE("(%04X, %p, %p, %04X);\n", hmmio, lpck, lpckParent, uFlags); 895 896 896 897 if (lpck == NULL) 897 898 return MMSYSERR_INVALPARAM; 898 899 899 900 dwOldPos = mmioSeek(hmmio, 0, SEEK_CUR); 900 901 dprintf(("WINMM: mmioDescend - dwOldPos=%ld\n", dwOldPos)); 901 902 902 903 if (lpckParent != NULL) { 903 904 TRACE("seek inside parent at %ld !\n", lpckParent->dwDataOffset); … … 908 909 } 909 910 } 910 911 911 912 /* The SDK docu says 'ckid' is used for all cases. Real World 912 * examples disagree -Marcus,990216. 913 * examples disagree -Marcus,990216. 913 914 */ 914 915 915 916 srchType = 0; 916 917 /* find_chunk looks for 'ckid' */ … … 926 927 srchType = lpck->fccType; 927 928 } 928 dprintf(("WINMM: mmioDescend - searching for %.4s.%.4s\n", 929 dprintf(("WINMM: mmioDescend - searching for %.4s.%.4s\n", 929 930 (LPSTR)&srchCkId, 930 931 srchType?(LPSTR)&srchType:"<any>")); 931 932 932 933 if (uFlags & (MMIO_FINDCHUNK|MMIO_FINDLIST|MMIO_FINDRIFF)) { 933 934 while (TRUE) { 934 935 LONG ix; 935 936 936 937 ix = mmioRead(hmmio, (LPSTR)lpck, 3 * sizeof(DWORD)); 937 938 if (ix < 2*sizeof(DWORD)) { … … 947 948 } 948 949 dprintf(("WINMM: mmioDescend - ckid=%.4ss fcc=%.4ss cksize=%08lX !\n", 949 (LPSTR)&lpck->ckid, 950 (LPSTR)&lpck->ckid, 950 951 srchType?(LPSTR)&lpck->fccType:"<unused>", 951 952 lpck->cksize)); … … 954 955 ) 955 956 break; 956 957 957 958 dwOldPos = lpck->dwDataOffset + ((lpck->cksize + 1) & ~1); 958 959 mmioSeek(hmmio, dwOldPos, SEEK_SET); … … 976 977 else 977 978 mmioSeek(hmmio, lpck->dwDataOffset, SEEK_SET); 978 dprintf(("WINMM: mmioDescend - lpck: ckid=%.4s, cksize=%ld, dwDataOffset=%ld fccType=%08lX (%.4s)!\n", 979 (LPSTR)&lpck->ckid, lpck->cksize, lpck->dwDataOffset, 979 dprintf(("WINMM: mmioDescend - lpck: ckid=%.4s, cksize=%ld, dwDataOffset=%ld fccType=%08lX (%.4s)!\n", 980 (LPSTR)&lpck->ckid, lpck->cksize, lpck->dwDataOffset, 980 981 lpck->fccType, srchType?(LPSTR)&lpck->fccType:"")); 981 982 return 0; … … 986 987 */ 987 988 ODINFUNCTION3(UINT,mmioAscend, 988 HMMIO,hmmio, 989 HMMIO,hmmio, 989 990 LPMMCKINFO,lpck, 990 991 UINT,uFlags) … … 994 995 if (lpck->dwFlags & MMIO_DIRTY) { 995 996 DWORD dwOldPos, dwNewSize, dwSizePos; 996 997 997 998 dprintf(("WINMM: mmioAscend - chunk is marked MMIO_DIRTY, correcting chunk size\n")); 998 999 dwOldPos = mmioSeek(hmmio, 0, SEEK_CUR); … … 1002 1003 TRACE("dwNewSize=%ld\n", dwNewSize); 1003 1004 lpck->cksize = dwNewSize; 1004 1005 1005 1006 dwSizePos = lpck->dwDataOffset - sizeof(DWORD); 1006 1007 dprintf(("WINMM: mmioAscend - dwSizePos=%ld\n", dwSizePos)); 1007 1008 1008 1009 mmioSeek(hmmio, dwSizePos, SEEK_SET); 1009 1010 mmioWrite(hmmio, (LPSTR)&dwNewSize, sizeof(DWORD)); … … 1012 1013 1013 1014 mmioSeek(hmmio, lpck->dwDataOffset + ((lpck->cksize + 1) & ~1), SEEK_SET); 1014 1015 1015 1016 return 0; 1016 1017 } … … 1020 1021 */ 1021 1022 ODINFUNCTION3(UINT,mmioCreateChunk, 1022 HMMIO,hmmio, 1023 LPMMCKINFO,lpck, 1023 HMMIO,hmmio, 1024 LPMMCKINFO,lpck, 1024 1025 UINT,uFlags) 1025 1026 { … … 1043 1044 lpck->dwDataOffset = dwOldPos + size; 1044 1045 1045 if (lpck->ckid == FOURCC_RIFF || lpck->ckid == FOURCC_LIST) 1046 if (lpck->ckid == FOURCC_RIFF || lpck->ckid == FOURCC_LIST) 1046 1047 size += sizeof(DWORD); 1047 1048 lpck->dwFlags = MMIO_DIRTY; … … 1064 1065 LPCSTR,szFileName, 1065 1066 LPCSTR,szNewFileName, 1066 LPMMIOINFO,lpmmioinfo, 1067 LPMMIOINFO,lpmmioinfo, 1067 1068 DWORD,dwRenameFlags) 1068 1069 { … … 1079 1080 if (lpmmioinfo) 1080 1081 memcpy(lpmminfo, lpmmioinfo, sizeof(MMIOINFO)); 1081 1082 1082 1083 /* assume DOS file if not otherwise specified */ 1083 1084 if (lpmminfo->fccIOProc == 0 && lpmminfo->pIOProc == NULL) { … … 1092 1093 lpmminfo->pIOProc = mmioInstallIOProcA(lpmminfo->fccIOProc, NULL, MMIO_FINDPROC); 1093 1094 1094 } 1095 } 1095 1096 /* (if IO proc specified, use it and specified four character code) */ 1096 1097 1097 1098 result = (UINT) mmioSendMessage(hmmio, MMIOM_RENAME, (LPARAM) szFileName, (LPARAM) szNewFileName); 1098 1099 1099 1100 GlobalUnlock(hmmio); 1100 1101 GlobalFree(hmmio); … … 1110 1111 LPCWSTR,szFileName, 1111 1112 LPCWSTR,szNewFileName, 1112 LPMMIOINFO,lpmmioinfo, 1113 LPMMIOINFO,lpmmioinfo, 1113 1114 DWORD,dwRenameFlags) 1114 1115 {
Note:
See TracChangeset
for help on using the changeset viewer.