FORTRAN Sample Program [ High-Level Screen Management Intrinsic Library (Hi-Li) Reference Manual ] MPE/iX 5.0 Documentation
High-Level Screen Management Intrinsic Library (Hi-Li) Reference Manual
FORTRAN Sample Program
$CONTROL list on, tables on
!
! This application collects employee payroll deduction
! transactions and places the edited transactions into
! a file.
!
! For this application: Enter key = edit and file
! transaction;
!
! f8 = exit application;
!
! all other f keys = redo transaction.
!
! Each transaction entered by the operator is subjected to the
! data edits embedded within the input form.
!
! The application continues to collect transactions until either
! the operator signals to exit or a system error is detected.
!
$TITLE ' Main Program'
!***************************************************************!
! !
! Main Program !
! !
!***************************************************************!
!
PROGRAM FTN77EXMP
!
IMPLICIT NONE
!
COMMON /COM01/ GLOBALPAK
COMMON /COM02/ RETURNPAK
COMMON /COM03/ FORMSFILE
COMMON /COM04/ TERMPAK
COMMON /COM07/ MSGFORWINDOW
COMMON /COM10/ UNUSED_PARM
COMMON /COM101/ ERROR_LOCATION
COMMON /COM102/ STOP_NOW
COMMON /COM103/ DONE_WITH_TXNS
COMMON /COM104/ NBR_TXN_COLLECTED
!
INTEGER*4 GLOBALPAK(79)
INTEGER*4 RETURNPAK(79)
INTEGER*4 FORMSFILE(22)
INTEGER*4 TERMPAK (23)
INTEGER*4 MSGFORWINDOW(21)
INTEGER*4 UNUSED_PARM
CHARACTER*70 ERROR_LOCATION
INTEGER*2 STOP_NOW
INTEGER*2 DONE_WITH_TXNS
INTEGER*2 NBR_TXN_COLLECTED
!
STOP_NOW = 0
DONE_WITH_TXNS = 0
!
NBR_TXN_COLLECTED = 0
!
CALL SETUP_FOR_WORK
!
DO WHILE (STOP_NOW.EQ.0
+ .AND.DONE_WITH_TXNS.EQ.0)
CALL COLLECT_TXNS
END DO
!
CALL CLEANUP_AFTER_WORK
!
PRINT *,
+ "Deduction transactions collected this session = ",
+ NBR_TXN_COLLECTED
!
IF (STOP_NOW.EQ.1) THEN
CALL DISPLAY_SYSTEM_ERROR
END IF
!
STOP
END
$TITLE ' Setup For Work'
!***************************************************************!
! !
! Setup For Work !
! !
!***************************************************************!
!
SUBROUTINE SETUP_FOR_WORK
!
IMPLICIT NONE
!
COMMON /COM01/ GLOBALPAK
COMMON /COM02/ RETURNPAK
COMMON /COM03/ FORMSFILE
COMMON /COM04/ TERMPAK
COMMON /COM07/ MSGFORWINDOW
COMMON /COM10/ UNUSED_PARM
COMMON /COM102/ STOP_NOW
COMMON /COM101/ ERROR_LOCATION
!
SYSTEM INTRINSIC HPDOPENFORMS,
+ HPDENABLETERM
!
INTEGER*4 GLOBALPAK(79)
CHARACTER*8 EXPECTEDVUF
INTEGER*4 CALLPROTOCOL
INTEGER*4 COMAREALEN
INTEGER*4 COMAREA(75)
EQUIVALENCE (GLOBALPAK(1), EXPECTEDVUF),
+ (GLOBALPAK(3), CALLPROTOCOL),
+ (GLOBALPAK(4), COMAREALEN),
+ (GLOBALPAK(5), COMAREA)
!
INTEGER*4 RETURNPAK(79)
INTEGER*4 RETURNSTATUS
EQUIVALENCE (RETURNPAK(1), RETURNSTATUS)
!
INTEGER*4 FORMSFILE(22)
CHARACTER*88 FFNAME
EQUIVALENCE (FORMSFILE(1), FFNAME)
!
INTEGER*4 TERMPAK (23)
CHARACTER*88 TERMNAME
INTEGER*4 TERMBYPASSFEAT
EQUIVALENCE (TERMPAK(1), TERMNAME),
+ (TERMPAK(23), TERMBYPASSFEAT)
!
INTEGER*4 MSGFORWINDOW(21)
CHARACTER*79 MSGAREA
EQUIVALENCE (MSGFORWINDOW(2), MSGAREA)
!
INTEGER*4 UNUSED_PARM
!
INTEGER*2 STOP_NOW
CHARACTER*70 ERROR_LOCATION
!
INTEGER*2 ARRAY_INDEX
!
! Init Unused Parm which is used whenever intrinsic input
! parameter is not active.
!
UNUSED_PARM = 0
!
! Init Comarea to all zeros.
!
ARRAY_INDEX = 1
DO WHILE (ARRAY_INDEX.LE.75)
COMAREA(ARRAY_INDEX) = 0
ARRAY_INDEX = ARRAY_INDEX + 1
END DO
!
! Set Expected HP32424A Version.
!
EXPECTEDVUF = "A.00.00 "
!
! Set Language for FORTRAN-77.
!
CALLPROTOCOL = 210
!
! Set Comarealen for 300 bytes.
!
COMAREALEN = 300
!
! Open the Transaction File:
!
OPEN (UNIT = 10,
+ FILE = 'PAYTXN',
+ ACCESS = 'DIRECT',
+ RECL = 200,
+ FORM = 'UNFORMATTED',
+ STATUS = 'NEW',
+ ERR = 110)
!
GOTO 120
!
110 STOP_NOW = 1
ERROR_LOCATION =
+ "**** Routine: Setup For Work - Open Transaction File"
MSGAREA =
+ "**** File open failed!"
!
! Open the Forms File.
!
120 IF (STOP_NOW.EQ.0) THEN
FFNAME = "PAYROLL.WORK.ADMIN"
!
CALL HPDOPENFORMS (GLOBALPAK,
+ RETURNPAK,
+ FORMSFILE)
!
IF (RETURNSTATUS.NE.0) THEN
STOP_NOW = 1
ERROR_LOCATION =
+ "**** Routine: Setup For Work - Forms File Open"
CALL UNBLOCK_MSG
END IF
END IF
!
! Open the Terminal.
!
IF (STOP_NOW.EQ.0) THEN
TERMNAME = "HPTERM"
TERMBYPASSFEAT = 0
!
CALL HPDENABLETERM (GLOBALPAK,
+ RETURNPAK,
+ TERMPAK,
+ UNUSED_PARM)
!
IF (RETURNSTATUS.NE.0) THEN
STOP_NOW = 1
ERROR_LOCATION =
+ "**** Routine: Setup For Work - Terminal Setup"
CALL UNBLOCK_MSG
END IF
END IF
!
END
$TITLE ' Collect Transactions'
!***************************************************************!
! !
! Collect Transactions !
! !
!***************************************************************!
!
SUBROUTINE COLLECT_TXNS
!
IMPLICIT NONE
!
COMMON /COM01/ GLOBALPAK
COMMON /COM02/ RETURNPAK
COMMON /COM07/ MSGFORWINDOW
COMMON /COM08/ DATADESCRPT
COMMON /COM10/ UNUSED_PARM
COMMON /COM102/ STOP_NOW
COMMON /COM103/ DONE_WITH_TXNS
COMMON /COM104/ NBR_TXN_COLLECTED
COMMON /COM101/ ERROR_LOCATION
COMMON /COM105/ DATA_ENTRY_ERRS
!
SYSTEM INTRINSIC HPDSEND
!
INTEGER*4 GLOBALPAK(79)
!
INTEGER*4 RETURNPAK(79)
INTEGER*4 RETURNSTATUS
EQUIVALENCE (RETURNPAK(1), RETURNSTATUS)
!
INTEGER*4 MSGFORWINDOW(21)
INTEGER*4 MSGLEN
CHARACTER*79 MSGAREA
EQUIVALENCE (MSGFORWINDOW(1), MSGLEN),
+ (MSGFORWINDOW(2), MSGAREA)
!
INTEGER*4 DATADESCRPT(3)
!
INTEGER*4 UNUSED_PARM
!
INTEGER*2 STOP_NOW
INTEGER*2 DONE_WITH_TXNS
INTEGER*2 NBR_TXN_COLLECTED
CHARACTER*70 ERROR_LOCATION
INTEGER*2 DATA_ENTRY_ERRS
!
INTEGER*4 SENDPAK(4)
!
INTEGER*4 FORMPAK(44)
CHARACTER*32 FORMNAME
INTEGER*4 FORMPOSITION
INTEGER*4 LISTTYPE
INTEGER*4 LISTCOUNT
EQUIVALENCE (FORMPAK(1), FORMNAME),
+ (FORMPAK(9), FORMPOSITION),
+ (FORMPAK(10), LISTTYPE),
+ (FORMPAK(11), LISTCOUNT)
CHARACTER*44 FIELD_ID(1,3)
EQUIVALENCE (FORMPAK(12), FIELD_ID)
INTEGER*4 CHANGE_TYPE (11,3)
CHARACTER*4 CHANGE_SPEC (11,3)
EQUIVALENCE (FORMPAK(12), CHANGE_TYPE),
+ (FORMPAK(12), CHANGE_SPEC)
!
! No special Send instructions
!
SENDPAK(1) = 0
SENDPAK(2) = 0
SENDPAK(3) = 0
SENDPAK(4) = 0
!
! Setup to get and modify data entry form, toggling three
! fields to "input allowed".
!
FORMNAME = "DEDUCTION"
!
! Position form to start at top left of display (home).
!
FORMPOSITION = 0
!
! Indicate that the fields in the form which will be modified
! are identified by name.
!
LISTTYPE = 2
!
! Indicate the number of fields to modify.
!
LISTCOUNT = 3
!
! List fields to be modified, indicate modification type, and
! new value.
!
FIELD_ID (1,1) = "BADGE_NUMBER"
CHANGE_TYPE (9,1) = 5
CHANGE_SPEC (10,1) = "O"
!
FIELD_ID (1,2) = "LAST_NAME"
CHANGE_TYPE (9,2) = 5
CHANGE_SPEC (10,2) = "O"
!
FIELD_ID (1,3) = "SUR_NAME"
CHANGE_TYPE (9,3) = 5
CHANGE_SPEC (10,3) = "O"
!
! Setup window message.
!
MSGLEN = 79
!
MSGAREA =
+ "Fill in Deduction Transaction according to worksheet."
!
! Don't copy application data out to display.
!
DATADESCRPT(1) = -1
!
! Show form.
!
CALL HPDSEND (GLOBALPAK,
+ RETURNPAK,
+ SENDPAK,
+ FORMPAK,
+ UNUSED_PARM,
+ MSGFORWINDOW,
+ DATADESCRPT,
+ UNUSED_PARM,
+ UNUSED_PARM,
+ UNUSED_PARM)
!
IF (RETURNSTATUS.NE.0) THEN
STOP_NOW = 1
ERROR_LOCATION =
+ "**** Routine: Collect Transactions - Form display"
CALL UNBLOCK_MSG
END IF
!
! Setup and loop on transaction until it can be filed.
!
DATA_ENTRY_ERRS = 1
!
DO WHILE (DATA_ENTRY_ERRS.EQ.1
+ .AND.STOP_NOW.EQ.0
+ .AND.DONE_WITH_TXNS.EQ.0)
!
CALL READ_EDIT_AND_FILE
!
END DO
!
END
$TITLE ' Read Edit and File'
!***************************************************************!
! !
! Read Edit and File !
! !
!***************************************************************!
!
SUBROUTINE READ_EDIT_AND_FILE
!
IMPLICIT NONE
!
COMMON /COM01/ GLOBALPAK
COMMON /COM02/ RETURNPAK
COMMON /COM07/ MSGFORWINDOW
COMMON /COM08/ DATADESCRPT
COMMON /COM10/ UNUSED_PARM
COMMON /COM102/ STOP_NOW
COMMON /COM103/ DONE_WITH_TXNS
COMMON /COM104/ NBR_TXN_COLLECTED
COMMON /COM101/ ERROR_LOCATION
COMMON /COM105/ DATA_ENTRY_ERRS
!
SYSTEM INTRINSIC HPDREAD
!
INTEGER*4 GLOBALPAK(79)
!
INTEGER*4 RETURNPAK(79)
INTEGER*4 RETURNSTATUS
INTEGER*4 LASTITEMTYPE
INTEGER*4 LASTITEMNUM
EQUIVALENCE (RETURNPAK(1), RETURNSTATUS),
+ (RETURNPAK(68), LASTITEMTYPE),
+ (RETURNPAK(69), LASTITEMNUM)
!
INTEGER*4 MSGFORWINDOW(21)
INTEGER*4 MSGLEN
CHARACTER*79 MSGAREA
EQUIVALENCE (MSGFORWINDOW(1), MSGLEN),
+ (MSGFORWINDOW(2), MSGAREA)
!
INTEGER*4 DATADESCRPT(3)
!
INTEGER*4 UNUSED_PARM
!
INTEGER*2 STOP_NOW
INTEGER*2 DONE_WITH_TXNS
INTEGER*2 NBR_TXN_COLLECTED
CHARACTER*70 ERROR_LOCATION
INTEGER*2 DATA_ENTRY_ERRS
!
INTEGER*4 READPAK(3)
INTEGER*4 ENABLEREFORMAT
EQUIVALENCE (READPAK(2), ENABLEREFORMAT)
!
INTEGER*4 DATABUF(50)
CHARACTER*200 DATAAREA
EQUIVALENCE (DATABUF(1), DATAAREA)
!
! Enable data finishing.
!
ENABLEREFORMAT = 1
!
! No other special Read instructions.
!
READPAK(1) = 0
READPAK(3) = 0
!
! Indicate that all data in form, up to 200 bytes, is to
! be copied into application work space.
!
DATADESCRPT(1) = 10
DATADESCRPT(2) = 200
!
! Read form.
!
CALL HPDREAD (GLOBALPAK,
+ RETURNPAK,
+ READPAK,
+ UNUSED_PARM,
+ UNUSED_PARM,
+ DATADESCRPT,
+ DATABUF,
+ UNUSED_PARM)
!
IF (RETURNSTATUS.LT.0) THEN
STOP_NOW = 1
ERROR_LOCATION =
+ "**** Routine: Read Edit and File - Terminal Read"
CALL UNBLOCK_MSG
END IF
!
! Determine if operator wants to stop transaction collection.
!
IF (STOP_NOW.EQ.0
+ .AND.RETURNSTATUS.EQ.0) THEN
IF (LASTITEMTYPE.EQ.0
+ .AND.LASTITEMNUM.EQ.8) THEN
DONE_WITH_TXNS = 1
END IF
END IF
!
! Determine if edit errors detected.
!
IF (STOP_NOW.EQ.0
+ .AND.DONE_WITH_TXNS.EQ.0) THEN
!
IF (RETURNSTATUS.EQ.0) THEN
DATA_ENTRY_ERRS = 0
ELSE
DATA_ENTRY_ERRS = 1
END IF
END IF
!
! Do we have a transaction that can be filed?
!
IF (STOP_NOW.EQ.0
+ .AND.DONE_WITH_TXNS.EQ.0) THEN
!
IF (DATA_ENTRY_ERRS.EQ.0
+ .AND.LASTITEMTYPE.EQ.0
+ .AND.LASTITEMNUM.EQ.0) THEN
!
! Write Databuf to Transaction File.
!
WRITE (UNIT = 10,
+ ERR = 310) DATAAREA
!
GOTO 320
!
310 STOP_NOW = 1
ERROR_LOCATION =
+ "**** Routine: Read Edit and File - File Write"
MSGAREA =
+ "**** Write to Transaction File failed!"
!
320 IF (STOP_NOW.EQ.0) THEN
NBR_TXN_COLLECTED = NBR_TXN_COLLECTED + 1
END IF
END IF
END IF
!
! Do we need to prompt the operator to correct errors?
!
IF (STOP_NOW.EQ.0
+ .AND.DONE_WITH_TXNS.EQ.0) THEN
!
IF (DATA_ENTRY_ERRS.EQ.1) THEN
IF (LASTITEMTYPE.EQ.0
+ .AND.LASTITEMNUM.EQ.0) THEN
!
CALL PROMPT_OPERATOR
!
ELSE
!
! Operator pressed some key other than ENTER or EXIT so,
! clear data error flag to break loop (display refresh results).
!
DATA_ENTRY_ERRS = 0
!
END IF
END IF
END IF
!
END
$TITLE ' Prompt Operator'
!***************************************************************!
! !
! Prompt Operator !
! !
!***************************************************************!
!
SUBROUTINE PROMPT_OPERATOR
!
IMPLICIT NONE
!
COMMON /COM01/ GLOBALPAK
COMMON /COM02/ RETURNPAK
COMMON /COM07/ MSGFORWINDOW
COMMON /COM10/ UNUSED_PARM
COMMON /COM102/ STOP_NOW
COMMON /COM101/ ERROR_LOCATION
!
SYSTEM INTRINSIC HPDPROMPT
!
INTEGER*4 GLOBALPAK(79)
!
INTEGER*4 RETURNPAK(79)
INTEGER*4 RETURNSTATUS
INTEGER*4 RETURNMSGLEN
EQUIVALENCE (RETURNPAK(1), RETURNSTATUS),
+ (RETURNPAK(3), RETURNMSGLEN)
!
INTEGER*4 MSGFORWINDOW(21)
!
INTEGER*4 UNUSED_PARM
!
INTEGER*2 STOP_NOW
CHARACTER*70 ERROR_LOCATION
!
INTEGER*4 PROMPTPAK(4)
!
! Get error message.
!
CALL UNBLOCK_MSG
!
!
! No special Prompt instructions.
!
PROMPTPAK(1) = 0
PROMPTPAK(2) = 0
PROMPTPAK(3) = 0
PROMPTPAK(4) = 0
!
! Display form with highlighted fields and error message
in window.
!
CALL HPDPROMPT (GLOBALPAK,
+ RETURNPAK,
+ PROMPTPAK,
+ UNUSED_PARM,
+ MSGFORWINDOW,
+ UNUSED_PARM,
+ UNUSED_PARM,
+ UNUSED_PARM)
!
IF (RETURNSTATUS.NE.0) THEN
STOP_NOW = 1
ERROR_LOCATION =
+ "**** Routine: Prompt Operator - Display Updates"
CALL UNBLOCK_MSG
END IF
!
END
$TITLE ' Cleanup After Work'
!***************************************************************!
! !
! Cleanup After Work !
! !
!***************************************************************!
!
SUBROUTINE CLEANUP_AFTER_WORK
!
IMPLICIT NONE
!
COMMON /COM01/ GLOBALPAK
COMMON /COM02/ RETURNPAK
COMMON /COM03/ FORMSFILE
COMMON /COM04/ TERMPAK
COMMON /COM10/ UNUSED_PARM
!
SYSTEM INTRINSIC HPDCLOSEFORMS,
+ HPDDISABLETERM
!
INTEGER*4 GLOBALPAK(79)
INTEGER*4 RETURNPAK(79)
INTEGER*4 FORMSFILE(22)
INTEGER*4 TERMPAK(23)
INTEGER*4 UNUSED_PARM
!
! Note that this routine unconditionally attempts to close
! the Forms File and Terminal
!
CLOSE (UNIT = 10)
!
CALL HPDCLOSEFORMS (GLOBALPAK,
+ RETURNPAK,
+ FORMSFILE)
!
! Function keys were not save thus not restored here.
!
CALL HPDDISABLETERM (GLOBALPAK,
+ RETURNPAK,
+ TERMPAK,
+ UNUSED_PARM)
!
END
$TITLE ' Unblock Message'
!***************************************************************!
! !
! Unblock Message !
! !
!***************************************************************!
!
SUBROUTINE UNBLOCK_MSG
!
IMPLICIT NONE
!
COMMON /COM02/ RETURNPAK
COMMON /COM07/ MSGFORWINDOW
!
INTEGER*4 RETURNPAK(79)
INTEGER*4 RETURNMSGLEN
CHARACTER*1 RETURNMSG(254)
EQUIVALENCE (RETURNPAK(3), RETURNMSGLEN),
+ (RETURNPAK(4), RETURNMSG)
!
INTEGER*4 MSGFORWINDOW(21)
INTEGER*4 MSGLEN
CHARACTER*1 MSGAREA(79)
EQUIVALENCE (MSGFORWINDOW(1), MSGLEN),
+ (MSGFORWINDOW(2), MSGAREA)
!
!
INTEGER*2 ARRAY_INDEX
!
ARRAY_INDEX = 1
DO WHILE (ARRAY_INDEX.LE.RETURNMSGLEN)
MSGAREA(ARRAY_INDEX) = RETURNMSG(ARRAY_INDEX)
ARRAY_INDEX = ARRAY_INDEX + 1
END DO
!
MSGLEN = RETURNMSGLEN
!
END
$TITLE ' Display System Error'
!***************************************************************!
! !
! Display System Error !
! !
!***************************************************************!
!
SUBROUTINE DISPLAY_SYSTEM_ERROR
!
IMPLICIT NONE
!
COMMON /COM07/ MSGFORWINDOW
COMMON /COM101/ ERROR_LOCATION
!
INTEGER*4 MSGFORWINDOW(21)
CHARACTER*79 MSGAREA
EQUIVALENCE (MSGFORWINDOW(2), MSGAREA)
!
CHARACTER*70 ERROR_LOCATION
!
PRINT *,
+ "**** Transaction entry facility detected system error at:"
PRINT *, ERROR_LOCATION
PRINT *,
+ "**** The error message returned is:"
PRINT *, MSGAREA
!
END
MPE/iX 5.0 Documentation