! MNFAX - Master Menu Program for Faxing
!
!       Notice: The process and all the routines contained herein are
!               the proprietary properties and trade secrets of Mini-
!               Computer Business Applications, Inc. and Alpha Micro-
!               systems.  Except as provided by license agreement,
!               this code shall not be duplicated, used, or disclosed
!               for any purpose or reason, in whole or in part, without
!               the express written consent of Alpha Microsystems.
!
MAP1 PROGRAM'NAME,S,6,"MNFAX"
MAP1 PROGRAM'DESC,S,33,"FAX MAIN MENU"
!
       MAP1 MNU'AOPT,S,6               ! application option choosen
       MAP1 MNU'MOPT,F,6               ! menu option choosen
       MAP1 MNU'MCNT,F,6               ! menu array count
       MAP1 MNU(32)                    ! 31-report menu, 32-sys management
               MAP2 MNU'NAM,S,10       ! menu item program name
               MAP2 MNU'CM1,S,1
               MAP2 MNU'DSC,S,33       ! menu item description
               MAP2 MNU'CM2,S,1
               MAP2 MNU'LVL,S,3        ! menu item security 0-254, 255 hide
               MAP2 MNU'CM3,S,1
               MAP2 MNU'PSW,S,6        ! menu item password
       MAP1 MNU'FACT,S,50              ! option log file account
       MAP1 MNU'FNAM,S,50              ! option run file
!
!
!!INCLUDE MAP:CMESP.MAP
!****************************************************************************
!*                                                                          *
!*     SYSSTD.BSI  -  Standard AlphaBASIC / ESP development definitions     *
!*                   *** Special version without ***                        *
!*                   *** auto system record load ***                        *
!*                                                                          *
!****************************************************************************
!
!                                 NOTICE
!
! All  rights  reserved.  This software is the property of Alpha Microsystems
! and the material contained herein is the  proprietary  property  and  trade
! secrets  of  Alpha Microsystems, embodying substantial creative efforts and
! confidential information, ideas and expressions, no part of  which  may  be
! reproduced  or  transmitted  in  any  form  or  by  any  means, electronic,
! mechanical,  or  otherwise,  including  photocopying  or  input  into   any
! information  storage  or  retrieval  system  without  the  express  written
! permission of Alpha Microsystems.
!
! CAUTION: Unauthorized distribution or reproduction  of  this  material  may
! subject you to legal action.
!
! Copyright (C) 1984 - Distributed Management Systems, Inc.
! Copyright (C) 1992 - Alpha Microsystems
!
    ! Edit history:
!
![102] 07/15/90 Updated to support 8-bit characters. /RJH
![101] 07/05/88 Add option flag definitions for INITRM and ERRDSP.      /CAE
![100] 02/12/84 Designed and implemented by Brett R. Halle.
!
!
! Standard data definitions.
!
       MAP1    MENUS   , X, 4096       ! Menu buffer
       MAP1    SCREEN  , X, 8192       ! Screen buffer.
       MAP1    INIT    , F, 6          ! INITRM control.
       MAP1    CHAR    , F, 6          ! Return character.
       MAP1    FIELD   , F, 6          ! Return field number.
       MAP1    FALSE   , F, 6, 0       ! Logical False is 0.
       MAP1    TRUE    , F, 6, NOT FALSE  ! Logical True is NOT false.
!
! ESP Special Edit Flags.
!
! These constants are used to set/test flag values in the high order
! byte of the CHAR variable as used in a GTSCR call.
!
!  ESP'POSTEDIT and ESP'PREEDIT are returned by GTSCR to indicate
!       an interrupt condition occured.
!
!  ESP'REPAINT may be passed to GTSCR to update the display of a
!       screen that may have been clobbered by direct IO to the
!       CRT display (e.g. PRINT TAB(-1,9);)
!
!  ESP'RESETCHANGE may be passed to GTSCR to force a post-edit
!       interrupt on change condition for the current field. This is
!       useful when an error has been detected during a post-edit
!       interrupt on change process and the user is placed back into
!       the field to make a correction.
!
!  ESP'DAF may be passed to GTSCR to force the reevaluation of all
!       field formulas and redisplay of all fields.
!
       MAP1    ESP'POSTEDIT,   F, 6, 32768     ! Post edit interrupt flag.
       MAP1    ESP'PREEDIT,    F, 6, 16384     ! Pre edit interrupt flag.
       MAP1    ESP'REPAINT,    F, 6,  8192     ! Repaint ESP screen flag.
       MAP1    ESP'RESETCHANGE,F, 6,  2048     ! Reset field change detect.
       MAP1    ESP'DAF,        F, 6,  1024     ! Redisplay all fields.
