# The '@' Function

Updated: 6/8/2021, 10:23:18 AM
Created: 6/8/2021, 10:23:18 AM
Last Updated By: Daniel Klein
Read Time: 5 minute(s)

Tags: pwd @ function @

# Description

The @ function is used to position the cursor to a specific point on the terminal screen.The function can be used as follows:

@(col{, row})
1

Where:

  • col and row can be any expression that evaluates to a numeric value.
  • col specifies, to which column on the screen the cursor should be moved.
  • row specifies which row (line) on the screen to position the cursor.

Specifying col on its own will locate the cursor to the required column on whichever row it currently occupies. The terminal address starts at (0,0), that being the top left hand corner of the screen.

# Note

When specified values exceed either of the physical limits of the current terminal, then unpredictable results will occur.

Cursor addressing will not normally work when directed at a printer. Building printer independence into a program can be achieved by accessing the terminfo database through the SYSTEM() function.

If the function is given a screen code as an argument as below:

@(screen_code)
1

Where screen_code is any valid jBASIC screen code.

The function can be used to control the behavior of the display screen. Screen color can also be controlled. For example:

CRT @(-1):@(2, 30):"Hi there!":
1

The above can be used to clear the screen before the greeting "Hi there!" is displayed at the location specified by the second @ function.

Some valid screen codes are listed below:

-1 clear the screen and home the cursor.
-2 home the cursor.
-3 clear screen from the cursor to the end of the screen.
-4 clear screen from cursor to the end of the current screen line.
-9 move the cursor one character to the left.
-10 move the cursor one row up the screen.

Other @ codes include:

@ACCOUNT Current account
@AM CHAR(254)
@CALLSTACK Call stack (i.e. if used in a subroutine)
@CODEPAGE For International mode
@COMMAND see @SENTENCE
@CR Carriage return
@DATA DATA input (e.g. when using EXECUTE)
@DAY Calendar day number of the month
@EOF Explain
@ESC CHAR(27)
@FALSE 0
@FF Form feed character for printing
@FILENAME Used in I-type dictionaries
@FILEVAR File variable (i.e. used in an I-type subroutine)
@FM see @AM
@ID Used in I-type dictionaries
@IM CHAR(255)
@LEVEL EXECUTE level of nesting
@LF Line-feed
@LOCALE For International mode
@LOGNAME Operating system login name
@LPTRHIGH Page height
@MONTH Current month number
@PARASENTENCE see @SENTENCE
@PATH Current working directory
@PID Process ID
@RECORD Used in I-type dictionaries
@RM see @IM
@SELECTED Item count from active select
@SM see @SVM
@SVM CHAR(252)
@TAB Tab character
@TIMEZONE current JBASE_TIMEZONE
@TM CHAR(251)
@TRUE 1
@TTY Current tty device
@UDTNO see @USERNO
@UID Operating system user ID
@UNASSIGNED Unassigns a variable
@USER Operating system login name
@USERNO jBASE port number
@USERSTATS Current user statistics:
1> The port number

<2> The number of programs running in this port.

<3> Time the user started in Universal Co-ordinated Time or UTC  (not a dyslexic mistake). This is raw UNIX time. You can convert this to jBASE  internal time format using the U0FF0 conversion or to internal date format using  the U0FF1 conversion.

<4> The process ID

<5> Account name

<6> User name. Normally the operating system name.

<7> Terminal name in jBASE format

<8> Terminal name in Operating system format.

<9> Database name

<10> TTY device name

<11> Language name.

<12> Time in UTC the listening thread last found the thread  alive.

<13> Amount of heap space memory in free space chain on a  process wide basis. Not real-time, only updated every 15 seconds.

<14> Amount of heap space memory in use on a process wide basis.  Not real-time , only updated every 15 seconds

<15> Thread type as an internal integer.

<16> Type of thread as a text string.

<17> License counters

<18> Number of OPEN’s performed.

<19> Number of READ’s performed.

<20> Number of WRITE's performed.

<21> Number of DELETE's performed

<22> Number of CLEARFILE's performed

<23> Number of PERFORM/EXECUTE's performed.

<24> Number of INPUT's performed.

<25> Not used.

<26> Number of jBASE files the application thinks it has open at  the moment.

<27> Number of jBASE files actually opened by the operating  system at the moment.

<28> Any data set by the application using @USER.ROOT

<29> Process Identifier. A string created by the operating  system to identify the process. It is O/S specific. Currenly on IBM i-series  platform only.

<30> to <40> Reserved.

Attributes 41 onward are multi-valued, one value per perform  level, and there are <2> perform levels active.

<41,n> Program name and command line arguments.

<42,n> The line number in jBASE BASIC the program is currently  executing.

<43,n> The source name in jBASE BASIC the program is currently  executing.

<44,n> Not used.

<45,n> Not used.

<46,n> Status of program execution as a readable text string.

<47,n> Status of program execution as an internal integer.

<48,n> User CPU time . Depending upon the hardware this will be  either for the entire process or just the single thread.

<49,n> System CPU time.Depending upon the hardware this will be  either for the entire process or just the single thread.

<50,n> User CPU time used by any external child processes it  might have spawned.

<51,n> System CPU time used by any external child processes it  might have spawned.

<52,n> Any data set by the application using @USER.THREAD

@VM CHAR(253)
@WHO see @ACCOUNT
@YEAR Current year number

Go back to jBASE BASIC

Go back to Programmers' Reference Guide