DIRECTORY IO, Rope USING [ Cat, Concat, Equal, Fetch, Length, MakeRope, ROPE, Substr], ThNet ; WhitePagesImpl: CEDAR PROGRAM IMPORTS IO, Rope EXPORTS ThNet = { ROPE:TYPE=Rope.ROPE; localPrefix: ROPE = "8923"; localDDDPrefix: ROPE = "9415"; intelnetPause: ROPE _ "\017"; lpLen: NAT = 4; sp: REF IO.StreamProcs = IO.CreateStreamProcs[ variety: input, class: $Undecorate, getChar: UndecorateChar ]; HowToDial: PUBLIC PROC[phoneNumber: ROPE, ownExtension: ROPE] RETURNS [whatToDial: ROPE, isLocalExtension: BOOLEAN] = { phoneNumber _ IO.GetLineRope[IO.CreateStream[sp,NIL,IO.RIS[phoneNumber]]!IO.EndOfStream=>{ phoneNumber_NIL; CONTINUE; }]; SELECT phoneNumber.Length[] FROM 7, 10 => phoneNumber _ Rope.Concat["9", phoneNumber]; ENDCASE; IF phoneNumber.Substr[len: lpLen].Equal[localPrefix] THEN RETURN [phoneNumber.Substr[start: lpLen], TRUE] ELSE IF phoneNumber.Substr[len: lpLen].Equal[localDDDPrefix] THEN RETURN [Rope.Concat["9", phoneNumber.Substr[start: lpLen]], TRUE] ELSE IF phoneNumber.Length[] >= 8 AND phoneNumber.Fetch[0] = '8 THEN RETURN[ Rope.Cat["8", intelnetPause, phoneNumber.Substr[start: 1], intelnetPause, ownExtension], FALSE] ELSE RETURN [phoneNumber, phoneNumber.Length[]<6]; }; UndecorateChar: PROC[self: IO.STREAM] RETURNS[CHAR] = { DO c: CHAR=self.backingStream.GetChar[]; IF c IN ['0..'9] THEN RETURN[c]; ENDLOOP; }; FeepName: PUBLIC PROC[rName: ROPE] RETURNS[feepName: ROPE] = { RETURN[Rope.MakeRope[base: rName, size: rName.Length[], fetch: FeepFetch]]; }; FeepFetch: PROC[data: REF, index: INT] RETURNS [c: CHAR] = { c_NARROW[data, ROPE].Fetch[index]; IF c IN ['A..'Z] THEN c_c+('a-'A); IF c NOT IN ['a..'z] THEN c_'z+1; RETURN[FeepMap[c]]; }; FeepMap: PACKED ARRAY CHAR['a..'z+1] OF CHAR = [ '2, '2, '2, '3, '3, '3, '4, '4, '4, '5, '5, '5, '6, '6, '6, '7, '7, '7, '7, '8, '8, '8, '9, '9, '9, '9, '1 ]; }. ÂWhitePagesImpl.mesa Interface to "Callup" databases Last modified by Swinehart, January 12, 1984 7:05 pm Last modified by Stewart, June 20, 1983 11:21 am Last Edited by: Lia, July 26, 1983 6:17 pm Phone number should now have no cosmetic characters in it . . . only digits. Intelnet number: wait 1.5 seconds after "8" and before auth. code (ownExtension) (Any very small characters in a phone number are interpreted as 100 ms. pause intervals) Ę`˜Jšœ™Jšœ™Jšœ4™4Jšœ0™0J™*šĎk ˜ Jšœ˜šœœ˜ Jšœ-œ ˜;—J˜J˜J˜—šœœ˜Jšœœ˜Jšœ ˜J˜—Jšœœœ˜Jšœ œ ˜Jšœœ ˜Jšœœ ˜Jšœœ˜J˜šœœœœ˜.Jšœ˜Jšœ˜Jšœ˜Jšœ˜—J˜š Ďn œœœœœ˜=Jšœœœ˜9šœ ˜ š œ œœœœœ˜LJšœ œœ˜——J™Lšœ˜ J˜5Jšœ˜—šœ2˜4Jšœœ$œ˜4—šœœ5˜JšœH˜N—J˜š ž œœœ œœœ˜