Ejemplo n.º 1
0
/* подпр.обр.пс.опер.DC */
int SDC()
{
    /*рабочая переменная */
    char *RAB;

    /*занулим два старших байта RX.OP_RX */
    RX.OP_RX.OP = 0;
    RX.OP_RX.R1X2 = 0;

    /* если операнд начинается с комбинации F' */
    if (memcmp(TEK_ISX_KARTA.STRUCT_BUFCARD.OPERAND,"F'", 2) == 0)
    {
        /* в перем. c указат.RAB выбираем первую лексему операнда текущей карты исх.текста АССЕМБЛЕРА */
        RAB=strtok((char*)TEK_ISX_KARTA.STRUCT_BUFCARD.OPERAND + 2, "'");

        /*перевод ASCII-> int */
        RX.OP_RX.B2D2 = atoi ( RAB );
        /* приведение к соглашениям ЕС ЭВМ */
        RAB = (char *) &RX.OP_RX.B2D2;
        swab ( RAB , RAB , 2 );
    }
    else
    {
        /* иначе сообщение об ошибке */
        return (1);
    }

    /* формирование TXT-карты */
    STXT (4);

    return (0);                                     /*успешн.завершение подпр.*/
}
Ejemplo n.º 2
0
/* подпр.обр.пс.опер.DS */
int SDS()
{
    /* занулим два старших байта RX.OP_RX */
    RX.OP_RX.OP   = 0;
    RX.OP_RX.R1X2 = 0;
    /* если операнд начинается с комбинации F' */
    if (TEK_ISX_KARTA.STRUCT_BUFCARD.OPERAND[0]=='F')
    {
        /* занулим RX.OP_RX.B2D2 */
        RX.OP_RX.B2D2 = 0;
    }
    else
    {
        /* сообщение об ошибке */
        return (1);
    }

    /* формирование TXT-карты */
    STXT (4);

    return (0);                                     /*успешно завершить подпр.*/
}
Ejemplo n.º 3
0
/*..........................................................................*/
int SRX()                                         /*подпр.обр.опер.RX-форм. */
 {
  char *METKA;                                    /*набор                   */
  char *METKA1;                                   /*рабочих                 */
  char *METKA2;                                   /*переменных              */
  char *PTR;                                      /*                        */
  int  DELTA;                                     /*                        */
  int  ZNSYM;                                     /*                        */
  int  NBASRG;                                    /*                        */
  int J;                                          /*                        */
  int I;                                          /*                        */
  unsigned char R1X2;                             /*                        */
  int B2D2;                                       /*                        */
  RX.OP_RX.OP = T_MOP[I3].CODOP;                  /*формирование кода операц*/
  METKA1 = strtok                                 /*в перем. c указат.METKA1*/
	   (                                      /*выбираем первую лексему */
    (char*) TEK_ISX_KARTA.STRUCT_BUFCARD.OPERAND, /*операнда текущей карты  */
	    ","                                   /*исх.текста АССЕМБЛЕРА   */
	   );

  METKA2 = strtok                                 /*в перем. c указат.METKA2*/
	   (                                      /*выбираем вторую лексему */
	    NULL,                                 /*операнда текущей карты  */
	    " "                                   /*исх.текста АССЕМБЛЕРА   */
	   );

  if ( isalpha ( (int) *METKA1 ) )                /*если лексема начинается */
   {                                              /*с буквы, то:            */
    for ( J=0; J<=ITSYM; J++ )                    /* все метки исх.текста в */
     {                                            /* табл. T_SYM сравниваем */
						  /* со знач.перем. *METKA  */
      METKA = strtok (
		      (char*) T_SYM[J].IMSYM , " "
		     );
      if( !strcmp ( METKA , METKA1 ) )            /* и при совпадении:      */

       {                                          /*  берем значение этой   */
	 R1X2 = T_SYM[J].ZNSYM << 4;              /*  метки в качестве перв.*/
	 goto SRX1;
       }                                          /*  опреранда машинной ком*/
     }
    return(2);                                    /*сообщ."необ'явл.идентиф"*/
   }
  else                                            /*иначе, берем в качестве */
   {                                              /*перв.операнда машинн.ком*/
     R1X2 = atoi ( METKA1 ) << 4;                 /*значен.выбр.   лексемы  */
   }


 SRX1:


  if ( isalpha ( (int) *METKA2 ) )                /*если лексема начинается */
   {                                              /*с буквы, то:            */
    for ( J=0; J<=ITSYM; J++ )                    /* все метки исх.текста в */
     {                                            /* табл. T_SYM сравниваем */
						  /* со знач.перем. *МЕТКА  */
      METKA = strtok (
		      (char*) T_SYM[J].IMSYM , " "
		     );
      if( !strcmp ( METKA , METKA2 ) )            /* и при совпадении:      */
       {                                          /*  установить нач.знач.: */
	NBASRG = 0;                               /*   номера базов.регистра*/
	DELTA  = 0xfff - 1;                       /*   и его значен.,а также*/
	ZNSYM  = T_SYM[J].ZNSYM;                  /*   смещен.втор.операнда */
	for ( I=0; I<15; I++ )                    /*далее в цикле из всех   */
	 {                                        /*рег-ров выберем базовым */
	  if (                                    /*тот, который имеет:     */
	       T_BASR[I].PRDOST == 'Y'            /* призн.активности,      */
	      &&                                  /*  и                     */
	       ZNSYM - T_BASR[I].SMESH >= 0       /* значенение, меньшее по */
	      &&                                  /* величине,но наиболее   */
	       ZNSYM - T_BASR[I].SMESH < DELTA    /* близкое к смещению вто-*/
	     )                                    /* рого операнда          */
	   {
	    NBASRG = I + 1;
	    DELTA  = ZNSYM - T_BASR[I].SMESH;
	   }
	 }
	if ( NBASRG == 0 || DELTA > 0xfff )       /*если баз.рег.не выбр.,то*/
	 return(5);                               /* заверш.подпр.по ошибке */
	else                                      /*иначе                   */
	 {                                        /* сформировыать машинное */
	  B2D2 = NBASRG << 12;                    /* представление второго  */
	  B2D2 = B2D2 + DELTA;                    /* операнда в виде B2D2   */
	  PTR = (char *)&B2D2;                    /* и в соглашениях ЕС ЭВМ */
	  swab ( PTR , PTR , 2 );                 /* с записью в тело ком-ды*/
	  RX.OP_RX.B2D2 = B2D2;
	 }
	goto SRX2;                                /*перех.на форм.первого   */
       }                                          /*  опреранда машинной ком*/
     }
    return(2);                                    /*сообщ."необ'явл.идентиф"*/
   }
  else                                            /*иначе, берем в качестве */
   {                                              /*втор.операнда машинн.ком*/
    return(4);                                    /*значен.выбр.   лексемы  */
   }

 SRX2:

  RX.OP_RX.R1X2 = R1X2;                           /*дозапись перв.операнда  */

  STXT(4);                                        /*формирование TXT-карты  */
  return(0);                                      /*выйти из подпрограммы   */
 }
