void printSolution(char* program, char* input, Solution solution, Node **nodeArray)
{
    ofstream resultFile;
    string programName = trimDirectory(program);
    string inputName = trimDirectory(input);
    // stringstream fileName;
    // fileName << "" << programName << "_" << inputName << "_out";
    // DEBUG("Outputting to file %s.", fileName.str());
    // resultFile.open(fileName.str().c_str());
    char fileName[512];
    sprintf(fileName, "%s_%s_out", programName.c_str(), inputName.c_str());
    resultFile.open(fileName);

    pthread_mutex_lock(&done_mutex);
    if (solution == SOLVEABLE)
    {
        cout << "true" << endl;
        resultFile << "true" << endl;
        for (unsigned int cntr = 0; cntr < g_count; cntr++)
        {
            cout << nodeArray[cntr]->getName() << ": " << fixColor(colorSolution[cntr]) << "\n";
            resultFile << nodeArray[cntr]->getName() << ": " << fixColor(colorSolution[cntr]) << "\n";
        }
    }
    else
    {
        cout << "false" << endl;
        resultFile << "false" << endl;
        DEBUG("Solution is set to %d.", solution);
    }
    pthread_mutex_unlock(&done_mutex);
    resultFile.close();
    DEBUG("Done");
}
bool DxSurf::clear(COLORREF color){
   ASSERT(!m_locked);

   if((!m_locked)
      && m_dd_surf){
      DDBLTFX ddbltfx = {0};
      ddbltfx.dwSize = sizeof DDBLTFX;
      ddbltfx.dwFillColor = fixColor(color);
      
      return m_dd_surf->Blt( 0, 0, 0, DDBLT_COLORFILL | DDBLT_WAITNOTBUSY, &ddbltfx ) == DD_OK;
   }
   
   return false;
}
bool DxSurf::fill(COLORREF color, int x, int y, int sizex, int sizey){
   ASSERT(!m_locked);
   

   if((!m_locked)
      && m_dd_surf){
      DDBLTFX ddbltfx = {0};
      ddbltfx.dwSize = sizeof DDBLTFX;
      ddbltfx.dwFillColor = fixColor(color);

      RECT target_rect = {x, y, x + sizex, y + sizey};
      
      return m_dd_surf->Blt( &target_rect, 0, 0, DDBLT_COLORFILL | DDBLT_WAITNOTBUSY, &ddbltfx ) == DD_OK;
   }
   
   return false;
}