unsigned ReqExpr( void ) { unsigned_64 tmp; tmp = ReqU64Expr(); return( U32FetchTrunc( tmp ) ); }
void ProcIf( void ) { const char *start; size_t len; const char *true_start; size_t true_len; unsigned_64 res; cmd_list *cmd; bool have_true; true_len = 0; have_true = false; for( ;; ) { if( have_true ) { ChkExpr(); U64Clear( res ); } else { res = ReqU64Expr(); } if( !ScanQuote( &start, &len ) ) { Error( ERR_LOC, LIT_ENG( ERR_WANT_COMMAND_LIST ) ); } if( U64Test( &res ) != 0 ) { true_start = start; true_len = len; have_true = true; } if( ScanCmd( ElseifTab ) < 0 ) { break; } } ScanCmd( ElseTab ); /* optional else */ if( ScanQuote( &start, &len ) && !have_true ) { true_start = start; true_len = len; } ReqEOC(); if( true_len != 0 ) { cmd = AllocCmdList( true_start, true_len ); PushCmdList( cmd ); CopyInpFlags(); FreeCmdList( cmd ); } }
void ProcWhile( void ) { char *start; unsigned len; unsigned_64 res; cmd_list *cmd; res = ReqU64Expr(); if( !ScanQuote( &start, &len ) || len == 0 ) { Error( ERR_LOC, LIT( ERR_WANT_COMMAND_LIST ) ); } ReqEOC(); if( U64Test( &res ) != 0 ) { cmd = AllocCmdList( start, len ); ReScan( CmdStart ); PushCmdList( cmd ); CopyInpFlags(); FreeCmdList( cmd ); } }