home *** CD-ROM | disk | FTP | other *** search
/ Aminet 18 / aminetcdnumber181997.iso / Aminet / dev / m2 / CycloneModules.lha / OOModules / txt / TextFile.mod < prev    next >
Text File  |  1996-07-22  |  2KB  |  112 lines

  1. IMPLEMENTATION MODULE TextFile;
  2.  
  3. FROM SYSTEM IMPORT ADDRESS;
  4. IMPORT fs:FileSystem,String,H:Heap;
  5.  
  6.  
  7. CONSTRUCTOR TText.Init;
  8. BEGIN
  9.  root:=NIL; 
  10.  last:=NIL;
  11.  lines:=0; maxlen:=0;
  12. END TText.Init;
  13.  
  14. PROCEDURE TText.AddLine(txt:ARRAY OF CHAR);
  15. VAR l:LONGINT;
  16.     new:TextRecPtr;
  17. BEGIN
  18.  l:=String.Length(txt);
  19.  IF l>maxlen THEN maxlen:=l; END;
  20.  H.Allocate(new,SIZE(TextRec)-MaxTextLen+l+2);
  21.  WITH new^ DO
  22.   len:=l;
  23.   String.Copy(text,txt);
  24.   next:=NIL;
  25.   prev:=last;
  26.  END;
  27.  IF new^.prev=NIL THEN root:=new; ELSE new^.prev^.next:=new; END;
  28.  last:=new;
  29.  INC(lines); 
  30. END TText.AddLine;
  31.  
  32. PROCEDURE TText.InsertLine(p:TextRecPtr;txt:ARRAY OF CHAR);
  33. VAR l:LONGINT;
  34.     new:TextRecPtr;
  35. BEGIN
  36.  l:=String.Length(txt);
  37.  IF l>maxlen THEN maxlen:=l; END;
  38.  H.Allocate(new,SIZE(TextRec)-MaxTextLen+l+2);
  39.  WITH new^ DO
  40.   len:=l;
  41.   String.Copy(text,txt);
  42.   next:=NIL;
  43.   prev:=NIL;
  44.   IF p#NIL THEN
  45.     prev:=p^.prev;
  46.     next:=p;
  47.     p^.prev:=new;
  48.     IF prev=NIL THEN root:=new; ELSE prev^.next:=new; END;
  49.   END;
  50.  END;
  51.  INC(lines); 
  52. END TText.InsertLine;
  53.  
  54. PROCEDURE TText.DeleteLine(p:TextRecPtr);
  55. VAR tmp:TextRecPtr;
  56. BEGIN
  57.  IF p#NIL THEN
  58.   IF p^.next#NIL THEN p^.next^.prev:=p^.prev; ELSE last:=p^.prev; END; 
  59.   IF p^.prev#NIL THEN p^.prev^.next:=p^.next; ELSE root:=p^.next; END; 
  60.   DEC(lines);
  61.   H.Deallocate(p);
  62.  END;
  63. END TText.DeleteLine;
  64.  
  65. PROCEDURE TText.ReadText(name:ARRAY OF CHAR):BOOLEAN;
  66. VAR f:fs.File;
  67.     eof:BOOLEAN;
  68.     t:ARRAY[0..MaxTextLen] OF CHAR;
  69.     i:LONGINT;
  70.     ch:CHAR;
  71. BEGIN
  72.  fs.Lookup(f,name,FALSE);
  73.  IF f.res#fs.done THEN RETURN FALSE END;
  74.  i:=0;
  75.  fs.ReadChar(f,ch);
  76.  WHILE (f.res=fs.done) & ~f.eof DO
  77.    IF ch='\n' THEN t[i]:=0C; AddLine(t); i:=0; ELSE t[i]:=ch; INC(i) END;
  78.    fs.ReadChar(f,ch);
  79.  END;
  80.  eof:=f.eof;
  81.  fs.Close(f);
  82.  RETURN eof; 
  83. END TText.ReadText;
  84.  
  85.  
  86. PROCEDURE TText.GetLine(l:LONGINT):ADDRESS;
  87. VAR temp:TextRecPtr;
  88.     i:LONGINT;
  89. BEGIN
  90.  temp:=root;
  91.  WHILE (temp#NIL) & (i<l) DO
  92.   temp:=temp^.next;
  93.   INC(i);
  94.  END;
  95.  RETURN temp;
  96. END TText.GetLine;
  97.  
  98. PROCEDURE TText.Free;
  99. VAR
  100.  old:TextRecPtr;
  101. BEGIN
  102.  WHILE root#NIL DO
  103.    old:=root;
  104.    root:=root^.next;
  105.    H.Deallocate(old);
  106.  END;
  107.  lines:=0; maxlen:=0; root:=NIL;
  108. END TText.Free;
  109.  
  110. BEGIN
  111. END TextFile.
  112.