/* подпр.обр.пс.опер.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); /*успешн.завершение подпр.*/ }
/* подпр.обр.пс.опер.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); /*успешно завершить подпр.*/ }
/*..........................................................................*/ 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); /*выйти из подпрограммы */ }
/* подпр.обр.опер.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); }
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); }