!
! ESP key-press constants.
!
       MAP1    ESP'MENU, F, 6, 128+27          ! MENU key (Esc Esc).
       MAP1    ESP'EXECUTE, F, 6, 128+ASC("X") ! EXECUTE key (Esc X).
       MAP1    ESP'UPARROW, F, 6, 11           ! UP ARROW key (^K).
       MAP1    ESP'NXTSCREEN, F, 6, 20         ! NEXT SCREEN Key (^T).
       MAP1    ESP'PRVSCREEN, F, 6, 18         ! PREV SCREEN Key (^R).
       MAP1    ESP'NXTMATCH, F, 6, 24          ! NEXT MATCH Key (^X).
       MAP1    ESP'BEGLIN, F, 6, 21            ! BEG LINE (^U).
       MAP1    ESP'CR, F, 6, 13                ! Carriage return.
       MAP1    ESP'F1, F, 6, 128+1             ! F1 - Unshifted/shifted.
       MAP1    ESP'F2, F, 6, 128+2             ! F2 - Unshifted/shifted.
       MAP1    ESP'F3, F, 6, 128+3             ! F3 - Unshifted/shifted.
       MAP1    ESP'F4, F, 6, 128+4             ! F4 - Unshifted/shifted.
       MAP1    ESP'F5, F, 6, 128+5             ! F5 - Unshifted/shifted.
       MAP1    ESP'F6, F, 6, 128+6             ! F6 - Unshifted/shifted.
       MAP1    ESP'F7, F, 6, 128+7             ! F7 - Unshifted/shifted.
       MAP1    ESP'F8, F, 6, 128+8             ! F8 - Unshifted/shifted.
       MAP1    ESP'F9, F, 6, 128+9             ! F9 - Unshifted/shifted.
       MAP1    ESP'F10, F, 6, 128+10           ! F10- Unshifted/shifted.
       MAP1    ESP'F11, F, 6, 128+11           ! F11- Unshifted/shifted.
       MAP1    ESP'F12, F, 6, 128+12           ! F12- Unshifted/shifted.
!
! Extended characters for 8-bit mode.
! [102]
!
       MAP1    ESP'XMENU, F, 6, 256+27         ! MENU key (Esc Esc).
       MAP1    ESP'XEXECUTE, F, 6, 256+ASC("X")! EXECUTE key (Esc X).
       MAP1    ESP'XF1, F, 6, 256+1            ! F1 - Unshifted/shifted.
       MAP1    ESP'XF2, F, 6, 256+2            ! F2 - Unshifted/shifted.
       MAP1    ESP'XF3, F, 6, 256+3            ! F3 - Unshifted/shifted.
       MAP1    ESP'XF4, F, 6, 256+4            ! F4 - Unshifted/shifted.
       MAP1    ESP'XF5, F, 6, 256+5            ! F5 - Unshifted/shifted.
       MAP1    ESP'XF6, F, 6, 256+6            ! F6 - Unshifted/shifted.
       MAP1    ESP'XF7, F, 6, 256+7            ! F7 - Unshifted/shifted.
       MAP1    ESP'XF8, F, 6, 256+8            ! F8 - Unshifted/shifted.
       MAP1    ESP'XF9, F, 6, 256+9            ! F9 - Unshifted/shifted.
       MAP1    ESP'XF10, F, 6, 256+10          ! F10- Unshifted/shifted.
       MAP1    ESP'XF11, F, 6, 256+11          ! F11- Unshifted/shifted.
       MAP1    ESP'XF12, F, 6, 256+12          ! F12- Unshifted/shifted.
!
! PRTSCR control values.
!
       MAP1    ESP'FLRCHR, F, 6, 32            ! Filler character (space).
       MAP1    ESP'PRTCTL, F, 6                ! PRTSCR control value:
       MAP1    ESP'PRTTTL, F, 6, (256*1)       !  Print titles.
       MAP1    ESP'PRTHDR, F, 6, (256*2)       !  Print detail headers.
       MAP1    ESP'PRTDET, F, 6, (256*4)       !  Print detail level.
       MAP1    ESP'PRTST1, F, 6, (256*8)       !  Print subtotal level 1.
       MAP1    ESP'PRTST2, F, 6, (256*16)      !  Print subtotal level 2.
       MAP1    ESP'PRTST3, F, 6, (256*32)      !  Print subtotal level 3.
       MAP1    ESP'PRTGTL, F, 6, (256*64)      !  Print grand totals.
