annotate datum.c @ 168:d2b941f82d74

Fix type of list constants in inference pass and return type of some Array related workers
author Mike Pavone <pavone@retrodev.com>
date Sun, 01 May 2011 18:41:17 -0700
parents 23dd9c766699
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1 #include "structs.h"
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
2 #include "datum.h"
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
3 #include "interp.h"
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
4 #include <stdio.h>
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
5 #include <stdlib.h>
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
6 #include <string.h>
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
7 #ifdef WIN32
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
8 #include <winsock.h>
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
9 #else
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
10 #include <sys/types.h>
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
11 #include <sys/socket.h>
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
12 #include <netinet/in.h>
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
13 #include <netdb.h>
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
14 #include <arpa/inet.h>
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
15 #endif
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
16
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
17 #ifdef TEXT_FILE_DEBUG
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
18 extern FILE * debugfile;
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
19 #endif
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
20
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
21 extern char * debugbuffer;
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
22
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
23 datum_storage first_datum_storage;
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
24 datum_storage * first_free;
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
25
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
26 VIS_CRITICAL_SECTION(datum_alloc_lock)
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
27
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
28 void init_datum_storage()
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
29 {
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
30 short i;
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
31 first_datum_storage.available = DATUMS_PER_STORAGE;
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
32 for(i = 0; i < DATUMS_PER_STORAGE/8; ++i)
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
33 first_datum_storage.inuse[i] = 0;
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
34 first_datum_storage.next = NULL;
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
35 //first_datum_storage.num = 0;
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
36 //first_free = &first_datum_storage;
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
37 VIS_InitializeCriticalSection(datum_alloc_lock);
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
38 }
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
39
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
40 datum * datum_alloc()
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
41 {
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
42 short i, j;
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
43 datum_storage *last, *current = /*first_free;*/&first_datum_storage;
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
44 VIS_PROFILE_START(PROF_DATUM_ALLOC);
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
45 //DEBUGPUTS("Begin datum_alloc()\n");
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
46 VIS_EnterCriticalSection(datum_alloc_lock);
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
47 while(current && !(current->available))
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
48 {
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
49 last = current;
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
50 current = current->next;
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
51 }
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
52 if(current)
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
53 {
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
54 for(i = 0; i < (DATUMS_PER_STORAGE >> 3); ++i)
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
55 if(current->inuse[i] != 0xFF)
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
56 break;
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
57 for(j = 0; j < 8; ++j)
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
58 if(!CHECK_INUSE(current, i, j))
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
59 break;
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
60 //DEBUGPRINTF("inuse[%d] = %X\n", i, current->inuse[i]);
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
61 i = (i << 3) | j;
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
62 //DEBUGPRINTF("Allocated datum %X:%d\n", current, i);
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
63 SET_INUSE(current, i);
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
64 --(current->available);
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
65 VIS_LeaveCriticalSection(datum_alloc_lock);
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
66 //DEBUGPUTS("End datum_alloc()\n");
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
67 //DEBUGPRINTF("datum_alloc(%X)\n", current->datums + i);
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
68 VIS_PROFILE_END(PROF_DATUM_ALLOC);
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
69 return current->datums + i;
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
70 }
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
71 else
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
72 {
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
73 current = MALLOC(sizeof(datum_storage),"datum storage");
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
74 //first_free = current;
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
75 //DEBUGPRINTF("New datum_storage %X\n", current);
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
76 last->next = current;
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
77 current->available = DATUMS_PER_STORAGE - 1;
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
78 current->inuse[0] = 1;
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
79 //current->num = last->num+1;
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
80 for(i = 1; i < DATUMS_PER_STORAGE>>3; ++i)
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
81 current->inuse[i] = 0;
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
82 current->next = NULL;
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
83 VIS_LeaveCriticalSection(datum_alloc_lock);
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
84 //DEBUGPUTS("End datum_alloc()\n");
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
85 //DEBUGPRINTF("datum_alloc(%X)\n", current->datums);
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
86 VIS_PROFILE_END(PROF_DATUM_ALLOC);
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
87 return current->datums;
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
88 }
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
89
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
90 }
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
91
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
92 void free_datum(datum * adatum)
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
93 {
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
94 datum_storage *last=NULL, *current = &first_datum_storage;
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
95 // DEBUGPUTS("Begin free_datum()\n");
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
96 VIS_EnterCriticalSection(datum_alloc_lock);
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
97 while(current && !(adatum >= (datum *)current && adatum <= (((datum *)current) + DATUMS_PER_STORAGE)))
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
98 {
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
99 last = current;
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
100 current = current->next;
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
101 }
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
102 if(current)
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
103 {
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
104 //DEBUGPRINTF("Freed datum %X:%d\n", current, adatum-((datum *)current));
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
105 //DEBUGPRINTF("inuse[%d] = %X\n", (adatum-(current->datums))>>3, current->inuse[adatum-(current->datums)>>3]);
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
106 //DEBUGPRINTF("&= %X\n", ~(1 << ((adatum-(current->datums)) & 3)));
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
107 CLEAR_INUSE(current, adatum-(current->datums));
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
108 //DEBUGPRINTF("inuse[%d] = %X\n", (adatum-(current->datums))>>3, current->inuse[adatum-(current->datums)>>3]);
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
109 ++(current->available);
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
110 if(current->available == DATUMS_PER_STORAGE && last && last->available)
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
111 {
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
112 last->next = NULL;
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
113 /*last->next = current->next;
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
114 if(last->num < first_free->num || first_free == current)
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
115 first_free = last;*/
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
116 //DEBUGPRINTF("Freeing datum_storage %X\n", current);
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
117 VIS_FREE(current, "free datum block");
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
118 }
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
119 /*else
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
120 {
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
121 if(current->num < first_free->num)
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
122 first_free = current;
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
123 }*/
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
124 }
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
125 VIS_LeaveCriticalSection(datum_alloc_lock);
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
126 //DEBUGPUTS("End free_datum()\n");
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
127 }
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
128
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
129
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
130
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
131 datum * new_datum_comp(company * comp, unsigned char union_type, int generic_len)
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
132 {
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
133 datum * adatum;
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
134 VIS_PROFILE_START(PROF_NEW_DATUM);
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
135 //adatum = datum_alloc();
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
136 adatum = MALLOC(sizeof(datum),"datum");
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
137 DEBUGPRINTF("Allocated: %X\n", adatum);
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
138 //DEBUGPRINTF("datum_alloc returned %X.\n", adatum);
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
139 adatum->company = comp;
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
140 adatum->union_type = union_type;
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
141 /*if(type > 0)
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
142 adatum->methods = get_method_list(type);*/
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
143 if(union_type == 1)//generic data
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
144 {
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
145 //DEBUGPUTS("union_type == 1\n");
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
146 adatum->c.generic.len = generic_len;
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
147 if(generic_len > 0)
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
148 {
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
149 //DEBUGPRINTF("malloc(%d);\n", generic_len);
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
150 adatum->c.generic.data = MALLOC(generic_len,"datum generic data");
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
151 //DEBUGPUTS("after malloc");
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
152 }
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
153 else
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
154 adatum->c.generic.data = NULL;
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
155 }
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
156 adatum->ref_count = 1;
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
157 // DEBUGPUTS("Initializing lock.\n");
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
158 VIS_InitializeCriticalSection(adatum->lock);
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
159 //DEBUGPRINTF( "New datum at: %X\n", adatum);
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
160 VIS_PROFILE_END(PROF_NEW_DATUM);
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
161 return adatum;
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
162 }
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
163
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
164 datum * new_datum(unsigned short type, unsigned char union_type, int generic_len, program * prog)
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
165 {
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
166 return new_datum_comp(prog->companylist + type, union_type, generic_len);
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
167 }
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
168
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
169 datum * copy_datum(datum * adatum, int newsize)
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
170 {
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
171 //NOTE: This function makes some assumptions that might not be safe everywhere in the interpretter, needs more thought
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
172 int ref_count, real_len, new_entry_count;
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
173 dict_data * dict;
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
174 datum * output;
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
175 worker_datum * work;
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
176 int i;
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
177 VIS_EnterCriticalSection(adatum->lock);
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
178 ref_count = adatum->ref_count;
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
179 VIS_LeaveCriticalSection(adatum->lock);
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
180 if(adatum->union_type == 1)
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
181 if(adatum->company->type_id == BUILTIN_TYPE_LIST)
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
182 real_len = (adatum->c.generic.len-1) * sizeof(datum *) + sizeof(list_data);
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
183 else
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
184 {
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
185 real_len = adatum->c.generic.len;
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
186 }
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
187 else
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
188 real_len = 0;
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
189 if(ref_count > 1 || newsize > real_len)
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
190 {
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
191 if(adatum->company->type_id == BUILTIN_TYPE_FILE)
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
192 {
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
193 VIS_EnterCriticalSection(((file_data *)adatum->c.generic.data)->shared->lock);
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
194 ((file_data *)adatum->c.generic.data)->shared->ref_count++;
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
195 VIS_LeaveCriticalSection(((file_data *)adatum->c.generic.data)->shared->lock);
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
196 }
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
197 if(newsize)
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
198 output = new_datum_comp(adatum->company, adatum->union_type, newsize);
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
199 else
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
200 output = new_datum_comp(adatum->company, adatum->union_type, real_len);
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
201 switch(adatum->union_type)
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
202 {
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
203 case 1:
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
204 if(adatum->company->type_id == BUILTIN_TYPE_LIST)
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
205 {
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
206 ((list_data *)output->c.generic.data)->num_entries = ((list_data *)adatum->c.generic.data)->num_entries;
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
207 for(i = 0; i < ((list_data *)adatum->c.generic.data)->num_entries; ++i)
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
208 ((list_data *)output->c.generic.data)->entries[i] = add_ref(((list_data *)adatum->c.generic.data)->entries[i]);
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
209 }
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
210 #ifdef GUI_LIB
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
211 else if(adatum->company->type_id == BUILTIN_TYPE_WINDOW)
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
212 {
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
213 ((vis_window *)output->c.generic.data)->title = add_ref(((vis_window *)adatum->c.generic.data)->title);
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
214 ((vis_window *)output->c.generic.data)->widget_dict = add_ref(((vis_window *)adatum->c.generic.data)->widget_dict);
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
215 ((vis_window *)output->c.generic.data)->widget_xpos = add_ref(((vis_window *)adatum->c.generic.data)->widget_xpos);
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
216 ((vis_window *)output->c.generic.data)->widget_ypos = add_ref(((vis_window *)adatum->c.generic.data)->widget_ypos);
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
217 ((vis_window *)output->c.generic.data)->id_list = add_ref(((vis_window *)adatum->c.generic.data)->id_list);
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
218 ((vis_window *)output->c.generic.data)->width = ((vis_window *)adatum->c.generic.data)->width;
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
219 ((vis_window *)output->c.generic.data)->height = ((vis_window *)adatum->c.generic.data)->height;
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
220 }
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
221 #ifdef SYLLABLE
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
222 else if(adatum->company->type_id == BUILTIN_TYPE_BUTTON || adatum->company->type_id == BUILTIN_TYPE_INPUTBOX || adatum->company->type_id == BUILTIN_TYPE_CHECKBOX || adatum->company->type_id == BUILTIN_TYPE_DROPDOWN)
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
223 #else
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
224 else if(adatum->company->type_id == BUILTIN_TYPE_BUTTON || adatum->company->type_id == BUILTIN_TYPE_INPUTBOX)
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
225 #endif
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
226 {
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
227 ((vis_widget *)output->c.generic.data)->label = add_ref(((vis_widget *)adatum->c.generic.data)->label);
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
228 ((vis_widget *)output->c.generic.data)->value = add_ref(((vis_widget *)adatum->c.generic.data)->value);
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
229 ((vis_widget *)output->c.generic.data)->handler_dict = add_ref(((vis_widget *)adatum->c.generic.data)->handler_dict);
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
230 ((vis_widget *)output->c.generic.data)->width = ((vis_widget *)adatum->c.generic.data)->width;
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
231 ((vis_widget *)output->c.generic.data)->height = ((vis_widget *)adatum->c.generic.data)->height;
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
232 ((vis_widget *)output->c.generic.data)->flags = ((vis_widget *)adatum->c.generic.data)->flags;
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
233 }
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
234 #endif
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
235 else if(real_len >= newsize && newsize)
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
236 memcpy(output->c.generic.data, adatum->c.generic.data, newsize);
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
237 else
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
238 memcpy(output->c.generic.data, adatum->c.generic.data, real_len);
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
239
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
240 if(adatum->company->build_size > 0)
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
241 {
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
242 for(i = 0; i < adatum->company->num_rooms; ++i)
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
243 if(adatum->company->room_list[i].get_func_type == ROOM_VIS_REF)
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
244 {
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
245 //DEBUGPRINTF("Member add ref (get_func): %X, generic.data: %X\n", (datum*)(((char *)adatum->c.generic.data) + (int)adatum->company->room_list[i].get_func), adatum->c.generic.data);
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
246 add_ref(*((datum**)(((char *)adatum->c.generic.data) + (int)adatum->company->room_list[i].get_func)));
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
247 }
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
248 else if(adatum->company->room_list[i].set_func_type == ROOM_VIS_REF)
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
249 {
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
250 //DEBUGPRINTF("Member add ref (set_func): %X, generic.data: %X\n", (datum*)(((char *)adatum->c.generic.data) + (int)adatum->company->room_list[i].set_func), adatum->c.generic.data);
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
251 add_ref(*((datum**)(((char *)adatum->c.generic.data) + (int)adatum->company->room_list[i].set_func)));
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
252 }
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
253 }
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
254 else if(adatum->company->type_id == BUILTIN_TYPE_DICT)
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
255 {
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
256 dict = output->c.generic.data;
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
257 for(i = 0; i < dict->num_nodes; ++i)
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
258 add_ref(dict->nodes[i].payload);
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
259 }
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
260 else if(adatum->company->type_id == BUILTIN_TYPE_WORKER)
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
261 {
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
262 work = output->c.generic.data;
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
263 add_program_ref(work->def->program);
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
264 for(i = 0; i < work->def->num_inputs; ++i)
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
265 add_ref(work->params[i]);
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
266 }
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
267
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
268 if(adatum->c.generic.len != real_len)
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
269 output->c.generic.len = adatum->c.generic.len;
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
270 break;
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
271 case 2:
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
272 output->c.integers.num_a = adatum->c.integers.num_a;
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
273 output->c.integers.num_b = adatum->c.integers.num_b;
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
274 break;
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
275 case 3:
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
276 output->c.real = adatum->c.real;
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
277 break;
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
278 default:
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
279 //oops;
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
280 break;
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
281 }
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
282 release_ref(adatum);
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
283 }
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
284 else if(newsize && real_len == adatum->c.generic.len)
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
285 {
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
286 adatum->c.generic.len = newsize;
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
287 output = adatum;
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
288 }
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
289 else
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
290 output = adatum;
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
291 return output;
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
292 }
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
293
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
294 datum * add_ref(datum * adatum)
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
295 {
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
296 int tmp;
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
297 VIS_PROFILE_START(PROF_ADDREF);
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
298 if(!adatum)
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
299 {
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
300 //DEBUGPUTS("add_ref on NULL datum\n");
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
301 return NULL;
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
302 }
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
303 DEBUGPRINTF("add_ref: %X\n",adatum);
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
304 /*tmp = (int)(&(adatum->ref_count));
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
305 __asm
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
306 {
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
307 mov ebx, tmp
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
308 lock inc dword ptr [ebx]
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
309 }*/
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
310
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
311 VIS_EnterCriticalSection(adatum->lock);
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
312 ++(adatum->ref_count);
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
313 VIS_LeaveCriticalSection(adatum->lock);
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
314 VIS_PROFILE_END(PROF_ADDREF);
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
315 return adatum;
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
316 }
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
317
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
318 void release_ref(datum * adatum)
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
319 {
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
320 int i,tmp;
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
321 dict_data * dict;
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
322 worker_datum * worker;
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
323 VIS_PROFILE_START(PROF_RELEASE);
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
324 DEBUGPRINTF( "relase_ref: %X\n",adatum);
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
325 if(!adatum)
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
326 return;
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
327
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
328 /*tmp = (int)(&(adatum->ref_count));
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
329 __asm
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
330 {
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
331 mov ebx, tmp
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
332 lock dec dword ptr [ebx]
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
333 }*/
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
334 //DEBUGPUTS("entering lock");
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
335 VIS_EnterCriticalSection(adatum->lock);
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
336 //DEBUGPUTS("got critical section\n");
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
337 --(adatum->ref_count);
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
338 if(adatum->ref_count == 0)
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
339 {
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
340 //DEBUGPRINTF("datum_free(%X)\n", adatum);
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
341
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
342 VIS_LeaveCriticalSection(adatum->lock);
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
343 //DEBUGPUTS("left lock");
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
344 VIS_DeleteCriticalSection(adatum->lock);
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
345 if(adatum->union_type == 1)
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
346 {
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
347 //DEBUGPRINTF( "Freeing adatum->c.generic.data(%X)\n",(int)adatum->c.generic.data);
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
348 if(adatum->company->build_size > 0)
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
349 {
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
350 for(i = 0; i < adatum->company->num_rooms; ++i)
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
351 if(adatum->company->room_list[i].get_func_type == ROOM_VIS_REF)
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
352 {
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
353 //DEBUGPRINTF("Member release ref (get_func): %X, generic.data: %X\n", (datum*)(((char *)adatum->c.generic.data) + (int)adatum->company->room_list[i].get_func), adatum->c.generic.data);
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
354 release_ref(*((datum**)(((char *)adatum->c.generic.data) + (int)adatum->company->room_list[i].get_func)));
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
355 }
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
356 else if(adatum->company->room_list[i].set_func_type == ROOM_VIS_REF)
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
357 {
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
358 //DEBUGPRINTF("Member release ref (set_func): %X, generic.data: %X\n", (datum*)(((char *)adatum->c.generic.data) + (int)adatum->company->room_list[i].set_func), adatum->c.generic.data);
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
359 release_ref(*((datum**)(((char *)adatum->c.generic.data) + (int)adatum->company->room_list[i].set_func)));
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
360 }
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
361 }
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
362 else if(adatum->company->type_id == BUILTIN_TYPE_LIST)
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
363 for(i = 0; i < ((list_data *)adatum->c.generic.data)->num_entries; ++i)
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
364 release_ref(((list_data *)adatum->c.generic.data)->entries[i]);
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
365 else if(adatum->company->type_id == BUILTIN_TYPE_FILE)
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
366 {
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
367 VIS_EnterCriticalSection(((file_data *)adatum->c.generic.data)->shared->lock);
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
368 --(((file_data *)adatum->c.generic.data)->shared->ref_count);
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
369 if(((file_data *)adatum->c.generic.data)->shared->ref_count == 0)
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
370 {
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
371 VIS_LeaveCriticalSection(((file_data *)adatum->c.generic.data)->shared->lock);
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
372 VIS_DeleteCriticalSection(((file_data *)adatum->c.generic.data)->shared->lock);
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
373 #ifndef SEGA
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
374 if(((file_data *)adatum->c.generic.data)->shared->status == FILE_READ || ((file_data *)adatum->c.generic.data)->shared->status == FILE_WRITE)
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
375 fclose(((file_data *)adatum->c.generic.data)->shared->file);
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
376 #endif
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
377 VIS_FREE(((file_data *)adatum->c.generic.data)->shared, "Shared file struct");
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
378 }
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
379 else
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
380 {
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
381 VIS_LeaveCriticalSection(((file_data *)adatum->c.generic.data)->shared->lock);
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
382 }
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
383 }
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
384 else if(adatum->company->type_id == BUILTIN_TYPE_DICT)
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
385 {
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
386 dict = adatum->c.generic.data;
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
387 for(i = 0; i < dict->num_nodes; ++i)
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
388 release_ref(dict->nodes[i].payload);
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
389 }
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
390 else if(adatum->company->type_id == BUILTIN_TYPE_WORKER)
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
391 {
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
392 worker = adatum->c.generic.data;
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
393 for(i = 0; i < worker->def->num_inputs; ++i)
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
394 if(worker->params[i])
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
395 {
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
396 DEBUGPRINTF("Releasing worker param %d\n", i);
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
397 release_ref(worker->params[i]);
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
398 }
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
399 release_program_ref(worker->def->program);
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
400 }
13
23dd9c766699 C backend close to being useable
mpavone@
parents: 0
diff changeset
401 #ifdef GUI_LIB
0
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
402 else if(adatum->company->type_id == BUILTIN_TYPE_WINDOW)
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
403 {
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
404 release_ref(((vis_window *)adatum->c.generic.data)->title);
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
405 release_ref(((vis_window *)adatum->c.generic.data)->widget_dict);
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
406 release_ref(((vis_window *)adatum->c.generic.data)->widget_xpos);
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
407 release_ref(((vis_window *)adatum->c.generic.data)->widget_ypos);
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
408 release_ref(((vis_window *)adatum->c.generic.data)->id_list);
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
409 }
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
410 else if(adatum->company->type_id == BUILTIN_TYPE_BUTTON)
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
411 {
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
412 release_ref(((vis_widget *)adatum->c.generic.data)->label);
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
413 release_ref(((vis_widget *)adatum->c.generic.data)->handler_dict);
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
414 }
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
415 #endif
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
416 VIS_FREE(adatum->c.generic.data, "datum->c.generic.data");
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
417 } else if(adatum->company->type_id == BUILTIN_TYPE_NETCLIENT)
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
418 #ifdef WIN32
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
419 closesocket(adatum->c.integers.num_a);
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
420 #else
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
421 close(adatum->c.integers.num_a);
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
422 #endif
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
423 else if(adatum->company->type_id == BUILTIN_TYPE_PROGRAM)
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
424 release_program_ref(adatum->c.generic.data);
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
425 DEBUGPRINTF("Freeing: %X\n",adatum);
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
426 //free_datum(adatum);
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
427 free(adatum);
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
428 }
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
429 else
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
430 {
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
431 VIS_LeaveCriticalSection(adatum->lock);
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
432 //DEBUGPUTS("left lock");
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
433 }
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
434 VIS_PROFILE_END(PROF_RELEASE);
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
435 //DEBUGPUTS("exit release_ref\n");
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
436
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
437 }
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
438
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
439 void datum_set_yesno(datum * adatum, int val)
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
440 {
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
441 adatum->c.integers.num_a = val;
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
442 }
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
443
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
444
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
445
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
446
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
447
76568becd6d6 Rhope Alpha 2a source import
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
448