|
|
1.1 ! root 1: #include "cardfile.h" ! 2: ! 3: /*********************************************************************/ ! 4: /* Windows/PM Cardfile Shared Code */ ! 5: /* */ ! 6: /* (c) Copyright Microsoft Corp. 1987,1988 - All Rights Reserved */ ! 7: /*********************************************************************/ ! 8: ! 9: /*********************************************************************/ ! 10: /* The following shared code was developed from the original */ ! 11: /* Cardfile application. This code can be compiled to run under */ ! 12: /* either the Windows or the PM manager environment. All */ ! 13: /* functionality associated with bitmaps or printing has been */ ! 14: /* deleted. Some comments refering to these functions may still be */ ! 15: /* present in the code and should be disregarded. jw. */ ! 16: /*********************************************************************/ ! 17: ! 18: /*********************************************************************/ ! 19: /* DoGoto - */ ! 20: /* Searches through the headers of the cards to find a card with */ ! 21: /* the same pattern as pchBuf */ ! 22: /* */ ! 23: /* Same for PM and Windows */ ! 24: /*********************************************************************/ ! 25: ! 26: void FAR DoGoto(pchBuf) ! 27: PSTR pchBuf; ! 28: { ! 29: int i; ! 30: LPCARDHEADER lpCards; ! 31: LPCARDHEADER lpCardsTmp; ! 32: char buf[80]; ! 33: int iNextFirst; ! 34: ! 35: /* get the header information */ ! 36: lpCards = (LPCARDHEADER) GlobalLock(hCards); ! 37: ! 38: /* for each card starting with the one after the front card */ ! 39: lpCardsTmp = lpCards+iFirstCard+1; ! 40: for (i = 1; i <= cCards; ++i) ! 41: { ! 42: if (i + iFirstCard == cCards) ! 43: lpCardsTmp = lpCards; ! 44: ! 45: /* look for the pattern */ ! 46: if (AnsiFind(lpCardsTmp->line, pchBuf, LINELENGTH)) ! 47: goto DoneSearching; ! 48: lpCardsTmp++; ! 49: } ! 50: ! 51: DoneSearching: ! 52: GlobalUnlock(hCards); ! 53: if (i <= cCards) /* found it */ ! 54: { ! 55: iNextFirst = iFirstCard + i; ! 56: if (iNextFirst >= cCards) ! 57: iNextFirst -= cCards; ! 58: GetNewCard(iFirstCard, iNextFirst); ! 59: } ! 60: else ! 61: { ! 62: /* couln't find pattern */ ! 63: Mylstrcpy((LPSTR)buf, (LPSTR)"\""); ! 64: Mylstrcat((LPSTR)buf, (LPSTR)pchBuf); ! 65: Mylstrcat((LPSTR)buf, (LPSTR)"\""); ! 66: MyMessageBox(IDS_ECANTFIND, buf, MB_OK | MB_ICONEXCLAMATION); ! 67: } ! 68: } ! 69: ! 70: /*********************************************************************/ ! 71: /* FindStrCard - */ ! 72: /* Looks through the body of each card to find the pattern */ ! 73: /* */ ! 74: /* Slightly different for PM and Windows */ ! 75: /*********************************************************************/ ! 76: ! 77: void FAR FindStrCard() ! 78: { ! 79: int i; ! 80: int fFound; ! 81: LPSTR lpch1; ! 82: LPSTR lpText; ! 83: int iCard; ! 84: char buf[80]; ! 85: HANDLE hText; ! 86: int ichStart; ! 87: CARDHEADER CardHead; ! 88: CARD Card; ! 89: LPCARDHEADER lpCards; ! 90: ! 91: /* get a buffer for reading in each card's text */ ! 92: hText = GlobalAlloc(GHND, (long)CARDTEXTSIZE); ! 93: if (!hText) ! 94: FSC_INSMEM: ! 95: { ! 96: CardfileOkError(IDS_EINSMEMORY); ! 97: return; ! 98: } ! 99: lpText = GlobalLock(hText); ! 100: fFound = FALSE; ! 101: ! 102: /* get the front card's text */ ! 103: GetWindowText(hCardWnd, lpText, CARDTEXTSIZE); ! 104: ! 105: /* get the current selection (and the starting spot for the search */ ! 106: ichStart = HIWORD(SendMessage(hCardWnd, EM_GETSEL, 0, 0L)); ! 107: iCard = iFirstCard; ! 108: ! 109: /* look in for the pattern */ ! 110: if (lpch1 = AnsiFind(lpText+ichStart, CurIFind, -1)) ! 111: { ! 112: fFound = TRUE; ! 113: goto FS_DONE; ! 114: } ! 115: ! 116: /* try following cards */ ! 117: iCard++; ! 118: if (iCard == cCards) ! 119: iCard = 0; ! 120: ! 121: /* for each card back to current card */ ! 122: for (i = 0; i < cCards-1; ++i) ! 123: { ! 124: /* get text */ ! 125: lpCards = (LPCARDHEADER) GlobalLock(hCards); ! 126: lpCards += iCard; ! 127: CardHead = *lpCards; ! 128: GlobalUnlock(hCards); ! 129: ReadCurCardData(&CardHead, &Card, lpText); ! 130: ! 131: /* look for text */ ! 132: if (lpch1 = AnsiFind(lpText, CurIFind, -1)) ! 133: { ! 134: fFound = TRUE; ! 135: goto FS_DONE; ! 136: } ! 137: iCard++; ! 138: if (iCard == cCards) ! 139: iCard = 0; ! 140: } ! 141: ! 142: /* if we still haven't found it, get current text again */ ! 143: GetWindowText(hCardWnd, lpText, CARDTEXTSIZE); ! 144: ! 145: /* look up to beginning of selection */ ! 146: if (lpch1 = AnsiFind(lpText, CurIFind, ichStart)) ! 147: { ! 148: fFound = TRUE; ! 149: goto FS_DONE; ! 150: } ! 151: ! 152: FS_DONE: ! 153: /* if we found it */ ! 154: if (fFound) ! 155: { ! 156: ! 157: /* and not on font card, get new data */ ! 158: if (iCard != iFirstCard && !GetNewCard(iFirstCard, iCard)) ! 159: goto FSC_INSMEM; ! 160: ! 161: /* set selection */ ! 162: #ifdef IN_WINDOWS ! 163: /* Unfortunately the order of the parameters for the SETSEL */ ! 164: /* message are reversed in PM. The easiest way to handle this */ ! 165: /* having separate SendMessages. jw */ ! 166: ! 167: SendMessage(hCardWnd, EM_SETSEL, 0, MAKELONG((int)(lpch1-lpText), ! 168: (int)(lpch1-lpText)+Mylstrlen((LPSTR)CurIFind))); ! 169: #else ! 170: SendMessage(hCardWnd, EM_SETSEL, MAKEULONG((int)(lpch1-lpText), ! 171: (int)(lpch1-lpText)+Mylstrlen((PSZ)CurIFind)), 0L); ! 172: #endif ! 173: } ! 174: else ! 175: { ! 176: /* couldn't find it */ ! 177: Mylstrcpy((LPSTR)buf, (LPSTR)"\""); ! 178: Mylstrcat((LPSTR)buf, (LPSTR)CurIFind); ! 179: Mylstrcat((LPSTR)buf, (LPSTR)"\""); ! 180: MyMessageBox(IDS_ECANTFIND, buf, MB_OK | MB_ICONEXCLAMATION); ! 181: } ! 182: GlobalUnlock(hText); ! 183: GlobalFree(hText); ! 184: } ! 185: ! 186: ! 187: /*********************************************************************/ ! 188: /* DoCutCopy - */ ! 189: /* Finds the pKey string within lpSrc. */ ! 190: /* SrcLen specifies the length of the lpSrc to be searched. */ ! 191: /* Returns LPSTR to where the Key is if pKey is found in lpSrc, */ ! 192: /* FALSE otherwise. */ ! 193: /* */ ! 194: /* Same for PM and Windows */ ! 195: /*********************************************************************/ ! 196: ! 197: LPSTR NEAR AnsiFind(lpSrc, pKey, SrcLen) ! 198: LPSTR lpSrc; ! 199: PSTR pKey; ! 200: short SrcLen; ! 201: { ! 202: register LPSTR lpch; ! 203: register PSTR pKeyTmp; ! 204: ! 205: for (; *lpSrc && SrcLen; lpSrc++, SrcLen--) ! 206: { ! 207: for (lpch = lpSrc, pKeyTmp = pKey; *pKeyTmp; pKeyTmp++, lpch++) ! 208: { ! 209: if (ANSICHARUP(CHAR_STR(lpch)) != ANSICHARUP(CHAR_STR(pKeyTmp))) ! 210: break; ! 211: if (((PSTR)AnsiNext(pKeyTmp)) - pKeyTmp > 1) ! 212: { ! 213: if (pKeyTmp[1] != lpch[1]) ! 214: break; ! 215: pKeyTmp++; ! 216: lpch++; ! 217: } ! 218: } ! 219: if (!*pKeyTmp) ! 220: return lpSrc; ! 221: if (AnsiNext(lpSrc) - lpSrc > 1) ! 222: { ! 223: lpSrc++; ! 224: SrcLen--; ! 225: } ! 226: } ! 227: return FALSE; ! 228: } ! 229:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.