Exemplo n.º 1
0
static void get_tuples(int iatm, const struct mod_structure *struc,
                       const struct mod_sequence *seq,
                       const struct mdt_atom_class_list *atclass,
                       GArray *tlist, const struct mod_libraries *libs)
{
  int iclass, *iresatm, *irestyp, ir1;
  char *resnam;

  iresatm = mod_int1_pt(&struc->cd.iresatm);
  irestyp = mod_int1_pt(&seq->irestyp);
  ir1 = iresatm[iatm] - 1;
  resnam = mod_residue_name_from_type(irestyp[ir1], libs);

  for (iclass = 0; iclass < atclass->nclass; iclass++) {
    int itype;
    struct mdt_atom_class *c = &atclass->classes[iclass];
    for (itype = 0; itype < c->ntypes; itype++) {
      struct mdt_atom_type *t = &c->types[itype];

      /* Does the residue type match? */
      if (strcmp(resnam, t->names[0]) == 0 || strcmp(t->names[0], "*") == 0) {
        char *atmnam = mod_coordinates_atmnam_get(&struc->cd, iatm);
        /* Does the lead atom type match? */
        if (strcmp(atmnam, t->names[1]) == 0) {
          add_tuple(&struc->cd, seq, t, iatm, ir1, iclass, atclass->natom,
                    irestyp, libs, tlist);
        }
        g_free(atmnam);
      }
    }
  }
  g_free(resnam);
}
Exemplo n.º 2
0
static reach_type_t* add_type(reach_t* r, ast_t* type, pass_opt_t* opt)
{
  switch(ast_id(type))
  {
    case TK_UNIONTYPE:
    case TK_ISECTTYPE:
      return add_isect_or_union(r, type, opt);

    case TK_TUPLETYPE:
      return add_tuple(r, type, opt);

    case TK_NOMINAL:
      return add_nominal(r, type, opt);

    default:
      assert(0);
  }

  return NULL;
}
Exemplo n.º 3
0
Arquivo: reach.c Projeto: DevL/ponyc
static reachable_type_t* add_type(reachable_method_stack_t** s,
  reachable_types_t* r, uint32_t* next_type_id, ast_t* type)
{
  switch(ast_id(type))
  {
    case TK_UNIONTYPE:
    case TK_ISECTTYPE:
      return add_isect_or_union(s, r, next_type_id, type);

    case TK_TUPLETYPE:
      return add_tuple(s, r, next_type_id, type);

    case TK_NOMINAL:
      return add_nominal(s, r, next_type_id, type);

    default:
      assert(0);
  }

  return NULL;
}
Exemplo n.º 4
0
int main( int argc, const char **argv )
{
    int    i;
    int    status;
    int    fFound;
    CHAINTYPE *chain;

    fDumpAll   = FALSE;
   
    DecodeCommandLine( argc, argv );

    fSyntaxError = FALSE;

    //
    // Initialize some of our list  pointers
    //
    cursect   = headsect  = 0;
    curchain  = headchain = tailchain = 0;
    tailtuple = headtuple = 0;

    for( i = 0; i < NUM_WORKSTATION_ID; i++ ){
        aWorkstationId[i] = 0L;
    }

    if( sHostName[0] ){
        aWorkstationId[0] = (char *)malloc(strlen(sHostName)+1);
	strcpy(aWorkstationId[0],sHostName);
    }
    else{
        // Get the hostname from the system
        uname(&unamebuf);
	aWorkstationId[0] = (char *)malloc(strlen(unamebuf.nodename)+1);
	strcpy(aWorkstationId[0],unamebuf.nodename);

	// Get the
        GetAddrs();
	aWorkstationId[1] = (char *)malloc(strlen(sIPAddr)+1);
	strcpy(aWorkstationId[1],sIPAddr);

	aWorkstationId[2] = (char *)malloc(strlen(sMACAddr)+1);
	strcpy(aWorkstationId[2],sMACAddr);
    }


    // treat the main config file just like any other include
    if(parseConfig(sConfigFile) != 0) {
        char buf[255];
	sprintf(buf,"Error opening config file [%s]", sConfigFile);
        perror(buf);
        exit(2);
    }


    lineno = 1;
    yyparse();

    
    //
    // When the parsing is complete, we have a tree in memory
    // that contains ALL of the sections with all of the values.
    //

    //
    // The next step is to find the section that matches the workstation
    // that we are interested in.  Then, walk through the linked list
    // looking for any entries that indicate we want to "inherit" entries
    // from another section.  We'll build a new linked list of those
    // sections that we want to inherit from. Then, we'll tack any wildcard matches
    // and the 'Default' section on the end of that.  Once we have the inheritance list, we
    // need to walk that list backwards, building the list of
    // tuples (keyword/value pairs).
    // Finally, when we are all done, we should have all of the values that
    // should go with the workstation we are interested in.  So, we
    // either dump all of the entries out, or we dump out a single entry.
    // This is dependent on whether this program was called with the
    // '-a' option or not.
    //

    //
    // Find the entry that exactly matches our workstation.
    //

    i = 0;
    fFound = FALSE;
    while( aWorkstationId[i] && !fFound ){
        if(find_chain_entry(aWorkstationId[i], FALSE)){
	    fFound = TRUE;
        }
        i++;
    }

    chain = headchain;
    while(chain){
        curtuple = chain->sect->tuple_list;
        while(curtuple){
            if(strcasecmp(curtuple->keyword,"LIKE") == 0)
                status = find_chain_entry(curtuple->value, FALSE);

            curtuple = curtuple->next;
        }
        chain = chain->next;
    }

    for (i=0; aWorkstationId[i]; ++i){
        if((status = find_chain_entry(aWorkstationId[i], TRUE))){
            chain = headchain;
            while(chain){
                curtuple = chain->sect->tuple_list;
                while(curtuple){
                    if(strcasecmp(curtuple->keyword,"LIKE") == 0)
                        status = find_chain_entry(curtuple->value, FALSE);

                    curtuple = curtuple->next;
                }
                chain = chain->next;
            }
        }
    }

    //
    // the last entry in the chain is the '[Default]' entry
    //
    status = find_chain_entry("default", FALSE);


    curchain = tailchain;
    while(curchain){
        curtuple = curchain->sect->tuple_list;
        while(curtuple){
            if(strcasecmp(curtuple->keyword,"LIKE") != 0)
                add_tuple(curtuple);

            curtuple = curtuple->next;
        }
        curchain = curchain->prev;
    }

    if(fDumpAll){
        //
        // Spit out all of the variables for this workstation
        //
        curtuple = headtuple;
        while(curtuple){
            char *p = curtuple->keyword;
            while(*p){
                *p = toupper(*p);
                p++;
            }
            if(strcasecmp(curtuple->value,"NONE") != 0){
                printf("%s=\"%s\"\n", curtuple->keyword, curtuple->value);
            }
            curtuple = curtuple->next;
        }
        curtuple = headtuple;
        while(curtuple){
            if(strcasecmp(curtuple->value,"NONE") != 0){
                printf("export %s\n", curtuple->keyword);
            }
            curtuple = curtuple->next;
        }
    }
    else{
        //
        // Dump just one var
        //
        int fFound = FALSE;
        curtuple = headtuple;
        while(curtuple && !fFound ){
            if(strcasecmp(curtuple->keyword,pOptionName) == 0){
                if(strcasecmp(curtuple->value,"NONE") != 0){
                    printf("%s\n", curtuple->value);
                }
                fFound = TRUE;
             }
             curtuple = curtuple->next;
        }
    }

    return(0);
}
Exemplo n.º 5
0
G_MODULE_EXPORT gboolean
tracker_extract_get_metadata (TrackerExtractInfo *info)
{
	FLAC__Metadata_SimpleIterator *iter;
	FLAC__StreamMetadata *stream = NULL, *vorbis, *picture;
	FLAC__bool success;
	FlacData fd = { 0 };
	TrackerSparqlBuilder *preupdate, *metadata;
	gchar *filename, *uri, *artist_uri = NULL, *album_uri = NULL;
	const gchar *creator;
	GFile *file;
	goffset size;
	const gchar *graph;

	graph = tracker_extract_info_get_graph (info);
	preupdate = tracker_extract_info_get_preupdate_builder (info);
	metadata = tracker_extract_info_get_metadata_builder (info);

	file = tracker_extract_info_get_file (info);
	filename = g_file_get_path (file);

	size = tracker_file_get_size (filename);

	if (size < 18) {
		g_free (filename);
		return FALSE;
	}

	iter = FLAC__metadata_simple_iterator_new ();
	success = FLAC__metadata_simple_iterator_init (iter, filename, TRUE, TRUE);
	g_free (filename);

	if (!success) {
		FLAC__metadata_simple_iterator_delete (iter);
		return FALSE;
	}

	uri = g_file_get_uri (file);

	do {
		switch (FLAC__metadata_simple_iterator_get_block_type (iter)) {
		case FLAC__METADATA_TYPE_STREAMINFO:
			stream = FLAC__metadata_simple_iterator_get_block (iter);
			break;

		case FLAC__METADATA_TYPE_VORBIS_COMMENT:
			vorbis = FLAC__metadata_simple_iterator_get_block (iter);
			parse_vorbis_comments (&(vorbis->data.vorbis_comment), &fd);
			FLAC__metadata_object_delete (vorbis);
			break;

		case FLAC__METADATA_TYPE_PICTURE:
			picture = FLAC__metadata_simple_iterator_get_block (iter);
			/* Deal with picture */
			FLAC__metadata_object_delete (picture);
			break;

		default:
			break;
		}
	} while (FLAC__metadata_simple_iterator_next (iter));

	creator = tracker_coalesce_strip (3, fd.artist, fd.albumartist,
	                                  fd.performer);

	if (creator) {
		artist_uri = tracker_sparql_escape_uri_printf ("urn:artist:%s", creator);

		tracker_sparql_builder_insert_open (preupdate, NULL);
		if (graph) {
			tracker_sparql_builder_graph_open (preupdate, graph);
		}

		tracker_sparql_builder_subject_iri (preupdate, artist_uri);
		tracker_sparql_builder_predicate (preupdate, "a");
		tracker_sparql_builder_object (preupdate, "nmm:Artist");
		tracker_sparql_builder_predicate (preupdate, "nmm:artistName");
		tracker_sparql_builder_object_unvalidated (preupdate, creator);

		if (graph) {
			tracker_sparql_builder_graph_close (preupdate);
		}
		tracker_sparql_builder_insert_close (preupdate);

	}

	if (fd.album) {
                if (fd.albumartist) {
                        album_uri = tracker_sparql_escape_uri_printf ("urn:album:%s:%s", fd.album, fd.albumartist);
                } else {
                        album_uri = tracker_sparql_escape_uri_printf ("urn:album:%s", fd.album);
                }
		tracker_sparql_builder_insert_open (preupdate, NULL);
		if (graph) {
			tracker_sparql_builder_graph_open (preupdate, graph);
		}

		tracker_sparql_builder_subject_iri (preupdate, album_uri);
		tracker_sparql_builder_predicate (preupdate, "a");
		tracker_sparql_builder_object (preupdate, "nmm:MusicAlbum");
		/* FIXME: nmm:albumTitle is now deprecated
		 * tracker_sparql_builder_predicate (preupdate, "nie:title");
		 */
		tracker_sparql_builder_predicate (preupdate, "nmm:albumTitle");
		tracker_sparql_builder_object_unvalidated (preupdate, fd.album);

		if (graph) {
			tracker_sparql_builder_graph_close (preupdate);
		}
		tracker_sparql_builder_insert_close (preupdate);

		if (fd.trackcount) {
			tracker_sparql_builder_delete_open (preupdate, NULL);
			tracker_sparql_builder_subject_iri (preupdate, album_uri);
			tracker_sparql_builder_predicate (preupdate, "nmm:albumTrackCount");
			tracker_sparql_builder_object_variable (preupdate, "unknown");
			tracker_sparql_builder_delete_close (preupdate);

			tracker_sparql_builder_where_open (preupdate);
			tracker_sparql_builder_subject_iri (preupdate, album_uri);
			tracker_sparql_builder_predicate (preupdate, "nmm:albumTrackCount");
			tracker_sparql_builder_object_variable (preupdate, "unknown");
			tracker_sparql_builder_where_close (preupdate);

			tracker_sparql_builder_insert_open (preupdate, NULL);
			if (graph) {
				tracker_sparql_builder_graph_open (preupdate, graph);
			}

			tracker_sparql_builder_subject_iri (preupdate, album_uri);
			tracker_sparql_builder_predicate (preupdate, "nmm:albumTrackCount");
			tracker_sparql_builder_object_unvalidated (preupdate, fd.trackcount);

			if (graph) {
				tracker_sparql_builder_graph_close (preupdate);
			}
			tracker_sparql_builder_insert_close (preupdate);
		}

		if (fd.albumgain) {
			tracker_sparql_builder_delete_open (preupdate, NULL);
			tracker_sparql_builder_subject_iri (preupdate, album_uri);
			tracker_sparql_builder_predicate (preupdate, "nmm:albumGain");
			tracker_sparql_builder_object_variable (preupdate, "unknown");
			tracker_sparql_builder_delete_close (preupdate);
			tracker_sparql_builder_where_open (preupdate);
			tracker_sparql_builder_subject_iri (preupdate, album_uri);
			tracker_sparql_builder_predicate (preupdate, "nmm:albumGain");
			tracker_sparql_builder_object_variable (preupdate, "unknown");
			tracker_sparql_builder_where_close (preupdate);

			tracker_sparql_builder_insert_open (preupdate, NULL);
			if (graph) {
				tracker_sparql_builder_graph_open (preupdate, graph);
			}

			tracker_sparql_builder_subject_iri (preupdate, album_uri);
			tracker_sparql_builder_predicate (preupdate, "nmm:albumGain");
			tracker_sparql_builder_object_double (preupdate, atof (fd.albumgain));

			if (graph) {
				tracker_sparql_builder_graph_close (preupdate);
			}
			tracker_sparql_builder_insert_close (preupdate);
		}

		if (fd.albumpeakgain) {
			tracker_sparql_builder_delete_open (preupdate, NULL);
			tracker_sparql_builder_subject_iri (preupdate, album_uri);
			tracker_sparql_builder_predicate (preupdate, "nmm:albumPeakGain");
			tracker_sparql_builder_object_variable (preupdate, "unknown");
			tracker_sparql_builder_delete_close (preupdate);
			tracker_sparql_builder_where_open (preupdate);
			tracker_sparql_builder_subject_iri (preupdate, album_uri);
			tracker_sparql_builder_predicate (preupdate, "nmm:albumPeakGain");
			tracker_sparql_builder_object_variable (preupdate, "unknown");
			tracker_sparql_builder_where_close (preupdate);

			tracker_sparql_builder_insert_open (preupdate, NULL);
			if (graph) {
				tracker_sparql_builder_graph_open (preupdate, graph);
			}

			tracker_sparql_builder_subject_iri (preupdate, album_uri);
			tracker_sparql_builder_predicate (preupdate, "nmm:albumPeakGain");
			tracker_sparql_builder_object_double (preupdate, atof (fd.albumpeakgain));

			if (graph) {
				tracker_sparql_builder_graph_close (preupdate);
			}
			tracker_sparql_builder_insert_close (preupdate);
		}
	}

	tracker_sparql_builder_predicate (metadata, "a");
	tracker_sparql_builder_object (metadata, "nmm:MusicPiece");
	tracker_sparql_builder_object (metadata, "nfo:Audio");

	add_tuple (metadata, "nmm:performer", artist_uri);
	g_free (artist_uri);

	add_tuple (metadata, "nmm:musicAlbum", album_uri);

	tracker_guarantee_title_from_file (metadata, "nie:title", fd.title, uri, NULL);
	add_tuple (metadata, "nmm:trackNumber", fd.tracknumber);

	if (fd.album && album_uri) {
		gchar *album_disc_uri;
                if (fd.albumartist) {
                        album_disc_uri = tracker_sparql_escape_uri_printf ("urn:album-disc:%s:%s:Disc%d",
                                                                           fd.album, fd.albumartist,
                                                                           fd.discno ? atoi(fd.discno) : 1);
                } else {
                        album_disc_uri = tracker_sparql_escape_uri_printf ("urn:album-disc:%s:Disc%d",
                                                                           fd.album,
                                                                           fd.discno ? atoi(fd.discno) : 1);
                }

		tracker_sparql_builder_delete_open (preupdate, NULL);
		tracker_sparql_builder_subject_iri (preupdate, album_disc_uri);
		tracker_sparql_builder_predicate (preupdate, "nmm:setNumber");
		tracker_sparql_builder_object_variable (preupdate, "unknown");
		tracker_sparql_builder_delete_close (preupdate);
		tracker_sparql_builder_where_open (preupdate);
		tracker_sparql_builder_subject_iri (preupdate, album_disc_uri);
		tracker_sparql_builder_predicate (preupdate, "nmm:setNumber");
		tracker_sparql_builder_object_variable (preupdate, "unknown");
		tracker_sparql_builder_where_close (preupdate);

		tracker_sparql_builder_delete_open (preupdate, NULL);
		tracker_sparql_builder_subject_iri (preupdate, album_disc_uri);
		tracker_sparql_builder_predicate (preupdate, "nmm:albumDiscAlbum");
		tracker_sparql_builder_object_variable (preupdate, "unknown");
		tracker_sparql_builder_delete_close (preupdate);
		tracker_sparql_builder_where_open (preupdate);
		tracker_sparql_builder_subject_iri (preupdate, album_disc_uri);
		tracker_sparql_builder_predicate (preupdate, "nmm:albumDiscAlbum");
		tracker_sparql_builder_object_variable (preupdate, "unknown");
		tracker_sparql_builder_where_close (preupdate);

		tracker_sparql_builder_insert_open (preupdate, NULL);
		if (graph) {
			tracker_sparql_builder_graph_open (preupdate, graph);
		}

		tracker_sparql_builder_subject_iri (preupdate, album_disc_uri);
		tracker_sparql_builder_predicate (preupdate, "a");
		tracker_sparql_builder_object (preupdate, "nmm:MusicAlbumDisc");
		tracker_sparql_builder_predicate (preupdate, "nmm:setNumber");
		tracker_sparql_builder_object_int64 (preupdate, fd.discno ? atoi (fd.discno) : 1);
		tracker_sparql_builder_predicate (preupdate, "nmm:albumDiscAlbum");
		tracker_sparql_builder_object_iri (preupdate, album_uri);

		if (graph) {
			tracker_sparql_builder_graph_close (preupdate);
		}
		tracker_sparql_builder_insert_close (preupdate);

		tracker_sparql_builder_predicate (metadata, "nmm:musicAlbumDisc");
		tracker_sparql_builder_object_iri (metadata, album_disc_uri);

		g_free (album_disc_uri);
	}

	g_free (album_uri);

	/* FIXME: Trackgain/Trackpeakgain: commented out in vorbis */

	add_tuple (metadata, "nie:comment", fd.comment);
	add_tuple (metadata, "nie:contentCreated", fd.date);
	add_tuple (metadata, "nfo:genre", fd.genre);
	add_tuple (metadata, "nie:plainTextContent", fd.lyrics);
	add_tuple (metadata, "nie:copyright", fd.copyright);
	add_tuple (metadata, "nie:license", fd.license);

	if (fd.publisher) {
		tracker_sparql_builder_predicate (metadata, "dc:publisher");

		tracker_sparql_builder_object_blank_open (metadata);
		tracker_sparql_builder_predicate (metadata, "a");
		tracker_sparql_builder_object (metadata, "nco:Contact");

		tracker_sparql_builder_predicate (metadata, "nco:fullname");
		tracker_sparql_builder_object_unvalidated (metadata,
		                                           fd.publisher);
		tracker_sparql_builder_object_blank_close (metadata);
	}

	if (stream) {
		tracker_sparql_builder_predicate (metadata, "nfo:sampleRate");
		tracker_sparql_builder_object_int64 (metadata,
		                                     stream->data.stream_info.sample_rate);

		tracker_sparql_builder_predicate (metadata, "nfo:channels");
		tracker_sparql_builder_object_int64 (metadata,
		                                     stream->data.stream_info.channels);

		tracker_sparql_builder_predicate (metadata,
		                                  "nfo:averageBitrate");
		tracker_sparql_builder_object_int64 (metadata,
		                                     stream->data.stream_info.bits_per_sample);

		tracker_sparql_builder_predicate (metadata, "nfo:duration");
		tracker_sparql_builder_object_int64 (metadata,
		                                     stream->data.stream_info.total_samples /
		                                     stream->data.stream_info.sample_rate);
	}

	g_free (fd.artist);
	g_free (fd.album);
	g_free (fd.albumartist);
	g_free (fd.performer);
	g_free (fd.title);
	g_free (fd.trackcount);
	g_free (fd.tracknumber);
	g_free (fd.discno);
	g_free (fd.trackgain);
	g_free (fd.trackpeakgain);
	g_free (fd.albumgain);
	g_free (fd.albumpeakgain);
	g_free (fd.date);
	g_free (fd.comment);
	g_free (fd.genre);
	g_free (fd.mbalbumid);
	g_free (fd.mbartistid);
	g_free (fd.mbalbumartistid);
	g_free (fd.mbtrackid);
	g_free (fd.lyrics);
	g_free (fd.copyright);
	g_free (fd.license);
	g_free (fd.organisation);
	g_free (fd.location);
	g_free (fd.publisher);
	g_free (uri);

	return TRUE;
}