FMS Application Programming Handout + FMS Application Programming Handout + FMS Application Programming Handout Miami '81 Symposium + Miami '81 Symposium + Miami '81 Symposium ***** FORM DRIVER **** + ***** FORM DRIVER **** + ***** FORM DRIVER **** 1. RUN-TIME COMPONENT OF RMS. 2. SET OF SUBROUTINES TO ALLOW AN APPLICATION PROGRAM TO ACCESS FORMS AND CONTROL OPERATOR INTERACTION. 3. LINKED WITH APPLICATION PROGRAM. **** FORM DRIVER FEATURES **** + **** FORM DRIVER FEATURES **** + **** FORM DRIVER FEATURES **** 1. FLEXIBLE SET OF CALLS. 2. INTERFACES TO COMMON PROGRAMMING LANGUAGES. 3. SUPPORT FOR FORM AND FIELD ATTRIBUTES SUPPORT FOR OPERATOR HELP. **** FORMS CONTAIN **** + **** FORMS CONTAIN **** + **** FORMS CONTAIN **** 1. CONSTANT BACKGROUND TEXT. 2. VARIABLE FIELDS. 3. ASSOCIATED NAMED DATA. **** FORM ATTRIBUTES **** + **** FORM ATTRIBUTES **** + **** FORM ATTRIBUTES **** 1. FORM NAME. 2. SCREEN WIDTH (80 OR 132 COLUMNS). 3. SCREEN AREA TO CLEAR. 4. SCREEN BACKGROUND. 5. HELP FORM NAME. **** BACKGROUND TEXT **** + **** BACKGROUND TEXT **** + **** BACKGROUND TEXT **** 1. CONSTANT INFORMATION. 2. CANNOT BE MODIFIED BY OPERATOR. 3. PROMPTS FOR FIELDS OR EXPLANATORY TEXT VT100 VIDEO ATTRIBUTES. **** FIELDS **** + **** FIELDS **** + **** FIELDS **** 1. IDENTIFIED BY SIX CHARACTER NAME AND INDEX. 2. MODIFIABLE BY APPLICATION AND/OR TERMINAL OPERATOR. 3. ASSOCIATION BETWEEN PROGRAM AND FIELDS MADE AT RUN TIME. **** FIELD ATTRIBUTES **** + **** FIELD ATTRIBUTES **** + **** FIELD ATTRIBUTES **** 1. VT100 VIDEO ATTRIBUTES. 2. DEFAULT VALUE. 3. HELP TEXT. 4. EMBEDDED TEXT CHARACTERS. 5. RIGHT OR LEFT JUSTIFICATION. 6. AUTOTAB TO NEXT FIELD. 7. DISPLAY-ONLY. 8. CLEAR CHARACTER FOR SCREEN DISPLAY. 9. BLANK OR ZERO FILL. 10. FIXED DECIMAL FOR MONEY. 11. INDEXED. 12. NO-ECHO SUPERVISOR PROTECT. **** DATA VALIDATION **** + **** DATA VALIDATION **** + **** DATA VALIDATION **** 1. CHARACTER VALIDATION BASED ON FIELD PICTURE. 2. RESPONSE REQUIRED IN FIELD. 3. MUST FILL FIELD IF ANY DATA ENTERED. **** HELP **** + **** HELP **** + **** HELP **** 1. HELP TEXT FOR EACH FIELD. 2. HELP FORM FOR EACH FORM. 3. HELP FORMS CAN BE CHAINED TRANSPARENT TO CALLING PROGRAM. **** NAMED DATA **** + **** NAMED DATA **** + **** NAMED DATA **** 1. ASSOCIATES ASCII DATA WITH FORM. 2. NOT DISPLAYED AS PART OF FORM. 3. CAN BE USED TO EMBED APPLICATION LOGIC IN FORMS. 4. UP TO 60 BYTES OF TEXT PER ENTRY. 5. UP TO 16 ENTRIES PER FORM. 6. ACCESSED BY NAME OR INDEX. **** FMS INITIALIZATION **** + **** FMS INITIALIZATION **** + **** FMS INITIALIZATION **** 1. SET UP FORM DRIVER IMPURE AREA. 2. OPEN FORM LIBRARY. FMS CALLS TO USE: CALL FINIT (IMPURE, 2000) ; INITIALIZE IMPURE AREA * CALL FLCHAN (1) ; SET FORM LIBRARY ; CHANNEL * CALL FLOPEN ('FRMLIB.FLB') ; OPEN FORM LIBRARY * NOT REQUIRED FOR MEMORY RESIDENT FORM SUPPORT **** BASIC FORM PROCESSING CALLS **** + **** BASIC FORM PROCESSING CALLS **** + **** BASIC FORM PROCESSING CALLS **** 1. DISPLAY A FORM. 2. WRITE DATA TO A FORM. 3. GET INPUT FROM THE TERMINAL OPERATOR. 4. RETURN FIELD VALUES FROM A FORM. 5. DISPLAY APPLICATION MESSAGES. **** DISPLAY A FORM **** + **** DISPLAY A FORM **** + **** DISPLAY A FORM **** CLEAR ENTIRE SCREEN AND DISPLAY FORM. - (FCLRSH) CLEAR SPECIFIED AREA AND DISPLAY FORM. - (FSHOW) WRITE DATA TO A FORM. WRITE DATA TO ALL FIELDS. - (FPUTAL) WRITE DATA TO A SPECIFIED FIELD. - (FPUT) GET INPUT FROM THE TERMINAL OPERATOR GET ALL FIELDS. - (FGETAL) GET A SPECIFIED FIELD. - (FGET) GET ANY FIELD. - (FGETAF) CASE 1: NO APPLICATION PROCESSING OF INPUT IS NECESSARY AT THE FIELD LEVEL. + ____ _ FMS CALLS TO USE: WRITE DATA TO ALL FIELDS. - (FPUTAL) GET ALL FIELDS. - (FGETAL) CALL FCLRSH ('FORM') ; DISPLAY FORM READ RECORD INTO DATA ; GET RECORD FROM DATA BASE CALL FPUTAL (DATA) ; WRITE DATA TO FORM CALL FGETAL (DATA) ; LET OPERATOR MODIFY DATA WRITE RECORD FROM DATA ; WRITE UPDATED RECORD ADVANTAGES: 1. APPLICATION REQUIRES NO KNOWLEDGE TO FORM CONTENT OR LAYOUT. 2. FORM DRIVER HANDLES ALL INTERACTION WITH TERMINAL OPERATOR. 3. TERMINAL OPERATOR CAN MOVE BETWEEN FIELDS AT WILL UNTIL SATISFIED. DISVANTAGES: 1. APPLICATION CANNOT PROCESS INPUT UNITL ENTIRE FORM IS COMPLETE. 2. ORDER OF FIELDS IN A RECORD MUST BE THE SAME AS THE ORDER IN A FORM. CASE 2: APPLICATION PROCESSING IS NECESSARY AT THE FIELD LEVEL AND/OR THE + ____ _ APPLICATION PROGRAM REQUIRES CONTROL OVER THE ORDER OF FIELD ENTRY. FMS CALL TO USE: GET A SPECIFIELD FIELD. - (FGET) CALL FCLRSH ('ORDER') ; DISPLAY FORM 10 CALL FGET (ACCT, TERM, 'ACCT') ; GET ACCOUNT NUMBER PROCESS INPUT ; PROCESS IF ACCT NOT VALID GOTO 10 ; IF INVALID, GET FIELD AGAIN 20 CALL FGET (PARTNO, TERM, 'PARTNO') ; ELSE GET PARY NUMBER PROCESS INPUT ; PROCESS IF PARTNO NOT VALID GOTO 20 ; IF INVALID, GET FIELD AGAIN CALL FPUT (DESC, 'DESC') ; ELSE WRITE DESCRIPTION FIELD CALL FGET (QUANT, TERM, 'QUANT') ; GET QUANTITY TO ORDER . . . ADVANTAGES: 1. APPLICATION PROGRAM GETS IMMEDIATE CONTROL AFTER EACH FIELD IS ENTERED TO VALIDATE INPUT, RESPOND TO ERRORS, AND UPDATE THE FORM. 2. APPLICATION PROGRAM HAS ABSOLUTE CONTROL OVER ORDER IN WHICH FIELDS ARE ACCESSED DISAVANTAGES: 1. TERMINAL OPERATOR HAS NO CONTROL OVER MOVEMENT BETWEEN FIELDS. 2. APPLICATION PROGRAM MUST ACCESS ALL FIELDS IN A FORM BY NAME. CASE 3: APPLICATION PROCESSING IS NECESSARY AT THE FIELD LEVEL AND THE + ____ _ TERMINAL OPERATOR SHOULD CONTROL MOVEMENT BETWEEN FIELDS. FMS CALLS TO USE: GET A SPECIFIED FIELD. - (FGET) PROCESS A FIELD TERMINATOR. - (FPFT) 10 CALL FGET (RESP, TERM, FIELD) ; GET INPUT FOR A FIELD PROCESS INPUT FOR THE FIELD ; PROCESS INPUT IF TERM EQUAL 1 GOTO 20 ; IF TERMINATOR ENTER, FORM ; COMPLETE CALL FPFT (TERM) ; ELSE DETERMINE NEXT FIELD TO ; GET CALL FGCF (FIELD) ; GET FIELD NAME GOTO 10 ; GET INPUT FOR FIELD 20 . . . USE OF FGET/FPFT CALLS: CALL FCLRSH ('FORM') ; DISPLAY FORM CALL FGET (RESP, TERM, '*') ; GET INPUT FOR FIRST FIELD CALL FGCF (FIELD) ; GET FIELD NAME GOTO 20 ; PROCESS INPUT 10 CALL FGET (RESP, TERM, FIELD) ; GET INPUT FOR A FIELD 20 PROCESS INPUT FOR FIELD ; PROCESS INPUT CALL FPFT (TERM) ; DETERMINE NEXT FIELD TO GET CALL FGCF (FIELD) ; GET FIELD NAME IF TERM NOT EQUAL 1 GOTO 10 ; IF TERMINATOR NOT ENTER, GET ; THE FIELD CALL FSTAT (STAT) ; ELSE CHECK FOR INCOMPLETE ; FORM IF STAT EQUAL 2 GOTO 10 ; GET INPUT FOR INCOMPLETE ; FIELD ; ELSE DONE . . . ADVANTAGES: 1. TERMINAL OPERATOR CAN MOVE BETWEEN FIELDS AT WILL UNITL SATISIFED. 2. APPLICATION PROGRAM GETS IMMEDIATE CONTROL AFTER EACH FIELD IS ENTERED TO VALIDATE INPUT, RESPOND TO ERRORS, AND UPDATE THE FORM. 3. APPLICATION PROGRAM REQUIRES NO KNOWLEDGE OF FORM LAYOUT. DISAVANTAGES: 1. MORE COMPLEX TO IMPLEMENT THAT THE SINGLE 'GET ALL FIELDS' CALL. CASE 4: INPUT IS REQUIRED IN ANY ONE FIELD IN A FORM. + ____ _ FMS CALL TO USE: GET ANY FIELD. - (FGETAF) CALL FCLRSH ('FORM1') ; DISPLAY FORM WITH TWO FIELDS ; NAME AND BADGE NUMBER CALL FGETAF (RESP, TERM, FIELD) ; GET INPUT FOR EITHER FIELD IF FIELD EQUAL 'BADGE' GOTO 10 ; BRANCH IF BADGE NUMBER ELSE FIND BADGE NUMBER CORRESPONDING TO NAME ENTERED CALL FPUT (BADGE, 'BADGE') ; DISPLAY BADGE NUMBER GOTO 20 10 FIND NAME CORRESPONDING TO BADGE NUMBER ENTERED CALL FPUT (NAME, 'NAME') ; ELSE DISPLAY NAME 20 . . . CASE 5: APPLICATION PROGRAM HAS TO SYNCHRONIZE WITH THE TERMINAL OPERATOR + ____ _ FMS CALL TO USE: GET A SPEICIFIED FIELD. - (FGET) CALL FCLRSH ('FORM1') ; DISPLAY FORM CALL FGETAL (DATA) ; GET INPUT FOR FORM PROCESS INPUT ; PROCESS CALL FPUT (VALUE1,'FIELD1') ; WRITE DATA CALL FPUT (VALUE2,'FIELD2') ; WRITE DATA CALL FGET ; WAIT FOR TERMINAL OPERATOR TO ; ACKNOWLDEGE CALL FCLRSH ('FORM2') ; DISPLAY NEXT FORM . . . **** RETURN FIELD VALUES FROM FORM **** + **** RETURN FIELD VALUES FROM FORM **** + **** RETURN FIELD VALUES FROM FORM **** (NO OPERATOR INPUT ALLOWED) Case 1. RETURN A SPECIFIED FIELD VALUE Case 2. RETURN ALL FIELD VALUES CASE 1: ACCESS INDIVIDUAL FIELDS IN A FORM AFTER THE FORM IS COMPLETED BY THE + ____ _ TERMINAL OPERATOR IN ORDER TO: VALIDATE INPUT FOR INDIVIDUAL FIELDS. CREATE A RECORD WITH FIELDS IN A DIFFERENT ORDER THAN THEY ARE IN THE FORM. CREATE A RECORD CONTAINING FIELDS FORM SEVERAL SOURCES, INCLUDING THIS FORM. FMS CALL TO USE: RETURN A SPECIFIED FIELD. - (FRETN) CALL FCLRSH ('FORM') ; DISPLAY FORM CALL FGETAL ; ALLOW OPERATOR TO COMPLETE ; FORM BUT DON'T RETURN DATA CALL FRETN (RESPA, 'FIELDA') ; RETURN VALUE FORM FIELD A 10 PROCESS FIELD VALUE ; PROCESS DATA IF RESPA VALID GOTO 20 ; IF VALID CONTINUE CALL FGET (RESPA, TERM, 'FIELDA') ; ELSE GET INPUT FOR FIELD GOTO 10 ; PROCESS 20 CALL FRETN (RESPB, 'FIELDB') ; RETURN VALUE FOR FIELD B PRECESS FIELD VALUE ; PROCESS . . . CASE 2: RETURN THE DATA FOR AN ENTIRE FORM AS A SINGLE RECORD AFTER GETTING + ____ _ OPERATOR INPUT FOR EACH FIELD INDIVIDUALLY. FMS CALL TO USE: RETURN ALL FIELDS. - (FRETAL) CALL FCLRSH ('FORM') ; DISPLAY FORM 10 CALL FGET (RESP, TERM, FIELD) ; GET INPUT FOR A FIELD PROCESS INPUT FOR FIELD ; PROCESS INPUT IF TERM EQUAL 1 GOTO 20 ; IF TERMINATOR ENTER, FORM ; COMPLETE CALL FPET (TERM) ; ELSE DETERMINE NEXT FIELD TO ; GET CALL FGCF (FIELD) ; GET FIELD NAME GOTO 10 ; GET INPUT FOR FIELD 20 CALL FRETAL (DATA) ; RETURN ALL FIELD VALUES WRITE RECORD FORM DATA ; WRITE RECORD . . . **** DISPLAY APPLICATION MESSAGES **** + **** DISPLAY APPLICATION MESSAGES **** + **** DISPLAY APPLICATION MESSAGES **** 1. ERROR MESSAGES 2. INFORMATIONAL MESSAGES FMS CALL TO USE: WRITE MESSAGE TO LAST LINE OF SCREEN. - (FPUTL) 10 CALL FGET (RESP, TERM, 'CHOICE') ; GET FIELD IF RESP VALID GOTO 20 ; IF RESPONSE VALID CONTINUE ; ELSE DISPLAY ERROR MESSAGE CALL FPUTL ('INVALID RESPONSE. VALID CHOICES ARE 1, 2, OR 3.') GOTO 10 ; GET THE FIELD AGAIN 20 . . . **** ADDITIONAL FORM DRIVER CALLS SUPPORT **** + **** ADDITIONAL FORM DRIVER CALLS SUPPORT **** + **** ADDITIONAL FORM DRIVER CALLS SUPPORT **** 1. NAMED DATA 2. SUPERVISOR ONLY MODE 3. SCROLLED AREAS 4. NAMED DATA USAGE A. RANGE CHECKING B. TABLE LOOKUPS C. FORM LINKAGE D. FORM SPECIFIC INFORMATION 5. ACCESS NAMED DATA A. BY NAME (FNDATA) B. BY INDEX (FIDATA) **** USE OF FNDATA FOR FORM LINKAGE **** + **** USE OF FNDATA FOR FORM LINKAGE **** + **** USE OF FNDATA FOR FORM LINKAGE **** 10 CALL FCLRSH (FORM) ; DISPLAY FORM CALL FGETAL (DATA) ; GET INPUT FOR FORM PROCESS INPUT ; PROCESS CALL FNDATA ('NXTFRM, FORM') ; GET NAME OF NEXT FORM CALL FSTAT (STAT) ; CHECK FOR NO NAMED DATA IF STAT > 0 GOTO 10 ; IF NAMED DATA FOUND, DISPLAY ; NEXT FORM . . . **** USE OF FNDATA FOR MENUS **** + **** USE OF FNDATA FOR MENUS **** + **** USE OF FNDATA FOR MENUS **** CALL FCLRSH ('MENU') ; DISPLAY MENU FORM 10 CALL FGET (RESP, TERM, 'CHOICE') ; GET MENU SELECTION CALL FNDATA (RESP,FORM) ; CHECK FOR NO NAMED DATA IF STAT > 0 GOTO 20 ; IF FOUND OK CALL FPUTL ('INVALID SELECTION') ; ELSE INVALID RESPONSE GOTO 10 ; GET ANOTHER SELECTION 20 CALL FCLRSH (FORM) ; DISPLAY FORM CORRESPONDING ; TO SELECTION SUPERVISOR ONLY ; MODE . . . **** SUPERVISOR ONLY MODE **** + **** SUPERVISOR ONLY MODE **** + **** SUPERVISOR ONLY MODE **** 1. PROVIDES FIELD PROTECTION FOR DATA RETRIEVAL AND MODIFICATION CONTROL 2. ALLOW OPERATOR ACCESS TO SUPERVISOR ONLY FIELDS (FSPOFF) 3. RESTRICT OPERATOR ACCESS TO SUPERVISOR ONLY FIELDS (FSPON) USE OF FSPOFF/FSPON: CALL FCLRSH ('ACCESS') ; DISPLAY FORM CALL FGET (PASSWD, TERM, 'PASSED') ; GET PASSWORD IF PASSWD EQUAL 'XYZZY' ; IF CORRECT PASSWORD CALL FSPOFF ; ALLOW OPERATOAR ACCESS TO ; SUPERVISOR ONLY FIELDS PROCESS FORMS CALL FSPON ; RESET SUPERVISOR ONLY ; MODE TO RESTRICT ; ACCESS TO FIELDS ACCESS ; SCROLLED AREAS WRITE DATA TO A LINE IN A SCROLLED AREA (FOUTLN) GET INPUT FOR A LINE IN A SCROLLED AREA (FINLN) USE OF FOUTLN: ; ; INITIALIZE A FIVE LINE SCROLLED AREA FROM ; A DATA BUFFER. ; CALL FCLRSH ('FORM') ; DISPLAY FORM CALL FOUTLN ('SCRFLD' , A(1) ; WRITE DATA TO FIRST LINE OF ; SCROLLED AREA REPEAT FOR I = 2 TO 5 ; INITIALIZE THE REST CALL FPFT (8, 'SCRFLD') ; MOVE DOWN ONE LINE CALL FOUTLN ('SCRFLE' , A(1) ; WRITE DATA TO NEW LINE END REPEAT ; REPEAT 4 TIMES ; GO BACK TO FIRST LINE CALL FPFT (9, 'SCRFLE') ; MOVE UP ONE LINE END REPEAT USE OF FINLN/FOUTLN: ; ; ALLOW ENTRY AND REVIEW OF 50 LINES OF ; DATA IN A SCROLLED AREA. ; CALL FCLRSH ('FORM') ; DISPLAY FORM I = 1 ; INITIALIZE BUFFER INDEX 10 CALL FINLN ('SCRFLD' , A(1), TERM) ; GET INPUT FOR SCROLLED LINE IF I = 1 AND TERM = 7 OR 9 ; CHECK FOR BEGINNING OF DATA ; AND SCROLL BACKWARD CALL FPUTL ('BEGINNING OF DATA') ; IF SO, DISPLAY MESSAGE GOTO 10 ; GET LINE AGAIN IF I = 50 AND TERM = 6 OR 8 ; CHECK FOR END OF DATA AND ; SCROLL FORWARD CALL FPUTL ('END OF DATA') ; IF SO, DISPLAY MESSAGE GOTO 10 ; GET LINE AGAIN IF TERM = 7 OR 9 ; IF SCROLL BACKWARD I = I = 1 ; DECREMENT BUFFER INDEX IF TERM = 6 OR 8 ; IF SCROLL FORWARD I = I + 1 ; INCREMENT BUFFER INDEXZ 20 CALL FPFT (TERM, 'SCRFLD') ; PRECESS TERMINATOR CALL FOUTLN ('SCRFLD', A(I)) ; WRITE DATA TO NEW LINE GOTO 10 ; GET INPUT . . .