1 /***********************************************************************/
2 /* Open Visualization Data Explorer                                    */
3 /* (C) Copyright IBM Corp. 1989,1999                                   */
4 /* ALL RIGHTS RESERVED                                                 */
5 /* This code licensed under the                                        */
6 /*    "IBM PUBLIC LICENSE - Open Visualization Data Explorer"          */
7 /***********************************************************************/
8 
9 #include <dxconfig.h>
10 
11 #include <string.h>
12 #include "stringClass.h"
13 #include "internals.h"
14 
15 char *
DXGetString(String s)16 DXGetString(String s)
17 {
18     CHECK(s, CLASS_STRING);
19     return s->string ? s->string : s->shortstr;
20 }
21 
22 Error
_dxfString_Delete(String s)23 _dxfString_Delete(String s)
24 {
25     if (s->string)
26 	DXFree(s->string);
27     return OK;
28 }
29 
30 #define SHAREDSTRINGS 1
31 
32 static String
_NewString(char * s,struct string_class * class)33 _NewString(char *s, struct string_class *class)
34 {
35     int n;
36     String o;
37 
38     if (!s)
39 	return NULL;
40 
41 #if SHAREDSTRINGS
42     o = (String)_dxfstringobject(s, 0);
43     if (o)
44 	return o;
45 #endif
46 
47     o = (String) _dxf_NewObject((struct object_class *)class);
48     if (!o)
49 	return NULL;
50 
51     n = strlen(s)+1;
52     if (n <= IMBEDDED) {
53 	o->string = NULL;
54 	memcpy(o->shortstr, s, n);
55     } else {
56 	o->string = DXAllocate(n);
57 	if (!o->string) {
58 	    DXDelete((Object)o);
59 	    return NULL;
60 	}
61 	memcpy(o->string, s, n);
62     }
63 
64     return o;
65 }
66 
67 String
DXNewString(char * s)68 DXNewString(char *s)
69 {
70     return _NewString(s, &_dxdstring_class);
71 }
72 
73 Object
_dxfString_Copy(String old,enum _dxd_copy copy)74 _dxfString_Copy(String old, enum _dxd_copy copy)
75 {
76     if (copy==COPY_DATA)
77 	DXErrorReturn(ERROR_BAD_PARAMETER, "copying data is not implemented");
78     return (Object)old;
79 }
80 
DXMakeString(char * s)81 String DXMakeString(char *s)
82 {
83     return DXNewString(s);
84 }
85