Exemple #1
0
void main() {
	int i,RcvId;
	void *msg;
	int screen;
	
	chan = makeChan();
	screen = open("/dev/screen",O_PROC, chan);
	if (screen == -1) {
		perror("Shit!");
		exit(1);
	}
	retexit(1);
	scrSwitch(screen, SCRO_This);
	while(1) {
		RcvId = recvMsg(chan, &msg);
		switch (* (int *)msg) {
		case PMSG_GetScr: 
				VideoMode();
				InitializeStars();
				EditPalette();
				getRaster();
				check=1;
				initKey();
				setRaster(VBIRute,250);
				break;
		case PMSG_LoseScr:
				freeRaster();
				scrSwitch(screen, SCRO_Next); 
				break;
		}
		replyMsg(RcvId,0);
	}

}
Exemple #2
0
void listener() {
  int channel,rcvid,returncode;
  msgpass * msg = malloc(sizeof(msgpass));

  channel = makeChanP("/sys/taskbar");
  
  while(1) {
    rcvid = recvMsg(channel,(void *)&msg);

    switch(msg->code) {
      case TSKM_KILLED:
      case TSKM_NEWITEM:
      case TSKM_MINIMIZED:
      case TSKM_INFOCUS:
      case TSKM_INBLUR:
        newThread(updateitem,STACK_DFL,msg);
        returncode = 0;
      break;
      case IO_OPEN:
        if(*(int *) (((char *)msg)+6) & (O_PROC|O_STAT))
          returncode = makeCon(rcvid,1);
        else
          returncode = -1;
      break;
    }
    replyMsg(rcvid,returncode);
  }
}
Exemple #3
0
void outThread(int *tlc) {
    FILE *stream;
    int RcvId;
    char *msg;
    char **upto;
    int count,type;
    int lastone=0;
    int ch;
    stream = fdopen(*tlc,"wb");

    while (1) {
        RcvId = recvMsg(channel, (void *)&msg);
        type = * (int *)msg;
        if (type == SRVMSG) {
            count = * (int *)(msg+2);
            upto = (char **)(msg+4);
            while (count--)
                fputs(*upto++,stream);
            fprintf(stream,"\n");
            fflush(stream);
        } else if (type == KEYINP) {
            ch = * (int *)(msg+2);
            if (ch == '\b' || ch == 0x7f) {
                putchar('\b');
                putchar(' ');
                putchar('\b');
                --inpx;
            } else {
                putchar(ch);
                ++inpx;
            }
            con_update();
        } else if (type == CLRINP) {
            inpx=0;
            con_gotoxy(inpx,inpy);
            con_clrline(LC_End);
            con_update();
        } else {

            con_gotoxy(0,22);
            if (lastone == SCRMSG)
                putchar('\n');
            vprintf(* (char **)(msg+2), (void *)(msg+6));
            lastone = type;
            con_gotoxy(inpx,inpy);
            con_update();
        }
        replyMsg(RcvId,0);
    }

}
Exemple #4
0
void main(int argc, char * argv[]) {
  int channel, rcvid, returncode;

  if(open("/sys/addressbook", O_PROC) != -1) {
    fprintf(stderr, "The addressbook service is already running.\n");
    exit(EXIT_FAILURE);
  }

  xmlfile = XMLloadFile(fpathname("data/addressbook.xml", getappdir(), 1));
  xmlelem = XMLgetNode(xmlfile, "xml");

  channel = makeChanP("/sys/addressbook");

  retexit(1);

  while(1) {
    rcvid = recvMsg(channel,(void *)&msg); 

    switch(msg->code) {
      case GET_ATTRIB:
        returncode = getattrib();
      break;
      case GET_ALL_LIST:
        returncode = getalllist();
      break;
      case MAKE_ENTRY:
        returncode = makeentry();
      break;
      case PUT_ATTRIB:
        returncode = putattrib();
      break;
      case DEL_ENTRY:
        returncode = deleteentry();
      break;
      case DEL_ATTRIB:
        returncode = deleteattrib();
      break;
      case IO_OPEN:
        if(*(int *)( ((char*)msg) +6) & (O_PROC|O_STAT))
          returncode = makeCon(rcvid, 1);
        else 
          returncode = -1;
      break;
    }

    replyMsg(rcvid, returncode);    
  }
} 
void
HTGAvatarView::postTweet()
{
	std::string replyMsg( "" );
	std::string replyId( "" );
	std::string postMsg = urlEncode(fMessage->Text());
	if( twitObj->statusUpdate(postMsg, replyId) )  {
		printf( "Status update: OK\n" );
		twitObj->getLastWebResponse(replyMsg);
		int errorStart = replyMsg.find("<error>");
		int errorEnd = replyMsg.find("<\error>");
		if(errorStart-errorEnd > 0)
			HTGErrorHandling::displayError(replyMsg.substr(errorStart, errorEnd-errorStart).c_str());
		else { // Send "status updated" to parent, so we can refresh timelines
			BMessage* statusUpdated = new BMessage(STATUS_UPDATED);
			statusUpdated->AddString("content", fMessage->Text());
			fParent->MessageReceived(statusUpdated);
		}
	}
/********************************************************************
  parseCmds loops through a list of hear functions and tries to match queries 
  and execute reply response functions

********************************************************************/
void ArduinoSlackBot::parseCmds() {

  struct slre_cap matches[4];

  //you must reference the bot to get a response
  if (slre_match(botID, slackMsg.text, strlen(slackMsg.text), matches, 4, 0) > 0) {
    PRINTLN(ESP.getFreeHeap());

    for (int i=0; i <= qrListLength-1; i++) {
     
      //match the provided regex
      if (slre_match(qrList[i]->query, slackMsg.text, strlen(slackMsg.text), matches, 4, 0) > 0) {  
        PRINTLN(matches[0].ptr);
        qrList[i]->resp(); //execute provided bot response
        return; //stop matching if match is found
      } 
    }
    replyMsg(failMsg);
  }
  
}
Exemple #7
0
void
HTGTimeLineView::savedSearchCreateSelf()
{
	/*Save search to twitter*/
	std::string query(::htmlFormatedString(Name()));
	twitCurl *saveObj = new twitCurl();
	saveObj->getOAuth() = twitObj->getOAuth().clone();
	saveObj->savedSearchCreate(query);
	std::string replyMsg(" ");
	saveObj->getLastWebResponse(replyMsg);

	/*Parse result*/
	size_t pos = 0;
	const char *idTag = "<id>";
	pos = replyMsg.find(idTag, pos);
	if(pos != std::string::npos) {
		int start = pos+strlen(idTag);
		int end = replyMsg.find("</id>", start);
		std::string searchID(replyMsg.substr(start, end-start));
		setSearchID(atoi(searchID.c_str()));
	}
	delete saveObj;
}
Exemple #8
0
void
DataServer::on_data_received(
            const SocketPtr &in_socket, const MemInfo &in_msg ) {
    const DataServiceMessage *pMsg
            = reinterpret_cast<const DataServiceMessage *>(
                                    in_msg.get_data());
    DataServiceMessage reply( DATA_SERVICE_GENERAL_REPLY );
    bool status = false;
    switch( pMsg->m_header.m_type ) {
        case DataMessageType::DATA_SERVICE_REGISTER:
        {
            std::string buf = pMsg->m_data;
            std::istringstream ifs( buf );
            boost::archive::text_iarchive ia( ifs );
            ServiceRequestData data;
            ia & data;
            status = on_service_register_request(
                                        data.m_service_name,
                                        data.m_hostname, data.m_port );
            break;
        }
        case DataMessageType::DATA_SERVICE_UNREGISTER:
        {
            std::string buf = pMsg->m_data;
            std::istringstream ifs( buf );
            boost::archive::text_iarchive ia( ifs );
            ServiceRequestData data;
            ia & data;
            status = on_service_unregister_request(
                                        data.m_service_name,
                                        data.m_hostname, data.m_port );
            break;
        }
        case DataMessageType::DATA_SERVICE_INFO_REQUEST:
        {
            std::string buf = pMsg->m_data;
            std::istringstream ifs( buf );
            boost::archive::text_iarchive ia( ifs );
            ServiceRequestData data;
            ia & data;
            ServiceInfoPtr info;
            status = on_service_info_request( data.m_service_name, info );
            if( info ) {
                std::ostringstream sout;
                boost::archive::text_oarchive oa(sout);
                oa & info;
                std::strncpy( reply.m_data,
                                sout.str().c_str(), sout.str().size());
            }
            reply.m_header.m_type =  DATA_SERVICE_INFO_REPLY;
            break;
        }
        default:
        {
        }
    }
    reply.m_status = status;
    MemInfo replyMsg( reinterpret_cast<char *>( &reply ),
                        sizeof( DataServiceMessage ) );
    in_socket->send_data( replyMsg );
}
Exemple #9
0
void main(int argc, char * argv[]) {
  void *appl;
  int type,rcvid,icocol;
  char * msg;
  void * but;

  rcvid = open("/sys/taskbar",O_PROC);
  if(rcvid != -1) {
    printf("Taskbar is already running!\n");
    exit(1);
  }

  appchannel = makeChan();
  appl = JAppInit(NULL,appchannel);

  //default position is at top of screen
  position = TSKM_ONTOP;
  if(argc > 1) {
    if(!strcmp(argv[1],"left"))
      position = TSKM_ONLEFT;
    else if(!strcmp(argv[1],"right"))
      position = TSKM_ONRIGHT;
    else if(!strcmp(argv[1],"top"))
      position = TSKM_ONTOP;
    else if(!strcmp(argv[1],"bottom"))
      position = TSKM_ONBOTTOM;
  }

  taskbar = JCntInit(NULL);
  if(position == TSKM_ONTOP || position == TSKM_ONBOTTOM) {
    ((JCnt*)taskbar)->Orient = JCntF_LeftRight;
    JWSetBounds(taskbar,0,0,0,16);
  } else {
    ((JCnt*)taskbar)->Orient = JCntF_TopBottom;
    JWSetBounds(taskbar,0,0,16,0);
  }

  JWndSetProp(taskbar);
  JAppSetMain(appl,taskbar);

  JWinShow(taskbar);
  newThread(makecbutton,STACK_DFL,NULL);
  retexit(0);

  newThread(listener,STACK_DFL,NULL);

  while(1) {
    rcvid = recvMsg(appchannel,(void *)&msg);
    type = *(int *)msg;

    //printf("got appchannel msg: #%d\n",type);

    switch(type) {
      case WIN_EventRecv:
        JAppDrain(appl);
      break;
      case REFRESH:
        JWinLayout(taskbar);
      break;
      case SETCOL:
        but    = *(void **)(msg+2);
        icocol = *(int *)(msg+6);

        memset(((JBmp*)but)->Cols,icocol,4);
        /*
        ((JBmp*)but)->Cols[0] = icocol;
        ((JBmp*)but)->Cols[1] = icocol;
        ((JBmp*)but)->Cols[2] = icocol;
        ((JBmp*)but)->Cols[3] = icocol;
        */
        JWReDraw(but);
      break;
    }
    replyMsg(rcvid,0);
  }
}
void ChatManager::HandleChannelJoinMessage(MsgEntry *me, Client *client)
{
    psChannelJoinMessage msg(me);
    msg.channel.Trim();
    if(msg.channel.Length() == 0)
        return;
    if(msg.channel.Length() > 30)
        return;

    csString nocaseChannelName = msg.channel;
    nocaseChannelName.Downcase();
    // Search is case-insensitive
    uint32_t channelID = channelIDs.Get(nocaseChannelName, 0);
    if(channelID == 0)
    {
        uint32_t start = channelID = nextChannelID++;
        while(!channelSubscribers.GetAll(channelID).IsEmpty() && nextChannelID != start - 1)
        {
            channelID = nextChannelID++;
            if(nextChannelID == 0)
                nextChannelID++;
        }
        if(nextChannelID == start - 1)
        {
            psserver->SendSystemError(client->GetClientNum(), "Server channel limit reached!");
            return;
        }

        channelIDs.PutUnique(nocaseChannelName, channelID);
        channelNames.PutUnique(channelID, nocaseChannelName);
    }
    else
    {
        csArray<uint32_t> subscribed = channelSubscriptions.GetAll(client->GetClientNum());
        bool found = false;
        for(size_t i = 0; i < subscribed.GetSize(); i++)
        {
          if(subscribed[i] == channelID)
              found = true;
        }
        if(found)
        {
          psserver->SendSystemError(client->GetClientNum(), "You have already joined this channel.");
          return;
        }
    }
    if(channelSubscriptions.GetAll(client->GetClientNum()).GetSize() > 10)
    {
        psserver->SendSystemError(client->GetClientNum(), "You have joined more than 10 channels, please leave some channels first.");
        return;
    }
    csString reply;
    reply.Format("Welcome to the %s channel! %d players in this channel.", channelNames.Get(channelID, "").GetData(), (int)channelSubscribers.GetAll(channelID).GetSize());

    channelSubscriptions.Put(client->GetClientNum(), channelID);
    channelSubscribers.Put(channelID, client->GetClientNum());

    psserver->SendSystemInfo(client->GetClientNum(), reply);
    psChannelJoinedMessage replyMsg(client->GetClientNum(), channelNames.Get(channelID, "").GetData(), channelID);
    replyMsg.SendMessage();
}
Exemple #11
0
status_t
updateTimeLineThread(void *data)
{
	//Could not figure out how to update a BListItem with a child view (BTextView).
	//Could be a bug in Haiku APIs. After hours of investigation without any
	//result, I just don't care anymore. Reallocating all HTGTweetItem on update.
	HTGTimeLineView *super = (HTGTimeLineView*)data;
	
	HTGListView *listView = super->listView;
	bool saveTweets = super->saveTweets;
	
	int32 TYPE = super->TYPE;
	twitCurl *twitObj = super->twitObj;
	HTTimelineParser *timeLineParser;
	std::string replyMsg(" ");
	
	HTGTweetItem *mostRecentItem = NULL;
	HTTweet *mostRecentTweet = NULL;
	HTTweet *currentTweet = NULL;
	
	BList *newList = new BList();
	
	switch(TYPE) {
		case TIMELINE_HOME:
			twitObj->timelineHomeGet();
			break;
		case TIMELINE_FRIENDS:
			twitObj->timelineFriendsGet();
			break;
		case TIMELINE_MENTIONS:
			twitObj->mentionsGet();
			break;
		case TIMELINE_PUBLIC:
			twitObj->timelinePublicGet();
			break;
		case TIMELINE_USER:
			twitObj->timelineUserGet(true, true, 25); // TODO: is this correct?
			break;
		case TIMELINE_SEARCH:
			twitObj->search(htmlFormatedString(super->Name()));
			break;
		case TIMELINE_HDD:
			return B_OK;
			break;
		default:
			twitObj->timelinePublicGet();
	}
	
	twitObj->getLastWebResponse(replyMsg);
	
	#ifdef DEBUG_ENABLED
		std::cout << "HTGTimelineView: web response:" << std::endl;
	 	std::cout << replyMsg << std::endl;
	 #endif

	if(replyMsg.length() < 10) {
		super->errorCount++;
		if(super->errorCount < kMaximumRetries) {
			super->waitingForUpdate = true;
			#ifdef DEBUG_ENABLED
			std::cout << "No connection. Retry " << super->errorCount << "/" << kMaximumRetries << std::endl;
			std::string error; twitObj->getLastCurlError(error);
			std::cout << "Curl error: " << error << std::endl;
			#endif
			usleep(5000 * pow(super->errorCount,2));
			return updateTimeLineThread(super);
		}
		else
			replyMsg= string("error");
	}
	else
		super->errorCount = 0;
	
	if(TYPE == TIMELINE_SEARCH)
		timeLineParser = new HTSearchParser();
	else
		timeLineParser = new HTTimelineParser();

	try {
		timeLineParser->Parse(replyMsg);
	}
	catch( ... ) {
		std::cout << super->Name() << ": Error while parsing data." << std::endl;
		delete timeLineParser;
		timeLineParser = NULL;
		return B_OK;
	}
	
	if(timeLineParser->Tweets()->CountItems() < 1) {//timeLineParser failed, return!
		std::cout << super->Name() << ": Parser didn't find any tweets." << std::endl;
		delete timeLineParser;
		timeLineParser = NULL;
		return B_OK;
	}
	
	bool initialLoad = (listView->FirstItem() == NULL && super->unhandledList->FirstItem() == NULL);
	
	if(!initialLoad && listView->FirstItem() != NULL) {
		mostRecentItem = (HTGTweetItem *)listView->FirstItem();
		mostRecentTweet = mostRecentItem->getTweetPtr();
		currentTweet = (HTTweet *)timeLineParser->Tweets()->ItemAt(0);
	
		/*If we are up to date: redraw, clean up and return - Note this should not be done here,
		rather as a result of some BPulse I guess...*/
		if(!(*mostRecentTweet < *currentTweet)) {
			if(listView->LockLooper()) {
				for(int i = 0; i < listView->CountItems(); i++)
					listView->InvalidateItem(i); //Update date
				listView->UnlockLooper();
			}	
			delete timeLineParser;
			timeLineParser = NULL;
			return B_OK;
		}
	}
	
	/*Check to see if there is some unhandled tweets*/
	if(!super->unhandledList->IsEmpty()) {
		mostRecentItem = (HTGTweetItem *)super->unhandledList->FirstItem();
		mostRecentTweet = mostRecentItem->getTweetPtr();
	}
	
	for (int i = 0; i < timeLineParser->Tweets()->CountItems(); i++) {
		currentTweet = (HTTweet *)timeLineParser->Tweets()->ItemAt(i);
		bool addItem = initialLoad;
		if(!initialLoad) {
			if(mostRecentTweet != NULL)
				addItem = (*mostRecentTweet < *currentTweet);
			else
				addItem = true;
		}
		if(addItem) {
			/*Make a copy, download bitmap and add it to newList*/
			HTTweet *copiedTweet = new HTTweet(currentTweet);
			copiedTweet->downloadBitmap();
			newList->AddItem(new HTGTweetItem(copiedTweet));
			
			if(!initialLoad && super->wantsNotifications) { //New tweet arrived, send notification
				super->sendNotificationFor(copiedTweet);
			}
			if(saveTweets)
				HTStorage::saveTweet(copiedTweet);
		}
		else
			break;
	}
	
	super->unhandledList->AddList(newList, 0);
	
	/*Try to lock listView*/
	if(!listView->LockLooper()) {
		/*Not active view: return*/
		super->waitingForUpdate = true;
		delete timeLineParser;
		timeLineParser = NULL;
		delete newList;
		
		return B_OK;
	}
	
	/*Add the tweets to timeline*/
	super->addUnhandledTweets();
			
	/*Cleanup*/
	super->waitingForUpdate = false;
	listView->UnlockLooper();
	delete timeLineParser;
	timeLineParser = NULL;
	delete newList;

	return B_OK;
}
Exemple #12
0
void MainWidget::request( QTcpSocket *id,
                          const QHttpRequestHeader &header )
{
   mpMessageBuffer->addItem( header.toString() );
   while( mpMessageBuffer->count() > 200 )
   {
      QListWidgetItem *item = mpMessageBuffer->takeItem( 0 );
      if( item )
      {
         delete item;
      }
   }
   mpMessageBuffer->scrollToBottom();

#if 0
   if( header.path() == "/favicon.ico" )
   {
      QFile file( ":/favicon.ico" );
      file.open( QIODevice::ReadOnly | QIODevice::Text );
      emit response( id,
                     QHttpResponseHeader( 200, "OK" ),
                     file.readAll() );
      file.close();
      return;
   }
#endif
   if( header.path() == "/wait" )
   {
      mDelayList.append( id );
      return;
   }
   if( header.path() == "/get" )
   {
      QString reply( "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n"
                     "<response>\n"
                     " <reply>%1</reply>\n"
                     " <artist>%2</artist>\n"
                     " <title>%3</title>\n"
                     " <album>%4</album>\n"
                     " <track>%5</track>\n"
                     "</response>\n" );
      QByteArray replyMsg( reply.arg( Qt::escape( QString::fromUtf8(mMsg.constData()) ),
                                      Qt::escape( mTrackInfo.mArtist ),
                                      Qt::escape( mTrackInfo.mTitle ),
                                      Qt::escape( mTrackInfo.mAlbum ),
                                      QString::number(mTrackInfo.mTrackNr) ).toUtf8() );
      emit response( id,
                     QHttpResponseHeader( 200, "OK XML" ),
                     replyMsg );
      return;
   }
   QString html("<html>\n<head>\n<title>%1</title>\n"
         "<meta http-equiv='content-type' content='text/html; charset=UTF-8'>\n"
         "<link rel='shortcut icon' href='/favicon.ico' type='image/x-icon'>\n"
         "<script src='ajax.js' type='text/javascript'>\n"
         "</script>\n"
         "</head>\n<body>\n"
         "<h1>%2</h1>\n"
         "<p>HTTP Request: %3 %4</p>\n"
         "<table border='1'>\n"
         "<tr valign='top'><td>Artist:</td><td><textarea cols='80' rows='1' name='artist' wrap='off' readonly></textarea></td></tr>\n"
         "<tr valign='top'><td>Title:</td><td><textarea cols='80' rows='1' name='title' wrap='off' readonly></textarea></td></tr>\n"
         "<tr valign='top'><td>Album:</td><td><textarea cols='80' rows='1' name='album' wrap='off' readonly></textarea></td></tr>\n"
         "<tr valign='top'><td>Track:</td><td><textarea cols='80' rows='1' name='track' wrap='off' readonly></textarea></td></tr>\n"
         "<tr valign='top'><td>Reply:</td><td><textarea cols='80' rows='5' name='reply' wrap='off' readonly></textarea></td></tr>\n"
         "<tr valign='top'><td>Status:</td><td><input name='status' size='12' readonly>"
         "<input type='button' value='refresh' onclick='loadFields();'></td></tr>\n"
         "</table></body></html>\n"
         );
   html = html.arg( QApplication::organizationName() + ": " + QApplication::applicationName(),
                    QApplication::organizationName() + ": " + QApplication::applicationName(),
                    header.method(),
                    header.path() );

   emit response( id,
                  QHttpResponseHeader( 200, "OK" ),
                  html.toUtf8() );
}
Exemple #13
0
static Iface_DEFUN incoming(struct Message* msg, struct Iface* interRouterIf)
{
    struct MsgCore_pvt* mcp =
        Identity_containerOf(interRouterIf, struct MsgCore_pvt, pub.interRouterIf);

    struct Address addr = { .padding = 0 };
    struct RouteHeader* hdr = (struct RouteHeader*) msg->bytes;
    Message_shift(msg, -(RouteHeader_SIZE + DataHeader_SIZE), NULL);
    Bits_memcpy(addr.ip6.bytes, hdr->ip6, 16);
    Bits_memcpy(addr.key, hdr->publicKey, 32);
    addr.protocolVersion = Endian_bigEndianToHost32(hdr->version_be);
    addr.path = Endian_bigEndianToHost64(hdr->sh.label_be);

    Dict* content = NULL;
    uint8_t* msgBytes = msg->bytes;
    int length = msg->length;
    //Log_debug(mcp->log, "Receive msg [%s] from [%s]",
    //    Escape_getEscaped(msg->bytes, msg->length, msg->alloc),
    //    Address_toString(&addr, msg->alloc)->bytes);
    //
    BencMessageReader_readNoExcept(msg, msg->alloc, &content);
    if (!content) {
        char* esc = Escape_getEscaped(msgBytes, length, msg->alloc);
        Log_debug(mcp->log, "DROP Malformed message [%s]", esc);
        return NULL;
    }

    int64_t* verP = Dict_getIntC(content, "p");
    if (!verP) {
        Log_debug(mcp->log, "DROP Message without version");
        return NULL;
    }
    addr.protocolVersion = *verP;

    String* q = Dict_getStringC(content, "q");

    if (!Defined(SUBNODE)) {
        String* txid = Dict_getStringC(content, "txid");
        Assert_true(txid);
        if (q) {
            if (txid->bytes[0] == '0') {
                Log_debug(mcp->log, "DROP query which begins with 0 and is for old pathfinder");
                return NULL;
            }
        } else {
            if (txid->bytes[0] != '1') {
                Log_debug(mcp->log, "DROP reply which does not begin with 1");
                return NULL;
            }
            String* newTxid = String_newBinary(NULL, txid->len - 1, msg->alloc);
            Bits_memcpy(newTxid->bytes, &txid->bytes[1], txid->len - 1);
            Dict_putStringC(content, "txid", newTxid, msg->alloc);
            txid = newTxid;
        }
    }

    if (q) {
        return queryMsg(mcp, content, &addr, msg);
    } else {
        return replyMsg(mcp, content, &addr, msg);
    }
}

struct MsgCore* MsgCore_new(struct EventBase* base,
                            struct Random* rand,
                            struct Allocator* allocator,
                            struct Log* log,
                            struct EncodingScheme* scheme)
{
    struct Allocator* alloc = Allocator_child(allocator);
    struct MsgCore_pvt* mcp = Allocator_calloc(alloc, sizeof(struct MsgCore_pvt), 1);
    Identity_set(mcp);
    mcp->pub.interRouterIf.send = incoming;
    mcp->qh = ArrayList_OfQueryHandlers_new(alloc);
    mcp->pinger = Pinger_new(base, rand, log, alloc);
    mcp->log = log;

    mcp->scheme = scheme;
    mcp->schemeDefinition = EncodingScheme_serialize(scheme, alloc);

    return &mcp->pub;
}
Exemple #14
0
int main(int argc, char *argv[]) {
	int RcvId, xsize,ysize,minxsize,minysize;
	void *msg;
	void *App, *window, *bmp, *scr, *view;
	int seg=0,done=0,ch;
	uint32 temp,len;
        JMeta * metadata = malloc(sizeof(JMeta));	

	while ((ch = getopt(argc, argv, "g:b:c:")) != EOF) {
		switch(ch) {
		case 'g': 
			gamma = atoi(optarg);
			break;
		case 'b':
			bright = atoi(optarg);
			break;
		case 'c':
			contrast = atoi(optarg);
			break;
		}
			
	}
	if (argc-optind < 1)
		exit(1);
	filefd = open(argv[optind], O_READ);
	if (filefd == -1) {
		perror(argv[optind]);
		exit(1);
	}
	maketab();
	chan = makeChan();
	seg = loadseg();
	if (seg == 0xd8) {
		printf("It's a jpeg!\n");
	} else abort("Not a jpeg!\n");
	while(seg != 0xda) {
		seg = loadseg();
/*		printf("It's %2x, size %4x\n", seg, seglen); */
		switch(seg) {
			case 0xdb:
				segDQT();
				break;
			case 0xc4:
				segDHT();
				break;
			case 0xda:
				segSOS();
				break;
			case 0xc0:
				segSOF();
				break;
			case 0xdd:
				segDRI();
				break;
			default:
				printf("Unknown segment %d\n", seg);
				break;
		}
	}
	bmpwidth = round8(width);
	bmpheight = round8(height);

        metadata->launchpath = strdup(fpathname(argv[0],getappdir(),1));
        metadata->title = "Jpeg viewer";
        metadata->icon = app_icon;
        metadata->showicon = 1;
        metadata->parentreg = -1;

	App = JAppInit(NULL, chan);
	window = JWndInit(NULL, "Jpeg viewer by J. Maginnis and S. Judd", JWndF_Resizable,metadata);
        ((JCnt *)window)->Orient = JCntF_TopBottom;

        xsize = bmpwidth;
        ysize = bmpheight;

        if(xsize > 296)
          xsize = 296;
        else if(xsize < 64)
          xsize = 64;

        if(ysize > 160)
          ysize = 160;
        else if(ysize < 24)
          ysize = 24;

        if(xsize > 64)
          minxsize = 64;
        else
          minxsize = xsize;

        minysize = 24;

        JWSetBounds(window,0,0,xsize,ysize+16);
        JWSetMin(window,minxsize,minysize);
        JWSetMax(window,xsize+8,ysize+24);
        JAppSetMain(App,window);

	width8 = bmpwidth/8;
	temp = (uint32) width8 * bmpheight;
	len = temp/8+temp;
	bmpup = bmploc = calloc(len, 1);
	colloc = bmploc+temp;
	//printf("%dx%d, %lx bytes, %lx,%lx,%lx\n", bmpwidth, bmpheight, len, bmpup, colloc, bmpup+len);

	bmp = JBmpInit(NULL, bmpwidth, bmpheight, bmploc);
	view = JViewWinInit(NULL, bmp);
	scr = JScrInit(NULL, view, JScrF_VNotEnd|JScrF_HNotEnd);
        JWSetMin(scr,8,8);

	JCntAdd(window, scr);
       
        JWndSetProp(window);
	JWinShow(window);

    retexit(1);

	while(1) {
		while (!done && !chkRecv(chan)) {
			imagedata();
			render();
			JWReDraw(bmp);
			yup += heightDU;
			if (yup >= height) {
				FILE *fp;
				done=1;
				printf("Finished render\n");
/*				fp = fopen("bmpout","wb");
				if (fp) {
					fwrite(bmploc, 320*25+1000, 1, fp);
					fclose(fp);
				} */
			}
		}
		RcvId = recvMsg(chan, &msg);
		switch (* (int *)msg) {
		case WIN_EventRecv:
			JAppDrain(App);
			break;			
		}
		replyMsg(RcvId,0);
	}

	return 1;
}