LTCD_060720.ISO
This commit is contained in:
1 parent
f86e69648b
commit
d14bbc24f9
15 files changed
+1074
-919
No files matched your search
Binary file not shown.
Binary file not shown.
+38
-16
@@ -35,7 +35,7 @@
|
|||||||
#define RMT_RQST_EXE_LOCAL 0x06
|
#define RMT_RQST_EXE_LOCAL 0x06
|
||||||
#define RMT_RQST_PUTS_CNT 0x07
|
#define RMT_RQST_PUTS_CNT 0x07
|
||||||
|
|
||||||
#define RMT_RQST_MAX 0x07
|
#define RMT_RQST_MAX 0x08
|
||||||
|
|
||||||
U8 comm_base[5]={0,0x3F8,0x2F8,0x3E8,0x2E8};
|
U8 comm_base[5]={0,0x3F8,0x2F8,0x3E8,0x2E8};
|
||||||
U1Fifo *comm_Rx_fifos[5]={NULL,NULL,NULL,NULL,NULL};
|
U1Fifo *comm_Rx_fifos[5]={NULL,NULL,NULL,NULL,NULL};
|
||||||
@@ -454,7 +454,7 @@ rr_start:
|
|||||||
RmtRxPktU1(chnl,&b1,JIFFY_FREQ/50,&esc);
|
RmtRxPktU1(chnl,&b1,JIFFY_FREQ/50,&esc);
|
||||||
rr_cont:
|
rr_cont:
|
||||||
if (b==RMT_PKT_REQUEST) {
|
if (b==RMT_PKT_REQUEST) {
|
||||||
if (b1>RMT_RQST_MAX) {
|
if (b1>=RMT_RQST_MAX) {
|
||||||
if (b1==RMT_PKT_REQUEST && !esc)
|
if (b1==RMT_PKT_REQUEST && !esc)
|
||||||
goto rr_cont;
|
goto rr_cont;
|
||||||
else
|
else
|
||||||
@@ -563,6 +563,8 @@ public U8 RmtGetMsg(LTChnl *chnl,I8 *p1,I8 *p2)
|
|||||||
*p2=b[16]><(U8);
|
*p2=b[16]><(U8);
|
||||||
if (!cmd)
|
if (!cmd)
|
||||||
chnl->null_msg_jiffy=jiffies+JIFFY_FREQ/50;
|
chnl->null_msg_jiffy=jiffies+JIFFY_FREQ/50;
|
||||||
|
else
|
||||||
|
chnl->null_msg_jiffy=0;
|
||||||
}
|
}
|
||||||
return cmd;
|
return cmd;
|
||||||
}
|
}
|
||||||
@@ -576,8 +578,10 @@ public void RmtSendMsg(LTChnl *chnl,U8 cmd,I8 p1,I8 p2)
|
|||||||
b[8]><(U8)=p1;
|
b[8]><(U8)=p1;
|
||||||
b[16]><(U8)=p2;
|
b[16]><(U8)=p2;
|
||||||
RmtTxPkt(chnl,b,sizeof(U8)*3);
|
RmtTxPkt(chnl,b,sizeof(U8)*3);
|
||||||
} else
|
} else {
|
||||||
RmtTxPkt(chnl,b,1);
|
RmtTxPkt(chnl,b,1);
|
||||||
|
chnl->null_msg_cnt++;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void RmtPutCharSC(LTChnl *chnl,I8 ch,U8 sc)
|
public void RmtPutCharSC(LTChnl *chnl,I8 ch,U8 sc)
|
||||||
@@ -614,24 +618,32 @@ public void RmtTxFile(LTChnl *chnl,I1 *filename,
|
|||||||
{
|
{
|
||||||
U8 size;
|
U8 size;
|
||||||
U1 *buf;
|
U1 *buf;
|
||||||
|
LTDirEntry de;
|
||||||
if (!chnl || !chnl->type) return;
|
if (!chnl || !chnl->type) return;
|
||||||
|
if (FindFile(filename,&de)) {
|
||||||
buf=ReadFile(filename,&size,NULL,raw);
|
buf=ReadFile(filename,&size,NULL,raw);
|
||||||
if (buf) {
|
if (buf) {
|
||||||
|
RmtTxBuf(chnl,&de.start,LT_DIR_ENTRY_SIZE);
|
||||||
RmtTxBuf(chnl,buf,size);
|
RmtTxBuf(chnl,buf,size);
|
||||||
Free(buf);
|
Free(buf);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public U8 RmtRxFile(LTChnl *chnl,I1 *filename,
|
public U8 RmtRxFile(LTChnl *chnl,I1 *filename,
|
||||||
BoolU4 raw=TRUE)
|
BoolU4 raw=TRUE)
|
||||||
{
|
{
|
||||||
U8 size;
|
U8 size;
|
||||||
U1 *buf;
|
U1 *buf,*buf1;
|
||||||
|
LTDirEntry *de;
|
||||||
if (!chnl || !chnl->type) return 0;
|
if (!chnl || !chnl->type) return 0;
|
||||||
|
buf1=RmtRxBuf(chnl);
|
||||||
|
de=buf1-offset(LTDirEntry.start);
|
||||||
if (buf=RmtRxBuf(chnl,&size)) {
|
if (buf=RmtRxBuf(chnl,&size)) {
|
||||||
WriteFile(filename,buf,size,0,0,raw);
|
WriteFile(filename,buf,size,de->datetime,de->attr,raw);
|
||||||
Free(buf);
|
Free(buf);
|
||||||
}
|
}
|
||||||
|
Free(buf1);
|
||||||
return size;
|
return size;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -676,23 +688,23 @@ public I1 *RmtRxPutS(LTChnl *chnl,U8 *rqst=NULL)
|
|||||||
return buf;
|
return buf;
|
||||||
}
|
}
|
||||||
|
|
||||||
/***************
|
public U1 *RmtRqstTxBuf()
|
||||||
public U1 *RmtRqstTxBuf(U8 *size=NULL)
|
|
||||||
{
|
{
|
||||||
|
//Remote must fill-in remote's chnl->tx_buf
|
||||||
|
//and remote's chnl->tx_size before calling.
|
||||||
LTChnl *chnl=Fs->rmt_chnl;
|
LTChnl *chnl=Fs->rmt_chnl;
|
||||||
if (!chnl || !chnl->type) return NULL;
|
if (!chnl || !chnl->type) return NULL;
|
||||||
RmtTxPkt(chnl,NULL,0,RMT_RQST_TX_BUF);
|
RmtTxPkt(chnl,NULL,0,RMT_RQST_TX_BUF);
|
||||||
return RmtRxBuf(chnl,size);
|
return RmtRxBuf(chnl);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void RmtRqstRxBuf(U1 *buf,U8 size)
|
public void RmtRqstRxBuf(U1 *src_local_buf,U8 size)
|
||||||
{
|
{ //Dst buf address is placed in remote's chnl->rx_buf
|
||||||
LTChnl *chnl=Fs->rmt_chnl;
|
LTChnl *chnl=Fs->rmt_chnl;
|
||||||
if (!chnl || !chnl->type) return;
|
if (!chnl || !chnl->type) return;
|
||||||
RmtTxPkt(chnl,NULL,0,RMT_RQST_RX_BUF);
|
RmtTxPkt(chnl,NULL,0,RMT_RQST_RX_BUF);
|
||||||
RmtTxBuf(chnl,buf,size);
|
RmtTxBuf(chnl,src_local_buf,size);
|
||||||
}
|
}
|
||||||
*************/
|
|
||||||
|
|
||||||
public void RmtRqstTxFile(I1 *dst_local_filename,I1 *src_remote_filename)
|
public void RmtRqstTxFile(I1 *dst_local_filename,I1 *src_remote_filename)
|
||||||
{
|
{
|
||||||
@@ -736,7 +748,8 @@ void TelnetGuestOpen(LTChnl *chnl)
|
|||||||
U8 i,cmd,p1,p2,rqst;
|
U8 i,cmd,p1,p2,rqst;
|
||||||
U1 *st,*st2;
|
U1 *st,*st2;
|
||||||
if (!chnl || !chnl->type) return;
|
if (!chnl || !chnl->type) return;
|
||||||
coutln "CTRL-ALT-C to exit";
|
Fs->local_chnl=chnl;
|
||||||
|
coutln "CTRL-ALT-B to break";
|
||||||
try
|
try
|
||||||
while (TRUE) {
|
while (TRUE) {
|
||||||
if (st2=RmtRxPutS(chnl,&rqst)) {
|
if (st2=RmtRxPutS(chnl,&rqst)) {
|
||||||
@@ -749,6 +762,12 @@ void TelnetGuestOpen(LTChnl *chnl)
|
|||||||
1<<MSG_KEY_DOWN|
|
1<<MSG_KEY_DOWN|
|
||||||
1<<MSG_CMD|
|
1<<MSG_CMD|
|
||||||
1<<MSG_KEY_UP);
|
1<<MSG_KEY_UP);
|
||||||
|
if (cmd==MSG_KEY_DOWN &&
|
||||||
|
p2&SCF_ALT && p2&SCF_CTRL &&
|
||||||
|
p1==CH_CTRLB) {
|
||||||
|
RmtSendMsg(chnl,0,0,0);
|
||||||
|
goto tel_exit;
|
||||||
|
}
|
||||||
RmtSendMsg(chnl,cmd,p1,p2);
|
RmtSendMsg(chnl,cmd,p1,p2);
|
||||||
break;
|
break;
|
||||||
case RMT_RQST_TX_FILE:
|
case RMT_RQST_TX_FILE:
|
||||||
@@ -761,13 +780,12 @@ void TelnetGuestOpen(LTChnl *chnl)
|
|||||||
RmtRxFile(chnl,st);
|
RmtRxFile(chnl,st);
|
||||||
Free(st);
|
Free(st);
|
||||||
break;
|
break;
|
||||||
/***********
|
|
||||||
case RMT_RQST_TX_BUF:
|
case RMT_RQST_TX_BUF:
|
||||||
|
RmtTxBuf(chnl,chnl->tx_buf,chnl->tx_size);
|
||||||
break;
|
break;
|
||||||
case RMT_RQST_RX_BUF:
|
case RMT_RQST_RX_BUF:
|
||||||
RmtRxBuf(chnl);
|
chnl->rx_buf=RmtRxBuf(chnl);
|
||||||
break;
|
break;
|
||||||
************/
|
|
||||||
case RMT_RQST_EXE_LOCAL:
|
case RMT_RQST_EXE_LOCAL:
|
||||||
st=RmtRxBuf(chnl);
|
st=RmtRxBuf(chnl);
|
||||||
ExecuteString(st);
|
ExecuteString(st);
|
||||||
@@ -786,11 +804,15 @@ void TelnetGuestOpen(LTChnl *chnl)
|
|||||||
}
|
}
|
||||||
catch
|
catch
|
||||||
Fs->catch_except=TRUE;
|
Fs->catch_except=TRUE;
|
||||||
|
tel_exit:
|
||||||
|
/******
|
||||||
for (i=0;i<5;i++) {
|
for (i=0;i<5;i++) {
|
||||||
chnl->PutChar(chnl,RMT_PKT_CLOSE);
|
chnl->PutChar(chnl,RMT_PKT_CLOSE);
|
||||||
chnl->PutChar(chnl,RMT_PKT_CLOSE);
|
chnl->PutChar(chnl,RMT_PKT_CLOSE);
|
||||||
Sleep(50);
|
Sleep(50);
|
||||||
}
|
}
|
||||||
|
******/
|
||||||
|
Fs->local_chnl=NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
ext[EXT_RMT_PUTCHAR]=&RmtTxPutChar;
|
ext[EXT_RMT_PUTCHAR]=&RmtTxPutChar;
|
||||||
|
|||||||
+4
-5
@@ -756,7 +756,7 @@ U8 SizeFlattenLTDirTree(LTDirEntry *tempm)
|
|||||||
{
|
{
|
||||||
U8 result=0;
|
U8 result=0;
|
||||||
while (tempm) {
|
while (tempm) {
|
||||||
result+=sizeof(LTDirEntry)-offset(LTDirEntry.start)+1;
|
result+=LT_DIR_ENTRY_SIZE+1;
|
||||||
if (tempm->attr & LT_ATTR_DIR)
|
if (tempm->attr & LT_ATTR_DIR)
|
||||||
result+=SizeFlattenLTDirTree(tempm->sub);
|
result+=SizeFlattenLTDirTree(tempm->sub);
|
||||||
tempm=tempm->next;
|
tempm=tempm->next;
|
||||||
@@ -770,7 +770,7 @@ U8 FillFlattenLTDirTree(LTDirEntry *tempm,U1 *dst)
|
|||||||
while (tempm) {
|
while (tempm) {
|
||||||
*dst++=1;
|
*dst++=1;
|
||||||
result++;
|
result++;
|
||||||
i=sizeof(LTDirEntry)-offset(LTDirEntry.start);
|
i=LT_DIR_ENTRY_SIZE;
|
||||||
MemCpy(dst,&tempm->start,i);
|
MemCpy(dst,&tempm->start,i);
|
||||||
dst+=i;
|
dst+=i;
|
||||||
result+=i;
|
result+=i;
|
||||||
@@ -790,7 +790,7 @@ public U1 *FlattenLTDirTree(LTDirEntry *tempm,U8 *size=NULL)
|
|||||||
U8 i=SizeFlattenLTDirTree(tempm);
|
U8 i=SizeFlattenLTDirTree(tempm);
|
||||||
U1 *buf=MAlloc(i);
|
U1 *buf=MAlloc(i);
|
||||||
FillFlattenLTDirTree(tempm,buf);
|
FillFlattenLTDirTree(tempm,buf);
|
||||||
if (*size) *size=i;
|
if (size) *size=i;
|
||||||
return buf;
|
return buf;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -801,7 +801,7 @@ U1 *DoUnflattenLTDirTree(U1 *src,LTDirEntry **tempm)
|
|||||||
if (*src++) {
|
if (*src++) {
|
||||||
tempm1=MAllocZ(sizeof(LTDirEntry));
|
tempm1=MAllocZ(sizeof(LTDirEntry));
|
||||||
*tempm=tempm1;
|
*tempm=tempm1;
|
||||||
i=sizeof(LTDirEntry)-offset(LTDirEntry.start);
|
i=LT_DIR_ENTRY_SIZE;
|
||||||
MemCpy(&tempm1->start,src,i);
|
MemCpy(&tempm1->start,src,i);
|
||||||
src+=i;
|
src+=i;
|
||||||
if (tempm1->attr & LT_ATTR_DIR)
|
if (tempm1->attr & LT_ATTR_DIR)
|
||||||
@@ -818,4 +818,3 @@ public LTDirEntry *UnflattenLTDirTree(U1 *src)
|
|||||||
DoUnflattenLTDirTree(src,&tempm);
|
DoUnflattenLTDirTree(src,&tempm);
|
||||||
return tempm;
|
return tempm;
|
||||||
}
|
}
|
||||||
| |||||||