#include <stdio.h>
#include <string.h>
#include <fcntl.h>
#include <io.h>
#include <sys\types.h>
#include <sys\stat.h>

#include "window.h"
#include "cardfile.h"


/****************************************************************************/
/*                                                                          */
/*                         DIALOG PROCS FOR CARDFILE                        */
/*                                                                          */
/****************************************************************************/

INT PASCAL GenericDialogDriver(WORD idDlg, INT (PASCAL *pfnDlg)())
{
  WORD hModule;
  HDLG hDlg;

  if ((hModule = OpenResourceFile("CARDFILE")) == FALSE)
  {
    MessageBox("Can't open CARDFILE.RES", NULL, NULL, "Error", MB_OK);
    return FALSE;
  }
  if ((hDlg = LoadDialog(hModule, idDlg, hWndCardfile, (PFI) pfnDlg)) == NULLHWND)
  {
    MessageBox("Can't load the dialog box", NULL, NULL, "Error", MB_OK);
    return FALSE;
  }
  CloseResourceFile(hModule);

  return DialogBox(hDlg);
}


INT PASCAL FindDialogProc(hDlg, message, wParam, lParam)
  HWND hDlg;
  WORD message;
  WORD wParam;
  DWORD lParam;
{
  switch (message)
  {
    case WM_INITDIALOG :
      SetDlgItemText(hDlg, ID_EDIT, szSearchString);
      SendDlgItemMessage(hDlg, ID_EDIT, EM_SETSEL, 0, -1L);
      SendDlgItemMessage(hDlg, ID_EDIT, EM_LIMITTEXT, MAXINDEXLEN, 0L);
      return TRUE;

    case WM_COMMAND    :
      switch (wParam)
      {
      	case IDOK      :
          /*
            The user pressed the OK button
          */
          GetDlgItemText(hDlg, ID_EDIT, szSearchString, sizeof(szSearchString));
          EndDialog(hDlg, wParam);
          break;

        case IDCANCEL  :
          /*
            The user pressed the CANCEL button
          */
          EndDialog(hDlg, wParam);
          break;
      } /* switch */

      return TRUE;
  }

  /*
    Return FALSE if you did not process the message. This gives the default
    dialog proc a crack at handling it. Note - do NOT call any DefWindowProc
    here; returning FALSE does the same thing.
  */
  return FALSE;
}


INT PASCAL GotoDialogProc(hDlg, message, wParam, lParam)
  HWND hDlg;
  WORD message;
  WORD wParam;
  DWORD lParam;
{
  int  iRec;

  switch (message)
  {
    case WM_INITDIALOG :
      SetDlgItemInt(hDlg, ID_EDIT, 0);
      SendDlgItemMessage(hDlg, ID_EDIT, EM_SETSEL, 0, -1L);
      return TRUE;

    case WM_COMMAND    :
      switch (wParam)
      {
      	case IDOK      :
          /*
            The user pressed the OK button
          */
          GetDlgItemInt(hDlg, ID_EDIT, &iRec);
          EndDialog(hDlg, iRec);
          break;

        case IDCANCEL  :
          /*
            The user pressed the CANCEL button
          */
          EndDialog(hDlg, FALSE);
          break;
      } /* switch */

      return TRUE;
  }

  /*
    Return FALSE if you did not process the message. This gives the default
    dialog proc a crack at handling it. Note - do NOT call any DefWindowProc
    here; returning FALSE does the same thing.
  */
  return FALSE;
}


