include "cowgol.coh"; include "strings.coh"; sub Contains(s1: [uint8], s2: [uint8]): (r: uint8) is r := 0; while [s1] != 0 loop var a := s1; var b := s2; while [b] != 0 and [a] == [b] loop a := @next a; b := @next b; end loop; if [b] == 0 then r := 1; return; end if; s1 := @next s1; end loop; end sub; sub LCS(s1: [uint8], s2: [uint8], outbuf: [uint8]) is if StrLen(s1) < StrLen(s2) then var temp := s1; s1 := s2; s2 := temp; end if; var maxlen := StrLen(s2); var length := maxlen; while length > 0 loop var start: intptr := 0; while start + length <= maxlen loop MemCopy(s2 + start, length, outbuf); [outbuf + length + 1] := 0; if Contains(s1, outbuf) != 0 then return; end if; start := start + 1; end loop; length := length - 1; end loop; [outbuf] := 0; end sub; var lcs: uint8[64]; LCS("thisisatest", "testing123testing", &lcs[0]); print(&lcs[0]); print_nl();