aboutsummaryrefslogtreecommitdiff
path: root/challenge-273/deadmarshal/modula-3/ch2/src/Ch2.m3
blob: 421b09e8e0376506c3233623e1c2798bfcc0d129 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
MODULE Ch2 EXPORTS Main;

IMPORT SIO,Text;

PROCEDURE FindChar(READONLY Str:TEXT;
                   READONLY C:CHAR;
                   READONLY Backwards:BOOLEAN := FALSE):INTEGER =
  BEGIN
    IF Backwards THEN
      FOR I := Text.Length(Str)-1 TO 0 BY -1 DO
        IF Text.GetChar(Str,I) = C THEN RETURN I END
      END
    ELSE
      FOR I := 0 TO Text.Length(Str)-1 DO
        IF Text.GetChar(Str,I) = C THEN RETURN I END
      END      
    END;
    RETURN -1
  END FindChar;
  
PROCEDURE BAfterA(READONLY Str:TEXT):BOOLEAN =
  VAR
    IB:INTEGER := FindChar(Str,'b'); 
    IA:INTEGER := FindChar(Str,'a',TRUE);
  BEGIN
    RETURN IB # -1 AND IA <= IB
  END BAfterA;

BEGIN
  SIO.PutBool(BAfterA("aabb")); SIO.Nl();
  SIO.PutBool(BAfterA("abab")); SIO.Nl();
  SIO.PutBool(BAfterA("aaa")); SIO.Nl();
  SIO.PutBool(BAfterA("bbb")); SIO.Nl();
END Ch2.