INCLUDE  "CONLIB.VVP_VVPSPECS"
INCLUDE  "CONLIB.VVP_VVPFORMATS"
EXTERNALROUTINE  SCREEDS(STRING (255)S)
!
CONSTINTEGER  ACR = 7
CONSTINTEGER  TRY = 38
!
SYSTEMSTRINGFNSPEC  ITOS(INTEGER  I)
SYSTEMROUTINESPEC  PHEX(INTEGER  I)
EXTERNALROUTINESPEC  GETAVFSYS(INTEGERNAME  N,INTEGERARRAYNAME  A)
EXTERNALINTEGERFNSPEC  GETUSNAMES(INTEGERNAME  N,INTEGER  ADR,FSYS)
EXTERNALINTEGERFNSPEC  DSFI(STRING (6)U,INTEGER  F,T,S,A)
EXTERNALINTEGERFNSPEC  DPERMISSION(STRING (6)OWN,USER, C 
      STRING (8)DATE, STRING (11)FILE, INTEGER  FSYS, TYPE, ADR)
!
!
INTEGER  NSYS, FSYS, F, ADR, NU, J, K, N, C0, C1
INTEGER  U, AP, PN, I
RECORDFORMAT  F1(STRING (6)U, BYTEINTEGER  PRM)
RECORDFORMAT  F2(INTEGER  N, O, E, X, RECORD (F1)ARRAY  IP(0:15))
RECORD (F2)P
RECORD (F1)NAME  IP
INTEGERARRAY  A(0:99)
INTEGER  SEG, GAP, FLAG
INTEGERARRAY  FLD(0:15)
STRINGNAME  U1
BYTEINTEGERARRAY  UNAMES(0:2400)
!
EXTERNALINTEGERFNSPEC  DCONNECT(STRING (6)USER, STRING (11)FILE,
      INTEGER  FSYS, MODE, APF, INTEGERNAME  SEG, GAP)
EXTERNALINTEGERFNSPEC  DDISCONNECT(STRING (6)USER, STRING (11)FILE,
      INTEGER  FSYS, DESTROY)
EXTERNALINTEGERFNSPEC  DFSYS(STRING (6)USER, INTEGERNAME  FSYS)
EXTERNALSTRINGFNSPEC  UINFS(INTEGER  N)
CONSTINTEGER  KSHIFT = 10
CONSTINTEGER  MAXVKEY = 17
CONSTINTEGER  MAXKEY = 14
CONSTSTRING (8) TEMPOPTIONS = "T#OPTION"
CONSTINTEGER  MAXSEARCHDIRCOUNT = 16
CONSTSTRING  (13) ARRAY  VKEY(1 : MAXVKEY) =          C 
"INITSTACKSIZE","AUXSTACKSIZE","USERSTACKSIZE",
"ITWIDTH","FSTARTFILE","BSTARTFILE",
"PRELOADFILE","ACTIVEDIR","REMOVEDIR","SEARCHDIR","ARRAYDIAG",C 
"INITWORKSIZE","NULL","ITINSIZE","ITOUTSIZE","CFAULTS","TERMINAL"
CONSTSTRING  (12) ARRAY  KEY(1 : MAXKEY) =         C 
       "BRACKETS","NOBRACKETS","NORECALL","TEMPRECALL","PERMRECALL",
"NOFSTARTFILE","?","NOBLANKLINES","BLANKLINES","NOBSTARTFILE",
"INITPARMS","NOECHO","PARTECHO","FULLECHO"
!
!
!
ROUTINE  OUTI(STRING  (255) S, INTEGER  N)
      S = S . " " WHILE  LENGTH(S) < 31
      PRINTSTRING(S." :")
      WRITE(N,1)
      NEWLINE
END ;                                !OF OUTI
!
!
!
ROUTINE  OUTS(STRING  (255) S, T)
      PRINTSTRING(S." : ".T)
      NEWLINE
END ;                                !OF OUTS
!
!
!
    CONST  STRING  (9) ARRAY  C 
PARMS (0:63) =          C 
          "","I8","L8","R8",""(4),"MAXDICT",""(5),"MINSTACK",""(17),
          "QUOTES", "NOLIST", "NODIAG", "STACK",
          "NOCHECK", "NOARRAY", "NOTRACE", "PROFILE",
          "IMPS", "INHIBIOF", "ZERO", "XREF",
          "LABELS", "LET", "CODE", "ATTR",
          "OPT", "MAP", "DEBUG", "FREE",
          "DYNAMIC","","EBCDIC","NOLINE",
          ""(2),"PARMZ","PARMY",
          "PARMX","MISMATCH",""(2)
ROUTINE  PRINTPARMS(LONGINTEGER  P)
INTEGER  I, FOUND
FOUND = 0
FOR  I=0,1,63 CYCLE 
   IF  P&1 = 1 START 
      IF  PARMS(I) # "" START ;         !IGNORE BLANK PARMS
         IF  FOUND = 0 THEN  FOUND = 1 ELSE  PRINTSYMBOL(',')
         PRINTSTRING(PARMS(I))
      FINISH 
   FINISH 
   P = P>>1
REPEAT 
IF  FOUND = 0 THEN  PRINTSTRING("DEFAULTS")
END ;                                   !OF PRINTPARMS
!
!
!
    RECORD  FORMAT  C 
