ProcDecl* Parser::parseProcDecl() { Token procedure = match( PROC_T ); Token ID = match( IDENT_T ); list<Param*> params = parseParamList(); match( SEMICOLON_T ); Block* block = parseBlock(); match( SEMICOLON_T ); ProcDecl* node = new ProcDecl( ID.lexeme, params, block, procedure.line, procedure.column ); return node; }
int Eiger::put (sys_t sys, const char *param, const char *value, size_t len, paramList_t *paramList, int timeout) { const char *functionName = "put"; int headerLen; char header[MAX_BUF_SIZE]; headerLen = epicsSnprintf(header, sizeof(header), REQUEST_PUT, sysStr[sys], param, len); request_t request; char requestBuf[headerLen + len]; request.data = requestBuf; request.dataLen = headerLen + len; request.actualLen = request.dataLen; response_t response; char responseBuf[MAX_MESSAGE_SIZE]; response.data = responseBuf; response.dataLen = sizeof(responseBuf); memcpy(request.data, header, headerLen); memcpy(request.data + headerLen, value, len); if(doRequest(&request, &response, timeout)) { ERR_ARGS("[param=%s] request failed", param); return EXIT_FAILURE; } if(response.code != 200) { ERR_ARGS("[param=%s] server returned error code %d", param, response.code); return EXIT_FAILURE; } return paramList ? parseParamList(&response, paramList) : EXIT_SUCCESS; }