void process_stoptrace(void) { struct lwp *l = curlwp; struct proc *p = l->l_proc, *pp; mutex_enter(proc_lock); mutex_enter(p->p_lock); pp = p->p_pptr; if (pp->p_pid == 1) { CLR(p->p_slflag, PSL_SYSCALL); /* XXXSMP */ mutex_exit(p->p_lock); mutex_exit(proc_lock); return; } p->p_xstat = SIGTRAP; proc_stop(p, 1, SIGSTOP); mutex_exit(proc_lock); /* * Call issignal() once only, to have it take care of the * pending stop. Signal processing will take place as usual * from userret(). */ KERNEL_UNLOCK_ALL(l, &l->l_biglocks); (void)issignal(l); mutex_exit(p->p_lock); KERNEL_LOCK(l->l_biglocks, l); }
void calckoeff (asRecPtr r,float *A,float *B) /*********** * Describe : подсчет коэффициентов * Params : asRecPtr r * : float *A - 1 множ. * : float *B - 2 множ. * Return : void * Call : ***********/ { float Z=0,T=0; if (isspectrum(r)) /* если спектр */ Z = (float) r->mnoj1+r->mnoj; else Z = (float) r->mnoj1; if ((modenum(r)==1)||(modenum(r)==3)) /* если вход усилителя заряда */ T = (float) r->kdbch; if ((modenum(r)==0)||(modenum(r)==2)) /* если линейный вход */ T = (float) r->kdbln; if (issignal(r)) /* если сигнал */ *B = (float) -128; if (isspectrum(r)&&islinear(r)) /* если спектр и масштаб линейный */ *B = (float) 0; if (isspectrum(r)&&islogariphm(r)) /* если спектр и масштаб логарифм. */ *B = (float) 4*Z+T+14; if (islogariphm(r)) /* если масштаб логарифм. */ *A = (float) .25; else /* если масштаб линейный */ if ((modenum(r)==1)||(modenum(r)==3)) /* при входе усилителя заряда */ *A = (float) (7500/(float)r->kofch)*exp(Z*log(10)/20); else /* при линейном входе */ *A = (float) (7500/(float)r->kofln)*exp(Z*log(10)/20); }
asRecPtr huge *readmemory (asHeadPtr *hdr,void (* func)(double)) /*********** * Describe : Функция чтения памяти высокого уровня * Params : asHeadPtr *hdr - указ. на указ. на asHeader * : void (* func)(double) - функция для отображения считывания, ей * : передаем процент считанной информации * Return : asRecPtr * - массив указателей на записи в памяти * Call : getdump,numrec,addr ***********/ { /* */ uint last,j,i,n,off; /* */ long size; /* */ byte huge *f_s,huge *s_s; asRecPtr huge *rec = NULL; /* массив указ. */ static byte tmp[2048]; /* на запись */ *hdr = (asHeadPtr) getdump (&size,func); /* принимаем */ if (*hdr==NULL) { printf ("\n Error in readmemory 1: No enough memory! "); abort (); } rec = (asRecPtr huge *) farcalloc ((*hdr)->numrec-1,sizeof(asRecPtr)); if (rec==NULL) { printf ("\n Error in readmemory 2: No enough memory! "); abort (); } reportmemory(getmaxx(),getmaxy()-textheight("X")-5); f_s = (byte huge *) (*hdr); /* 1 половина */ s_s = (byte huge *) (*hdr)+65536L; /* 2 половина по */ for (i=0;i<((*hdr)->numrec)-1;i++) /* 64 Кбайта */ { drawprogress ( (double) i / (((*hdr)->numrec) - 1) ); off = (uint)((*hdr)->addr)[i]; /* смещение */ if ((uint)off>(uint)65534) /* нереальный адрес записи */ { rec[i] = (asRecPtr) ((byte huge *)NULL); continue; } if ((uint)off>(uint)32767) /* во 2 пол. */ rec[i] = (asRecPtr) ((byte huge *)s_s+((uint)off-32768)*2);/* */ else /* в 1 пол. */ rec[i] = (asRecPtr) ((byte huge *)f_s+(uint)off*2); /* */ if (rec[i]->number > 2048) rec[i]->number = 2048; if ((issignal(rec[i]))&&(rec[i]!=NULL)) { rec[i]->number = rec[i]->dimfft; for (n=0;n<(rec[i])->number;n+=2) /* четные номера */ tmp[n] = ((byte *)rec[i]->y)[n/2]; for (n=1;n<(rec[i])->number;n+=2) /* нечетные номера */ tmp[n] = ((byte *)rec[i]->y)[(uint)((rec[i])->number+n)/2]; memcpy ((byte *)rec[i]->y,(byte *)tmp,(size_t)(rec[i])->number); } else if (rec[i]!=NULL) rec[i]->mnoj-=3; rec[i]->res1 = 0; /* нулевые байты после имени */ for (last=7;((last>0)&&((rec[i]->name)[last]==' '));last--) ; /* нашли последнюю букву - не пробел */ for (;((last>0)&&((rec[i]->name)[last]!=' '));last--) ; /* нашли последний пробел */ if (last!=0) /* если все же нашли */ for (j=last;(rec[i]->name)[j]!=0;j++) switch ((rec[i]->name)[j]) { case 'a': case 'A': ((rec[i]->name)[j])='x'; break; case 'b': case 'B': ((rec[i]->name)[j])='y'; break; case 'w': case 'W': ((rec[i]->name)[j])='z'; break; default : break; } } drawprogress ((double)1.00); return ((asRecPtr huge *)rec); /* */ } /* */