CONTF (INTEGER  DATAEND,DATASTART,PSIZE,FILETYPE,                 C 
    SUM,DATETIME,SPARE1,SPARE2,MARK, NULL1, UGLA, ASTK, USTK,     C 
    NULL2, ITWIDTH, LDELIM, RDELIM, JOURNAL, SEARCHDIRCOUNT,      C 
    ARRAYDIAG,INITWORKSIZE,SPARE,ITINSIZE,ITOUTSIZE,              C 
    NOBL, ISTK, LONGINTEGER  INITPARMS, INTEGER  DATAECHO,        C 
    TERMINAL, I23, I24, I25, I26, I27, I28, I29, I30, I31, I32,   C 
    STRING  (31) FSTARTFILE, BSTARTFILE, PRELOADFILE, MODDIR,     C 
    CFAULTS, S6, S7, S8, S9, S10, S11, S12, S13, S14, S15,        C 
    S16, S17, S18, S19, S20, S21, S22, S23, S24, S25, S26, S27,   C 
    S28, S29, S30, S31, S32,                                      C 
    STRING  (31) ARRAY  SEARCHDIR(1:16));!1/2/79
      RECORDFORMAT  C 
TERMF(BYTEINTEGER  TYPE, STRING (31)NAME, STRING (222)SPARE)
      RECORD (TERMF)ARRAYFORMAT  C 
TERMSF(1 : 31)
RECORD (TERMF)ARRAYNAME  TERMS
!
!
!
INTEGERARRAY  TARRAY(0 : 30)
INTEGERARRAY  SCREENLINE(0 : 30)
INTEGER  NEXTSCREEN
!
ROUTINE  OPT(INTEGER  FSYS, STRING (6)USER)
INTEGER  J, SEG, GAP, T, P, AD
RECORDFORMAT  DHF(INTEGER  END, START, SIZE, TYPE, SUM, DT, PSTART)
RECORD (DHF)NAME  DH
STRINGNAME  F
INTEGER  FLAG
STRING (11)FILE
RECORD (CONTF)NAME  C
STRING  (63) VALUE, KEYWORD, PARAM
INTEGER  I, CONAD, IVALUE, MODE, OLDFLAG
SWITCH  SW(1 : MAXKEY)
SWITCH  VSW(1 : MAXVKEY)
      FILE = "SS#OPT"
!
      SEG = 0
      GAP = 0
      FLAG = DCONNECT(USER, FILE, FSYS, 1, 0, SEG, GAP)
      RETURN  IF  FLAG # 0
!
      C == RECORD(SEG << 18)
!
      SEG = 0
      GAP = 0
      FLAG = DCONNECT(USER, C_MODDIR, FSYS, 1, 0, SEG, GAP)
      IF  FLAG = 0 START 
         AD = SEG << 18
         DH == RECORD(AD)
         AD = AD + DH_PSTART
         P = 4
         CYCLE 
            F == STRING(AD+P)
            EXIT  IF  F = ""
            IF  F -> (".SCREED") START 
      T = C_TERMINAL
      T = 0 IF  T < 0
      IF  SCREENLINE(T) < 0 START 
         SCREENLINE(T) = NEXTSCREEN
         VVGOTO(10, NEXTSCREEN)
         IF  T = 0 C 
         THEN  VVPRINTSTRING("Unspecified") C 
         ELSE  VVPRINTSTRING(TERMS(T)_NAME)
         NEXTSCREEN = NEXTSCREEN + 1
      FINISH 
      TARRAY(T) = TARRAY(T) + 1
      VVGOTO(40, SCREENLINE(T))
      VVPRINTSTRING(ITOS(TARRAY(T)))
      VVUPDATESCREEN
               EXIT 
            FINISH 
            P = P + LENGTH(F) + 1
         REPEAT 
         FLAG = DDISCONNECT(USER, C_MODDIR, FSYS, 0)
      FINISH 
!
      FLAG = DDISCONNECT(USER, FILE, FSYS, 0)
END 
!
!
!
      VVINIT(J)
      SEG = 0
      GAP = 0
      FLAG = DCONNECT("SUBSYS", "TERMINALCHS", -1, 1, 0, SEG, GAP)
      RETURN  UNLESS  FLAG = 0 OR  FLAG = 34
      TERMS == ARRAY(SEG<<18+32, TERMSF)
!
      NEXTSCREEN = 0
      CYCLE  J = 0, 1, 30
      TARRAY(J) = 0
      SCREENLINE(J) = -1
      REPEAT 
!
      VVDEFINETRIGGERS(3, 0, 0)
      VVGOTO(0, 0)
      VVPRINTSTRING("Fsys")
      AP = ADDR(P)
      ADR = ADDR(UNAMES(0))
      GET AV FSYS(NSYS, A)
!
      CYCLE  F = 0, 1, NSYS-1
         FSYS = A(F)
VVGOTO(2, F+2)
VVPRINTSTRING(ITOS(FSYS))
VV UPDATE SCREEN
         J = GETUSNAMES(NU, ADR, FSYS)
         IF  NU > 0 START 
            CYCLE  U = 0, 7, (NU-1)*7
               U1 == STRING(ADR+U)
IF  LENGTH(S) = 6 START 
   CYCLE  K = 1, 1, 6
      C0 = BYTEINTEGER(ADDR(S)+K)
      C1 = BYTEINTEGER(ADDR(U1)+K)
      -> NEXT UNLESS  C0 = '?' OR  C0 = C1
      REPEAT 
FINISH 
OPT(FSYS, U1)
NEXT:
            REPEAT 
         FINISH 
      REPEAT 
!
      FLAG = DDISCONNECT("SUBSYS", "TERMINALCHS", -1, 0) IF  FLAG = 0
      VVDEFINETRIGGERS(-2, 0, 0)
!
      CYCLE  J = 1, 1, 30
         OUTI(TERMS(J)_NAME, TARRAY(J)) IF  TARRAY(J) > 0
      REPEAT 
END 
ENDOFFILE