int serialPortReadInto(int portNum, int count, void *startPtr) { char serialPortName[PORT_NAME_SIZE]; if ((portNum < 0) || (portNum >= MAX_SERIAL_PORTS)) { success(false); return 0; } make_portname_from_portnum(serialPortName, portNum); return serialPortReadIntoByName(serialPortName, count, startPtr); }
EXPORT(sqInt) primitiveSerialPortReadByName(void) { sqInt bytesRead; char * cString; char *deviceName; char *array; sqInt startIndex; sqInt count; sqInt _return_value; char *p; sqInt len; sqInt terminatedString; interpreterProxy->success(interpreterProxy->isBytes(interpreterProxy->stackValue(3))); deviceName = ((char *) (interpreterProxy->firstIndexableField(interpreterProxy->stackValue(3)))); interpreterProxy->success(interpreterProxy->isBytes(interpreterProxy->stackValue(2))); array = ((char *) (interpreterProxy->firstIndexableField(interpreterProxy->stackValue(2)))); startIndex = interpreterProxy->stackIntegerValue(1); count = interpreterProxy->stackIntegerValue(0); if (interpreterProxy->failed()) { return null; } interpreterProxy->success((startIndex >= 1) && (((startIndex + count) - 1) <= (interpreterProxy->byteSizeOf((oopForPointer( array ) - BASE_HEADER_SIZE))))); /* begin allocateTerminatedString: */ len = interpreterProxy->sizeOfSTArrayFromCPrimitive(deviceName); terminatedString = interpreterProxy->instantiateClassindexableSize(interpreterProxy->classString(), len + 1); p = interpreterProxy->arrayValueOf(terminatedString); p[len] = 0; while (len >= 0) { len -= 1; p[len] = (deviceName[len]); } cString = p; bytesRead = serialPortReadIntoByName(cString, count, (array + startIndex) - 1); _return_value = interpreterProxy->integerObjectOf(bytesRead); if (interpreterProxy->failed()) { return null; } interpreterProxy->popthenPush(5, _return_value); return null; }
primitiveSerialPortReadByName(void) { // SerialPlugin>>#primitiveSerialPortReadByName char *array; sqInt arrayPtr; sqInt bytesRead; sqInt count; char *port; char *portName; sqInt portNameSize; sqInt startIndex; sqInt _return_value; success(isBytes(stackValue(3))); portName = ((char *) (firstIndexableField(stackValue(3)))); success(isBytes(stackValue(2))); array = ((char *) (firstIndexableField(stackValue(2)))); startIndex = stackIntegerValue(1); count = stackIntegerValue(0); if (failed()) { return null; } success((startIndex >= 1) && (((startIndex + count) - 1) <= (byteSizeOf(((sqInt)(long)(array) - 4))))); portNameSize = slotSizeOf(((int) portName) - 4); port = calloc(portNameSize+1, sizeof(char)); memcpy(port, portName, portNameSize); arrayPtr = ((((sqInt)array)) + startIndex) - 1; bytesRead = serialPortReadIntoByName( port, count, arrayPtr); free(port); _return_value = integerObjectOf(bytesRead); if (failed()) { return null; } popthenPush(5, _return_value); return null; }