.. index:: 
	single: System Functions; Introduction

================
System Functions
================

In this chapter we are going to learn about the system functions

* System()

* SysGet()

* IsMSDOS()

* IsWindows()

* IsWindows64()

* IsUnix()

* IsMacOSX()

* IsLinux()

* IsFreeBSD()

* IsAndroid()

* Windowsnl()

* Get Command Line Arguments

* Get Active Source File Name

* CurrentDir()

* ExeFileName()

* ChDir()

* ExeFolder()

.. index:: 
	pair: System Functions; System() Function

System() Function
=================

We can execute system commands using the system() function

Syntax:

.. code-block:: ring

	System(cCommand)

Example:

.. code-block:: ring

	System("myapp.exe") 	# Run myapp.exe
	System("ls")		# print list of files

.. index:: 
	pair: System Functions; SysGet() Function

SysGet() Function
=================

We can get environment variables using the Get() function

Syntax:

.. code-block:: ring

	SysGet(cVariable)

Example:

.. code-block:: ring

	see sysget("path")		# print system path information


.. index:: 
	pair: System Functions; IsMSDOS() Function

IsMSDOS() Function
==================

We can check if the operating system is MSDOS or not using the IsMSDOS() function

Syntax:

.. code-block:: ring

	IsMSDOS() ---> Returns 1 if the operating system is MS-DOS, Returns 0 if it's not
		       

.. index:: 
	pair: System Functions; IsWindows() Function

IsWindows() Function
====================

We can check if the operating system is Windows or not using the IsWindows() function

Syntax:

.. code-block:: ring

	IsWindows() ---> Returns 1 if the operating system is Windows, Returns 0 if it's not


.. index:: 
	pair: System Functions; IsWindows64() Function

IsWindows64() Function
======================

We can check if the operating system is Windows 64bit or not using the IsWindows64() function

Syntax:

.. code-block:: ring

	IsWindows64() ---> Returns 1 if the operating system is Windows64, Returns 0 if it's not


.. index:: 
	pair: System Functions; IsUnix() Function

IsUnix() Function
=================

We can check if the operating system is Unix or not using the IsUnix() function

Syntax:

.. code-block:: ring

	IsUnix() ---> Returns 1 if the operating system is Unix, Returns 0 if it's not


.. index:: 
	pair: System Functions; IsMacOSX() Function

IsMacOSX() Function
===================

We can check if the operating system is Mac OS X or not using the IsMacOSX() function

Syntax:

.. code-block:: ring

	IsMacOSX() ---> Returns 1 if the operating system is Mac OS X, Returns 0 if it's not


.. index:: 
	pair: System Functions; IsLinux() Function

IsLinux() Function
==================

We can check if the operating system is Linux or not using the IsLinux() function

Syntax:

.. code-block:: ring

	IsLinux() ---> Returns 1 if the operating system is Linux, Returns 0 if it's not


.. index:: 
	pair: System Functions; IsFreeBSD() Function

IsFreeBSD() Function
====================

We can check if the operating system is FreeBSD or not using the IsFreeBSD() function

Syntax:

.. code-block:: ring

	IsFreeBSD() ---> Returns 1 if the operating system is FreeBSD, Returns 0 if it's not


.. index:: 
	pair: System Functions; IsAndroid() Function

IsAndroid() Function
====================

We can check if the operating system is Android or not using the IsAndroid() function

Syntax:

.. code-block:: ring

	IsAndroid() ---> Returns 1 if the operating system is Android, Returns 0 if it's not

.. index:: 
	pair: System Functions; Example

Example
=======

.. code-block:: ring

	see "IsMSDOS()     --> " + ismsdos()     + nl
	see "IsWindows()   --> " + iswindows()   + nl
	see "IsWindows64() --> " + iswindows64() + nl
	see "IsUnix()      --> " + isunix()      + nl
	see "IsMacOSX()    --> " + ismacosx()    + nl
	see "IsLinux()     --> " + islinux()     + nl
	see "IsFreeBSD()   --> " + isfreebsd()   + nl
	see "IsAndroid()   --> " + isandroid()   + nl

Output:

.. code-block:: ring

	IsMSDOS()     --> 0
	IsWindows()   --> 1
	IsWindows64() --> 0
	IsUnix()      --> 0
	IsMacOSX()    --> 0
	IsLinux()     --> 0
	IsFreeBSD()   --> 0
	IsAndroid()   --> 0

.. index:: 
	pair: System Functions; Windowsnl() Function

Windowsnl() Function
====================

We can get the windows new line string using the Windowsnl() function.

Syntax:

.. code-block:: ring

	WindowsNL() ---> Returns a string contains CR+LF = CHAR(13) + CHAR(10)

Example:

.. code-block:: ring

	cStr = read("input.txt")

	if iswindows()
		cStr = substr(cStr,windowsnl(),nl)
	ok

	aList = str2list(cStr)
	# to do - list items processing using "for in"
	cStr = list2str(aList)

	if iswindows()
		cStr = substr(cStr,nl,windowsnl())
	ok

	write("ouput.txt",cStr)

.. index:: 
	pair: System Functions; Get Command Line Arguments

Get Command Line Arguments
==========================

We can get the command line arguments passed to the ring script using the sysargv variable.

The sysargv variable is a list contains the command line parameters.

Example

.. code-block:: ring

	see copy("=",30) + nl
	see "Command Line Parameters" + nl
	see "Size : " + len(sysargv) + nl
	see sysargv
	see copy("=",30) + nl
	nStart = sysargv[3]
	nEnd = sysargv[4]
	for x = nStart to nEnd
		see x + nl
	next

Output

.. code-block:: ring

	b:\mahmoud\apps\ring>ring tests\syspara.ring 1 10
	==============================
	Command Line Parameters
	Size : 4
	ring
	tests\syspara.ring
	1
	10
	==============================
	1
	2
	3
	4
	5
	6
	7
	8
	9
	10

.. index:: 
	pair: System Functions; Get Active Source File Name

Get Active Source File Name
===========================

We can get the active source file name (*.ring) using the filename() function

Syntax:

.. code-block:: ring

	filename() ---> String contains the active source file name.

Example:

.. code-block:: ring

	see "Active Source File Name : " + filename() + nl

Output:

.. code-block:: ring

	Active Source File Name : tests\filename.ring


Example:

.. code-block:: ring

	if sysargv[2] = filename()
		see "I'm the main program file!" + nl
		# we can run tests here!
	else
		see "I'm a sub file in a program" + nl
	ok

.. index:: 
	pair: System Functions; CurrentDir() Function

CurrentDir() Function
=====================

Return the path of the current directory

Syntax:

.. code-block:: ring

	CurrenDir() ---> String contains the path of the currect directory 

.. index:: 
	pair: System Functions; ExeFileName() Function

ExeFileName() Function
======================

Return the Ring executable file name

Syntax:

.. code-block:: ring

	exefilename() ---> String contains the Ring executable file name

.. index:: 
	pair: System Functions; ChDir() Function

ChDir() Function
================

Change the current directory

Syntax:

.. code-block:: ring

	ChDir(cNewPath)

.. index:: 
	pair: System Functions; ExeFolder() Function

ExeFolder() Function
====================

Return the Ring executable file path

Syntax:

.. code-block:: ring

	exefolder() ---> String contains the Ring executable path
