home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 5 Edit / 05-Edit.zip / exedt040.zip / src / search.c < prev    next >
C/C++ Source or Header  |  1999-01-24  |  4KB  |  158 lines

  1. #define INCL_PM
  2. #include <stdio.h>
  3. #include <string.h>
  4. #include <os2.h>
  5. #include "exedit.h"
  6.  
  7. LONG Search(char *in,char *str,char cs,char w)
  8. {
  9.  LONG k=0;
  10.  int (*cmp)(const char *s1,const char *s2,size_t maxlen);
  11.  int len;
  12.  
  13.  if (cs) cmp=strncmp;
  14.  else cmp=strnicmp;
  15.  if (*in==0x0d) in++;
  16.  len=strlen(str);
  17.  
  18.  if (w)
  19.  {
  20.   while (*in)
  21.   {
  22.    if (cmp(in,str,len)==0)
  23.    {
  24.     if (*(in-1)==0x0A||*(in-1)==0x20)
  25.     if (*(in+len)==0x0D||*(in+len)==0x20)
  26.     return k;
  27.    }
  28.    in++;
  29.    k++;
  30.    if (*in==0x0d) in++;
  31.   }
  32.  }
  33.  else
  34.  {
  35.   while (*in)
  36.   {
  37.    if (cmp(in,str,len)==0)  return k;
  38.    in++;
  39.    k++;
  40.    if (*in==0x0d) in++;
  41.   }
  42.  }
  43.  return -1;
  44. }
  45.  
  46. MRESULT EXPENTRY D_Search_Proc(HWND hwnd,ULONG msg, MPARAM mp1,MPARAM mp2)
  47. {
  48.  TSearchDlg* SearchDlg;
  49.  SearchDlg=WinQueryWindowPtr(hwnd,0);
  50.  
  51.  switch(msg)
  52.  {
  53.   case WM_INITDLG:
  54.    WinSetWindowPtr(hwnd,0,PVOIDFROMMP(mp2));
  55.    SearchDlg=PVOIDFROMMP(mp2);
  56.    WinSendDlgItemMsg(hwnd,Case,BM_SETCHECK,(MPARAM)SearchDlg->CaseSens,0);
  57.    WinSendDlgItemMsg(hwnd,Selected,BM_SETCHECK,(MPARAM)SearchDlg->Select,0);
  58.    WinSendDlgItemMsg(hwnd,Whole,BM_SETCHECK,(MPARAM)SearchDlg->WholeWord,0);
  59.    WinSetDlgItemText(hwnd,Text,SearchDlg->FText);
  60.    WinSetDlgItemText(hwnd,RText,SearchDlg->Rtext);
  61.    SearchDlg->End=0;
  62.    SearchDlg->SEnd=0;
  63.    WinEnableControl(hwnd,Replace,FALSE);
  64.   return 0;
  65.  
  66.   case SM_REFRESHDATA:
  67.    SearchDlg->CaseSens=SHORT1FROMMP(WinSendDlgItemMsg(hwnd,Case,BM_QUERYCHECK,0,0));
  68.    SearchDlg->Select=SHORT1FROMMP(WinSendDlgItemMsg(hwnd,Selected,BM_QUERYCHECK,0,0));
  69.    SearchDlg->WholeWord=SHORT1FROMMP(WinSendDlgItemMsg(hwnd,Whole,BM_QUERYCHECK,0,0));
  70.    WinQueryDlgItemText(hwnd,Text,50,SearchDlg->FText);
  71.    WinQueryDlgItemText(hwnd,RText,50,SearchDlg->Rtext);
  72.   return 0;
  73.  
  74.   case WM_CONTROL:
  75.    switch(SHORT1FROMMP(mp1))
  76.    {
  77.    case RText:
  78.    case Text:
  79.    WinEnableControl(hwnd,Replace,FALSE);
  80.    SearchDlg->End=0;
  81.    return WinDefDlgProc(hwnd,msg,mp1,mp2);
  82.    case Whole:
  83.    case Case:
  84.    case Selected:
  85.    if (SHORT2FROMMP(mp1)==BN_CLICKED)
  86.    {
  87.     WinEnableControl(hwnd,Replace,FALSE);
  88.     SearchDlg->End=0;
  89.    }
  90.    return WinDefDlgProc(hwnd,msg,mp1,mp2);
  91.  
  92.    }
  93.   return WinDefDlgProc(hwnd,msg,mp1,mp2);
  94.  
  95.   case WM_COMMAND:
  96.   {
  97.    switch(SHORT1FROMMP(mp1))
  98.    {
  99.  
  100.     case ReplaceAll:
  101.      SearchDlg->End=0;
  102.      while (WinSendMsg(hwnd,WM_COMMAND,MPFROM2SHORT(Find,0),(MPARAM)100))
  103.      WinSendMsg(hwnd,WM_COMMAND,MPFROM2SHORT(Replace,0),0);
  104.     return 0;
  105.  
  106.     case Replace:
  107.     {
  108.      WinSendMsg(hwnd,SM_REFRESHDATA,0,0);
  109.      WinSendMsg(SearchDlg->hwnd,SM_REPLACE,(MPARAM)SearchDlg,0);
  110.      WinEnableControl(hwnd,Replace,FALSE);
  111.      SearchDlg->Start-=strlen(SearchDlg->FText)-strlen(SearchDlg->Rtext);
  112.     }
  113.     return 0;
  114.  
  115.     case Find:
  116.     {
  117.      IPT Start;
  118.  
  119.      WinSendMsg(hwnd,SM_REFRESHDATA,0,0);
  120.      if (!SearchDlg->FText[0])
  121.      {
  122.       WinMessageBox(HWND_DESKTOP,hwnd,"Insert text to find.",
  123.                 "Search result",0,MB_NOICON|MB_OK|MB_INFORMATION|MB_MOVEABLE);
  124.       return 0;
  125.      }
  126.  
  127.      Start=(IPT)WinSendMsg(SearchDlg->hwnd,SM_FIND,(MPARAM)SearchDlg,0);
  128.      if (Start!=-1)
  129.      {
  130.       SearchDlg->Start=Start;
  131.       WinEnableControl(hwnd,Replace,TRUE);
  132.       return (MPARAM)TRUE;
  133.      }
  134.      else
  135.      {
  136.       if ((ULONG)mp2!=100)
  137.       WinMessageBox(HWND_DESKTOP,hwnd,"String not found.",
  138.                 "Search result",0,MB_NOICON|MB_OK|MB_INFORMATION|MB_MOVEABLE);
  139.      }
  140.     }
  141.     return 0;
  142.  
  143.     case DID_OK:
  144.      WinSendMsg(hwnd,SM_REFRESHDATA,0,0);
  145.      WinDismissDlg(hwnd,TRUE);
  146.     return 0;
  147.  
  148.     default:
  149.     return WinDefDlgProc(hwnd,msg,mp1,mp2);;
  150.    }
  151.   }
  152.   default:
  153.   return WinDefDlgProc(hwnd,msg,mp1,mp2);
  154.  }
  155. }
  156.  
  157.  
  158.