mirror of https://github.com/ksherlock/dict.git
bug fixes, collect full definition before setting text, performance improvements.
This commit is contained in:
parent
9e24014b62
commit
681ec30d6f
95
nda.c
95
nda.c
|
@ -24,6 +24,15 @@
|
||||||
#include "connection.h"
|
#include "connection.h"
|
||||||
#include "nda.h"
|
#include "nda.h"
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* TODO:
|
||||||
|
* [ ] store definition in handle, put into TE control when finished?
|
||||||
|
* [ ] {text} -> drop {}, use dark blue text color.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
unsigned NDAStartUpTools(Word memID, StartStopRecord *ssRef);
|
unsigned NDAStartUpTools(Word memID, StartStopRecord *ssRef);
|
||||||
void NDAShutDownTools(StartStopRecord *ssRef);
|
void NDAShutDownTools(StartStopRecord *ssRef);
|
||||||
|
|
||||||
|
@ -43,6 +52,10 @@ Word FlagTCP;
|
||||||
Word ToolsLoaded;
|
Word ToolsLoaded;
|
||||||
GrafPortPtr MyWindow;
|
GrafPortPtr MyWindow;
|
||||||
|
|
||||||
|
Handle TextHandle;
|
||||||
|
LongWord TextHandleSize;
|
||||||
|
LongWord TextHandleUsed;
|
||||||
|
|
||||||
static StartStopRecord ss = {0,
|
static StartStopRecord ss = {0,
|
||||||
0,
|
0,
|
||||||
0,
|
0,
|
||||||
|
@ -83,27 +96,54 @@ pascal void MarinettiCallback(char *str);
|
||||||
void EnableControls(void);
|
void EnableControls(void);
|
||||||
void DisableControls(void);
|
void DisableControls(void);
|
||||||
|
|
||||||
void InsertString(word length, char *cp) {
|
|
||||||
|
void AppendText(word length, char *cp) {
|
||||||
|
|
||||||
|
Handle h = TextHandle;
|
||||||
|
LongWord size;
|
||||||
|
|
||||||
|
size = TextHandleUsed + length;
|
||||||
|
if (size > TextHandleSize) {
|
||||||
|
size += 4095;
|
||||||
|
size &= 4096;
|
||||||
|
|
||||||
|
if (h) {
|
||||||
|
HUnlock(h);
|
||||||
|
SetHandleSize(size, h);
|
||||||
|
if (_toolErr) return;
|
||||||
|
HLock(h);
|
||||||
|
TextHandleSize = size;
|
||||||
|
} else {
|
||||||
|
TextHandle = h = NewHandle(size, MyID, attrLocked, 0);
|
||||||
|
if (_toolErr) return;
|
||||||
|
TextHandleSize = size;
|
||||||
|
}
|
||||||
|
HLock(h);
|
||||||
|
}
|
||||||
|
BlockMove(cp, *h + TextHandleUsed, length);
|
||||||
|
TextHandleUsed += length;
|
||||||
|
}
|
||||||
|
|
||||||
|
void SetText(void) {
|
||||||
Handle handle;
|
Handle handle;
|
||||||
// TERecord **temp;
|
TERecord *temp;
|
||||||
longword oldStart, oldEnd;
|
longword oldStart, oldEnd;
|
||||||
|
|
||||||
handle = (Handle)GetCtlHandleFromID(MyWindow, rCtrlTE);
|
handle = (Handle)GetCtlHandleFromID(MyWindow, rCtrlTE);
|
||||||
// temp = (TERecord **)handle;
|
temp = *(TERecord **)handle;
|
||||||
|
|
||||||
//(**temp).textFlags &= (~fReadOnly);
|
temp->textFlags &= (~fReadOnly);
|
||||||
|
|
||||||
TEGetSelection((pointer)&oldStart, (pointer)&oldEnd, handle);
|
|
||||||
|
|
||||||
TESetSelection((Pointer)-1, (Pointer)-1, handle);
|
TESetSelection((Pointer)-1, (Pointer)-1, handle);
|
||||||
TEInsert(teDataIsTextBlock, (Ref)cp, length, NULL, NULL, /* no style info */
|
TESetText(teDataIsTextBlock, (Ref)*TextHandle, TextHandleUsed, NULL, NULL, handle);
|
||||||
handle);
|
temp->textFlags |= fReadOnly;
|
||||||
|
|
||||||
//(**temp).textFlags |= fReadOnly;
|
|
||||||
|
|
||||||
TESetSelection((Pointer)oldStart, (Pointer)oldEnd, handle);
|
TextHandleUsed = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
static char buffer[512];
|
static char buffer[512];
|
||||||
|
|
||||||
void TCPLoop(void) {
|
void TCPLoop(void) {
|
||||||
|
@ -130,12 +170,18 @@ void TCPLoop(void) {
|
||||||
|
|
||||||
case st_connect:
|
case st_connect:
|
||||||
x = ConnectionPoll(&connection);
|
x = ConnectionPoll(&connection);
|
||||||
switch (x) {
|
switch (connection.state) {
|
||||||
case kConnectionStateConnected:
|
case kConnectionStateConnected:
|
||||||
|
MarinettiCallback("\pConnected.");
|
||||||
++st;
|
++st;
|
||||||
break;
|
break;
|
||||||
case kConnectionStateDisconnected:
|
case kConnectionStateDisconnected:
|
||||||
|
MarinettiCallback("\pDisconnected.");
|
||||||
|
EnableControls();
|
||||||
|
st = st_none;
|
||||||
|
break;
|
||||||
case kConnectionStateError:
|
case kConnectionStateError:
|
||||||
|
MarinettiCallback("\pConnection Error.");
|
||||||
EnableControls();
|
EnableControls();
|
||||||
st = st_none;
|
st = st_none;
|
||||||
break;
|
break;
|
||||||
|
@ -143,7 +189,7 @@ void TCPLoop(void) {
|
||||||
return;
|
return;
|
||||||
case st_disconnect:
|
case st_disconnect:
|
||||||
x = ConnectionPoll(&connection);
|
x = ConnectionPoll(&connection);
|
||||||
switch (x) {
|
switch (connection.state) {
|
||||||
case kConnectionStateDisconnected:
|
case kConnectionStateDisconnected:
|
||||||
case kConnectionStateError:
|
case kConnectionStateError:
|
||||||
EnableControls();
|
EnableControls();
|
||||||
|
@ -152,6 +198,7 @@ void TCPLoop(void) {
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
redo:
|
||||||
case st_login:
|
case st_login:
|
||||||
case st_client:
|
case st_client:
|
||||||
case st_define1:
|
case st_define1:
|
||||||
|
@ -171,6 +218,8 @@ void TCPLoop(void) {
|
||||||
/* all data should be \r\n delimited. we want to keep the \r */
|
/* all data should be \r\n delimited. we want to keep the \r */
|
||||||
terr = TCPIPReadLineTCP(ipid, "\p\n", 0x0000, (Ref)&buffer,
|
terr = TCPIPReadLineTCP(ipid, "\p\n", 0x0000, (Ref)&buffer,
|
||||||
sizeof(buffer) - 2, &rlr);
|
sizeof(buffer) - 2, &rlr);
|
||||||
|
|
||||||
|
if (terr) return;
|
||||||
if (!rlr.rlrIsDataFlag)
|
if (!rlr.rlrIsDataFlag)
|
||||||
return;
|
return;
|
||||||
qtick += 60 * 15; /* bump timeout */
|
qtick += 60 * 15; /* bump timeout */
|
||||||
|
@ -185,7 +234,6 @@ void TCPLoop(void) {
|
||||||
++x;
|
++x;
|
||||||
}
|
}
|
||||||
buffer[x] = 0;
|
buffer[x] = 0;
|
||||||
++x;
|
|
||||||
rlr.rlrBuffCount = x;
|
rlr.rlrBuffCount = x;
|
||||||
|
|
||||||
if (st != st_define3) {
|
if (st != st_define3) {
|
||||||
|
@ -193,7 +241,7 @@ void TCPLoop(void) {
|
||||||
status = 0;
|
status = 0;
|
||||||
for (i = 0;; ++i) {
|
for (i = 0;; ++i) {
|
||||||
unsigned c = buffer[i];
|
unsigned c = buffer[i];
|
||||||
if (isdigit(x)) {
|
if (isdigit(c)) {
|
||||||
status *= 10;
|
status *= 10;
|
||||||
status += c - '0';
|
status += c - '0';
|
||||||
continue;
|
continue;
|
||||||
|
@ -238,7 +286,8 @@ void TCPLoop(void) {
|
||||||
MarinettiCallback("\pNo match");
|
MarinettiCallback("\pNo match");
|
||||||
st = st_idle;
|
st = st_idle;
|
||||||
} else {
|
} else {
|
||||||
InsertString(rlr.rlrBuffCount, buffer);
|
AppendText(rlr.rlrBuffCount, buffer);
|
||||||
|
SetText();
|
||||||
st = st_idle;
|
st = st_idle;
|
||||||
}
|
}
|
||||||
EnableControls();
|
EnableControls();
|
||||||
|
@ -251,6 +300,7 @@ void TCPLoop(void) {
|
||||||
else if (status == 250) {
|
else if (status == 250) {
|
||||||
st = st_idle;
|
st = st_idle;
|
||||||
qtick = GetTick() + 60 * 60 * 2; /* 2-minute timeout */
|
qtick = GetTick() + 60 * 60 * 2; /* 2-minute timeout */
|
||||||
|
SetText();
|
||||||
EnableControls();
|
EnableControls();
|
||||||
} else {
|
} else {
|
||||||
}
|
}
|
||||||
|
@ -258,13 +308,14 @@ void TCPLoop(void) {
|
||||||
case st_define3:
|
case st_define3:
|
||||||
/* expect definition text. '.' terminates. */
|
/* expect definition text. '.' terminates. */
|
||||||
if (buffer[0] == '.') {
|
if (buffer[0] == '.') {
|
||||||
InsertString(rlr.rlrBuffCount - 1, buffer + 1);
|
AppendText(rlr.rlrBuffCount - 1, buffer + 1);
|
||||||
if (buffer[1] == '\r') {
|
if (buffer[1] == '\r') {
|
||||||
--st;
|
--st;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
InsertString(rlr.rlrBuffCount, buffer);
|
AppendText(rlr.rlrBuffCount, buffer);
|
||||||
}
|
}
|
||||||
|
goto redo;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case st_quit:
|
case st_quit:
|
||||||
|
@ -365,11 +416,21 @@ void NDAClose(void) {
|
||||||
MyWindow = NULL;
|
MyWindow = NULL;
|
||||||
|
|
||||||
NDAResourceShutDown(&resInfo);
|
NDAResourceShutDown(&resInfo);
|
||||||
|
|
||||||
|
if (TextHandle) {
|
||||||
|
DisposeHandle(TextHandle);
|
||||||
|
TextHandle = NULL;
|
||||||
|
TextHandleUsed = 0;
|
||||||
|
TextHandleSize = 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
GrafPortPtr NDAOpen(void) {
|
GrafPortPtr NDAOpen(void) {
|
||||||
|
|
||||||
MyWindow = NULL;
|
MyWindow = NULL;
|
||||||
|
TextHandle = NULL;
|
||||||
|
TextHandleSize = 0;
|
||||||
|
TextHandleSize = 0;
|
||||||
|
|
||||||
if (!ToolsLoaded) {
|
if (!ToolsLoaded) {
|
||||||
if (NDAStartUpTools(MyID, &ss)) {
|
if (NDAStartUpTools(MyID, &ss)) {
|
||||||
|
|
Loading…
Reference in New Issue