Пример #1
0
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);
}
Пример #2
0
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);
}
Пример #3
0
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);                             /*               */
}                                                           /*               */