INT PASCAL IndexDialogProc(hDlg, message, wParam, lParam)
  HWND hDlg;
  WORD message;
  WORD wParam;
  DWORD lParam;
{
  char buf[256];
  RECORD *pRec;

  switch (message)
  {
    case WM_INITDIALOG :
      if ((pRec = (RECORD *) ListGetNth(CurrRecordList, CurrCardFile.nRecords-1)->data) != NULL)
        SetDlgItemText(hDlg, ID_EDIT, pRec->szIndex);
      else
        SetDlgItemText(hDlg, ID_EDIT, "");
      SendDlgItemMessage(hDlg, ID_EDIT, EM_SETSEL, 0, -1L);
      return TRUE;

    case WM_COMMAND    :
      switch (wParam)
      {
      	case IDOK      :
          /*
            The user pressed the OK button
          */
          GetDlgItemText(hDlg, ID_EDIT, buf, sizeof(buf));
          SetWindowText((HWND) GetWindowWord(hCurrCard, GWW_HWNDINDEX), buf);

          pRec = (RECORD *) ListGetNth(CurrRecordList, CurrCardFile.nRecords-1)->data;
          strncpy(pRec->szIndex, buf, sizeof(pRec->szIndex));

          EndDialog(hDlg, wParam);
          break;

        case IDCANCEL  :
          /*
            The user pressed the CANCEL button
          */
          EndDialog(hDlg, wParam);
          break;
      } /* switch */

      return TRUE;
  }

  /*
    Return FALSE if you did not process the message. This gives the default
    dialog proc a crack at handling it. Note - do NOT call any DefWindowProc
    here; returning FALSE does the same thing.
  */
  return FALSE;
}


INT PASCAL SaveFileDialogProc(hDlg, message, wParam, lParam)
  HWND hDlg;
  WORD message;
  WORD wParam;
  DWORD lParam;
{
  char buf[256], *pDot;

  switch (message)
  {
    case WM_INITDIALOG :
      SetDlgItemText(hDlg, ID_EDIT, szCurrFileName);
      SendDlgItemMessage(hDlg, ID_EDIT, EM_SETSEL, 0, -1L);
      return TRUE;

    case WM_COMMAND    :
      switch (wParam)
      {
      	case IDOK      :
          /*
            The user pressed the OK button
          */
          GetDlgItemText(hDlg, ID_EDIT, buf, sizeof(buf));
          if ((pDot = strchr(buf, '.')) == NULL)
            strcat(buf, ".CRD");
          strcpy(szCurrFileName, strupr(buf));
          EndDialog(hDlg, wParam);
          break;

        case IDCANCEL  :
          /*
            The user pressed the CANCEL button
          */
          EndDialog(hDlg, wParam);
          break;
      } /* switch */

      return TRUE;
  }

  /*
    Return FALSE if you did not process the message. This gives the default
    dialog proc a crack at handling it. Note - do NOT call any DefWindowProc
    here; returning FALSE does the same thing.
  */
  return FALSE;
}



INT PASCAL DialDialogProc(hDlg, message, wParam, lParam)
  HWND hDlg;
  WORD message;
  WORD wParam;
  DWORD lParam;
{
  RECT rDlg;
  HWND hWndSetup;

  switch (message)
  {
    case WM_INITDIALOG :
      GetWindowRect(hDlg, &rDlg);
      WinSetSize(hDlg, 9, RECT_WIDTH(rDlg));
      return TRUE;

    case WM_COMMAND    :
      switch (wParam)
      {
      	case IDOK      :
          /*
            The user pressed the OK button
          */
          MessageBox("Not implemented", "in this version", 
                         NULL, "Dialing", MB_OK);
          EndDialog(hDlg, wParam);
          break;

        case IDCANCEL  :
          /*
            The user pressed the CANCEL button
          */
          EndDialog(hDlg, wParam);
          break;

        case ID_SETUP  :
          hWndSetup = GetDlgItem(hDlg, ID_SETUP);
          EnableWindow(hWndSetup, FALSE);
          WinSetAttr(hWndSetup, WinGetAttr(hWndSetup) | 0x08, FALSE);
          GetWindowRect(hDlg, &rDlg);
          WinSetSize(hDlg, 18, RECT_WIDTH(rDlg));
          WinDraw(hDlg);
          break;
      } /* switch */

      return TRUE;
  }

  /*
    Return FALSE if you did not process the message. This gives the default
    dialog proc a crack at handling it. Note - do NOT call any DefWindowProc
    here; returning FALSE does the same thing.
  */
  return FALSE;
}

