/* these functions are duplicates of the ones in the ULTRASND library because it matters to this library whether or not we're talking to Gravis Ultrasound and shitty SB emulation */ int gravis_sbos_detect() { unsigned char FAR *ex; uint16_t s,o; int i = 0x78; while (i < 0x90) { #if TARGET_MSDOS == 32 o = *((uint16_t*)(i*4U)); s = *((uint16_t*)((i*4U)+2U)); #else o = *((uint16_t far*)MK_FP(0,(uint16_t)i*4U)); s = *((uint16_t far*)MK_FP(0,((uint16_t)i*4U)+2U)); #endif if (o == 0xFFFF || s == 0x0000 || s == 0xFFFF) { i++; continue; } /* we're looking for "SBOS" signature */ #if TARGET_MSDOS == 32 ex = (unsigned char*)((s << 4UL) + 0xA); if (memcmp(ex,"SBOS",4) == 0) return i; #else ex = MK_FP(s,0xA); if (_fmemcmp(ex,"SBOS",4) == 0) return i; #endif i++; } return -1; }
BOOL ClipboardPaste(void) { HGLOBAL hMem = 0; LPSTR lpMem; UINT uFormat = CharSet == CS_OEM ? CF_OEMTEXT : CF_TEXT; LONG lSize; MODEENUM SaveMode; BOOL FreeConversionMemory = FALSE; if (IsViewOnly()) return(FALSE); /*prepare resources...*/ if (!OpenClipboard(hwndMain)) { ErrorBox(MB_ICONEXCLAMATION, 302); return (FALSE); } /*first check for binary data containing null bytes...*/ if (UtfEncoding != 16 && (hMem = GetClipboardData(uFormat)) != 0) { lSize = GlobalSize(hMem); if ((lpMem = GlobalLock(hMem)) != NULL) { LPSTR lp; LONG lRemain; lp = _fmemchr(lpMem, '\0', (size_t)lSize); if (lp != NULL && (lp-lpMem+sizeof(BinaryPart)) <= (size_t)lSize && lp[1]==BinaryFormat[0] && _fmemchr(lp+1, '\0', lSize-(lp+1-lpMem)) != NULL && _fmemcmp(lp+1, BinaryFormat, 10) == 0) { /*insert first part of null containing binary data...*/ SaveMode = Mode; if (Mode != InsertMode && Mode != ReplaceMode) { StartUndoSequence(); Mode = InsertMode; } if (SelectCount) DeleteSelected(17); else EnterDeleteForUndo(&CurrPos, 0, 1); /*force new undo elem*/ Mode = SaveMode; HideEditCaret(); if (*lpMem) InsertBuffer(lpMem, (UINT)(lp-lpMem), 0); lRemain = strtoul(lp+11, &lp, 10); if (*lp != ':') lSize = 0; else { if (lSize >= (lp - lpMem) + lRemain) lSize = lRemain; else lSize = 0; lpMem = lp + 1; } if (lSize) InsertBuffer(lpMem, (UINT)lSize, 1); GetXPos(&CurrCol); ShowEditCaret(); /*clean up...*/ GlobalUnlock(hMem); CloseClipboard(); return (TRUE); } GlobalUnlock(hMem); hMem = 0; } } /*then, if running on Windows NT, try to get wide chars...*/ if (!(GetVersion() & 0x80000000U) && CharSet != CS_EBCDIC) { UINT Cp; if (UtfEncoding == 8) Cp = CP_UTF8; else if (CharSet == CS_ANSI) Cp = AnsiCodePage; else Cp = OemCodePage; if (Cp) { HGLOBAL hWideCharMem = GetClipboardData(CF_UNICODETEXT); WCHAR *lpWideCharMem; if (hWideCharMem) { lSize = GlobalSize(hWideCharMem); lpWideCharMem = GlobalLock(hWideCharMem); if (lpWideCharMem != NULL) { INT nSizeRequired; PWCHAR wp; lSize >>= 1; wp = wmemchr(lpWideCharMem, '\0', lSize); if (wp != NULL) lSize = wp - lpWideCharMem; if (UtfEncoding == 16) { lSize <<= 1; if (UtfLsbFirst) { hMem = hWideCharMem; lpMem = (LPSTR)lpWideCharMem; } else { hMem = GlobalAlloc(GMEM_MOVEABLE, lSize); if (hMem) { lpMem = GlobalLock(hMem); if (lpMem != NULL) { INT i = 0; while ((i += 2) <= lSize) { lpMem[i-2] = *lpWideCharMem >> 8; lpMem[i-1] = *lpWideCharMem++ & 255; } FreeConversionMemory = TRUE; } else { GlobalFree(hMem); hMem = 0; } } } } else {
int _fstrcmp(fargDecl(const char, dst), fargDecl(const char, src)) { return _fmemcmp(fargPass(dst), fargPass(src), _fstrlen1(dst)); }
int scFar scCDecl SCmemcmp( const void scFar* p1, const void scFar* p2, long len ) { return _fmemcmp( p1, p2, (size_t)len ); }