AUX_INFO *AsmSysCreateAux( const char *name ) /*******************************************/ { CreateAux( name ); AuxCopy( CurrInfo, &WatcallInfo ); CurrInfo->use = 1; CurrInfo->save = asmRegsSaved; CurrEntry->info = CurrInfo; return( CurrInfo ); }
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 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 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 ); }