Exemplo n.º 1
0
static
int	write_links(tgf_stream_out *s)
{
	int i,j,rv;
	tgf_command cmd;
	tgf_argument args[2];

	cmd.arguments = args;
	/* phase 1. collect segments */
	for (i=0;i<sctext_size;i++) {
		char *ptr;
		int len,pos;
		sctext[i].segment = -1;
		if (sctext[i].alias >= 0)
			continue;
		if (!sctext[i].id || sctext[i].id[0] != '/')
			continue;
		/* put `in segment' idtf instead of full uri */
		sctext[i].segment = register_segment(sctext[i].id,
					pos = get_seglen(sctext[i].id));
		pos++;
		len = strlen(sctext[i].id+pos);
		ptr = malloc(len+1);
		memcpy(ptr,sctext[i].id+pos,len);
		ptr[len] = 0;
		free(sctext[i].id);
		sctext[i].id = ptr;
	}
	/* phase 2. write segments one by one */
	for (j=0;j<segments_cnt;j++) {
		cmd.type = TGF_DECLARE_SEGMENT;
		cmd.arg_cnt = 1;
		args[0].type = TGF_STRING;
		args[0].arg.a_string = segments[j];
		rv = tgf_write_command(s,&cmd,TGF_I2P(j+SCTEXT_MAXSIZE+1));
		if (rv<0)
			return rv;
		cmd.type = TGF_GENEL;
		cmd.arg_cnt = 2;
		args[0].type = TGF_STRING;
		args[1].type = TGF_SCTYPE;
		for (i=0;i<sctext_size;i++) {
			if (sctext[i].segment<0 || sctext[i].segment != j || sctext[i].hidden)
				continue;
			if (sctext[i].cont_type) {
				fprintf(stderr,"Multiple segments are not fully supported yet."
					" So you cannot place content to elements of other segments, yet \n");
				fprintf(stderr,"idtf is %s\n",sctext[i].id);
				abort();
			}
			args[0].arg.a_string = sctext[i].id;
			args[1].arg.a_sctype = get_tgf_type(sctext[i].type);
			rv = tgf_write_command(s,&cmd,TGF_I2P(i+1));
			if (rv<0)
				return rv;
		}
	}
	return 0;
}
Exemplo n.º 2
0
static void put_seg_desc(void)
{
  if(segtype != SEG_VIRTUAL) {
    if(segtype > SEG_END) {
      if(!ingroup) {
    long len;
    int i, ml;
    char *me;
    
    len = get_seglen();
    
    me = msgbuf;
    rb->snprintf(me,MAXDESCLEN, "%4d: ", currseg);
    me = me+rb->strlen(me);
    if(segtype >= SEG_DATA && len) {
      rb->snprintf(me,MAXDESCLEN, "%5ld bytes, ", len);
      me = me+rb->strlen(me);
    }
    
    ml = 0;
    for(i = 0; seg_desc[i]; i++) {
      if(seg_desc[i] == '\n') {
        *me = '\0';
        put_msg(msgbuf);
        
        me = msgbuf;
        rb->snprintf(me,MAXDESCLEN, "      ");
        me = me+rb->strlen(me);
        ml = 0;
      }
      else {
        if(ml < MAXDESCLEN) *me++ = seg_desc[i];
        ml++;
      }
    }
    *me = '\0';
    put_msg(msgbuf);
      }
      else {
    rb->snprintf(msgbuf,MAXDESCLEN, "%4d:", currseg);
    put_tmp_msg(msgbuf);
      }
    }
    else put_msg(seg_desc);
  }
#ifdef DEBUG_TAPE
  else fprintf(stderr, "virtual   segment\n");
#endif    
}