{.pa} {************************* procedure ReadLine *******************************} procedure ReadLine(var InFile :text; var LineText :LineType); { This procedure will read one line of text from an input file containing the source code & count the lines. } begin with LineText do begin Len := 0; while (not eoln(InFile)) and { read in line loop char by char } (Len <= MaxLengthOfLine) do begin Len := Len + 1; { count char in line } read(InFile,Line[Len]) { read char from input file } end; readln(InFile); end end; { procedure ReadLine } {************************* procedure ClearLine *****************************} procedure ClearLine(var LineText:LineType); { This procedure will initialize the array of characters in LINE and set LEN to zero. } var I :Index; { loop index } begin for I := 1 to LineText.Len do LineText.Line[I] := ' '; LineText.Len := 0 end; { procedure ClearLine } {.pa} {************************ procedure ReadInReserved *************************} procedure ReadInReserved(var Reserved :ReservedType); { This procedure will read in the reserved & semi-reserved words from a list of assignments within this procedure. } begin Reserved[1]:='ABSOLUTE '; Reserved[2]:='AND '; Reserved[3]:='ARRAY '; Reserved[4]:='BEGIN '; Reserved[5]:='CASE '; Reserved[6]:='CONST '; Reserved[7]:='DIV '; Reserved[8]:='DO '; Reserved[9]:='DOWNTO '; Reserved[10]:='ELSE '; Reserved[11]:='END '; Reserved[12]:='EXTERNAL '; Reserved[13]:='FILE '; Reserved[14]:='FOR '; Reserved[15]:='FORWARD '; Reserved[16]:='FUNCTION '; Reserved[17]:='GOTO '; Reserved[18]:='IF '; Reserved[19]:='IN '; Reserved[20]:='INLINE '; Reserved[21]:='LABEL '; Reserved[22]:='MOD '; Reserved[23]:='NIL '; Reserved[24]:='NOT '; Reserved[25]:='OF '; Reserved[26]:='OR '; Reserved[27]:='PACKED '; Reserved[28]:='PROCEDURE'; Reserved[29]:='PROGRAM '; Reserved[30]:='RECORD '; Reserved[31]:='REPEAT '; Reserved[32]:='SET '; Reserved[33]:='STRING '; Reserved[34]:='THEN '; Reserved[35]:='TO '; Reserved[36]:='TYPE '; Reserved[37]:='UNTIL '; Reserved[38]:='VAR '; Reserved[39]:='WHILE '; Reserved[40]:='WITH '; end; { procedure ReadInReserved } {.pa} {************************** procedure DisplayStatus *************************} procedure DisplayStatus (var Status :Info; var OutF :text); var Code :integer; { actual lines of code } begin with Status do begin Code := TotalLines - CommentLines - BlankLines; writeln(OutF,'Total lines :' ,TotalLines:5 ); writeln(OutF,'Full lines of comments :' ,CommentLines:5 ); writeln(OutF,'Blank lines :' ,BlankLines:5 ); writeln(OutF,'Actual lines of code :' ,Code:5 ); writeln(OutF); write (OutF,'Total reserved words :' ,TotalReserved:5 ); writeln(OutF,'':7,'Reserved/line of code :',TotalReserved/Code:5:1); write (OutF,'Total identifiers :' ,TotalIdents:5 ); writeln(OutF,'':7,'Identifiers/line of code:',TotalIdents/Code:5:1 ); write (OutF,'Total comments :' ,Comments:5 ); writeln(OutF,'':7,'Comments/line of code :',Comments/Code:5:1 ); writeln(OutF); writeln(OutF,'Different identifiers :' ,DifferentIdents:5 ); writeln(OutF,'Avg. identifier length :' , AvgIdentLength/TotalIdents:5:1); write (OutF,'Most used identifier : ' ,MostUsedIdent ); writeln(OutF,'':1,'Number of times used:',MostUsedNumber:3 ); write (OutF,'Least used identifier : ' ,LeastUsedIdent ); writeln(OutF,'':1,'Number of times used:',LeastUsedNumber:3 ); writeln(OutF); writeln(OutF,'User defined functions :' ,UsedReserved[16]:5 ); writeln(OutF,'User defined procedures:' ,UsedReserved[28]:5 ); end; end; { procedure DisplayStatus }