Code:#include <iostream> #include <string.h> #include <windows.h> #include <stdio.h> using namespace std; class Stack { int x; int OnTop; int size; char* S; public: Stack(int SizeOfStack = 100); ~Stack(); bool StackIsFull(void); bool StackIsEmpty(void); void Push(char x); char Pop(void); } //contructor Stack(); bool Stack::StackIsFull(void) { return OnTop >= size -1; } bool Stack::StackIsEmpty(void) { return OnTop <0; } void Stack::Push(char x) { S[++OnTop] = x; } char Stack::Pop(void) { return S[OnTop--]; } //Main function int main() { //Declare variables HANDLE hInputFile; HANDLE hOutputFile; HANDLE hInputFileMap; HANDLE hOutputFileMap; PVOID pvInputFile; PVOID pvOutputFile; DWORD dwInputFileSize = 0; DWORD dwOutputFileSize = 0; DWORD dwErr; char inputFileName [255]; char outputFileName[255]; char cDrome[10]; int iDrome; bool IsDrome; int i; cout<<"Enter origin path and file name: "; cin>>inputFileName; cout<<endl<<endl; cout<<"Enter destination path and file name: "; cin>>outputFileName; cout<<endl; //create handle for input file hInputFile = CreateFile(inputFilename, GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); if (hInputFile == INVALID_HANDLE_VALUE) { dwErr = GetLastError(); cout<<"Error number: "; cin>>dwErr; cout<<endl; cout<<"Input file could not be opened."; cout<<endl; cout<<endl; return(FALSE); } //create handle for input file mapping hInputFileMap = CreateFileMapping(hInputFile, NULL, PAGE_READONLY, 0, 0, NULL); if (hInputFileMap == NULL) { dwErr = GetLastError(); cout<<"Error number: "; cin>>dwErr; cout<<endl; CloseHandle(hInputFile); return(FALSE); } //create mapped view of the input file pvInputFile = MapViewOfFile(hInputFileMap, FILE_MAP_READ, 0, 0, 0); if (pvInputFile == NULL) { dwErr = GetLastError(); cout<<"Error number: "; cin>>dwErr; cout<<endl; cout<<"Could not map view of the input file"; cout<<endl; CloseHandle(hInputFileMap); CloseHandle(hInputFile); return (FALSE); } //determine size of the input file and compute appropriate size for output dwInputFileSize = GetFileSize(hInputFile, NULL); //set string pointer to the first address of the input file PSTR pchANSI = (PSTR) pvInputFile; //determine the exact size needed for the output file for (i = 0; i < (int)dwInputFileSize; i++) { iDrome = (int)pchANSI[i]; itoa(iDrome, cDrome, 10); dwOutputFileSize = dwOutputFileSize + strlen(cDrome) + 1; } //subtract one fm the size to eliminate the last space dwOutputFileSize = dwOutputFileSize - 1; //create handle to the output file hOutputFile = CreateFile(hOutputFilename, GENERIC_WRITE | GENERIC_READ, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED, NULL); if (hOutputFile == INVALID_HANDLE_VALUE) { dwErr = GetLastError(); cout<<"Error number: "; cin>>dwErr; cout<<endl; cout<<"Output file could not be created."; cout<<endl; cout<<endl; UnmapViewOfFile(pvInputFile); CloseHandle(hInputFileMap); CloseHandle(hInputFile); return(FALSE); } //create handle to the output file mapping hOutputFileMap = CreateFileMapping(hOutputFilename,NULL, PAGE_READWRITE, 0, dwOutputFileSize, NULL); if (hOutputFileMap == NULL) { dwErr = GetLastError(); cout<<"Error number: "; cin>>dwErr; cout<<endl; cout<<"Output file map could not be opened."; cout<<endl; cout<<endl; UnmapViewOfFile(pvInputFile); CloseHandle(hOutputFile); CloseHandle(hInputFileMap); CloseHandle(hInputFile); return(FALSE); } //map view of the output file pvOutputFile = MapViewOfFile(hOutputFileMap, FILE_MAP_WRITE, 0, 0, 0); if (pvOutputFile == NULL) { dwErr = GetLastError(); cout<<"Error number: "; cin>>dwErr; cout<<endl; cout<<"Could not map view of the output file."; cout<<endl; cout<<endl; UnmapViewOfFile(pvInputFile); CloseHandle(hOutputFileMap); CloseHandle(hOutputFile); CloseHandle(hInputFileMap); CloseHandle(hInputFile); return(FALSE); } //set string pointer to the first address of the output file PSTR pchASCII = (PSTR) pvOutputFile; //determine if word is a palindrome bool IsDrome(char* c) { Stack S; for (int i = 0; x < strlen(c); i++) S.Push(c[i]); int i = 0; while (!S.StackIsEmpty()) if (c[i] != S.Pop()) return false; return true; } }