- Added some hipadab array math

- Added missing cnvrt files, stolen from Markus
- Debugged the new sinqhttpopt driver for SINQ HTTP HM
- Debugged the driver for the new S7 Siemens SPS
- Added handling of hexadecimal terminators to ascon.c
- Increased the write buffer size in asynnet again
- Fixed  a core dump in lld.c
- Added writing of second gen HM to nxscript.c
- Added doubletime command to SICS
- Fixed a core dump issue in sicshdbadapter.c on dimension changes
- Modified sicsobj to look for lower case keys too


SKIPPED:
	psi/cnvrt.c
	psi/cnvrt.h
	psi/el734hp.c
	psi/make_gen
	psi/sinqhttpopt.c
	psi/sinqhttpprot.c
	psi/spss7.c
	psi/swmotor.c
This commit is contained in:
koennecke
2011-04-08 14:18:42 +00:00
parent 268a7f4141
commit 446b05d6a2
25 changed files with 535 additions and 33 deletions

46
arrayutil.c Normal file
View File

@ -0,0 +1,46 @@
/*
* arrayutil.c
*
* copyright: see file COPYRIGHT
*
* some utilities for dealing with arrays
*
* Created on: Mar 16, 2011
* Author: koennecke
*/
long sumWindow(int *data, int xstart, int xend, int xlength,
int ystart, int yend, int ylength)
{
int i,j;
long result = 0;
int *row;
if(xstart < 0 || xstart > xlength){
return -2;
}
if(xend < 0 || xend > xlength){
return -2;
}
if(xend < xstart){
return -2;
}
if(ystart < 0 || ystart > ylength){
return -2;
}
if(yend < 0 || yend > ylength){
return -2;
}
if(yend < ystart){
return -2;
}
for(j = ystart; j < yend; j++){
row = data + j*xlength;
for(i = xstart; i < xend; i++){
result += row[i];
}
}
return result;
}

31
arrayutil.h Normal file
View File

@ -0,0 +1,31 @@
/*
* arrayutil.h
*
* copyright: GPL
*
* Start of some array processing utilities. This may go if
* a more generalized array handling gets implemented into
* SICS.
*
* Created on: Mar 16, 2011
* Author: koennecke
*/
#ifndef ARRAYUTIL_H_
#define ARRAYUTIL_H_
/**
* sum data in a window
* @param data The data pointer
* @param xstart
* @param xend
* @param xlength length of x dimension
* @param ystart
* @param yend
* @param ylength size of y dimension
* @return a sum or -2 if the limits fail to make sense
*/
long sumWindow(int *data, int xstart, int xend, int xlength,
int ystart, int yend, int ylength);
#endif /* ARRAYUTIL_H_ */

21
ascon.c
View File

@ -495,6 +495,26 @@ int AsconStdHandler(Ascon * a)
return AsconBaseHandler(a);
}
/**
* Treat hex strings as terminators right. Note that this
* is limited to single character terminators.
*/
static void AsconCheckTerminators(Ascon *a)
{
int c;
if(a->sendTerminator != NULL && strstr(a->sendTerminator,"0x") != NULL){
sscanf(a->sendTerminator,"%x",&c);
a->sendTerminator[0] = (char)c;
a->sendTerminator[1] = '\0';
}
if(a->replyTerminator != NULL && strstr(a->replyTerminator,"0x") != NULL){
sscanf(a->replyTerminator,"%x",&c);
a->replyTerminator[0] = (char)c;
a->replyTerminator[1] = '\0';
}
}
int AsconInterpreteArgs(int argc, char *argv[],
int parc, char *parn[], char *pars[])
{
@ -574,6 +594,7 @@ int AsconStdInit(Ascon *a, SConnection *con, int argc, char *argv[])
} else {
a->separator = NULL;
}
AsconCheckTerminators(a);
return 1;
}

View File

