L 2 Infobasic Programming ALL FUNCTIONS
L 2 Infobasic Programming ALL FUNCTIONS
Agenda
Introduction to Infobasic
Arrays and types of arrays
Introduction to subroutines and programs
Important functions/commands in Infobasic
Steps to create a subroutine in T24
Compiling and cataloguing routines and programs
T24 routines – file operations
T24 routines – sequential file access
T24 – Creation of functions and routines with arguments
Introduction To Infobasic
Dynamic Arrays
Dynamic in nature
Variable length
Need not be declared
Can hold any type of data
Automatically increase or decrease in size depending on the data
All variables in Infobasic are dynamic arrays
Dimensioned arrays
Have a fixed number of rows and columns
Can hold any type of data
Needs to be declared
Used when dimensions and extents are known and are not likely to
change
Dynamic Array
CUSTOMER.NAME = ‘’
RATE = 0
DATE = “121202”
TemenosTrgFMIndiaVMUKVMGenevaFMTechnicalVMFunctionalF
M
jBASESMT24VMLendingSMFinancialsFMFMTrainer.1
Structure Of An Infobasic Program
*Comments *Comments
PROGRAM <Programname> SUBROUTINE <Subroutinename>
Statement 1 Statement 1
Statement 2 Statement 2
Statement 3 Statement 3
RETURN
END END
Compiling And Cataloguing Routines
Executing Routines
Executing Programs
Writing A Simple Infobasic Program
jsh..>HELLO
Hello World
SUBROUTINES WITH PARAMETERS
Example:
Step 1:
Create a routine that accepts two values and returns the multiplication of two
values in variable.
SUBROUTINE TEST.CALLED.RTN(A,B,C)
C=A*B
RETURN
END
SUBROUTINES WITH PARAMETERS
Step 2: Create another routine that supplies the two values and prints the result.
PROGRAM TEST.CALLING.RTN
A = 10 ; B =20
CALL TEST.CALLED.RTN(A,B,RESULT)
PRINT “RESULT : ”:RESULT
END
Step 3: Compile and catalog the Program and Subroutine.
Step 4:
Run the Program
Result : RESULT : 200
PATH
Unix
PATH=$PATH:/apps/bin
export PATH
Windows
SET PATH=%PATH%;D:\
PATH=%PATH%;D:\apps
apps\\bin
JBCOBJECTLIST
Unix
JBCOBJECTLIST=$HOME/lib:/home/TESTBASE/lib
export JBCOBJECTLIST
Windows
SET JBCOBJECTLIST=%HOME%\
JBCOBJECTLIST=%HOME%\lib;C:
lib;C:\\dev
dev\\TESTBASE
TESTBASE\\lib
JBCDEV_BIN AND JBCDEV_LIB
export JBCDEV_BIN=$HOME/bin
export JBCDEV_LIB=$HOME/lib
Control Structures
• IF-THEN-ELSE Structure
• CASE Structure
• FOR-NEXT Structure
• LOOP-REPEAT Structure
Control Structures
IF THEN ELSE
IF expression THEN
statements
END ELSE
IF expression THEN
statements
END ELSE
statements
END
END
IF THEN ELSE - EXAMPLE
A=2
IF A > 10 THEN
PRINT “GIVEN NUMBER IS GT 10”
END ELSE
IF A 5 THEN
PRINT “INPUT IS GT THAN 5 AND LE 10”
END ELSE
PRINT “INPUT GIVEN IS LT 5”
END
END
BEGIN CASE
CASE <variable> = <value>
<statements>
CASE <variable> = <value>
<statements>
CASE <variable> = <value>
<statements>
CASE 1
<statements>
END CASE
BEGIN CASE … END CASE
FOR
FOR - NEXT Structure
• Facilitates repeated execution of a set of statements.
• Control exits from structure after pre-determined number of
executions.
Output:
COUNTER VARIABLE:1
COUNTER VARIABLE:2
COUNTER VARIABLE:3
COUNTER VARIABLE:4
COUNTER VARIABLE:5
COUNTER VARIABLE:6
COUNTER VARIABLE:7
COUNTER VARIABLE:8
COUNTER VARIABLE:9
COUNTER VARIABLE:10
Control Structures
Output :
COUNTER VARIABLE:1
COUNTER VARIABLE:3
COUNTER VARIABLE:5
COUNTER VARIABLE:7
COUNTER VARIABLE:9
Control Structures
X= 0
PROGRAM TEST2
X= 1
X=0
X= 2
LOOP
X= 3
UNTIL X>4 DO
X= 4
PRINT "X= “ :X
X=X+1
REPEAT
END
Other Flow Control Statements
They are operators that combine two or more relational expressions.Logical operators
in info Basic are
AND
OR
NOT
Example
IF EMP.DESG EQ ‘MGR’ AND EMP.SAL GT 10000 THEN In the logical expression
above, the logical operator ‘AND’ combines the two relational expressions ‘EQ’ and
‘GT’.
Basic Commands
Compiler Directives
$INSERT - Inserts and compiles info Basic source code from another
program into the program being compiled
INPUT
To Accept a Value for a Variable From User
SYNTAX :
INPUT VARIABLE, LENGTH
EXAMPLE
1. INPUT NAME,10
2. INPUT @(10,5):N,10
PROMPT
SYNTAX :
PROMPT expr
Example :
PROMPT “#”
DATA
Example : A = 10 ; B = 22
DATA A,B
INPUT NO.OF.TRAINEES
INPUT AVG.AGE
DISPLAY Commands
CRT
Used to place Text & Data on the terminal
SYNTAX :
CRT @(COLUMN,ROW): TEXT / VARIABLE
SYNTAX :
PRINT @(COLUMN,ROW): TEXT / VARIABLE
Example :
PRINT @(10,12):A,B
PRINT @(10,12): “ENTER THE NAME”:
INPUT NAME,12
LOCATE
Used to search a string in a dynamic array and get its position. Returns the field
Position only.
SYNTAX :
LOCATE <string> IN <array> {<field pos,multivalue pos>} SETTING <var>
THEN/ELSE <statements>
Example :
Y.ARRAY = 'KALLIS':@FM:'JONTY':@VM:'NICKY‘
LOCATE ‘KALLIS’ IN Y.ARRAY<2,1> SETTING POS ELSE NULL
RESULT: 2
STRING Manipulation
SYNTAX : LEN(string)
Example :
CRT LEN(“TEMENOS”)
Output : 7
FIELD
SYNTAX : FIELD(string,delimiter,occur,fields )
Example : 1
X = “A/B/C/D”
Y = FIELD(X,”/”,2,2)
RESULT : Y has a value of B/C
Example : 2
X = “1-2-3-4-5-6”
Y = FIELD(X,”-”,3,2)
RESULT : Y has a Value 3-4
INDEX
SYNTAX:
INDEX(string,sub string,occur)
Example :
SYNTAX: OUTPUT
CRT ALPHA(‘ABCDEF’) 1
CRT ALPHA(‘10ABCDEF’) 0
CRT ALPHA(‘ABC DEF’) 0
CHAR
SYNTAX: CHAR(expr)
Example:
X = CHAR(65)
X returns the value “A”
SEQ
SYNTAX : SEQ(expr)
Example : SEQ(“A”) returns 65.
COUNT
SYNTAX:
COUNT(string.expr, substr.expr)
Example :
REC=34:”-”:VM:55 :”-”: 88
R=COUNT(REC,@VM)
Result : R has a Value of 2.
Example
A=“TEMENOS”
CRT COUNT(A,’S’)
Output : 1
User Defined functions in InfoBasic
under jBase
DEFINING FUNCTIONS
STEP 1:
Define a Function that accepts two values and return the result in a
variable.
FUNCTION TEST.FUN(A,B)
C=A*B
RETURN(C)
END
STEP 2:
Compile and Catalog the Function.
Example:
SYNTAX:
CALL F.READ(Filename,record.id,dynamic.array,File.var,Error.var)
Filename : File Name
Record.id : ID of the record to be read
Dynamic.array : Dynamic array that will hold the read record
File.var : File Path
Error.var : Error Variable
Example
FN.CUSTOMER = ‘FBNK.CUSTOMER’
F.CUSTOMER = ‘’
R.CUSTOMER = ‘’
CALL OPF(FN.CUSTOMER,F.CUSTOMER)
CALL F.READ (FN.CUSTOMER,Y.CUSTOMER.ID,R.CUSTOMER,
F.CUSTOMER,Y.CUS.ERR)
F.WRITE
SYNTAX :
CALL F.WRITE (Filename, Record.id, Dynamic array)
Filename : file name
Record.id : Record to be written
Dynamic array : Array that holds the values to be written on
a record
EXAMPLE
SUBROUTINE CUST.READ
$INSERT I_COMMON
$INSERT I_EQUATE
$INSERT I_F.CUSTOMER
GOSUB INIT
GOSUB OPENFILES
GOSUB PROCESS
RETURN
INIT:
FN.CUS = "FBNK.CUSTOMER"
F.CUS = " "
Y.CUS.ID = '100037'
Y.NATIONALITY = " "
Y.MNEMONIC = " "
R.CUSTOMER = " "
Y.ERR = " "
RETURN
Solution - Contd...
OPENFILES:
CALL OPF(FN.CUS,F.CUS)
RETURN
PROCESS:
CALL F.READ(FN.CUS, Y.CUS.ID , R.CUSTOMER , F.CUS, Y.ERR)
Y.NATIONALITY = R.CUSTOMER<EB.CUS.NATIONALITY>
Y.MNEMONIC = R.CUSTOMER<EB.CUS.MNEMONIC>
PRINT “CUSTOMER ID IS :”:Y.CUS.ID
PRINT "NATIONALITY IS :":Y.NATIONALITY
PRINT "MNENOMIC IS :":Y.MNEMONIC
RETURN
END
EB.READLIST
SUBROUTINE CUST.READ.WRITE
$INSERT I_COMMON
$INSERT I_EQUATE
$INSERT I_F.CUSTOMER
GOSUB INIT
GOSUB OPENFILES
GOSUB PROCESS
RETURN
INIT:
FN.CUS = "FBNK.CUSTOMER"
F.CUS = " "
Y.CUS.ID = ‘’
Y.NATIONALITY = " "
Y.MNEMONIC = " "
R.CUSTOMER = " "
Y.ERR = " "
RETURN
Solution - Contd...
OPENFILES:
CALL OPF(FN.CUS,F.CUS)
RETURN
PROCESS:
SEL.CMD = ‘SELECT ‘:FN.CUS
CALL EB.READLIST(SEL.CMD,SEL.LIST,’’,NO.OF.REC,RET.CODE)
LOOP
REMOVE Y.CUS.ID FROM SEL.LIST SETTING POS
WHILE Y.CUS.ID:POS
CALL F.READ(FN.CUS, Y.CUS.ID , R.CUSTOMER , F.CUS , Y.ERR)
Y.OLD.ACCT.OFFICER = R.CUSTOMER<EB.CUS.ACCOUNT.OFFICER>
IF Y.OLD.ACCT.OFFICER EQ ‘1’ THEN
Y.NEW.ACCT.OFFICER = ‘2’
R.CUSTOMER<EB.CUS.ACCOUNT.OFFICER> = Y.NEW.ACCT.OFFICER
END
Solution - Contd...
OPEN FBNK.CUSTOMER…….
But…….
Open A File (Cont.)
CALL OPF(FN.CUS,F.CUS)
FN.CUS = ‘F.CUSTOMER’ (File Name)
F.CUS = ‘’ (File Path)
Read A File
CALL F.READ(FN.CUS,”100069”,R.CUSTOMER,F.CUS,CUS.ERR1)
F.READ always checks if the record is in cache. If yes, fetches the record
from the cache, else retrieves the record from the databse.
Record Returned By F.READ
Extract Values
R.CUSTOMER<1>
R.CUSTOMER<15>
Y.MNEMONIC = R.CUSTOMER<EB.CUS.MNEMONIC>
Y.NATIONALITY = R.CUSTOMER<EB.CUS.NATIONALITY>
Display Parts Of A Record(Cont.)
OPENFILES:
CALL OPF(FN.CUS,F.CUS)
RETURN
PROCESS:
CALL F.READ(FN.CUS,Y.CUS.ID,R.CUSTOMER,F.CUS,CUS.ERR1)
Y.MNEMONIC = R.CUSTOMER<EB.CUS.MNEMONIC>
Y.NATIONALITY = R.CUSTOMER<EB.CUS.NATIONALITY>
CRT “Customer Id: “:Y.CUS.ID
CRT “Customer Mnemonic: “:Y.MNEMONIC
CRT ‘Customer Nationality: “:Y.NATIONALITY
RETURN
END
Thank You