Infobasic Programming - AdvancedInformation in this document is subject to change without notice. No part of this document may be reproduced or transmitted in any form or by any means, electronic or mechanical, for any purpose, without the express written permission of TEMENOS Holdings NV. Copyright 2002-2003 TEMENOS Holdings NV. All rights reserved. PRG2 – Infobasic Programming Published by: Temenos Training Publications Temenos Corporate Education Centre, Temenos India Private Ltd, No.146, Sterling Road, Nungambakkam, Chennai: 600 034, INDIA. Ph: +91 44 2822 2001. E-mail:
[email protected] Authoring Contributions: Alagammai Palaniappan (First Edition, 2001) – Temenos India Private Ltd. Thankful Acknowledgements: Temenos Corporate Training Team Copyright © 2006 TEMENOS HEADQUARTERS SA Warning: This document is protected by copyright law and international treaties. No part of this document may be reproduced or transmitted in any form or by any means, electronic or mechanical, for any purpose, without the express written permission of TEMENOS Holdings NV Unauthorized reproduction or distribution of this presentation or any portion of it, may result in severe civil and criminal penalties, and will be prosecuted to the maximum extent possible under applicable law.” Information in this document is subject to change without notice. Trademarks TEMENOS™, TEMENOS T24™, TEMENOS GLOBUS™, TEMENOS ™, ™ are registered trademarks of TEMENOS HOLDINGS NV in Switzerland and other countries. jBASE®, jBC, jEDI, TM and TM are registered trademarks of TEMENOS Holdings NV in Switzerland and other countries. UNIX is a registered trademark of The Open Group. All other trademarks and copyrights mentioned herein may be the trademarks or registered trademarks of their respective owners. TEMENOS Training Publications Page 2 of 20 Copyright © 2006 TEMENOS HEADQUARTERS SA 2007.1 PRG2 – Infobasic Programming Date Version Changes By 2002 1.7 CACHE READ Alagammai changes.2 Infobasic Alagammai Programming Palaniappan changes July 2004 1.3 TXN Mgt changes Alagammai and overall update Palaniappan September 2004 1.Nandakumar Feb 2007 1.4 EB. modularising c/w TEMENOS Training Publications Page 3 of 20 Copyright © 2006 TEMENOS HEADQUARTERS SA 2007.5 Minor Changes and Sara Cleur formatting January 2007 1. TRANS removed.READ inclusion December 2004 1.READLIST Alagammai amendment and Palaniappan CACHE.6 Formatting changes B.1 .1 jBASE Changes Alagammai Palaniappan 2002 1. 16 Step 2...... 17 Example 3............................. 6 Scope of this document....................... 15 FATAL....................................................... 18 F................................... 17 Additional Information.................................................................................................................................READ..................................................................................................................READU.......................... 7 Step 5............................................................................................................................................................... 15 OVERLAY..................... 16 Step 1.............................. 19 MATREAD........................................................................................................................... 19 Infobasic Commands.......................................................................................................................................................................... 7 Steps 2 And 3................................................... 10 An Insight Into Reading And Writing In T24............................................................. 15 Writing Data........................................................................................................................... 15 Creating Subroutines With Arguments..................................................................................................................................................................................................................................................................................... 7 Algorithm...... 14 Important T24 Routines.................................................................................. 6 Example 1..............................................................................................................................................................................................................1 .............................WRITE............................................................................................................................................................................................................................................ 7 Step 1..................... 9 Consolidated Solution 1............................................................................................................................................................. 16 Example 2............. 17 Step 1...................................................................................................................................... 7 F................................................................ 6 Who should read this..............................................................................................................................................................................................................................................................................................................PRG2 – Infobasic Programming Table of Content Preface..... 7 Step 4......................................... 7 Solution 1... 8 F........................................................ 11 CACHE....................................................................................................................... 17 Step 2.................................................................................................................................................................. 6 Software and their versions..........ERROR...................................................................................................................... 8 Step 6............................................................................................DELETE................................................................................................................................................................................................................... 18 LOCATE..................................................................................................................................................................................... 19 TEMENOS Training Publications Page 4 of 20 Copyright © 2006 TEMENOS HEADQUARTERS SA 2007............................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................ 16 Defining Functions In Infobasic..................................................................................................................................................... 6 Conventions Used.............EX......................................................... .................................................... 19 CONVERT....................................................................................................................................................................................................................................... 20 DELETE....PRG2 – Infobasic Programming MATWRITE................................ 20 TEMENOS Training Publications Page 5 of 20 Copyright © 2006 TEMENOS HEADQUARTERS SA 2007......................................................................1 ............. 1 or above. – Syntax / commands and source codes are given in colored boxes.PRG2 – Infobasic Programming Preface Scope of this document This document is meant to give an insight into certain T24 routines (especially reading and writing) that can be used while writing code for T24. – Information requiring special attention are marked in italics and prefixed with a symbol. Who should read this A consultant who wishes to advance his Infobasic programming skill and write code for T24 Conventions Used – Features available in the latest available T24 release release are prefixed with a symbol.1 . that are required to run the commands / source codes / examples given in this document: – TEMENOS T24 release R4 or above. – Main informational notes are marked in italics and prefixed with a symbol. – Parameters/Environmental variables are marked in italics and prefixed using Software and their versions The following are the various software with their version / release numbers. TEMENOS Training Publications Page 6 of 20 Copyright © 2006 TEMENOS HEADQUARTERS SA 2007. – jBASE v 4. Select all accounts with category = 6001(this category might differ from one T24 installation to another). Step 1 Create the local reference filed CHARGE in the ACCOUNT application using the LOCAL. For this purpose you are expected to create a local reference field by name CHARGE in the Account application and write a subroutine that will check the working balance of all savings accounts. when we read a record. and if the working balance is lesser than 5000 then set the value in the local reference field CHARGE to ‘Y’.TABLE applications.READU instead of F.1 .READU Parameters FILEID file name KEY record-id REC record returned F. all savings accounts that have balance less than 5000 need to be charged a fee.FILEID file variable ER returning error message TEMENOS Training Publications Page 7 of 20 Copyright © 2006 TEMENOS HEADQUARTERS SA 2007. Repeat steps 3 to 5 for all accounts using the LOOP and REPEAT statements. Create the local reference field CHARGE using the LOCAL. F. we need to ensure that we have exclusive control over the record.READ.READLIST.READ statement to read a record from a file. Steps 2 And 3 As discussed earlier use OPF and EB.For each of the accounts selected.TABLE and the LOCAL.Check the working balance of the account and if the balance is less than 5000 then write the entire ACCOUNT record into the ACCOUNT file with the local reference field CHARGE set to ‘Y’ Step 6.REF. But we need to understand that .Update the F. Since the record that we are to read by might updated by us. Normally we would use the F. read the corresponding record from the ACCOUNT file Step 5. Solution 1 Algorithm Step 1 .PRG2 – Infobasic Programming Example 1 As a part of the COB process in T24. Open the ACCOUNT file Step 3.TABLE application. Step 4 Now we need to read the record from the ACCOUNT file. Hence we need to use F.TABLE application and attach it to the ACCOUNT application using the LOCAL. we only obtain a shared lock on the record and hence multiple people can read the record simultaneously.REF. Step 2. As a part of the COB process in T24. Step 4. one of the COB routines will deduct a charge from all accounts which have this field set to ‘Y’.JOURNAL file. WRITE to write on to a file. as mentioned earlier. use F.ACC. If the system is in the Batch mode (COB is in progress) then it will straight write to the disk and not to the cache provided the F.retry xx times with a nn seconds sleep interval I .UPDATE is a core T24 routine that takes care of updating the F.AC.Ignore the lock and return E . Therefore.TRANS(“START”. when you want to modify a record. To update a local reference field R.RETRY) The simple rule is.LOCAL.TABLE and the LOCAL.F. it would not affect the physical layout of the file(would not affect the dict) but will only affect the STANDARD.ID. the write will only happen to the cache. JOURNAL. will not update the JOURNAL file.REF in most of the applications in T24.Y. Note that there is just one physical field called LOCAL. Use the T24 subroutine F.REF and giving the new multi value field a new name. It is only when a subsequent call to JOURNAL. the data will be flushed to the disk.TRANS routine.WRITE is a core T24 subroutine that is used to write a record on to a file.SELECTION. if called when the system is in Batch mode. By using LOCAL.UPDATE.PRG2 – Infobasic Programming RETRY P msg .R.WRITE is not within a transaction block. Please note that JOURNAL.WRITE F.ACC.JOURNAL file and also ensures transaction management. once a local reference field is created. Transaction management can be explicitly triggered in T24 using the EB.ERR.WRITE will only write the data on to the cache.READU and obtain the record.ACCOUNT.UPDATE is encountered. If the system is in the Online mode. The routine works differently depending on mode of T24.Y.REF.TABLE applications.ACCOUNT<AC. When the system is in the Online mode. Step 5 Once the working balance has been extracted and is found to be lesser then 5000.Return immediately with an error message ‘’ (null) .1 . then F. now the local reference field CHARGE needs to be set to ‘Y’ and the entire account record needs to be written on to the ACCOUNT file. CALL EB. All local reference fields will have an entry in the SS application with the Usr Type set to ‘I’ – I descriptor. we are just multi-valuing the field LOCAL.Retry continuously CALL F.prompt user with msg to retry if record locked R nn xx . ”Start of transaction block”) TEMENOS Training Publications Page 8 of 20 Copyright © 2006 TEMENOS HEADQUARTERS SA 2007.ACC.READU(FN.REF. F.1> = ‘Y’. JOURNAL file. a call to F.UPDATE. CALL TRANSACTION.Y.<id of record>.WRITE(<filename>.UPDATE routine in T24.ACCOUNT) Step 6 Use the T24 subroutine JOURNAL.ID.ACC.UPDATE. During the batch stage.ID) Note While writing subroutines that would get executed during the Online stage of T24. TEMENOS Training Publications Page 9 of 20 Copyright © 2006 TEMENOS HEADQUARTERS SA 2007. ‘End of transaction block”) If it any point within a transaction block the transaction needs to aborted.PRG2 – Infobasic Programming Statement 1 Statement 2 Statement 3 CALL EB.WRITE does not require a subsequent call to JOURNAL. Syntax F. CALL JOURNAL.AC.WRITE will fail if it does not find a subsequent call to JOURNAL.WRITE(FN. has the EB. a call to F.JOURNAL file is not maintained.TRANS embedded in it.UPDATE(Y.UPDATE to update the F.ABORT can be called.TRANS(“END”. the T24 subroutine TRANSACTION.R. since the F.ABORT The JOURNAL.<dynamic record variable>) Example CALL F.1 .AC. ACC:” WITH CATEGORY=6001 AND WORKING.ACCOUNT<AC.ACC = ‘’ Y.ACC.ID FROM SEL.ACC.BALANCE < 5000” CALL EB.ID.ACC.ACC.ACCOUNT.RET.BAL.F.ACCOUNT = ‘’ REPEAT TEMENOS Training Publications Page 10 of 20 Copyright © 2006 TEMENOS HEADQUARTERS SA 2007.ACC) RETURN PROCESS: SEL.AC.CMD=“SELECT “:FN.REF.LIST.READLIST(SEL.ID = ‘’ R.ACCOUNT = ‘’ Y.Y.READU(FN.AC.ERR = ‘’ RETRY = ‘’ RETURN OPENFILES: CALL OPF(FN.ACC.LIST SETTING POS WHILE Y.OF.ACC = ‘F.’’.CMD.R.1> = ‘Y’ CALL F.ACC.ACC.ACCOUNT) Y.ERR.WRITE(FN.SEL.R. SUBROUTINE ACC.ACC.NO.Y.ACCOUNT GOSUB INIT GOSUB OPENFILES GOSUB PROCESS INIT: FN.LOCAL.F.PRG2 – Infobasic Programming Consolidated Solution 1 *Subroutine to check if the balance in all savings accounts are less than *5000 and if so.RETRY) R.1 .Y.ACC.ACC.ID:POS CALL F.ID.REC.ACCOUNT’ F.CHECK $INSERT I_COMMON $INSERT I_EQUATE $INSERT I_F.ID = ‘’ R. update a local reference field in the ACCOUNT file called *CHARGE to ‘Y’.CODE) LOOP REMOVE Y. 1 .READ 1. As we have already discussed. Only mainline routines like the one above will need a call to JOURNAL. If not locked. That record is written back to the file b. go to the disk and lock it 4. When an explicit RELEASE statement is encountered TEMENOS Training Publications Page 11 of 20 Copyright © 2006 TEMENOS HEADQUARTERS SA 2007. If the record is not in cache.WRITE within a loop – it might lead to using up all the cache. When the program terminates c. F. T24 itself will make a call to JOURNAL. Check if the record is in cache. We need to choose the right method of extracting data to achieve performance.WRITE is called within a loop and JOURNAL. Working of F. Check if the record is in cache and if so. will fetch it 4. read from the file in the disk and load the record into cache Working of F. read and lock the record from the disk F.PRG2 – Infobasic Programming In the above example. It is only when the control comes out of the loop the data from the cache will actually get flushed to the disk. Perform SMS validations 3. When routines are attached to T24.READU holds info of all record locks so that they can be released during a transaction abort.WRITE would happen only to the cache. F. Obtain the file name and record id 2.READU can be used to read data from files in T24.UPDATE cautiously. the lock gets released when a. Note: Use JOURNAL. Care should be taken when calling F. If it is not in cache. Perform SMS validations 3.READU. Obtain the file name and the record id 2.READ and F. In this case the system is in Online mode and hence all the writes triggered by F.UPDATE is called outside the loop.READU 1.UPDATE. If it is in cache. check if it is locked. It is very important for us to understand how data is read by these routines and the best way to read data so that we get the optimum performance.UPDATE An Insight Into Reading And Writing In T24 There are a number of ways using which data can be retrieved from T24. Whenever we lock a record using F. even if there is no explicit RELEASE statement. <ID> ELSE <Message> READU REC FROM F. F. Always use F. OPEN: Open files to file variables. but fetches only one field of the record unlike F. as OPF is not called to open the file. This is because of the RELEASE statement in JOURNAL. READU <Record> FROM <File Name>.READV to extract data. READ <Record> FROM <File Name>.1 .READ. ID ELSE GOSUB “Record Not Found” READU: Extract data from a file and lock it.FL ELSE ABORT TEMENOS Training Publications Page 12 of 20 Copyright © 2006 TEMENOS HEADQUARTERS SA 2007. F.READU internally calls this to extract data. <ID> ELSE <Message> READ REC FROM F. The jBASE command OPEN can be used to open files.UPDATE.PRG2 – Infobasic Programming In T24. F.FL.CUSTOMER” TO F. in many routines.READU or F. Working of F. OPEN <File Name> TO <File Variable> ELSE ABORT OPEN “FBNK. READ: Extract data from a file.READV call READ internally to extract data. the locks get releases.READU. Never use READ.READ and F.FL. ID ELSE GOSUB CRT “Record Not Found” Please note. when we use READ or READU.READ that fetches the whole record. we need to specify the actual name of the file that we are to open.READV Similar to F. 100069.') a) "" Or 'L' = Take value field in accordance to language Or 'F' = Take full field b) Not used c) Not used d) Delimiter argument e) Ignore error Outgoing Parameters: Value of the field that has been fetched CALL DBR(<FileName:FM:FldToBeFetched:FM:”LangSpecFld”>. Incoming Parameters: Field 1 = File Name (without 'F.<RetVar>) CALL DBR(“CUSTOMER”:FM:EB. TEMENOS Training Publications Page 13 of 20 Copyright © 2006 TEMENOS HEADQUARTERS SA 2007. Please note that the file from which the data needs to be retrieved need not be explicitly opened for DBR as DBR would open the file internally. Following are the various Infobasic commands that can be used to extract data.CUS.NAME:FM:”L”:.PRG2 – Infobasic Programming Working of DBR (T24 subroutine) The DBR routine can be used to extract the value of a single field from a record. All these routines in-turn have to call Infobasic commands to actually obtain data.VAL) All the above routines are core T24 routines that can be used to extract data from T24. This internally does a READ and obtains the record.1 .SHORT.<ID>. From the record.Y.') Field 2 = Name of the filed as in the insert file whose value needs to be fetched Field 3 = miscellaneous arguments (delimiter = '.RET. it fetches the required field’s value and returns it to the user. As a standard rule of thumb.READ CACHE.Error) FILENAME = Name of file .READ CACHE. but also for executing SELECT statements.READ.READ Against F.PRG2 – Infobasic Programming CACHE. When To Use CACHE. a typical example could be reading a record from the VERSION application which obviously will not be changed during the course of normal day to day operation by a user in a production system.Record.ID. If ‘SSelectIDs’ or ‘SSelectARs’ is passed to CACHE.READLIST that will execute the select statement supplied to it.READ maintains a buffer that is not bound within a transaction boundary and gets reset only on exiting the current T24 session So.1 .READ. CACHE. TEMENOS Training Publications Page 14 of 20 Copyright © 2006 TEMENOS HEADQUARTERS SA 2007.EXPIRY in SPF. To put things in perspective.READ is not used to extract a record from a file.READLIST which will execute an ‘Internal’ select.READ is a routine that is used to read a record from a file in T24. CACHE. If the string ‘SelectIDs’ is passed to CACHE. in a production environment be changed by any transaction that a user may input.CUSTOMER) ID = Valid values are ID of a record itself or the following literals ‘SelectIDs‘ ( List of Ids from the ‘FileName’) ‘SSelectIDs’ (List of sorted Ids) ‘SSelectARs’ (List of sorted Ids in ascending order right justified) Record = Data returned Error = RECORD NOT FOUND for example CACHE. any record that will not. extract the record and return to the user Else will perform F. it will in turn call EB. If not older.READ. check if it is not older than the number of seconds specified in the field CACHE.READ(FileName.without the mnemonic (Example: F. all parameter files which require a one time setup and do not contain any dynamic data.READ to extract the record Load the extracted record on to cache Return the record to the user.READ will Check if the record required is in cache Is yes.READ. CACHE. it will in turn call EB. what this means is. can be retrieved using CACHE.READ should not be used on any financial files. can be retrieved using CACHE. 1 .<ID> ON ERROR <Message> WRITE Please note that when a WRITE is executed on a record that has been locked.WRITE internally calls WRITE to actually write. WRITE <Record> ON <Filename>. TEXT = “Customer File Not Accessible” CALL FATAL. opens common files etc.WRITE to write records to the database.EX FATAL. CALL OVERLAY. the WRITE statement will release the lock. This parameter can hold any value.ERROR routine takes in one parameter.EX This is the routine that is called when a user signs on into T24. Writing Data We have already learnt that F.ERROR Routine to display system errors. F. This user name is the name of the user for whom the fatal error was generated. TEMENOS Training Publications Page 15 of 20 Copyright © 2006 TEMENOS HEADQUARTERS SA 2007. Always used F. The FATAL. It clears and loads all the common variables.PRG2 – Infobasic Programming Important T24 Routines OVERLAY.WRITE is used to write data on to T24.ERROR(“CUSTOMER”) The above command will result in updating a record in the PROTOCOL file with the ID : <UserName> . log them to the protocol file and exit. but is usually set to the name of the file on which the fatal error occurred. The text that needs to be displayed as a fatal error needs to be set in the common variable TEXT. Step 2 Create another subroutine that would supply the values and call the DEMO. Let us understand it with a simple example. multiply them and return the result in a variable.CALLED. This section will now introduce you to the process of creating subroutines that can take in arguments or parameters and return values as well. SUBROUTINE DEMO.VAR. SUBROUTINE DEMO.CALLED.PRG2 – Infobasic Programming Creating Subroutines With Arguments All this while we have been learning about subroutines that just display the value on the screen or store the value on to an array.2 = 20 VAR.3 = ARG.RTN(VAR.ARG.2.ARG.1 .RTN VAR.CALLING.RTN(ARG.1. Therefore just specify the arguments one after the other along with the subroutine definition as done above.3. the system would understand that ARG.3) PRINT ‘Result “:VAR.3 is the return parameter.VAR.3 = ‘’ CALL DEMO.CALLELD.2 RETURN END While defining subroutines in Infobasic.3) ARG.3 RETURN END TEMENOS Training Publications Page 16 of 20 Copyright © 2006 TEMENOS HEADQUARTERS SA 2007. Since the subroutine is storing the result in the variable ARG.RTN. we cannot specify which are the incoming and which are the return parameters.2.1.1 = 10 VAR.1 * ARG. Example 2 Step 1 Create a subroutine that will accept 2 integer values. 1 = 10 VAR. When calling a function. There can and will be only one return value and that will directly get assigned to the variable on the right side of the equation as defined above. Step 2 Now the function defined above can be called from any program/subroutine.VAR.2 = 20 DEFFUN DEMO.3 RETURN Incase of a function.VALUE = ARG. Let us understand it with a simple example.PRG2 – Infobasic Programming Defining Functions In Infobasic Functions can also be defined in Infobasic. Now create a subroutine that would supply values and call the above-defined function. SUBROUTINE DEMO. FUNCTION DEMO.1. the function needs to be defined first using the DEFFUN command and only then the function should be called. multiply them and return the result in a variable.FUNCTION(VAR. TEMENOS Training Publications Page 17 of 20 Copyright © 2006 TEMENOS HEADQUARTERS SA 2007.1 * ARG.1.2 RETURN(RET.1.VAL.1 and VAL.ARG.1 .VALUE) END The RETURN statement is used to return a value in a function. only the incoming parameters need to be defined.3 = DEMO. Un-initialized variables VAL. These functions can take in any number of parameters but return only one value. Example 3 Step 1 Create a function that will accept 2 integer values.2) CRT “Result :”:VAR.SUB.RTN VAR.FUNCTION(ARG.2 have been given to demonstrate that any variable can be given at the time of defining a function.2) VAR.CALLING.2) RET.FUNCTION(VAL. array<FIELD.1 .Expr : AL Ascending left(Alpha sort) AR Ascending right(Numeric sort) DL Descending left(High-low alpha sort) DR Descending right(High-low numeric sort) Example DAYS = “MON:”FM:”TUE”:FM:”WED”:FM:”THU”:FM:”FRI” LOCATE “WED” IN DAYS SETTING FOUND ELSE FOUND = 0 CRT “Position of WED in DAYS dynamic array :”:FOUND LOCATE “SAT” IN DAYS BY “AL” SETTING POS ELSE INS “SAT” BEFORE DAYS<POS> END CRT “Position where SAT has been inserted :”:POS CRT “Days dynamic array after inserting SAT :”:DAYS Output Position of WED in DAYS dynamic array : 3 Position where SAT has been inserted : 2 Days dynamic array after inserting SAT : MONSATTUEWEDTHUFRI TEMENOS Training Publications Page 18 of 20 Copyright © 2006 TEMENOS HEADQUARTERS SA 2007.expr SETTING variable THEN statements ELSE statements Additional Information Sort.VALUE>.STARTPOS BY sort. Syntax LOCATE expr IN dynamic.PRG2 – Infobasic Programming Additional Information LOCATE LOCATE statement is used to locate the position of a string or determine the position to insert in to maintain a specific sequence. Incase the read is successful. Syntax MATREAD array FROM file.CUS.DELETE is also a core T24 subroutine that is used to delete a record from a file.Y..DETAILS. The above statement will search for a record with id specified in the variable ID1. then the statements following the ‘THEN’ statements are executed else the statements following the ‘ELSE’ statement are executed. record. if found.PRG2 – Infobasic Programming F.variable.DELETE(FileName.KEY TEMENOS Training Publications Page 19 of 20 Copyright © 2006 TEMENOS HEADQUARTERS SA 2007.DELETE(FN.ID THEN statements ELSE statements Example MATRED Array1 from F. MATWRITE MATWRITE is used to build a dynamic array from a specified dimensioned array and write it to the file opened to file. You can specify the id of the record to be picked up from the array.. Syntax F. it will transfer the record to the array Array1.CUSID) Infobasic Commands MATREAD MATREAD is a command that is used to read the contents of a dimensioned/dynamic array.ID1 THEN ….REGISTER.1 .variable.id.DELETE F.variable using a key of record. Syntax MATWRITE matrix ON file.Id of the record to be deleted) CALL F. ELSE …. DELETE T24 routine uses this statement to delete a record.STRING TEMENOSVMT24 DELETE Use the DELETE command to delete a record.PRG2 – Infobasic Programming Example DIM ARRAY1(5) MATREAD ARRAY1 FROM TEM1. DELETE <FileName>.<ID> TEMENOS Training Publications Page 20 of 20 Copyright © 2006 TEMENOS HEADQUARTERS SA 2007.100 CONVERT Use the CONVERT command to convert characters to other characters.STRING = “TEMENOSFMT24” CONVERT FM TO VM IN Y.101 ELSE MAT ARRAY1 = ‘’ END MATWRITE ARRAY1 ON TEM1.1 .STRING CRT Y. Y. The F.