When compiling the main program, the compiler points to the line:

PROCEDURE ReadInput(VAR FIn: TEXT; AccepableSymbolsSet: AccepableSymbolsSetType; VAR ReadInputCondition: ReadInputConditionsType; VAR Q1Head, Q2Head: Pointer); 

in the INTERFACE section of the UNIT module ReadInputLib; and gives errors:

 error: type mismatch in argument 4 of ReadInput error: type mismatch in argument 5 of ReadInput 

Program code

 PROGRAM ChangeDoc(INPUT, OUTPUT); USES ReadInputLib; TYPE AccepableSymbolsSetType = SET OF CHAR; ReadInputConditionsType = (NoWords, IsFirstWord, EndFirstWord, IsSecondWord, EndSecondWord); DataMatchingConditionsType = (None, DataIsMatch, DataIsNotMatch); QueuesReadingConditionsType = (IsEnd, IsNotEnd); Pointer = ^Node; Node = RECORD Ch: CHAR; Next: Pointer END; VAR AccepableSymbolsSet: AccepableSymbolsSetType; ReadInputCondition: ReadInputConditionsType; CopyQ1QueuesReadingCondition: QueuesReadingConditionsType; DataMatchingCondition: DataMatchingConditionsType; Q1Head, Q2Head: Pointer; Doc: TEXT; PROCEDURE SetDefaultParams(VAR AccepableSymbolsSet: AccepableSymbolsSetType; VAR ReadInputCondition: ReadInputConditionsType; VAR CopyQ1QueuesReadingCondition: QueuesReadingConditionsType; VAR DataMatchingCondition: DataMatchingConditionsType; VAR Q1Head, Q2Head: Pointer); BEGIN {SetDefaulParams} AccepableSymbolsSet := ['A'..'Z', 'a'..'z']; ReadInputCondition := NoWords; CopyQ1QueuesReadingCondition := IsNotEnd; DataMatchingCondition := None; Q1Head := NIL; Q2Head := NIL END; {SetDefaulParams} PROCEDURE AddChToQueue(VAR Head, Tmp: Pointer; Ch: CHAR); VAR Ptr: Pointer; BEGIN {AddChToQueue} NEW(Ptr); Ptr^.Ch := Ch; Ptr^.Next := NIL; IF Head = NIL THEN Head := Ptr ELSE Tmp^.Next := Ptr; Tmp := Ptr END; {AddChToQueue} PROCEDURE PrintQueue(VAR FOut: TEXT; Head: Pointer); BEGIN {PrintQueue} IF Head <> NIL THEN BEGIN WHILE Head^.Next <> NIL DO BEGIN {WHILE} WRITE(FOut, Head^.Ch); IF Head^.Next <> NIL THEN Head := Head^.Next END; {WHILE} WRITE(FOut, Head^.Ch) END END; {PrintQueue} PROCEDURE FreeQueue(VAR Head: Pointer); VAR Del: Pointer; BEGIN {FreeQueue} WHILE Head <> NIL DO BEGIN {WHILE} Del := Head; IF Head^.Next <> NIL THEN Head := Head^.Next ELSE Head := NIL; DISPOSE(Del) END {WHILE} END; {FreeQueue} PROCEDURE AddDocument(VAR Doc: TEXT); BEGIN {AddDocument} ASSIGN(Doc, 'Doc.TXT'); RESET(Doc) END; {AddDocument} BEGIN {PROGRAM ChangeDoc} AddDocument(Doc); AccepableSymbolsSet := []; SetDefaultParams(AccepableSymbolsSet, ReadInputCondition, CopyQ1QueuesReadingCondition, DataMatchingCondition, Q1Head, Q2Head); ReadInput(INPUT, AccepableSymbolsSet, ReadInputCondition, Q1Head, Q2Head); END. {PROGRAM ChangeDoc} UNIT ReadInputLib; INTERFACE TYPE AccepableSymbolsSetType = SET OF CHAR; ReadInputConditionsType = (NoWords, IsFirstWord, EndFirstWord, IsSecondWord, EndSecondWord); Pointer = ^Node; Node = RECORD Ch: CHAR; Next: Pointer END; PROCEDURE AddChToQueue(VAR Head, Tmp: Pointer; Ch: CHAR); PROCEDURE ReadInput(VAR FIn: TEXT; AccepableSymbolsSet: AccepableSymbolsSetType; VAR ReadInputCondition: ReadInputConditionsType; VAR Q1Head, Q2Head: Pointer); IMPLEMENTATION PROCEDURE AddChToQueue(VAR Head, Tmp: Pointer; Ch: CHAR); VAR Ptr: Pointer; BEGIN {AddChToQueue} NEW(Ptr); Ptr^.Ch := Ch; Ptr^.Next := NIL; IF Head = NIL THEN Head := Ptr ELSE Tmp^.Next := Ptr; Tmp := Ptr END; {AddChToQueue} PROCEDURE ReadInput(VAR FIn: TEXT; AccepableSymbolsSet:AccepableSymbolsSetType; VAR ReadInputCondition: ReadInputConditionsType; VAR Q1Head, Q2Head: Pointer); VAR Ch: CHAR; Tmp: Pointer; BEGIN {ReadInput} WHILE (NOT(EOF(FIn))) AND (ReadInputCondition <> EndSecondWord) DO BEGIN {WHILE} WHILE (NOT EOLN(FIn)) AND (ReadInputCondition <> EndSecondWord) DO BEGIN {WHILE} READ(FIn, Ch); IF(Ch IN AccepableSymbolsSet) THEN BEGIN {Ch IN AccepableSymbolsSet} IF ReadInputCondition = NoWords THEN BEGIN ReadInputCondition := IsFirstWord; {Add a letter to the queue №1} AddChToQueue(Q1Head, Tmp, Ch) END ELSE IF ReadInputCondition = IsFirstWord THEN BEGIN IF NOT(EOLN(FIn)) THEN {Add a letter to the queue №1} AddChToQueue(Q1Head, Tmp, Ch) ELSE BEGIN ReadInputCondition := EndFirstWord; {Add a letter to the queue №1} AddChToQueue(Q1Head, Tmp, Ch) END END ELSE IF ReadInputCondition = EndFirstWord THEN BEGIN ReadInputCondition := IsSecondWord; {Add a letter to the queue №2} AddChToQueue(Q2Head, Tmp, Ch) END ELSE IF ReadInputCondition = IsSecondWord THEN BEGIN IF (NOT(EOLN(FIn))) THEN {Add a letter to the queue №2} AddChToQueue(Q2Head, Tmp, Ch) ELSE BEGIN ReadInputCondition := EndSecondWord; {Add a letter to the queue №2} AddChToQueue(Q2Head, Tmp, Ch) END END END {Ch IN AccepableSymbolsSet} ELSE BEGIN {NOT(Ch IN AccepableSymbolsSet)} IF ReadInputCondition = IsFirstWord THEN ReadInputCondition := EndFirstWord ELSE IF ReadInputCondition = IsSecondWord THEN ReadInputCondition := EndSecondWord END {NOT(Ch IN AccepableSymbolsSet)} END; {WHILE} IF EOLN(FIn) THEN READLN(FIn) END {WHILE} END; {ReadInput} BEGIN {ReadInputLib} END. {ReadInputLib} 

    0