@ -43,7 +43,7 @@
#define DATASOCKET 1
#define MAXCONNECTIONS 1024
#define RBUFFERSIZE 262144 /* 256kb */
#define WBUFFERSIZE 10*262144 /* 512kb */
#define WBUFFERSIZE 20*262144 /* */
/*--------------------------------------------------------------------------*/
typedef struct {
int socket;

View File

@ -2,9 +2,9 @@
* Asynchronous networking for SICS and other programs. This module centrally manages
* a number of network connections for a client program. It is a layer between the
* program and the network which manages non blocking network I/O. To this purpose, the
* client program has to call ANETprocess at convenient intervalls. This module
* client program has to call ANETprocess at convenient intervals. This module
* has a couple of features:
* - Connections are abstracted to handles which are guranteed to be unique
* - Connections are abstracted to handles which are guaranteed to be unique
* rather then socket numbers. Socket numbers may be reused by the OS.
* - This module allows upper level code to figure out if a connection is still
* connected or not.

View File

@ -227,7 +227,6 @@ static int DevQueueTask(void *ds)
DevAction *action;
char *sendData;
char *replyData = NULL;
if (devser->steps == 0)
return 1;

View File

@ -16,9 +16,9 @@ On a triple axis instrument the parameters incoming energy, Q-position in 3D and
Q-E variables ei, ki, ef, kf, en, qh, qk and ql can be driven as virtual motors in
SICS.
</P>
<h2>Commands understood by Tasub</h2>
<H2>Commands understood by Tasub</H2>
<p>
<h3>Monochromator and Analyzer Parameters
<h3>Monochromator and Analyzer Parameters</h3>
<p>
Incident and scattered energies are defined by monochromator crystals. In order for the
calculations to work, some parameters need to be configured. Monochromator and analyzer

View File

@ -70,6 +70,7 @@ static char *pEvent[] = {
"STATESTART",
"STATEEND",
"NEWTARGET",
"DIMCHANGE",
NULL
};

11
event.h
View File

@ -1,5 +1,5 @@
#line 102 "event.w"
#line 103 "event.w"
/*----------------------------------------------------------------------------
E V E N T
@ -18,7 +18,7 @@
int Text2Event(char *pText);
#line 115 "event.w"
#line 116 "event.w"
@ -48,8 +48,9 @@
#define STSTART 21
#define STEND 22
#define NEWTARGET 23
#define DIMCHANGE 24
#line 117 "event.w"
#line 118 "event.w"
/*----------------- event data structure for the NEWTARGET event ---------*/
@ -59,7 +60,7 @@ typedef struct {
} NewTarget, *pNewTarget;
/*--------------- Signals for the Signalfunction of each task ------------*/
#line 84 "event.w"
#line 85 "event.w"
#define SICSINT 300
#define SICSBROADCAST 301
@ -68,6 +69,6 @@ typedef struct {
#define COMLOG 304
#define CRONLIST 305
#line 125 "event.w"
#line 126 "event.w"
#endif

View File

@ -59,6 +59,7 @@ $\langle$VE {\footnotesize ?}$\rangle\equiv$
\mbox{}\verb@#define STSTART 21@\\
\mbox{}\verb@#define STEND 22@\\
\mbox{}\verb@#define NEWTARGET 23@\\
\mbox{}\verb@#define DIMCHANGE 24@\\
\mbox{}\verb@@$\Diamond$
\end{list}
\vspace{-1ex}

View File

@ -42,6 +42,7 @@ if the event code is not known, else the apropriate event code.
#define STSTART 21
#define STEND 22
#define NEWTARGET 23
#define DIMCHANGE 24
@}
\begin{description}
\item[VALUECHANGE] This is a variable changing its value. As event data a pointer to the

View File

@ -164,6 +164,44 @@ static pDynString findBlockEnd(pExeBuf self)
DeleteDynString(command);
return NULL;
}
/*-----------------attempt at a faster version -------------------------------
* But this only saves on the ConcatChar side of things......
*
* */
static pDynString findBlockEndExp(pExeBuf self)
{
pDynString command = NULL;
char *buffer = NULL;
char *cStart, *cEnd;
int i, len;
assert(self);
command = CreateDynString(80, 80);
if (command == NULL) {
return NULL;
}
buffer = GetCharArray(self->bufferContent);
if (self->end != -1) {
self->start = self->end + 1;
}
cStart = buffer +self->start;
cEnd = strchr(cStart,'\n');
while(cEnd != NULL){
len = cEnd - cStart+1;
DynStringConcatBytes(command,cStart, len);
self->lineno++;
if (Tcl_CommandComplete(GetCharArray(command))) {
self->end += len;
return command;
}
cStart = cEnd+1;
cEnd = strchr(cStart,'\n');
}
DeleteDynString(command);
return NULL;
}
/*---------------------------------------------------------------------*/
int exeBufProcess(pExeBuf self, SicsInterp * pSics,

View File

@ -1274,6 +1274,7 @@ int HistAction(SConnection * pCon, SicsInterp * pSics, void *pData,
iRet = HistConfigure(self, pCon, pSics);
if (iRet) {
self->iInit = 1;
InvokeCallBack(self->pCall,DIMCHANGE,NULL);
SCSendOK(pCon);
} else {
self->iInit = 0;
@ -1657,6 +1658,7 @@ int HistAction(SConnection * pCon, SicsInterp * pSics, void *pData,
}
/* do it */
genTimeBinning(self->pDriv->data, (float) dStart, (float) dStep, iNum);
InvokeCallBack(self->pCall,DIMCHANGE,NULL);
SCparChange(pCon);
SCSendOK(pCon);
return 1;
@ -1693,6 +1695,7 @@ int HistAction(SConnection * pCon, SicsInterp * pSics, void *pData,
return 0;
}
setTimeBin(self->pDriv->data, iNum, (float) dStep);
InvokeCallBack(self->pCall,DIMCHANGE,NULL);
self->iInit = 0;
SCSendOK(pCon);
return 1;
@ -1705,6 +1708,7 @@ int HistAction(SConnection * pCon, SicsInterp * pSics, void *pData,
return 0;
}
clearTimeBinning(self->pDriv->data);
InvokeCallBack(self->pCall,DIMCHANGE,NULL);
SCSendOK(pCon);
return 1;
}

8
lld.c
View File

@ -498,8 +498,12 @@ void LLDnodeDelete(int List)
/* adjust links
*/
Old->prev->next = Old->next;
Old->next->prev = Old->prev;
if(Old->prev != NULL){
Old->prev->next = Old->next;
}
if(Old->next != NULL){
Old->next->prev = Old->prev;
}
/* adjust current node pointer
prevent it from pointing to the dummy tail node

View File

@ -36,7 +36,7 @@ SOBJ = network.o ifile.o conman.o SCinter.o splitter.o passwd.o \
moregress.o multicounter.o regresscter.o histregress.o \
sicshdbadapter.o polldriv.o sicspoll.o statemon.o hmslave.o \
nwatch.o asyncqueue.o asyncprotocol.o sicsobj.o frame.o\
nxcopy.o nxinterhelper.o nxinter_wrap.o nxstack.o \
nxcopy.o nxinterhelper.o nxinter_wrap.o nxstack.o arrayutil.o \
sctdriveadapter.o sctdriveobj.o reflist.o singlex.o fourmess.o \
sgclib.o sgfind.o sgio.o sgsi.o sghkl.o singlediff.o singlebi.o \
singlenb.o simindex.o simidx.o uselect.o singletas.o motorsec.o \

View File

@ -396,8 +396,8 @@ pNXDS cutNXDataset(pNXDS source, int start[], int end[])
}
/*----------------------------------------------------------------------
This recurses through all dimesnions, thereby skipping the summed one.
At the end of the rescusion the actual summing is performed.
This recurses through all dimensions, thereby skipping the summed one.
At the end of the recursion the actual summing is performed.
----------------------------------------------------------------------*/
static void sumData(pNXDS source, pNXDS target, int sourceDim[],
int targetDim[], int targetDimCount, int dimNo,

View File

@ -547,7 +547,7 @@ static void putHdbOff(SConnection * pCon, SicsInterp * pSics, pNXScript self,
GetHipadabaPar(node, &v, pCon);
if(offset < 0 || offset > v.arrayLength){
SCPrintf(pCon,eLogError,"ERROR: invalid offset %d speicified", offset );
SCPrintf(pCon,eLogError,"ERROR: invalid offset %d specified", offset );
return;
}
switch (v.dataType) {
@ -924,6 +924,8 @@ static void putSlab(SConnection * pCon, SicsInterp * pSics, pNXScript self,
pHistMem mem = NULL;
HistInt *histData = NULL;
pSICSData data = NULL;
pCounter memsec = NULL;
pHdb node = NULL;
if (argc < 6) {
SCWrite(pCon, "ERROR: insufficient number of arguments to putslab",
@ -956,11 +958,27 @@ static void putSlab(SConnection * pCon, SicsInterp * pSics, pNXScript self,
if (mem != NULL) {
histData = GetHistogramPointer(mem, pCon);
if (histData) {
status = NXputslab(self->fileHandle, histData, start, size);
status = NXputslab(self->fileHandle, histData, start, size);
if (status == NX_OK) {
written = 1;
}
}
}
/*
* try to write second gen histogram data
*/
memsec = (pCounter) FindCommandData(pSics, argv[5], "HistMemSec");
if(memsec != NULL){
node = GetHipadabaNode(memsec->pDes->parNode,"data");
if(data != NULL){
SCWrite(pCon,"ERROR: ?? data node to second gen HM not found", eError);
return;
}
status = NXputslab(self->fileHandle, node->value.v.intArray, start, size);
if (status == NX_OK) {
written = 1;
}
}
}
/*

1
ofac.c
View File

@ -100,6 +100,7 @@ static void InitIniCommands(SicsInterp * pInter)
PCMD("sicsprompt", SicsPrompt);
PCMD("SICSStatus", SICSStatus);
PCMD("sicstime", SICSTime);
PCMD("doubletime", SICSDoubleTime);
PCMD("SICSType", SICSType);
PCMD("Sics_Exitus", SicsExit);
PCMD("silent", SICSSilent);

View File

@ -415,7 +415,16 @@ int SICSTime(SConnection * pCon, SicsInterp * pSics, void *pData,
SCWrite(pCon, pBueffel, eValue);
return 1;
}
/*-------------------------------------------------------------------------*/
int SICSDoubleTime(SConnection * pCon, SicsInterp * pSics, void *pData,
int argc, char *argv[])
{
double dtime;
dtime = DoubleTime();
SCPrintf(pCon,eValue,"%lf",dtime);
return 1;
}
/*--------------------------------------------------------------------------
Kill a command from SICS
*/

View File

@ -28,6 +28,7 @@
#include "sicshipadaba.h"
#include "sicshdbadapter.h"
#include "sicsdata.h"
#include "HistMem.i"
#define PRIVNAM "priv"
/*==================== support code ====================================*/
@ -337,6 +338,7 @@ static long totalSum(int *data, int length)
/*----------------------------------------------------------------------*/
typedef struct {
pHistMem pHM;
pHdb node;
} HMAdapter, *pHMAdapter;
/*-------------------------------------------------------------------------*/
static hdbCallbackReturn HMDataGetCallback(pHdb currentNode,
@ -359,9 +361,21 @@ static hdbCallbackReturn HMDataGetCallback(pHdb currentNode,
currentNode->value.arrayLength = GetHistLength(pHMA->pHM);
currentNode->value.v.intArray =
(int *) GetHistogramPointer(pHMA->pHM, pCon);
NotifyHipadabaPar(pHMA->node, NULL);
return hdbContinue;
}
/*----------------------------------------------------------------------*/
static int DimCallback(int iEvent, void *eventData, void *userData)
{
pHMAdapter pHMA = (pHMAdapter)userData;
if(iEvent == DIMCHANGE){
pHMA->node->value.arrayLength = GetHistLength(pHMA->pHM);
pHMA->node->value.v.intArray =
(int *) GetHistogramPointer(pHMA->pHM, pServ->dummyCon);
}
return 1;
}
/*----------------------------------------------------------------------*/
static pHdb MakeHMDataNode(pHistMem pHM, char *name)
{
@ -375,6 +389,7 @@ static pHdb MakeHMDataNode(pHistMem pHM, char *name)
return NULL;
}
pHMA->pHM = pHM;
pHMA->node = node;
node->value.doNotFree = 1;
node->value.v.intArray = (int *)GetHistogramPointer(pHM, pServ->dummyCon);
pCall = MakeHipadabaCallback(HMDataGetCallback, pHMA, free);
@ -383,7 +398,7 @@ static pHdb MakeHMDataNode(pHistMem pHM, char *name)
}
AppendHipadabaCallback(node, pCall);
AppendHipadabaCallback(node, MakeReadOnlyCallback());
RegisterCallback(pHM->pCall,DIMCHANGE, DimCallback, pHMA, NULL);
return node;
}

View File

@ -35,6 +35,7 @@
#include "sicsobj.h"
#include <macro.h>
#include "commandlog.h"
#include "arrayutil.h"
#define MAX_HDB_PATH 1024
@ -451,13 +452,12 @@ int formatNameValue(Protocol protocol, char *name, char *value,
}
/*----------------------------------------------------------------------------*/
static int sendZippedNodeData(pHdb node, SConnection * pCon)
static int sendZippedNodeData(pHdb node, hdbValue newValue, SConnection * pCon)
{
hdbValue newValue;
int i, *iData = NULL;
char *path = NULL;
double sum = 0;
newValue = node->value;
path = GetHipadabaPath(node);
switch (newValue.dataType) {
case HIPINTAR:
@ -474,10 +474,12 @@ static int sendZippedNodeData(pHdb node, SConnection * pCon)
}
memset(iData, 0, newValue.arrayLength * sizeof(int));
for (i = 0; i < newValue.arrayLength; i++) {
sum += (double)newValue.v.intArray[i];
iData[i] = htonl(newValue.v.intArray[i]);
}
SCWriteZipped(pCon, path, iData, newValue.arrayLength * sizeof(int));
free(iData);
/* printf("Wrote zipped data %s, sum %lf\n", path, sum); */
break;
case HIPFLOATAR:
case HIPFLOATVARAR:
@ -493,14 +495,16 @@ static int sendZippedNodeData(pHdb node, SConnection * pCon)
}
memset(iData, 0, newValue.arrayLength * sizeof(int));
for (i = 0; i < newValue.arrayLength; i++) {
sum+= newValue.v.floatArray[i];
iData[i] = htonl((int) (newValue.v.floatArray[i] * 65536.));
}
SCWriteZipped(pCon, path, iData, newValue.arrayLength * sizeof(int));
/* printf("Wrote zipped data %s, sum %lf\n", path, sum); */
free(iData);
break;
default:
SCWrite(pCon, "ERROR: zipped writing not supported for this datatype",
eError);
SCPrintf(pCon, eError, "ERROR: zipped writing not supported for this datatype on node %s",
path);
free(path);
return 0;
}
@ -597,7 +601,7 @@ static hdbCallbackReturn SICSNotifyCallback(pHdb node, void *userData,
*/
if (GetHdbProperty(node, "transfer", value, 80) == 1) {
if (strstr(value, "zip") != NULL) {
status = sendZippedNodeData(node, cbInfo->pCon);
status = sendZippedNodeData(node, *(mm->v), cbInfo->pCon);
free(pPath);
DeleteDynString(result);
return hdbContinue;
@ -2094,6 +2098,7 @@ int readHdbValue(hdbValue * v, char *data, char *error, int errlen)
free(v->v.text);
}
v->v.text = strdup(data);
v->arrayLength = strlen(data);
break;
case HIPINTVARAR:
if (!adjustDataLength(v, data)) {
@ -2447,8 +2452,9 @@ static int ZipGetHdbNode(SConnection * pCon, SicsInterp * pSics,
}
memset(&newValue, 0, sizeof(hdbValue));
GetHipadabaPar(targetNode, &newValue, pCon);
status = sendZippedNodeData(targetNode, newValue, pCon);
ReleaseHdbValue(&newValue);
return sendZippedNodeData(targetNode, pCon);
return status;
}
/*---------------------------------------------------------------------------*/
@ -2934,8 +2940,10 @@ static int HdbArrayNode(SConnection * pCon, SicsInterp * pSics, void *pData,
pHdb node = NULL;
pObjectDescriptor pDes = NULL;
int length, idx, ival, i;
int xstart, xend, xlength, ystart, yend, ylength;
double dval;
hdbValue v;
long sum;
if (argc < 4) {
SCWrite(pCon, "ERROR: need at least three arguments to harray", eError);
@ -2988,6 +2996,22 @@ static int HdbArrayNode(SConnection * pCon, SicsInterp * pSics, void *pData,
return 1;
}
if(strcmp(argv[2],"sum") == 0){
if(argc < 9){
SCWrite(pCon,"ERROR: not enough arguments to harray sum", eError);
return 0;
}
xstart = atoi(argv[3]);
xend = atoi(argv[4]);
xlength = atoi(argv[5]);
ystart = atoi(argv[6]);
yend = atoi(argv[7]);
ylength = atoi(argv[8]);
sum = sumWindow(node->value.v.intArray,xstart,xend,xlength,ystart,yend,ylength);
SCPrintf(pCon,eValue,"sum = %ld", sum);
return 1;
}
idx = atoi(argv[2]);
if(idx < 0 || idx >= node->value.arrayLength ){
SCPrintf(pCon,eError,"ERROR: %d is out of range 0 - %d",

View File

@ -475,6 +475,10 @@ int InvokeSICSOBJ(SConnection * pCon, SicsInterp * pSics, void *pData,
}
} else {
parNode = GetHipadabaNode(self->objectNode, argv[1]);
if(parNode == NULL){
strtolower(argv[1]);
parNode = GetHipadabaNode(self->objectNode,argv[1]);
}
}
if (parNode != NULL && parNode->value.dataType == HIPFUNC) {
status = invokeOBJFunction(self, parNode, pCon, argc - 2, &argv[2]);

View File

@ -187,13 +187,15 @@ static void printPollList(pSicsPoll self, SConnection * pCon)
int status;
pPollDriv driv = NULL;
char buffer[512];
char tbuf[256];
status = LLDnodePtr2First(self->pollList);
while (status != 0) {
driv = (pPollDriv) LLDnodePtr(self->pollList);
if (driv != NULL) {
snprintf(buffer, 512, "%60s %3d",
driv->objectIdentifier, driv->pollIntervall);
ctime_r(&driv->nextPoll, tbuf);
snprintf(buffer, 512, "%30s %3d %30s",
driv->objectIdentifier, driv->pollIntervall, tbuf);
SCWrite(pCon, buffer, eValue);
}
status = LLDnodePtr2Next(self->pollList);

View File

@ -5,9 +5,291 @@ exe syspath ./
#--- END (commands producing errors on last restore)
# Counter counter
counter SetPreset 7.000000
counter SetPreset 3.000000
counter SetMode Timer
hm preset 7
hm mode monitor
title UNKNOWN
title setAccess 2
user Uwe Filges
user setAccess 2
address UNKNOWN
address setAccess 2
adress UNKNOWN
adress setAccess 2
phone UNKNOWN
phone setAccess 2
email UNKNOWN
email setAccess 2
affiliation UNKNOWN
affiliation setAccess 2
countrate 0.000000
countrate setAccess 2
t2tx targetposition 0
t2tx sign 1
t2tx softzero 0
t2tx softlowerlim 0
t2tx softupperlim 2000
t2tx fixed -1
t2tx interruptmode 0
t2tx precision 0.01
t2tx accesscode 2
t2tx failafter 3
t2tx maxretry 3
t2tx ignorefault 0
t2tx movecount 10
t2ty targetposition 0
t2ty sign 1
t2ty softzero 0
t2ty softlowerlim 0
t2ty softupperlim 100
t2ty fixed -1
t2ty interruptmode 0
t2ty precision 0.01
t2ty accesscode 2
t2ty failafter 3
t2ty maxretry 3
t2ty ignorefault 0
t2ty movecount 10
sdw 0.000000
sdw setAccess 2
sdh 0.000000
sdh setAccess 2
t3tx targetposition 0
t3tx sign 1
t3tx softzero 0
t3tx softlowerlim 0
t3tx softupperlim 2000
t3tx fixed -1
t3tx interruptmode 0
t3tx precision 0.01
t3tx accesscode 2
t3tx failafter 3
t3tx maxretry 3
t3tx ignorefault 0
t3tx movecount 10
rt3 targetposition 0
rt3 sign 1
rt3 softzero 0
rt3 softlowerlim -180
rt3 softupperlim 180
rt3 fixed -1
rt3 interruptmode 0
rt3 precision 0.01
rt3 accesscode 2
rt3 failafter 3
rt3 maxretry 3
rt3 ignorefault 0
rt3 movecount 10
sew 0.000000
sew setAccess 2
seh 0.000000
seh setAccess 2
t4tx targetposition 0
t4tx sign 1
t4tx softzero 0
t4tx softlowerlim 500
t4tx softupperlim 12000
t4tx fixed -1
t4tx interruptmode 0
t4tx precision 0.01
t4tx accesscode 2
t4tx failafter 3
t4tx maxretry 3
t4tx ignorefault 0
t4tx movecount 10
t4ty targetposition 0
t4ty sign 1
t4ty softzero 0
t4ty softlowerlim 0
t4ty softupperlim 3000
t4ty fixed -1
t4ty interruptmode 0
t4ty precision 0.01
t4ty accesscode 2
t4ty failafter 3
t4ty maxretry 3
t4ty ignorefault 0
t4ty movecount 10
gau targetposition 0
gau sign 1
gau softzero 0
gau softlowerlim -25
gau softupperlim 25
gau fixed -1
gau interruptmode 0
gau precision 0.01
gau accesscode 2
gau failafter 3
gau maxretry 3
gau ignorefault 0
gau movecount 10
gal targetposition 0
gal sign 1
gal softzero 0
gal softlowerlim -25
gal softupperlim 25
gal fixed -1
gal interruptmode 0
gal precision 0.01
gal accesscode 2
gal failafter 3
gal maxretry 3
gal ignorefault 0
gal movecount 10
t5tx targetposition 0
t5tx sign 1
t5tx softzero 0
t5tx softlowerlim 500
t5tx softupperlim 12000
t5tx fixed -1
t5tx interruptmode 0
t5tx precision 0.01
t5tx accesscode 2
t5tx failafter 3
t5tx maxretry 3
t5tx ignorefault 0
t5tx movecount 10
t5ty targetposition 0
t5ty sign 1
t5ty softzero 0
t5ty softlowerlim 0
t5ty softupperlim 3000
t5ty fixed -1
t5ty interruptmode 0
t5ty precision 0.01
t5ty accesscode 2
t5ty failafter 3
t5ty maxretry 3
t5ty ignorefault 0
t5ty movecount 10
sal targetposition 0
sal sign 1
sal softzero 0
sal softlowerlim -30
sal softupperlim 30
sal fixed -1
sal interruptmode 0
sal precision 0.01
sal accesscode 2
sal failafter 3
sal maxretry 3
sal ignorefault 0
sal movecount 10
sar targetposition 0
sar sign 1
sar softzero 0
sar softlowerlim -30
sar softupperlim 30
sar fixed -1
sar interruptmode 0
sar precision 0.01
sar accesscode 2
sar failafter 3
sar maxretry 3
sar ignorefault 0
sar movecount 10
sab targetposition 0
sab sign 1
sab softzero 0
sab softlowerlim -30
sab softupperlim 30
sab fixed -1
sab interruptmode 0
sab precision 0.01
sab accesscode 2
sab failafter 3
sab maxretry 3
sab ignorefault 0
sab movecount 10
sat targetposition 0
sat sign 1
sat softzero 0
sat softlowerlim 0
sat softupperlim 1000
sat fixed -1
sat interruptmode 0
sat precision 0.01
sat accesscode 2
sat failafter 3
sat maxretry 3
sat ignorefault 0
sat movecount 10
t6tx targetposition 0
t6tx sign 1
t6tx softzero 0
t6tx softlowerlim 500
t6tx softupperlim 12000
t6tx fixed -1
t6tx interruptmode 0
t6tx precision 0.01
t6tx accesscode 2
t6tx failafter 3
t6tx maxretry 3
t6tx ignorefault 0
t6tx movecount 10
t6ty targetposition 0
t6ty sign 1
t6ty softzero 0
t6ty softlowerlim 0
t6ty softupperlim 3000
t6ty fixed -1
t6ty interruptmode 0
t6ty precision 0.01
t6ty accesscode 2
t6ty failafter 3
t6ty maxretry 3
t6ty ignorefault 0
t6ty movecount 10
sbl targetposition 0
sbl sign 1
sbl softzero 0
sbl softlowerlim -30
sbl softupperlim 30
sbl fixed -1
sbl interruptmode 0
sbl precision 0.01
sbl accesscode 2
sbl failafter 3
sbl maxretry 3
sbl ignorefault 0
sbl movecount 10
sbr targetposition 0
sbr sign 1
sbr softzero 0
sbr softlowerlim -30
sbr softupperlim 30
sbr fixed -1
sbr interruptmode 0
sbr precision 0.01
sbr accesscode 2
sbr failafter 3
sbr maxretry 3
sbr ignorefault 0
sbr movecount 10
sbb targetposition 0
sbb sign 1
sbb softzero 0
sbb softlowerlim -30
sbb softupperlim 30
sbb fixed -1
sbb interruptmode 0
sbb precision 0.01
sbb accesscode 2
sbb failafter 3
sbb maxretry 3
sbb ignorefault 0
sbb movecount 10
sbt targetposition 0
sbt sign 1
sbt softzero 0
sbt softlowerlim 0
sbt softupperlim 1000
sbt fixed -1
sbt interruptmode 0
sbt precision 0.01
sbt accesscode 2
sbt failafter 3
sbt maxretry 3
sbt ignorefault 0
sbt movecount 10
hm preset 12
hm mode timer

View File

@ -1,3 +1,3 @@
302
318
NEVER, EVER modify or delete this file
You'll risk eternal damnation and a reincarnation as a cockroach!