static boolean GetAliasInfo( void ) { char buff[256]; boolean isfar16; boolean retn; CurrAlias = &DefaultInfo; if( CurToken != T_LEFT_PAREN ) { retn = TRUE; } else { NextToken(); if( ! PragIdCurToken() ) { retn = FALSE; } else { PragCurrAlias(); strcpy( buff, Buffer ); NextToken(); if( CurToken == T_RIGHT_PAREN ) { NextToken(); retn = TRUE; } else if( CurToken == T_COMMA ) { NextToken(); if( ! PragIdCurToken() ) { retn = FALSE; } else { isfar16 = PragRecog( "far16" ); CreateAux( buff ); PragCurrAlias(); NextToken(); if( CurToken == T_RIGHT_PAREN ) { AuxCopy( CurrInfo, CurrAlias ); NextToken(); } if( isfar16 ) { CurrInfo->flags |= AUX_FLAG_FAR16; } PragEnding( TRUE ); retn = FALSE; } } } } return retn; }
static int GetAliasInfo( void ) /*****************************/ { int isfar16; if( CurToken != T_LEFT_PAREN ) // #pragma aux symbol ..... return( 1 ); NextToken(); if( CurToken != T_ID ) // error return( 0 ); LookAhead(); if( LAToken == T_RIGHT_PAREN ) { // #pragma aux (alias) symbol ..... PragCurrAlias( SavedId ); AdvanceToken(); NextToken(); return( 1 ); } else if( LAToken == T_COMMA ) { // #pragma aux (symbol, alias) HashValue = SavedHash; SetCurrInfo( SavedId ); AdvanceToken(); NextToken(); if( CurToken != T_ID ) // error return( 0 ); isfar16 = PragRecog( "far16" ); if( CurToken == T_ID ) { PragCurrAlias( Buffer ); NextToken(); } if( CurToken == T_RIGHT_PAREN ) NextToken(); if( isfar16 ) AuxInfo.flags |= AUX_FLAG_FAR16; CopyAuxInfo(); PragEnding(); return( 0 ); /* process no more! */ } else { // error AdvanceToken(); return( 0 ); // shut up the compiler } }
static bool GetAliasInfo( void ) { char buff[256]; bool isfar16; CurrAlias = &DefaultInfo; if( CurToken != T_LEFT_PAREN ) // #pragma aux symbol .... return( IS_ID_OR_KEYWORD( CurToken ) ); NextToken(); if( !IS_ID_OR_KEYWORD( CurToken ) ) // error return( FALSE ); PragCurrAlias(); strcpy( buff, Buffer ); NextToken(); if( CurToken == T_RIGHT_PAREN ) { // #pragma aux (alias) symbol .... NextToken(); return( IS_ID_OR_KEYWORD( CurToken ) ); } if( CurToken == T_COMMA ) { // #pragma aux (alias, symbol) NextToken(); if( IS_ID_OR_KEYWORD( CurToken ) ) { isfar16 = PragRecog( "far16" ); CreateAux( buff ); PragCurrAlias(); NextToken(); if( CurToken == T_RIGHT_PAREN ) { AuxCopy( CurrInfo, CurrAlias ); NextToken(); } if( isfar16 ) { CurrInfo->flags |= AUX_FLAG_FAR16; } PragEnding( TRUE ); } } return( FALSE ); }
void AsmSysDone( void ) /*********************/ { PragEnding( FALSE ); }
void PragAux( // #PRAGMA AUX ... void ) { struct { unsigned f_call : 1; unsigned f_loadds : 1; unsigned f_rdosdev: 1; unsigned f_export : 1; unsigned f_parm : 1; unsigned f_value : 1; unsigned f_modify : 1; unsigned f_frame : 1; unsigned uses_auto: 1; } have; if( !GetAliasInfo() ) return; CurrEntry = NULL; if( !IS_ID_OR_KEYWORD( CurToken ) ) return; SetCurrInfo(); NextToken(); AuxCopy( CurrInfo, CurrAlias ); PragObjNameInfo(); have.f_call = 0; have.f_loadds = 0; have.f_rdosdev = 0; have.f_export = 0; have.f_parm = 0; have.f_value = 0; have.f_modify = 0; have.f_frame = 0; have.uses_auto = 0; for( ;; ) { if( !have.f_call && CurToken == T_EQUAL ) { have.uses_auto = GetByteSeq(); have.f_call = 1; } else if( !have.f_call && PragRecog( "far" ) ) { CurrInfo->cclass |= FAR_CALL; have.f_call = 1; } else if( !have.f_call && PragRecog( "near" ) ) { CurrInfo->cclass &= ~FAR_CALL; have.f_call = 1; } else if( !have.f_loadds && PragRecog( "loadds" ) ) { CurrInfo->cclass |= LOAD_DS_ON_ENTRY; have.f_loadds = 1; } else if( !have.f_rdosdev && PragRecog( "rdosdev" ) ) { CurrInfo->cclass |= LOAD_RDOSDEV_ON_ENTRY; have.f_rdosdev = 1; } else if( !have.f_export && PragRecog( "export" ) ) { CurrInfo->cclass |= DLL_EXPORT; have.f_export = 1; } else if( !have.f_parm && PragRecog( "parm" ) ) { GetParmInfo(); have.f_parm = 1; } else if( !have.f_value && PragRecog( "value" ) ) { GetRetInfo(); have.f_value = 1; } else if( !have.f_value && PragRecog( "aborts" ) ) { CurrInfo->cclass |= SUICIDAL; have.f_value = 1; } else if( !have.f_modify && PragRecog( "modify" ) ) { GetSaveInfo(); have.f_modify = 1; } else if( !have.f_frame && PragRecog( "frame" ) ) { CurrInfo->cclass |= GENERATE_STACK_FRAME; have.f_frame = 1; } else { break; } } if( have.uses_auto ) { AsmSysUsesAuto(); } PragEnding( TRUE ); }
void PragAux( void ) /******************/ { struct { unsigned f_call : 1; unsigned f_loadds : 1; unsigned f_rdosdev: 1; unsigned f_export : 1; unsigned f_parm : 1; unsigned f_value : 1; unsigned f_modify : 1; unsigned f_frame : 1; unsigned uses_auto: 1; } have; InitAuxInfo(); if( !GetAliasInfo() ) return; if( CurToken != T_ID ) return; SetCurrInfo( Buffer ); NextToken(); PragObjNameInfo( &AuxInfo.objname ); have.f_call = 0; have.f_loadds = 0; have.f_rdosdev = 0; have.f_export = 0; have.f_parm = 0; have.f_value = 0; have.f_modify = 0; have.f_frame = 0; have.uses_auto = 0; /* BBB - Jan 26, 1994 */ for( ;; ) { if( !have.f_call && CurToken == T_EQUAL ) { have.uses_auto = GetByteSeq( &AuxInfo.code ); have.f_call = 1; } else if( !have.f_call && PragRecog( "far" ) ) { AuxInfo.cclass |= FAR; have.f_call = 1; } else if( !have.f_call && PragRecog( "near" ) ) { AuxInfo.cclass &= ~FAR; AuxInfoFlg.f_near = 1; have.f_call = 1; } else if( !have.f_loadds && PragRecog( "loadds" ) ) { AuxInfo.cclass |= LOAD_DS_ON_ENTRY; have.f_loadds = 1; } else if( !have.f_rdosdev && PragRecog( "rdosdev" ) ) { AuxInfo.cclass |= LOAD_RDOSDEV_ON_ENTRY; have.f_rdosdev = 1; } else if( !have.f_export && PragRecog( "export" ) ) { AuxInfo.cclass |= DLL_EXPORT; have.f_export = 1; } else if( !have.f_parm && PragRecog( "parm" ) ) { GetParmInfo(); have.f_parm = 1; } else if( !have.f_value && PragRecog( "value" ) ) { GetRetInfo(); have.f_value = 1; } else if( !have.f_value && PragRecog( "aborts" ) ) { AuxInfo.cclass |= SUICIDAL; have.f_value = 1; } else if( !have.f_modify && PragRecog( "modify" ) ) { GetSaveInfo(); have.f_modify = 1; } else if( !have.f_frame && PragRecog( "frame" ) ) { AuxInfo.cclass |= GENERATE_STACK_FRAME; have.f_frame = 1; } else { break; } } if( have.uses_auto ) { /* We want to force the calling routine to set up a [E]BP frame for the use of this pragma. This is done by saying the pragma modifies the [E]SP register. A kludge, but it works. */ HW_CTurnOn( AuxInfo.save, HW_SP ); } CopyAuxInfo(); PragEnding(); }