home *** CD-ROM | disk | FTP | other *** search
/ ftp.wwiv.com / ftp.wwiv.com.zip / ftp.wwiv.com / pub / BBS / PB_122.ZIP / SDK.ZIP / TEXTSRCH.C < prev    next >
C/C++ Source or Header  |  1992-03-28  |  2KB  |  129 lines

  1. #include "pb_sdk.h"
  2.  
  3. bool
  4. find_string(char *search,char *text)
  5. {
  6.  int slen,l,i;
  7.  
  8.  slen = strlen(search);
  9.  
  10.  l = strlen(text);
  11.  
  12.  for(i=0;i<=l-slen;i++)
  13.    if(!memicmp(&text[i],search,slen))
  14.      {
  15.       return TRUE;
  16.      }
  17.  
  18.  return FALSE;
  19. }
  20.  
  21. void
  22. showbusy()
  23. {
  24.  static int x = 0;
  25.  static char s[] = "|\\-/";
  26.  
  27.  putchar('\b');
  28.  putchar(s[x]);
  29.  
  30.  x = ++x % 4;
  31. }
  32.  
  33.  
  34. main(int argc,char *argv[])
  35. {
  36.  int i,result;
  37.  MESSAGE msg;
  38.  MSGAREA ma;
  39.  char search[30];
  40.  int area = CurUser->lastmsgarea;
  41.  char *text;
  42.  
  43.  if(argc > 1) area = atoi(argv[1]);
  44.  
  45.  if(area)
  46.    {
  47.     if(ReadMsgArea(area,&ma)<0)
  48.       {
  49.        Log(LOG_FRIEND,"Can't read message area %d",area);
  50.        return 0;
  51.       }
  52.    }
  53.  else
  54.    {
  55.     strcpy(ma.name,"Combined Boards");
  56.    }
  57.  
  58.  printf("\n\f\n\6Text Search (\3%s\6)\n"
  59.               "\7───────────\n\n",ma.name);
  60.  
  61.  printf("\7Search string: \3");
  62.  Input(search,29,INPUT_UPALL);
  63.  
  64.  if(search[0] == '\0') return 0;
  65.  
  66.  UnMarkAllMessages();
  67.  
  68.  printf("\n\n\7Press [\3S\7] to abort search. Searching for '\3%s\7'...\6  ",search);
  69.  
  70.  text = malloc(4000);
  71.  
  72.  result = FirstMessage(&msg,area,1,1);
  73.  
  74.  for(i=0;result>=1;)
  75.    {
  76.     showbusy();
  77.  
  78.     CreateMessageTextString(&msg,text,4000);
  79.  
  80.     if(toupper(PeekChar()) == 'S') break;
  81.  
  82.     if(find_string(search,text))
  83.       {
  84.        MarkMessage(msg.msgnum);
  85.  
  86.        i++;
  87.       }
  88.  
  89.     result = NextMessage(&msg,area,1);
  90.    }
  91.  
  92.  free(text);
  93.  
  94.  if(i)
  95.    {
  96.     char c;
  97.  
  98.     printf("\n\n\3%d \7messages with matching text found & marked.\n\n",i);
  99.  
  100.     for(;;)
  101.       {
  102.        printf("\7Action? \6[\3R\6]ead - [\3L\6]ist - [\3Q\6]uit\7 : ");
  103.  
  104.        c = WaitKeys("RLQ\r");
  105.  
  106.        putchar(c);
  107.        putchar('\n');
  108.  
  109.        if(c == 'Q') break;
  110.        if(c == 'R')
  111.          {
  112.           ReadMarkedMessages();
  113.           break;
  114.          }
  115.        if(c == 'L')
  116.          {
  117.           ListMarkedMessages();
  118.          }
  119.  
  120.        putchar('\n');
  121.       }
  122.    }
  123.   else puts("\n\n\6No messages found. \7Press \3[Enter]\7 to continue.\t");
  124.  
  125.   return 0;
  126. }
  127.  
  128.  
  129.