Ejemplo n.º 4
0
/* подпр.обр.опер.RR-форм. */
int SRR()
{
    /*набор рабочих переменных */
    char *METKA;
    char *METKA1;
    char *METKA2;
    unsigned char R1R2;
    int J;
    /* формирование кода операц */
    RR.OP_RR.OP = T_MOP[I3].CODOP;

    /* в перем. c указат.METKA1 выбираем первую лексему операнда текущей карты исх.текста АССЕМБЛЕРА */
    METKA1 = strtok((char*) TEK_ISX_KARTA.STRUCT_BUFCARD.OPERAND, ",");

    /* в перем. c указат.METKA2 выбираем вторую лексему операнда текущей карты исх.текста АССЕМБЛЕРА */
    METKA2 = strtok(NULL, " ");

    /* если лексема начинается с буквы, то: */
    if ( isalpha ( (int) *METKA1 ) )
    {
        /* все метки исх.текста в табл. T_SYM */
        for ( J=0; J<=ITSYM; J++ )
        {
            /* сравниваем со знач.перем. *METKA1 */
            METKA = strtok ((char*) T_SYM[J].IMSYM , " ");

            /* и при совпадении: */
            if( !strcmp ( METKA , METKA1 ) )
            {
                /*  берем значение этой метки в качестве перв. опреранда машинной ком */
                R1R2 = T_SYM[J].ZNSYM << 4;
                goto SRR1;
            }
        }
        /* сообщ."необ'явл.идентиф" */
        return(2);
    }
    /*иначе,*/
    else
    {
        /* берем в качестве перв.операнда машинн.ком значен.выбр. лексемы */
        R1R2 = atoi ( METKA1 ) << 4;
    }

SRR1:

    /* если лексема начинается с буквы, то: */
    if ( isalpha ( (int) *METKA2 ) )
    {
        /* все метки исх.текста в табл. T_SYM */
        for ( J=0; J<=ITSYM; J++ )
        {
            /*  сравниваем со знач.перем. *МЕТКА2 */
            METKA = strtok ((char*) T_SYM[J].IMSYM , " ");
            /* и при совпадении: */
            if( !strcmp ( METKA , METKA2 ) )
            {
                /*  берем значение этой метки в качестве втор. опреранда машинной ком */
                R1R2 = R1R2 + T_SYM[J].ZNSYM;
                goto SRR2;
            }
        }
        /* сообщ."необ'явл.идентиф" */
        return(2);
    }
    /* иначе */
    else
    {
        /* берем в качестве втор.операнда машинн.ком значен.выбр. лексемы */
        R1R2 = R1R2 + atoi ( METKA2 );
    }

SRR2:

    /* формируем опер-ды маш-ой команды */
    RR.OP_RR.R1R2 = R1R2;

    STXT(2);

    /*выйти из подпрограммы   */
    return(0);
}
Ejemplo n.º 5
0
void PPPRunEdit::showData( PPPData & D ) {
    STXT( D.Run.PreConnect, PreConnect_LE);
    STXT( D.Run.PostConnect, PostConnect_LE);
    STXT( D.Run.PreDisconnect, PreDisconnect_LE );
    STXT( D.Run.PostDisconnect, PostDisconnect_LE);
}