void qpp_object::error(STRING const & what, int line, STRING const & fname) { SSTREAM ss; ss << what; if (line > -1) ss << " at line " << line; if (fname!="") ss << " in file " << fname; _error = ss.str(); std::cerr << _error << std::endl; throw qpp_exception(this); }
// // FUNCTION: WndProc(HWND, UINT, WPARAM, LPARAM) // // PURPOSE: Processes messages for the main window. // // WM_COMMAND - process the application menu // WM_PAINT - Paint the main window // WM_DESTROY - post a quit message and return // // LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { RECT rec; switch (message) { case WM_KEYDOWN: switch (wParam) { case VK_CONTROL: GetWindowRect(hWnd, &rec); buff.str(TEXT("")); buff.clear(); buff << TEXT("top: ") << rec.top << TEXT(" left: ") << rec.left << TEXT(" width: ") << (rec.right - rec.left) << TEXT(" height: ") << (rec.bottom - rec.top); MessageBox(NULL, buff.str().c_str(), TEXT("GetWindowRect"), 0); break; case VK_SPACE: GetClientRect(hWnd, &rec); buff.str(TEXT("")); buff.clear(); buff << TEXT("top: ") << rec.top << TEXT(" left: ") << rec.left << TEXT(" width: ") << (rec.right - rec.left) << TEXT(" height: ") << (rec.bottom - rec.top); MessageBox(NULL, buff.str().c_str(), TEXT("GetClientRect"), 0); break; case VK_UP: GetWindowRect(hWnd, &rec); MoveWindow(hWnd, rec.left, rec.top - 10, rec.right - rec.left, rec.bottom - rec.top, TRUE); break; default: break; } break; case WM_COMMAND: break; case WM_PAINT: { PAINTSTRUCT ps; HDC hdc = BeginPaint(hWnd, &ps); // TODO: Add any drawing code that uses hdc here... EndPaint(hWnd, &ps); } break; case WM_DESTROY: PostQuitMessage(0); break; default: return DefWindowProc(hWnd, message, wParam, lParam); } return 0; }
int HumdrumFileBasic::getFixedDataSize(int socket_id, int datalength, SSTREAM& inputdata, char* buffer, int bufsize) { int readcount = 0; int readsize; int message_len; while (readcount < datalength) { readsize = bufsize; if (readcount + readsize > datalength) { readsize = datalength - readcount; } message_len = ::read(socket_id, buffer, readsize); if (message_len == 0) { // shouldn't happen, but who knows... break; } inputdata.write(buffer, message_len); readcount += message_len; } return readcount; }
void HumdrumFileBasic::readFromHttpURI(const char* webaddress) { Array<char> hostname; Array<char> location; location.setSize(0); const char* ptr = webaddress; const char* filename = NULL; if (strncmp(webaddress, "http://", strlen("http://")) == 0) { // remove the "http://" portion of the webaddress ptr += strlen("http://"); } hostname.setSize(strlen(ptr)+1); hostname.setGrowth(0); strcpy(hostname.getBase(), ptr); char* pot; if ((pot = strchr(hostname.getBase(), '/')) != NULL) { *pot = '\0'; } if ((filename = strchr(ptr, '/')) != NULL) { location.setSize(strlen(filename)+1); strcpy(location.getBase(), filename); location.allowGrowth(0); } if (location.getSize() == 0) { location.setSize(2); location.allowGrowth(0); strcpy(location.getBase(), "/"); } char newline[3] = {0x0d, 0x0a, 0}; SSTREAM request; request << "GET " << location.getBase() << " HTTP/1.1" << newline; request << "Host: " << hostname.getBase() << newline; request << "User-Agent: HumdrumFile Downloader 1.0 (" << __DATE__ << ")" << newline; request << "Connection: close" << newline; // this line is necessary request << newline; request << ends; // cout << "HOSTNAME: " << hostname.getBase() << endl; // cout << "LOCATION: " << location.getBase() << endl; // cout << request.CSTRING << endl; // cout << "-------------------------------------------------" << endl; int socket_id = open_network_socket(hostname.getBase(), 80); ::write(socket_id, request.CSTRING, strlen(request.CSTRING)); #define URI_BUFFER_SIZE (10000) char buffer[URI_BUFFER_SIZE]; int message_len; SSTREAM inputdata; SSTREAM header; int foundcontent = 0; int i; int newlinecounter = 0; // read the response header: while ((message_len = ::read(socket_id, buffer, 1)) != 0) { header << buffer[0]; if ((buffer[0] == 0x0a) || (buffer[0] == 0x0d)) { newlinecounter++; } else { newlinecounter = 0; } if (newlinecounter == 4) { foundcontent = 1; break; } } if (foundcontent == 0) { cerr << "Funny error trying to read server response" << endl; exit(1); } // now read the size of the rest of the data which is expected int datalength = -1; // also, check for chunked transfer encoding: int chunked = 0; header << ends; // cout << header.CSTRING << endl; // cout << "-------------------------------------------------" << endl; while (header.getline(buffer, URI_BUFFER_SIZE)) { int len = strlen(buffer); for (i=0; i<len; i++) { buffer[i] = tolower(buffer[i]); } if (strstr(buffer, "content-length") != NULL) { for (i=14; i<len; i++) { if (isdigit(buffer[i])) { sscanf(&buffer[i], "%d", &datalength); if (datalength == 0) { cerr << "Error: no data found for URI, probably invalid\n"; exit(1); } break; } } } else if ((strstr(buffer, "transfer-encoding") != NULL) && (strstr(buffer, "chunked") != NULL)) { chunked = 1; } // if (datalength >= 0) { // break; // } } // once the length of the remaining data is known (or not), read it: if (datalength > 0) { getFixedDataSize(socket_id, datalength, inputdata, buffer, URI_BUFFER_SIZE); } else if (chunked) { int chunksize; int totalsize = 0; do { chunksize = getChunk(socket_id, inputdata, buffer, URI_BUFFER_SIZE); totalsize += chunksize; } while (chunksize > 0); if (totalsize == 0) { cerr << "Error: no data found for URI (probably invalid)\n"; exit(1); } } else { // if the size of the rest of the data cannot be found in the // header, then just keep reading until done (but this will // probably cause a 5 second delay at the last read). while ((message_len = ::read(socket_id, buffer, URI_BUFFER_SIZE)) != 0) { if (foundcontent) { inputdata.write(buffer, message_len); } else { for (i=0; i<message_len; i++) { if (foundcontent) { inputdata << buffer[i]; } else { header << buffer[i]; if ((buffer[i] == 0x0a) || (buffer[i] == 0x0d)) { newlinecounter++; } else { newlinecounter = 0; } if (newlinecounter == 4) { foundcontent = 1; continue; } } } } } } close(socket_id); inputdata << ends; // cout << "CONTENT:=======================================" << endl; // cout << inputdata.CSTRING; // cout << "===============================================" << endl; HumdrumFileBasic::read(inputdata); }
bool nnToolView::readConfiguration(IXmlNode *node) { int numBars; bool res = false; IXmlNode *v,*t = node->find(X("TOOLBARS")); if (t) { numBars=t->getLong(); } else { xmlConfigurationNodeException *pe = new xmlConfigurationNodeException(X("TOOLBARS")); throw (pe); } if(numBars>0) { int i; for(i=0; i<numBars; i++) { v=t->find(X("TOOLBARS_"),i); if(v) { int id=0; IXmlNode *h=v->find(X("ID")); if (h) { id=h->getLong(); } else { xmlConfigurationNodeException *pe = new xmlConfigurationNodeException(X("ID")); throw (pe); } h=v->find(X("COMMANDER")); if(h) { nnCommander *command= new nnCommander(); MEMCHK(nnCommander,command); if(command) { res=command->readConfiguration(h); if(!res)break; } commands[id]=command; } else { SSTREAM ssInfo; ssInfo<<X("COMMANDER"); xmlConfigurationNodeException *pe = new xmlConfigurationNodeException(ssInfo.str().c_str()); throw (pe); } } else { SSTREAM ss; ss<<X("TOOLBARS_")<<i; xmlConfigurationNodeException *pe = new xmlConfigurationNodeException(ss.str().c_str()); throw (pe); } } } if(res==true) { commanderList::iterator it=commands.find(0); if(it!=commands.end()) { active=it->second; active->setFont(font); } else { active=nullptr; } } return res; }