LTCD_060720.ISO

This commit is contained in:
Terry A. Davis authored and minexew committed 2018-09-08 21:45:18 +02:00
1 parent f86e69648b
commit d14bbc24f9
15 files changed
+1074 -919

No files matched your search

BIN
View File
Binary file not shown.
Binary file not shown.
+38 -16
View File
@@ -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
View File
@@ -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;
} }
+1 -2
View File
@@ -413,8 +413,8 @@ void InputFilterTask()
I1 *st; I1 *st;
TssCmdStruct *tempc,*tempc1; TssCmdStruct *tempc,*tempc1;
BoolU4 old_filter; BoolU4 old_filter;
InitUserTask;
Preempt(OFF); Preempt(OFF);
InitUserTask;
Bts(&Fs->task_flags,TSSf_INPUT_FILTER_TASK); Bts(&Fs->task_flags,TSSf_INPUT_FILTER_TASK);
old_filter=Bts(&Fs->parent_tss->task_flags,TSSf_FILTER_INPUT); old_filter=Bts(&Fs->parent_tss->task_flags,TSSf_FILTER_INPUT);
while (TRUE) { while (TRUE) {
@@ -1040,4 +1040,3 @@ public void PressAKey()
PutSysText("ST_PRESS_A_KEY"); PutSysText("ST_PRESS_A_KEY");
GetKey; GetKey;
} }
Binary file not shown.
+3
View File
@@ -1,5 +1,8 @@
$WW,1$ $WW,1$
$IV,1$----07/19/06 21:44:00----$IV,0$
* Worked on serial port null modem support. You can network two computers and do a telnet type thing. There is now a $LK,"RmtMergeChk","MN:RmtMergeChk"$() routine which will sync two computers. One has to have a window running $LK,"TelnetHostOpen","MN:TelnetHostOpen"$() which you pass a channel from $LK,"CommOpen8N1","MN:CommOpen8N1"$().
$IV,1$----07/18/06 10:25:00----$IV,0$ $IV,1$----07/18/06 10:25:00----$IV,0$
* Unmask IRQ's during mouse polling. Might have side-effects. * Unmask IRQ's during mouse polling. Might have side-effects.
+11 -3
View File
@@ -1462,6 +1462,10 @@ class LTChnl
U8 port; U8 port;
U8 baud; U8 baud;
U8 null_msg_jiffy; U8 null_msg_jiffy;
U8 null_msg_cnt;
U8 tx_size;
U1 *tx_buf;
U1 *rx_buf;
void PutChar(LTChnl *chnl,U1 b); void PutChar(LTChnl *chnl,U1 b);
U1 GetChar(LTChnl *chnl); U1 GetChar(LTChnl *chnl);
BoolU4 ScanChar(LTChnl *chnl,U1 *ch); BoolU4 ScanChar(LTChnl *chnl,U1 *ch);
@@ -1609,6 +1613,7 @@ public class TssStruct
U4 answers_displayed; U4 answers_displayed;
TssStruct *dbg_tss; TssStruct *dbg_tss;
TssStruct *popup_tss; TssStruct *popup_tss;
LTChnl *local_chnl;
LTChnl *rmt_chnl; LTChnl *rmt_chnl;
U4 user_aux0; U4 user_aux0;
U4 user_aux1; U4 user_aux1;
@@ -1685,10 +1690,12 @@ public class MachineRegsStruct
#define CH_LINE_FEED 0x0A #define CH_LINE_FEED 0x0A
#define CH_FORM_FEED 0x0C #define CH_FORM_FEED 0x0C
#define CH_CR 0x0D #define CH_CR 0x0D
#define CH_ESC 27 #define CH_ESC 0x1B
#define CH_CTRLB 0x02
#define CH_CTRLE 0x05
#define CH_CTRLQ 0x11 #define CH_CTRLQ 0x11
#define CH_SHIFT_SPACE 31 #define CH_SHIFT_SPACE 0x1F
#define CH_SPACE 32 #define CH_SPACE 0x20
#define SC_CR 0x1C #define SC_CR 0x1C
#define SC_SHIFT 0x2A #define SC_SHIFT 0x2A
@@ -2328,6 +2335,7 @@ class PasswordStruct
#define FUf_PUBLIC 8 #define FUf_PUBLIC 8
#define FUf_MAP 9 #define FUf_MAP 9
#define FUf_JUST_DIRS 10 #define FUf_JUST_DIRS 10
#define FUf_JUST_TEXT_FILES 11
class FlagsStruct class FlagsStruct
{ {
-1
View File
@@ -544,4 +544,3 @@ U8 EndTask()
*free_gdt_list=my_fs; *free_gdt_list=my_fs;
return tempt->fs; return tempt->fs;
} }
+4 -5
View File
@@ -1499,7 +1499,7 @@ BoolU4 NewLTDirEntry2(LTPartition *p,I1 *cur_dir,LTDirEntry *de,BoolU4 free_old_
ch=ptr->name[0]; ch=ptr->name[0];
if (!ch) { if (!ch) {
if (written) break; if (written) break;
MemCpy(&ptr->attr,&de->attr,LT_DIR_ENTRY_SIZE); MemCpy(&ptr->start,&de->start,LT_DIR_ENTRY_SIZE);
if ((i+1)*LT_DIR_ENTRY_SIZE+j*BLK_SIZE<dir_size) if ((i+1)*LT_DIR_ENTRY_SIZE+j*BLK_SIZE<dir_size)
WBlks(p,buf+j*BLK_SIZE, WBlks(p,buf+j*BLK_SIZE,
p->data+cur_dir_cluster*p->spc+j,1,FALSE); p->data+cur_dir_cluster*p->spc+j,1,FALSE);
@@ -1545,7 +1545,7 @@ BoolU4 NewLTDirEntry2(LTPartition *p,I1 *cur_dir,LTDirEntry *de,BoolU4 free_old_
break; break;
} else if (ptr->attr & LT_ATTR_DELETED) { } else if (ptr->attr & LT_ATTR_DELETED) {
if (!written) { if (!written) {
MemCpy(&ptr->attr,&de->attr,LT_DIR_ENTRY_SIZE); MemCpy(&ptr->start,&de->start,LT_DIR_ENTRY_SIZE);
WBlks(p,buf+j*BLK_SIZE, WBlks(p,buf+j*BLK_SIZE,
p->data+cur_dir_cluster*p->spc+j,1,FALSE); p->data+cur_dir_cluster*p->spc+j,1,FALSE);
written=TRUE; written=TRUE;
@@ -1556,7 +1556,7 @@ BoolU4 NewLTDirEntry2(LTPartition *p,I1 *cur_dir,LTDirEntry *de,BoolU4 free_old_
FreeLTClusters(p,ptr->cluster, FreeLTClusters(p,ptr->cluster,
(ptr->size+p->spc*BLK_SIZE-1)/(p->spc*BLK_SIZE),FALSE); (ptr->size+p->spc*BLK_SIZE-1)/(p->spc*BLK_SIZE),FALSE);
if (!written) { if (!written) {
MemCpy(&ptr->attr,&de->attr,LT_DIR_ENTRY_SIZE); MemCpy(&ptr->start,&de->start,LT_DIR_ENTRY_SIZE);
WBlks(p,buf+j*BLK_SIZE, WBlks(p,buf+j*BLK_SIZE,
p->data+cur_dir_cluster*p->spc+j,1,FALSE); p->data+cur_dir_cluster*p->spc+j,1,FALSE);
break; break;
@@ -1742,7 +1742,7 @@ LTDirEntry *FindLTFiles(I1 *wild,U8 *fuf_flags)
break; break;
else if (!(ptr->attr & LT_ATTR_DELETED)) { else if (!(ptr->attr & LT_ATTR_DELETED)) {
tempm=MAllocZ(sizeof(LTDirEntry)); tempm=MAllocZ(sizeof(LTDirEntry));
MemCpy(&tempm->attr,&ptr->attr,LT_DIR_ENTRY_SIZE); MemCpy(&tempm->start,&ptr->start,LT_DIR_ENTRY_SIZE);
if (Bt(fuf_flags,FUf_RECURSE) && tempm->attr & LT_ATTR_DIR && tempm->name[0]!='.') { if (Bt(fuf_flags,FUf_RECURSE) && tempm->attr & LT_ATTR_DIR && tempm->name[0]!='.') {
tempm->next=result; tempm->next=result;
result=tempm; result=tempm;
@@ -1981,4 +1981,3 @@ void DirLT(I1 *wild,BoolU4 full)
} }
} }
+1
View File
@@ -1012,3 +1012,4 @@ void WriteCDImage(I1 drive,I1 *in_name)
Free(in_name3); Free(in_name3);
} }
+863 -865
View File
File diff suppressed because it is too large. Load diff
+1
View File
@@ -181,6 +181,7 @@ TSS_ANSWERS_TYPES: DU4 8 DUP(?);
TSS_ANSWERS_DISPLAYED: DU4 ?; TSS_ANSWERS_DISPLAYED: DU4 ?;
TSS_DBG: DU4 ?; TSS_DBG: DU4 ?;
TSS_POPUP: DU4 ?; TSS_POPUP: DU4 ?;
TSS_LOCALCHNL: DU4 ?;
TSS_RMTCHNL: DU4 ?; TSS_RMTCHNL: DU4 ?;
TSS_USER_AUX0: DU4 ?; TSS_USER_AUX0: DU4 ?;
TSS_USER_AUX1: DU4 ?; TSS_USER_AUX1: DU4 ?;
Binary file not shown.
+148 -22
View File
@@ -173,7 +173,9 @@ public U8 FileOccurrences(I1 *pattern,I1 *wild=TEXT_FILE_MASK,I1 *flags="+r+i+l"
LTDirEntry MCFindMatch(LTDirEntry *pattern,LTDirEntry *list) LTDirEntry MCFindMatch(LTDirEntry *pattern,LTDirEntry *list)
{ {
while (list) { while (list) {
if (!StrCmp(pattern->name,list->name) && pattern->attr==list->attr) if (!StrCmp(pattern->name,list->name) &&
(pattern->attr&~LT_ATTR_RESIDENT)==
list->attr&~LT_ATTR_RESIDENT)
return list; return list;
list=list->next; list=list->next;
} }
@@ -185,6 +187,9 @@ void MergeChkList(LTDirEntry *m1,LTDirEntry *m2,U8 *fuf_flags,U8 *df_flags)
I8 i; I8 i;
LTDirEntry *tempm2; LTDirEntry *tempm2;
while (m1 && !(*df_flags & DF_ABORT_ALL_FILES)) { while (m1 && !(*df_flags & DF_ABORT_ALL_FILES)) {
if (!Bt(fuf_flags,FUf_JUST_TEXT_FILES) ||
IsTextFile(m1->name) ||
m1->attr & LT_ATTR_DIR) {
tempm2=MCFindMatch(m1,m2); tempm2=MCFindMatch(m1,m2);
if (!tempm2) if (!tempm2)
coutln "Does Not Exist:",m1->full_name; coutln "Does Not Exist:",m1->full_name;
@@ -202,13 +207,18 @@ void MergeChkList(LTDirEntry *m1,LTDirEntry *m2,U8 *fuf_flags,U8 *df_flags)
} }
} }
} }
}
m1=m1->next; m1=m1->next;
} }
} }
public void MergeChk(I1 *dst_mask,I1 *src_mask,I1 *flags="+r") public void MergeChk(
//r=recurse I1 *dst_mask="/LT/*",
//d=diff I1 *src_mask="/LT/*",
I1 *flags="+r")
//+r=recurse
//+d=diff
//+t=just text files
{ {
U8 df_flags=0; U8 df_flags=0;
LTDirEntry *tempm1=NULL,*tempm2=NULL; LTDirEntry *tempm1=NULL,*tempm2=NULL;
@@ -223,48 +233,164 @@ public void MergeChk(I1 *dst_mask,I1 *src_mask,I1 *flags="+r")
} }
I1 *red_st="$$FG RED$$",*green_st="$$FG GREEN$$";
void CommMergeChkList(U8 port,LTDirEntry *m1,LTDirEntry *m2,U8 *fuf_flags,U8 *df_flags) void RmtMergeChkList(TssStruct *tss,LTChnl *chnl,LTDirEntry *m1,LTDirEntry *m2,U8 *fuf_flags,U8 *df_flags,I1 *cur_dir)
{ {
I8 i; I8 i;
LTDirEntry *tempm2; LTDirEntry *tempm2;
I1 *full_name,*c1,*c2;
while (m1 && !(*df_flags & DF_ABORT_ALL_FILES)) { while (m1 && !(*df_flags & DF_ABORT_ALL_FILES)) {
if (!Bt(fuf_flags,FUf_JUST_TEXT_FILES) ||
IsTextFile(m1->name) ||
m1->attr & LT_ATTR_DIR) {
tempm2=MCFindMatch(m1,m2); tempm2=MCFindMatch(m1,m2);
if (!tempm2) if (!tempm2) {
coutln "Does Not Exist:",m1->name; coutln "Does Not Exist on Remote:",m1->name;
else { full_name=MAlloc(StrLen(cur_dir)+1+StrLen(m1->name)+1+1);
if (m1->attr & LT_ATTR_DIR) StrCpy(full_name,cur_dir);
CommMergeChkList(port,m1->sub,tempm2->sub,fuf_flags,df_flags); StrCat(full_name,m1->name);
else { } else {
full_name=MAlloc(StrLen(cur_dir)+1+StrLen(tempm2->name)+1+1);
StrCpy(full_name,cur_dir);
StrCat(full_name,tempm2->name);
}
if (m1->attr & LT_ATTR_DIR) {
if (!tempm2) {
if (PopUpNoYes("MkDir on Remote?")) {
XTalk(tss,"MkDir(\"%s\");\r",full_name);
chnl->null_msg_cnt=0;
while (chnl->null_msg_cnt<2)
SwapInNext;
}
}
StrCat(full_name,"/");
RmtMergeChkList(tss,chnl,m1->sub,tempm2->sub,fuf_flags,df_flags,full_name);
} else {
if (tempm2) {
i=m1->datetime-tempm2->datetime; i=m1->datetime-tempm2->datetime;
if (AbsI8(i)>LTDATE_FREQ*2) { //Filedates can shift due to conversion if (AbsI8(i)>LTDATE_FREQ*2) { //Filedates can shift due to conversion
coutln m1->name; if (i<0) {
if (Bt(fuf_flags,FUf_DIFF)) { c1=red_st;
if (IsTextFile(m1->name)) c2=green_st;
*df_flags=Diff(tempm2->name,m1->name,*df_flags); } else {
c1=green_st;
c2=red_st;
}
PrintF("%s%h2D %h4T$$FG$$ %s%h2D %h4T$$FG$$\r\n %s\r\n\r\n",
c1,m1->datetime.date,m1->datetime.time,
c2,tempm2->datetime.date,tempm2->datetime.time,
m1->full_name);
if (PopUpNoYes("Sync?")) {
if (i<0)
XTalk(tss,"RmtRqstRxFile(\"%s\",\"%s\");\r",
full_name,m1->full_name);
else
XTalk(tss,"RmtRqstTxFile(\"%s\",\"%s\");\r",
full_name,m1->full_name);
chnl->null_msg_cnt=0;
while (chnl->null_msg_cnt<2)
SwapInNext;
}
}
} else {
if (PopUpNoYes("Sync?")) {
XTalk(tss,"RmtRqstTxFile(\"%s\",\"%s\");\r",
full_name,m1->full_name);
chnl->null_msg_cnt=0;
while (chnl->null_msg_cnt<2)
SwapInNext;
} }
} }
} }
Free(full_name);
} }
m1=m1->next; m1=m1->next;
} }
} }
public void RmtMergeChkHost(I1 *dst_mask="/LT/*",I1 *flags="+r")
{
LTDirEntry *tempm;
U8 size;
U1 *buf;
FlagsStruct f;
GetFFlags(&f,"ST_FILE_UTIL_FLAGS",flags);
tempm=FindFiles(dst_mask,&f.on);
buf=FlattenLTDirTree(tempm,&size);
RmtRqstRxBuf(buf,size);
Free(buf);
DelLTDirList(tempm);
}
//$BK,1$Not Done$BK,0$ I1 *Progress1CB(Ltf *l,Ltf *user_data,LtfEntry *ll,TssStruct *mem_tss)
public void CommMergeChk(U8 port,I1 *dst_mask,I1 *src_mask,I1 *flags="+r") {
//r=recurse I1 *st=MAlloc(16,mem_tss);
//d=diff SPrintF(st,"%08X",progress1);
return st;
}
public void RmtMergeChk(LTChnl *chnl,
I1 *dst_mask="/LT/*",
I1 *src_mask="/LT/*",
I1 *flags="+r+t")
//+r=recurse
//+d=diff
//+t=Just text files
{ {
U8 df_flags=0; U8 df_flags=0;
LTDirEntry *tempm1=NULL,*tempm2=NULL; LTDirEntry *tempm1=NULL,*tempm2=NULL;
FlagsStruct f; FlagsStruct f;
TssStruct *tss;
I1 *st,*st2;
Ltf *aux;
LtfEntry *ll;
if (!chnl || !chnl->type) return;
GetFFlags(&f,"ST_FILE_UTIL_FLAGS",flags); GetFFlags(&f,"ST_FILE_UTIL_FLAGS",flags);
coutln "WARNING:This is based strictly on file dates."; coutln "WARNING:This is based strictly on file dates.";
tempm1=FindFiles(src_mask,&f.on); if (tempm1=FindFiles(src_mask,&f.on)) {
tempm2=FindFiles(dst_mask,&f.on); tss=Spawn(&UserCmdLine);
CommMergeChkList(port,tempm1,tempm2,&f.on,&df_flags); while (!Bt(&tss->task_flags,TSSf_IDLE))
SwapInNext;
tss->window_top=Fs->window_top;
tss->window_bottom=(Fs->window_top+Fs->window_bottom)>>1-1;
Fs-> window_top=tss->window_bottom+3;
tss->window_right=Fs->window_right;
tss->window_left=Fs->window_left;
WindowToTop(Fs);
XTalk(tss,"TelnetGuestOpen(0x%08X);\r",chnl);
aux=tss->aux_ltf;
LtfPutS(aux,"$$CM+BY,0,0$$");
ll=LtfPutS(aux,"$$TX+DC+RD+LX+IV,\"00000000\"$$");
ll->display_cb=&Progress1CB;
XTalk(tss,"RmtMergeChkHost(\"%s\",\"%s\");\r",dst_mask,flags);
chnl->null_msg_cnt=0;
while (chnl->null_msg_cnt<2)
SwapInNext;
tempm2=UnflattenLTDirTree(chnl->rx_buf);
st =MAlloc(StrLen(dst_mask)+3);
st2=MAlloc(StrLen(dst_mask)+3);
StrCpy(st,dst_mask);
RemoveLastSeg(st,"/",st2);
if (!*st) {
Free(st);
st=NewString("./");
} else
StrCat(st,"/");
RmtMergeChkList(tss,chnl,tempm1,tempm2,&f.on,&df_flags,st);
Free(st);
Free(st2);
DelLTDirList(tempm1); DelLTDirList(tempm1);
DelLTDirList(tempm2); DelLTDirList(tempm2);
XTalkString(tss,"Msg(MSG_KEY_DOWN,CH_CTRLB,SCF_CTRL+SCF_ALT);");
Fs->window_top=tss->window_top;
Sleep(250); //allow shutdown of Guest channel
Kill(tss);
}
} }