int identify(CONST_STRPTR filename, BOOL verbose) { int rc = RETURN_OK; BPTR lock = Lock(filename, ACCESS_READ); if (lock != NULL) { struct DataType *dt = ObtainDataType(DTST_FILE, lock, TAG_DONE); if (dt != NULL) { struct DataTypeHeader *dth = dt->dtn_Header; if (!verbose) { Printf ( "%s:\t%s/%s\n", filename, gid2string(dth->dth_GroupID), dth->dth_Name ); } else { ULONG gid = AROS_LONG2BE(dth->dth_GroupID), id = AROS_LONG2BE(dth->dth_ID); Printf ( "File: %s\n" "Type: %s/%s\t(GID: %.4s, ID: %.4s)\n" "DT Basename: %s\n\n", filename, gid2string(dth->dth_GroupID), dth->dth_Name, (CONST_STRPTR) &gid, (CONST_STRPTR) &id, dth->dth_BaseName ); } } else { FPrintf(Error(), ERROR_HEADER": Could not obtain datatype for file.\n"); rc = RETURN_FAIL; } UnLock(lock); } else { PrintFault(IoErr(), ERROR_HEADER); rc = RETURN_FAIL; } return rc; }
char *amiga_dt_picture_datatype(struct content *c) { const uint8 *data; ULONG size; struct DataType *dt; char *filetype = NULL; data = (uint8 *)content__get_source_data(c, &size); if(dt = ObtainDataType(DTST_MEMORY, NULL, DTA_SourceAddress, data, DTA_SourceSize, size, DTA_GroupID, GID_PICTURE, TAG_DONE)) { filetype = strdup(dt->dtn_Header->dth_Name); ReleaseDataType(dt); } if(filetype == NULL) filetype = strdup("DataTypes"); return filetype; }
nserror amiga_dt_picture_init(void) { char dt_mime[50]; struct DataType *dt, *prevdt = NULL; lwc_string *type; lwc_error lerror; nserror error; BPTR fh = 0; struct Node *node = NULL; while((dt = ObtainDataType(DTST_RAM, NULL, DTA_DataType, prevdt, DTA_GroupID, GID_PICTURE, // we only support images for now TAG_DONE)) != NULL) { ReleaseDataType(prevdt); prevdt = dt; do { node = ami_mime_from_datatype(dt, &type, node); if(node) { error = content_factory_register_handler( lwc_string_data(type), &amiga_dt_picture_content_handler); if (error != NSERROR_OK) return error; } }while (node != NULL); } ReleaseDataType(prevdt); return NSERROR_OK; }