File: CameraPlugin.c

package info (click to toggle)
squeak-plugins-scratch 1.4.0.2~svn.r83-2
  • links: PTS, VCS
  • area: main
  • in suites: jessie, jessie-kfreebsd
  • size: 588 kB
  • ctags: 609
  • sloc: ansic: 1,360; makefile: 88; sh: 88
file content (160 lines) | stat: -rwxr-xr-x 3,962 bytes parent folder | download | duplicates (10)
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
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
/* Automatically generated from Squeak on (28 April 2009 2:40:06 pm) */

#if defined(WIN32) || defined(_WIN32) || defined(Win32)
 #ifdef __cplusplus
  #define DLLEXPORT extern "C" __declspec(dllexport)
 #else
  #define DLLEXPORT __declspec(dllexport)
 #endif /* C++ */
#else
 #define DLLEXPORT
#endif /* WIN32 */

#include "sqVirtualMachine.h"

/* memory access macros */
#define byteAt(i) (*((unsigned char *) (i)))
#define byteAtput(i, val) (*((unsigned char *) (i)) = val)
#define longAt(i) (*((int *) (i)))
#define longAtput(i, val) (*((int *) (i)) = val)

#include "sqCamera.h"
#include <string.h>


/*** Variables ***/
struct VirtualMachine* interpreterProxy;
const char *moduleName = "CameraPlugin 28 April 2009 (e)";

/*** Functions ***/
DLLEXPORT int primCameraName(void);
DLLEXPORT int primCloseCamera(void);
DLLEXPORT int primFrameExtent(void);
DLLEXPORT int primGetFrame(void);
DLLEXPORT int primGetParam(void);
DLLEXPORT int primOpenCamera(void);
DLLEXPORT int setInterpreter(struct VirtualMachine* anInterpreter);

DLLEXPORT int primCameraName(void) {
	char* nameStr;
	int i;
	int count;
	int resultOop;
	int cameraNum;
	char* dst;

	cameraNum = interpreterProxy->stackIntegerValue(0);
	if (interpreterProxy->failed()) {
		return 0;
	}
	nameStr = CameraName(cameraNum);
	if (nameStr == 0) {
		interpreterProxy->success(0);
		return 0;
	}
	count = strlen(nameStr);
	resultOop = interpreterProxy->instantiateClassindexableSize(interpreterProxy->classString(), count);
	dst = ((char *) (interpreterProxy->firstIndexableField(resultOop)));
	for (i = 0; i <= (count - 1); i += 1) {
		dst[i] = (nameStr[i]);
	}
	interpreterProxy->popthenPush(2, resultOop);
	return 0;
}

DLLEXPORT int primCloseCamera(void) {
	int cameraNum;

	cameraNum = interpreterProxy->stackIntegerValue(0);
	if (interpreterProxy->failed()) {
		return 0;
	}
	CameraClose(cameraNum);
	interpreterProxy->pop(1);
	return 0;
}

DLLEXPORT int primFrameExtent(void) {
	int cameraNum;
	int e;

	cameraNum = interpreterProxy->stackIntegerValue(0);
	if (interpreterProxy->failed()) {
		return 0;
	}
	e = CameraExtent(cameraNum);
	interpreterProxy->popthenPush(2, ((e << 1) | 1));
	return 0;
}

DLLEXPORT int primGetFrame(void) {
	int cameraNum;
	int bitmapOop;
	unsigned char *bitmap;
	int pixCount;
	int result;

	cameraNum = interpreterProxy->stackIntegerValue(1);
	bitmapOop = interpreterProxy->stackValue(0);
	if (((bitmapOop & 1)) || (!(interpreterProxy->isWords(bitmapOop)))) {
		interpreterProxy->success(0);
		return 0;
	}
	bitmap = ((unsigned char *) (interpreterProxy->firstIndexableField(bitmapOop)));
	pixCount = interpreterProxy->stSizeOf(bitmapOop);
	result = CameraGetFrame(cameraNum, bitmap, pixCount);
	if (result < 0) {
		interpreterProxy->success(0);
		return 0;
	}
	interpreterProxy->popthenPush(3, ((result << 1) | 1));
	return 0;
}

DLLEXPORT int primGetParam(void) {
	int cameraNum;
	int result;
	int paramNum;

	cameraNum = interpreterProxy->stackIntegerValue(1);
	paramNum = interpreterProxy->stackIntegerValue(0);
	if (interpreterProxy->failed()) {
		return 0;
	}
	result = CameraGetParam(cameraNum, paramNum);
	interpreterProxy->popthenPush(3, ((result << 1) | 1));
	return 0;
}

DLLEXPORT int primOpenCamera(void) {
	int cameraNum;
	int desiredFrameWidth;
	int ok;
	int desiredFrameHeight;

	cameraNum = interpreterProxy->stackIntegerValue(2);
	desiredFrameWidth = interpreterProxy->stackIntegerValue(1);
	desiredFrameHeight = interpreterProxy->stackIntegerValue(0);
	if (interpreterProxy->failed()) {
		return 0;
	}
	ok = CameraOpen(cameraNum, desiredFrameWidth, desiredFrameHeight);
	if (ok == 0) {
		interpreterProxy->success(0);
		return 0;
	}
	interpreterProxy->pop(3);
	return 0;
}

DLLEXPORT int setInterpreter(struct VirtualMachine* anInterpreter) {
	int ok;

	interpreterProxy = anInterpreter;
	ok = interpreterProxy->majorVersion() == VM_PROXY_MAJOR;
	if (ok == 0) {
		return 0;
	}
	ok = interpreterProxy->minorVersion() >= VM_PROXY_MINOR;
	return ok;
}