MAJOR PROGRAM HIERARCHY:

1. interface
2. procedure body
3. routines
4. OS access

(these names are stupid, my english is not good, advice me some better please)

REASON OF THIS HIERARCHY:
  Simplest library possible would be just pack of procedures. However, these procedures
  would have to be rewriten for every platform and every every target type (PE, DLL, ELF)

  For this reason i have separated "interface" from "procedure bodies". Procedure bodies 
  will be common for all platforms. Interface will receive arguments in any way and pass
  them to procedure body.

  Then, another thing. I want procedures to be common for every platform. But procedures
  have to use OS for various thing (access to files, getting video memory, getting
  current display mode description). This is why "OS access" is separate. It's task
  is to unify accessing OS for all platforms.

  And finally, for making code easier to read, maintain, control by user etc. i have
  separated "routines". These will be coordinate transfering and drawing pixture
  with particular effect.

INTERFACE:
  is only part that should be accessed by user (except data structures). It provides
  proper inteface of library to user. For example, DLL version with STDCALL
  convention and COFF object file with arguments passed in registers would be only
  different interface, rest will be same.

PROCEDURE BODY:
  This part is clear, we just ripped some code from it. It receives arguments, calls
  proper OS access procedures and routines that use present hardware (MMX, SSE) to 
  accomplish their's task and return, or return error if some has occured.

ROUTINES:
  procedures containing code which accomplishes one task under one hardware interface.
  Of course one routine can have code for MMX and SSE both using conditionals flags.
  In that case it would be handled by something like:

    ;routine for both MMX and SSE declared as the one for MMX
    DrawRotatedBitmap_MMX:
      ...
      cmp [cpu_flags],HAS_SSE
      jnz .noSSE
        ;SSE code here
        ...
        jmp .end
      .noSSE:
        ;MMX code here
        ...
      .end:
      ...
      retn

    ;and the trick is we will define SSE routine for this operation as alias to one for MMX
    label DrawRotatedBitmap_SSE at DrawRotatedBitmap_MMX

OS_ACCESS:
  provides interface to access OS functions. This interface is of course same for every 
  platform.
