#!/usr/bin/php eof() ){ // {1} Try to parse current line // $parsed = json_decode($f_cstates->fgets(), true); // {2} If cannot parse, go to next // if( is_null($parsed) ) continue; // {3} Check if GLOBAL STATE matches CURRENT state // $failed = false; for( $c = 0 ; $c < strlen($GLOBAL_STATE) || $c < strlen($parsed[0]) ; $c++ ){ // {3.1} If 'X' -> whatever state // if( $parsed[0][$c] == 'X' ) continue; // {3.2} Else, if different -> fail // else if( $parsed[0][$c] != $GLOBAL_STATE[$c] ){ $failed = true; break; } } // {4} If not failed -> state to keep // if( !$failed ){ slog("Current state '$GLOBAL_STATE' matches '{$parsed[0]}'", 'global-state:update'); $CHIP_STATE = $parsed[1]; break; } } /* (4) If no CHIP_STATE set -> abort */ if( is_null($CHIP_STATE) ){ slog("Cannot find a chip_state for the current global state '{$GLOBAL_STATE}'", 'global-state'); return 127; } /* [2] Update chips =========================================================*/ /* (1) Get file handler */ $f_chips = new SplFileObject(CHIPS_CONF, 'r'); /* (2) Parse line by line */ while( !$f_chips->eof() ){ // {1} Try to parse current line // $parsed = json_decode($f_chips->fgets(), true); // {2} If cannot parse, go to next // if( is_null($parsed) ) continue; // {3} Check if position available in GLOBAL_STATE // if( isset($CHIP_STATE[$parsed[0]]) ){ /* (1) If CHIP STATE value is 'x' -> do nothing */ if( $CHIP_STATE[$parsed[0]] == 'x' ) continue; /* (2) If state does not exist -> go to next chip */ if( !isset($parsed[2][$CHIP_STATE[$parsed[0]]]) ) continue; /* (3) Use variables to be more human-readable */ $position = $parsed[0]; $state = $CHIP_STATE[$parsed[0]]; /* (3) Set state */ $updated = syscall(SOURCE_DIR."/lib/global-state/set {$position} {$state}"); /* (4) If error */ if( $updated === false ) slog("Cannot set ${position} chip to state {$state}", 'global-state:update'); } } return 0; } /* [3] Launch main script =========================================================*/ $exec = globalstate_update(); echo $exec; die($exec); ?>