!
! INITRM control options.
!
       MAP1    INITRM'NCS, F, 6, (2^0)         ! Do NOT clear screen.
       MAP1    INITRM'NCA, F, 6, (2^1)         ! Do NOT clear accumulators.
       MAP1    INITRM'NSL, F, 6, (2^2)         ! Do NOT change sts lines.
       MAP1    INITRM'NPD, F, 6, (2^3)         ! Do NOT read printer defs.
       MAP1    INITRM'NEW, F, 6, (2^5)         ! Characters are passed in 8-bit mode.  [102]
       MAP1    INITRM'RST, F, 6, (2^31)        ! Reset terminal status.
!  (Exit data mode and allow
!   standard BASIC input.)
!
! ERRDSP control options.
!
       MAP1    ERRDSP'NAK, F, 6, (2^0)         ! No acknowledgement desired.
       MAP1    ERRDSP'NBL, F, 6, (2^1)         ! No blink desired.
       MAP1    ERRDSP'NDG, F, 6, (2^2)         ! No ding desired.
       MAP1    ERRDSP'TTY, F, 6, (2^15)        ! Output without CRT features.
!
!
!END-SYSSTD.BSI
!
++INCLUDE BAS:TOOLBX.BSI
!
       MAP1 FILNAM,S,25
       MAP1 INXCTL,F,6
       MAP1 RTNCDE,F,6
       MAP1 ENTRY,S,80
       MAP1 CRLF,S,4,CHR(13)+CHR(10)
       MAP1 X,F
       MAP1 Y,F
100     MNU'MCNT=3
110     MNU( 1)="MNFAX.RUN ,Fax Queue                        ,  0,      "
120     MNU( 2)="MNFAX.RUN ,Create/Send Fax                  ,  0,      "
130     MNU( 3)="MNFAX.RUN ,Display Fax Log File             ,  0,      "
!
!
140     FILEBASE 1 : XCALL NOECHO : SIGNIFICANCE 11
!
150     FILNAM="MNMNU.SC2"
160     XCALL FETCH,FILNAM,MENUS,INXCTL
170     IF INXCTL THEN GOTO ESP'ERR
!
180     X=(.LEVEL)*2 : XCALL SETUSR,2,X : XCALL SETUSR,3,X
!
190     INIT=INITRM'NCS+INITRM'NCA+INITRM'NSL+INITRM'NPD
    MENU'INIT:
200     XCALL INITRM,PROGRAM'DESC,"QUORUM",INIT
210     XCALL SETUSR,5,120
220     XCALL OPNSCR,MENUS
230     XCALL HIDFLD,MENUS,TRUE,11,13,15,17,19,21,23,25
240     XCALL HIDFLD,MENUS,TRUE,26,28,30,32,34,36,38,40
    MENU'LOOP:
250     IF MNU'MCNT<9  THEN FIELD=3 : X=1 ELSE FIELD=11 : &
         IF MNU'MCNT<17 THEN X=2 ELSE X=1
260     FOR Y=1 TO MNU'MCNT
270       ENTRY=Y USING "##. "+MNU'DSC(Y)
280       XCALL SETVAL,MENUS,FIELD,ENTRY
290       XCALL SETFSC,MENUS,FIELD,VAL(MNU'LVL(Y))
300       XCALL TOOLBX,TBX'HIDFLD,MENUS,FIELD,FALSE
310       FIELD=FIELD+X : IF X=2 AND Y=8 THEN FIELD=FIELD-1
320     NEXT Y
330     FIELD=1 : CHAR=ESP'BEGLIN+ESP'REPAINT
340     XCALL SETVAL,MENUS,FIELD,""
    MENU'ENTRY:
350     XCALL GTSCR,MENUS,CHAR,FIELD
!
360     IF (CHAR AND 255) = ESP'MENU THEN &
         MNU'MOPT=(-1) : GOTO CLSEUP
!
370     IF (CHAR AND ESP'POSTEDIT) THEN &
         ON FIELD GOTO MENU'CHK,MENU'PSW
!
380     GOTO MENU'ENTRY
!
    MENU'CHK:
390     XCALL GETVAL,MENUS,FIELD,MNU'AOPT : MNU'MOPT=0
400     IF MNU'AOPT="" THEN CHAR=ESP'RESETCHANGE    : GOTO MCHK'10
    MCHK'4:
410     MNU'MOPT = VAL(MNU'AOPT)
420     IF (MNU'MOPT<1 OR MNU'MOPT>MNU'MCNT) THEN CHAR=ESP'RESETCHANGE : &
         XCALL ERRDSP,"Invalid selection" : GOTO MCHK'10
    MCHK'6:
430     IF MNU'MCNT<9 THEN X=MNU'MOPT+2 ELSE X=MNU'MOPT+10 : &
         IF MNU'MCNT<17 THEN X=9+(MNU'MOPT*2) : IF MNU'MOPT>8 THEN X=X-1
440     XCALL GETFSC,MENUS,X,INXCTL
450     IF INXCTL=0 THEN CHAR=ESP'RESETCHANGE : &
         XCALL ERRDSP, "Security clearance is not sufficient for the selection" : &
         GOTO MCHK'10
460     IF MNU'PSW(MNU'MOPT)#"" THEN   ELSE GOTO WINDUP
470     GOTO MENU'ENTRY
    MCHK'10:
