home *** CD-ROM | disk | FTP | other *** search
-
- /* Copyright © 1991, 1992 by Walter Rothe. You may freely use and modify this
- * program, but not for commercial profit. A modest fee for distribution is
- * allowed. Derivative works must be released with source along with the
- * executable or provisions made to provide the user source, if requested.
- * Uploading source to a major bulletin board system within 6 months of the
- * time of the request satisfies this requirement. This copyright notice
- * must not be deleted from the source.
- */
-
- /* This program makes sure the rest of a major term matches the specified */
- /* pattern. */
-
- /* The "&" function requires that patterns on the left and right of the */
- /* "&" match what they are supposed to and that both are in the same */
- /* sentence or context. A sentence or context is delimited by the */
- /* following items: */
- /* */
- /* 1) period followed by a space or line feed */
- /* 2) a maximum of OVERLAP characters */
- /* 3) two newline chars with no chars but ">" between them */
- /* 4) start or end of article */
- /* 5) newline before a colon */
-
- /* The "*" function requires that the pattern on the left and right of the */
- /* "*" match what they are supposed to and that both are in the same word. */
- /* A space or newline char delimits words. */
-
- /* Note: Since end of article delimiter is not known until later, there is */
- /* a possibility of matching something in the next article during a right */
- /* look. Normally this should not present a major problem since the data */
- /* around an article separator is usually not used to search on and a */
- /* sentence delimiter will usually be very quickly found. This should not */
- /* be handled in this routine. BP should be saved on exit from this pgm */
- /* and used to determine if a real match occured when the next article */
- /* delimiter is found. At that point, you can rescan the article. You */
- /* could also modify scan.c so that once OutArt is set, you continue to */
- /* check for matches and when you find the article sep, determine if a */
- /* real match occured. */
-
- #include <stdio.h>
- #include <exec/types.h>
- #include <exec/memory.h>
- #include <libraries/dos.h>
- #include <libraries/dosextens.h>
- #include <functions.h>
- #include "fcntl.h"
- #include "ctype.h"
- #include <string.h>
- #include "scan.h"
-
- #define FRSTWRDLCKSTP 0
- #define FRSTWRDLCKSTP1 1
- #define FRSTWRDLCKSTP2 2
- #define FRSTWRDLCKSTP3 3
- #define WRDLOCKSTEP 4
- #define WRDLOCKSTEP1 5
- #define WRDLOCKSTEP2 6
- #define SENTENCELOOK 7
- #define WORDLOOK 8
- #define WORDLOOK1 9
- #define FRSTWRDLOOK 10
- #define FRSTWRDLOOK1 11
- #define FRSTWRDLOOK2 12
-
- int FindRestOfMT(BI,MTI)
- char *BI; /* Buffer Index */
- unsigned char MTI; /* Major Term Index */
- {
- extern int FDsplTbl[]; /* offset from BI to strt of token */
- extern Lines NoBrakAry[]; /* same as above but no 0's for &,*,?,[ */
- extern char *NBAryEnd[]; /* pntrs to end of MT string in NBAry */
- extern int TokStrt[]; /* indx 2 1st byte of token in nobrakarray */
- extern int TokEnd[]; /* indx 2 last byte of token in nobrak */
- extern char *EOCB; /* end of current buffer + 1 */
- extern int ArtInPrevBuf; /* 1 if article strt is in previous buffer */
- extern char *CurArtStrt; /* Pntr 2 strt of article in a buffer */
- extern ErrP();
- extern char LowrCs[]; /* Convert mixed case to lower case */
- extern BrakTyp1 *BrakIdx;
- extern BrakTyp2 *BrakPtr;
-
- char *BP; /* Buffer pointer */
- char *BPPntr;
- char *FStrt;
- char *FEnd;
- char *LookSrcP;
- char *NBAS;
- char *SenStrt; /* earliest into buffer that sentence could start */
- char *SenEnd;
- char *LookStrt,*LookStrt1,*LookStrt2;
- char *BPStrt,*BPStrt1,*BPStrt2;
- unsigned char MTN;
- int FoundColon=0;
- unsigned char Mode;
-
- MTN = MTI >> 1;
- BP = BI + FDsplTbl[MTI];
- LookSrcP = &NoBrakAry[MTN][TokStrt[MTI]] - 1;
- FStrt = (char *)&NoBrakAry[MTN];
- Mode = FRSTWRDLCKSTP;
- SenStrt = BI - OVERLAP + MAXKWSZ;
- /* if article start is in current buffer and is bigger than the earliest */
- /* into the buff that the sentence could start, set sentence start to it */
- if (!ArtInPrevBuf && (CurArtStrt > SenStrt)) { SenStrt = CurArtStrt; }
- while (LookSrcP >= FStrt) {
- switch(*LookSrcP) {
-
- case('*'):
- LookSrcP--;
- if (LookSrcP < FStrt) { continue; }
- switch(Mode) {
- case(FRSTWRDLCKSTP):
- LookStrt = LookSrcP;
- Mode = FRSTWRDLOOK; break;
- case(FRSTWRDLCKSTP1):
- LookStrt1 = LookSrcP;
- Mode = FRSTWRDLOOK1; break;
- case(FRSTWRDLCKSTP2):
- LookStrt2 = LookSrcP;
- Mode = FRSTWRDLOOK2; break;
- case(FRSTWRDLCKSTP3):
- ErrP("Only supports up to 3 * in a word\n");
- case(WRDLOCKSTEP):
- LookStrt1 = LookSrcP;
- Mode = WORDLOOK; break;
- case(WRDLOCKSTEP1):
- LookStrt2 = LookSrcP;
- Mode = WORDLOOK1; break;
- case(WRDLOCKSTEP2):
- ErrP("Only supports up to 3 * in a word\n");
- }
- break;
-
- case('&'):
- if (--LookSrcP < FStrt) { continue; }
- if (*LookSrcP == '*') {
- if (--LookSrcP < FStrt) { continue; }
- }
- LookStrt = LookSrcP;
- Mode = SENTENCELOOK; break;
-
- case('['):
- NBAS = &NoBrakAry[MTN][0];
- break;
-
- default: { break; }
- }
- BP--;
- switch(Mode) {
-
- case(SENTENCELOOK):
- /* check if BP is passed a sentence/context delimiter */
- if (BP < SenStrt) { return(0); }
- switch(*BP) {
- case(':'):
- FoundColon = 1; break;
- case('\n'):
- if(FoundColon) { return(0); }
- BPPntr = BP + 1;
- while (*BPPntr == '>') { BPPntr++; }
- if (*BPPntr == '\n') { return(0); }
- break;
- case('.'):
- if(*(BP+1) == ' ' || *(BP+1) == '\n') { return(0); }
- break;
- }
- switch(*LookSrcP) {
- case('?'):
- Mode = WRDLOCKSTEP;
- BPStrt = BP;
- LookSrcP--;
- break;
- case('['):
- if (BrakPtr[MTN][BrakIdx[MTN][LookSrcP-NBAS]][*BP]) {
- Mode = WRDLOCKSTEP;
- BPStrt = BP;
- LookSrcP--;
- }
- break;
- default:
- if (LowrCs[*BP] == LowrCs[*LookSrcP]) {
- Mode = WRDLOCKSTEP;
- BPStrt = BP;
- LookSrcP--;
- }
- break;
- }
- break;
-
- case(WORDLOOK) :
- if ((BP < SenStrt) || (*BP==' ') || (*BP=='\n')) {
- /* word did not match */
- LookSrcP = LookStrt;
- Mode = SENTENCELOOK;
- BP = BPStrt;
- }
- else {
- switch(*LookSrcP) {
- case('?'):
- Mode = WRDLOCKSTEP1;
- BPStrt1 = BP;
- LookSrcP--;
- break;
- case('['):
- if (BrakPtr[MTN][BrakIdx[MTN][LookSrcP-NBAS]][*BP]) {
- Mode = WRDLOCKSTEP1;
- BPStrt1 = BP;
- LookSrcP--;
- }
- break;
- default:
- if (LowrCs[*BP] == LowrCs[*LookSrcP]) {
- Mode = WRDLOCKSTEP1;
- BPStrt1 = BP;
- LookSrcP--;
- }
- break;
- }
- }
- break;
-
- case(WORDLOOK1) :
- if ((BP < SenStrt) || (*BP==' ') || (*BP=='\n')) {
- /* word did not match */
- LookSrcP = LookStrt;
- Mode = WORDLOOK;
- BP = BPStrt1;
- }
- else {
- switch(*LookSrcP) {
- case('?'):
- Mode = WRDLOCKSTEP2;
- BPStrt2 = BP;
- LookSrcP--;
- break;
- case('['):
- if (BrakPtr[MTN][BrakIdx[MTN][LookSrcP-NBAS]][*BP]) {
- Mode = WRDLOCKSTEP2;
- BPStrt2 = BP;
- LookSrcP--;
- }
- break;
- default:
- if (LowrCs[*BP] == LowrCs[*LookSrcP]) {
- Mode = WRDLOCKSTEP2;
- BPStrt2 = BP;
- LookSrcP--;
- }
- break;
- }
- }
- break;
-
- case(FRSTWRDLOOK) :
- if ((*BP==' ') || (*BP=='\n')) {
- /* word did not match */
- return(0);
- }
- else {
- switch(*LookSrcP) {
- case('?'):
- Mode = FRSTWRDLCKSTP1;
- BPStrt = BP;
- LookSrcP--;
- break;
- case('['):
- if (BrakPtr[MTN][BrakIdx[MTN][LookSrcP-NBAS]][*BP]) {
- Mode = FRSTWRDLCKSTP1;
- BPStrt = BP;
- LookSrcP--;
- }
- break;
- default:
- if (LowrCs[*BP] == LowrCs[*LookSrcP]) {
- Mode = FRSTWRDLCKSTP1;
- BPStrt = BP;
- LookSrcP--;
- }
- break;
- }
- }
- break;
-
- case(FRSTWRDLOOK1) :
- if ((*BP==' ') || (*BP=='\n')) {
- /* word did not match */
- Mode = FRSTWRDLOOK;
- BP = BPStrt;
- LookSrcP = LookStrt;
- }
- else {
- switch(*LookSrcP) {
- case('?'):
- Mode = FRSTWRDLCKSTP2;
- BPStrt1 = BP;
- LookSrcP--;
- break;
- case('['):
- if (BrakPtr[MTN][BrakIdx[MTN][LookSrcP-NBAS]][*BP]) {
- Mode = FRSTWRDLCKSTP2;
- BPStrt1 = BP;
- LookSrcP--;
- }
- break;
- default:
- if (LowrCs[*BP] == LowrCs[*LookSrcP]) {
- Mode = FRSTWRDLCKSTP2;
- BPStrt1 = BP;
- LookSrcP--;
- }
- break;
- }
- }
- break;
-
- case(FRSTWRDLOOK2) :
- if ((*BP==' ') || (*BP=='\n')) {
- /* word did not match */
- Mode = FRSTWRDLOOK1;
- BP = BPStrt1;
- LookSrcP = LookStrt1;
- }
- else {
- switch(*LookSrcP) {
- case('?'):
- Mode = FRSTWRDLCKSTP3;
- BPStrt2 = BP;
- LookSrcP--;
- break;
- case('['):
- if (BrakPtr[MTN][BrakIdx[MTN][LookSrcP-NBAS]][*BP]) {
- Mode = FRSTWRDLCKSTP3;
- BPStrt2 = BP;
- LookSrcP--;
- }
- break;
- default:
- if (LowrCs[*BP] == LowrCs[*LookSrcP]) {
- Mode = FRSTWRDLCKSTP3;
- BPStrt2 = BP;
- LookSrcP--;
- }
- break;
- }
- }
- break;
-
- case(WRDLOCKSTEP) :
- switch(*LookSrcP) {
- case('?'):
- LookSrcP--;
- break;
- case('['):
- if (!BrakPtr[MTN][BrakIdx[MTN][LookSrcP-NBAS]][*BP]) {
- LookSrcP = LookStrt;
- Mode = SENTENCELOOK;
- BP = BPStrt;
- }
- else { LookSrcP--; }
- break;
- default:
- if (LowrCs[*BP] != LowrCs[*LookSrcP]) {
- LookSrcP = LookStrt;
- Mode = SENTENCELOOK;
- BP = BPStrt;
- }
- else { LookSrcP--; }
- break;
- }
- break;
-
- case(WRDLOCKSTEP1) :
- switch(*LookSrcP) {
- case('?'):
- LookSrcP--;
- break;
- case('['):
- if (!BrakPtr[MTN][BrakIdx[MTN][LookSrcP-NBAS]][*BP]) {
- LookSrcP = LookStrt1;
- Mode = WORDLOOK;
- BP = BPStrt1;
- }
- else { LookSrcP--; }
- break;
- default:
- if (LowrCs[*BP] != LowrCs[*LookSrcP]) {
- LookSrcP = LookStrt1;
- Mode = WORDLOOK;
- BP = BPStrt1;
- }
- else { LookSrcP--; }
- break;
- }
- break;
-
- case(WRDLOCKSTEP2) :
- switch(*LookSrcP) {
- case('?'):
- LookSrcP--;
- break;
- case('['):
- if (!BrakPtr[MTN][BrakIdx[MTN][LookSrcP-NBAS]][*BP]) {
- LookSrcP = LookStrt2;
- Mode = WORDLOOK1;
- BP = BPStrt2;
- }
- else { LookSrcP--; }
- break;
- default:
- if (LowrCs[*BP] != LowrCs[*LookSrcP]) {
- LookSrcP = LookStrt2;
- Mode = WORDLOOK1;
- BP = BPStrt2;
- }
- else { LookSrcP--; }
- break;
- }
- break;
-
- case(FRSTWRDLCKSTP) :
- switch(*LookSrcP) {
- case('?'):
- LookSrcP--;
- break;
- case('['):
- if (!BrakPtr[MTN][BrakIdx[MTN][LookSrcP-NBAS]][*BP]) {
- return(0);
- }
- LookSrcP--;
- break;
- default:
- if (LowrCs[*BP] != LowrCs[*LookSrcP]) {
- return(0);
- }
- LookSrcP--;
- break;
- }
- break;
-
- case(FRSTWRDLCKSTP1) :
- switch(*LookSrcP) {
- case('?'):
- LookSrcP--;
- break;
- case('['):
- if (!BrakPtr[MTN][BrakIdx[MTN][LookSrcP-NBAS]][*BP]) {
- Mode = FRSTWRDLOOK;
- LookSrcP = LookStrt;
- BP = BPStrt;
- }
- else { LookSrcP--; }
- break;
- default:
- if (LowrCs[*BP] != LowrCs[*LookSrcP]) {
- Mode = FRSTWRDLOOK;
- LookSrcP = LookStrt;
- BP = BPStrt;
- }
- else { LookSrcP--; }
- break;
- }
- break;
-
- case(FRSTWRDLCKSTP2) :
- switch(*LookSrcP) {
- case('?'):
- LookSrcP--;
- break;
- case('['):
- if (!BrakPtr[MTN][BrakIdx[MTN][LookSrcP-NBAS]][*BP]) {
- Mode = FRSTWRDLOOK1;
- LookSrcP = LookStrt1;
- BP = BPStrt1;
- }
- else { LookSrcP--; }
- break;
- default:
- if (LowrCs[*BP] != LowrCs[*LookSrcP]) {
- Mode = FRSTWRDLOOK1;
- LookSrcP = LookStrt1;
- BP = BPStrt1;
- }
- else { LookSrcP--; }
- break;
- }
- break;
-
- case(FRSTWRDLCKSTP3) :
- switch(*LookSrcP) {
- case('?'):
- LookSrcP--;
- break;
- case('['):
- if (!BrakPtr[MTN][BrakIdx[MTN][LookSrcP-NBAS]][*BP]) {
- Mode = FRSTWRDLOOK2;
- LookSrcP = LookStrt2;
- BP = BPStrt2;
- }
- else { LookSrcP--; }
- break;
- default:
- if (LowrCs[*BP] != LowrCs[*LookSrcP]) {
- Mode = FRSTWRDLOOK2;
- LookSrcP = LookStrt2;
- BP = BPStrt2;
- }
- else { LookSrcP--; }
- break;
- }
- break;
- }
- }
- BP = BI + FDsplTbl[MTI] + TokEnd[MTI] - TokStrt[MTI];
- LookSrcP = &NoBrakAry[MTN][TokEnd[MTI]] + 1;
- FEnd = NBAryEnd[MTN];
- Mode = FRSTWRDLCKSTP;
- SenEnd = BI + OVERLAP - MAXKWSZ;
- if (EOCB <= SenEnd) { SenEnd = EOCB - 1; }
- while (LookSrcP <= FEnd) {
- switch(*LookSrcP) {
- case('*'):
- LookSrcP++;
- if (LookSrcP > FEnd) { continue; }
- switch(Mode) {
- case(FRSTWRDLCKSTP):
- LookStrt = LookSrcP;
- Mode = FRSTWRDLOOK; break;
- case(FRSTWRDLCKSTP1):
- LookStrt1 = LookSrcP;
- Mode = FRSTWRDLOOK1; break;
- case(FRSTWRDLCKSTP2):
- LookStrt2 = LookSrcP;
- Mode = FRSTWRDLOOK2; break;
- case(FRSTWRDLCKSTP3):
- ErrP("Only supports up to 3 * in a word\n");
- case(WRDLOCKSTEP):
- LookStrt1 = LookSrcP;
- Mode = WORDLOOK; break;
- case(WRDLOCKSTEP1):
- LookStrt2 = LookSrcP;
- Mode = WORDLOOK1; break;
- case(WRDLOCKSTEP2):
- ErrP("Only supports up to 3 * in a word\n");
- }
- break;
-
- case('&'):
- if (++LookSrcP > FEnd) { continue; }
- if (*LookSrcP == '*') {
- if (++LookSrcP > FEnd) { continue; }
- }
- LookStrt = LookSrcP;
- Mode = SENTENCELOOK; break;
-
- case('['):
- NBAS = &NoBrakAry[MTN][0];
- break;
-
- default: { break; }
- }
- BP++;
- switch(Mode) {
-
- case(SENTENCELOOK):
- /* check if BP is passed a sentence/context delimiter */
- if (BP > SenEnd) { return(0); }
- switch(*BP) {
- case('\n'):
- BPPntr = BP - 1;
- if(*(BPPntr) == '.') { return(0); }
- while (*BPPntr == '>') { BPPntr--; }
- if (*BPPntr == '\n') { return(0); }
- break;
-
- case(' '):
- if(*(BP-1) == '.') { return(0); }
- break;
- }
- switch(*LookSrcP) {
- case('?'):
- Mode = WRDLOCKSTEP;
- BPStrt = BP;
- LookSrcP++;
- break;
- case('['):
- if (BrakPtr[MTN][BrakIdx[MTN][LookSrcP-NBAS]][*BP]) {
- Mode = WRDLOCKSTEP;
- BPStrt = BP;
- LookSrcP++;
- }
- break;
- default:
- if (LowrCs[*BP] == LowrCs[*LookSrcP]) {
- Mode = WRDLOCKSTEP;
- BPStrt = BP;
- LookSrcP++;
- }
- break;
- }
- break;
-
- case(WORDLOOK) :
- if ((BP > SenEnd) || (*BP==' ') || (*BP=='\n')) {
- /* word did not match */
- LookSrcP = LookStrt;
- Mode = SENTENCELOOK;
- BP = BPStrt;
- }
- else {
- switch(*LookSrcP) {
- case('?'):
- Mode = WRDLOCKSTEP1;
- BPStrt1 = BP;
- LookSrcP++;
- break;
- case('['):
- if (BrakPtr[MTN][BrakIdx[MTN][LookSrcP-NBAS]][*BP]) {
- Mode = WRDLOCKSTEP1;
- BPStrt1 = BP;
- LookSrcP++;
- }
- break;
- default:
- if (LowrCs[*BP] == LowrCs[*LookSrcP]) {
- Mode = WRDLOCKSTEP1;
- BPStrt1 = BP;
- LookSrcP++;
- }
- break;
- }
- }
- break;
-
- case(WORDLOOK1) :
- if ((BP > SenEnd) || (*BP==' ') || (*BP=='\n')) {
- /* word did not match */
- LookSrcP = LookStrt;
- Mode = WORDLOOK;
- BP = BPStrt1;
- }
- else {
- switch(*LookSrcP) {
- case('?'):
- Mode = WRDLOCKSTEP2;
- BPStrt2 = BP;
- LookSrcP++;
- break;
- case('['):
- if (BrakPtr[MTN][BrakIdx[MTN][LookSrcP-NBAS]][*BP]) {
- Mode = WRDLOCKSTEP2;
- BPStrt2 = BP;
- LookSrcP++;
- }
- break;
- default:
- if (LowrCs[*BP] == LowrCs[*LookSrcP]) {
- Mode = WRDLOCKSTEP2;
- BPStrt2 = BP;
- LookSrcP++;
- }
- break;
- }
- }
- break;
-
- case(FRSTWRDLOOK) :
- if ((*BP==' ') || (*BP=='\n')) {
- /* word did not match */
- return(0);
- }
- else {
- switch(*LookSrcP) {
- case('?'):
- Mode = FRSTWRDLCKSTP1;
- BPStrt = BP;
- LookSrcP++;
- break;
- case('['):
- if (BrakPtr[MTN][BrakIdx[MTN][LookSrcP-NBAS]][*BP]) {
- Mode = FRSTWRDLCKSTP1;
- BPStrt = BP;
- LookSrcP++;
- }
- break;
- default:
- if (LowrCs[*BP] == LowrCs[*LookSrcP]) {
- Mode = FRSTWRDLCKSTP1;
- BPStrt = BP;
- LookSrcP++;
- }
- break;
- }
- }
- break;
-
- case(FRSTWRDLOOK1) :
- if ((*BP==' ') || (*BP=='\n')) {
- /* word did not match */
- Mode = FRSTWRDLOOK;
- BP = BPStrt;
- LookSrcP = LookStrt;
- }
- else {
- switch(*LookSrcP) {
- case('?'):
- Mode = FRSTWRDLCKSTP2;
- BPStrt1 = BP;
- LookSrcP++;
- break;
- case('['):
- if (BrakPtr[MTN][BrakIdx[MTN][LookSrcP-NBAS]][*BP]) {
- Mode = FRSTWRDLCKSTP2;
- BPStrt1 = BP;
- LookSrcP++;
- }
- break;
- default:
- if (LowrCs[*BP] == LowrCs[*LookSrcP]) {
- Mode = FRSTWRDLCKSTP2;
- BPStrt1 = BP;
- LookSrcP++;
- }
- break;
- }
- }
- break;
-
- case(FRSTWRDLOOK2) :
- if ((*BP==' ') || (*BP=='\n')) {
- /* word did not match */
- Mode = FRSTWRDLOOK1;
- BP = BPStrt1;
- LookSrcP = LookStrt1;
- }
- else {
- switch(*LookSrcP) {
- case('?'):
- Mode = FRSTWRDLCKSTP3;
- BPStrt2 = BP;
- LookSrcP++;
- break;
- case('['):
- if (BrakPtr[MTN][BrakIdx[MTN][LookSrcP-NBAS]][*BP]) {
- Mode = FRSTWRDLCKSTP3;
- BPStrt2 = BP;
- LookSrcP++;
- }
- break;
- default:
- if (LowrCs[*BP] == LowrCs[*LookSrcP]) {
- Mode = FRSTWRDLCKSTP3;
- BPStrt2 = BP;
- LookSrcP++;
- }
- break;
- }
- }
- break;
-
- case(WRDLOCKSTEP) :
- switch(*LookSrcP) {
- case('?'):
- LookSrcP++;
- break;
-
- case('['):
- if (!BrakPtr[MTN][BrakIdx[MTN][LookSrcP-NBAS]][*BP]) {
- LookSrcP = LookStrt;
- Mode = SENTENCELOOK;
- BP = BPStrt;
- }
- else { LookSrcP++; }
- break;
-
- default:
- if (LowrCs[*BP] != LowrCs[*LookSrcP]) {
- LookSrcP = LookStrt;
- Mode = SENTENCELOOK;
- BP = BPStrt;
- }
- else { LookSrcP++; }
- break;
- }
- break;
-
- case(WRDLOCKSTEP1) :
- switch(*LookSrcP) {
- case('?'):
- LookSrcP++;
- break;
- case('['):
- if (!BrakPtr[MTN][BrakIdx[MTN][LookSrcP-NBAS]][*BP]) {
- LookSrcP = LookStrt1;
- Mode = WORDLOOK;
- BP = BPStrt1;
- }
- else { LookSrcP++; }
- break;
- default:
- if (LowrCs[*BP] != LowrCs[*LookSrcP]) {
- LookSrcP = LookStrt1;
- Mode = WORDLOOK;
- BP = BPStrt1;
- }
- else { LookSrcP++; }
- break;
- }
- break;
-
- case(WRDLOCKSTEP2) :
- switch(*LookSrcP) {
- case('?'):
- LookSrcP++;
- break;
- case('['):
- if (!BrakPtr[MTN][BrakIdx[MTN][LookSrcP-NBAS]][*BP]) {
- LookSrcP = LookStrt2;
- Mode = WORDLOOK1;
- BP = BPStrt2;
- }
- else { LookSrcP++; }
- break;
- default:
- if (LowrCs[*BP] != LowrCs[*LookSrcP]) {
- LookSrcP = LookStrt2;
- Mode = WORDLOOK1;
- BP = BPStrt2;
- }
- else { LookSrcP++; }
- break;
- }
- break;
-
- case(FRSTWRDLCKSTP) :
- switch(*LookSrcP) {
- case('?'):
- LookSrcP++;
- break;
- case('['):
- if (!BrakPtr[MTN][BrakIdx[MTN][LookSrcP-NBAS]][*BP]) {
- return(0);
- }
- LookSrcP++;
- break;
- default:
- if (LowrCs[*BP] != LowrCs[*LookSrcP]) {
- return(0);
- }
- LookSrcP++;
- break;
- }
- break;
-
- case(FRSTWRDLCKSTP1) :
- switch(*LookSrcP) {
- case('?'):
- LookSrcP++;
- break;
- case('['):
- if (!BrakPtr[MTN][BrakIdx[MTN][LookSrcP-NBAS]][*BP]) {
- Mode = FRSTWRDLOOK;
- LookSrcP = LookStrt;
- BP = BPStrt;
- }
- else { LookSrcP++; }
- break;
- default:
- if (LowrCs[*BP] != LowrCs[*LookSrcP]) {
- Mode = FRSTWRDLOOK;
- LookSrcP = LookStrt;
- BP = BPStrt;
- }
- else { LookSrcP++; }
- break;
- }
- break;
-
- case(FRSTWRDLCKSTP2) :
- switch(*LookSrcP) {
- case('?'):
- LookSrcP++;
- break;
- case('['):
- if (!BrakPtr[MTN][BrakIdx[MTN][LookSrcP-NBAS]][*BP]) {
- Mode = FRSTWRDLOOK1;
- LookSrcP = LookStrt1;
- BP = BPStrt1;
- }
- else { LookSrcP++; }
- break;
- default:
- if (LowrCs[*BP] != LowrCs[*LookSrcP]) {
- Mode = FRSTWRDLOOK1;
- LookSrcP = LookStrt1;
- BP = BPStrt1;
- }
- else { LookSrcP++; }
- break;
- }
- break;
-
- case(FRSTWRDLCKSTP3) :
- switch(*LookSrcP) {
- case('?'):
- LookSrcP++;
- break;
- case('['):
- if (!BrakPtr[MTN][BrakIdx[MTN][LookSrcP-NBAS]][*BP]) {
- Mode = FRSTWRDLOOK2;
- LookSrcP = LookStrt2;
- BP = BPStrt2;
- }
- else { LookSrcP++; }
- break;
- default:
- if (LowrCs[*BP] != LowrCs[*LookSrcP]) {
- Mode = FRSTWRDLOOK2;
- LookSrcP = LookStrt2;
- BP = BPStrt2;
- }
- else { LookSrcP++; }
- break;
- }
- break;
- }
- }
- return(1);
- }
-
-