/*------------------------------------------------------*/ void ReadLib (char *p) { lib *l; int n; if(n=LinkAddrStr(p)) { if(l=FindLib(n)) ListLib(l); else puts_pc("!NOT_FOUND\r\n"); } else puts_pc("!SYNTAX\r\n"); }
/* * AddOneLib - called when dynamic linker is adding a library. Unfortunately * we don't get told which library, so we just have to zip through the list * until we find one we don't know about yet. */ int AddOneLib( struct link_map *first_lmap ) { struct link_map lmap; struct link_map *dbg_lmap; int count = 0; lib_load_info *lli; dbg_lmap = first_lmap; while( dbg_lmap != NULL ) { if( !GetLinkMap( pid, dbg_lmap, &lmap ) ) break; lli = FindLib( (addr_off)lmap.l_ld ); if( lli == NULL ) { AddLib( &lmap ); ++count; } dbg_lmap = lmap.l_next; } return( count ); }
/*------------------------------------------------------*/ void LoadFromPc(char *p) { void InProg(void); int ReadPar(char *); char q[LINK_LEN],*r,*s,*ss[16]; int i,j,k; long y,z; lib *l; command *c,**cp; switch(*p) { case 'd': Lr=scanLLA(Lr,++p,null); if(!Lr) { j=0; switch(strscan(p,ss,',',16)) { case 2: j=atoi(ss[1]); case 1: if(l=FindLib(LinkAddrStr(ss[0]))) { copylib(l,Lr=makelib()); if(j) for(Lr->xc=Lr->x; --j && Lr->xc->next;) Lr->xc=Lr->xc->next; else Lr->x=Lr->xc=freecoord(Lr->x); Ungetch(REFRESH,0); } else puts_pc("!NOT_FOUND\r\n"); break; default: puts_pc("!SYNTAX\r\n"); break; } } break; case 'l': if(i=LinkAddrStr(++p)) { freelib(Lc); Lc=makelib(); Lc->ltype=LinkAddrType(i); Lc->n=LinkAddrN(i); } else InsertLib(&Lc); break; case 'M': if(sscanf(++p," %d,%04X,%04X,%s",&k,&i,&j,q)==4) { if(Mscan) /* znak, da je editor odprt ! */ if(Mscan->c->maxopt) { /* vrstica in obseg aktivna ? */ if(k) if(--k <= Mscan->c->maxopt) { Mscan->active = k; Refresh(); } break; } r=strchr(q,','); *r++=0; cp=NULL; if(!strcmp(q,"message")) cp=&CP; if(!strcmp(q,"gun")) cp=&GUN; if(!strcmp(q,"meteo")) cp=&METEO; if(!cp) break; /*......................................................................................*/ if(!*cp) new_command(cp); else{ c=*cp; do if(c->chk == j) *cp=c; else c=c->next; while(c != *cp); if((*cp)->chk != j) new_command(cp); } (*cp)->chk=j; c=*cp; s=(char *)c; i = sizeof(command) - sizeof(command *) - sizeof(int); while(i--) { sscanf(r,"%02X",&j); *s++ = j; ++r;++r; } c->chk *= -1; if(cp == &CP) Ungetch(GXM_MESSAGE_ID,0); if(cp == &GUN) Ungetch(GXM_GUN_ID,0); } break; case 'r': if(crest && (sscanf(++p," %ld %ld",&y,&z) == 2)) { add_coord(crest,0,y,z); crest->xc->refp=null; } else DeleteTask(DMRtimeout,RTC_task); break; case 'c': i=j=0; if(Lc) Lc=scanLLA(Lc,++p,eof); break; case 'g': if(Lc && (sscanf(++p," %s %d %d",q,&j,&k) == 3)) { for(i=0; Guns[i].name; ++i) if(!strcmp(Guns[i].name,q)) { Lc->gun=i; Lc->refd=j; Lc->powder=k; } } break; case 'a': if(Lc && (sscanf(++p,"%s %d",q,&j) == 2)) { for(i=0; Guns[Lc->gun].ammo[i]; ++i) if(!strcmp(Guns[Lc->gun].ammo[i],q)) { Lc->ammpcs[i]=j; r=strchr(p,'+'); s=strrchr(p,'+'); if(r) do Lc->ammpcs[i] += 0x1000; while(r++ != s); r=strchr(p,'-'); s=strrchr(p,'-'); if(r) do Lc->ammpcs[i] -= 0x1000; while(r++ != s); } } break; case 'p': if(sscanf(++p,"%d,%d",&i,&j) == 2) if(i<12 && j<4) { xyLCD(i,j); Ungetch(GXM_CURSOR_POS,0); } break; case 'm': LoadHexRec(p,'m',_MenuCode); break; case 'h': LoadHexRec(p,'h',_MenuHead); break; case 't': if(Lc) { ++p; ++p; Lc->txt=addtxt(Lc,p); } else LoadHexRec(p,'t',_TextCode); break; case 'T': if(sscanf(++p," %x %x",&i,&j)==2) { sprintf(q,"%04X\r\n",readTEMP(i,j)); puts_pc(q); } break; case 'f': if(ReadPar(++p)) break; i=strscan(p,ss,' ',16); if(i>=2) { sscanf(ss[0],"%lx",&eebott); sscanf(ss[1],"%lx",&eetop); if(eebott < (long)FLASHTOP) { puts_pc("!ILL_ADDRESS\r\n"); break; } if(eetop > (long)FLASHTOP+0x80000L) { puts_pc("!ILL_ADDRESS\r\n"); break; } if(i==3) { ss[2][8]=0; sprintf(pass,"%-8s",ss[2]); } if(CheckPass(&syspass)) { puts_pc("!NOT_ALLOWED\r\n"); break; } puts_pc("\7\r\nFLASH programming !!!\r\n"); wait(50); InProg(); puts_pc("Done\r\n"); } else puts_pc("!SYNTAX\r\n"); break; case 'b': k=sscanf(++p," %d %d",&i,&j); if(k) if(Baud(CHPC,i)) { if(k==2) Xonoff(j); break; } puts_pc("!SYNTAX\r\n"); break; case 'z': EnterZone(++p); break; case 'G': DeleteTask(ReadPc,RTC_task); Guns=ReadGunData(0,0,0,0,NULL); SetTask(ReadPc,0,RTC_task); break; default: puts_pc("!SYNTAX\r\n"); break; } }