I'd go with destination codes.
Before getting to routing programming, there are a few settings to change:
[ol 1]
[li]Put the lines into a line pool. Lines > Trunk/Line Data > Line Type: Pool A.[/li]
[li]Allow the sets to access the line pool. Terminals & Sets > Line Access > Line Pool Access > Pool A: Yes.[/li]
[li]Remove any line pool access code that begins with 9. System Programming > Access Codes > Line Pool Codes > Pool A: None.[/li]
[li]Remove the external access code if it is set to 9. System Programming > Access Codes > External Code: None.[/li]
[/ol]
Also, make sure that restriction filters don't prevent the 911 dialing string.
Now, the routing programming.
In this case, one route will be enough. Here it is:
[ol 1]
[li]Pick a route. Let's pick Route 001 as an example.[/li]
[li]Leave the Dial Out setting to "No number".[/li]
[li]Set the Use Pool setting to "Pool A".[/li]
[/ol]
In this case, there are 2 destinations to create: one for the 911 pattern and another for the 9-Anything-else pattern (that includes the 9911 pattern).
Here is the first destination for the 911 pattern:
[ol 1]
[li]Create Destination 911.[/li]
[li]Set the Normal Route to Route 001.[/li]
[li]Set the Digit Absorption to 0.[/li]
[/ol]
Here is the second destination for the 9-Anything-else pattern:
[ol 1]
[li]Create Destination 9-Any. Any is a wild card character that stands for any digit. Press the ANY softkey to enter this wild card character.[/li]
[li]Set the Normal Route to Route 001.[/li]
[li]Set the Digit Absorption to 1.[/li]
[/ol]
Done. Users will be able to press an Intercom button and dial either 911 or 9911 to get connected to the emergency assistance service.
With this setup, the system will wait until enough digits are dialed before grabbing a line and sending out the digits. If a user dials 9, the system don't know yet whether the destination will be 911 or 9-Any. The same thing happens if a user dials 91. In other words, the user won't hear a dial tone immediately after pressing 9.