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
+1095 -940

No files matched your search

Binary file not shown.
+42 -20
View File
@@ -35,7 +35,7 @@
#define RMT_RQST_EXE_LOCAL 0x06
#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};
U1Fifo *comm_Rx_fifos[5]={NULL,NULL,NULL,NULL,NULL};
@@ -454,7 +454,7 @@ rr_start:
RmtRxPktU1(chnl,&b1,JIFFY_FREQ/50,&esc);
rr_cont:
if (b==RMT_PKT_REQUEST) {
if (b1>RMT_RQST_MAX) {
if (b1>=RMT_RQST_MAX) {
if (b1==RMT_PKT_REQUEST && !esc)
goto rr_cont;
else
@@ -563,6 +563,8 @@ public U8 RmtGetMsg(LTChnl *chnl,I8 *p1,I8 *p2)
*p2=b[16]><(U8);
if (!cmd)
chnl->null_msg_jiffy=jiffies+JIFFY_FREQ/50;
else
chnl->null_msg_jiffy=0;
}
return cmd;
}
@@ -576,8 +578,10 @@ public void RmtSendMsg(LTChnl *chnl,U8 cmd,I8 p1,I8 p2)
b[8]><(U8)=p1;
b[16]><(U8)=p2;
RmtTxPkt(chnl,b,sizeof(U8)*3);
} else
} else {
RmtTxPkt(chnl,b,1);
chnl->null_msg_cnt++;
}
}
public void RmtPutCharSC(LTChnl *chnl,I8 ch,U8 sc)
@@ -614,11 +618,15 @@ public void RmtTxFile(LTChnl *chnl,I1 *filename,
{
U8 size;
U1 *buf;
LTDirEntry de;
if (!chnl || !chnl->type) return;
buf=ReadFile(filename,&size,NULL,raw);
if (buf) {
RmtTxBuf(chnl,buf,size);
Free(buf);
if (FindFile(filename,&de)) {
buf=ReadFile(filename,&size,NULL,raw);
if (buf) {
RmtTxBuf(chnl,&de.start,LT_DIR_ENTRY_SIZE);
RmtTxBuf(chnl,buf,size);
Free(buf);
}
}
}
@@ -626,12 +634,16 @@ public U8 RmtRxFile(LTChnl *chnl,I1 *filename,
BoolU4 raw=TRUE)
{
U8 size;
U1 *buf;
U1 *buf,*buf1;
LTDirEntry *de;
if (!chnl || !chnl->type) return 0;
buf1=RmtRxBuf(chnl);
de=buf1-offset(LTDirEntry.start);
if (buf=RmtRxBuf(chnl,&size)) {
WriteFile(filename,buf,size,0,0,raw);
WriteFile(filename,buf,size,de->datetime,de->attr,raw);
Free(buf);
}
Free(buf1);
return size;
}
@@ -676,23 +688,23 @@ public I1 *RmtRxPutS(LTChnl *chnl,U8 *rqst=NULL)
return buf;
}
/***************
public U1 *RmtRqstTxBuf(U8 *size=NULL)
public U1 *RmtRqstTxBuf()
{
//Remote must fill-in remote's chnl->tx_buf
//and remote's chnl->tx_size before calling.
LTChnl *chnl=Fs->rmt_chnl;
if (!chnl || !chnl->type) return NULL;
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;
if (!chnl || !chnl->type) return;
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)
{
@@ -736,7 +748,8 @@ void TelnetGuestOpen(LTChnl *chnl)
U8 i,cmd,p1,p2,rqst;
U1 *st,*st2;
if (!chnl || !chnl->type) return;
coutln "CTRL-ALT-C to exit";
Fs->local_chnl=chnl;
coutln "CTRL-ALT-B to break";
try
while (TRUE) {
if (st2=RmtRxPutS(chnl,&rqst)) {
@@ -749,6 +762,12 @@ void TelnetGuestOpen(LTChnl *chnl)
1<<MSG_KEY_DOWN|
1<<MSG_CMD|
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);
break;
case RMT_RQST_TX_FILE:
@@ -761,13 +780,12 @@ void TelnetGuestOpen(LTChnl *chnl)
RmtRxFile(chnl,st);
Free(st);
break;
/***********
case RMT_RQST_TX_BUF:
RmtTxBuf(chnl,chnl->tx_buf,chnl->tx_size);
break;
case RMT_RQST_RX_BUF:
RmtRxBuf(chnl);
chnl->rx_buf=RmtRxBuf(chnl);
break;
************/
case RMT_RQST_EXE_LOCAL:
st=RmtRxBuf(chnl);
ExecuteString(st);
@@ -786,11 +804,15 @@ void TelnetGuestOpen(LTChnl *chnl)
}
catch
Fs->catch_except=TRUE;
tel_exit:
/******
for (i=0;i<5;i++) {
chnl->PutChar(chnl,RMT_PKT_CLOSE);
chnl->PutChar(chnl,RMT_PKT_CLOSE);
Sleep(50);
}
******/
Fs->local_chnl=NULL;
}
ext[EXT_RMT_PUTCHAR]=&RmtTxPutChar;
+4 -5
View File
@@ -756,7 +756,7 @@ U8 SizeFlattenLTDirTree(LTDirEntry *tempm)
{
U8 result=0;
while (tempm) {
result+=sizeof(LTDirEntry)-offset(LTDirEntry.start)+1;
result+=LT_DIR_ENTRY_SIZE+1;
if (tempm->attr & LT_ATTR_DIR)
result+=SizeFlattenLTDirTree(tempm->sub);
tempm=tempm->next;
@@ -770,7 +770,7 @@ U8 FillFlattenLTDirTree(LTDirEntry *tempm,U1 *dst)
while (tempm) {
*dst++=1;
result++;
i=sizeof(LTDirEntry)-offset(LTDirEntry.start);
i=LT_DIR_ENTRY_SIZE;
MemCpy(dst,&tempm->start,i);
dst+=i;
result+=i;
@@ -790,7 +790,7 @@ public U1 *FlattenLTDirTree(LTDirEntry *tempm,U8 *size=NULL)
U8 i=SizeFlattenLTDirTree(tempm);
U1 *buf=MAlloc(i);
FillFlattenLTDirTree(tempm,buf);
if (*size) *size=i;
if (size) *size=i;
return buf;
}
@@ -801,7 +801,7 @@ U1 *DoUnflattenLTDirTree(U1 *src,LTDirEntry **tempm)
if (*src++) {
tempm1=MAllocZ(sizeof(LTDirEntry));
*tempm=tempm1;
i=sizeof(LTDirEntry)-offset(LTDirEntry.start);
i=LT_DIR_ENTRY_SIZE;
MemCpy(&tempm1->start,src,i);
src+=i;
if (tempm1->attr & LT_ATTR_DIR)
@@ -818,4 +818,3 @@ public LTDirEntry *UnflattenLTDirTree(U1 *src)
DoUnflattenLTDirTree(src,&tempm);
return tempm;
}
+1 -2
View File
@@ -413,8 +413,8 @@ void InputFilterTask()
I1 *st;
TssCmdStruct *tempc,*tempc1;
BoolU4 old_filter;
InitUserTask;
Preempt(OFF);
InitUserTask;
Bts(&Fs->task_flags,TSSf_INPUT_FILTER_TASK);
old_filter=Bts(&Fs->parent_tss->task_flags,TSSf_FILTER_INPUT);
while (TRUE) {
@@ -1040,4 +1040,3 @@ public void PressAKey()
PutSysText("ST_PRESS_A_KEY");
GetKey;
}
Binary file not shown.
+3
View File
@@ -1,5 +1,8 @@
$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$
* Unmask IRQ's during mouse polling. Might have side-effects.
+11 -3
View File
@@ -1462,6 +1462,10 @@ class LTChnl
U8 port;
U8 baud;
U8 null_msg_jiffy;
U8 null_msg_cnt;
U8 tx_size;
U1 *tx_buf;
U1 *rx_buf;
void PutChar(LTChnl *chnl,U1 b);
U1 GetChar(LTChnl *chnl);
BoolU4 ScanChar(LTChnl *chnl,U1 *ch);
@@ -1609,6 +1613,7 @@ public class TssStruct
U4 answers_displayed;
TssStruct *dbg_tss;
TssStruct *popup_tss;
LTChnl *local_chnl;
LTChnl *rmt_chnl;
U4 user_aux0;
U4 user_aux1;
@@ -1685,10 +1690,12 @@ public class MachineRegsStruct
#define CH_LINE_FEED 0x0A
#define CH_FORM_FEED 0x0C
#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_SHIFT_SPACE 31
#define CH_SPACE 32
#define CH_SHIFT_SPACE 0x1F
#define CH_SPACE 0x20
#define SC_CR 0x1C
#define SC_SHIFT 0x2A
@@ -2328,6 +2335,7 @@ class PasswordStruct
#define FUf_PUBLIC 8
#define FUf_MAP 9
#define FUf_JUST_DIRS 10
#define FUf_JUST_TEXT_FILES 11
class FlagsStruct
{
-1
View File
@@ -544,4 +544,3 @@ U8 EndTask()
*free_gdt_list=my_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];
if (!ch) {
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)
WBlks(p,buf+j*BLK_SIZE,
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;
} else if (ptr->attr & LT_ATTR_DELETED) {
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,
p->data+cur_dir_cluster*p->spc+j,1,FALSE);
written=TRUE;
@@ -1556,7 +1556,7 @@ BoolU4 NewLTDirEntry2(LTPartition *p,I1 *cur_dir,LTDirEntry *de,BoolU4 free_old_
FreeLTClusters(p,ptr->cluster,
(ptr->size+p->spc*BLK_SIZE-1)/(p->spc*BLK_SIZE),FALSE);
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,
p->data+cur_dir_cluster*p->spc+j,1,FALSE);
break;
@@ -1742,7 +1742,7 @@ LTDirEntry *FindLTFiles(I1 *wild,U8 *fuf_flags)
break;
else if (!(ptr->attr & LT_ATTR_DELETED)) {
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]!='.') {
tempm->next=result;
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);
}
+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_DBG: DU4 ?;
TSS_POPUP: DU4 ?;
TSS_LOCALCHNL: DU4 ?;
TSS_RMTCHNL: DU4 ?;
TSS_USER_AUX0: DU4 ?;
TSS_USER_AUX1: DU4 ?;
Binary file not shown.
+165 -39
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)
{
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;
list=list->next;
}
@@ -185,19 +187,23 @@ void MergeChkList(LTDirEntry *m1,LTDirEntry *m2,U8 *fuf_flags,U8 *df_flags)
I8 i;
LTDirEntry *tempm2;
while (m1 && !(*df_flags & DF_ABORT_ALL_FILES)) {
tempm2=MCFindMatch(m1,m2);
if (!tempm2)
coutln "Does Not Exist:",m1->full_name;
else {
if (m1->attr & LT_ATTR_DIR)
MergeChkList(m1->sub,tempm2->sub,fuf_flags,df_flags);
if (!Bt(fuf_flags,FUf_JUST_TEXT_FILES) ||
IsTextFile(m1->name) ||
m1->attr & LT_ATTR_DIR) {
tempm2=MCFindMatch(m1,m2);
if (!tempm2)
coutln "Does Not Exist:",m1->full_name;
else {
i=m1->datetime-tempm2->datetime;
if (AbsI8(i)>LTDATE_FREQ*2) { //Filedates can shift due to conversion
coutln m1->full_name;
if (Bt(fuf_flags,FUf_DIFF)) {
if (IsTextFile(m1->full_name))
*df_flags=Diff(tempm2->full_name,m1->full_name,*df_flags);
if (m1->attr & LT_ATTR_DIR)
MergeChkList(m1->sub,tempm2->sub,fuf_flags,df_flags);
else {
i=m1->datetime-tempm2->datetime;
if (AbsI8(i)>LTDATE_FREQ*2) { //Filedates can shift due to conversion
coutln m1->full_name;
if (Bt(fuf_flags,FUf_DIFF)) {
if (IsTextFile(m1->full_name))
*df_flags=Diff(tempm2->full_name,m1->full_name,*df_flags);
}
}
}
}
@@ -206,9 +212,13 @@ void MergeChkList(LTDirEntry *m1,LTDirEntry *m2,U8 *fuf_flags,U8 *df_flags)
}
}
public void MergeChk(I1 *dst_mask,I1 *src_mask,I1 *flags="+r")
//r=recurse
//d=diff
public void MergeChk(
I1 *dst_mask="/LT/*",
I1 *src_mask="/LT/*",
I1 *flags="+r")
//+r=recurse
//+d=diff
//+t=just text files
{
U8 df_flags=0;
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;
LTDirEntry *tempm2;
I1 *full_name,*c1,*c2;
while (m1 && !(*df_flags & DF_ABORT_ALL_FILES)) {
tempm2=MCFindMatch(m1,m2);
if (!tempm2)
coutln "Does Not Exist:",m1->name;
else {
if (m1->attr & LT_ATTR_DIR)
CommMergeChkList(port,m1->sub,tempm2->sub,fuf_flags,df_flags);
else {
i=m1->datetime-tempm2->datetime;
if (AbsI8(i)>LTDATE_FREQ*2) { //Filedates can shift due to conversion
coutln m1->name;
if (Bt(fuf_flags,FUf_DIFF)) {
if (IsTextFile(m1->name))
*df_flags=Diff(tempm2->name,m1->name,*df_flags);
if (!Bt(fuf_flags,FUf_JUST_TEXT_FILES) ||
IsTextFile(m1->name) ||
m1->attr & LT_ATTR_DIR) {
tempm2=MCFindMatch(m1,m2);
if (!tempm2) {
coutln "Does Not Exist on Remote:",m1->name;
full_name=MAlloc(StrLen(cur_dir)+1+StrLen(m1->name)+1+1);
StrCpy(full_name,cur_dir);
StrCat(full_name,m1->name);
} 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;
if (AbsI8(i)>LTDATE_FREQ*2) { //Filedates can shift due to conversion
if (i<0) {
c1=red_st;
c2=green_st;
} 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;
}
}
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$
public void CommMergeChk(U8 port,I1 *dst_mask,I1 *src_mask,I1 *flags="+r")
//r=recurse
//d=diff
I1 *Progress1CB(Ltf *l,Ltf *user_data,LtfEntry *ll,TssStruct *mem_tss)
{
I1 *st=MAlloc(16,mem_tss);
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;
LTDirEntry *tempm1=NULL,*tempm2=NULL;
FlagsStruct f;
TssStruct *tss;
I1 *st,*st2;
Ltf *aux;
LtfEntry *ll;
if (!chnl || !chnl->type) return;
GetFFlags(&f,"ST_FILE_UTIL_FLAGS",flags);
coutln "WARNING:This is based strictly on file dates.";
tempm1=FindFiles(src_mask,&f.on);
tempm2=FindFiles(dst_mask,&f.on);
CommMergeChkList(port,tempm1,tempm2,&f.on,&df_flags);
DelLTDirList(tempm1);
DelLTDirList(tempm2);
if (tempm1=FindFiles(src_mask,&f.on)) {
tss=Spawn(&UserCmdLine);
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(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);
}
}