// KPM.bcpl -- test for KPMTemplate package
// Copyright Xerox Corporation 1979
external
[
SetupReadParam; ReadParam
MakeKPMTemplate; MatchKPMTemplate
Puts; Ws; Free
sysZone; dsp
]
structure String: [ length byte; char↑1,255 byte ]
//-----------------------------------------------------------------
let KPM() be
//-----------------------------------------------------------------
[
let pattern, string = vec 127, vec 127
SetupReadParam()
[
ReadParam($P, "Pattern: ", pattern)
ReadParam($P, "String: ", string)
let template = MakeKPMTemplate(pattern)
let code = MatchKPMTemplate(string, template)
test code eq 0
ifso Ws("String matches pattern.*n")
ifnot test code eq 1
ifso Ws("String doesn't match pattern at all.*n")
ifnot
[
Ws("String matches pattern only through *"")
for i = 1 to code-1 do Puts(dsp, string>>String.char↑i)
Ws("*"*n")
]
Free(sysZone, template)
] repeat
]