Subaru OEM controls use a system very similar to what Baldur has described.
Cranking: fixed injector pulsewidth pulled from a 2D table with ECT axis. This logic uses a few different tables which are similar or identical. Regarding the choice of table, the guys who exposed these tables mentioned:
some of it is based on whether the ignition switch is on or off and whether the motor has begun to start or not at any given time in the cranking process. TGV status may also be involved
Where TGV's are tumble generator valves. I will try to find some more insights as to the conditions for each and the effects. Then, these IPW values are compensated by a 3D table with RPM and ECT axes that decreases IPW as RPM increases between 100-500 RPM, and decreasing more when ECT goes below 0*C. Finally, IPW is compensated by a 2D table with throttle angle. The throttle table reduces IPW to zero as throttle is added above 50% or so, as to prevent/fix a flooded engine.
Post Start: Open loop fueling immediately after start until O2 is up to temp, then CL. During this time lambda enrichment offsets are applied to determine the minimum enrichment from stoich (closed loop) or target AFR (open loop) This offset is determined by adding the result of three branches of logic. All branches use their own tables for everything, nothing is shared between them.
Branch 1: Open Loop: pulled live from 2D table with ECT axis. Closed Loop: pulled live from a 3D table with Engine Load & ECT axes. No active decay of the value, it is continuously pulled from the table so it only decreases according to the table.
Branch 2: Initial value pulled from one of four similar 2D tables with ECT axis. Initial value is immediately decayed using a step which is pulled from one of two 2D tables with ECT axis. (choice is determined by the initial value table used)
Branch 3: Initial value follows the same type of logic as branch 2. Initial value is decayed by a fixed multiplier (0.9) after a delay period which is pulled from one of two 2D tables with ECT axis. (choice is also determined by the initial value table used)