middle_three_digits = proc (n: int) returns (string) signals (too_small, even_length) s: string := int$unparse(int$abs(n)) if string$size(s) < 3 then signal too_small end if string$size(s) // 2 = 0 then signal even_length end return(string$substr(s, string$size(s)/2, 3)) end middle_three_digits start_up = proc () po: stream := stream$primary_output() tests: sequence[int] := sequence[int]$ [123,12345,1234567,987654321,10001,-10001,-123,-100,100,-12345, 1,2,-1,-10,2002,-2002,0] for test: int in sequence[int]$elements(tests) do stream$putright(po, int$unparse(test) || ": ", 11) stream$putl(po, middle_three_digits(test)) except when too_small: stream$putl(po, "Too small") when even_length: stream$putl(po, "Even length") end end end start_up