# Silverfrost FTN95

Silverfrost FTN95: Fortran for Windows is a compiler for the Fortran programming language for computers running Microsoft Windows. It generates executable programs from human-written source code for native IA-32 Win32, x86-64 (from version 8.00) and for Microsoft's .NET platform. There is a free-of-charge Personal edition, which generates programs which briefly display a banner, and Commercial and Academic editions.

## CHECKMATE

FTN95, like its predecessor FTN77, has strong run-time checking options, collectively called CHECKMATE. Compiler switches can turn on various levels of run-time checking. These include array bound checks, constant modification, DO LOOP modification, argument checking and undefined variable use. Program run-times are increased when checking is used.

## ClearWin+

ClearWin+ is a library built into the FTN95 run-time system. It offers an easy to use interface to the Windows API and is not available when producing .NET code. It makes use of a set of format codes and call-backs. The format codes resemble C style printf codes. ClearWin+ is used to power the UI for Simfit. From FTN95 version 7.00 a 64-bit version of ClearWin+ is included. This can be used with existing, free, 64-bit compilers.
A simple ClearWin+ program:
A full GUI interface with windows, menus, popup dialog boxes, list boxes, edit boxes, bitmaps, toolbars, etc can be developed using the available format codes. Applications written using ClearWin+ can also contain graphics regions, enabling charts and graphs to be included. OpenGL graphics can also be included.
A simple ClearWin+ program that demonstrates two dimensional graph plotting using ClearWin+:

## SDBG/SDBG64

FTN95 can add extra debugging information to the EXE files that it produces. This facility is made available when the user requests it with the appropriate compiler options (/debug, /check, /undef ). The SDBG/SDBG64 debuggers are fast and capable tools that are easier to learn and use than the much more versatile but resource-hungry Visual Studio tools.

## Visual Studio

FTN95 was the first Fortran compiler capable of producing code for Microsoft .NET. In addition plug-ins are available that allows FTN95 programs to be written, compiled and debugged inside Visual Studio. The plug-ins fully support Win32 and .NET code generation. The current release has plug-ins for Visual Studio from 2008 to 2019. There is currently no plug-in for Visual Studio 2022. The FTN95 plug-ins can be installed into Visual Studio Community Edition.

## Plato

Plato is the Integrated Development Environment supplied with FTN95. It can edit, compile and debug programs in a manner similar to the Visual Studio plug-ins. Although Plato specialises in Fortran it is not limited to it and can be tuned to work with any compiler. It is designed to stand-alone from FTN95.

## Salford Fortran

FTN95 was developed by Salford Software Limited, a company owned by University of Salford, and is the successor to their Fortran 77 compiler FTN77. In August 2004 Salford Software relinquished control of FTN95 to Silverfrost Limited. Silverfrost FTN95 is often referred to as Salford FTN95 because of its University of Salford pedigree.

## Using FTN95 with third party DLLs

FTN95 programs can be linked to dynamic libraries generated by other Fortran compilers such as gFortran and Intel Fortran. The calling conventions among these compilers are quite similar, and the Silverfrost linkers (Slink/Slink64) can directly link users' object files to routines in one or more Windows dynamic libraries (DLLs), such as the Intel MKL DLLs, without the need for an import library.

## Fortran 2003 and 2008

Features from the later Fortran 2003 and 2008 standards are available with FTN95, including:
Fortran 2003:
* Standard intrinsics in initialisation statements.
* NINT, AINT, ANINT and TRANSPOSE allowed in initialisation statements.
* "Allocate on assignment”
* ISO_C_BINDING.
* Allocate on assignment for PACK and RESHAPE intrinsics.
* The Fortran 2003 Procedure pointers and type-bound procedures: (1) Type bound procedures (defined within TYPE CONTAINS). (2) Type procedure pointers (defined as members of a TYPE). (3) General procedure pointers (not defined with a TYPE).
* STREAM input and output.
* Intrinsic MOVE_ALLOC.
* INTENT for POINTER arguments
* I/O FLUSH statement.
* I/O routines, keyword argument IOMSG.
* Intrinsic GET_ENVIRONMENT_VARIABLE.
* ASSOCIATE construct.
* Parameterised derived types.
* PROTECTED attribute for module variables.
Fortran 2008:
* Intrinsic EXECUTE_COMMAND_LINE.
* ISO_FORTRAN_ENV with intrinsics COMPILER_VERSION and COMPILER_OPTIONS.
* Complex intrinsics such as ACOS, ACOSH, COSH, and TAN.
* Real intrinsics ACOSH, ASINH, and ATANH.
* DO CONCURRENT construct.
* Intrinsic ATAN(Y,X).
* z%re and z%im for complex z.
* Intrinsic HYPOT(X,Y)
* Intrinsic FINDLOC.
* ISO_C_BINDING, C_SIZEOF intrinsic.
* Intrinsic STORAGE_SIZE.
* BLOCK construct.
* BACK argument for MINLOC, MAXLOX and FINDLOCK.