Node:AnyFile, Next:Append, Previous:AnsiChar, Up:Reference

### AnyFile

#### Synopsis

    type
      AnyFile  { built-in type }

#### Description

`AnyFile` is a built-in type that can only be used for parameters and pointer targets. Any kind of file variable (`Text`, untyped and typed `file`) can be passed to such a parameter and their address assigned to such a pointer. On the other side, only generic file operations are possible with `AnyFile` parameters/pointer targets.

This type is useful for implementing generic file handling routines. Also some built-in file routines use this type for their parameters, e.g. `IOSelectRead` (see Run Time System).

`BlockRead` (see BlockRead) and `BlockWrite` (see BlockWrite) treat `AnyFile` specially, in that they accept all `AnyFile`s as arguments (even if the actual file is a typed or `Text` file) and always use a block size of 1 (even if the actual file is an untyped file with different block size or a typed file of a type with size not equal to one). This is the only way to reliably read/write a certain amount of data from/to an `AnyFile`.

`AnyFile` pointers cannot be allocated with `New` (because it would be unspecified which kind of file to create).

#### Conforming to

`AnyFile` is a GNU Pascal extension.

#### Example

    program AnyFileDemo;

    procedure Test (var f: AnyFile);
    var v: ^AnyFile;
    begin
      { Generic file operations are allowed for `AnyFile' }
      Rewrite (f);

      { `AnyFile' can also be accessed via pointers }
      v := @f;
      Close (v^)
    end;

    var
      t: Text;
      f: file;
      g: file of Integer;

    begin
      { Any kind of file variable can be passed as `AnyFile' }
      Test (t);
      Test (f);
      Test (g)
    end.

#### See also

Text, file.