void StyleSheetParser::parse(const char *text, int len) { const char *start = text; const char *end = text + len; for (const char *ptr = start; ptr != end; ++ptr) { if (isspace(*ptr)) { if (start != ptr) { myWord.append(start, ptr - start); } processWord(myWord); myWord.erase(); start = ptr + 1; } else if (isControlSymbol(*ptr)) { if (start != ptr) { myWord.append(start, ptr - start); } processWord(myWord); myWord.erase(); processControl(*ptr); start = ptr + 1; } } }
MRESULT EXPENTRY wpCD(HWND hwnd,ULONG msg,MPARAM mp1,MPARAM mp2) { switch (msg) { case WM_INITDLG: { ULONG rc, i; HFILE CDDevice; ULONG action; ULONG len; struct { USHORT CountCD; USHORT FirstCD; } CDInfo; FIELDINFO *firstFieldInfo, *posFieldInfo, *splitFieldInfo; FIELDINFOINSERT fieldInfoInsert; CNRINFO cnrInfo; cnrInfo.cb = sizeof(cnrInfo); firstFieldInfo = posFieldInfo = allocaFieldInfo(hwnd, CT_TRACK, NUM_FIELDS); posFieldInfo->flData = CFA_BITMAPORICON | CFA_HORZSEPARATOR | CFA_SEPARATOR; posFieldInfo->flTitle = CFA_CENTER; posFieldInfo->pTitleData = "Icon"; posFieldInfo->offStruct = FIELDOFFSET(RECORDCORE,hptrIcon); fieldInfo[0] = posFieldInfo; posFieldInfo = posFieldInfo->pNextFieldInfo; posFieldInfo->flData = CFA_STRING | CFA_HORZSEPARATOR | CFA_SEPARATOR; posFieldInfo->flTitle = CFA_CENTER; posFieldInfo->pTitleData = "Filename"; posFieldInfo->offStruct = FIELDOFFSET(RECORDCORE,pszIcon); fieldInfo[1] = posFieldInfo; cnrInfo.pFieldInfoLast = posFieldInfo; posFieldInfo = posFieldInfo->pNextFieldInfo; posFieldInfo->flData = CFA_ULONG | CFA_HORZSEPARATOR | CFA_SEPARATOR; posFieldInfo->flTitle = CFA_CENTER; posFieldInfo->pTitleData = "Track #"; posFieldInfo->offStruct = FIELDOFFSET(CDTRACKRECORD,track); fieldInfo[2] = posFieldInfo; posFieldInfo = posFieldInfo->pNextFieldInfo; posFieldInfo->flData = CFA_STRING | CFA_HORZSEPARATOR | CFA_SEPARATOR | CFA_FIREADONLY; posFieldInfo->flTitle = CFA_CENTER; posFieldInfo->pTitleData = "Type"; posFieldInfo->offStruct = FIELDOFFSET(CDTRACKRECORD,typepointer); fieldInfo[3] = posFieldInfo; posFieldInfo = posFieldInfo->pNextFieldInfo; posFieldInfo->flData = CFA_STRING | CFA_HORZSEPARATOR | CFA_SEPARATOR | CFA_FIREADONLY; posFieldInfo->flTitle = CFA_CENTER; posFieldInfo->pTitleData = "Time"; posFieldInfo->offStruct = FIELDOFFSET(CDTRACKRECORD,timepointer); fieldInfo[4] = posFieldInfo; posFieldInfo = posFieldInfo->pNextFieldInfo; posFieldInfo->flData = CFA_ULONG | CFA_HORZSEPARATOR | CFA_SEPARATOR; posFieldInfo->flTitle = CFA_CENTER; posFieldInfo->pTitleData = "Size"; posFieldInfo->offStruct = FIELDOFFSET(CDTRACKRECORD,size); fieldInfo[5] = posFieldInfo; posFieldInfo = posFieldInfo->pNextFieldInfo; posFieldInfo->flData = CFA_ULONG | CFA_HORZSEPARATOR | CFA_SEPARATOR; posFieldInfo->flTitle = CFA_CENTER; posFieldInfo->pTitleData = "MP3 Size"; posFieldInfo->offStruct = FIELDOFFSET(CDTRACKRECORD,mp3size); fieldInfo[6] = posFieldInfo; posFieldInfo = posFieldInfo->pNextFieldInfo; posFieldInfo->flData = CFA_STRING | CFA_HORZSEPARATOR | CFA_SEPARATOR; posFieldInfo->flTitle = CFA_CENTER; posFieldInfo->pTitleData = "Title"; posFieldInfo->offStruct = FIELDOFFSET(CDTRACKRECORD,titleptr); fieldInfo[7] = posFieldInfo; posFieldInfo = posFieldInfo->pNextFieldInfo; posFieldInfo->flData = CFA_STRING | CFA_HORZSEPARATOR | CFA_SEPARATOR; posFieldInfo->flTitle = CFA_CENTER; posFieldInfo->pTitleData = "Artist"; posFieldInfo->offStruct = FIELDOFFSET(CDTRACKRECORD,artistptr); fieldInfo[8] = posFieldInfo; posFieldInfo = posFieldInfo->pNextFieldInfo; posFieldInfo->flData = CFA_STRING | CFA_HORZSEPARATOR | CFA_SEPARATOR; posFieldInfo->flTitle = CFA_CENTER; posFieldInfo->pTitleData = "Album"; posFieldInfo->offStruct = FIELDOFFSET(CDTRACKRECORD,albumptr); fieldInfo[9] = posFieldInfo; posFieldInfo = posFieldInfo->pNextFieldInfo; posFieldInfo->flData = CFA_STRING | CFA_HORZSEPARATOR | CFA_SEPARATOR; posFieldInfo->flTitle = CFA_CENTER; posFieldInfo->pTitleData = "Year"; posFieldInfo->offStruct = FIELDOFFSET(CDTRACKRECORD,yearptr); fieldInfo[10] = posFieldInfo; posFieldInfo = posFieldInfo->pNextFieldInfo; posFieldInfo->flData = CFA_STRING | CFA_HORZSEPARATOR | CFA_SEPARATOR; posFieldInfo->flTitle = CFA_CENTER; posFieldInfo->pTitleData = "Genre"; posFieldInfo->offStruct = FIELDOFFSET(CDTRACKRECORD,genreptr); fieldInfo[11] = posFieldInfo; posFieldInfo = posFieldInfo->pNextFieldInfo; posFieldInfo->flData = CFA_STRING | CFA_HORZSEPARATOR | CFA_SEPARATOR; posFieldInfo->flTitle = CFA_CENTER; posFieldInfo->pTitleData = "Comment"; posFieldInfo->offStruct = FIELDOFFSET(CDTRACKRECORD,commentptr); fieldInfo[12] = posFieldInfo; fieldInfoInsert.cb = sizeof(fieldInfoInsert); fieldInfoInsert.pFieldInfoOrder = (FIELDINFO *) CMA_FIRST; fieldInfoInsert.fInvalidateFieldInfo = TRUE; fieldInfoInsert.cFieldInfoInsert = NUM_FIELDS; insertFieldInfo(hwnd, CT_TRACK, firstFieldInfo, &fieldInfoInsert); cnrInfo.xVertSplitbar = 100; cnrInfo.flWindowAttr = CV_DETAIL | CA_DETAILSVIEWTITLES; WinSendDlgItemMsg(hwnd,CT_TRACK,CM_SETCNRINFO, MPFROMP(&cnrInfo), MPFROMLONG(CMA_PFIELDINFOLAST | CMA_XVERTSPLITBAR | CMA_FLWINDOWATTR)); loadConfig(CFGFILE, &grabbers, &countGrabbers); for(i = 0; i < countGrabbers; i++) insertItemText(hwnd,CB_GRABBER,LIT_END,grabbers[i].id); selectItem(hwnd,CB_GRABBER,0); setText(hwnd, EF_TITLE, "Title"); /* wohw, this is too powerful, need cooling */ len = sizeof(CDInfo); if(!DosOpen("\\DEV\\CD-ROM2$", &CDDevice, &action, 0, FILE_NORMAL, OPEN_ACTION_OPEN_IF_EXISTS, OPEN_SHARE_DENYNONE | OPEN_ACCESS_READONLY, NULL)) { if(!DosDevIOCtl(CDDevice, 0x82, 0x60, NULL, 0, NULL, &CDInfo, len, &len)) { for(i = 0; i < CDInfo.CountCD; i++) { char driveLetter[3] = { (char) ('A' + CDInfo.FirstCD + i), ':', 0}; insertItemText(hwnd,CB_DRIVE,LIT_END,driveLetter); } } DosClose(CDDevice); } selectItem(hwnd,CB_DRIVE,0); wpCT = WinSubclassWindow(WinWindowFromID(hwnd,CT_TRACK),wpCTTrack); dataIco = WinLoadPointer(HWND_DESKTOP, NULLHANDLE, ICO_DATA); trackIco = WinLoadPointer(HWND_DESKTOP, NULLHANDLE, ICO_TRACK); loadIni(hwnd); return 0; } case WM_COMMAND: return processCommand(hwnd,mp1,mp2); case WM_CONTROL: return processControl(hwnd,mp1,mp2); case WM_ADJUSTFRAMEPOS: { SWP *pos = (SWP*) PVOIDFROMMP(mp1); static int bitRateCheck = 0; if(pos->fl & SWP_SIZE) { SWP ctpos; WinQueryWindowPos(WinWindowFromID(hwnd, CT_TRACK), &ctpos); WinSetWindowPos (WinWindowFromID(hwnd, CT_TRACK), 0, 0, ctpos.y, pos->cx, pos->cy - ctpos.y, SWP_SIZE | SWP_SHOW | SWP_MOVE); } if((pos->fl & SWP_SHOW) && bitRateChanged != bitRateCheck) { bitRateCheck = bitRateChanged; refreshFieldInfo(hwnd, CT_TRACK); } break; } case WM_MENUEND: removeSourceEmphasis(HWNDFROMMP(mp2),&sourceEmphasisInfo); return 0; case WM_CLOSE: { WinDestroyPointer(dataIco); WinDestroyPointer(trackIco); free(grabbers); saveIni(hwnd); /* delete all current records */ CDTRACKRECORD *record = (CDTRACKRECORD *) enumRecords(hwnd, CT_TRACK, NULL, CMA_FIRST); while(record && record != (CDTRACKRECORD *) -1) { free(record->record.pszIcon); record = (CDTRACKRECORD *) enumRecords(hwnd, CT_TRACK, (RECORDCORE *) record, CMA_NEXT); } removeRecords(hwnd, CT_TRACK, NULL, 0); removeFieldInfo(hwnd,CT_TRACK, NULL, 0); return 0; } case WM_CHAR: if(SHORT2FROMMP(mp2) == VK_ESC) return 0; else break; /* back from worker thread */ case DLGCD_REFRESH: dlgcd_refresh2(mp1,mp2); return 0; case CDDB_FUZZYMATCH: { CDDBQUERY_DATA *matches = (CDDBQUERY_DATA *) mp1, *chosen = (CDDBQUERY_DATA *) mp2; FUZZYMATCHCREATEPARAMS data = {matches,chosen}; WinDlgBox(HWND_DESKTOP, hwnd, wpMatch, NULLHANDLE, DLG_MATCH, &data); return 0; } } return WinDefDlgProc( hwnd, msg, mp1, mp2 ); }
void mgmtFromNetworkLayer_callback(Xuint32 length, char* payload) { void* rxPktPtr; void* txPktPtr; int i, numRxStructs; unsigned char rxSeqNum, theStructID; //Typed pointers for interpreting received structs warpnetEthernetPktHeader* pktHeader; warpnetControllerGroup* groupStructCopy; warpnetCommand* commandStruct; warpnetControl* controlStruct; warpnetPHYctrl* phyCtrlStruct; warpnetPERreq* perReqPtr; //Local ACK struct, used to send responses to the server warpnetAck ackStruct; //Interpret the received bytes as an Ethernet packet pktHeader = (warpnetEthernetPktHeader*)payload; if((pktHeader->ethType) != WARPNET_ETHTYPE_SVR2NODE) { //Should never happen; all management packets are type WARPNET_ETHTYPE_SVR2NODE return; } numRxStructs = pktHeader->numStructs; rxSeqNum = pktHeader->seqNum; //Initialize the rx pointer to the first byte past the Ethernet header rxPktPtr = (void*)(payload + sizeof(warpnetEthernetPktHeader)); //Iterate over each pair of warpnetControllerGroup / otherStruct in the server message for(i=0; i<numRxStructs; i++) { if( ( ((int)rxPktPtr) - ((int)payload) ) >= length) { xil_printf("Error! Mgmt pktLength too short for numStructs\r\n"); return; } //Alternate structs (starting with the first) are always warpnetControllerGroup groupStructCopy = (warpnetControllerGroup*)rxPktPtr; rxPktPtr += sizeof(warpnetControllerGroup); //Extract the first byte of the actual struct and interpret as the structID theStructID = *( (unsigned char *)rxPktPtr ); //xil_printf("Mgmt Pkt: StructID=0x%x\r\n", theStructID); switch(theStructID) { case STRUCTID_COMMAND: commandStruct = (warpnetCommand*)rxPktPtr; rxPktPtr += sizeof(warpnetCommand); if((commandStruct->nodeID) == myID) { //Send an ACK struct back to the server ackStruct.structID = STRUCTID_COMMAND_ACK; ackStruct.nodeID = myID; ackStruct.cmdID = commandStruct->cmdID; txEthPktHeader.pktLength = sizeof(warpnetEthernetPktHeader) + sizeof(warpnetControllerGroup) + sizeof(warpnetAck); txEthPktHeader.numStructs = 1; //Construct the outgoing Ethernet packet txPktPtr = (void *)warpphy_getBuffAddr(WARPNET_NODE2SVR_PKTBUFFINDEX); memcpy(txPktPtr, (void *)&(txEthPktHeader), sizeof(warpnetEthernetPktHeader)); memcpy(txPktPtr+sizeof(warpnetEthernetPktHeader), (void *)groupStructCopy, sizeof(warpnetControllerGroup)); memcpy(txPktPtr+sizeof(warpnetEthernetPktHeader)+sizeof(warpnetControllerGroup), (void *)&(ackStruct), sizeof(warpnetAck)); //Set the Ethernet packet warpmac_prepPktToNetwork(txPktPtr, txEthPktHeader.pktLength); warpmac_startPktToNetwork(txEthPktHeader.pktLength); //Process the received struct processCommand(commandStruct); } break; case STRUCTID_CONTROL: controlStruct = (warpnetControl*)rxPktPtr; rxPktPtr += sizeof(warpnetControl); if((controlStruct->nodeID) == myID) { //Send an ACK struct back to the server ackStruct.structID = STRUCTID_CONTROL_ACK; ackStruct.nodeID = myID; txEthPktHeader.pktLength = sizeof(warpnetEthernetPktHeader) + sizeof(warpnetControllerGroup) + sizeof(warpnetAck); txEthPktHeader.numStructs = 1; //Construct the outgoing Ethernet packet txPktPtr = (void *)warpphy_getBuffAddr(WARPNET_NODE2SVR_PKTBUFFINDEX); memcpy(txPktPtr, (void *)&(txEthPktHeader), sizeof(warpnetEthernetPktHeader)); memcpy(txPktPtr+sizeof(warpnetEthernetPktHeader), (void *)groupStructCopy, sizeof(warpnetControllerGroup)); memcpy(txPktPtr+sizeof(warpnetEthernetPktHeader)+sizeof(warpnetControllerGroup), (void *)&(ackStruct), sizeof(warpnetAck)); //Set the Ethernet packet warpmac_prepPktToNetwork(txPktPtr, txEthPktHeader.pktLength); warpmac_startPktToNetwork(txEthPktHeader.pktLength); //Process the received struct processControl(controlStruct); } break; case STRUCTID_OBSERVE_PER_REQ: perReqPtr = (warpnetPERreq*)rxPktPtr; rxPktPtr += sizeof(warpnetPERreq); if((perReqPtr->nodeID) == myID) { //Copy over the request ID to the PER struct (this allows the client to confirm it got the right PER struct reply) perStruct.reqNum = (unsigned char)perReqPtr->reqNum; txEthPktHeader.pktLength = sizeof(warpnetEthernetPktHeader) + sizeof(warpnetControllerGroup) + sizeof(warpnetObservePER); txEthPktHeader.numStructs = 1; //Construct the outgoing Ethernet packet txPktPtr = (void *)warpphy_getBuffAddr(WARPNET_NODE2SVR_PKTBUFFINDEX); memcpy(txPktPtr, (void *)&(txEthPktHeader), sizeof(warpnetEthernetPktHeader)); memcpy(txPktPtr+sizeof(warpnetEthernetPktHeader), (void *)groupStructCopy, sizeof(warpnetControllerGroup)); memcpy(txPktPtr+sizeof(warpnetEthernetPktHeader)+sizeof(warpnetControllerGroup), (void *)&perStruct, sizeof(warpnetObservePER)); //Set the Ethernet packet warpmac_prepPktToNetwork(txPktPtr, txEthPktHeader.pktLength); warpmac_startPktToNetwork(txEthPktHeader.pktLength); } break; case STRUCTID_PHYCTRL: phyCtrlStruct = (warpnetPHYctrl*)rxPktPtr; rxPktPtr += sizeof(warpnetPHYctrl); if((phyCtrlStruct->nodeID) == myID) { //Send an ACK struct back to the server ackStruct.structID = STRUCTID_PHYCTRL_ACK; ackStruct.nodeID = myID; txEthPktHeader.pktLength = sizeof(warpnetEthernetPktHeader) + sizeof(warpnetControllerGroup) + sizeof(warpnetAck); txEthPktHeader.numStructs = 1; txPktPtr = (void *)warpphy_getBuffAddr(WARPNET_NODE2SVR_PKTBUFFINDEX); memcpy(txPktPtr, (void *)&(txEthPktHeader), sizeof(warpnetEthernetPktHeader)); memcpy(txPktPtr+sizeof(warpnetEthernetPktHeader), (void *)groupStructCopy, sizeof(warpnetControllerGroup)); memcpy(txPktPtr+sizeof(warpnetEthernetPktHeader)+sizeof(warpnetControllerGroup), (void *)&(ackStruct), sizeof(warpnetAck)); warpmac_prepPktToNetwork(txPktPtr, txEthPktHeader.pktLength); warpmac_startPktToNetwork(txEthPktHeader.pktLength); //Process the received struct processPHYControl(phyCtrlStruct); } break; default: //Unrecognized structID; do nothing //xil_printf("Unknown structID: 0x%x\r\n", theStructID); break; }//END switch(theStructID) }//END for(0...numStructs-1) return; }
void Daemon::processIncoming( Channel incoming ) { processControl( std::move( incoming ) ); }