File: filename.C

package info (click to toggle)
mixviews 1.10-3
  • links: PTS
  • area: main
  • in suites: hamm
  • size: 2,440 kB
  • ctags: 6,314
  • sloc: cpp: 31,647; ansic: 2,100; makefile: 1,782; sh: 17
file content (126 lines) | stat: -rw-r--r-- 3,574 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
// filename.C

/******************************************************************************
 *
 *  MiXViews - an X window system based sound & data editor/processor
 *
 *  Copyright (c) 1993, 1994 Regents of the University of California
 *
 *  Author:     Douglas Scott
 *  Date:       December 13, 1994
 *
 *  Permission to use, copy and modify this software and its documentation
 *  for research and/or educational purposes and without fee is hereby granted,
 *  provided that the above copyright notice appear in all copies and that
 *  both that copyright notice and this permission notice appear in
 *  supporting documentation. The author reserves the right to distribute this
 *  software and its documentation.  The University of California and the author
 *  make no representations about the suitability of this software for any 
 *  purpose, and in no event shall University of California be liable for any
 *  damage, loss of data, or profits resulting from its use.
 *  It is provided "as is" without express or implied warranty.
 *
 ******************************************************************************/


#ifdef __GNUG__
#pragma implementation
#endif

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include "localdefs.h"
#include "filename.h"
#include <String.h>

#ifdef String
#undef String
#endif

int FileName::tmpCount = 0;
int FileName::untitledCount = 0;

// all of these return pointer to single copies of static data, and so
// routines should *always* copy these strings and not use them directly

const char*
FileName::tmpName(const char* suffix) {
	static char tmpname[128];
	sprintf(tmpname, "tmp_%d%s", tmpCount++, suffix);
	return tmpname;
}

const char*
FileName::untitledName(const char* suffix) {
	static char uname[128];
	sprintf(uname, "untitled_%d%s", untitledCount++, suffix);
	return uname;
}

const char*
FileName::segmentName(const char* name, double skip, double dur) {
	static char sname[256];
	if(skip > 0.0 || dur != 0.0)
		sprintf(sname, "tmp_s%g_d%g_%s", skip, dur, stripPath(name));
	else
		strcpy(sname, name);
	return sname;
}

boolean
FileName::isTempName(const char* name) {
	return (!strncmp(name, "untitled_", 9) || !strncmp(name, "tmp_", 4));
}

boolean
FileName::isFullPathName(const char* name) {
	return (index(name, '/') != NULL);
}

const char*
FileName::sfName(const char* filename) {
	static char sfname[1024];
	if(isFullPathName(filename))
		return filename;
	const char* sfdir = getenv("SFDIR");
	if(sfdir == NULL) sfdir = ".";
	sprintf(sfname, "%s/%s", sfdir, filename);
	return sfname;
}

const char*
FileName::stripPath(const char* filename) {
	static char name[1024];
	strcpy(name, filename);	// to avoid nonwritable strings
	const char* newName = rindex(name, '/');
	return (newName != NULL) ? newName + 1 : name;
}

const char *
FileName::changeSuffix(const char* filename, const char* newSuffix) {
	String name(filename);
	static String base;
	static Regex oldSuffix = 
		"[.]snd\\|[.]au\\|[.][wW][aA][vV]\\|[.]aif[fc]\\|[.]fp\\|[.]sound\\|[.]short\\|[.]float";
	base = name.before(oldSuffix, -1);
	if(base == "") base = name;
	base += newSuffix;
	return base;
}

FileType
FileName::fileType(const char *filename) {
	String s(filename);
	int len = strlen(filename);
	return(s.contains(".lpc", len - 4) ? LPC_Data
		: (s.contains(".pt", len - 3) || 
		   s.contains(".pch", len - 4)) ? PCH_Data
		: s.contains(".fft", len - 4) ? FFT_Data
		: s.contains(".evp", len - 4) ? EVP_Data
		: (s.contains(".pv", len - 3) ||
			s.contains(".i", len - 2)) ? Pvoc_Data
		: Sound_Data
	);
}