480     XCALL SETVAL,MENUS,1,""
490     GOTO MENU'ENTRY
    MENU'PSW:
500     XCALL GETVAL,MENUS,FIELD,ENTRY
510     XCALL SETVAL,MENUS,FIELD,""
520     IF ENTRY = "" THEN GOTO MCHK'10
530     IF ENTRY <> MNU'PSW(MNU'MOPT) THEN CHAR=ESP'RESETCHANGE : &
         XCALL ERRDSP,"Invalid Password" : GOTO MENU'ENTRY
    WINDUP:
540     XCALL STRIP,MNU'NAM(MNU'MOPT)
550     MNU'FACT=":R"+CRLF+"RUN "
560     MNU'FNAM=MNU'NAM(MNU'MOPT)
570     IF INSTR(1,MNU'NAM(MNU'MOPT),PROGRAM'NAME)=0 THEN GOTO WU'2
580     ON MNU'MOPT GOTO FAXQUE,FAXEDT,FAXSTS
590     XCALL SETVAL,MENUS,2,"" : GOTO MCHK'10
    WU'2:
600     LOOKUP MNU'FNAM,INXCTL : IF INXCTL=0 THEN CHAR=ESP'RESETCHANGE : &
         XCALL ERRDSP,"Selection is not available or under construction" : &
         XCALL SETVAL,MENUS,2,"" : GOTO MCHK'10
    CLSEUP:
    EXITUP:
610     IF MNU'MOPT>0 THEN   ELSE GOTO EU'2
620     X=INSTR(1,MNU'FACT,"RUNDOS")
630     IF X=0 THEN XCALL WAIT,3 : CHAIN MNU'FACT+MNU'FNAM
640     XCALL CLSSCR,MENUS
650     INIT=INITRM'NCA+INITRM'NSL+INITRM'NPD+INITRM'RST
660     XCALL INITRM,PROGRAM'DESC,"QUORUM",INIT
670     RUNDOS MNU'FACT[(X+7),50]+MNU'FNAM
680     IF MNU'MOPT#999 THEN &
         XCALL ERRDSP,"          Press any key to return to menu          "
690     INIT=0 : GOTO MENU'INIT
    EU'2:
700     XCALL CLSSCR,MENUS : XCALL INITRM
710     END
!
    FAXQUE:
720     MNU'FACT="RUNDOS "
730     MNU'FNAM="SYS:FAXQUE.LIT"
740     GOTO WU'2
!
    FAXEDT:
750     FILNAM="MNFAX.SC1"
760     XCALL FETCH,FILNAM,SCREEN,INXCTL
770     IF INXCTL THEN GOTO ESP'ERR
!
780     XCALL OPNSCR,SCREEN
    FAXEDT'INIT:
790     FIELD=1 : CHAR=ESP'BEGLIN+ESP'REPAINT
800     XCALL SETVAL,SCREEN,FIELD,""
    FAXEDT'ENTRY:
810     XCALL GTSCR,SCREEN,CHAR,FIELD
!
820     IF (CHAR AND 255) = ESP'MENU THEN &
         GOTO FAXEDT'CLSEUP
!
!!!!!   IF (CHAR AND ESP'POSTEDIT) THEN &
!!!!!     ON FIELD GOTO
!
830     GOTO FAXEDT'ENTRY
    FAXEDT'CLSEUP:
840     XCALL CLSSCR,SCREEN,1
850     CHAR=ESP'RESETCHANGE : GOTO MCHK'10
!!!!!   INIT=0 : GOTO MENU'INIT
!
    FAXSTS:
860     MNU'FACT="RUNDOS "
870     MNU'FNAM="SYS:FAXSTS.LIT"
880     GOTO WU'2
!
    ESP'ERR:
890     PRINT "ESP ERROR = ";INXCTL
900     END
!