Fresh IDE . Documentation
Not logged in

This repository is a mirror!

The original is located on: https://fresh.flatassembler.net/fossil/repo/fresh
If you want to follow the project, please update your remote-url

Setting Up

The first thing to do is to download fasm in your platform of choice. Fasm does not require installation nor do you need special administrative privileges or a root account in order to start using it.

The second thing is to get a copy of FreshLib. FreshLib is just fasm source code, simply save it in a directory of choice.

FreshLib needs an environment variable called TargetOS in order to know the target platform of the generated application. Currently, the allowed values are: Win32 and Linux.

A second environment variable is suggested called lib having the full path to FreshLib. The library does not need this, but it will make your own sources more portable.

From Linux:

export TargetOS=Linux
export lib=/home/test/freshlib

From Windows:

set TargetOS=Win32
set lib=c:\projects\freshlib

That's all. Now it is time to produce the first FreshLib application using just Fasm.

Hello World

include '%lib%/compiler/executable.inc'
include '%lib%/macros/allmacros.inc'
include '%lib%/equates/allequates.inc'

_BinaryType console

include '%lib%/system/process.asm'
include '%lib%/simpledebug/debug.asm'

_CodeSection

start:

        InitializeAll

        DebugMsg 'Hello world!'

        FinalizeAll
        call    Terminate

_ImportSection

include '%lib%/imports/allimports.asm'

_DataSection

IncludeAllGlobals

The most important thing to note is that regardless the platform you have chosen, the code is exactly the same. In other words, if you change the value of your environment variable TargetOS, the same code will produce a different executable file targeting that platform. This is the main characteristic of the FreshLib and this is the first design criteria that you will want to follow to have a truly platform independent application.

This is a highly portable development environment, perhaps the most portable among non interpreted languages. The entire development process could run from removable media and the same set of source code files could be used from Win32 and Linux to produce binaries for either of them.

Creating Files

include '%lib%/compiler/executable.inc'
include '%lib%/macros/allmacros.inc'
include '%lib%/equates/allequates.inc'

_BinaryType console

include '%lib%/simpledebug/debug.asm'
include '%lib%/system/files.asm'
include '%lib%/system/process.asm'

_CodeSection

start:

        InitializeAll

        DebugMsg 'FreshLib Tutorials - Module: Files'

iglobal
        filename        db './tut01.txt',0
        sizeof.filename = $-filename
endg

uglobal
        hFile   dd ?
endg

        stdcall FileCreate, filename
        jc      .error
        mov     [hFile], eax
        DebugMsg "A new file was created:"
        stdcall OutputNumber, [hFile], 16, 2
        DebugMsg " is the handle of the file"

        stdcall FileWrite, [hFile], filename, sizeof.filename
        jc      .error
        stdcall OutputNumber, eax, 10, 2
        DebugMsg " bytes were written into the file"

        stdcall FileClose, [hFile]
        jc      .error
        DebugMsg "The file was properly closed"

        stdcall FileDelete, filename
        jc      .error
        DebugMsg "The file was finally deleted"
        jmp     .exit

.error:
        DebugMsg "Sorry, an error occurred"

.exit:
        FinalizeAll
        stdcall Terminate, 0

_ImportSection

include '%lib%/imports/allimports.asm'

_DataSection

IncludeAllGlobals

Simple Console



Basic GUI