#include <stdlib.h>
#include <stdio.h>
#include "toolhelp.h"
#include <commdlg.h>

typedef unsigned long ULONG;

BOOL OpenTheFile (void)
{
  typedef enum {ekOK, ekFDia, ekOpen, ekFSiz, ekFZro, ekGAlo,
                ekRdFi, ekRdZr, ekProc} terrKind;
  typedef char* terrMsgs[ekProc+1];
  terrKind errKind = ekOK;
  static terrMsgs errMsgs = { "No Error", "File Not Fnd",
                              "Cant Open","Invalid FSize",
                              "File Empty", "Alloc Error",
                              "File Read Err", "No Bytes Read",
                              "Process Err" };
  HANDLE hFile = (HANDLE)-1;
  ULONG ulCount, ulFilSiz;
  OPENFILENAME Ofn;
  char szFile[MAX_PATH+1] = "\0";
  char *lpBuf = NULL;
  BOOL bRet = FALSE;

  if (!GetOpenFileName(&Ofn))                 errKind=ekFDia;
 
else if ((hFile=CreateFile(…))==(HANDLE)-1) errKind=ekOpen;
 
else if ((ulFilSiz=GetFileSize(...))==0xFF) errKind=ekFSiz;
  else if (ulFilSiz == 0)                     errKind=ekFZro;
 
else if ((lpBuf=GlobalAlloc(...))==NULL)    errKind=ekGAlo;
 
else if (!ReadFile(hFile, ..., &ulCount))   errKind=ekRdFi;
 
else if (ulCount==0)                        errKind=ekRdZr;
 
else if (!ProcessTheFile(lpBuf))            errKind=ekProc;

  if (lpBuf) GlobalFree(lpBuf);
 
if (hFile!=(HANDLE)-1) CloseHandle(hFile);
  if (errKind!=ekOK) MessageBox(NULL, errMsgs[errKind]);
    
else bRet = TRUE;

  return bRet;
}