From 77e33191cb105b48b7225cc0629241825628058d Mon Sep 17 00:00:00 2001 From: John Paul Wohlscheid Date: Mon, 9 Sep 2024 17:51:08 -0400 Subject: [PATCH] first push of universe files --- Ardent/UV/&DEVICE& | Bin 0 -> 8192 bytes Ardent/UV/&MAP& | Bin 0 -> 16384 bytes Ardent/UV/&PARTFILES& | Bin 0 -> 16384 bytes Ardent/UV/&SAVEDLISTS&/&&S.TLDM%BFANNIE.266 | 10 + Ardent/UV/&SAVEDLISTS&/&&S.TLDM%BGAIL.203 | 6 + Ardent/UV/&SAVEDLISTS&/&&S.TLDM%BGARYW.178 | 6 + Ardent/UV/&SAVEDLISTS&/&&S.TLDM%BGARYW.281 | 10 + Ardent/UV/&SAVEDLISTS&/&&S.TLDM%BGARYW.285 | 4 + Ardent/UV/&SAVEDLISTS&/&&S.TLDM%Bgary.229 | 14 + Ardent/UV/&SAVEDLISTS&/&&S.TLDM%Bkconners.202 | 3 + Ardent/UV/&SAVEDLISTS&/&&S.TLDM%Bkconners.235 | 57 + Ardent/UV/&SAVEDLISTS&/&&S.TLDM%Bmconners.180 | 4 + Ardent/UV/&SAVEDLISTS&/&&S.TLDM%Bmconners.185 | 33 + Ardent/UV/&SAVEDLISTS&/&&S.TLDM%Bmconners.207 | 17 + Ardent/UV/&SAVEDLISTS&/&&S.TLDM%Bmconners.254 | 19 + Ardent/UV/&SAVEDLISTS&/.Type1 | 0 Ardent/UV/.uvconfig | Bin 0 -> 4096 bytes Ardent/UV/.uvconfig.bak | Bin 0 -> 4096 bytes Ardent/UV/APP.PROGS.O/.Type1 | 0 Ardent/UV/APP.PROGS.O/0114 | Bin 0 -> 1102 bytes Ardent/UV/APP.PROGS.O/0190 | Bin 0 -> 861 bytes Ardent/UV/APP.PROGS.O/0192 | Bin 0 -> 2054 bytes Ardent/UV/APP.PROGS.O/0196 | Bin 0 -> 176 bytes Ardent/UV/APP.PROGS.O/01A2 | Bin 0 -> 273 bytes Ardent/UV/APP.PROGS.O/01A6 | Bin 0 -> 1563 bytes Ardent/UV/APP.PROGS.O/01AD | Bin 0 -> 1181 bytes Ardent/UV/APP.PROGS.O/01B0 | Bin 0 -> 958 bytes Ardent/UV/APP.PROGS.O/01BE | Bin 0 -> 181 bytes Ardent/UV/APP.PROGS.O/0230 | Bin 0 -> 376 bytes Ardent/UV/APP.PROGS.O/0358 | Bin 0 -> 1492 bytes Ardent/UV/APP.PROGS.O/035A | Bin 0 -> 2060 bytes Ardent/UV/APP.PROGS.O/1114 | Bin 0 -> 626 bytes Ardent/UV/APP.PROGS.O/11A2 | Bin 0 -> 578 bytes Ardent/UV/APP.PROGS.O/11B0 | Bin 0 -> 999 bytes Ardent/UV/APP.PROGS.O/11BE | Bin 0 -> 186 bytes Ardent/UV/APP.PROGS.O/11ED | Bin 0 -> 1301 bytes Ardent/UV/APP.PROGS.O/201E | Bin 0 -> 303 bytes Ardent/UV/APP.PROGS.O/20E0 | Bin 0 -> 111 bytes Ardent/UV/APP.PROGS.O/2193 | Bin 0 -> 168 bytes Ardent/UV/APP.PROGS.O/2196 | Bin 0 -> 489 bytes Ardent/UV/APP.PROGS.O/21A2 | Bin 0 -> 348 bytes Ardent/UV/APP.PROGS.O/307A | Bin 0 -> 274 bytes Ardent/UV/APP.PROGS.O/30E0 | Bin 0 -> 113 bytes Ardent/UV/APP.PROGS.O/31AD | Bin 0 -> 577 bytes Ardent/UV/APP.PROGS.O/31B0 | Bin 0 -> 1016 bytes Ardent/UV/APP.PROGS.O/407A | Bin 0 -> 119 bytes Ardent/UV/APP.PROGS.O/41AD | Bin 0 -> 182 bytes Ardent/UV/APP.PROGS.O/508E | Bin 0 -> 631 bytes Ardent/UV/APP.PROGS.O/50BB | Bin 0 -> 132 bytes Ardent/UV/APP.PROGS.O/5114 | Bin 0 -> 1582 bytes Ardent/UV/APP.PROGS.O/534E | Bin 0 -> 771 bytes Ardent/UV/APP.PROGS.O/6072 | Bin 0 -> 188 bytes Ardent/UV/APP.PROGS.O/60BB | Bin 0 -> 111 bytes Ardent/UV/APP.PROGS.O/60E0 | Bin 0 -> 113 bytes Ardent/UV/APP.PROGS.O/61A2 | Bin 0 -> 103 bytes Ardent/UV/APP.PROGS.O/70E0 | Bin 0 -> 124 bytes Ardent/UV/APP.PROGS.O/7201 | Bin 0 -> 113 bytes Ardent/UV/APP.PROGS.O/80E0 | Bin 0 -> 119 bytes Ardent/UV/APP.PROGS.O/81F5 | Bin 0 -> 126 bytes Ardent/UV/APP.PROGS.O/9072 | Bin 0 -> 188 bytes Ardent/UV/APP.PROGS.O/A1A2 | Bin 0 -> 129 bytes Ardent/UV/APP.PROGS.O/ACCT.DUMP | Bin 0 -> 9359 bytes Ardent/UV/APP.PROGS.O/ACCT.RESTORE | Bin 0 -> 14528 bytes Ardent/UV/APP.PROGS.O/ACTLIST.B | Bin 0 -> 3599 bytes Ardent/UV/APP.PROGS.O/ADDS | Bin 0 -> 97 bytes Ardent/UV/APP.PROGS.O/AMLC | Bin 0 -> 1851 bytes Ardent/UV/APP.PROGS.O/ANDS.B | Bin 0 -> 97 bytes Ardent/UV/APP.PROGS.O/ASCII.EXPORT | Bin 0 -> 1427 bytes Ardent/UV/APP.PROGS.O/BIN.CONV.B | Bin 0 -> 3099 bytes Ardent/UV/APP.PROGS.O/BPIOCP | Bin 0 -> 135 bytes Ardent/UV/APP.PROGS.O/BPIOTT | Bin 0 -> 89 bytes Ardent/UV/APP.PROGS.O/CATALOG.PGMS | Bin 0 -> 3229 bytes Ardent/UV/APP.PROGS.O/CATLG.GCI | Bin 0 -> 3164 bytes Ardent/UV/APP.PROGS.O/CATS | Bin 0 -> 97 bytes Ardent/UV/APP.PROGS.O/CHANGE.DOMAIN | Bin 0 -> 3302 bytes Ardent/UV/APP.PROGS.O/CHARGE-TO | Bin 0 -> 209 bytes Ardent/UV/APP.PROGS.O/CHARS | Bin 0 -> 95 bytes Ardent/UV/APP.PROGS.O/CHECK.DICTS | Bin 0 -> 1182 bytes Ardent/UV/APP.PROGS.O/CHG.RAWCHG.B | Bin 0 -> 5987 bytes Ardent/UV/APP.PROGS.O/CHK.ID.B | Bin 0 -> 536 bytes Ardent/UV/APP.PROGS.O/CHOICE.BOX.B | Bin 0 -> 8654 bytes Ardent/UV/APP.PROGS.O/CINPUT.B | Bin 0 -> 6155 bytes Ardent/UV/APP.PROGS.O/CLOSE.FILE.B | Bin 0 -> 387 bytes Ardent/UV/APP.PROGS.O/CLRPROMPT.B | Bin 0 -> 91 bytes Ardent/UV/APP.PROGS.O/COMO | Bin 0 -> 865 bytes Ardent/UV/APP.PROGS.O/COMPIL.DICTS | Bin 0 -> 1006 bytes Ardent/UV/APP.PROGS.O/COMPILE.PGMS | Bin 0 -> 2530 bytes Ardent/UV/APP.PROGS.O/COMPMAINT.SUB | Bin 0 -> 3194 bytes Ardent/UV/APP.PROGS.O/CONFIG | Bin 0 -> 2667 bytes Ardent/UV/APP.PROGS.O/CONV.DICTS | Bin 0 -> 6920 bytes Ardent/UV/APP.PROGS.O/CONVERT.BP.B | Bin 0 -> 7310 bytes Ardent/UV/APP.PROGS.O/CONVERT.PGMS | Bin 0 -> 3171 bytes Ardent/UV/APP.PROGS.O/CONVERT.PROC | Bin 0 -> 7169 bytes Ardent/UV/APP.PROGS.O/CONVERT.VOC | Bin 0 -> 16752 bytes Ardent/UV/APP.PROGS.O/COUNTS | Bin 0 -> 97 bytes Ardent/UV/APP.PROGS.O/CR.LFILE.B | Bin 0 -> 2243 bytes Ardent/UV/APP.PROGS.O/CR.LFILERAW.B | Bin 0 -> 2442 bytes Ardent/UV/APP.PROGS.O/CREATE.LDIR.B | Bin 0 -> 4735 bytes Ardent/UV/APP.PROGS.O/CREATE.LRAW.B | Bin 0 -> 4456 bytes Ardent/UV/APP.PROGS.O/DC | Bin 0 -> 6130 bytes Ardent/UV/APP.PROGS.O/DC.A | Bin 0 -> 5162 bytes Ardent/UV/APP.PROGS.O/DC.CORR.CONV | Bin 0 -> 11652 bytes Ardent/UV/APP.PROGS.O/DC.F | Bin 0 -> 2935 bytes Ardent/UV/APP.PROGS.O/DC.ITEM | Bin 0 -> 1736 bytes Ardent/UV/APP.PROGS.O/DC.ITEM4 | Bin 0 -> 3056 bytes Ardent/UV/APP.PROGS.O/DC.MESSAGE | Bin 0 -> 1195 bytes Ardent/UV/APP.PROGS.O/DC.OPENS | Bin 0 -> 2787 bytes Ardent/UV/APP.PROGS.O/DC4 | Bin 0 -> 6097 bytes Ardent/UV/APP.PROGS.O/DEACTLIST.B | Bin 0 -> 3212 bytes Ardent/UV/APP.PROGS.O/DEADLOCK.B | Bin 0 -> 11057 bytes Ardent/UV/APP.PROGS.O/DEF.MNU.B | Bin 0 -> 273 bytes Ardent/UV/APP.PROGS.O/DEF.SUB.B | Bin 0 -> 345 bytes Ardent/UV/APP.PROGS.O/DEL.RFILE.B | Bin 0 -> 2592 bytes Ardent/UV/APP.PROGS.O/DELCAT.GCI | Bin 0 -> 2794 bytes Ardent/UV/APP.PROGS.O/DISLEN.B | Bin 0 -> 106 bytes Ardent/UV/APP.PROGS.O/DISP.SP.OPTS | Bin 0 -> 3865 bytes Ardent/UV/APP.PROGS.O/DIVH | Bin 0 -> 325 bytes Ardent/UV/APP.PROGS.O/DIVS | Bin 0 -> 97 bytes Ardent/UV/APP.PROGS.O/DL.LFILE.B | Bin 0 -> 4026 bytes Ardent/UV/APP.PROGS.O/DL.LFILER2.B | Bin 0 -> 4236 bytes Ardent/UV/APP.PROGS.O/DL.LFILERAW.B | Bin 0 -> 4241 bytes Ardent/UV/APP.PROGS.O/DO.MNU.BAR.B | Bin 0 -> 6744 bytes Ardent/UV/APP.PROGS.O/DRAW.BOX.B | Bin 0 -> 1880 bytes Ardent/UV/APP.PROGS.O/DRAW.SCRN.B | Bin 0 -> 2440 bytes Ardent/UV/APP.PROGS.O/EDIT.INPUT.B | Bin 0 -> 109 bytes Ardent/UV/APP.PROGS.O/EDT | Bin 0 -> 13861 bytes Ardent/UV/APP.PROGS.O/ENABLE.REC.B | Bin 0 -> 3401 bytes Ardent/UV/APP.PROGS.O/ENTER.BOX.B | Bin 0 -> 667 bytes Ardent/UV/APP.PROGS.O/EQS | Bin 0 -> 97 bytes Ardent/UV/APP.PROGS.O/ERRNO.B | Bin 0 -> 107 bytes Ardent/UV/APP.PROGS.O/ERROR.BOX.B | Bin 0 -> 435 bytes Ardent/UV/APP.PROGS.O/EXAM.COMMON.B | Bin 0 -> 669 bytes Ardent/UV/APP.PROGS.O/EXIST | Bin 0 -> 188 bytes Ardent/UV/APP.PROGS.O/EXPAND.B | Bin 0 -> 3582 bytes Ardent/UV/APP.PROGS.O/EXTERNALG.B | Bin 0 -> 184 bytes Ardent/UV/APP.PROGS.O/FADD.B | Bin 0 -> 97 bytes Ardent/UV/APP.PROGS.O/FCMP.B | Bin 0 -> 176 bytes Ardent/UV/APP.PROGS.O/FDIV.B | Bin 0 -> 97 bytes Ardent/UV/APP.PROGS.O/FIELDS | Bin 0 -> 101 bytes Ardent/UV/APP.PROGS.O/FINDFILE.B | Bin 0 -> 1918 bytes Ardent/UV/APP.PROGS.O/FIX.FIL.RPTR | Bin 0 -> 931 bytes Ardent/UV/APP.PROGS.O/FMT.BASIC.B | Bin 0 -> 7116 bytes Ardent/UV/APP.PROGS.O/FMTS | Bin 0 -> 97 bytes Ardent/UV/APP.PROGS.O/FMUL.B | Bin 0 -> 97 bytes Ardent/UV/APP.PROGS.O/FOLD.B | Bin 0 -> 97 bytes Ardent/UV/APP.PROGS.O/FSUB.B | Bin 0 -> 97 bytes Ardent/UV/APP.PROGS.O/GCI.CONVPI.B | Bin 0 -> 5090 bytes Ardent/UV/APP.PROGS.O/GCI.CREAT.B | Bin 0 -> 3026 bytes Ardent/UV/APP.PROGS.O/GCI.MAINT | Bin 0 -> 20702 bytes Ardent/UV/APP.PROGS.O/GCI.MAKEFILE | Bin 0 -> 4283 bytes Ardent/UV/APP.PROGS.O/GCI.NTADDL.B | Bin 0 -> 803 bytes Ardent/UV/APP.PROGS.O/GCI.NTEDL.B | Bin 0 -> 3354 bytes Ardent/UV/APP.PROGS.O/GCI.NTINST.B | Bin 0 -> 3361 bytes Ardent/UV/APP.PROGS.O/GCI.NTMAKF.B | Bin 0 -> 4299 bytes Ardent/UV/APP.PROGS.O/GCI.NTMAKL.B | Bin 0 -> 3411 bytes Ardent/UV/APP.PROGS.O/GCI.NTMAP.B | Bin 0 -> 1100 bytes Ardent/UV/APP.PROGS.O/GEN.GCI | Bin 0 -> 16603 bytes Ardent/UV/APP.PROGS.O/GES | Bin 0 -> 97 bytes Ardent/UV/APP.PROGS.O/GET | Bin 0 -> 4281 bytes Ardent/UV/APP.PROGS.O/GET.BASENAME | Bin 0 -> 1877 bytes Ardent/UV/APP.PROGS.O/GET.DEVS.B | Bin 0 -> 154 bytes Ardent/UV/APP.PROGS.O/GET.DIRNAME | Bin 0 -> 1888 bytes Ardent/UV/APP.PROGS.O/GET.FNAME.B | Bin 0 -> 627 bytes Ardent/UV/APP.PROGS.O/GET.KEY.B | Bin 0 -> 95 bytes Ardent/UV/APP.PROGS.O/GET.OSNAME.B | Bin 0 -> 112 bytes Ardent/UV/APP.PROGS.O/GET.PATH.B | Bin 0 -> 269 bytes Ardent/UV/APP.PROGS.O/GET.PGMS | Bin 0 -> 6745 bytes Ardent/UV/APP.PROGS.O/GETPARTNUM.B | Bin 0 -> 497 bytes Ardent/UV/APP.PROGS.O/GETPU.B | Bin 0 -> 425 bytes Ardent/UV/APP.PROGS.O/GETUCOUNTS.B | Bin 0 -> 133 bytes Ardent/UV/APP.PROGS.O/GTS | Bin 0 -> 97 bytes Ardent/UV/APP.PROGS.O/HELP.BOX.B | Bin 0 -> 355 bytes Ardent/UV/APP.PROGS.O/HELP.PRINT.B | Bin 0 -> 2201 bytes Ardent/UV/APP.PROGS.O/HUSHIT | Bin 0 -> 206 bytes Ardent/UV/APP.PROGS.O/ICONVS | Bin 0 -> 97 bytes Ardent/UV/APP.PROGS.O/IDENT | Bin 0 -> 130 bytes Ardent/UV/APP.PROGS.O/IFS | Bin 0 -> 99 bytes Ardent/UV/APP.PROGS.O/ILPROMPT.B | Bin 0 -> 95 bytes Ardent/UV/APP.PROGS.O/INDEXS | Bin 0 -> 99 bytes Ardent/UV/APP.PROGS.O/INDIRECT | Bin 0 -> 370 bytes Ardent/UV/APP.PROGS.O/INTS.B | Bin 0 -> 333 bytes Ardent/UV/APP.PROGS.O/INVERSE.B | Bin 0 -> 1660 bytes Ardent/UV/APP.PROGS.O/IS.EQPATHS | Bin 0 -> 1880 bytes Ardent/UV/APP.PROGS.O/IS.FULLPATH | Bin 0 -> 1997 bytes Ardent/UV/APP.PROGS.O/ISNULLS.B | Bin 0 -> 95 bytes Ardent/UV/APP.PROGS.O/ISUSER.B | Bin 0 -> 151 bytes Ardent/UV/APP.PROGS.O/LENS | Bin 0 -> 95 bytes Ardent/UV/APP.PROGS.O/LES | Bin 0 -> 97 bytes Ardent/UV/APP.PROGS.O/LIST.BOX.B | Bin 0 -> 142 bytes Ardent/UV/APP.PROGS.O/LIST.GCI | Bin 0 -> 3686 bytes Ardent/UV/APP.PROGS.O/LIST.TYPES | Bin 0 -> 3523 bytes Ardent/UV/APP.PROGS.O/LOAD.PIO.B | Bin 0 -> 2176 bytes Ardent/UV/APP.PROGS.O/LOC.BY.FLD.B | Bin 0 -> 229 bytes Ardent/UV/APP.PROGS.O/LOG.ACT.B | Bin 0 -> 10483 bytes Ardent/UV/APP.PROGS.O/LOG.RESTORE.B | Bin 0 -> 2985 bytes Ardent/UV/APP.PROGS.O/LOG.SAVE.B | Bin 0 -> 2992 bytes Ardent/UV/APP.PROGS.O/LOG.UVTRNS.B | Bin 0 -> 1974 bytes Ardent/UV/APP.PROGS.O/LOGRAW.SAVE.B | Bin 0 -> 5580 bytes Ardent/UV/APP.PROGS.O/LTS | Bin 0 -> 97 bytes Ardent/UV/APP.PROGS.O/MAKE.NEW.UV | Bin 0 -> 3396 bytes Ardent/UV/APP.PROGS.O/MAKE.PATH.B | Bin 0 -> 571 bytes Ardent/UV/APP.PROGS.O/MATBLOCK.B | Bin 0 -> 428 bytes Ardent/UV/APP.PROGS.O/MATCHES.B | Bin 0 -> 433 bytes Ardent/UV/APP.PROGS.O/MAXIMUM.B | Bin 0 -> 95 bytes Ardent/UV/APP.PROGS.O/MESSAGE.B | Bin 0 -> 2689 bytes Ardent/UV/APP.PROGS.O/MINIMUM.B | Bin 0 -> 95 bytes Ardent/UV/APP.PROGS.O/MNU.BAR.PR.B | Bin 0 -> 430 bytes Ardent/UV/APP.PROGS.O/MODS.B | Bin 0 -> 97 bytes Ardent/UV/APP.PROGS.O/MULS | Bin 0 -> 97 bytes Ardent/UV/APP.PROGS.O/NEGS.B | Bin 0 -> 95 bytes Ardent/UV/APP.PROGS.O/NES | Bin 0 -> 97 bytes Ardent/UV/APP.PROGS.O/NOTS | Bin 0 -> 95 bytes Ardent/UV/APP.PROGS.O/NUMS | Bin 0 -> 95 bytes Ardent/UV/APP.PROGS.O/OCONVS | Bin 0 -> 97 bytes Ardent/UV/APP.PROGS.O/OPEN.FILE.B | Bin 0 -> 1073 bytes Ardent/UV/APP.PROGS.O/OPEN.INIT.B | Bin 0 -> 2383 bytes Ardent/UV/APP.PROGS.O/ORS.B | Bin 0 -> 97 bytes Ardent/UV/APP.PROGS.O/OpenError.B | Bin 0 -> 961 bytes Ardent/UV/APP.PROGS.O/PACK.FNKEYS.B | Bin 0 -> 95 bytes Ardent/UV/APP.PROGS.O/PACT | Bin 0 -> 17858 bytes Ardent/UV/APP.PROGS.O/PARSE.PERM.B | Bin 0 -> 1212 bytes Ardent/UV/APP.PROGS.O/PERMS.B | Bin 0 -> 624 bytes Ardent/UV/APP.PROGS.O/PR.RECORD.B | Bin 0 -> 1013 bytes Ardent/UV/APP.PROGS.O/PRECOMP.SUB | Bin 0 -> 3999 bytes Ardent/UV/APP.PROGS.O/PTBCODE | Bin 0 -> 2082 bytes Ardent/UV/APP.PROGS.O/PTERM | Bin 0 -> 1461 bytes Ardent/UV/APP.PROGS.O/PUT.FORM.B | Bin 0 -> 522 bytes Ardent/UV/APP.PROGS.O/RD.UNX.FIL.B | Bin 0 -> 188 bytes Ardent/UV/APP.PROGS.O/REC.CHKPT.B | Bin 0 -> 1823 bytes Ardent/UV/APP.PROGS.O/REC.CONSIST.B | Bin 0 -> 328 bytes Ardent/UV/APP.PROGS.O/REL.LFILE.B | Bin 0 -> 753 bytes Ardent/UV/APP.PROGS.O/REMOTE.B | Bin 0 -> 3952 bytes Ardent/UV/APP.PROGS.O/RLS.FILE.B | Bin 0 -> 422 bytes Ardent/UV/APP.PROGS.O/RND | Bin 0 -> 93 bytes Ardent/UV/APP.PROGS.O/RPT.ERR.B | Bin 0 -> 405 bytes Ardent/UV/APP.PROGS.O/SEQS | Bin 0 -> 95 bytes Ardent/UV/APP.PROGS.O/SET.PTR.B | Bin 0 -> 3458 bytes Ardent/UV/APP.PROGS.O/SETDIR.B | Bin 0 -> 522 bytes Ardent/UV/APP.PROGS.O/SETPU.B | Bin 0 -> 461 bytes Ardent/UV/APP.PROGS.O/SHUTDOWN.B | Bin 0 -> 3268 bytes Ardent/UV/APP.PROGS.O/SLEEP | Bin 0 -> 149 bytes Ardent/UV/APP.PROGS.O/SORT.BOX.B | Bin 0 -> 8970 bytes Ardent/UV/APP.PROGS.O/SPACES | Bin 0 -> 95 bytes Ardent/UV/APP.PROGS.O/SPLICE | Bin 0 -> 99 bytes Ardent/UV/APP.PROGS.O/SQLINTCHK.B | Bin 0 -> 1066 bytes Ardent/UV/APP.PROGS.O/SQUOTE.B | Bin 0 -> 95 bytes Ardent/UV/APP.PROGS.O/ST.LOG.ATTR.B | Bin 0 -> 3243 bytes Ardent/UV/APP.PROGS.O/STKMATH | Bin 0 -> 1836 bytes Ardent/UV/APP.PROGS.O/STRIPSTRS.B | Bin 0 -> 1402 bytes Ardent/UV/APP.PROGS.O/STRS | Bin 0 -> 97 bytes Ardent/UV/APP.PROGS.O/SUBS | Bin 0 -> 97 bytes Ardent/UV/APP.PROGS.O/SUBSTRINGS | Bin 0 -> 99 bytes Ardent/UV/APP.PROGS.O/SUBSTRINGSH | Bin 0 -> 595 bytes Ardent/UV/APP.PROGS.O/SUMMATION.B | Bin 0 -> 95 bytes Ardent/UV/APP.PROGS.O/SUSP.REC.B | Bin 0 -> 1143 bytes Ardent/UV/APP.PROGS.O/TIMDAT | Bin 0 -> 2178 bytes Ardent/UV/APP.PROGS.O/TL.AFILE.B | Bin 0 -> 7375 bytes Ardent/UV/APP.PROGS.O/TL.ALIST.B | Bin 0 -> 6017 bytes Ardent/UV/APP.PROGS.O/TL.CDIR.B | Bin 0 -> 7196 bytes Ardent/UV/APP.PROGS.O/TL.CLEAR.B | Bin 0 -> 5828 bytes Ardent/UV/APP.PROGS.O/TL.DELETE.B | Bin 0 -> 7461 bytes Ardent/UV/APP.PROGS.O/TL.DERROR.B | Bin 0 -> 4259 bytes Ardent/UV/APP.PROGS.O/TL.DFILE.B | Bin 0 -> 5889 bytes Ardent/UV/APP.PROGS.O/TL.DISPLAY.B | Bin 0 -> 7690 bytes Ardent/UV/APP.PROGS.O/TL.DLIST.B | Bin 0 -> 6026 bytes Ardent/UV/APP.PROGS.O/TL.ENABLE.B | Bin 0 -> 6341 bytes Ardent/UV/APP.PROGS.O/TL.IDENT.B | Bin 0 -> 5612 bytes Ardent/UV/APP.PROGS.O/TL.PURGE.B | Bin 0 -> 6706 bytes Ardent/UV/APP.PROGS.O/TL.RELEASE.B | Bin 0 -> 6920 bytes Ardent/UV/APP.PROGS.O/TL.RESTORE.B | Bin 0 -> 8532 bytes Ardent/UV/APP.PROGS.O/TL.ROLL.B | Bin 0 -> 11644 bytes Ardent/UV/APP.PROGS.O/TL.ROLLFILE.B | Bin 0 -> 10896 bytes Ardent/UV/APP.PROGS.O/TL.SFILE.B | Bin 0 -> 10740 bytes Ardent/UV/APP.PROGS.O/TL.SHUT.B | Bin 0 -> 5123 bytes Ardent/UV/APP.PROGS.O/TL.STAT.B | Bin 0 -> 4422 bytes Ardent/UV/APP.PROGS.O/TL.SUSPEND.B | Bin 0 -> 4868 bytes Ardent/UV/APP.PROGS.O/TL.TLDET.B | Bin 0 -> 4433 bytes Ardent/UV/APP.PROGS.O/TL.TRANS.B | Bin 0 -> 8421 bytes Ardent/UV/APP.PROGS.O/TL.TREADY.B | Bin 0 -> 4447 bytes Ardent/UV/APP.PROGS.O/TL.VDELETE.B | Bin 0 -> 3921 bytes Ardent/UV/APP.PROGS.O/TL.VERROR.B | Bin 0 -> 4033 bytes Ardent/UV/APP.PROGS.O/TRIMBS | Bin 0 -> 95 bytes Ardent/UV/APP.PROGS.O/TRIMFS | Bin 0 -> 95 bytes Ardent/UV/APP.PROGS.O/TRIMS | Bin 0 -> 95 bytes Ardent/UV/APP.PROGS.O/UNIMPLEM | Bin 0 -> 357 bytes Ardent/UV/APP.PROGS.O/UNLOAD.FILE.B | Bin 0 -> 907 bytes Ardent/UV/APP.PROGS.O/USER.TYPE.B | Bin 0 -> 253 bytes Ardent/UV/APP.PROGS.O/UVORNF.B | Bin 0 -> 1804 bytes Ardent/UV/APP.PROGS.O/UVPATHNAME.B | Bin 0 -> 4718 bytes Ardent/UV/APP.PROGS.O/UVPRINTMSG | Bin 0 -> 1731 bytes Ardent/UV/APP.PROGS.O/UVREADMSG | Bin 0 -> 1574 bytes Ardent/UV/APP.PROGS.O/UVSUSPEND.B | Bin 0 -> 1050 bytes Ardent/UV/APP.PROGS.O/VERF.CAT.B | Bin 0 -> 23443 bytes Ardent/UV/APP.PROGS.O/VERF.SCHEMA.B | Bin 0 -> 12437 bytes Ardent/UV/APP.PROGS.O/VERF.SCHEMS.B | Bin 0 -> 4266 bytes Ardent/UV/APP.PROGS.O/VERF.TAB.B | Bin 0 -> 43193 bytes Ardent/UV/APP.PROGS.O/VMADMSUB.B | Bin 0 -> 93334 bytes Ardent/UV/APP.PROGS.O/VOC.PATH.B | Bin 0 -> 1051 bytes Ardent/UV/APP.PROGS.O/WK1.EXPORT | Bin 0 -> 4388 bytes Ardent/UV/APP.PROGS.O/WRAP.PRINT | Bin 0 -> 795 bytes Ardent/UV/APP.PROGS.O/YES.NO.BOX.B | Bin 0 -> 1811 bytes Ardent/UV/APP.PROGS.O/YESNO.B | Bin 0 -> 1327 bytes Ardent/UV/APP.PROGS/.Type1 | 0 Ardent/UV/APP.PROGS/0114 | 108 + Ardent/UV/APP.PROGS/0190 | 111 + Ardent/UV/APP.PROGS/0192 | 174 + Ardent/UV/APP.PROGS/0196 | 47 + Ardent/UV/APP.PROGS/01A2 | 36 + Ardent/UV/APP.PROGS/01A6 | 133 + Ardent/UV/APP.PROGS/01AD | 151 + Ardent/UV/APP.PROGS/01B0 | 133 + Ardent/UV/APP.PROGS/01BE | 49 + Ardent/UV/APP.PROGS/0230 | 48 + Ardent/UV/APP.PROGS/0358 | 140 + Ardent/UV/APP.PROGS/035A | 162 + Ardent/UV/APP.PROGS/1114 | 59 + Ardent/UV/APP.PROGS/11A2 | 81 + Ardent/UV/APP.PROGS/11B0 | 133 + Ardent/UV/APP.PROGS/11BE | 49 + Ardent/UV/APP.PROGS/11ED | 124 + Ardent/UV/APP.PROGS/201E | 36 + Ardent/UV/APP.PROGS/20E0 | 28 + Ardent/UV/APP.PROGS/2193 | 33 + Ardent/UV/APP.PROGS/2196 | 95 + Ardent/UV/APP.PROGS/21A2 | 47 + Ardent/UV/APP.PROGS/307A | 50 + Ardent/UV/APP.PROGS/30E0 | 28 + Ardent/UV/APP.PROGS/31AD | 89 + Ardent/UV/APP.PROGS/31B0 | 133 + Ardent/UV/APP.PROGS/407A | 29 + Ardent/UV/APP.PROGS/41AD | 37 + Ardent/UV/APP.PROGS/508E | 63 + Ardent/UV/APP.PROGS/50BB | 28 + Ardent/UV/APP.PROGS/5114 | 142 + Ardent/UV/APP.PROGS/534E | 97 + Ardent/UV/APP.PROGS/6072 | 40 + Ardent/UV/APP.PROGS/60BB | 28 + Ardent/UV/APP.PROGS/60E0 | 28 + Ardent/UV/APP.PROGS/61A2 | 29 + Ardent/UV/APP.PROGS/70E0 | 29 + Ardent/UV/APP.PROGS/7201 | 28 + Ardent/UV/APP.PROGS/80E0 | 29 + Ardent/UV/APP.PROGS/81F5 | 28 + Ardent/UV/APP.PROGS/9072 | 40 + Ardent/UV/APP.PROGS/A1A2 | 28 + Ardent/UV/APP.PROGS/ACCT.DUMP | 650 + Ardent/UV/APP.PROGS/ACCT.RESTORE | 756 + Ardent/UV/APP.PROGS/ACTLIST.B | 175 + Ardent/UV/APP.PROGS/ADDS | 26 + Ardent/UV/APP.PROGS/AMLC | 328 + Ardent/UV/APP.PROGS/ANDS.B | 26 + Ardent/UV/APP.PROGS/ASCII.EXPORT | 97 + Ardent/UV/APP.PROGS/BIN.CONV.B | 353 + Ardent/UV/APP.PROGS/BPIOCP | 29 + Ardent/UV/APP.PROGS/BPIOTT | 25 + Ardent/UV/APP.PROGS/CATALOG.PGMS | 153 + Ardent/UV/APP.PROGS/CATLG.GCI | 98 + Ardent/UV/APP.PROGS/CATS | 26 + Ardent/UV/APP.PROGS/CHANGE.DOMAIN | 117 + Ardent/UV/APP.PROGS/CHARGE-TO | 33 + Ardent/UV/APP.PROGS/CHARS | 26 + Ardent/UV/APP.PROGS/CHECK.DICTS | 62 + Ardent/UV/APP.PROGS/CHG.RAWCHG.B | 315 + Ardent/UV/APP.PROGS/CHK.ID.B | 100 + Ardent/UV/APP.PROGS/CHOICE.BOX.B | 403 + Ardent/UV/APP.PROGS/CINPUT.B | 334 + Ardent/UV/APP.PROGS/CLOSE.FILE.B | 100 + Ardent/UV/APP.PROGS/CLRPROMPT.B | 28 + Ardent/UV/APP.PROGS/COMO | 85 + Ardent/UV/APP.PROGS/COMPIL.DICTS | 54 + Ardent/UV/APP.PROGS/COMPILE.PGMS | 69 + Ardent/UV/APP.PROGS/COMPMAINT.SUB | 218 + Ardent/UV/APP.PROGS/CONFIG | 52 + Ardent/UV/APP.PROGS/CONV.DICTS | 302 + Ardent/UV/APP.PROGS/CONVERT.BP.B | 538 + Ardent/UV/APP.PROGS/CONVERT.PGMS | 135 + Ardent/UV/APP.PROGS/CONVERT.PROC | 225 + Ardent/UV/APP.PROGS/CONVERT.VOC | 888 + Ardent/UV/APP.PROGS/COUNTS | 26 + Ardent/UV/APP.PROGS/CR.LFILE.B | 255 + Ardent/UV/APP.PROGS/CR.LFILERAW.B | 268 + Ardent/UV/APP.PROGS/CREATE.LDIR.B | 152 + Ardent/UV/APP.PROGS/CREATE.LRAW.B | 115 + Ardent/UV/APP.PROGS/DC | 531 + Ardent/UV/APP.PROGS/DC.A | 425 + Ardent/UV/APP.PROGS/DC.CORR.CONV | 1110 + Ardent/UV/APP.PROGS/DC.F | 262 + Ardent/UV/APP.PROGS/DC.ITEM | 149 + Ardent/UV/APP.PROGS/DC.ITEM4 | 242 + Ardent/UV/APP.PROGS/DC.MESSAGE | 96 + Ardent/UV/APP.PROGS/DC.OPENS | 188 + Ardent/UV/APP.PROGS/DC4 | 538 + Ardent/UV/APP.PROGS/DEACTLIST.B | 136 + Ardent/UV/APP.PROGS/DEADLOCK.B | 575 + Ardent/UV/APP.PROGS/DEF.MNU.B | 42 + Ardent/UV/APP.PROGS/DEF.SUB.B | 46 + Ardent/UV/APP.PROGS/DEL.RFILE.B | 85 + Ardent/UV/APP.PROGS/DELCAT.GCI | 52 + Ardent/UV/APP.PROGS/DISLEN.B | 30 + Ardent/UV/APP.PROGS/DISP.SP.OPTS | 177 + Ardent/UV/APP.PROGS/DIVH | 61 + Ardent/UV/APP.PROGS/DIVS | 26 + Ardent/UV/APP.PROGS/DL.LFILE.B | 244 + Ardent/UV/APP.PROGS/DL.LFILER2.B | 300 + Ardent/UV/APP.PROGS/DL.LFILERAW.B | 252 + Ardent/UV/APP.PROGS/DO.MNU.BAR.B | 358 + Ardent/UV/APP.PROGS/DRAW.BOX.B | 58 + Ardent/UV/APP.PROGS/DRAW.SCRN.B | 101 + Ardent/UV/APP.PROGS/EDIT.INPUT.B | 28 + Ardent/UV/APP.PROGS/EDT | 1537 + Ardent/UV/APP.PROGS/ENABLE.REC.B | 117 + Ardent/UV/APP.PROGS/ENTER.BOX.B | 64 + Ardent/UV/APP.PROGS/EQS | 26 + Ardent/UV/APP.PROGS/ERRNO.B | 29 + Ardent/UV/APP.PROGS/ERROR.BOX.B | 42 + Ardent/UV/APP.PROGS/EXAM.COMMON.B | 59 + Ardent/UV/APP.PROGS/EXIST | 43 + Ardent/UV/APP.PROGS/EXPAND.B | 311 + Ardent/UV/APP.PROGS/EXTERNALG.B | 41 + Ardent/UV/APP.PROGS/FADD.B | 28 + Ardent/UV/APP.PROGS/FCMP.B | 37 + Ardent/UV/APP.PROGS/FDIV.B | 28 + Ardent/UV/APP.PROGS/FIELDS | 26 + Ardent/UV/APP.PROGS/FINDFILE.B | 154 + Ardent/UV/APP.PROGS/FIX.FIL.RPTR | 88 + Ardent/UV/APP.PROGS/FMT.BASIC.B | 887 + Ardent/UV/APP.PROGS/FMTS | 26 + Ardent/UV/APP.PROGS/FMUL.B | 28 + Ardent/UV/APP.PROGS/FOLD.B | 28 + Ardent/UV/APP.PROGS/FSUB.B | 28 + Ardent/UV/APP.PROGS/GCI.CONVPI.B | 269 + Ardent/UV/APP.PROGS/GCI.CREAT.B | 108 + Ardent/UV/APP.PROGS/GCI.MAINT | 961 + Ardent/UV/APP.PROGS/GCI.MAKEFILE | 183 + Ardent/UV/APP.PROGS/GCI.NTADDL.B | 114 + Ardent/UV/APP.PROGS/GCI.NTEDL.B | 132 + Ardent/UV/APP.PROGS/GCI.NTINST.B | 112 + Ardent/UV/APP.PROGS/GCI.NTMAKF.B | 280 + Ardent/UV/APP.PROGS/GCI.NTMAKL.B | 113 + Ardent/UV/APP.PROGS/GCI.NTMAP.B | 119 + Ardent/UV/APP.PROGS/GEN.GCI | 930 + Ardent/UV/APP.PROGS/GES | 26 + Ardent/UV/APP.PROGS/GET | 236 + Ardent/UV/APP.PROGS/GET.BASENAME | 46 + Ardent/UV/APP.PROGS/GET.DEVS.B | 31 + Ardent/UV/APP.PROGS/GET.DIRNAME | 44 + Ardent/UV/APP.PROGS/GET.FNAME.B | 68 + Ardent/UV/APP.PROGS/GET.KEY.B | 28 + Ardent/UV/APP.PROGS/GET.OSNAME.B | 32 + Ardent/UV/APP.PROGS/GET.PATH.B | 62 + Ardent/UV/APP.PROGS/GET.PGMS | 336 + Ardent/UV/APP.PROGS/GETPARTNUM.B | 85 + Ardent/UV/APP.PROGS/GETPU.B | 54 + Ardent/UV/APP.PROGS/GETUCOUNTS.B | 41 + Ardent/UV/APP.PROGS/GTS | 26 + Ardent/UV/APP.PROGS/HELP.BOX.B | 41 + Ardent/UV/APP.PROGS/HELP.PRINT.B | 104 + Ardent/UV/APP.PROGS/HUSHIT | 28 + Ardent/UV/APP.PROGS/ICONVS | 26 + Ardent/UV/APP.PROGS/IDENT | 26 + Ardent/UV/APP.PROGS/IFS | 26 + Ardent/UV/APP.PROGS/ILPROMPT.B | 28 + Ardent/UV/APP.PROGS/INDEXS | 26 + Ardent/UV/APP.PROGS/INDIRECT | 69 + Ardent/UV/APP.PROGS/INTS.B | 45 + Ardent/UV/APP.PROGS/INVERSE.B | 42 + Ardent/UV/APP.PROGS/IS.EQPATHS | 47 + Ardent/UV/APP.PROGS/IS.FULLPATH | 47 + Ardent/UV/APP.PROGS/ISNULLS.B | 25 + Ardent/UV/APP.PROGS/ISUSER.B | 28 + Ardent/UV/APP.PROGS/LENS | 26 + Ardent/UV/APP.PROGS/LES | 26 + Ardent/UV/APP.PROGS/LIST.BOX.B | 26 + Ardent/UV/APP.PROGS/LIST.GCI | 101 + Ardent/UV/APP.PROGS/LIST.TYPES | 76 + Ardent/UV/APP.PROGS/LOAD.PIO.B | 316 + Ardent/UV/APP.PROGS/LOC.BY.FLD.B | 42 + Ardent/UV/APP.PROGS/LOG.ACT.B | 438 + Ardent/UV/APP.PROGS/LOG.RESTORE.B | 121 + Ardent/UV/APP.PROGS/LOG.SAVE.B | 121 + Ardent/UV/APP.PROGS/LOG.UVTRNS.B | 59 + Ardent/UV/APP.PROGS/LOGRAW.SAVE.B | 400 + Ardent/UV/APP.PROGS/LTS | 26 + Ardent/UV/APP.PROGS/MAKE.NEW.UV | 87 + Ardent/UV/APP.PROGS/MAKE.PATH.B | 74 + Ardent/UV/APP.PROGS/MATBLOCK.B | 69 + Ardent/UV/APP.PROGS/MATCHES.B | 72 + Ardent/UV/APP.PROGS/MAXIMUM.B | 28 + Ardent/UV/APP.PROGS/MESSAGE.B | 105 + Ardent/UV/APP.PROGS/MINIMUM.B | 28 + Ardent/UV/APP.PROGS/MNU.BAR.PR.B | 40 + Ardent/UV/APP.PROGS/MODS.B | 26 + Ardent/UV/APP.PROGS/MULS | 26 + Ardent/UV/APP.PROGS/NEGS.B | 25 + Ardent/UV/APP.PROGS/NES | 26 + Ardent/UV/APP.PROGS/NOTS | 26 + Ardent/UV/APP.PROGS/NUMS | 26 + Ardent/UV/APP.PROGS/OCONVS | 26 + Ardent/UV/APP.PROGS/OPEN.FILE.B | 204 + Ardent/UV/APP.PROGS/OPEN.INIT.B | 66 + Ardent/UV/APP.PROGS/ORS.B | 26 + Ardent/UV/APP.PROGS/OpenError.B | 63 + Ardent/UV/APP.PROGS/PACK.FNKEYS.B | 28 + Ardent/UV/APP.PROGS/PACT | 2072 ++ Ardent/UV/APP.PROGS/PARSE.PERM.B | 77 + Ardent/UV/APP.PROGS/PERMS.B | 79 + Ardent/UV/APP.PROGS/PR.RECORD.B | 189 + Ardent/UV/APP.PROGS/PRECOMP.SUB | 371 + Ardent/UV/APP.PROGS/PTBCODE | 75 + Ardent/UV/APP.PROGS/PTERM | 131 + Ardent/UV/APP.PROGS/PUT.FORM.B | 42 + Ardent/UV/APP.PROGS/RD.UNX.FIL.B | 29 + Ardent/UV/APP.PROGS/REC.CHKPT.B | 226 + Ardent/UV/APP.PROGS/REC.CONSIST.B | 37 + Ardent/UV/APP.PROGS/REL.LFILE.B | 117 + Ardent/UV/APP.PROGS/REMOTE.B | 92 + Ardent/UV/APP.PROGS/RLS.FILE.B | 96 + Ardent/UV/APP.PROGS/RND | 26 + Ardent/UV/APP.PROGS/RPT.ERR.B | 68 + Ardent/UV/APP.PROGS/SEQS | 26 + Ardent/UV/APP.PROGS/SET.PTR.B | 273 + Ardent/UV/APP.PROGS/SETDIR.B | 65 + Ardent/UV/APP.PROGS/SETPU.B | 60 + Ardent/UV/APP.PROGS/SHUTDOWN.B | 97 + Ardent/UV/APP.PROGS/SLEEP | 33 + Ardent/UV/APP.PROGS/SORT.BOX.B | 547 + Ardent/UV/APP.PROGS/SPACES | 26 + Ardent/UV/APP.PROGS/SPLICE | 26 + Ardent/UV/APP.PROGS/SQLINTCHK.B | 116 + Ardent/UV/APP.PROGS/SQUOTE.B | 28 + Ardent/UV/APP.PROGS/ST.LOG.ATTR.B | 164 + Ardent/UV/APP.PROGS/STKMATH | 98 + Ardent/UV/APP.PROGS/STRIPSTRS.B | 84 + Ardent/UV/APP.PROGS/STRS | 26 + Ardent/UV/APP.PROGS/SUBS | 26 + Ardent/UV/APP.PROGS/SUBSTRINGS | 26 + Ardent/UV/APP.PROGS/SUBSTRINGSH | 84 + Ardent/UV/APP.PROGS/SUMMATION.B | 28 + Ardent/UV/APP.PROGS/SUSP.REC.B | 79 + Ardent/UV/APP.PROGS/TIMDAT | 107 + Ardent/UV/APP.PROGS/TL.AFILE.B | 250 + Ardent/UV/APP.PROGS/TL.ALIST.B | 179 + Ardent/UV/APP.PROGS/TL.CDIR.B | 245 + Ardent/UV/APP.PROGS/TL.CLEAR.B | 188 + Ardent/UV/APP.PROGS/TL.DELETE.B | 258 + Ardent/UV/APP.PROGS/TL.DERROR.B | 74 + Ardent/UV/APP.PROGS/TL.DFILE.B | 185 + Ardent/UV/APP.PROGS/TL.DISPLAY.B | 277 + Ardent/UV/APP.PROGS/TL.DLIST.B | 179 + Ardent/UV/APP.PROGS/TL.ENABLE.B | 181 + Ardent/UV/APP.PROGS/TL.IDENT.B | 166 + Ardent/UV/APP.PROGS/TL.PURGE.B | 204 + Ardent/UV/APP.PROGS/TL.RELEASE.B | 248 + Ardent/UV/APP.PROGS/TL.RESTORE.B | 330 + Ardent/UV/APP.PROGS/TL.ROLL.B | 437 + Ardent/UV/APP.PROGS/TL.ROLLFILE.B | 409 + Ardent/UV/APP.PROGS/TL.SFILE.B | 440 + Ardent/UV/APP.PROGS/TL.SHUT.B | 119 + Ardent/UV/APP.PROGS/TL.STAT.B | 93 + Ardent/UV/APP.PROGS/TL.SUSPEND.B | 114 + Ardent/UV/APP.PROGS/TL.TLDET.B | 94 + Ardent/UV/APP.PROGS/TL.TRANS.B | 358 + Ardent/UV/APP.PROGS/TL.TREADY.B | 93 + Ardent/UV/APP.PROGS/TL.VDELETE.B | 58 + Ardent/UV/APP.PROGS/TL.VERROR.B | 69 + Ardent/UV/APP.PROGS/TRIMBS | 26 + Ardent/UV/APP.PROGS/TRIMFS | 26 + Ardent/UV/APP.PROGS/TRIMS | 26 + Ardent/UV/APP.PROGS/UNIMPLEM | 36 + Ardent/UV/APP.PROGS/UNLOAD.FILE.B | 89 + Ardent/UV/APP.PROGS/USER.TYPE.B | 52 + Ardent/UV/APP.PROGS/UVORNF.B | 312 + Ardent/UV/APP.PROGS/UVPATHNAME.B | 310 + Ardent/UV/APP.PROGS/UVPRINTMSG | 125 + Ardent/UV/APP.PROGS/UVREADMSG | 110 + Ardent/UV/APP.PROGS/UVSUSPEND.B | 82 + Ardent/UV/APP.PROGS/VERF.CAT.B | 980 + Ardent/UV/APP.PROGS/VERF.SCHEMA.B | 631 + Ardent/UV/APP.PROGS/VERF.SCHEMS.B | 189 + Ardent/UV/APP.PROGS/VERF.TAB.B | 2674 ++ Ardent/UV/APP.PROGS/VMADMSUB.B | 12884 ++++++++ Ardent/UV/APP.PROGS/VOC.PATH.B | 132 + Ardent/UV/APP.PROGS/WK1.EXPORT | 502 + Ardent/UV/APP.PROGS/WRAP.PRINT | 87 + Ardent/UV/APP.PROGS/YES.NO.BOX.B | 39 + Ardent/UV/APP.PROGS/YESNO.B | 264 + Ardent/UV/BLTRS | Bin 0 -> 10240 bytes Ardent/UV/BP.O/.Type1 | 0 Ardent/UV/BP.O/ACCT.STAT.B | Bin 0 -> 9636 bytes Ardent/UV/BP.O/ALTER.IC.B | Bin 0 -> 472 bytes Ardent/UV/BP.O/BLOCK.TERM | Bin 0 -> 1591 bytes Ardent/UV/BP.O/BUILD.INDEX | Bin 0 -> 16097 bytes Ardent/UV/BP.O/COMO_VERB | Bin 0 -> 3195 bytes Ardent/UV/BP.O/CONNECT | Bin 0 -> 36435 bytes Ardent/UV/BP.O/CONV.SQL.B | Bin 0 -> 62634 bytes Ardent/UV/BP.O/COPY.B | Bin 0 -> 12473 bytes Ardent/UV/BP.O/CREATE.INDEX | Bin 0 -> 16447 bytes Ardent/UV/BP.O/DATALOADER.B | Bin 0 -> 18901 bytes Ardent/UV/BP.O/DBMS.MAINT.B | Bin 0 -> 15748 bytes Ardent/UV/BP.O/DEFINE.DF | Bin 0 -> 16226 bytes Ardent/UV/BP.O/DELAY | Bin 0 -> 1140 bytes Ardent/UV/BP.O/DELETE | Bin 0 -> 1845 bytes Ardent/UV/BP.O/DELETE.INDEX | Bin 0 -> 7684 bytes Ardent/UV/BP.O/DEMO.SQL.B | Bin 0 -> 10429 bytes Ardent/UV/BP.O/ED.B | Bin 0 -> 48746 bytes Ardent/UV/BP.O/EDIT.CONFIG.B | Bin 0 -> 17700 bytes Ardent/UV/BP.O/FORMAT.B | Bin 0 -> 2234 bytes Ardent/UV/BP.O/GET.LC.B | Bin 0 -> 1670 bytes Ardent/UV/BP.O/GET.TA.BUF.B | Bin 0 -> 595 bytes Ardent/UV/BP.O/GET.TERM.TYP | Bin 0 -> 1539 bytes Ardent/UV/BP.O/GET.TOKEN.B | Bin 0 -> 864 bytes Ardent/UV/BP.O/GETFILEMAP.B | Bin 0 -> 1457 bytes Ardent/UV/BP.O/GROP.ADMIN.B | Bin 0 -> 13670 bytes Ardent/UV/BP.O/INIT.DEMO | Bin 0 -> 4606 bytes Ardent/UV/BP.O/LA100 | Bin 0 -> 2885 bytes Ardent/UV/BP.O/LIST.INDEX | Bin 0 -> 7348 bytes Ardent/UV/BP.O/LIST.LC.B | Bin 0 -> 2434 bytes Ardent/UV/BP.O/LIST.MAPS.B | Bin 0 -> 2619 bytes Ardent/UV/BP.O/LIST.STAT.B | Bin 0 -> 677 bytes Ardent/UV/BP.O/LISTFILES | Bin 0 -> 3869 bytes Ardent/UV/BP.O/MENU.DOC | Bin 0 -> 1116 bytes Ardent/UV/BP.O/MENU.PIX | Bin 0 -> 1585 bytes Ardent/UV/BP.O/MKFILELIST.B | Bin 0 -> 3923 bytes Ardent/UV/BP.O/MTF.ERASE.B | Bin 0 -> 1671 bytes Ardent/UV/BP.O/MTF.FIXSCR.B | Bin 0 -> 2317 bytes Ardent/UV/BP.O/MTF.INPUT.B | Bin 0 -> 4139 bytes Ardent/UV/BP.O/MTF.LOAD.B | Bin 0 -> 5015 bytes Ardent/UV/BP.O/MTF.MENU.B | Bin 0 -> 5577 bytes Ardent/UV/BP.O/MTF.PAINT.B | Bin 0 -> 1748 bytes Ardent/UV/BP.O/MTF.REDRAW.B | Bin 0 -> 2302 bytes Ardent/UV/BP.O/MTF.SUB.B | Bin 0 -> 3213 bytes Ardent/UV/BP.O/NLS.BUILD.B | Bin 0 -> 62388 bytes Ardent/UV/BP.O/NLS.DESC.CHR.B | Bin 0 -> 3854 bytes Ardent/UV/BP.O/NLS.DUMPMAP.B | Bin 0 -> 1856 bytes Ardent/UV/BP.O/NLS.FINDLCS.B | Bin 0 -> 579 bytes Ardent/UV/BP.O/NLS.INSTALL.B | Bin 0 -> 16268 bytes Ardent/UV/BP.O/NLS.LISTLCS.B | Bin 0 -> 578 bytes Ardent/UV/BP.O/NLS.LOADED.B | Bin 0 -> 452 bytes Ardent/UV/BP.O/NLS.LSTMAPS.B | Bin 0 -> 606 bytes Ardent/UV/BP.O/NLS.MAINTAIN.B | Bin 0 -> 28591 bytes Ardent/UV/BP.O/NLS.MT.LIST.B | Bin 0 -> 4156 bytes Ardent/UV/BP.O/NLS.PRIME.JIS.B | Bin 0 -> 1437 bytes Ardent/UV/BP.O/NLS.RECODE.B | Bin 0 -> 9796 bytes Ardent/UV/BP.O/NLS.REPORT.B | Bin 0 -> 22359 bytes Ardent/UV/BP.O/NLS.SETNONE.B | Bin 0 -> 2251 bytes Ardent/UV/BP.O/NLS.SHIFT.JIS.B | Bin 0 -> 1334 bytes Ardent/UV/BP.O/NLS.TAU.JIS.B | Bin 0 -> 2022 bytes Ardent/UV/BP.O/NLS.UPDACC.B | Bin 0 -> 4290 bytes Ardent/UV/BP.O/NLS.UVRDMS.B | Bin 0 -> 823 bytes Ardent/UV/BP.O/NLS.WT.LIST.B | Bin 0 -> 3829 bytes Ardent/UV/BP.O/P.ATT | Bin 0 -> 615 bytes Ardent/UV/BP.O/P.DET | Bin 0 -> 253 bytes Ardent/UV/BP.O/PHELP | Bin 0 -> 5858 bytes Ardent/UV/BP.O/PRINT-ERR | Bin 0 -> 1476 bytes Ardent/UV/BP.O/PRINTER | Bin 0 -> 359 bytes Ardent/UV/BP.O/PTERM_VERB | Bin 0 -> 8020 bytes Ardent/UV/BP.O/READ.CONFIG | Bin 0 -> 5666 bytes Ardent/UV/BP.O/REVISE.AS.B | Bin 0 -> 5120 bytes Ardent/UV/BP.O/REVISE.B | Bin 0 -> 28598 bytes Ardent/UV/BP.O/REVISE.PH.B | Bin 0 -> 735 bytes Ardent/UV/BP.O/SAVEREST.LC.B | Bin 0 -> 728 bytes Ardent/UV/BP.O/SET-FILE | Bin 0 -> 860 bytes Ardent/UV/BP.O/SET-LPTR | Bin 0 -> 543 bytes Ardent/UV/BP.O/SET.INDEX | Bin 0 -> 10137 bytes Ardent/UV/BP.O/SET.LC.B | Bin 0 -> 1653 bytes Ardent/UV/BP.O/SET.TERM.TYP | Bin 0 -> 2650 bytes Ardent/UV/BP.O/SETFILEMAP.B | Bin 0 -> 3313 bytes Ardent/UV/BP.O/SETGCIMAP.B | Bin 0 -> 570 bytes Ardent/UV/BP.O/SETSEQMAP.B | Bin 0 -> 570 bytes Ardent/UV/BP.O/SP_ASSIGN | Bin 0 -> 3766 bytes Ardent/UV/BP.O/SQLBCIDEMO | Bin 0 -> 5926 bytes Ardent/UV/BP.O/SRV.MAINT.B | Bin 0 -> 12249 bytes Ardent/UV/BP.O/SRVP.MAINT.B | Bin 0 -> 16114 bytes Ardent/UV/BP.O/T.ATT | Bin 0 -> 3720 bytes Ardent/UV/BP.O/T.DET | Bin 0 -> 1399 bytes Ardent/UV/BP.O/T.SPACE | Bin 0 -> 1553 bytes Ardent/UV/BP.O/TOKEN.SORT.B | Bin 0 -> 369 bytes Ardent/UV/BP.O/UNICODE.FILE | Bin 0 -> 7641 bytes Ardent/UV/BP.O/USERS.B | Bin 0 -> 146 bytes Ardent/UV/BP.O/VERF.SQL.B | Bin 0 -> 9715 bytes Ardent/UV/BP/.Type1 | 0 Ardent/UV/BP/ACCT.STAT.B | 518 + Ardent/UV/BP/ALTER.IC.B | 50 + Ardent/UV/BP/BLOCK.TERM | 136 + Ardent/UV/BP/BUILD.INDEX | 1583 + Ardent/UV/BP/COMO_VERB | 197 + Ardent/UV/BP/CONNECT | 2401 ++ Ardent/UV/BP/CONV.SQL.B | 3816 +++ Ardent/UV/BP/COPY.B | 1459 + Ardent/UV/BP/CREATE.INDEX | 1519 + Ardent/UV/BP/DATALOADER.B | 1861 ++ Ardent/UV/BP/DBMS.MAINT.B | 933 + Ardent/UV/BP/DEFINE.DF | 1399 + Ardent/UV/BP/DELAY | 79 + Ardent/UV/BP/DELETE | 158 + Ardent/UV/BP/DELETE.INDEX | 588 + Ardent/UV/BP/DEMO.SQL.B | 982 + Ardent/UV/BP/ED.B | 3911 +++ Ardent/UV/BP/FORMAT.B | 241 + Ardent/UV/BP/GCI1 | 28 + Ardent/UV/BP/GCI2 | 53 + Ardent/UV/BP/GCI3 | 58 + Ardent/UV/BP/GCI4 | 51 + Ardent/UV/BP/GCI5 | 30 + Ardent/UV/BP/GET.TA.BUF.B | 87 + Ardent/UV/BP/GET.TERM.TYP | 110 + Ardent/UV/BP/GET.TOKEN.B | 157 + Ardent/UV/BP/GROP.ADMIN.B | 928 + Ardent/UV/BP/INIT.DEMO | 278 + Ardent/UV/BP/LA100 | 141 + Ardent/UV/BP/LIST.INDEX | 611 + Ardent/UV/BP/LIST.STAT.B | 82 + Ardent/UV/BP/LISTFILES | 200 + Ardent/UV/BP/MENU.DOC | 77 + Ardent/UV/BP/MENU.PIX | 105 + Ardent/UV/BP/MKFILELIST.B | 214 + Ardent/UV/BP/MTF.ERASE.B | 65 + Ardent/UV/BP/MTF.FIXSCR.B | 152 + Ardent/UV/BP/MTF.INPUT.B | 229 + Ardent/UV/BP/MTF.LOAD.B | 314 + Ardent/UV/BP/MTF.MENU.B | 273 + Ardent/UV/BP/MTF.PAINT.B | 81 + Ardent/UV/BP/MTF.REDRAW.B | 92 + Ardent/UV/BP/MTF.SUB.B | 162 + Ardent/UV/BP/P.ATT | 41 + Ardent/UV/BP/P.DET | 33 + Ardent/UV/BP/PHELP | 565 + Ardent/UV/BP/PRINT-ERR | 106 + Ardent/UV/BP/PRINTER | 39 + Ardent/UV/BP/PTERM_VERB | 341 + Ardent/UV/BP/READ.CONFIG | 356 + Ardent/UV/BP/REVISE.AS.B | 369 + Ardent/UV/BP/REVISE.B | 1889 ++ Ardent/UV/BP/REVISE.PH.B | 78 + Ardent/UV/BP/SET-FILE | 77 + Ardent/UV/BP/SET-LPTR | 51 + Ardent/UV/BP/SET.INDEX | 858 + Ardent/UV/BP/SET.TERM.TYP | 167 + Ardent/UV/BP/SP_ASSIGN | 143 + Ardent/UV/BP/SQLBCIDEMO | 468 + Ardent/UV/BP/SRV.MAINT.B | 686 + Ardent/UV/BP/SRVP.MAINT.B | 957 + Ardent/UV/BP/T.ATT | 204 + Ardent/UV/BP/T.DET | 78 + Ardent/UV/BP/T.SPACE | 117 + Ardent/UV/BP/TOKEN.SORT.B | 41 + Ardent/UV/BP/USERS.B | 23 + Ardent/UV/BP/VERF.SQL.B | 557 + Ardent/UV/CAT/CAT | Bin 0 -> 6656 bytes Ardent/UV/CAT/INFORMATION | Bin 0 -> 6656 bytes Ardent/UV/CAT/PICK | Bin 0 -> 4096 bytes Ardent/UV/CONVERT.PRECOMP | Bin 0 -> 9728 bytes Ardent/UV/CVI/ADDS | Bin 0 -> 46592 bytes Ardent/UV/CVI/IBM | Bin 0 -> 46592 bytes Ardent/UV/CVI/MICRODATA | Bin 0 -> 46592 bytes Ardent/UV/CVI/PRIME | Bin 0 -> 46592 bytes Ardent/UV/CVI/ULTIMATE | Bin 0 -> 46592 bytes Ardent/UV/DATA.TYPES | Bin 0 -> 9728 bytes Ardent/UV/DICT.DICT | Bin 0 -> 14336 bytes Ardent/UV/DICT.PICK | Bin 0 -> 2048 bytes Ardent/UV/D_&DEVICE& | Bin 0 -> 4096 bytes Ardent/UV/D_&MAP& | Bin 0 -> 4096 bytes Ardent/UV/D_&PARTFILES& | Bin 0 -> 4096 bytes Ardent/UV/D_&SAVEDLISTS& | Bin 0 -> 4096 bytes Ardent/UV/D_&TRUNCATED& | Bin 0 -> 4096 bytes Ardent/UV/D_APP.PROGS | Bin 0 -> 4096 bytes Ardent/UV/D_APP.PROGS.O | Bin 0 -> 4096 bytes Ardent/UV/D_BLTRS | Bin 0 -> 4096 bytes Ardent/UV/D_BP | Bin 0 -> 4096 bytes Ardent/UV/D_BP.O | Bin 0 -> 4096 bytes Ardent/UV/D_CAT | Bin 0 -> 4096 bytes Ardent/UV/D_DATA.TYPES | Bin 0 -> 7680 bytes Ardent/UV/D_GCI | Bin 0 -> 8704 bytes Ardent/UV/D_GTARS | Bin 0 -> 4096 bytes Ardent/UV/D_HASH.AID.FIL | Bin 0 -> 4096 bytes Ardent/UV/D_INCLUDE | Bin 0 -> 4096 bytes Ardent/UV/D_MAP | Bin 0 -> 4096 bytes Ardent/UV/D_MENU.FILE | Bin 0 -> 4096 bytes Ardent/UV/D_NEWACC | Bin 0 -> 8192 bytes Ardent/UV/D_PTERM.FILE | Bin 0 -> 1536 bytes Ardent/UV/D_REVISE.DISCS | Bin 0 -> 4096 bytes Ardent/UV/D_REVISE.PROCS | Bin 0 -> 4096 bytes Ardent/UV/D_STAT.FILE | Bin 0 -> 12288 bytes Ardent/UV/D_SYS.HELP | Bin 0 -> 4096 bytes Ardent/UV/D_SYS.MESSAGE | Bin 0 -> 4096 bytes Ardent/UV/D_UFD | Bin 0 -> 4096 bytes Ardent/UV/D_UV.ACCESS | Bin 0 -> 4096 bytes Ardent/UV/D_UV.ACCOUNT | Bin 0 -> 4096 bytes Ardent/UV/D_UV.FLAVOR | Bin 0 -> 4096 bytes Ardent/UV/D_UV.LOGINS | Bin 0 -> 4096 bytes Ardent/UV/D_UV.TRANS | Bin 0 -> 4096 bytes Ardent/UV/D_UV_LOGS | Bin 0 -> 4096 bytes Ardent/UV/D_UV_UDRPUB | Bin 0 -> 4096 bytes Ardent/UV/D_UV_UDRSUB | Bin 0 -> 4096 bytes Ardent/UV/D_UV_UDRSYS | Bin 0 -> 4096 bytes Ardent/UV/D_VOC | Bin 0 -> 8192 bytes Ardent/UV/D_VOCLIB | Bin 0 -> 4096 bytes Ardent/UV/D_bin | Bin 0 -> 4096 bytes Ardent/UV/D_catdir | Bin 0 -> 1536 bytes Ardent/UV/D_sample | Bin 0 -> 4096 bytes Ardent/UV/DeIsL1.isu | Bin 0 -> 93024 bytes Ardent/UV/ERRMSG | Bin 0 -> 30720 bytes Ardent/UV/GCI | Bin 0 -> 9728 bytes Ardent/UV/GTARS | Bin 0 -> 4096 bytes Ardent/UV/HS.ADMIN/D_HS.ADMIN | Bin 0 -> 4096 bytes Ardent/UV/HS.ADMIN/D_VOC | Bin 0 -> 4096 bytes Ardent/UV/HS.ADMIN/D_VOCLIB | Bin 0 -> 2048 bytes Ardent/UV/HS.ADMIN/HFA_DATA.u | 49 + Ardent/UV/HS.ADMIN/HFA_DICT.u | 34 + Ardent/UV/HS.ADMIN/HS.ADMIN | Bin 0 -> 3072 bytes Ardent/UV/HS.ADMIN/HS.ADMIN.u | 31 + Ardent/UV/HS.ADMIN/VOC | Bin 0 -> 83456 bytes Ardent/UV/HS.ADMIN/VOC.u | 30 + Ardent/UV/HS.ADMIN/VOCLIB | Bin 0 -> 16384 bytes Ardent/UV/HS.BP.O/HS.ACTIVATE | Bin 0 -> 11510 bytes Ardent/UV/HS.BP.O/HS.AUTHORIZE | Bin 0 -> 225 bytes Ardent/UV/HS.BP.O/HS.CASE | Bin 0 -> 962 bytes Ardent/UV/HS.BP.O/HS.DEACTIVATE | Bin 0 -> 6056 bytes Ardent/UV/HS.BP.O/HS.DISCNT | Bin 0 -> 639 bytes Ardent/UV/HS.BP.O/HS.FILEINFO | Bin 0 -> 16231 bytes Ardent/UV/HS.BP.O/HS.FINDIT | Bin 0 -> 3013 bytes Ardent/UV/HS.BP.O/HS.OLEDBACCTS | Bin 0 -> 445 bytes Ardent/UV/HS.BP.O/HS.OLEDBCOLS | Bin 0 -> 424 bytes Ardent/UV/HS.BP.O/HS.OLEDBINFO | Bin 0 -> 22949 bytes Ardent/UV/HS.BP.O/HS.OLEDBKEYS | Bin 0 -> 430 bytes Ardent/UV/HS.BP.O/HS.OLEDBTABS | Bin 0 -> 478 bytes Ardent/UV/HS.BP.O/HS.RUNINACC | Bin 0 -> 967 bytes Ardent/UV/HS.BP.O/HS.SCHEMA | Bin 0 -> 199 bytes Ardent/UV/HS.BP.O/HS.SCRUB | Bin 0 -> 59900 bytes Ardent/UV/HS.BP.O/HS.SCRUBINTER | Bin 0 -> 651 bytes Ardent/UV/HS.BP.O/HS.SHOWCFG | Bin 0 -> 4660 bytes Ardent/UV/HS.BP.O/HS.SPCOLS | Bin 0 -> 12132 bytes Ardent/UV/HS.BP.O/HS.STAREXPAND | Bin 0 -> 1570 bytes Ardent/UV/HS.BP.O/HS.STAT | Bin 0 -> 8277 bytes Ardent/UV/HS.BP.O/HS.TEXTIFY | Bin 0 -> 516 bytes Ardent/UV/HS.BP.O/HS.UPDFINFO | Bin 0 -> 503 bytes Ardent/UV/HS.BP.O/HS.UPDUVACC | Bin 0 -> 3621 bytes Ardent/UV/HS.SALES/CUSTOMER.u | 327 + Ardent/UV/HS.SALES/CUSTOMER/.Type30 | 0 Ardent/UV/HS.SALES/CUSTOMER/DATA.30 | Bin 0 -> 6144 bytes Ardent/UV/HS.SALES/CUSTOMER/OVER.30 | Bin 0 -> 2048 bytes Ardent/UV/HS.SALES/D_CUSTOMER | Bin 0 -> 6144 bytes Ardent/UV/HS.SALES/D_CUSTOMER.u | 312 + Ardent/UV/HS.SALES/D_HS_FILE_A000 | Bin 0 -> 2048 bytes Ardent/UV/HS.SALES/D_PRODUCTS | Bin 0 -> 2048 bytes Ardent/UV/HS.SALES/D_PRODUCTS.u | 97 + Ardent/UV/HS.SALES/D_STATES | Bin 0 -> 2048 bytes Ardent/UV/HS.SALES/D_STATES.u | 84 + Ardent/UV/HS.SALES/D_VOC | Bin 0 -> 4096 bytes Ardent/UV/HS.SALES/D_VOCLIB | Bin 0 -> 2048 bytes Ardent/UV/HS.SALES/HS_FILE_A000/.Type30 | 0 Ardent/UV/HS.SALES/HS_FILE_A000/DATA.30 | Bin 0 -> 4096 bytes Ardent/UV/HS.SALES/HS_FILE_A000/OVER.30 | Bin 0 -> 2048 bytes Ardent/UV/HS.SALES/PRODUCTS.u | 40 + Ardent/UV/HS.SALES/PRODUCTS/.Type30 | 0 Ardent/UV/HS.SALES/PRODUCTS/DATA.30 | Bin 0 -> 4096 bytes Ardent/UV/HS.SALES/PRODUCTS/OVER.30 | Bin 0 -> 2048 bytes Ardent/UV/HS.SALES/STATES.u | 112 + Ardent/UV/HS.SALES/STATES/.Type30 | 0 Ardent/UV/HS.SALES/STATES/DATA.30 | Bin 0 -> 4096 bytes Ardent/UV/HS.SALES/STATES/OVER.30 | Bin 0 -> 2048 bytes Ardent/UV/HS.SALES/VOC | Bin 0 -> 82432 bytes Ardent/UV/HS.SALES/VOC.u | 24 + Ardent/UV/HS.SALES/VOCLIB | Bin 0 -> 16384 bytes Ardent/UV/HS.SERVICE/CALLS.u | 132 + Ardent/UV/HS.SERVICE/CALLS/.Type30 | 0 Ardent/UV/HS.SERVICE/CALLS/DATA.30 | Bin 0 -> 4096 bytes Ardent/UV/HS.SERVICE/CALLS/OVER.30 | Bin 0 -> 2048 bytes Ardent/UV/HS.SERVICE/D_CALLS | Bin 0 -> 4096 bytes Ardent/UV/HS.SERVICE/D_CALLS.u | 192 + Ardent/UV/HS.SERVICE/D_HS_FILE_A000 | Bin 0 -> 2048 bytes Ardent/UV/HS.SERVICE/D_PROBLEMS | Bin 0 -> 3072 bytes Ardent/UV/HS.SERVICE/D_PROBLEMS.u | 122 + Ardent/UV/HS.SERVICE/D_PRODS | Bin 0 -> 2048 bytes Ardent/UV/HS.SERVICE/D_PRODS.u | 82 + Ardent/UV/HS.SERVICE/D_VOC | Bin 0 -> 4096 bytes Ardent/UV/HS.SERVICE/D_VOCLIB | Bin 0 -> 2048 bytes Ardent/UV/HS.SERVICE/HS_FILE_A000/.Type30 | 0 Ardent/UV/HS.SERVICE/HS_FILE_A000/DATA.30 | Bin 0 -> 4096 bytes Ardent/UV/HS.SERVICE/HS_FILE_A000/OVER.30 | Bin 0 -> 2048 bytes Ardent/UV/HS.SERVICE/PROBLEMS.u | 68 + Ardent/UV/HS.SERVICE/PROBLEMS/.Type30 | 0 Ardent/UV/HS.SERVICE/PROBLEMS/DATA.30 | Bin 0 -> 4096 bytes Ardent/UV/HS.SERVICE/PROBLEMS/OVER.30 | Bin 0 -> 2048 bytes Ardent/UV/HS.SERVICE/PRODS.u | 47 + Ardent/UV/HS.SERVICE/PRODS/.Type30 | 0 Ardent/UV/HS.SERVICE/PRODS/DATA.30 | Bin 0 -> 4096 bytes Ardent/UV/HS.SERVICE/PRODS/OVER.30 | Bin 0 -> 2048 bytes Ardent/UV/HS.SERVICE/VOC | Bin 0 -> 82432 bytes Ardent/UV/HS.SERVICE/VOC.u | 24 + Ardent/UV/HS.SERVICE/VOCLIB | Bin 0 -> 16384 bytes Ardent/UV/INCLUDE/.Type1 | 0 Ardent/UV/INCLUDE/ATFUNCTIONS.H | 168 + Ardent/UV/INCLUDE/ATFUNCTIONS.INS.IBAS | 168 + Ardent/UV/INCLUDE/AUTHORIZE.H | 42 + Ardent/UV/INCLUDE/AUTHORIZE.INS.IBAS | 42 + Ardent/UV/INCLUDE/CHK.ID.H | 15 + Ardent/UV/INCLUDE/COPY.H | 43 + Ardent/UV/INCLUDE/DC.COMM.DECL | 74 + Ardent/UV/INCLUDE/DEF.USERS | 80 + Ardent/UV/INCLUDE/ERRD.H | 21 + Ardent/UV/INCLUDE/ERRD.INS.IBAS | 21 + Ardent/UV/INCLUDE/FFIX.INCLUDE.H | 69 + Ardent/UV/INCLUDE/FILEFIX.INCLUDE.H | 69 + Ardent/UV/INCLUDE/FILEINFO.H | 115 + Ardent/UV/INCLUDE/FILEINFO.INS.IBAS | 115 + Ardent/UV/INCLUDE/FILENAMES.H | 80 + Ardent/UV/INCLUDE/FILETYPES.H | 31 + Ardent/UV/INCLUDE/FILETYPES.INS.IBAS | 31 + Ardent/UV/INCLUDE/FORMAT.OPTS.H | 33 + Ardent/UV/INCLUDE/GETPU.H | 57 + Ardent/UV/INCLUDE/GETPU.INS.IBAS | 57 + Ardent/UV/INCLUDE/GTI.FNKEYS.IH | 648 + Ardent/UV/INCLUDE/INFO_ERRORS.INS.IBAS | 46 + Ardent/UV/INCLUDE/INFO_ERRS.H | 46 + Ardent/UV/INCLUDE/INFO_KEYS.H | 57 + Ardent/UV/INCLUDE/INFO_KEYS.INS.IBAS | 57 + Ardent/UV/INCLUDE/KEYWORD.H | 290 + Ardent/UV/INCLUDE/LOG.H | 78 + Ardent/UV/INCLUDE/MACHINE.NAME | 163 + Ardent/UV/INCLUDE/MTF.INCL.H | 313 + Ardent/UV/INCLUDE/ODBC.H | 638 + Ardent/UV/INCLUDE/OPEN.TOOLS.H | 26 + Ardent/UV/INCLUDE/OSDEF.H | 24 + Ardent/UV/INCLUDE/PACTCMN.H | 36 + Ardent/UV/INCLUDE/PACTERR.H | 112 + Ardent/UV/INCLUDE/PRINTERIO.H | 140 + Ardent/UV/INCLUDE/RECORDLOCKED.H | 31 + Ardent/UV/INCLUDE/RECORDLOCKED.INS.IBAS | 31 + Ardent/UV/INCLUDE/REVISE.H | 89 + Ardent/UV/INCLUDE/SSMERGE.H | 34 + Ardent/UV/INCLUDE/SYMBOL.TBL.H | 39 + Ardent/UV/INCLUDE/SYMBOLINS.H | 44 + Ardent/UV/INCLUDE/TERMINFO | 605 + Ardent/UV/INCLUDE/TLOG.H | 211 + Ardent/UV/INCLUDE/TTY | 103 + Ardent/UV/INCLUDE/UDR.INCLUDE.H | 78 + Ardent/UV/INCLUDE/USER_TYPES.H | 31 + Ardent/UV/INCLUDE/USER_TYPES.INS.IBAS | 31 + Ardent/UV/INCLUDE/UV.COM | 48 + Ardent/UV/INCLUDE/UVEXPORT.H | 80 + Ardent/UV/INCLUDE/UVKEYS.H | 29 + Ardent/UV/INCLUDE/UVNLS.H | 73 + Ardent/UV/INCLUDE/UVNLSLOC.H | 162 + Ardent/UV/INCLUDE/VERBINSERT.H | 27 + Ardent/UV/INCLUDE/VERIFY.COM | 84 + Ardent/UV/INCLUDE/VMADMCMN.H | 78 + Ardent/UV/INCLUDE/VMADMERR.H | 133 + Ardent/UV/INCLUDE/VOC.TYPE.H | 34 + Ardent/UV/INCLUDE/YESNO.H | 55 + Ardent/UV/I_UV.TRANS/INDEX.000 | Bin 0 -> 16384 bytes Ardent/UV/I_UV.TRANS/INDEX.MAP | Bin 0 -> 25 bytes Ardent/UV/MENU.FILE | Bin 0 -> 32768 bytes Ardent/UV/NEWACC/IN2 | Bin 0 -> 101376 bytes Ardent/UV/NEWACC/INFORMATION | Bin 0 -> 85504 bytes Ardent/UV/NEWACC/NEWACC | Bin 0 -> 83456 bytes Ardent/UV/NEWACC/PICK | Bin 0 -> 88064 bytes Ardent/UV/NEWACC/PIOPEN | Bin 0 -> 85504 bytes Ardent/UV/NEWACC/REALITY | Bin 0 -> 88576 bytes Ardent/UV/PTERM.FILE/BAUD | Bin 0 -> 1536 bytes Ardent/UV/PTERM.FILE/COMM | Bin 0 -> 10752 bytes Ardent/UV/PTERM.FILE/DISP | Bin 0 -> 5120 bytes Ardent/UV/REVISE.DISCS | Bin 0 -> 8192 bytes Ardent/UV/REVISE.PROCS | Bin 0 -> 28672 bytes Ardent/UV/SQL/CATALOG/&SAVEDLISTS&/.Type1 | 0 Ardent/UV/SQL/CATALOG/D_SAVEDLISTS | Bin 0 -> 4096 bytes Ardent/UV/SQL/CATALOG/D_UV_ASSOC | Bin 0 -> 2560 bytes Ardent/UV/SQL/CATALOG/D_UV_COLUMNS | Bin 0 -> 3072 bytes Ardent/UV/SQL/CATALOG/D_UV_SCHEMA | Bin 0 -> 1536 bytes Ardent/UV/SQL/CATALOG/D_UV_TABLES | Bin 0 -> 2560 bytes Ardent/UV/SQL/CATALOG/D_UV_USERS | Bin 0 -> 2048 bytes Ardent/UV/SQL/CATALOG/D_UV_VIEWS | Bin 0 -> 2560 bytes Ardent/UV/SQL/CATALOG/D_VOC | Bin 0 -> 6144 bytes Ardent/UV/SQL/CATALOG/D_VOCLIB | Bin 0 -> 4096 bytes Ardent/UV/SQL/CATALOG/UV_ASSOC/.Type30 | 0 Ardent/UV/SQL/CATALOG/UV_ASSOC/DATA.30 | Bin 0 -> 4096 bytes Ardent/UV/SQL/CATALOG/UV_ASSOC/OVER.30 | Bin 0 -> 4096 bytes Ardent/UV/SQL/CATALOG/UV_COLUMNS/.Type30 | 0 Ardent/UV/SQL/CATALOG/UV_COLUMNS/DATA.30 | Bin 0 -> 8192 bytes Ardent/UV/SQL/CATALOG/UV_COLUMNS/OVER.30 | Bin 0 -> 6144 bytes Ardent/UV/SQL/CATALOG/UV_SCHEMA/.Type30 | 0 Ardent/UV/SQL/CATALOG/UV_SCHEMA/DATA.30 | Bin 0 -> 4096 bytes Ardent/UV/SQL/CATALOG/UV_SCHEMA/OVER.30 | Bin 0 -> 4096 bytes Ardent/UV/SQL/CATALOG/UV_TABLES/.Type30 | 0 Ardent/UV/SQL/CATALOG/UV_TABLES/DATA.30 | Bin 0 -> 6144 bytes Ardent/UV/SQL/CATALOG/UV_TABLES/OVER.30 | Bin 0 -> 4096 bytes Ardent/UV/SQL/CATALOG/UV_USERS/.Type30 | 0 Ardent/UV/SQL/CATALOG/UV_USERS/DATA.30 | Bin 0 -> 4096 bytes Ardent/UV/SQL/CATALOG/UV_USERS/OVER.30 | Bin 0 -> 4096 bytes Ardent/UV/SQL/CATALOG/UV_VIEWS/.Type30 | 0 Ardent/UV/SQL/CATALOG/UV_VIEWS/DATA.30 | Bin 0 -> 4096 bytes Ardent/UV/SQL/CATALOG/UV_VIEWS/OVER.30 | Bin 0 -> 4096 bytes Ardent/UV/SQL/CATALOG/VOC | Bin 0 -> 84480 bytes Ardent/UV/SQL/CATALOG/VOCLIB | Bin 0 -> 12288 bytes Ardent/UV/STAT.FILE | Bin 0 -> 36864 bytes Ardent/UV/SYS.HELP/BASIC.HELP | Bin 0 -> 1593344 bytes Ardent/UV/SYS.HELP/BCI.HELP | Bin 0 -> 278528 bytes Ardent/UV/SYS.HELP/CONV.HELP | Bin 0 -> 258048 bytes Ardent/UV/SYS.HELP/PICK.HELP | Bin 0 -> 1044480 bytes Ardent/UV/SYS.HELP/SQL.HELP | Bin 0 -> 430080 bytes Ardent/UV/SYS.HELP/SYS.HELP | Bin 0 -> 1032192 bytes Ardent/UV/SYS.MESSAGE | Bin 0 -> 696320 bytes Ardent/UV/UV.ACCESS | Bin 0 -> 4096 bytes Ardent/UV/UV.ACCOUNT | Bin 0 -> 4096 bytes Ardent/UV/UV.FLAVOR | Bin 0 -> 4096 bytes Ardent/UV/UV.LOGINS | Bin 0 -> 36864 bytes Ardent/UV/UV.TRANS | Bin 0 -> 4096 bytes Ardent/UV/UV_LOGS | Bin 0 -> 4096 bytes Ardent/UV/UV_UDRPUB | Bin 0 -> 208896 bytes Ardent/UV/UV_UDRSUB | Bin 0 -> 208896 bytes Ardent/UV/UV_UDRSYS | Bin 0 -> 4096 bytes Ardent/UV/VOC | Bin 0 -> 221696 bytes Ardent/UV/VOCLIB | Bin 0 -> 12288 bytes Ardent/UV/bin/DFmodify.exe | Bin 0 -> 16384 bytes Ardent/UV/bin/INfilter.exe | Bin 0 -> 7680 bytes Ardent/UV/bin/UVchange.exe | Bin 0 -> 7680 bytes Ardent/UV/bin/UVdelete.exe | Bin 0 -> 8192 bytes Ardent/UV/bin/UVfile.exe | Bin 0 -> 11776 bytes Ardent/UV/bin/UVread.exe | Bin 0 -> 9216 bytes Ardent/UV/bin/UVtlconvert.exe | Bin 0 -> 8704 bytes Ardent/UV/bin/UVwrite.exe | Bin 0 -> 8704 bytes Ardent/UV/bin/acct.restore.exe | Bin 0 -> 38912 bytes Ardent/UV/bin/analyze.shm.exe | Bin 0 -> 87552 bytes Ardent/UV/bin/avail.exe | Bin 0 -> 8704 bytes Ardent/UV/bin/basic.exe | Bin 0 -> 315392 bytes Ardent/UV/bin/blook.exe | Bin 0 -> 18432 bytes Ardent/UV/bin/catalog.exe | Bin 0 -> 13312 bytes Ardent/UV/bin/cdict.exe | Bin 0 -> 62464 bytes Ardent/UV/bin/claccount.exe | Bin 0 -> 16896 bytes Ardent/UV/bin/clean.exe | Bin 0 -> 8704 bytes Ardent/UV/bin/clear.file.exe | Bin 0 -> 11776 bytes Ardent/UV/bin/cname.exe | Bin 0 -> 27648 bytes Ardent/UV/bin/conf.file.exe | Bin 0 -> 11264 bytes Ardent/UV/bin/create.file.exe | Bin 0 -> 38912 bytes Ardent/UV/bin/cvtsqlcat.exe | Bin 0 -> 16896 bytes Ardent/UV/bin/decatalog.exe | Bin 0 -> 9216 bytes Ardent/UV/bin/decompile.exe | Bin 0 -> 57856 bytes Ardent/UV/bin/del.catalog.exe | Bin 0 -> 10240 bytes Ardent/UV/bin/delete.file.exe | Bin 0 -> 28160 bytes Ardent/UV/bin/disect.exe | Bin 0 -> 18432 bytes Ardent/UV/bin/dlist.exe | Bin 0 -> 11776 bytes Ardent/UV/bin/execmsg.dll | Bin 0 -> 7168 bytes Ardent/UV/bin/execsrv.exe | Bin 0 -> 13824 bytes Ardent/UV/bin/file.stat.exe | Bin 0 -> 25088 bytes Ardent/UV/bin/filepeek.exe | Bin 0 -> 33280 bytes Ardent/UV/bin/fix_ntusers.exe | Bin 0 -> 8192 bytes Ardent/UV/bin/fixtool.exe | Bin 0 -> 41472 bytes Ardent/UV/bin/fnuxi.exe | Bin 0 -> 35840 bytes Ardent/UV/bin/format.conv.exe | Bin 0 -> 35840 bytes Ardent/UV/bin/fpath.exe | Bin 0 -> 8704 bytes Ardent/UV/bin/fsac.exe | Bin 0 -> 9728 bytes Ardent/UV/bin/g.stat.det.exe | Bin 0 -> 16384 bytes Ardent/UV/bin/gci.dll | Bin 0 -> 8704 bytes Ardent/UV/bin/get_prog_size.exe | Bin 0 -> 9216 bytes Ardent/UV/bin/get_shm_size.exe | Bin 0 -> 7168 bytes Ardent/UV/bin/group.stat.exe | Bin 0 -> 16384 bytes Ardent/UV/bin/h.help.det.exe | Bin 0 -> 20480 bytes Ardent/UV/bin/h.test.det.exe | Bin 0 -> 17408 bytes Ardent/UV/bin/hash.aid.exe | Bin 0 -> 20992 bytes Ardent/UV/bin/hash.help.exe | Bin 0 -> 22016 bytes Ardent/UV/bin/hash.test.exe | Bin 0 -> 20992 bytes Ardent/UV/bin/help.exe | Bin 0 -> 9728 bytes Ardent/UV/bin/hostname.exe | Bin 0 -> 7680 bytes Ardent/UV/bin/init.catalog.exe | Bin 0 -> 10752 bytes Ardent/UV/bin/kill.exe | Bin 0 -> 7680 bytes Ardent/UV/bin/list_readu.exe | Bin 0 -> 31232 bytes Ardent/UV/bin/ln.exe | Bin 0 -> 8704 bytes Ardent/UV/bin/load_NLS_shm.exe | Bin 0 -> 20480 bytes Ardent/UV/bin/load_shm_cat.exe | Bin 0 -> 13824 bytes Ardent/UV/bin/loadfile.exe | Bin 0 -> 15872 bytes Ardent/UV/bin/log_main.exe | Bin 0 -> 8704 bytes Ardent/UV/bin/magrst.exe | Bin 0 -> 35840 bytes Ardent/UV/bin/make.map.exe | Bin 0 -> 11264 bytes Ardent/UV/bin/map.exe | Bin 0 -> 10240 bytes Ardent/UV/bin/master.exe | Bin 0 -> 9216 bytes Ardent/UV/bin/message.exe | Bin 0 -> 10240 bytes Ardent/UV/bin/mkaccount.exe | Bin 0 -> 7680 bytes Ardent/UV/bin/mkdbfile.exe | Bin 0 -> 9728 bytes Ardent/UV/bin/mkload.exe | Bin 0 -> 11264 bytes Ardent/UV/bin/mkschema.exe | Bin 0 -> 12800 bytes Ardent/UV/bin/mksecure.exe | Bin 0 -> 7680 bytes Ardent/UV/bin/mksqlassoc.exe | Bin 0 -> 14848 bytes Ardent/UV/bin/mksqlcol.exe | Bin 0 -> 18944 bytes Ardent/UV/bin/mksqlcon.exe | Bin 0 -> 8704 bytes Ardent/UV/bin/mksqlfile.exe | Bin 0 -> 10752 bytes Ardent/UV/bin/mksqlprm.exe | Bin 0 -> 8704 bytes Ardent/UV/bin/mksqlrefer.exe | Bin 0 -> 11264 bytes Ardent/UV/bin/mksqluniq.exe | Bin 0 -> 8704 bytes Ardent/UV/bin/modify_shm.exe | Bin 0 -> 12288 bytes Ardent/UV/bin/mv.exe | Bin 0 -> 8704 bytes Ardent/UV/bin/nbasic.exe | Bin 0 -> 315392 bytes Ardent/UV/bin/plock_init.exe | Bin 0 -> 7680 bytes Ardent/UV/bin/plock_set.exe | Bin 0 -> 7680 bytes Ardent/UV/bin/port_sql.exe | Bin 0 -> 7680 bytes Ardent/UV/bin/portuv.exe | Bin 0 -> 8704 bytes Ardent/UV/bin/pqic.exe | Bin 0 -> 7680 bytes Ardent/UV/bin/prime.exe | Bin 0 -> 7680 bytes Ardent/UV/bin/printacct.exe | Bin 0 -> 7680 bytes Ardent/UV/bin/pwd.exe | Bin 0 -> 7680 bytes Ardent/UV/bin/radix.exe | Bin 0 -> 13312 bytes Ardent/UV/bin/record.exe | Bin 0 -> 9216 bytes Ardent/UV/bin/resize.exe | Bin 0 -> 28672 bytes Ardent/UV/bin/rm.exe | Bin 0 -> 9728 bytes Ardent/UV/bin/rmv.lbl.exe | Bin 0 -> 10752 bytes Ardent/UV/bin/sdml.exe | Bin 0 -> 284672 bytes Ardent/UV/bin/setfile.exe | Bin 0 -> 9728 bytes Ardent/UV/bin/show_sica.exe | Bin 0 -> 31232 bytes Ardent/UV/bin/shrdump.exe | Bin 0 -> 7168 bytes Ardent/UV/bin/smat.exe | Bin 0 -> 87552 bytes Ardent/UV/bin/sp.edit.exe | Bin 0 -> 14848 bytes Ardent/UV/bin/spool.exe | Bin 0 -> 19968 bytes Ardent/UV/bin/sqlcat9.exe | Bin 0 -> 12800 bytes Ardent/UV/bin/status.exe | Bin 0 -> 9216 bytes Ardent/UV/bin/tapein.exe | Bin 0 -> 18432 bytes Ardent/UV/bin/tapetest.exe | Bin 0 -> 15360 bytes Ardent/UV/bin/tiindex.exe | Bin 0 -> 9216 bytes Ardent/UV/bin/tl_server.exe | Bin 0 -> 39424 bytes Ardent/UV/bin/tl_service.exe | Bin 0 -> 11264 bytes Ardent/UV/bin/touch.exe | Bin 0 -> 8192 bytes Ardent/UV/bin/udtconv.exe | Bin 0 -> 19456 bytes Ardent/UV/bin/universe.dll | Bin 0 -> 2539008 bytes Ardent/UV/bin/updaccount.exe | Bin 0 -> 13312 bytes Ardent/UV/bin/upduvtrans.exe | Bin 0 -> 8704 bytes Ardent/UV/bin/uv.exe | Bin 0 -> 18432 bytes Ardent/UV/bin/uvapi_server.exe | Bin 0 -> 18432 bytes Ardent/UV/bin/uvapi_slave.exe | Bin 0 -> 65024 bytes Ardent/UV/bin/uvbackup.exe | Bin 0 -> 105984 bytes Ardent/UV/bin/uvbootd.exe | Bin 0 -> 8704 bytes Ardent/UV/bin/uvchkd.exe | Bin 0 -> 19456 bytes Ardent/UV/bin/uvdlockd.exe | Bin 0 -> 30208 bytes Ardent/UV/bin/uvdrlogd.exe | Bin 0 -> 16384 bytes Ardent/UV/bin/uvdrlogpeek.exe | Bin 0 -> 17408 bytes Ardent/UV/bin/uvdrrepd.exe | Bin 0 -> 13312 bytes Ardent/UV/bin/uvdrsrvd.exe | Bin 0 -> 51712 bytes Ardent/UV/bin/uvdrupdd.exe | Bin 0 -> 35328 bytes Ardent/UV/bin/uvfilefix_server.exe | Bin 0 -> 48128 bytes Ardent/UV/bin/uvfixfile.exe | Bin 0 -> 68096 bytes Ardent/UV/bin/uvlictool.exe | Bin 0 -> 14848 bytes Ardent/UV/bin/uvlogd.exe | Bin 0 -> 20992 bytes Ardent/UV/bin/uvmt.exe | Bin 0 -> 10752 bytes Ardent/UV/bin/uvnetd.exe | Bin 0 -> 70656 bytes Ardent/UV/bin/uvoinst.bat | 95 + Ardent/UV/bin/uvosrv.exe | Bin 0 -> 1264640 bytes Ardent/UV/bin/uvregen.exe | Bin 0 -> 45568 bytes Ardent/UV/bin/uvrestore.exe | Bin 0 -> 105984 bytes Ardent/UV/bin/uvrolf.exe | Bin 0 -> 31744 bytes Ardent/UV/bin/uvservice.exe | Bin 0 -> 9216 bytes Ardent/UV/bin/uvsh.exe | Bin 0 -> 18432 bytes Ardent/UV/bin/uvsql.exe | Bin 0 -> 389120 bytes Ardent/UV/bin/uvsrvd.exe | Bin 0 -> 37888 bytes Ardent/UV/bin/uvtic.exe | Bin 0 -> 31232 bytes Ardent/UV/bin/uvtidc.exe | Bin 0 -> 23552 bytes Ardent/UV/bin/uvuninst.exe | Bin 0 -> 25600 bytes Ardent/UV/bin/uvutil.dll | Bin 0 -> 29184 bytes Ardent/UV/bin/uvwalk.exe | Bin 0 -> 12800 bytes Ardent/UV/bin/vcatalog.exe | Bin 0 -> 10752 bytes Ardent/UV/bin/verify.exe | Bin 0 -> 10240 bytes Ardent/UV/bin/vlist.exe | Bin 0 -> 20992 bytes Ardent/UV/bin/vsum.exe | Bin 0 -> 7680 bytes Ardent/UV/bin/vvoc.exe | Bin 0 -> 11264 bytes Ardent/UV/bin/xref.exe | Bin 0 -> 10240 bytes Ardent/UV/capture00091aa | 0 Ardent/UV/capture00251aa | 10 + Ardent/UV/catdir/!ADDS | Bin 0 -> 137 bytes Ardent/UV/catdir/!AMLC | Bin 0 -> 1891 bytes Ardent/UV/catdir/!ANDS | Bin 0 -> 137 bytes Ardent/UV/catdir/!ASYNC | Bin 0 -> 1891 bytes Ardent/UV/catdir/!BINARY.CONVERT | Bin 0 -> 3139 bytes Ardent/UV/catdir/!BPIOCP | Bin 0 -> 175 bytes Ardent/UV/catdir/!CATS | Bin 0 -> 137 bytes Ardent/UV/catdir/!CHARS | Bin 0 -> 135 bytes Ardent/UV/catdir/!CHECK.TYPE1.ID | Bin 0 -> 576 bytes Ardent/UV/catdir/!CLEAR.PROMPTS | Bin 0 -> 131 bytes Ardent/UV/catdir/!COMO | Bin 0 -> 905 bytes Ardent/UV/catdir/!COUNTS | Bin 0 -> 137 bytes Ardent/UV/catdir/!DISLEN | Bin 0 -> 146 bytes Ardent/UV/catdir/!DIVH | Bin 0 -> 365 bytes Ardent/UV/catdir/!DIVS | Bin 0 -> 137 bytes Ardent/UV/catdir/!EDIT.INPUT | Bin 0 -> 149 bytes Ardent/UV/catdir/!EQS | Bin 0 -> 137 bytes Ardent/UV/catdir/!ERRNO | Bin 0 -> 147 bytes Ardent/UV/catdir/!EXIST | Bin 0 -> 228 bytes Ardent/UV/catdir/!FADD | Bin 0 -> 137 bytes Ardent/UV/catdir/!FCMP | Bin 0 -> 216 bytes Ardent/UV/catdir/!FDIV | Bin 0 -> 137 bytes Ardent/UV/catdir/!FIELDS | Bin 0 -> 141 bytes Ardent/UV/catdir/!FMTS | Bin 0 -> 137 bytes Ardent/UV/catdir/!FMUL | Bin 0 -> 137 bytes Ardent/UV/catdir/!FOLD | Bin 0 -> 137 bytes Ardent/UV/catdir/!FSUB | Bin 0 -> 137 bytes Ardent/UV/catdir/!GES | Bin 0 -> 137 bytes Ardent/UV/catdir/!GET.DEVICES | Bin 0 -> 194 bytes Ardent/UV/catdir/!GET.KEY | Bin 0 -> 135 bytes Ardent/UV/catdir/!GET.OSNAME | Bin 0 -> 152 bytes Ardent/UV/catdir/!GET.PARTNUM | Bin 0 -> 537 bytes Ardent/UV/catdir/!GET.PATHNAME | Bin 0 -> 309 bytes Ardent/UV/catdir/!GET.USER.COUNTS | Bin 0 -> 173 bytes Ardent/UV/catdir/!GETPU | Bin 0 -> 465 bytes Ardent/UV/catdir/!GTS | Bin 0 -> 137 bytes Ardent/UV/catdir/!HUSHIT | Bin 0 -> 246 bytes Ardent/UV/catdir/!ICONVS | Bin 0 -> 137 bytes Ardent/UV/catdir/!IFS | Bin 0 -> 139 bytes Ardent/UV/catdir/!INDEXS | Bin 0 -> 139 bytes Ardent/UV/catdir/!INLINE.PROMPTS | Bin 0 -> 135 bytes Ardent/UV/catdir/!INTS | Bin 0 -> 373 bytes Ardent/UV/catdir/!LENS | Bin 0 -> 135 bytes Ardent/UV/catdir/!LES | Bin 0 -> 137 bytes Ardent/UV/catdir/!LTS | Bin 0 -> 137 bytes Ardent/UV/catdir/!MAKE.PATHNAME | Bin 0 -> 611 bytes Ardent/UV/catdir/!MATCHES | Bin 0 -> 473 bytes Ardent/UV/catdir/!MAXIMUM | Bin 0 -> 135 bytes Ardent/UV/catdir/!MESSAGE | Bin 0 -> 2729 bytes Ardent/UV/catdir/!MINIMUM | Bin 0 -> 135 bytes Ardent/UV/catdir/!MODS | Bin 0 -> 137 bytes Ardent/UV/catdir/!MULS | Bin 0 -> 137 bytes Ardent/UV/catdir/!NES | Bin 0 -> 137 bytes Ardent/UV/catdir/!NOTS | Bin 0 -> 135 bytes Ardent/UV/catdir/!NUMS | Bin 0 -> 135 bytes Ardent/UV/catdir/!OCONVS | Bin 0 -> 137 bytes Ardent/UV/catdir/!ORS | Bin 0 -> 137 bytes Ardent/UV/catdir/!PACK.FNKEYS | Bin 0 -> 135 bytes Ardent/UV/catdir/!PTERM | Bin 0 -> 1501 bytes Ardent/UV/catdir/!REPORT.ERROR | Bin 0 -> 445 bytes Ardent/UV/catdir/!RND | Bin 0 -> 133 bytes Ardent/UV/catdir/!SEQS | Bin 0 -> 135 bytes Ardent/UV/catdir/!SET.PTR | Bin 0 -> 3498 bytes Ardent/UV/catdir/!SETPU | Bin 0 -> 501 bytes Ardent/UV/catdir/!SLEEP | Bin 0 -> 189 bytes Ardent/UV/catdir/!SLEEP$ | Bin 0 -> 189 bytes Ardent/UV/catdir/!SPACES | Bin 0 -> 135 bytes Ardent/UV/catdir/!SPLICE | Bin 0 -> 139 bytes Ardent/UV/catdir/!SQUOTE | Bin 0 -> 135 bytes Ardent/UV/catdir/!STRS | Bin 0 -> 137 bytes Ardent/UV/catdir/!SUBS | Bin 0 -> 137 bytes Ardent/UV/catdir/!SUBSTRINGS | Bin 0 -> 139 bytes Ardent/UV/catdir/!SUMMATION | Bin 0 -> 135 bytes Ardent/UV/catdir/!TIMDAT | Bin 0 -> 2218 bytes Ardent/UV/catdir/!USER.TYPE | Bin 0 -> 293 bytes Ardent/UV/catdir/!VOC.PATHNAME | Bin 0 -> 1091 bytes Ardent/UV/catdir/$0114 | Bin 0 -> 1142 bytes Ardent/UV/catdir/$0190 | Bin 0 -> 901 bytes Ardent/UV/catdir/$0192 | Bin 0 -> 2094 bytes Ardent/UV/catdir/$0196 | Bin 0 -> 216 bytes Ardent/UV/catdir/$01A2 | Bin 0 -> 313 bytes Ardent/UV/catdir/$01A6 | Bin 0 -> 1603 bytes Ardent/UV/catdir/$01AD | Bin 0 -> 1221 bytes Ardent/UV/catdir/$01B0 | Bin 0 -> 998 bytes Ardent/UV/catdir/$01BE | Bin 0 -> 221 bytes Ardent/UV/catdir/$0230 | Bin 0 -> 416 bytes Ardent/UV/catdir/$0358 | Bin 0 -> 1532 bytes Ardent/UV/catdir/$035A | Bin 0 -> 2100 bytes Ardent/UV/catdir/$1114 | Bin 0 -> 666 bytes Ardent/UV/catdir/$11A2 | Bin 0 -> 618 bytes Ardent/UV/catdir/$11B0 | Bin 0 -> 1039 bytes Ardent/UV/catdir/$11BE | Bin 0 -> 226 bytes Ardent/UV/catdir/$11ED | Bin 0 -> 1341 bytes Ardent/UV/catdir/$201E | Bin 0 -> 343 bytes Ardent/UV/catdir/$20E0 | Bin 0 -> 151 bytes Ardent/UV/catdir/$2193 | Bin 0 -> 208 bytes Ardent/UV/catdir/$2196 | Bin 0 -> 529 bytes Ardent/UV/catdir/$21A2 | Bin 0 -> 388 bytes Ardent/UV/catdir/$307A | Bin 0 -> 314 bytes Ardent/UV/catdir/$30E0 | Bin 0 -> 153 bytes Ardent/UV/catdir/$31AD | Bin 0 -> 617 bytes Ardent/UV/catdir/$31B0 | Bin 0 -> 1056 bytes Ardent/UV/catdir/$407A | Bin 0 -> 159 bytes Ardent/UV/catdir/$41AD | Bin 0 -> 222 bytes Ardent/UV/catdir/$508E | Bin 0 -> 671 bytes Ardent/UV/catdir/$50BB | Bin 0 -> 172 bytes Ardent/UV/catdir/$5114 | Bin 0 -> 1622 bytes Ardent/UV/catdir/$534E | Bin 0 -> 811 bytes Ardent/UV/catdir/$6072 | Bin 0 -> 228 bytes Ardent/UV/catdir/$60BB | Bin 0 -> 151 bytes Ardent/UV/catdir/$60E0 | Bin 0 -> 153 bytes Ardent/UV/catdir/$61A2 | Bin 0 -> 143 bytes Ardent/UV/catdir/$70E0 | Bin 0 -> 164 bytes Ardent/UV/catdir/$7201 | Bin 0 -> 153 bytes Ardent/UV/catdir/$80E0 | Bin 0 -> 159 bytes Ardent/UV/catdir/$81F5 | Bin 0 -> 166 bytes Ardent/UV/catdir/$9072 | Bin 0 -> 228 bytes Ardent/UV/catdir/$A1A2 | Bin 0 -> 169 bytes Ardent/UV/catdir/$BPIOTT | Bin 0 -> 129 bytes Ardent/UV/catdir/$INDIRECT | Bin 0 -> 410 bytes Ardent/UV/catdir/$STKMATH | Bin 0 -> 1876 bytes Ardent/UV/catdir/%AASCII.EXPORT | Bin 0 -> 1467 bytes Ardent/UV/catdir/%ACHOICE.BOX.B | Bin 0 -> 8694 bytes Ardent/UV/catdir/%ACINPUT.B | Bin 0 -> 6195 bytes Ardent/UV/catdir/%ACLOSE$UV$FILE | Bin 0 -> 427 bytes Ardent/UV/catdir/%ACOMPMAINT.SUB | Bin 0 -> 3234 bytes Ardent/UV/catdir/%ACONVERT.VOC | Bin 0 -> 16792 bytes Ardent/UV/catdir/%ADC | Bin 0 -> 6170 bytes Ardent/UV/catdir/%ADC.A | Bin 0 -> 5202 bytes Ardent/UV/catdir/%ADC.CORR.CONV | Bin 0 -> 11692 bytes Ardent/UV/catdir/%ADC.F | Bin 0 -> 2975 bytes Ardent/UV/catdir/%ADC.ITEM | Bin 0 -> 1776 bytes Ardent/UV/catdir/%ADC.ITEM4 | Bin 0 -> 3096 bytes Ardent/UV/catdir/%ADC.MESSAGE | Bin 0 -> 1235 bytes Ardent/UV/catdir/%ADC.OPENS | Bin 0 -> 2827 bytes Ardent/UV/catdir/%ADC4 | Bin 0 -> 6137 bytes Ardent/UV/catdir/%ADEF.MNU.B | Bin 0 -> 313 bytes Ardent/UV/catdir/%ADEF.SUB.B | Bin 0 -> 385 bytes Ardent/UV/catdir/%ADEFINE.DF | Bin 0 -> 16266 bytes Ardent/UV/catdir/%ADISP.SP.OPTS | Bin 0 -> 3905 bytes Ardent/UV/catdir/%ADO.MNU.BAR.B | Bin 0 -> 6784 bytes Ardent/UV/catdir/%ADRAW.BOX.B | Bin 0 -> 1920 bytes Ardent/UV/catdir/%ADRAW.SCRN.B | Bin 0 -> 2480 bytes Ardent/UV/catdir/%AENTER.BOX.B | Bin 0 -> 707 bytes Ardent/UV/catdir/%AERROR.BOX.B | Bin 0 -> 475 bytes Ardent/UV/catdir/%AGET | Bin 0 -> 4321 bytes Ardent/UV/catdir/%AGET.BASENAME | Bin 0 -> 1917 bytes Ardent/UV/catdir/%AGET.DIRNAME | Bin 0 -> 1928 bytes Ardent/UV/catdir/%AGET.PGMS | Bin 0 -> 6785 bytes Ardent/UV/catdir/%AGET.TA.BUF.B | Bin 0 -> 635 bytes Ardent/UV/catdir/%AGET.TOKEN.B | Bin 0 -> 904 bytes Ardent/UV/catdir/%AHELP.BOX.B | Bin 0 -> 395 bytes Ardent/UV/catdir/%AHELP.PRINT.B | Bin 0 -> 2241 bytes Ardent/UV/catdir/%AHS.ACTIVATE | Bin 0 -> 11550 bytes Ardent/UV/catdir/%AHS.AUTHORIZE | Bin 0 -> 265 bytes Ardent/UV/catdir/%AHS.CASE | Bin 0 -> 1002 bytes Ardent/UV/catdir/%AHS.DEACTIVATE | Bin 0 -> 6096 bytes Ardent/UV/catdir/%AHS.DISCNT | Bin 0 -> 679 bytes Ardent/UV/catdir/%AHS.FILEINFO | Bin 0 -> 16271 bytes Ardent/UV/catdir/%AHS.FINDIT | Bin 0 -> 3053 bytes Ardent/UV/catdir/%AHS.OLEDBACCTS | Bin 0 -> 485 bytes Ardent/UV/catdir/%AHS.OLEDBCOLS | Bin 0 -> 464 bytes Ardent/UV/catdir/%AHS.OLEDBINFO | Bin 0 -> 22989 bytes Ardent/UV/catdir/%AHS.OLEDBKEYS | Bin 0 -> 470 bytes Ardent/UV/catdir/%AHS.OLEDBTABS | Bin 0 -> 518 bytes Ardent/UV/catdir/%AHS.RUNINACC | Bin 0 -> 1007 bytes Ardent/UV/catdir/%AHS.SCHEMA | Bin 0 -> 239 bytes Ardent/UV/catdir/%AHS.SCRUB | Bin 0 -> 59940 bytes Ardent/UV/catdir/%AHS.SCRUBINTER | Bin 0 -> 691 bytes Ardent/UV/catdir/%AHS.SHOWCFG | Bin 0 -> 4700 bytes Ardent/UV/catdir/%AHS.SPCOLS | Bin 0 -> 12172 bytes Ardent/UV/catdir/%AHS.STAREXPAND | Bin 0 -> 1610 bytes Ardent/UV/catdir/%AHS.STAT | Bin 0 -> 8317 bytes Ardent/UV/catdir/%AHS.TEXTIFY | Bin 0 -> 556 bytes Ardent/UV/catdir/%AHS.UPDFINFO | Bin 0 -> 543 bytes Ardent/UV/catdir/%AHS.UPDUVACC | Bin 0 -> 3661 bytes Ardent/UV/catdir/%AINVERSE.B | Bin 0 -> 1700 bytes Ardent/UV/catdir/%AIS.EQPATHS | Bin 0 -> 1920 bytes Ardent/UV/catdir/%AIS.FULLPATH | Bin 0 -> 2037 bytes Ardent/UV/catdir/%AISUSER.B | Bin 0 -> 191 bytes Ardent/UV/catdir/%ALIST.BOX.B | Bin 0 -> 182 bytes Ardent/UV/catdir/%ALISTFILES | Bin 0 -> 3909 bytes Ardent/UV/catdir/%ALOC.BY.FLD.B | Bin 0 -> 269 bytes Ardent/UV/catdir/%AMNU.BAR.PR.B | Bin 0 -> 470 bytes Ardent/UV/catdir/%AMTF.ERASE.B | Bin 0 -> 1711 bytes Ardent/UV/catdir/%AMTF.FIXSCR.B | Bin 0 -> 2357 bytes Ardent/UV/catdir/%AMTF.INPUT.B | Bin 0 -> 4179 bytes Ardent/UV/catdir/%AMTF.LOAD.B | Bin 0 -> 5055 bytes Ardent/UV/catdir/%AMTF.MENU.B | Bin 0 -> 5617 bytes Ardent/UV/catdir/%AMTF.PAINT.B | Bin 0 -> 1788 bytes Ardent/UV/catdir/%AMTF.REDRAW.B | Bin 0 -> 2342 bytes Ardent/UV/catdir/%AMTF.SUB.B | Bin 0 -> 3253 bytes Ardent/UV/catdir/%ANLS.LISTLCS | Bin 0 -> 618 bytes Ardent/UV/catdir/%ANLS.LISTMAPS | Bin 0 -> 646 bytes Ardent/UV/catdir/%AOPEN$UV$FILE | Bin 0 -> 1113 bytes Ardent/UV/catdir/%APACT | Bin 0 -> 17898 bytes Ardent/UV/catdir/%APARSE.PERM.B | Bin 0 -> 1252 bytes Ardent/UV/catdir/%APRECOMP.SUB | Bin 0 -> 4039 bytes Ardent/UV/catdir/%APTBCODE | Bin 0 -> 2122 bytes Ardent/UV/catdir/%APUT.FORM.B | Bin 0 -> 562 bytes Ardent/UV/catdir/%ARD.UNX.FIL.B | Bin 0 -> 228 bytes Ardent/UV/catdir/%ARELEASE$UV$FILE | Bin 0 -> 462 bytes Ardent/UV/catdir/%AREMOTE.B | Bin 0 -> 3992 bytes Ardent/UV/catdir/%AREVISE.ASSOC | Bin 0 -> 5160 bytes Ardent/UV/catdir/%AREVISE.PHRASE | Bin 0 -> 775 bytes Ardent/UV/catdir/%ASETDIR.B | Bin 0 -> 562 bytes Ardent/UV/catdir/%ASORT.BOX.B | Bin 0 -> 9010 bytes Ardent/UV/catdir/%ATOKEN.SORT.B | Bin 0 -> 409 bytes Ardent/UV/catdir/%AUV%AAAC.PARTNER.GIVING | Bin 0 -> 6275 bytes Ardent/UV/catdir/%AUV%AABCD | Bin 0 -> 1164 bytes Ardent/UV/catdir/%AUV%AABCDE | Bin 0 -> 1224 bytes Ardent/UV/catdir/%AUV%AACCOUNT.INFO | Bin 0 -> 1424 bytes Ardent/UV/catdir/%AUV%AACCT.SETUP | Bin 0 -> 9738 bytes Ardent/UV/catdir/%AUV%AACTIVITY.DETAIL | Bin 0 -> 190 bytes Ardent/UV/catdir/%AUV%AACTIVITY.DETAIL.MAINT | Bin 0 -> 4545 bytes Ardent/UV/catdir/%AUV%AACTIVITY.MASTER | Bin 0 -> 190 bytes Ardent/UV/catdir/%AUV%AACTIVITY.MASTER.MAINT | Bin 0 -> 10650 bytes Ardent/UV/catdir/%AUV%AADC | Bin 0 -> 178 bytes Ardent/UV/catdir/%AUV%AADC.MAINT | Bin 0 -> 4226 bytes Ardent/UV/catdir/%AUV%AADDRESS.VERIFY.MAINT | Bin 0 -> 5873 bytes Ardent/UV/catdir/%AUV%AAFA.PICKING.PRINT | Bin 0 -> 13252 bytes Ardent/UV/catdir/%AUV%AAGENCY.MAINT | Bin 0 -> 5323 bytes Ardent/UV/catdir/%AUV%AAGENCY.TABLE | Bin 0 -> 187 bytes Ardent/UV/catdir/%AUV%AAL.PM.FLATFILE | Bin 0 -> 10425 bytes Ardent/UV/catdir/%AUV%AAL.RPT | Bin 0 -> 3886 bytes Ardent/UV/catdir/%AUV%AAL.TRANS.FLATFILE | Bin 0 -> 5190 bytes Ardent/UV/catdir/%AUV%AAL.WEST.INTERFACE | Bin 0 -> 11916 bytes Ardent/UV/catdir/%AUV%AALC.PICKING.PRINT | Bin 0 -> 13032 bytes Ardent/UV/catdir/%AUV%AALLOW.LETTER.MAINT | Bin 0 -> 626 bytes Ardent/UV/catdir/%AUV%AALPHA.PACK.FIX | Bin 0 -> 1533 bytes Ardent/UV/catdir/%AUV%AANALYZE | Bin 0 -> 2623 bytes Ardent/UV/catdir/%AUV%AANALYZE.STRUCTURE | Bin 0 -> 2237 bytes Ardent/UV/catdir/%AUV%AARF.PRINT.REPORT | Bin 0 -> 4490 bytes Ardent/UV/catdir/%AUV%AASCII | Bin 0 -> 1173 bytes Ardent/UV/catdir/%AUV%AASSEMBLED.PACKET.BUILD | Bin 0 -> 3192 bytes Ardent/UV/catdir/%AUV%AASSEMBLED.PACKET.RPT | Bin 0 -> 3729 bytes Ardent/UV/catdir/%AUV%AATS.EXEC.TRANS.TV | Bin 0 -> 7145 bytes Ardent/UV/catdir/%AUV%AAUDIT.BATCH | Bin 0 -> 2877 bytes Ardent/UV/catdir/%AUV%AAUTHOR.FILE | Bin 0 -> 186 bytes Ardent/UV/catdir/%AUV%AAUTOCALC.71.TEST | Bin 0 -> 3195 bytes Ardent/UV/catdir/%AUV%ABA | Bin 0 -> 177 bytes Ardent/UV/catdir/%AUV%ABA.AUTO.CLEAN.UP | Bin 0 -> 2625 bytes Ardent/UV/catdir/%AUV%ABA.TRANS.FIX | Bin 0 -> 6620 bytes Ardent/UV/catdir/%AUV%ABACK.ORDER.RPT | Bin 0 -> 4922 bytes Ardent/UV/catdir/%AUV%ABACKORDER.AUDIT | Bin 0 -> 3557 bytes Ardent/UV/catdir/%AUV%ABACKUP.COPY.AUTOCALC | Bin 0 -> 12859 bytes Ardent/UV/catdir/%AUV%ABAFIX1 | Bin 0 -> 1466 bytes Ardent/UV/catdir/%AUV%ABAFIX2 | Bin 0 -> 1637 bytes Ardent/UV/catdir/%AUV%ABALDUE.FLAT.BUILD | Bin 0 -> 5342 bytes Ardent/UV/catdir/%AUV%ABANNER.PAGE | Bin 0 -> 2472 bytes Ardent/UV/catdir/%AUV%ABAT220 | Bin 0 -> 2657 bytes Ardent/UV/catdir/%AUV%ABATCH.ACTIVITY.DETAIL | Bin 0 -> 7505 bytes Ardent/UV/catdir/%AUV%ABATCH.TYPES.UPDATE | Bin 0 -> 3438 bytes Ardent/UV/catdir/%AUV%ABATCH.XREF | Bin 0 -> 185 bytes Ardent/UV/catdir/%AUV%ABG.SQ.SPLT | Bin 0 -> 753 bytes Ardent/UV/catdir/%AUV%ABHM.PICKING.FLAT.BUILD | Bin 0 -> 12251 bytes Ardent/UV/catdir/%AUV%ABHM.PICKING.PRINT.OLD | Bin 0 -> 13267 bytes Ardent/UV/catdir/%AUV%ABHM.PO.BILL.RPT | Bin 0 -> 6706 bytes Ardent/UV/catdir/%AUV%ABILLING.LAYOUT | Bin 0 -> 189 bytes Ardent/UV/catdir/%AUV%ABOL.PICKING.PRINT | Bin 0 -> 12839 bytes Ardent/UV/catdir/%AUV%ABONUS.QUALIFY | Bin 0 -> 188 bytes Ardent/UV/catdir/%AUV%ABRAD.DONOR.SELECT | Bin 0 -> 5930 bytes Ardent/UV/catdir/%AUV%ABRAD.PICKING.PRINT | Bin 0 -> 12702 bytes Ardent/UV/catdir/%AUV%ABRAD.VIEW | Bin 0 -> 10088 bytes Ardent/UV/catdir/%AUV%ABUILD.BATCH.WAREHOUSE | Bin 0 -> 6078 bytes .../catdir/%AUV%ABUILD.BATCH.WAREHOUSE.042798 | Bin 0 -> 5747 bytes Ardent/UV/catdir/%AUV%ABUILD.DAILY.WAREHOUSE | Bin 0 -> 4653 bytes Ardent/UV/catdir/%AUV%ABYM.PICKING.PRINT | Bin 0 -> 9848 bytes .../UV/catdir/%AUV%ABYM.PICKING.PRINT.061198 | Bin 0 -> 9842 bytes Ardent/UV/catdir/%AUV%ABYM.PICKING.PRINT.WADE | Bin 0 -> 9756 bytes Ardent/UV/catdir/%AUV%ACALC.WEEKNUM | Bin 0 -> 476 bytes Ardent/UV/catdir/%AUV%ACALL.CC | Bin 0 -> 1135 bytes Ardent/UV/catdir/%AUV%ACALL.NAMESUB | Bin 0 -> 1419 bytes Ardent/UV/catdir/%AUV%ACALL.NOTES.MAINT | Bin 0 -> 1220 bytes Ardent/UV/catdir/%AUV%ACALL.TRACK.RPT | Bin 0 -> 7387 bytes Ardent/UV/catdir/%AUV%ACALLER | Bin 0 -> 1108 bytes Ardent/UV/catdir/%AUV%ACAMPAIGN.SUMMARY.RPT | Bin 0 -> 6293 bytes Ardent/UV/catdir/%AUV%ACAPTURE.PRAYER | Bin 0 -> 3518 bytes Ardent/UV/catdir/%AUV%ACARMAN.PICKING.PRINT | Bin 0 -> 12536 bytes .../catdir/%AUV%ACARMAN.PICKING.PRINT.110397 | Bin 0 -> 12691 bytes Ardent/UV/catdir/%AUV%ACARMAN.PIRCH.BRKDWN | Bin 0 -> 4873 bytes Ardent/UV/catdir/%AUV%ACC.TEST | Bin 0 -> 1194 bytes Ardent/UV/catdir/%AUV%ACCT | Bin 0 -> 178 bytes Ardent/UV/catdir/%AUV%ACCT.BUILD.FLATFILE | Bin 0 -> 7493 bytes Ardent/UV/catdir/%AUV%ACED | Bin 0 -> 70514 bytes Ardent/UV/catdir/%AUV%ACENTER | Bin 0 -> 676 bytes Ardent/UV/catdir/%AUV%ACENTER.TEST | Bin 0 -> 1339 bytes Ardent/UV/catdir/%AUV%ACFC.TRANS | Bin 0 -> 4967 bytes Ardent/UV/catdir/%AUV%ACHANGE.PM.TEMP.DMA | Bin 0 -> 2397 bytes Ardent/UV/catdir/%AUV%ACHANNEL.MAINT | Bin 0 -> 3958 bytes Ardent/UV/catdir/%AUV%ACHAR.MAP | Bin 0 -> 323 bytes Ardent/UV/catdir/%AUV%ACHECK.BP | Bin 0 -> 3874 bytes Ardent/UV/catdir/%AUV%ACHECK.LOCK | Bin 0 -> 883 bytes Ardent/UV/catdir/%AUV%ACHECK.MENU | Bin 0 -> 599 bytes Ardent/UV/catdir/%AUV%ACHECK.PL | Bin 0 -> 2546 bytes Ardent/UV/catdir/%AUV%ACHNL | Bin 0 -> 179 bytes Ardent/UV/catdir/%AUV%ACITYSUB | Bin 0 -> 4539 bytes Ardent/UV/catdir/%AUV%ACLEAN.PLG | Bin 0 -> 1355 bytes Ardent/UV/catdir/%AUV%ACLEAN.UP.FILES2 | Bin 0 -> 1733 bytes .../UV/catdir/%AUV%ACLEAN.UP.FILES2.2.17.97 | Bin 0 -> 1741 bytes Ardent/UV/catdir/%AUV%ACLEAR.STACKERS | Bin 0 -> 792 bytes Ardent/UV/catdir/%AUV%ACLEO.WRAP | Bin 0 -> 1243 bytes Ardent/UV/catdir/%AUV%ACLIENT.POSTAGE | Bin 0 -> 189 bytes Ardent/UV/catdir/%AUV%ACLIENT.POSTAGE.LOG | Bin 0 -> 193 bytes Ardent/UV/catdir/%AUV%ACLOCK | Bin 0 -> 17492 bytes Ardent/UV/catdir/%AUV%ACLOCK.BIRTHDATE | Bin 0 -> 3738 bytes Ardent/UV/catdir/%AUV%ACLOSE.DOS.CAPTURE.FILE | Bin 0 -> 339 bytes Ardent/UV/catdir/%AUV%ACM | Bin 0 -> 177 bytes Ardent/UV/catdir/%AUV%ACMS.CLR.DRVR | Bin 0 -> 422 bytes Ardent/UV/catdir/%AUV%ACMS.CLR.DRVR.RV | Bin 0 -> 493 bytes Ardent/UV/catdir/%AUV%ACMS.CONTRACT.ACTIVE | Bin 0 -> 492 bytes Ardent/UV/catdir/%AUV%ACMS.CONTRACT.RENEW.RPT | Bin 0 -> 6806 bytes Ardent/UV/catdir/%AUV%ACMS.DISP.TRANS.PLEDGES | Bin 0 -> 4753 bytes .../UV/catdir/%AUV%ACMS.DISP.TRANS.PRODUCTS | Bin 0 -> 5404 bytes Ardent/UV/catdir/%AUV%ACMS.DSP.DRVR | Bin 0 -> 1427 bytes Ardent/UV/catdir/%AUV%ACMS.DSP.DRVR.RV | Bin 0 -> 1479 bytes Ardent/UV/catdir/%AUV%ACMS.EVENT.6.SPREAD | Bin 0 -> 8423 bytes Ardent/UV/catdir/%AUV%ACMS.EVENT.RPT1 | Bin 0 -> 7847 bytes Ardent/UV/catdir/%AUV%ACMS.EVENT.RPT2 | Bin 0 -> 6638 bytes Ardent/UV/catdir/%AUV%ACMS.FUND.RPT1 | Bin 0 -> 7906 bytes Ardent/UV/catdir/%AUV%ACMS.FUND.RPT2 | Bin 0 -> 7963 bytes Ardent/UV/catdir/%AUV%ACMS.INPUT | Bin 0 -> 1954 bytes Ardent/UV/catdir/%AUV%ACMS.INV.INIT | Bin 0 -> 6355 bytes Ardent/UV/catdir/%AUV%ACMS.INV.INIT.OLD | Bin 0 -> 6054 bytes Ardent/UV/catdir/%AUV%ACMS.LOGON | Bin 0 -> 7177 bytes Ardent/UV/catdir/%AUV%ACMS.LOGTO | Bin 0 -> 10155 bytes Ardent/UV/catdir/%AUV%ACMS.LOGTO.020398 | Bin 0 -> 8278 bytes Ardent/UV/catdir/%AUV%ACMS.LOGTO.041599 | Bin 0 -> 8965 bytes Ardent/UV/catdir/%AUV%ACMS.LOGTO.051099 | Bin 0 -> 9320 bytes Ardent/UV/catdir/%AUV%ACMS.LOGTO.060598 | Bin 0 -> 8581 bytes Ardent/UV/catdir/%AUV%ACMS.LOGTO.WADE | Bin 0 -> 9318 bytes Ardent/UV/catdir/%AUV%ACMS.MARKET.ENTRY.INIT | Bin 0 -> 1015 bytes Ardent/UV/catdir/%AUV%ACMS.MARKET.ENTRY.R8 | Bin 0 -> 17033 bytes Ardent/UV/catdir/%AUV%ACMS.MARKET.LIST | Bin 0 -> 4197 bytes .../UV/catdir/%AUV%ACMS.MARKET.REPORT.111497 | Bin 0 -> 7966 bytes Ardent/UV/catdir/%AUV%ACMS.MARKET.STATION.RPT | Bin 0 -> 5926 bytes .../UV/catdir/%AUV%ACMS.MARKET.STATION.RPT3 | Bin 0 -> 5281 bytes Ardent/UV/catdir/%AUV%ACMS.MEDIA.ADJUSTMENT | Bin 0 -> 9513 bytes .../UV/catdir/%AUV%ACMS.MEDIA.AIRTIME.ACCRUE | Bin 0 -> 8240 bytes Ardent/UV/catdir/%AUV%ACMS.MEDIA.AP.MISC | Bin 0 -> 4044 bytes Ardent/UV/catdir/%AUV%ACMS.MEDIA.AUTO.RUSH | Bin 0 -> 3668 bytes Ardent/UV/catdir/%AUV%ACMS.MEDIA.CALL | Bin 0 -> 2884 bytes Ardent/UV/catdir/%AUV%ACMS.MEDIA.CASS.TEST | Bin 0 -> 2011 bytes Ardent/UV/catdir/%AUV%ACMS.MEDIA.CHANGE.CALL | Bin 0 -> 6927 bytes Ardent/UV/catdir/%AUV%ACMS.MEDIA.CHECK.EDIT | Bin 0 -> 4801 bytes .../UV/catdir/%AUV%ACMS.MEDIA.CHECK.REGISTER | Bin 0 -> 5685 bytes Ardent/UV/catdir/%AUV%ACMS.MEDIA.CMAIL.TEST | Bin 0 -> 2172 bytes Ardent/UV/catdir/%AUV%ACMS.MEDIA.CODE.ENTRY | Bin 0 -> 8696 bytes Ardent/UV/catdir/%AUV%ACMS.MEDIA.CREATE.FILES | Bin 0 -> 27877 bytes Ardent/UV/catdir/%AUV%ACMS.MEDIA.FIND.DMA | Bin 0 -> 2430 bytes Ardent/UV/catdir/%AUV%ACMS.MEDIA.INIT | Bin 0 -> 11272 bytes Ardent/UV/catdir/%AUV%ACMS.MEDIA.LOG | Bin 0 -> 9116 bytes Ardent/UV/catdir/%AUV%ACMS.MEDIA.LOG.PURGE | Bin 0 -> 2497 bytes .../UV/catdir/%AUV%ACMS.MEDIA.MONTHLY.BUILD | Bin 0 -> 13728 bytes .../%AUV%ACMS.MEDIA.MONTHLY.BUILD.101097 | Bin 0 -> 14348 bytes .../%AUV%ACMS.MEDIA.MONTHLY.BUILD.101697 | Bin 0 -> 14350 bytes .../%AUV%ACMS.MEDIA.MONTHLY.BUILD.103197 | Bin 0 -> 14368 bytes Ardent/UV/catdir/%AUV%ACMS.MEDIA.MULTI.MARKET | Bin 0 -> 5806 bytes Ardent/UV/catdir/%AUV%ACMS.MEDIA.MULTI.RPT | Bin 0 -> 5333 bytes Ardent/UV/catdir/%AUV%ACMS.MEDIA.OUTPUT.GROUP | Bin 0 -> 5384 bytes Ardent/UV/catdir/%AUV%ACMS.MEDIA.OUTPUT.RUSH | Bin 0 -> 7738 bytes .../UV/catdir/%AUV%ACMS.MEDIA.OUTPUT.WEEKLY | Bin 0 -> 18980 bytes Ardent/UV/catdir/%AUV%ACMS.MEDIA.POST.PAID | Bin 0 -> 5036 bytes .../UV/catdir/%AUV%ACMS.MEDIA.POSTAGE.UPDATE | Bin 0 -> 6829 bytes Ardent/UV/catdir/%AUV%ACMS.MEDIA.PRINT.CASS | Bin 0 -> 4269 bytes Ardent/UV/catdir/%AUV%ACMS.MEDIA.PRINT.CHECKS | Bin 0 -> 9086 bytes Ardent/UV/catdir/%AUV%ACMS.MEDIA.PRINT.CMAIL | Bin 0 -> 7237 bytes Ardent/UV/catdir/%AUV%ACMS.MEDIA.PRINT.REEL | Bin 0 -> 12141 bytes Ardent/UV/catdir/%AUV%ACMS.MEDIA.RELEASE.RPT | Bin 0 -> 7026 bytes Ardent/UV/catdir/%AUV%ACMS.MEDIA.RETURN.TAPES | Bin 0 -> 10036 bytes Ardent/UV/catdir/%AUV%ACMS.MEDIA.RUSH | Bin 0 -> 14225 bytes Ardent/UV/catdir/%AUV%ACMS.MEDIA.SCHEDULE.GEN | Bin 0 -> 5282 bytes .../UV/catdir/%AUV%ACMS.MEDIA.SETUP.ADDRESS | Bin 0 -> 3428 bytes Ardent/UV/catdir/%AUV%ACMS.MEDIA.SHARED.RPT | Bin 0 -> 7401 bytes Ardent/UV/catdir/%AUV%ACMS.MEDIA.STATE.XREF | Bin 0 -> 3282 bytes Ardent/UV/catdir/%AUV%ACMS.ONLINE.BACKOUT | Bin 0 -> 13598 bytes .../UV/catdir/%AUV%ACMS.ONLINE.BACKOUT.052799 | Bin 0 -> 13263 bytes .../UV/catdir/%AUV%ACMS.ONLINE.BACKOUT.060999 | Bin 0 -> 13511 bytes Ardent/UV/catdir/%AUV%ACMS.ONLINE.VIEW | Bin 0 -> 10305 bytes Ardent/UV/catdir/%AUV%ACMS.ONLINE.VIEW.060999 | Bin 0 -> 10320 bytes Ardent/UV/catdir/%AUV%ACMS.OUTPUT.CLOSE | Bin 0 -> 1604 bytes Ardent/UV/catdir/%AUV%ACMS.OUTPUT.CLOSE.ALL | Bin 0 -> 1096 bytes Ardent/UV/catdir/%AUV%ACMS.OUTPUT.CONTROL | Bin 0 -> 2631 bytes Ardent/UV/catdir/%AUV%ACMS.OUTPUT.OPEN | Bin 0 -> 1800 bytes Ardent/UV/catdir/%AUV%ACMS.OUTPUT.OPEN.ALL | Bin 0 -> 1212 bytes Ardent/UV/catdir/%AUV%ACMS.PREEMPT.RPT | Bin 0 -> 3570 bytes .../UV/catdir/%AUV%ACMS.PRINT.MEDIA.LOGS.NEW | Bin 0 -> 5510 bytes Ardent/UV/catdir/%AUV%ACMS.RESET.DAY | Bin 0 -> 2165 bytes Ardent/UV/catdir/%AUV%ACMS.RPT.GEN | Bin 0 -> 11191 bytes Ardent/UV/catdir/%AUV%ACMS.RPT.PRT | Bin 0 -> 8318 bytes Ardent/UV/catdir/%AUV%ACMS.SCHEDULE | Bin 0 -> 6871 bytes Ardent/UV/catdir/%AUV%ACMS.SEL.DRVR | Bin 0 -> 1719 bytes Ardent/UV/catdir/%AUV%ACMS.SEL.DRVR.RV | Bin 0 -> 1838 bytes Ardent/UV/catdir/%AUV%ACMS.SEL.GEN | Bin 0 -> 12344 bytes Ardent/UV/catdir/%AUV%ACMS.SEL.RUN | Bin 0 -> 6620 bytes Ardent/UV/catdir/%AUV%ACMS.STATION.ADDRESSES | Bin 0 -> 5498 bytes Ardent/UV/catdir/%AUV%ACMS.STATION.ADJUST | Bin 0 -> 13207 bytes Ardent/UV/catdir/%AUV%ACMS.STATION.CONTRACTS | Bin 0 -> 26070 bytes .../catdir/%AUV%ACMS.STATION.CONTRACTS.090397 | Bin 0 -> 25390 bytes Ardent/UV/catdir/%AUV%ACMS.STATION.ENTRY.INIT | Bin 0 -> 1001 bytes Ardent/UV/catdir/%AUV%ACMS.STATION.ENTRY.R8 | Bin 0 -> 30764 bytes Ardent/UV/catdir/%AUV%ACMS.STATION.HISTORY | Bin 0 -> 2992 bytes Ardent/UV/catdir/%AUV%ACMS.STATION.PROGRAMS | Bin 0 -> 22943 bytes Ardent/UV/catdir/%AUV%ACMS.STATION.REMARKS | Bin 0 -> 8235 bytes Ardent/UV/catdir/%AUV%ACMS.STATION.RUSH | Bin 0 -> 3743 bytes Ardent/UV/catdir/%AUV%ACMS.TV.INDEXES | Bin 0 -> 2113 bytes .../UV/catdir/%AUV%ACMSD.800.INT.ICM.MDSREG | Bin 0 -> 6022 bytes Ardent/UV/catdir/%AUV%ACMSD.800.INTERFACE | Bin 0 -> 6181 bytes Ardent/UV/catdir/%AUV%ACMSD.800.INTERFACE.ICM | Bin 0 -> 12917 bytes Ardent/UV/catdir/%AUV%ACMSD.800.INTERFACE.MEM | Bin 0 -> 6836 bytes Ardent/UV/catdir/%AUV%ACMSD.800.INTERFACE.RHM | Bin 0 -> 7016 bytes Ardent/UV/catdir/%AUV%ACMSD.ACTIVITY.BUS | Bin 0 -> 9076 bytes Ardent/UV/catdir/%AUV%ACMSD.ACTIVITY.CH | Bin 0 -> 9558 bytes Ardent/UV/catdir/%AUV%ACMSD.ACTIVITY.GR | Bin 0 -> 10365 bytes Ardent/UV/catdir/%AUV%ACMSD.ACTIVITY.PY | Bin 0 -> 9102 bytes Ardent/UV/catdir/%AUV%ACMSD.ACTIVITY.SUB | Bin 0 -> 1854 bytes Ardent/UV/catdir/%AUV%ACMSD.ACTIVITY.SUB2 | Bin 0 -> 19990 bytes .../UV/catdir/%AUV%ACMSD.ACTIVITY.SUB2.060799 | Bin 0 -> 19396 bytes Ardent/UV/catdir/%AUV%ACMSD.ACTIVITY.SUB2.NEW | Bin 0 -> 19994 bytes Ardent/UV/catdir/%AUV%ACMSD.ACTIVITY.US | Bin 0 -> 9564 bytes Ardent/UV/catdir/%AUV%ACMSD.ADD.STATUS | Bin 0 -> 3784 bytes Ardent/UV/catdir/%AUV%ACMSD.ADD.STATUS.PURGE | Bin 0 -> 3644 bytes Ardent/UV/catdir/%AUV%ACMSD.ADDRESS.BUILD | Bin 0 -> 9129 bytes Ardent/UV/catdir/%AUV%ACMSD.ADDRESS.FLAT | Bin 0 -> 6697 bytes Ardent/UV/catdir/%AUV%ACMSD.ADDRESS.SUB | Bin 0 -> 10402 bytes .../UV/catdir/%AUV%ACMSD.ADDRESS.SUB.071798 | Bin 0 -> 8912 bytes Ardent/UV/catdir/%AUV%ACMSD.ADDRESS.SUB.WADE | Bin 0 -> 9653 bytes Ardent/UV/catdir/%AUV%ACMSD.ADDRESS.UPDATE | Bin 0 -> 3491 bytes .../UV/catdir/%AUV%ACMSD.AGING.CALLBACK.RPT | Bin 0 -> 10962 bytes Ardent/UV/catdir/%AUV%ACMSD.AGING.RPT | Bin 0 -> 9652 bytes Ardent/UV/catdir/%AUV%ACMSD.ASSEMBLE.ITEMS | Bin 0 -> 5596 bytes Ardent/UV/catdir/%AUV%ACMSD.AUDIT.TRANS.BA | Bin 0 -> 2807 bytes Ardent/UV/catdir/%AUV%ACMSD.AUTHOR.MAINT | Bin 0 -> 7342 bytes Ardent/UV/catdir/%AUV%ACMSD.BA.AUDIT | Bin 0 -> 3937 bytes Ardent/UV/catdir/%AUV%ACMSD.BACKORDER.NOTIFY | Bin 0 -> 5118 bytes Ardent/UV/catdir/%AUV%ACMSD.BACKORDER.RPT | Bin 0 -> 5844 bytes Ardent/UV/catdir/%AUV%ACMSD.BACKORDER.RPT.OLD | Bin 0 -> 5921 bytes Ardent/UV/catdir/%AUV%ACMSD.BALANCE.DAY | Bin 0 -> 7991 bytes Ardent/UV/catdir/%AUV%ACMSD.BATCH.ACTIVITY | Bin 0 -> 7286 bytes Ardent/UV/catdir/%AUV%ACMSD.BATCH.AUDIT | Bin 0 -> 14986 bytes Ardent/UV/catdir/%AUV%ACMSD.BATCH.EXCHANGE | Bin 0 -> 4597 bytes Ardent/UV/catdir/%AUV%ACMSD.BATCHES.BY.USER | Bin 0 -> 3963 bytes Ardent/UV/catdir/%AUV%ACMSD.BHM.PMO.FLAT | Bin 0 -> 7733 bytes .../UV/catdir/%AUV%ACMSD.BHM.PMO.FLAT.060598 | Bin 0 -> 6480 bytes .../UV/catdir/%AUV%ACMSD.BHM.PMO.FLAT.062598 | Bin 0 -> 7044 bytes .../UV/catdir/%AUV%ACMSD.BHM.PMO.FLAT.080498 | Bin 0 -> 7654 bytes Ardent/UV/catdir/%AUV%ACMSD.BILL.FIX | Bin 0 -> 1513 bytes Ardent/UV/catdir/%AUV%ACMSD.BILLING.MAINT | Bin 0 -> 3397 bytes Ardent/UV/catdir/%AUV%ACMSD.BO.REL | Bin 0 -> 11906 bytes Ardent/UV/catdir/%AUV%ACMSD.BO.REL.SPECIAL | Bin 0 -> 11879 bytes Ardent/UV/catdir/%AUV%ACMSD.BO.REL.WADE | Bin 0 -> 11926 bytes Ardent/UV/catdir/%AUV%ACMSD.BONUS.CALC.BUILD | Bin 0 -> 10041 bytes .../catdir/%AUV%ACMSD.BONUS.CALC.BUILD.102199 | Bin 0 -> 9703 bytes Ardent/UV/catdir/%AUV%ACMSD.BONUS.CALC.RPT1 | Bin 0 -> 7349 bytes .../catdir/%AUV%ACMSD.BONUS.CALC.RPT1.102199 | Bin 0 -> 5486 bytes Ardent/UV/catdir/%AUV%ACMSD.BONUS.QUAL.MAINT | Bin 0 -> 5053 bytes Ardent/UV/catdir/%AUV%ACMSD.BORDER.RPT1 | Bin 0 -> 10379 bytes Ardent/UV/catdir/%AUV%ACMSD.BORPT.TEMP | Bin 0 -> 5924 bytes Ardent/UV/catdir/%AUV%ACMSD.BUILD.YTD.SUMMARY | Bin 0 -> 5174 bytes Ardent/UV/catdir/%AUV%ACMSD.BULK.SORT | Bin 0 -> 10653 bytes Ardent/UV/catdir/%AUV%ACMSD.CASH.RECEIPTS | Bin 0 -> 3041 bytes .../UV/catdir/%AUV%ACMSD.CASH.RECEIPTS.BUILD | Bin 0 -> 12092 bytes Ardent/UV/catdir/%AUV%ACMSD.CC.APP.ONLY | Bin 0 -> 6149 bytes Ardent/UV/catdir/%AUV%ACMSD.CC.AUTHORIZE | Bin 0 -> 4879 bytes Ardent/UV/catdir/%AUV%ACMSD.CC.INCOME.BY.EV | Bin 0 -> 8384 bytes Ardent/UV/catdir/%AUV%ACMSD.CC.INCOME.BY.FUND | Bin 0 -> 11943 bytes Ardent/UV/catdir/%AUV%ACMSD.CC.INCOME.RPT | Bin 0 -> 7799 bytes Ardent/UV/catdir/%AUV%ACMSD.CC.NEXT | Bin 0 -> 1307 bytes Ardent/UV/catdir/%AUV%ACMSD.CC.PROCESS | Bin 0 -> 6366 bytes Ardent/UV/catdir/%AUV%ACMSD.CC.PTC.CREATE | Bin 0 -> 8079 bytes Ardent/UV/catdir/%AUV%ACMSD.CC.PTC.RECEIVE | Bin 0 -> 2469 bytes Ardent/UV/catdir/%AUV%ACMSD.CC.PTC.REPORTS | Bin 0 -> 8337 bytes Ardent/UV/catdir/%AUV%ACMSD.CC.PTC.TRANSFER | Bin 0 -> 2232 bytes Ardent/UV/catdir/%AUV%ACMSD.CC.PTC.UPDATE | Bin 0 -> 13953 bytes Ardent/UV/catdir/%AUV%ACMSD.CC.REPORT | Bin 0 -> 2819 bytes Ardent/UV/catdir/%AUV%ACMSD.CC.STEP3 | Bin 0 -> 1542 bytes Ardent/UV/catdir/%AUV%ACMSD.CC.UPDATE | Bin 0 -> 14974 bytes Ardent/UV/catdir/%AUV%ACMSD.CCT.INDEX | Bin 0 -> 5961 bytes Ardent/UV/catdir/%AUV%ACMSD.CCT.INDEX.OLD | Bin 0 -> 5885 bytes Ardent/UV/catdir/%AUV%ACMSD.CCT.INDEX1 | Bin 0 -> 5962 bytes Ardent/UV/catdir/%AUV%ACMSD.CCT.MAINT | Bin 0 -> 11869 bytes Ardent/UV/catdir/%AUV%ACMSD.CHANGE.MEDIA.CODE | Bin 0 -> 3547 bytes Ardent/UV/catdir/%AUV%ACMSD.CHANGE.OF.ADDRESS | Bin 0 -> 13105 bytes .../catdir/%AUV%ACMSD.CHANGE.OF.ADDRESS.OLD | Bin 0 -> 13046 bytes Ardent/UV/catdir/%AUV%ACMSD.CHANGE.PM.DMA | Bin 0 -> 2890 bytes Ardent/UV/catdir/%AUV%ACMSD.CHECK.DIGIT | Bin 0 -> 1602 bytes Ardent/UV/catdir/%AUV%ACMSD.CLEAN.CC.FILE | Bin 0 -> 5240 bytes Ardent/UV/catdir/%AUV%ACMSD.CLOSE | Bin 0 -> 20694 bytes Ardent/UV/catdir/%AUV%ACMSD.CLOSE.052599 | Bin 0 -> 18335 bytes Ardent/UV/catdir/%AUV%ACMSD.CLOSE.090299 | Bin 0 -> 20104 bytes Ardent/UV/catdir/%AUV%ACMSD.CLOSE.BHM.txt | Bin 0 -> 20055 bytes Ardent/UV/catdir/%AUV%ACMSD.CLOSE.ORDERS | Bin 0 -> 12765 bytes .../UV/catdir/%AUV%ACMSD.CLOSE.ORDERS.052699 | Bin 0 -> 12026 bytes Ardent/UV/catdir/%AUV%ACMSD.COA.EDIT.RPT | Bin 0 -> 4136 bytes Ardent/UV/catdir/%AUV%ACMSD.CONTROL | Bin 0 -> 31311 bytes Ardent/UV/catdir/%AUV%ACMSD.CONTROL.051299 | Bin 0 -> 29526 bytes Ardent/UV/catdir/%AUV%ACMSD.CONTROL.052599 | Bin 0 -> 30096 bytes Ardent/UV/catdir/%AUV%ACMSD.CONTROL.BHM.txt | Bin 0 -> 30921 bytes Ardent/UV/catdir/%AUV%ACMSD.CONTROL.DBSCRIPT | Bin 0 -> 42900 bytes .../catdir/%AUV%ACMSD.CONTROL.DBSCRIPT.051199 | Bin 0 -> 41895 bytes .../catdir/%AUV%ACMSD.CONTROL.DBSCRIPT.071699 | Bin 0 -> 42295 bytes .../catdir/%AUV%ACMSD.CONTROL.DBSCRIPT.090497 | Bin 0 -> 37637 bytes .../catdir/%AUV%ACMSD.CONTROL.DBSCRIPT.101597 | Bin 0 -> 40671 bytes .../catdir/%AUV%ACMSD.CONTROL.DBSCRIPT.102997 | Bin 0 -> 40795 bytes Ardent/UV/catdir/%AUV%ACMSD.CONTROL.DHB | Bin 0 -> 26555 bytes Ardent/UV/catdir/%AUV%ACMSD.CONTROL.MTEK800 | Bin 0 -> 29897 bytes .../catdir/%AUV%ACMSD.CONTROL.MTEK800.121897 | Bin 0 -> 28686 bytes .../catdir/%AUV%ACMSD.CONTROL.MTEK800.122397 | Bin 0 -> 29437 bytes Ardent/UV/catdir/%AUV%ACMSD.CONTROL.SPECIAL | Bin 0 -> 1654 bytes Ardent/UV/catdir/%AUV%ACMSD.CORRECT.AVAILABLE | Bin 0 -> 3435 bytes Ardent/UV/catdir/%AUV%ACMSD.COST.OF.SALES | Bin 0 -> 10922 bytes Ardent/UV/catdir/%AUV%ACMSD.COST.REPORT | Bin 0 -> 11940 bytes Ardent/UV/catdir/%AUV%ACMSD.COUNT | Bin 0 -> 13444 bytes Ardent/UV/catdir/%AUV%ACMSD.COUNT.CCT | Bin 0 -> 4488 bytes Ardent/UV/catdir/%AUV%ACMSD.CREDITS | Bin 0 -> 3352 bytes Ardent/UV/catdir/%AUV%ACMSD.CUST.TYPES | Bin 0 -> 6997 bytes Ardent/UV/catdir/%AUV%ACMSD.DATE.SUB.CONV | Bin 0 -> 471 bytes Ardent/UV/catdir/%AUV%ACMSD.DB.PRAYER | Bin 0 -> 6744 bytes Ardent/UV/catdir/%AUV%ACMSD.DB.PRAYER.060898 | Bin 0 -> 6864 bytes Ardent/UV/catdir/%AUV%ACMSD.DB.PRAYER.REPORT | Bin 0 -> 5519 bytes Ardent/UV/catdir/%AUV%ACMSD.DBM000 | Bin 0 -> 4161 bytes Ardent/UV/catdir/%AUV%ACMSD.DEFERRED.INCOME | Bin 0 -> 1987 bytes .../catdir/%AUV%ACMSD.DEFERRED.INCOME.BUILD | Bin 0 -> 5347 bytes Ardent/UV/catdir/%AUV%ACMSD.DEL.STATUS | Bin 0 -> 3505 bytes Ardent/UV/catdir/%AUV%ACMSD.DELETE.ALIAS | Bin 0 -> 4132 bytes Ardent/UV/catdir/%AUV%ACMSD.DEMOG | Bin 0 -> 7771 bytes Ardent/UV/catdir/%AUV%ACMSD.DEMOG.DELETE | Bin 0 -> 1936 bytes .../UV/catdir/%AUV%ACMSD.DEMOG.FIELD.DELETE | Bin 0 -> 1392 bytes .../UV/catdir/%AUV%ACMSD.DEMOG.FIELD.UPDATE | Bin 0 -> 7544 bytes Ardent/UV/catdir/%AUV%ACMSD.DEMOG.UPDATE | Bin 0 -> 1575 bytes Ardent/UV/catdir/%AUV%ACMSD.DICT.INIT | Bin 0 -> 1625 bytes Ardent/UV/catdir/%AUV%ACMSD.DO02.CTRL | Bin 0 -> 1188 bytes Ardent/UV/catdir/%AUV%ACMSD.DO02.SUB | Bin 0 -> 1826 bytes Ardent/UV/catdir/%AUV%ACMSD.EFT | Bin 0 -> 10384 bytes Ardent/UV/catdir/%AUV%ACMSD.EFT.LIST | Bin 0 -> 2529 bytes Ardent/UV/catdir/%AUV%ACMSD.EFT.RPT | Bin 0 -> 3346 bytes Ardent/UV/catdir/%AUV%ACMSD.EFT.SELECT | Bin 0 -> 10577 bytes Ardent/UV/catdir/%AUV%ACMSD.EMAIL.RPT | Bin 0 -> 3912 bytes Ardent/UV/catdir/%AUV%ACMSD.EMAIL.UPDATE | Bin 0 -> 6157 bytes Ardent/UV/catdir/%AUV%ACMSD.ENVELOPE.UPDATE | Bin 0 -> 2590 bytes Ardent/UV/catdir/%AUV%ACMSD.EVENT.ANALYSIS | Bin 0 -> 9686 bytes Ardent/UV/catdir/%AUV%ACMSD.EVENT.FLAT | Bin 0 -> 3342 bytes .../UV/catdir/%AUV%ACMSD.EVENT.PRODUCT.BUILD | Bin 0 -> 1814 bytes Ardent/UV/catdir/%AUV%ACMSD.EVENT.PRODUCT.DEL | Bin 0 -> 1138 bytes .../UV/catdir/%AUV%ACMSD.EVENT.PRODUCT.MAINT | Bin 0 -> 1515 bytes Ardent/UV/catdir/%AUV%ACMSD.EVENT.PRODUCTS | Bin 0 -> 1751 bytes .../UV/catdir/%AUV%ACMSD.EVENT.RESPONSE.FLAT | Bin 0 -> 5216 bytes Ardent/UV/catdir/%AUV%ACMSD.EVENT.SEGMENT | Bin 0 -> 1749 bytes .../UV/catdir/%AUV%ACMSD.EVENT.SEGMENT.BUILD | Bin 0 -> 1859 bytes Ardent/UV/catdir/%AUV%ACMSD.EVENT.SEGMENT.DEL | Bin 0 -> 1138 bytes .../UV/catdir/%AUV%ACMSD.EVENT.SEGMENT.MAINT | Bin 0 -> 1515 bytes Ardent/UV/catdir/%AUV%ACMSD.EVENT.YTD | Bin 0 -> 11679 bytes Ardent/UV/catdir/%AUV%ACMSD.EVENT.YTD.092598 | Bin 0 -> 11573 bytes Ardent/UV/catdir/%AUV%ACMSD.EVENT.YTD.WADE | Bin 0 -> 11626 bytes Ardent/UV/catdir/%AUV%ACMSD.EXEC | Bin 0 -> 21134 bytes Ardent/UV/catdir/%AUV%ACMSD.EXEC.CONV.OLD | Bin 0 -> 3295 bytes Ardent/UV/catdir/%AUV%ACMSD.EXEC.INIT | Bin 0 -> 2384 bytes Ardent/UV/catdir/%AUV%ACMSD.EXEC.REPORT01 | Bin 0 -> 10397 bytes Ardent/UV/catdir/%AUV%ACMSD.EXEC.REPORT02 | Bin 0 -> 9553 bytes .../UV/catdir/%AUV%ACMSD.EXEC.REPORT02.TEST | Bin 0 -> 9450 bytes Ardent/UV/catdir/%AUV%ACMSD.EXEC.REPORT03 | Bin 0 -> 9693 bytes Ardent/UV/catdir/%AUV%ACMSD.EXEC.REPORT04 | Bin 0 -> 13068 bytes .../UV/catdir/%AUV%ACMSD.EXEC.REPORT04.083099 | Bin 0 -> 12514 bytes Ardent/UV/catdir/%AUV%ACMSD.EXEC.REPORT05 | Bin 0 -> 5941 bytes Ardent/UV/catdir/%AUV%ACMSD.EXEC.REPORT06 | Bin 0 -> 9304 bytes Ardent/UV/catdir/%AUV%ACMSD.EXEC.REPORT07 | Bin 0 -> 10825 bytes Ardent/UV/catdir/%AUV%ACMSD.EXEC.REPORT08 | Bin 0 -> 13432 bytes .../UV/catdir/%AUV%ACMSD.EXEC.REPORT08.071798 | Bin 0 -> 12880 bytes Ardent/UV/catdir/%AUV%ACMSD.EXEC.REPORT09 | Bin 0 -> 13587 bytes .../UV/catdir/%AUV%ACMSD.EXEC.REPORT09.071798 | Bin 0 -> 12973 bytes Ardent/UV/catdir/%AUV%ACMSD.EXEC.REPORT10 | Bin 0 -> 10502 bytes Ardent/UV/catdir/%AUV%ACMSD.EXEC.REPORTGL.CRM | Bin 0 -> 8852 bytes Ardent/UV/catdir/%AUV%ACMSD.EXEC.REPORTS | Bin 0 -> 16427 bytes Ardent/UV/catdir/%AUV%ACMSD.EXPORT.TO.UPDATE | Bin 0 -> 5435 bytes Ardent/UV/catdir/%AUV%ACMSD.FAMILY.UPDATE | Bin 0 -> 5547 bytes Ardent/UV/catdir/%AUV%ACMSD.FBDD.RPT | Bin 0 -> 9442 bytes Ardent/UV/catdir/%AUV%ACMSD.FILE.LAYOUT | Bin 0 -> 3276 bytes Ardent/UV/catdir/%AUV%ACMSD.FILE.REVIEW | Bin 0 -> 3834 bytes Ardent/UV/catdir/%AUV%ACMSD.FIX.ORDER.INDEXES | Bin 0 -> 4357 bytes Ardent/UV/catdir/%AUV%ACMSD.FKEYS | Bin 0 -> 2657 bytes Ardent/UV/catdir/%AUV%ACMSD.FLAT.READ.CC | Bin 0 -> 3467 bytes Ardent/UV/catdir/%AUV%ACMSD.FLATFILE | Bin 0 -> 10272 bytes Ardent/UV/catdir/%AUV%ACMSD.FLATFILE.011999 | Bin 0 -> 9896 bytes Ardent/UV/catdir/%AUV%ACMSD.FLATFILE.DEMOG | Bin 0 -> 9283 bytes Ardent/UV/catdir/%AUV%ACMSD.FLATFILE.EVENT | Bin 0 -> 9098 bytes .../UV/catdir/%AUV%ACMSD.FLATFILE.EVENT.BYM | Bin 0 -> 9126 bytes Ardent/UV/catdir/%AUV%ACMSD.FLATFILE.INV | Bin 0 -> 9572 bytes .../UV/catdir/%AUV%ACMSD.FLATFILE.LETTERS.BYM | Bin 0 -> 9962 bytes Ardent/UV/catdir/%AUV%ACMSD.FLATFILE.MAINT | Bin 0 -> 11624 bytes .../catdir/%AUV%ACMSD.FLATFILE.MAINT.011999 | Bin 0 -> 11500 bytes .../UV/catdir/%AUV%ACMSD.FLATFILE.MAINT.EVENT | Bin 0 -> 11466 bytes .../UV/catdir/%AUV%ACMSD.FLATFILE.MAINT.GEN | Bin 0 -> 11468 bytes .../catdir/%AUV%ACMSD.FLATFILE.MAINT.LETTERS | Bin 0 -> 11459 bytes .../UV/catdir/%AUV%ACMSD.FLATFILE.MAINT.NOTES | Bin 0 -> 11453 bytes .../catdir/%AUV%ACMSD.FLATFILE.MAINT.PLEDGES | Bin 0 -> 11459 bytes Ardent/UV/catdir/%AUV%ACMSD.FLATFILE.MAINT.PM | Bin 0 -> 11499 bytes .../UV/catdir/%AUV%ACMSD.FLATFILE.MAINT.PMT | Bin 0 -> 11503 bytes .../UV/catdir/%AUV%ACMSD.FLATFILE.MAINT.SUB | Bin 0 -> 11487 bytes .../UV/catdir/%AUV%ACMSD.FLATFILE.MAINT.TRANS | Bin 0 -> 11505 bytes Ardent/UV/catdir/%AUV%ACMSD.FLATFILE.NOTES | Bin 0 -> 9808 bytes .../UV/catdir/%AUV%ACMSD.FLATFILE.NOTES.BYM | Bin 0 -> 9960 bytes Ardent/UV/catdir/%AUV%ACMSD.FLATFILE.PLEDGES | Bin 0 -> 9628 bytes .../UV/catdir/%AUV%ACMSD.FLATFILE.PLEDGES.BYM | Bin 0 -> 9684 bytes Ardent/UV/catdir/%AUV%ACMSD.FLATFILE.PM | Bin 0 -> 9857 bytes Ardent/UV/catdir/%AUV%ACMSD.FLATFILE.PM.BYM | Bin 0 -> 9885 bytes Ardent/UV/catdir/%AUV%ACMSD.FLATFILE.PM.PURGE | Bin 0 -> 10329 bytes Ardent/UV/catdir/%AUV%ACMSD.FLATFILE.PMO.GEN | Bin 0 -> 9245 bytes .../UV/catdir/%AUV%ACMSD.FLATFILE.PMO.GEN.BYM | Bin 0 -> 9276 bytes .../catdir/%AUV%ACMSD.FLATFILE.PMO.GEN.PURGE | Bin 0 -> 9261 bytes Ardent/UV/catdir/%AUV%ACMSD.FLATFILE.PMO.ITEM | Bin 0 -> 9655 bytes .../catdir/%AUV%ACMSD.FLATFILE.PMO.ITEM.PURGE | Bin 0 -> 9664 bytes Ardent/UV/catdir/%AUV%ACMSD.FLATFILE.PROJECT | Bin 0 -> 9406 bytes Ardent/UV/catdir/%AUV%ACMSD.FLATFILE.PURGE | Bin 0 -> 9907 bytes Ardent/UV/catdir/%AUV%ACMSD.FLATFILE.SEGMENT | Bin 0 -> 9590 bytes Ardent/UV/catdir/%AUV%ACMSD.FLATFILE.STATUS | Bin 0 -> 9585 bytes .../catdir/%AUV%ACMSD.FLATFILE.STATUS.TABLE | Bin 0 -> 9706 bytes Ardent/UV/catdir/%AUV%ACMSD.FLATFILE.SUB | Bin 0 -> 9996 bytes Ardent/UV/catdir/%AUV%ACMSD.FLATFILE.SUB.BYM | Bin 0 -> 10000 bytes Ardent/UV/catdir/%AUV%ACMSD.FLATFILE.TRANS | Bin 0 -> 9615 bytes .../UV/catdir/%AUV%ACMSD.FLATFILE.TRANS.BYM | Bin 0 -> 9639 bytes .../UV/catdir/%AUV%ACMSD.FLATFILE.TRANS.PURGE | Bin 0 -> 9637 bytes Ardent/UV/catdir/%AUV%ACMSD.FMV.RPT | Bin 0 -> 10561 bytes Ardent/UV/catdir/%AUV%ACMSD.FREQ.GIVING | Bin 0 -> 7122 bytes Ardent/UV/catdir/%AUV%ACMSD.FTP.INTERFACE.ICM | Bin 0 -> 13019 bytes Ardent/UV/catdir/%AUV%ACMSD.FUND.BY.DATE | Bin 0 -> 5618 bytes Ardent/UV/catdir/%AUV%ACMSD.FUND.BY.EVENT | Bin 0 -> 9426 bytes Ardent/UV/catdir/%AUV%ACMSD.FUND.BY.EVENT.3 | Bin 0 -> 11884 bytes .../UV/catdir/%AUV%ACMSD.FUND.BY.EVENT.DEPT | Bin 0 -> 12308 bytes .../%AUV%ACMSD.FUND.BY.EVENT.DEPT.012999 | Bin 0 -> 11839 bytes .../%AUV%ACMSD.FUND.BY.EVENT.DEPT.031098 | Bin 0 -> 10672 bytes .../%AUV%ACMSD.FUND.BY.EVENT.DEPT.040998 | Bin 0 -> 11839 bytes Ardent/UV/catdir/%AUV%ACMSD.FUND.DETAIL | Bin 0 -> 8060 bytes Ardent/UV/catdir/%AUV%ACMSD.FUND.DETAIL.BAK | Bin 0 -> 7264 bytes Ardent/UV/catdir/%AUV%ACMSD.FUND.SUMMARY | Bin 0 -> 7839 bytes Ardent/UV/catdir/%AUV%ACMSD.GENERIC.PMO.FLAT | Bin 0 -> 5604 bytes Ardent/UV/catdir/%AUV%ACMSD.GEO.UPDATE.FILE | Bin 0 -> 5283 bytes Ardent/UV/catdir/%AUV%ACMSD.GET.AMOUNT | Bin 0 -> 1549 bytes Ardent/UV/catdir/%AUV%ACMSD.GET.DATE | Bin 0 -> 1195 bytes Ardent/UV/catdir/%AUV%ACMSD.GET.PERIOD.MMYY | Bin 0 -> 1320 bytes Ardent/UV/catdir/%AUV%ACMSD.GET.PERIOD.YYMM | Bin 0 -> 1367 bytes Ardent/UV/catdir/%AUV%ACMSD.GET.PERIOD.YYYYMM | Bin 0 -> 1396 bytes Ardent/UV/catdir/%AUV%ACMSD.GET.TIME | Bin 0 -> 1386 bytes Ardent/UV/catdir/%AUV%ACMSD.GIFT.SUMMARIZE | Bin 0 -> 2400 bytes Ardent/UV/catdir/%AUV%ACMSD.GLOBAL.CC.INFO | Bin 0 -> 10717 bytes .../catdir/%AUV%ACMSD.GLOBAL.CC.INFO.033199 | Bin 0 -> 9974 bytes .../catdir/%AUV%ACMSD.GLOBAL.CC.INFO.060899 | Bin 0 -> 10990 bytes .../UV/catdir/%AUV%ACMSD.GLOBAL.CC.INFO.TEMP | Bin 0 -> 9872 bytes .../UV/catdir/%AUV%ACMSD.GLOBAL.CC.INFO.WADE | Bin 0 -> 10939 bytes Ardent/UV/catdir/%AUV%ACMSD.GLOBAL.MAILPULL | Bin 0 -> 44967 bytes .../catdir/%AUV%ACMSD.GLOBAL.MAILPULL.051799 | Bin 0 -> 42813 bytes .../catdir/%AUV%ACMSD.GLOBAL.MAILPULL.101797 | Bin 0 -> 41032 bytes .../catdir/%AUV%ACMSD.GLOBAL.MAILPULL.112597 | Bin 0 -> 41565 bytes Ardent/UV/catdir/%AUV%ACMSD.GLOBAL.OPER.STATS | Bin 0 -> 9636 bytes Ardent/UV/catdir/%AUV%ACMSD.IA.YEAR.FIX | Bin 0 -> 1730 bytes Ardent/UV/catdir/%AUV%ACMSD.IC.RPT1 | Bin 0 -> 5102 bytes Ardent/UV/catdir/%AUV%ACMSD.IC.RPT2 | Bin 0 -> 5487 bytes Ardent/UV/catdir/%AUV%ACMSD.IC.RPT3 | Bin 0 -> 5467 bytes Ardent/UV/catdir/%AUV%ACMSD.IC.RPT4 | Bin 0 -> 5505 bytes Ardent/UV/catdir/%AUV%ACMSD.IC.RPT5 | Bin 0 -> 7992 bytes Ardent/UV/catdir/%AUV%ACMSD.IC.RPT5.VER2 | Bin 0 -> 9895 bytes Ardent/UV/catdir/%AUV%ACMSD.IC.RPT6 | Bin 0 -> 4573 bytes Ardent/UV/catdir/%AUV%ACMSD.IC.RPT6.VER2 | Bin 0 -> 5633 bytes Ardent/UV/catdir/%AUV%ACMSD.IC.RPT7 | Bin 0 -> 7686 bytes Ardent/UV/catdir/%AUV%ACMSD.IC.RPT7.2.18.97 | Bin 0 -> 6599 bytes Ardent/UV/catdir/%AUV%ACMSD.IC.SYNOPSIS | Bin 0 -> 3584 bytes .../UV/catdir/%AUV%ACMSD.IMPORT.FROM.UPDATE | Bin 0 -> 4513 bytes Ardent/UV/catdir/%AUV%ACMSD.INCOME.BY.ZIP | Bin 0 -> 6655 bytes Ardent/UV/catdir/%AUV%ACMSD.INPUT | Bin 0 -> 3158 bytes Ardent/UV/catdir/%AUV%ACMSD.INSERT.CHECK | Bin 0 -> 4370 bytes Ardent/UV/catdir/%AUV%ACMSD.INT.INTERFACE.ICM | Bin 0 -> 13010 bytes Ardent/UV/catdir/%AUV%ACMSD.INTERFACE | Bin 0 -> 3167 bytes Ardent/UV/catdir/%AUV%ACMSD.INV.AUDIT | Bin 0 -> 9702 bytes Ardent/UV/catdir/%AUV%ACMSD.INV.AUDIT.PROCESS | Bin 0 -> 8945 bytes Ardent/UV/catdir/%AUV%ACMSD.INV.AUDIT.SUB | Bin 0 -> 9028 bytes Ardent/UV/catdir/%AUV%ACMSD.INV.AUDIT2 | Bin 0 -> 4864 bytes Ardent/UV/catdir/%AUV%ACMSD.INV.COST.CALC | Bin 0 -> 2410 bytes Ardent/UV/catdir/%AUV%ACMSD.INV.COST.DISP | Bin 0 -> 2496 bytes Ardent/UV/catdir/%AUV%ACMSD.INV.COST.MAINT | Bin 0 -> 8449 bytes Ardent/UV/catdir/%AUV%ACMSD.INV.COST.RPT | Bin 0 -> 11660 bytes .../UV/catdir/%AUV%ACMSD.INV.COST.RPT.2.18.97 | Bin 0 -> 11445 bytes Ardent/UV/catdir/%AUV%ACMSD.INV.ITEM.CHANGE | Bin 0 -> 8459 bytes Ardent/UV/catdir/%AUV%ACMSD.INV.LABEL | Bin 0 -> 2800 bytes Ardent/UV/catdir/%AUV%ACMSD.INV.MAINT | Bin 0 -> 16615 bytes .../UV/catdir/%AUV%ACMSD.INV.MAINT.COMPONENTS | Bin 0 -> 7619 bytes Ardent/UV/catdir/%AUV%ACMSD.INV.MAINT.OTHER | Bin 0 -> 6199 bytes Ardent/UV/catdir/%AUV%ACMSD.INV.MAINT.PRICE | Bin 0 -> 8786 bytes Ardent/UV/catdir/%AUV%ACMSD.INV.MAINT.ROYALTY | Bin 0 -> 7648 bytes .../UV/catdir/%AUV%ACMSD.INV.MAINT.SYNOPSIS | Bin 0 -> 5050 bytes Ardent/UV/catdir/%AUV%ACMSD.INV.MAINT.TLD | Bin 0 -> 13781 bytes Ardent/UV/catdir/%AUV%ACMSD.INV.MAINT.UPSELL | Bin 0 -> 5053 bytes Ardent/UV/catdir/%AUV%ACMSD.INV.MAINT.WHSE | Bin 0 -> 6852 bytes .../UV/catdir/%AUV%ACMSD.INV.MAINT.WHSE.BUILD | Bin 0 -> 1996 bytes Ardent/UV/catdir/%AUV%ACMSD.INV.MASTER | Bin 0 -> 15803 bytes .../UV/catdir/%AUV%ACMSD.INV.MASTER.3.17.97 | Bin 0 -> 15705 bytes Ardent/UV/catdir/%AUV%ACMSD.INV.RPT.BUILD | Bin 0 -> 11664 bytes Ardent/UV/catdir/%AUV%ACMSD.INV.RPT.FRONT | Bin 0 -> 9348 bytes Ardent/UV/catdir/%AUV%ACMSD.INV.RPT.INIT | Bin 0 -> 9315 bytes Ardent/UV/catdir/%AUV%ACMSD.INV.RPT.INIT2 | Bin 0 -> 11021 bytes Ardent/UV/catdir/%AUV%ACMSD.INV.SYNOPSIS.DISP | Bin 0 -> 1460 bytes Ardent/UV/catdir/%AUV%ACMSD.INV.TRANS.RPT | Bin 0 -> 11995 bytes Ardent/UV/catdir/%AUV%ACMSD.INV.UPSELL.DISP | Bin 0 -> 2461 bytes Ardent/UV/catdir/%AUV%ACMSD.INV.USAGE.SUB | Bin 0 -> 2549 bytes Ardent/UV/catdir/%AUV%ACMSD.INV.VALUE.BUILD2 | Bin 0 -> 2480 bytes Ardent/UV/catdir/%AUV%ACMSD.INVINQ | Bin 0 -> 9286 bytes Ardent/UV/catdir/%AUV%ACMSD.INVINQ.MULTI | Bin 0 -> 1133 bytes Ardent/UV/catdir/%AUV%ACMSD.INVTRANS | Bin 0 -> 16405 bytes Ardent/UV/catdir/%AUV%ACMSD.INVTRANS.090298 | Bin 0 -> 15472 bytes Ardent/UV/catdir/%AUV%ACMSD.INVTRANS.091098 | Bin 0 -> 16310 bytes Ardent/UV/catdir/%AUV%ACMSD.INVTRANS.OLD | Bin 0 -> 9885 bytes Ardent/UV/catdir/%AUV%ACMSD.IVD | Bin 0 -> 183 bytes Ardent/UV/catdir/%AUV%ACMSD.IVT.MULTI | Bin 0 -> 26549 bytes Ardent/UV/catdir/%AUV%ACMSD.IVT.MULTI.080299 | Bin 0 -> 25878 bytes Ardent/UV/catdir/%AUV%ACMSD.IVT.MULTI.090298 | Bin 0 -> 24940 bytes Ardent/UV/catdir/%AUV%ACMSD.IVT.MULTI.091098 | Bin 0 -> 25776 bytes Ardent/UV/catdir/%AUV%ACMSD.IVT.MULTI.OLD | Bin 0 -> 15903 bytes Ardent/UV/catdir/%AUV%ACMSD.IVTINQ | Bin 0 -> 6506 bytes Ardent/UV/catdir/%AUV%ACMSD.IVTINQ.SUB | Bin 0 -> 2659 bytes Ardent/UV/catdir/%AUV%ACMSD.LABEL.1UP | Bin 0 -> 5588 bytes Ardent/UV/catdir/%AUV%ACMSD.LABEL.INDICIA | Bin 0 -> 5182 bytes Ardent/UV/catdir/%AUV%ACMSD.LETTERS.UPDATE | Bin 0 -> 6303 bytes Ardent/UV/catdir/%AUV%ACMSD.LINE.ENTRY.OBJECT | Bin 0 -> 12420 bytes .../UV/catdir/%AUV%ACMSD.LINES.ARRAY.MANAGER | Bin 0 -> 15352 bytes .../%AUV%ACMSD.LINES.ARRAY.MANAGER.062398 | Bin 0 -> 13805 bytes .../%AUV%ACMSD.LINES.ARRAY.MANAGER.HELP | Bin 0 -> 1545 bytes Ardent/UV/catdir/%AUV%ACMSD.LIST.DIFF | Bin 0 -> 2176 bytes Ardent/UV/catdir/%AUV%ACMSD.LIST.MAINT | Bin 0 -> 10172 bytes Ardent/UV/catdir/%AUV%ACMSD.LIST.SPLIT | Bin 0 -> 3872 bytes Ardent/UV/catdir/%AUV%ACMSD.LOGOFF | Bin 0 -> 1335 bytes Ardent/UV/catdir/%AUV%ACMSD.MAKE.TREE.CCARD | Bin 0 -> 3639 bytes .../UV/catdir/%AUV%ACMSD.MAKE.TREE.ENVELOPE | Bin 0 -> 5342 bytes Ardent/UV/catdir/%AUV%ACMSD.MAKE.TREE.INV | Bin 0 -> 4791 bytes Ardent/UV/catdir/%AUV%ACMSD.MAKE.TREE.LNAME | Bin 0 -> 7355 bytes Ardent/UV/catdir/%AUV%ACMSD.MAKE.TREE.PHONE | Bin 0 -> 5622 bytes Ardent/UV/catdir/%AUV%ACMSD.MAKE.TREE.SSN | Bin 0 -> 5317 bytes Ardent/UV/catdir/%AUV%ACMSD.MAKE.TREE.ZIP | Bin 0 -> 7274 bytes .../UV/catdir/%AUV%ACMSD.MARKET.ACTIVITY.RPT | Bin 0 -> 8611 bytes Ardent/UV/catdir/%AUV%ACMSD.MARKET.LIST | Bin 0 -> 4586 bytes Ardent/UV/catdir/%AUV%ACMSD.MASTER.PM.FLAT | Bin 0 -> 10304 bytes Ardent/UV/catdir/%AUV%ACMSD.MEDIA.ADD.INV | Bin 0 -> 13502 bytes .../UV/catdir/%AUV%ACMSD.MEDIA.ADDRESS.DISP | Bin 0 -> 4183 bytes Ardent/UV/catdir/%AUV%ACMSD.MEDIA.AP.BATCH | Bin 0 -> 9613 bytes Ardent/UV/catdir/%AUV%ACMSD.MEDIA.CALC.COST | Bin 0 -> 4711 bytes Ardent/UV/catdir/%AUV%ACMSD.MEDIA.CALC.COST.2 | Bin 0 -> 4713 bytes Ardent/UV/catdir/%AUV%ACMSD.MEDIA.INV.INFO | Bin 0 -> 4105 bytes Ardent/UV/catdir/%AUV%ACMSD.MEDIA.INV.MENU | Bin 0 -> 7095 bytes Ardent/UV/catdir/%AUV%ACMSD.MEDIA.JVI | Bin 0 -> 11855 bytes .../UV/catdir/%AUV%ACMSD.MEDIA.MONTHLY.BUILD | Bin 0 -> 14012 bytes .../%AUV%ACMSD.MEDIA.MONTHLY.BUILD.052698 | Bin 0 -> 13909 bytes .../%AUV%ACMSD.MEDIA.MONTHLY.BUILD.082799 | Bin 0 -> 14143 bytes .../%AUV%ACMSD.MEDIA.MONTHLY.BUILD.STOP | Bin 0 -> 13734 bytes .../UV/catdir/%AUV%ACMSD.MEDIA.TRANS.UPDATE | Bin 0 -> 7343 bytes Ardent/UV/catdir/%AUV%ACMSD.MEDIA.WINDOW | Bin 0 -> 3158 bytes .../UV/catdir/%AUV%ACMSD.MKT.REVENUE.RPT.R85 | Bin 0 -> 11738 bytes .../%AUV%ACMSD.MKT.REVENUE.RPT.R85.100797 | Bin 0 -> 11556 bytes .../%AUV%ACMSD.MKT.REVENUE.RPT.R85.111797 | Bin 0 -> 11293 bytes .../%AUV%ACMSD.MKT.REVENUE.RPT.R85.112097 | Bin 0 -> 11173 bytes Ardent/UV/catdir/%AUV%ACMSD.MODULUS10 | Bin 0 -> 2399 bytes .../UV/catdir/%AUV%ACMSD.MONTH.BILLING.MAINT | Bin 0 -> 20836 bytes .../catdir/%AUV%ACMSD.MONTHLY.BILLING.MAINT | Bin 0 -> 6298 bytes Ardent/UV/catdir/%AUV%ACMSD.MULTI.CITY | Bin 0 -> 1898 bytes Ardent/UV/catdir/%AUV%ACMSD.NAME.SUB | Bin 0 -> 6481 bytes Ardent/UV/catdir/%AUV%ACMSD.NAME.UPDATE | Bin 0 -> 2884 bytes Ardent/UV/catdir/%AUV%ACMSD.NEXT.PARTNER | Bin 0 -> 2471 bytes .../catdir/%AUV%ACMSD.NOMETER.DEPOSIT.ENTRY | Bin 0 -> 5725 bytes Ardent/UV/catdir/%AUV%ACMSD.NOTES.FLAT | Bin 0 -> 3955 bytes Ardent/UV/catdir/%AUV%ACMSD.NOTES.MANY | Bin 0 -> 3217 bytes Ardent/UV/catdir/%AUV%ACMSD.ORDER.AUX | Bin 0 -> 12412 bytes Ardent/UV/catdir/%AUV%ACMSD.ORDER.BACKUP | Bin 0 -> 70640 bytes Ardent/UV/catdir/%AUV%ACMSD.ORDER.BILLING | Bin 0 -> 13822 bytes .../UV/catdir/%AUV%ACMSD.ORDER.BILLING.092997 | Bin 0 -> 13523 bytes .../UV/catdir/%AUV%ACMSD.ORDER.BILLING.92897 | Bin 0 -> 13164 bytes .../UV/catdir/%AUV%ACMSD.ORDER.BILLING.MAINT | Bin 0 -> 4752 bytes Ardent/UV/catdir/%AUV%ACMSD.ORDER.BILLING2 | Bin 0 -> 6381 bytes Ardent/UV/catdir/%AUV%ACMSD.ORDER.CCARD | Bin 0 -> 11924 bytes Ardent/UV/catdir/%AUV%ACMSD.ORDER.CHARGES | Bin 0 -> 8330 bytes Ardent/UV/catdir/%AUV%ACMSD.ORDER.COMMENTS | Bin 0 -> 1688 bytes Ardent/UV/catdir/%AUV%ACMSD.ORDER.CONV | Bin 0 -> 3220 bytes Ardent/UV/catdir/%AUV%ACMSD.ORDER.ECHECK | Bin 0 -> 2904 bytes Ardent/UV/catdir/%AUV%ACMSD.ORDER.HELP | Bin 0 -> 2696 bytes Ardent/UV/catdir/%AUV%ACMSD.ORDER.HIST | Bin 0 -> 7875 bytes Ardent/UV/catdir/%AUV%ACMSD.ORDER.HIST.092597 | Bin 0 -> 7344 bytes Ardent/UV/catdir/%AUV%ACMSD.ORDER.HIST.PRINT | Bin 0 -> 7589 bytes Ardent/UV/catdir/%AUV%ACMSD.ORDER.INFO | Bin 0 -> 7968 bytes .../catdir/%AUV%ACMSD.ORDER.INFO.FIELD.UPDATE | Bin 0 -> 3201 bytes Ardent/UV/catdir/%AUV%ACMSD.ORDER.INFO.UPDATE | Bin 0 -> 1519 bytes Ardent/UV/catdir/%AUV%ACMSD.ORDER.MAINT | Bin 0 -> 72237 bytes .../UV/catdir/%AUV%ACMSD.ORDER.MAINT.071599 | Bin 0 -> 71076 bytes .../UV/catdir/%AUV%ACMSD.ORDER.MAINT.102999 | Bin 0 -> 72087 bytes Ardent/UV/catdir/%AUV%ACMSD.ORDER.PLEDGE.PULL | Bin 0 -> 13476 bytes .../catdir/%AUV%ACMSD.ORDER.PLEDGE.PULL.RPT | Bin 0 -> 13561 bytes Ardent/UV/catdir/%AUV%ACMSD.ORDER.REMARKS | Bin 0 -> 1664 bytes Ardent/UV/catdir/%AUV%ACMSD.ORDER.SHIPTO | Bin 0 -> 5863 bytes Ardent/UV/catdir/%AUV%ACMSD.ORDER.SUB.PULL | Bin 0 -> 12151 bytes Ardent/UV/catdir/%AUV%ACMSD.ORDER.TRACKING | Bin 0 -> 3017 bytes Ardent/UV/catdir/%AUV%ACMSD.ORDER.XFER | Bin 0 -> 3222 bytes Ardent/UV/catdir/%AUV%ACMSD.ORI.FIX | Bin 0 -> 3682 bytes Ardent/UV/catdir/%AUV%ACMSD.OUTPUT.BY.DATE | Bin 0 -> 13709 bytes Ardent/UV/catdir/%AUV%ACMSD.PARTNER.SUMMARY | Bin 0 -> 4468 bytes Ardent/UV/catdir/%AUV%ACMSD.PATHS.MAINT | Bin 0 -> 4191 bytes Ardent/UV/catdir/%AUV%ACMSD.PEFT.SELECT | Bin 0 -> 9488 bytes .../UV/catdir/%AUV%ACMSD.PERIOD.TO.END.DATE | Bin 0 -> 463 bytes .../UV/catdir/%AUV%ACMSD.PERIOD.TO.START.DATE | Bin 0 -> 399 bytes Ardent/UV/catdir/%AUV%ACMSD.PG.MAINT | Bin 0 -> 3011 bytes Ardent/UV/catdir/%AUV%ACMSD.PHONE.TYPE.MAINT | Bin 0 -> 4706 bytes Ardent/UV/catdir/%AUV%ACMSD.PHONE.UPDATE | Bin 0 -> 7364 bytes Ardent/UV/catdir/%AUV%ACMSD.PICKING | Bin 0 -> 17374 bytes Ardent/UV/catdir/%AUV%ACMSD.PICKING.042198 | Bin 0 -> 15954 bytes Ardent/UV/catdir/%AUV%ACMSD.PICKING.050498 | Bin 0 -> 16036 bytes Ardent/UV/catdir/%AUV%ACMSD.PICKING.081398 | Bin 0 -> 16038 bytes .../UV/catdir/%AUV%ACMSD.PICKING.DETAIL.RPT | Bin 0 -> 5749 bytes .../UV/catdir/%AUV%ACMSD.PICKING.FLAT.BUILD | Bin 0 -> 12370 bytes .../%AUV%ACMSD.PICKING.FLAT.BUILD.052199 | Bin 0 -> 12259 bytes .../%AUV%ACMSD.PICKING.FLAT.BUILD.052499 | Bin 0 -> 11652 bytes .../%AUV%ACMSD.PICKING.FLAT.BUILD.060299 | Bin 0 -> 12602 bytes .../%AUV%ACMSD.PICKING.FLAT.BUILD.061599 | Bin 0 -> 11806 bytes Ardent/UV/catdir/%AUV%ACMSD.PICKING.JBP | Bin 0 -> 17455 bytes Ardent/UV/catdir/%AUV%ACMSD.PICKING.PRINT | Bin 0 -> 12982 bytes .../UV/catdir/%AUV%ACMSD.PICKING.PRINT.090399 | Bin 0 -> 12989 bytes .../UV/catdir/%AUV%ACMSD.PICKING.PRINT.2.14 | Bin 0 -> 12698 bytes Ardent/UV/catdir/%AUV%ACMSD.PICKING.PRINT.LDM | Bin 0 -> 9647 bytes .../UV/catdir/%AUV%ACMSD.PICKING.PRT.CONTROL | Bin 0 -> 2522 bytes .../%AUV%ACMSD.PICKING.PRT.CONTROL.072799 | Bin 0 -> 3348 bytes Ardent/UV/catdir/%AUV%ACMSD.PICKING.REPRINT | Bin 0 -> 1771 bytes Ardent/UV/catdir/%AUV%ACMSD.PICKING.SUB.BUILD | Bin 0 -> 10441 bytes .../%AUV%ACMSD.PICKING.SUB.BUILD.052499 | Bin 0 -> 8614 bytes .../%AUV%ACMSD.PICKING.SUB.BUILD.062299 | Bin 0 -> 9182 bytes .../%AUV%ACMSD.PICKING.SUB.BUILD.090399 | Bin 0 -> 10287 bytes .../catdir/%AUV%ACMSD.PICKING.SUB.BUILD.BRAD | Bin 0 -> 8393 bytes .../catdir/%AUV%ACMSD.PICKING.SUB.BUILD.TEST | Bin 0 -> 9405 bytes Ardent/UV/catdir/%AUV%ACMSD.PLEDGE.EOM | Bin 0 -> 6645 bytes Ardent/UV/catdir/%AUV%ACMSD.PLEDGE.FLAT | Bin 0 -> 4552 bytes Ardent/UV/catdir/%AUV%ACMSD.PLEDGE.FLAT.BUILD | Bin 0 -> 9962 bytes Ardent/UV/catdir/%AUV%ACMSD.PLEDGE.FLAT.MAINT | Bin 0 -> 11179 bytes Ardent/UV/catdir/%AUV%ACMSD.PLEDGE.PAID | Bin 0 -> 6738 bytes Ardent/UV/catdir/%AUV%ACMSD.PM.2ND.ADDRESS | Bin 0 -> 6474 bytes Ardent/UV/catdir/%AUV%ACMSD.PM.ORDER.INSERT | Bin 0 -> 4553 bytes Ardent/UV/catdir/%AUV%ACMSD.PM.REACTIVATE | Bin 0 -> 7425 bytes Ardent/UV/catdir/%AUV%ACMSD.PM.SHIPTO | Bin 0 -> 5467 bytes Ardent/UV/catdir/%AUV%ACMSD.PMO.HUNG | Bin 0 -> 4811 bytes Ardent/UV/catdir/%AUV%ACMSD.PMO.ITEM.FLAT | Bin 0 -> 4771 bytes Ardent/UV/catdir/%AUV%ACMSD.PMO.SHIP | Bin 0 -> 8526 bytes Ardent/UV/catdir/%AUV%ACMSD.PMO.SHIP.INDIV | Bin 0 -> 12421 bytes Ardent/UV/catdir/%AUV%ACMSD.PMT.FLAT | Bin 0 -> 4346 bytes Ardent/UV/catdir/%AUV%ACMSD.PMXREF.SEARCH | Bin 0 -> 2317 bytes Ardent/UV/catdir/%AUV%ACMSD.PO.RPT1 | Bin 0 -> 3909 bytes Ardent/UV/catdir/%AUV%ACMSD.PO.RPT2 | Bin 0 -> 3783 bytes Ardent/UV/catdir/%AUV%ACMSD.POSTAGE.CLIENT | Bin 0 -> 4549 bytes Ardent/UV/catdir/%AUV%ACMSD.POSTAGE.TRANS | Bin 0 -> 2684 bytes Ardent/UV/catdir/%AUV%ACMSD.PP.BRAD | Bin 0 -> 12687 bytes Ardent/UV/catdir/%AUV%ACMSD.PRE.PRINT.ORD | Bin 0 -> 4059 bytes Ardent/UV/catdir/%AUV%ACMSD.PRECLOSE.EDIT | Bin 0 -> 1936 bytes Ardent/UV/catdir/%AUV%ACMSD.PRINTER.MAINT | Bin 0 -> 5234 bytes .../UV/catdir/%AUV%ACMSD.PRINTER.MAINT.072799 | Bin 0 -> 4360 bytes .../UV/catdir/%AUV%ACMSD.PRINTER.MAINT.WADE | Bin 0 -> 5200 bytes Ardent/UV/catdir/%AUV%ACMSD.PROCESS.INST.DISP | Bin 0 -> 4023 bytes Ardent/UV/catdir/%AUV%ACMSD.PRODUCTS.SHIPPED | Bin 0 -> 5770 bytes Ardent/UV/catdir/%AUV%ACMSD.PROJECT.ANALYSIS | Bin 0 -> 10594 bytes .../UV/catdir/%AUV%ACMSD.PROJECT.ANALYSIS.NEW | Bin 0 -> 9804 bytes Ardent/UV/catdir/%AUV%ACMSD.PURCHASE.MAINT | Bin 0 -> 10850 bytes .../catdir/%AUV%ACMSD.PURCHASE.MAINT.3.17.97 | Bin 0 -> 10307 bytes Ardent/UV/catdir/%AUV%ACMSD.PURCHASE.PARTS | Bin 0 -> 9470 bytes Ardent/UV/catdir/%AUV%ACMSD.PURGE.FLATFILE | Bin 0 -> 10295 bytes .../UV/catdir/%AUV%ACMSD.PURGE.SHIPPER.INDEX | Bin 0 -> 2180 bytes Ardent/UV/catdir/%AUV%ACMSD.QUICK.ENTRY.RHM | Bin 0 -> 7211 bytes Ardent/UV/catdir/%AUV%ACMSD.R8.SUMMARY | Bin 0 -> 23249 bytes Ardent/UV/catdir/%AUV%ACMSD.R8.SUMMARY.INIT | Bin 0 -> 2238 bytes .../UV/catdir/%AUV%ACMSD.R8.SUMMARY.REPORT1 | Bin 0 -> 10115 bytes .../%AUV%ACMSD.R8.SUMMARY.REPORT1.3.13.97 | Bin 0 -> 10123 bytes .../UV/catdir/%AUV%ACMSD.R8.SUMMARY.REPORT10 | Bin 0 -> 11465 bytes .../UV/catdir/%AUV%ACMSD.R8.SUMMARY.REPORT2 | Bin 0 -> 9590 bytes .../UV/catdir/%AUV%ACMSD.R8.SUMMARY.REPORT3 | Bin 0 -> 9649 bytes .../UV/catdir/%AUV%ACMSD.R8.SUMMARY.REPORT4 | Bin 0 -> 12367 bytes .../UV/catdir/%AUV%ACMSD.R8.SUMMARY.REPORT5 | Bin 0 -> 5654 bytes .../UV/catdir/%AUV%ACMSD.R8.SUMMARY.REPORT6 | Bin 0 -> 10787 bytes .../%AUV%ACMSD.R8.SUMMARY.REPORT6.060998 | Bin 0 -> 10130 bytes .../%AUV%ACMSD.R8.SUMMARY.REPORT6.061098 | Bin 0 -> 10738 bytes .../UV/catdir/%AUV%ACMSD.R8.SUMMARY.REPORT7 | Bin 0 -> 10861 bytes .../catdir/%AUV%ACMSD.R8.SUMMARY.REPORT7.WADE | Bin 0 -> 10810 bytes .../UV/catdir/%AUV%ACMSD.R8.SUMMARY.REPORT8 | Bin 0 -> 12861 bytes .../UV/catdir/%AUV%ACMSD.R8.SUMMARY.REPORT9 | Bin 0 -> 12944 bytes .../UV/catdir/%AUV%ACMSD.R8.SUMMARY.REPORTS | Bin 0 -> 16608 bytes .../%AUV%ACMSD.R8.SUMMARY.REPORTS.3.13.97 | Bin 0 -> 16585 bytes .../catdir/%AUV%ACMSD.R8.SUMMARY.REPORTS.WADE | Bin 0 -> 16618 bytes Ardent/UV/catdir/%AUV%ACMSD.REACTIVATION.RPT | Bin 0 -> 5209 bytes Ardent/UV/catdir/%AUV%ACMSD.RECEIPT.SUMMARY | Bin 0 -> 3213 bytes Ardent/UV/catdir/%AUV%ACMSD.REG.SCREEN.UPDATE | Bin 0 -> 17067 bytes .../%AUV%ACMSD.REG.SCREEN.UPDATE.051499 | Bin 0 -> 10171 bytes .../%AUV%ACMSD.REG.SCREEN.UPDATE.051999 | Bin 0 -> 16457 bytes .../catdir/%AUV%ACMSD.REG.SCREEN.UPDATE.BAK | Bin 0 -> 14270 bytes .../UV/catdir/%AUV%ACMSD.REGISTRATION.MAINT | Bin 0 -> 5543 bytes .../UV/catdir/%AUV%ACMSD.REORDER.WORK.BUILD | Bin 0 -> 4694 bytes .../UV/catdir/%AUV%ACMSD.RESET.INV.AVAIL.SUB | Bin 0 -> 1602 bytes .../catdir/%AUV%ACMSD.RETRIEVE.REPORT.BUILD | Bin 0 -> 1830 bytes Ardent/UV/catdir/%AUV%ACMSD.RMV.END.SEG | Bin 0 -> 3787 bytes Ardent/UV/catdir/%AUV%ACMSD.ROYALTY.LOAD | Bin 0 -> 7688 bytes Ardent/UV/catdir/%AUV%ACMSD.ROYALTY.MAINT | Bin 0 -> 11744 bytes Ardent/UV/catdir/%AUV%ACMSD.ROYALTY.POST | Bin 0 -> 4961 bytes Ardent/UV/catdir/%AUV%ACMSD.ROYALTY.RECALC | Bin 0 -> 7796 bytes Ardent/UV/catdir/%AUV%ACMSD.ROYALTY.RPT | Bin 0 -> 9651 bytes Ardent/UV/catdir/%AUV%ACMSD.ROYALTY.UNPOST | Bin 0 -> 3259 bytes Ardent/UV/catdir/%AUV%ACMSD.RSP.BY.SEG.RPT | Bin 0 -> 16779 bytes Ardent/UV/catdir/%AUV%ACMSD.SALES.RPT1 | Bin 0 -> 10971 bytes Ardent/UV/catdir/%AUV%ACMSD.SALES.RPT2 | Bin 0 -> 12392 bytes Ardent/UV/catdir/%AUV%ACMSD.SEGMENT.FLAT | Bin 0 -> 3966 bytes Ardent/UV/catdir/%AUV%ACMSD.SHIP.CUSTOM | Bin 0 -> 1063 bytes .../catdir/%AUV%ACMSD.SHIP.MODE.MAINTENANCE | Bin 0 -> 3473 bytes Ardent/UV/catdir/%AUV%ACMSD.SHIPPING.AUTOCALC | Bin 0 -> 2101 bytes Ardent/UV/catdir/%AUV%ACMSD.SHIPPING.INFO | Bin 0 -> 1294 bytes Ardent/UV/catdir/%AUV%ACMSD.SSN.UPDATE | Bin 0 -> 1990 bytes Ardent/UV/catdir/%AUV%ACMSD.STATION.DISPLAY | Bin 0 -> 3386 bytes Ardent/UV/catdir/%AUV%ACMSD.STATUS.DESC | Bin 0 -> 3021 bytes .../UV/catdir/%AUV%ACMSD.STATUS.DESC.110299 | Bin 0 -> 2725 bytes Ardent/UV/catdir/%AUV%ACMSD.STATUS.FLAT | Bin 0 -> 3890 bytes .../UV/catdir/%AUV%ACMSD.STATUS.REASON.MAINT | Bin 0 -> 2215 bytes Ardent/UV/catdir/%AUV%ACMSD.SUB.CONV | Bin 0 -> 1450 bytes .../UV/catdir/%AUV%ACMSD.SUB.RENEWAL.SELECT | Bin 0 -> 4037 bytes Ardent/UV/catdir/%AUV%ACMSD.SUB.SHIPTO | Bin 0 -> 6430 bytes Ardent/UV/catdir/%AUV%ACMSD.SUB.TABLE.MAINT | Bin 0 -> 9080 bytes Ardent/UV/catdir/%AUV%ACMSD.SUB001 | Bin 0 -> 6701 bytes Ardent/UV/catdir/%AUV%ACMSD.SUB002 | Bin 0 -> 8763 bytes Ardent/UV/catdir/%AUV%ACMSD.SUMMARY.SALES.RPT | Bin 0 -> 6700 bytes Ardent/UV/catdir/%AUV%ACMSD.TAX.BUILD | Bin 0 -> 17097 bytes Ardent/UV/catdir/%AUV%ACMSD.TAX.FLAT | Bin 0 -> 7876 bytes Ardent/UV/catdir/%AUV%ACMSD.TAX.RECEIPT | Bin 0 -> 13842 bytes Ardent/UV/catdir/%AUV%ACMSD.TAX.RECEIPT.CFC | Bin 0 -> 15379 bytes Ardent/UV/catdir/%AUV%ACMSD.TD800.INTERFACE | Bin 0 -> 8388 bytes .../catdir/%AUV%ACMSD.TD800.INTERFACE.121898 | Bin 0 -> 6138 bytes Ardent/UV/catdir/%AUV%ACMSD.TD888.INTERFACE | Bin 0 -> 8130 bytes .../catdir/%AUV%ACMSD.TD888.INTERFACE.121898 | Bin 0 -> 6138 bytes Ardent/UV/catdir/%AUV%ACMSD.TDJINT.INTERFACE | Bin 0 -> 7470 bytes Ardent/UV/catdir/%AUV%ACMSD.TRANS | Bin 0 -> 37389 bytes Ardent/UV/catdir/%AUV%ACMSD.TRANS.022098 | Bin 0 -> 36137 bytes Ardent/UV/catdir/%AUV%ACMSD.TRANS.060898 | Bin 0 -> 36407 bytes Ardent/UV/catdir/%AUV%ACMSD.TRANS.060998 | Bin 0 -> 36611 bytes Ardent/UV/catdir/%AUV%ACMSD.TRANS.FLAT | Bin 0 -> 5627 bytes Ardent/UV/catdir/%AUV%ACMSD.TRANS.FLATFILE | Bin 0 -> 5246 bytes Ardent/UV/catdir/%AUV%ACMSD.TRANS.HIST.FLAT | Bin 0 -> 5502 bytes Ardent/UV/catdir/%AUV%ACMSD.UNPRINT.ORDERS | Bin 0 -> 5139 bytes Ardent/UV/catdir/%AUV%ACMSD.UNSHIP.PMO | Bin 0 -> 5317 bytes Ardent/UV/catdir/%AUV%ACMSD.UNSHIP.RPT1 | Bin 0 -> 10545 bytes Ardent/UV/catdir/%AUV%ACMSD.UNSHIP.RPT1.WADE | Bin 0 -> 10600 bytes Ardent/UV/catdir/%AUV%ACMSD.UNSHIP.RPT2 | Bin 0 -> 18141 bytes .../UV/catdir/%AUV%ACMSD.UNSHIP.RPT2.10081999 | Bin 0 -> 10818 bytes Ardent/UV/catdir/%AUV%ACMSD.UNSHIP.RPT2.JBP | Bin 0 -> 17964 bytes Ardent/UV/catdir/%AUV%ACMSD.UNSHIP.RPT2.WADE | Bin 0 -> 10710 bytes Ardent/UV/catdir/%AUV%ACMSD.UNSHIPPED.RPT | Bin 0 -> 6644 bytes Ardent/UV/catdir/%AUV%ACMSD.UNSHIPPED.RPT2 | Bin 0 -> 5604 bytes Ardent/UV/catdir/%AUV%ACMSD.UPDATE.ACCOUNTS | Bin 0 -> 1862 bytes .../%AUV%ACMSD.UPDATE.ACCOUNTS.DICT.ITEMS | Bin 0 -> 2676 bytes .../catdir/%AUV%ACMSD.UPDATE.ACCOUNTS.OTHER | Bin 0 -> 1920 bytes .../catdir/%AUV%ACMSD.UPDATE.ACCOUNTS.OTHER2 | Bin 0 -> 1934 bytes .../%AUV%ACMSD.UPDATE.ACCOUNTS.PARAGRAPHS | Bin 0 -> 1996 bytes Ardent/UV/catdir/%AUV%ACMSD.UPDATE.LETTERS | Bin 0 -> 6148 bytes Ardent/UV/catdir/%AUV%ACMSD.UPDATE.PARAMS | Bin 0 -> 7522 bytes Ardent/UV/catdir/%AUV%ACMSD.VEND | Bin 0 -> 184 bytes Ardent/UV/catdir/%AUV%ACMSD.VENDOR.MAINT | Bin 0 -> 8817 bytes .../catdir/%AUV%ACMSD.YEAR.END.AUDIT.REPORT | Bin 0 -> 4443 bytes Ardent/UV/catdir/%AUV%ACNV.COMPILER | Bin 0 -> 2256 bytes Ardent/UV/catdir/%AUV%ACNV.MAILERS.ZIP | Bin 0 -> 4101 bytes Ardent/UV/catdir/%AUV%ACOA.ONLINE.DOCUMENT | Bin 0 -> 3865 bytes Ardent/UV/catdir/%AUV%ACODE.UPDATE | Bin 0 -> 2236 bytes Ardent/UV/catdir/%AUV%ACODE.UPDATE.GEN | Bin 0 -> 2501 bytes Ardent/UV/catdir/%AUV%ACODE.UPDATE2 | Bin 0 -> 2511 bytes Ardent/UV/catdir/%AUV%ACOLOR.TEST | Bin 0 -> 1152 bytes Ardent/UV/catdir/%AUV%ACOMP.READ | Bin 0 -> 626 bytes Ardent/UV/catdir/%AUV%ACOMP.READ.SHORT | Bin 0 -> 569 bytes Ardent/UV/catdir/%AUV%ACOMPARE | Bin 0 -> 2609 bytes Ardent/UV/catdir/%AUV%ACONSTRUCT.REG.ORDERS | Bin 0 -> 5901 bytes Ardent/UV/catdir/%AUV%ACOPYME | Bin 0 -> 630 bytes Ardent/UV/catdir/%AUV%ACOUNT.ATTRIBS | Bin 0 -> 1970 bytes Ardent/UV/catdir/%AUV%ACOUNT.BO | Bin 0 -> 1530 bytes Ardent/UV/catdir/%AUV%ACOUNT.LINES | Bin 0 -> 1295 bytes Ardent/UV/catdir/%AUV%ACOUNT.STATUS | Bin 0 -> 1860 bytes Ardent/UV/catdir/%AUV%ACOUNT.VALUES | Bin 0 -> 1376 bytes .../UV/catdir/%AUV%ACREATE.PHONETREE.FLATFILE | Bin 0 -> 5543 bytes Ardent/UV/catdir/%AUV%ACREATE.PM.RECORD | Bin 0 -> 3472 bytes Ardent/UV/catdir/%AUV%ACRI.LOAD.CALL | Bin 0 -> 2479 bytes Ardent/UV/catdir/%AUV%ACRI.MEDIA.ANALYSIS | Bin 0 -> 2315 bytes Ardent/UV/catdir/%AUV%ACRM.CORRECT.IO.ORDERS | Bin 0 -> 3908 bytes Ardent/UV/catdir/%AUV%ACRM.CORRECT.IO.TRANS | Bin 0 -> 3883 bytes Ardent/UV/catdir/%AUV%ACRM.PARTNER.GIVING | Bin 0 -> 7709 bytes Ardent/UV/catdir/%AUV%ACS.FORM | Bin 0 -> 182 bytes Ardent/UV/catdir/%AUV%ACS.FORM.txt | Bin 0 -> 186 bytes Ardent/UV/catdir/%AUV%ACTV.NNAME.RPT | Bin 0 -> 9366 bytes Ardent/UV/catdir/%AUV%ACTV.NNAME.RPT.BAK | Bin 0 -> 2178 bytes Ardent/UV/catdir/%AUV%ACTV.PLG.RPT | Bin 0 -> 13179 bytes Ardent/UV/catdir/%AUV%ACURRENCY.MAINT | Bin 0 -> 4223 bytes Ardent/UV/catdir/%AUV%ACUSTOM.COMPILER | Bin 0 -> 2251 bytes Ardent/UV/catdir/%AUV%AD.E.B.TEST | Bin 0 -> 1204 bytes Ardent/UV/catdir/%AUV%ADAILYOP.INDIV | Bin 0 -> 5630 bytes Ardent/UV/catdir/%AUV%ADAILYOP.RECEIPTS | Bin 0 -> 20188 bytes .../UV/catdir/%AUV%ADAILYOP.RECEIPTS.012999 | Bin 0 -> 22826 bytes .../UV/catdir/%AUV%ADAILYOP.RECEIPTS.061599 | Bin 0 -> 22961 bytes .../UV/catdir/%AUV%ADAILYOP.RECEIPTS.061699 | Bin 0 -> 22961 bytes .../UV/catdir/%AUV%ADAILYOP.RECEIPTS.071499 | Bin 0 -> 23891 bytes .../UV/catdir/%AUV%ADAILYOP.RECEIPTS.072397 | Bin 0 -> 20273 bytes Ardent/UV/catdir/%AUV%ADAILYOP.RECEIPTS.WADE | Bin 0 -> 16931 bytes Ardent/UV/catdir/%AUV%ADAILYOP2 | Bin 0 -> 19789 bytes Ardent/UV/catdir/%AUV%ADASH.EVENT.CODE.FIX | Bin 0 -> 3929 bytes Ardent/UV/catdir/%AUV%ADATAMART.EVENT.DETAIL | Bin 0 -> 8328 bytes Ardent/UV/catdir/%AUV%ADATAMART.INIT | Bin 0 -> 4993 bytes Ardent/UV/catdir/%AUV%ADATAMART.REBUILD | Bin 0 -> 3079 bytes Ardent/UV/catdir/%AUV%ADATAMART.REPORTS | Bin 0 -> 23365 bytes .../UV/catdir/%AUV%ADATAMART.REPORTS.042798 | Bin 0 -> 5784 bytes Ardent/UV/catdir/%AUV%ADATE.FUNCTIONS | Bin 0 -> 278 bytes Ardent/UV/catdir/%AUV%ADATE.TEST | Bin 0 -> 1110 bytes Ardent/UV/catdir/%AUV%ADATE.TO.PERIOD | Bin 0 -> 367 bytes Ardent/UV/catdir/%AUV%ADATER | Bin 0 -> 375 bytes Ardent/UV/catdir/%AUV%ADB.MERGE | Bin 0 -> 5247 bytes Ardent/UV/catdir/%AUV%ADBDEL | Bin 0 -> 1694 bytes Ardent/UV/catdir/%AUV%ADBUND | Bin 0 -> 4422 bytes Ardent/UV/catdir/%AUV%ADCOM.INV.SERIAL.NUMS | Bin 0 -> 2104 bytes Ardent/UV/catdir/%AUV%ADCOM.IVT.MULTI | Bin 0 -> 15823 bytes Ardent/UV/catdir/%AUV%ADCOM.PMO.SHIP | Bin 0 -> 7192 bytes Ardent/UV/catdir/%AUV%ADCOM.PMO.SHIP.INDIV | Bin 0 -> 10105 bytes Ardent/UV/catdir/%AUV%ADCOM.SHIP.CUSTOM | Bin 0 -> 4018 bytes Ardent/UV/catdir/%AUV%ADEFAULT.UPDATE | Bin 0 -> 5555 bytes Ardent/UV/catdir/%AUV%ADEL.BTREE | Bin 0 -> 1729 bytes Ardent/UV/catdir/%AUV%ADEL.ROOT | Bin 0 -> 1542 bytes Ardent/UV/catdir/%AUV%ADELETE.BATCH.WAREHOUSE | Bin 0 -> 307 bytes Ardent/UV/catdir/%AUV%ADELETE.DAILY.WAREHOUSE | Bin 0 -> 304 bytes Ardent/UV/catdir/%AUV%ADELETE.PM | Bin 0 -> 3397 bytes Ardent/UV/catdir/%AUV%ADEMOG.DICT.IDESC | Bin 0 -> 1790 bytes Ardent/UV/catdir/%AUV%ADEPT.LIST | Bin 0 -> 1423 bytes Ardent/UV/catdir/%AUV%ADEPT.UPDATE | Bin 0 -> 3521 bytes Ardent/UV/catdir/%AUV%ADESCENDING.ORDER | Bin 0 -> 5364 bytes Ardent/UV/catdir/%AUV%ADETAIL.SALES.RPT | Bin 0 -> 7875 bytes .../UV/catdir/%AUV%ADETAIL.SALES.RPT.3.12.97 | Bin 0 -> 7761 bytes Ardent/UV/catdir/%AUV%ADIA.INV.TRANS | Bin 0 -> 4307 bytes Ardent/UV/catdir/%AUV%ADIA.PHYSICAL.QTYS | Bin 0 -> 5538 bytes Ardent/UV/catdir/%AUV%ADIA.RINDEX.INV.SUB | Bin 0 -> 2576 bytes Ardent/UV/catdir/%AUV%ADICT.COMPARE | Bin 0 -> 3855 bytes Ardent/UV/catdir/%AUV%ADICT.CREATE | Bin 0 -> 1753 bytes Ardent/UV/catdir/%AUV%ADICT.ITEM | Bin 0 -> 2322 bytes Ardent/UV/catdir/%AUV%ADICT.UPDATER | Bin 0 -> 507 bytes Ardent/UV/catdir/%AUV%ADIFF.FLAGS | Bin 0 -> 185 bytes Ardent/UV/catdir/%AUV%ADIFF.SUB | Bin 0 -> 2462 bytes Ardent/UV/catdir/%AUV%ADISPERSE.SUB | Bin 0 -> 2645 bytes .../UV/catdir/%AUV%ADISPLAY.RMI.EVENT.TABLE | Bin 0 -> 1486 bytes Ardent/UV/catdir/%AUV%ADIST.POINT.MAINT | Bin 0 -> 4211 bytes Ardent/UV/catdir/%AUV%ADMA.UPDATE | Bin 0 -> 8790 bytes Ardent/UV/catdir/%AUV%ADMAIL.LAYOUT | Bin 0 -> 187 bytes Ardent/UV/catdir/%AUV%ADO03 | Bin 0 -> 1500 bytes Ardent/UV/catdir/%AUV%ADONOR.LIST | Bin 0 -> 4012 bytes Ardent/UV/catdir/%AUV%ADONOR.REPORT | Bin 0 -> 3855 bytes Ardent/UV/catdir/%AUV%ADOVE.SOURCE.MAINT | Bin 0 -> 4546 bytes Ardent/UV/catdir/%AUV%ADRC.ML.PULL | Bin 0 -> 6776 bytes Ardent/UV/catdir/%AUV%ADRC.PMO.FLAT | Bin 0 -> 6701 bytes Ardent/UV/catdir/%AUV%ADRC.PRECLOSE.EDIT | Bin 0 -> 2567 bytes Ardent/UV/catdir/%AUV%ADSBTEMP | Bin 0 -> 8792 bytes Ardent/UV/catdir/%AUV%ADUP.ELIM.REPORT | Bin 0 -> 6757 bytes Ardent/UV/catdir/%AUV%AEAGLE.ACTIVITY.RPT | Bin 0 -> 14112 bytes Ardent/UV/catdir/%AUV%AEAGLE.CLUB.POINTS | Bin 0 -> 2269 bytes Ardent/UV/catdir/%AUV%AEAGLE.DISP | Bin 0 -> 2166 bytes Ardent/UV/catdir/%AUV%AEAGLE.ENTRY | Bin 0 -> 8698 bytes Ardent/UV/catdir/%AUV%AEAGLE.POINTS.DISP | Bin 0 -> 2370 bytes Ardent/UV/catdir/%AUV%AEAGLE.SUMMARY.RPT | Bin 0 -> 6298 bytes Ardent/UV/catdir/%AUV%AEAGLE.VIEW | Bin 0 -> 2112 bytes Ardent/UV/catdir/%AUV%AECHO.OFF | Bin 0 -> 192 bytes Ardent/UV/catdir/%AUV%AECHO.ON | Bin 0 -> 191 bytes Ardent/UV/catdir/%AUV%AECM.TITHE.SELECT | Bin 0 -> 10082 bytes Ardent/UV/catdir/%AUV%AENTRY.FUNCTIONS | Bin 0 -> 224 bytes Ardent/UV/catdir/%AUV%AERV | Bin 0 -> 224 bytes Ardent/UV/catdir/%AUV%AEV | Bin 0 -> 177 bytes Ardent/UV/catdir/%AUV%AEV.MAINT | Bin 0 -> 22965 bytes Ardent/UV/catdir/%AUV%AEV.MAINT.RSV | Bin 0 -> 6983 bytes Ardent/UV/catdir/%AUV%AEV.MAINT.SERIES | Bin 0 -> 3641 bytes Ardent/UV/catdir/%AUV%AEV.MAINT.SERIES.TEMP | Bin 0 -> 3791 bytes Ardent/UV/catdir/%AUV%AEV.RSV | Bin 0 -> 181 bytes Ardent/UV/catdir/%AUV%AEVENT.CHANGE | Bin 0 -> 3457 bytes Ardent/UV/catdir/%AUV%AEXPAND.PMA.NAMES | Bin 0 -> 1912 bytes Ardent/UV/catdir/%AUV%AEXTRACT.FIELD.NAMES | Bin 0 -> 2351 bytes .../UV/catdir/%AUV%AFCW.APPROVED.ORDERS.RPT | Bin 0 -> 6718 bytes Ardent/UV/catdir/%AUV%AFCW.EVENT.PROD.RPT | Bin 0 -> 6668 bytes Ardent/UV/catdir/%AUV%AFCW.RESPONSE.TOTALS | Bin 0 -> 5317 bytes Ardent/UV/catdir/%AUV%AFCW.SHIP.FIX | Bin 0 -> 1866 bytes Ardent/UV/catdir/%AUV%AFCW.ZIP.RPT | Bin 0 -> 6298 bytes Ardent/UV/catdir/%AUV%AFF | Bin 0 -> 177 bytes Ardent/UV/catdir/%AUV%AFILE.COMPARE | Bin 0 -> 3014 bytes Ardent/UV/catdir/%AUV%AFILE.CONVERT | Bin 0 -> 4332 bytes Ardent/UV/catdir/%AUV%AFILE.INFO | Bin 0 -> 1769 bytes Ardent/UV/catdir/%AUV%AFILE.REVIEW | Bin 0 -> 2620 bytes Ardent/UV/catdir/%AUV%AFIND.MENU.PROCS | Bin 0 -> 1702 bytes Ardent/UV/catdir/%AUV%AFIND.ORD | Bin 0 -> 1545 bytes Ardent/UV/catdir/%AUV%AFIND.ORDERS | Bin 0 -> 2761 bytes Ardent/UV/catdir/%AUV%AFIND.UNKNOWN.FUND | Bin 0 -> 2241 bytes Ardent/UV/catdir/%AUV%AFISCAL.YR.RPT | Bin 0 -> 4412 bytes Ardent/UV/catdir/%AUV%AFIX.11509249.1 | Bin 0 -> 1426 bytes Ardent/UV/catdir/%AUV%AFIX.46081.1 | Bin 0 -> 1420 bytes Ardent/UV/catdir/%AUV%AFIX.ALL.VOCS | Bin 0 -> 1541 bytes Ardent/UV/catdir/%AUV%AFIX.ANON.TRANS | Bin 0 -> 2934 bytes Ardent/UV/catdir/%AUV%AFIX.ANON.TRANS.2 | Bin 0 -> 2924 bytes Ardent/UV/catdir/%AUV%AFIX.BA | Bin 0 -> 1596 bytes Ardent/UV/catdir/%AUV%AFIX.BA.XREF | Bin 0 -> 999 bytes Ardent/UV/catdir/%AUV%AFIX.BATCH.XREF | Bin 0 -> 1821 bytes Ardent/UV/catdir/%AUV%AFIX.CREATE.FILE | Bin 0 -> 1811 bytes Ardent/UV/catdir/%AUV%AFIX.CURRENCY.FILE | Bin 0 -> 1364 bytes Ardent/UV/catdir/%AUV%AFIX.DRC.SEG | Bin 0 -> 184 bytes Ardent/UV/catdir/%AUV%AFIX.EVENT.FILE | Bin 0 -> 1682 bytes Ardent/UV/catdir/%AUV%AFIX.IP.STATUS | Bin 0 -> 1358 bytes Ardent/UV/catdir/%AUV%AFIX.ITEM.COST | Bin 0 -> 1725 bytes Ardent/UV/catdir/%AUV%AFIX.OP | Bin 0 -> 2473 bytes Ardent/UV/catdir/%AUV%AFIX.PD.CONF.ORDERS | Bin 0 -> 1618 bytes Ardent/UV/catdir/%AUV%AFIX.PM | Bin 0 -> 3789 bytes Ardent/UV/catdir/%AUV%AFIX.RADIO | Bin 0 -> 2057 bytes Ardent/UV/catdir/%AUV%AFIX.STATE.REGION | Bin 0 -> 1819 bytes Ardent/UV/catdir/%AUV%AFIX.STATE.TABLE | Bin 0 -> 1256 bytes Ardent/UV/catdir/%AUV%AFIX.SUBS | Bin 0 -> 1988 bytes Ardent/UV/catdir/%AUV%AFIX.TRANS | Bin 0 -> 1959 bytes Ardent/UV/catdir/%AUV%AFIX.UNSHIPPED.ORDERS | Bin 0 -> 1691 bytes Ardent/UV/catdir/%AUV%AFIXME | Bin 0 -> 805 bytes Ardent/UV/catdir/%AUV%AFKEYS | Bin 0 -> 2647 bytes Ardent/UV/catdir/%AUV%AFKEYS.INV | Bin 0 -> 2648 bytes .../UV/catdir/%AUV%AFLAG.BATCHES.AS.UNPRINTED | Bin 0 -> 1724 bytes Ardent/UV/catdir/%AUV%AFMT.CODE.UPDATE | Bin 0 -> 2781 bytes Ardent/UV/catdir/%AUV%AFORCE.MATCH.INV.QTY | Bin 0 -> 1951 bytes .../UV/catdir/%AUV%AFORCE.ORDERS.TO.HISTORY | Bin 0 -> 3961 bytes Ardent/UV/catdir/%AUV%AFORCE.PRINTED.BATCHES | Bin 0 -> 2080 bytes Ardent/UV/catdir/%AUV%AFOREIGN.PARTNER | Bin 0 -> 3338 bytes Ardent/UV/catdir/%AUV%AFREQ.BY.AMOUNT | Bin 0 -> 6611 bytes Ardent/UV/catdir/%AUV%AFTP.TABLE.UPDATE.SUB | Bin 0 -> 6682 bytes Ardent/UV/catdir/%AUV%AFULL.NAME | Bin 0 -> 820 bytes Ardent/UV/catdir/%AUV%AFUNCTION.KEYS | Bin 0 -> 597 bytes Ardent/UV/catdir/%AUV%AFUND.DAILY | Bin 0 -> 8692 bytes Ardent/UV/catdir/%AUV%AFUND.DESC.CHANGE | Bin 0 -> 1432 bytes Ardent/UV/catdir/%AUV%AGCC | Bin 0 -> 1361 bytes Ardent/UV/catdir/%AUV%AGCODE.SUMMARY.RPT | Bin 0 -> 5716 bytes Ardent/UV/catdir/%AUV%AGEN.CODE.UPDATE | Bin 0 -> 3671 bytes Ardent/UV/catdir/%AUV%AGEN.COM2 | Bin 0 -> 721 bytes Ardent/UV/catdir/%AUV%AGEN.COMMON | Bin 0 -> 1113 bytes Ardent/UV/catdir/%AUV%AGEN.COMMON.MEDIA | Bin 0 -> 936 bytes Ardent/UV/catdir/%AUV%AGEN.DEFAULT.UPDATE | Bin 0 -> 4541 bytes Ardent/UV/catdir/%AUV%AGEN.EQU | Bin 0 -> 3607 bytes Ardent/UV/catdir/%AUV%AGEN.GET | Bin 0 -> 1978 bytes Ardent/UV/catdir/%AUV%AGEN.HELP.DISPLAY | Bin 0 -> 7085 bytes Ardent/UV/catdir/%AUV%AGEN.HELP.DISPLAY2 | Bin 0 -> 7100 bytes Ardent/UV/catdir/%AUV%AGEN.HELP.DISPLAY3 | Bin 0 -> 7162 bytes Ardent/UV/catdir/%AUV%AGEN.LIST.NEW | Bin 0 -> 8209 bytes Ardent/UV/catdir/%AUV%AGEN.LIST.UPDATE | Bin 0 -> 7015 bytes Ardent/UV/catdir/%AUV%AGEN.MAIN | Bin 0 -> 3787 bytes Ardent/UV/catdir/%AUV%AGEN.MOD | Bin 0 -> 11304 bytes Ardent/UV/catdir/%AUV%AGEN.PGM | Bin 0 -> 15304 bytes Ardent/UV/catdir/%AUV%AGEN.SCREEN.BUILD | Bin 0 -> 8424 bytes Ardent/UV/catdir/%AUV%AGEN.SCREEN.DISPLAY.NEW | Bin 0 -> 2191 bytes Ardent/UV/catdir/%AUV%AGEN.STRING.LOOKUP | Bin 0 -> 2560 bytes Ardent/UV/catdir/%AUV%AGEN.SUB.NEW | Bin 0 -> 9812 bytes Ardent/UV/catdir/%AUV%AGEN2 | Bin 0 -> 1264 bytes Ardent/UV/catdir/%AUV%AGENERIC.FLATFILE | Bin 0 -> 10541 bytes Ardent/UV/catdir/%AUV%AGEO | Bin 0 -> 178 bytes Ardent/UV/catdir/%AUV%AGET.37 | Bin 0 -> 1544 bytes Ardent/UV/catdir/%AUV%AGET.CS.FORM.DATA | Bin 0 -> 14076 bytes .../UV/catdir/%AUV%AGET.CS.FORM.DATA.013098 | Bin 0 -> 13672 bytes .../UV/catdir/%AUV%AGET.CS.FORM.DATA.121297 | Bin 0 -> 8640 bytes .../UV/catdir/%AUV%AGET.CS.FORM.DATA.122997 | Bin 0 -> 13156 bytes Ardent/UV/catdir/%AUV%AGET.GEO.CODE | Bin 0 -> 1461 bytes Ardent/UV/catdir/%AUV%AGET.MEMBER.POSITION | Bin 0 -> 2672 bytes Ardent/UV/catdir/%AUV%AGET.NEW.BATCH.NUM | Bin 0 -> 1958 bytes .../UV/catdir/%AUV%AGET.NEW.BATCH.NUM.051399 | Bin 0 -> 1915 bytes Ardent/UV/catdir/%AUV%AGET.PRINTER.NAME | Bin 0 -> 404 bytes Ardent/UV/catdir/%AUV%AGET.XS.FORM.DATA | Bin 0 -> 11920 bytes .../UV/catdir/%AUV%AGET.XS.FORM.DATA.040599 | Bin 0 -> 11599 bytes .../UV/catdir/%AUV%AGET.XS.FORM.DATA.041699 | Bin 0 -> 11443 bytes Ardent/UV/catdir/%AUV%AGETPGM | Bin 0 -> 626 bytes Ardent/UV/catdir/%AUV%AGF.CONV | Bin 0 -> 1408 bytes Ardent/UV/catdir/%AUV%AGF.FUND.GIVER.RPT | Bin 0 -> 5511 bytes Ardent/UV/catdir/%AUV%AGF.PLEDGE.FIX | Bin 0 -> 2045 bytes Ardent/UV/catdir/%AUV%AGF.PLEDGE.RPT | Bin 0 -> 6966 bytes Ardent/UV/catdir/%AUV%AGF.PLEDGE.RPT.041399 | Bin 0 -> 5323 bytes Ardent/UV/catdir/%AUV%AGF.SPEC.FLATFILE | Bin 0 -> 9146 bytes Ardent/UV/catdir/%AUV%AGIVING.HIST.BUILD | Bin 0 -> 4903 bytes Ardent/UV/catdir/%AUV%AGIVING.HIST.RPT1 | Bin 0 -> 4159 bytes Ardent/UV/catdir/%AUV%AGIVING.HIST.RPT2 | Bin 0 -> 2812 bytes Ardent/UV/catdir/%AUV%AGK.SHIPPING.INFO | Bin 0 -> 1482 bytes Ardent/UV/catdir/%AUV%AGMA.PICKING.PRINT | Bin 0 -> 13038 bytes Ardent/UV/catdir/%AUV%AGRFX | Bin 0 -> 218 bytes Ardent/UV/catdir/%AUV%AHDEC.TITHE.SELECT | Bin 0 -> 10203 bytes Ardent/UV/catdir/%AUV%AHDFC.ORIGIN.DETAIL | Bin 0 -> 3395 bytes Ardent/UV/catdir/%AUV%AHDFC.RPT | Bin 0 -> 12293 bytes Ardent/UV/catdir/%AUV%AHDG3 | Bin 0 -> 1330 bytes Ardent/UV/catdir/%AUV%AHIDE.INV.ITEMS | Bin 0 -> 4062 bytes Ardent/UV/catdir/%AUV%AHM.AGING.REPORT | Bin 0 -> 7978 bytes Ardent/UV/catdir/%AUV%AHM.AGING.RPT | Bin 0 -> 9650 bytes Ardent/UV/catdir/%AUV%AHM.INV.RPT | Bin 0 -> 4111 bytes Ardent/UV/catdir/%AUV%AHM.INVOICE.CREDIT | Bin 0 -> 10150 bytes Ardent/UV/catdir/%AUV%AHM.SALES.RPT | Bin 0 -> 4876 bytes Ardent/UV/catdir/%AUV%AHPW.PICKING.PRINT | Bin 0 -> 12978 bytes Ardent/UV/catdir/%AUV%AIA | Bin 0 -> 177 bytes Ardent/UV/catdir/%AUV%AIC | Bin 0 -> 177 bytes Ardent/UV/catdir/%AUV%AICARE.RPT | Bin 0 -> 5053 bytes Ardent/UV/catdir/%AUV%AICM.ABS.2 | Bin 0 -> 11451 bytes Ardent/UV/catdir/%AUV%AICM.APPEAL.SEG.BDOWN | Bin 0 -> 11103 bytes .../catdir/%AUV%AICM.APPEAL.SEG.BDOWN.091697 | Bin 0 -> 9021 bytes .../catdir/%AUV%AICM.APPEAL.SEG.BDOWN.91797 | Bin 0 -> 9793 bytes Ardent/UV/catdir/%AUV%AICM.ASB.2 | Bin 0 -> 10417 bytes Ardent/UV/catdir/%AUV%AICM.CALL.RPT | Bin 0 -> 2989 bytes Ardent/UV/catdir/%AUV%AICM.CALL.RPT.BUILD | Bin 0 -> 6067 bytes Ardent/UV/catdir/%AUV%AICM.DONOR.VALUE.RPT | Bin 0 -> 10613 bytes Ardent/UV/catdir/%AUV%AICM.EVENT.CHANGE | Bin 0 -> 4256 bytes Ardent/UV/catdir/%AUV%AICM.FLATFILE | Bin 0 -> 2978 bytes Ardent/UV/catdir/%AUV%AICM.FTP.TABLE.ADD | Bin 0 -> 1860 bytes Ardent/UV/catdir/%AUV%AICM.FTP.TABLE.BUILD | Bin 0 -> 2053 bytes Ardent/UV/catdir/%AUV%AICM.FTP.TABLE.DEL | Bin 0 -> 1788 bytes Ardent/UV/catdir/%AUV%AICM.FTP.TABLE.MAINT | Bin 0 -> 1994 bytes Ardent/UV/catdir/%AUV%AICM.INT.TABLE.ADD | Bin 0 -> 1865 bytes Ardent/UV/catdir/%AUV%AICM.INT.TABLE.BUILD | Bin 0 -> 2058 bytes Ardent/UV/catdir/%AUV%AICM.INT.TABLE.DEL | Bin 0 -> 1793 bytes Ardent/UV/catdir/%AUV%AICM.INT.TABLE.EXCEPT | Bin 0 -> 1684 bytes .../UV/catdir/%AUV%AICM.INT.TABLE.EXCEPT.ADD | Bin 0 -> 1888 bytes .../catdir/%AUV%AICM.INT.TABLE.EXCEPT.BUILD | Bin 0 -> 1794 bytes .../UV/catdir/%AUV%AICM.INT.TABLE.EXCEPT.DEL | Bin 0 -> 1809 bytes Ardent/UV/catdir/%AUV%AICM.INT.TABLE.MAINT | Bin 0 -> 1996 bytes .../UV/catdir/%AUV%AICM.INTERNET.TABLE.MAINT | Bin 0 -> 2025 bytes Ardent/UV/catdir/%AUV%AICM.INV.LIABILITY.RPT | Bin 0 -> 5705 bytes Ardent/UV/catdir/%AUV%AICM.MATRIXX.TABLE.ADD | Bin 0 -> 1864 bytes .../UV/catdir/%AUV%AICM.MATRIXX.TABLE.BUILD | Bin 0 -> 2053 bytes Ardent/UV/catdir/%AUV%AICM.MATRIXX.TABLE.DEL | Bin 0 -> 1788 bytes .../UV/catdir/%AUV%AICM.MATRIXX.TABLE.EXCEPT | Bin 0 -> 1704 bytes .../catdir/%AUV%AICM.MATRIXX.TABLE.EXCEPT.ADD | Bin 0 -> 1887 bytes .../%AUV%AICM.MATRIXX.TABLE.EXCEPT.BUILD | Bin 0 -> 1789 bytes .../catdir/%AUV%AICM.MATRIXX.TABLE.EXCEPT.DEL | Bin 0 -> 1804 bytes .../UV/catdir/%AUV%AICM.MATRIXX.TABLE.MAINT | Bin 0 -> 2024 bytes Ardent/UV/catdir/%AUV%AICM.PHONE.IMPORT | Bin 0 -> 1676 bytes Ardent/UV/catdir/%AUV%AICM.PICKING.PRINT | Bin 0 -> 10298 bytes .../UV/catdir/%AUV%AICM.PICKING.PRINT.112097 | Bin 0 -> 10454 bytes Ardent/UV/catdir/%AUV%AICM.PICKING.PRINT.2 | Bin 0 -> 10306 bytes Ardent/UV/catdir/%AUV%AICM.PICKING.PRINT.TEMP | Bin 0 -> 12876 bytes Ardent/UV/catdir/%AUV%AICM.PMO.FLAT.SPECIAL | Bin 0 -> 9221 bytes .../catdir/%AUV%AICM.PMO.FLAT.SPECIAL.021799 | Bin 0 -> 8596 bytes Ardent/UV/catdir/%AUV%AICM.PRECLOSE.EDIT | Bin 0 -> 2301 bytes Ardent/UV/catdir/%AUV%AICM.SEGMENT.RPT | Bin 0 -> 2393 bytes Ardent/UV/catdir/%AUV%AICM.SEGMENT.RPT.BUILD | Bin 0 -> 5125 bytes Ardent/UV/catdir/%AUV%AICM.TD800.TABLE.ADD | Bin 0 -> 1866 bytes Ardent/UV/catdir/%AUV%AICM.TD800.TABLE.BUILD | Bin 0 -> 2057 bytes Ardent/UV/catdir/%AUV%AICM.TD800.TABLE.DEL | Bin 0 -> 1792 bytes Ardent/UV/catdir/%AUV%AICM.TD800.TABLE.EXCEPT | Bin 0 -> 1694 bytes .../catdir/%AUV%AICM.TD800.TABLE.EXCEPT.ADD | Bin 0 -> 1889 bytes .../catdir/%AUV%AICM.TD800.TABLE.EXCEPT.BUILD | Bin 0 -> 1793 bytes .../catdir/%AUV%AICM.TD800.TABLE.EXCEPT.DEL | Bin 0 -> 1808 bytes Ardent/UV/catdir/%AUV%AICM.TD800.TABLE.MAINT | Bin 0 -> 2010 bytes Ardent/UV/catdir/%AUV%AICM.TD888.TABLE.ADD | Bin 0 -> 1866 bytes Ardent/UV/catdir/%AUV%AICM.TD888.TABLE.BUILD | Bin 0 -> 2057 bytes Ardent/UV/catdir/%AUV%AICM.TD888.TABLE.DEL | Bin 0 -> 1792 bytes Ardent/UV/catdir/%AUV%AICM.TD888.TABLE.EXCEPT | Bin 0 -> 1694 bytes .../catdir/%AUV%AICM.TD888.TABLE.EXCEPT.ADD | Bin 0 -> 1889 bytes .../catdir/%AUV%AICM.TD888.TABLE.EXCEPT.BUILD | Bin 0 -> 1793 bytes .../catdir/%AUV%AICM.TD888.TABLE.EXCEPT.DEL | Bin 0 -> 1808 bytes Ardent/UV/catdir/%AUV%AICM.TD888.TABLE.MAINT | Bin 0 -> 2010 bytes Ardent/UV/catdir/%AUV%AIDENTIFY.SOFTWARE | Bin 0 -> 4752 bytes Ardent/UV/catdir/%AUV%AIDESC.DIST.CHANNEL | Bin 0 -> 637 bytes Ardent/UV/catdir/%AUV%AIDESC.EAGLE.ACCUM | Bin 0 -> 1416 bytes Ardent/UV/catdir/%AUV%AIDESC.EAGLE.REMAIN | Bin 0 -> 1417 bytes Ardent/UV/catdir/%AUV%AIDESC.EAGLE.USED | Bin 0 -> 1415 bytes Ardent/UV/catdir/%AUV%AIDESC.GEN.TABLE | Bin 0 -> 614 bytes Ardent/UV/catdir/%AUV%AIDESC.MEMBER.PAID | Bin 0 -> 1594 bytes Ardent/UV/catdir/%AUV%AIDESC.MEMBER.PAID.DATE | Bin 0 -> 1485 bytes Ardent/UV/catdir/%AUV%AIDESC.MEMBER.POS | Bin 0 -> 1881 bytes Ardent/UV/catdir/%AUV%AIDESC.PM.HOME.PHONE | Bin 0 -> 471 bytes Ardent/UV/catdir/%AUV%AIDESC.PM.OCCUPATION | Bin 0 -> 628 bytes Ardent/UV/catdir/%AUV%AIDESC.PMO.INFO | Bin 0 -> 1784 bytes Ardent/UV/catdir/%AUV%AIDESC.RSV.AMOUNT | Bin 0 -> 511 bytes Ardent/UV/catdir/%AUV%AIDESC.RSV.CALC | Bin 0 -> 1232 bytes Ardent/UV/catdir/%AUV%AIDM.800.CLIENT.BIO | Bin 0 -> 4290 bytes Ardent/UV/catdir/%AUV%AIDM.800.STATIONS | Bin 0 -> 8546 bytes Ardent/UV/catdir/%AUV%AIFL.CCT.FORM | Bin 0 -> 7366 bytes Ardent/UV/catdir/%AUV%AIFL.LABEL.SUMMARY.RPT | Bin 0 -> 1345 bytes Ardent/UV/catdir/%AUV%AIFL.PICKING.PRINT | Bin 0 -> 15873 bytes Ardent/UV/catdir/%AUV%AIFL.PRECLOSE.EDIT | Bin 0 -> 2312 bytes Ardent/UV/catdir/%AUV%AIFL.SHIPPING.INFO | Bin 0 -> 1581 bytes Ardent/UV/catdir/%AUV%AIMA | Bin 0 -> 178 bytes Ardent/UV/catdir/%AUV%AIMPORT.TO.PM | Bin 0 -> 3228 bytes Ardent/UV/catdir/%AUV%AIND.PRODUCT.REPORT | Bin 0 -> 5956 bytes Ardent/UV/catdir/%AUV%AINPUT.FIX | Bin 0 -> 3875 bytes Ardent/UV/catdir/%AUV%AINS.BTREE | Bin 0 -> 2620 bytes Ardent/UV/catdir/%AUV%AINS.ROOT | Bin 0 -> 1657 bytes Ardent/UV/catdir/%AUV%AINSP.ORDERS.FLAT | Bin 0 -> 6625 bytes Ardent/UV/catdir/%AUV%AINSP.PARAGRAPH.RPT | Bin 0 -> 5717 bytes Ardent/UV/catdir/%AUV%AINSP.PICKING.PRINT | Bin 0 -> 11310 bytes .../UV/catdir/%AUV%AINSP.PICKING.PRINT.031999 | Bin 0 -> 13059 bytes Ardent/UV/catdir/%AUV%AINSP.PM.CONV | Bin 0 -> 4889 bytes Ardent/UV/catdir/%AUV%AINSP.PRECLOSE.EDIT | Bin 0 -> 1448 bytes Ardent/UV/catdir/%AUV%AINSP.SHAREATHON.RPT | Bin 0 -> 5765 bytes Ardent/UV/catdir/%AUV%AINSP.SURVEY.RPT | Bin 0 -> 3509 bytes Ardent/UV/catdir/%AUV%AINSP.TRANS.PROJ.RPT | Bin 0 -> 6868 bytes Ardent/UV/catdir/%AUV%AINT.TABLE.UPDATE.SUB | Bin 0 -> 6682 bytes Ardent/UV/catdir/%AUV%AINV | Bin 0 -> 178 bytes Ardent/UV/catdir/%AUV%AINV.COST.CHECK | Bin 0 -> 1790 bytes Ardent/UV/catdir/%AUV%AINV.DESC.CHANGE | Bin 0 -> 1413 bytes Ardent/UV/catdir/%AUV%AINV.FIX | Bin 0 -> 1737 bytes Ardent/UV/catdir/%AUV%AINV.INDEX.UPDATE | Bin 0 -> 7644 bytes Ardent/UV/catdir/%AUV%AINV.JOURNAL.DISPLAY | Bin 0 -> 3121 bytes .../catdir/%AUV%AINV.JOURNAL.DISPLAY.12.15.97 | Bin 0 -> 3180 bytes Ardent/UV/catdir/%AUV%AINV.JOURNAL.DISPLAY.2 | Bin 0 -> 3031 bytes Ardent/UV/catdir/%AUV%AINV.JOURNAL.RPT | Bin 0 -> 4965 bytes Ardent/UV/catdir/%AUV%AINV.JOURNAL.UPDATE | Bin 0 -> 1834 bytes .../catdir/%AUV%AINV.JOURNAL.UPDATE.12.15.97 | Bin 0 -> 1867 bytes Ardent/UV/catdir/%AUV%AINV.JOURNAL.UPDATE.2 | Bin 0 -> 1836 bytes Ardent/UV/catdir/%AUV%AINV.LOOKUP | Bin 0 -> 2192 bytes Ardent/UV/catdir/%AUV%AINV.MAINT | Bin 0 -> 16607 bytes Ardent/UV/catdir/%AUV%AINV.MOD | Bin 0 -> 24968 bytes Ardent/UV/catdir/%AUV%AINV.MOD.072498 | Bin 0 -> 19308 bytes Ardent/UV/catdir/%AUV%AINV.MOD.072798 | Bin 0 -> 21101 bytes Ardent/UV/catdir/%AUV%AINV.MOD.080598 | Bin 0 -> 24479 bytes Ardent/UV/catdir/%AUV%AINV.MOD.080798 | Bin 0 -> 24923 bytes Ardent/UV/catdir/%AUV%AINV.RCV.PRINT | Bin 0 -> 4695 bytes Ardent/UV/catdir/%AUV%AINV.TBL.SPEC.MAINT | Bin 0 -> 3775 bytes Ardent/UV/catdir/%AUV%AINV.TRANS.PROC.RPT | Bin 0 -> 4082 bytes Ardent/UV/catdir/%AUV%AINV.TRANS.RPT | Bin 0 -> 7722 bytes Ardent/UV/catdir/%AUV%AINVT.2 | Bin 0 -> 3974 bytes Ardent/UV/catdir/%AUV%AINVTRANS | Bin 0 -> 15514 bytes Ardent/UV/catdir/%AUV%AIT | Bin 0 -> 177 bytes Ardent/UV/catdir/%AUV%AITEM.COMPARE | Bin 0 -> 2348 bytes Ardent/UV/catdir/%AUV%AITEM.QUERY | Bin 0 -> 2596 bytes Ardent/UV/catdir/%AUV%AIVR | Bin 0 -> 178 bytes Ardent/UV/catdir/%AUV%AIVT | Bin 0 -> 178 bytes .../UV/catdir/%AUV%AJAP.REMOVE.SEGMENTATION | Bin 0 -> 2984 bytes Ardent/UV/catdir/%AUV%AJBP.LAM | Bin 0 -> 1963 bytes Ardent/UV/catdir/%AUV%AJBP.LAM.PGM | Bin 0 -> 4098 bytes Ardent/UV/catdir/%AUV%AJBP.PGM | Bin 0 -> 2577 bytes Ardent/UV/catdir/%AUV%AJBP.PGM1 | Bin 0 -> 877 bytes Ardent/UV/catdir/%AUV%AJBP.PGM1.LOOP | Bin 0 -> 1625 bytes Ardent/UV/catdir/%AUV%AJET-OUT | Bin 0 -> 2639 bytes Ardent/UV/catdir/%AUV%AJI.PICKING.PRINT | Bin 0 -> 12169 bytes Ardent/UV/catdir/%AUV%AJOURNAL.FIX | Bin 0 -> 2417 bytes Ardent/UV/catdir/%AUV%AJOURNAL.UPDATES.SUB | Bin 0 -> 1321 bytes Ardent/UV/catdir/%AUV%AJUMBLE.PHONE | Bin 0 -> 1551 bytes Ardent/UV/catdir/%AUV%AJVI.PRECLOSE.EDIT | Bin 0 -> 1909 bytes Ardent/UV/catdir/%AUV%AKC | Bin 0 -> 1879 bytes Ardent/UV/catdir/%AUV%AKC.ANAL | Bin 0 -> 10427 bytes Ardent/UV/catdir/%AUV%AKC.BATCH.AUDIT | Bin 0 -> 3785 bytes Ardent/UV/catdir/%AUV%AKC.BATCH.REMOVE | Bin 0 -> 2174 bytes Ardent/UV/catdir/%AUV%AKC.CC.HISTORY | Bin 0 -> 5085 bytes Ardent/UV/catdir/%AUV%AKC.CHECK.FLAT | Bin 0 -> 1786 bytes Ardent/UV/catdir/%AUV%AKC.CHECK.FLAT2 | Bin 0 -> 2172 bytes Ardent/UV/catdir/%AUV%AKC.ICM.EXT | Bin 0 -> 2446 bytes Ardent/UV/catdir/%AUV%AKC.ICM.FIX.LETTERS | Bin 0 -> 1559 bytes Ardent/UV/catdir/%AUV%AKC.MARK.AS.SHIPPED | Bin 0 -> 2500 bytes Ardent/UV/catdir/%AUV%AKC.PMO.AUTH | Bin 0 -> 3393 bytes Ardent/UV/catdir/%AUV%AKC.PROJECT.EVENT | Bin 0 -> 2430 bytes Ardent/UV/catdir/%AUV%AKC.REFORMAT | Bin 0 -> 1931 bytes Ardent/UV/catdir/%AUV%AKC.REFORMAT.PL | Bin 0 -> 1910 bytes Ardent/UV/catdir/%AUV%AKC.RELEASED.STATUS | Bin 0 -> 2187 bytes Ardent/UV/catdir/%AUV%AKC.SEGMENT.DISPLAY | Bin 0 -> 2576 bytes Ardent/UV/catdir/%AUV%AKC.TRANS.AUDIT | Bin 0 -> 3171 bytes Ardent/UV/catdir/%AUV%AKC.TRANS.SCRUB | Bin 0 -> 3625 bytes Ardent/UV/catdir/%AUV%AKEITH3 | Bin 0 -> 5281 bytes Ardent/UV/catdir/%AUV%AKEV | Bin 0 -> 13943 bytes Ardent/UV/catdir/%AUV%AKEV1 | Bin 0 -> 10725 bytes Ardent/UV/catdir/%AUV%AKEV2 | Bin 0 -> 10571 bytes Ardent/UV/catdir/%AUV%AKEY.INDICATOR.RPT | Bin 0 -> 10960 bytes Ardent/UV/catdir/%AUV%AKLA.PICKING.PRINT | Bin 0 -> 12684 bytes Ardent/UV/catdir/%AUV%AKLS.PG1 | Bin 0 -> 1705 bytes Ardent/UV/catdir/%AUV%AKLS.PGM1 | Bin 0 -> 1768 bytes Ardent/UV/catdir/%AUV%AKLS.PGM2 | Bin 0 -> 1284 bytes Ardent/UV/catdir/%AUV%AKLS.PGM3 | Bin 0 -> 1736 bytes Ardent/UV/catdir/%AUV%ALAM | Bin 0 -> 1653 bytes Ardent/UV/catdir/%AUV%ALAM.FORM | Bin 0 -> 1964 bytes Ardent/UV/catdir/%AUV%ALAM.FORM2 | Bin 0 -> 2140 bytes Ardent/UV/catdir/%AUV%ALAM.FORM3 | Bin 0 -> 1985 bytes Ardent/UV/catdir/%AUV%ALAYOUT.DATAMART | Bin 0 -> 190 bytes Ardent/UV/catdir/%AUV%ALETTER.CLEANUP | Bin 0 -> 2129 bytes Ardent/UV/catdir/%AUV%ALHB.FILE.REVIEW | Bin 0 -> 4067 bytes Ardent/UV/catdir/%AUV%ALIST.ACTIVITY.DETAIL | Bin 0 -> 2684 bytes Ardent/UV/catdir/%AUV%ALIST.ACTIVITY.MASTER | Bin 0 -> 3503 bytes Ardent/UV/catdir/%AUV%ALIST.FORM | Bin 0 -> 643 bytes Ardent/UV/catdir/%AUV%ALIST.MAINT | Bin 0 -> 4440 bytes Ardent/UV/catdir/%AUV%ALIST25 | Bin 0 -> 2559 bytes Ardent/UV/catdir/%AUV%ALOCK.TEST | Bin 0 -> 1272 bytes Ardent/UV/catdir/%AUV%ALOGNAME.TEST | Bin 0 -> 1083 bytes .../UV/catdir/%AUV%ALOGTO.RMI.EXEC.CHURCHES | Bin 0 -> 263 bytes Ardent/UV/catdir/%AUV%ALOOK.DCODES | Bin 0 -> 4626 bytes Ardent/UV/catdir/%AUV%ALOOKUP.TEST | Bin 0 -> 1173 bytes Ardent/UV/catdir/%AUV%ALOU.RPT | Bin 0 -> 4528 bytes Ardent/UV/catdir/%AUV%ALPF | Bin 0 -> 178 bytes Ardent/UV/catdir/%AUV%ALPF.072397 | Bin 0 -> 185 bytes Ardent/UV/catdir/%AUV%AMAIL.OTHER.NN.RPT | Bin 0 -> 4075 bytes Ardent/UV/catdir/%AUV%AMAIL.PRODUCT.REPORT | Bin 0 -> 8115 bytes Ardent/UV/catdir/%AUV%AMAKE.10DIGIT.PHONE | Bin 0 -> 1841 bytes Ardent/UV/catdir/%AUV%AMAKE.BA.TABLE | Bin 0 -> 579 bytes Ardent/UV/catdir/%AUV%AMAKE.REGION.TABLE | Bin 0 -> 1450 bytes Ardent/UV/catdir/%AUV%AMAKE.TITLE.TABLE | Bin 0 -> 2051 bytes Ardent/UV/catdir/%AUV%AMASTER.CFG | Bin 0 -> 185 bytes .../%AUV%AMATRIXX.TABLE.UPDATE.EXCEPT.SUB | Bin 0 -> 4739 bytes .../UV/catdir/%AUV%AMATRIXX.TABLE.UPDATE.SUB | Bin 0 -> 6690 bytes Ardent/UV/catdir/%AUV%AMAX.ATTRIBS | Bin 0 -> 1556 bytes Ardent/UV/catdir/%AUV%AMBM | Bin 0 -> 6271 bytes Ardent/UV/catdir/%AUV%AMC030 | Bin 0 -> 2008 bytes Ardent/UV/catdir/%AUV%AMC480 | Bin 0 -> 4063 bytes Ardent/UV/catdir/%AUV%AMCWE.BACKLOG.RPT1 | Bin 0 -> 4873 bytes Ardent/UV/catdir/%AUV%AMCWE.BACKORDER.RPT | Bin 0 -> 5844 bytes Ardent/UV/catdir/%AUV%AMCWE.CALL.RPT | Bin 0 -> 6150 bytes Ardent/UV/catdir/%AUV%AMCWE.CALL.RPT.111897 | Bin 0 -> 6157 bytes Ardent/UV/catdir/%AUV%AMCWE.CALL.TRACKING.RPT | Bin 0 -> 5341 bytes Ardent/UV/catdir/%AUV%AMCWE.CAMPAIGN.RPT2 | Bin 0 -> 3174 bytes Ardent/UV/catdir/%AUV%AMCWE.CONFIRM.SLIP | Bin 0 -> 7752 bytes Ardent/UV/catdir/%AUV%AMCWE.CONV.INV.YTD | Bin 0 -> 4406 bytes .../UV/catdir/%AUV%AMCWE.DAILY.ACTIVITY.RPT | Bin 0 -> 10757 bytes Ardent/UV/catdir/%AUV%AMCWE.DAILY.RPT1 | Bin 0 -> 14827 bytes Ardent/UV/catdir/%AUV%AMCWE.DAILY.RPT1.txt | Bin 0 -> 8850 bytes Ardent/UV/catdir/%AUV%AMCWE.DAILY.RPT2 | Bin 0 -> 24361 bytes Ardent/UV/catdir/%AUV%AMCWE.DAILY.RPT2.HOLD | Bin 0 -> 20394 bytes Ardent/UV/catdir/%AUV%AMCWE.DAILY.RPT3 | Bin 0 -> 13257 bytes Ardent/UV/catdir/%AUV%AMCWE.DAILY.RPT3.111797 | Bin 0 -> 13264 bytes Ardent/UV/catdir/%AUV%AMCWE.DAILY.RPT5 | Bin 0 -> 13950 bytes Ardent/UV/catdir/%AUV%AMCWE.DAILY.RPT5.txt | Bin 0 -> 23882 bytes Ardent/UV/catdir/%AUV%AMCWE.DONOR.JUNE20.txt | Bin 0 -> 19016 bytes Ardent/UV/catdir/%AUV%AMCWE.DONOR.RPT2 | Bin 0 -> 12551 bytes Ardent/UV/catdir/%AUV%AMCWE.DONOR.RPT3 | Bin 0 -> 8209 bytes Ardent/UV/catdir/%AUV%AMCWE.DONOR.RPT5 | Bin 0 -> 6960 bytes .../UV/catdir/%AUV%AMCWE.DONOR.TRACKING.RPT | Bin 0 -> 8449 bytes Ardent/UV/catdir/%AUV%AMCWE.DSPR.IDESC | Bin 0 -> 1020 bytes .../UV/catdir/%AUV%AMCWE.ELDER.TRACKING.RPT | Bin 0 -> 10174 bytes .../UV/catdir/%AUV%AMCWE.EVENT.ACTIVITY.RPT | Bin 0 -> 6726 bytes Ardent/UV/catdir/%AUV%AMCWE.EVENT.PLEDGES.RPT | Bin 0 -> 11628 bytes Ardent/UV/catdir/%AUV%AMCWE.EVENT.SUM.RPT | Bin 0 -> 8864 bytes Ardent/UV/catdir/%AUV%AMCWE.FLATFILE | Bin 0 -> 11677 bytes Ardent/UV/catdir/%AUV%AMCWE.IC.RPT2 | Bin 0 -> 6671 bytes Ardent/UV/catdir/%AUV%AMCWE.INV.RPT.FRONT | Bin 0 -> 9007 bytes Ardent/UV/catdir/%AUV%AMCWE.MAIL.OTHER.NN.RPT | Bin 0 -> 4747 bytes Ardent/UV/catdir/%AUV%AMCWE.MAILPULL | Bin 0 -> 19789 bytes Ardent/UV/catdir/%AUV%AMCWE.MAILPULL.082197 | Bin 0 -> 17751 bytes Ardent/UV/catdir/%AUV%AMCWE.MAILPULL.3235 | Bin 0 -> 19608 bytes Ardent/UV/catdir/%AUV%AMCWE.MAILPULL.3243 | Bin 0 -> 18231 bytes .../UV/catdir/%AUV%AMCWE.MAILPULL.3243.082097 | Bin 0 -> 15068 bytes .../UV/catdir/%AUV%AMCWE.MAILPULL.3243.082297 | Bin 0 -> 17756 bytes .../UV/catdir/%AUV%AMCWE.MAILPULL.3243.FINAL | Bin 0 -> 18219 bytes Ardent/UV/catdir/%AUV%AMCWE.MAILPULL.ATT5-1 | Bin 0 -> 20384 bytes Ardent/UV/catdir/%AUV%AMCWE.MAILPULL.BAK | Bin 0 -> 19696 bytes Ardent/UV/catdir/%AUV%AMCWE.MAILPULL.FOR | Bin 0 -> 19850 bytes Ardent/UV/catdir/%AUV%AMCWE.MAILPULL.SCOTT | Bin 0 -> 19799 bytes Ardent/UV/catdir/%AUV%AMCWE.MAILPULL5 | Bin 0 -> 26375 bytes Ardent/UV/catdir/%AUV%AMCWE.MEMBER.FULL.RPT | Bin 0 -> 7063 bytes Ardent/UV/catdir/%AUV%AMCWE.MFA.TO.INACTIVE | Bin 0 -> 14542 bytes Ardent/UV/catdir/%AUV%AMCWE.MSD.BACKLOG | Bin 0 -> 4680 bytes Ardent/UV/catdir/%AUV%AMCWE.NEW.SCOTT | Bin 0 -> 2467 bytes Ardent/UV/catdir/%AUV%AMCWE.NEWNAME.RPT1 | Bin 0 -> 8326 bytes Ardent/UV/catdir/%AUV%AMCWE.NEWNAME.RPT2 | Bin 0 -> 6252 bytes Ardent/UV/catdir/%AUV%AMCWE.NEWNAME.RPT3 | Bin 0 -> 6524 bytes Ardent/UV/catdir/%AUV%AMCWE.NEWNAME.RPT5 | Bin 0 -> 12958 bytes .../UV/catdir/%AUV%AMCWE.NEWNAME.RPT5.110497 | Bin 0 -> 12228 bytes .../UV/catdir/%AUV%AMCWE.NEWNAME.RPT5.111797 | Bin 0 -> 12473 bytes Ardent/UV/catdir/%AUV%AMCWE.NEWNAME.RPT5.TEST | Bin 0 -> 12592 bytes .../UV/catdir/%AUV%AMCWE.ODS.CONVERSION.RPT | Bin 0 -> 5935 bytes Ardent/UV/catdir/%AUV%AMCWE.OPER.BACKLOG.RPT1 | Bin 0 -> 4780 bytes .../%AUV%AMCWE.OPER.BACKLOG.RPT1.111797 | Bin 0 -> 4787 bytes .../catdir/%AUV%AMCWE.OPER.BACKLOG.RPT1.txt | Bin 0 -> 4827 bytes .../catdir/%AUV%AMCWE.OPERATIONS.BACKLOG.RPT1 | Bin 0 -> 4884 bytes .../%AUV%AMCWE.OUTSTANDING.POSTDATE.RPT | Bin 0 -> 5624 bytes Ardent/UV/catdir/%AUV%AMCWE.PICKING.PRINT | Bin 0 -> 10654 bytes Ardent/UV/catdir/%AUV%AMCWE.PICKING.SUMMARY | Bin 0 -> 4788 bytes Ardent/UV/catdir/%AUV%AMCWE.PLEDGE.REPORT | Bin 0 -> 9314 bytes Ardent/UV/catdir/%AUV%AMCWE.POSTDATE.RPT | Bin 0 -> 9154 bytes .../catdir/%AUV%AMCWE.POSTDATED.SUMMARY.RPT | Bin 0 -> 6643 bytes .../%AUV%AMCWE.POSTDATED.SUMMARY.RPT.111797 | Bin 0 -> 6522 bytes Ardent/UV/catdir/%AUV%AMCWE.PRECLOSE.EDIT | Bin 0 -> 1567 bytes Ardent/UV/catdir/%AUV%AMCWE.SEGMENT.BUILD | Bin 0 -> 18990 bytes Ardent/UV/catdir/%AUV%AMCWE.SEGMENT.BUILD.DHB | Bin 0 -> 17202 bytes .../UV/catdir/%AUV%AMCWE.SEGMENT.BUILD.SAVE | Bin 0 -> 12514 bytes Ardent/UV/catdir/%AUV%AMCWE.SEGMENT.DAILY | Bin 0 -> 14601 bytes Ardent/UV/catdir/%AUV%AMCWE.SEGMENT.RPT1 | Bin 0 -> 18322 bytes Ardent/UV/catdir/%AUV%AMCWE.SEGMENT.RPT1.OLD | Bin 0 -> 17977 bytes Ardent/UV/catdir/%AUV%AMCWE.SEGMENT.RPT2 | Bin 0 -> 19465 bytes Ardent/UV/catdir/%AUV%AMCWE.SEGMENT.RPT3 | Bin 0 -> 20837 bytes .../UV/catdir/%AUV%AMCWE.SEGMENT.RPT3.111797 | Bin 0 -> 20840 bytes Ardent/UV/catdir/%AUV%AMCWE.SEGMENT.RPT5 | Bin 0 -> 20115 bytes .../UV/catdir/%AUV%AMCWE.SEGMENT.RPT5.111797 | Bin 0 -> 19824 bytes Ardent/UV/catdir/%AUV%AMCWE.STEP.CHART | Bin 0 -> 13081 bytes Ardent/UV/catdir/%AUV%AMCWE.TV.ACTIVITY.RPT | Bin 0 -> 10515 bytes Ardent/UV/catdir/%AUV%AMCWE.TV.ACTIVITY.RPT2 | Bin 0 -> 11122 bytes Ardent/UV/catdir/%AUV%AMCWE.TV.CALENDAR.RPT | Bin 0 -> 8705 bytes Ardent/UV/catdir/%AUV%AMCWE.TV.FREQUENCY.RPT | Bin 0 -> 8478 bytes Ardent/UV/catdir/%AUV%AMCWE.TV.PROGRAM.RPT | Bin 0 -> 1980 bytes Ardent/UV/catdir/%AUV%AMCWE.TV.PROGRAMS.LIST | Bin 0 -> 9013 bytes Ardent/UV/catdir/%AUV%AMCWE.TV.PROGRAMS.RPT | Bin 0 -> 10204 bytes Ardent/UV/catdir/%AUV%AMCWE.TV.PROGRAMS.RPT2 | Bin 0 -> 7378 bytes Ardent/UV/catdir/%AUV%AMCWE.TV.PROGRAMS.SCOTT | Bin 0 -> 10186 bytes Ardent/UV/catdir/%AUV%AMCWE.TV.RESPONSE.RPT | Bin 0 -> 10071 bytes Ardent/UV/catdir/%AUV%AMCWE.TVCAL.MAINT | Bin 0 -> 4011 bytes Ardent/UV/catdir/%AUV%AMCWE.TVPGM.MAINT | Bin 0 -> 4639 bytes .../UV/catdir/%AUV%AMCWE.TVPGM.MAINT.111797 | Bin 0 -> 6040 bytes Ardent/UV/catdir/%AUV%AMCWE.TVPGM.MAINT.SUB | Bin 0 -> 7347 bytes Ardent/UV/catdir/%AUV%AMCWE.UNSHIPPED.RPT | Bin 0 -> 6541 bytes .../UV/catdir/%AUV%AMCWE.WORDPROC.BACKLOG.RPT | Bin 0 -> 4460 bytes Ardent/UV/catdir/%AUV%AMDSCC | Bin 0 -> 9343 bytes Ardent/UV/catdir/%AUV%AMDSCC.IMPORT | Bin 0 -> 6477 bytes Ardent/UV/catdir/%AUV%AMEDIA.ACCOUNT.PAY | Bin 0 -> 192 bytes Ardent/UV/catdir/%AUV%AMEDIA.ADJUST.MASTER | Bin 0 -> 194 bytes Ardent/UV/catdir/%AUV%AMEDIA.BATCH.MASTER | Bin 0 -> 193 bytes Ardent/UV/catdir/%AUV%AMEDIA.CALL.JOURNAL | Bin 0 -> 193 bytes Ardent/UV/catdir/%AUV%AMEDIA.CODE.RPT1 | Bin 0 -> 7107 bytes Ardent/UV/catdir/%AUV%AMEDIA.CONTRACT.MASTER | Bin 0 -> 196 bytes Ardent/UV/catdir/%AUV%AMEDIA.MARKET.MASTER | Bin 0 -> 194 bytes Ardent/UV/catdir/%AUV%AMEDIA.OUTPUT | Bin 0 -> 187 bytes Ardent/UV/catdir/%AUV%AMEDIA.PROGRAM.MASTER | Bin 0 -> 195 bytes Ardent/UV/catdir/%AUV%AMEDIA.RETURN.MASTER | Bin 0 -> 194 bytes Ardent/UV/catdir/%AUV%AMEDIA.RUSH.MASTER | Bin 0 -> 192 bytes Ardent/UV/catdir/%AUV%AMEDIA.SCHEDULE.MASTER | Bin 0 -> 196 bytes Ardent/UV/catdir/%AUV%AMEDIA.STATE.XREF | Bin 0 -> 191 bytes Ardent/UV/catdir/%AUV%AMEDIA.STATION.COST | Bin 0 -> 193 bytes Ardent/UV/catdir/%AUV%AMEDIA.STATION.MASTER | Bin 0 -> 195 bytes Ardent/UV/catdir/%AUV%AMEDIA.ZIP.MASTER | Bin 0 -> 191 bytes Ardent/UV/catdir/%AUV%AMEM.DB.TO.FLATFILE | Bin 0 -> 10543 bytes Ardent/UV/catdir/%AUV%AMEM.DMAIL | Bin 0 -> 4089 bytes Ardent/UV/catdir/%AUV%AMEM.DMAIL.2 | Bin 0 -> 3087 bytes Ardent/UV/catdir/%AUV%AMEM.GIVING | Bin 0 -> 6575 bytes Ardent/UV/catdir/%AUV%AMEM.GIVING.031998 | Bin 0 -> 6176 bytes Ardent/UV/catdir/%AUV%AMEM.MAILPULL.OUTPUT | Bin 0 -> 2721 bytes Ardent/UV/catdir/%AUV%AMEM.PRECLOSE.EDIT | Bin 0 -> 1266 bytes .../catdir/%AUV%AMEM.RESP.BY.CUSTOM.SEGMENT | Bin 0 -> 8435 bytes Ardent/UV/catdir/%AUV%AMEMBER | Bin 0 -> 181 bytes Ardent/UV/catdir/%AUV%AMEMBER.DISP | Bin 0 -> 2184 bytes Ardent/UV/catdir/%AUV%AMEMBER.DISP.SCRN | Bin 0 -> 1552 bytes Ardent/UV/catdir/%AUV%AMEMBER.ENTRY | Bin 0 -> 10034 bytes Ardent/UV/catdir/%AUV%AMEMBER.PAID | Bin 0 -> 3826 bytes Ardent/UV/catdir/%AUV%AMEMBER.VIEW | Bin 0 -> 1788 bytes Ardent/UV/catdir/%AUV%AMFA | Bin 0 -> 14387 bytes Ardent/UV/catdir/%AUV%AMFA2 | Bin 0 -> 14111 bytes Ardent/UV/catdir/%AUV%AMICAHTEK.800.REPORT | Bin 0 -> 11497 bytes Ardent/UV/catdir/%AUV%AMIKE.TST2 | Bin 0 -> 2276 bytes Ardent/UV/catdir/%AUV%AMIKETEST | Bin 0 -> 25583 bytes Ardent/UV/catdir/%AUV%AMISC.FUNCTIONS | Bin 0 -> 308 bytes Ardent/UV/catdir/%AUV%AMISSING.INV.TYPE.CODES | Bin 0 -> 1932 bytes Ardent/UV/catdir/%AUV%AMM.INV.SALES.RPT1 | Bin 0 -> 7442 bytes Ardent/UV/catdir/%AUV%AMM.INV.SALES.RPT2 | Bin 0 -> 5383 bytes Ardent/UV/catdir/%AUV%AMM.INV.SALES.RPT3 | Bin 0 -> 5812 bytes Ardent/UV/catdir/%AUV%AMM.INV.SALES.RPT4 | Bin 0 -> 5605 bytes Ardent/UV/catdir/%AUV%AMM.INV.SALES.RPT5 | Bin 0 -> 5530 bytes Ardent/UV/catdir/%AUV%AMM.INV.SALES.RPT6 | Bin 0 -> 8079 bytes Ardent/UV/catdir/%AUV%AMM.REG.RPT.SUB | Bin 0 -> 3420 bytes Ardent/UV/catdir/%AUV%AMMEA.BIRTHDAY.RPT | Bin 0 -> 3413 bytes Ardent/UV/catdir/%AUV%AMSD.ATTND | Bin 0 -> 5039 bytes Ardent/UV/catdir/%AUV%AMSD.AUDIT.BA | Bin 0 -> 3676 bytes Ardent/UV/catdir/%AUV%AMSD.AUDIT.BATCH | Bin 0 -> 2875 bytes Ardent/UV/catdir/%AUV%AMSD.BAT.DISPLAY | Bin 0 -> 7578 bytes Ardent/UV/catdir/%AUV%AMSD.BAT020 | Bin 0 -> 16161 bytes Ardent/UV/catdir/%AUV%AMSD.BAT020.051399 | Bin 0 -> 14451 bytes Ardent/UV/catdir/%AUV%AMSD.BAT020.NEW | Bin 0 -> 14493 bytes Ardent/UV/catdir/%AUV%AMSD.BATADD | Bin 0 -> 15229 bytes Ardent/UV/catdir/%AUV%AMSD.BATADD.051399 | Bin 0 -> 14869 bytes Ardent/UV/catdir/%AUV%AMSD.BATADD.MAIL | Bin 0 -> 8703 bytes Ardent/UV/catdir/%AUV%AMSD.BATADD.NEW | Bin 0 -> 14866 bytes Ardent/UV/catdir/%AUV%AMSD.BATCH.BILLING | Bin 0 -> 10312 bytes Ardent/UV/catdir/%AUV%AMSD.BATCHES.INVOICED | Bin 0 -> 4266 bytes .../UV/catdir/%AUV%AMSD.BATCHES.NOT.INVOICED | Bin 0 -> 4059 bytes Ardent/UV/catdir/%AUV%AMSD.BILLING.COSTS | Bin 0 -> 5229 bytes Ardent/UV/catdir/%AUV%AMSD.COMMA.RANGE | Bin 0 -> 2172 bytes Ardent/UV/catdir/%AUV%AMSD.COMMA.SPLIT | Bin 0 -> 1944 bytes Ardent/UV/catdir/%AUV%AMSD.COUNT.LPF | Bin 0 -> 5181 bytes Ardent/UV/catdir/%AUV%AMSD.CURRENCY.HELP | Bin 0 -> 2623 bytes Ardent/UV/catdir/%AUV%AMSD.CYCLE | Bin 0 -> 9736 bytes Ardent/UV/catdir/%AUV%AMSD.CYCLE.032598 | Bin 0 -> 8471 bytes Ardent/UV/catdir/%AUV%AMSD.CYCLE.TABLE.MAINT | Bin 0 -> 7256 bytes Ardent/UV/catdir/%AUV%AMSD.DAILY.DATE | Bin 0 -> 1639 bytes Ardent/UV/catdir/%AUV%AMSD.DBM.END | Bin 0 -> 4586 bytes Ardent/UV/catdir/%AUV%AMSD.DBM.RED | Bin 0 -> 9079 bytes Ardent/UV/catdir/%AUV%AMSD.DBM2.RED | Bin 0 -> 4632 bytes Ardent/UV/catdir/%AUV%AMSD.DEP.MAINT | Bin 0 -> 7155 bytes Ardent/UV/catdir/%AUV%AMSD.DEP.MAINT.110697 | Bin 0 -> 7162 bytes Ardent/UV/catdir/%AUV%AMSD.DEP.REPORT | Bin 0 -> 2711 bytes Ardent/UV/catdir/%AUV%AMSD.DISP.LBL | Bin 0 -> 1905 bytes Ardent/UV/catdir/%AUV%AMSD.DISP.LBL2 | Bin 0 -> 2845 bytes Ardent/UV/catdir/%AUV%AMSD.DISP.LBL3 | Bin 0 -> 2914 bytes Ardent/UV/catdir/%AUV%AMSD.DISP.TRANS | Bin 0 -> 2982 bytes Ardent/UV/catdir/%AUV%AMSD.DISP.TRANS.ADD.NEW | Bin 0 -> 4665 bytes Ardent/UV/catdir/%AUV%AMSD.DISP.TRANS.BUILD | Bin 0 -> 5575 bytes Ardent/UV/catdir/%AUV%AMSD.DONOR.SELECT | Bin 0 -> 5900 bytes .../UV/catdir/%AUV%AMSD.DONOR.SELECT.7.31.97 | Bin 0 -> 5908 bytes Ardent/UV/catdir/%AUV%AMSD.EFT.FIX.SUMMARY | Bin 0 -> 3461 bytes Ardent/UV/catdir/%AUV%AMSD.EFT.TAPE | Bin 0 -> 5493 bytes Ardent/UV/catdir/%AUV%AMSD.EM001 | Bin 0 -> 3949 bytes Ardent/UV/catdir/%AUV%AMSD.EVENT.ONLINE.RPT | Bin 0 -> 9884 bytes Ardent/UV/catdir/%AUV%AMSD.FAMILY | Bin 0 -> 3327 bytes Ardent/UV/catdir/%AUV%AMSD.FAST.TRANS | Bin 0 -> 8943 bytes Ardent/UV/catdir/%AUV%AMSD.FIX.ADI | Bin 0 -> 2295 bytes Ardent/UV/catdir/%AUV%AMSD.FOREIGN.DISPLAY | Bin 0 -> 1821 bytes Ardent/UV/catdir/%AUV%AMSD.FULFILLED | Bin 0 -> 3541 bytes Ardent/UV/catdir/%AUV%AMSD.FUND.MAINT | Bin 0 -> 9426 bytes Ardent/UV/catdir/%AUV%AMSD.HDG | Bin 0 -> 1201 bytes Ardent/UV/catdir/%AUV%AMSD.HDG2 | Bin 0 -> 1334 bytes Ardent/UV/catdir/%AUV%AMSD.HDG3 | Bin 0 -> 1054 bytes Ardent/UV/catdir/%AUV%AMSD.HDG4 | Bin 0 -> 1328 bytes Ardent/UV/catdir/%AUV%AMSD.HOURS.RPT | Bin 0 -> 5274 bytes Ardent/UV/catdir/%AUV%AMSD.INDEX | Bin 0 -> 19976 bytes Ardent/UV/catdir/%AUV%AMSD.INQ000 | Bin 0 -> 4035 bytes Ardent/UV/catdir/%AUV%AMSD.INQ000.PURGE | Bin 0 -> 2356 bytes .../UV/catdir/%AUV%AMSD.INQ000.PURGE.2.25.97 | Bin 0 -> 2364 bytes Ardent/UV/catdir/%AUV%AMSD.INQ010 | Bin 0 -> 14853 bytes Ardent/UV/catdir/%AUV%AMSD.INQ050 | Bin 0 -> 24960 bytes Ardent/UV/catdir/%AUV%AMSD.INQ050.081897 | Bin 0 -> 24302 bytes Ardent/UV/catdir/%AUV%AMSD.INQ050.091797 | Bin 0 -> 24395 bytes Ardent/UV/catdir/%AUV%AMSD.INQ200 | Bin 0 -> 7948 bytes Ardent/UV/catdir/%AUV%AMSD.INV.CONTROL | Bin 0 -> 1699 bytes Ardent/UV/catdir/%AUV%AMSD.IT.FAMILY | Bin 0 -> 3583 bytes Ardent/UV/catdir/%AUV%AMSD.IT.MATCHCODE | Bin 0 -> 3756 bytes Ardent/UV/catdir/%AUV%AMSD.JOURNAL | Bin 0 -> 3150 bytes Ardent/UV/catdir/%AUV%AMSD.LETTERS | Bin 0 -> 6804 bytes Ardent/UV/catdir/%AUV%AMSD.LETTERS.HOLD | Bin 0 -> 7498 bytes Ardent/UV/catdir/%AUV%AMSD.LIST.LISTS | Bin 0 -> 2625 bytes Ardent/UV/catdir/%AUV%AMSD.LOOKUP | Bin 0 -> 14195 bytes Ardent/UV/catdir/%AUV%AMSD.MAKE.LBL | Bin 0 -> 3529 bytes Ardent/UV/catdir/%AUV%AMSD.MARKET.RESEARCH | Bin 0 -> 5712 bytes Ardent/UV/catdir/%AUV%AMSD.MARKET.USA.UPDATE | Bin 0 -> 8839 bytes Ardent/UV/catdir/%AUV%AMSD.MEDIA.Y2K | Bin 0 -> 2837 bytes Ardent/UV/catdir/%AUV%AMSD.OPER.STATS | Bin 0 -> 5093 bytes Ardent/UV/catdir/%AUV%AMSD.PARTNER.GIVING | Bin 0 -> 7367 bytes Ardent/UV/catdir/%AUV%AMSD.PEFT.TAPE | Bin 0 -> 5503 bytes Ardent/UV/catdir/%AUV%AMSD.PICKING.RPT | Bin 0 -> 11274 bytes Ardent/UV/catdir/%AUV%AMSD.PICKING.RPT.061099 | Bin 0 -> 9488 bytes Ardent/UV/catdir/%AUV%AMSD.PICKING.RPT.061199 | Bin 0 -> 9972 bytes Ardent/UV/catdir/%AUV%AMSD.PICKING.RPT.061499 | Bin 0 -> 10300 bytes Ardent/UV/catdir/%AUV%AMSD.PICKING.RPT.IFL | Bin 0 -> 9407 bytes Ardent/UV/catdir/%AUV%AMSD.PICKING.RPT.WADE | Bin 0 -> 10161 bytes Ardent/UV/catdir/%AUV%AMSD.PICKNIG.RPT | Bin 0 -> 9403 bytes Ardent/UV/catdir/%AUV%AMSD.PRINT.ACCOUNT | Bin 0 -> 20726 bytes .../UV/catdir/%AUV%AMSD.PRINT.ACCOUNT.071498 | Bin 0 -> 20731 bytes Ardent/UV/catdir/%AUV%AMSD.PRINT.ACCOUNT.WADE | Bin 0 -> 21166 bytes Ardent/UV/catdir/%AUV%AMSD.PROJ2 | Bin 0 -> 8531 bytes Ardent/UV/catdir/%AUV%AMSD.PURGE.LPF | Bin 0 -> 1503 bytes Ardent/UV/catdir/%AUV%AMSD.PURGE.ORD.LBL.SUM | Bin 0 -> 2024 bytes .../UV/catdir/%AUV%AMSD.PURGE.PM.LABELS.HOLD | Bin 0 -> 2010 bytes Ardent/UV/catdir/%AUV%AMSD.RCF.MAINT | Bin 0 -> 19123 bytes Ardent/UV/catdir/%AUV%AMSD.RCF.MAINT.022098 | Bin 0 -> 8432 bytes Ardent/UV/catdir/%AUV%AMSD.RCF.MAINT.022198 | Bin 0 -> 8996 bytes Ardent/UV/catdir/%AUV%AMSD.RCF.MAINT.041999 | Bin 0 -> 8996 bytes Ardent/UV/catdir/%AUV%AMSD.RCF.MAINT.042399 | Bin 0 -> 8996 bytes Ardent/UV/catdir/%AUV%AMSD.RCF.MAINT.WADE | Bin 0 -> 18830 bytes .../UV/catdir/%AUV%AMSD.RCF.MAINT.WADE.042199 | Bin 0 -> 9950 bytes .../UV/catdir/%AUV%AMSD.RCF.MAINT.WADE.042299 | Bin 0 -> 13200 bytes Ardent/UV/catdir/%AUV%AMSD.RCF.WADE | Bin 0 -> 185 bytes Ardent/UV/catdir/%AUV%AMSD.READ.ZIP4.RESULT | Bin 0 -> 1822 bytes Ardent/UV/catdir/%AUV%AMSD.READ.ZIP4.TAPE | Bin 0 -> 1789 bytes Ardent/UV/catdir/%AUV%AMSD.READER.MONTHLY | Bin 0 -> 12490 bytes Ardent/UV/catdir/%AUV%AMSD.READER.WEEKLY | Bin 0 -> 9681 bytes Ardent/UV/catdir/%AUV%AMSD.REG.TRANS | Bin 0 -> 26400 bytes Ardent/UV/catdir/%AUV%AMSD.REG.TRANS.051499 | Bin 0 -> 2685 bytes Ardent/UV/catdir/%AUV%AMSD.REG.TRANS.060699 | Bin 0 -> 20633 bytes Ardent/UV/catdir/%AUV%AMSD.REG.TRANS.060899 | Bin 0 -> 22507 bytes Ardent/UV/catdir/%AUV%AMSD.REG.TRANS.060999 | Bin 0 -> 24499 bytes Ardent/UV/catdir/%AUV%AMSD.REG.TRANS.061099 | Bin 0 -> 24677 bytes Ardent/UV/catdir/%AUV%AMSD.REPRINT | Bin 0 -> 2216 bytes Ardent/UV/catdir/%AUV%AMSD.SEGMENT.DISPLAY | Bin 0 -> 2358 bytes Ardent/UV/catdir/%AUV%AMSD.SENT.DISP | Bin 0 -> 2732 bytes Ardent/UV/catdir/%AUV%AMSD.SENT.REPORT.R8 | Bin 0 -> 5901 bytes Ardent/UV/catdir/%AUV%AMSD.SENTENCE | Bin 0 -> 2724 bytes Ardent/UV/catdir/%AUV%AMSD.STAT.REASON | Bin 0 -> 4500 bytes Ardent/UV/catdir/%AUV%AMSD.STATE.SALES | Bin 0 -> 5837 bytes Ardent/UV/catdir/%AUV%AMSD.STATION.REV.RPT | Bin 0 -> 7479 bytes Ardent/UV/catdir/%AUV%AMSD.SUB001 | Bin 0 -> 4703 bytes Ardent/UV/catdir/%AUV%AMSD.SUB002 | Bin 0 -> 5609 bytes Ardent/UV/catdir/%AUV%AMSD.SUM.YEAR | Bin 0 -> 9313 bytes Ardent/UV/catdir/%AUV%AMSD.SUM.YEAR.BACKUP | Bin 0 -> 9314 bytes Ardent/UV/catdir/%AUV%AMSD.SUM.YEAR.WADE | Bin 0 -> 9964 bytes Ardent/UV/catdir/%AUV%AMSD.SUM.YEAR.Y2K | Bin 0 -> 2447 bytes Ardent/UV/catdir/%AUV%AMSD.TEL30.FULL | Bin 0 -> 6061 bytes Ardent/UV/catdir/%AUV%AMSD.TEL31.FULL | Bin 0 -> 6149 bytes Ardent/UV/catdir/%AUV%AMSD.TEL32.FULL | Bin 0 -> 6719 bytes Ardent/UV/catdir/%AUV%AMSD.TRANS.HELP | Bin 0 -> 2295 bytes .../UV/catdir/%AUV%AMSD.TRANS.PRODUCT.DISPLAY | Bin 0 -> 3075 bytes Ardent/UV/catdir/%AUV%AMSD.YEAR.DISPLAY | Bin 0 -> 1902 bytes Ardent/UV/catdir/%AUV%AMSD.ZIP.UPDATE | Bin 0 -> 6878 bytes Ardent/UV/catdir/%AUV%AMSD.ZIP.UPDATE.3.3.97 | Bin 0 -> 6885 bytes Ardent/UV/catdir/%AUV%AMTAW.CLUB.RPT | Bin 0 -> 5941 bytes Ardent/UV/catdir/%AUV%AMTC | Bin 0 -> 588 bytes Ardent/UV/catdir/%AUV%AMTC97.REPORT2 | Bin 0 -> 6684 bytes Ardent/UV/catdir/%AUV%AMTEK | Bin 0 -> 2428 bytes Ardent/UV/catdir/%AUV%AMTEK.800.COPY.MEM | Bin 0 -> 2124 bytes Ardent/UV/catdir/%AUV%AMTEK.800.MERGE.DISPLAY | Bin 0 -> 14861 bytes .../%AUV%AMTEK.800.MERGE.DISPLAY.022398 | Bin 0 -> 13815 bytes .../%AUV%AMTEK.800.MERGE.DISPLAY.022598 | Bin 0 -> 14216 bytes Ardent/UV/catdir/%AUV%AMTEK.800.NOTES | Bin 0 -> 7157 bytes Ardent/UV/catdir/%AUV%AMTEK.800.PRAYER | Bin 0 -> 6858 bytes Ardent/UV/catdir/%AUV%AMTEK.800.PRAYER.REPORT | Bin 0 -> 9945 bytes Ardent/UV/catdir/%AUV%AMTEK.800.PRODUCTS.HELP | Bin 0 -> 5172 bytes Ardent/UV/catdir/%AUV%AMTEK.800.STATIONS | Bin 0 -> 10758 bytes Ardent/UV/catdir/%AUV%AMTEK.800.WINDOW | Bin 0 -> 10871 bytes Ardent/UV/catdir/%AUV%AMTEK.AUTO.TEST | Bin 0 -> 13594 bytes Ardent/UV/catdir/%AUV%AMTEK.AUTOCALC.1 | Bin 0 -> 1249 bytes Ardent/UV/catdir/%AUV%AMTEK.AUTOCALC.116 | Bin 0 -> 2497 bytes Ardent/UV/catdir/%AUV%AMTEK.AUTOCALC.117 | Bin 0 -> 2334 bytes Ardent/UV/catdir/%AUV%AMTEK.AUTOCALC.119 | Bin 0 -> 2567 bytes Ardent/UV/catdir/%AUV%AMTEK.AUTOCALC.121 | Bin 0 -> 2922 bytes Ardent/UV/catdir/%AUV%AMTEK.AUTOCALC.122 | Bin 0 -> 2422 bytes Ardent/UV/catdir/%AUV%AMTEK.AUTOCALC.126 | Bin 0 -> 2458 bytes Ardent/UV/catdir/%AUV%AMTEK.AUTOCALC.131 | Bin 0 -> 3159 bytes Ardent/UV/catdir/%AUV%AMTEK.AUTOCALC.132 | Bin 0 -> 2741 bytes Ardent/UV/catdir/%AUV%AMTEK.AUTOCALC.134 | Bin 0 -> 2477 bytes Ardent/UV/catdir/%AUV%AMTEK.AUTOCALC.149 | Bin 0 -> 2646 bytes .../UV/catdir/%AUV%AMTEK.AUTOCALC.149.052599 | Bin 0 -> 2508 bytes Ardent/UV/catdir/%AUV%AMTEK.AUTOCALC.150 | Bin 0 -> 2597 bytes Ardent/UV/catdir/%AUV%AMTEK.AUTOCALC.152 | Bin 0 -> 1890 bytes Ardent/UV/catdir/%AUV%AMTEK.AUTOCALC.154 | Bin 0 -> 2290 bytes Ardent/UV/catdir/%AUV%AMTEK.AUTOCALC.158 | Bin 0 -> 2785 bytes Ardent/UV/catdir/%AUV%AMTEK.AUTOCALC.16 | Bin 0 -> 2710 bytes Ardent/UV/catdir/%AUV%AMTEK.AUTOCALC.162 | Bin 0 -> 318 bytes Ardent/UV/catdir/%AUV%AMTEK.AUTOCALC.164 | Bin 0 -> 2541 bytes Ardent/UV/catdir/%AUV%AMTEK.AUTOCALC.17 | Bin 0 -> 2751 bytes Ardent/UV/catdir/%AUV%AMTEK.AUTOCALC.170 | Bin 0 -> 2559 bytes .../UV/catdir/%AUV%AMTEK.AUTOCALC.170.6.19.97 | Bin 0 -> 2588 bytes Ardent/UV/catdir/%AUV%AMTEK.AUTOCALC.175 | Bin 0 -> 3167 bytes Ardent/UV/catdir/%AUV%AMTEK.AUTOCALC.180 | Bin 0 -> 3130 bytes Ardent/UV/catdir/%AUV%AMTEK.AUTOCALC.181 | Bin 0 -> 2155 bytes Ardent/UV/catdir/%AUV%AMTEK.AUTOCALC.182 | Bin 0 -> 2775 bytes Ardent/UV/catdir/%AUV%AMTEK.AUTOCALC.185 | Bin 0 -> 2529 bytes Ardent/UV/catdir/%AUV%AMTEK.AUTOCALC.195 | Bin 0 -> 2252 bytes Ardent/UV/catdir/%AUV%AMTEK.AUTOCALC.196 | Bin 0 -> 2217 bytes Ardent/UV/catdir/%AUV%AMTEK.AUTOCALC.2 | Bin 0 -> 588 bytes Ardent/UV/catdir/%AUV%AMTEK.AUTOCALC.201 | Bin 0 -> 2967 bytes Ardent/UV/catdir/%AUV%AMTEK.AUTOCALC.205 | Bin 0 -> 2142 bytes Ardent/UV/catdir/%AUV%AMTEK.AUTOCALC.206 | Bin 0 -> 2254 bytes Ardent/UV/catdir/%AUV%AMTEK.AUTOCALC.207 | Bin 0 -> 2135 bytes Ardent/UV/catdir/%AUV%AMTEK.AUTOCALC.211 | Bin 0 -> 2304 bytes Ardent/UV/catdir/%AUV%AMTEK.AUTOCALC.212 | Bin 0 -> 17927 bytes .../UV/catdir/%AUV%AMTEK.AUTOCALC.212.040398 | Bin 0 -> 8905 bytes Ardent/UV/catdir/%AUV%AMTEK.AUTOCALC.212.BAK | Bin 0 -> 16365 bytes Ardent/UV/catdir/%AUV%AMTEK.AUTOCALC.213 | Bin 0 -> 2407 bytes Ardent/UV/catdir/%AUV%AMTEK.AUTOCALC.213.TEST | Bin 0 -> 2412 bytes Ardent/UV/catdir/%AUV%AMTEK.AUTOCALC.216 | Bin 0 -> 2302 bytes Ardent/UV/catdir/%AUV%AMTEK.AUTOCALC.224 | Bin 0 -> 2109 bytes Ardent/UV/catdir/%AUV%AMTEK.AUTOCALC.231 | Bin 0 -> 2095 bytes Ardent/UV/catdir/%AUV%AMTEK.AUTOCALC.232 | Bin 0 -> 1506 bytes Ardent/UV/catdir/%AUV%AMTEK.AUTOCALC.234 | Bin 0 -> 2167 bytes Ardent/UV/catdir/%AUV%AMTEK.AUTOCALC.237 | Bin 0 -> 2885 bytes .../UV/catdir/%AUV%AMTEK.AUTOCALC.237.021098 | Bin 0 -> 2709 bytes Ardent/UV/catdir/%AUV%AMTEK.AUTOCALC.237.WADE | Bin 0 -> 2855 bytes Ardent/UV/catdir/%AUV%AMTEK.AUTOCALC.238 | Bin 0 -> 2349 bytes Ardent/UV/catdir/%AUV%AMTEK.AUTOCALC.244 | Bin 0 -> 2077 bytes Ardent/UV/catdir/%AUV%AMTEK.AUTOCALC.253 | Bin 0 -> 1936 bytes Ardent/UV/catdir/%AUV%AMTEK.AUTOCALC.254 | Bin 0 -> 2125 bytes Ardent/UV/catdir/%AUV%AMTEK.AUTOCALC.258 | Bin 0 -> 2360 bytes Ardent/UV/catdir/%AUV%AMTEK.AUTOCALC.259 | Bin 0 -> 2331 bytes Ardent/UV/catdir/%AUV%AMTEK.AUTOCALC.265 | Bin 0 -> 2351 bytes Ardent/UV/catdir/%AUV%AMTEK.AUTOCALC.269 | Bin 0 -> 3262 bytes Ardent/UV/catdir/%AUV%AMTEK.AUTOCALC.273 | Bin 0 -> 2342 bytes Ardent/UV/catdir/%AUV%AMTEK.AUTOCALC.276 | Bin 0 -> 2083 bytes Ardent/UV/catdir/%AUV%AMTEK.AUTOCALC.286 | Bin 0 -> 2427 bytes Ardent/UV/catdir/%AUV%AMTEK.AUTOCALC.293 | Bin 0 -> 2484 bytes Ardent/UV/catdir/%AUV%AMTEK.AUTOCALC.294 | Bin 0 -> 3044 bytes Ardent/UV/catdir/%AUV%AMTEK.AUTOCALC.294.TEMP | Bin 0 -> 2855 bytes Ardent/UV/catdir/%AUV%AMTEK.AUTOCALC.295 | Bin 0 -> 2264 bytes Ardent/UV/catdir/%AUV%AMTEK.AUTOCALC.296 | Bin 0 -> 2288 bytes Ardent/UV/catdir/%AUV%AMTEK.AUTOCALC.298 | Bin 0 -> 2335 bytes Ardent/UV/catdir/%AUV%AMTEK.AUTOCALC.3 | Bin 0 -> 588 bytes Ardent/UV/catdir/%AUV%AMTEK.AUTOCALC.300 | Bin 0 -> 2498 bytes Ardent/UV/catdir/%AUV%AMTEK.AUTOCALC.301 | Bin 0 -> 3755 bytes Ardent/UV/catdir/%AUV%AMTEK.AUTOCALC.301.TEST | Bin 0 -> 3904 bytes Ardent/UV/catdir/%AUV%AMTEK.AUTOCALC.303 | Bin 0 -> 2000 bytes Ardent/UV/catdir/%AUV%AMTEK.AUTOCALC.309 | Bin 0 -> 2799 bytes Ardent/UV/catdir/%AUV%AMTEK.AUTOCALC.310 | Bin 0 -> 2272 bytes Ardent/UV/catdir/%AUV%AMTEK.AUTOCALC.312 | Bin 0 -> 2124 bytes Ardent/UV/catdir/%AUV%AMTEK.AUTOCALC.315 | Bin 0 -> 2885 bytes Ardent/UV/catdir/%AUV%AMTEK.AUTOCALC.316 | Bin 0 -> 3390 bytes Ardent/UV/catdir/%AUV%AMTEK.AUTOCALC.33 | Bin 0 -> 2679 bytes Ardent/UV/catdir/%AUV%AMTEK.AUTOCALC.333 | Bin 0 -> 2530 bytes Ardent/UV/catdir/%AUV%AMTEK.AUTOCALC.333.TEST | Bin 0 -> 2535 bytes Ardent/UV/catdir/%AUV%AMTEK.AUTOCALC.334 | Bin 0 -> 2341 bytes Ardent/UV/catdir/%AUV%AMTEK.AUTOCALC.335 | Bin 0 -> 2316 bytes Ardent/UV/catdir/%AUV%AMTEK.AUTOCALC.337 | Bin 0 -> 2441 bytes Ardent/UV/catdir/%AUV%AMTEK.AUTOCALC.349 | Bin 0 -> 2187 bytes Ardent/UV/catdir/%AUV%AMTEK.AUTOCALC.357 | Bin 0 -> 1976 bytes Ardent/UV/catdir/%AUV%AMTEK.AUTOCALC.4 | Bin 0 -> 2812 bytes Ardent/UV/catdir/%AUV%AMTEK.AUTOCALC.5 | Bin 0 -> 2857 bytes Ardent/UV/catdir/%AUV%AMTEK.AUTOCALC.55 | Bin 0 -> 2680 bytes Ardent/UV/catdir/%AUV%AMTEK.AUTOCALC.6 | Bin 0 -> 1035 bytes Ardent/UV/catdir/%AUV%AMTEK.AUTOCALC.65 | Bin 0 -> 2466 bytes Ardent/UV/catdir/%AUV%AMTEK.AUTOCALC.67 | Bin 0 -> 2476 bytes Ardent/UV/catdir/%AUV%AMTEK.AUTOCALC.68 | Bin 0 -> 2075 bytes Ardent/UV/catdir/%AUV%AMTEK.AUTOCALC.69 | Bin 0 -> 2425 bytes Ardent/UV/catdir/%AUV%AMTEK.AUTOCALC.7 | Bin 0 -> 588 bytes Ardent/UV/catdir/%AUV%AMTEK.AUTOCALC.70 | Bin 0 -> 3343 bytes Ardent/UV/catdir/%AUV%AMTEK.AUTOCALC.71 | Bin 0 -> 3231 bytes Ardent/UV/catdir/%AUV%AMTEK.AUTOCALC.71.TEST | Bin 0 -> 3114 bytes Ardent/UV/catdir/%AUV%AMTEK.AUTOCALC.80 | Bin 0 -> 2562 bytes Ardent/UV/catdir/%AUV%AMTEK.AUTOCALC.9 | Bin 0 -> 2254 bytes Ardent/UV/catdir/%AUV%AMTEK.AUTOCALC.95 | Bin 0 -> 2476 bytes Ardent/UV/catdir/%AUV%AMTEK.AUTOCALC.99 | Bin 0 -> 3129 bytes Ardent/UV/catdir/%AUV%AMTEK.AUTOCALC.TEST.149 | Bin 0 -> 2651 bytes Ardent/UV/catdir/%AUV%AMTEK.AUTOCALC.TEST.301 | Bin 0 -> 3190 bytes Ardent/UV/catdir/%AUV%AMTEK.AUTOCALC.TEST.316 | Bin 0 -> 3356 bytes Ardent/UV/catdir/%AUV%AMTEK.BATCH.BILLING | Bin 0 -> 3208 bytes Ardent/UV/catdir/%AUV%AMTEK.CC.QUICK.STATUS | Bin 0 -> 6665 bytes Ardent/UV/catdir/%AUV%AMTEK.CREDIT.BY.DATE | Bin 0 -> 6882 bytes Ardent/UV/catdir/%AUV%AMTEK.CS.INFO2 | Bin 0 -> 2857 bytes Ardent/UV/catdir/%AUV%AMTEK.CS.ROUTINES | Bin 0 -> 2965 bytes Ardent/UV/catdir/%AUV%AMTEK.DBM.RED.SCRIPT | Bin 0 -> 8048 bytes Ardent/UV/catdir/%AUV%AMTEK.DONOR.BY.ITEM | Bin 0 -> 10734 bytes .../UV/catdir/%AUV%AMTEK.DONOR.BY.ITEM.051799 | Bin 0 -> 10741 bytes .../UV/catdir/%AUV%AMTEK.DONOR.BY.ITEM.051899 | Bin 0 -> 10741 bytes Ardent/UV/catdir/%AUV%AMTEK.DONOR.BY.ITEM.CC | Bin 0 -> 9755 bytes Ardent/UV/catdir/%AUV%AMTEK.ELT.REPORT1 | Bin 0 -> 32651 bytes Ardent/UV/catdir/%AUV%AMTEK.ELT.REPORT1.CT | Bin 0 -> 7775 bytes Ardent/UV/catdir/%AUV%AMTEK.ELT.REPORT1.NEW | Bin 0 -> 31500 bytes Ardent/UV/catdir/%AUV%AMTEK.ELT.REPORT1.NEWER | Bin 0 -> 31502 bytes .../UV/catdir/%AUV%AMTEK.ELT.REPORT1.PHANTOM | Bin 0 -> 30354 bytes Ardent/UV/catdir/%AUV%AMTEK.ELT.REPORT2 | Bin 0 -> 18961 bytes .../UV/catdir/%AUV%AMTEK.ELT.REPORT2.BHM.INT | Bin 0 -> 12826 bytes Ardent/UV/catdir/%AUV%AMTEK.ELT.REPORT2.CT | Bin 0 -> 8057 bytes Ardent/UV/catdir/%AUV%AMTEK.ELT.REPORT2.DM | Bin 0 -> 8104 bytes .../UV/catdir/%AUV%AMTEK.ELT.REPORT2.DM.NEW | Bin 0 -> 7959 bytes Ardent/UV/catdir/%AUV%AMTEK.ELT.REPORT2.NEW | Bin 0 -> 17562 bytes Ardent/UV/catdir/%AUV%AMTEK.ELT.REPORT2.OLD | Bin 0 -> 15221 bytes Ardent/UV/catdir/%AUV%AMTEK.ELT.REPORT2.OM | Bin 0 -> 8099 bytes Ardent/UV/catdir/%AUV%AMTEK.ELT.REPORT2.PC | Bin 0 -> 8585 bytes Ardent/UV/catdir/%AUV%AMTEK.ELT.REPORT2.RM | Bin 0 -> 8097 bytes Ardent/UV/catdir/%AUV%AMTEK.ELT.REPORT2.SHORT | Bin 0 -> 17309 bytes Ardent/UV/catdir/%AUV%AMTEK.ELT.REPORT2.TC | Bin 0 -> 6609 bytes Ardent/UV/catdir/%AUV%AMTEK.ELT.REPORT2.WT | Bin 0 -> 8095 bytes Ardent/UV/catdir/%AUV%AMTEK.FAX | Bin 0 -> 2782 bytes Ardent/UV/catdir/%AUV%AMTEK.IND.LOGIC | Bin 0 -> 2255 bytes Ardent/UV/catdir/%AUV%AMTEK.INSP.LOGIC | Bin 0 -> 2245 bytes Ardent/UV/catdir/%AUV%AMTEK.INTERNET.COPY.TDJ | Bin 0 -> 7410 bytes Ardent/UV/catdir/%AUV%AMTEK.INV.BY.PAYTYPE | Bin 0 -> 10369 bytes .../UV/catdir/%AUV%AMTEK.INV.BY.PAYTYPE.OLD | Bin 0 -> 8507 bytes Ardent/UV/catdir/%AUV%AMTEK.LA.LOGIC | Bin 0 -> 6960 bytes Ardent/UV/catdir/%AUV%AMTEK.NEB.LOGIC | Bin 0 -> 19637 bytes Ardent/UV/catdir/%AUV%AMTEK.PICKING.PRINT | Bin 0 -> 13293 bytes .../UV/catdir/%AUV%AMTEK.PICKING.PRINT.051098 | Bin 0 -> 12888 bytes Ardent/UV/catdir/%AUV%AMTEK.PREEDIT.REPORT | Bin 0 -> 3671 bytes Ardent/UV/catdir/%AUV%AMTEK.RETURN.CREDIT.RPT | Bin 0 -> 7601 bytes Ardent/UV/catdir/%AUV%AMTEK.RETURNS.FOR | Bin 0 -> 7601 bytes Ardent/UV/catdir/%AUV%AMTEK.SCRIPTING | Bin 0 -> 14404 bytes Ardent/UV/catdir/%AUV%AMTEK.SCRIPTING.090597 | Bin 0 -> 12135 bytes Ardent/UV/catdir/%AUV%AMTEK.SCRIPTING.091598 | Bin 0 -> 13175 bytes Ardent/UV/catdir/%AUV%AMTEK.SCRIPTING.111497 | Bin 0 -> 12524 bytes Ardent/UV/catdir/%AUV%AMTEK.SCRIPTING.122397 | Bin 0 -> 13345 bytes Ardent/UV/catdir/%AUV%AMTEK.SECURITY | Bin 0 -> 1541 bytes Ardent/UV/catdir/%AUV%AMTEK.SHIPPING.AUTOCALC | Bin 0 -> 1627 bytes Ardent/UV/catdir/%AUV%AMTEK.TD800.COPY.ICM | Bin 0 -> 1829 bytes Ardent/UV/catdir/%AUV%AMTEK.TD888.COPY.ICM | Bin 0 -> 1829 bytes Ardent/UV/catdir/%AUV%AMTEK.TELECARD.BATCH | Bin 0 -> 12559 bytes Ardent/UV/catdir/%AUV%AMTEK.TELECARD.LOGIC | Bin 0 -> 22900 bytes Ardent/UV/catdir/%AUV%AMTEK.TELECARD.ORDERS | Bin 0 -> 5263 bytes .../catdir/%AUV%AMTEK.TELECARD.ORDERS.BATCH | Bin 0 -> 5993 bytes Ardent/UV/catdir/%AUV%AMTEK.UPDATE.CALLS | Bin 0 -> 1933 bytes Ardent/UV/catdir/%AUV%AMTEK.VPG.LOGIC | Bin 0 -> 3877 bytes Ardent/UV/catdir/%AUV%AMTEK.WOC.LOGIC | Bin 0 -> 4480 bytes Ardent/UV/catdir/%AUV%AMTEK.WOF.LOGIC | Bin 0 -> 6959 bytes Ardent/UV/catdir/%AUV%AMTEK.Y2K.UTILITY | Bin 0 -> 3083 bytes Ardent/UV/catdir/%AUV%AMTEK.Y2K.UTILITY1 | Bin 0 -> 3538 bytes Ardent/UV/catdir/%AUV%AMULTI.INV.CHANGE | Bin 0 -> 7221 bytes Ardent/UV/catdir/%AUV%ANAME.EXPLODER | Bin 0 -> 3087 bytes Ardent/UV/catdir/%AUV%ANAP.RATIO.RPT | Bin 0 -> 7121 bytes Ardent/UV/catdir/%AUV%ANAP.RATIO.RPT.013098 | Bin 0 -> 6659 bytes Ardent/UV/catdir/%AUV%ANAP.RATIO.RPT2 | Bin 0 -> 6275 bytes Ardent/UV/catdir/%AUV%ANATCOM.BA.ENTRY | Bin 0 -> 4419 bytes Ardent/UV/catdir/%AUV%ANATCOM.DOC.ENTRY | Bin 0 -> 3764 bytes Ardent/UV/catdir/%AUV%ANATCOM.QUICK | Bin 0 -> 6834 bytes Ardent/UV/catdir/%AUV%ANCOA | Bin 0 -> 9322 bytes Ardent/UV/catdir/%AUV%ANCOA.FRP | Bin 0 -> 9391 bytes Ardent/UV/catdir/%AUV%ANCOA.ICM | Bin 0 -> 9389 bytes Ardent/UV/catdir/%AUV%ANCOA.II | Bin 0 -> 10057 bytes Ardent/UV/catdir/%AUV%ANCOA.NIXIE.UPDATE | Bin 0 -> 5434 bytes Ardent/UV/catdir/%AUV%ANCOA.PULL | Bin 0 -> 4817 bytes Ardent/UV/catdir/%AUV%ANCOA.PULL.FRP | Bin 0 -> 6810 bytes Ardent/UV/catdir/%AUV%ANCOA.PULL.HUNTER | Bin 0 -> 4859 bytes Ardent/UV/catdir/%AUV%ANCOA.PULL.ICM | Bin 0 -> 6810 bytes Ardent/UV/catdir/%AUV%ANCOA.PULL.II | Bin 0 -> 6809 bytes Ardent/UV/catdir/%AUV%ANCOA.PULL.RMI | Bin 0 -> 6810 bytes Ardent/UV/catdir/%AUV%ANCOA.PULL.TDJ | Bin 0 -> 6784 bytes Ardent/UV/catdir/%AUV%ANCOA.RMI | Bin 0 -> 9794 bytes Ardent/UV/catdir/%AUV%ANCOA.TDJ | Bin 0 -> 9398 bytes Ardent/UV/catdir/%AUV%ANEW.EAGLE.RPT | Bin 0 -> 2939 bytes Ardent/UV/catdir/%AUV%ANEW.PRINT.ACCOUNT | Bin 0 -> 19528 bytes Ardent/UV/catdir/%AUV%ANON.NUM.BUILD | Bin 0 -> 2568 bytes Ardent/UV/catdir/%AUV%ANT.DO02 | Bin 0 -> 14541 bytes Ardent/UV/catdir/%AUV%ANT.DO02.042399 | Bin 0 -> 10544 bytes Ardent/UV/catdir/%AUV%ANT.DO02.043099 | Bin 0 -> 11805 bytes Ardent/UV/catdir/%AUV%ANT.DO02.060199 | Bin 0 -> 11483 bytes Ardent/UV/catdir/%AUV%ANT.DO02.060799 | Bin 0 -> 11619 bytes Ardent/UV/catdir/%AUV%ANT.DO02.062399 | Bin 0 -> 12148 bytes Ardent/UV/catdir/%AUV%ANT.DO02.072397 | Bin 0 -> 10486 bytes Ardent/UV/catdir/%AUV%ANT.DO02.3.10.97 | Bin 0 -> 8335 bytes Ardent/UV/catdir/%AUV%ANT.DO02.XFER | Bin 0 -> 2009 bytes Ardent/UV/catdir/%AUV%ANUM.TEST | Bin 0 -> 1116 bytes Ardent/UV/catdir/%AUV%AOE | Bin 0 -> 177 bytes Ardent/UV/catdir/%AUV%AOP.PMO.FLAT | Bin 0 -> 8404 bytes Ardent/UV/catdir/%AUV%AOPEN.DOS.CAPTURE.FILE | Bin 0 -> 362 bytes Ardent/UV/catdir/%AUV%AOPER.BACKLG.RPT | Bin 0 -> 2011 bytes Ardent/UV/catdir/%AUV%AOPI.BATCH.ORDERS | Bin 0 -> 11361 bytes .../UV/catdir/%AUV%AOPI.BATCH.ORDERS.DOWNLOAD | Bin 0 -> 11440 bytes Ardent/UV/catdir/%AUV%AOPI.BATCH.ORDERS2 | Bin 0 -> 11362 bytes Ardent/UV/catdir/%AUV%AORDER.CHECK | Bin 0 -> 3870 bytes Ardent/UV/catdir/%AUV%AORDER.DATE.FIX | Bin 0 -> 365 bytes Ardent/UV/catdir/%AUV%AORDER.DETAIL.RPT | Bin 0 -> 2774 bytes Ardent/UV/catdir/%AUV%AORDER.DETAIL.RPT.BUILD | Bin 0 -> 5755 bytes Ardent/UV/catdir/%AUV%AORDER.DOLLAR.VALUE | Bin 0 -> 2155 bytes Ardent/UV/catdir/%AUV%AORDER.REPORT | Bin 0 -> 2555 bytes Ardent/UV/catdir/%AUV%AORDER.REPORT2 | Bin 0 -> 2590 bytes .../UV/catdir/%AUV%AOTIS.PICKING.DETAIL.RPT | Bin 0 -> 6003 bytes Ardent/UV/catdir/%AUV%AOTIS.PICKING.RPT | Bin 0 -> 9306 bytes .../UV/catdir/%AUV%AOTIS.PRINTER.ASSIGNMENT | Bin 0 -> 7175 bytes Ardent/UV/catdir/%AUV%AOUTPUT | Bin 0 -> 181 bytes Ardent/UV/catdir/%AUV%APACK.CODE.MAINT | Bin 0 -> 7369 bytes Ardent/UV/catdir/%AUV%APAINT.FRAME2 | Bin 0 -> 5346 bytes Ardent/UV/catdir/%AUV%APARSE.NUMBER.LIST | Bin 0 -> 663 bytes Ardent/UV/catdir/%AUV%APARSE.WILDCARD.STRING | Bin 0 -> 739 bytes Ardent/UV/catdir/%AUV%APATHS | Bin 0 -> 180 bytes Ardent/UV/catdir/%AUV%APBOWES | Bin 0 -> 8248 bytes Ardent/UV/catdir/%AUV%APBOWES.FLATFILE.WRITE | Bin 0 -> 4920 bytes Ardent/UV/catdir/%AUV%APC.FORM | Bin 0 -> 182 bytes Ardent/UV/catdir/%AUV%APHONE.PM | Bin 0 -> 183 bytes Ardent/UV/catdir/%AUV%APL.REPORT | Bin 0 -> 10773 bytes Ardent/UV/catdir/%AUV%APLEDGE.AUDIT | Bin 0 -> 4976 bytes Ardent/UV/catdir/%AUV%APLEDGE.INFO.LAYOUT | Bin 0 -> 193 bytes Ardent/UV/catdir/%AUV%APLEDGE.PAYMENT.REPORT | Bin 0 -> 5485 bytes Ardent/UV/catdir/%AUV%APLG.BY.MKT.BY.PLG | Bin 0 -> 8424 bytes Ardent/UV/catdir/%AUV%APLIST | Bin 0 -> 1576 bytes Ardent/UV/catdir/%AUV%APLIST.042199 | Bin 0 -> 1532 bytes Ardent/UV/catdir/%AUV%APLISTME | Bin 0 -> 2900 bytes Ardent/UV/catdir/%AUV%APM | Bin 0 -> 177 bytes Ardent/UV/catdir/%AUV%APM.ACTIVITY | Bin 0 -> 186 bytes Ardent/UV/catdir/%AUV%APM.FIX | Bin 0 -> 1726 bytes Ardent/UV/catdir/%AUV%APM.FLATFILE | Bin 0 -> 6871 bytes Ardent/UV/catdir/%AUV%APM.FLATFILE.FIXED | Bin 0 -> 7050 bytes .../UV/catdir/%AUV%APM.FLATFILE.FIXED.LAYOUT | Bin 0 -> 6244 bytes Ardent/UV/catdir/%AUV%APM.FLATFILE.GRACE | Bin 0 -> 6615 bytes Ardent/UV/catdir/%AUV%APM.FLATFILE.SPECIAL | Bin 0 -> 5404 bytes Ardent/UV/catdir/%AUV%APM.FLATFILE.VER2 | Bin 0 -> 8326 bytes Ardent/UV/catdir/%AUV%APM.JOURNAL | Bin 0 -> 185 bytes Ardent/UV/catdir/%AUV%APM.LABELS | Bin 0 -> 184 bytes Ardent/UV/catdir/%AUV%APM.LABELS.FLATFILE | Bin 0 -> 193 bytes Ardent/UV/catdir/%AUV%APM.LETTER | Bin 0 -> 184 bytes Ardent/UV/catdir/%AUV%APM.LETTERS | Bin 0 -> 185 bytes Ardent/UV/catdir/%AUV%APM.MTEK | Bin 0 -> 182 bytes Ardent/UV/catdir/%AUV%APM.NOTES | Bin 0 -> 183 bytes Ardent/UV/catdir/%AUV%APM.NY.CONV | Bin 0 -> 10778 bytes Ardent/UV/catdir/%AUV%APM.PLEDGE | Bin 0 -> 182 bytes Ardent/UV/catdir/%AUV%APM.PLEDGES | Bin 0 -> 185 bytes Ardent/UV/catdir/%AUV%APM.PMO.CHANGE | Bin 0 -> 7578 bytes Ardent/UV/catdir/%AUV%APM.PURGE.FLATFILE | Bin 0 -> 8111 bytes Ardent/UV/catdir/%AUV%APM.PURGE.TO.FLATFILE | Bin 0 -> 8173 bytes Ardent/UV/catdir/%AUV%APM.SUBSCRIPTION | Bin 0 -> 190 bytes Ardent/UV/catdir/%AUV%APM.TEST | Bin 0 -> 182 bytes Ardent/UV/catdir/%AUV%APM.TESTIMONY | Bin 0 -> 187 bytes Ardent/UV/catdir/%AUV%APM.TRAN | Bin 0 -> 182 bytes Ardent/UV/catdir/%AUV%APM.TRANS | Bin 0 -> 183 bytes Ardent/UV/catdir/%AUV%APM.UPDATE | Bin 0 -> 4779 bytes Ardent/UV/catdir/%AUV%APM.UPDATE.AAC | Bin 0 -> 5854 bytes Ardent/UV/catdir/%AUV%APMJ | Bin 0 -> 178 bytes Ardent/UV/catdir/%AUV%APMO.FLATFILE | Bin 0 -> 6138 bytes Ardent/UV/catdir/%AUV%APMT.PRAYER.FIELD.FIX | Bin 0 -> 1522 bytes Ardent/UV/catdir/%AUV%APO | Bin 0 -> 177 bytes Ardent/UV/catdir/%AUV%APORT.FIND | Bin 0 -> 610 bytes Ardent/UV/catdir/%AUV%APOSTAGE.LOG | Bin 0 -> 186 bytes Ardent/UV/catdir/%AUV%APOSTAGE.METER | Bin 0 -> 188 bytes Ardent/UV/catdir/%AUV%APOSTDATE.DETAIL.RPT | Bin 0 -> 5948 bytes Ardent/UV/catdir/%AUV%APRINT.ADMIN.2 | Bin 0 -> 1060 bytes Ardent/UV/catdir/%AUV%APRINT.AUX | Bin 0 -> 788 bytes Ardent/UV/catdir/%AUV%APRINT.FROM.HOLD | Bin 0 -> 2131 bytes Ardent/UV/catdir/%AUV%APRINT.ICM.APPEAL | Bin 0 -> 6523 bytes Ardent/UV/catdir/%AUV%APRINT.LABELS | Bin 0 -> 2767 bytes Ardent/UV/catdir/%AUV%APRINT.LABELS.FROM.PMO | Bin 0 -> 2863 bytes Ardent/UV/catdir/%AUV%APRINT.LABELS.VER2 | Bin 0 -> 3057 bytes Ardent/UV/catdir/%AUV%APRINT.TEST | Bin 0 -> 590 bytes Ardent/UV/catdir/%AUV%APRINT.XS.FORM | Bin 0 -> 7104 bytes Ardent/UV/catdir/%AUV%APRINTER.ASSIGNMENT | Bin 0 -> 1101 bytes Ardent/UV/catdir/%AUV%APRINTER.ASSIGNMENT.BP | Bin 0 -> 4025 bytes Ardent/UV/catdir/%AUV%APRINTER.ASSIGNMENT.DHB | Bin 0 -> 6228 bytes Ardent/UV/catdir/%AUV%APRINTER.ASSIGNMENT.LHB | Bin 0 -> 6170 bytes Ardent/UV/catdir/%AUV%APRINTER.ASSIGNMENT.OLD | Bin 0 -> 6829 bytes Ardent/UV/catdir/%AUV%APRINTER.DHB | Bin 0 -> 6381 bytes Ardent/UV/catdir/%AUV%APRINTERS | Bin 0 -> 183 bytes Ardent/UV/catdir/%AUV%APRJ.MAINT | Bin 0 -> 4233 bytes Ardent/UV/catdir/%AUV%APRNT.FONT.LIST | Bin 0 -> 4357 bytes Ardent/UV/catdir/%AUV%APRNT.UPDT.CONTROL | Bin 0 -> 7440 bytes Ardent/UV/catdir/%AUV%APRO700A | Bin 0 -> 8949 bytes Ardent/UV/catdir/%AUV%APRODUCT.BY.CUSTOMER | Bin 0 -> 4803 bytes Ardent/UV/catdir/%AUV%APROJ.ANALYSIS.BY.DATE | Bin 0 -> 7665 bytes Ardent/UV/catdir/%AUV%APROJECT | Bin 0 -> 182 bytes Ardent/UV/catdir/%AUV%APS | Bin 0 -> 6129 bytes Ardent/UV/catdir/%AUV%APS.PICKING.PRINT | Bin 0 -> 13063 bytes Ardent/UV/catdir/%AUV%APT.FT.RPT | Bin 0 -> 8105 bytes Ardent/UV/catdir/%AUV%APTR.BAT.RESTORE | Bin 0 -> 2393 bytes Ardent/UV/catdir/%AUV%APTR.BAT.SHELL | Bin 0 -> 2725 bytes Ardent/UV/catdir/%AUV%AQUICK.ENTRY | Bin 0 -> 186 bytes Ardent/UV/catdir/%AUV%AQUICK.FILE.STATS | Bin 0 -> 2240 bytes Ardent/UV/catdir/%AUV%AQUICK.LOOK | Bin 0 -> 1342 bytes Ardent/UV/catdir/%AUV%AR8 | Bin 0 -> 3358 bytes Ardent/UV/catdir/%AUV%AR8.041599 | Bin 0 -> 3304 bytes Ardent/UV/catdir/%AUV%AR8.3.BULK.REPORT | Bin 0 -> 4656 bytes Ardent/UV/catdir/%AUV%AR8.5.BULK.REPORT | Bin 0 -> 3619 bytes Ardent/UV/catdir/%AUV%AR8.AUDIT.TEST | Bin 0 -> 2159 bytes Ardent/UV/catdir/%AUV%AR8.BAT60.3 | Bin 0 -> 6043 bytes Ardent/UV/catdir/%AUV%AR8.BATCH.DAILY.SUMMARY | Bin 0 -> 18739 bytes Ardent/UV/catdir/%AUV%AR8.BATCH.DEPOSIT | Bin 0 -> 3447 bytes Ardent/UV/catdir/%AUV%AR8.BATCH.DETAIL | Bin 0 -> 7481 bytes Ardent/UV/catdir/%AUV%AR8.BATCH.ORDERS | Bin 0 -> 10346 bytes Ardent/UV/catdir/%AUV%AR8.BATP42 | Bin 0 -> 3701 bytes Ardent/UV/catdir/%AUV%AR8.BATP42.110497 | Bin 0 -> 3297 bytes Ardent/UV/catdir/%AUV%AR8.BATP42.2 | Bin 0 -> 3930 bytes Ardent/UV/catdir/%AUV%AR8.BATP42.WOF | Bin 0 -> 3384 bytes Ardent/UV/catdir/%AUV%AR8.BATP44 | Bin 0 -> 3464 bytes Ardent/UV/catdir/%AUV%AR8.BATP50.1.1 | Bin 0 -> 3768 bytes Ardent/UV/catdir/%AUV%AR8.BATP50.1.2 | Bin 0 -> 3648 bytes Ardent/UV/catdir/%AUV%AR8.BATP55 | Bin 0 -> 3246 bytes Ardent/UV/catdir/%AUV%AR8.CC.MESSAGE | Bin 0 -> 1053 bytes Ardent/UV/catdir/%AUV%AR8.CHANGE.PARTNERS | Bin 0 -> 15079 bytes Ardent/UV/catdir/%AUV%AR8.CMS.USER.LIST | Bin 0 -> 2263 bytes Ardent/UV/catdir/%AUV%AR8.CONV.ZIPS.GEO | Bin 0 -> 3447 bytes Ardent/UV/catdir/%AUV%AR8.DAILYOP | Bin 0 -> 9436 bytes Ardent/UV/catdir/%AUV%AR8.DAILYOP.060799 | Bin 0 -> 8786 bytes Ardent/UV/catdir/%AUV%AR8.DAILYOP.SPA | Bin 0 -> 8783 bytes Ardent/UV/catdir/%AUV%AR8.DO02 | Bin 0 -> 5403 bytes Ardent/UV/catdir/%AUV%AR8.DUP.MATCH.PULL | Bin 0 -> 2758 bytes Ardent/UV/catdir/%AUV%AR8.DUP01 | Bin 0 -> 3073 bytes Ardent/UV/catdir/%AUV%AR8.EVENT.COST | Bin 0 -> 5122 bytes Ardent/UV/catdir/%AUV%AR8.GROUP.TABLE | Bin 0 -> 2293 bytes Ardent/UV/catdir/%AUV%AR8.MARKET.REVENUE | Bin 0 -> 5320 bytes Ardent/UV/catdir/%AUV%AR8.MENU | Bin 0 -> 9957 bytes Ardent/UV/catdir/%AUV%AR8.MENU.MAINT | Bin 0 -> 11993 bytes Ardent/UV/catdir/%AUV%AR8.MKT.SORT | Bin 0 -> 467 bytes Ardent/UV/catdir/%AUV%AR8.MOUSE | Bin 0 -> 2400 bytes Ardent/UV/catdir/%AUV%AR8.MSD.ACF | Bin 0 -> 6070 bytes Ardent/UV/catdir/%AUV%AR8.MSD.ATTND.EVENT | Bin 0 -> 3974 bytes Ardent/UV/catdir/%AUV%AR8.MSD.ATTND.SUMMARY | Bin 0 -> 4166 bytes Ardent/UV/catdir/%AUV%AR8.MSD.BULK | Bin 0 -> 10233 bytes Ardent/UV/catdir/%AUV%AR8.MSD.BULK.DRIVER | Bin 0 -> 1302 bytes Ardent/UV/catdir/%AUV%AR8.MSD.BULK.MAIL | Bin 0 -> 10449 bytes Ardent/UV/catdir/%AUV%AR8.MSD.EO.DAILY | Bin 0 -> 8127 bytes Ardent/UV/catdir/%AUV%AR8.MSD.EO.FIX.MONTH | Bin 0 -> 6801 bytes Ardent/UV/catdir/%AUV%AR8.MSD.FORMS | Bin 0 -> 3442 bytes Ardent/UV/catdir/%AUV%AR8.MSD.JOURNAL.RPT | Bin 0 -> 5350 bytes Ardent/UV/catdir/%AUV%AR8.MSD.ORDER.BILLING | Bin 0 -> 7859 bytes .../catdir/%AUV%AR8.MSD.ORDER.BILLING.030497 | Bin 0 -> 7428 bytes Ardent/UV/catdir/%AUV%AR8.MSD.ORDER.BILLING2 | Bin 0 -> 7836 bytes Ardent/UV/catdir/%AUV%AR8.MSD.PLEDGE.MKT | Bin 0 -> 6801 bytes Ardent/UV/catdir/%AUV%AR8.MSD.PLEDGE.MKT2 | Bin 0 -> 8049 bytes Ardent/UV/catdir/%AUV%AR8.MSD.PLG.SELECT1 | Bin 0 -> 9417 bytes Ardent/UV/catdir/%AUV%AR8.MSD.PRINT.RECORD | Bin 0 -> 21154 bytes .../UV/catdir/%AUV%AR8.MSD.PRINT.RECORD.OLD | Bin 0 -> 13410 bytes Ardent/UV/catdir/%AUV%AR8.MSD.PURGE | Bin 0 -> 14159 bytes Ardent/UV/catdir/%AUV%AR8.MSD.PURGE.NEW | Bin 0 -> 14330 bytes Ardent/UV/catdir/%AUV%AR8.MSD.RESP.BY.SOURCE | Bin 0 -> 8116 bytes .../catdir/%AUV%AR8.MSD.RESP.BY.SOURCE.100897 | Bin 0 -> 7674 bytes .../UV/catdir/%AUV%AR8.MSD.RESPONSE.BY.SOURCE | Bin 0 -> 9248 bytes Ardent/UV/catdir/%AUV%AR8.MSD.SECURITY.PRINT | Bin 0 -> 6402 bytes Ardent/UV/catdir/%AUV%AR8.MSD.SEG100 | Bin 0 -> 6243 bytes Ardent/UV/catdir/%AUV%AR8.MSD.SEG100.102997 | Bin 0 -> 6081 bytes Ardent/UV/catdir/%AUV%AR8.MSD.SEG150 | Bin 0 -> 5151 bytes Ardent/UV/catdir/%AUV%AR8.MSD.SEG150.102997 | Bin 0 -> 4980 bytes Ardent/UV/catdir/%AUV%AR8.MSD.SEG175 | Bin 0 -> 7061 bytes Ardent/UV/catdir/%AUV%AR8.MSD.SEG175.102997 | Bin 0 -> 6892 bytes Ardent/UV/catdir/%AUV%AR8.MSD.SEGMENT | Bin 0 -> 10063 bytes Ardent/UV/catdir/%AUV%AR8.MSD.SUB.REPORT1 | Bin 0 -> 3238 bytes Ardent/UV/catdir/%AUV%AR8.MSD.SUB.SELECT | Bin 0 -> 8371 bytes Ardent/UV/catdir/%AUV%AR8.MSD.TOP.GIVERS | Bin 0 -> 12750 bytes Ardent/UV/catdir/%AUV%AR8.MSD.TOTAL.RANGE | Bin 0 -> 4356 bytes Ardent/UV/catdir/%AUV%AR8.MSD.UPDT.LET | Bin 0 -> 5018 bytes Ardent/UV/catdir/%AUV%AR8.MSD.UPDT.LET2 | Bin 0 -> 8492 bytes Ardent/UV/catdir/%AUV%AR8.MSD.USER.SECURITY | Bin 0 -> 23230 bytes .../catdir/%AUV%AR8.MSD.USER.SECURITY.102999 | Bin 0 -> 22944 bytes .../UV/catdir/%AUV%AR8.MSD.USER.SECURITY.TEST | Bin 0 -> 23235 bytes .../catdir/%AUV%AR8.MSD.USER.SECURITY.TEST2 | Bin 0 -> 23236 bytes Ardent/UV/catdir/%AUV%AR8.MSD.ZIP.STARS.BULK | Bin 0 -> 6189 bytes Ardent/UV/catdir/%AUV%AR8.NOTE10 | Bin 0 -> 3189 bytes Ardent/UV/catdir/%AUV%AR8.NOTE10.BY.TYPE | Bin 0 -> 3416 bytes Ardent/UV/catdir/%AUV%AR8.NOTES.LIST | Bin 0 -> 3099 bytes Ardent/UV/catdir/%AUV%AR8.ONLINE.DEFAULT | Bin 0 -> 6054 bytes Ardent/UV/catdir/%AUV%AR8.ONLINE.HELP | Bin 0 -> 3809 bytes Ardent/UV/catdir/%AUV%AR8.ORDER.DEFAULT | Bin 0 -> 5726 bytes Ardent/UV/catdir/%AUV%AR8.ORDER.RPT1 | Bin 0 -> 2799 bytes Ardent/UV/catdir/%AUV%AR8.OS.3 | Bin 0 -> 3300 bytes Ardent/UV/catdir/%AUV%AR8.PLEDGE.DEFAULT | Bin 0 -> 5681 bytes Ardent/UV/catdir/%AUV%AR8.PLGP32 | Bin 0 -> 2188 bytes Ardent/UV/catdir/%AUV%AR8.PORT.INIT | Bin 0 -> 3687 bytes Ardent/UV/catdir/%AUV%AR8.PRO10.16 | Bin 0 -> 1834 bytes Ardent/UV/catdir/%AUV%AR8.QUICKEY.IMPORT | Bin 0 -> 15084 bytes Ardent/UV/catdir/%AUV%AR8.R.BULK.REPORT | Bin 0 -> 6245 bytes Ardent/UV/catdir/%AUV%AR8.REG.DEFAULT | Bin 0 -> 6048 bytes Ardent/UV/catdir/%AUV%AR8.REPRINT | Bin 0 -> 1858 bytes Ardent/UV/catdir/%AUV%AR8.RESPONSE.BY.SEGMENT | Bin 0 -> 11960 bytes Ardent/UV/catdir/%AUV%AR8.RPT060 | Bin 0 -> 5725 bytes Ardent/UV/catdir/%AUV%AR8.RPT060.082198 | Bin 0 -> 5610 bytes Ardent/UV/catdir/%AUV%AR8.RPT061 | Bin 0 -> 4837 bytes Ardent/UV/catdir/%AUV%AR8.RPT071 | Bin 0 -> 7310 bytes Ardent/UV/catdir/%AUV%AR8.RPT071.080498 | Bin 0 -> 6677 bytes Ardent/UV/catdir/%AUV%AR8.RPT071.082198 | Bin 0 -> 7045 bytes Ardent/UV/catdir/%AUV%AR8.RPT402 | Bin 0 -> 4530 bytes Ardent/UV/catdir/%AUV%AR8.RPT403 | Bin 0 -> 6464 bytes Ardent/UV/catdir/%AUV%AR8.RPT404A | Bin 0 -> 7949 bytes Ardent/UV/catdir/%AUV%AR8.RPT404B | Bin 0 -> 2474 bytes Ardent/UV/catdir/%AUV%AR8.RPT700 | Bin 0 -> 6658 bytes Ardent/UV/catdir/%AUV%AR8.RPT800 | Bin 0 -> 3007 bytes Ardent/UV/catdir/%AUV%AR8.RPTP10.2 | Bin 0 -> 2231 bytes Ardent/UV/catdir/%AUV%AR8.RPTP10.27 | Bin 0 -> 2250 bytes Ardent/UV/catdir/%AUV%AR8.RPTP10.29 | Bin 0 -> 2381 bytes Ardent/UV/catdir/%AUV%AR8.RPTP10.3 | Bin 0 -> 3228 bytes Ardent/UV/catdir/%AUV%AR8.RPTP10.4 | Bin 0 -> 2391 bytes Ardent/UV/catdir/%AUV%AR8.RPTP10.5 | Bin 0 -> 3425 bytes Ardent/UV/catdir/%AUV%AR8.SECURITY.CHECK | Bin 0 -> 1690 bytes Ardent/UV/catdir/%AUV%AR8.SHIPPER | Bin 0 -> 2241 bytes Ardent/UV/catdir/%AUV%AR8.STATUS.CHANGE | Bin 0 -> 4288 bytes Ardent/UV/catdir/%AUV%AR8.STATUS.CREATE | Bin 0 -> 2592 bytes Ardent/UV/catdir/%AUV%AR8.SUB.DEFAULT | Bin 0 -> 5672 bytes Ardent/UV/catdir/%AUV%AR8.TAB700 | Bin 0 -> 5739 bytes Ardent/UV/catdir/%AUV%AR8.TAB701 | Bin 0 -> 1323 bytes Ardent/UV/catdir/%AUV%AR8.TAB710 | Bin 0 -> 5511 bytes Ardent/UV/catdir/%AUV%AR8.TAPE.SELECT.PROC | Bin 0 -> 3996 bytes Ardent/UV/catdir/%AUV%AR8.TRANSFER.DATA | Bin 0 -> 28649 bytes .../UV/catdir/%AUV%AR8.TRANSFER.DATA.052599 | Bin 0 -> 24188 bytes .../UV/catdir/%AUV%AR8.TRANSFER.DATA.072399 | Bin 0 -> 26889 bytes .../UV/catdir/%AUV%AR8.TRANSFER.DATA.BHM.txt | Bin 0 -> 26310 bytes Ardent/UV/catdir/%AUV%AR8.TRANSFER.DATA.WADE | Bin 0 -> 26887 bytes Ardent/UV/catdir/%AUV%AR8.USER.REPORT | Bin 0 -> 2790 bytes Ardent/UV/catdir/%AUV%AR8.WADE | Bin 0 -> 3308 bytes Ardent/UV/catdir/%AUV%AR8.WK.ATT.6.1 | Bin 0 -> 928 bytes Ardent/UV/catdir/%AUV%AR8.ZIP.LIST | Bin 0 -> 2797 bytes Ardent/UV/catdir/%AUV%ARCF | Bin 0 -> 178 bytes Ardent/UV/catdir/%AUV%ARCF.DESC.CHANGE | Bin 0 -> 1415 bytes Ardent/UV/catdir/%AUV%ARCF.WADE | Bin 0 -> 8984 bytes Ardent/UV/catdir/%AUV%ARCP | Bin 0 -> 1706 bytes Ardent/UV/catdir/%AUV%ARCP2 | Bin 0 -> 2387 bytes Ardent/UV/catdir/%AUV%ARCP3 | Bin 0 -> 1936 bytes Ardent/UV/catdir/%AUV%ARCV.SHIPPER.INDEXES | Bin 0 -> 3501 bytes Ardent/UV/catdir/%AUV%ARECORD.IS.LOCKED | Bin 0 -> 1142 bytes .../UV/catdir/%AUV%ARECORD.LOCKS.PER.ACCOUNT | Bin 0 -> 2295 bytes Ardent/UV/catdir/%AUV%AREGISTRATIONS | Bin 0 -> 188 bytes .../UV/catdir/%AUV%AREMOVE.BAK.SEGMENTATION | Bin 0 -> 2984 bytes Ardent/UV/catdir/%AUV%AREMOVE.SEGMENTATION | Bin 0 -> 3620 bytes Ardent/UV/catdir/%AUV%AREMOVE.TRACKING | Bin 0 -> 1464 bytes Ardent/UV/catdir/%AUV%AREPLACE.INV.WAREHOUSE | Bin 0 -> 2176 bytes Ardent/UV/catdir/%AUV%AREPRINT | Bin 0 -> 1588 bytes Ardent/UV/catdir/%AUV%AREPRINT.BY.RECEIPT | Bin 0 -> 5875 bytes Ardent/UV/catdir/%AUV%ARESERVATION.DISP | Bin 0 -> 2255 bytes Ardent/UV/catdir/%AUV%ARESERVATION.ENTRY | Bin 0 -> 9328 bytes Ardent/UV/catdir/%AUV%ARESERVATION.SOURCE.RPT | Bin 0 -> 8123 bytes Ardent/UV/catdir/%AUV%ARESERVATION.VIEW | Bin 0 -> 1763 bytes Ardent/UV/catdir/%AUV%ARESET.WOF.CALLS | Bin 0 -> 406 bytes Ardent/UV/catdir/%AUV%ARESTORE.EMAILS | Bin 0 -> 2652 bytes Ardent/UV/catdir/%AUV%ARESTORE.EMAILS.MATRIXX | Bin 0 -> 3147 bytes .../UV/catdir/%AUV%ARESTORE.EMAILS.MATRIXX2 | Bin 0 -> 3148 bytes Ardent/UV/catdir/%AUV%ARESTORE.EMAILS2 | Bin 0 -> 2641 bytes .../%AUV%ARETRIEVE.REPORT.BUILD.NOFORMAT | Bin 0 -> 1405 bytes Ardent/UV/catdir/%AUV%ARKEYS | Bin 0 -> 2774 bytes Ardent/UV/catdir/%AUV%ARKEYS.INV | Bin 0 -> 2762 bytes Ardent/UV/catdir/%AUV%ARL | Bin 0 -> 177 bytes Ardent/UV/catdir/%AUV%ARMI.CHURCH.ZIP.TABLE | Bin 0 -> 3512 bytes .../catdir/%AUV%ARMI.CHURCH.ZIP.TABLE.062399 | Bin 0 -> 3146 bytes Ardent/UV/catdir/%AUV%ARMI.FIX | Bin 0 -> 1566 bytes Ardent/UV/catdir/%AUV%ARMI.FIX.LNAME | Bin 0 -> 2132 bytes Ardent/UV/catdir/%AUV%ARMI.FIX.PM.PLEDGES | Bin 0 -> 1985 bytes Ardent/UV/catdir/%AUV%ARMI.FIX.ZIP | Bin 0 -> 1844 bytes Ardent/UV/catdir/%AUV%ARMI.FLATFILE.SPECIAL | Bin 0 -> 9924 bytes Ardent/UV/catdir/%AUV%ARMI.PLEDGE.RPT1 | Bin 0 -> 2115 bytes Ardent/UV/catdir/%AUV%ARMI.PMA.DETAIL.RPT | Bin 0 -> 10302 bytes Ardent/UV/catdir/%AUV%ARMI.PMA.DETAIL.RPT2 | Bin 0 -> 14709 bytes .../catdir/%AUV%ARMI.PMA.DETAIL.RPT2.071399 | Bin 0 -> 13486 bytes Ardent/UV/catdir/%AUV%ARMI.PMA.SUMMARY.RPT | Bin 0 -> 19271 bytes Ardent/UV/catdir/%AUV%AROYALTY.TRANS | Bin 0 -> 188 bytes Ardent/UV/catdir/%AUV%ARSV | Bin 0 -> 178 bytes Ardent/UV/catdir/%AUV%ARSV.CALC.PAID | Bin 0 -> 1711 bytes Ardent/UV/catdir/%AUV%ARSV.ROOM.SUB | Bin 0 -> 5951 bytes Ardent/UV/catdir/%AUV%AS.PRINT | Bin 0 -> 1498 bytes Ardent/UV/catdir/%AUV%ASALES.TAX.RPT1 | Bin 0 -> 5585 bytes Ardent/UV/catdir/%AUV%ASALES.TAX.RPT1.041999 | Bin 0 -> 5256 bytes Ardent/UV/catdir/%AUV%ASCAN.VOC.LOCAL | Bin 0 -> 1834 bytes Ardent/UV/catdir/%AUV%ASCOTT.ICM.PLEDGE.FIX | Bin 0 -> 3154 bytes Ardent/UV/catdir/%AUV%ASCOTT.MOVE.EMAIL | Bin 0 -> 2587 bytes Ardent/UV/catdir/%AUV%ASCRN | Bin 0 -> 179 bytes Ardent/UV/catdir/%AUV%ASEGM.RPT.MEM | Bin 0 -> 5495 bytes Ardent/UV/catdir/%AUV%ASEGMENT.REDO.PREP | Bin 0 -> 2167 bytes Ardent/UV/catdir/%AUV%ASELECT.ICM.APPEAL | Bin 0 -> 7470 bytes Ardent/UV/catdir/%AUV%ASELECT.NOPHONE | Bin 0 -> 1929 bytes Ardent/UV/catdir/%AUV%ASELECT.PHONE | Bin 0 -> 2987 bytes Ardent/UV/catdir/%AUV%ASERIES.PULL | Bin 0 -> 6770 bytes Ardent/UV/catdir/%AUV%ASET.FONTS | Bin 0 -> 1367 bytes Ardent/UV/catdir/%AUV%ASET.LANDSCAPE | Bin 0 -> 1234 bytes Ardent/UV/catdir/%AUV%ASET.PRINTER | Bin 0 -> 5750 bytes Ardent/UV/catdir/%AUV%ASET.RESET | Bin 0 -> 1227 bytes Ardent/UV/catdir/%AUV%ASET.SMALL | Bin 0 -> 1230 bytes Ardent/UV/catdir/%AUV%ASET.SYSTEM.OPTIONS | Bin 0 -> 2073 bytes Ardent/UV/catdir/%AUV%ASETUP.OPTIONS | Bin 0 -> 14636 bytes Ardent/UV/catdir/%AUV%ASETUP.OPTIONS2 | Bin 0 -> 5354 bytes Ardent/UV/catdir/%AUV%ASG.MEM | Bin 0 -> 181 bytes Ardent/UV/catdir/%AUV%ASHIP.INFO.MAINT | Bin 0 -> 1770 bytes Ardent/UV/catdir/%AUV%ASL | Bin 0 -> 177 bytes Ardent/UV/catdir/%AUV%ASORT.TEST | Bin 0 -> 1469 bytes Ardent/UV/catdir/%AUV%ASPA.TEST | Bin 0 -> 362 bytes Ardent/UV/catdir/%AUV%ASRR | Bin 0 -> 4070 bytes Ardent/UV/catdir/%AUV%ASTATE.GEN.UPDATE | Bin 0 -> 2984 bytes Ardent/UV/catdir/%AUV%ASTATUS.CODES | Bin 0 -> 187 bytes Ardent/UV/catdir/%AUV%ASUPPORT.RECORD | Bin 0 -> 189 bytes .../catdir/%AUV%ASUPPORTING.CHURCH.FLATFILE | Bin 0 -> 4417 bytes Ardent/UV/catdir/%AUV%ASYS | Bin 0 -> 178 bytes Ardent/UV/catdir/%AUV%ASYS2 | Bin 0 -> 179 bytes Ardent/UV/catdir/%AUV%ASYSTEM.SETUP | Bin 0 -> 1535 bytes Ardent/UV/catdir/%AUV%AT132 | Bin 0 -> 874 bytes Ardent/UV/catdir/%AUV%AT80 | Bin 0 -> 872 bytes Ardent/UV/catdir/%AUV%ATAB0020 | Bin 0 -> 4396 bytes Ardent/UV/catdir/%AUV%ATAB710.SUB | Bin 0 -> 3973 bytes Ardent/UV/catdir/%AUV%ATAX.RECEIPT.BUILD | Bin 0 -> 17510 bytes Ardent/UV/catdir/%AUV%ATAX.RECEIPT.FLAT | Bin 0 -> 9020 bytes Ardent/UV/catdir/%AUV%ATCN.DBASE.UPDATE | Bin 0 -> 4238 bytes .../%AUV%ATD800.TABLE.UPDATE.EXCEPT.SUB | Bin 0 -> 4735 bytes Ardent/UV/catdir/%AUV%ATD800.TABLE.UPDATE.SUB | Bin 0 -> 6688 bytes .../%AUV%ATD888.TABLE.UPDATE.EXCEPT.SUB | Bin 0 -> 4735 bytes Ardent/UV/catdir/%AUV%ATD888.TABLE.UPDATE.SUB | Bin 0 -> 6686 bytes Ardent/UV/catdir/%AUV%ATDJ.CERTIFICATE | Bin 0 -> 6398 bytes Ardent/UV/catdir/%AUV%ATDJ.INV.SALES.RPT1 | Bin 0 -> 7495 bytes Ardent/UV/catdir/%AUV%ATDJ.INV.SALES.RPT2 | Bin 0 -> 5432 bytes Ardent/UV/catdir/%AUV%ATDJ.INV.SALES.RPT3 | Bin 0 -> 5865 bytes Ardent/UV/catdir/%AUV%ATDJ.INV.SALES.RPT4 | Bin 0 -> 5658 bytes Ardent/UV/catdir/%AUV%ATDJ.INV.SALES.RPT5 | Bin 0 -> 5583 bytes Ardent/UV/catdir/%AUV%ATDJ.INV.SALES.RPT6 | Bin 0 -> 8132 bytes Ardent/UV/catdir/%AUV%ATDJ.PR2000.DETAIL.RPT | Bin 0 -> 4695 bytes Ardent/UV/catdir/%AUV%ATDJ.REG.RPT.SUB | Bin 0 -> 3424 bytes Ardent/UV/catdir/%AUV%ATDJREG.CMSD.DO02.CTRL | Bin 0 -> 1115 bytes Ardent/UV/catdir/%AUV%ATDJREG.NT.DO02 | Bin 0 -> 11619 bytes Ardent/UV/catdir/%AUV%ATDJREG.R8.DAILYOP | Bin 0 -> 8786 bytes Ardent/UV/catdir/%AUV%ATEMP | Bin 0 -> 1444 bytes Ardent/UV/catdir/%AUV%ATEST | Bin 0 -> 13547 bytes Ardent/UV/catdir/%AUV%ATEST.MEDIA.BUILD | Bin 0 -> 3479 bytes Ardent/UV/catdir/%AUV%ATEST.MEDIA.RPT | Bin 0 -> 1647 bytes Ardent/UV/catdir/%AUV%ATEST.OCONV | Bin 0 -> 1149 bytes Ardent/UV/catdir/%AUV%ATEST.PRO | Bin 0 -> 5757 bytes Ardent/UV/catdir/%AUV%ATEST.PT | Bin 0 -> 1108 bytes Ardent/UV/catdir/%AUV%ATEST.SPEED | Bin 0 -> 1200 bytes Ardent/UV/catdir/%AUV%ATEST.TRIM | Bin 0 -> 285 bytes Ardent/UV/catdir/%AUV%ATEST2 | Bin 0 -> 1336 bytes Ardent/UV/catdir/%AUV%ATESTIMONY.DISP | Bin 0 -> 2607 bytes Ardent/UV/catdir/%AUV%ATESTIMONY.ENTRY | Bin 0 -> 12548 bytes Ardent/UV/catdir/%AUV%ATESTIMONY.ENTRY.OLD | Bin 0 -> 10631 bytes Ardent/UV/catdir/%AUV%ATESTIMONY.VIEW | Bin 0 -> 1753 bytes Ardent/UV/catdir/%AUV%ATESTIT | Bin 0 -> 192 bytes Ardent/UV/catdir/%AUV%ATESTME | Bin 0 -> 192 bytes Ardent/UV/catdir/%AUV%ATIMER | Bin 0 -> 376 bytes Ardent/UV/catdir/%AUV%ATITLE.CODE.UPDATE | Bin 0 -> 2871 bytes Ardent/UV/catdir/%AUV%ATKT | Bin 0 -> 178 bytes Ardent/UV/catdir/%AUV%ATRANS.AM.CONVERT | Bin 0 -> 12869 bytes Ardent/UV/catdir/%AUV%ATRANS.BA.AUDIT | Bin 0 -> 11145 bytes Ardent/UV/catdir/%AUV%ATRANS.BA.AUDIT.062398 | Bin 0 -> 10596 bytes Ardent/UV/catdir/%AUV%ATRANS.CHECK | Bin 0 -> 3746 bytes Ardent/UV/catdir/%AUV%ATSM.PICKING.PRINT | Bin 0 -> 11159 bytes Ardent/UV/catdir/%AUV%ATSORT | Bin 0 -> 1473 bytes Ardent/UV/catdir/%AUV%ATSORT.021899 | Bin 0 -> 1525 bytes Ardent/UV/catdir/%AUV%ATWOS.NO.ONES | Bin 0 -> 1763 bytes Ardent/UV/catdir/%AUV%AUPDATE.CC.DEPOSITS | Bin 0 -> 4815 bytes Ardent/UV/catdir/%AUV%AUPDATE.GIFTS | Bin 0 -> 1396 bytes .../UV/catdir/%AUV%AUPDATE.ORDERS.SOLDTO.INFO | Bin 0 -> 2203 bytes Ardent/UV/catdir/%AUV%AUPS.FLAT | Bin 0 -> 3152 bytes Ardent/UV/catdir/%AUV%AUPS.TEST | Bin 0 -> 1098 bytes Ardent/UV/catdir/%AUV%AUSE.NT | Bin 0 -> 560 bytes Ardent/UV/catdir/%AUV%AUV.ACCOUNT.MAINT | Bin 0 -> 5014 bytes Ardent/UV/catdir/%AUV%AUV.DIFF | Bin 0 -> 1919 bytes Ardent/UV/catdir/%AUV%AUV.EDIT | Bin 0 -> 72003 bytes Ardent/UV/catdir/%AUV%AVCF.MERGE.QUICK | Bin 0 -> 4241 bytes Ardent/UV/catdir/%AUV%AVDB | Bin 0 -> 230 bytes Ardent/UV/catdir/%AUV%AVDB2 | Bin 0 -> 435 bytes Ardent/UV/catdir/%AUV%AVOC.COMPARE | Bin 0 -> 2999 bytes Ardent/UV/catdir/%AUV%AWADE.TEST | Bin 0 -> 307 bytes Ardent/UV/catdir/%AUV%AWCM.800.INTERFACE | Bin 0 -> 6704 bytes Ardent/UV/catdir/%AUV%AWCM.PM.NOTES | Bin 0 -> 187 bytes Ardent/UV/catdir/%AUV%AWCM.PM.SUBSCRIPTION | Bin 0 -> 194 bytes Ardent/UV/catdir/%AUV%AWCM.WEST.INTERFACE | Bin 0 -> 11806 bytes .../UV/catdir/%AUV%AWCM.WEST.INTERFACE.050498 | Bin 0 -> 11630 bytes Ardent/UV/catdir/%AUV%AWCM.WEST.INTERFACE.NEW | Bin 0 -> 11353 bytes Ardent/UV/catdir/%AUV%AWEL.IDX | Bin 0 -> 182 bytes Ardent/UV/catdir/%AUV%AWEL.IDX.UPDATE | Bin 0 -> 1557 bytes Ardent/UV/catdir/%AUV%AWEST.CHECK.LAYOUT | Bin 0 -> 6502 bytes Ardent/UV/catdir/%AUV%AWHAT.TIME | Bin 0 -> 268 bytes Ardent/UV/catdir/%AUV%AWHM.PICKING.PRINT | Bin 0 -> 13063 bytes Ardent/UV/catdir/%AUV%AWHOLOCKEDME | Bin 0 -> 576 bytes Ardent/UV/catdir/%AUV%AWMB | Bin 0 -> 324 bytes Ardent/UV/catdir/%AUV%AWOF.FIX.MG710 | Bin 0 -> 5480 bytes Ardent/UV/catdir/%AUV%AWOF.OPER.BACKLOG.RPT1 | Bin 0 -> 4821 bytes Ardent/UV/catdir/%AUV%AWOF.PICKING.PRINT | Bin 0 -> 6497 bytes Ardent/UV/catdir/%AUV%AWOF.PREV.NEW.GIFT.RPT | Bin 0 -> 6984 bytes .../UV/catdir/%AUV%AWOF.WORDPROC.BACKLOG.RPT | Bin 0 -> 4484 bytes Ardent/UV/catdir/%AUV%AWOW.LABEL1 | Bin 0 -> 4412 bytes Ardent/UV/catdir/%AUV%AXS.FORM | Bin 0 -> 182 bytes Ardent/UV/catdir/%AUV%AY2K-CHECKER | Bin 0 -> 4362 bytes Ardent/UV/catdir/%AUV%AZIP.RADIUS.SELECT | Bin 0 -> 5031 bytes Ardent/UV/catdir/%AUV%AZIP.READ.TAPE | Bin 0 -> 6688 bytes Ardent/UV/catdir/%AUV%AZIP.SUB | Bin 0 -> 4091 bytes Ardent/UV/catdir/%AUV%AZIP.SUB.2 | Bin 0 -> 595 bytes Ardent/UV/catdir/%AUV%AZIP.SUB2 | Bin 0 -> 833 bytes Ardent/UV/catdir/%AUV%AZIP.WRITE.TAPE | Bin 0 -> 4283 bytes Ardent/UV/catdir/%AUV%AZIP4.PULL.UPDATE | Bin 0 -> 501 bytes Ardent/UV/catdir/%AUV%AZM | Bin 0 -> 177 bytes Ardent/UV/catdir/%AUV%Ainvoice | Bin 0 -> 182 bytes Ardent/UV/catdir/%AUV%Amcwe.donor.rpt6 | Bin 0 -> 6508 bytes Ardent/UV/catdir/%AUV%Amcwe.donor.rpt7 | Bin 0 -> 6971 bytes Ardent/UV/catdir/%AUV%Amcwe.newname.rpt5.txt | Bin 0 -> 9439 bytes Ardent/UV/catdir/%AUV%Amcwe.preclose.edit.txt | Bin 0 -> 1508 bytes Ardent/UV/catdir/%AUVPATHNAME | Bin 0 -> 4758 bytes Ardent/UV/catdir/%AUVPRINTMSG | Bin 0 -> 1771 bytes Ardent/UV/catdir/%AUVREADMSG | Bin 0 -> 1614 bytes Ardent/UV/catdir/%AVERIFY.CATALOG | Bin 0 -> 23483 bytes Ardent/UV/catdir/%AVERIFY.SCHEMA | Bin 0 -> 12477 bytes Ardent/UV/catdir/%AVERIFY.SCHEMAS | Bin 0 -> 4306 bytes Ardent/UV/catdir/%AVERIFY.TABLE | Bin 0 -> 43233 bytes Ardent/UV/catdir/%AWK1.EXPORT | Bin 0 -> 4428 bytes Ardent/UV/catdir/%AWRAP.PRINT | Bin 0 -> 835 bytes Ardent/UV/catdir/%AYES.NO.BOX.B | Bin 0 -> 1851 bytes Ardent/UV/catdir/%Avmadmsub | Bin 0 -> 93374 bytes Ardent/UV/catdir/-EXPAND | Bin 0 -> 3622 bytes Ardent/UV/catdir/-EXTERNALG | Bin 0 -> 224 bytes Ardent/UV/catdir/-FINDFILE | Bin 0 -> 1958 bytes Ardent/UV/catdir/-FORMAT.BASIC | Bin 0 -> 7156 bytes Ardent/UV/catdir/-GET.FILE.NAME | Bin 0 -> 667 bytes Ardent/UV/catdir/-GTE | Bin 0 -> 137 bytes Ardent/UV/catdir/-IDENT | Bin 0 -> 170 bytes Ardent/UV/catdir/-ISNULLS | Bin 0 -> 135 bytes Ardent/UV/catdir/-LOAD.PIOPEN | Bin 0 -> 2216 bytes Ardent/UV/catdir/-MATBLOCK | Bin 0 -> 468 bytes Ardent/UV/catdir/-NEGS | Bin 0 -> 135 bytes Ardent/UV/catdir/-OpenError | Bin 0 -> 1001 bytes Ardent/UV/catdir/-PERMISSIONS | Bin 0 -> 664 bytes Ardent/UV/catdir/-PRINT.RECORD | Bin 0 -> 1053 bytes Ardent/UV/catdir/-SQLINTCHK | Bin 0 -> 1106 bytes Ardent/UV/catdir/-STRIPSTRINGS | Bin 0 -> 1442 bytes Ardent/UV/catdir/-TRIMBS | Bin 0 -> 135 bytes Ardent/UV/catdir/-TRIMFS | Bin 0 -> 135 bytes Ardent/UV/catdir/-TRIMS | Bin 0 -> 135 bytes Ardent/UV/catdir/-UVORNF | Bin 0 -> 1844 bytes Ardent/UV/catdir/-YESNO | Bin 0 -> 1367 bytes Ardent/UV/catdir/.Type1 | 0 Ardent/UV/gci.menu.u | 78 + Ardent/UV/gcidir/Make.gci | 66 + Ardent/UV/gcidir/gci_args.c | 64 + Ardent/UV/gcidir/gci_hello.c | 34 + Ardent/UV/gcidir/gci_malloc.c | 95 + Ardent/UV/gcidir/gci_mult.c | 39 + Ardent/UV/gcidir/gcimake.bat | 38 + Ardent/UV/gcidir/include/COMMON.h | 40 + Ardent/UV/gcidir/include/DATUM.h | 204 + Ardent/UV/gcidir/include/DBFILE.h | 1263 + Ardent/UV/gcidir/include/DBTEST.h | 134 + Ardent/UV/gcidir/include/DEVICE.h | 45 + Ardent/UV/gcidir/include/FNNAME.h | 31 + Ardent/UV/gcidir/include/GENTXT.h | 124 + Ardent/UV/gcidir/include/JOB.h | 76 + Ardent/UV/gcidir/include/LAYER.h | 73 + Ardent/UV/gcidir/include/LEVEL.h | 64 + Ardent/UV/gcidir/include/LGevents.h | 34 + Ardent/UV/gcidir/include/LK_include.h | 240 + Ardent/UV/gcidir/include/LOCK.h | 421 + Ardent/UV/gcidir/include/MFILE.h | 186 + Ardent/UV/gcidir/include/MLOG.h | 187 + Ardent/UV/gcidir/include/MTU.h | 131 + Ardent/UV/gcidir/include/NET.h | 65 + Ardent/UV/gcidir/include/NLS.h | 358 + Ardent/UV/gcidir/include/NLSHKprivate.h | 47 + Ardent/UV/gcidir/include/NLShooks.h | 85 + Ardent/UV/gcidir/include/NLSlc.h | 818 + Ardent/UV/gcidir/include/PFILE.h | 183 + Ardent/UV/gcidir/include/PROGRAM.h | 95 + Ardent/UV/gcidir/include/PROMPT.h | 35 + Ardent/UV/gcidir/include/PSAVE.h | 32 + Ardent/UV/gcidir/include/RUNDATA.h | 64 + Ardent/UV/gcidir/include/SEQFILE.h | 82 + Ardent/UV/gcidir/include/TCPIP.h | 39 + Ardent/UV/gcidir/include/TX.h | 598 + Ardent/UV/gcidir/include/UCI.h | 1185 + Ardent/UV/gcidir/include/UDR_include.h | 592 + Ardent/UV/gcidir/include/UVERSION.h | 80 + Ardent/UV/gcidir/include/UVODBC.h | 1049 + Ardent/UV/gcidir/include/UVOD_discon.h | 772 + Ardent/UV/gcidir/include/api_functs.h | 215 + Ardent/UV/gcidir/include/api_public.h | 302 + Ardent/UV/gcidir/include/api_server.h | 216 + Ardent/UV/gcidir/include/atfuncts.h | 168 + Ardent/UV/gcidir/include/atvars.h | 185 + Ardent/UV/gcidir/include/backup.h | 66 + Ardent/UV/gcidir/include/backup1.h | 921 + Ardent/UV/gcidir/include/bashead.h | 121 + Ardent/UV/gcidir/include/basic.h | 103 + Ardent/UV/gcidir/include/bscan.h | 48 + Ardent/UV/gcidir/include/btree.h | 360 + Ardent/UV/gcidir/include/c_LOG.h | 431 + Ardent/UV/gcidir/include/c_errd.h | 21 + Ardent/UV/gcidir/include/c_getpu.h | 57 + Ardent/UV/gcidir/include/c_printerio.h | 149 + Ardent/UV/gcidir/include/catalog.h | 60 + Ardent/UV/gcidir/include/cdict.h | 75 + Ardent/UV/gcidir/include/cfileinfo.h | 58 + Ardent/UV/gcidir/include/chars.h | 42 + Ardent/UV/gcidir/include/ckeyword.h | 333 + Ardent/UV/gcidir/include/compare.h | 31 + Ardent/UV/gcidir/include/compiler.h | 628 + Ardent/UV/gcidir/include/creatfil.h | 65 + Ardent/UV/gcidir/include/date.h | 33 + Ardent/UV/gcidir/include/disk.h | 419 + Ardent/UV/gcidir/include/dispatch.h | 429 + Ardent/UV/gcidir/include/dynamic.h | 41 + Ardent/UV/gcidir/include/execute.h | 278 + Ardent/UV/gcidir/include/exesave.h | 72 + Ardent/UV/gcidir/include/extern.h | 121 + Ardent/UV/gcidir/include/filefix.h | 373 + Ardent/UV/gcidir/include/filefix_defs.h | 83 + Ardent/UV/gcidir/include/filefix_diags.h | 99 + Ardent/UV/gcidir/include/filefix_errors.h | 65 + Ardent/UV/gcidir/include/filefix_fixes.h | 93 + Ardent/UV/gcidir/include/filefix_functs.h | 68 + Ardent/UV/gcidir/include/filefix_public.h | 176 + Ardent/UV/gcidir/include/filefix_server.h | 44 + Ardent/UV/gcidir/include/filehdr.h | 249 + Ardent/UV/gcidir/include/filenams.h | 47 + Ardent/UV/gcidir/include/fixtool.h | 78 + Ardent/UV/gcidir/include/flavor.h | 39 + Ardent/UV/gcidir/include/fn_priv.h | 177 + Ardent/UV/gcidir/include/fn_pub.h | 55 + Ardent/UV/gcidir/include/fn_spec.h | 112 + Ardent/UV/gcidir/include/ftypdesc.h | 67 + Ardent/UV/gcidir/include/gci.h | 90 + Ardent/UV/gcidir/include/getput.h | 950 + Ardent/UV/gcidir/include/global.h | 193 + Ardent/UV/gcidir/include/hardware.h | 1798 ++ Ardent/UV/gcidir/include/hdroffsets.h | 161 + Ardent/UV/gcidir/include/ic_private.h | 281 + Ardent/UV/gcidir/include/iflags.h | 53 + Ardent/UV/gcidir/include/include.h | 218 + Ardent/UV/gcidir/include/inlist.h | 81 + Ardent/UV/gcidir/include/ioconv.h | 86 + Ardent/UV/gcidir/include/localsrv.h | 117 + Ardent/UV/gcidir/include/logglobal.h | 24 + Ardent/UV/gcidir/include/netglobal.h | 95 + Ardent/UV/gcidir/include/netstruct.h | 470 + Ardent/UV/gcidir/include/nparse.h | 270 + Ardent/UV/gcidir/include/nt.h | 244 + Ardent/UV/gcidir/include/nttimes.h | 33 + Ardent/UV/gcidir/include/null.h | 15 + Ardent/UV/gcidir/include/opcodes.h | 50 + Ardent/UV/gcidir/include/optable.h | 485 + Ardent/UV/gcidir/include/packages.h | 36 + Ardent/UV/gcidir/include/param.h | 113 + Ardent/UV/gcidir/include/pcdriver.h | 145 + Ardent/UV/gcidir/include/perfdata.h | 114 + Ardent/UV/gcidir/include/pi.decomp.h | 486 + Ardent/UV/gcidir/include/pi.lh.h | 237 + Ardent/UV/gcidir/include/pi.optab.h | 208 + Ardent/UV/gcidir/include/pi.t30conv.h | 188 + Ardent/UV/gcidir/include/plock.h | 38 + Ardent/UV/gcidir/include/port_status.h | 107 + Ardent/UV/gcidir/include/portstat.h | 168 + Ardent/UV/gcidir/include/print.h | 47 + Ardent/UV/gcidir/include/proc.h | 48 + Ardent/UV/gcidir/include/qcursor.h | 316 + Ardent/UV/gcidir/include/qdefine.h | 145 + Ardent/UV/gcidir/include/query.h | 1417 + Ardent/UV/gcidir/include/raid.h | 132 + Ardent/UV/gcidir/include/rlocked.h | 29 + Ardent/UV/gcidir/include/rm_publi.h | 72 + Ardent/UV/gcidir/include/rmv_desc.h | 53 + Ardent/UV/gcidir/include/rpc_public.h | 409 + Ardent/UV/gcidir/include/scanglob.h | 77 + Ardent/UV/gcidir/include/scratch.h | 32 + Ardent/UV/gcidir/include/sdml.h | 302 + Ardent/UV/gcidir/include/sdml_global.h | 106 + Ardent/UV/gcidir/include/sdml_lex.h | 162 + Ardent/UV/gcidir/include/selectinfo.h | 23 + Ardent/UV/gcidir/include/shcat.h | 73 + Ardent/UV/gcidir/include/sicaperm.h | 305 + Ardent/UV/gcidir/include/sinput.h | 64 + Ardent/UV/gcidir/include/sortparm.h | 40 + Ardent/UV/gcidir/include/sortstack.h | 74 + Ardent/UV/gcidir/include/sp.banner.h | 1695 ++ Ardent/UV/gcidir/include/term.h | 217 + Ardent/UV/gcidir/include/tinfo.h | 611 + Ardent/UV/gcidir/include/tinfo_sh.h | 19 + Ardent/UV/gcidir/include/tinfo_stt.h | 22 + Ardent/UV/gcidir/include/tiread.h | 637 + Ardent/UV/gcidir/include/tree.h | 347 + Ardent/UV/gcidir/include/trinlist.h | 67 + Ardent/UV/gcidir/include/tunables.h | 200 + Ardent/UV/gcidir/include/tunedef.h | 199 + Ardent/UV/gcidir/include/type.h | 35 + Ardent/UV/gcidir/include/typedef.h | 124 + Ardent/UV/gcidir/include/uid.h | 78 + Ardent/UV/gcidir/include/unirpc.h | 254 + Ardent/UV/gcidir/include/unishared.h | 29 + Ardent/UV/gcidir/include/uv.h | 583 + Ardent/UV/gcidir/include/uvaffin.h | 116 + Ardent/UV/gcidir/include/uvconfig.h | 155 + Ardent/UV/gcidir/include/uvfcntl.h | 33 + Ardent/UV/gcidir/include/uvlocale.h | 44 + Ardent/UV/gcidir/include/uvmalloc.h | 338 + Ardent/UV/gcidir/include/uvmsg.h | 92 + Ardent/UV/gcidir/include/uvshm.h | 68 + Ardent/UV/gcidir/include/uvsica.h | 384 + Ardent/UV/gcidir/include/uvsignal.h | 24 + Ardent/UV/gcidir/include/uvsql.h | 68 + Ardent/UV/gcidir/include/uvsqlowner.h | 37 + Ardent/UV/gcidir/include/uvsqlsrverr.h | 74 + Ardent/UV/gcidir/include/uvstat.h | 52 + Ardent/UV/gcidir/include/uvtic.h | 644 + Ardent/UV/gcidir/include/ux74f.h | 97 + Ardent/UV/gcidir/include/vector.h | 107 + Ardent/UV/gcidir/include/vm_ici.h | 351 + Ardent/UV/gcidir/include/wait.h | 93 + Ardent/UV/gcidir/include/wsckfextern.h | 70 + Ardent/UV/gcidir/include/wsckfptrs.h | 131 + Ardent/UV/gcidir/include/xa.h | 181 + Ardent/UV/gcidir/lib/universe.lib | Bin 0 -> 480460 bytes Ardent/UV/msg.text | 868 + Ardent/UV/nls.cmd | 60 + Ardent/UV/nls.uvinst.u | 156 + Ardent/UV/nls/charset/CS.ALPHAS | Bin 0 -> 4096 bytes Ardent/UV/nls/charset/CS.BLOCKS | Bin 0 -> 29696 bytes Ardent/UV/nls/charset/CS.CASES | Bin 0 -> 41984 bytes Ardent/UV/nls/charset/CS.DESCS | Bin 0 -> 1335296 bytes Ardent/UV/nls/charset/CS.TYPES | Bin 0 -> 6656 bytes Ardent/UV/nls/charset/D_CS.ALPHAS | Bin 0 -> 3072 bytes Ardent/UV/nls/charset/D_CS.BLOCKS | Bin 0 -> 2048 bytes Ardent/UV/nls/charset/D_CS.CASES | Bin 0 -> 5120 bytes Ardent/UV/nls/charset/D_CS.DESCS | Bin 0 -> 9216 bytes Ardent/UV/nls/charset/D_CS.TYPES | Bin 0 -> 3072 bytes Ardent/UV/nls/charset/D_WT.LOOKUP | Bin 0 -> 3072 bytes Ardent/UV/nls/charset/WT.LOOKUP | Bin 0 -> 4608 bytes Ardent/UV/nls/charset/install/.uvnlsmap | 1 + Ardent/UV/nls/locales/CLIENT.LCS | Bin 0 -> 5632 bytes Ardent/UV/nls/locales/D_CLIENT.LCS | Bin 0 -> 5120 bytes Ardent/UV/nls/locales/D_LANG.INFO | Bin 0 -> 6144 bytes Ardent/UV/nls/locales/D_LC.ALL | Bin 0 -> 5120 bytes Ardent/UV/nls/locales/D_LC.COLLATE | Bin 0 -> 6144 bytes Ardent/UV/nls/locales/D_LC.CTYPE | Bin 0 -> 11264 bytes Ardent/UV/nls/locales/D_LC.MONETARY | Bin 0 -> 7168 bytes Ardent/UV/nls/locales/D_LC.NUMERIC | Bin 0 -> 6144 bytes Ardent/UV/nls/locales/D_LC.TIME | Bin 0 -> 6144 bytes Ardent/UV/nls/locales/D_WT.TABLES | Bin 0 -> 3072 bytes Ardent/UV/nls/locales/D_install | Bin 0 -> 4096 bytes Ardent/UV/nls/locales/LANG.INFO | Bin 0 -> 9216 bytes Ardent/UV/nls/locales/LC.ALL | Bin 0 -> 12800 bytes Ardent/UV/nls/locales/LC.COLLATE | Bin 0 -> 5120 bytes Ardent/UV/nls/locales/LC.CTYPE | Bin 0 -> 5120 bytes Ardent/UV/nls/locales/LC.MONETARY | Bin 0 -> 7168 bytes Ardent/UV/nls/locales/LC.NUMERIC | Bin 0 -> 5120 bytes Ardent/UV/nls/locales/LC.TIME | Bin 0 -> 24576 bytes Ardent/UV/nls/locales/WT.TABLES/#TEMPLATE | 18 + .../UV/nls/locales/WT.TABLES/CYRILLIC-DEFAULT | 121 + Ardent/UV/nls/locales/WT.TABLES/GREEK-DEFAULT | 141 + .../UV/nls/locales/WT.TABLES/IDEOGRAPHS-BIG5 | 13069 +++++++++ Ardent/UV/nls/locales/WT.TABLES/IDEOGRAPHS-GB | 6771 +++++ .../UV/nls/locales/WT.TABLES/IDEOGRAPHS-JIS | 12169 ++++++++ .../UV/nls/locales/WT.TABLES/IDEOGRAPHS-KSC | 4632 +++ Ardent/UV/nls/locales/WT.TABLES/JPN-SJIS | 7752 +++++ Ardent/UV/nls/locales/WT.TABLES/KANA-DEFAULT | 211 + .../UV/nls/locales/WT.TABLES/LATIN-CROATIAN | 51 + Ardent/UV/nls/locales/WT.TABLES/LATIN-DANISH | 36 + .../UV/nls/locales/WT.TABLES/LATIN-ESTONIAN | 65 + .../UV/nls/locales/WT.TABLES/LATIN-HUNGARIAN | 48 + .../UV/nls/locales/WT.TABLES/LATIN-ICELANDIC | 62 + Ardent/UV/nls/locales/WT.TABLES/LATIN-LATVIAN | 80 + .../UV/nls/locales/WT.TABLES/LATIN-LITHUANIAN | 28 + .../UV/nls/locales/WT.TABLES/LATIN-NORWEGIAN | 30 + Ardent/UV/nls/locales/WT.TABLES/LATIN-POLISH | 58 + .../UV/nls/locales/WT.TABLES/LATIN-ROMANIAN | 42 + .../UV/nls/locales/WT.TABLES/LATIN-SLOVENIAN | 36 + Ardent/UV/nls/locales/WT.TABLES/LATIN-SPANISH | 34 + Ardent/UV/nls/locales/WT.TABLES/LATIN-SWEDISH | 37 + Ardent/UV/nls/locales/WT.TABLES/LATIN-TURKISH | 39 + .../UV/nls/locales/WT.TABLES/LATIN1-DEFAULT | 257 + .../UV/nls/locales/WT.TABLES/LATINX-DEFAULT | 180 + .../UV/nls/locales/WT.TABLES/LATINX2-DEFAULT | 109 + .../UV/nls/locales/WT.TABLES/LATINX3-DEFAULT | 295 + Ardent/UV/nls/locales/install/.uvnlsmap | 1 + Ardent/UV/nls/locales/install/1.DEFAULT | Bin 0 -> 544 bytes Ardent/UV/nls/locales/install/2.DEFAULT | Bin 0 -> 26 bytes Ardent/UV/nls/locales/install/3.DEFAULT | Bin 0 -> 76 bytes Ardent/UV/nls/locales/install/4.DEFAULT | Bin 0 -> 524296 bytes Ardent/UV/nls/locales/install/5.DEFAULT | Bin 0 -> 175 bytes Ardent/UV/nls/locales/install/6.DEFAULT | Bin 0 -> 262152 bytes Ardent/UV/nls/maps/CLIENT.MAPS | Bin 0 -> 2560 bytes Ardent/UV/nls/maps/D_CLIENT.MAPS | Bin 0 -> 5120 bytes Ardent/UV/nls/maps/D_MAP.DESCS | Bin 0 -> 6144 bytes Ardent/UV/nls/maps/D_MAP.TABLES | Bin 0 -> 5120 bytes Ardent/UV/nls/maps/D_install | Bin 0 -> 3072 bytes Ardent/UV/nls/maps/MAP.DESCS | Bin 0 -> 20480 bytes Ardent/UV/nls/maps/MAP.TABLES/#TEMPLATE | 13 + Ardent/UV/nls/maps/MAP.TABLES/ASCII | 3 + Ardent/UV/nls/maps/MAP.TABLES/BIG5 | 13712 +++++++++ Ardent/UV/nls/maps/MAP.TABLES/C0-CONTROLS | 5 + Ardent/UV/nls/maps/MAP.TABLES/C1-CONTROLS | 4 + Ardent/UV/nls/maps/MAP.TABLES/C1-MARKS | 8 + Ardent/UV/nls/maps/MAP.TABLES/DBCS-MARKS | 10 + Ardent/UV/nls/maps/MAP.TABLES/EBCDIC | 195 + Ardent/UV/nls/maps/MAP.TABLES/EBCDIC-037 | 196 + Ardent/UV/nls/maps/MAP.TABLES/EBCDIC-1026 | 196 + Ardent/UV/nls/maps/MAP.TABLES/EBCDIC-500V1 | 196 + Ardent/UV/nls/maps/MAP.TABLES/EBCDIC-875 | 190 + Ardent/UV/nls/maps/MAP.TABLES/EBCDIC-CTRLS | 68 + Ardent/UV/nls/maps/MAP.TABLES/GB2312-80 | 7447 +++++ Ardent/UV/nls/maps/MAP.TABLES/ISO8859-1 | 9 + Ardent/UV/nls/maps/MAP.TABLES/ISO8859-10 | 100 + Ardent/UV/nls/maps/MAP.TABLES/ISO8859-2 | 100 + Ardent/UV/nls/maps/MAP.TABLES/ISO8859-3 | 93 + Ardent/UV/nls/maps/MAP.TABLES/ISO8859-4 | 100 + Ardent/UV/nls/maps/MAP.TABLES/ISO8859-5 | 99 + Ardent/UV/nls/maps/MAP.TABLES/ISO8859-6 | 67 + Ardent/UV/nls/maps/MAP.TABLES/ISO8859-7 | 92 + Ardent/UV/nls/maps/MAP.TABLES/ISO8859-8 | 60 + Ardent/UV/nls/maps/MAP.TABLES/ISO8859-9 | 98 + Ardent/UV/nls/maps/MAP.TABLES/JIS-EUC2-MARKS | 8 + Ardent/UV/nls/maps/MAP.TABLES/JISX0201-A | 7 + Ardent/UV/nls/maps/MAP.TABLES/JISX0201-K | 65 + Ardent/UV/nls/maps/MAP.TABLES/JISX0208 | 6882 +++++ Ardent/UV/nls/maps/MAP.TABLES/JISX0212 | 5804 ++++ Ardent/UV/nls/maps/MAP.TABLES/JPN-EBCDIC | 49 + .../UV/nls/maps/MAP.TABLES/JPN-EBCDIC-IBM78 | 3 + .../nls/maps/MAP.TABLES/JPN-EBCDIC-IBM78-SEC | 3 + .../UV/nls/maps/MAP.TABLES/JPN-EBCDIC-IBM83 | 3 + .../nls/maps/MAP.TABLES/JPN-EBCDIC-IBM83-SEC | 3 + .../UV/nls/maps/MAP.TABLES/JPN-EBCDIC-JEF78 | 3 + .../nls/maps/MAP.TABLES/JPN-EBCDIC-JEF78-SEC | 3 + .../UV/nls/maps/MAP.TABLES/JPN-EBCDIC-JEF83 | 3 + .../nls/maps/MAP.TABLES/JPN-EBCDIC-JEF83-SEC | 3 + .../UV/nls/maps/MAP.TABLES/JPN-EBCDIC-KEIS78 | 3 + .../nls/maps/MAP.TABLES/JPN-EBCDIC-KEIS78-SEC | 3 + .../UV/nls/maps/MAP.TABLES/JPN-EBCDIC-KEIS83 | 3 + .../nls/maps/MAP.TABLES/JPN-EBCDIC-KEIS83-SEC | 3 + Ardent/UV/nls/maps/MAP.TABLES/JPN-EBCDIK | 143 + .../UV/nls/maps/MAP.TABLES/JPN-EBCDIK-IBM78 | 3 + .../nls/maps/MAP.TABLES/JPN-EBCDIK-IBM78-SEC | 3 + .../UV/nls/maps/MAP.TABLES/JPN-EBCDIK-IBM83 | 3 + .../nls/maps/MAP.TABLES/JPN-EBCDIK-IBM83-SEC | 3 + .../UV/nls/maps/MAP.TABLES/JPN-EBCDIK-JEF78 | 3 + .../nls/maps/MAP.TABLES/JPN-EBCDIK-JEF78-SEC | 3 + .../UV/nls/maps/MAP.TABLES/JPN-EBCDIK-JEF83 | 3 + .../nls/maps/MAP.TABLES/JPN-EBCDIK-JEF83-SEC | 3 + .../UV/nls/maps/MAP.TABLES/JPN-EBCDIK-KEIS78 | 3 + .../nls/maps/MAP.TABLES/JPN-EBCDIK-KEIS78-SEC | 3 + .../UV/nls/maps/MAP.TABLES/JPN-EBCDIK-KEIS83 | 3 + .../nls/maps/MAP.TABLES/JPN-EBCDIK-KEIS83-SEC | 3 + .../UV/nls/maps/MAP.TABLES/JPN-EBCDIKC-CTRL | 47 + Ardent/UV/nls/maps/MAP.TABLES/JPN-EUC-KAT | 6 + Ardent/UV/nls/maps/MAP.TABLES/JPN-EUC-ONE | 10 + Ardent/UV/nls/maps/MAP.TABLES/JPN-EUC-RTE | 413 + Ardent/UV/nls/maps/MAP.TABLES/JPN-EUC-RTE+ | 396 + Ardent/UV/nls/maps/MAP.TABLES/JPN-EUC-TWO | 7332 +++++ Ardent/UV/nls/maps/MAP.TABLES/JPN-IBM78 | 7272 +++++ Ardent/UV/nls/maps/MAP.TABLES/JPN-IBM83 | 7271 +++++ Ardent/UV/nls/maps/MAP.TABLES/JPN-JEF78 | 7312 +++++ Ardent/UV/nls/maps/MAP.TABLES/JPN-JEF83 | 7317 +++++ Ardent/UV/nls/maps/MAP.TABLES/JPN-JIPSE | 7334 +++++ Ardent/UV/nls/maps/MAP.TABLES/JPN-JIPSJ | 7334 +++++ Ardent/UV/nls/maps/MAP.TABLES/JPN-JIS8 | 10 + Ardent/UV/nls/maps/MAP.TABLES/JPN-JIS8-JIPSJ | 3 + .../UV/nls/maps/MAP.TABLES/JPN-JIS8-JIPSJ-SEC | 3 + .../UV/nls/maps/MAP.TABLES/JPN-JIS8EUC-CTRL | 10 + Ardent/UV/nls/maps/MAP.TABLES/JPN-KEIS-RTE | 31 + Ardent/UV/nls/maps/MAP.TABLES/JPN-KEIS78 | 6925 +++++ Ardent/UV/nls/maps/MAP.TABLES/JPN-KEIS83 | 6928 +++++ Ardent/UV/nls/maps/MAP.TABLES/JPN-NEBCDIK | 168 + .../UV/nls/maps/MAP.TABLES/JPN-NEBCDIK-JIPSE | 3 + .../nls/maps/MAP.TABLES/JPN-NEBCDIK-JIPSE-SEC | 3 + Ardent/UV/nls/maps/MAP.TABLES/JPN-SJIS | 6933 +++++ Ardent/UV/nls/maps/MAP.TABLES/KOI8-R | 130 + Ardent/UV/nls/maps/MAP.TABLES/KSC5601 | 8230 ++++++ Ardent/UV/nls/maps/MAP.TABLES/KSC5601-1992 | 17053 +++++++++++ Ardent/UV/nls/maps/MAP.TABLES/MAC-GREEK | 77 + Ardent/UV/nls/maps/MAP.TABLES/MAC-GREEK2 | 130 + Ardent/UV/nls/maps/MAP.TABLES/MAC-ROMAN | 138 + Ardent/UV/nls/maps/MAP.TABLES/MNEMONICS | 930 + Ardent/UV/nls/maps/MAP.TABLES/MS1250 | 125 + Ardent/UV/nls/maps/MAP.TABLES/MS1251 | 129 + Ardent/UV/nls/maps/MAP.TABLES/MS1252 | 29 + Ardent/UV/nls/maps/MAP.TABLES/MS1253 | 113 + Ardent/UV/nls/maps/MAP.TABLES/MS1254 | 123 + Ardent/UV/nls/maps/MAP.TABLES/MS1255 | 105 + Ardent/UV/nls/maps/MAP.TABLES/MS1256 | 123 + Ardent/UV/nls/maps/MAP.TABLES/MS125x-MARKS | 15 + Ardent/UV/nls/maps/MAP.TABLES/MS932 | 4 + Ardent/UV/nls/maps/MAP.TABLES/MS932-BASE | 7111 +++++ Ardent/UV/nls/maps/MAP.TABLES/MS932-EXTRA | 27 + Ardent/UV/nls/maps/MAP.TABLES/MS932-RTE | 812 + Ardent/UV/nls/maps/MAP.TABLES/MS936 | 4 + Ardent/UV/nls/maps/MAP.TABLES/MS936-BASE | 21793 ++++++++++++++ Ardent/UV/nls/maps/MAP.TABLES/MS936-EXTRA | 2152 ++ Ardent/UV/nls/maps/MAP.TABLES/MS949 | 4 + Ardent/UV/nls/maps/MAP.TABLES/MS949-EXTRA | 191 + Ardent/UV/nls/maps/MAP.TABLES/MS950 | 4 + Ardent/UV/nls/maps/MAP.TABLES/MS950-BASE | 13509 +++++++++ Ardent/UV/nls/maps/MAP.TABLES/MS950-EXTRA | 6220 ++++ Ardent/UV/nls/maps/MAP.TABLES/PC-CONTROLS | 34 + Ardent/UV/nls/maps/MAP.TABLES/PC1040 | 88 + Ardent/UV/nls/maps/MAP.TABLES/PC1041 | 98 + Ardent/UV/nls/maps/MAP.TABLES/PC437 | 132 + Ardent/UV/nls/maps/MAP.TABLES/PC850 | 132 + Ardent/UV/nls/maps/MAP.TABLES/PC852 | 132 + Ardent/UV/nls/maps/MAP.TABLES/PC855 | 132 + Ardent/UV/nls/maps/MAP.TABLES/PC857 | 129 + Ardent/UV/nls/maps/MAP.TABLES/PC860 | 132 + Ardent/UV/nls/maps/MAP.TABLES/PC861 | 132 + Ardent/UV/nls/maps/MAP.TABLES/PC863 | 132 + Ardent/UV/nls/maps/MAP.TABLES/PC864 | 137 + Ardent/UV/nls/maps/MAP.TABLES/PC865 | 132 + Ardent/UV/nls/maps/MAP.TABLES/PC866 | 132 + Ardent/UV/nls/maps/MAP.TABLES/PC869 | 126 + Ardent/UV/nls/maps/MAP.TABLES/PC874 | 10 + Ardent/UV/nls/maps/MAP.TABLES/PIECS | 29 + Ardent/UV/nls/maps/MAP.TABLES/PIECS-EXT | 29 + Ardent/UV/nls/maps/MAP.TABLES/PJISX0208 | 6884 +++++ Ardent/UV/nls/maps/MAP.TABLES/SJISX0208 | 6883 +++++ Ardent/UV/nls/maps/MAP.TABLES/TIS620-A | 18 + Ardent/UV/nls/maps/MAP.TABLES/TIS620-B | 27 + Ardent/UV/nls/maps/MAP.TABLES/TJISX0208 | 6884 +++++ Ardent/UV/nls/maps/MAP.TABLES/UV-MARKS | 10 + Ardent/UV/nls/maps/install/.uvnlsmap | 1 + Ardent/UV/nls/maps/install/ASCII | Bin 0 -> 1680 bytes Ardent/UV/nls/maps/install/ISO8859-1 | Bin 0 -> 2896 bytes Ardent/UV/nls/maps/install/ISO8859-1+MARKS | Bin 0 -> 2876 bytes Ardent/UV/nls/maps/install/MNEMONICS | Bin 0 -> 72084 bytes Ardent/UV/nls/maps/install/PC850 | Bin 0 -> 3692 bytes Ardent/UV/nls/uvhome/DATA.TYPES | Bin 0 -> 3072 bytes Ardent/UV/nls/uvhome/MENU.FILE | Bin 0 -> 21504 bytes Ardent/UV/nls/uvhome/NEWACC | Bin 0 -> 4096 bytes Ardent/UV/nls/uvhome/REVISE.PROCS | Bin 0 -> 18432 bytes Ardent/UV/nls/uvhome/SYS.MESSAGE | Bin 0 -> 43008 bytes Ardent/UV/nls/uvhome/UV.VOC | Bin 0 -> 11264 bytes Ardent/UV/readme.txt | 2039 ++ Ardent/UV/sample/&DEVICE& | Bin 0 -> 8192 bytes Ardent/UV/sample/&PARTFILES& | Bin 0 -> 16384 bytes Ardent/UV/sample/.Type1 | 0 Ardent/UV/sample/DEMO.ALTAB | 4 + Ardent/UV/sample/DEMO.MKTAB | 10 + Ardent/UV/sample/DEMO.NAMES | 10 + Ardent/UV/sample/DEMO.RMTAB | 14 + Ardent/UV/sample/D_INIT.CUST | Bin 0 -> 4096 bytes Ardent/UV/sample/D_INIT.INVN | Bin 0 -> 4096 bytes Ardent/UV/sample/D_INIT.ORDR | Bin 0 -> 4096 bytes Ardent/UV/sample/D_PARTFILES | Bin 0 -> 4096 bytes Ardent/UV/sample/INIT.CUST | Bin 0 -> 3584 bytes Ardent/UV/sample/INIT.INVN | Bin 0 -> 3584 bytes Ardent/UV/sample/INIT.ORDR | Bin 0 -> 2560 bytes Ardent/UV/sample/LOGIN | 18 + Ardent/UV/sample/NLSHKtmplt.c | 187 + Ardent/UV/sample/PARTFILES | Bin 0 -> 16384 bytes Ardent/UV/sample/TRIGSAMPLE | 45 + Ardent/UV/sample/UV.ACCOUNT | Bin 0 -> 4096 bytes Ardent/UV/sample/UV.FLAVOR | Bin 0 -> 4096 bytes Ardent/UV/sample/demo.act.t.u | 81 + Ardent/UV/sample/demo.con.t.u | 374 + Ardent/UV/sample/demo.d_act.f.u | 91 + Ardent/UV/sample/demo.d_con.f.u | 73 + Ardent/UV/sample/demo.d_eng.f.u | 145 + Ardent/UV/sample/demo.d_equ.f.u | 93 + Ardent/UV/sample/demo.d_inv.f.u | 85 + Ardent/UV/sample/demo.d_liv.f.u | 111 + Ardent/UV/sample/demo.d_loc.f.u | 180 + Ardent/UV/sample/demo.d_per.f.u | 156 + Ardent/UV/sample/demo.d_rid.f.u | 84 + Ardent/UV/sample/demo.d_ven.f.u | 110 + Ardent/UV/sample/demo.eng.f.u | 24261 ++++++++++++++++ Ardent/UV/sample/demo.eng.t.u | 23887 +++++++++++++++ Ardent/UV/sample/demo.equ.t.u | 572 + Ardent/UV/sample/demo.inv.t.u | 690 + Ardent/UV/sample/demo.liv.t.u | 1676 ++ Ardent/UV/sample/demo.loc.t.u | 2839 ++ Ardent/UV/sample/demo.per.t.u | 3224 ++ Ardent/UV/sample/demo.rid.t.u | 183 + Ardent/UV/sample/demo.ven.t.u | 4731 +++ Ardent/UV/sample/rmv.lbl.c | 157 + Ardent/UV/sample/tapetest.c | 875 + Ardent/UV/sample/terminfo.src | 1954 ++ Ardent/UV/sample/uvdr.config | 27 + Ardent/UV/sample/uvodbc.config | 22 + Ardent/UV/src.u/catalog.u | 68 + Ardent/UV/src.u/d_filestat.u | 278 + Ardent/UV/src.u/d_uv.access.u | 47 + Ardent/UV/src.u/d_uv.logins.u | 64 + Ardent/UV/src.u/d_uv.trans.u | 58 + Ardent/UV/src.u/d_uv_logs.u | 71 + Ardent/UV/src.u/d_uv_udrpub.u | 155 + Ardent/UV/src.u/d_uv_udrsub.u | 149 + Ardent/UV/src.u/d_uv_udrsys.u | 71 + Ardent/UV/src.u/uv.access.u | 34 + Ardent/UV/terminfo/1/1 | Bin 0 -> 2096 bytes Ardent/UV/terminfo/1/10 | Bin 0 -> 2932 bytes Ardent/UV/terminfo/2/2 | Bin 0 -> 2026 bytes Ardent/UV/terminfo/3/3 | Bin 0 -> 1694 bytes Ardent/UV/terminfo/3/386at-uv | Bin 0 -> 2515 bytes Ardent/UV/terminfo/4/4 | Bin 0 -> 1681 bytes Ardent/UV/terminfo/4/4410 | Bin 0 -> 1931 bytes Ardent/UV/terminfo/5/5 | Bin 0 -> 1994 bytes Ardent/UV/terminfo/6/6 | Bin 0 -> 1956 bytes Ardent/UV/terminfo/7/7 | Bin 0 -> 2544 bytes Ardent/UV/terminfo/8/8 | Bin 0 -> 2515 bytes Ardent/UV/terminfo/9/9 | Bin 0 -> 1381 bytes Ardent/UV/terminfo/9/97801-UV | Bin 0 -> 2325 bytes Ardent/UV/terminfo/9/97808-uv | Bin 0 -> 2325 bytes Ardent/UV/terminfo/M/M= | Bin 0 -> 1760 bytes Ardent/UV/terminfo/M/Mu | Bin 0 -> 1738 bytes Ardent/UV/terminfo/M/mic5510 | Bin 0 -> 1980 bytes Ardent/UV/terminfo/a/a210 | Bin 0 -> 1957 bytes Ardent/UV/terminfo/a/a210-adm5 | Bin 0 -> 1462 bytes Ardent/UV/terminfo/a/a210-hz1410 | Bin 0 -> 1428 bytes Ardent/UV/terminfo/a/a210-hz1500 | Bin 0 -> 1521 bytes Ardent/UV/terminfo/a/a210-qt102 | Bin 0 -> 1865 bytes Ardent/UV/terminfo/a/a210-regent25 | Bin 0 -> 1644 bytes Ardent/UV/terminfo/a/a210-tvi910 | Bin 0 -> 1700 bytes Ardent/UV/terminfo/a/a210-tvi910+ | Bin 0 -> 1756 bytes Ardent/UV/terminfo/a/a210-tvi920 | Bin 0 -> 1806 bytes Ardent/UV/terminfo/a/a210-tvi925 | Bin 0 -> 1909 bytes Ardent/UV/terminfo/a/a210-vp | Bin 0 -> 1644 bytes Ardent/UV/terminfo/a/adm5 | Bin 0 -> 1462 bytes Ardent/UV/terminfo/a/aixterm | Bin 0 -> 2152 bytes Ardent/UV/terminfo/a/aixterm-m | Bin 0 -> 2052 bytes Ardent/UV/terminfo/a/ansi | Bin 0 -> 1956 bytes Ardent/UV/terminfo/a/ansi-uv | Bin 0 -> 1956 bytes Ardent/UV/terminfo/a/at | Bin 0 -> 1948 bytes Ardent/UV/terminfo/a/at386 | Bin 0 -> 2515 bytes Ardent/UV/terminfo/a/at386-m | Bin 0 -> 2515 bytes Ardent/UV/terminfo/a/at386-uv | Bin 0 -> 2515 bytes Ardent/UV/terminfo/a/att3b1 | Bin 0 -> 1948 bytes Ardent/UV/terminfo/a/att4410 | Bin 0 -> 1931 bytes Ardent/UV/terminfo/a/av | Bin 0 -> 1657 bytes Ardent/UV/terminfo/c/console | Bin 0 -> 1375 bytes Ardent/UV/terminfo/d/dialup | Bin 0 -> 1381 bytes Ardent/UV/terminfo/d/dumb | Bin 0 -> 1381 bytes Ardent/UV/terminfo/f/fenix | Bin 0 -> 2544 bytes Ardent/UV/terminfo/f/fox | Bin 0 -> 1681 bytes Ardent/UV/terminfo/f/fr200 | Bin 0 -> 1793 bytes Ardent/UV/terminfo/g/gt | Bin 0 -> 1906 bytes Ardent/UV/terminfo/h/hft | Bin 0 -> 2052 bytes Ardent/UV/terminfo/h/hft-c | Bin 0 -> 2152 bytes Ardent/UV/terminfo/h/hft-m | Bin 0 -> 2052 bytes Ardent/UV/terminfo/h/hp | Bin 0 -> 1682 bytes Ardent/UV/terminfo/h/hz1410 | Bin 0 -> 1428 bytes Ardent/UV/terminfo/h/hz1500 | Bin 0 -> 1521 bytes Ardent/UV/terminfo/i/IN | Bin 0 -> 1763 bytes Ardent/UV/terminfo/i/ibm3151 | Bin 0 -> 2027 bytes Ardent/UV/terminfo/i/ibm5151 | Bin 0 -> 2052 bytes Ardent/UV/terminfo/i/ibmpc | Bin 0 -> 2515 bytes Ardent/UV/terminfo/i/icl6404 | Bin 0 -> 1844 bytes Ardent/UV/terminfo/i/in9400-uv | Bin 0 -> 1821 bytes Ardent/UV/terminfo/i/in9400-uv-j | Bin 0 -> 1805 bytes Ardent/UV/terminfo/index | 83 + Ardent/UV/terminfo/n/network | Bin 0 -> 1381 bytes Ardent/UV/terminfo/n/ntbuild | Bin 0 -> 1347 bytes Ardent/UV/terminfo/o/owl | Bin 0 -> 1681 bytes Ardent/UV/terminfo/p/paper | Bin 0 -> 1381 bytes Ardent/UV/terminfo/p/pc386-uv | Bin 0 -> 2515 bytes Ardent/UV/terminfo/p/pc7300 | Bin 0 -> 1948 bytes Ardent/UV/terminfo/p/performer | Bin 0 -> 2544 bytes Ardent/UV/terminfo/p/pst100 | Bin 0 -> 1994 bytes Ardent/UV/terminfo/p/pt | Bin 0 -> 1926 bytes Ardent/UV/terminfo/p/pt200 | Bin 0 -> 2544 bytes Ardent/UV/terminfo/p/pt200c | Bin 0 -> 2932 bytes Ardent/UV/terminfo/p/pt25 | Bin 0 -> 2096 bytes Ardent/UV/terminfo/p/pt250 | Bin 0 -> 2544 bytes Ardent/UV/terminfo/p/pt45 | Bin 0 -> 1694 bytes Ardent/UV/terminfo/q/qt102 | Bin 0 -> 1865 bytes Ardent/UV/terminfo/r/regent20 | Bin 0 -> 1507 bytes Ardent/UV/terminfo/r/regent25 | Bin 0 -> 1522 bytes Ardent/UV/terminfo/r/regent40 | Bin 0 -> 2096 bytes Ardent/UV/terminfo/r/regent60 | Bin 0 -> 1788 bytes Ardent/UV/terminfo/s/s4 | Bin 0 -> 1948 bytes Ardent/UV/terminfo/s/sun | Bin 0 -> 1738 bytes Ardent/UV/terminfo/s/sun-cmd | Bin 0 -> 1760 bytes Ardent/UV/terminfo/s/sun-w | Bin 0 -> 1750 bytes Ardent/UV/terminfo/t/tab15 | Bin 0 -> 1795 bytes Ardent/UV/terminfo/t/terminal_1 | Bin 0 -> 2096 bytes Ardent/UV/terminfo/t/terminal_10 | Bin 0 -> 2932 bytes Ardent/UV/terminfo/t/terminal_2 | Bin 0 -> 2026 bytes Ardent/UV/terminfo/t/terminal_3 | Bin 0 -> 1694 bytes Ardent/UV/terminfo/t/terminal_4 | Bin 0 -> 1681 bytes Ardent/UV/terminfo/t/terminal_5 | Bin 0 -> 1994 bytes Ardent/UV/terminfo/t/terminal_6 | Bin 0 -> 1956 bytes Ardent/UV/terminfo/t/terminal_7 | Bin 0 -> 2544 bytes Ardent/UV/terminfo/t/terminal_8 | Bin 0 -> 2515 bytes Ardent/UV/terminfo/t/terminal_9 | Bin 0 -> 1381 bytes Ardent/UV/terminfo/t/tk4105 | Bin 0 -> 1899 bytes Ardent/UV/terminfo/t/tv924 | Bin 0 -> 1686 bytes Ardent/UV/terminfo/t/tv925 | Bin 0 -> 2026 bytes Ardent/UV/terminfo/t/tv950 | Bin 0 -> 1748 bytes Ardent/UV/terminfo/t/tv970 | Bin 0 -> 1900 bytes Ardent/UV/terminfo/t/tvi910 | Bin 0 -> 1700 bytes Ardent/UV/terminfo/t/tvi910+ | Bin 0 -> 1756 bytes Ardent/UV/terminfo/t/tvi920 | Bin 0 -> 1806 bytes Ardent/UV/terminfo/t/tvi925 | Bin 0 -> 2026 bytes Ardent/UV/terminfo/t/tvi955 | Bin 0 -> 2140 bytes Ardent/UV/terminfo/u/ult3151 | Bin 0 -> 2027 bytes Ardent/UV/terminfo/u/ult50 | Bin 0 -> 2342 bytes Ardent/UV/terminfo/u/ult50-vp | Bin 0 -> 2073 bytes Ardent/UV/terminfo/u/unixpc | Bin 0 -> 1948 bytes Ardent/UV/terminfo/u/unknown | Bin 0 -> 1381 bytes Ardent/UV/terminfo/u/uviterm | Bin 0 -> 2091 bytes Ardent/UV/terminfo/u/uviterm-v | Bin 0 -> 2097 bytes Ardent/UV/terminfo/u/uviterm-vw | Bin 0 -> 2099 bytes Ardent/UV/terminfo/u/uviterm-w | Bin 0 -> 2095 bytes Ardent/UV/terminfo/u/uviterms | Bin 0 -> 2093 bytes Ardent/UV/terminfo/u/uviterms-v | Bin 0 -> 2097 bytes Ardent/UV/terminfo/u/uviterms-vw | Bin 0 -> 2099 bytes Ardent/UV/terminfo/u/uviterms-w | Bin 0 -> 2095 bytes Ardent/UV/terminfo/u/uvxterm | Bin 0 -> 2089 bytes Ardent/UV/terminfo/u/uvxterm-v | Bin 0 -> 2095 bytes Ardent/UV/terminfo/u/uvxterm-vw | Bin 0 -> 2097 bytes Ardent/UV/terminfo/u/uvxterm-w | Bin 0 -> 2093 bytes Ardent/UV/terminfo/u/uvxterms | Bin 0 -> 2091 bytes Ardent/UV/terminfo/u/uvxterms-v | Bin 0 -> 2095 bytes Ardent/UV/terminfo/u/uvxterms-vw | Bin 0 -> 2097 bytes Ardent/UV/terminfo/u/uvxterms-w | Bin 0 -> 2093 bytes Ardent/UV/terminfo/v/viewpoint | Bin 0 -> 1657 bytes Ardent/UV/terminfo/v/viewpoint60 | Bin 0 -> 2119 bytes Ardent/UV/terminfo/v/vp | Bin 0 -> 1657 bytes Ardent/UV/terminfo/v/vp60 | Bin 0 -> 2119 bytes Ardent/UV/terminfo/v/vp60-regent40 | Bin 0 -> 1912 bytes Ardent/UV/terminfo/v/vp90 | Bin 0 -> 1785 bytes Ardent/UV/terminfo/v/vt100 | Bin 0 -> 2024 bytes Ardent/UV/terminfo/v/vt100-am | Bin 0 -> 2024 bytes Ardent/UV/terminfo/v/vt100-uv | Bin 0 -> 2024 bytes Ardent/UV/terminfo/v/vt100ssg-uv | Bin 0 -> 2024 bytes Ardent/UV/terminfo/v/vt200 | Bin 0 -> 2301 bytes Ardent/UV/terminfo/v/vt220 | Bin 0 -> 2301 bytes Ardent/UV/terminfo/v/vt300 | Bin 0 -> 2320 bytes Ardent/UV/terminfo/v/vt52 | Bin 0 -> 1370 bytes Ardent/UV/terminfo/v/vwpt | Bin 0 -> 1657 bytes Ardent/UV/terminfo/v/vwpt60 | Bin 0 -> 2119 bytes Ardent/UV/terminfo/w/wy200 | Bin 0 -> 2001 bytes Ardent/UV/terminfo/w/wy200-w | Bin 0 -> 2009 bytes Ardent/UV/terminfo/w/wy50 | Bin 0 -> 2342 bytes Ardent/UV/terminfo/w/wy50-hz1500 | Bin 0 -> 1986 bytes Ardent/UV/terminfo/w/wy50-tvi910 | Bin 0 -> 2013 bytes Ardent/UV/terminfo/w/wy50-tvi920 | Bin 0 -> 1930 bytes Ardent/UV/terminfo/w/wy50-tvi925 | Bin 0 -> 1971 bytes Ardent/UV/terminfo/w/wy50-vp | Bin 0 -> 2073 bytes Ardent/UV/terminfo/w/wy60 | Bin 0 -> 2342 bytes Ardent/UV/terminfo/w/wy99gt | Bin 0 -> 2170 bytes Ardent/UV/uvconfig | 526 + Ardent/UV/uvdlockd.config | 25 + Ardent/UV/uvdlockd.log | 171 + Ardent/UV/uvdr.config | 27 + Ardent/UV/uvodbc.config | 22 + Ardent/UV/uvodbc/getinfo.hss | 195 + Ardent/UV/uvodbc/synodbc.hss | 44 + Ardent/UV/uvodbc/typeinfo.hss | 28 + Ardent/unishared/sharedby | 1 + Ardent/unishared/unirpc/unirpc32.dll.bak | Bin 0 -> 28672 bytes Ardent/unishared/unirpc/unirpcd.exe | Bin 0 -> 21504 bytes Ardent/unishared/unirpc/unirpcservices | 6 + Ardent/unishared/unirpc/version | 1 + Ardent/unishared/version | 1 + README.md | 1 + 4094 files changed, 468781 insertions(+) create mode 100755 Ardent/UV/&DEVICE& create mode 100755 Ardent/UV/&MAP& create mode 100755 Ardent/UV/&PARTFILES& create mode 100755 Ardent/UV/&SAVEDLISTS&/&&S.TLDM%BFANNIE.266 create mode 100755 Ardent/UV/&SAVEDLISTS&/&&S.TLDM%BGAIL.203 create mode 100755 Ardent/UV/&SAVEDLISTS&/&&S.TLDM%BGARYW.178 create mode 100755 Ardent/UV/&SAVEDLISTS&/&&S.TLDM%BGARYW.281 create mode 100755 Ardent/UV/&SAVEDLISTS&/&&S.TLDM%BGARYW.285 create mode 100755 Ardent/UV/&SAVEDLISTS&/&&S.TLDM%Bgary.229 create mode 100755 Ardent/UV/&SAVEDLISTS&/&&S.TLDM%Bkconners.202 create mode 100755 Ardent/UV/&SAVEDLISTS&/&&S.TLDM%Bkconners.235 create mode 100755 Ardent/UV/&SAVEDLISTS&/&&S.TLDM%Bmconners.180 create mode 100755 Ardent/UV/&SAVEDLISTS&/&&S.TLDM%Bmconners.185 create mode 100755 Ardent/UV/&SAVEDLISTS&/&&S.TLDM%Bmconners.207 create mode 100755 Ardent/UV/&SAVEDLISTS&/&&S.TLDM%Bmconners.254 create mode 100755 Ardent/UV/&SAVEDLISTS&/.Type1 create mode 100755 Ardent/UV/.uvconfig create mode 100755 Ardent/UV/.uvconfig.bak create mode 100755 Ardent/UV/APP.PROGS.O/.Type1 create mode 100755 Ardent/UV/APP.PROGS.O/0114 create mode 100755 Ardent/UV/APP.PROGS.O/0190 create mode 100755 Ardent/UV/APP.PROGS.O/0192 create mode 100755 Ardent/UV/APP.PROGS.O/0196 create mode 100755 Ardent/UV/APP.PROGS.O/01A2 create mode 100755 Ardent/UV/APP.PROGS.O/01A6 create mode 100755 Ardent/UV/APP.PROGS.O/01AD create mode 100755 Ardent/UV/APP.PROGS.O/01B0 create mode 100755 Ardent/UV/APP.PROGS.O/01BE create mode 100755 Ardent/UV/APP.PROGS.O/0230 create mode 100755 Ardent/UV/APP.PROGS.O/0358 create mode 100755 Ardent/UV/APP.PROGS.O/035A create mode 100755 Ardent/UV/APP.PROGS.O/1114 create mode 100755 Ardent/UV/APP.PROGS.O/11A2 create mode 100755 Ardent/UV/APP.PROGS.O/11B0 create mode 100755 Ardent/UV/APP.PROGS.O/11BE create mode 100755 Ardent/UV/APP.PROGS.O/11ED create mode 100755 Ardent/UV/APP.PROGS.O/201E create mode 100755 Ardent/UV/APP.PROGS.O/20E0 create mode 100755 Ardent/UV/APP.PROGS.O/2193 create mode 100755 Ardent/UV/APP.PROGS.O/2196 create mode 100755 Ardent/UV/APP.PROGS.O/21A2 create mode 100755 Ardent/UV/APP.PROGS.O/307A create mode 100755 Ardent/UV/APP.PROGS.O/30E0 create mode 100755 Ardent/UV/APP.PROGS.O/31AD create mode 100755 Ardent/UV/APP.PROGS.O/31B0 create mode 100755 Ardent/UV/APP.PROGS.O/407A create mode 100755 Ardent/UV/APP.PROGS.O/41AD create mode 100755 Ardent/UV/APP.PROGS.O/508E create mode 100755 Ardent/UV/APP.PROGS.O/50BB create mode 100755 Ardent/UV/APP.PROGS.O/5114 create mode 100755 Ardent/UV/APP.PROGS.O/534E create mode 100755 Ardent/UV/APP.PROGS.O/6072 create mode 100755 Ardent/UV/APP.PROGS.O/60BB create mode 100755 Ardent/UV/APP.PROGS.O/60E0 create mode 100755 Ardent/UV/APP.PROGS.O/61A2 create mode 100755 Ardent/UV/APP.PROGS.O/70E0 create mode 100755 Ardent/UV/APP.PROGS.O/7201 create mode 100755 Ardent/UV/APP.PROGS.O/80E0 create mode 100755 Ardent/UV/APP.PROGS.O/81F5 create mode 100755 Ardent/UV/APP.PROGS.O/9072 create mode 100755 Ardent/UV/APP.PROGS.O/A1A2 create mode 100755 Ardent/UV/APP.PROGS.O/ACCT.DUMP create mode 100755 Ardent/UV/APP.PROGS.O/ACCT.RESTORE create mode 100755 Ardent/UV/APP.PROGS.O/ACTLIST.B create mode 100755 Ardent/UV/APP.PROGS.O/ADDS create mode 100755 Ardent/UV/APP.PROGS.O/AMLC create mode 100755 Ardent/UV/APP.PROGS.O/ANDS.B create mode 100755 Ardent/UV/APP.PROGS.O/ASCII.EXPORT create mode 100755 Ardent/UV/APP.PROGS.O/BIN.CONV.B create mode 100755 Ardent/UV/APP.PROGS.O/BPIOCP create mode 100755 Ardent/UV/APP.PROGS.O/BPIOTT create mode 100755 Ardent/UV/APP.PROGS.O/CATALOG.PGMS create mode 100755 Ardent/UV/APP.PROGS.O/CATLG.GCI create mode 100755 Ardent/UV/APP.PROGS.O/CATS create mode 100755 Ardent/UV/APP.PROGS.O/CHANGE.DOMAIN create mode 100755 Ardent/UV/APP.PROGS.O/CHARGE-TO create mode 100755 Ardent/UV/APP.PROGS.O/CHARS create mode 100755 Ardent/UV/APP.PROGS.O/CHECK.DICTS create mode 100755 Ardent/UV/APP.PROGS.O/CHG.RAWCHG.B create mode 100755 Ardent/UV/APP.PROGS.O/CHK.ID.B create mode 100755 Ardent/UV/APP.PROGS.O/CHOICE.BOX.B create mode 100755 Ardent/UV/APP.PROGS.O/CINPUT.B create mode 100755 Ardent/UV/APP.PROGS.O/CLOSE.FILE.B create mode 100755 Ardent/UV/APP.PROGS.O/CLRPROMPT.B create mode 100755 Ardent/UV/APP.PROGS.O/COMO create mode 100755 Ardent/UV/APP.PROGS.O/COMPIL.DICTS create mode 100755 Ardent/UV/APP.PROGS.O/COMPILE.PGMS create mode 100755 Ardent/UV/APP.PROGS.O/COMPMAINT.SUB create mode 100755 Ardent/UV/APP.PROGS.O/CONFIG create mode 100755 Ardent/UV/APP.PROGS.O/CONV.DICTS create mode 100755 Ardent/UV/APP.PROGS.O/CONVERT.BP.B create mode 100755 Ardent/UV/APP.PROGS.O/CONVERT.PGMS create mode 100755 Ardent/UV/APP.PROGS.O/CONVERT.PROC create mode 100755 Ardent/UV/APP.PROGS.O/CONVERT.VOC create mode 100755 Ardent/UV/APP.PROGS.O/COUNTS create mode 100755 Ardent/UV/APP.PROGS.O/CR.LFILE.B create mode 100755 Ardent/UV/APP.PROGS.O/CR.LFILERAW.B create mode 100755 Ardent/UV/APP.PROGS.O/CREATE.LDIR.B create mode 100755 Ardent/UV/APP.PROGS.O/CREATE.LRAW.B create mode 100755 Ardent/UV/APP.PROGS.O/DC create mode 100755 Ardent/UV/APP.PROGS.O/DC.A create mode 100755 Ardent/UV/APP.PROGS.O/DC.CORR.CONV create mode 100755 Ardent/UV/APP.PROGS.O/DC.F create mode 100755 Ardent/UV/APP.PROGS.O/DC.ITEM create mode 100755 Ardent/UV/APP.PROGS.O/DC.ITEM4 create mode 100755 Ardent/UV/APP.PROGS.O/DC.MESSAGE create mode 100755 Ardent/UV/APP.PROGS.O/DC.OPENS create mode 100755 Ardent/UV/APP.PROGS.O/DC4 create mode 100755 Ardent/UV/APP.PROGS.O/DEACTLIST.B create mode 100755 Ardent/UV/APP.PROGS.O/DEADLOCK.B create mode 100755 Ardent/UV/APP.PROGS.O/DEF.MNU.B create mode 100755 Ardent/UV/APP.PROGS.O/DEF.SUB.B create mode 100755 Ardent/UV/APP.PROGS.O/DEL.RFILE.B create mode 100755 Ardent/UV/APP.PROGS.O/DELCAT.GCI create mode 100755 Ardent/UV/APP.PROGS.O/DISLEN.B create mode 100755 Ardent/UV/APP.PROGS.O/DISP.SP.OPTS create mode 100755 Ardent/UV/APP.PROGS.O/DIVH create mode 100755 Ardent/UV/APP.PROGS.O/DIVS create mode 100755 Ardent/UV/APP.PROGS.O/DL.LFILE.B create mode 100755 Ardent/UV/APP.PROGS.O/DL.LFILER2.B create mode 100755 Ardent/UV/APP.PROGS.O/DL.LFILERAW.B create mode 100755 Ardent/UV/APP.PROGS.O/DO.MNU.BAR.B create mode 100755 Ardent/UV/APP.PROGS.O/DRAW.BOX.B create mode 100755 Ardent/UV/APP.PROGS.O/DRAW.SCRN.B create mode 100755 Ardent/UV/APP.PROGS.O/EDIT.INPUT.B create mode 100755 Ardent/UV/APP.PROGS.O/EDT create mode 100755 Ardent/UV/APP.PROGS.O/ENABLE.REC.B create mode 100755 Ardent/UV/APP.PROGS.O/ENTER.BOX.B create mode 100755 Ardent/UV/APP.PROGS.O/EQS create mode 100755 Ardent/UV/APP.PROGS.O/ERRNO.B create mode 100755 Ardent/UV/APP.PROGS.O/ERROR.BOX.B create mode 100755 Ardent/UV/APP.PROGS.O/EXAM.COMMON.B create mode 100755 Ardent/UV/APP.PROGS.O/EXIST create mode 100755 Ardent/UV/APP.PROGS.O/EXPAND.B create mode 100755 Ardent/UV/APP.PROGS.O/EXTERNALG.B create mode 100755 Ardent/UV/APP.PROGS.O/FADD.B create mode 100755 Ardent/UV/APP.PROGS.O/FCMP.B create mode 100755 Ardent/UV/APP.PROGS.O/FDIV.B create mode 100755 Ardent/UV/APP.PROGS.O/FIELDS create mode 100755 Ardent/UV/APP.PROGS.O/FINDFILE.B create mode 100755 Ardent/UV/APP.PROGS.O/FIX.FIL.RPTR create mode 100755 Ardent/UV/APP.PROGS.O/FMT.BASIC.B create mode 100755 Ardent/UV/APP.PROGS.O/FMTS create mode 100755 Ardent/UV/APP.PROGS.O/FMUL.B create mode 100755 Ardent/UV/APP.PROGS.O/FOLD.B create mode 100755 Ardent/UV/APP.PROGS.O/FSUB.B create mode 100755 Ardent/UV/APP.PROGS.O/GCI.CONVPI.B create mode 100755 Ardent/UV/APP.PROGS.O/GCI.CREAT.B create mode 100755 Ardent/UV/APP.PROGS.O/GCI.MAINT create mode 100755 Ardent/UV/APP.PROGS.O/GCI.MAKEFILE create mode 100755 Ardent/UV/APP.PROGS.O/GCI.NTADDL.B create mode 100755 Ardent/UV/APP.PROGS.O/GCI.NTEDL.B create mode 100755 Ardent/UV/APP.PROGS.O/GCI.NTINST.B create mode 100755 Ardent/UV/APP.PROGS.O/GCI.NTMAKF.B create mode 100755 Ardent/UV/APP.PROGS.O/GCI.NTMAKL.B create mode 100755 Ardent/UV/APP.PROGS.O/GCI.NTMAP.B create mode 100755 Ardent/UV/APP.PROGS.O/GEN.GCI create mode 100755 Ardent/UV/APP.PROGS.O/GES create mode 100755 Ardent/UV/APP.PROGS.O/GET create mode 100755 Ardent/UV/APP.PROGS.O/GET.BASENAME create mode 100755 Ardent/UV/APP.PROGS.O/GET.DEVS.B create mode 100755 Ardent/UV/APP.PROGS.O/GET.DIRNAME create mode 100755 Ardent/UV/APP.PROGS.O/GET.FNAME.B create mode 100755 Ardent/UV/APP.PROGS.O/GET.KEY.B create mode 100755 Ardent/UV/APP.PROGS.O/GET.OSNAME.B create mode 100755 Ardent/UV/APP.PROGS.O/GET.PATH.B create mode 100755 Ardent/UV/APP.PROGS.O/GET.PGMS create mode 100755 Ardent/UV/APP.PROGS.O/GETPARTNUM.B create mode 100755 Ardent/UV/APP.PROGS.O/GETPU.B create mode 100755 Ardent/UV/APP.PROGS.O/GETUCOUNTS.B create mode 100755 Ardent/UV/APP.PROGS.O/GTS create mode 100755 Ardent/UV/APP.PROGS.O/HELP.BOX.B create mode 100755 Ardent/UV/APP.PROGS.O/HELP.PRINT.B create mode 100755 Ardent/UV/APP.PROGS.O/HUSHIT create mode 100755 Ardent/UV/APP.PROGS.O/ICONVS create mode 100755 Ardent/UV/APP.PROGS.O/IDENT create mode 100755 Ardent/UV/APP.PROGS.O/IFS create mode 100755 Ardent/UV/APP.PROGS.O/ILPROMPT.B create mode 100755 Ardent/UV/APP.PROGS.O/INDEXS create mode 100755 Ardent/UV/APP.PROGS.O/INDIRECT create mode 100755 Ardent/UV/APP.PROGS.O/INTS.B create mode 100755 Ardent/UV/APP.PROGS.O/INVERSE.B create mode 100755 Ardent/UV/APP.PROGS.O/IS.EQPATHS create mode 100755 Ardent/UV/APP.PROGS.O/IS.FULLPATH create mode 100755 Ardent/UV/APP.PROGS.O/ISNULLS.B create mode 100755 Ardent/UV/APP.PROGS.O/ISUSER.B create mode 100755 Ardent/UV/APP.PROGS.O/LENS create mode 100755 Ardent/UV/APP.PROGS.O/LES create mode 100755 Ardent/UV/APP.PROGS.O/LIST.BOX.B create mode 100755 Ardent/UV/APP.PROGS.O/LIST.GCI create mode 100755 Ardent/UV/APP.PROGS.O/LIST.TYPES create mode 100755 Ardent/UV/APP.PROGS.O/LOAD.PIO.B create mode 100755 Ardent/UV/APP.PROGS.O/LOC.BY.FLD.B create mode 100755 Ardent/UV/APP.PROGS.O/LOG.ACT.B create mode 100755 Ardent/UV/APP.PROGS.O/LOG.RESTORE.B create mode 100755 Ardent/UV/APP.PROGS.O/LOG.SAVE.B create mode 100755 Ardent/UV/APP.PROGS.O/LOG.UVTRNS.B create mode 100755 Ardent/UV/APP.PROGS.O/LOGRAW.SAVE.B create mode 100755 Ardent/UV/APP.PROGS.O/LTS create mode 100755 Ardent/UV/APP.PROGS.O/MAKE.NEW.UV create mode 100755 Ardent/UV/APP.PROGS.O/MAKE.PATH.B create mode 100755 Ardent/UV/APP.PROGS.O/MATBLOCK.B create mode 100755 Ardent/UV/APP.PROGS.O/MATCHES.B create mode 100755 Ardent/UV/APP.PROGS.O/MAXIMUM.B create mode 100755 Ardent/UV/APP.PROGS.O/MESSAGE.B create mode 100755 Ardent/UV/APP.PROGS.O/MINIMUM.B create mode 100755 Ardent/UV/APP.PROGS.O/MNU.BAR.PR.B create mode 100755 Ardent/UV/APP.PROGS.O/MODS.B create mode 100755 Ardent/UV/APP.PROGS.O/MULS create mode 100755 Ardent/UV/APP.PROGS.O/NEGS.B create mode 100755 Ardent/UV/APP.PROGS.O/NES create mode 100755 Ardent/UV/APP.PROGS.O/NOTS create mode 100755 Ardent/UV/APP.PROGS.O/NUMS create mode 100755 Ardent/UV/APP.PROGS.O/OCONVS create mode 100755 Ardent/UV/APP.PROGS.O/OPEN.FILE.B create mode 100755 Ardent/UV/APP.PROGS.O/OPEN.INIT.B create mode 100755 Ardent/UV/APP.PROGS.O/ORS.B create mode 100755 Ardent/UV/APP.PROGS.O/OpenError.B create mode 100755 Ardent/UV/APP.PROGS.O/PACK.FNKEYS.B create mode 100755 Ardent/UV/APP.PROGS.O/PACT create mode 100755 Ardent/UV/APP.PROGS.O/PARSE.PERM.B create mode 100755 Ardent/UV/APP.PROGS.O/PERMS.B create mode 100755 Ardent/UV/APP.PROGS.O/PR.RECORD.B create mode 100755 Ardent/UV/APP.PROGS.O/PRECOMP.SUB create mode 100755 Ardent/UV/APP.PROGS.O/PTBCODE create mode 100755 Ardent/UV/APP.PROGS.O/PTERM create mode 100755 Ardent/UV/APP.PROGS.O/PUT.FORM.B create mode 100755 Ardent/UV/APP.PROGS.O/RD.UNX.FIL.B create mode 100755 Ardent/UV/APP.PROGS.O/REC.CHKPT.B create mode 100755 Ardent/UV/APP.PROGS.O/REC.CONSIST.B create mode 100755 Ardent/UV/APP.PROGS.O/REL.LFILE.B create mode 100755 Ardent/UV/APP.PROGS.O/REMOTE.B create mode 100755 Ardent/UV/APP.PROGS.O/RLS.FILE.B create mode 100755 Ardent/UV/APP.PROGS.O/RND create mode 100755 Ardent/UV/APP.PROGS.O/RPT.ERR.B create mode 100755 Ardent/UV/APP.PROGS.O/SEQS create mode 100755 Ardent/UV/APP.PROGS.O/SET.PTR.B create mode 100755 Ardent/UV/APP.PROGS.O/SETDIR.B create mode 100755 Ardent/UV/APP.PROGS.O/SETPU.B create mode 100755 Ardent/UV/APP.PROGS.O/SHUTDOWN.B create mode 100755 Ardent/UV/APP.PROGS.O/SLEEP create mode 100755 Ardent/UV/APP.PROGS.O/SORT.BOX.B create mode 100755 Ardent/UV/APP.PROGS.O/SPACES create mode 100755 Ardent/UV/APP.PROGS.O/SPLICE create mode 100755 Ardent/UV/APP.PROGS.O/SQLINTCHK.B create mode 100755 Ardent/UV/APP.PROGS.O/SQUOTE.B create mode 100755 Ardent/UV/APP.PROGS.O/ST.LOG.ATTR.B create mode 100755 Ardent/UV/APP.PROGS.O/STKMATH create mode 100755 Ardent/UV/APP.PROGS.O/STRIPSTRS.B create mode 100755 Ardent/UV/APP.PROGS.O/STRS create mode 100755 Ardent/UV/APP.PROGS.O/SUBS create mode 100755 Ardent/UV/APP.PROGS.O/SUBSTRINGS create mode 100755 Ardent/UV/APP.PROGS.O/SUBSTRINGSH create mode 100755 Ardent/UV/APP.PROGS.O/SUMMATION.B create mode 100755 Ardent/UV/APP.PROGS.O/SUSP.REC.B create mode 100755 Ardent/UV/APP.PROGS.O/TIMDAT create mode 100755 Ardent/UV/APP.PROGS.O/TL.AFILE.B create mode 100755 Ardent/UV/APP.PROGS.O/TL.ALIST.B create mode 100755 Ardent/UV/APP.PROGS.O/TL.CDIR.B create mode 100755 Ardent/UV/APP.PROGS.O/TL.CLEAR.B create mode 100755 Ardent/UV/APP.PROGS.O/TL.DELETE.B create mode 100755 Ardent/UV/APP.PROGS.O/TL.DERROR.B create mode 100755 Ardent/UV/APP.PROGS.O/TL.DFILE.B create mode 100755 Ardent/UV/APP.PROGS.O/TL.DISPLAY.B create mode 100755 Ardent/UV/APP.PROGS.O/TL.DLIST.B create mode 100755 Ardent/UV/APP.PROGS.O/TL.ENABLE.B create mode 100755 Ardent/UV/APP.PROGS.O/TL.IDENT.B create mode 100755 Ardent/UV/APP.PROGS.O/TL.PURGE.B create mode 100755 Ardent/UV/APP.PROGS.O/TL.RELEASE.B create mode 100755 Ardent/UV/APP.PROGS.O/TL.RESTORE.B create mode 100755 Ardent/UV/APP.PROGS.O/TL.ROLL.B create mode 100755 Ardent/UV/APP.PROGS.O/TL.ROLLFILE.B create mode 100755 Ardent/UV/APP.PROGS.O/TL.SFILE.B create mode 100755 Ardent/UV/APP.PROGS.O/TL.SHUT.B create mode 100755 Ardent/UV/APP.PROGS.O/TL.STAT.B create mode 100755 Ardent/UV/APP.PROGS.O/TL.SUSPEND.B create mode 100755 Ardent/UV/APP.PROGS.O/TL.TLDET.B create mode 100755 Ardent/UV/APP.PROGS.O/TL.TRANS.B create mode 100755 Ardent/UV/APP.PROGS.O/TL.TREADY.B create mode 100755 Ardent/UV/APP.PROGS.O/TL.VDELETE.B create mode 100755 Ardent/UV/APP.PROGS.O/TL.VERROR.B create mode 100755 Ardent/UV/APP.PROGS.O/TRIMBS create mode 100755 Ardent/UV/APP.PROGS.O/TRIMFS create mode 100755 Ardent/UV/APP.PROGS.O/TRIMS create mode 100755 Ardent/UV/APP.PROGS.O/UNIMPLEM create mode 100755 Ardent/UV/APP.PROGS.O/UNLOAD.FILE.B create mode 100755 Ardent/UV/APP.PROGS.O/USER.TYPE.B create mode 100755 Ardent/UV/APP.PROGS.O/UVORNF.B create mode 100755 Ardent/UV/APP.PROGS.O/UVPATHNAME.B create mode 100755 Ardent/UV/APP.PROGS.O/UVPRINTMSG create mode 100755 Ardent/UV/APP.PROGS.O/UVREADMSG create mode 100755 Ardent/UV/APP.PROGS.O/UVSUSPEND.B create mode 100755 Ardent/UV/APP.PROGS.O/VERF.CAT.B create mode 100755 Ardent/UV/APP.PROGS.O/VERF.SCHEMA.B create mode 100755 Ardent/UV/APP.PROGS.O/VERF.SCHEMS.B create mode 100755 Ardent/UV/APP.PROGS.O/VERF.TAB.B create mode 100755 Ardent/UV/APP.PROGS.O/VMADMSUB.B create mode 100755 Ardent/UV/APP.PROGS.O/VOC.PATH.B create mode 100755 Ardent/UV/APP.PROGS.O/WK1.EXPORT create mode 100755 Ardent/UV/APP.PROGS.O/WRAP.PRINT create mode 100755 Ardent/UV/APP.PROGS.O/YES.NO.BOX.B create mode 100755 Ardent/UV/APP.PROGS.O/YESNO.B create mode 100755 Ardent/UV/APP.PROGS/.Type1 create mode 100755 Ardent/UV/APP.PROGS/0114 create mode 100755 Ardent/UV/APP.PROGS/0190 create mode 100755 Ardent/UV/APP.PROGS/0192 create mode 100755 Ardent/UV/APP.PROGS/0196 create mode 100755 Ardent/UV/APP.PROGS/01A2 create mode 100755 Ardent/UV/APP.PROGS/01A6 create mode 100755 Ardent/UV/APP.PROGS/01AD create mode 100755 Ardent/UV/APP.PROGS/01B0 create mode 100755 Ardent/UV/APP.PROGS/01BE create mode 100755 Ardent/UV/APP.PROGS/0230 create mode 100755 Ardent/UV/APP.PROGS/0358 create mode 100755 Ardent/UV/APP.PROGS/035A create mode 100755 Ardent/UV/APP.PROGS/1114 create mode 100755 Ardent/UV/APP.PROGS/11A2 create mode 100755 Ardent/UV/APP.PROGS/11B0 create mode 100755 Ardent/UV/APP.PROGS/11BE create mode 100755 Ardent/UV/APP.PROGS/11ED create mode 100755 Ardent/UV/APP.PROGS/201E create mode 100755 Ardent/UV/APP.PROGS/20E0 create mode 100755 Ardent/UV/APP.PROGS/2193 create mode 100755 Ardent/UV/APP.PROGS/2196 create mode 100755 Ardent/UV/APP.PROGS/21A2 create mode 100755 Ardent/UV/APP.PROGS/307A create mode 100755 Ardent/UV/APP.PROGS/30E0 create mode 100755 Ardent/UV/APP.PROGS/31AD create mode 100755 Ardent/UV/APP.PROGS/31B0 create mode 100755 Ardent/UV/APP.PROGS/407A create mode 100755 Ardent/UV/APP.PROGS/41AD create mode 100755 Ardent/UV/APP.PROGS/508E create mode 100755 Ardent/UV/APP.PROGS/50BB create mode 100755 Ardent/UV/APP.PROGS/5114 create mode 100755 Ardent/UV/APP.PROGS/534E create mode 100755 Ardent/UV/APP.PROGS/6072 create mode 100755 Ardent/UV/APP.PROGS/60BB create mode 100755 Ardent/UV/APP.PROGS/60E0 create mode 100755 Ardent/UV/APP.PROGS/61A2 create mode 100755 Ardent/UV/APP.PROGS/70E0 create mode 100755 Ardent/UV/APP.PROGS/7201 create mode 100755 Ardent/UV/APP.PROGS/80E0 create mode 100755 Ardent/UV/APP.PROGS/81F5 create mode 100755 Ardent/UV/APP.PROGS/9072 create mode 100755 Ardent/UV/APP.PROGS/A1A2 create mode 100755 Ardent/UV/APP.PROGS/ACCT.DUMP create mode 100755 Ardent/UV/APP.PROGS/ACCT.RESTORE create mode 100755 Ardent/UV/APP.PROGS/ACTLIST.B create mode 100755 Ardent/UV/APP.PROGS/ADDS create mode 100755 Ardent/UV/APP.PROGS/AMLC create mode 100755 Ardent/UV/APP.PROGS/ANDS.B create mode 100755 Ardent/UV/APP.PROGS/ASCII.EXPORT create mode 100755 Ardent/UV/APP.PROGS/BIN.CONV.B create mode 100755 Ardent/UV/APP.PROGS/BPIOCP create mode 100755 Ardent/UV/APP.PROGS/BPIOTT create mode 100755 Ardent/UV/APP.PROGS/CATALOG.PGMS create mode 100755 Ardent/UV/APP.PROGS/CATLG.GCI create mode 100755 Ardent/UV/APP.PROGS/CATS create mode 100755 Ardent/UV/APP.PROGS/CHANGE.DOMAIN create mode 100755 Ardent/UV/APP.PROGS/CHARGE-TO create mode 100755 Ardent/UV/APP.PROGS/CHARS create mode 100755 Ardent/UV/APP.PROGS/CHECK.DICTS create mode 100755 Ardent/UV/APP.PROGS/CHG.RAWCHG.B create mode 100755 Ardent/UV/APP.PROGS/CHK.ID.B create mode 100755 Ardent/UV/APP.PROGS/CHOICE.BOX.B create mode 100755 Ardent/UV/APP.PROGS/CINPUT.B create mode 100755 Ardent/UV/APP.PROGS/CLOSE.FILE.B create mode 100755 Ardent/UV/APP.PROGS/CLRPROMPT.B create mode 100755 Ardent/UV/APP.PROGS/COMO create mode 100755 Ardent/UV/APP.PROGS/COMPIL.DICTS create mode 100755 Ardent/UV/APP.PROGS/COMPILE.PGMS create mode 100755 Ardent/UV/APP.PROGS/COMPMAINT.SUB create mode 100755 Ardent/UV/APP.PROGS/CONFIG create mode 100755 Ardent/UV/APP.PROGS/CONV.DICTS create mode 100755 Ardent/UV/APP.PROGS/CONVERT.BP.B create mode 100755 Ardent/UV/APP.PROGS/CONVERT.PGMS create mode 100755 Ardent/UV/APP.PROGS/CONVERT.PROC create mode 100755 Ardent/UV/APP.PROGS/CONVERT.VOC create mode 100755 Ardent/UV/APP.PROGS/COUNTS create mode 100755 Ardent/UV/APP.PROGS/CR.LFILE.B create mode 100755 Ardent/UV/APP.PROGS/CR.LFILERAW.B create mode 100755 Ardent/UV/APP.PROGS/CREATE.LDIR.B create mode 100755 Ardent/UV/APP.PROGS/CREATE.LRAW.B create mode 100755 Ardent/UV/APP.PROGS/DC create mode 100755 Ardent/UV/APP.PROGS/DC.A create mode 100755 Ardent/UV/APP.PROGS/DC.CORR.CONV create mode 100755 Ardent/UV/APP.PROGS/DC.F create mode 100755 Ardent/UV/APP.PROGS/DC.ITEM create mode 100755 Ardent/UV/APP.PROGS/DC.ITEM4 create mode 100755 Ardent/UV/APP.PROGS/DC.MESSAGE create mode 100755 Ardent/UV/APP.PROGS/DC.OPENS create mode 100755 Ardent/UV/APP.PROGS/DC4 create mode 100755 Ardent/UV/APP.PROGS/DEACTLIST.B create mode 100755 Ardent/UV/APP.PROGS/DEADLOCK.B create mode 100755 Ardent/UV/APP.PROGS/DEF.MNU.B create mode 100755 Ardent/UV/APP.PROGS/DEF.SUB.B create mode 100755 Ardent/UV/APP.PROGS/DEL.RFILE.B create mode 100755 Ardent/UV/APP.PROGS/DELCAT.GCI create mode 100755 Ardent/UV/APP.PROGS/DISLEN.B create mode 100755 Ardent/UV/APP.PROGS/DISP.SP.OPTS create mode 100755 Ardent/UV/APP.PROGS/DIVH create mode 100755 Ardent/UV/APP.PROGS/DIVS create mode 100755 Ardent/UV/APP.PROGS/DL.LFILE.B create mode 100755 Ardent/UV/APP.PROGS/DL.LFILER2.B create mode 100755 Ardent/UV/APP.PROGS/DL.LFILERAW.B create mode 100755 Ardent/UV/APP.PROGS/DO.MNU.BAR.B create mode 100755 Ardent/UV/APP.PROGS/DRAW.BOX.B create mode 100755 Ardent/UV/APP.PROGS/DRAW.SCRN.B create mode 100755 Ardent/UV/APP.PROGS/EDIT.INPUT.B create mode 100755 Ardent/UV/APP.PROGS/EDT create mode 100755 Ardent/UV/APP.PROGS/ENABLE.REC.B create mode 100755 Ardent/UV/APP.PROGS/ENTER.BOX.B create mode 100755 Ardent/UV/APP.PROGS/EQS create mode 100755 Ardent/UV/APP.PROGS/ERRNO.B create mode 100755 Ardent/UV/APP.PROGS/ERROR.BOX.B create mode 100755 Ardent/UV/APP.PROGS/EXAM.COMMON.B create mode 100755 Ardent/UV/APP.PROGS/EXIST create mode 100755 Ardent/UV/APP.PROGS/EXPAND.B create mode 100755 Ardent/UV/APP.PROGS/EXTERNALG.B create mode 100755 Ardent/UV/APP.PROGS/FADD.B create mode 100755 Ardent/UV/APP.PROGS/FCMP.B create mode 100755 Ardent/UV/APP.PROGS/FDIV.B create mode 100755 Ardent/UV/APP.PROGS/FIELDS create mode 100755 Ardent/UV/APP.PROGS/FINDFILE.B create mode 100755 Ardent/UV/APP.PROGS/FIX.FIL.RPTR create mode 100755 Ardent/UV/APP.PROGS/FMT.BASIC.B create mode 100755 Ardent/UV/APP.PROGS/FMTS create mode 100755 Ardent/UV/APP.PROGS/FMUL.B create mode 100755 Ardent/UV/APP.PROGS/FOLD.B create mode 100755 Ardent/UV/APP.PROGS/FSUB.B create mode 100755 Ardent/UV/APP.PROGS/GCI.CONVPI.B create mode 100755 Ardent/UV/APP.PROGS/GCI.CREAT.B create mode 100755 Ardent/UV/APP.PROGS/GCI.MAINT create mode 100755 Ardent/UV/APP.PROGS/GCI.MAKEFILE create mode 100755 Ardent/UV/APP.PROGS/GCI.NTADDL.B create mode 100755 Ardent/UV/APP.PROGS/GCI.NTEDL.B create mode 100755 Ardent/UV/APP.PROGS/GCI.NTINST.B create mode 100755 Ardent/UV/APP.PROGS/GCI.NTMAKF.B create mode 100755 Ardent/UV/APP.PROGS/GCI.NTMAKL.B create mode 100755 Ardent/UV/APP.PROGS/GCI.NTMAP.B create mode 100755 Ardent/UV/APP.PROGS/GEN.GCI create mode 100755 Ardent/UV/APP.PROGS/GES create mode 100755 Ardent/UV/APP.PROGS/GET create mode 100755 Ardent/UV/APP.PROGS/GET.BASENAME create mode 100755 Ardent/UV/APP.PROGS/GET.DEVS.B create mode 100755 Ardent/UV/APP.PROGS/GET.DIRNAME create mode 100755 Ardent/UV/APP.PROGS/GET.FNAME.B create mode 100755 Ardent/UV/APP.PROGS/GET.KEY.B create mode 100755 Ardent/UV/APP.PROGS/GET.OSNAME.B create mode 100755 Ardent/UV/APP.PROGS/GET.PATH.B create mode 100755 Ardent/UV/APP.PROGS/GET.PGMS create mode 100755 Ardent/UV/APP.PROGS/GETPARTNUM.B create mode 100755 Ardent/UV/APP.PROGS/GETPU.B create mode 100755 Ardent/UV/APP.PROGS/GETUCOUNTS.B create mode 100755 Ardent/UV/APP.PROGS/GTS create mode 100755 Ardent/UV/APP.PROGS/HELP.BOX.B create mode 100755 Ardent/UV/APP.PROGS/HELP.PRINT.B create mode 100755 Ardent/UV/APP.PROGS/HUSHIT create mode 100755 Ardent/UV/APP.PROGS/ICONVS create mode 100755 Ardent/UV/APP.PROGS/IDENT create mode 100755 Ardent/UV/APP.PROGS/IFS create mode 100755 Ardent/UV/APP.PROGS/ILPROMPT.B create mode 100755 Ardent/UV/APP.PROGS/INDEXS create mode 100755 Ardent/UV/APP.PROGS/INDIRECT create mode 100755 Ardent/UV/APP.PROGS/INTS.B create mode 100755 Ardent/UV/APP.PROGS/INVERSE.B create mode 100755 Ardent/UV/APP.PROGS/IS.EQPATHS create mode 100755 Ardent/UV/APP.PROGS/IS.FULLPATH create mode 100755 Ardent/UV/APP.PROGS/ISNULLS.B create mode 100755 Ardent/UV/APP.PROGS/ISUSER.B create mode 100755 Ardent/UV/APP.PROGS/LENS create mode 100755 Ardent/UV/APP.PROGS/LES create mode 100755 Ardent/UV/APP.PROGS/LIST.BOX.B create mode 100755 Ardent/UV/APP.PROGS/LIST.GCI create mode 100755 Ardent/UV/APP.PROGS/LIST.TYPES create mode 100755 Ardent/UV/APP.PROGS/LOAD.PIO.B create mode 100755 Ardent/UV/APP.PROGS/LOC.BY.FLD.B create mode 100755 Ardent/UV/APP.PROGS/LOG.ACT.B create mode 100755 Ardent/UV/APP.PROGS/LOG.RESTORE.B create mode 100755 Ardent/UV/APP.PROGS/LOG.SAVE.B create mode 100755 Ardent/UV/APP.PROGS/LOG.UVTRNS.B create mode 100755 Ardent/UV/APP.PROGS/LOGRAW.SAVE.B create mode 100755 Ardent/UV/APP.PROGS/LTS create mode 100755 Ardent/UV/APP.PROGS/MAKE.NEW.UV create mode 100755 Ardent/UV/APP.PROGS/MAKE.PATH.B create mode 100755 Ardent/UV/APP.PROGS/MATBLOCK.B create mode 100755 Ardent/UV/APP.PROGS/MATCHES.B create mode 100755 Ardent/UV/APP.PROGS/MAXIMUM.B create mode 100755 Ardent/UV/APP.PROGS/MESSAGE.B create mode 100755 Ardent/UV/APP.PROGS/MINIMUM.B create mode 100755 Ardent/UV/APP.PROGS/MNU.BAR.PR.B create mode 100755 Ardent/UV/APP.PROGS/MODS.B create mode 100755 Ardent/UV/APP.PROGS/MULS create mode 100755 Ardent/UV/APP.PROGS/NEGS.B create mode 100755 Ardent/UV/APP.PROGS/NES create mode 100755 Ardent/UV/APP.PROGS/NOTS create mode 100755 Ardent/UV/APP.PROGS/NUMS create mode 100755 Ardent/UV/APP.PROGS/OCONVS create mode 100755 Ardent/UV/APP.PROGS/OPEN.FILE.B create mode 100755 Ardent/UV/APP.PROGS/OPEN.INIT.B create mode 100755 Ardent/UV/APP.PROGS/ORS.B create mode 100755 Ardent/UV/APP.PROGS/OpenError.B create mode 100755 Ardent/UV/APP.PROGS/PACK.FNKEYS.B create mode 100755 Ardent/UV/APP.PROGS/PACT create mode 100755 Ardent/UV/APP.PROGS/PARSE.PERM.B create mode 100755 Ardent/UV/APP.PROGS/PERMS.B create mode 100755 Ardent/UV/APP.PROGS/PR.RECORD.B create mode 100755 Ardent/UV/APP.PROGS/PRECOMP.SUB create mode 100755 Ardent/UV/APP.PROGS/PTBCODE create mode 100755 Ardent/UV/APP.PROGS/PTERM create mode 100755 Ardent/UV/APP.PROGS/PUT.FORM.B create mode 100755 Ardent/UV/APP.PROGS/RD.UNX.FIL.B create mode 100755 Ardent/UV/APP.PROGS/REC.CHKPT.B create mode 100755 Ardent/UV/APP.PROGS/REC.CONSIST.B create mode 100755 Ardent/UV/APP.PROGS/REL.LFILE.B create mode 100755 Ardent/UV/APP.PROGS/REMOTE.B create mode 100755 Ardent/UV/APP.PROGS/RLS.FILE.B create mode 100755 Ardent/UV/APP.PROGS/RND create mode 100755 Ardent/UV/APP.PROGS/RPT.ERR.B create mode 100755 Ardent/UV/APP.PROGS/SEQS create mode 100755 Ardent/UV/APP.PROGS/SET.PTR.B create mode 100755 Ardent/UV/APP.PROGS/SETDIR.B create mode 100755 Ardent/UV/APP.PROGS/SETPU.B create mode 100755 Ardent/UV/APP.PROGS/SHUTDOWN.B create mode 100755 Ardent/UV/APP.PROGS/SLEEP create mode 100755 Ardent/UV/APP.PROGS/SORT.BOX.B create mode 100755 Ardent/UV/APP.PROGS/SPACES create mode 100755 Ardent/UV/APP.PROGS/SPLICE create mode 100755 Ardent/UV/APP.PROGS/SQLINTCHK.B create mode 100755 Ardent/UV/APP.PROGS/SQUOTE.B create mode 100755 Ardent/UV/APP.PROGS/ST.LOG.ATTR.B create mode 100755 Ardent/UV/APP.PROGS/STKMATH create mode 100755 Ardent/UV/APP.PROGS/STRIPSTRS.B create mode 100755 Ardent/UV/APP.PROGS/STRS create mode 100755 Ardent/UV/APP.PROGS/SUBS create mode 100755 Ardent/UV/APP.PROGS/SUBSTRINGS create mode 100755 Ardent/UV/APP.PROGS/SUBSTRINGSH create mode 100755 Ardent/UV/APP.PROGS/SUMMATION.B create mode 100755 Ardent/UV/APP.PROGS/SUSP.REC.B create mode 100755 Ardent/UV/APP.PROGS/TIMDAT create mode 100755 Ardent/UV/APP.PROGS/TL.AFILE.B create mode 100755 Ardent/UV/APP.PROGS/TL.ALIST.B create mode 100755 Ardent/UV/APP.PROGS/TL.CDIR.B create mode 100755 Ardent/UV/APP.PROGS/TL.CLEAR.B create mode 100755 Ardent/UV/APP.PROGS/TL.DELETE.B create mode 100755 Ardent/UV/APP.PROGS/TL.DERROR.B create mode 100755 Ardent/UV/APP.PROGS/TL.DFILE.B create mode 100755 Ardent/UV/APP.PROGS/TL.DISPLAY.B create mode 100755 Ardent/UV/APP.PROGS/TL.DLIST.B create mode 100755 Ardent/UV/APP.PROGS/TL.ENABLE.B create mode 100755 Ardent/UV/APP.PROGS/TL.IDENT.B create mode 100755 Ardent/UV/APP.PROGS/TL.PURGE.B create mode 100755 Ardent/UV/APP.PROGS/TL.RELEASE.B create mode 100755 Ardent/UV/APP.PROGS/TL.RESTORE.B create mode 100755 Ardent/UV/APP.PROGS/TL.ROLL.B create mode 100755 Ardent/UV/APP.PROGS/TL.ROLLFILE.B create mode 100755 Ardent/UV/APP.PROGS/TL.SFILE.B create mode 100755 Ardent/UV/APP.PROGS/TL.SHUT.B create mode 100755 Ardent/UV/APP.PROGS/TL.STAT.B create mode 100755 Ardent/UV/APP.PROGS/TL.SUSPEND.B create mode 100755 Ardent/UV/APP.PROGS/TL.TLDET.B create mode 100755 Ardent/UV/APP.PROGS/TL.TRANS.B create mode 100755 Ardent/UV/APP.PROGS/TL.TREADY.B create mode 100755 Ardent/UV/APP.PROGS/TL.VDELETE.B create mode 100755 Ardent/UV/APP.PROGS/TL.VERROR.B create mode 100755 Ardent/UV/APP.PROGS/TRIMBS create mode 100755 Ardent/UV/APP.PROGS/TRIMFS create mode 100755 Ardent/UV/APP.PROGS/TRIMS create mode 100755 Ardent/UV/APP.PROGS/UNIMPLEM create mode 100755 Ardent/UV/APP.PROGS/UNLOAD.FILE.B create mode 100755 Ardent/UV/APP.PROGS/USER.TYPE.B create mode 100755 Ardent/UV/APP.PROGS/UVORNF.B create mode 100755 Ardent/UV/APP.PROGS/UVPATHNAME.B create mode 100755 Ardent/UV/APP.PROGS/UVPRINTMSG create mode 100755 Ardent/UV/APP.PROGS/UVREADMSG create mode 100755 Ardent/UV/APP.PROGS/UVSUSPEND.B create mode 100755 Ardent/UV/APP.PROGS/VERF.CAT.B create mode 100755 Ardent/UV/APP.PROGS/VERF.SCHEMA.B create mode 100755 Ardent/UV/APP.PROGS/VERF.SCHEMS.B create mode 100755 Ardent/UV/APP.PROGS/VERF.TAB.B create mode 100755 Ardent/UV/APP.PROGS/VMADMSUB.B create mode 100755 Ardent/UV/APP.PROGS/VOC.PATH.B create mode 100755 Ardent/UV/APP.PROGS/WK1.EXPORT create mode 100755 Ardent/UV/APP.PROGS/WRAP.PRINT create mode 100755 Ardent/UV/APP.PROGS/YES.NO.BOX.B create mode 100755 Ardent/UV/APP.PROGS/YESNO.B create mode 100755 Ardent/UV/BLTRS create mode 100755 Ardent/UV/BP.O/.Type1 create mode 100755 Ardent/UV/BP.O/ACCT.STAT.B create mode 100755 Ardent/UV/BP.O/ALTER.IC.B create mode 100755 Ardent/UV/BP.O/BLOCK.TERM create mode 100755 Ardent/UV/BP.O/BUILD.INDEX create mode 100755 Ardent/UV/BP.O/COMO_VERB create mode 100755 Ardent/UV/BP.O/CONNECT create mode 100755 Ardent/UV/BP.O/CONV.SQL.B create mode 100755 Ardent/UV/BP.O/COPY.B create mode 100755 Ardent/UV/BP.O/CREATE.INDEX create mode 100755 Ardent/UV/BP.O/DATALOADER.B create mode 100755 Ardent/UV/BP.O/DBMS.MAINT.B create mode 100755 Ardent/UV/BP.O/DEFINE.DF create mode 100755 Ardent/UV/BP.O/DELAY create mode 100755 Ardent/UV/BP.O/DELETE create mode 100755 Ardent/UV/BP.O/DELETE.INDEX create mode 100755 Ardent/UV/BP.O/DEMO.SQL.B create mode 100755 Ardent/UV/BP.O/ED.B create mode 100755 Ardent/UV/BP.O/EDIT.CONFIG.B create mode 100755 Ardent/UV/BP.O/FORMAT.B create mode 100755 Ardent/UV/BP.O/GET.LC.B create mode 100755 Ardent/UV/BP.O/GET.TA.BUF.B create mode 100755 Ardent/UV/BP.O/GET.TERM.TYP create mode 100755 Ardent/UV/BP.O/GET.TOKEN.B create mode 100755 Ardent/UV/BP.O/GETFILEMAP.B create mode 100755 Ardent/UV/BP.O/GROP.ADMIN.B create mode 100755 Ardent/UV/BP.O/INIT.DEMO create mode 100755 Ardent/UV/BP.O/LA100 create mode 100755 Ardent/UV/BP.O/LIST.INDEX create mode 100755 Ardent/UV/BP.O/LIST.LC.B create mode 100755 Ardent/UV/BP.O/LIST.MAPS.B create mode 100755 Ardent/UV/BP.O/LIST.STAT.B create mode 100755 Ardent/UV/BP.O/LISTFILES create mode 100755 Ardent/UV/BP.O/MENU.DOC create mode 100755 Ardent/UV/BP.O/MENU.PIX create mode 100755 Ardent/UV/BP.O/MKFILELIST.B create mode 100755 Ardent/UV/BP.O/MTF.ERASE.B create mode 100755 Ardent/UV/BP.O/MTF.FIXSCR.B create mode 100755 Ardent/UV/BP.O/MTF.INPUT.B create mode 100755 Ardent/UV/BP.O/MTF.LOAD.B create mode 100755 Ardent/UV/BP.O/MTF.MENU.B create mode 100755 Ardent/UV/BP.O/MTF.PAINT.B create mode 100755 Ardent/UV/BP.O/MTF.REDRAW.B create mode 100755 Ardent/UV/BP.O/MTF.SUB.B create mode 100755 Ardent/UV/BP.O/NLS.BUILD.B create mode 100755 Ardent/UV/BP.O/NLS.DESC.CHR.B create mode 100755 Ardent/UV/BP.O/NLS.DUMPMAP.B create mode 100755 Ardent/UV/BP.O/NLS.FINDLCS.B create mode 100755 Ardent/UV/BP.O/NLS.INSTALL.B create mode 100755 Ardent/UV/BP.O/NLS.LISTLCS.B create mode 100755 Ardent/UV/BP.O/NLS.LOADED.B create mode 100755 Ardent/UV/BP.O/NLS.LSTMAPS.B create mode 100755 Ardent/UV/BP.O/NLS.MAINTAIN.B create mode 100755 Ardent/UV/BP.O/NLS.MT.LIST.B create mode 100755 Ardent/UV/BP.O/NLS.PRIME.JIS.B create mode 100755 Ardent/UV/BP.O/NLS.RECODE.B create mode 100755 Ardent/UV/BP.O/NLS.REPORT.B create mode 100755 Ardent/UV/BP.O/NLS.SETNONE.B create mode 100755 Ardent/UV/BP.O/NLS.SHIFT.JIS.B create mode 100755 Ardent/UV/BP.O/NLS.TAU.JIS.B create mode 100755 Ardent/UV/BP.O/NLS.UPDACC.B create mode 100755 Ardent/UV/BP.O/NLS.UVRDMS.B create mode 100755 Ardent/UV/BP.O/NLS.WT.LIST.B create mode 100755 Ardent/UV/BP.O/P.ATT create mode 100755 Ardent/UV/BP.O/P.DET create mode 100755 Ardent/UV/BP.O/PHELP create mode 100755 Ardent/UV/BP.O/PRINT-ERR create mode 100755 Ardent/UV/BP.O/PRINTER create mode 100755 Ardent/UV/BP.O/PTERM_VERB create mode 100755 Ardent/UV/BP.O/READ.CONFIG create mode 100755 Ardent/UV/BP.O/REVISE.AS.B create mode 100755 Ardent/UV/BP.O/REVISE.B create mode 100755 Ardent/UV/BP.O/REVISE.PH.B create mode 100755 Ardent/UV/BP.O/SAVEREST.LC.B create mode 100755 Ardent/UV/BP.O/SET-FILE create mode 100755 Ardent/UV/BP.O/SET-LPTR create mode 100755 Ardent/UV/BP.O/SET.INDEX create mode 100755 Ardent/UV/BP.O/SET.LC.B create mode 100755 Ardent/UV/BP.O/SET.TERM.TYP create mode 100755 Ardent/UV/BP.O/SETFILEMAP.B create mode 100755 Ardent/UV/BP.O/SETGCIMAP.B create mode 100755 Ardent/UV/BP.O/SETSEQMAP.B create mode 100755 Ardent/UV/BP.O/SP_ASSIGN create mode 100755 Ardent/UV/BP.O/SQLBCIDEMO create mode 100755 Ardent/UV/BP.O/SRV.MAINT.B create mode 100755 Ardent/UV/BP.O/SRVP.MAINT.B create mode 100755 Ardent/UV/BP.O/T.ATT create mode 100755 Ardent/UV/BP.O/T.DET create mode 100755 Ardent/UV/BP.O/T.SPACE create mode 100755 Ardent/UV/BP.O/TOKEN.SORT.B create mode 100755 Ardent/UV/BP.O/UNICODE.FILE create mode 100755 Ardent/UV/BP.O/USERS.B create mode 100755 Ardent/UV/BP.O/VERF.SQL.B create mode 100755 Ardent/UV/BP/.Type1 create mode 100755 Ardent/UV/BP/ACCT.STAT.B create mode 100755 Ardent/UV/BP/ALTER.IC.B create mode 100755 Ardent/UV/BP/BLOCK.TERM create mode 100755 Ardent/UV/BP/BUILD.INDEX create mode 100755 Ardent/UV/BP/COMO_VERB create mode 100755 Ardent/UV/BP/CONNECT create mode 100755 Ardent/UV/BP/CONV.SQL.B create mode 100755 Ardent/UV/BP/COPY.B create mode 100755 Ardent/UV/BP/CREATE.INDEX create mode 100755 Ardent/UV/BP/DATALOADER.B create mode 100755 Ardent/UV/BP/DBMS.MAINT.B create mode 100755 Ardent/UV/BP/DEFINE.DF create mode 100755 Ardent/UV/BP/DELAY create mode 100755 Ardent/UV/BP/DELETE create mode 100755 Ardent/UV/BP/DELETE.INDEX create mode 100755 Ardent/UV/BP/DEMO.SQL.B create mode 100755 Ardent/UV/BP/ED.B create mode 100755 Ardent/UV/BP/FORMAT.B create mode 100755 Ardent/UV/BP/GCI1 create mode 100755 Ardent/UV/BP/GCI2 create mode 100755 Ardent/UV/BP/GCI3 create mode 100755 Ardent/UV/BP/GCI4 create mode 100755 Ardent/UV/BP/GCI5 create mode 100755 Ardent/UV/BP/GET.TA.BUF.B create mode 100755 Ardent/UV/BP/GET.TERM.TYP create mode 100755 Ardent/UV/BP/GET.TOKEN.B create mode 100755 Ardent/UV/BP/GROP.ADMIN.B create mode 100755 Ardent/UV/BP/INIT.DEMO create mode 100755 Ardent/UV/BP/LA100 create mode 100755 Ardent/UV/BP/LIST.INDEX create mode 100755 Ardent/UV/BP/LIST.STAT.B create mode 100755 Ardent/UV/BP/LISTFILES create mode 100755 Ardent/UV/BP/MENU.DOC create mode 100755 Ardent/UV/BP/MENU.PIX create mode 100755 Ardent/UV/BP/MKFILELIST.B create mode 100755 Ardent/UV/BP/MTF.ERASE.B create mode 100755 Ardent/UV/BP/MTF.FIXSCR.B create mode 100755 Ardent/UV/BP/MTF.INPUT.B create mode 100755 Ardent/UV/BP/MTF.LOAD.B create mode 100755 Ardent/UV/BP/MTF.MENU.B create mode 100755 Ardent/UV/BP/MTF.PAINT.B create mode 100755 Ardent/UV/BP/MTF.REDRAW.B create mode 100755 Ardent/UV/BP/MTF.SUB.B create mode 100755 Ardent/UV/BP/P.ATT create mode 100755 Ardent/UV/BP/P.DET create mode 100755 Ardent/UV/BP/PHELP create mode 100755 Ardent/UV/BP/PRINT-ERR create mode 100755 Ardent/UV/BP/PRINTER create mode 100755 Ardent/UV/BP/PTERM_VERB create mode 100755 Ardent/UV/BP/READ.CONFIG create mode 100755 Ardent/UV/BP/REVISE.AS.B create mode 100755 Ardent/UV/BP/REVISE.B create mode 100755 Ardent/UV/BP/REVISE.PH.B create mode 100755 Ardent/UV/BP/SET-FILE create mode 100755 Ardent/UV/BP/SET-LPTR create mode 100755 Ardent/UV/BP/SET.INDEX create mode 100755 Ardent/UV/BP/SET.TERM.TYP create mode 100755 Ardent/UV/BP/SP_ASSIGN create mode 100755 Ardent/UV/BP/SQLBCIDEMO create mode 100755 Ardent/UV/BP/SRV.MAINT.B create mode 100755 Ardent/UV/BP/SRVP.MAINT.B create mode 100755 Ardent/UV/BP/T.ATT create mode 100755 Ardent/UV/BP/T.DET create mode 100755 Ardent/UV/BP/T.SPACE create mode 100755 Ardent/UV/BP/TOKEN.SORT.B create mode 100755 Ardent/UV/BP/USERS.B create mode 100755 Ardent/UV/BP/VERF.SQL.B create mode 100755 Ardent/UV/CAT/CAT create mode 100755 Ardent/UV/CAT/INFORMATION create mode 100755 Ardent/UV/CAT/PICK create mode 100755 Ardent/UV/CONVERT.PRECOMP create mode 100755 Ardent/UV/CVI/ADDS create mode 100755 Ardent/UV/CVI/IBM create mode 100755 Ardent/UV/CVI/MICRODATA create mode 100755 Ardent/UV/CVI/PRIME create mode 100755 Ardent/UV/CVI/ULTIMATE create mode 100755 Ardent/UV/DATA.TYPES create mode 100755 Ardent/UV/DICT.DICT create mode 100755 Ardent/UV/DICT.PICK create mode 100755 Ardent/UV/D_&DEVICE& create mode 100755 Ardent/UV/D_&MAP& create mode 100755 Ardent/UV/D_&PARTFILES& create mode 100755 Ardent/UV/D_&SAVEDLISTS& create mode 100755 Ardent/UV/D_&TRUNCATED& create mode 100755 Ardent/UV/D_APP.PROGS create mode 100755 Ardent/UV/D_APP.PROGS.O create mode 100755 Ardent/UV/D_BLTRS create mode 100755 Ardent/UV/D_BP create mode 100755 Ardent/UV/D_BP.O create mode 100755 Ardent/UV/D_CAT create mode 100755 Ardent/UV/D_DATA.TYPES create mode 100755 Ardent/UV/D_GCI create mode 100755 Ardent/UV/D_GTARS create mode 100755 Ardent/UV/D_HASH.AID.FIL create mode 100755 Ardent/UV/D_INCLUDE create mode 100755 Ardent/UV/D_MAP create mode 100755 Ardent/UV/D_MENU.FILE create mode 100755 Ardent/UV/D_NEWACC create mode 100755 Ardent/UV/D_PTERM.FILE create mode 100755 Ardent/UV/D_REVISE.DISCS create mode 100755 Ardent/UV/D_REVISE.PROCS create mode 100755 Ardent/UV/D_STAT.FILE create mode 100755 Ardent/UV/D_SYS.HELP create mode 100755 Ardent/UV/D_SYS.MESSAGE create mode 100755 Ardent/UV/D_UFD create mode 100755 Ardent/UV/D_UV.ACCESS create mode 100755 Ardent/UV/D_UV.ACCOUNT create mode 100755 Ardent/UV/D_UV.FLAVOR create mode 100755 Ardent/UV/D_UV.LOGINS create mode 100755 Ardent/UV/D_UV.TRANS create mode 100755 Ardent/UV/D_UV_LOGS create mode 100755 Ardent/UV/D_UV_UDRPUB create mode 100755 Ardent/UV/D_UV_UDRSUB create mode 100755 Ardent/UV/D_UV_UDRSYS create mode 100755 Ardent/UV/D_VOC create mode 100755 Ardent/UV/D_VOCLIB create mode 100755 Ardent/UV/D_bin create mode 100755 Ardent/UV/D_catdir create mode 100755 Ardent/UV/D_sample create mode 100755 Ardent/UV/DeIsL1.isu create mode 100755 Ardent/UV/ERRMSG create mode 100755 Ardent/UV/GCI create mode 100755 Ardent/UV/GTARS create mode 100755 Ardent/UV/HS.ADMIN/D_HS.ADMIN create mode 100755 Ardent/UV/HS.ADMIN/D_VOC create mode 100755 Ardent/UV/HS.ADMIN/D_VOCLIB create mode 100755 Ardent/UV/HS.ADMIN/HFA_DATA.u create mode 100755 Ardent/UV/HS.ADMIN/HFA_DICT.u create mode 100755 Ardent/UV/HS.ADMIN/HS.ADMIN create mode 100755 Ardent/UV/HS.ADMIN/HS.ADMIN.u create mode 100755 Ardent/UV/HS.ADMIN/VOC create mode 100755 Ardent/UV/HS.ADMIN/VOC.u create mode 100755 Ardent/UV/HS.ADMIN/VOCLIB create mode 100755 Ardent/UV/HS.BP.O/HS.ACTIVATE create mode 100755 Ardent/UV/HS.BP.O/HS.AUTHORIZE create mode 100755 Ardent/UV/HS.BP.O/HS.CASE create mode 100755 Ardent/UV/HS.BP.O/HS.DEACTIVATE create mode 100755 Ardent/UV/HS.BP.O/HS.DISCNT create mode 100755 Ardent/UV/HS.BP.O/HS.FILEINFO create mode 100755 Ardent/UV/HS.BP.O/HS.FINDIT create mode 100755 Ardent/UV/HS.BP.O/HS.OLEDBACCTS create mode 100755 Ardent/UV/HS.BP.O/HS.OLEDBCOLS create mode 100755 Ardent/UV/HS.BP.O/HS.OLEDBINFO create mode 100755 Ardent/UV/HS.BP.O/HS.OLEDBKEYS create mode 100755 Ardent/UV/HS.BP.O/HS.OLEDBTABS create mode 100755 Ardent/UV/HS.BP.O/HS.RUNINACC create mode 100755 Ardent/UV/HS.BP.O/HS.SCHEMA create mode 100755 Ardent/UV/HS.BP.O/HS.SCRUB create mode 100755 Ardent/UV/HS.BP.O/HS.SCRUBINTER create mode 100755 Ardent/UV/HS.BP.O/HS.SHOWCFG create mode 100755 Ardent/UV/HS.BP.O/HS.SPCOLS create mode 100755 Ardent/UV/HS.BP.O/HS.STAREXPAND create mode 100755 Ardent/UV/HS.BP.O/HS.STAT create mode 100755 Ardent/UV/HS.BP.O/HS.TEXTIFY create mode 100755 Ardent/UV/HS.BP.O/HS.UPDFINFO create mode 100755 Ardent/UV/HS.BP.O/HS.UPDUVACC create mode 100755 Ardent/UV/HS.SALES/CUSTOMER.u create mode 100755 Ardent/UV/HS.SALES/CUSTOMER/.Type30 create mode 100755 Ardent/UV/HS.SALES/CUSTOMER/DATA.30 create mode 100755 Ardent/UV/HS.SALES/CUSTOMER/OVER.30 create mode 100755 Ardent/UV/HS.SALES/D_CUSTOMER create mode 100755 Ardent/UV/HS.SALES/D_CUSTOMER.u create mode 100755 Ardent/UV/HS.SALES/D_HS_FILE_A000 create mode 100755 Ardent/UV/HS.SALES/D_PRODUCTS create mode 100755 Ardent/UV/HS.SALES/D_PRODUCTS.u create mode 100755 Ardent/UV/HS.SALES/D_STATES create mode 100755 Ardent/UV/HS.SALES/D_STATES.u create mode 100755 Ardent/UV/HS.SALES/D_VOC create mode 100755 Ardent/UV/HS.SALES/D_VOCLIB create mode 100755 Ardent/UV/HS.SALES/HS_FILE_A000/.Type30 create mode 100755 Ardent/UV/HS.SALES/HS_FILE_A000/DATA.30 create mode 100755 Ardent/UV/HS.SALES/HS_FILE_A000/OVER.30 create mode 100755 Ardent/UV/HS.SALES/PRODUCTS.u create mode 100755 Ardent/UV/HS.SALES/PRODUCTS/.Type30 create mode 100755 Ardent/UV/HS.SALES/PRODUCTS/DATA.30 create mode 100755 Ardent/UV/HS.SALES/PRODUCTS/OVER.30 create mode 100755 Ardent/UV/HS.SALES/STATES.u create mode 100755 Ardent/UV/HS.SALES/STATES/.Type30 create mode 100755 Ardent/UV/HS.SALES/STATES/DATA.30 create mode 100755 Ardent/UV/HS.SALES/STATES/OVER.30 create mode 100755 Ardent/UV/HS.SALES/VOC create mode 100755 Ardent/UV/HS.SALES/VOC.u create mode 100755 Ardent/UV/HS.SALES/VOCLIB create mode 100755 Ardent/UV/HS.SERVICE/CALLS.u create mode 100755 Ardent/UV/HS.SERVICE/CALLS/.Type30 create mode 100755 Ardent/UV/HS.SERVICE/CALLS/DATA.30 create mode 100755 Ardent/UV/HS.SERVICE/CALLS/OVER.30 create mode 100755 Ardent/UV/HS.SERVICE/D_CALLS create mode 100755 Ardent/UV/HS.SERVICE/D_CALLS.u create mode 100755 Ardent/UV/HS.SERVICE/D_HS_FILE_A000 create mode 100755 Ardent/UV/HS.SERVICE/D_PROBLEMS create mode 100755 Ardent/UV/HS.SERVICE/D_PROBLEMS.u create mode 100755 Ardent/UV/HS.SERVICE/D_PRODS create mode 100755 Ardent/UV/HS.SERVICE/D_PRODS.u create mode 100755 Ardent/UV/HS.SERVICE/D_VOC create mode 100755 Ardent/UV/HS.SERVICE/D_VOCLIB create mode 100755 Ardent/UV/HS.SERVICE/HS_FILE_A000/.Type30 create mode 100755 Ardent/UV/HS.SERVICE/HS_FILE_A000/DATA.30 create mode 100755 Ardent/UV/HS.SERVICE/HS_FILE_A000/OVER.30 create mode 100755 Ardent/UV/HS.SERVICE/PROBLEMS.u create mode 100755 Ardent/UV/HS.SERVICE/PROBLEMS/.Type30 create mode 100755 Ardent/UV/HS.SERVICE/PROBLEMS/DATA.30 create mode 100755 Ardent/UV/HS.SERVICE/PROBLEMS/OVER.30 create mode 100755 Ardent/UV/HS.SERVICE/PRODS.u create mode 100755 Ardent/UV/HS.SERVICE/PRODS/.Type30 create mode 100755 Ardent/UV/HS.SERVICE/PRODS/DATA.30 create mode 100755 Ardent/UV/HS.SERVICE/PRODS/OVER.30 create mode 100755 Ardent/UV/HS.SERVICE/VOC create mode 100755 Ardent/UV/HS.SERVICE/VOC.u create mode 100755 Ardent/UV/HS.SERVICE/VOCLIB create mode 100755 Ardent/UV/INCLUDE/.Type1 create mode 100755 Ardent/UV/INCLUDE/ATFUNCTIONS.H create mode 100755 Ardent/UV/INCLUDE/ATFUNCTIONS.INS.IBAS create mode 100755 Ardent/UV/INCLUDE/AUTHORIZE.H create mode 100755 Ardent/UV/INCLUDE/AUTHORIZE.INS.IBAS create mode 100755 Ardent/UV/INCLUDE/CHK.ID.H create mode 100755 Ardent/UV/INCLUDE/COPY.H create mode 100755 Ardent/UV/INCLUDE/DC.COMM.DECL create mode 100755 Ardent/UV/INCLUDE/DEF.USERS create mode 100755 Ardent/UV/INCLUDE/ERRD.H create mode 100755 Ardent/UV/INCLUDE/ERRD.INS.IBAS create mode 100755 Ardent/UV/INCLUDE/FFIX.INCLUDE.H create mode 100755 Ardent/UV/INCLUDE/FILEFIX.INCLUDE.H create mode 100755 Ardent/UV/INCLUDE/FILEINFO.H create mode 100755 Ardent/UV/INCLUDE/FILEINFO.INS.IBAS create mode 100755 Ardent/UV/INCLUDE/FILENAMES.H create mode 100755 Ardent/UV/INCLUDE/FILETYPES.H create mode 100755 Ardent/UV/INCLUDE/FILETYPES.INS.IBAS create mode 100755 Ardent/UV/INCLUDE/FORMAT.OPTS.H create mode 100755 Ardent/UV/INCLUDE/GETPU.H create mode 100755 Ardent/UV/INCLUDE/GETPU.INS.IBAS create mode 100755 Ardent/UV/INCLUDE/GTI.FNKEYS.IH create mode 100755 Ardent/UV/INCLUDE/INFO_ERRORS.INS.IBAS create mode 100755 Ardent/UV/INCLUDE/INFO_ERRS.H create mode 100755 Ardent/UV/INCLUDE/INFO_KEYS.H create mode 100755 Ardent/UV/INCLUDE/INFO_KEYS.INS.IBAS create mode 100755 Ardent/UV/INCLUDE/KEYWORD.H create mode 100755 Ardent/UV/INCLUDE/LOG.H create mode 100755 Ardent/UV/INCLUDE/MACHINE.NAME create mode 100755 Ardent/UV/INCLUDE/MTF.INCL.H create mode 100755 Ardent/UV/INCLUDE/ODBC.H create mode 100755 Ardent/UV/INCLUDE/OPEN.TOOLS.H create mode 100755 Ardent/UV/INCLUDE/OSDEF.H create mode 100755 Ardent/UV/INCLUDE/PACTCMN.H create mode 100755 Ardent/UV/INCLUDE/PACTERR.H create mode 100755 Ardent/UV/INCLUDE/PRINTERIO.H create mode 100755 Ardent/UV/INCLUDE/RECORDLOCKED.H create mode 100755 Ardent/UV/INCLUDE/RECORDLOCKED.INS.IBAS create mode 100755 Ardent/UV/INCLUDE/REVISE.H create mode 100755 Ardent/UV/INCLUDE/SSMERGE.H create mode 100755 Ardent/UV/INCLUDE/SYMBOL.TBL.H create mode 100755 Ardent/UV/INCLUDE/SYMBOLINS.H create mode 100755 Ardent/UV/INCLUDE/TERMINFO create mode 100755 Ardent/UV/INCLUDE/TLOG.H create mode 100755 Ardent/UV/INCLUDE/TTY create mode 100755 Ardent/UV/INCLUDE/UDR.INCLUDE.H create mode 100755 Ardent/UV/INCLUDE/USER_TYPES.H create mode 100755 Ardent/UV/INCLUDE/USER_TYPES.INS.IBAS create mode 100755 Ardent/UV/INCLUDE/UV.COM create mode 100755 Ardent/UV/INCLUDE/UVEXPORT.H create mode 100755 Ardent/UV/INCLUDE/UVKEYS.H create mode 100755 Ardent/UV/INCLUDE/UVNLS.H create mode 100755 Ardent/UV/INCLUDE/UVNLSLOC.H create mode 100755 Ardent/UV/INCLUDE/VERBINSERT.H create mode 100755 Ardent/UV/INCLUDE/VERIFY.COM create mode 100755 Ardent/UV/INCLUDE/VMADMCMN.H create mode 100755 Ardent/UV/INCLUDE/VMADMERR.H create mode 100755 Ardent/UV/INCLUDE/VOC.TYPE.H create mode 100755 Ardent/UV/INCLUDE/YESNO.H create mode 100755 Ardent/UV/I_UV.TRANS/INDEX.000 create mode 100755 Ardent/UV/I_UV.TRANS/INDEX.MAP create mode 100755 Ardent/UV/MENU.FILE create mode 100755 Ardent/UV/NEWACC/IN2 create mode 100755 Ardent/UV/NEWACC/INFORMATION create mode 100755 Ardent/UV/NEWACC/NEWACC create mode 100755 Ardent/UV/NEWACC/PICK create mode 100755 Ardent/UV/NEWACC/PIOPEN create mode 100755 Ardent/UV/NEWACC/REALITY create mode 100755 Ardent/UV/PTERM.FILE/BAUD create mode 100755 Ardent/UV/PTERM.FILE/COMM create mode 100755 Ardent/UV/PTERM.FILE/DISP create mode 100755 Ardent/UV/REVISE.DISCS create mode 100755 Ardent/UV/REVISE.PROCS create mode 100755 Ardent/UV/SQL/CATALOG/&SAVEDLISTS&/.Type1 create mode 100755 Ardent/UV/SQL/CATALOG/D_SAVEDLISTS create mode 100755 Ardent/UV/SQL/CATALOG/D_UV_ASSOC create mode 100755 Ardent/UV/SQL/CATALOG/D_UV_COLUMNS create mode 100755 Ardent/UV/SQL/CATALOG/D_UV_SCHEMA create mode 100755 Ardent/UV/SQL/CATALOG/D_UV_TABLES create mode 100755 Ardent/UV/SQL/CATALOG/D_UV_USERS create mode 100755 Ardent/UV/SQL/CATALOG/D_UV_VIEWS create mode 100755 Ardent/UV/SQL/CATALOG/D_VOC create mode 100755 Ardent/UV/SQL/CATALOG/D_VOCLIB create mode 100755 Ardent/UV/SQL/CATALOG/UV_ASSOC/.Type30 create mode 100755 Ardent/UV/SQL/CATALOG/UV_ASSOC/DATA.30 create mode 100755 Ardent/UV/SQL/CATALOG/UV_ASSOC/OVER.30 create mode 100755 Ardent/UV/SQL/CATALOG/UV_COLUMNS/.Type30 create mode 100755 Ardent/UV/SQL/CATALOG/UV_COLUMNS/DATA.30 create mode 100755 Ardent/UV/SQL/CATALOG/UV_COLUMNS/OVER.30 create mode 100755 Ardent/UV/SQL/CATALOG/UV_SCHEMA/.Type30 create mode 100755 Ardent/UV/SQL/CATALOG/UV_SCHEMA/DATA.30 create mode 100755 Ardent/UV/SQL/CATALOG/UV_SCHEMA/OVER.30 create mode 100755 Ardent/UV/SQL/CATALOG/UV_TABLES/.Type30 create mode 100755 Ardent/UV/SQL/CATALOG/UV_TABLES/DATA.30 create mode 100755 Ardent/UV/SQL/CATALOG/UV_TABLES/OVER.30 create mode 100755 Ardent/UV/SQL/CATALOG/UV_USERS/.Type30 create mode 100755 Ardent/UV/SQL/CATALOG/UV_USERS/DATA.30 create mode 100755 Ardent/UV/SQL/CATALOG/UV_USERS/OVER.30 create mode 100755 Ardent/UV/SQL/CATALOG/UV_VIEWS/.Type30 create mode 100755 Ardent/UV/SQL/CATALOG/UV_VIEWS/DATA.30 create mode 100755 Ardent/UV/SQL/CATALOG/UV_VIEWS/OVER.30 create mode 100755 Ardent/UV/SQL/CATALOG/VOC create mode 100755 Ardent/UV/SQL/CATALOG/VOCLIB create mode 100755 Ardent/UV/STAT.FILE create mode 100755 Ardent/UV/SYS.HELP/BASIC.HELP create mode 100755 Ardent/UV/SYS.HELP/BCI.HELP create mode 100755 Ardent/UV/SYS.HELP/CONV.HELP create mode 100755 Ardent/UV/SYS.HELP/PICK.HELP create mode 100755 Ardent/UV/SYS.HELP/SQL.HELP create mode 100755 Ardent/UV/SYS.HELP/SYS.HELP create mode 100755 Ardent/UV/SYS.MESSAGE create mode 100755 Ardent/UV/UV.ACCESS create mode 100755 Ardent/UV/UV.ACCOUNT create mode 100755 Ardent/UV/UV.FLAVOR create mode 100755 Ardent/UV/UV.LOGINS create mode 100755 Ardent/UV/UV.TRANS create mode 100755 Ardent/UV/UV_LOGS create mode 100755 Ardent/UV/UV_UDRPUB create mode 100755 Ardent/UV/UV_UDRSUB create mode 100755 Ardent/UV/UV_UDRSYS create mode 100755 Ardent/UV/VOC create mode 100755 Ardent/UV/VOCLIB create mode 100755 Ardent/UV/bin/DFmodify.exe create mode 100755 Ardent/UV/bin/INfilter.exe create mode 100755 Ardent/UV/bin/UVchange.exe create mode 100755 Ardent/UV/bin/UVdelete.exe create mode 100755 Ardent/UV/bin/UVfile.exe create mode 100755 Ardent/UV/bin/UVread.exe create mode 100755 Ardent/UV/bin/UVtlconvert.exe create mode 100755 Ardent/UV/bin/UVwrite.exe create mode 100755 Ardent/UV/bin/acct.restore.exe create mode 100755 Ardent/UV/bin/analyze.shm.exe create mode 100755 Ardent/UV/bin/avail.exe create mode 100755 Ardent/UV/bin/basic.exe create mode 100755 Ardent/UV/bin/blook.exe create mode 100755 Ardent/UV/bin/catalog.exe create mode 100755 Ardent/UV/bin/cdict.exe create mode 100755 Ardent/UV/bin/claccount.exe create mode 100755 Ardent/UV/bin/clean.exe create mode 100755 Ardent/UV/bin/clear.file.exe create mode 100755 Ardent/UV/bin/cname.exe create mode 100755 Ardent/UV/bin/conf.file.exe create mode 100755 Ardent/UV/bin/create.file.exe create mode 100755 Ardent/UV/bin/cvtsqlcat.exe create mode 100755 Ardent/UV/bin/decatalog.exe create mode 100755 Ardent/UV/bin/decompile.exe create mode 100755 Ardent/UV/bin/del.catalog.exe create mode 100755 Ardent/UV/bin/delete.file.exe create mode 100755 Ardent/UV/bin/disect.exe create mode 100755 Ardent/UV/bin/dlist.exe create mode 100755 Ardent/UV/bin/execmsg.dll create mode 100755 Ardent/UV/bin/execsrv.exe create mode 100755 Ardent/UV/bin/file.stat.exe create mode 100755 Ardent/UV/bin/filepeek.exe create mode 100755 Ardent/UV/bin/fix_ntusers.exe create mode 100755 Ardent/UV/bin/fixtool.exe create mode 100755 Ardent/UV/bin/fnuxi.exe create mode 100755 Ardent/UV/bin/format.conv.exe create mode 100755 Ardent/UV/bin/fpath.exe create mode 100755 Ardent/UV/bin/fsac.exe create mode 100755 Ardent/UV/bin/g.stat.det.exe create mode 100755 Ardent/UV/bin/gci.dll create mode 100755 Ardent/UV/bin/get_prog_size.exe create mode 100755 Ardent/UV/bin/get_shm_size.exe create mode 100755 Ardent/UV/bin/group.stat.exe create mode 100755 Ardent/UV/bin/h.help.det.exe create mode 100755 Ardent/UV/bin/h.test.det.exe create mode 100755 Ardent/UV/bin/hash.aid.exe create mode 100755 Ardent/UV/bin/hash.help.exe create mode 100755 Ardent/UV/bin/hash.test.exe create mode 100755 Ardent/UV/bin/help.exe create mode 100755 Ardent/UV/bin/hostname.exe create mode 100755 Ardent/UV/bin/init.catalog.exe create mode 100755 Ardent/UV/bin/kill.exe create mode 100755 Ardent/UV/bin/list_readu.exe create mode 100755 Ardent/UV/bin/ln.exe create mode 100755 Ardent/UV/bin/load_NLS_shm.exe create mode 100755 Ardent/UV/bin/load_shm_cat.exe create mode 100755 Ardent/UV/bin/loadfile.exe create mode 100755 Ardent/UV/bin/log_main.exe create mode 100755 Ardent/UV/bin/magrst.exe create mode 100755 Ardent/UV/bin/make.map.exe create mode 100755 Ardent/UV/bin/map.exe create mode 100755 Ardent/UV/bin/master.exe create mode 100755 Ardent/UV/bin/message.exe create mode 100755 Ardent/UV/bin/mkaccount.exe create mode 100755 Ardent/UV/bin/mkdbfile.exe create mode 100755 Ardent/UV/bin/mkload.exe create mode 100755 Ardent/UV/bin/mkschema.exe create mode 100755 Ardent/UV/bin/mksecure.exe create mode 100755 Ardent/UV/bin/mksqlassoc.exe create mode 100755 Ardent/UV/bin/mksqlcol.exe create mode 100755 Ardent/UV/bin/mksqlcon.exe create mode 100755 Ardent/UV/bin/mksqlfile.exe create mode 100755 Ardent/UV/bin/mksqlprm.exe create mode 100755 Ardent/UV/bin/mksqlrefer.exe create mode 100755 Ardent/UV/bin/mksqluniq.exe create mode 100755 Ardent/UV/bin/modify_shm.exe create mode 100755 Ardent/UV/bin/mv.exe create mode 100755 Ardent/UV/bin/nbasic.exe create mode 100755 Ardent/UV/bin/plock_init.exe create mode 100755 Ardent/UV/bin/plock_set.exe create mode 100755 Ardent/UV/bin/port_sql.exe create mode 100755 Ardent/UV/bin/portuv.exe create mode 100755 Ardent/UV/bin/pqic.exe create mode 100755 Ardent/UV/bin/prime.exe create mode 100755 Ardent/UV/bin/printacct.exe create mode 100755 Ardent/UV/bin/pwd.exe create mode 100755 Ardent/UV/bin/radix.exe create mode 100755 Ardent/UV/bin/record.exe create mode 100755 Ardent/UV/bin/resize.exe create mode 100755 Ardent/UV/bin/rm.exe create mode 100755 Ardent/UV/bin/rmv.lbl.exe create mode 100755 Ardent/UV/bin/sdml.exe create mode 100755 Ardent/UV/bin/setfile.exe create mode 100755 Ardent/UV/bin/show_sica.exe create mode 100755 Ardent/UV/bin/shrdump.exe create mode 100755 Ardent/UV/bin/smat.exe create mode 100755 Ardent/UV/bin/sp.edit.exe create mode 100755 Ardent/UV/bin/spool.exe create mode 100755 Ardent/UV/bin/sqlcat9.exe create mode 100755 Ardent/UV/bin/status.exe create mode 100755 Ardent/UV/bin/tapein.exe create mode 100755 Ardent/UV/bin/tapetest.exe create mode 100755 Ardent/UV/bin/tiindex.exe create mode 100755 Ardent/UV/bin/tl_server.exe create mode 100755 Ardent/UV/bin/tl_service.exe create mode 100755 Ardent/UV/bin/touch.exe create mode 100755 Ardent/UV/bin/udtconv.exe create mode 100755 Ardent/UV/bin/universe.dll create mode 100755 Ardent/UV/bin/updaccount.exe create mode 100755 Ardent/UV/bin/upduvtrans.exe create mode 100755 Ardent/UV/bin/uv.exe create mode 100755 Ardent/UV/bin/uvapi_server.exe create mode 100755 Ardent/UV/bin/uvapi_slave.exe create mode 100755 Ardent/UV/bin/uvbackup.exe create mode 100755 Ardent/UV/bin/uvbootd.exe create mode 100755 Ardent/UV/bin/uvchkd.exe create mode 100755 Ardent/UV/bin/uvdlockd.exe create mode 100755 Ardent/UV/bin/uvdrlogd.exe create mode 100755 Ardent/UV/bin/uvdrlogpeek.exe create mode 100755 Ardent/UV/bin/uvdrrepd.exe create mode 100755 Ardent/UV/bin/uvdrsrvd.exe create mode 100755 Ardent/UV/bin/uvdrupdd.exe create mode 100755 Ardent/UV/bin/uvfilefix_server.exe create mode 100755 Ardent/UV/bin/uvfixfile.exe create mode 100755 Ardent/UV/bin/uvlictool.exe create mode 100755 Ardent/UV/bin/uvlogd.exe create mode 100755 Ardent/UV/bin/uvmt.exe create mode 100755 Ardent/UV/bin/uvnetd.exe create mode 100755 Ardent/UV/bin/uvoinst.bat create mode 100755 Ardent/UV/bin/uvosrv.exe create mode 100755 Ardent/UV/bin/uvregen.exe create mode 100755 Ardent/UV/bin/uvrestore.exe create mode 100755 Ardent/UV/bin/uvrolf.exe create mode 100755 Ardent/UV/bin/uvservice.exe create mode 100755 Ardent/UV/bin/uvsh.exe create mode 100755 Ardent/UV/bin/uvsql.exe create mode 100755 Ardent/UV/bin/uvsrvd.exe create mode 100755 Ardent/UV/bin/uvtic.exe create mode 100755 Ardent/UV/bin/uvtidc.exe create mode 100755 Ardent/UV/bin/uvuninst.exe create mode 100755 Ardent/UV/bin/uvutil.dll create mode 100755 Ardent/UV/bin/uvwalk.exe create mode 100755 Ardent/UV/bin/vcatalog.exe create mode 100755 Ardent/UV/bin/verify.exe create mode 100755 Ardent/UV/bin/vlist.exe create mode 100755 Ardent/UV/bin/vsum.exe create mode 100755 Ardent/UV/bin/vvoc.exe create mode 100755 Ardent/UV/bin/xref.exe create mode 100755 Ardent/UV/capture00091aa create mode 100755 Ardent/UV/capture00251aa create mode 100755 Ardent/UV/catdir/!ADDS create mode 100755 Ardent/UV/catdir/!AMLC create mode 100755 Ardent/UV/catdir/!ANDS create mode 100755 Ardent/UV/catdir/!ASYNC create mode 100755 Ardent/UV/catdir/!BINARY.CONVERT create mode 100755 Ardent/UV/catdir/!BPIOCP create mode 100755 Ardent/UV/catdir/!CATS create mode 100755 Ardent/UV/catdir/!CHARS create mode 100755 Ardent/UV/catdir/!CHECK.TYPE1.ID create mode 100755 Ardent/UV/catdir/!CLEAR.PROMPTS create mode 100755 Ardent/UV/catdir/!COMO create mode 100755 Ardent/UV/catdir/!COUNTS create mode 100755 Ardent/UV/catdir/!DISLEN create mode 100755 Ardent/UV/catdir/!DIVH create mode 100755 Ardent/UV/catdir/!DIVS create mode 100755 Ardent/UV/catdir/!EDIT.INPUT create mode 100755 Ardent/UV/catdir/!EQS create mode 100755 Ardent/UV/catdir/!ERRNO create mode 100755 Ardent/UV/catdir/!EXIST create mode 100755 Ardent/UV/catdir/!FADD create mode 100755 Ardent/UV/catdir/!FCMP create mode 100755 Ardent/UV/catdir/!FDIV create mode 100755 Ardent/UV/catdir/!FIELDS create mode 100755 Ardent/UV/catdir/!FMTS create mode 100755 Ardent/UV/catdir/!FMUL create mode 100755 Ardent/UV/catdir/!FOLD create mode 100755 Ardent/UV/catdir/!FSUB create mode 100755 Ardent/UV/catdir/!GES create mode 100755 Ardent/UV/catdir/!GET.DEVICES create mode 100755 Ardent/UV/catdir/!GET.KEY create mode 100755 Ardent/UV/catdir/!GET.OSNAME create mode 100755 Ardent/UV/catdir/!GET.PARTNUM create mode 100755 Ardent/UV/catdir/!GET.PATHNAME create mode 100755 Ardent/UV/catdir/!GET.USER.COUNTS create mode 100755 Ardent/UV/catdir/!GETPU create mode 100755 Ardent/UV/catdir/!GTS create mode 100755 Ardent/UV/catdir/!HUSHIT create mode 100755 Ardent/UV/catdir/!ICONVS create mode 100755 Ardent/UV/catdir/!IFS create mode 100755 Ardent/UV/catdir/!INDEXS create mode 100755 Ardent/UV/catdir/!INLINE.PROMPTS create mode 100755 Ardent/UV/catdir/!INTS create mode 100755 Ardent/UV/catdir/!LENS create mode 100755 Ardent/UV/catdir/!LES create mode 100755 Ardent/UV/catdir/!LTS create mode 100755 Ardent/UV/catdir/!MAKE.PATHNAME create mode 100755 Ardent/UV/catdir/!MATCHES create mode 100755 Ardent/UV/catdir/!MAXIMUM create mode 100755 Ardent/UV/catdir/!MESSAGE create mode 100755 Ardent/UV/catdir/!MINIMUM create mode 100755 Ardent/UV/catdir/!MODS create mode 100755 Ardent/UV/catdir/!MULS create mode 100755 Ardent/UV/catdir/!NES create mode 100755 Ardent/UV/catdir/!NOTS create mode 100755 Ardent/UV/catdir/!NUMS create mode 100755 Ardent/UV/catdir/!OCONVS create mode 100755 Ardent/UV/catdir/!ORS create mode 100755 Ardent/UV/catdir/!PACK.FNKEYS create mode 100755 Ardent/UV/catdir/!PTERM create mode 100755 Ardent/UV/catdir/!REPORT.ERROR create mode 100755 Ardent/UV/catdir/!RND create mode 100755 Ardent/UV/catdir/!SEQS create mode 100755 Ardent/UV/catdir/!SET.PTR create mode 100755 Ardent/UV/catdir/!SETPU create mode 100755 Ardent/UV/catdir/!SLEEP create mode 100755 Ardent/UV/catdir/!SLEEP$ create mode 100755 Ardent/UV/catdir/!SPACES create mode 100755 Ardent/UV/catdir/!SPLICE create mode 100755 Ardent/UV/catdir/!SQUOTE create mode 100755 Ardent/UV/catdir/!STRS create mode 100755 Ardent/UV/catdir/!SUBS create mode 100755 Ardent/UV/catdir/!SUBSTRINGS create mode 100755 Ardent/UV/catdir/!SUMMATION create mode 100755 Ardent/UV/catdir/!TIMDAT create mode 100755 Ardent/UV/catdir/!USER.TYPE create mode 100755 Ardent/UV/catdir/!VOC.PATHNAME create mode 100755 Ardent/UV/catdir/$0114 create mode 100755 Ardent/UV/catdir/$0190 create mode 100755 Ardent/UV/catdir/$0192 create mode 100755 Ardent/UV/catdir/$0196 create mode 100755 Ardent/UV/catdir/$01A2 create mode 100755 Ardent/UV/catdir/$01A6 create mode 100755 Ardent/UV/catdir/$01AD create mode 100755 Ardent/UV/catdir/$01B0 create mode 100755 Ardent/UV/catdir/$01BE create mode 100755 Ardent/UV/catdir/$0230 create mode 100755 Ardent/UV/catdir/$0358 create mode 100755 Ardent/UV/catdir/$035A create mode 100755 Ardent/UV/catdir/$1114 create mode 100755 Ardent/UV/catdir/$11A2 create mode 100755 Ardent/UV/catdir/$11B0 create mode 100755 Ardent/UV/catdir/$11BE create mode 100755 Ardent/UV/catdir/$11ED create mode 100755 Ardent/UV/catdir/$201E create mode 100755 Ardent/UV/catdir/$20E0 create mode 100755 Ardent/UV/catdir/$2193 create mode 100755 Ardent/UV/catdir/$2196 create mode 100755 Ardent/UV/catdir/$21A2 create mode 100755 Ardent/UV/catdir/$307A create mode 100755 Ardent/UV/catdir/$30E0 create mode 100755 Ardent/UV/catdir/$31AD create mode 100755 Ardent/UV/catdir/$31B0 create mode 100755 Ardent/UV/catdir/$407A create mode 100755 Ardent/UV/catdir/$41AD create mode 100755 Ardent/UV/catdir/$508E create mode 100755 Ardent/UV/catdir/$50BB create mode 100755 Ardent/UV/catdir/$5114 create mode 100755 Ardent/UV/catdir/$534E create mode 100755 Ardent/UV/catdir/$6072 create mode 100755 Ardent/UV/catdir/$60BB create mode 100755 Ardent/UV/catdir/$60E0 create mode 100755 Ardent/UV/catdir/$61A2 create mode 100755 Ardent/UV/catdir/$70E0 create mode 100755 Ardent/UV/catdir/$7201 create mode 100755 Ardent/UV/catdir/$80E0 create mode 100755 Ardent/UV/catdir/$81F5 create mode 100755 Ardent/UV/catdir/$9072 create mode 100755 Ardent/UV/catdir/$A1A2 create mode 100755 Ardent/UV/catdir/$BPIOTT create mode 100755 Ardent/UV/catdir/$INDIRECT create mode 100755 Ardent/UV/catdir/$STKMATH create mode 100755 Ardent/UV/catdir/%AASCII.EXPORT create mode 100755 Ardent/UV/catdir/%ACHOICE.BOX.B create mode 100755 Ardent/UV/catdir/%ACINPUT.B create mode 100755 Ardent/UV/catdir/%ACLOSE$UV$FILE create mode 100755 Ardent/UV/catdir/%ACOMPMAINT.SUB create mode 100755 Ardent/UV/catdir/%ACONVERT.VOC create mode 100755 Ardent/UV/catdir/%ADC create mode 100755 Ardent/UV/catdir/%ADC.A create mode 100755 Ardent/UV/catdir/%ADC.CORR.CONV create mode 100755 Ardent/UV/catdir/%ADC.F create mode 100755 Ardent/UV/catdir/%ADC.ITEM create mode 100755 Ardent/UV/catdir/%ADC.ITEM4 create mode 100755 Ardent/UV/catdir/%ADC.MESSAGE create mode 100755 Ardent/UV/catdir/%ADC.OPENS create mode 100755 Ardent/UV/catdir/%ADC4 create mode 100755 Ardent/UV/catdir/%ADEF.MNU.B create mode 100755 Ardent/UV/catdir/%ADEF.SUB.B create mode 100755 Ardent/UV/catdir/%ADEFINE.DF create mode 100755 Ardent/UV/catdir/%ADISP.SP.OPTS create mode 100755 Ardent/UV/catdir/%ADO.MNU.BAR.B create mode 100755 Ardent/UV/catdir/%ADRAW.BOX.B create mode 100755 Ardent/UV/catdir/%ADRAW.SCRN.B create mode 100755 Ardent/UV/catdir/%AENTER.BOX.B create mode 100755 Ardent/UV/catdir/%AERROR.BOX.B create mode 100755 Ardent/UV/catdir/%AGET create mode 100755 Ardent/UV/catdir/%AGET.BASENAME create mode 100755 Ardent/UV/catdir/%AGET.DIRNAME create mode 100755 Ardent/UV/catdir/%AGET.PGMS create mode 100755 Ardent/UV/catdir/%AGET.TA.BUF.B create mode 100755 Ardent/UV/catdir/%AGET.TOKEN.B create mode 100755 Ardent/UV/catdir/%AHELP.BOX.B create mode 100755 Ardent/UV/catdir/%AHELP.PRINT.B create mode 100755 Ardent/UV/catdir/%AHS.ACTIVATE create mode 100755 Ardent/UV/catdir/%AHS.AUTHORIZE create mode 100755 Ardent/UV/catdir/%AHS.CASE create mode 100755 Ardent/UV/catdir/%AHS.DEACTIVATE create mode 100755 Ardent/UV/catdir/%AHS.DISCNT create mode 100755 Ardent/UV/catdir/%AHS.FILEINFO create mode 100755 Ardent/UV/catdir/%AHS.FINDIT create mode 100755 Ardent/UV/catdir/%AHS.OLEDBACCTS create mode 100755 Ardent/UV/catdir/%AHS.OLEDBCOLS create mode 100755 Ardent/UV/catdir/%AHS.OLEDBINFO create mode 100755 Ardent/UV/catdir/%AHS.OLEDBKEYS create mode 100755 Ardent/UV/catdir/%AHS.OLEDBTABS create mode 100755 Ardent/UV/catdir/%AHS.RUNINACC create mode 100755 Ardent/UV/catdir/%AHS.SCHEMA create mode 100755 Ardent/UV/catdir/%AHS.SCRUB create mode 100755 Ardent/UV/catdir/%AHS.SCRUBINTER create mode 100755 Ardent/UV/catdir/%AHS.SHOWCFG create mode 100755 Ardent/UV/catdir/%AHS.SPCOLS create mode 100755 Ardent/UV/catdir/%AHS.STAREXPAND create mode 100755 Ardent/UV/catdir/%AHS.STAT create mode 100755 Ardent/UV/catdir/%AHS.TEXTIFY create mode 100755 Ardent/UV/catdir/%AHS.UPDFINFO create mode 100755 Ardent/UV/catdir/%AHS.UPDUVACC create mode 100755 Ardent/UV/catdir/%AINVERSE.B create mode 100755 Ardent/UV/catdir/%AIS.EQPATHS create mode 100755 Ardent/UV/catdir/%AIS.FULLPATH create mode 100755 Ardent/UV/catdir/%AISUSER.B create mode 100755 Ardent/UV/catdir/%ALIST.BOX.B create mode 100755 Ardent/UV/catdir/%ALISTFILES create mode 100755 Ardent/UV/catdir/%ALOC.BY.FLD.B create mode 100755 Ardent/UV/catdir/%AMNU.BAR.PR.B create mode 100755 Ardent/UV/catdir/%AMTF.ERASE.B create mode 100755 Ardent/UV/catdir/%AMTF.FIXSCR.B create mode 100755 Ardent/UV/catdir/%AMTF.INPUT.B create mode 100755 Ardent/UV/catdir/%AMTF.LOAD.B create mode 100755 Ardent/UV/catdir/%AMTF.MENU.B create mode 100755 Ardent/UV/catdir/%AMTF.PAINT.B create mode 100755 Ardent/UV/catdir/%AMTF.REDRAW.B create mode 100755 Ardent/UV/catdir/%AMTF.SUB.B create mode 100755 Ardent/UV/catdir/%ANLS.LISTLCS create mode 100755 Ardent/UV/catdir/%ANLS.LISTMAPS create mode 100755 Ardent/UV/catdir/%AOPEN$UV$FILE create mode 100755 Ardent/UV/catdir/%APACT create mode 100755 Ardent/UV/catdir/%APARSE.PERM.B create mode 100755 Ardent/UV/catdir/%APRECOMP.SUB create mode 100755 Ardent/UV/catdir/%APTBCODE create mode 100755 Ardent/UV/catdir/%APUT.FORM.B create mode 100755 Ardent/UV/catdir/%ARD.UNX.FIL.B create mode 100755 Ardent/UV/catdir/%ARELEASE$UV$FILE create mode 100755 Ardent/UV/catdir/%AREMOTE.B create mode 100755 Ardent/UV/catdir/%AREVISE.ASSOC create mode 100755 Ardent/UV/catdir/%AREVISE.PHRASE create mode 100755 Ardent/UV/catdir/%ASETDIR.B create mode 100755 Ardent/UV/catdir/%ASORT.BOX.B create mode 100755 Ardent/UV/catdir/%ATOKEN.SORT.B create mode 100755 Ardent/UV/catdir/%AUV%AAAC.PARTNER.GIVING create mode 100755 Ardent/UV/catdir/%AUV%AABCD create mode 100755 Ardent/UV/catdir/%AUV%AABCDE create mode 100755 Ardent/UV/catdir/%AUV%AACCOUNT.INFO create mode 100755 Ardent/UV/catdir/%AUV%AACCT.SETUP create mode 100755 Ardent/UV/catdir/%AUV%AACTIVITY.DETAIL create mode 100755 Ardent/UV/catdir/%AUV%AACTIVITY.DETAIL.MAINT create mode 100755 Ardent/UV/catdir/%AUV%AACTIVITY.MASTER create mode 100755 Ardent/UV/catdir/%AUV%AACTIVITY.MASTER.MAINT create mode 100755 Ardent/UV/catdir/%AUV%AADC create mode 100755 Ardent/UV/catdir/%AUV%AADC.MAINT create mode 100755 Ardent/UV/catdir/%AUV%AADDRESS.VERIFY.MAINT create mode 100755 Ardent/UV/catdir/%AUV%AAFA.PICKING.PRINT create mode 100755 Ardent/UV/catdir/%AUV%AAGENCY.MAINT create mode 100755 Ardent/UV/catdir/%AUV%AAGENCY.TABLE create mode 100755 Ardent/UV/catdir/%AUV%AAL.PM.FLATFILE create mode 100755 Ardent/UV/catdir/%AUV%AAL.RPT create mode 100755 Ardent/UV/catdir/%AUV%AAL.TRANS.FLATFILE create mode 100755 Ardent/UV/catdir/%AUV%AAL.WEST.INTERFACE create mode 100755 Ardent/UV/catdir/%AUV%AALC.PICKING.PRINT create mode 100755 Ardent/UV/catdir/%AUV%AALLOW.LETTER.MAINT create mode 100755 Ardent/UV/catdir/%AUV%AALPHA.PACK.FIX create mode 100755 Ardent/UV/catdir/%AUV%AANALYZE create mode 100755 Ardent/UV/catdir/%AUV%AANALYZE.STRUCTURE create mode 100755 Ardent/UV/catdir/%AUV%AARF.PRINT.REPORT create mode 100755 Ardent/UV/catdir/%AUV%AASCII create mode 100755 Ardent/UV/catdir/%AUV%AASSEMBLED.PACKET.BUILD create mode 100755 Ardent/UV/catdir/%AUV%AASSEMBLED.PACKET.RPT create mode 100755 Ardent/UV/catdir/%AUV%AATS.EXEC.TRANS.TV create mode 100755 Ardent/UV/catdir/%AUV%AAUDIT.BATCH create mode 100755 Ardent/UV/catdir/%AUV%AAUTHOR.FILE create mode 100755 Ardent/UV/catdir/%AUV%AAUTOCALC.71.TEST create mode 100755 Ardent/UV/catdir/%AUV%ABA create mode 100755 Ardent/UV/catdir/%AUV%ABA.AUTO.CLEAN.UP create mode 100755 Ardent/UV/catdir/%AUV%ABA.TRANS.FIX create mode 100755 Ardent/UV/catdir/%AUV%ABACK.ORDER.RPT create mode 100755 Ardent/UV/catdir/%AUV%ABACKORDER.AUDIT create mode 100755 Ardent/UV/catdir/%AUV%ABACKUP.COPY.AUTOCALC create mode 100755 Ardent/UV/catdir/%AUV%ABAFIX1 create mode 100755 Ardent/UV/catdir/%AUV%ABAFIX2 create mode 100755 Ardent/UV/catdir/%AUV%ABALDUE.FLAT.BUILD create mode 100755 Ardent/UV/catdir/%AUV%ABANNER.PAGE create mode 100755 Ardent/UV/catdir/%AUV%ABAT220 create mode 100755 Ardent/UV/catdir/%AUV%ABATCH.ACTIVITY.DETAIL create mode 100755 Ardent/UV/catdir/%AUV%ABATCH.TYPES.UPDATE create mode 100755 Ardent/UV/catdir/%AUV%ABATCH.XREF create mode 100755 Ardent/UV/catdir/%AUV%ABG.SQ.SPLT create mode 100755 Ardent/UV/catdir/%AUV%ABHM.PICKING.FLAT.BUILD create mode 100755 Ardent/UV/catdir/%AUV%ABHM.PICKING.PRINT.OLD create mode 100755 Ardent/UV/catdir/%AUV%ABHM.PO.BILL.RPT create mode 100755 Ardent/UV/catdir/%AUV%ABILLING.LAYOUT create mode 100755 Ardent/UV/catdir/%AUV%ABOL.PICKING.PRINT create mode 100755 Ardent/UV/catdir/%AUV%ABONUS.QUALIFY create mode 100755 Ardent/UV/catdir/%AUV%ABRAD.DONOR.SELECT create mode 100755 Ardent/UV/catdir/%AUV%ABRAD.PICKING.PRINT create mode 100755 Ardent/UV/catdir/%AUV%ABRAD.VIEW create mode 100755 Ardent/UV/catdir/%AUV%ABUILD.BATCH.WAREHOUSE create mode 100755 Ardent/UV/catdir/%AUV%ABUILD.BATCH.WAREHOUSE.042798 create mode 100755 Ardent/UV/catdir/%AUV%ABUILD.DAILY.WAREHOUSE create mode 100755 Ardent/UV/catdir/%AUV%ABYM.PICKING.PRINT create mode 100755 Ardent/UV/catdir/%AUV%ABYM.PICKING.PRINT.061198 create mode 100755 Ardent/UV/catdir/%AUV%ABYM.PICKING.PRINT.WADE create mode 100755 Ardent/UV/catdir/%AUV%ACALC.WEEKNUM create mode 100755 Ardent/UV/catdir/%AUV%ACALL.CC create mode 100755 Ardent/UV/catdir/%AUV%ACALL.NAMESUB create mode 100755 Ardent/UV/catdir/%AUV%ACALL.NOTES.MAINT create mode 100755 Ardent/UV/catdir/%AUV%ACALL.TRACK.RPT create mode 100755 Ardent/UV/catdir/%AUV%ACALLER create mode 100755 Ardent/UV/catdir/%AUV%ACAMPAIGN.SUMMARY.RPT create mode 100755 Ardent/UV/catdir/%AUV%ACAPTURE.PRAYER create mode 100755 Ardent/UV/catdir/%AUV%ACARMAN.PICKING.PRINT create mode 100755 Ardent/UV/catdir/%AUV%ACARMAN.PICKING.PRINT.110397 create mode 100755 Ardent/UV/catdir/%AUV%ACARMAN.PIRCH.BRKDWN create mode 100755 Ardent/UV/catdir/%AUV%ACC.TEST create mode 100755 Ardent/UV/catdir/%AUV%ACCT create mode 100755 Ardent/UV/catdir/%AUV%ACCT.BUILD.FLATFILE create mode 100755 Ardent/UV/catdir/%AUV%ACED create mode 100755 Ardent/UV/catdir/%AUV%ACENTER create mode 100755 Ardent/UV/catdir/%AUV%ACENTER.TEST create mode 100755 Ardent/UV/catdir/%AUV%ACFC.TRANS create mode 100755 Ardent/UV/catdir/%AUV%ACHANGE.PM.TEMP.DMA create mode 100755 Ardent/UV/catdir/%AUV%ACHANNEL.MAINT create mode 100755 Ardent/UV/catdir/%AUV%ACHAR.MAP create mode 100755 Ardent/UV/catdir/%AUV%ACHECK.BP create mode 100755 Ardent/UV/catdir/%AUV%ACHECK.LOCK create mode 100755 Ardent/UV/catdir/%AUV%ACHECK.MENU create mode 100755 Ardent/UV/catdir/%AUV%ACHECK.PL create mode 100755 Ardent/UV/catdir/%AUV%ACHNL create mode 100755 Ardent/UV/catdir/%AUV%ACITYSUB create mode 100755 Ardent/UV/catdir/%AUV%ACLEAN.PLG create mode 100755 Ardent/UV/catdir/%AUV%ACLEAN.UP.FILES2 create mode 100755 Ardent/UV/catdir/%AUV%ACLEAN.UP.FILES2.2.17.97 create mode 100755 Ardent/UV/catdir/%AUV%ACLEAR.STACKERS create mode 100755 Ardent/UV/catdir/%AUV%ACLEO.WRAP create mode 100755 Ardent/UV/catdir/%AUV%ACLIENT.POSTAGE create mode 100755 Ardent/UV/catdir/%AUV%ACLIENT.POSTAGE.LOG create mode 100755 Ardent/UV/catdir/%AUV%ACLOCK create mode 100755 Ardent/UV/catdir/%AUV%ACLOCK.BIRTHDATE create mode 100755 Ardent/UV/catdir/%AUV%ACLOSE.DOS.CAPTURE.FILE create mode 100755 Ardent/UV/catdir/%AUV%ACM create mode 100755 Ardent/UV/catdir/%AUV%ACMS.CLR.DRVR create mode 100755 Ardent/UV/catdir/%AUV%ACMS.CLR.DRVR.RV create mode 100755 Ardent/UV/catdir/%AUV%ACMS.CONTRACT.ACTIVE create mode 100755 Ardent/UV/catdir/%AUV%ACMS.CONTRACT.RENEW.RPT create mode 100755 Ardent/UV/catdir/%AUV%ACMS.DISP.TRANS.PLEDGES create mode 100755 Ardent/UV/catdir/%AUV%ACMS.DISP.TRANS.PRODUCTS create mode 100755 Ardent/UV/catdir/%AUV%ACMS.DSP.DRVR create mode 100755 Ardent/UV/catdir/%AUV%ACMS.DSP.DRVR.RV create mode 100755 Ardent/UV/catdir/%AUV%ACMS.EVENT.6.SPREAD create mode 100755 Ardent/UV/catdir/%AUV%ACMS.EVENT.RPT1 create mode 100755 Ardent/UV/catdir/%AUV%ACMS.EVENT.RPT2 create mode 100755 Ardent/UV/catdir/%AUV%ACMS.FUND.RPT1 create mode 100755 Ardent/UV/catdir/%AUV%ACMS.FUND.RPT2 create mode 100755 Ardent/UV/catdir/%AUV%ACMS.INPUT create mode 100755 Ardent/UV/catdir/%AUV%ACMS.INV.INIT create mode 100755 Ardent/UV/catdir/%AUV%ACMS.INV.INIT.OLD create mode 100755 Ardent/UV/catdir/%AUV%ACMS.LOGON create mode 100755 Ardent/UV/catdir/%AUV%ACMS.LOGTO create mode 100755 Ardent/UV/catdir/%AUV%ACMS.LOGTO.020398 create mode 100755 Ardent/UV/catdir/%AUV%ACMS.LOGTO.041599 create mode 100755 Ardent/UV/catdir/%AUV%ACMS.LOGTO.051099 create mode 100755 Ardent/UV/catdir/%AUV%ACMS.LOGTO.060598 create mode 100755 Ardent/UV/catdir/%AUV%ACMS.LOGTO.WADE create mode 100755 Ardent/UV/catdir/%AUV%ACMS.MARKET.ENTRY.INIT create mode 100755 Ardent/UV/catdir/%AUV%ACMS.MARKET.ENTRY.R8 create mode 100755 Ardent/UV/catdir/%AUV%ACMS.MARKET.LIST create mode 100755 Ardent/UV/catdir/%AUV%ACMS.MARKET.REPORT.111497 create mode 100755 Ardent/UV/catdir/%AUV%ACMS.MARKET.STATION.RPT create mode 100755 Ardent/UV/catdir/%AUV%ACMS.MARKET.STATION.RPT3 create mode 100755 Ardent/UV/catdir/%AUV%ACMS.MEDIA.ADJUSTMENT create mode 100755 Ardent/UV/catdir/%AUV%ACMS.MEDIA.AIRTIME.ACCRUE create mode 100755 Ardent/UV/catdir/%AUV%ACMS.MEDIA.AP.MISC create mode 100755 Ardent/UV/catdir/%AUV%ACMS.MEDIA.AUTO.RUSH create mode 100755 Ardent/UV/catdir/%AUV%ACMS.MEDIA.CALL create mode 100755 Ardent/UV/catdir/%AUV%ACMS.MEDIA.CASS.TEST create mode 100755 Ardent/UV/catdir/%AUV%ACMS.MEDIA.CHANGE.CALL create mode 100755 Ardent/UV/catdir/%AUV%ACMS.MEDIA.CHECK.EDIT create mode 100755 Ardent/UV/catdir/%AUV%ACMS.MEDIA.CHECK.REGISTER create mode 100755 Ardent/UV/catdir/%AUV%ACMS.MEDIA.CMAIL.TEST create mode 100755 Ardent/UV/catdir/%AUV%ACMS.MEDIA.CODE.ENTRY create mode 100755 Ardent/UV/catdir/%AUV%ACMS.MEDIA.CREATE.FILES create mode 100755 Ardent/UV/catdir/%AUV%ACMS.MEDIA.FIND.DMA create mode 100755 Ardent/UV/catdir/%AUV%ACMS.MEDIA.INIT create mode 100755 Ardent/UV/catdir/%AUV%ACMS.MEDIA.LOG create mode 100755 Ardent/UV/catdir/%AUV%ACMS.MEDIA.LOG.PURGE create mode 100755 Ardent/UV/catdir/%AUV%ACMS.MEDIA.MONTHLY.BUILD create mode 100755 Ardent/UV/catdir/%AUV%ACMS.MEDIA.MONTHLY.BUILD.101097 create mode 100755 Ardent/UV/catdir/%AUV%ACMS.MEDIA.MONTHLY.BUILD.101697 create mode 100755 Ardent/UV/catdir/%AUV%ACMS.MEDIA.MONTHLY.BUILD.103197 create mode 100755 Ardent/UV/catdir/%AUV%ACMS.MEDIA.MULTI.MARKET create mode 100755 Ardent/UV/catdir/%AUV%ACMS.MEDIA.MULTI.RPT create mode 100755 Ardent/UV/catdir/%AUV%ACMS.MEDIA.OUTPUT.GROUP create mode 100755 Ardent/UV/catdir/%AUV%ACMS.MEDIA.OUTPUT.RUSH create mode 100755 Ardent/UV/catdir/%AUV%ACMS.MEDIA.OUTPUT.WEEKLY create mode 100755 Ardent/UV/catdir/%AUV%ACMS.MEDIA.POST.PAID create mode 100755 Ardent/UV/catdir/%AUV%ACMS.MEDIA.POSTAGE.UPDATE create mode 100755 Ardent/UV/catdir/%AUV%ACMS.MEDIA.PRINT.CASS create mode 100755 Ardent/UV/catdir/%AUV%ACMS.MEDIA.PRINT.CHECKS create mode 100755 Ardent/UV/catdir/%AUV%ACMS.MEDIA.PRINT.CMAIL create mode 100755 Ardent/UV/catdir/%AUV%ACMS.MEDIA.PRINT.REEL create mode 100755 Ardent/UV/catdir/%AUV%ACMS.MEDIA.RELEASE.RPT create mode 100755 Ardent/UV/catdir/%AUV%ACMS.MEDIA.RETURN.TAPES create mode 100755 Ardent/UV/catdir/%AUV%ACMS.MEDIA.RUSH create mode 100755 Ardent/UV/catdir/%AUV%ACMS.MEDIA.SCHEDULE.GEN create mode 100755 Ardent/UV/catdir/%AUV%ACMS.MEDIA.SETUP.ADDRESS create mode 100755 Ardent/UV/catdir/%AUV%ACMS.MEDIA.SHARED.RPT create mode 100755 Ardent/UV/catdir/%AUV%ACMS.MEDIA.STATE.XREF create mode 100755 Ardent/UV/catdir/%AUV%ACMS.ONLINE.BACKOUT create mode 100755 Ardent/UV/catdir/%AUV%ACMS.ONLINE.BACKOUT.052799 create mode 100755 Ardent/UV/catdir/%AUV%ACMS.ONLINE.BACKOUT.060999 create mode 100755 Ardent/UV/catdir/%AUV%ACMS.ONLINE.VIEW create mode 100755 Ardent/UV/catdir/%AUV%ACMS.ONLINE.VIEW.060999 create mode 100755 Ardent/UV/catdir/%AUV%ACMS.OUTPUT.CLOSE create mode 100755 Ardent/UV/catdir/%AUV%ACMS.OUTPUT.CLOSE.ALL create mode 100755 Ardent/UV/catdir/%AUV%ACMS.OUTPUT.CONTROL create mode 100755 Ardent/UV/catdir/%AUV%ACMS.OUTPUT.OPEN create mode 100755 Ardent/UV/catdir/%AUV%ACMS.OUTPUT.OPEN.ALL create mode 100755 Ardent/UV/catdir/%AUV%ACMS.PREEMPT.RPT create mode 100755 Ardent/UV/catdir/%AUV%ACMS.PRINT.MEDIA.LOGS.NEW create mode 100755 Ardent/UV/catdir/%AUV%ACMS.RESET.DAY create mode 100755 Ardent/UV/catdir/%AUV%ACMS.RPT.GEN create mode 100755 Ardent/UV/catdir/%AUV%ACMS.RPT.PRT create mode 100755 Ardent/UV/catdir/%AUV%ACMS.SCHEDULE create mode 100755 Ardent/UV/catdir/%AUV%ACMS.SEL.DRVR create mode 100755 Ardent/UV/catdir/%AUV%ACMS.SEL.DRVR.RV create mode 100755 Ardent/UV/catdir/%AUV%ACMS.SEL.GEN create mode 100755 Ardent/UV/catdir/%AUV%ACMS.SEL.RUN create mode 100755 Ardent/UV/catdir/%AUV%ACMS.STATION.ADDRESSES create mode 100755 Ardent/UV/catdir/%AUV%ACMS.STATION.ADJUST create mode 100755 Ardent/UV/catdir/%AUV%ACMS.STATION.CONTRACTS create mode 100755 Ardent/UV/catdir/%AUV%ACMS.STATION.CONTRACTS.090397 create mode 100755 Ardent/UV/catdir/%AUV%ACMS.STATION.ENTRY.INIT create mode 100755 Ardent/UV/catdir/%AUV%ACMS.STATION.ENTRY.R8 create mode 100755 Ardent/UV/catdir/%AUV%ACMS.STATION.HISTORY create mode 100755 Ardent/UV/catdir/%AUV%ACMS.STATION.PROGRAMS create mode 100755 Ardent/UV/catdir/%AUV%ACMS.STATION.REMARKS create mode 100755 Ardent/UV/catdir/%AUV%ACMS.STATION.RUSH create mode 100755 Ardent/UV/catdir/%AUV%ACMS.TV.INDEXES create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.800.INT.ICM.MDSREG create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.800.INTERFACE create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.800.INTERFACE.ICM create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.800.INTERFACE.MEM create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.800.INTERFACE.RHM create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.ACTIVITY.BUS create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.ACTIVITY.CH create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.ACTIVITY.GR create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.ACTIVITY.PY create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.ACTIVITY.SUB create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.ACTIVITY.SUB2 create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.ACTIVITY.SUB2.060799 create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.ACTIVITY.SUB2.NEW create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.ACTIVITY.US create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.ADD.STATUS create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.ADD.STATUS.PURGE create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.ADDRESS.BUILD create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.ADDRESS.FLAT create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.ADDRESS.SUB create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.ADDRESS.SUB.071798 create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.ADDRESS.SUB.WADE create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.ADDRESS.UPDATE create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.AGING.CALLBACK.RPT create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.AGING.RPT create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.ASSEMBLE.ITEMS create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.AUDIT.TRANS.BA create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.AUTHOR.MAINT create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.BA.AUDIT create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.BACKORDER.NOTIFY create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.BACKORDER.RPT create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.BACKORDER.RPT.OLD create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.BALANCE.DAY create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.BATCH.ACTIVITY create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.BATCH.AUDIT create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.BATCH.EXCHANGE create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.BATCHES.BY.USER create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.BHM.PMO.FLAT create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.BHM.PMO.FLAT.060598 create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.BHM.PMO.FLAT.062598 create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.BHM.PMO.FLAT.080498 create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.BILL.FIX create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.BILLING.MAINT create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.BO.REL create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.BO.REL.SPECIAL create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.BO.REL.WADE create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.BONUS.CALC.BUILD create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.BONUS.CALC.BUILD.102199 create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.BONUS.CALC.RPT1 create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.BONUS.CALC.RPT1.102199 create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.BONUS.QUAL.MAINT create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.BORDER.RPT1 create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.BORPT.TEMP create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.BUILD.YTD.SUMMARY create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.BULK.SORT create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.CASH.RECEIPTS create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.CASH.RECEIPTS.BUILD create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.CC.APP.ONLY create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.CC.AUTHORIZE create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.CC.INCOME.BY.EV create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.CC.INCOME.BY.FUND create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.CC.INCOME.RPT create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.CC.NEXT create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.CC.PROCESS create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.CC.PTC.CREATE create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.CC.PTC.RECEIVE create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.CC.PTC.REPORTS create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.CC.PTC.TRANSFER create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.CC.PTC.UPDATE create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.CC.REPORT create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.CC.STEP3 create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.CC.UPDATE create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.CCT.INDEX create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.CCT.INDEX.OLD create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.CCT.INDEX1 create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.CCT.MAINT create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.CHANGE.MEDIA.CODE create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.CHANGE.OF.ADDRESS create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.CHANGE.OF.ADDRESS.OLD create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.CHANGE.PM.DMA create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.CHECK.DIGIT create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.CLEAN.CC.FILE create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.CLOSE create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.CLOSE.052599 create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.CLOSE.090299 create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.CLOSE.BHM.txt create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.CLOSE.ORDERS create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.CLOSE.ORDERS.052699 create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.COA.EDIT.RPT create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.CONTROL create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.CONTROL.051299 create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.CONTROL.052599 create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.CONTROL.BHM.txt create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.CONTROL.DBSCRIPT create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.CONTROL.DBSCRIPT.051199 create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.CONTROL.DBSCRIPT.071699 create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.CONTROL.DBSCRIPT.090497 create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.CONTROL.DBSCRIPT.101597 create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.CONTROL.DBSCRIPT.102997 create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.CONTROL.DHB create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.CONTROL.MTEK800 create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.CONTROL.MTEK800.121897 create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.CONTROL.MTEK800.122397 create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.CONTROL.SPECIAL create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.CORRECT.AVAILABLE create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.COST.OF.SALES create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.COST.REPORT create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.COUNT create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.COUNT.CCT create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.CREDITS create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.CUST.TYPES create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.DATE.SUB.CONV create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.DB.PRAYER create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.DB.PRAYER.060898 create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.DB.PRAYER.REPORT create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.DBM000 create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.DEFERRED.INCOME create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.DEFERRED.INCOME.BUILD create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.DEL.STATUS create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.DELETE.ALIAS create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.DEMOG create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.DEMOG.DELETE create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.DEMOG.FIELD.DELETE create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.DEMOG.FIELD.UPDATE create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.DEMOG.UPDATE create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.DICT.INIT create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.DO02.CTRL create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.DO02.SUB create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.EFT create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.EFT.LIST create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.EFT.RPT create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.EFT.SELECT create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.EMAIL.RPT create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.EMAIL.UPDATE create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.ENVELOPE.UPDATE create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.EVENT.ANALYSIS create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.EVENT.FLAT create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.EVENT.PRODUCT.BUILD create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.EVENT.PRODUCT.DEL create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.EVENT.PRODUCT.MAINT create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.EVENT.PRODUCTS create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.EVENT.RESPONSE.FLAT create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.EVENT.SEGMENT create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.EVENT.SEGMENT.BUILD create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.EVENT.SEGMENT.DEL create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.EVENT.SEGMENT.MAINT create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.EVENT.YTD create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.EVENT.YTD.092598 create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.EVENT.YTD.WADE create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.EXEC create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.EXEC.CONV.OLD create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.EXEC.INIT create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.EXEC.REPORT01 create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.EXEC.REPORT02 create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.EXEC.REPORT02.TEST create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.EXEC.REPORT03 create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.EXEC.REPORT04 create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.EXEC.REPORT04.083099 create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.EXEC.REPORT05 create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.EXEC.REPORT06 create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.EXEC.REPORT07 create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.EXEC.REPORT08 create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.EXEC.REPORT08.071798 create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.EXEC.REPORT09 create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.EXEC.REPORT09.071798 create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.EXEC.REPORT10 create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.EXEC.REPORTGL.CRM create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.EXEC.REPORTS create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.EXPORT.TO.UPDATE create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.FAMILY.UPDATE create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.FBDD.RPT create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.FILE.LAYOUT create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.FILE.REVIEW create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.FIX.ORDER.INDEXES create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.FKEYS create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.FLAT.READ.CC create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.FLATFILE create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.FLATFILE.011999 create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.FLATFILE.DEMOG create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.FLATFILE.EVENT create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.FLATFILE.EVENT.BYM create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.FLATFILE.INV create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.FLATFILE.LETTERS.BYM create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.FLATFILE.MAINT create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.FLATFILE.MAINT.011999 create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.FLATFILE.MAINT.EVENT create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.FLATFILE.MAINT.GEN create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.FLATFILE.MAINT.LETTERS create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.FLATFILE.MAINT.NOTES create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.FLATFILE.MAINT.PLEDGES create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.FLATFILE.MAINT.PM create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.FLATFILE.MAINT.PMT create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.FLATFILE.MAINT.SUB create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.FLATFILE.MAINT.TRANS create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.FLATFILE.NOTES create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.FLATFILE.NOTES.BYM create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.FLATFILE.PLEDGES create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.FLATFILE.PLEDGES.BYM create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.FLATFILE.PM create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.FLATFILE.PM.BYM create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.FLATFILE.PM.PURGE create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.FLATFILE.PMO.GEN create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.FLATFILE.PMO.GEN.BYM create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.FLATFILE.PMO.GEN.PURGE create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.FLATFILE.PMO.ITEM create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.FLATFILE.PMO.ITEM.PURGE create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.FLATFILE.PROJECT create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.FLATFILE.PURGE create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.FLATFILE.SEGMENT create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.FLATFILE.STATUS create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.FLATFILE.STATUS.TABLE create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.FLATFILE.SUB create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.FLATFILE.SUB.BYM create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.FLATFILE.TRANS create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.FLATFILE.TRANS.BYM create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.FLATFILE.TRANS.PURGE create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.FMV.RPT create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.FREQ.GIVING create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.FTP.INTERFACE.ICM create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.FUND.BY.DATE create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.FUND.BY.EVENT create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.FUND.BY.EVENT.3 create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.FUND.BY.EVENT.DEPT create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.FUND.BY.EVENT.DEPT.012999 create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.FUND.BY.EVENT.DEPT.031098 create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.FUND.BY.EVENT.DEPT.040998 create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.FUND.DETAIL create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.FUND.DETAIL.BAK create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.FUND.SUMMARY create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.GENERIC.PMO.FLAT create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.GEO.UPDATE.FILE create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.GET.AMOUNT create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.GET.DATE create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.GET.PERIOD.MMYY create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.GET.PERIOD.YYMM create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.GET.PERIOD.YYYYMM create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.GET.TIME create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.GIFT.SUMMARIZE create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.GLOBAL.CC.INFO create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.GLOBAL.CC.INFO.033199 create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.GLOBAL.CC.INFO.060899 create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.GLOBAL.CC.INFO.TEMP create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.GLOBAL.CC.INFO.WADE create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.GLOBAL.MAILPULL create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.GLOBAL.MAILPULL.051799 create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.GLOBAL.MAILPULL.101797 create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.GLOBAL.MAILPULL.112597 create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.GLOBAL.OPER.STATS create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.IA.YEAR.FIX create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.IC.RPT1 create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.IC.RPT2 create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.IC.RPT3 create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.IC.RPT4 create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.IC.RPT5 create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.IC.RPT5.VER2 create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.IC.RPT6 create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.IC.RPT6.VER2 create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.IC.RPT7 create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.IC.RPT7.2.18.97 create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.IC.SYNOPSIS create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.IMPORT.FROM.UPDATE create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.INCOME.BY.ZIP create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.INPUT create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.INSERT.CHECK create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.INT.INTERFACE.ICM create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.INTERFACE create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.INV.AUDIT create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.INV.AUDIT.PROCESS create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.INV.AUDIT.SUB create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.INV.AUDIT2 create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.INV.COST.CALC create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.INV.COST.DISP create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.INV.COST.MAINT create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.INV.COST.RPT create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.INV.COST.RPT.2.18.97 create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.INV.ITEM.CHANGE create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.INV.LABEL create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.INV.MAINT create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.INV.MAINT.COMPONENTS create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.INV.MAINT.OTHER create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.INV.MAINT.PRICE create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.INV.MAINT.ROYALTY create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.INV.MAINT.SYNOPSIS create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.INV.MAINT.TLD create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.INV.MAINT.UPSELL create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.INV.MAINT.WHSE create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.INV.MAINT.WHSE.BUILD create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.INV.MASTER create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.INV.MASTER.3.17.97 create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.INV.RPT.BUILD create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.INV.RPT.FRONT create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.INV.RPT.INIT create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.INV.RPT.INIT2 create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.INV.SYNOPSIS.DISP create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.INV.TRANS.RPT create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.INV.UPSELL.DISP create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.INV.USAGE.SUB create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.INV.VALUE.BUILD2 create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.INVINQ create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.INVINQ.MULTI create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.INVTRANS create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.INVTRANS.090298 create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.INVTRANS.091098 create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.INVTRANS.OLD create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.IVD create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.IVT.MULTI create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.IVT.MULTI.080299 create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.IVT.MULTI.090298 create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.IVT.MULTI.091098 create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.IVT.MULTI.OLD create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.IVTINQ create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.IVTINQ.SUB create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.LABEL.1UP create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.LABEL.INDICIA create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.LETTERS.UPDATE create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.LINE.ENTRY.OBJECT create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.LINES.ARRAY.MANAGER create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.LINES.ARRAY.MANAGER.062398 create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.LINES.ARRAY.MANAGER.HELP create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.LIST.DIFF create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.LIST.MAINT create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.LIST.SPLIT create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.LOGOFF create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.MAKE.TREE.CCARD create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.MAKE.TREE.ENVELOPE create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.MAKE.TREE.INV create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.MAKE.TREE.LNAME create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.MAKE.TREE.PHONE create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.MAKE.TREE.SSN create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.MAKE.TREE.ZIP create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.MARKET.ACTIVITY.RPT create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.MARKET.LIST create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.MASTER.PM.FLAT create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.MEDIA.ADD.INV create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.MEDIA.ADDRESS.DISP create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.MEDIA.AP.BATCH create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.MEDIA.CALC.COST create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.MEDIA.CALC.COST.2 create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.MEDIA.INV.INFO create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.MEDIA.INV.MENU create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.MEDIA.JVI create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.MEDIA.MONTHLY.BUILD create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.MEDIA.MONTHLY.BUILD.052698 create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.MEDIA.MONTHLY.BUILD.082799 create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.MEDIA.MONTHLY.BUILD.STOP create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.MEDIA.TRANS.UPDATE create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.MEDIA.WINDOW create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.MKT.REVENUE.RPT.R85 create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.MKT.REVENUE.RPT.R85.100797 create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.MKT.REVENUE.RPT.R85.111797 create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.MKT.REVENUE.RPT.R85.112097 create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.MODULUS10 create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.MONTH.BILLING.MAINT create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.MONTHLY.BILLING.MAINT create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.MULTI.CITY create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.NAME.SUB create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.NAME.UPDATE create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.NEXT.PARTNER create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.NOMETER.DEPOSIT.ENTRY create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.NOTES.FLAT create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.NOTES.MANY create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.ORDER.AUX create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.ORDER.BACKUP create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.ORDER.BILLING create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.ORDER.BILLING.092997 create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.ORDER.BILLING.92897 create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.ORDER.BILLING.MAINT create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.ORDER.BILLING2 create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.ORDER.CCARD create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.ORDER.CHARGES create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.ORDER.COMMENTS create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.ORDER.CONV create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.ORDER.ECHECK create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.ORDER.HELP create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.ORDER.HIST create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.ORDER.HIST.092597 create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.ORDER.HIST.PRINT create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.ORDER.INFO create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.ORDER.INFO.FIELD.UPDATE create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.ORDER.INFO.UPDATE create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.ORDER.MAINT create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.ORDER.MAINT.071599 create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.ORDER.MAINT.102999 create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.ORDER.PLEDGE.PULL create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.ORDER.PLEDGE.PULL.RPT create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.ORDER.REMARKS create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.ORDER.SHIPTO create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.ORDER.SUB.PULL create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.ORDER.TRACKING create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.ORDER.XFER create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.ORI.FIX create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.OUTPUT.BY.DATE create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.PARTNER.SUMMARY create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.PATHS.MAINT create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.PEFT.SELECT create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.PERIOD.TO.END.DATE create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.PERIOD.TO.START.DATE create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.PG.MAINT create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.PHONE.TYPE.MAINT create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.PHONE.UPDATE create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.PICKING create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.PICKING.042198 create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.PICKING.050498 create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.PICKING.081398 create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.PICKING.DETAIL.RPT create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.PICKING.FLAT.BUILD create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.PICKING.FLAT.BUILD.052199 create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.PICKING.FLAT.BUILD.052499 create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.PICKING.FLAT.BUILD.060299 create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.PICKING.FLAT.BUILD.061599 create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.PICKING.JBP create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.PICKING.PRINT create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.PICKING.PRINT.090399 create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.PICKING.PRINT.2.14 create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.PICKING.PRINT.LDM create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.PICKING.PRT.CONTROL create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.PICKING.PRT.CONTROL.072799 create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.PICKING.REPRINT create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.PICKING.SUB.BUILD create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.PICKING.SUB.BUILD.052499 create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.PICKING.SUB.BUILD.062299 create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.PICKING.SUB.BUILD.090399 create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.PICKING.SUB.BUILD.BRAD create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.PICKING.SUB.BUILD.TEST create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.PLEDGE.EOM create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.PLEDGE.FLAT create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.PLEDGE.FLAT.BUILD create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.PLEDGE.FLAT.MAINT create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.PLEDGE.PAID create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.PM.2ND.ADDRESS create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.PM.ORDER.INSERT create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.PM.REACTIVATE create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.PM.SHIPTO create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.PMO.HUNG create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.PMO.ITEM.FLAT create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.PMO.SHIP create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.PMO.SHIP.INDIV create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.PMT.FLAT create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.PMXREF.SEARCH create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.PO.RPT1 create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.PO.RPT2 create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.POSTAGE.CLIENT create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.POSTAGE.TRANS create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.PP.BRAD create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.PRE.PRINT.ORD create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.PRECLOSE.EDIT create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.PRINTER.MAINT create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.PRINTER.MAINT.072799 create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.PRINTER.MAINT.WADE create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.PROCESS.INST.DISP create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.PRODUCTS.SHIPPED create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.PROJECT.ANALYSIS create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.PROJECT.ANALYSIS.NEW create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.PURCHASE.MAINT create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.PURCHASE.MAINT.3.17.97 create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.PURCHASE.PARTS create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.PURGE.FLATFILE create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.PURGE.SHIPPER.INDEX create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.QUICK.ENTRY.RHM create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.R8.SUMMARY create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.R8.SUMMARY.INIT create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.R8.SUMMARY.REPORT1 create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.R8.SUMMARY.REPORT1.3.13.97 create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.R8.SUMMARY.REPORT10 create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.R8.SUMMARY.REPORT2 create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.R8.SUMMARY.REPORT3 create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.R8.SUMMARY.REPORT4 create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.R8.SUMMARY.REPORT5 create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.R8.SUMMARY.REPORT6 create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.R8.SUMMARY.REPORT6.060998 create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.R8.SUMMARY.REPORT6.061098 create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.R8.SUMMARY.REPORT7 create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.R8.SUMMARY.REPORT7.WADE create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.R8.SUMMARY.REPORT8 create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.R8.SUMMARY.REPORT9 create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.R8.SUMMARY.REPORTS create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.R8.SUMMARY.REPORTS.3.13.97 create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.R8.SUMMARY.REPORTS.WADE create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.REACTIVATION.RPT create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.RECEIPT.SUMMARY create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.REG.SCREEN.UPDATE create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.REG.SCREEN.UPDATE.051499 create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.REG.SCREEN.UPDATE.051999 create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.REG.SCREEN.UPDATE.BAK create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.REGISTRATION.MAINT create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.REORDER.WORK.BUILD create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.RESET.INV.AVAIL.SUB create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.RETRIEVE.REPORT.BUILD create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.RMV.END.SEG create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.ROYALTY.LOAD create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.ROYALTY.MAINT create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.ROYALTY.POST create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.ROYALTY.RECALC create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.ROYALTY.RPT create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.ROYALTY.UNPOST create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.RSP.BY.SEG.RPT create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.SALES.RPT1 create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.SALES.RPT2 create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.SEGMENT.FLAT create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.SHIP.CUSTOM create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.SHIP.MODE.MAINTENANCE create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.SHIPPING.AUTOCALC create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.SHIPPING.INFO create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.SSN.UPDATE create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.STATION.DISPLAY create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.STATUS.DESC create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.STATUS.DESC.110299 create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.STATUS.FLAT create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.STATUS.REASON.MAINT create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.SUB.CONV create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.SUB.RENEWAL.SELECT create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.SUB.SHIPTO create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.SUB.TABLE.MAINT create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.SUB001 create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.SUB002 create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.SUMMARY.SALES.RPT create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.TAX.BUILD create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.TAX.FLAT create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.TAX.RECEIPT create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.TAX.RECEIPT.CFC create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.TD800.INTERFACE create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.TD800.INTERFACE.121898 create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.TD888.INTERFACE create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.TD888.INTERFACE.121898 create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.TDJINT.INTERFACE create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.TRANS create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.TRANS.022098 create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.TRANS.060898 create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.TRANS.060998 create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.TRANS.FLAT create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.TRANS.FLATFILE create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.TRANS.HIST.FLAT create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.UNPRINT.ORDERS create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.UNSHIP.PMO create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.UNSHIP.RPT1 create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.UNSHIP.RPT1.WADE create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.UNSHIP.RPT2 create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.UNSHIP.RPT2.10081999 create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.UNSHIP.RPT2.JBP create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.UNSHIP.RPT2.WADE create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.UNSHIPPED.RPT create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.UNSHIPPED.RPT2 create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.UPDATE.ACCOUNTS create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.UPDATE.ACCOUNTS.DICT.ITEMS create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.UPDATE.ACCOUNTS.OTHER create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.UPDATE.ACCOUNTS.OTHER2 create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.UPDATE.ACCOUNTS.PARAGRAPHS create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.UPDATE.LETTERS create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.UPDATE.PARAMS create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.VEND create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.VENDOR.MAINT create mode 100755 Ardent/UV/catdir/%AUV%ACMSD.YEAR.END.AUDIT.REPORT create mode 100755 Ardent/UV/catdir/%AUV%ACNV.COMPILER create mode 100755 Ardent/UV/catdir/%AUV%ACNV.MAILERS.ZIP create mode 100755 Ardent/UV/catdir/%AUV%ACOA.ONLINE.DOCUMENT create mode 100755 Ardent/UV/catdir/%AUV%ACODE.UPDATE create mode 100755 Ardent/UV/catdir/%AUV%ACODE.UPDATE.GEN create mode 100755 Ardent/UV/catdir/%AUV%ACODE.UPDATE2 create mode 100755 Ardent/UV/catdir/%AUV%ACOLOR.TEST create mode 100755 Ardent/UV/catdir/%AUV%ACOMP.READ create mode 100755 Ardent/UV/catdir/%AUV%ACOMP.READ.SHORT create mode 100755 Ardent/UV/catdir/%AUV%ACOMPARE create mode 100755 Ardent/UV/catdir/%AUV%ACONSTRUCT.REG.ORDERS create mode 100755 Ardent/UV/catdir/%AUV%ACOPYME create mode 100755 Ardent/UV/catdir/%AUV%ACOUNT.ATTRIBS create mode 100755 Ardent/UV/catdir/%AUV%ACOUNT.BO create mode 100755 Ardent/UV/catdir/%AUV%ACOUNT.LINES create mode 100755 Ardent/UV/catdir/%AUV%ACOUNT.STATUS create mode 100755 Ardent/UV/catdir/%AUV%ACOUNT.VALUES create mode 100755 Ardent/UV/catdir/%AUV%ACREATE.PHONETREE.FLATFILE create mode 100755 Ardent/UV/catdir/%AUV%ACREATE.PM.RECORD create mode 100755 Ardent/UV/catdir/%AUV%ACRI.LOAD.CALL create mode 100755 Ardent/UV/catdir/%AUV%ACRI.MEDIA.ANALYSIS create mode 100755 Ardent/UV/catdir/%AUV%ACRM.CORRECT.IO.ORDERS create mode 100755 Ardent/UV/catdir/%AUV%ACRM.CORRECT.IO.TRANS create mode 100755 Ardent/UV/catdir/%AUV%ACRM.PARTNER.GIVING create mode 100755 Ardent/UV/catdir/%AUV%ACS.FORM create mode 100755 Ardent/UV/catdir/%AUV%ACS.FORM.txt create mode 100755 Ardent/UV/catdir/%AUV%ACTV.NNAME.RPT create mode 100755 Ardent/UV/catdir/%AUV%ACTV.NNAME.RPT.BAK create mode 100755 Ardent/UV/catdir/%AUV%ACTV.PLG.RPT create mode 100755 Ardent/UV/catdir/%AUV%ACURRENCY.MAINT create mode 100755 Ardent/UV/catdir/%AUV%ACUSTOM.COMPILER create mode 100755 Ardent/UV/catdir/%AUV%AD.E.B.TEST create mode 100755 Ardent/UV/catdir/%AUV%ADAILYOP.INDIV create mode 100755 Ardent/UV/catdir/%AUV%ADAILYOP.RECEIPTS create mode 100755 Ardent/UV/catdir/%AUV%ADAILYOP.RECEIPTS.012999 create mode 100755 Ardent/UV/catdir/%AUV%ADAILYOP.RECEIPTS.061599 create mode 100755 Ardent/UV/catdir/%AUV%ADAILYOP.RECEIPTS.061699 create mode 100755 Ardent/UV/catdir/%AUV%ADAILYOP.RECEIPTS.071499 create mode 100755 Ardent/UV/catdir/%AUV%ADAILYOP.RECEIPTS.072397 create mode 100755 Ardent/UV/catdir/%AUV%ADAILYOP.RECEIPTS.WADE create mode 100755 Ardent/UV/catdir/%AUV%ADAILYOP2 create mode 100755 Ardent/UV/catdir/%AUV%ADASH.EVENT.CODE.FIX create mode 100755 Ardent/UV/catdir/%AUV%ADATAMART.EVENT.DETAIL create mode 100755 Ardent/UV/catdir/%AUV%ADATAMART.INIT create mode 100755 Ardent/UV/catdir/%AUV%ADATAMART.REBUILD create mode 100755 Ardent/UV/catdir/%AUV%ADATAMART.REPORTS create mode 100755 Ardent/UV/catdir/%AUV%ADATAMART.REPORTS.042798 create mode 100755 Ardent/UV/catdir/%AUV%ADATE.FUNCTIONS create mode 100755 Ardent/UV/catdir/%AUV%ADATE.TEST create mode 100755 Ardent/UV/catdir/%AUV%ADATE.TO.PERIOD create mode 100755 Ardent/UV/catdir/%AUV%ADATER create mode 100755 Ardent/UV/catdir/%AUV%ADB.MERGE create mode 100755 Ardent/UV/catdir/%AUV%ADBDEL create mode 100755 Ardent/UV/catdir/%AUV%ADBUND create mode 100755 Ardent/UV/catdir/%AUV%ADCOM.INV.SERIAL.NUMS create mode 100755 Ardent/UV/catdir/%AUV%ADCOM.IVT.MULTI create mode 100755 Ardent/UV/catdir/%AUV%ADCOM.PMO.SHIP create mode 100755 Ardent/UV/catdir/%AUV%ADCOM.PMO.SHIP.INDIV create mode 100755 Ardent/UV/catdir/%AUV%ADCOM.SHIP.CUSTOM create mode 100755 Ardent/UV/catdir/%AUV%ADEFAULT.UPDATE create mode 100755 Ardent/UV/catdir/%AUV%ADEL.BTREE create mode 100755 Ardent/UV/catdir/%AUV%ADEL.ROOT create mode 100755 Ardent/UV/catdir/%AUV%ADELETE.BATCH.WAREHOUSE create mode 100755 Ardent/UV/catdir/%AUV%ADELETE.DAILY.WAREHOUSE create mode 100755 Ardent/UV/catdir/%AUV%ADELETE.PM create mode 100755 Ardent/UV/catdir/%AUV%ADEMOG.DICT.IDESC create mode 100755 Ardent/UV/catdir/%AUV%ADEPT.LIST create mode 100755 Ardent/UV/catdir/%AUV%ADEPT.UPDATE create mode 100755 Ardent/UV/catdir/%AUV%ADESCENDING.ORDER create mode 100755 Ardent/UV/catdir/%AUV%ADETAIL.SALES.RPT create mode 100755 Ardent/UV/catdir/%AUV%ADETAIL.SALES.RPT.3.12.97 create mode 100755 Ardent/UV/catdir/%AUV%ADIA.INV.TRANS create mode 100755 Ardent/UV/catdir/%AUV%ADIA.PHYSICAL.QTYS create mode 100755 Ardent/UV/catdir/%AUV%ADIA.RINDEX.INV.SUB create mode 100755 Ardent/UV/catdir/%AUV%ADICT.COMPARE create mode 100755 Ardent/UV/catdir/%AUV%ADICT.CREATE create mode 100755 Ardent/UV/catdir/%AUV%ADICT.ITEM create mode 100755 Ardent/UV/catdir/%AUV%ADICT.UPDATER create mode 100755 Ardent/UV/catdir/%AUV%ADIFF.FLAGS create mode 100755 Ardent/UV/catdir/%AUV%ADIFF.SUB create mode 100755 Ardent/UV/catdir/%AUV%ADISPERSE.SUB create mode 100755 Ardent/UV/catdir/%AUV%ADISPLAY.RMI.EVENT.TABLE create mode 100755 Ardent/UV/catdir/%AUV%ADIST.POINT.MAINT create mode 100755 Ardent/UV/catdir/%AUV%ADMA.UPDATE create mode 100755 Ardent/UV/catdir/%AUV%ADMAIL.LAYOUT create mode 100755 Ardent/UV/catdir/%AUV%ADO03 create mode 100755 Ardent/UV/catdir/%AUV%ADONOR.LIST create mode 100755 Ardent/UV/catdir/%AUV%ADONOR.REPORT create mode 100755 Ardent/UV/catdir/%AUV%ADOVE.SOURCE.MAINT create mode 100755 Ardent/UV/catdir/%AUV%ADRC.ML.PULL create mode 100755 Ardent/UV/catdir/%AUV%ADRC.PMO.FLAT create mode 100755 Ardent/UV/catdir/%AUV%ADRC.PRECLOSE.EDIT create mode 100755 Ardent/UV/catdir/%AUV%ADSBTEMP create mode 100755 Ardent/UV/catdir/%AUV%ADUP.ELIM.REPORT create mode 100755 Ardent/UV/catdir/%AUV%AEAGLE.ACTIVITY.RPT create mode 100755 Ardent/UV/catdir/%AUV%AEAGLE.CLUB.POINTS create mode 100755 Ardent/UV/catdir/%AUV%AEAGLE.DISP create mode 100755 Ardent/UV/catdir/%AUV%AEAGLE.ENTRY create mode 100755 Ardent/UV/catdir/%AUV%AEAGLE.POINTS.DISP create mode 100755 Ardent/UV/catdir/%AUV%AEAGLE.SUMMARY.RPT create mode 100755 Ardent/UV/catdir/%AUV%AEAGLE.VIEW create mode 100755 Ardent/UV/catdir/%AUV%AECHO.OFF create mode 100755 Ardent/UV/catdir/%AUV%AECHO.ON create mode 100755 Ardent/UV/catdir/%AUV%AECM.TITHE.SELECT create mode 100755 Ardent/UV/catdir/%AUV%AENTRY.FUNCTIONS create mode 100755 Ardent/UV/catdir/%AUV%AERV create mode 100755 Ardent/UV/catdir/%AUV%AEV create mode 100755 Ardent/UV/catdir/%AUV%AEV.MAINT create mode 100755 Ardent/UV/catdir/%AUV%AEV.MAINT.RSV create mode 100755 Ardent/UV/catdir/%AUV%AEV.MAINT.SERIES create mode 100755 Ardent/UV/catdir/%AUV%AEV.MAINT.SERIES.TEMP create mode 100755 Ardent/UV/catdir/%AUV%AEV.RSV create mode 100755 Ardent/UV/catdir/%AUV%AEVENT.CHANGE create mode 100755 Ardent/UV/catdir/%AUV%AEXPAND.PMA.NAMES create mode 100755 Ardent/UV/catdir/%AUV%AEXTRACT.FIELD.NAMES create mode 100755 Ardent/UV/catdir/%AUV%AFCW.APPROVED.ORDERS.RPT create mode 100755 Ardent/UV/catdir/%AUV%AFCW.EVENT.PROD.RPT create mode 100755 Ardent/UV/catdir/%AUV%AFCW.RESPONSE.TOTALS create mode 100755 Ardent/UV/catdir/%AUV%AFCW.SHIP.FIX create mode 100755 Ardent/UV/catdir/%AUV%AFCW.ZIP.RPT create mode 100755 Ardent/UV/catdir/%AUV%AFF create mode 100755 Ardent/UV/catdir/%AUV%AFILE.COMPARE create mode 100755 Ardent/UV/catdir/%AUV%AFILE.CONVERT create mode 100755 Ardent/UV/catdir/%AUV%AFILE.INFO create mode 100755 Ardent/UV/catdir/%AUV%AFILE.REVIEW create mode 100755 Ardent/UV/catdir/%AUV%AFIND.MENU.PROCS create mode 100755 Ardent/UV/catdir/%AUV%AFIND.ORD create mode 100755 Ardent/UV/catdir/%AUV%AFIND.ORDERS create mode 100755 Ardent/UV/catdir/%AUV%AFIND.UNKNOWN.FUND create mode 100755 Ardent/UV/catdir/%AUV%AFISCAL.YR.RPT create mode 100755 Ardent/UV/catdir/%AUV%AFIX.11509249.1 create mode 100755 Ardent/UV/catdir/%AUV%AFIX.46081.1 create mode 100755 Ardent/UV/catdir/%AUV%AFIX.ALL.VOCS create mode 100755 Ardent/UV/catdir/%AUV%AFIX.ANON.TRANS create mode 100755 Ardent/UV/catdir/%AUV%AFIX.ANON.TRANS.2 create mode 100755 Ardent/UV/catdir/%AUV%AFIX.BA create mode 100755 Ardent/UV/catdir/%AUV%AFIX.BA.XREF create mode 100755 Ardent/UV/catdir/%AUV%AFIX.BATCH.XREF create mode 100755 Ardent/UV/catdir/%AUV%AFIX.CREATE.FILE create mode 100755 Ardent/UV/catdir/%AUV%AFIX.CURRENCY.FILE create mode 100755 Ardent/UV/catdir/%AUV%AFIX.DRC.SEG create mode 100755 Ardent/UV/catdir/%AUV%AFIX.EVENT.FILE create mode 100755 Ardent/UV/catdir/%AUV%AFIX.IP.STATUS create mode 100755 Ardent/UV/catdir/%AUV%AFIX.ITEM.COST create mode 100755 Ardent/UV/catdir/%AUV%AFIX.OP create mode 100755 Ardent/UV/catdir/%AUV%AFIX.PD.CONF.ORDERS create mode 100755 Ardent/UV/catdir/%AUV%AFIX.PM create mode 100755 Ardent/UV/catdir/%AUV%AFIX.RADIO create mode 100755 Ardent/UV/catdir/%AUV%AFIX.STATE.REGION create mode 100755 Ardent/UV/catdir/%AUV%AFIX.STATE.TABLE create mode 100755 Ardent/UV/catdir/%AUV%AFIX.SUBS create mode 100755 Ardent/UV/catdir/%AUV%AFIX.TRANS create mode 100755 Ardent/UV/catdir/%AUV%AFIX.UNSHIPPED.ORDERS create mode 100755 Ardent/UV/catdir/%AUV%AFIXME create mode 100755 Ardent/UV/catdir/%AUV%AFKEYS create mode 100755 Ardent/UV/catdir/%AUV%AFKEYS.INV create mode 100755 Ardent/UV/catdir/%AUV%AFLAG.BATCHES.AS.UNPRINTED create mode 100755 Ardent/UV/catdir/%AUV%AFMT.CODE.UPDATE create mode 100755 Ardent/UV/catdir/%AUV%AFORCE.MATCH.INV.QTY create mode 100755 Ardent/UV/catdir/%AUV%AFORCE.ORDERS.TO.HISTORY create mode 100755 Ardent/UV/catdir/%AUV%AFORCE.PRINTED.BATCHES create mode 100755 Ardent/UV/catdir/%AUV%AFOREIGN.PARTNER create mode 100755 Ardent/UV/catdir/%AUV%AFREQ.BY.AMOUNT create mode 100755 Ardent/UV/catdir/%AUV%AFTP.TABLE.UPDATE.SUB create mode 100755 Ardent/UV/catdir/%AUV%AFULL.NAME create mode 100755 Ardent/UV/catdir/%AUV%AFUNCTION.KEYS create mode 100755 Ardent/UV/catdir/%AUV%AFUND.DAILY create mode 100755 Ardent/UV/catdir/%AUV%AFUND.DESC.CHANGE create mode 100755 Ardent/UV/catdir/%AUV%AGCC create mode 100755 Ardent/UV/catdir/%AUV%AGCODE.SUMMARY.RPT create mode 100755 Ardent/UV/catdir/%AUV%AGEN.CODE.UPDATE create mode 100755 Ardent/UV/catdir/%AUV%AGEN.COM2 create mode 100755 Ardent/UV/catdir/%AUV%AGEN.COMMON create mode 100755 Ardent/UV/catdir/%AUV%AGEN.COMMON.MEDIA create mode 100755 Ardent/UV/catdir/%AUV%AGEN.DEFAULT.UPDATE create mode 100755 Ardent/UV/catdir/%AUV%AGEN.EQU create mode 100755 Ardent/UV/catdir/%AUV%AGEN.GET create mode 100755 Ardent/UV/catdir/%AUV%AGEN.HELP.DISPLAY create mode 100755 Ardent/UV/catdir/%AUV%AGEN.HELP.DISPLAY2 create mode 100755 Ardent/UV/catdir/%AUV%AGEN.HELP.DISPLAY3 create mode 100755 Ardent/UV/catdir/%AUV%AGEN.LIST.NEW create mode 100755 Ardent/UV/catdir/%AUV%AGEN.LIST.UPDATE create mode 100755 Ardent/UV/catdir/%AUV%AGEN.MAIN create mode 100755 Ardent/UV/catdir/%AUV%AGEN.MOD create mode 100755 Ardent/UV/catdir/%AUV%AGEN.PGM create mode 100755 Ardent/UV/catdir/%AUV%AGEN.SCREEN.BUILD create mode 100755 Ardent/UV/catdir/%AUV%AGEN.SCREEN.DISPLAY.NEW create mode 100755 Ardent/UV/catdir/%AUV%AGEN.STRING.LOOKUP create mode 100755 Ardent/UV/catdir/%AUV%AGEN.SUB.NEW create mode 100755 Ardent/UV/catdir/%AUV%AGEN2 create mode 100755 Ardent/UV/catdir/%AUV%AGENERIC.FLATFILE create mode 100755 Ardent/UV/catdir/%AUV%AGEO create mode 100755 Ardent/UV/catdir/%AUV%AGET.37 create mode 100755 Ardent/UV/catdir/%AUV%AGET.CS.FORM.DATA create mode 100755 Ardent/UV/catdir/%AUV%AGET.CS.FORM.DATA.013098 create mode 100755 Ardent/UV/catdir/%AUV%AGET.CS.FORM.DATA.121297 create mode 100755 Ardent/UV/catdir/%AUV%AGET.CS.FORM.DATA.122997 create mode 100755 Ardent/UV/catdir/%AUV%AGET.GEO.CODE create mode 100755 Ardent/UV/catdir/%AUV%AGET.MEMBER.POSITION create mode 100755 Ardent/UV/catdir/%AUV%AGET.NEW.BATCH.NUM create mode 100755 Ardent/UV/catdir/%AUV%AGET.NEW.BATCH.NUM.051399 create mode 100755 Ardent/UV/catdir/%AUV%AGET.PRINTER.NAME create mode 100755 Ardent/UV/catdir/%AUV%AGET.XS.FORM.DATA create mode 100755 Ardent/UV/catdir/%AUV%AGET.XS.FORM.DATA.040599 create mode 100755 Ardent/UV/catdir/%AUV%AGET.XS.FORM.DATA.041699 create mode 100755 Ardent/UV/catdir/%AUV%AGETPGM create mode 100755 Ardent/UV/catdir/%AUV%AGF.CONV create mode 100755 Ardent/UV/catdir/%AUV%AGF.FUND.GIVER.RPT create mode 100755 Ardent/UV/catdir/%AUV%AGF.PLEDGE.FIX create mode 100755 Ardent/UV/catdir/%AUV%AGF.PLEDGE.RPT create mode 100755 Ardent/UV/catdir/%AUV%AGF.PLEDGE.RPT.041399 create mode 100755 Ardent/UV/catdir/%AUV%AGF.SPEC.FLATFILE create mode 100755 Ardent/UV/catdir/%AUV%AGIVING.HIST.BUILD create mode 100755 Ardent/UV/catdir/%AUV%AGIVING.HIST.RPT1 create mode 100755 Ardent/UV/catdir/%AUV%AGIVING.HIST.RPT2 create mode 100755 Ardent/UV/catdir/%AUV%AGK.SHIPPING.INFO create mode 100755 Ardent/UV/catdir/%AUV%AGMA.PICKING.PRINT create mode 100755 Ardent/UV/catdir/%AUV%AGRFX create mode 100755 Ardent/UV/catdir/%AUV%AHDEC.TITHE.SELECT create mode 100755 Ardent/UV/catdir/%AUV%AHDFC.ORIGIN.DETAIL create mode 100755 Ardent/UV/catdir/%AUV%AHDFC.RPT create mode 100755 Ardent/UV/catdir/%AUV%AHDG3 create mode 100755 Ardent/UV/catdir/%AUV%AHIDE.INV.ITEMS create mode 100755 Ardent/UV/catdir/%AUV%AHM.AGING.REPORT create mode 100755 Ardent/UV/catdir/%AUV%AHM.AGING.RPT create mode 100755 Ardent/UV/catdir/%AUV%AHM.INV.RPT create mode 100755 Ardent/UV/catdir/%AUV%AHM.INVOICE.CREDIT create mode 100755 Ardent/UV/catdir/%AUV%AHM.SALES.RPT create mode 100755 Ardent/UV/catdir/%AUV%AHPW.PICKING.PRINT create mode 100755 Ardent/UV/catdir/%AUV%AIA create mode 100755 Ardent/UV/catdir/%AUV%AIC create mode 100755 Ardent/UV/catdir/%AUV%AICARE.RPT create mode 100755 Ardent/UV/catdir/%AUV%AICM.ABS.2 create mode 100755 Ardent/UV/catdir/%AUV%AICM.APPEAL.SEG.BDOWN create mode 100755 Ardent/UV/catdir/%AUV%AICM.APPEAL.SEG.BDOWN.091697 create mode 100755 Ardent/UV/catdir/%AUV%AICM.APPEAL.SEG.BDOWN.91797 create mode 100755 Ardent/UV/catdir/%AUV%AICM.ASB.2 create mode 100755 Ardent/UV/catdir/%AUV%AICM.CALL.RPT create mode 100755 Ardent/UV/catdir/%AUV%AICM.CALL.RPT.BUILD create mode 100755 Ardent/UV/catdir/%AUV%AICM.DONOR.VALUE.RPT create mode 100755 Ardent/UV/catdir/%AUV%AICM.EVENT.CHANGE create mode 100755 Ardent/UV/catdir/%AUV%AICM.FLATFILE create mode 100755 Ardent/UV/catdir/%AUV%AICM.FTP.TABLE.ADD create mode 100755 Ardent/UV/catdir/%AUV%AICM.FTP.TABLE.BUILD create mode 100755 Ardent/UV/catdir/%AUV%AICM.FTP.TABLE.DEL create mode 100755 Ardent/UV/catdir/%AUV%AICM.FTP.TABLE.MAINT create mode 100755 Ardent/UV/catdir/%AUV%AICM.INT.TABLE.ADD create mode 100755 Ardent/UV/catdir/%AUV%AICM.INT.TABLE.BUILD create mode 100755 Ardent/UV/catdir/%AUV%AICM.INT.TABLE.DEL create mode 100755 Ardent/UV/catdir/%AUV%AICM.INT.TABLE.EXCEPT create mode 100755 Ardent/UV/catdir/%AUV%AICM.INT.TABLE.EXCEPT.ADD create mode 100755 Ardent/UV/catdir/%AUV%AICM.INT.TABLE.EXCEPT.BUILD create mode 100755 Ardent/UV/catdir/%AUV%AICM.INT.TABLE.EXCEPT.DEL create mode 100755 Ardent/UV/catdir/%AUV%AICM.INT.TABLE.MAINT create mode 100755 Ardent/UV/catdir/%AUV%AICM.INTERNET.TABLE.MAINT create mode 100755 Ardent/UV/catdir/%AUV%AICM.INV.LIABILITY.RPT create mode 100755 Ardent/UV/catdir/%AUV%AICM.MATRIXX.TABLE.ADD create mode 100755 Ardent/UV/catdir/%AUV%AICM.MATRIXX.TABLE.BUILD create mode 100755 Ardent/UV/catdir/%AUV%AICM.MATRIXX.TABLE.DEL create mode 100755 Ardent/UV/catdir/%AUV%AICM.MATRIXX.TABLE.EXCEPT create mode 100755 Ardent/UV/catdir/%AUV%AICM.MATRIXX.TABLE.EXCEPT.ADD create mode 100755 Ardent/UV/catdir/%AUV%AICM.MATRIXX.TABLE.EXCEPT.BUILD create mode 100755 Ardent/UV/catdir/%AUV%AICM.MATRIXX.TABLE.EXCEPT.DEL create mode 100755 Ardent/UV/catdir/%AUV%AICM.MATRIXX.TABLE.MAINT create mode 100755 Ardent/UV/catdir/%AUV%AICM.PHONE.IMPORT create mode 100755 Ardent/UV/catdir/%AUV%AICM.PICKING.PRINT create mode 100755 Ardent/UV/catdir/%AUV%AICM.PICKING.PRINT.112097 create mode 100755 Ardent/UV/catdir/%AUV%AICM.PICKING.PRINT.2 create mode 100755 Ardent/UV/catdir/%AUV%AICM.PICKING.PRINT.TEMP create mode 100755 Ardent/UV/catdir/%AUV%AICM.PMO.FLAT.SPECIAL create mode 100755 Ardent/UV/catdir/%AUV%AICM.PMO.FLAT.SPECIAL.021799 create mode 100755 Ardent/UV/catdir/%AUV%AICM.PRECLOSE.EDIT create mode 100755 Ardent/UV/catdir/%AUV%AICM.SEGMENT.RPT create mode 100755 Ardent/UV/catdir/%AUV%AICM.SEGMENT.RPT.BUILD create mode 100755 Ardent/UV/catdir/%AUV%AICM.TD800.TABLE.ADD create mode 100755 Ardent/UV/catdir/%AUV%AICM.TD800.TABLE.BUILD create mode 100755 Ardent/UV/catdir/%AUV%AICM.TD800.TABLE.DEL create mode 100755 Ardent/UV/catdir/%AUV%AICM.TD800.TABLE.EXCEPT create mode 100755 Ardent/UV/catdir/%AUV%AICM.TD800.TABLE.EXCEPT.ADD create mode 100755 Ardent/UV/catdir/%AUV%AICM.TD800.TABLE.EXCEPT.BUILD create mode 100755 Ardent/UV/catdir/%AUV%AICM.TD800.TABLE.EXCEPT.DEL create mode 100755 Ardent/UV/catdir/%AUV%AICM.TD800.TABLE.MAINT create mode 100755 Ardent/UV/catdir/%AUV%AICM.TD888.TABLE.ADD create mode 100755 Ardent/UV/catdir/%AUV%AICM.TD888.TABLE.BUILD create mode 100755 Ardent/UV/catdir/%AUV%AICM.TD888.TABLE.DEL create mode 100755 Ardent/UV/catdir/%AUV%AICM.TD888.TABLE.EXCEPT create mode 100755 Ardent/UV/catdir/%AUV%AICM.TD888.TABLE.EXCEPT.ADD create mode 100755 Ardent/UV/catdir/%AUV%AICM.TD888.TABLE.EXCEPT.BUILD create mode 100755 Ardent/UV/catdir/%AUV%AICM.TD888.TABLE.EXCEPT.DEL create mode 100755 Ardent/UV/catdir/%AUV%AICM.TD888.TABLE.MAINT create mode 100755 Ardent/UV/catdir/%AUV%AIDENTIFY.SOFTWARE create mode 100755 Ardent/UV/catdir/%AUV%AIDESC.DIST.CHANNEL create mode 100755 Ardent/UV/catdir/%AUV%AIDESC.EAGLE.ACCUM create mode 100755 Ardent/UV/catdir/%AUV%AIDESC.EAGLE.REMAIN create mode 100755 Ardent/UV/catdir/%AUV%AIDESC.EAGLE.USED create mode 100755 Ardent/UV/catdir/%AUV%AIDESC.GEN.TABLE create mode 100755 Ardent/UV/catdir/%AUV%AIDESC.MEMBER.PAID create mode 100755 Ardent/UV/catdir/%AUV%AIDESC.MEMBER.PAID.DATE create mode 100755 Ardent/UV/catdir/%AUV%AIDESC.MEMBER.POS create mode 100755 Ardent/UV/catdir/%AUV%AIDESC.PM.HOME.PHONE create mode 100755 Ardent/UV/catdir/%AUV%AIDESC.PM.OCCUPATION create mode 100755 Ardent/UV/catdir/%AUV%AIDESC.PMO.INFO create mode 100755 Ardent/UV/catdir/%AUV%AIDESC.RSV.AMOUNT create mode 100755 Ardent/UV/catdir/%AUV%AIDESC.RSV.CALC create mode 100755 Ardent/UV/catdir/%AUV%AIDM.800.CLIENT.BIO create mode 100755 Ardent/UV/catdir/%AUV%AIDM.800.STATIONS create mode 100755 Ardent/UV/catdir/%AUV%AIFL.CCT.FORM create mode 100755 Ardent/UV/catdir/%AUV%AIFL.LABEL.SUMMARY.RPT create mode 100755 Ardent/UV/catdir/%AUV%AIFL.PICKING.PRINT create mode 100755 Ardent/UV/catdir/%AUV%AIFL.PRECLOSE.EDIT create mode 100755 Ardent/UV/catdir/%AUV%AIFL.SHIPPING.INFO create mode 100755 Ardent/UV/catdir/%AUV%AIMA create mode 100755 Ardent/UV/catdir/%AUV%AIMPORT.TO.PM create mode 100755 Ardent/UV/catdir/%AUV%AIND.PRODUCT.REPORT create mode 100755 Ardent/UV/catdir/%AUV%AINPUT.FIX create mode 100755 Ardent/UV/catdir/%AUV%AINS.BTREE create mode 100755 Ardent/UV/catdir/%AUV%AINS.ROOT create mode 100755 Ardent/UV/catdir/%AUV%AINSP.ORDERS.FLAT create mode 100755 Ardent/UV/catdir/%AUV%AINSP.PARAGRAPH.RPT create mode 100755 Ardent/UV/catdir/%AUV%AINSP.PICKING.PRINT create mode 100755 Ardent/UV/catdir/%AUV%AINSP.PICKING.PRINT.031999 create mode 100755 Ardent/UV/catdir/%AUV%AINSP.PM.CONV create mode 100755 Ardent/UV/catdir/%AUV%AINSP.PRECLOSE.EDIT create mode 100755 Ardent/UV/catdir/%AUV%AINSP.SHAREATHON.RPT create mode 100755 Ardent/UV/catdir/%AUV%AINSP.SURVEY.RPT create mode 100755 Ardent/UV/catdir/%AUV%AINSP.TRANS.PROJ.RPT create mode 100755 Ardent/UV/catdir/%AUV%AINT.TABLE.UPDATE.SUB create mode 100755 Ardent/UV/catdir/%AUV%AINV create mode 100755 Ardent/UV/catdir/%AUV%AINV.COST.CHECK create mode 100755 Ardent/UV/catdir/%AUV%AINV.DESC.CHANGE create mode 100755 Ardent/UV/catdir/%AUV%AINV.FIX create mode 100755 Ardent/UV/catdir/%AUV%AINV.INDEX.UPDATE create mode 100755 Ardent/UV/catdir/%AUV%AINV.JOURNAL.DISPLAY create mode 100755 Ardent/UV/catdir/%AUV%AINV.JOURNAL.DISPLAY.12.15.97 create mode 100755 Ardent/UV/catdir/%AUV%AINV.JOURNAL.DISPLAY.2 create mode 100755 Ardent/UV/catdir/%AUV%AINV.JOURNAL.RPT create mode 100755 Ardent/UV/catdir/%AUV%AINV.JOURNAL.UPDATE create mode 100755 Ardent/UV/catdir/%AUV%AINV.JOURNAL.UPDATE.12.15.97 create mode 100755 Ardent/UV/catdir/%AUV%AINV.JOURNAL.UPDATE.2 create mode 100755 Ardent/UV/catdir/%AUV%AINV.LOOKUP create mode 100755 Ardent/UV/catdir/%AUV%AINV.MAINT create mode 100755 Ardent/UV/catdir/%AUV%AINV.MOD create mode 100755 Ardent/UV/catdir/%AUV%AINV.MOD.072498 create mode 100755 Ardent/UV/catdir/%AUV%AINV.MOD.072798 create mode 100755 Ardent/UV/catdir/%AUV%AINV.MOD.080598 create mode 100755 Ardent/UV/catdir/%AUV%AINV.MOD.080798 create mode 100755 Ardent/UV/catdir/%AUV%AINV.RCV.PRINT create mode 100755 Ardent/UV/catdir/%AUV%AINV.TBL.SPEC.MAINT create mode 100755 Ardent/UV/catdir/%AUV%AINV.TRANS.PROC.RPT create mode 100755 Ardent/UV/catdir/%AUV%AINV.TRANS.RPT create mode 100755 Ardent/UV/catdir/%AUV%AINVT.2 create mode 100755 Ardent/UV/catdir/%AUV%AINVTRANS create mode 100755 Ardent/UV/catdir/%AUV%AIT create mode 100755 Ardent/UV/catdir/%AUV%AITEM.COMPARE create mode 100755 Ardent/UV/catdir/%AUV%AITEM.QUERY create mode 100755 Ardent/UV/catdir/%AUV%AIVR create mode 100755 Ardent/UV/catdir/%AUV%AIVT create mode 100755 Ardent/UV/catdir/%AUV%AJAP.REMOVE.SEGMENTATION create mode 100755 Ardent/UV/catdir/%AUV%AJBP.LAM create mode 100755 Ardent/UV/catdir/%AUV%AJBP.LAM.PGM create mode 100755 Ardent/UV/catdir/%AUV%AJBP.PGM create mode 100755 Ardent/UV/catdir/%AUV%AJBP.PGM1 create mode 100755 Ardent/UV/catdir/%AUV%AJBP.PGM1.LOOP create mode 100755 Ardent/UV/catdir/%AUV%AJET-OUT create mode 100755 Ardent/UV/catdir/%AUV%AJI.PICKING.PRINT create mode 100755 Ardent/UV/catdir/%AUV%AJOURNAL.FIX create mode 100755 Ardent/UV/catdir/%AUV%AJOURNAL.UPDATES.SUB create mode 100755 Ardent/UV/catdir/%AUV%AJUMBLE.PHONE create mode 100755 Ardent/UV/catdir/%AUV%AJVI.PRECLOSE.EDIT create mode 100755 Ardent/UV/catdir/%AUV%AKC create mode 100755 Ardent/UV/catdir/%AUV%AKC.ANAL create mode 100755 Ardent/UV/catdir/%AUV%AKC.BATCH.AUDIT create mode 100755 Ardent/UV/catdir/%AUV%AKC.BATCH.REMOVE create mode 100755 Ardent/UV/catdir/%AUV%AKC.CC.HISTORY create mode 100755 Ardent/UV/catdir/%AUV%AKC.CHECK.FLAT create mode 100755 Ardent/UV/catdir/%AUV%AKC.CHECK.FLAT2 create mode 100755 Ardent/UV/catdir/%AUV%AKC.ICM.EXT create mode 100755 Ardent/UV/catdir/%AUV%AKC.ICM.FIX.LETTERS create mode 100755 Ardent/UV/catdir/%AUV%AKC.MARK.AS.SHIPPED create mode 100755 Ardent/UV/catdir/%AUV%AKC.PMO.AUTH create mode 100755 Ardent/UV/catdir/%AUV%AKC.PROJECT.EVENT create mode 100755 Ardent/UV/catdir/%AUV%AKC.REFORMAT create mode 100755 Ardent/UV/catdir/%AUV%AKC.REFORMAT.PL create mode 100755 Ardent/UV/catdir/%AUV%AKC.RELEASED.STATUS create mode 100755 Ardent/UV/catdir/%AUV%AKC.SEGMENT.DISPLAY create mode 100755 Ardent/UV/catdir/%AUV%AKC.TRANS.AUDIT create mode 100755 Ardent/UV/catdir/%AUV%AKC.TRANS.SCRUB create mode 100755 Ardent/UV/catdir/%AUV%AKEITH3 create mode 100755 Ardent/UV/catdir/%AUV%AKEV create mode 100755 Ardent/UV/catdir/%AUV%AKEV1 create mode 100755 Ardent/UV/catdir/%AUV%AKEV2 create mode 100755 Ardent/UV/catdir/%AUV%AKEY.INDICATOR.RPT create mode 100755 Ardent/UV/catdir/%AUV%AKLA.PICKING.PRINT create mode 100755 Ardent/UV/catdir/%AUV%AKLS.PG1 create mode 100755 Ardent/UV/catdir/%AUV%AKLS.PGM1 create mode 100755 Ardent/UV/catdir/%AUV%AKLS.PGM2 create mode 100755 Ardent/UV/catdir/%AUV%AKLS.PGM3 create mode 100755 Ardent/UV/catdir/%AUV%ALAM create mode 100755 Ardent/UV/catdir/%AUV%ALAM.FORM create mode 100755 Ardent/UV/catdir/%AUV%ALAM.FORM2 create mode 100755 Ardent/UV/catdir/%AUV%ALAM.FORM3 create mode 100755 Ardent/UV/catdir/%AUV%ALAYOUT.DATAMART create mode 100755 Ardent/UV/catdir/%AUV%ALETTER.CLEANUP create mode 100755 Ardent/UV/catdir/%AUV%ALHB.FILE.REVIEW create mode 100755 Ardent/UV/catdir/%AUV%ALIST.ACTIVITY.DETAIL create mode 100755 Ardent/UV/catdir/%AUV%ALIST.ACTIVITY.MASTER create mode 100755 Ardent/UV/catdir/%AUV%ALIST.FORM create mode 100755 Ardent/UV/catdir/%AUV%ALIST.MAINT create mode 100755 Ardent/UV/catdir/%AUV%ALIST25 create mode 100755 Ardent/UV/catdir/%AUV%ALOCK.TEST create mode 100755 Ardent/UV/catdir/%AUV%ALOGNAME.TEST create mode 100755 Ardent/UV/catdir/%AUV%ALOGTO.RMI.EXEC.CHURCHES create mode 100755 Ardent/UV/catdir/%AUV%ALOOK.DCODES create mode 100755 Ardent/UV/catdir/%AUV%ALOOKUP.TEST create mode 100755 Ardent/UV/catdir/%AUV%ALOU.RPT create mode 100755 Ardent/UV/catdir/%AUV%ALPF create mode 100755 Ardent/UV/catdir/%AUV%ALPF.072397 create mode 100755 Ardent/UV/catdir/%AUV%AMAIL.OTHER.NN.RPT create mode 100755 Ardent/UV/catdir/%AUV%AMAIL.PRODUCT.REPORT create mode 100755 Ardent/UV/catdir/%AUV%AMAKE.10DIGIT.PHONE create mode 100755 Ardent/UV/catdir/%AUV%AMAKE.BA.TABLE create mode 100755 Ardent/UV/catdir/%AUV%AMAKE.REGION.TABLE create mode 100755 Ardent/UV/catdir/%AUV%AMAKE.TITLE.TABLE create mode 100755 Ardent/UV/catdir/%AUV%AMASTER.CFG create mode 100755 Ardent/UV/catdir/%AUV%AMATRIXX.TABLE.UPDATE.EXCEPT.SUB create mode 100755 Ardent/UV/catdir/%AUV%AMATRIXX.TABLE.UPDATE.SUB create mode 100755 Ardent/UV/catdir/%AUV%AMAX.ATTRIBS create mode 100755 Ardent/UV/catdir/%AUV%AMBM create mode 100755 Ardent/UV/catdir/%AUV%AMC030 create mode 100755 Ardent/UV/catdir/%AUV%AMC480 create mode 100755 Ardent/UV/catdir/%AUV%AMCWE.BACKLOG.RPT1 create mode 100755 Ardent/UV/catdir/%AUV%AMCWE.BACKORDER.RPT create mode 100755 Ardent/UV/catdir/%AUV%AMCWE.CALL.RPT create mode 100755 Ardent/UV/catdir/%AUV%AMCWE.CALL.RPT.111897 create mode 100755 Ardent/UV/catdir/%AUV%AMCWE.CALL.TRACKING.RPT create mode 100755 Ardent/UV/catdir/%AUV%AMCWE.CAMPAIGN.RPT2 create mode 100755 Ardent/UV/catdir/%AUV%AMCWE.CONFIRM.SLIP create mode 100755 Ardent/UV/catdir/%AUV%AMCWE.CONV.INV.YTD create mode 100755 Ardent/UV/catdir/%AUV%AMCWE.DAILY.ACTIVITY.RPT create mode 100755 Ardent/UV/catdir/%AUV%AMCWE.DAILY.RPT1 create mode 100755 Ardent/UV/catdir/%AUV%AMCWE.DAILY.RPT1.txt create mode 100755 Ardent/UV/catdir/%AUV%AMCWE.DAILY.RPT2 create mode 100755 Ardent/UV/catdir/%AUV%AMCWE.DAILY.RPT2.HOLD create mode 100755 Ardent/UV/catdir/%AUV%AMCWE.DAILY.RPT3 create mode 100755 Ardent/UV/catdir/%AUV%AMCWE.DAILY.RPT3.111797 create mode 100755 Ardent/UV/catdir/%AUV%AMCWE.DAILY.RPT5 create mode 100755 Ardent/UV/catdir/%AUV%AMCWE.DAILY.RPT5.txt create mode 100755 Ardent/UV/catdir/%AUV%AMCWE.DONOR.JUNE20.txt create mode 100755 Ardent/UV/catdir/%AUV%AMCWE.DONOR.RPT2 create mode 100755 Ardent/UV/catdir/%AUV%AMCWE.DONOR.RPT3 create mode 100755 Ardent/UV/catdir/%AUV%AMCWE.DONOR.RPT5 create mode 100755 Ardent/UV/catdir/%AUV%AMCWE.DONOR.TRACKING.RPT create mode 100755 Ardent/UV/catdir/%AUV%AMCWE.DSPR.IDESC create mode 100755 Ardent/UV/catdir/%AUV%AMCWE.ELDER.TRACKING.RPT create mode 100755 Ardent/UV/catdir/%AUV%AMCWE.EVENT.ACTIVITY.RPT create mode 100755 Ardent/UV/catdir/%AUV%AMCWE.EVENT.PLEDGES.RPT create mode 100755 Ardent/UV/catdir/%AUV%AMCWE.EVENT.SUM.RPT create mode 100755 Ardent/UV/catdir/%AUV%AMCWE.FLATFILE create mode 100755 Ardent/UV/catdir/%AUV%AMCWE.IC.RPT2 create mode 100755 Ardent/UV/catdir/%AUV%AMCWE.INV.RPT.FRONT create mode 100755 Ardent/UV/catdir/%AUV%AMCWE.MAIL.OTHER.NN.RPT create mode 100755 Ardent/UV/catdir/%AUV%AMCWE.MAILPULL create mode 100755 Ardent/UV/catdir/%AUV%AMCWE.MAILPULL.082197 create mode 100755 Ardent/UV/catdir/%AUV%AMCWE.MAILPULL.3235 create mode 100755 Ardent/UV/catdir/%AUV%AMCWE.MAILPULL.3243 create mode 100755 Ardent/UV/catdir/%AUV%AMCWE.MAILPULL.3243.082097 create mode 100755 Ardent/UV/catdir/%AUV%AMCWE.MAILPULL.3243.082297 create mode 100755 Ardent/UV/catdir/%AUV%AMCWE.MAILPULL.3243.FINAL create mode 100755 Ardent/UV/catdir/%AUV%AMCWE.MAILPULL.ATT5-1 create mode 100755 Ardent/UV/catdir/%AUV%AMCWE.MAILPULL.BAK create mode 100755 Ardent/UV/catdir/%AUV%AMCWE.MAILPULL.FOR create mode 100755 Ardent/UV/catdir/%AUV%AMCWE.MAILPULL.SCOTT create mode 100755 Ardent/UV/catdir/%AUV%AMCWE.MAILPULL5 create mode 100755 Ardent/UV/catdir/%AUV%AMCWE.MEMBER.FULL.RPT create mode 100755 Ardent/UV/catdir/%AUV%AMCWE.MFA.TO.INACTIVE create mode 100755 Ardent/UV/catdir/%AUV%AMCWE.MSD.BACKLOG create mode 100755 Ardent/UV/catdir/%AUV%AMCWE.NEW.SCOTT create mode 100755 Ardent/UV/catdir/%AUV%AMCWE.NEWNAME.RPT1 create mode 100755 Ardent/UV/catdir/%AUV%AMCWE.NEWNAME.RPT2 create mode 100755 Ardent/UV/catdir/%AUV%AMCWE.NEWNAME.RPT3 create mode 100755 Ardent/UV/catdir/%AUV%AMCWE.NEWNAME.RPT5 create mode 100755 Ardent/UV/catdir/%AUV%AMCWE.NEWNAME.RPT5.110497 create mode 100755 Ardent/UV/catdir/%AUV%AMCWE.NEWNAME.RPT5.111797 create mode 100755 Ardent/UV/catdir/%AUV%AMCWE.NEWNAME.RPT5.TEST create mode 100755 Ardent/UV/catdir/%AUV%AMCWE.ODS.CONVERSION.RPT create mode 100755 Ardent/UV/catdir/%AUV%AMCWE.OPER.BACKLOG.RPT1 create mode 100755 Ardent/UV/catdir/%AUV%AMCWE.OPER.BACKLOG.RPT1.111797 create mode 100755 Ardent/UV/catdir/%AUV%AMCWE.OPER.BACKLOG.RPT1.txt create mode 100755 Ardent/UV/catdir/%AUV%AMCWE.OPERATIONS.BACKLOG.RPT1 create mode 100755 Ardent/UV/catdir/%AUV%AMCWE.OUTSTANDING.POSTDATE.RPT create mode 100755 Ardent/UV/catdir/%AUV%AMCWE.PICKING.PRINT create mode 100755 Ardent/UV/catdir/%AUV%AMCWE.PICKING.SUMMARY create mode 100755 Ardent/UV/catdir/%AUV%AMCWE.PLEDGE.REPORT create mode 100755 Ardent/UV/catdir/%AUV%AMCWE.POSTDATE.RPT create mode 100755 Ardent/UV/catdir/%AUV%AMCWE.POSTDATED.SUMMARY.RPT create mode 100755 Ardent/UV/catdir/%AUV%AMCWE.POSTDATED.SUMMARY.RPT.111797 create mode 100755 Ardent/UV/catdir/%AUV%AMCWE.PRECLOSE.EDIT create mode 100755 Ardent/UV/catdir/%AUV%AMCWE.SEGMENT.BUILD create mode 100755 Ardent/UV/catdir/%AUV%AMCWE.SEGMENT.BUILD.DHB create mode 100755 Ardent/UV/catdir/%AUV%AMCWE.SEGMENT.BUILD.SAVE create mode 100755 Ardent/UV/catdir/%AUV%AMCWE.SEGMENT.DAILY create mode 100755 Ardent/UV/catdir/%AUV%AMCWE.SEGMENT.RPT1 create mode 100755 Ardent/UV/catdir/%AUV%AMCWE.SEGMENT.RPT1.OLD create mode 100755 Ardent/UV/catdir/%AUV%AMCWE.SEGMENT.RPT2 create mode 100755 Ardent/UV/catdir/%AUV%AMCWE.SEGMENT.RPT3 create mode 100755 Ardent/UV/catdir/%AUV%AMCWE.SEGMENT.RPT3.111797 create mode 100755 Ardent/UV/catdir/%AUV%AMCWE.SEGMENT.RPT5 create mode 100755 Ardent/UV/catdir/%AUV%AMCWE.SEGMENT.RPT5.111797 create mode 100755 Ardent/UV/catdir/%AUV%AMCWE.STEP.CHART create mode 100755 Ardent/UV/catdir/%AUV%AMCWE.TV.ACTIVITY.RPT create mode 100755 Ardent/UV/catdir/%AUV%AMCWE.TV.ACTIVITY.RPT2 create mode 100755 Ardent/UV/catdir/%AUV%AMCWE.TV.CALENDAR.RPT create mode 100755 Ardent/UV/catdir/%AUV%AMCWE.TV.FREQUENCY.RPT create mode 100755 Ardent/UV/catdir/%AUV%AMCWE.TV.PROGRAM.RPT create mode 100755 Ardent/UV/catdir/%AUV%AMCWE.TV.PROGRAMS.LIST create mode 100755 Ardent/UV/catdir/%AUV%AMCWE.TV.PROGRAMS.RPT create mode 100755 Ardent/UV/catdir/%AUV%AMCWE.TV.PROGRAMS.RPT2 create mode 100755 Ardent/UV/catdir/%AUV%AMCWE.TV.PROGRAMS.SCOTT create mode 100755 Ardent/UV/catdir/%AUV%AMCWE.TV.RESPONSE.RPT create mode 100755 Ardent/UV/catdir/%AUV%AMCWE.TVCAL.MAINT create mode 100755 Ardent/UV/catdir/%AUV%AMCWE.TVPGM.MAINT create mode 100755 Ardent/UV/catdir/%AUV%AMCWE.TVPGM.MAINT.111797 create mode 100755 Ardent/UV/catdir/%AUV%AMCWE.TVPGM.MAINT.SUB create mode 100755 Ardent/UV/catdir/%AUV%AMCWE.UNSHIPPED.RPT create mode 100755 Ardent/UV/catdir/%AUV%AMCWE.WORDPROC.BACKLOG.RPT create mode 100755 Ardent/UV/catdir/%AUV%AMDSCC create mode 100755 Ardent/UV/catdir/%AUV%AMDSCC.IMPORT create mode 100755 Ardent/UV/catdir/%AUV%AMEDIA.ACCOUNT.PAY create mode 100755 Ardent/UV/catdir/%AUV%AMEDIA.ADJUST.MASTER create mode 100755 Ardent/UV/catdir/%AUV%AMEDIA.BATCH.MASTER create mode 100755 Ardent/UV/catdir/%AUV%AMEDIA.CALL.JOURNAL create mode 100755 Ardent/UV/catdir/%AUV%AMEDIA.CODE.RPT1 create mode 100755 Ardent/UV/catdir/%AUV%AMEDIA.CONTRACT.MASTER create mode 100755 Ardent/UV/catdir/%AUV%AMEDIA.MARKET.MASTER create mode 100755 Ardent/UV/catdir/%AUV%AMEDIA.OUTPUT create mode 100755 Ardent/UV/catdir/%AUV%AMEDIA.PROGRAM.MASTER create mode 100755 Ardent/UV/catdir/%AUV%AMEDIA.RETURN.MASTER create mode 100755 Ardent/UV/catdir/%AUV%AMEDIA.RUSH.MASTER create mode 100755 Ardent/UV/catdir/%AUV%AMEDIA.SCHEDULE.MASTER create mode 100755 Ardent/UV/catdir/%AUV%AMEDIA.STATE.XREF create mode 100755 Ardent/UV/catdir/%AUV%AMEDIA.STATION.COST create mode 100755 Ardent/UV/catdir/%AUV%AMEDIA.STATION.MASTER create mode 100755 Ardent/UV/catdir/%AUV%AMEDIA.ZIP.MASTER create mode 100755 Ardent/UV/catdir/%AUV%AMEM.DB.TO.FLATFILE create mode 100755 Ardent/UV/catdir/%AUV%AMEM.DMAIL create mode 100755 Ardent/UV/catdir/%AUV%AMEM.DMAIL.2 create mode 100755 Ardent/UV/catdir/%AUV%AMEM.GIVING create mode 100755 Ardent/UV/catdir/%AUV%AMEM.GIVING.031998 create mode 100755 Ardent/UV/catdir/%AUV%AMEM.MAILPULL.OUTPUT create mode 100755 Ardent/UV/catdir/%AUV%AMEM.PRECLOSE.EDIT create mode 100755 Ardent/UV/catdir/%AUV%AMEM.RESP.BY.CUSTOM.SEGMENT create mode 100755 Ardent/UV/catdir/%AUV%AMEMBER create mode 100755 Ardent/UV/catdir/%AUV%AMEMBER.DISP create mode 100755 Ardent/UV/catdir/%AUV%AMEMBER.DISP.SCRN create mode 100755 Ardent/UV/catdir/%AUV%AMEMBER.ENTRY create mode 100755 Ardent/UV/catdir/%AUV%AMEMBER.PAID create mode 100755 Ardent/UV/catdir/%AUV%AMEMBER.VIEW create mode 100755 Ardent/UV/catdir/%AUV%AMFA create mode 100755 Ardent/UV/catdir/%AUV%AMFA2 create mode 100755 Ardent/UV/catdir/%AUV%AMICAHTEK.800.REPORT create mode 100755 Ardent/UV/catdir/%AUV%AMIKE.TST2 create mode 100755 Ardent/UV/catdir/%AUV%AMIKETEST create mode 100755 Ardent/UV/catdir/%AUV%AMISC.FUNCTIONS create mode 100755 Ardent/UV/catdir/%AUV%AMISSING.INV.TYPE.CODES create mode 100755 Ardent/UV/catdir/%AUV%AMM.INV.SALES.RPT1 create mode 100755 Ardent/UV/catdir/%AUV%AMM.INV.SALES.RPT2 create mode 100755 Ardent/UV/catdir/%AUV%AMM.INV.SALES.RPT3 create mode 100755 Ardent/UV/catdir/%AUV%AMM.INV.SALES.RPT4 create mode 100755 Ardent/UV/catdir/%AUV%AMM.INV.SALES.RPT5 create mode 100755 Ardent/UV/catdir/%AUV%AMM.INV.SALES.RPT6 create mode 100755 Ardent/UV/catdir/%AUV%AMM.REG.RPT.SUB create mode 100755 Ardent/UV/catdir/%AUV%AMMEA.BIRTHDAY.RPT create mode 100755 Ardent/UV/catdir/%AUV%AMSD.ATTND create mode 100755 Ardent/UV/catdir/%AUV%AMSD.AUDIT.BA create mode 100755 Ardent/UV/catdir/%AUV%AMSD.AUDIT.BATCH create mode 100755 Ardent/UV/catdir/%AUV%AMSD.BAT.DISPLAY create mode 100755 Ardent/UV/catdir/%AUV%AMSD.BAT020 create mode 100755 Ardent/UV/catdir/%AUV%AMSD.BAT020.051399 create mode 100755 Ardent/UV/catdir/%AUV%AMSD.BAT020.NEW create mode 100755 Ardent/UV/catdir/%AUV%AMSD.BATADD create mode 100755 Ardent/UV/catdir/%AUV%AMSD.BATADD.051399 create mode 100755 Ardent/UV/catdir/%AUV%AMSD.BATADD.MAIL create mode 100755 Ardent/UV/catdir/%AUV%AMSD.BATADD.NEW create mode 100755 Ardent/UV/catdir/%AUV%AMSD.BATCH.BILLING create mode 100755 Ardent/UV/catdir/%AUV%AMSD.BATCHES.INVOICED create mode 100755 Ardent/UV/catdir/%AUV%AMSD.BATCHES.NOT.INVOICED create mode 100755 Ardent/UV/catdir/%AUV%AMSD.BILLING.COSTS create mode 100755 Ardent/UV/catdir/%AUV%AMSD.COMMA.RANGE create mode 100755 Ardent/UV/catdir/%AUV%AMSD.COMMA.SPLIT create mode 100755 Ardent/UV/catdir/%AUV%AMSD.COUNT.LPF create mode 100755 Ardent/UV/catdir/%AUV%AMSD.CURRENCY.HELP create mode 100755 Ardent/UV/catdir/%AUV%AMSD.CYCLE create mode 100755 Ardent/UV/catdir/%AUV%AMSD.CYCLE.032598 create mode 100755 Ardent/UV/catdir/%AUV%AMSD.CYCLE.TABLE.MAINT create mode 100755 Ardent/UV/catdir/%AUV%AMSD.DAILY.DATE create mode 100755 Ardent/UV/catdir/%AUV%AMSD.DBM.END create mode 100755 Ardent/UV/catdir/%AUV%AMSD.DBM.RED create mode 100755 Ardent/UV/catdir/%AUV%AMSD.DBM2.RED create mode 100755 Ardent/UV/catdir/%AUV%AMSD.DEP.MAINT create mode 100755 Ardent/UV/catdir/%AUV%AMSD.DEP.MAINT.110697 create mode 100755 Ardent/UV/catdir/%AUV%AMSD.DEP.REPORT create mode 100755 Ardent/UV/catdir/%AUV%AMSD.DISP.LBL create mode 100755 Ardent/UV/catdir/%AUV%AMSD.DISP.LBL2 create mode 100755 Ardent/UV/catdir/%AUV%AMSD.DISP.LBL3 create mode 100755 Ardent/UV/catdir/%AUV%AMSD.DISP.TRANS create mode 100755 Ardent/UV/catdir/%AUV%AMSD.DISP.TRANS.ADD.NEW create mode 100755 Ardent/UV/catdir/%AUV%AMSD.DISP.TRANS.BUILD create mode 100755 Ardent/UV/catdir/%AUV%AMSD.DONOR.SELECT create mode 100755 Ardent/UV/catdir/%AUV%AMSD.DONOR.SELECT.7.31.97 create mode 100755 Ardent/UV/catdir/%AUV%AMSD.EFT.FIX.SUMMARY create mode 100755 Ardent/UV/catdir/%AUV%AMSD.EFT.TAPE create mode 100755 Ardent/UV/catdir/%AUV%AMSD.EM001 create mode 100755 Ardent/UV/catdir/%AUV%AMSD.EVENT.ONLINE.RPT create mode 100755 Ardent/UV/catdir/%AUV%AMSD.FAMILY create mode 100755 Ardent/UV/catdir/%AUV%AMSD.FAST.TRANS create mode 100755 Ardent/UV/catdir/%AUV%AMSD.FIX.ADI create mode 100755 Ardent/UV/catdir/%AUV%AMSD.FOREIGN.DISPLAY create mode 100755 Ardent/UV/catdir/%AUV%AMSD.FULFILLED create mode 100755 Ardent/UV/catdir/%AUV%AMSD.FUND.MAINT create mode 100755 Ardent/UV/catdir/%AUV%AMSD.HDG create mode 100755 Ardent/UV/catdir/%AUV%AMSD.HDG2 create mode 100755 Ardent/UV/catdir/%AUV%AMSD.HDG3 create mode 100755 Ardent/UV/catdir/%AUV%AMSD.HDG4 create mode 100755 Ardent/UV/catdir/%AUV%AMSD.HOURS.RPT create mode 100755 Ardent/UV/catdir/%AUV%AMSD.INDEX create mode 100755 Ardent/UV/catdir/%AUV%AMSD.INQ000 create mode 100755 Ardent/UV/catdir/%AUV%AMSD.INQ000.PURGE create mode 100755 Ardent/UV/catdir/%AUV%AMSD.INQ000.PURGE.2.25.97 create mode 100755 Ardent/UV/catdir/%AUV%AMSD.INQ010 create mode 100755 Ardent/UV/catdir/%AUV%AMSD.INQ050 create mode 100755 Ardent/UV/catdir/%AUV%AMSD.INQ050.081897 create mode 100755 Ardent/UV/catdir/%AUV%AMSD.INQ050.091797 create mode 100755 Ardent/UV/catdir/%AUV%AMSD.INQ200 create mode 100755 Ardent/UV/catdir/%AUV%AMSD.INV.CONTROL create mode 100755 Ardent/UV/catdir/%AUV%AMSD.IT.FAMILY create mode 100755 Ardent/UV/catdir/%AUV%AMSD.IT.MATCHCODE create mode 100755 Ardent/UV/catdir/%AUV%AMSD.JOURNAL create mode 100755 Ardent/UV/catdir/%AUV%AMSD.LETTERS create mode 100755 Ardent/UV/catdir/%AUV%AMSD.LETTERS.HOLD create mode 100755 Ardent/UV/catdir/%AUV%AMSD.LIST.LISTS create mode 100755 Ardent/UV/catdir/%AUV%AMSD.LOOKUP create mode 100755 Ardent/UV/catdir/%AUV%AMSD.MAKE.LBL create mode 100755 Ardent/UV/catdir/%AUV%AMSD.MARKET.RESEARCH create mode 100755 Ardent/UV/catdir/%AUV%AMSD.MARKET.USA.UPDATE create mode 100755 Ardent/UV/catdir/%AUV%AMSD.MEDIA.Y2K create mode 100755 Ardent/UV/catdir/%AUV%AMSD.OPER.STATS create mode 100755 Ardent/UV/catdir/%AUV%AMSD.PARTNER.GIVING create mode 100755 Ardent/UV/catdir/%AUV%AMSD.PEFT.TAPE create mode 100755 Ardent/UV/catdir/%AUV%AMSD.PICKING.RPT create mode 100755 Ardent/UV/catdir/%AUV%AMSD.PICKING.RPT.061099 create mode 100755 Ardent/UV/catdir/%AUV%AMSD.PICKING.RPT.061199 create mode 100755 Ardent/UV/catdir/%AUV%AMSD.PICKING.RPT.061499 create mode 100755 Ardent/UV/catdir/%AUV%AMSD.PICKING.RPT.IFL create mode 100755 Ardent/UV/catdir/%AUV%AMSD.PICKING.RPT.WADE create mode 100755 Ardent/UV/catdir/%AUV%AMSD.PICKNIG.RPT create mode 100755 Ardent/UV/catdir/%AUV%AMSD.PRINT.ACCOUNT create mode 100755 Ardent/UV/catdir/%AUV%AMSD.PRINT.ACCOUNT.071498 create mode 100755 Ardent/UV/catdir/%AUV%AMSD.PRINT.ACCOUNT.WADE create mode 100755 Ardent/UV/catdir/%AUV%AMSD.PROJ2 create mode 100755 Ardent/UV/catdir/%AUV%AMSD.PURGE.LPF create mode 100755 Ardent/UV/catdir/%AUV%AMSD.PURGE.ORD.LBL.SUM create mode 100755 Ardent/UV/catdir/%AUV%AMSD.PURGE.PM.LABELS.HOLD create mode 100755 Ardent/UV/catdir/%AUV%AMSD.RCF.MAINT create mode 100755 Ardent/UV/catdir/%AUV%AMSD.RCF.MAINT.022098 create mode 100755 Ardent/UV/catdir/%AUV%AMSD.RCF.MAINT.022198 create mode 100755 Ardent/UV/catdir/%AUV%AMSD.RCF.MAINT.041999 create mode 100755 Ardent/UV/catdir/%AUV%AMSD.RCF.MAINT.042399 create mode 100755 Ardent/UV/catdir/%AUV%AMSD.RCF.MAINT.WADE create mode 100755 Ardent/UV/catdir/%AUV%AMSD.RCF.MAINT.WADE.042199 create mode 100755 Ardent/UV/catdir/%AUV%AMSD.RCF.MAINT.WADE.042299 create mode 100755 Ardent/UV/catdir/%AUV%AMSD.RCF.WADE create mode 100755 Ardent/UV/catdir/%AUV%AMSD.READ.ZIP4.RESULT create mode 100755 Ardent/UV/catdir/%AUV%AMSD.READ.ZIP4.TAPE create mode 100755 Ardent/UV/catdir/%AUV%AMSD.READER.MONTHLY create mode 100755 Ardent/UV/catdir/%AUV%AMSD.READER.WEEKLY create mode 100755 Ardent/UV/catdir/%AUV%AMSD.REG.TRANS create mode 100755 Ardent/UV/catdir/%AUV%AMSD.REG.TRANS.051499 create mode 100755 Ardent/UV/catdir/%AUV%AMSD.REG.TRANS.060699 create mode 100755 Ardent/UV/catdir/%AUV%AMSD.REG.TRANS.060899 create mode 100755 Ardent/UV/catdir/%AUV%AMSD.REG.TRANS.060999 create mode 100755 Ardent/UV/catdir/%AUV%AMSD.REG.TRANS.061099 create mode 100755 Ardent/UV/catdir/%AUV%AMSD.REPRINT create mode 100755 Ardent/UV/catdir/%AUV%AMSD.SEGMENT.DISPLAY create mode 100755 Ardent/UV/catdir/%AUV%AMSD.SENT.DISP create mode 100755 Ardent/UV/catdir/%AUV%AMSD.SENT.REPORT.R8 create mode 100755 Ardent/UV/catdir/%AUV%AMSD.SENTENCE create mode 100755 Ardent/UV/catdir/%AUV%AMSD.STAT.REASON create mode 100755 Ardent/UV/catdir/%AUV%AMSD.STATE.SALES create mode 100755 Ardent/UV/catdir/%AUV%AMSD.STATION.REV.RPT create mode 100755 Ardent/UV/catdir/%AUV%AMSD.SUB001 create mode 100755 Ardent/UV/catdir/%AUV%AMSD.SUB002 create mode 100755 Ardent/UV/catdir/%AUV%AMSD.SUM.YEAR create mode 100755 Ardent/UV/catdir/%AUV%AMSD.SUM.YEAR.BACKUP create mode 100755 Ardent/UV/catdir/%AUV%AMSD.SUM.YEAR.WADE create mode 100755 Ardent/UV/catdir/%AUV%AMSD.SUM.YEAR.Y2K create mode 100755 Ardent/UV/catdir/%AUV%AMSD.TEL30.FULL create mode 100755 Ardent/UV/catdir/%AUV%AMSD.TEL31.FULL create mode 100755 Ardent/UV/catdir/%AUV%AMSD.TEL32.FULL create mode 100755 Ardent/UV/catdir/%AUV%AMSD.TRANS.HELP create mode 100755 Ardent/UV/catdir/%AUV%AMSD.TRANS.PRODUCT.DISPLAY create mode 100755 Ardent/UV/catdir/%AUV%AMSD.YEAR.DISPLAY create mode 100755 Ardent/UV/catdir/%AUV%AMSD.ZIP.UPDATE create mode 100755 Ardent/UV/catdir/%AUV%AMSD.ZIP.UPDATE.3.3.97 create mode 100755 Ardent/UV/catdir/%AUV%AMTAW.CLUB.RPT create mode 100755 Ardent/UV/catdir/%AUV%AMTC create mode 100755 Ardent/UV/catdir/%AUV%AMTC97.REPORT2 create mode 100755 Ardent/UV/catdir/%AUV%AMTEK create mode 100755 Ardent/UV/catdir/%AUV%AMTEK.800.COPY.MEM create mode 100755 Ardent/UV/catdir/%AUV%AMTEK.800.MERGE.DISPLAY create mode 100755 Ardent/UV/catdir/%AUV%AMTEK.800.MERGE.DISPLAY.022398 create mode 100755 Ardent/UV/catdir/%AUV%AMTEK.800.MERGE.DISPLAY.022598 create mode 100755 Ardent/UV/catdir/%AUV%AMTEK.800.NOTES create mode 100755 Ardent/UV/catdir/%AUV%AMTEK.800.PRAYER create mode 100755 Ardent/UV/catdir/%AUV%AMTEK.800.PRAYER.REPORT create mode 100755 Ardent/UV/catdir/%AUV%AMTEK.800.PRODUCTS.HELP create mode 100755 Ardent/UV/catdir/%AUV%AMTEK.800.STATIONS create mode 100755 Ardent/UV/catdir/%AUV%AMTEK.800.WINDOW create mode 100755 Ardent/UV/catdir/%AUV%AMTEK.AUTO.TEST create mode 100755 Ardent/UV/catdir/%AUV%AMTEK.AUTOCALC.1 create mode 100755 Ardent/UV/catdir/%AUV%AMTEK.AUTOCALC.116 create mode 100755 Ardent/UV/catdir/%AUV%AMTEK.AUTOCALC.117 create mode 100755 Ardent/UV/catdir/%AUV%AMTEK.AUTOCALC.119 create mode 100755 Ardent/UV/catdir/%AUV%AMTEK.AUTOCALC.121 create mode 100755 Ardent/UV/catdir/%AUV%AMTEK.AUTOCALC.122 create mode 100755 Ardent/UV/catdir/%AUV%AMTEK.AUTOCALC.126 create mode 100755 Ardent/UV/catdir/%AUV%AMTEK.AUTOCALC.131 create mode 100755 Ardent/UV/catdir/%AUV%AMTEK.AUTOCALC.132 create mode 100755 Ardent/UV/catdir/%AUV%AMTEK.AUTOCALC.134 create mode 100755 Ardent/UV/catdir/%AUV%AMTEK.AUTOCALC.149 create mode 100755 Ardent/UV/catdir/%AUV%AMTEK.AUTOCALC.149.052599 create mode 100755 Ardent/UV/catdir/%AUV%AMTEK.AUTOCALC.150 create mode 100755 Ardent/UV/catdir/%AUV%AMTEK.AUTOCALC.152 create mode 100755 Ardent/UV/catdir/%AUV%AMTEK.AUTOCALC.154 create mode 100755 Ardent/UV/catdir/%AUV%AMTEK.AUTOCALC.158 create mode 100755 Ardent/UV/catdir/%AUV%AMTEK.AUTOCALC.16 create mode 100755 Ardent/UV/catdir/%AUV%AMTEK.AUTOCALC.162 create mode 100755 Ardent/UV/catdir/%AUV%AMTEK.AUTOCALC.164 create mode 100755 Ardent/UV/catdir/%AUV%AMTEK.AUTOCALC.17 create mode 100755 Ardent/UV/catdir/%AUV%AMTEK.AUTOCALC.170 create mode 100755 Ardent/UV/catdir/%AUV%AMTEK.AUTOCALC.170.6.19.97 create mode 100755 Ardent/UV/catdir/%AUV%AMTEK.AUTOCALC.175 create mode 100755 Ardent/UV/catdir/%AUV%AMTEK.AUTOCALC.180 create mode 100755 Ardent/UV/catdir/%AUV%AMTEK.AUTOCALC.181 create mode 100755 Ardent/UV/catdir/%AUV%AMTEK.AUTOCALC.182 create mode 100755 Ardent/UV/catdir/%AUV%AMTEK.AUTOCALC.185 create mode 100755 Ardent/UV/catdir/%AUV%AMTEK.AUTOCALC.195 create mode 100755 Ardent/UV/catdir/%AUV%AMTEK.AUTOCALC.196 create mode 100755 Ardent/UV/catdir/%AUV%AMTEK.AUTOCALC.2 create mode 100755 Ardent/UV/catdir/%AUV%AMTEK.AUTOCALC.201 create mode 100755 Ardent/UV/catdir/%AUV%AMTEK.AUTOCALC.205 create mode 100755 Ardent/UV/catdir/%AUV%AMTEK.AUTOCALC.206 create mode 100755 Ardent/UV/catdir/%AUV%AMTEK.AUTOCALC.207 create mode 100755 Ardent/UV/catdir/%AUV%AMTEK.AUTOCALC.211 create mode 100755 Ardent/UV/catdir/%AUV%AMTEK.AUTOCALC.212 create mode 100755 Ardent/UV/catdir/%AUV%AMTEK.AUTOCALC.212.040398 create mode 100755 Ardent/UV/catdir/%AUV%AMTEK.AUTOCALC.212.BAK create mode 100755 Ardent/UV/catdir/%AUV%AMTEK.AUTOCALC.213 create mode 100755 Ardent/UV/catdir/%AUV%AMTEK.AUTOCALC.213.TEST create mode 100755 Ardent/UV/catdir/%AUV%AMTEK.AUTOCALC.216 create mode 100755 Ardent/UV/catdir/%AUV%AMTEK.AUTOCALC.224 create mode 100755 Ardent/UV/catdir/%AUV%AMTEK.AUTOCALC.231 create mode 100755 Ardent/UV/catdir/%AUV%AMTEK.AUTOCALC.232 create mode 100755 Ardent/UV/catdir/%AUV%AMTEK.AUTOCALC.234 create mode 100755 Ardent/UV/catdir/%AUV%AMTEK.AUTOCALC.237 create mode 100755 Ardent/UV/catdir/%AUV%AMTEK.AUTOCALC.237.021098 create mode 100755 Ardent/UV/catdir/%AUV%AMTEK.AUTOCALC.237.WADE create mode 100755 Ardent/UV/catdir/%AUV%AMTEK.AUTOCALC.238 create mode 100755 Ardent/UV/catdir/%AUV%AMTEK.AUTOCALC.244 create mode 100755 Ardent/UV/catdir/%AUV%AMTEK.AUTOCALC.253 create mode 100755 Ardent/UV/catdir/%AUV%AMTEK.AUTOCALC.254 create mode 100755 Ardent/UV/catdir/%AUV%AMTEK.AUTOCALC.258 create mode 100755 Ardent/UV/catdir/%AUV%AMTEK.AUTOCALC.259 create mode 100755 Ardent/UV/catdir/%AUV%AMTEK.AUTOCALC.265 create mode 100755 Ardent/UV/catdir/%AUV%AMTEK.AUTOCALC.269 create mode 100755 Ardent/UV/catdir/%AUV%AMTEK.AUTOCALC.273 create mode 100755 Ardent/UV/catdir/%AUV%AMTEK.AUTOCALC.276 create mode 100755 Ardent/UV/catdir/%AUV%AMTEK.AUTOCALC.286 create mode 100755 Ardent/UV/catdir/%AUV%AMTEK.AUTOCALC.293 create mode 100755 Ardent/UV/catdir/%AUV%AMTEK.AUTOCALC.294 create mode 100755 Ardent/UV/catdir/%AUV%AMTEK.AUTOCALC.294.TEMP create mode 100755 Ardent/UV/catdir/%AUV%AMTEK.AUTOCALC.295 create mode 100755 Ardent/UV/catdir/%AUV%AMTEK.AUTOCALC.296 create mode 100755 Ardent/UV/catdir/%AUV%AMTEK.AUTOCALC.298 create mode 100755 Ardent/UV/catdir/%AUV%AMTEK.AUTOCALC.3 create mode 100755 Ardent/UV/catdir/%AUV%AMTEK.AUTOCALC.300 create mode 100755 Ardent/UV/catdir/%AUV%AMTEK.AUTOCALC.301 create mode 100755 Ardent/UV/catdir/%AUV%AMTEK.AUTOCALC.301.TEST create mode 100755 Ardent/UV/catdir/%AUV%AMTEK.AUTOCALC.303 create mode 100755 Ardent/UV/catdir/%AUV%AMTEK.AUTOCALC.309 create mode 100755 Ardent/UV/catdir/%AUV%AMTEK.AUTOCALC.310 create mode 100755 Ardent/UV/catdir/%AUV%AMTEK.AUTOCALC.312 create mode 100755 Ardent/UV/catdir/%AUV%AMTEK.AUTOCALC.315 create mode 100755 Ardent/UV/catdir/%AUV%AMTEK.AUTOCALC.316 create mode 100755 Ardent/UV/catdir/%AUV%AMTEK.AUTOCALC.33 create mode 100755 Ardent/UV/catdir/%AUV%AMTEK.AUTOCALC.333 create mode 100755 Ardent/UV/catdir/%AUV%AMTEK.AUTOCALC.333.TEST create mode 100755 Ardent/UV/catdir/%AUV%AMTEK.AUTOCALC.334 create mode 100755 Ardent/UV/catdir/%AUV%AMTEK.AUTOCALC.335 create mode 100755 Ardent/UV/catdir/%AUV%AMTEK.AUTOCALC.337 create mode 100755 Ardent/UV/catdir/%AUV%AMTEK.AUTOCALC.349 create mode 100755 Ardent/UV/catdir/%AUV%AMTEK.AUTOCALC.357 create mode 100755 Ardent/UV/catdir/%AUV%AMTEK.AUTOCALC.4 create mode 100755 Ardent/UV/catdir/%AUV%AMTEK.AUTOCALC.5 create mode 100755 Ardent/UV/catdir/%AUV%AMTEK.AUTOCALC.55 create mode 100755 Ardent/UV/catdir/%AUV%AMTEK.AUTOCALC.6 create mode 100755 Ardent/UV/catdir/%AUV%AMTEK.AUTOCALC.65 create mode 100755 Ardent/UV/catdir/%AUV%AMTEK.AUTOCALC.67 create mode 100755 Ardent/UV/catdir/%AUV%AMTEK.AUTOCALC.68 create mode 100755 Ardent/UV/catdir/%AUV%AMTEK.AUTOCALC.69 create mode 100755 Ardent/UV/catdir/%AUV%AMTEK.AUTOCALC.7 create mode 100755 Ardent/UV/catdir/%AUV%AMTEK.AUTOCALC.70 create mode 100755 Ardent/UV/catdir/%AUV%AMTEK.AUTOCALC.71 create mode 100755 Ardent/UV/catdir/%AUV%AMTEK.AUTOCALC.71.TEST create mode 100755 Ardent/UV/catdir/%AUV%AMTEK.AUTOCALC.80 create mode 100755 Ardent/UV/catdir/%AUV%AMTEK.AUTOCALC.9 create mode 100755 Ardent/UV/catdir/%AUV%AMTEK.AUTOCALC.95 create mode 100755 Ardent/UV/catdir/%AUV%AMTEK.AUTOCALC.99 create mode 100755 Ardent/UV/catdir/%AUV%AMTEK.AUTOCALC.TEST.149 create mode 100755 Ardent/UV/catdir/%AUV%AMTEK.AUTOCALC.TEST.301 create mode 100755 Ardent/UV/catdir/%AUV%AMTEK.AUTOCALC.TEST.316 create mode 100755 Ardent/UV/catdir/%AUV%AMTEK.BATCH.BILLING create mode 100755 Ardent/UV/catdir/%AUV%AMTEK.CC.QUICK.STATUS create mode 100755 Ardent/UV/catdir/%AUV%AMTEK.CREDIT.BY.DATE create mode 100755 Ardent/UV/catdir/%AUV%AMTEK.CS.INFO2 create mode 100755 Ardent/UV/catdir/%AUV%AMTEK.CS.ROUTINES create mode 100755 Ardent/UV/catdir/%AUV%AMTEK.DBM.RED.SCRIPT create mode 100755 Ardent/UV/catdir/%AUV%AMTEK.DONOR.BY.ITEM create mode 100755 Ardent/UV/catdir/%AUV%AMTEK.DONOR.BY.ITEM.051799 create mode 100755 Ardent/UV/catdir/%AUV%AMTEK.DONOR.BY.ITEM.051899 create mode 100755 Ardent/UV/catdir/%AUV%AMTEK.DONOR.BY.ITEM.CC create mode 100755 Ardent/UV/catdir/%AUV%AMTEK.ELT.REPORT1 create mode 100755 Ardent/UV/catdir/%AUV%AMTEK.ELT.REPORT1.CT create mode 100755 Ardent/UV/catdir/%AUV%AMTEK.ELT.REPORT1.NEW create mode 100755 Ardent/UV/catdir/%AUV%AMTEK.ELT.REPORT1.NEWER create mode 100755 Ardent/UV/catdir/%AUV%AMTEK.ELT.REPORT1.PHANTOM create mode 100755 Ardent/UV/catdir/%AUV%AMTEK.ELT.REPORT2 create mode 100755 Ardent/UV/catdir/%AUV%AMTEK.ELT.REPORT2.BHM.INT create mode 100755 Ardent/UV/catdir/%AUV%AMTEK.ELT.REPORT2.CT create mode 100755 Ardent/UV/catdir/%AUV%AMTEK.ELT.REPORT2.DM create mode 100755 Ardent/UV/catdir/%AUV%AMTEK.ELT.REPORT2.DM.NEW create mode 100755 Ardent/UV/catdir/%AUV%AMTEK.ELT.REPORT2.NEW create mode 100755 Ardent/UV/catdir/%AUV%AMTEK.ELT.REPORT2.OLD create mode 100755 Ardent/UV/catdir/%AUV%AMTEK.ELT.REPORT2.OM create mode 100755 Ardent/UV/catdir/%AUV%AMTEK.ELT.REPORT2.PC create mode 100755 Ardent/UV/catdir/%AUV%AMTEK.ELT.REPORT2.RM create mode 100755 Ardent/UV/catdir/%AUV%AMTEK.ELT.REPORT2.SHORT create mode 100755 Ardent/UV/catdir/%AUV%AMTEK.ELT.REPORT2.TC create mode 100755 Ardent/UV/catdir/%AUV%AMTEK.ELT.REPORT2.WT create mode 100755 Ardent/UV/catdir/%AUV%AMTEK.FAX create mode 100755 Ardent/UV/catdir/%AUV%AMTEK.IND.LOGIC create mode 100755 Ardent/UV/catdir/%AUV%AMTEK.INSP.LOGIC create mode 100755 Ardent/UV/catdir/%AUV%AMTEK.INTERNET.COPY.TDJ create mode 100755 Ardent/UV/catdir/%AUV%AMTEK.INV.BY.PAYTYPE create mode 100755 Ardent/UV/catdir/%AUV%AMTEK.INV.BY.PAYTYPE.OLD create mode 100755 Ardent/UV/catdir/%AUV%AMTEK.LA.LOGIC create mode 100755 Ardent/UV/catdir/%AUV%AMTEK.NEB.LOGIC create mode 100755 Ardent/UV/catdir/%AUV%AMTEK.PICKING.PRINT create mode 100755 Ardent/UV/catdir/%AUV%AMTEK.PICKING.PRINT.051098 create mode 100755 Ardent/UV/catdir/%AUV%AMTEK.PREEDIT.REPORT create mode 100755 Ardent/UV/catdir/%AUV%AMTEK.RETURN.CREDIT.RPT create mode 100755 Ardent/UV/catdir/%AUV%AMTEK.RETURNS.FOR create mode 100755 Ardent/UV/catdir/%AUV%AMTEK.SCRIPTING create mode 100755 Ardent/UV/catdir/%AUV%AMTEK.SCRIPTING.090597 create mode 100755 Ardent/UV/catdir/%AUV%AMTEK.SCRIPTING.091598 create mode 100755 Ardent/UV/catdir/%AUV%AMTEK.SCRIPTING.111497 create mode 100755 Ardent/UV/catdir/%AUV%AMTEK.SCRIPTING.122397 create mode 100755 Ardent/UV/catdir/%AUV%AMTEK.SECURITY create mode 100755 Ardent/UV/catdir/%AUV%AMTEK.SHIPPING.AUTOCALC create mode 100755 Ardent/UV/catdir/%AUV%AMTEK.TD800.COPY.ICM create mode 100755 Ardent/UV/catdir/%AUV%AMTEK.TD888.COPY.ICM create mode 100755 Ardent/UV/catdir/%AUV%AMTEK.TELECARD.BATCH create mode 100755 Ardent/UV/catdir/%AUV%AMTEK.TELECARD.LOGIC create mode 100755 Ardent/UV/catdir/%AUV%AMTEK.TELECARD.ORDERS create mode 100755 Ardent/UV/catdir/%AUV%AMTEK.TELECARD.ORDERS.BATCH create mode 100755 Ardent/UV/catdir/%AUV%AMTEK.UPDATE.CALLS create mode 100755 Ardent/UV/catdir/%AUV%AMTEK.VPG.LOGIC create mode 100755 Ardent/UV/catdir/%AUV%AMTEK.WOC.LOGIC create mode 100755 Ardent/UV/catdir/%AUV%AMTEK.WOF.LOGIC create mode 100755 Ardent/UV/catdir/%AUV%AMTEK.Y2K.UTILITY create mode 100755 Ardent/UV/catdir/%AUV%AMTEK.Y2K.UTILITY1 create mode 100755 Ardent/UV/catdir/%AUV%AMULTI.INV.CHANGE create mode 100755 Ardent/UV/catdir/%AUV%ANAME.EXPLODER create mode 100755 Ardent/UV/catdir/%AUV%ANAP.RATIO.RPT create mode 100755 Ardent/UV/catdir/%AUV%ANAP.RATIO.RPT.013098 create mode 100755 Ardent/UV/catdir/%AUV%ANAP.RATIO.RPT2 create mode 100755 Ardent/UV/catdir/%AUV%ANATCOM.BA.ENTRY create mode 100755 Ardent/UV/catdir/%AUV%ANATCOM.DOC.ENTRY create mode 100755 Ardent/UV/catdir/%AUV%ANATCOM.QUICK create mode 100755 Ardent/UV/catdir/%AUV%ANCOA create mode 100755 Ardent/UV/catdir/%AUV%ANCOA.FRP create mode 100755 Ardent/UV/catdir/%AUV%ANCOA.ICM create mode 100755 Ardent/UV/catdir/%AUV%ANCOA.II create mode 100755 Ardent/UV/catdir/%AUV%ANCOA.NIXIE.UPDATE create mode 100755 Ardent/UV/catdir/%AUV%ANCOA.PULL create mode 100755 Ardent/UV/catdir/%AUV%ANCOA.PULL.FRP create mode 100755 Ardent/UV/catdir/%AUV%ANCOA.PULL.HUNTER create mode 100755 Ardent/UV/catdir/%AUV%ANCOA.PULL.ICM create mode 100755 Ardent/UV/catdir/%AUV%ANCOA.PULL.II create mode 100755 Ardent/UV/catdir/%AUV%ANCOA.PULL.RMI create mode 100755 Ardent/UV/catdir/%AUV%ANCOA.PULL.TDJ create mode 100755 Ardent/UV/catdir/%AUV%ANCOA.RMI create mode 100755 Ardent/UV/catdir/%AUV%ANCOA.TDJ create mode 100755 Ardent/UV/catdir/%AUV%ANEW.EAGLE.RPT create mode 100755 Ardent/UV/catdir/%AUV%ANEW.PRINT.ACCOUNT create mode 100755 Ardent/UV/catdir/%AUV%ANON.NUM.BUILD create mode 100755 Ardent/UV/catdir/%AUV%ANT.DO02 create mode 100755 Ardent/UV/catdir/%AUV%ANT.DO02.042399 create mode 100755 Ardent/UV/catdir/%AUV%ANT.DO02.043099 create mode 100755 Ardent/UV/catdir/%AUV%ANT.DO02.060199 create mode 100755 Ardent/UV/catdir/%AUV%ANT.DO02.060799 create mode 100755 Ardent/UV/catdir/%AUV%ANT.DO02.062399 create mode 100755 Ardent/UV/catdir/%AUV%ANT.DO02.072397 create mode 100755 Ardent/UV/catdir/%AUV%ANT.DO02.3.10.97 create mode 100755 Ardent/UV/catdir/%AUV%ANT.DO02.XFER create mode 100755 Ardent/UV/catdir/%AUV%ANUM.TEST create mode 100755 Ardent/UV/catdir/%AUV%AOE create mode 100755 Ardent/UV/catdir/%AUV%AOP.PMO.FLAT create mode 100755 Ardent/UV/catdir/%AUV%AOPEN.DOS.CAPTURE.FILE create mode 100755 Ardent/UV/catdir/%AUV%AOPER.BACKLG.RPT create mode 100755 Ardent/UV/catdir/%AUV%AOPI.BATCH.ORDERS create mode 100755 Ardent/UV/catdir/%AUV%AOPI.BATCH.ORDERS.DOWNLOAD create mode 100755 Ardent/UV/catdir/%AUV%AOPI.BATCH.ORDERS2 create mode 100755 Ardent/UV/catdir/%AUV%AORDER.CHECK create mode 100755 Ardent/UV/catdir/%AUV%AORDER.DATE.FIX create mode 100755 Ardent/UV/catdir/%AUV%AORDER.DETAIL.RPT create mode 100755 Ardent/UV/catdir/%AUV%AORDER.DETAIL.RPT.BUILD create mode 100755 Ardent/UV/catdir/%AUV%AORDER.DOLLAR.VALUE create mode 100755 Ardent/UV/catdir/%AUV%AORDER.REPORT create mode 100755 Ardent/UV/catdir/%AUV%AORDER.REPORT2 create mode 100755 Ardent/UV/catdir/%AUV%AOTIS.PICKING.DETAIL.RPT create mode 100755 Ardent/UV/catdir/%AUV%AOTIS.PICKING.RPT create mode 100755 Ardent/UV/catdir/%AUV%AOTIS.PRINTER.ASSIGNMENT create mode 100755 Ardent/UV/catdir/%AUV%AOUTPUT create mode 100755 Ardent/UV/catdir/%AUV%APACK.CODE.MAINT create mode 100755 Ardent/UV/catdir/%AUV%APAINT.FRAME2 create mode 100755 Ardent/UV/catdir/%AUV%APARSE.NUMBER.LIST create mode 100755 Ardent/UV/catdir/%AUV%APARSE.WILDCARD.STRING create mode 100755 Ardent/UV/catdir/%AUV%APATHS create mode 100755 Ardent/UV/catdir/%AUV%APBOWES create mode 100755 Ardent/UV/catdir/%AUV%APBOWES.FLATFILE.WRITE create mode 100755 Ardent/UV/catdir/%AUV%APC.FORM create mode 100755 Ardent/UV/catdir/%AUV%APHONE.PM create mode 100755 Ardent/UV/catdir/%AUV%APL.REPORT create mode 100755 Ardent/UV/catdir/%AUV%APLEDGE.AUDIT create mode 100755 Ardent/UV/catdir/%AUV%APLEDGE.INFO.LAYOUT create mode 100755 Ardent/UV/catdir/%AUV%APLEDGE.PAYMENT.REPORT create mode 100755 Ardent/UV/catdir/%AUV%APLG.BY.MKT.BY.PLG create mode 100755 Ardent/UV/catdir/%AUV%APLIST create mode 100755 Ardent/UV/catdir/%AUV%APLIST.042199 create mode 100755 Ardent/UV/catdir/%AUV%APLISTME create mode 100755 Ardent/UV/catdir/%AUV%APM create mode 100755 Ardent/UV/catdir/%AUV%APM.ACTIVITY create mode 100755 Ardent/UV/catdir/%AUV%APM.FIX create mode 100755 Ardent/UV/catdir/%AUV%APM.FLATFILE create mode 100755 Ardent/UV/catdir/%AUV%APM.FLATFILE.FIXED create mode 100755 Ardent/UV/catdir/%AUV%APM.FLATFILE.FIXED.LAYOUT create mode 100755 Ardent/UV/catdir/%AUV%APM.FLATFILE.GRACE create mode 100755 Ardent/UV/catdir/%AUV%APM.FLATFILE.SPECIAL create mode 100755 Ardent/UV/catdir/%AUV%APM.FLATFILE.VER2 create mode 100755 Ardent/UV/catdir/%AUV%APM.JOURNAL create mode 100755 Ardent/UV/catdir/%AUV%APM.LABELS create mode 100755 Ardent/UV/catdir/%AUV%APM.LABELS.FLATFILE create mode 100755 Ardent/UV/catdir/%AUV%APM.LETTER create mode 100755 Ardent/UV/catdir/%AUV%APM.LETTERS create mode 100755 Ardent/UV/catdir/%AUV%APM.MTEK create mode 100755 Ardent/UV/catdir/%AUV%APM.NOTES create mode 100755 Ardent/UV/catdir/%AUV%APM.NY.CONV create mode 100755 Ardent/UV/catdir/%AUV%APM.PLEDGE create mode 100755 Ardent/UV/catdir/%AUV%APM.PLEDGES create mode 100755 Ardent/UV/catdir/%AUV%APM.PMO.CHANGE create mode 100755 Ardent/UV/catdir/%AUV%APM.PURGE.FLATFILE create mode 100755 Ardent/UV/catdir/%AUV%APM.PURGE.TO.FLATFILE create mode 100755 Ardent/UV/catdir/%AUV%APM.SUBSCRIPTION create mode 100755 Ardent/UV/catdir/%AUV%APM.TEST create mode 100755 Ardent/UV/catdir/%AUV%APM.TESTIMONY create mode 100755 Ardent/UV/catdir/%AUV%APM.TRAN create mode 100755 Ardent/UV/catdir/%AUV%APM.TRANS create mode 100755 Ardent/UV/catdir/%AUV%APM.UPDATE create mode 100755 Ardent/UV/catdir/%AUV%APM.UPDATE.AAC create mode 100755 Ardent/UV/catdir/%AUV%APMJ create mode 100755 Ardent/UV/catdir/%AUV%APMO.FLATFILE create mode 100755 Ardent/UV/catdir/%AUV%APMT.PRAYER.FIELD.FIX create mode 100755 Ardent/UV/catdir/%AUV%APO create mode 100755 Ardent/UV/catdir/%AUV%APORT.FIND create mode 100755 Ardent/UV/catdir/%AUV%APOSTAGE.LOG create mode 100755 Ardent/UV/catdir/%AUV%APOSTAGE.METER create mode 100755 Ardent/UV/catdir/%AUV%APOSTDATE.DETAIL.RPT create mode 100755 Ardent/UV/catdir/%AUV%APRINT.ADMIN.2 create mode 100755 Ardent/UV/catdir/%AUV%APRINT.AUX create mode 100755 Ardent/UV/catdir/%AUV%APRINT.FROM.HOLD create mode 100755 Ardent/UV/catdir/%AUV%APRINT.ICM.APPEAL create mode 100755 Ardent/UV/catdir/%AUV%APRINT.LABELS create mode 100755 Ardent/UV/catdir/%AUV%APRINT.LABELS.FROM.PMO create mode 100755 Ardent/UV/catdir/%AUV%APRINT.LABELS.VER2 create mode 100755 Ardent/UV/catdir/%AUV%APRINT.TEST create mode 100755 Ardent/UV/catdir/%AUV%APRINT.XS.FORM create mode 100755 Ardent/UV/catdir/%AUV%APRINTER.ASSIGNMENT create mode 100755 Ardent/UV/catdir/%AUV%APRINTER.ASSIGNMENT.BP create mode 100755 Ardent/UV/catdir/%AUV%APRINTER.ASSIGNMENT.DHB create mode 100755 Ardent/UV/catdir/%AUV%APRINTER.ASSIGNMENT.LHB create mode 100755 Ardent/UV/catdir/%AUV%APRINTER.ASSIGNMENT.OLD create mode 100755 Ardent/UV/catdir/%AUV%APRINTER.DHB create mode 100755 Ardent/UV/catdir/%AUV%APRINTERS create mode 100755 Ardent/UV/catdir/%AUV%APRJ.MAINT create mode 100755 Ardent/UV/catdir/%AUV%APRNT.FONT.LIST create mode 100755 Ardent/UV/catdir/%AUV%APRNT.UPDT.CONTROL create mode 100755 Ardent/UV/catdir/%AUV%APRO700A create mode 100755 Ardent/UV/catdir/%AUV%APRODUCT.BY.CUSTOMER create mode 100755 Ardent/UV/catdir/%AUV%APROJ.ANALYSIS.BY.DATE create mode 100755 Ardent/UV/catdir/%AUV%APROJECT create mode 100755 Ardent/UV/catdir/%AUV%APS create mode 100755 Ardent/UV/catdir/%AUV%APS.PICKING.PRINT create mode 100755 Ardent/UV/catdir/%AUV%APT.FT.RPT create mode 100755 Ardent/UV/catdir/%AUV%APTR.BAT.RESTORE create mode 100755 Ardent/UV/catdir/%AUV%APTR.BAT.SHELL create mode 100755 Ardent/UV/catdir/%AUV%AQUICK.ENTRY create mode 100755 Ardent/UV/catdir/%AUV%AQUICK.FILE.STATS create mode 100755 Ardent/UV/catdir/%AUV%AQUICK.LOOK create mode 100755 Ardent/UV/catdir/%AUV%AR8 create mode 100755 Ardent/UV/catdir/%AUV%AR8.041599 create mode 100755 Ardent/UV/catdir/%AUV%AR8.3.BULK.REPORT create mode 100755 Ardent/UV/catdir/%AUV%AR8.5.BULK.REPORT create mode 100755 Ardent/UV/catdir/%AUV%AR8.AUDIT.TEST create mode 100755 Ardent/UV/catdir/%AUV%AR8.BAT60.3 create mode 100755 Ardent/UV/catdir/%AUV%AR8.BATCH.DAILY.SUMMARY create mode 100755 Ardent/UV/catdir/%AUV%AR8.BATCH.DEPOSIT create mode 100755 Ardent/UV/catdir/%AUV%AR8.BATCH.DETAIL create mode 100755 Ardent/UV/catdir/%AUV%AR8.BATCH.ORDERS create mode 100755 Ardent/UV/catdir/%AUV%AR8.BATP42 create mode 100755 Ardent/UV/catdir/%AUV%AR8.BATP42.110497 create mode 100755 Ardent/UV/catdir/%AUV%AR8.BATP42.2 create mode 100755 Ardent/UV/catdir/%AUV%AR8.BATP42.WOF create mode 100755 Ardent/UV/catdir/%AUV%AR8.BATP44 create mode 100755 Ardent/UV/catdir/%AUV%AR8.BATP50.1.1 create mode 100755 Ardent/UV/catdir/%AUV%AR8.BATP50.1.2 create mode 100755 Ardent/UV/catdir/%AUV%AR8.BATP55 create mode 100755 Ardent/UV/catdir/%AUV%AR8.CC.MESSAGE create mode 100755 Ardent/UV/catdir/%AUV%AR8.CHANGE.PARTNERS create mode 100755 Ardent/UV/catdir/%AUV%AR8.CMS.USER.LIST create mode 100755 Ardent/UV/catdir/%AUV%AR8.CONV.ZIPS.GEO create mode 100755 Ardent/UV/catdir/%AUV%AR8.DAILYOP create mode 100755 Ardent/UV/catdir/%AUV%AR8.DAILYOP.060799 create mode 100755 Ardent/UV/catdir/%AUV%AR8.DAILYOP.SPA create mode 100755 Ardent/UV/catdir/%AUV%AR8.DO02 create mode 100755 Ardent/UV/catdir/%AUV%AR8.DUP.MATCH.PULL create mode 100755 Ardent/UV/catdir/%AUV%AR8.DUP01 create mode 100755 Ardent/UV/catdir/%AUV%AR8.EVENT.COST create mode 100755 Ardent/UV/catdir/%AUV%AR8.GROUP.TABLE create mode 100755 Ardent/UV/catdir/%AUV%AR8.MARKET.REVENUE create mode 100755 Ardent/UV/catdir/%AUV%AR8.MENU create mode 100755 Ardent/UV/catdir/%AUV%AR8.MENU.MAINT create mode 100755 Ardent/UV/catdir/%AUV%AR8.MKT.SORT create mode 100755 Ardent/UV/catdir/%AUV%AR8.MOUSE create mode 100755 Ardent/UV/catdir/%AUV%AR8.MSD.ACF create mode 100755 Ardent/UV/catdir/%AUV%AR8.MSD.ATTND.EVENT create mode 100755 Ardent/UV/catdir/%AUV%AR8.MSD.ATTND.SUMMARY create mode 100755 Ardent/UV/catdir/%AUV%AR8.MSD.BULK create mode 100755 Ardent/UV/catdir/%AUV%AR8.MSD.BULK.DRIVER create mode 100755 Ardent/UV/catdir/%AUV%AR8.MSD.BULK.MAIL create mode 100755 Ardent/UV/catdir/%AUV%AR8.MSD.EO.DAILY create mode 100755 Ardent/UV/catdir/%AUV%AR8.MSD.EO.FIX.MONTH create mode 100755 Ardent/UV/catdir/%AUV%AR8.MSD.FORMS create mode 100755 Ardent/UV/catdir/%AUV%AR8.MSD.JOURNAL.RPT create mode 100755 Ardent/UV/catdir/%AUV%AR8.MSD.ORDER.BILLING create mode 100755 Ardent/UV/catdir/%AUV%AR8.MSD.ORDER.BILLING.030497 create mode 100755 Ardent/UV/catdir/%AUV%AR8.MSD.ORDER.BILLING2 create mode 100755 Ardent/UV/catdir/%AUV%AR8.MSD.PLEDGE.MKT create mode 100755 Ardent/UV/catdir/%AUV%AR8.MSD.PLEDGE.MKT2 create mode 100755 Ardent/UV/catdir/%AUV%AR8.MSD.PLG.SELECT1 create mode 100755 Ardent/UV/catdir/%AUV%AR8.MSD.PRINT.RECORD create mode 100755 Ardent/UV/catdir/%AUV%AR8.MSD.PRINT.RECORD.OLD create mode 100755 Ardent/UV/catdir/%AUV%AR8.MSD.PURGE create mode 100755 Ardent/UV/catdir/%AUV%AR8.MSD.PURGE.NEW create mode 100755 Ardent/UV/catdir/%AUV%AR8.MSD.RESP.BY.SOURCE create mode 100755 Ardent/UV/catdir/%AUV%AR8.MSD.RESP.BY.SOURCE.100897 create mode 100755 Ardent/UV/catdir/%AUV%AR8.MSD.RESPONSE.BY.SOURCE create mode 100755 Ardent/UV/catdir/%AUV%AR8.MSD.SECURITY.PRINT create mode 100755 Ardent/UV/catdir/%AUV%AR8.MSD.SEG100 create mode 100755 Ardent/UV/catdir/%AUV%AR8.MSD.SEG100.102997 create mode 100755 Ardent/UV/catdir/%AUV%AR8.MSD.SEG150 create mode 100755 Ardent/UV/catdir/%AUV%AR8.MSD.SEG150.102997 create mode 100755 Ardent/UV/catdir/%AUV%AR8.MSD.SEG175 create mode 100755 Ardent/UV/catdir/%AUV%AR8.MSD.SEG175.102997 create mode 100755 Ardent/UV/catdir/%AUV%AR8.MSD.SEGMENT create mode 100755 Ardent/UV/catdir/%AUV%AR8.MSD.SUB.REPORT1 create mode 100755 Ardent/UV/catdir/%AUV%AR8.MSD.SUB.SELECT create mode 100755 Ardent/UV/catdir/%AUV%AR8.MSD.TOP.GIVERS create mode 100755 Ardent/UV/catdir/%AUV%AR8.MSD.TOTAL.RANGE create mode 100755 Ardent/UV/catdir/%AUV%AR8.MSD.UPDT.LET create mode 100755 Ardent/UV/catdir/%AUV%AR8.MSD.UPDT.LET2 create mode 100755 Ardent/UV/catdir/%AUV%AR8.MSD.USER.SECURITY create mode 100755 Ardent/UV/catdir/%AUV%AR8.MSD.USER.SECURITY.102999 create mode 100755 Ardent/UV/catdir/%AUV%AR8.MSD.USER.SECURITY.TEST create mode 100755 Ardent/UV/catdir/%AUV%AR8.MSD.USER.SECURITY.TEST2 create mode 100755 Ardent/UV/catdir/%AUV%AR8.MSD.ZIP.STARS.BULK create mode 100755 Ardent/UV/catdir/%AUV%AR8.NOTE10 create mode 100755 Ardent/UV/catdir/%AUV%AR8.NOTE10.BY.TYPE create mode 100755 Ardent/UV/catdir/%AUV%AR8.NOTES.LIST create mode 100755 Ardent/UV/catdir/%AUV%AR8.ONLINE.DEFAULT create mode 100755 Ardent/UV/catdir/%AUV%AR8.ONLINE.HELP create mode 100755 Ardent/UV/catdir/%AUV%AR8.ORDER.DEFAULT create mode 100755 Ardent/UV/catdir/%AUV%AR8.ORDER.RPT1 create mode 100755 Ardent/UV/catdir/%AUV%AR8.OS.3 create mode 100755 Ardent/UV/catdir/%AUV%AR8.PLEDGE.DEFAULT create mode 100755 Ardent/UV/catdir/%AUV%AR8.PLGP32 create mode 100755 Ardent/UV/catdir/%AUV%AR8.PORT.INIT create mode 100755 Ardent/UV/catdir/%AUV%AR8.PRO10.16 create mode 100755 Ardent/UV/catdir/%AUV%AR8.QUICKEY.IMPORT create mode 100755 Ardent/UV/catdir/%AUV%AR8.R.BULK.REPORT create mode 100755 Ardent/UV/catdir/%AUV%AR8.REG.DEFAULT create mode 100755 Ardent/UV/catdir/%AUV%AR8.REPRINT create mode 100755 Ardent/UV/catdir/%AUV%AR8.RESPONSE.BY.SEGMENT create mode 100755 Ardent/UV/catdir/%AUV%AR8.RPT060 create mode 100755 Ardent/UV/catdir/%AUV%AR8.RPT060.082198 create mode 100755 Ardent/UV/catdir/%AUV%AR8.RPT061 create mode 100755 Ardent/UV/catdir/%AUV%AR8.RPT071 create mode 100755 Ardent/UV/catdir/%AUV%AR8.RPT071.080498 create mode 100755 Ardent/UV/catdir/%AUV%AR8.RPT071.082198 create mode 100755 Ardent/UV/catdir/%AUV%AR8.RPT402 create mode 100755 Ardent/UV/catdir/%AUV%AR8.RPT403 create mode 100755 Ardent/UV/catdir/%AUV%AR8.RPT404A create mode 100755 Ardent/UV/catdir/%AUV%AR8.RPT404B create mode 100755 Ardent/UV/catdir/%AUV%AR8.RPT700 create mode 100755 Ardent/UV/catdir/%AUV%AR8.RPT800 create mode 100755 Ardent/UV/catdir/%AUV%AR8.RPTP10.2 create mode 100755 Ardent/UV/catdir/%AUV%AR8.RPTP10.27 create mode 100755 Ardent/UV/catdir/%AUV%AR8.RPTP10.29 create mode 100755 Ardent/UV/catdir/%AUV%AR8.RPTP10.3 create mode 100755 Ardent/UV/catdir/%AUV%AR8.RPTP10.4 create mode 100755 Ardent/UV/catdir/%AUV%AR8.RPTP10.5 create mode 100755 Ardent/UV/catdir/%AUV%AR8.SECURITY.CHECK create mode 100755 Ardent/UV/catdir/%AUV%AR8.SHIPPER create mode 100755 Ardent/UV/catdir/%AUV%AR8.STATUS.CHANGE create mode 100755 Ardent/UV/catdir/%AUV%AR8.STATUS.CREATE create mode 100755 Ardent/UV/catdir/%AUV%AR8.SUB.DEFAULT create mode 100755 Ardent/UV/catdir/%AUV%AR8.TAB700 create mode 100755 Ardent/UV/catdir/%AUV%AR8.TAB701 create mode 100755 Ardent/UV/catdir/%AUV%AR8.TAB710 create mode 100755 Ardent/UV/catdir/%AUV%AR8.TAPE.SELECT.PROC create mode 100755 Ardent/UV/catdir/%AUV%AR8.TRANSFER.DATA create mode 100755 Ardent/UV/catdir/%AUV%AR8.TRANSFER.DATA.052599 create mode 100755 Ardent/UV/catdir/%AUV%AR8.TRANSFER.DATA.072399 create mode 100755 Ardent/UV/catdir/%AUV%AR8.TRANSFER.DATA.BHM.txt create mode 100755 Ardent/UV/catdir/%AUV%AR8.TRANSFER.DATA.WADE create mode 100755 Ardent/UV/catdir/%AUV%AR8.USER.REPORT create mode 100755 Ardent/UV/catdir/%AUV%AR8.WADE create mode 100755 Ardent/UV/catdir/%AUV%AR8.WK.ATT.6.1 create mode 100755 Ardent/UV/catdir/%AUV%AR8.ZIP.LIST create mode 100755 Ardent/UV/catdir/%AUV%ARCF create mode 100755 Ardent/UV/catdir/%AUV%ARCF.DESC.CHANGE create mode 100755 Ardent/UV/catdir/%AUV%ARCF.WADE create mode 100755 Ardent/UV/catdir/%AUV%ARCP create mode 100755 Ardent/UV/catdir/%AUV%ARCP2 create mode 100755 Ardent/UV/catdir/%AUV%ARCP3 create mode 100755 Ardent/UV/catdir/%AUV%ARCV.SHIPPER.INDEXES create mode 100755 Ardent/UV/catdir/%AUV%ARECORD.IS.LOCKED create mode 100755 Ardent/UV/catdir/%AUV%ARECORD.LOCKS.PER.ACCOUNT create mode 100755 Ardent/UV/catdir/%AUV%AREGISTRATIONS create mode 100755 Ardent/UV/catdir/%AUV%AREMOVE.BAK.SEGMENTATION create mode 100755 Ardent/UV/catdir/%AUV%AREMOVE.SEGMENTATION create mode 100755 Ardent/UV/catdir/%AUV%AREMOVE.TRACKING create mode 100755 Ardent/UV/catdir/%AUV%AREPLACE.INV.WAREHOUSE create mode 100755 Ardent/UV/catdir/%AUV%AREPRINT create mode 100755 Ardent/UV/catdir/%AUV%AREPRINT.BY.RECEIPT create mode 100755 Ardent/UV/catdir/%AUV%ARESERVATION.DISP create mode 100755 Ardent/UV/catdir/%AUV%ARESERVATION.ENTRY create mode 100755 Ardent/UV/catdir/%AUV%ARESERVATION.SOURCE.RPT create mode 100755 Ardent/UV/catdir/%AUV%ARESERVATION.VIEW create mode 100755 Ardent/UV/catdir/%AUV%ARESET.WOF.CALLS create mode 100755 Ardent/UV/catdir/%AUV%ARESTORE.EMAILS create mode 100755 Ardent/UV/catdir/%AUV%ARESTORE.EMAILS.MATRIXX create mode 100755 Ardent/UV/catdir/%AUV%ARESTORE.EMAILS.MATRIXX2 create mode 100755 Ardent/UV/catdir/%AUV%ARESTORE.EMAILS2 create mode 100755 Ardent/UV/catdir/%AUV%ARETRIEVE.REPORT.BUILD.NOFORMAT create mode 100755 Ardent/UV/catdir/%AUV%ARKEYS create mode 100755 Ardent/UV/catdir/%AUV%ARKEYS.INV create mode 100755 Ardent/UV/catdir/%AUV%ARL create mode 100755 Ardent/UV/catdir/%AUV%ARMI.CHURCH.ZIP.TABLE create mode 100755 Ardent/UV/catdir/%AUV%ARMI.CHURCH.ZIP.TABLE.062399 create mode 100755 Ardent/UV/catdir/%AUV%ARMI.FIX create mode 100755 Ardent/UV/catdir/%AUV%ARMI.FIX.LNAME create mode 100755 Ardent/UV/catdir/%AUV%ARMI.FIX.PM.PLEDGES create mode 100755 Ardent/UV/catdir/%AUV%ARMI.FIX.ZIP create mode 100755 Ardent/UV/catdir/%AUV%ARMI.FLATFILE.SPECIAL create mode 100755 Ardent/UV/catdir/%AUV%ARMI.PLEDGE.RPT1 create mode 100755 Ardent/UV/catdir/%AUV%ARMI.PMA.DETAIL.RPT create mode 100755 Ardent/UV/catdir/%AUV%ARMI.PMA.DETAIL.RPT2 create mode 100755 Ardent/UV/catdir/%AUV%ARMI.PMA.DETAIL.RPT2.071399 create mode 100755 Ardent/UV/catdir/%AUV%ARMI.PMA.SUMMARY.RPT create mode 100755 Ardent/UV/catdir/%AUV%AROYALTY.TRANS create mode 100755 Ardent/UV/catdir/%AUV%ARSV create mode 100755 Ardent/UV/catdir/%AUV%ARSV.CALC.PAID create mode 100755 Ardent/UV/catdir/%AUV%ARSV.ROOM.SUB create mode 100755 Ardent/UV/catdir/%AUV%AS.PRINT create mode 100755 Ardent/UV/catdir/%AUV%ASALES.TAX.RPT1 create mode 100755 Ardent/UV/catdir/%AUV%ASALES.TAX.RPT1.041999 create mode 100755 Ardent/UV/catdir/%AUV%ASCAN.VOC.LOCAL create mode 100755 Ardent/UV/catdir/%AUV%ASCOTT.ICM.PLEDGE.FIX create mode 100755 Ardent/UV/catdir/%AUV%ASCOTT.MOVE.EMAIL create mode 100755 Ardent/UV/catdir/%AUV%ASCRN create mode 100755 Ardent/UV/catdir/%AUV%ASEGM.RPT.MEM create mode 100755 Ardent/UV/catdir/%AUV%ASEGMENT.REDO.PREP create mode 100755 Ardent/UV/catdir/%AUV%ASELECT.ICM.APPEAL create mode 100755 Ardent/UV/catdir/%AUV%ASELECT.NOPHONE create mode 100755 Ardent/UV/catdir/%AUV%ASELECT.PHONE create mode 100755 Ardent/UV/catdir/%AUV%ASERIES.PULL create mode 100755 Ardent/UV/catdir/%AUV%ASET.FONTS create mode 100755 Ardent/UV/catdir/%AUV%ASET.LANDSCAPE create mode 100755 Ardent/UV/catdir/%AUV%ASET.PRINTER create mode 100755 Ardent/UV/catdir/%AUV%ASET.RESET create mode 100755 Ardent/UV/catdir/%AUV%ASET.SMALL create mode 100755 Ardent/UV/catdir/%AUV%ASET.SYSTEM.OPTIONS create mode 100755 Ardent/UV/catdir/%AUV%ASETUP.OPTIONS create mode 100755 Ardent/UV/catdir/%AUV%ASETUP.OPTIONS2 create mode 100755 Ardent/UV/catdir/%AUV%ASG.MEM create mode 100755 Ardent/UV/catdir/%AUV%ASHIP.INFO.MAINT create mode 100755 Ardent/UV/catdir/%AUV%ASL create mode 100755 Ardent/UV/catdir/%AUV%ASORT.TEST create mode 100755 Ardent/UV/catdir/%AUV%ASPA.TEST create mode 100755 Ardent/UV/catdir/%AUV%ASRR create mode 100755 Ardent/UV/catdir/%AUV%ASTATE.GEN.UPDATE create mode 100755 Ardent/UV/catdir/%AUV%ASTATUS.CODES create mode 100755 Ardent/UV/catdir/%AUV%ASUPPORT.RECORD create mode 100755 Ardent/UV/catdir/%AUV%ASUPPORTING.CHURCH.FLATFILE create mode 100755 Ardent/UV/catdir/%AUV%ASYS create mode 100755 Ardent/UV/catdir/%AUV%ASYS2 create mode 100755 Ardent/UV/catdir/%AUV%ASYSTEM.SETUP create mode 100755 Ardent/UV/catdir/%AUV%AT132 create mode 100755 Ardent/UV/catdir/%AUV%AT80 create mode 100755 Ardent/UV/catdir/%AUV%ATAB0020 create mode 100755 Ardent/UV/catdir/%AUV%ATAB710.SUB create mode 100755 Ardent/UV/catdir/%AUV%ATAX.RECEIPT.BUILD create mode 100755 Ardent/UV/catdir/%AUV%ATAX.RECEIPT.FLAT create mode 100755 Ardent/UV/catdir/%AUV%ATCN.DBASE.UPDATE create mode 100755 Ardent/UV/catdir/%AUV%ATD800.TABLE.UPDATE.EXCEPT.SUB create mode 100755 Ardent/UV/catdir/%AUV%ATD800.TABLE.UPDATE.SUB create mode 100755 Ardent/UV/catdir/%AUV%ATD888.TABLE.UPDATE.EXCEPT.SUB create mode 100755 Ardent/UV/catdir/%AUV%ATD888.TABLE.UPDATE.SUB create mode 100755 Ardent/UV/catdir/%AUV%ATDJ.CERTIFICATE create mode 100755 Ardent/UV/catdir/%AUV%ATDJ.INV.SALES.RPT1 create mode 100755 Ardent/UV/catdir/%AUV%ATDJ.INV.SALES.RPT2 create mode 100755 Ardent/UV/catdir/%AUV%ATDJ.INV.SALES.RPT3 create mode 100755 Ardent/UV/catdir/%AUV%ATDJ.INV.SALES.RPT4 create mode 100755 Ardent/UV/catdir/%AUV%ATDJ.INV.SALES.RPT5 create mode 100755 Ardent/UV/catdir/%AUV%ATDJ.INV.SALES.RPT6 create mode 100755 Ardent/UV/catdir/%AUV%ATDJ.PR2000.DETAIL.RPT create mode 100755 Ardent/UV/catdir/%AUV%ATDJ.REG.RPT.SUB create mode 100755 Ardent/UV/catdir/%AUV%ATDJREG.CMSD.DO02.CTRL create mode 100755 Ardent/UV/catdir/%AUV%ATDJREG.NT.DO02 create mode 100755 Ardent/UV/catdir/%AUV%ATDJREG.R8.DAILYOP create mode 100755 Ardent/UV/catdir/%AUV%ATEMP create mode 100755 Ardent/UV/catdir/%AUV%ATEST create mode 100755 Ardent/UV/catdir/%AUV%ATEST.MEDIA.BUILD create mode 100755 Ardent/UV/catdir/%AUV%ATEST.MEDIA.RPT create mode 100755 Ardent/UV/catdir/%AUV%ATEST.OCONV create mode 100755 Ardent/UV/catdir/%AUV%ATEST.PRO create mode 100755 Ardent/UV/catdir/%AUV%ATEST.PT create mode 100755 Ardent/UV/catdir/%AUV%ATEST.SPEED create mode 100755 Ardent/UV/catdir/%AUV%ATEST.TRIM create mode 100755 Ardent/UV/catdir/%AUV%ATEST2 create mode 100755 Ardent/UV/catdir/%AUV%ATESTIMONY.DISP create mode 100755 Ardent/UV/catdir/%AUV%ATESTIMONY.ENTRY create mode 100755 Ardent/UV/catdir/%AUV%ATESTIMONY.ENTRY.OLD create mode 100755 Ardent/UV/catdir/%AUV%ATESTIMONY.VIEW create mode 100755 Ardent/UV/catdir/%AUV%ATESTIT create mode 100755 Ardent/UV/catdir/%AUV%ATESTME create mode 100755 Ardent/UV/catdir/%AUV%ATIMER create mode 100755 Ardent/UV/catdir/%AUV%ATITLE.CODE.UPDATE create mode 100755 Ardent/UV/catdir/%AUV%ATKT create mode 100755 Ardent/UV/catdir/%AUV%ATRANS.AM.CONVERT create mode 100755 Ardent/UV/catdir/%AUV%ATRANS.BA.AUDIT create mode 100755 Ardent/UV/catdir/%AUV%ATRANS.BA.AUDIT.062398 create mode 100755 Ardent/UV/catdir/%AUV%ATRANS.CHECK create mode 100755 Ardent/UV/catdir/%AUV%ATSM.PICKING.PRINT create mode 100755 Ardent/UV/catdir/%AUV%ATSORT create mode 100755 Ardent/UV/catdir/%AUV%ATSORT.021899 create mode 100755 Ardent/UV/catdir/%AUV%ATWOS.NO.ONES create mode 100755 Ardent/UV/catdir/%AUV%AUPDATE.CC.DEPOSITS create mode 100755 Ardent/UV/catdir/%AUV%AUPDATE.GIFTS create mode 100755 Ardent/UV/catdir/%AUV%AUPDATE.ORDERS.SOLDTO.INFO create mode 100755 Ardent/UV/catdir/%AUV%AUPS.FLAT create mode 100755 Ardent/UV/catdir/%AUV%AUPS.TEST create mode 100755 Ardent/UV/catdir/%AUV%AUSE.NT create mode 100755 Ardent/UV/catdir/%AUV%AUV.ACCOUNT.MAINT create mode 100755 Ardent/UV/catdir/%AUV%AUV.DIFF create mode 100755 Ardent/UV/catdir/%AUV%AUV.EDIT create mode 100755 Ardent/UV/catdir/%AUV%AVCF.MERGE.QUICK create mode 100755 Ardent/UV/catdir/%AUV%AVDB create mode 100755 Ardent/UV/catdir/%AUV%AVDB2 create mode 100755 Ardent/UV/catdir/%AUV%AVOC.COMPARE create mode 100755 Ardent/UV/catdir/%AUV%AWADE.TEST create mode 100755 Ardent/UV/catdir/%AUV%AWCM.800.INTERFACE create mode 100755 Ardent/UV/catdir/%AUV%AWCM.PM.NOTES create mode 100755 Ardent/UV/catdir/%AUV%AWCM.PM.SUBSCRIPTION create mode 100755 Ardent/UV/catdir/%AUV%AWCM.WEST.INTERFACE create mode 100755 Ardent/UV/catdir/%AUV%AWCM.WEST.INTERFACE.050498 create mode 100755 Ardent/UV/catdir/%AUV%AWCM.WEST.INTERFACE.NEW create mode 100755 Ardent/UV/catdir/%AUV%AWEL.IDX create mode 100755 Ardent/UV/catdir/%AUV%AWEL.IDX.UPDATE create mode 100755 Ardent/UV/catdir/%AUV%AWEST.CHECK.LAYOUT create mode 100755 Ardent/UV/catdir/%AUV%AWHAT.TIME create mode 100755 Ardent/UV/catdir/%AUV%AWHM.PICKING.PRINT create mode 100755 Ardent/UV/catdir/%AUV%AWHOLOCKEDME create mode 100755 Ardent/UV/catdir/%AUV%AWMB create mode 100755 Ardent/UV/catdir/%AUV%AWOF.FIX.MG710 create mode 100755 Ardent/UV/catdir/%AUV%AWOF.OPER.BACKLOG.RPT1 create mode 100755 Ardent/UV/catdir/%AUV%AWOF.PICKING.PRINT create mode 100755 Ardent/UV/catdir/%AUV%AWOF.PREV.NEW.GIFT.RPT create mode 100755 Ardent/UV/catdir/%AUV%AWOF.WORDPROC.BACKLOG.RPT create mode 100755 Ardent/UV/catdir/%AUV%AWOW.LABEL1 create mode 100755 Ardent/UV/catdir/%AUV%AXS.FORM create mode 100755 Ardent/UV/catdir/%AUV%AY2K-CHECKER create mode 100755 Ardent/UV/catdir/%AUV%AZIP.RADIUS.SELECT create mode 100755 Ardent/UV/catdir/%AUV%AZIP.READ.TAPE create mode 100755 Ardent/UV/catdir/%AUV%AZIP.SUB create mode 100755 Ardent/UV/catdir/%AUV%AZIP.SUB.2 create mode 100755 Ardent/UV/catdir/%AUV%AZIP.SUB2 create mode 100755 Ardent/UV/catdir/%AUV%AZIP.WRITE.TAPE create mode 100755 Ardent/UV/catdir/%AUV%AZIP4.PULL.UPDATE create mode 100755 Ardent/UV/catdir/%AUV%AZM create mode 100755 Ardent/UV/catdir/%AUV%Ainvoice create mode 100755 Ardent/UV/catdir/%AUV%Amcwe.donor.rpt6 create mode 100755 Ardent/UV/catdir/%AUV%Amcwe.donor.rpt7 create mode 100755 Ardent/UV/catdir/%AUV%Amcwe.newname.rpt5.txt create mode 100755 Ardent/UV/catdir/%AUV%Amcwe.preclose.edit.txt create mode 100755 Ardent/UV/catdir/%AUVPATHNAME create mode 100755 Ardent/UV/catdir/%AUVPRINTMSG create mode 100755 Ardent/UV/catdir/%AUVREADMSG create mode 100755 Ardent/UV/catdir/%AVERIFY.CATALOG create mode 100755 Ardent/UV/catdir/%AVERIFY.SCHEMA create mode 100755 Ardent/UV/catdir/%AVERIFY.SCHEMAS create mode 100755 Ardent/UV/catdir/%AVERIFY.TABLE create mode 100755 Ardent/UV/catdir/%AWK1.EXPORT create mode 100755 Ardent/UV/catdir/%AWRAP.PRINT create mode 100755 Ardent/UV/catdir/%AYES.NO.BOX.B create mode 100755 Ardent/UV/catdir/%Avmadmsub create mode 100755 Ardent/UV/catdir/-EXPAND create mode 100755 Ardent/UV/catdir/-EXTERNALG create mode 100755 Ardent/UV/catdir/-FINDFILE create mode 100755 Ardent/UV/catdir/-FORMAT.BASIC create mode 100755 Ardent/UV/catdir/-GET.FILE.NAME create mode 100755 Ardent/UV/catdir/-GTE create mode 100755 Ardent/UV/catdir/-IDENT create mode 100755 Ardent/UV/catdir/-ISNULLS create mode 100755 Ardent/UV/catdir/-LOAD.PIOPEN create mode 100755 Ardent/UV/catdir/-MATBLOCK create mode 100755 Ardent/UV/catdir/-NEGS create mode 100755 Ardent/UV/catdir/-OpenError create mode 100755 Ardent/UV/catdir/-PERMISSIONS create mode 100755 Ardent/UV/catdir/-PRINT.RECORD create mode 100755 Ardent/UV/catdir/-SQLINTCHK create mode 100755 Ardent/UV/catdir/-STRIPSTRINGS create mode 100755 Ardent/UV/catdir/-TRIMBS create mode 100755 Ardent/UV/catdir/-TRIMFS create mode 100755 Ardent/UV/catdir/-TRIMS create mode 100755 Ardent/UV/catdir/-UVORNF create mode 100755 Ardent/UV/catdir/-YESNO create mode 100755 Ardent/UV/catdir/.Type1 create mode 100755 Ardent/UV/gci.menu.u create mode 100755 Ardent/UV/gcidir/Make.gci create mode 100755 Ardent/UV/gcidir/gci_args.c create mode 100755 Ardent/UV/gcidir/gci_hello.c create mode 100755 Ardent/UV/gcidir/gci_malloc.c create mode 100755 Ardent/UV/gcidir/gci_mult.c create mode 100755 Ardent/UV/gcidir/gcimake.bat create mode 100755 Ardent/UV/gcidir/include/COMMON.h create mode 100755 Ardent/UV/gcidir/include/DATUM.h create mode 100755 Ardent/UV/gcidir/include/DBFILE.h create mode 100755 Ardent/UV/gcidir/include/DBTEST.h create mode 100755 Ardent/UV/gcidir/include/DEVICE.h create mode 100755 Ardent/UV/gcidir/include/FNNAME.h create mode 100755 Ardent/UV/gcidir/include/GENTXT.h create mode 100755 Ardent/UV/gcidir/include/JOB.h create mode 100755 Ardent/UV/gcidir/include/LAYER.h create mode 100755 Ardent/UV/gcidir/include/LEVEL.h create mode 100755 Ardent/UV/gcidir/include/LGevents.h create mode 100755 Ardent/UV/gcidir/include/LK_include.h create mode 100755 Ardent/UV/gcidir/include/LOCK.h create mode 100755 Ardent/UV/gcidir/include/MFILE.h create mode 100755 Ardent/UV/gcidir/include/MLOG.h create mode 100755 Ardent/UV/gcidir/include/MTU.h create mode 100755 Ardent/UV/gcidir/include/NET.h create mode 100755 Ardent/UV/gcidir/include/NLS.h create mode 100755 Ardent/UV/gcidir/include/NLSHKprivate.h create mode 100755 Ardent/UV/gcidir/include/NLShooks.h create mode 100755 Ardent/UV/gcidir/include/NLSlc.h create mode 100755 Ardent/UV/gcidir/include/PFILE.h create mode 100755 Ardent/UV/gcidir/include/PROGRAM.h create mode 100755 Ardent/UV/gcidir/include/PROMPT.h create mode 100755 Ardent/UV/gcidir/include/PSAVE.h create mode 100755 Ardent/UV/gcidir/include/RUNDATA.h create mode 100755 Ardent/UV/gcidir/include/SEQFILE.h create mode 100755 Ardent/UV/gcidir/include/TCPIP.h create mode 100755 Ardent/UV/gcidir/include/TX.h create mode 100755 Ardent/UV/gcidir/include/UCI.h create mode 100755 Ardent/UV/gcidir/include/UDR_include.h create mode 100755 Ardent/UV/gcidir/include/UVERSION.h create mode 100755 Ardent/UV/gcidir/include/UVODBC.h create mode 100755 Ardent/UV/gcidir/include/UVOD_discon.h create mode 100755 Ardent/UV/gcidir/include/api_functs.h create mode 100755 Ardent/UV/gcidir/include/api_public.h create mode 100755 Ardent/UV/gcidir/include/api_server.h create mode 100755 Ardent/UV/gcidir/include/atfuncts.h create mode 100755 Ardent/UV/gcidir/include/atvars.h create mode 100755 Ardent/UV/gcidir/include/backup.h create mode 100755 Ardent/UV/gcidir/include/backup1.h create mode 100755 Ardent/UV/gcidir/include/bashead.h create mode 100755 Ardent/UV/gcidir/include/basic.h create mode 100755 Ardent/UV/gcidir/include/bscan.h create mode 100755 Ardent/UV/gcidir/include/btree.h create mode 100755 Ardent/UV/gcidir/include/c_LOG.h create mode 100755 Ardent/UV/gcidir/include/c_errd.h create mode 100755 Ardent/UV/gcidir/include/c_getpu.h create mode 100755 Ardent/UV/gcidir/include/c_printerio.h create mode 100755 Ardent/UV/gcidir/include/catalog.h create mode 100755 Ardent/UV/gcidir/include/cdict.h create mode 100755 Ardent/UV/gcidir/include/cfileinfo.h create mode 100755 Ardent/UV/gcidir/include/chars.h create mode 100755 Ardent/UV/gcidir/include/ckeyword.h create mode 100755 Ardent/UV/gcidir/include/compare.h create mode 100755 Ardent/UV/gcidir/include/compiler.h create mode 100755 Ardent/UV/gcidir/include/creatfil.h create mode 100755 Ardent/UV/gcidir/include/date.h create mode 100755 Ardent/UV/gcidir/include/disk.h create mode 100755 Ardent/UV/gcidir/include/dispatch.h create mode 100755 Ardent/UV/gcidir/include/dynamic.h create mode 100755 Ardent/UV/gcidir/include/execute.h create mode 100755 Ardent/UV/gcidir/include/exesave.h create mode 100755 Ardent/UV/gcidir/include/extern.h create mode 100755 Ardent/UV/gcidir/include/filefix.h create mode 100755 Ardent/UV/gcidir/include/filefix_defs.h create mode 100755 Ardent/UV/gcidir/include/filefix_diags.h create mode 100755 Ardent/UV/gcidir/include/filefix_errors.h create mode 100755 Ardent/UV/gcidir/include/filefix_fixes.h create mode 100755 Ardent/UV/gcidir/include/filefix_functs.h create mode 100755 Ardent/UV/gcidir/include/filefix_public.h create mode 100755 Ardent/UV/gcidir/include/filefix_server.h create mode 100755 Ardent/UV/gcidir/include/filehdr.h create mode 100755 Ardent/UV/gcidir/include/filenams.h create mode 100755 Ardent/UV/gcidir/include/fixtool.h create mode 100755 Ardent/UV/gcidir/include/flavor.h create mode 100755 Ardent/UV/gcidir/include/fn_priv.h create mode 100755 Ardent/UV/gcidir/include/fn_pub.h create mode 100755 Ardent/UV/gcidir/include/fn_spec.h create mode 100755 Ardent/UV/gcidir/include/ftypdesc.h create mode 100755 Ardent/UV/gcidir/include/gci.h create mode 100755 Ardent/UV/gcidir/include/getput.h create mode 100755 Ardent/UV/gcidir/include/global.h create mode 100755 Ardent/UV/gcidir/include/hardware.h create mode 100755 Ardent/UV/gcidir/include/hdroffsets.h create mode 100755 Ardent/UV/gcidir/include/ic_private.h create mode 100755 Ardent/UV/gcidir/include/iflags.h create mode 100755 Ardent/UV/gcidir/include/include.h create mode 100755 Ardent/UV/gcidir/include/inlist.h create mode 100755 Ardent/UV/gcidir/include/ioconv.h create mode 100755 Ardent/UV/gcidir/include/localsrv.h create mode 100755 Ardent/UV/gcidir/include/logglobal.h create mode 100755 Ardent/UV/gcidir/include/netglobal.h create mode 100755 Ardent/UV/gcidir/include/netstruct.h create mode 100755 Ardent/UV/gcidir/include/nparse.h create mode 100755 Ardent/UV/gcidir/include/nt.h create mode 100755 Ardent/UV/gcidir/include/nttimes.h create mode 100755 Ardent/UV/gcidir/include/null.h create mode 100755 Ardent/UV/gcidir/include/opcodes.h create mode 100755 Ardent/UV/gcidir/include/optable.h create mode 100755 Ardent/UV/gcidir/include/packages.h create mode 100755 Ardent/UV/gcidir/include/param.h create mode 100755 Ardent/UV/gcidir/include/pcdriver.h create mode 100755 Ardent/UV/gcidir/include/perfdata.h create mode 100755 Ardent/UV/gcidir/include/pi.decomp.h create mode 100755 Ardent/UV/gcidir/include/pi.lh.h create mode 100755 Ardent/UV/gcidir/include/pi.optab.h create mode 100755 Ardent/UV/gcidir/include/pi.t30conv.h create mode 100755 Ardent/UV/gcidir/include/plock.h create mode 100755 Ardent/UV/gcidir/include/port_status.h create mode 100755 Ardent/UV/gcidir/include/portstat.h create mode 100755 Ardent/UV/gcidir/include/print.h create mode 100755 Ardent/UV/gcidir/include/proc.h create mode 100755 Ardent/UV/gcidir/include/qcursor.h create mode 100755 Ardent/UV/gcidir/include/qdefine.h create mode 100755 Ardent/UV/gcidir/include/query.h create mode 100755 Ardent/UV/gcidir/include/raid.h create mode 100755 Ardent/UV/gcidir/include/rlocked.h create mode 100755 Ardent/UV/gcidir/include/rm_publi.h create mode 100755 Ardent/UV/gcidir/include/rmv_desc.h create mode 100755 Ardent/UV/gcidir/include/rpc_public.h create mode 100755 Ardent/UV/gcidir/include/scanglob.h create mode 100755 Ardent/UV/gcidir/include/scratch.h create mode 100755 Ardent/UV/gcidir/include/sdml.h create mode 100755 Ardent/UV/gcidir/include/sdml_global.h create mode 100755 Ardent/UV/gcidir/include/sdml_lex.h create mode 100755 Ardent/UV/gcidir/include/selectinfo.h create mode 100755 Ardent/UV/gcidir/include/shcat.h create mode 100755 Ardent/UV/gcidir/include/sicaperm.h create mode 100755 Ardent/UV/gcidir/include/sinput.h create mode 100755 Ardent/UV/gcidir/include/sortparm.h create mode 100755 Ardent/UV/gcidir/include/sortstack.h create mode 100755 Ardent/UV/gcidir/include/sp.banner.h create mode 100755 Ardent/UV/gcidir/include/term.h create mode 100755 Ardent/UV/gcidir/include/tinfo.h create mode 100755 Ardent/UV/gcidir/include/tinfo_sh.h create mode 100755 Ardent/UV/gcidir/include/tinfo_stt.h create mode 100755 Ardent/UV/gcidir/include/tiread.h create mode 100755 Ardent/UV/gcidir/include/tree.h create mode 100755 Ardent/UV/gcidir/include/trinlist.h create mode 100755 Ardent/UV/gcidir/include/tunables.h create mode 100755 Ardent/UV/gcidir/include/tunedef.h create mode 100755 Ardent/UV/gcidir/include/type.h create mode 100755 Ardent/UV/gcidir/include/typedef.h create mode 100755 Ardent/UV/gcidir/include/uid.h create mode 100755 Ardent/UV/gcidir/include/unirpc.h create mode 100755 Ardent/UV/gcidir/include/unishared.h create mode 100755 Ardent/UV/gcidir/include/uv.h create mode 100755 Ardent/UV/gcidir/include/uvaffin.h create mode 100755 Ardent/UV/gcidir/include/uvconfig.h create mode 100755 Ardent/UV/gcidir/include/uvfcntl.h create mode 100755 Ardent/UV/gcidir/include/uvlocale.h create mode 100755 Ardent/UV/gcidir/include/uvmalloc.h create mode 100755 Ardent/UV/gcidir/include/uvmsg.h create mode 100755 Ardent/UV/gcidir/include/uvshm.h create mode 100755 Ardent/UV/gcidir/include/uvsica.h create mode 100755 Ardent/UV/gcidir/include/uvsignal.h create mode 100755 Ardent/UV/gcidir/include/uvsql.h create mode 100755 Ardent/UV/gcidir/include/uvsqlowner.h create mode 100755 Ardent/UV/gcidir/include/uvsqlsrverr.h create mode 100755 Ardent/UV/gcidir/include/uvstat.h create mode 100755 Ardent/UV/gcidir/include/uvtic.h create mode 100755 Ardent/UV/gcidir/include/ux74f.h create mode 100755 Ardent/UV/gcidir/include/vector.h create mode 100755 Ardent/UV/gcidir/include/vm_ici.h create mode 100755 Ardent/UV/gcidir/include/wait.h create mode 100755 Ardent/UV/gcidir/include/wsckfextern.h create mode 100755 Ardent/UV/gcidir/include/wsckfptrs.h create mode 100755 Ardent/UV/gcidir/include/xa.h create mode 100755 Ardent/UV/gcidir/lib/universe.lib create mode 100755 Ardent/UV/msg.text create mode 100755 Ardent/UV/nls.cmd create mode 100755 Ardent/UV/nls.uvinst.u create mode 100755 Ardent/UV/nls/charset/CS.ALPHAS create mode 100755 Ardent/UV/nls/charset/CS.BLOCKS create mode 100755 Ardent/UV/nls/charset/CS.CASES create mode 100755 Ardent/UV/nls/charset/CS.DESCS create mode 100755 Ardent/UV/nls/charset/CS.TYPES create mode 100755 Ardent/UV/nls/charset/D_CS.ALPHAS create mode 100755 Ardent/UV/nls/charset/D_CS.BLOCKS create mode 100755 Ardent/UV/nls/charset/D_CS.CASES create mode 100755 Ardent/UV/nls/charset/D_CS.DESCS create mode 100755 Ardent/UV/nls/charset/D_CS.TYPES create mode 100755 Ardent/UV/nls/charset/D_WT.LOOKUP create mode 100755 Ardent/UV/nls/charset/WT.LOOKUP create mode 100755 Ardent/UV/nls/charset/install/.uvnlsmap create mode 100755 Ardent/UV/nls/locales/CLIENT.LCS create mode 100755 Ardent/UV/nls/locales/D_CLIENT.LCS create mode 100755 Ardent/UV/nls/locales/D_LANG.INFO create mode 100755 Ardent/UV/nls/locales/D_LC.ALL create mode 100755 Ardent/UV/nls/locales/D_LC.COLLATE create mode 100755 Ardent/UV/nls/locales/D_LC.CTYPE create mode 100755 Ardent/UV/nls/locales/D_LC.MONETARY create mode 100755 Ardent/UV/nls/locales/D_LC.NUMERIC create mode 100755 Ardent/UV/nls/locales/D_LC.TIME create mode 100755 Ardent/UV/nls/locales/D_WT.TABLES create mode 100755 Ardent/UV/nls/locales/D_install create mode 100755 Ardent/UV/nls/locales/LANG.INFO create mode 100755 Ardent/UV/nls/locales/LC.ALL create mode 100755 Ardent/UV/nls/locales/LC.COLLATE create mode 100755 Ardent/UV/nls/locales/LC.CTYPE create mode 100755 Ardent/UV/nls/locales/LC.MONETARY create mode 100755 Ardent/UV/nls/locales/LC.NUMERIC create mode 100755 Ardent/UV/nls/locales/LC.TIME create mode 100755 Ardent/UV/nls/locales/WT.TABLES/#TEMPLATE create mode 100755 Ardent/UV/nls/locales/WT.TABLES/CYRILLIC-DEFAULT create mode 100755 Ardent/UV/nls/locales/WT.TABLES/GREEK-DEFAULT create mode 100755 Ardent/UV/nls/locales/WT.TABLES/IDEOGRAPHS-BIG5 create mode 100755 Ardent/UV/nls/locales/WT.TABLES/IDEOGRAPHS-GB create mode 100755 Ardent/UV/nls/locales/WT.TABLES/IDEOGRAPHS-JIS create mode 100755 Ardent/UV/nls/locales/WT.TABLES/IDEOGRAPHS-KSC create mode 100755 Ardent/UV/nls/locales/WT.TABLES/JPN-SJIS create mode 100755 Ardent/UV/nls/locales/WT.TABLES/KANA-DEFAULT create mode 100755 Ardent/UV/nls/locales/WT.TABLES/LATIN-CROATIAN create mode 100755 Ardent/UV/nls/locales/WT.TABLES/LATIN-DANISH create mode 100755 Ardent/UV/nls/locales/WT.TABLES/LATIN-ESTONIAN create mode 100755 Ardent/UV/nls/locales/WT.TABLES/LATIN-HUNGARIAN create mode 100755 Ardent/UV/nls/locales/WT.TABLES/LATIN-ICELANDIC create mode 100755 Ardent/UV/nls/locales/WT.TABLES/LATIN-LATVIAN create mode 100755 Ardent/UV/nls/locales/WT.TABLES/LATIN-LITHUANIAN create mode 100755 Ardent/UV/nls/locales/WT.TABLES/LATIN-NORWEGIAN create mode 100755 Ardent/UV/nls/locales/WT.TABLES/LATIN-POLISH create mode 100755 Ardent/UV/nls/locales/WT.TABLES/LATIN-ROMANIAN create mode 100755 Ardent/UV/nls/locales/WT.TABLES/LATIN-SLOVENIAN create mode 100755 Ardent/UV/nls/locales/WT.TABLES/LATIN-SPANISH create mode 100755 Ardent/UV/nls/locales/WT.TABLES/LATIN-SWEDISH create mode 100755 Ardent/UV/nls/locales/WT.TABLES/LATIN-TURKISH create mode 100755 Ardent/UV/nls/locales/WT.TABLES/LATIN1-DEFAULT create mode 100755 Ardent/UV/nls/locales/WT.TABLES/LATINX-DEFAULT create mode 100755 Ardent/UV/nls/locales/WT.TABLES/LATINX2-DEFAULT create mode 100755 Ardent/UV/nls/locales/WT.TABLES/LATINX3-DEFAULT create mode 100755 Ardent/UV/nls/locales/install/.uvnlsmap create mode 100755 Ardent/UV/nls/locales/install/1.DEFAULT create mode 100755 Ardent/UV/nls/locales/install/2.DEFAULT create mode 100755 Ardent/UV/nls/locales/install/3.DEFAULT create mode 100755 Ardent/UV/nls/locales/install/4.DEFAULT create mode 100755 Ardent/UV/nls/locales/install/5.DEFAULT create mode 100755 Ardent/UV/nls/locales/install/6.DEFAULT create mode 100755 Ardent/UV/nls/maps/CLIENT.MAPS create mode 100755 Ardent/UV/nls/maps/D_CLIENT.MAPS create mode 100755 Ardent/UV/nls/maps/D_MAP.DESCS create mode 100755 Ardent/UV/nls/maps/D_MAP.TABLES create mode 100755 Ardent/UV/nls/maps/D_install create mode 100755 Ardent/UV/nls/maps/MAP.DESCS create mode 100755 Ardent/UV/nls/maps/MAP.TABLES/#TEMPLATE create mode 100755 Ardent/UV/nls/maps/MAP.TABLES/ASCII create mode 100755 Ardent/UV/nls/maps/MAP.TABLES/BIG5 create mode 100755 Ardent/UV/nls/maps/MAP.TABLES/C0-CONTROLS create mode 100755 Ardent/UV/nls/maps/MAP.TABLES/C1-CONTROLS create mode 100755 Ardent/UV/nls/maps/MAP.TABLES/C1-MARKS create mode 100755 Ardent/UV/nls/maps/MAP.TABLES/DBCS-MARKS create mode 100755 Ardent/UV/nls/maps/MAP.TABLES/EBCDIC create mode 100755 Ardent/UV/nls/maps/MAP.TABLES/EBCDIC-037 create mode 100755 Ardent/UV/nls/maps/MAP.TABLES/EBCDIC-1026 create mode 100755 Ardent/UV/nls/maps/MAP.TABLES/EBCDIC-500V1 create mode 100755 Ardent/UV/nls/maps/MAP.TABLES/EBCDIC-875 create mode 100755 Ardent/UV/nls/maps/MAP.TABLES/EBCDIC-CTRLS create mode 100755 Ardent/UV/nls/maps/MAP.TABLES/GB2312-80 create mode 100755 Ardent/UV/nls/maps/MAP.TABLES/ISO8859-1 create mode 100755 Ardent/UV/nls/maps/MAP.TABLES/ISO8859-10 create mode 100755 Ardent/UV/nls/maps/MAP.TABLES/ISO8859-2 create mode 100755 Ardent/UV/nls/maps/MAP.TABLES/ISO8859-3 create mode 100755 Ardent/UV/nls/maps/MAP.TABLES/ISO8859-4 create mode 100755 Ardent/UV/nls/maps/MAP.TABLES/ISO8859-5 create mode 100755 Ardent/UV/nls/maps/MAP.TABLES/ISO8859-6 create mode 100755 Ardent/UV/nls/maps/MAP.TABLES/ISO8859-7 create mode 100755 Ardent/UV/nls/maps/MAP.TABLES/ISO8859-8 create mode 100755 Ardent/UV/nls/maps/MAP.TABLES/ISO8859-9 create mode 100755 Ardent/UV/nls/maps/MAP.TABLES/JIS-EUC2-MARKS create mode 100755 Ardent/UV/nls/maps/MAP.TABLES/JISX0201-A create mode 100755 Ardent/UV/nls/maps/MAP.TABLES/JISX0201-K create mode 100755 Ardent/UV/nls/maps/MAP.TABLES/JISX0208 create mode 100755 Ardent/UV/nls/maps/MAP.TABLES/JISX0212 create mode 100755 Ardent/UV/nls/maps/MAP.TABLES/JPN-EBCDIC create mode 100755 Ardent/UV/nls/maps/MAP.TABLES/JPN-EBCDIC-IBM78 create mode 100755 Ardent/UV/nls/maps/MAP.TABLES/JPN-EBCDIC-IBM78-SEC create mode 100755 Ardent/UV/nls/maps/MAP.TABLES/JPN-EBCDIC-IBM83 create mode 100755 Ardent/UV/nls/maps/MAP.TABLES/JPN-EBCDIC-IBM83-SEC create mode 100755 Ardent/UV/nls/maps/MAP.TABLES/JPN-EBCDIC-JEF78 create mode 100755 Ardent/UV/nls/maps/MAP.TABLES/JPN-EBCDIC-JEF78-SEC create mode 100755 Ardent/UV/nls/maps/MAP.TABLES/JPN-EBCDIC-JEF83 create mode 100755 Ardent/UV/nls/maps/MAP.TABLES/JPN-EBCDIC-JEF83-SEC create mode 100755 Ardent/UV/nls/maps/MAP.TABLES/JPN-EBCDIC-KEIS78 create mode 100755 Ardent/UV/nls/maps/MAP.TABLES/JPN-EBCDIC-KEIS78-SEC create mode 100755 Ardent/UV/nls/maps/MAP.TABLES/JPN-EBCDIC-KEIS83 create mode 100755 Ardent/UV/nls/maps/MAP.TABLES/JPN-EBCDIC-KEIS83-SEC create mode 100755 Ardent/UV/nls/maps/MAP.TABLES/JPN-EBCDIK create mode 100755 Ardent/UV/nls/maps/MAP.TABLES/JPN-EBCDIK-IBM78 create mode 100755 Ardent/UV/nls/maps/MAP.TABLES/JPN-EBCDIK-IBM78-SEC create mode 100755 Ardent/UV/nls/maps/MAP.TABLES/JPN-EBCDIK-IBM83 create mode 100755 Ardent/UV/nls/maps/MAP.TABLES/JPN-EBCDIK-IBM83-SEC create mode 100755 Ardent/UV/nls/maps/MAP.TABLES/JPN-EBCDIK-JEF78 create mode 100755 Ardent/UV/nls/maps/MAP.TABLES/JPN-EBCDIK-JEF78-SEC create mode 100755 Ardent/UV/nls/maps/MAP.TABLES/JPN-EBCDIK-JEF83 create mode 100755 Ardent/UV/nls/maps/MAP.TABLES/JPN-EBCDIK-JEF83-SEC create mode 100755 Ardent/UV/nls/maps/MAP.TABLES/JPN-EBCDIK-KEIS78 create mode 100755 Ardent/UV/nls/maps/MAP.TABLES/JPN-EBCDIK-KEIS78-SEC create mode 100755 Ardent/UV/nls/maps/MAP.TABLES/JPN-EBCDIK-KEIS83 create mode 100755 Ardent/UV/nls/maps/MAP.TABLES/JPN-EBCDIK-KEIS83-SEC create mode 100755 Ardent/UV/nls/maps/MAP.TABLES/JPN-EBCDIKC-CTRL create mode 100755 Ardent/UV/nls/maps/MAP.TABLES/JPN-EUC-KAT create mode 100755 Ardent/UV/nls/maps/MAP.TABLES/JPN-EUC-ONE create mode 100755 Ardent/UV/nls/maps/MAP.TABLES/JPN-EUC-RTE create mode 100755 Ardent/UV/nls/maps/MAP.TABLES/JPN-EUC-RTE+ create mode 100755 Ardent/UV/nls/maps/MAP.TABLES/JPN-EUC-TWO create mode 100755 Ardent/UV/nls/maps/MAP.TABLES/JPN-IBM78 create mode 100755 Ardent/UV/nls/maps/MAP.TABLES/JPN-IBM83 create mode 100755 Ardent/UV/nls/maps/MAP.TABLES/JPN-JEF78 create mode 100755 Ardent/UV/nls/maps/MAP.TABLES/JPN-JEF83 create mode 100755 Ardent/UV/nls/maps/MAP.TABLES/JPN-JIPSE create mode 100755 Ardent/UV/nls/maps/MAP.TABLES/JPN-JIPSJ create mode 100755 Ardent/UV/nls/maps/MAP.TABLES/JPN-JIS8 create mode 100755 Ardent/UV/nls/maps/MAP.TABLES/JPN-JIS8-JIPSJ create mode 100755 Ardent/UV/nls/maps/MAP.TABLES/JPN-JIS8-JIPSJ-SEC create mode 100755 Ardent/UV/nls/maps/MAP.TABLES/JPN-JIS8EUC-CTRL create mode 100755 Ardent/UV/nls/maps/MAP.TABLES/JPN-KEIS-RTE create mode 100755 Ardent/UV/nls/maps/MAP.TABLES/JPN-KEIS78 create mode 100755 Ardent/UV/nls/maps/MAP.TABLES/JPN-KEIS83 create mode 100755 Ardent/UV/nls/maps/MAP.TABLES/JPN-NEBCDIK create mode 100755 Ardent/UV/nls/maps/MAP.TABLES/JPN-NEBCDIK-JIPSE create mode 100755 Ardent/UV/nls/maps/MAP.TABLES/JPN-NEBCDIK-JIPSE-SEC create mode 100755 Ardent/UV/nls/maps/MAP.TABLES/JPN-SJIS create mode 100755 Ardent/UV/nls/maps/MAP.TABLES/KOI8-R create mode 100755 Ardent/UV/nls/maps/MAP.TABLES/KSC5601 create mode 100755 Ardent/UV/nls/maps/MAP.TABLES/KSC5601-1992 create mode 100755 Ardent/UV/nls/maps/MAP.TABLES/MAC-GREEK create mode 100755 Ardent/UV/nls/maps/MAP.TABLES/MAC-GREEK2 create mode 100755 Ardent/UV/nls/maps/MAP.TABLES/MAC-ROMAN create mode 100755 Ardent/UV/nls/maps/MAP.TABLES/MNEMONICS create mode 100755 Ardent/UV/nls/maps/MAP.TABLES/MS1250 create mode 100755 Ardent/UV/nls/maps/MAP.TABLES/MS1251 create mode 100755 Ardent/UV/nls/maps/MAP.TABLES/MS1252 create mode 100755 Ardent/UV/nls/maps/MAP.TABLES/MS1253 create mode 100755 Ardent/UV/nls/maps/MAP.TABLES/MS1254 create mode 100755 Ardent/UV/nls/maps/MAP.TABLES/MS1255 create mode 100755 Ardent/UV/nls/maps/MAP.TABLES/MS1256 create mode 100755 Ardent/UV/nls/maps/MAP.TABLES/MS125x-MARKS create mode 100755 Ardent/UV/nls/maps/MAP.TABLES/MS932 create mode 100755 Ardent/UV/nls/maps/MAP.TABLES/MS932-BASE create mode 100755 Ardent/UV/nls/maps/MAP.TABLES/MS932-EXTRA create mode 100755 Ardent/UV/nls/maps/MAP.TABLES/MS932-RTE create mode 100755 Ardent/UV/nls/maps/MAP.TABLES/MS936 create mode 100755 Ardent/UV/nls/maps/MAP.TABLES/MS936-BASE create mode 100755 Ardent/UV/nls/maps/MAP.TABLES/MS936-EXTRA create mode 100755 Ardent/UV/nls/maps/MAP.TABLES/MS949 create mode 100755 Ardent/UV/nls/maps/MAP.TABLES/MS949-EXTRA create mode 100755 Ardent/UV/nls/maps/MAP.TABLES/MS950 create mode 100755 Ardent/UV/nls/maps/MAP.TABLES/MS950-BASE create mode 100755 Ardent/UV/nls/maps/MAP.TABLES/MS950-EXTRA create mode 100755 Ardent/UV/nls/maps/MAP.TABLES/PC-CONTROLS create mode 100755 Ardent/UV/nls/maps/MAP.TABLES/PC1040 create mode 100755 Ardent/UV/nls/maps/MAP.TABLES/PC1041 create mode 100755 Ardent/UV/nls/maps/MAP.TABLES/PC437 create mode 100755 Ardent/UV/nls/maps/MAP.TABLES/PC850 create mode 100755 Ardent/UV/nls/maps/MAP.TABLES/PC852 create mode 100755 Ardent/UV/nls/maps/MAP.TABLES/PC855 create mode 100755 Ardent/UV/nls/maps/MAP.TABLES/PC857 create mode 100755 Ardent/UV/nls/maps/MAP.TABLES/PC860 create mode 100755 Ardent/UV/nls/maps/MAP.TABLES/PC861 create mode 100755 Ardent/UV/nls/maps/MAP.TABLES/PC863 create mode 100755 Ardent/UV/nls/maps/MAP.TABLES/PC864 create mode 100755 Ardent/UV/nls/maps/MAP.TABLES/PC865 create mode 100755 Ardent/UV/nls/maps/MAP.TABLES/PC866 create mode 100755 Ardent/UV/nls/maps/MAP.TABLES/PC869 create mode 100755 Ardent/UV/nls/maps/MAP.TABLES/PC874 create mode 100755 Ardent/UV/nls/maps/MAP.TABLES/PIECS create mode 100755 Ardent/UV/nls/maps/MAP.TABLES/PIECS-EXT create mode 100755 Ardent/UV/nls/maps/MAP.TABLES/PJISX0208 create mode 100755 Ardent/UV/nls/maps/MAP.TABLES/SJISX0208 create mode 100755 Ardent/UV/nls/maps/MAP.TABLES/TIS620-A create mode 100755 Ardent/UV/nls/maps/MAP.TABLES/TIS620-B create mode 100755 Ardent/UV/nls/maps/MAP.TABLES/TJISX0208 create mode 100755 Ardent/UV/nls/maps/MAP.TABLES/UV-MARKS create mode 100755 Ardent/UV/nls/maps/install/.uvnlsmap create mode 100755 Ardent/UV/nls/maps/install/ASCII create mode 100755 Ardent/UV/nls/maps/install/ISO8859-1 create mode 100755 Ardent/UV/nls/maps/install/ISO8859-1+MARKS create mode 100755 Ardent/UV/nls/maps/install/MNEMONICS create mode 100755 Ardent/UV/nls/maps/install/PC850 create mode 100755 Ardent/UV/nls/uvhome/DATA.TYPES create mode 100755 Ardent/UV/nls/uvhome/MENU.FILE create mode 100755 Ardent/UV/nls/uvhome/NEWACC create mode 100755 Ardent/UV/nls/uvhome/REVISE.PROCS create mode 100755 Ardent/UV/nls/uvhome/SYS.MESSAGE create mode 100755 Ardent/UV/nls/uvhome/UV.VOC create mode 100755 Ardent/UV/readme.txt create mode 100755 Ardent/UV/sample/&DEVICE& create mode 100755 Ardent/UV/sample/&PARTFILES& create mode 100755 Ardent/UV/sample/.Type1 create mode 100755 Ardent/UV/sample/DEMO.ALTAB create mode 100755 Ardent/UV/sample/DEMO.MKTAB create mode 100755 Ardent/UV/sample/DEMO.NAMES create mode 100755 Ardent/UV/sample/DEMO.RMTAB create mode 100755 Ardent/UV/sample/D_INIT.CUST create mode 100755 Ardent/UV/sample/D_INIT.INVN create mode 100755 Ardent/UV/sample/D_INIT.ORDR create mode 100755 Ardent/UV/sample/D_PARTFILES create mode 100755 Ardent/UV/sample/INIT.CUST create mode 100755 Ardent/UV/sample/INIT.INVN create mode 100755 Ardent/UV/sample/INIT.ORDR create mode 100755 Ardent/UV/sample/LOGIN create mode 100755 Ardent/UV/sample/NLSHKtmplt.c create mode 100755 Ardent/UV/sample/PARTFILES create mode 100755 Ardent/UV/sample/TRIGSAMPLE create mode 100755 Ardent/UV/sample/UV.ACCOUNT create mode 100755 Ardent/UV/sample/UV.FLAVOR create mode 100755 Ardent/UV/sample/demo.act.t.u create mode 100755 Ardent/UV/sample/demo.con.t.u create mode 100755 Ardent/UV/sample/demo.d_act.f.u create mode 100755 Ardent/UV/sample/demo.d_con.f.u create mode 100755 Ardent/UV/sample/demo.d_eng.f.u create mode 100755 Ardent/UV/sample/demo.d_equ.f.u create mode 100755 Ardent/UV/sample/demo.d_inv.f.u create mode 100755 Ardent/UV/sample/demo.d_liv.f.u create mode 100755 Ardent/UV/sample/demo.d_loc.f.u create mode 100755 Ardent/UV/sample/demo.d_per.f.u create mode 100755 Ardent/UV/sample/demo.d_rid.f.u create mode 100755 Ardent/UV/sample/demo.d_ven.f.u create mode 100755 Ardent/UV/sample/demo.eng.f.u create mode 100755 Ardent/UV/sample/demo.eng.t.u create mode 100755 Ardent/UV/sample/demo.equ.t.u create mode 100755 Ardent/UV/sample/demo.inv.t.u create mode 100755 Ardent/UV/sample/demo.liv.t.u create mode 100755 Ardent/UV/sample/demo.loc.t.u create mode 100755 Ardent/UV/sample/demo.per.t.u create mode 100755 Ardent/UV/sample/demo.rid.t.u create mode 100755 Ardent/UV/sample/demo.ven.t.u create mode 100755 Ardent/UV/sample/rmv.lbl.c create mode 100755 Ardent/UV/sample/tapetest.c create mode 100755 Ardent/UV/sample/terminfo.src create mode 100755 Ardent/UV/sample/uvdr.config create mode 100755 Ardent/UV/sample/uvodbc.config create mode 100755 Ardent/UV/src.u/catalog.u create mode 100755 Ardent/UV/src.u/d_filestat.u create mode 100755 Ardent/UV/src.u/d_uv.access.u create mode 100755 Ardent/UV/src.u/d_uv.logins.u create mode 100755 Ardent/UV/src.u/d_uv.trans.u create mode 100755 Ardent/UV/src.u/d_uv_logs.u create mode 100755 Ardent/UV/src.u/d_uv_udrpub.u create mode 100755 Ardent/UV/src.u/d_uv_udrsub.u create mode 100755 Ardent/UV/src.u/d_uv_udrsys.u create mode 100755 Ardent/UV/src.u/uv.access.u create mode 100755 Ardent/UV/terminfo/1/1 create mode 100755 Ardent/UV/terminfo/1/10 create mode 100755 Ardent/UV/terminfo/2/2 create mode 100755 Ardent/UV/terminfo/3/3 create mode 100755 Ardent/UV/terminfo/3/386at-uv create mode 100755 Ardent/UV/terminfo/4/4 create mode 100755 Ardent/UV/terminfo/4/4410 create mode 100755 Ardent/UV/terminfo/5/5 create mode 100755 Ardent/UV/terminfo/6/6 create mode 100755 Ardent/UV/terminfo/7/7 create mode 100755 Ardent/UV/terminfo/8/8 create mode 100755 Ardent/UV/terminfo/9/9 create mode 100755 Ardent/UV/terminfo/9/97801-UV create mode 100755 Ardent/UV/terminfo/9/97808-uv create mode 100755 Ardent/UV/terminfo/M/M= create mode 100755 Ardent/UV/terminfo/M/Mu create mode 100755 Ardent/UV/terminfo/M/mic5510 create mode 100755 Ardent/UV/terminfo/a/a210 create mode 100755 Ardent/UV/terminfo/a/a210-adm5 create mode 100755 Ardent/UV/terminfo/a/a210-hz1410 create mode 100755 Ardent/UV/terminfo/a/a210-hz1500 create mode 100755 Ardent/UV/terminfo/a/a210-qt102 create mode 100755 Ardent/UV/terminfo/a/a210-regent25 create mode 100755 Ardent/UV/terminfo/a/a210-tvi910 create mode 100755 Ardent/UV/terminfo/a/a210-tvi910+ create mode 100755 Ardent/UV/terminfo/a/a210-tvi920 create mode 100755 Ardent/UV/terminfo/a/a210-tvi925 create mode 100755 Ardent/UV/terminfo/a/a210-vp create mode 100755 Ardent/UV/terminfo/a/adm5 create mode 100755 Ardent/UV/terminfo/a/aixterm create mode 100755 Ardent/UV/terminfo/a/aixterm-m create mode 100755 Ardent/UV/terminfo/a/ansi create mode 100755 Ardent/UV/terminfo/a/ansi-uv create mode 100755 Ardent/UV/terminfo/a/at create mode 100755 Ardent/UV/terminfo/a/at386 create mode 100755 Ardent/UV/terminfo/a/at386-m create mode 100755 Ardent/UV/terminfo/a/at386-uv create mode 100755 Ardent/UV/terminfo/a/att3b1 create mode 100755 Ardent/UV/terminfo/a/att4410 create mode 100755 Ardent/UV/terminfo/a/av create mode 100755 Ardent/UV/terminfo/c/console create mode 100755 Ardent/UV/terminfo/d/dialup create mode 100755 Ardent/UV/terminfo/d/dumb create mode 100755 Ardent/UV/terminfo/f/fenix create mode 100755 Ardent/UV/terminfo/f/fox create mode 100755 Ardent/UV/terminfo/f/fr200 create mode 100755 Ardent/UV/terminfo/g/gt create mode 100755 Ardent/UV/terminfo/h/hft create mode 100755 Ardent/UV/terminfo/h/hft-c create mode 100755 Ardent/UV/terminfo/h/hft-m create mode 100755 Ardent/UV/terminfo/h/hp create mode 100755 Ardent/UV/terminfo/h/hz1410 create mode 100755 Ardent/UV/terminfo/h/hz1500 create mode 100755 Ardent/UV/terminfo/i/IN create mode 100755 Ardent/UV/terminfo/i/ibm3151 create mode 100755 Ardent/UV/terminfo/i/ibm5151 create mode 100755 Ardent/UV/terminfo/i/ibmpc create mode 100755 Ardent/UV/terminfo/i/icl6404 create mode 100755 Ardent/UV/terminfo/i/in9400-uv create mode 100755 Ardent/UV/terminfo/i/in9400-uv-j create mode 100755 Ardent/UV/terminfo/index create mode 100755 Ardent/UV/terminfo/n/network create mode 100755 Ardent/UV/terminfo/n/ntbuild create mode 100755 Ardent/UV/terminfo/o/owl create mode 100755 Ardent/UV/terminfo/p/paper create mode 100755 Ardent/UV/terminfo/p/pc386-uv create mode 100755 Ardent/UV/terminfo/p/pc7300 create mode 100755 Ardent/UV/terminfo/p/performer create mode 100755 Ardent/UV/terminfo/p/pst100 create mode 100755 Ardent/UV/terminfo/p/pt create mode 100755 Ardent/UV/terminfo/p/pt200 create mode 100755 Ardent/UV/terminfo/p/pt200c create mode 100755 Ardent/UV/terminfo/p/pt25 create mode 100755 Ardent/UV/terminfo/p/pt250 create mode 100755 Ardent/UV/terminfo/p/pt45 create mode 100755 Ardent/UV/terminfo/q/qt102 create mode 100755 Ardent/UV/terminfo/r/regent20 create mode 100755 Ardent/UV/terminfo/r/regent25 create mode 100755 Ardent/UV/terminfo/r/regent40 create mode 100755 Ardent/UV/terminfo/r/regent60 create mode 100755 Ardent/UV/terminfo/s/s4 create mode 100755 Ardent/UV/terminfo/s/sun create mode 100755 Ardent/UV/terminfo/s/sun-cmd create mode 100755 Ardent/UV/terminfo/s/sun-w create mode 100755 Ardent/UV/terminfo/t/tab15 create mode 100755 Ardent/UV/terminfo/t/terminal_1 create mode 100755 Ardent/UV/terminfo/t/terminal_10 create mode 100755 Ardent/UV/terminfo/t/terminal_2 create mode 100755 Ardent/UV/terminfo/t/terminal_3 create mode 100755 Ardent/UV/terminfo/t/terminal_4 create mode 100755 Ardent/UV/terminfo/t/terminal_5 create mode 100755 Ardent/UV/terminfo/t/terminal_6 create mode 100755 Ardent/UV/terminfo/t/terminal_7 create mode 100755 Ardent/UV/terminfo/t/terminal_8 create mode 100755 Ardent/UV/terminfo/t/terminal_9 create mode 100755 Ardent/UV/terminfo/t/tk4105 create mode 100755 Ardent/UV/terminfo/t/tv924 create mode 100755 Ardent/UV/terminfo/t/tv925 create mode 100755 Ardent/UV/terminfo/t/tv950 create mode 100755 Ardent/UV/terminfo/t/tv970 create mode 100755 Ardent/UV/terminfo/t/tvi910 create mode 100755 Ardent/UV/terminfo/t/tvi910+ create mode 100755 Ardent/UV/terminfo/t/tvi920 create mode 100755 Ardent/UV/terminfo/t/tvi925 create mode 100755 Ardent/UV/terminfo/t/tvi955 create mode 100755 Ardent/UV/terminfo/u/ult3151 create mode 100755 Ardent/UV/terminfo/u/ult50 create mode 100755 Ardent/UV/terminfo/u/ult50-vp create mode 100755 Ardent/UV/terminfo/u/unixpc create mode 100755 Ardent/UV/terminfo/u/unknown create mode 100755 Ardent/UV/terminfo/u/uviterm create mode 100755 Ardent/UV/terminfo/u/uviterm-v create mode 100755 Ardent/UV/terminfo/u/uviterm-vw create mode 100755 Ardent/UV/terminfo/u/uviterm-w create mode 100755 Ardent/UV/terminfo/u/uviterms create mode 100755 Ardent/UV/terminfo/u/uviterms-v create mode 100755 Ardent/UV/terminfo/u/uviterms-vw create mode 100755 Ardent/UV/terminfo/u/uviterms-w create mode 100755 Ardent/UV/terminfo/u/uvxterm create mode 100755 Ardent/UV/terminfo/u/uvxterm-v create mode 100755 Ardent/UV/terminfo/u/uvxterm-vw create mode 100755 Ardent/UV/terminfo/u/uvxterm-w create mode 100755 Ardent/UV/terminfo/u/uvxterms create mode 100755 Ardent/UV/terminfo/u/uvxterms-v create mode 100755 Ardent/UV/terminfo/u/uvxterms-vw create mode 100755 Ardent/UV/terminfo/u/uvxterms-w create mode 100755 Ardent/UV/terminfo/v/viewpoint create mode 100755 Ardent/UV/terminfo/v/viewpoint60 create mode 100755 Ardent/UV/terminfo/v/vp create mode 100755 Ardent/UV/terminfo/v/vp60 create mode 100755 Ardent/UV/terminfo/v/vp60-regent40 create mode 100755 Ardent/UV/terminfo/v/vp90 create mode 100755 Ardent/UV/terminfo/v/vt100 create mode 100755 Ardent/UV/terminfo/v/vt100-am create mode 100755 Ardent/UV/terminfo/v/vt100-uv create mode 100755 Ardent/UV/terminfo/v/vt100ssg-uv create mode 100755 Ardent/UV/terminfo/v/vt200 create mode 100755 Ardent/UV/terminfo/v/vt220 create mode 100755 Ardent/UV/terminfo/v/vt300 create mode 100755 Ardent/UV/terminfo/v/vt52 create mode 100755 Ardent/UV/terminfo/v/vwpt create mode 100755 Ardent/UV/terminfo/v/vwpt60 create mode 100755 Ardent/UV/terminfo/w/wy200 create mode 100755 Ardent/UV/terminfo/w/wy200-w create mode 100755 Ardent/UV/terminfo/w/wy50 create mode 100755 Ardent/UV/terminfo/w/wy50-hz1500 create mode 100755 Ardent/UV/terminfo/w/wy50-tvi910 create mode 100755 Ardent/UV/terminfo/w/wy50-tvi920 create mode 100755 Ardent/UV/terminfo/w/wy50-tvi925 create mode 100755 Ardent/UV/terminfo/w/wy50-vp create mode 100755 Ardent/UV/terminfo/w/wy60 create mode 100755 Ardent/UV/terminfo/w/wy99gt create mode 100755 Ardent/UV/uvconfig create mode 100755 Ardent/UV/uvdlockd.config create mode 100755 Ardent/UV/uvdlockd.log create mode 100755 Ardent/UV/uvdr.config create mode 100755 Ardent/UV/uvodbc.config create mode 100755 Ardent/UV/uvodbc/getinfo.hss create mode 100755 Ardent/UV/uvodbc/synodbc.hss create mode 100755 Ardent/UV/uvodbc/typeinfo.hss create mode 100755 Ardent/unishared/sharedby create mode 100755 Ardent/unishared/unirpc/unirpc32.dll.bak create mode 100755 Ardent/unishared/unirpc/unirpcd.exe create mode 100755 Ardent/unishared/unirpc/unirpcservices create mode 100755 Ardent/unishared/unirpc/version create mode 100755 Ardent/unishared/version diff --git a/Ardent/UV/&DEVICE& b/Ardent/UV/&DEVICE& new file mode 100755 index 0000000000000000000000000000000000000000..3e1e7607b0932d73d093bb6dad1484f6ed10335b GIT binary patch literal 8192 zcmd;Ke7}Z?0RotT6bqC+N{yTl=$gIPeB}6c)Tg5%Fd71*Aut*O@DShtv0$wLxacTj zGz3ONU^E0qLtr!nMnhnjhJc9x1A__JZvqG0TnzrZWfm2eD5T}&7Zg+~q!eYAr7CDR zT50}^iP4L3wEAaiVDQfkr2LFHh#YM*fI?vujE2By2#kinXb6mkz)%YT9SH^o9k8Pf z4mkV!8bTWY$@#gt#R>)aMJ4}0qW}K+GcbUr2NE0zw?N1oQso?;hvvVdnN&hvs?X_4V)U%Mlp1eaT5H zDFFfm2z&z5J$2t|AV7cs0RjX91oVHvkwqjxfB*pkML_=-5Gw%!1PBla5YYbtM;4I) u0RjXF6aoETK&%7^5FkJxKtTTo99cvH1PBlyPz3aU0kIMwK!5;&e+!&%Cj-X- literal 0 HcmV?d00001 diff --git a/Ardent/UV/&PARTFILES& b/Ardent/UV/&PARTFILES& new file mode 100755 index 0000000000000000000000000000000000000000..ab979a4132a91be1f8c2cc2d084111d0f217aee3 GIT binary patch literal 16384 zcmeIzu?>Vk34molDLRcO2}mJGSX_zv2A)XZGa? zEbBh!q?MEa0RjY?z<5pHwi*Z!AV7csfdB#hA8=$52@oJafItz@{{_TKfB*pk1Of!~ zf54GNBtU=w0Rlxp{}&J|0RjXF5C{;^{{cr9kpKY#1PBxX{a-+=1PBlyK;Yd1e+@?j ABme*a literal 0 HcmV?d00001 diff --git a/Ardent/UV/&SAVEDLISTS&/&&S.TLDM%BFANNIE.266 b/Ardent/UV/&SAVEDLISTS&/&&S.TLDM%BFANNIE.266 new file mode 100755 index 00000000..e8bd4d6d --- /dev/null +++ b/Ardent/UV/&SAVEDLISTS&/&&S.TLDM%BFANNIE.266 @@ -0,0 +1,10 @@ +LOGIN +CMS +cms +MASTER +CMS +WHO +LOGTO UV +LOGIN +ED UV.ACCOUNT CMS +OFF diff --git a/Ardent/UV/&SAVEDLISTS&/&&S.TLDM%BGAIL.203 b/Ardent/UV/&SAVEDLISTS&/&&S.TLDM%BGAIL.203 new file mode 100755 index 00000000..9d3e0309 --- /dev/null +++ b/Ardent/UV/&SAVEDLISTS&/&&S.TLDM%BGAIL.203 @@ -0,0 +1,6 @@ +LOGIN +CMS +LOGTO UV +LOGIN +ED BP R8 +ED BP.MASTER R8 diff --git a/Ardent/UV/&SAVEDLISTS&/&&S.TLDM%BGARYW.178 b/Ardent/UV/&SAVEDLISTS&/&&S.TLDM%BGARYW.178 new file mode 100755 index 00000000..29b4059d --- /dev/null +++ b/Ardent/UV/&SAVEDLISTS&/&&S.TLDM%BGARYW.178 @@ -0,0 +1,6 @@ +LOGIN +WHO +2 +WHO +DIR +DIR diff --git a/Ardent/UV/&SAVEDLISTS&/&&S.TLDM%BGARYW.281 b/Ardent/UV/&SAVEDLISTS&/&&S.TLDM%BGARYW.281 new file mode 100755 index 00000000..f2857d23 --- /dev/null +++ b/Ardent/UV/&SAVEDLISTS&/&&S.TLDM%BGARYW.281 @@ -0,0 +1,10 @@ +LOGIN +CMS +MSD.STATE.SALES +WHO +LOGTO UV +LOGIN +WHO +CO MSD.STATE.SALES +WHO +OFF diff --git a/Ardent/UV/&SAVEDLISTS&/&&S.TLDM%BGARYW.285 b/Ardent/UV/&SAVEDLISTS&/&&S.TLDM%BGARYW.285 new file mode 100755 index 00000000..306b9df5 --- /dev/null +++ b/Ardent/UV/&SAVEDLISTS&/&&S.TLDM%BGARYW.285 @@ -0,0 +1,4 @@ +LOGIN +M +1 +OFF diff --git a/Ardent/UV/&SAVEDLISTS&/&&S.TLDM%Bgary.229 b/Ardent/UV/&SAVEDLISTS&/&&S.TLDM%Bgary.229 new file mode 100755 index 00000000..fad9001b --- /dev/null +++ b/Ardent/UV/&SAVEDLISTS&/&&S.TLDM%Bgary.229 @@ -0,0 +1,14 @@ +LOGIN +SET.FILE MASTER CM.XREF CM.XREF +ED CM.XREF gary +ED VOC CM +ed cm 35721 +ED CM 35721 +ED CM 32046 +dos +PTERM CASE NOINVERT +WHO +ED CM.XREF GARYW +ED CM.XREF FANNIE +ED CM 31234 +OFF diff --git a/Ardent/UV/&SAVEDLISTS&/&&S.TLDM%Bkconners.202 b/Ardent/UV/&SAVEDLISTS&/&&S.TLDM%Bkconners.202 new file mode 100755 index 00000000..039ec0c5 --- /dev/null +++ b/Ardent/UV/&SAVEDLISTS&/&&S.TLDM%Bkconners.202 @@ -0,0 +1,3 @@ +LOGIN +WHO +OFF diff --git a/Ardent/UV/&SAVEDLISTS&/&&S.TLDM%Bkconners.235 b/Ardent/UV/&SAVEDLISTS&/&&S.TLDM%Bkconners.235 new file mode 100755 index 00000000..e19c2fe5 --- /dev/null +++ b/Ardent/UV/&SAVEDLISTS&/&&S.TLDM%Bkconners.235 @@ -0,0 +1,57 @@ +LOGIN +CMS +COPY BP.MASTER CMSD.CLOSE.ORDERS +ED BP.MASTER CMSD.CLOSE.ORDERS +LOGTO UV +LOGIN +CO CMSD.CLOSE.ORDERS +LOGTO CMS +CMS +M +ED PM.ORDERS 200140 +ED RINDEX 200140 +ED CINDEX 200140 +ED PINDEX +ED VOC PINDEX +ED PINDEX +M +ED RINDEX 200142 +ED CINDEX 200142 +ED PINDEX 200142 +M +ED RINDEX 200144 +ED BINDEX 200144 +ED VOC BINDEX +ED BINDEX 200144 +SELECT VOC WITH @ID "PM.ORDERS.INDEX]" +LIST VOC +ED VOC BINDEX +ED BINDEX +ED CINDEX +ED PM.ORDERS 200144 +M +ED RINDEX 200142 +ED BINDEX 200144 +ED RINDEX 200140 +ED RINDEX 200142 +ED RINDEX 200143 +ED RINDEX 200141 +ED CINDEX 200141 +SEARCH BM +m +LIST PM.LABELS.HOLD RUN +SELECT PM.LABELS.HOLD WITH RUN "5049" +ED PM.LABELS.HOLD +M +ED BM TLD.PICKING.PRINT +ED BM CMSD.PICKING.PRT.CONTROL +ED BM TLD.PICKING.PRINT +ED C +ED BC +CO TLD.PICKING.PRINT +ED BM CMSD.PICKING +LOGTO U +LOGTO UV +LOGIN +CO CMSD.PICKING +OFF diff --git a/Ardent/UV/&SAVEDLISTS&/&&S.TLDM%Bmconners.180 b/Ardent/UV/&SAVEDLISTS&/&&S.TLDM%Bmconners.180 new file mode 100755 index 00000000..b13e9727 --- /dev/null +++ b/Ardent/UV/&SAVEDLISTS&/&&S.TLDM%Bmconners.180 @@ -0,0 +1,4 @@ +LOGIN +who +LIST ONLY UV.ACCOUNT +OFF diff --git a/Ardent/UV/&SAVEDLISTS&/&&S.TLDM%Bmconners.185 b/Ardent/UV/&SAVEDLISTS&/&&S.TLDM%Bmconners.185 new file mode 100755 index 00000000..2df8a9ee --- /dev/null +++ b/Ardent/UV/&SAVEDLISTS&/&&S.TLDM%Bmconners.185 @@ -0,0 +1,33 @@ +LOGIN +CMS +MASTER +LOGTO CMS +CMS +LOGTO MASTER +MASTER +ED UV.ACCOUNT +ED UV.ACCOUNT cms +who +LOGTO UV +LOGIN +ED PL +ED VOC PL.MASTER +COPY PL.MASTER KILL.USERS +LOGTO MASTER +MASTER +ED VOC UV.VOC +COPY PL KILL.USERS +ED PL KILL.USERS +ED PL KILL.USER +WHO +ED PL KILL.USERS +WHO +LOGTO UV +LOGIN +LISTU +ED BP.MASTER CMS.LOGTO +ED BP.MASTER CMS.LOGON +WHO +LISTU +LOGOUT 250 +LOGOUT 185 diff --git a/Ardent/UV/&SAVEDLISTS&/&&S.TLDM%Bmconners.207 b/Ardent/UV/&SAVEDLISTS&/&&S.TLDM%Bmconners.207 new file mode 100755 index 00000000..37c59759 --- /dev/null +++ b/Ardent/UV/&SAVEDLISTS&/&&S.TLDM%Bmconners.207 @@ -0,0 +1,17 @@ +LOGIN +logto cms +cms +FILE.INFO +OFF +MASTER +LOGTO CMS +CMS +COUNT INV.JOURNAL +OFF +MASTER +LISTU +WHO +LOGTO UV +LOGIN +LISTU +OFF diff --git a/Ardent/UV/&SAVEDLISTS&/&&S.TLDM%Bmconners.254 b/Ardent/UV/&SAVEDLISTS&/&&S.TLDM%Bmconners.254 new file mode 100755 index 00000000..8d6d8809 --- /dev/null +++ b/Ardent/UV/&SAVEDLISTS&/&&S.TLDM%Bmconners.254 @@ -0,0 +1,19 @@ +LOGIN +logto UV +LOGIN +ED BP R8 +ED BP.MASTER R8 +LISTU +KILL 250 +HELP KILL +LISTU +KILL.USERS +LOGTO MASTER +MASTER +CO KILL.USERS +EX KILL.USERS +LOGTO MASTER +MASTER +LOGTO UV +LOGIN +LISTU diff --git a/Ardent/UV/&SAVEDLISTS&/.Type1 b/Ardent/UV/&SAVEDLISTS&/.Type1 new file mode 100755 index 00000000..e69de29b diff --git a/Ardent/UV/.uvconfig b/Ardent/UV/.uvconfig new file mode 100755 index 0000000000000000000000000000000000000000..1cb814954494e95713614d1cbb329ed90512939d GIT binary patch literal 4096 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 literal 0 HcmV?d00001 diff --git a/Ardent/UV/APP.PROGS.O/.Type1 b/Ardent/UV/APP.PROGS.O/.Type1 new file mode 100755 index 00000000..e69de29b diff --git a/Ardent/UV/APP.PROGS.O/0114 b/Ardent/UV/APP.PROGS.O/0114 new file mode 100755 index 0000000000000000000000000000000000000000..97204886f27ffc9de014e1017525f143bbffdf65 GIT binary patch literal 1102 zcmZ{jJx`QD6ot?1?7J-N3(LZ)e94#W0)l|6Hg;Osnh*;^0f~i$p*9p&mKMffVoXe| zh%x>ODhgvLEr^MUKfn?b3ZFB)3lzGWIWzanx%b?eo&EWx@itRKRYm!;$oCH4oOy1f zDbvr=j?~Ni@Po7t=kc%40_0dJSI}Unsb2$up(E8)*Pv#@0NBtT@sNgz8(>pEN;v60 z;~2iCP4X|%L#`4`u0HTG{$59|m+V~D0r))S)KP4NO}Hx>L6hmp**a(Sh>SAI1AV%n ze^9F6RMsfpyy#*rNFPx0Uvt+s3m^?mRe;&Zp|RaOS4AVVi}c^pu`_ek(^&+UqNvZ)t(t9HlcR z3!iuY(Oa{K#`ATYXG05IqPL|~uj^62;IYlRUTA(%*WTZ`%_C|o!|yTQ&|M}&*KiDkwi@1XV3F<<|2J&|Cqk3$)T#dWK|g3=xasKuCZU7)w6p)e^VLt z&)?KZs(1PZH^N5H*3P}h{e9DaB1ybO16QYL$Pg>@PJHE+pJirEd;?gKASNowtl%b2 z`K;27Qk@>6tZML|GfsQe2PD0-(;|7)yq6pL4Ff=Y4J3u#(!%AldN*?UL???u?==iV OKup}QL;rc>2=EuY;c0jP literal 0 HcmV?d00001 diff --git a/Ardent/UV/APP.PROGS.O/0190 b/Ardent/UV/APP.PROGS.O/0190 new file mode 100755 index 0000000000000000000000000000000000000000..f4c08000556b2cdeadfa9570e09eb2a91e0b6398 GIT binary patch literal 861 zcmZvbF>ez=5QX3F-8r_;nD`POAto0LPB=(}sA(V)1p*-<#iEET6bUK{;AijyOhZLQ zMd@GQijsobf}X-?CuUt#4&l`ihuFyZHl7kn%r$^|{w4p?EJqb7i z&#)LxgIZr}VSSa@RL6b6H|X)x=kPyZF%@HV+*~JN-C&(->WsNf+-5ys|Ag!SZ#zrB zv8nsZT{44d26StJuIW3O9W)!@9TmDytzb1*;cA`r%tG&?((R(lbUoyEi9>V+KGP}t z_H~1|rI!~tp?Z_MXpwnK9I;;bLhsqbrhH92qiXxUsc;6K@H-fPui}5M_|p~6rxk6@ z->>*1^h_&Wx*a$rG39(| zb=H*gw^?;pX1;@d;Y&SahI`J@>)&|}s+!GvccnIQ6Q>8G literal 0 HcmV?d00001 diff --git a/Ardent/UV/APP.PROGS.O/0192 b/Ardent/UV/APP.PROGS.O/0192 new file mode 100755 index 0000000000000000000000000000000000000000..1b2d1c7d2d4ee78ee898306e85fc35ae1b0320ea GIT binary patch literal 2054 zcma)7&r@4v6g^*F9+dO}2~dcwZC{^=ltPmL@duJ1A;E+~0*@36#sXD#8k~;)2OY<8 z;lj}w7tXkG+3C1&Tz9&1=^x-Qb;fbwDoa-Cxi{~HEEva^`EKsJ_uTW{d%l;K-ybKw zv5~+SE9!~KRB5Ezhq8QiM z%di=nKo9mz61_zHWFp+%F)dmTuV4~AW)e3sg_8)kLqqn{oX1#`>lUV&n`Z7Ym*i&n znZ|Rj+ek5&V*H1$TpEu|8W}9WqP6ghxy3Ht6nRsaW$q-BVJ>RUcr)b9kav!`Ip+TE z;+@A=#>PCd%A8eZ;cc>~SA&Xia>>50aplc3-B@-W^vD*(ml*kTdLlVKK^JiiMV_&P z%eX@SI<7J%d``gEeFizsnnQ{Ggwq!oDPR?E!!t{?Wp-Lt{kkVa*K$X}ku`TKx>Q*DFrl?ISvWYF7U`rSxxq$Rp22m5f!Y z=yNuov;D~2DR&5Q@;e>u^cnw;KI7V9yn{`gGfP4-2_(%RCmO;p@S=QfO%!$RvcOow ztePRjG0a>($lc}rj^@I%Ut`y6ovvN}rjllx>Wr`oc&K#|yu*m_jqn|IiJ310zI)_a zV60&d829+TnZPa;*;PgM$i0Vm(V!v?v{)mk_Y^g%{*3x#^oRLwl=}M^GWRixeLeks zJ$?4XzD|j8@stcs7tcQN4$%jSKM3&i#0zIa`5T&R1iAKmqnDZXN%_is6G^@s<+msA zR#E4W{rH@~$Ae%3;1RL6jZvmA=%>{`iS)4MTi(x_32M%YqJE7AbIs>62O=@kNj`a^OyN{kNP1?#Q#kLgMQe^8? z-+yKh6AZb+=7SCe=D0+2BE8~^|S literal 0 HcmV?d00001 diff --git a/Ardent/UV/APP.PROGS.O/0196 b/Ardent/UV/APP.PROGS.O/0196 new file mode 100755 index 0000000000000000000000000000000000000000..34f9e53860ddd5978491463b4d37bd9b28dd7681 GIT binary patch literal 176 zcmaF3MsO-CgCGL~0}Bu{Ft7q47Z8GI6$udrJ)oFASOz4=z~FU~fuRXVgD^Ir0Tlef zz|6qNU;|Xo2BbkOb~uXz%KE{;$-u-A!x+QJ@UQOgA4W!?J}?FmOdt-3!3<-790%es F006S!42l2% literal 0 HcmV?d00001 diff --git a/Ardent/UV/APP.PROGS.O/01A2 b/Ardent/UV/APP.PROGS.O/01A2 new file mode 100755 index 0000000000000000000000000000000000000000..0f730a8115e3d71e6ad6942b5f8c601c23fffa8b GIT binary patch literal 273 zcmZvWF$%&!5JmrHvx!C2#6+>QNZ|pjJcxxvu(9=~K z73&&hn&Eq^r&6uvfp_6g964EO%~WYfI(#|*JAxP{?LcO{H(@Td#pB(#s0zE^yDh#2 YXiQ@?u@|T{6cdV{K7@nFdC7YA1p{Cl00000 literal 0 HcmV?d00001 diff --git a/Ardent/UV/APP.PROGS.O/01A6 b/Ardent/UV/APP.PROGS.O/01A6 new file mode 100755 index 0000000000000000000000000000000000000000..86a5590bcb6d36c0f995400be9f81740cfc4f944 GIT binary patch literal 1563 zcma)6OHUI~6#k}VS{{{Wd8yTbQfQ^L1wkw#SXvhlCB_g!3=0RCNF%g5Ee6!3x+3mO zT)H+abfG_>Kg3`{Paqor#GRck`=lHpqb3Gc+j22daBI=OVnv$Q* z0ipxMj&pB@{+;Nx5WPg$5ewXZR@MuRSgj2Elvs(~SBhOY<{zMc06{X_(L=O^ zZ~^`3R(dJJ%p#0A$KU*FOVK@wjS3SLMlA+7%Na$89-xe3*AZoo-ZFgDsv=reg-4M( z3e5Eg9W7-OV<%(e9c2Ac${}VmMBiERNnIEJQP&WehIo#{^dF}GHvNydk1Q{!%bjwu z_vQT?#&=@c_>Iti1eY*MhEe>Wzg_DneMWJaUmQCeWBgaVRO0lDW3QOkm116U!gbaO zA3vu!IpS8FamE?PRZI{+fgsOPFy0E731TKJ%p@_BxP}BV3EU-ShPR`WdW1bmoTw>5 z?*yihq<50Nkb0%#G8d>zKRwE>!^Qbcaj%|h;d1b{E-DCy!hPMrp6S`t^zG}(xp3%~ znVmPxB`vp=$?Kb%VVYTUOj}Rqa_P)HZFwzg%@1_b$mCazTsjx2j4(Fyrk*jf8@Y<0 z?!L;flYt&?Wb=AHoy}Zhn)K`q<^t!&LWj5BA3^Ov7 z?030Yw{t}VFC$-yqEOW0!ugv&_6WS=ViFJOn<|T{8VX^s%#C8^b$}}VmPuY8wMsPU zd9!FjqY8sELXnb%P;GIjC921w$-}Ek1hrN~od}PJQzGQR)CLNR=ZR=m0@i~kjPJxG qA)QuEEnF#*%6nN1QheZ0y`qWxzG$r?UqoxSwXdReQ2YTJMbxGM literal 0 HcmV?d00001 diff --git a/Ardent/UV/APP.PROGS.O/01AD b/Ardent/UV/APP.PROGS.O/01AD new file mode 100755 index 0000000000000000000000000000000000000000..0bc6225f1cefc8fa54009b36d4f27d75b54e1daf GIT binary patch literal 1181 zcmZvcO-~b16o%j1>9o)(D3p(aSSx~j6cI|Rgt$Qk(;&{UghJd?x>U7IC)Zh%f4?yQDxVeR3(*Q)CM7G-ydzlvSF#qZ-$Q z#)xuYMV;ZbeMX1KRhXSr3G_MA)is5lQKq}Jj_|$k{#pFJoSD9yWpee9Y#(yt0vYH- z=0Lj0po%V}PEN=ALY=nTcR6L~Ji;UW@U`dRby9=qo6O{lIa>cE`Y-9G7Qhw^bJ9J| zzesGP6Ie^0TV@~NBnRM0?2;$Zn8q;U?Extg6*gTKDJ&rx@Z99|Yyq#1`_2SOqbz|1gShoxbe=X*p!#`oZ zd9oB(lX*PDe}=!ntSX$h!s*tjvks?9XH|M>!r6keg4iA*NBF=06I&&36~+cJ8(^=% z(mrcJubpMz@O5mjDeVH*2>wvas`>8fo>NnudysThqpKRsI+^P_CGP=fQS-dR^fScT z>nAz$o%nQlW|ntZP#`x&ov(HHXiToG?#Z9 zJI(v;=C5Yu$@YG$wH@R*aKP}zN45)u^_wScKSuiHQt)^zGRu?FXn7a#?yZ6;#`Krjl1?PhWTF&NLhCBb*pjuy{&zy_*k_qC J#j;Eze*jlncC7#a literal 0 HcmV?d00001 diff --git a/Ardent/UV/APP.PROGS.O/01B0 b/Ardent/UV/APP.PROGS.O/01B0 new file mode 100755 index 0000000000000000000000000000000000000000..f43704679b69f478f265b073ba98ff7d1dd477b6 GIT binary patch literal 958 zcmZ9LJ8u(F5QWd(hm9YAOdMlk1IC!dUI$1)A`(KBDJc-}&3LUS+11>cGw00Q*}c0b2eo&pYO3mz>{?Mv8{EtIUbC*l zNZNBos^CwKr6itPo<8ULpx9Of5S|3E7!aRZ(ZPS=iK4B`VP9T5~k?r4$)b^S=8{pJ4}6- z>3jIIy#lzyJQ)4PVak-PJR|)fw-JJOd(XQv_Fm3D3Zm|sdias*XzJc~-SHB5$?>9Y zHLv>)f26CRDJRom)>+hLpI78ZcuK2Cg-q z`CG{7)92LZs?2vBx+c?5B~7pf&)&n2(3N~woAs1uv~%mSXIJa=n?)IWzJWV}%h)l4 zw{8W#sG-VqSk@|0Gu&sb=rj7q=ok4NzJ&)c^S3{X7+<^aTcJXA)%6o_HB6!+^<^@~ zTirv@;?!(DJ5Tc$&vVWN9l$NV%5fM6b+$LRH^)z({C!@4Qf!;YWfl&W#n3;l*ho)V zkYb8|@h^A^uVDEEOTEsPf+25u1!$tVytoMLw@ba)7lQaJ F%YQl}XG#D7 literal 0 HcmV?d00001 diff --git a/Ardent/UV/APP.PROGS.O/01BE b/Ardent/UV/APP.PROGS.O/01BE new file mode 100755 index 0000000000000000000000000000000000000000..97fc8f24e87088ddd5c7b4ee5b98b72933915f32 GIT binary patch literal 181 zcmaF3MsO-CgCGL~0}Bu{Ft7n3HxRM{X%z_(1}C7HAy|fife}bMcrh?c1JWRj4QK!b z1sIuu`uP|^X53+5W?*OFU{GRY1CpE!3m7>W41j8W07aP?4l&q)*<3*OPM}IIpdB%c YF^oX%K)?#JkQqd`2YX_ literal 0 HcmV?d00001 diff --git a/Ardent/UV/APP.PROGS.O/0230 b/Ardent/UV/APP.PROGS.O/0230 new file mode 100755 index 0000000000000000000000000000000000000000..65cc3dcf7b76279cedb167038c6755513b442394 GIT binary patch literal 376 zcmZ9IA#wsi5Jg|_vI`5$!m=9*8G%4XM4}QE3@8*LC&(#sfS9<*NCYA}MWJ#CiYgQ~ z5=G_DKtwWKf4ckk@2=_DFN@cNf`kZv965biLw-1@_!M^&Du{#I5_)#Vh5qA4%8q2D z3@oFG@ug|7un%i!`j{4N`G`j$rz3OB%yf5&rG`nEQ7HQsa+zaoPVr1VZE8Fz?up$+ zPTF^2E4HK(Q}Gh|GwrnDP4RQ+D!B>_tp0Ih&1|Wb>Xi#)KE1y_-94l=$+YSDviLXf eR4Dl%xq#SbUPBy|K1~HJ26a#S|4oAGAjJ>OC>($Q literal 0 HcmV?d00001 diff --git a/Ardent/UV/APP.PROGS.O/0358 b/Ardent/UV/APP.PROGS.O/0358 new file mode 100755 index 0000000000000000000000000000000000000000..d6ab7b0507526bc9d0fd6d476fe592d83056197c GIT binary patch literal 1492 zcmZuxJ#Q015Pf&+J3H~kANh1lz{Ui}dQJtAMC z53twAU-LuuNnx5#gff+s(ei*DggAp4eBt{n&hh)q5G#yVKv~%ILR7KsRdF6Q)Hy<` zMv{Ah9_7yBB6DlRI&;;bLU*Z$Sk?A<1e4SMKJ;y2? zR_Sn$9?(BekI&9NzVak5^8_uk;tGCoruPs%j+WzIsZMXtS8UH$Vr8dFfsb*o3_f^w z6UD$Q^M^cpIw=`;3#l%}x^0dn_6a#o*VC=_nK}E^sk^sJRyO_~1}UbR*_&q2{A)Df>FVkK!26yHz5;pO$w$6 Hu0;3?!^oJ2 literal 0 HcmV?d00001 diff --git a/Ardent/UV/APP.PROGS.O/035A b/Ardent/UV/APP.PROGS.O/035A new file mode 100755 index 0000000000000000000000000000000000000000..69bd2ba5f25b7ba788a201a215d8e9ccbb19d0df GIT binary patch literal 2060 zcmZvd%WoT16vn@q@#Ik_IGH-{v~iuJtz$@lme3a@=_5_sfbBME5y~P+ELe5L0(F5@ zgjf}+AS1CvsLBGdtPl%US#^c_2SicXvFr*32|<77c|9&TNj)sW>?J-9mcvv|wuh22l zT4=nCp6E2AMf$W6Y~mTvAe>kqw(JD!Hu)JcpWr{3-w!k4-=R(P54qjxw#|~LOHa9m zwZ+w;5$%Q}@PFWXjz5pDOS3@$ZlZS7Io;?cvs>Hzl}77<%{r#f zgE5Wk9P^CR=}MSozKo9WPw?!9<77zRDXXKJ(65XI9V2@JED|rOO8j1s)uigdq^2~j z<6K#<)#RGTxF>WH?lf3}Tk^S$J44MGxMjFy@~n>@Jys`n9vxd;Nm}n`>e;&YP~kaC zYduXd?yo~pci|P&8U>z!J;yBG5MHA)PX)hmUS{Tms*H1CFrBY? z%{lkY>2(!@S@4wKpVk}Pp91HpH?Km}?77jyJi8`GFY|gcRd9xVkkeUuJd2`p9zVl) zUYQ^w>%1-yf5h5a?|bYATkoc(x5zMUZ+P`3jh$$3D2WHY-F{+BCh>(zJt?3uxG4e3#5(uace+_GgoaWj0OKRJB9xC#VYjjX+bsSNi(naM&Pk zFkmofFa-D9YU0d0;K?n15i*!NL&IMDh`0e9jII( zBwB>TEhw2;nE(=g^6c}xnf2SZ9}oGhM-I!-(`QT=HLe>)2bTue4Hb|BULS#yoZkPQ zEs`x0Q`U(ZIwc#1!vQifw8>$;QMCp11&qqe%N1lsK&F9#eBlrin%BBAn0j zjM*{uYNEu|Fa3VxAWw^tRsVC8-SZDQ+IZ%=gbq7v6T9rEix>K5#-WEB)59_fZ1Qz@ zBLD4OAtUc9=aMk*V?gg9)a4zrHl%k%?})k1WN~NK=3Rg@(77FXbu(snZ(P^eMZ&yW z?FbxDw_^--KPQg35oXl0uZ7uTmS$7 literal 0 HcmV?d00001 diff --git a/Ardent/UV/APP.PROGS.O/11A2 b/Ardent/UV/APP.PROGS.O/11A2 new file mode 100755 index 0000000000000000000000000000000000000000..a7f0f902089e74a9e54c0ad7f2257befbdedcc37 GIT binary patch literal 578 zcmZvaJx;?w5QX2`YdbhWII+Qh&{0sPMx1~SDHVzkCrHf^s1dXj)SQA7aDoVKkctxV z%{oXR#jAPanKv_UckR#D=~JSqGL2-4;7^-MFHX7&j1=P!E~PJWX1ksj+XiQX~w!&sAVM_8Bm=8>>cWTOQWl8o8?mqP9p`xU>q_?8CB7gU< zHz&W5RaW%gVucP_p1EF$9-RX#J-8#V);Z=`wnJ&onQV`?>l&RJod&Lf`v^M5OqgQ6 z3AN^1c^4Z}pMu7=;UrzCY1MJRH`uV74BeDy%;}zkX1?uN(Kn-d9d+m};D%|xnl>+I zN~b<(f`2r7G;eZT}0cLG=xAmYuw^pLkGu`uxl){vwInSuQ? EKW~pNi~s-t literal 0 HcmV?d00001 diff --git a/Ardent/UV/APP.PROGS.O/11B0 b/Ardent/UV/APP.PROGS.O/11B0 new file mode 100755 index 0000000000000000000000000000000000000000..59b0f8f94593d0fe555a321b0e6b6d8723151c2c GIT binary patch literal 999 zcmZ9Ly>1gh6ot?1dTrvE7(0$Ji32uSf)j5@h^Qh;w?sfJA|Wf{39LK-B}j;h0(uI{ zl#~<^6;R~?&`L;%f&#gu0=_%ml|{Uox%bRD_h)|m?WFc5QcV?Ikp0?P)h^!>Hf}X^ z8c5GQBh|4FUPz5_IeOb_&1O*uVMpv!oV-9;4?>b(n@zcX5_UV;6=X!1qgTgEGD z3|gU!G-&Gyx!$?9>Wo#D^b!1(VVbL%<{5Y&-!#|GX*!wa6wNG87yTOgHT1Cxbk)^$ zyjlJ@@(=7rmDnO-13@4Tbk1mqsiXav3uy|d{ygp!XE7&V`|2_ zMZPphsQC)+3@)K!0&m%hTE>>iu%sSd%WX5y>l6Bi==1es-o_5h^z_q!_Vp5e-^~+U z@%k~i;*Nq6@nu$wx47G&{MM{LyHB&{?{msIeSphf>BxURzgTY{TdpPKH4(|Us zETT|oJ%nW@XP!rY`GrRMC37N%cvMKuF;y{NDVbv;OA`4chAM`9tPfj&FlQRPkULdV d6>@aRkkyJTd*m})!WzS@|Fedlal$W5{{WM>X|MnQ literal 0 HcmV?d00001 diff --git a/Ardent/UV/APP.PROGS.O/11BE b/Ardent/UV/APP.PROGS.O/11BE new file mode 100755 index 0000000000000000000000000000000000000000..759cca74c8ea6b5931bdf546c0d50fbbf7683516 GIT binary patch literal 186 zcmZvVF%khm5Jg|_m|;=MRtdyPAmjo9=h$lzJAhnCokQXl5>?)8th@gIJ-@rB-?#3Z z>41@du{k%hx?Qh0=^cg+g!;Y1MXmT3JI!Sz_ZN{Vyh#2uVG~7exkk(0nU8M6ljBfN atshR#ywOJ=t{b@?OqFs|Db=SS73l|s_6;%s literal 0 HcmV?d00001 diff --git a/Ardent/UV/APP.PROGS.O/11ED b/Ardent/UV/APP.PROGS.O/11ED new file mode 100755 index 0000000000000000000000000000000000000000..a63c7033ee1338ea7d3181b2da49ce11b3d2b216 GIT binary patch literal 1301 zcmZuxzfV(96#nkJedV?A3N0;Qu?V&N&?1GZEfyCO2L=WQ;$RpsaW=-u5H|k-H8nBD zp@VVa4{&BMOoqvckhnTIICL_8-{BQ8@x9#do_l_L=iGDed*2W8Z$spffrp+3-@ANc z&b6r`K2p7J79h*{@s__%(xpiRKuXV6+C4`g}J0#VO23>rK{7s>T1LW zxf)ntSJlIaT?^^8O6@9ZkiJXJ82ft64zF>w##IwPxze0vk37$DhC|FZ$*B1jIjXKf zY?7-%&uy!xY2Hn==+(jpt3&6IV#YMub{=gzk1lOGDfRn#!qp?+3A3#y z@t-YT`#8iG%Ey%2#?>ZY%1*Xrdu&mE8nhW-WIY}3BjQjGGQ1aeSX+no4((~$`?O{( zd&c&#WjfV))}0QyJFIuZ>fNw<@6%^cZ<+ETxq2L$b$8Ap#i09Evd9vp{UmOko;#HP z-v89U_n)@2Z)?ZtWwytA_a0^ASsK9Y3aEt_gzN@FS^O`q!<3ft@oxks$tqt1U#1YI zwUW*_h6XE-D@l1lK`<^T b5-jSx3Z?X~Wz)YVoESJLxu241QXuIMx(s-r literal 0 HcmV?d00001 diff --git a/Ardent/UV/APP.PROGS.O/201E b/Ardent/UV/APP.PROGS.O/201E new file mode 100755 index 0000000000000000000000000000000000000000..f4d48e56e64590c58248d1388b9039c395452589 GIT binary patch literal 303 zcmZusDH6g!5bR0FK_JHhA~GU^;t4p4fYkb2-JaRk-CR8wI2b_J5MxZa1I99+;Y_WxCqT-$djn5K#lJPD*du~V9?>(Gh+cvR z^#!q{Z-5vF0=P(wj#)zQ4k6!Vs3`$^}eW^O;vpSgztR)fS-|su;kiAM^VYs%C(s#M>V~|0l;>^7qMCyW&i*H literal 0 HcmV?d00001 diff --git a/Ardent/UV/APP.PROGS.O/20E0 b/Ardent/UV/APP.PROGS.O/20E0 new file mode 100755 index 0000000000000000000000000000000000000000..5ca511a14404cdb9971116c8b1026324e1b1350c GIT binary patch literal 111 zcmaF3MsO-CgCGL~0}Bu{FfcMOF|Y$6E09)^5MdAiiphXwKynNWf2A21Qh+oFV*?sM Z!5=`~j6jkNXhsZU3?l;@$ZTeiasb?!2e1GD literal 0 HcmV?d00001 diff --git a/Ardent/UV/APP.PROGS.O/2193 b/Ardent/UV/APP.PROGS.O/2193 new file mode 100755 index 0000000000000000000000000000000000000000..1e4552fded4d5d308a4e6154085e757a95300b04 GIT binary patch literal 168 zcmaF3MsO-CgCGL~0}Bu{Ft7q47Z8GI6$udrGoY9vScZXt5lBacGca@kX%NN+G=PFX zfO;8$BpU-00~;eVkjKujfRUX+4Jen!#KFM9zzLN5!N3ex6~h?A2sR!}FoO(c1rf|3 JE16#a1pqYF3?={o literal 0 HcmV?d00001 diff --git a/Ardent/UV/APP.PROGS.O/2196 b/Ardent/UV/APP.PROGS.O/2196 new file mode 100755 index 0000000000000000000000000000000000000000..7befc4a329989a94bbd74423ddd9937ef4c4fa4d GIT binary patch literal 489 zcmZvYJx&8L5QX2w>kSGCWFcV}Xekg#CS>?7K|ZJkIyLDwDvFMybLkN-;JIA?jHU3sqU`K z+D`s?^4BY#msE$|=IlXpFYfZiD?1v(%)pLHPAuv909jNzda~dsqc`MAnK`1vpCwnN zcP8ydPet~+0YmMvz0PojAOE?-)TXA%6JWSSC2txe zvw8D*Z)SG)(!-?FgR{+m=b-;^J@z0hdJA@eE$c-WQH4>3a zdp?FiB`uX9Z>*`Pno+Aol?SUQXFP5q^ny1rV%CVqfqen%F_B?H?{OwNzE-Cz!M0o% g#U{^pspCW0@pD!aqowFSHL>ap0dv_4MEkYv3xd=aYXATM literal 0 HcmV?d00001 diff --git a/Ardent/UV/APP.PROGS.O/30E0 b/Ardent/UV/APP.PROGS.O/30E0 new file mode 100755 index 0000000000000000000000000000000000000000..95c051de10378647b03aeeaa327594c986900d32 GIT binary patch literal 113 zcmaF3MsO-CgCGL~0}Bu{FfaijI}ox0X%z_(1|guB3|NMNfe}dGe8Rwx2Bbk48_)m> c&SGR`U<0cD0VJ6iVi;o>8JM|&;>;io012=N2><{9 literal 0 HcmV?d00001 diff --git a/Ardent/UV/APP.PROGS.O/31AD b/Ardent/UV/APP.PROGS.O/31AD new file mode 100755 index 0000000000000000000000000000000000000000..51f39b9ec955bc63c647c101ae7a51fa44b7b61d GIT binary patch literal 577 zcmZvYJx&8L5QU%D_9lcZn++lCEANTdL?qM}5pC^!ZMP;mrGPC!kO zjs`{I29#8YH-ocEfvuUb=Y2E&`FzeEJTiDRAtOZxyPRu`gS>}Z1DvY@tS~0;z#DU7 z|BXE+FHDRG1~10YkJ&4Q#f;X$2Q5Pv^QenMvSX|>Z!sm=3;Ap2=g}%E)f1`-Ub()~ zeVhBX?r(SpsoMy3PoeIP@jFnDVJ#gNd>Z&8)_?KcE%ce0(l(Lv{X>XENE3BX*-mNAomTD=STjs{u(X=>)2Esqq4Nty7V^KQxww Hhz;5=Bk?o+ literal 0 HcmV?d00001 diff --git a/Ardent/UV/APP.PROGS.O/31B0 b/Ardent/UV/APP.PROGS.O/31B0 new file mode 100755 index 0000000000000000000000000000000000000000..02883d4358daa0bc73bf0a7eefe84e5b80f3b672 GIT binary patch literal 1016 zcmZ{jyH6BR6vn?hv$MGD;%0fQE37NBup+PnJ}PQTB_WAU1(TQOnVfqb-*+DO-kHxY8&4B8RMQ#R)6qrU;GID) zwx)FyNlzS+CeV-HN{ewWqwrs98SjUh3c9OE=dgCegi4C_I>fABkQUMNpkI+DZ{pT0 zR#`*5IklBVZ9Syci_lhtTwt=vVAGB19r5poap#F=QAY>(+yCKQ8gY)iUWa-e>Mc-j zfqGr?mavzwdnz$ySBqGueX^+O{r1__Wp=lWKAj=pcbTE96Y3AbkX_7;B2qg@8zFeL zH=L!RS4QX#SQbrc3%#jnIMZJDru$R)Q|=deD@9f69I1{sJJ)pTr;t)-jjtkSrQUJfIjPoF(H_!d@5|^- zcopwzvmUcYyVo8)d)lC07Nzuj?sJ#%4?_xW)ykShk5gerD_E^?m9?t(@E^c0;`@9n z*Ff^q&mzXxGw|(DCA;SQNBFg{7mblWPQ-A_yN*}fn$2hTY5L#$%(0+PV8vHE2!o*c zom=;}cD4q0ZlByM11h%m@i+@t%VORyp4dPSnUNrhzwx&u&hpHHU|_IF8A+TDF;BK% qF)7(%toSV1hUH+TFsyxI+1{{f-k2?({fAXE0^)yf`~f5W$nqPOvTS7l literal 0 HcmV?d00001 diff --git a/Ardent/UV/APP.PROGS.O/407A b/Ardent/UV/APP.PROGS.O/407A new file mode 100755 index 0000000000000000000000000000000000000000..761fe5909882675873484c231dfc9eb35e1295a6 GIT binary patch literal 119 zcmaF3MsO-CgCGL~0}Bu{FfaijI}ox0X%z_(1`(i`ELettfe}cHF*7h^0BI1$1~hDwg2ULKVMB>M;)_dMN`(DrT z$P{X3jL32&TYbCkIhyUJ4kZ12gS$TJANGcC8sE^?uH*Iudm6w6MkO!GWdd)G4EI%zdjtS0T>O0QsM z|D8p^4~?iFpJ_lfHv*T_6ZjIgqEYfO9bwXi8`B9$HmuN!%=TrD))Y@!ax)ZdO5IJ+Q)uG|cM zR+nxX-%#u#x*OCICTCPuo8EV91;kLBD~D{3EGEve19W&4WZb5URhZ7z3%_;rso!L7Ms(`2`aL(SML^i*JPs{w~;ZDHSE zV$bb4t*mi%77-s%M#2lmLutnQFj+Q21jAO6f39rD% z9=~;$b_r&ja!GnRu>40b<#HH79=qHZFv@+NIL1h0)c)z}_wa;0X|VD$tR#TX`V_l~ zal~yM>FL0N`_KA&>{Y*dHo-f)PjR(;W)iYNKZ!_21@5h(D{HJM|S zQPLia&9vD?<5DNMOKt9MA8x+QJ?+C?ZgbE3aM?EZ?i8ozw7~oW^2&O;UF(-Vc2~@< zY<6WEj=AFIDx~rg@Df(zJUyUx`l7{M`Znowo!ujk|2A?%rmo? zj&x?qcxPwa0C#>u5XhjYmHv@tFaNeM_bG9Mg0vvhAr;oFx^Wc3+Y!9#aEjw~Lo1+3 d6x1IQWCg>5oM43D$)TSY6a=FJ{pdVx{{mX~n_d6_ literal 0 HcmV?d00001 diff --git a/Ardent/UV/APP.PROGS.O/534E b/Ardent/UV/APP.PROGS.O/534E new file mode 100755 index 0000000000000000000000000000000000000000..746bc88f78a6e0946965417d5bf7ff912b579af8 GIT binary patch literal 771 zcmY+CJugFH6vzM1ZJ*m0RZ3CnwXT=Rcd&_B4AOzbA~Bi7z$#`IgP2Sv6N#zm&_R3v z5#cKsq#M8Uv?=bB^FQaF|9QLTxgWQs3$K#AQnF{7v&6}vlS)}%PTC2KltJ&kNb6BY zy6%5!nYT9C88ELn*bdAp(gt~=PZK;uwz2zEAi7_%>qi&$78P{>x7*`#Ses|q=87kPEXGq;$xek1iKlwuD44nXa}xuc&Qry!n;#rC0NBbVNu_+VJi+EQth;+RvBoh(h74_ UUEyh$(;O6Am7__>e@Vp-KW;V+@&Et; literal 0 HcmV?d00001 diff --git a/Ardent/UV/APP.PROGS.O/60BB b/Ardent/UV/APP.PROGS.O/60BB new file mode 100755 index 0000000000000000000000000000000000000000..9e942f6cba3b4512c42ddf07a8a7dcdb76d8576f GIT binary patch literal 111 zcmaF3MsO-CgCGL~0}Bu{FfcMOF|Y$6E09)^5MdAiiphXwKynNWLhTF;DL@*8u>lRB Y;18f~Mj*)sG$V#Fh7rgB0%i~a0KCWtEdT%j literal 0 HcmV?d00001 diff --git a/Ardent/UV/APP.PROGS.O/60E0 b/Ardent/UV/APP.PROGS.O/60E0 new file mode 100755 index 0000000000000000000000000000000000000000..a683b58ef6d1e852f3e372b30c535a68cbf96896 GIT binary patch literal 113 zcmaF3MsO-CgCGL~0}Bu{FfaijI}ox0X%z_(1|guB3|NMNfe}cvsxdI60cjA%1~h7{(Yz24*IpI5S8C0Hgc{ZU6uP literal 0 HcmV?d00001 diff --git a/Ardent/UV/APP.PROGS.O/61A2 b/Ardent/UV/APP.PROGS.O/61A2 new file mode 100755 index 0000000000000000000000000000000000000000..152c30fe23a5ca66afb3edfb2309e94988c313ea GIT binary patch literal 103 zcmaF3MsO-CgCGL~0|yW@Ffalk7Z7p+X%z_(u&69phJk?zNT;k}V2An)7#RW>8G&371^|ya25kTU literal 0 HcmV?d00001 diff --git a/Ardent/UV/APP.PROGS.O/70E0 b/Ardent/UV/APP.PROGS.O/70E0 new file mode 100755 index 0000000000000000000000000000000000000000..8b1079de89081f8365e803250b8c05206dbd51b3 GIT binary patch literal 124 zcmaF3MsO-CgCGL~0}Bu{Ffaol2N1FXX%z_(1`(i`ELettfe}c*t7Krv0Ma0g4QK!b fe*kqe0#&d9S?ml<3^9x`j9|@Rf*E8CGe|E0Wg7^6 literal 0 HcmV?d00001 diff --git a/Ardent/UV/APP.PROGS.O/7201 b/Ardent/UV/APP.PROGS.O/7201 new file mode 100755 index 0000000000000000000000000000000000000000..ea1fe2665b5cf84068df7aa5d75defc8e016bacf GIT binary patch literal 113 zcmaF3MsO-CgCGL~0}Bu{FfaijI}ox0X%z_(1|guB3|NMNfe}d89cExi1JWRj4QK!b bcLH^@0agD1l1vOSj4_N1%>RLa8KeOK3p)#( literal 0 HcmV?d00001 diff --git a/Ardent/UV/APP.PROGS.O/80E0 b/Ardent/UV/APP.PROGS.O/80E0 new file mode 100755 index 0000000000000000000000000000000000000000..f5cd1d7ef90e30eff87fedbaef62a4ebe9f01cd9 GIT binary patch literal 119 zcmaF3MsO-CgCGL~0}Bu{FfaijI}ox0X%z_(1`(i`ELettfe}bQoyEYA0i;0~8_)m> b{s8J`1gc;Ive8&K^J26munKY%7NGQ=>(Ffy<)0p&nufC*+00{~*}2$}!@ literal 0 HcmV?d00001 diff --git a/Ardent/UV/APP.PROGS.O/9072 b/Ardent/UV/APP.PROGS.O/9072 new file mode 100755 index 0000000000000000000000000000000000000000..76be9b318dd0fe00d148a4609ac1440b20ca5481 GIT binary patch literal 188 zcmaF3MsO-CgCGMV0}BHPumT}B5V8Sj6$udrFQAwPScU;{8fq5~E U49p;-n8iT^5QFuB31*N9098U8Uc0;NHi6{MFLL;wI3^#=L? literal 0 HcmV?d00001 diff --git a/Ardent/UV/APP.PROGS.O/ACCT.DUMP b/Ardent/UV/APP.PROGS.O/ACCT.DUMP new file mode 100755 index 0000000000000000000000000000000000000000..262b8f6664a853156d90050435c2fa31f4d41a30 GIT binary patch literal 9359 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 D&Hyk& literal 0 HcmV?d00001 diff --git a/Ardent/UV/APP.PROGS.O/ACTLIST.B b/Ardent/UV/APP.PROGS.O/ACTLIST.B new file mode 100755 index 0000000000000000000000000000000000000000..261bdabf77d95770e2b7ab9340e3655418679f01 GIT binary patch literal 3599 zcmd^>{c~JZ8ONWS&GrS_luE%$!JaIo!P;!Hv5h6x;=0+Cg=BZx-6RGh?al7p?54Z- zZtlICmx^gc#1{kuQn2-{7NlAWk*d@-_yW{WU#KXIBfmI~qdz&!pu=cqbR56Wlik~P zrvHIy?&o~ZbDr~@=REh^lm6-W>H~gSO?zqaXOM>Ib^QA{+6`;h(6XgObG5NQ`iPFa zK{N~-KbQNt8OB4}CuoK=GV$!A{d8E{PupN`*EIU1aG&tri}a^xRy$AkQ3EwFEb)g{L2)m7e}0 zHF?Gt23`y}Nt>svHRk7-Zg>$wMW_fr#Yg`>C| zj?(tV#qZ(UxC0Jp-@%GUX$kBzbPVIi=q`+p(RVSrosQGfxSPgsLp=k|!Dj|}?x8cd zU!H^?=Uc)aOR(|1#kRXW&oO!twtHbq!uB+ku}&F&i|d?&o$sjc(MFBiXVK1TyS>>a z?PxIJeHJnP319Z|(Fxph-$!n1wSDvhvXIHJpQzMe(GRJDN>wm}^E`&Nj?r^;5_>vH z?eO6>euSBeKBwSw60uIwX_|-6JY{M=&%=lF9zlPMeq3AYK^jLUQ#GHTz?yHE!Ad_x z9DaAU&=I=ADmX(E!buv_=4eXxavCwtW9B5S(2i)6)QG$NK8*cLGIwhF6na&93lHyS z9+}S53#jK|$qg5=)b>AUO>(jRi`cJ&EMB4jJYGUw4r^y9hw-E~P7eJXUT0|-{YK<8 zhsTt50e%aVf}N}TGCa?U`UO`0rL1v+=V;4t7Jr31`PcAx1!L!E8WHzmhtsI~UPR=x zv4D57K)*rnRm6Rjj$`oESfoM(ord6 zwCK3@bTFRC#CnF*P@+Gj(nIM?v`>Y*`(p7}I+F@#5~*OOV0hljFfm7!^=ZXR7W4^2 zWi6YRQ59a@af+7d1c$qK#iN7aNMw<*cuykL7tX{I@nkG=M=Bcbjb(~G2i)4a4F`P^Wlc~hc^hnXHR&shaYgJ7*tGn3gXtoGC zdbv_Es%CM(upOhn)&??x)=*nVK)HIw*sKCQf!2J%vg-Tm_cT%?zG-hUlot@c^&WPk6F2ne((=_M~f7vjwkLupHOa%LW?|JD%ATO9!KOCc~NA(nD5Nm8*`cMhrDs zbPGjOVMD53Emg3}hN=}+xt6l4>`-)6#kNLmz1)0p0NcU=xSW&vZ#a_a#qmK!YDXhp zEsq$svhqr|N2_HN&Ph+3u0GYJYQCz3)5v-EqE#&|DrXsv!r4^D6fDg+3^S#a{_>f#L+ zD`5Fc-SQTTCRqN>Vl~9_1_)mCI*3M|z8=DlVba3DCiHykAp8)d-307`lG@JJ#ltK( zhesfMGWQ1b4zhVI#B(e-*>fy-+1FWc8UD(GU&5O#c%xTa^CtbAgr76@@mBqufz;Jv*EQ(f!-8M$EQ@O) o4zl13=2-BIXIbz9r|RM~3ywGs;pgcRb%D)z=rtBR_4g3}1FbXc@Bjb+ literal 0 HcmV?d00001 diff --git a/Ardent/UV/APP.PROGS.O/ADDS b/Ardent/UV/APP.PROGS.O/ADDS new file mode 100755 index 0000000000000000000000000000000000000000..f951959f3190e91409ca5268e3c9895455b93996 GIT binary patch literal 97 zcmaF3MsO-CgCGL~12Ygq01E>MGBBt}h%oQ~X(^~UBalv8%)pQUq(K-P&;SY^Vq^lE M#>f!E7{kZ_0AOGSL;wH) literal 0 HcmV?d00001 diff --git a/Ardent/UV/APP.PROGS.O/AMLC b/Ardent/UV/APP.PROGS.O/AMLC new file mode 100755 index 0000000000000000000000000000000000000000..d39772c7e128e10144348b7ea7512d38927ed2d2 GIT binary patch literal 1851 zcma)7Jxo(k6h60)7I;8up_YOIul$sPC|b}EVhn0RG*RP#Mw1Q}ctw)-m6SFb78#9$ zF-8*x1}0pLvtex1Fc@`kG$tm77$>8Kba3!HxA#IR9c**YJ@=gRedp)h*M5EBf957X zdB{yff(B@aPUG7QtuGXy?HZzs0xo<^?EW`I69_%e;Z;6S*lto2@ILHbxqC$;GOPG>zCP)O3jAVjGA$AOhrtCkTI#zQE78 zHVWY!q6at^se{_7K#!z;82TC_+QIT2RWU<{;C5bPeZtaK?u~5)tVZz{aUAQFXU;Q4 zE;<61xNxWzo>B!wYrqw$lj?!mAQQcmJl9~?+&n)Mc;+92{tE7+-Q$qLZ^5ro z4-xMM>ZQUQm6+SG4PnA9m@ePRhJCXd)_oWUd3Fx)9Fsf|dJnEhRlehjZ?y{F6l^?` zy}C3X->e9YV4@@FVG(g$b;)b)_E)-R^>Qwc6_=i`p34cv@)`chxx7`Fz5IGE`~+$D z{+v`Ce-K}8k12a2?pe9LSJ@|F*Eu)wykn?z95(KGwBq@VDa^YvjDCKO!c^Aj!LNY_ zlhSi~g192i9(98}@aX)eizm57n~JM+fB2nbhP{5*g-`a)zeA_W>~Vnx@c!X*?#ks0 z{ZPZKOjwsvDSJMVvT}Adz2HDeEjYI2MGBBt}h%oQ~X(^~UBar6RVPHrA(jbftXaEI|Ffsv6 MV`PY7jA3K|068HAb^rhX literal 0 HcmV?d00001 diff --git a/Ardent/UV/APP.PROGS.O/ASCII.EXPORT b/Ardent/UV/APP.PROGS.O/ASCII.EXPORT new file mode 100755 index 0000000000000000000000000000000000000000..d055483fad12bebd2e0b58dea644b56aa508fb17 GIT binary patch literal 1427 zcmZuxy-!nd6g|J!_ex7kTc9GK!Ycv=3I$6Mtsm6VA`k!A6)g=Peya1KB}CU6fk zu&MR7hY>b`C-loRNBQv}HrlASD`1(GBj};`GBznTdTV@r^z|{` zj~>-ajFK5ep4>B@!XfQA3wBSaT% zRns8~w~Er^Q~^SqyKp+U+~(NmVm)F4Y^5hON z&K}eJvmM9i8zbuq?=VVCuww#+I-YZf`dZ`Ujq?sk<|nbs{L}rlF8kMSayDs_^Cv6w zf5ZnDSS!RY!0G+7QY(bKGSR`=I`Ej%&bXlxxXPYiDV^A-T%hKmv|*ByO!8K<1~89n zxQ-O!N)hF4n0x~_IFpIjsU9q=1D!tcEhjItb3DHO-cj}dOt7r;H4g6p9A(; zW{wwf@kyj9w^-SvM9|3T8d)dBsZ!WyZb{pRSk<}>A8YxTA+`2+gA%Xl|EJ3<`j-)| z^hoheDcr^syPhYeS({U8ZUjwy;{mPvs5_H2ak2ovo&a;*#6jF4H%-ito53veQ|ua` z9CD64ZBw~0P0uv4I+kV3tz>J5vt8ljDx7Zy;5Yne!4cjtCijzfC-puvCV%DI$t&5= zqc;q4_aJ}&vU`ZX>3P-4jz{>e`4gIdY$*JuT_7jOJ!BIPt2Hv;*~OVhY{{9Z$@xTH zUgec48)dU>oVbxK+AoVc_Ve|vHG8{gue^9#e70?G?rdz>tLrNpg{>)j=uvJdzOWe2 zEIy29hUOL?D#Af}~F30v~N$&!fp`Lb!b1sVwIa>Zpf zQ5m7QnhBOiz$>8heWLjVB+XUk<4TAb5Hl#C^F%X6OHq{c%T|?KRhgk;g#>h`7SUR( M!MkFGtJW-)zgy9x>;M1& literal 0 HcmV?d00001 diff --git a/Ardent/UV/APP.PROGS.O/BIN.CONV.B b/Ardent/UV/APP.PROGS.O/BIN.CONV.B new file mode 100755 index 0000000000000000000000000000000000000000..bbd1c24c1be06fa1bd5847aa8a40c9ea07e6c516 GIT binary patch literal 3099 zcma);O>9(E6vxk-nOC5lq0=&aPhtAOx4@ts5h#_?GPGhTI0c4Uv4vXssMQ$O1_?{U z!qmhCi!O+(E?l^9VTkFP1u@1L!^Xt8a?uzTv!K-9|GxLyX(h&ax#!*UanJvpbI-kR zexGUh%C`nvZ@%d_$n!DJR^Dx!GIn>3*{J7Kc8J%d3ueC{(|Fl$H^K_5Jx8}dvleqS z?r6eBY@@}kiO093H|_a$8~-D4S)L}Vv9woX+icp~hOZ>L6X>>E&Jv8Qt+FXEX3e%5 ze@(W=zGl=QH+$x=vsR0&7CXuQVg$Zxv980%YII4Pv`z3iP;&Of*=#_%23g7;!hZ+u zEbl)V;;&GiF|vwmJhXR_%Vv@>S|jhHZ1iRG9>=$2y! zHlFjYdM2n~mXY*?uR1B8Y*@7!)<3~_j;InyTdc;*L0ieT6c7^4S+muAFJPB63YOmQ4qumPjh>>==Hsi4Y>5fG2i1D)7+S}*o9=#Mjw zqF;wxwdxFO^@-D`&@ahVyIRhpYNuS4!J8p|5?(t}Am4(uS%!Qw%qAI`5c7HH^8|L$ zK6bfP-7d#&>mkRJ&{M?H1ueRmio{fnod8Sx-}F^=ET==93G}LEb5$)n9Zu2V6s_0Q zve)|X-w91oi#*h<~uY8vkebIqn6WfRZ(OB~D_>)xX3IQ9?Qh?w~ymaie{Fx+0Dr zsdI2X1DxBdmg9`U2j_DzJf9b+1>`xHtm(!-%s&VvCDLOlvUXhUYykp_O1<+VHq0StvVmU$qrV3&)T5ZGg!>pFfjz@ zCeXLRt5vEWhuoK{D^$=r(s2?##L*&uWkL=Xf6TGYYBHE8Lbei_%Ds^t5UoYZe+8ecJ*sI^K zh5Wbh6?Y0}?Wa)JPu$bqm_2qn-FAVlLNwZeple2{=_sC-YN~hw{CXP*{a>d)?y>3v z?o)je)Pq4JW@U6k$eO`>#26>@ac31_jDs=GjxWa;VcoxT)>#WYKSW=RGX)>))~r2v z$y%K+#U1&KY$dDq^DBJ9^<{#uofTK-VLm7P?MWj-L%2bCc3u*n_Jl20(AnL36o5yA0b_eX3|A7?Ad%*DR-*7 zbTZ$6GT%MWKalUf)7xLpclQ-b#h!CLr8DLJeD{lDU+KVn-+XcY9RCQ6+sG{Lh&T>C zBC#62lgBi3ginUW9l0h8$uyjOf{E{leE4*~`LvaBG?{5o)WB4exBz_eF~3%xRTcSy;CW2^V_|1^` zi-m=SIAg(C?vzMT`HO3I!MQcNC3YT^{a$f$<8=F?$$p7h(g CyLbQq literal 0 HcmV?d00001 diff --git a/Ardent/UV/APP.PROGS.O/BPIOCP b/Ardent/UV/APP.PROGS.O/BPIOCP new file mode 100755 index 0000000000000000000000000000000000000000..3db8baa45db36ba4f4ea066facaf1219421c6f86 GIT binary patch literal 135 zcmaF3MsO-CgCGMV0|YQJFfp(IA&6Fy5Mj^&3d=&}Kx*!MW?-lR(jbftfYi@oWMW_j nnz(?GkwFB=H)3RFuww-A7#LK*d?tn%#u!EhW{?Oo5HkP(+aC#N literal 0 HcmV?d00001 diff --git a/Ardent/UV/APP.PROGS.O/BPIOTT b/Ardent/UV/APP.PROGS.O/BPIOTT new file mode 100755 index 0000000000000000000000000000000000000000..f2cc2665669f13c4d5a5b2694bec5342a02e156a GIT binary patch literal 89 zcmaF3MsO-CgCGL~10xVa022cUGBBt}h%m4KX-TL!NQLnS28IYA4Z_%f22e1DF@})= E04=%&bN~PV literal 0 HcmV?d00001 diff --git a/Ardent/UV/APP.PROGS.O/CATALOG.PGMS b/Ardent/UV/APP.PROGS.O/CATALOG.PGMS new file mode 100755 index 0000000000000000000000000000000000000000..9131d684fd82fc0263132714691df0289f6e4a17 GIT binary patch literal 3229 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 literal 0 HcmV?d00001 diff --git a/Ardent/UV/APP.PROGS.O/CHARGE-TO b/Ardent/UV/APP.PROGS.O/CHARGE-TO new file mode 100755 index 0000000000000000000000000000000000000000..ec9dbc8704f88fd97c7945969e2d83143bf23418 GIT binary patch literal 209 zcmaE`MsO-CgCGMF0|am|a53-#Av2Ixkq}|9017KY<=BDrW-$ha9v}_E*nkF5FpPnb zft7)cVGAP*(A+0L%nsyn07aicWw;qwfO4E*Teul`80vs{0waThr=zce78}T1HWnbk h4007SBamPO6CmDyAOPxR0J|703{uYu#0;z;MF2#M4;laf literal 0 HcmV?d00001 diff --git a/Ardent/UV/APP.PROGS.O/CHARS b/Ardent/UV/APP.PROGS.O/CHARS new file mode 100755 index 0000000000000000000000000000000000000000..ced54f28fcfbcb65af77ddac807a02c2483d2972 GIT binary patch literal 95 zcmaF3MsO-CgCGL~0}~KK05by!GBBt}h%j&gX(^~UBam+FV_=8_(jbftXaEIIFfuVP LGQ=>(FfsrDR9FT> literal 0 HcmV?d00001 diff --git a/Ardent/UV/APP.PROGS.O/CHECK.DICTS b/Ardent/UV/APP.PROGS.O/CHECK.DICTS new file mode 100755 index 0000000000000000000000000000000000000000..6f82dc5f01761a3d580a07a8be775c653982c6a2 GIT binary patch literal 1182 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 literal 0 HcmV?d00001 diff --git a/Ardent/UV/APP.PROGS.O/CINPUT.B b/Ardent/UV/APP.PROGS.O/CINPUT.B new file mode 100755 index 0000000000000000000000000000000000000000..9315ac18a22073fb5b0cdeef65afa208102fbe33 GIT binary patch literal 6155 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 W5pM%;3SlbY5yCXWbb!Wr9>jOMpH9^P literal 0 HcmV?d00001 diff --git a/Ardent/UV/APP.PROGS.O/CLOSE.FILE.B b/Ardent/UV/APP.PROGS.O/CLOSE.FILE.B new file mode 100755 index 0000000000000000000000000000000000000000..0894c692d4e774ef5ceb5e2cba102c309ab32fd0 GIT binary patch literal 387 zcma)&u?_)25QhJ~b1Kbc6cULjuJ8aFwP&CbQ6P~B5)YtNoO8~dcnD9SQYh6DZy_4~ zxrn$#VK)En>^HkJvwJ(Zi31k~7Qi`=t?Z@1H4m>;#F?~DsWqr_6Q~-XM*XrH;RQBA z*+|5(6@wF5g}Ni+?rQ1Pkm_N@y`GBYfo1B)yq81wD{@CHE9t`joK@nJtTSXy5@tv! zN9^8ptxUBEGX#>z)k*|ue-RwM-j^Ng$82yz-Z34cy$1BrYJ1b!VB!r&1q0hjyg`tHShw}{!-8Y literal 0 HcmV?d00001 diff --git a/Ardent/UV/APP.PROGS.O/CLRPROMPT.B b/Ardent/UV/APP.PROGS.O/CLRPROMPT.B new file mode 100755 index 0000000000000000000000000000000000000000..f00c87c0075dd4191f1511e94aa8baf377021894 GIT binary patch literal 91 zcmaF3MsO-CgCGMkU}OM61_l)g5e7COEd!MViS1j-zz_wbK^Pm*016r~#4yG%G5`QX Czy<99 literal 0 HcmV?d00001 diff --git a/Ardent/UV/APP.PROGS.O/COMO b/Ardent/UV/APP.PROGS.O/COMO new file mode 100755 index 0000000000000000000000000000000000000000..4a770e4232a8faae4f6dccbca4021206a9fb22d6 GIT binary patch literal 865 zcmZuvJ#Q015Pj?8?0gY?u@jsCVGCqaAS;Qe2nE5plOn-gWStQ~DagkqvSc|ZHcbkP zA3#AtI*|AQNc@K=1riMfU8*QeenL8Uv$rP&CA*s0H*aQkc1C;p-8*#QA;&Fi8Z)@h z?ect3DdU|2TE+vM@zigCV{#(bt%oElDvtsbeiAQG1{k`+U0|3s=9Iz+KB*!cjA9Jm z)EMKxP=vXOaWdn0Ywoy(Bc9s^7meSu{tt$mF#gZPl3PNVxn+nwz@+hY_-64<*}SK; zySRb8jg|La;5H|5gx|zZP@y+x-;&;UZulJMl=3q+m+dk>hdY+f>Q^j(*Yci?pR@cu z@&k(Wmc1{FdCiys(!MfZ3A5~L*2GF*>uO!0+K668)kf1_iv9ZYVC99cQ%cW2nm1B= z-%Gaj&fdP3P~B~# zvZO@)e=3gGu4BS0S(lk8%pR(jR#*LSS;x&**kBvl+!v-t5ajcm566)z{x1t26BH=U zUoMUXSQKlB%B8^3f+Ugu2v`$PqS~c6hMpig5KI2QD@u7(AB8H4B>`UrOj7+2AO(*p V&NH!wseTC%`i}sqenN2_s((ZCcJBZH literal 0 HcmV?d00001 diff --git a/Ardent/UV/APP.PROGS.O/COMPIL.DICTS b/Ardent/UV/APP.PROGS.O/COMPIL.DICTS new file mode 100755 index 0000000000000000000000000000000000000000..61687ea0dbac9bd6ff6acdcb91f60b48e3d56630 GIT binary patch literal 1006 zcmah|yKWOv5S{A>7%;>pPU7&0Mkb08QZ|V2G*GP8YhuaSwd561B$~x+up?uKjV+*w z#2?VmP|+Y!@BxUDDl~jUC~2tO!I_&iBvvHuYG%%ynS18m)$ZP>?As(|DM9-yPkFkC zCy6+p&(R*}n^EnTBD(vH=sKd1% zXbSu|n^s@R!@dP2bEXkfu^7%fqbKI|#M!8NPG>W;L+5q%0&YSNUCS~Z$Mx8)+YTeG zn~jEDvn@{&UaNX5?5)>rzR!h9fla5(m1~R*#;WOAD^=$K7Y)OB1S=j{EugXl`@8oN z7p@#kBD{Q9bX;|;Jf^zLP%SiqPSEVL-|29_6>z&BJlp1WmtXY;p}x&VyAz<~qbCfw z(`))27H<1RyWfiPaurwCq*1Om>NRtn^;%@hU9DGZa${b!%Dfh0fF88vhyK&h-)coI zHg;NG!>F6w>*@}9m7;0vYy4~Q24Q#9gqo|n#$+__I)_>NWzZb_cfQPX*{xK{u45be zLl=jy3{GqUPJS2_gPRnv1UDsM4z4WVHr(S8^G<;L3ZDg(;J%NT6ck06;=i%fEYKV% rEqx0hDK$O%j?g!d-4l=jcrIWb;I#mm|3N?z;ERA1zz+c;@)O_>e_5{i literal 0 HcmV?d00001 diff --git a/Ardent/UV/APP.PROGS.O/COMPILE.PGMS b/Ardent/UV/APP.PROGS.O/COMPILE.PGMS new file mode 100755 index 0000000000000000000000000000000000000000..919050829377e17d91c10283d2c9f27bc46978a8 GIT binary patch literal 2530 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 BIPL%d literal 0 HcmV?d00001 diff --git a/Ardent/UV/APP.PROGS.O/CONVERT.PROC b/Ardent/UV/APP.PROGS.O/CONVERT.PROC new file mode 100755 index 0000000000000000000000000000000000000000..3a7adab099950bdcef26d65199535c0de83ffc38 GIT binary patch literal 7169 zcmaJ`3t-dbwLd3m3J5AHDk79W;SFsl6=^xdQ+DFv*EsE9HZ zK~VvDC?X1?Q|1$Bfr3t*)6KE9Iyd*Y^X@vY*X?d~b8>&@%sKGrp&Us{N=4iTkYMl=qiufGWp z?%-cgH++RKdgufC$npW@K%U7=A1d}J{_-32N3?}|=~rZ-6t=?7LcbnGnVUqqMU6iE%gDzJ3 zV)*=&1}EizLiZ9me@2%k>Hnn5s26=0qIkLD6^d6X4pqELahT%Oio+F0D5fcnR5TPv zDcTiBD~?edt2j<^yy67KiHegHCo85aW+*xorzmDBPF2iOyhd@F;&jCsirI=eiZc~+ z6|YsCr8rx0j^bR!d5TWO`HFdp`HC*Z0>uT23l$3$7b#w+Sfp62=vMS7mMAU;eokKC ze~}OP1^I!0rcz)xl_@R({)Nhc|4mDQpVKnnU+H>a4^;rWX*uw3bOW%LR$zQdm6VHf z`FE<)`5$zn&RNdRP0!I*wsH#p3{ku3hd>*@sq|aG9y+G<+loI@d`I!e zitj4Er}z`apDMmjizt=*@#~oTV}1kA^y~08fJ5{K<_p-)1NZ_S$RAk-a{m;9)gWm1 z(uL5KxDASpicRR@b951RBf|!zFIKuy>A_0JbuLl*xXLe8`h?P#Dczy;5T!enzFg^( zN?)P$DW$Je`i#;;l|HNVRZ5>$dYIB(sO&iM9f-<0Fkg+z2J+QB9DFDE5#WdO2u=fk z0{lquX*`k*RBkZQV4KuFijOOHD0V8Ifag=Nh-;2hJv*O*^kh;>G)Lv5`6T3LR34(U zn8zTF!DDzV;+~|@JP!O=;CRFxkGSn-+%p>MEUdd=H6GfhF;9T@c%Hx$p*@ignz~)8 zdm2021f7YT%8i&OaevU0crtV+^Y2m#zK)}!bnxknix%hlI5lGAq63W>xzvPSb?DrQ zE}g<1Z>XMViJoYQUWaPtLZ=BMl^YN*?suN*H^5f@5mkUsMR)9+fw&ngyxgvhSZ%^c zr#=-5>MuMUJdYgM)|Yw zC-Rf{*Gm?D7C4ogX+L7L3cf!#y&W=fPhkXp261PENB}XcjwJ*5+a@&iAP9 zd{Z~O58XU-ZC)R1`R3Z(KGs~{icw(d&hJB)&9%Hf))ts+`QKXWr9y7g+E<&kx6x`^ z14%Zo#l9`XzOA9P;IHGGfOEMWSj0C2i+LTehi)+~*MV9OiG^>4`hAcw2 zYS-P!LUspxI)LvJ7^=_2}w3@GWG7HP2d;sT|h72t=gMS?Yn6+eGhtz@#NeEY6J4wfEwcQ z<$UCl52wb@b_~hUZJy2|tgWL`+yF#g(5s=cpDJ;(MHlJ1>)aD4x%|@VASWB<5)>`1HM;w<2l?V+CrGxrZuoc9wA^SMgEs%Td9NkW>K!s5*di z_gCap!S7@B9@Hp3@1Y&2d&nS><1WWsjkO(Ek^Q&_o!Ls~bkEB5o~!1aW+gk3=Ps?} zQL~a=^e9fjIn>s`*|;6C|L`ZhD^c5S+Ktn5j+$u?);3~Io}WGVRJRA&WFyN?j3BBB zat+ra=UU{v5Vj@IsN=oRx9~pnZy)Uih5H?Al~~)S`94PP(qr_vYVC*D$FM6FegeDl z4yebe9-g1T&D)@JBR8=fbQ3r8U}%NFHFJo=cvIB_TM)kmF>)@%zN@GGy1ySH?}YCb zWZc3l;cq2JI0}m>w?qF6jlGXzT>Xvg_Go6i(UCF8JMJSJR-G8F@X^YvxD7tqSk~pK zKcJDb`CrwvLAwpvCNhZgt6{yG*YH|cuSL#(`9{tO&6{9(6D(6Ptk9IX5t9D27T6BU zb{>9Fe818Ve~@;`iWTWvBj1evv;)^ca~)z-LO0QuM2vNau?~LatcowOyv4M5yAS>K z&|k0m@ts+3#<~@;*7L2r0kJk9R$sOoV7tMLwaJWi8)Av4+p%H?y@Bsgek0!r{tnx{lEjtU&v2_ zKL9+a{4M+x_=CWwQQa=!A!Kui4_?xDZSh?`thSB(3~UbrkHF>#A0FJdjr1XewM2i9 znEibg5s&b*{G8d}?}LAizt7LZ+wm(mE-xCM%9(f8okU=rBE_mPbs>XXps6!+UKJJ}LFX8=`?~@r+hr zpdfN!P;)p|U*iabo14QSvVPtF{AFJapuDP3C>%4YgRx+wxjqy$>O;|3Ra28uT^|Vs zV&TXdqopcVXVgT(&Bl`YP<6O1YIuXS_0d>ljl=En7ZxlvmU>FPhHt6Q?eu`Sybp>n!lp7%u!I}Ec1Ai1Tt_GyL>+90vBX(;3;+c^9%F* z4l#6=lsHPfo&~-e>qD(A)m4E&xHS|DRK-wfZJ-_)t!i#*3buyo%Yu<;u+*IGetX8$ zDOq+SR@D+rH|z!WjGCr!OUoLxDB1`?o;@Q_6^TXat80S^r4oBaOQb%8rluR=h++5G zGs3aDV8r1s$Sd(UBh~1I;S1Nq+NvUOS{MpAX3Pj=&B&TIb^6qtOh;yxBQOIZN6k#f z)ai~)NaVk|l`Cr+v$A5LoM>=bv2RJCJKy6orUZ&TUY9Y&Re{nfnnI4?>Y$R%tCD0( zTXm9-G$+YexHV9h9Z-w1&Zqx2^sWa)1SLNdaa3BpfLrp_QC zB-RxPVt9hE3nBSTND!GqxFN|ALW>2 z7XX{6i9fPQ?b__=;!NZ-#IgZ|wN{``pi!V%ph+Mk5EW<tUwN=lvG|e_l7NkO}RA`k7tx};?Dzr)kDUy7JM8L0f@qFrq6R}mCThB{E()3n| zceRMVf=CTliRwQ^VKn5oiNbIYdH@fA)15yegv5VA*5!#)cdrPSCY&Vrswhd6js(#O z!uoY0_({*n?%>1oDwxT(dw&9xUr%-E+IN2qVXb{ATUv2lE7qv zbbwl(6}5~6_quQn;Xu$E!c75T%S)eVK$XCa0A2irECxhWEf7q|yG33jqFRAEfc5Wk Ol&qk7uxQN~!Sp}qbiJexND#>Y5m{m&WSK}b$%L6n2pS=oWFUcLCQK$k5OD!T z2~tHwKvYyjL~5y}ZZ(EQQL9y4i%b1najn(XYHBTfzu$T9O%mkmKk!B0xxah1d+xdC z-uK?j@cx!#Z}q5S)$v;4&!}pBhknld)|BZQJ#fGYYL!>1c`1}BHM_4;AHA*A7vTMf z>rj7#!R%6#^e=Rm3g}ZngZebkkp3lTxjr4VLZ1OTSzDl$`b^L%It}y^eHQ4YdLU?( zJ{$BhJqUEFJ{5GDP6w^lgY{a(7S>utl~%R7POrzc8siQJFQQ3ng--8*XXu+?U9XKw z)hVzussXKwXX;eJso>Alo+O^7`y_FrJ}ilwbYH>r6V-<&aZDeP#LfE1B%ZDNC2?FI zmBcOj=p;_)V+0=qpRKxol0Qcuo5XYVaY;N+AFmFT38gk*E&u=JqDzJK38=lWK2hjN zLQfVtK#(%f>RM^9({<7= z(Gh8{*VAEjgPx%()lj`uw`05vr}aARFsB{vv?H80(`nCh+L2CszO+$w4o({Tgi&fE z&c9PkSP#)F^fG;;_Txke>wM7Vx$ifG;%&f-!6EJ;B|t>3cf>dmf$-DUm*A{!P$b>3(gUIx8Mna z?-4vs@V$b^V@9Jfqm^jKqTPU*tpvRf{Veo1qJJOg{pgQDe-rxmgFb+nKY+7sK_AY2 zvmT9EZ`NalW(gewi)>ifnkz)_L7ffm1xc<_n}xqcUjTlN@S|!1+FxUw2S6VZ{Vn=8 z=syIy72|HjxSu)W=EztRpfw&=ThWd~`&(#l1$`LW59<>Svtt}Dy5n>o-H5e$80{>y zzr+3GVbE>R-KNV>SIo#}{d@F(uNz^Th5jsDS;)XFTv@6Sxf&~Nmd?^Ualcz8deovG zwWv21BT+94Z5GCxiScZ|TSR{*GL$X$&!OK3_(A;$#(hMy&pYBQXf)#LqsL23ee^iA zk09pXgFXt~N3}xC9CI9GS;#{pF2>Yf_~Q^W`Q&o7b721{+6ibML!KT5eH?xs*At=7 zF&m*X3zv;208bEqtHs|;XO1(SInH!)F%vVyf6AT{TaL%pj%y}7=16~no*?Z7SoJQ| zuFnAt>n7Au7;%v^04G*VJ%Q7sLNz<>Y_w0HA9vaoho6x4C-nztx9b-5lX_BjIOr+e z>7ea;hl6(NT@HF$KjWa?`dJ4(r=NGwAN30kdQr|Fdj6As$>F`M_c-Vk{i=gr)2}<| z4MfUVE>bt)^r+L8(W(w}eiP3_tyrs|`m>%RGo7nWS9|d!G)K)vzgEu^+NMy6dcG=C z^VKqaIe1~cK&@5_)aA&|$|IFpERqH2)#>fHu0YjZq25ZKkEur})eoz-47!xO?MMcK zp9()6@F#Wa$lr0~1&5G-1AFGS4y#kA-^DK31J2`mBd&J+7u4c5(DzV7@9AZ*r+$b2 zADPQMwXoMX??cD+_W}HU0Dm8%3f}|$2p&Gd-rnoP(2f|p=gG|2-Z&@M$4Bt-k^WeJ zA~EelO#2Yir-n{+&XP{p~|4SW$K6BK2d|G0k zL$)3xu%*A4lGfE7e3* zs?lbp%(NZ-^|+M!PV~Rkw_z_OZ_1FeMP?$`tE6*NS?+-_GwIHpT_mKgqdF^s=1BM6bwcO!S(Z#zb$(X`Dbz9e5AzQm^VYpq+XxvN8`<;pTC$ z#C^Eosq(d62->c1R~u9yqjw&6ITnqg|F0f--*L#iJmcuE6aD|bPCQ4rUR|oOhu`-9 zGk-@I?pV&UJAd}wjJzWa_a2dbH?y)79;?mdJ($DM~&c}{)rj5|-=Cw3bhyZh9}L)fiH{D|{d zC1cN1_siJqXQ}n5gH7V&0msKC^}r!~*q=uni=DGsou)Ud2gS!i@v#oPE#l+Xj*l(s z*N5=I_-E>eVEKq+H&g#c?6x{~zfoHcVHd@{zI)GCAIEvr>f_9B)zg?)G5TE5he3}w zzZ1L-6wj8Ro%#{S_wUss=r7lgqR%t$QT02u4J*G5XWj`oU$$ZWPBdx2Cz_LRzMO>f zWrFxNW*gSOP_PzUDL5=++ESb|NnSs!G`U@Bhki^g)f-Sj->91qBWJN4*GU-fB%Eg_ zW1N#Q&PLc~LdsMBG1x6skAt?UCqOr-KY-q$o>X68PBEd)LT3w&Lt3jl)Cs6*xKiJo zq||XI@cFp|e0zj`$8)U*m=4vU`hwn}eu0s1S5@FI)%PR5EWAH*RJQiG_sh6<|Ce#? z5#8~)N*x%luUe^2HmAb>spez&=X=I!<|%l7O8pY;CbX;6>82Xbe!M$|^%XHXl9f1y;N{sZc9x5yHZ?ZjGSqfJ%Y5zlt@J=&!hJF3pcn|eCpNH<*~ zk3t^B({WVoP=n3s#(FB&JI=e*YnS*rBb9B0T=sbIn&HzW} zG|Yj|Se(}j2kDG-bSCuBdHx`s^BtYK9y&`8(i!FGT;D_IrGs=vJ33o>=O2c|o`pKM<+b`HiS}hD+LzSJ=yU)6yv_$3^7!086cG(I7nm%Z1cO1d;WHaP zPanWB$04uw&T#n!!tY)G)!66M8t+)wi%#$QcXcuyon@layZ&9B97kuX=-Bn|)~%~E z($RVSzvzs1bh<>xuI+>UT;S-OhB>%3PB{dTN*D!xZ$N;OZ$=-y-qT zkP8jpv|hmpZp$8mtO~M0dY?+j+_G_>Gsw>#d>8eKdR@JSxwq>#aGtyU@Te@GT*B=)MIFIf5C3N7&U(}YW`@f&mi3o@At2(!N94|vc2t8uglnF*fqs+ zNA{XGWh{F|?E7*vY^tHbJ21UwsdLQ5rUdPqss#F+?|A6+!>1%~!gC46FTq|f#rUNd ze+y)Lpj&EIqTjCl*rn9-!RR90oV4{HDxIg7qY`7q%SlX%&$10?v5#r{Vq7 ziJGz5&lW$AeJJ$0W1l3kPcprI{n#V+07efW_8>+NB6g0$*n@~Yh}c6;>>($1*Z*3{ zO$gQ@vr7FLd*{z;8EjM43yAFnR4|_V&ca%NAA;`?d_M$vw%Vf0F}tU6((Hu~SGET- z+Ekov*OS8jq6Q-n>t8Z2#jp&S&#+H8N*46#cPCm`zr)psJ!5(wkHb-QThdP%{4hVe zB=;fNEfpqYmf^W)GP2bH+5wMy9lKq6GRB{5u6OL75xdEb-DI(=6uZh^b{)DBc9mvt zukk9y?i^Ezj6bd3!ioMCBAa5~lFwo0VVhEXp=PA2ryn+mS?=rJkU4|Smf~m+t zg_&xmNj9b-8{K--pf?SAyi>g+PigPqG?)gD)3|={*@cRD2P?b`@@^0II&givpkuH9 zG^~Gfa{a~LS^p~S?vO4#!~J}3OhipECVO9VlyeYmHQF~-wX@Gof{wedtC7=chH)PSk3rdI|Qt zpSJ_=#;1L*-H0AFVf(XJ|6Pohccv0em$O@DXn%6pQ|@wh!{!N#apBt%#FzkPgtmRy z6zboqu=xvC180HA{^H2qk$n~g&t9vYYJL)LP)D4Dy^lLjt$9z?;bIlDw)k1y)9Pf< z-Qb|ETxz*%|X->+t>ic{%mo1efQAeL94Z`LOv4SK=LkM?#vc8so0m7bv9#V5ocU^PC#I2#ZL??X*$vGCi${SYVI2V757 zG`cU5YxX#nf$C&X3jKO!i4*fAsxlbgH;qbQ>J0Pt0VT66^G3aEX$9J1g zFjB4l6tq)+<~;d*sy>5{&(#-lT74<9uN>Kz>MJ=jK1BU|qP~W#-uw-;U4H|O8OEdj z3d^t6-%wGu4_RTkZ-(&<@`?Hu+B41H9VySX?;QLr@IT?D0bc$Ny??0h)IX8&ZxLY_ zd*WNH)GU(*Jj*niqjjTcLSCE9?lji#w}=66e5Mbsm}$lyu{pEBnQiKI9G1-{Zdzc| zVz$F3OU2B$(CWhV33gu}WTO`T?!omw>!XHxmv48Lxneb}$+Zd%9eyBgv(YMfNqX22cDfXr4L{RN{=uL;B^7w+y}dDkayn| zY~D9w(+SFWXukmQEI>S0!14-X4Prb8)D?*53dFMz@lb1_p~X(|%aMkgg+12kN@!ha z@ST>q8oTpqgKwGe{eN+q#Q-`Qm)~Vtp7>70yYlI z0dnTW-mi<0y+!7FWMDlsS4%AIS|jgw3hofx7xzexGR)E2F0#&Evf+;GU6JkRCA+|p zb%|_OFWCr3cEVuh;hA2tOh-0cWY6}J4RB<|B732i>^w(SFS6%*$;LUd#UfkUOE%Jx ztryu#y=3P*vL{8hraWTmh{W z*zbIY*r~Q3B-;krE%4#NbEOCQ*mjV7CAj!CgZN|fEI1+J$Sv-vu#%O@~{FY)CzN(St-`fi`SLCG*)5^58hu^;w|MZ zwc4zKMTc60w-`Rby1!WIBls|^FHf#D$kH0r%{rWE_Ib0m*LkxRGUmGs-!s~0?^;-_ zHDl1Xf63MtXWZ?06I^H3;kv`ziBbFNJ568ReJ{OJ&Rl!O>jm5My&DntQFp;+nO=|U zZgUU3+ygK7ikExEi+dj53(Et}lg535Z7&;OE}D15-9ytq`pzof)p>MisKyaoCAA;*4w0RR1<_xD## zu|&gkZ*8opDHc^J`}-a^{-?v$kb-=#zsy$}Bq$2`O4#Ol^Zlh2g6yuZvTQ^WWhT*i zNi;Hv&QGFINi;f%#w5{LqI`cKkQ}R!oDyF!n0uiwza|=uC9JwgA`)+Eh(@f2XiK7| zvC*n)h(~G@v3Q%+T$8A`rpIGV*5rn0U2JZP6^P7eXi3D|yruq7QQ;J8ioZNy1*Zft zD=W94q^Ptg7z*TukeX0^B&lshqOh@=YT7IgSzj|JV%5gt9L8$q=q)V`v1p68s$g2F zZ*p#azDirwP?5j1tSJBDfG@YWC^V&DT6u-HusFBEA4md3;7$uXIPjO3h6;-E zLtYx@mX&$S0{#nw;f82yb6rhsZLBq#sI5t0rZZ|AKwD~>nj0gn(T0jhyd_fZv}vKV zj1j{!)2u{Ib7ZKMR+yGCy)o9@+=djj%mO1nEu*$3o`^Tp&4{>4Woa4B@rEdpI@F5A ztu%jHMl4YuiF-qZ`DOmxcpY+K1!L0_b8F&oS`@AIjv7^)IVyAHi1SB`8SWjP>8%|F zmUsGC?}+og!@=SI^|NPBpOu-Jh>mHAj4TOGE-EeX2d!bXCH{cV8s@9Q)T$bz-pIU& zz@|A#*gUr`iQ`R4n25F3)+c-Qv6e)%rYS-Oe3yo-OD{WjK}LlykQdC)4doX5FZ2~y zOkyCnBzUoJ%4C0_AXr#b>t^W65#@Q>+4CAxeV1VA;e# zZqOGj%MIkhN7=+6oQeCO55}eWzF@#t;t%W6?QSKa`TynrLWjNVE+p2;@%o2J-`@-aPI%Um)bI@aG50 zO9Qz@1=)oGf64fezbHDVrm>+8_DxMS(K@SiSW*HHn7k3@g~yl87|r78C?au(q*yQC^8vmY-1>Dr=~nRZ^56@E0J1fe6M(w82q{ zuP8b_7H@)eELvV1Dng0-${Q06;6#c_GmA`v35qpOdWxUPtNK1>AT^k=yEn8-}af-&l!8)mu@VUReLyEC+y?OphZ(c#nYKyg6 zb8AqiHQ1|hCI&Shk2J^PiJT!*d_nAfTX#w+>bJ4AE`og>&F}>R{y>jaXt59=YTq^W zjY4Wh49^=`lqYH6Qeag|eW;fTlt#dxALM=|zhoH8$T_28&5@`zy`eE;Wmr8~Q~`_4 zu>6XmVR@*qX)MYDQf)Wxv2Ic2$noT~Qb78ef^Kk51DB{j`fY&y!k zs05paprx&NE7w4y2=>_Qs zyQ~JMMtWKLe;UuqJfC(2zG7d<=j8;t!yZyradBZ$0X9saq%y}pscceyE<(-ku60Dr zb!S*|ytcG9bEP76R=5q4`kI7QYoGOD9=qHl6xKziqt5HBnid>q)2Bz`JeYdO;WDjP zmeP=dc+HG>O>@0fQ&$I5s9>pNWxP$b&5dV`7-Q|v2;>%E{`;K-TNV5F=k3ocE!@Aq zU>a{f+|4zOL(0lSyoHu{^RlcV`9-Dd=jB+#h7Af~d&1aPFetdcY~udB9B)oePL;|T zKG0hPk=H*g55y|==jRre#T%MfU%2r`tmc@UyQtX~D>A#a0lS)WVu)yQKw#HF7k8dI z3)_91ReaXy(aB15bh5Y-`0KXHvU+X_%sGY(&W$%<#K=6{4S5FO6teAe4$@_4xZ5@2 zlxmbjA=^&ku{w$RhL#?-byBuosq`V`6}aIQlmsvAlZuB9d?~Bc2!g&K{N@P%WK5|% z0uM;B%bDbYOI;9gLCghhE?DG(8(nal3+^U33gkfo4)GWPegcg53Z+sk5?uKAHu!rE z7j={#@AUMU0DU0TBLUJ0sCg*?r%*-E2cV9CZf6p3uB`-z0kpZIs|c6@zN(7yN&;r! zE?2~V;UPK?6EL(txH?Y}aIEKC@RAE&Cty5pyWm5DQgFT?;H1XjSsVX2OyOq;00RL6 z1We8x0_yOy85!bw0tUaFfb+W51?vg$`(L~cIHE@hjs|BZ0e*I;_7KqF2LLIYU<$&p zbGMJI60)e7@{a=t4y52Zkn(pBzO>?3wj`XpB>Pi3BmXm6&ICxAK~hgLi=>I9kpwSz zDy4;_nWU9u4#`}Sc_1FHjfb&$m`e{Q>0#Ssyz6$r1Ee^9{kQudGI4K<-sqel!qzz;I}j?g?f^eujrR*-vXrIvKKD}Q|4tW z9m$?-8V=l_Jw`37ateD4U(@lK>~S6<8_k}~g?8iF+C{(_>?Ys}{t>`~-)ATfeng^D zK6MpdARoV7P#*j+KzZ=ZxUK&(`Fv&Z;0s*k;dmZ=J%?Y1gY2QuBI``DsPQUTsSN#Z z020Gb1f2f?0xr^Fh)AM3nSe<=m4F#L(-jSIIbH&$b~FL=Kc0Zo%qO7dQWsPZU>G%( zfL1jGtj>CXR9d}34yW)wISlmxIZRGJxEF8~!BB9H2JoZ-$b7TNru%FHSg9NWrXrt! zGw=~`oKgZ@Y6=0voJzpyPA6b}HoD+S0yt6gvn0nds>1f1zg7px}W(XftyTjC)CZu4gexD)?Ez#M!@ zz=}8-#U^P#1;8@`98V^Qgmwm5=aI!*nCE=*VW%weN0Bv}WDE(HNQ?&2A=f{hTD(zv zE&xf9rQxK8Q-KSeNrh}Gj3eQV)00Cofh3nC4@5FCnnsLwEI=xYGMgOwDlMjxkfW${q2qF(B$t3lFwOMNM;A{OS)AZ(j!e+vf>r`n|6G?d z&*jVq@LUFwXDW!~`Es(RvB&VQa!nSw;93H%>k=wf19)mcC^EQLP literal 0 HcmV?d00001 diff --git a/Ardent/UV/APP.PROGS.O/COUNTS b/Ardent/UV/APP.PROGS.O/COUNTS new file mode 100755 index 0000000000000000000000000000000000000000..9891826b9e983724f6c0adf98eebab18f83ca880 GIT binary patch literal 97 zcmaF3MsO-CgCGL~12Ygq01E>MGBBt}h%oQ~X(^~UBapUP!N8CJq(K-P&;SaaVq^lE M#>f!E7{kZ_09mdECjbBd literal 0 HcmV?d00001 diff --git a/Ardent/UV/APP.PROGS.O/CR.LFILE.B b/Ardent/UV/APP.PROGS.O/CR.LFILE.B new file mode 100755 index 0000000000000000000000000000000000000000..5a7ace49d30450d4bef7e1fd7a4bc7f74de5659d GIT binary patch literal 2243 zcmah~&re)c6#m}4nSnwb%AM%|!_ZDCMX^A&{Ft^Vf+^6lAk_!+pc99AcMdQkaCN3J%Kfr~F#;~j3xpSu(W+q`??s@0OcfWhi zxp(e+`a|1SA+(_jrQbOW<6S=8e8;=m@pBM(W?~Bg;ExADBvcy4edLv(b%@tsJ(oQQ zQ15}QWl+nImSHU$h*rcjAdFTkj3^EQQLJj77#eX8|8m`jv_EAo_xOHl$r?R4p=A@k zMiZJ5!=LoeTP-+)lXyhjmxd#V59x_>Mh{vshF;1S@G`AFYsj+EN2{MR+vtChGk-Pn zLYT5!5kUe2%&8lHYk#sPr$Y?l6fzt!y++w8tys2_M`CA>SP5-K49hufrD)v_oZ{ZJ z;xTf%=6Id8dm!B$L_0HRHyNC#7UaAbyD8pMCQ)j)1MQFwJ!UPxXwIR!oI&;{h9N7! z-dte!w}~(B!H?D}cnMcHhS7nr)j|H!t^pm~t3zC@;oP%6)A%@9BPi)f>diX$PIkJJ zECYP<=wvlzzKrG@sp0#NEU)v_?pqPc2m;m{w4-=JJ&IB8*C@W#a}zalyR1RH$-YVt z9%;;_8q6Vc3!uvyBeI3azcg;VF3!d(&yj^!bo&xgM&Z_-)Oy!dH~;3m-|C3mWlhuZo!_lXQB62Z*q2Vc`H8rs>W<~Nl}q@DFUsz2GUE~^Ve!y{^Kx9Ap91CuLCgWOC?E#LfrQx|7uryX(s>2p!6lvF`zpl!8tb{%li`8bakk9R^ z;vH8l=d(9mzu>CL%vLs^EfjsH==o~h$yf6fQl_i(o|^MEH>FcES(Zusu1bH*xz8c9 zc@{4rHNUg9=K9LpP>#R3v*qRqDsRtJ&RhRT6|#3-rtPW1mXph+lzMNcP*iKKa*8VF zI@Hav2#0yX!ly;>m?7LCLVP^56ddwK@Pr5sep~4hztu?5A{Or+@FoUtP%47#6s4O& zao94)e#W0&=H%T&m+;woE#VUv|ApWeknX5hLNzXmxMw)*xQJ#Ey#8P}Q42}XlDyO6 z7sV3hIk8TPm85uIl=BpKIqaBNgB0J1bw(^%^>N(0Orz(e@t19Xb=ply)wLRy+sq&#x`_1!PYHX|6+VM9t-!>TFDmr zo?57tQnUj5f@q^YIzzvJ_k)fRqcvF4SdpZ&G)`|ozJkh=V4nkS2m6`k#_6$&73FaV z`$N%!=>24feo9b=VsswTq8DJMb;cHYRfgT7Y4a>t77dVxZVqbygz^ufo)IBn)-7*c= zt?d#+G=VO2KW;0|NFAq)+zjdx*T8H8b64@k8uCoKFL-t?ss5Ew!|SL5)28!yinZT} zjOy%ruyIdE@qJ>>nC3jM;=EtOnbe%Wt2k3NoN3LGvH$kU)o{|9GgHNxso{)j&Vwq> zYz-%?Ir~SP7+uHA+^FFVYTi#(ybl`iQkwT0c-+T1bSUc2RqZ>}z7MN>QT$f)lGlAy z=PqTT?4C7r0L7=54ur_Y*i4XXbKCvq9ho<1*)Xo*zp8 zGuMOHX0O~V6y2;`44rVNB(KQ^Ob&1Y{f_J83*MI84E*gAs5%EEnU}{RM@7iM-SC5a zeNOj+Ldcth{s~(&AgY}jl`6;Obq6iTbJz{lI$88l32d^br#6fKr4Px1_qkInU1TNY-{y2yg3)M{eEHjFU@9{!}*DHeDzoiMRoG(((W4Yw!Z zJ}3OLfWW>uYo>Ch7)7ygQ$yo8CI>QkH&gA#tJsNe7~$@RImsGt+s%N@J$Ov~O(F9i zyv!CxxIf7}4TQfIgi9HK!w)cEVKW$pSixg*1ThHlHEW7J4)i0NGY~Hs@RAPfC)l53 gzsY%*yvax09+cvCulO<`p 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 literal 0 HcmV?d00001 diff --git a/Ardent/UV/APP.PROGS.O/CREATE.LRAW.B b/Ardent/UV/APP.PROGS.O/CREATE.LRAW.B new file mode 100755 index 0000000000000000000000000000000000000000..fe0019b086598ac81d07873d696378fbfce60b53 GIT binary patch literal 4456 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 literal 0 HcmV?d00001 diff --git a/Ardent/UV/APP.PROGS.O/DC.A b/Ardent/UV/APP.PROGS.O/DC.A new file mode 100755 index 0000000000000000000000000000000000000000..2bd4fae0e457b20474bc407ca5a83a1504c02ba0 GIT binary patch literal 5162 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 literal 0 HcmV?d00001 diff --git a/Ardent/UV/APP.PROGS.O/DC.CORR.CONV b/Ardent/UV/APP.PROGS.O/DC.CORR.CONV new file mode 100755 index 0000000000000000000000000000000000000000..800bc27199456d5cab069fcbf68bf13059a75224 GIT binary patch literal 11652 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 maEAbwN$ro~`*g literal 0 HcmV?d00001 diff --git a/Ardent/UV/APP.PROGS.O/DC.F b/Ardent/UV/APP.PROGS.O/DC.F new file mode 100755 index 0000000000000000000000000000000000000000..59f7ab20eaf8652e32e06a5f4fa1ad028d9c42f8 GIT binary patch literal 2935 zcmZuz%TH8S9R6K~i#!z+D-W$#v_4SA_iNCpGBZ$KGcX`%0foXSBRDh61+0Y@ZLN0M zMVmBDn@n8Tq}3fsyK6&j(z@!xMHgMz{sk_YW@4)L`_8>*e3G2+eCPK*zjNkr|GHK2 zxhWM=B_0tmqC= zk`2J!QU}~48-aUe6L6or0o*T}fd^y@@Sto39+GXq!%`3Q$#!6)SimE)19(&#fPSf! zjIj>6=2gBoQTdX5sQ5APtQ?mb`CY0dAP;~|n5z}@!#7V#jRY_VDd&(hOPvt_w#W^m zMSjAb9WOt+LW{Sc$w0%siHh6eTC^bU5@bKPK7MJ1Z33fB+Tqg<-7xybYIk7vp{_Oz z`n0+04y?1%Dfz&VnCM*ta^{0^2kk0T7&9|5&wXekZuCD9gSB#B1=!bppw``T;}^KS za3VFSNTtS-q@Yj0zRQhu4{K)ZcK6l|&U(AtdYPNuh`RQRxH4JTEK_wC0(+!LVKLAz zB`Qvds*HKG-@ZJ-?usBUQhoRWYwCO5xV>0^X1uHqLSKkcgbFi8w|oM-EW8R-w&It3 zGKOCmn|tN#gLeT&J}P5%rG~THo8aAYLY5zjY<*1_!_E}iL(x^qo3^JZa zPZ|Gh#2>)#lDr1@uUb~RxhlXIu?D$#I%OCcqZqY*1z+x{AAMhjJ@v~V_8bK|cl4I4 zA9VFvuFrJ{mI>VW({cvY4FZP|d075|A2W?$F#fPQ*H+9=?>_IvJCJZ5l`(X27#LIQ zvvLk^hzB)~t2r*`5q}&wq1Hi}#CigFL9Kh?RS2GtB<6F#6yn8zQ>bT3&_Hw`Pgbd_ z^4zMXR8>u|dH$Eqil-2l_G!eM0@{dU%VNHBH_l^r^p5;*tg|vLm2Sr?5y9!WK4W%c zm7CXg^V+H#x|cIDbp0>x zOYdV*u09v*vg@l){n=hYYIU28}@jPa*z4 z;V%&B?2LrH&5@`#7?3AM*7&zv>VpAqq$?EeA!+Rmb#gxL4Mf6yiaE>B$*$cwwkOB- z=GeX*+n-|xa_nG^9m=u8WPwODn#BIJ$LPvt?a~+jcy0 z&KjLesyQ{1jwPnYV|Lv3S*?lLk;(WNqUg+)or;ad&&EfQJejaA#;3=TrP=Zg3=Irz z8LVsUo=GybJ)LIM7o$%>>v&!mNl*9!;ih0~Pv0?}M+G05M7+`DSjo#xDe$AE_kGJ5$;v=UJu%3jE<`xoMaD1V-k^`C? z)1*z4UQJGGGOkHl6Mm7X$k#~90H2aD#n&VyfEySdUNL2OTZ_LZp_n(>lLw%eBl?+y zt2-DbnMng>PLapM72y{QQ>|$5E5*A2cQHJ8*#s}4$U_oF`47WXVy+%x(ACjB1~FNJ ziC>eL{Nz*4Pe@)Tz{jWuSx>?MtpJk^Rx5ttDAGHu97 zv4`ezE$XId1x4kA3c^alDncb;HGxNMt|3$bj0QkdXIfy4YU*kTwS=_4Q`bTZ^8_55770ea@ literal 0 HcmV?d00001 diff --git a/Ardent/UV/APP.PROGS.O/DC.ITEM b/Ardent/UV/APP.PROGS.O/DC.ITEM new file mode 100755 index 0000000000000000000000000000000000000000..4d84c1c18522affc8f18bc282f0c3f00e6e461c9 GIT binary patch literal 1736 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 M_&Hw-a literal 0 HcmV?d00001 diff --git a/Ardent/UV/APP.PROGS.O/DC.OPENS b/Ardent/UV/APP.PROGS.O/DC.OPENS new file mode 100755 index 0000000000000000000000000000000000000000..0aa584c87771930dad8ffce079bff7f3e5d859ed GIT binary patch literal 2787 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 literal 0 HcmV?d00001 diff --git a/Ardent/UV/APP.PROGS.O/DEADLOCK.B b/Ardent/UV/APP.PROGS.O/DEADLOCK.B new file mode 100755 index 0000000000000000000000000000000000000000..3bf6a905d6759f488451a415fcc67e7bc6645e1b GIT binary patch literal 11057 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 LwZW*lWe)!jEkjeZ literal 0 HcmV?d00001 diff --git a/Ardent/UV/APP.PROGS.O/DEF.MNU.B b/Ardent/UV/APP.PROGS.O/DEF.MNU.B new file mode 100755 index 0000000000000000000000000000000000000000..539f0252fc48c9232fccb4b313792648fccd441c GIT binary patch literal 273 zcmZvXF$w}f3`PIU>^SSH#e#*kScqq`n8M@O3WDMZJjLF`D_B|j5@7`~A(Q++KOuSC z`%_l0pe(ZqzQ7B4vs&r~xAPyNk&YMXNw)ZBTgZbV{Y9-Bst=li66i$^s-vRQ8Qh_k zu0#VW;L1J$ZL672Fh!w`qr&DIYm>ihW$)jB20F+yhw&k~+3oF_a-c&_j~;rYS~g!6?L3YG98VNke0xKOxAc(HJ? zaEb5|;ibaMgiD3ZLS5J*Y!$W%+l7}4mkE~(JA_vVR|r=MR|&5at`=S;TqC?%xK=dE4)tFBkUE%gmGa)c)c(QZl@IZIHkdHoa7Vq1oeX>G$6bI ze3Ayir|3p-JKY36O+(-)-3*S9^642z-K8#t8gx#qhTqZr>vAOP)^Dh$&m6T z%1ik&70~MyD$+sCqY|yf^(t+oW4LzWnb?PN7wx8?HU{p&GqQ&gfyrm&H9QO3r2S6X zOPgrYcfrfZIZ9?NvJVjxPnn6>WCo%g$gwV9VvN`Eo~Mn{8))$r9jN7g6S-I8IeQDe zOv-5{a_pfdZ4V;*F^m0pPJck#RjB1QPivdd!p6F7jJ}s%!gm0le3K3!QlW@uq1;Sg zpkEj2Ho)J;{*548leVAUp$TN2pw*~rMZb5^`aM_!y^ocBfSlvn5%f)*RDTe$2CWIX z4q;ahW0Vic!MBr(?*xaAqMX2*CNRcF$o&zG*ZO{pmY>iO+9CHE+8v?eSj)IZiv|{T zW-QD0RL<}W$1GWfDp{_VDVJ5QS!oyz^4KjKrvbONrTeF| zjPohkT&29CV^<4BrE<36%26^#aU9iR)tpz0Wf&YTR}CAOiDQ`d79-b$!%uk709*mZ zz$JJ1MJ4=_^4%IhT3!TM$B|_~mWBI0%W?|v97_|hlVv)vkA=Iw$1)W-#KKjdv78Eg zS&tlLnFjpC!d1W2<#!gI+FvZ(=5H1rs{vCGnO2wCEIgmH>N1}thRDS%yeN<5Ovo6^ zLdbTOnUMGEZ9Zq=A--VY$$!nllmE6Z$5>_{@@qZvC(A5E{$ZH|nK1>zgI>UbCo@im`BmJfx8`Xb>s@0iLeZmAFnmwAl!4 w#GS_fdfm!07qXj$_xLc&X^_uZaM3p`-1R665A+?Rkyjwg_@2YOupc4+0lg?G2><{9 literal 0 HcmV?d00001 diff --git a/Ardent/UV/APP.PROGS.O/DELCAT.GCI b/Ardent/UV/APP.PROGS.O/DELCAT.GCI new file mode 100755 index 0000000000000000000000000000000000000000..f3557a8cae139df589dd180efa192da07fa5cbd4 GIT binary patch literal 2794 zcmd^>+jA3j6vxjtE#;2Lt%AxDP(j=6#ZpT}FeYgXv`I|1H?2ZQwoPcV*>1L_^@2A9 z6fcONf`TI6MUjfmFyo7kGy0&6IzFfmjyk^i;)63Xqcin;PMXzm^e?dKetw^G_U!NX z+h2a!+3!!zKU78Y$)wU>h(h!pJ_WR^Y8KM&Dx&78b3arNEw3T^7CAot?Qb=bN0b6t zq@YiQhRLSyDr{;+zClr_C>$0#fAbOAubih*s-Q~6gX=122YFl{qe}5gLc! z`t4Nh`W-Y~ocpXqmG z0A1+%Zd&lKD?t=c{*P;M9(!UTF&7CJ3zrCMgck{y3YQ5l7G5H}RJdHI3Reid!j-~R z!pnr03$GBa7OoLqDZENpE36Z0!g^tYuu<3~yjs{STq|r5UL$N3t`oKiuNAHrUMJij z+$g+W=o8)`^a}&Rps-yS65c2b3pWWj3p<3J!iX>`j0tZ7_fQ<%O9}8n(!qzQ3$&

F(rw^lv<2KxTd57d(Z?w%?E%^*?Gu!e_8_ID zJw%4IPtpLcdWr^Vy)sOj=xI7k8MGE1!PB7)M~1R!v-AvYm*3BJ%=cLuq8ij6r5t@i zW+jn^=f@D8#dXIhFHsgxjZNt7F#6!9i!Hrc(ms#6AMeiU}8u5&bFhOT%wlYmI@!gbaccHe8-bFtX zv|5?K*$?R}tkr&n{7KU+IBME(3_G7S4K-^Pon$Vjrn9z@atijiY9*bFI$#&_YERZo z7j_iYxG|V5I`+60iR$6@KD95}6;~5|2|d`U`U0KdNI0R#eR?#m=^4YVRt*!^sQKi$ z%0p(7qlTI)*gTAC@#w{3wqO>u{=k+r3P!KtE5bcWSfv{iK_(ESSrp4mXP-0uw9I?{LRH`syI;o_C zI~`1A!D2FR<%|(C+iloIqid@5>fXA>`X;aHBrT&>^|pKK266?<8pje9hmi1l>rzSE zv9swxqg)j8)>(Ge#G=-!1zYt-y>$gAW7wMB?vF)%b{cD;CJF=2j--uF!)8irX-PG; zG&MJ_ZES7O8k)3J3sTy^I<0Z7)_@HEXNHFdhMJljv$be6cP4tmkw7$|)~7n7@t|5C z?8mM3=Sq0gWm)XEomRJ>DoaNtoi z1$ik^HcUmz3dlwd_zh+&3s)XwnGPIcnFbtXnFX9+!LJ8DO-MB`!NRA`vdjQJDrY`p znF)N&!l!;L%g-!4wO?7d<~J4|i>Dw`U6wg4Jf8(+S;i7UW+e;X)G*5;$SBJy$Uc@i zkW=NF_gQ#|4_J8eAG7e}&z0pHmf6VsRL=auG8dWOS>{7#;5APMT?+C1F*!Nu!7=Gs zf^)Kf%ekNyk;=k%*TI#%ZVJEub#oMiRH4gK!A?#|v<9iY9N{Q+cbcOpA`jo7vJ{v= s3J+MKPs?%+QpFjW!RH+D`c}!H-0>Hj;-#wMCGad}<26v`0bkk literal 0 HcmV?d00001 diff --git a/Ardent/UV/APP.PROGS.O/DISLEN.B b/Ardent/UV/APP.PROGS.O/DISLEN.B new file mode 100755 index 0000000000000000000000000000000000000000..baaaeeccae814d62198f5e9c6fa959275762016c GIT binary patch literal 106 zcmaF3MsO-CgCGL~0}~K4Ffalk3lK5`X%z_(1|Fc899RY<$G}huT?G;Jsh}Vrupl5yL5fhMTaZ7cl!`d)4zOj}-7dQ-O%I-W zXwtL?o0#;_i-#V(vC)}lS zLrmEzW%%7CTP3>???fv^_eg2LklnIJ_G)@x5xuHeH|DbY9kyJ0!Ix{#0qsd*mI_3- zO3LLfykridJwm@B;Lhu^<&p$K{+CoU@PS}%~tucm0&C7s8oZk zmMYB28jcmQTO}1vEqeox@-@{s^;g4Njrwcht(6(=J+8gCb^R`T0_+LYufQtd80R^O z#yfV!`5HyxSTWx@U$zl!Bi6SGY?DMZ+w99Wfo;P2wt#Js+nPP^%eH`RkydE~ z+a~ul+wRM@fo;P{4S@~GW6gH>vLUb`*@u(7RnjTXHG9FA?F8E?2c!#Zmo#9FxDMUE zY!}!rsgWMAJu;)&i@t0R*dFY2FW6qWquH=8+Y7c=&PpHHK6#+oSA5w%uzk`m17HW_ zXU$$JVtIbK*F3-8p7%TFV*uU(oR2|x2PIhQ-s`K{`vEl1o68P@9mM$<0y`v^G<(^X z9RfRq^Dzu|SQ45YDPma@^Rp&zp4Xh3hT$DXO{4IR%9q-EMSJ^9wi^F3p;qC}LSZYhnFfO;?@z$Kf4E{gd!c z%BuEGY43e#uBppTf}KSD(_p9Nu4ZS7Sk6Na=kdI6I`d4!JB@i};hmMo+WVIF_Uv%y zaoJh0vzTWN?3_H;?AyNV9N0PJod-KF4amdu|4tFhnwXz8dGlOzYMO_49^M6b7bK>= z*R}V_PPZnPT>!g)nijz>%BPyW;ma<9UBup5U@iGZvrE3L1=hmeMZrepsb*uoY!qx1 z&l?-8EkV@BdtLTrZLl_;H!EOQ`=}IM_IzH)~+mc|hA=hK{4ODNy^C9$Iyh|Ly z{rrx21^$-GwZOH2T+YOA+L>MzRwJp*daoK!spUlKmWrm5*-R=CR+nd{{u7y-7;l}M z7#VpX+^nqRri!jw87rE#Gb&?mWUWkgBdoT;5mu>WVzY?6nu#Z~@#KoKlh#tgj)he| z5{qx>&}7cey})>Z0@8g!Em=9(+uPf`UPtHoeDs1B?P&9QUHM*nsL<`ncSD`|Zf7BS zvB-9@xnRU1rmajoyBSu)H|=CzOvGaOKA54Y*2oA~8auENPbI@@$mwSl!dX3D2o6m# z7#TriN^RuQX{_;v9aB~o@w7@UBln6ORx{R;vTvuYBy(boUy3X*hn;=KhA-Q8412`A zce>3gnNl%3VWIS*U`TD)s59mbq4-2RY186`&bRe=&`U$u2JL@&sB8P7?GuK!bwyq% zt5@0UxrCLqRn|_}+0C@AI=Z={iQIZpHL3q8y1=w=J6X$8JgZ_>)>5}p8JxGj@!lu+ zoQfED8sg)JAAAKMgb$z-H#r!tS+# zoebRsPJ6%@Rh_47s(Me|p*rKK&#BIO>LFDF74aXb8mXA-52|yXs>Y!*xCv$xLoB8r SA+s4B!`TkhFXIfgpz|-iWl<{t literal 0 HcmV?d00001 diff --git a/Ardent/UV/APP.PROGS.O/DIVH b/Ardent/UV/APP.PROGS.O/DIVH new file mode 100755 index 0000000000000000000000000000000000000000..f7484351b5e6c373b77a9a4bd8eb79b6f0ffab0b GIT binary patch literal 325 zcmZvVJx&8r41{O$_K~06gk6au2S6xih(t$0nL0|r333GL93bhVAW?CO6=g0#gAga6 z3!fh?e)8C!8T);_b%(4@SxFHiUdJ0#Z|669hr2I|Wa`6mzj2rj90f}g=pb@Wt^Ww%D@wW6=+Vp?)7k+0>_pZ6Jk?-|Us?#Q;dT3n5L xwD{}EHJ86^uwtsHpB{o)-(~8HX0-5}oxv+@yfKG}fOH9nDHkYQD0vWED8IFv82$hN literal 0 HcmV?d00001 diff --git a/Ardent/UV/APP.PROGS.O/DIVS b/Ardent/UV/APP.PROGS.O/DIVS new file mode 100755 index 0000000000000000000000000000000000000000..aaa14ca1ef470df4716dd09db319d466aedad4fa GIT binary patch literal 97 zcmaF3MsO-CgCGL~12Ygq01E>MGBBt}h%oQ~X(^~UBajYPXJAMG(jbftXaEJzFfsv6 MV`PY7jA3K|07kCvJ;$Txn4{-Z|MzBgTv?7E z{OX4J&HuUgKF@ugJI_43{Ql|156q#(bckj@w~|4>!QaPmU%BK;vgZ>0)%O|oL~s9t z=nQOpUF>rmj5G8}(tJLw9i|DYBOBKw9ij7eM<|MzW=*3{2`7c0uF{{ODQ$-CrV!O@ zA@mE;Jyaj)dufj7Ik4YL4S~LoE(!Eenj7fP(xsw#oGF?Y=+Dt*f&M(r5A+vkL7?xa zg@Jy6E)VncK_3ObLc74P(r$2? zOxlcn`8C=j_opZ$_peh{?%yCw?%$*#xqpj>(d*kZLKk}*h>Xzx>-&&HT_$L+a8#HV z7HBy=jS3eiPYboYe{K|U{>;!bI7_DKR0GZ+oFiLt4o%}eExrkI=pkH1L=im-8~aYr znTo~y|-rAk`7=E2mCb*YMbdrc*n(akUBLFt%Df*PcrsP z7a98?oszNdKo#$x@A*|+isv&!r)%O*)$xeuXp8t?uJNzdnzcImK4ws_&BfdH3f`q> zF~<-rKcG8NxsTzy>Q1a<%wNYO+F4xB$Si&cRgVn(G}&5N_aWL{cL>#d0l8n4+-GWX z4|=h+T~#qZy&&d{A2VGQ^V$V5FZ(fPWga2=8EX9Vs=1u@ z{eSTNzkvUjRsLW3{(97<8Q;|Gf4$0o-1jT-YxG8y?>XPc_2T;c+V>4==j%pM$1d0n z?CkS(Il2v+&j}B$z3}bz+hzPtn9^uf|EdntwjEDpEzfcbIonb>yX2YqyvpWWE8{ut zxGI|7h#GR8g6hxNS!b-IQr2*;2aH>J`8X(QIHBGK-6BAzx<5hIz> zjS(w|R+f!Es$h;QPB~)kw^YV)IgKiE_EIV5*d={1x+@Xuk92g*GM?y6rn)0WJelZ; zckD>TB3*G~AiAr!Pw(uC^d(b)zzp>6SUMfq9)k@7BzqG^G~Qw8+%eMAqxYne+tYh; zcDa}}Ga09Bdl}QiN{2H!uw)jBd8=&a`Yg9(_4@a)5pHT(-x^k)S+p8exHH@|ly{27 zag?Yu3PVS@DPy{xo68Pcm7tz*Q_;=YC~Bi}Toq1+n;dV%a&@D#qbC`0v#5niJ44=> z>0;2hozdIcGOcZ`8(KEDY--koeWSR7|ap4Pt47d0V#*SRxDi16dr)2HGtI(sRn0k)So=lswxkSZu)931e+M z-J6c3^mf(Tx2p@a<7(orCt^E|{BR^{WUr`}(`lDOxr%>YPym8dcgey>dz2to%scSk)0K zS5lcWHk0ikecs88T3NMcT$$KvsJkkcQ2eUCypaESfRtrsdDZe#RL`Pzp8al43gkKe zk?p?**37Lo+Aow}$By1qDwZ&Uda7`^vequY#4vG*_{FmdMQ>dHcYCOu&+B2oHVH?e z%P_Al8k_*J19*DDL&9eD-&(s|*n`?SL&|iA%LUZF)UXW4Oap!fPy^0B!r2Dk3MmFI zY2k~8@ShQGZ3VcctpM6tYydJWxZi^;aBAVl2?V}U=t&lr0Z*~uuFtdJY$sW;>oki? zfmbV**ICR1-eke9KUTy$EO=^vW5F?hXTiDZF$EFxDq;}}p3l`4v7AK$menkHQ67t{ zAjVm&ggDA#0mSi2%quK7#aR|S`PW$Rw^+=F1aXQEr!9EJ$-bmgH$ z*mMn>ma>Vnw!8#0wmeI7UCW@b0x)mlFbpc{>)+>L@OSNc0I)H tEOdw?EY?7rV1YP#lLeRIcPth`yaN&9J*Zs{yvycmAr@eP@+6ue{spASUkm^M literal 0 HcmV?d00001 diff --git a/Ardent/UV/APP.PROGS.O/DL.LFILER2.B b/Ardent/UV/APP.PROGS.O/DL.LFILER2.B new file mode 100755 index 0000000000000000000000000000000000000000..50800bab4a18427d452cca1adf7723c0506f4c68 GIT binary patch literal 4236 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 literal 0 HcmV?d00001 diff --git a/Ardent/UV/APP.PROGS.O/DRAW.SCRN.B b/Ardent/UV/APP.PROGS.O/DRAW.SCRN.B new file mode 100755 index 0000000000000000000000000000000000000000..b6cd9f75aba88153f6cbc670514cd0cb026dd798 GIT binary patch literal 2440 zcmZve$#Yay6vof%_g<4QCJ>M@G)af$LYRdBVbUEH zEfy|ZQ02xyz@^37a^=E>MV0@7rJF1)b zEU<%i-tOBM_6AyZb)9WrU^c*xKHFG(zcri1_ciPPK6#u+?K$$_M6OQcnnbQm4N0_@(c4J#u}Y>y?=Ot~a>;FP?!i6|_A+^|9z54& z&OWAwFzeXl*hof>j7sDxk2`^>f+sz`&rV^V1pDdR zPuuaNZ^3)D5YaFLUD{_My{47Ey)Qn+r79kThxviPx zS3k)LuaJrbw_B(u|7QN?_au^m_VcSzr%XpTdq0J@&Y-19=Aj zF#IAa<FY z221R^-Ej6d>?Zb2*v}wm*trFhThzSmOm2I}rAf!7o_m@-vA=D1sCftWcgeX+&OOh$ z=j@jyIY?)}JYipx_-hjOm6^r9a^gkqjL8HQz@|4@80+L zE2r?ZPUWepPUkaqbYt@TMn0{ht~p{V_k`lUH|0H^GU^F>f`F^mru$Z!I6E@fc50$j znkZZNch&rgzp5>Bytm~_YxltTWaiMo(8xr&uzUZJorezZZ0pKoGT}nNje8`#){{Uib#3_ODJyT(>tVRh(1w(>i!I+>V7#EZUX9Sai zDZx3xdBFuBjs(0(7IT~y>;H(jN>B}WpEXaEwNI3F+Sg?9BEe$862VfzGC_?%qs7Yw zD+G0dl>(oBKU%2SLd_P6NT}WLfItO8#RclIUY7ou37x9WAlCe`$VH-(V}%Fh63y5t dDl6U~s26M$WCWW84T45NR?r0SO>4H5^$&cGJ*5Bu literal 0 HcmV?d00001 diff --git a/Ardent/UV/APP.PROGS.O/EDIT.INPUT.B b/Ardent/UV/APP.PROGS.O/EDIT.INPUT.B new file mode 100755 index 0000000000000000000000000000000000000000..7b69481e4db95fa8d3e568369c9c8aca49b2273d GIT binary patch literal 109 zcmaF3MsO-CgCGL~11Ate02c!YGBBt}h%iV1X&I1KqP0bvAY28NM419Bf^&uow;LSj%1HiW2PsFh@3 zM4Tk`7*+DQ zfX#L+aGv!BW~|h1T1hA9rQQ*&baXhHNz~=+-h^DXga#^6fRy4*Dw=A6M3%}6Lw{Eo0w?#x{k@aId z2UfB($W~m$Q|uDp`r2oJ#o#s83xC_ulck-G_}ihq$t|Ye3ci)!CCFW3Yrrek7eujc zqc07iLQY3kFL#kkTNxSE*fv^eyD-vw;Rp1tho%GDsuIDUg^`|8`XMTX(yuQ%&Cc*T zvhEBd_w#il+Td5&2jm|_{%zjRV88Ul64Tb7D(>$`D~rw66O+%-&k!H!F88p)vS{sV zm0s66_|K)i)GGYw0Ic5vZip)ae-XH5Mx|i@u+j#4%$dNn4I+{i{Dusf?TKs|>_@A7 z9G>#Hvv7mJ#5wz{=Q_)_+bC?`P7HhWF<&KT73fGYru-g(S8=Z4 zS99)U+N%3{KfcA!x*=BLj>Z1izO9U{XVx#nf{YEdx+pgrz}G3KJQ-VVhoM={T5&8I zHZvC1iVo|bU4^AtyB~{IAR)`s97(|*#-~wDpM+a<%dO1~Mf)zdsFOCf<)D|Fv0>KY z4l^o?7E!f}kanMa4yds{MZ<{BJxQ}&tep=XW45`Q*^=&NdwK5cX?BpOPcO6CJXi8G z9BX!{H+CFnHsK@mc^00)T<7WFDf_6|TX6q2V4pnD%H#RA2t9&-l zg+DE>9e=9CIU9kFEKfS3Hkdx``kyl6Xsl?R~$1uJV{@~qu=-1nD z`jRf6Ywzx%+JYQ!WL9nTnO2@l z+z7l1wAXlAVFIHI;gHg z4if=g9X5~Okg+gwDt(<_loO4Ge1)+(KNd2gG386YAz#J(xV+)+t zF!?H+a=DhM1#7>99pABkvzzhyX4~oI#Oug+{R|b~qaL4*)|apzg*l#qGt2Wmy9Eii zK)aQ7J6|vBeFbXmDTA(zlisb+-3nb3bam|b#XK4NzUTQq8h22)JD|*S?y!3M0r*h(~QIpn?O6{Zm!pGcL8U}#eBHh-Cg!0Wc z_G9e$F{@S^a@*_`&Ixg>?k8*aAGHo1y^h|GpZ8P455WBZ{`G=C$J;=Sm!j&;@25k3 zrPP57ajKf&by<)}wDX z{JZHr%je z+QmE>>^RJL2lVy84*1v83iP7ufUX0&N1&?*imuJo{V{7ouLyxvnrif#v~pJOEAbZ3;ADZsqK!Ubf@i;P6MWTC* z7(B*rJhwZ%Olf}%nUC48sPzLyd*RJ>^2*Y#^s%(PXx(d1!108alf$}r9f)b3K;si$ zf-qW(wNeFNT3oy;WuR$yPuQ=q;@9?{_9QZ&v~~EKv!^2a!+I^=O&ZH3Dz?tYM|JWf7C(u_Py47njm7bM#M4;yH2RB=4|~#YnZJQI z%%VDYig_~jJJ0(&c%PwOom?2f|^GJH${$wwp;RSr$;OSq)PTv1~`_HsvuARi~1*+)@Ri@ zzJu_!d)o5~Xu~WHwK^BNHg_tDnA*COj*!}`~->vbf(ZbR57KWO{kp!pj#Z$R^gr-^IoO)~o?HT4!FZ(&Cc z`*a5TqlGhAtWj@sab4B;N_`8NZz1ytoJYLOLcTaQ|LtR=^T+FW{5rk_8wEj~xQwwh?~{Vzp0Es=W^W=d_UR4Qsy8CL4uUV@z2rPN;_<&T zb9450q~yI*ykGS;l_9souBR<)nu)q}X^#jiN;7jR<~u?jj$lG~ZNCETL*m;=cpC}tAmJTslZ?W=*7_X03)Q<&y$98M zUG)5ey#9l{zR$?}@bCNBKhNuMFY|q5zK=|E2a3!|Z(&|rxO*6ey}>i?d?LF_D}#N* z28VO|ixpZEhOr9-%JtCgbKEXhMc!H!AXyI0FToxwLB>HxLD4bh;P})b)Kt2P8FG`V)uK8{yX&R zBYdc`dN7NjRYjKDLT=xx(5C#<^VE=m#htkKXen2PF}WG~iYQMlUQRuACTWB5&g@-m z)o*Oymm}I6OY`=LI^41co2uz=VLaSLgc^9%%dWN2$R2KEfHgK2Yu+B9^J~JIpbtLm z^HvwzI5dqb@aR4K9*1OehZ)gt(&hav0b9cOF|M1_y=c-cwQjDv%X{D5RT9YxI4jT_ z#~}WV>thvmDBg;Dh)s9ut-BLGL?ugPG8V9A*Lr-lpPO6ou`pI&iKt4s?9W;eSqWTE z!K1ss9_}VLpPRs*Zma9**0P3l*nY+Wwv3tA%js>eyHlNXr^53xijWy(a1+^uDqoZH zJy0S6y^4SM+9?w&S2X&I#Xw?gZ;rUpwBX-Xy25&2|Kg^X5TgiAlC&YgcI~8MDo&~0fW*N10f;*AAInnKeUbXo#>SMf3@U`_4 z>u#7o<(#;6L-hEp@q1NWb3KLjOeH*NwL+Ewtq3T=>C z=M1LwaNN%X#VEan?D~rlHZBYMc8_I~N z?AydxY{NGqx|7MdzJw`m+oJf~>FJb#!mmSF`ka+~M5%>{=IGqZzBq56II3<|MBL*} zlMlt@I7k~rUse=*%TM#QR_Ae<2zR>2#d*Fv;;T75#3IgX%J(%NLToOLWN76WfVO~T zeew7zD!s$D(GL6e1kM!`pt+4_ZIog5e#Wa@5hE#Y!&CIP(JOL&o$!5Kiu)6NIjUx! zD>KdTK1X%1Z+m;BIn+xx`o-{OcvSx-gTh^^Y|#9wWIV>l-4__X1C~cJs`!m}+^*-2!uh{C zvSm*y*t?3enr3Vws?4}X<}n`L5c^U!eO)j5VXftT&bQO>SuU zSy#E;`eHY;x5g$id-+FSbFx1xsrY--&#~G}_bX)= zJR6Q?n*>bTWWM4yuM=RvrIaFoKEW+$#kj-Fy9Wq3+l zDe?pL9nflQDUWQ;(9iFwlc*=1$tLrZP$~J?{t3EJv)Xwk^ThTxBTwyyF0uO!`n2Xe zMHQCep=$8}S>4|+Uf)8$p4f((2~{5N&)QMbRDyUGL^PV``W_ar%%?NB+kmdZ%AqTF z*Lb=LZyT2TzYfuPCIww@=5nAShMrFA!*0~RsYp7zUdrK0Y?osISnc|#+AKQsv z{2mgo(?5@@Z%F?zAA+^vZ;&d%F`KcipWEvH7O6M3XNbfQEd3SO?X)}WZ|G7T#4;a` zWHyOE;#0o$w+u1OzKCWGG~w@@bcPOp=M>ZYIihKYM(-xFL-Xej`l_TNze=6u*Qhp+ z%S5;#9v91bG2%N2%|0U5&%bjFWd;xHLU&$7_mT1-f3TOYbE4kX^0t2=qN{^0o*UuK zFZ{hptaoulx2;p2)&$Lycx?!$_IUoU_wvGDp#+V@51jH=xUUq(`lpeOV&=W_E$LzY z2C0YOkI%|sCCRT7<^KIDdJq36dhUqywD@zj-Z;XkF1CGKbpDRdSF*9m<783(efa45 z`|n8ZhKRNYu~8-Tqr&h4%P-U0DD2o5`C&%9l z<=+?LIJP*Qr227^>c>ec%=2!%t150fbM>Je&QOCmLpkQ7ZiDoe9%vi?Jup?EuZnUdh4ZJl@<0Wnw--K$Tm1{WrO|2X5Mle3Y zwRwKMr`OT1b9d9v5#f04SFQBoEE3QC7H{#$=*(Bfy z&7JK=xzU{KCfR7G-Mhi_O^RgB!iHvlj?f80GG@VdxIo58Dt#m|uH*bL(#9aG8|~3< zEdGqNac(@38w;F3q$aS&KL>9;5=ZhV_XneXHtKJnulc;4zA`)({W0&!14B&4`N$-? zL}LQcn81!P#wNP;uE9;hr-{JnM8%P*iJWxD+GHX=38|C#OTKfkY@$2IO~JA$?hvxW z_lBwTr@A)!`{0;{TiHqQHUkH_hJ+F>uzz7Ni^el!b3 z+5#srIEqdZ#FINy{!O>WE|zd60k4|c&DlTfq(M@drw`f#ui9Fb6XaN$Gw96nOm;J| zdM5F2iFjtCZzb)RZWi%rv{}SwHnl$+8G+*_Ptyo?F5}vlXG68siEAp-bV^i>J z3ip2@ThtV>32!isWK6qQBd4Ko`xDbFgeJcKskZ3;2VDNFDy*_m&dOEI`6B!k2InPT z6W@R~%t_7cG9K+XI%9>Kl333J5#3;K^;pgmA;Zc{m_<5sQ0J^miofRKR3bQ)Jjwci znN6$FkDaUNx^vweqT2{eV@;Y|R{D3S@IEvXO2u+7x?5O9b%IS3Bb~RKsPwdJa?S8H z!?zN?{C<>Qi)H0t)7?$rZ-!qhYzF>jmvM99p9}vEuUEUHX6m`oUu??TEzSm>GpT9D zuwe~TCpI;VZyG=Fy?@MVy)3nKb?fq`6)WGZ8b4uT!=%aQOqn`u#>`o>&z+NQYMwWL z$k1WcHMPS>)Qwy)cH;8v;<4jrq{pXI*%hl(=U;mM(q-o_TGl#Y!iyglr*HK%$qi2!0d+E&FR&vvKNeRU?nvt5*zkmO;7PO>RWIbH6 zBvtrtXlG|wXREriRnyt3?Q9M2Y>h~DTAa82|IwwJ#Xf` zE4wc!Ifn8oE(TBntT6mb3aIB>iGaTXltwj}=pj%f@IL<%duVZ};FFS2zl?jm)DSlx z&$-nX5RXUkJ=hXGh4MnhoOn!K$@dg|F*Rm}8J`b>YVH`r5SJvDEQxzudssp$5=StG z>u$3YkCUYFYDn{Bo`hJE^4FuzQO{e<0p1ecj_&c`6b;HvC&^P|^m#(d?1Y?4dJpB( zeD#hM;1577(GTEtw5TUkl0S&Bq_@&rFaJHor-YZUN$;m@U7#Kx3j@KY)#Fo}CHnvp z@|NjowonZjy@)5t_X|sO2B=j%Y4j?VsCSY8x4)L;Gey8(pq|J3^h@=HLW#;VE>%xL zlU!$7lKVVM%6cE#i`0`f$rK>r!z#O02-R1hOn7NaD!|_8 ABou&Te}Qs=3V})i zP70PBD8OD}Nfy3f%*E=lL|H?P^Gj+gJ%nj5*RHoMqsSKIDzp1AFV6Zn;3}^%?*PRb4`rn4ARggX`6sEO3s1%F*M$te(m-p_F((uMujRP(DG^)tw1)4RK?W8uERM8p`?gJV{^vpQJ@SI!mhR zlPYXqpWjwbHSOfe&1%S=zwjh|aW51~5g88fQ+@=E`*Ryt701s;mfNOoNcy5c8*bF3ZX0X;ATddR5Ji$x(MU2{IgY`Qu2*YmYiU>B zhhv3TfwsK*hP0&==!*tQAT*>rOA8^i(4XLEI!s}P;WvgEejvjz!1o-lb{Ob?fb9L; z?>+aNbMHNSbw{tA+;lumn<${QPn{0YEBFi1ZoTSqQiDWMJhpv+C^$?M!p6_*eXfV` zJgtxx^AYVRtL03VZV(A6a8_zAkm+o3lsfGx=1wVxt-Q0`VP7{(Rb2NqCZ8KB>K~|A<>_qHzfMA zv{Cd%Z zY2kZ?HSk_C!275U-cK{&1NfHnTbLCd20u@8;1}q9;Jx&I@HowbJ^BE+N*@Ftq$A)% zbPM<}nY0Jr(J#`1w2zP_?U$$_?W1H%`(;{`_AAsx)K{qmu973Xl{V93$Z;$B8#E`r zC5Y;{Z}^^gT<(J&Ez$ne5g>tD0mF?))qY?&*zvOJ%sQC*%r2prE1^!dV(N^v%q&#$pmnX1;xxq7KunJ(pTt`&0! zOZBVG> zksDfOh@Cbq2Mo+kw{1tRbIA4sdnRr(^-OkrbRwfdvuls2%v2`3*!H^J9!eA}!H~~n zEz=Kur_r?gPScre*LPeLbwqi-%2YF1FKpSqUZ2WOS95*?wNQq)7#=l!BrUm?J~?Sk zOit_=-#NZ(Odp%jtx1^l#ohY&PJIj({%v)97fYhlU^k=_YZ*F*92IGMtU3~@38Www3WZ1ixFc(Mj3M^au85?jctyhWTT ztgWe{uCC%`qrCAsbED3J?X#EZH=_>TLNHS)9ah7m(F)ekK(pX^VME1zu0*A(vc8%t z8gaIA6od*pvYbV%#NpSqEUve*PMv<`wNy#``{_myGGIK*~{6emo< znNt74C&k&)+)ZPUv?4IiZk!>-HAoA%swqaA2hzMwZ6EMB=jQO=a}cLU^U~8?5ZUM- z*ntBFkw;^P^(@$Fhy^e3G8Vk9tNT8~EI8^07I-KNq}f^94UF~2oxbR>;Ds!+P!K)~ bJoG?+=r}}*i>{3T53-r(ILpF@cnRX)wg=5U literal 0 HcmV?d00001 diff --git a/Ardent/UV/APP.PROGS.O/ENTER.BOX.B b/Ardent/UV/APP.PROGS.O/ENTER.BOX.B new file mode 100755 index 0000000000000000000000000000000000000000..b7028c26fe896ce9cc50153d307806c13d57e3a3 GIT binary patch literal 667 zcmZvaJ5Iwu6h*H+c1Y|1319O`0wE!Yf|`PYUjqdo1Og$}fGAi7CF}qp3Kl>`k&0DB zVi)e-FxI>8cjtQE*zeEP`&d;KRgkS2o)w-^d@GyKLm+MXjx>dTdy;Z$X8)}f zidRb5Ur{ftXoLLPl{KbuMM}X5U0{=_y<*e43#wqEu5RH*L@9ZHPewkijI%`8tmgEH z&8voX&GY-by4S9&fp5TDKy@BWl#>MmwTfp|6#A-DU5koUf)!A6bQ9P$e93F<6ECQ# zdKiE?GYq4f(u>)<1eU2p_z`A~)PmIuo65MGoEsQsrW@iebD1|zd%#)$RsY>z9`rB0 zM(2-4FP#0>d_nhXugzH)%-Q5UDLO-(qRp56nX^ExsLKHL)!pN*v$gHR^R?~OoxOvj z(-Q*s!HSWU>j0dg53xmY2sne-8AJv~j_ucRo-$<7q1B28C4MGBBt}h%oQ~X(^~UBaoiBmVqGwNP{popaB#-$H)XU MjgcXSF@})=0BaWpg#Z8m literal 0 HcmV?d00001 diff --git a/Ardent/UV/APP.PROGS.O/ERRNO.B b/Ardent/UV/APP.PROGS.O/ERRNO.B new file mode 100755 index 0000000000000000000000000000000000000000..ddfb0e9527c5b1d0c81501f7a1743086c23d286a GIT binary patch literal 107 zcmaF3MsO-CgCGL~10xVKFfaij3lM^66$udr9-x>kSO%iv&o2gs1Rx)Tu>lRB;4DTa V24007)s2owMS literal 0 HcmV?d00001 diff --git a/Ardent/UV/APP.PROGS.O/ERROR.BOX.B b/Ardent/UV/APP.PROGS.O/ERROR.BOX.B new file mode 100755 index 0000000000000000000000000000000000000000..3d10ecde5a009e78cd987cf4b91078b74e9b5035 GIT binary patch literal 435 zcmY*V!A`1EImLc@6Eh7nd$ESe#M_YVt5E3U&Od%)R;&84u0rOTn894-_(JjI-s;q(k;~= zrxjj_Gt?PjsTxi-OBFiRDpllEOl6^2x3Txy-1Xr0ozt`Mk9_O=4m}HVVPNc z;)(EivmMc6z4yAT<$OIlh6u@bxZvFbT%(T)|6@24@EjFXu~ut^ym){6NT2OXu~`L4OsIQQLi?s@lxmv?tPaBN@z9gxtFLkchy03Yp_k{K5E}cyIZ;3#c?_pSKfh;< zGdk$&MVwk32@FvSx3v`gNu)5s-Uvo9#$Ke|%TUW;922m#2qz74=P(^Ch{RC7DKj+@)8Z#fO@|1Vl$yqB7u=eWMAxb>>zH5^sk*w|^henFYGZI+f-m0IFV zwOreF)UQ!?_L@$^Zzxr*dG*>l%`1Lwd)Kthd_J!f(;xBO{=;ZlRyjL6t?cZqrAUG( zXXh1_nYrK+7I+5+0bQ;{8)Yg;alo`n=mhxtfZMO)o`n&(<;^?@lR^tIJqi;5OM+`E09)^5Mi(bifMyo7#R3~^qoishDksggs}k)pr8aJ zD+3z?Bf|+08;E}}umeqtVGLkoWMBrenHY{Rn1IDOfZ~T3tdP{iFfzFN_&YiJ=s7!v XxOfIJ0_A{40WmL>!3+{%1_=QG7qk%H literal 0 HcmV?d00001 diff --git a/Ardent/UV/APP.PROGS.O/EXPAND.B b/Ardent/UV/APP.PROGS.O/EXPAND.B new file mode 100755 index 0000000000000000000000000000000000000000..b198f4f6725e0b5d0a48e90f48108601097bc8bb GIT binary patch literal 3582 zcmZvfUvN}c9ml_SH#d+F2(%Oeg>bv15XffB+PX+gBuld)2_b|egoGjx$kL>QO$<>A zl%{{cwpuLH(HWU6N<^dXP?K&_wO*}X}yZ07g7 z=lst1_xJqHxi|m(#i}3pTBSf`l01#-jJ~hyiZiOKS*?f*XlmvHoDR%Hs#ca9ryaG?ll>mD$(t*Jf}@Wpn~cQpva; z2lu$zncs_KO1O4!D_&RQm7j|xMJxp*)h=$cbpym+Y;>U4QPR6ok|p&7k#B_;Z5X~l zEQ@W-k$WCJdluJdr;6mt(n*9MyDH{{qs6K>{5>o(4G6?y=eAoAX@B&ln$!TW!tBLBN%qcsQpW~&18>lF z&d-O)5}t=n!i#_$;bw}^TPMlb#fYqdp53mEss;aP34hArH$DPi>rTF%ORGbQ?CBV? z9#xhovgE#joUNW_evzMHP zJ-vAdCb4S z)bf5RgU8%z-re^W|3Yu%*rzeKPh+4K@*Jbf##l?D8S3p`q&NAHUf4@x+-TLB!oxxG zv8=|JoguFWP-w0A-YMuCi|kFaI^p7&AdUqq4{O@{s-Sc8dLiz}Lmrwm^N_VL{%?Lk zZ|DE%ed`f=#rJ3m9X7;V26NeAUUgPq)vU8RYgW0x ziWc*_h<)oNqh`IP*IAE|gYjl&ueteAd~c>M7Psx!6sPKSEZ$%~i?otkwvsL_W;I$- zeCHZ|maLcS4SZI@-{kowRk=cRv+yIjN;h2vXK&?7qKNVBRn9j<0%?=JjqY32r|A1_ zuy2>J@3_@>^c^bj7W})s8LqMIYiuWVpJz%$!;VrKuqX&@L+pMGBQS{|*MjaYVboLBn`g+pc zD*N2~ETaD5{>1)Fe}8&!=1@<1Pj@C5I1n7@&GZC|R)Y4IEu zZ@Q^qq550*SXlFLob1d~(QTrizIJ2{gL zPLEGygIFvW&7L05Wk-XP7nmg;0i4dBnw%aDVjaf^Gktr4AQDvkH&`0@L3zbz>4C|~ z;Ot25LNGIVCYw7KjOT)L+1yMvcPbm4%#Pe{F#lz1k z!Uq=vdtAJ7F{XU%)f7BQ~?({VHP? zufM`rH7xpXocb#nIZbDOmCa1k;`bjjW_kOTg#QFAYB4&*X&acQF%w&0PCRWh%Z3BX zRbd13Xnp6_e`JFvVL!HkRpM8WzsA_wQ1ok?)fh7){(57k<8Oe`U+J pV_S{Y8`}nRs5>^>ZmhwW{omy`8cP^^#@G&6^zSh5S=e8o{{d8a6kz}W literal 0 HcmV?d00001 diff --git a/Ardent/UV/APP.PROGS.O/EXTERNALG.B b/Ardent/UV/APP.PROGS.O/EXTERNALG.B new file mode 100755 index 0000000000000000000000000000000000000000..90c453b685f29512fadf4ef28071dac0c816971c GIT binary patch literal 184 zcmaF3MsO-CgCGMV11kdvFaseM5V8Yl6$udr51^PPScZXt6G$)AVPKd8q(K-P&;SbN zF|Yykb1>Xv;$ScU@_zt%j0|#Mvsr-lFakvw8JHLj0p(o4@@znU5ECa*1w@{SA%-!A Zk-^0&w=5&EID;9e2;x2#4j_vWhyiNR4}1Us literal 0 HcmV?d00001 diff --git a/Ardent/UV/APP.PROGS.O/FADD.B b/Ardent/UV/APP.PROGS.O/FADD.B new file mode 100755 index 0000000000000000000000000000000000000000..86ed189acda30f1d8ee81384c84f88bff29936f8 GIT binary patch literal 97 zcmaF3MsO-CgCGL~12Ygq01E>MGBBt}h%oQ~X&IMGBBt}h%oQ~X&Ii9(jbftXaEJH7?^;j MF*3w3#xODf06e_~IRF3v literal 0 HcmV?d00001 diff --git a/Ardent/UV/APP.PROGS.O/FIELDS b/Ardent/UV/APP.PROGS.O/FIELDS new file mode 100755 index 0000000000000000000000000000000000000000..3f797ce62bb49560d4f855f891161ff8c5388894 GIT binary patch literal 101 zcmaF3MsO-CgCGL~11k_i02>1cGBBt}h%g8MX(^~UBarU7#K4dOq(K-P&;SZvU}R!o QW?%uD$jA`G7{kZ_0FF@x!~g&Q literal 0 HcmV?d00001 diff --git a/Ardent/UV/APP.PROGS.O/FINDFILE.B b/Ardent/UV/APP.PROGS.O/FINDFILE.B new file mode 100755 index 0000000000000000000000000000000000000000..b90359778d84b3818a7869535aaadee544046480 GIT binary patch literal 1918 zcma)+OH5p46vzK}E_ZkoD73VNR`D{_aXR8moz_ZADGX(XBE!QDkW^Vfbz-V*#<*%4mxh?eWfS9;Xkyf*OBVR}op0_8q#?#T`Oci@|2*#b?k`_= z-w)KSq`og_Y??N~xX$i3d6 zPV1C@fG1pU>sfv5?ZBVZ4xYZFeHzyZJxAP@m%!FU-jqI90GCv%N!oPw04YwD%^Fq< zx#Aj(a&3aW#Yx~>^q#`f>T*tc(gUP3MAoX3Qs_1#T~ck%zb*0)v3=*ovF@Rmu8xtW zvov{n{{y27TfG+hxA^_C)%0Wz)75=esU^v5Y>t0&lKc+Q?IAsnWY(0krqQLD@(au& z0nJcbhI~JRWfSg)rqu2x+@UX&W;T1#S?%(kef)aKa)SS6WaC=&qH=2Tnvl=pkwaIn z&8j#TWqK5|Jm=9EZB?H)$lN;hJvDrb?L+v(NW<`}a6_)@tnS6?9b}2xQW5)}ZqOmU z1X35VpE;Z^hjaG;oC^`A;d~U~)O3bp8`gzI`szSir?WkZY_+LcoOOA=F;Ckmo9ENe zm!FvDCf>tL`69FWKl8j4&2u}}ue)5kxEE@K*zH(W?<4Q9(V?5O_yEH}fY&hqxQV>$i058GyI*pDOZqq?Lk=z1dbqj0u4 zhHm>(!#gO)7?T>K;&F0}yZk#E)v*Zgc!YP1FH9Y8#oJPeT35W^*t>S7nqkv?W*AqV zS|1?i(E9q4GthVkpU_)9BB#fAkMphYp%eU1Q0-NAHwV3_Nv(41*4X!DOUrz(;+}mg zCaJ7IY_Wkgh3{14d(By|X_~Hz&{wz#lh7Huo1y02eKnMbD-mZqQ_o@bS=L(Zv)H#| z)@wic&w8Hb=rnMB`t;g?{f}q{_hQmKNCR#*)>jg4mt%OnOlyUBv6Vba%bDr9#lrQu zd`Zo_D&Ht)W((zVeyXrEm!BvV!o~S;exWcI?z4o&=~5vR4$Z_~Ely5fUHm&RnlX}I zT3)yg;B0xy#PF~D;`(~{?ppPO@Xq=>mFh-#s~T=ps&^{YH!9)H%B|{K;d^VhH!5$2 zsZ#mI?8JQOOomMoUuzyKlRF1v#X2U0ImPkK=K2^hiJoiHWtgC08#P;xsmviTeGK8SrNQaS5BZrMx`$0Fv{}JMygWNRfAD({!L!<6R literal 0 HcmV?d00001 diff --git a/Ardent/UV/APP.PROGS.O/FIX.FIL.RPTR b/Ardent/UV/APP.PROGS.O/FIX.FIL.RPTR new file mode 100755 index 0000000000000000000000000000000000000000..deea6e13e64dd0fbf8d150e950ba2f22ce769ea2 GIT binary patch literal 931 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 JHR7&<`ww^Mt=Rwo literal 0 HcmV?d00001 diff --git a/Ardent/UV/APP.PROGS.O/FMTS b/Ardent/UV/APP.PROGS.O/FMTS new file mode 100755 index 0000000000000000000000000000000000000000..036abdf3079603461a830a96daa5901c35737f08 GIT binary patch literal 97 zcmaF3MsO-CgCGL~12Ygq01E>MGBBt}h%oQ~X(^~UBaptdm4P7vNP{popaB%T#K;6R MjgcXSF@})=0C_wH(f|Me literal 0 HcmV?d00001 diff --git a/Ardent/UV/APP.PROGS.O/FMUL.B b/Ardent/UV/APP.PROGS.O/FMUL.B new file mode 100755 index 0000000000000000000000000000000000000000..9dcec9f070e8930a213004814512194e8681a850 GIT binary patch literal 97 zcmaF3MsO-CgCGL~12Ygq01E>MGBBt}h%oQ~X&IMGBBt}h%oQ~X&If!E7{kZ_0CEWiHvj+t literal 0 HcmV?d00001 diff --git a/Ardent/UV/APP.PROGS.O/FSUB.B b/Ardent/UV/APP.PROGS.O/FSUB.B new file mode 100755 index 0000000000000000000000000000000000000000..7ab4417da066212691e150aa9b4cd537e9b9acbf GIT binary patch literal 97 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 aqIhMpoZnd3Wz+C)Zh3UhV#2#;2FS+?9(AYy literal 0 HcmV?d00001 diff --git a/Ardent/UV/APP.PROGS.O/GCI.CREAT.B b/Ardent/UV/APP.PROGS.O/GCI.CREAT.B new file mode 100755 index 0000000000000000000000000000000000000000..92aa4d5555197ddd8c77606851def3ca2826b547 GIT binary patch literal 3026 zcmd^>*>eoWHZ4=95cPe+lZK&+zfkE?u;M4%QQuru)1g(HEOw%$$Cv{Upl>~%=0JdM6^;vUJ4xS8+XE-)4hqtYKoBE?bSKU5^<7jix*qp!b)2Y7RMyL7u0Xp5+57HUFeu(CYo`;+d zW9MphK0;^u`cXQ|*N@SH|JaMp!2fYCPT*85#2Km5*}`*#i-hM2&l8?6yg+!NaIx?r zp%N|;hJ+UjmkJw%%Y>H*mkTcyUM9R;xI)+{)PzmKW?_r4Rd|JPrErz7O?ahnweTw8 z8sXK#wZdzJ>x9<|*9*hK>x2m zC<|_<9`H%(1*_C2yb;_%{oqq{6ZkmY3_eW*;5gj^R%s)+lLo%zC=S9wVR5xHZYF+We@Eo6K$3D;eJ?y$E0Dj!}KzZ$oFRi z^}d4p=LEeMp_=pZmd>yPq;@>Z^oONA*ZittEt^QM-h`pKkoq7Bh~3lipZaTPM)qUqJB|$71GIkm#g{g8HOy&9 zG(>dEvOSeIJi{rQmZ40`_4HCnR)}_MHu0%4C$)>~ER9edx4L@2L7RIQuKB0KZqQ1pYIosiBRE1}E zUDLK)Z6G?BjP->hktrsU@l?7ioK2*X-HFJCbS&JN$o5AEdwR8aXSg?&_5~`?x?-73 zxIG3R5~O;P*=Qn?)p%gIyIbo{r`j`{O>3-@*K;|0%<^)&hm{WHOwiTKm69=LnZ1VN z8a>l(C>v^QX=)8APp=p&R45*5ER^g@Wdd8|j=&KKHRg23bIkmZQ48u0HC7zc!ltfJ zwxdF+P^0Y?4M)qyBi*U6lgD1Dj9u`mx`U(%E2p)!3EPw`#dIxU|Am zTFWY}86N&Gj*b>aT3bD9wQH>G%Je0Y(Nsn?<+@Vom}-g*U}*y-OEbm|k>xGEtW@*9 zcFMl=?6F+Yw~DswS$f%E2XZH~vsAlb8IE335u6Fr8bYO5Q$f$+pt$lHr_YO#*V-cq z6*UT`WqNpzDsGkxiO4yI?x8;#&W5#Ye|IdS{_eNORC&zx_)Hj%(p5pCdG6j+WcpCr z6~j_6rBnOwO2T=ZTt1LGPmD6O2u?{>yDlO#Bm2LV778^=SWJs2I%A5fQ>s<9T&Y^3 zgBTF8$4YrwK-DolLkgKX!3Dfgyi8>oRmse?FZuT=RBiDyaj#I|6b7E4V&D-AKSl^Y zY1mo^uoYMWbg)O+-?5kr z{LF&8eyfQ;Sa4~REI6hPGs|43*2I}Lv4{oNv$!Ufu}H$BvEW7B&SD|NRu)SkcCk1O z;%F`AOBTGGuUT;M-?HH1zpsg3Sn%HbUi19P;&gas)Ktjk#_h&~p)%qkC&w}iB`mEA1vVR1ghy)1ZRcC+9G?PIYV;xI%o0#VN+ zr0gHr#U%yBwHWGG4rgl?vIJpFS+m(nvBlwYV95rY$8J1R>si9?CRoc@@Z>!#xb9(y Fe*mlvTN(fW literal 0 HcmV?d00001 diff --git a/Ardent/UV/APP.PROGS.O/GCI.MAINT b/Ardent/UV/APP.PROGS.O/GCI.MAINT new file mode 100755 index 0000000000000000000000000000000000000000..6a3709ceeeb19c810c2f22c1a49edba9d6507ef3 GIT binary patch literal 20702 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%0AZV1F*^=IT1y=UGDg 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 aJxEwWc!;o+@GxN+;Ss`e!lQ&0fd2!v&RQ`5 literal 0 HcmV?d00001 diff --git a/Ardent/UV/APP.PROGS.O/GCI.MAKEFILE b/Ardent/UV/APP.PROGS.O/GCI.MAKEFILE new file mode 100755 index 0000000000000000000000000000000000000000..6167dcc1508d0f4014685206a05af1d593f0cd72 GIT binary patch literal 4283 zcmd^BeRLF86~B{BLeoMkLMrPv*VYit{|nJU z*!X#?zXli|&~Bkg(#Xa$Mf>QGwvSq2Z_+fnRd7o1qjUJj=zw;PK2B9stwk`diatS+ zkng8z;nlG3r<#y|l4?VK8_f&(r|2T#9Orhb3;7*%ameqaOG17Z%@6tAv>@c4rb|Qq z8M;jPWr+D%dRu5e0QG{LKSys5`8~AgEtMc@*Zv>1IER{8OpKQczC-W|!6kxA1(yjf z7ksDSy9BQkTp_3guM&(3UM;v%@ZEy%5v&(%5PYxT`vl)FxJs~5P#0V+*d(|{uvzdL z!L@?x1X~2J6>Jq;FW4sd0l^J|*9mSE+$4CtU`+4^!MI?%U_!7%uv73x!KC13!7YMa zg582Wf+@jX!4CrOr9R+&lm^~U8Q|xsA2>+^f?I)Kpbr5L(jf3&x(WD2`Y><`cK~~S z1o!~m4Ez#p1AdvdQyb3cSICg}S80d5zeZVkAEKPRzfPvSAEZ1+9j0O0piR+cdWasT z5xghq5!?=Kct*&=+oEsKPB}k2k?%KY7cGJRx2Qm;$gU>RaewTh;~4iSjY`YHt+5%= z9!3nlUG_=TNqIj8ziD_?qxEgDBj|gao@9*PAyHc~sK|Zy(3!89L9fR#Dnftil4+MXRym-XZ{)i%-#QoQRF|}1i`U&_3 zzDuj7sEAn1+17+Rb+hKs7;HEB@qdIU&q&N4Bj(?4GN zc@DX3NAC$ln51z!s*NL;HayRxbq0@1r}3QfGbB=o$@v^XtTuW99@ErXHI2L`X%E!7 zaZW$`9YnhtIlAzB1kcZD25X(6{cOjcj?s&V@dDnwiV}Q1S_8@BCuDrb78J8Idcvh0#)6bdS5xn|aL+zC}Qyb+amol&*b zvUARON%fh-R>^ZG^qy2E*)gaFQ~iA^J($iUx>c;bJK2*=XZm89RG*$1F+*=<+8Coo zjS0n5ju^X5m33U6MiqJXQps}cl0MYFttYWH7LQjj+0&8g>yBlTsh-|sd`n*<)|Jc* zwr}en&^x+f1F61{AOpQSkxs`t6R;sbs=p`Go{VR79vJKG)qDF=o#`ExT`uN~Y}P5; zUe@ri(&4NHEE%K4f?2k$0n;s+{r)?ei8iiT-5gb(Q8ZVnXh*a$UvP@W2}o4h1w%aA zm^EC_wQ|E|;M5y!EV`BrQCBI)Rnb(m(eXx1SI>0Bds8tt2Q5_E$$R65i=at6tGBdd zn_HUKu35LHwMlPk*0U`z>G}2gnss^;Ec}0DY%IU4x!JQ@OXk|{^wwlgdn&C~XS-8< z3AH*ggryA?Y~9>r3LV`Y(&Bh7MHv08q=JfVhCZ=ZwdlTvZJSdh!k#X%99`?F3p47WzTM`|~u0%h! z#Djh)7?@SJvCGU`1ye;=2Q=C!RL5p@80g9=&rwd%v}KSu*Vm)skeD<^%Oy{ldoY_a z?3~(Rs(RNna>kB=SdiWmWHGi#Pg2C5qI zT(dDaJn-NH!;5iTYuK`(px-A8mom}AmHCG-kK+{x(3QLahY}Wxg~H(3bV3#6bX}0R zD!LBmgyRJnL?#`2B3uRQuB-EBV=YvDy&P;#R5Y92L;b?Qa{}s4UER>X5YP`Ln;_$1 z)0MBG8nnvi>aR4IUB4hfo*?K8 z=85|onbZ4i-d)~|ao6IVbyO(woXX&Gn7!YmPPjUF%>Py$5rsQAf(M^xKHvuzt&M(5 zy9#6zH`W5SGhxsBnBXeLHzEjr1MqPNatYut6MTK)0}2G!JHDFyuH#JV0Q_|$&Mz^! z81OqL-1SO8USq{GQ2tSY8b*e`RthEdOA#5TvdOgeP4F68Y!(^XDUY z&PT3*Nd#QM4y({oOn7x&?8&-m4S)e|#X)KivNGL1HgWKXn3jUw84NzmeRwLtr@58l z7Aty$o!I*r6Lvboq!Z*UlLW|82(7IExtR%%nqs1Z+{T0xJj$dV;uCe*~}we zV>9o8NcuXPmvIYg(w2iPX96p=fJB&x66?9O0j(NNP4a6CJU1|Df_W2@Yd{<(i$ER( aiSP#1NF<)=$)N9LCY*+`unD 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 BztsQ$ literal 0 HcmV?d00001 diff --git a/Ardent/UV/APP.PROGS.O/GCI.NTINST.B b/Ardent/UV/APP.PROGS.O/GCI.NTINST.B new file mode 100755 index 0000000000000000000000000000000000000000..deb3653530c03861b06a63542c7ff785ed71897e GIT binary patch literal 3361 zcmd^>{dXKy8ONXLCTR-=TPRW}t(T=~Q%EK+wz1R#-R^GUmSi{XP8t`Zbviqnoo07t zJ2RU!irof8eBq^{RK*wK3s?bLlv)Jj#fpH+IePpF&+!~NM}OmZ{LRyI^ccU-lkA-S z0Dpnm%;$dZGxvG9ckbNXx1U<~a67G|Ia>P5QJ&t!=hJAnY*CaoYB*KwMs1#KSp_TuW(G`dT8TzL0I`g3$byFm9)jM}sq zJY)2EYK!!})GoRm_Is%#(qEvJk^UmBiu9LgwP=p>Wx6EN_tB-1zMs}a`T@Eu(ht(* zkv>81i}Y7$t?0Fg`4CpFRp(dfib#Kru8j1O_~sX419!&;J4@w@Faa4{5DO3$LSMblRgQ4 zhYo_@rB8v6l1aPqjxNw4X}?F7wBM(av_BwQ+8H3{7;i7y~8*? z&T5}Qq&;+oo<>_orFGnI;&TMPM=m;x&LRe%ML&htB<}dg?bFXFK>G|BqPA1`%*&{G zskDjSe)>70okPYp^v*&(3)?SH$^5eIc|?0b#{UwwhqM>zB^kd0y>nteEn_vX4^dvm zJYPY^KAd^K!ufJuGX9#jYCOkRWsXg1&?{O4>;QiQPd-uoc0%=S+A7TRHJm#4Aj%m; zc!6dl#tddLOUKYVi}rP?(SHjDHBsEj{KYqZDFYhslbv^VH2++U-e zr>D{KTGixyK1Fw8jed*RGt{Nc&|mO<(Ta%g2z)mzjXh7-ijL9mP}lF_dqShVT{mp+ z9PM1)ndwZLuIq)WWQVq2b6i_FZV;N)swz3YZH1mcr|M={QDxt&sR_p|d9#7a+fz;u z`g3|VXJm$os+b$kt3t70q(@aEHJZt03PwI*vv7^z-cHyIH=A7b`6?4W`mgjRC zRp;zM;CODJPo@rL(-Vnga*3JjP%b~3FfzI9SSERUKAjlJ7{%1V@dNtMNa8>)9|=^T zkERQS#Bdrm1jvnNjZ`LS=b~P* zQM;Art9UNn4SsTz~I1+{+<21`t-g5-5P{R zFW;>9@6`KX;s45!BjxFVfzaI**gHlG6Pau(S5UpyXfB^tz3E9zZL;d>_EB48Z6=cS z*;1taS|mfSVO64D#S22$tl4Zp?5wd;4co5mn^l#>o^aeLREjy3O$!?(kjJ>ZU+j`T zoXn^Z=a6sWAun6a5KmNE<3Ix zPDAifQjA`zR(WFYT}q;at;;)7@*$9(H8R{7$G)vSYe!Se95@%WS!SzVrE=q=fzH>KNjOUf*jloP7un^jb$yz)hUjvc6~XO`@e zDr0BxtJVmx-}D5s&0$#rPRnA}#2!H$%X33)S^GBCRqV}fFRHlIqxw}DYt$8N&yQzS zw7WSKrk_ZqM)ZA>w>9f++YsBb>>wyNs@3Qj;mLIHPst9P#Ux6*6biqLD5e;=q=#Q= zgkOK$yA|M`c0I74#SUPa1^Ye9VimB!f`gx8!C_Cc;7rf4SP8tyf^WUbVm0uGmgOxL zmjHib!MFa=68~bsr7g1HF)NT+a;<5JD_UX$3$AB#OKfG4g+*t z&K^?aU)jVZ#l+MH^$ri`-bO5M44tLkb==EwZxgTyJz1OGEO;e`S@23^S=<6qWWjk) jvfzj>vEackv*6jh2GK4#Hlp`OHuH+V!{Qo<3lRSUM_9f+ literal 0 HcmV?d00001 diff --git a/Ardent/UV/APP.PROGS.O/GCI.NTMAKF.B b/Ardent/UV/APP.PROGS.O/GCI.NTMAKF.B new file mode 100755 index 0000000000000000000000000000000000000000..dc67a2ab0882289fdfa5c4257bc0893421490ae9 GIT binary patch literal 4299 zcmd^C|96vD8GqiUEwFV60|b=eT}D^f+LzKn#~2_XO}msP>6#R*c4IHen>KCoCcJq| z>G(Eg#c!b^4%9ifj%_+|qRyc(Hgyc0Oq{a$Wt)g76Fr{e(Vsj$lQaB0PnwtM*^YmJ zg!{Rl``qU~U+#17O>^#vsrxEuD(#};zdOmGzu@z6^z&v-r)MS-&C-f<2g`|O&LNsI zso2Js{6{w*qcQpvX>`B#X(~_|S!layghsUy%&kJJ*EIT!;BLV^Z{we(J=z%UB@dNr z9<21x=cwG}_fduL3drxHN|*1W2`=AH6J7p!nk1al;jZVdg@W~h ziv$}4ZxUQAxJ0l~@MgiKg0~1R6TDS$x!?-Hm4Y7>TqWoeTrKDqY!VCzHVd{0-X<6n zY!zH1*d`bf3=2jC+XZhI>;OJOQQ)H#13pHbz^~9+V1d>NehBzg>HAx# z;WHw)enjFfVAP683Um^l%Q1QZ>_y0aitImHauI2BuDaY>2kP3Uih{fVnE|IPJ%n{cIE5j@Nd(RIMHUFQ8uAC7a3E_mlW0K+Gaf ziTpIO^w2NpG`)J(J#dt*J-Y{iS9;R4~m|L zeg!MPmKDDdeAQhyR~tkIClLD)=vJ0(l{`*?SC#FS+?bbg>((x!#(XCGa3&o&lgtJr zyFNK%uR;Dg?Ev0`e0I|InTw|(|Tn0Tg;x3NOlO`BX~I*-n*UDrxoa4sZki~ zxJEmrMmuQ~<4Wyb#Bx&l-(j~Vf}f_d@N<^-V}2Rd{+`a^+q+L9P9Vo)uv>tvSS9E{ zuUlJAe?W#qSbGF(KT5-B$7Rj1?C2K3%T>g3)cFGLCD-vRPW~|P96Yn-H(_%OGh1Ne zMX}GCTcCLkF`c77!qWxBRFt$s@;rS^JnX_b*#&->_K5wG&Rx*iC6S+pg&{hRc1ASM z!{>SU%t4=L-aspz$zjM!bsN_Hgqh=13)w~3XW#wEoNI9bH}MtO|3Cj%74~SfYW{T# zszcS2s)N;j!?LoDN|=smXHu4_QdZtE(rJ}Q*=F3y+CwU5IK3)qXESPD%1UGh^Qyz_ zN#z}TNDoJ1!R9X273u6y(XMDL5K_LTP%s>f#yWhlNQWNlHC=6GT3Dkp#*ku{y~ZX} z#j`fMQ91UW&!@6hUhi&N9}cYZ`Ta!WK1pg*SbLSK8k-rf;uiEc<)1G$6|k7oxgCvG^%v?rbd z=8a4)Z4OwewWggnJI8x(%v-l;VS`sWM$W8N-ezxIGM&xkhOkBXehB>Dy0~FGb}G?h zmXzAPbvZj_VN+{W)>ht#w=V1SnzkNm_P0lTb^?2$qS>S~XxK0swBmYWW4xiUVez6R ziM?KiC#r4Qvj!1<*CMwM|eh zre)ejTKREIQdSRwN190^j6;-h!)cUZ;X*4ATyA6l(`wvD#J>s4W_EGO(S7!NSighv}8?|zk@qHn7nK`ku{6EEe2~< z%8{D|qn62gYv8KErft@hZgk4gqk*=7Kc-aFw>B7VQJvx7?VSOITN7#OYzqWz8~c+t z)3}jbSlrC4oj~w>_ay}#FThO=dOEdXl3Jlucc;a{v!6jbg{=m;oG#~h`4y4m5gjX* z7X8nJD;MAytSo21_Z4YZGN5@B1DcHRy*K>_^K+A zt4oA`bxJ&QOXPYcVXV@ba8g^D%mCTRWFE+VCRc$xUDA1h38!<42?zf&6Au2h5_y9O z@6F#!l7BIo3`u1f$W)N&OxS5Ph=;TAK&NQ>2A*Tn^*o1G6yMCFiN2-3%dL)ynnc&kNml*PQ_VJ7VJ02AKt$C$9fse*^ckx99)> literal 0 HcmV?d00001 diff --git a/Ardent/UV/APP.PROGS.O/GCI.NTMAKL.B b/Ardent/UV/APP.PROGS.O/GCI.NTMAKL.B new file mode 100755 index 0000000000000000000000000000000000000000..39e8dd885364e12b1a450f5b0aa54cb6ef597c4c GIT binary patch literal 3411 zcmd^?eQ+FQ9mjv0OVXC|RxA)e@!@Dn3eD!lHkMkU*Skx&Hg^~9HVx58-R$kO?0I zS<>hs?PD}YP2?iY(*hmS7ErevsawS=ZAg| zT@d=cbfNf#81p`yTw|U0(?y{lqIZS<0Bv05EC#jz$Fo?(t+*I>WR5NoUMg%8UM9R; zc!luY!uJTT6uwuegjWfp!mEXwgzdu3!fS*b!Y#sUh1UtU3Oj|muuIr2>=E_~-zVHA z+%D`BzF)XQc)f6^@B_kK!Vd~>5Z)-g^GqE+>*chCupu}CKo8$+7Hj8pU-@+Ch-HOaqA0akV#zYFqqT99?l zp|qF2k1CF?VC_KE%7I$tp;{$P4pAY z-L19IPqEu)F#oeM<8!oG>u&& z=5;RDA6}{d#VYluSL$C_rT!JEU+pA*x#~%DYpqzrudtgJ@h*J!e>{z5Z7rVLOX%@3 z&i@2@KZUGpN)srI<(x?Z3Pc3}Gz$F-H?)&jF!Rt3kmt-$kV zRn-his_1(aHR8AhZ>FYl_JmUl{8>GdHB$YfYBW2XQ~A-nkxZ*tBAv>l@rW9~(#_h5@p}86%O38#;H44Grl-x$HoG+;QvG zf@xV^-3=@=z)mMD2dtTuYT2&4&VJjk*~2S&)QEQWboEA6U{>v|D%v0IES9}$brwfd zn?xWU?X*lk@SVbh-Dorv?X3Eai$mS2JYPk#(M~TY*}iV{$A_{pzkst)d9N7Em_7zg zxt8A7XZ7~=ZtL0Jv!h$@?$xb6g!JO|de3&f8xj6jnwlz3_Vxzuj+(tKogYbM64|`! zveMaHQgtQAu(h$WtJ}BPqLt}Tt22er{Yt2TSGP)GspQoH*R0qaz}OjMjT*3B+c(Q9 zjyvJF6IdzsR5UGIl$t!omHT2B^hC^v>Bi_#GOzwQ5KrlrUMQFKiaELZ7_kEG9A70f zz@z6*86zFrH>mGf?i1L`R0yj$AYm8LlY6Otr);Zew9_bINmbvo>_XkQ z)r^B%JR!@MVJy#`#&hK!6|Yc7AIDXuTR6Lo%vD~Q%fgoJg3?pL@>piM<|*74v+PZv zbfe9SEWDlHu<+tvVd2I9p&@@_;j?+W5%~wp`G~YOK{h}( zvhbwskjOhrOG^=?rO2fS$pK!=4Ys0m9SiSngj>qP!DwW1m}Q)WkHKO=q9O}7EH$Le z!vAZiLLzZU3wM=8KFA?nQba;Mu;bjEOTXhfq~+49T*`8ZAN6b8=mN-kOs;K&T+YJX zbQZoKT`W9rrBQW+r45mzELT8Iv0MUq84^iAixXIrATrE7JWsv1P0FQPNgE+DV z$zP&9Jk46?;wtfeBv_GPbyTr$G_pwI5bqgFZiqQi7%~dO#D;MRBWNQ&f*h4{cxmb~ zr*%hG#?;R!#iwnlL*}L5s&$3lW)GX)qS|93!W$*;6*QkQiVG6S)XM6 zCvqm0sB}@ei z9e1bv|8!xoP^G>uRF?{oK+W6r7aY&?L%rvQddCSJz3T_D#DU(Zc%d73PF;u2R^8py zMcrs_1%5NEd2XY`Cfxq3$r)4sHFq?v0nbQ{a!S6Pk{^KY7yO^VZx;vM3~U+_0w*L= z;^k=C2I9GcEl#EA`eY{r+cYgPlGBuw?sGIXO?OX%DLOgC(gZJP$&NTsIR>w3s+aDA h1k(SD1TxQ8njxPEGD`Q2mJoTBrR!l!C4)>b_zknVvH}1A literal 0 HcmV?d00001 diff --git a/Ardent/UV/APP.PROGS.O/GEN.GCI b/Ardent/UV/APP.PROGS.O/GEN.GCI new file mode 100755 index 0000000000000000000000000000000000000000..524d6a282bb785b0493a0cbc9ca480f1fc3d48bb GIT binary patch literal 16603 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 VxM=1O;TBp?gqe#F;lhdm`Ck|J_ILmQ literal 0 HcmV?d00001 diff --git a/Ardent/UV/APP.PROGS.O/GES b/Ardent/UV/APP.PROGS.O/GES new file mode 100755 index 0000000000000000000000000000000000000000..6c912ed131ef8af30ede08c60795ddf09439ae19 GIT binary patch literal 97 zcmaF3MsO-CgCGL~12Ygq01E>MGBBt}h%oQ~X(^~UBaq%{#lVmNq(K-P&;SZvVPpcD M#>f!E7{kZ_09}0sKmY&$ literal 0 HcmV?d00001 diff --git a/Ardent/UV/APP.PROGS.O/GET b/Ardent/UV/APP.PROGS.O/GET new file mode 100755 index 0000000000000000000000000000000000000000..f1aeac97eb7233c2faa7a253f07723891174ab21 GIT binary patch literal 4281 zcmZuzdr(|w6+btyBx%X3NmH7n_I8`LF@_Cbf;4K|Ei7?U*xl|f5F$3&EKAq|cQ^Y8 z1tIkjYx+>Dr9Ns@jJnu_@`z9Yk?@9KANY@>WB$-iXLLr#$sf+hj5ChEbMD=nr3uUZ zeZTK~=X~GqJKwpFzxHl<-9lR^M%l!F)pU%0k6$a=-Fe&Sl{<<4DI-KRYl!|lO7s`l z_`2QS9vI(HzDOOUkcO+1&QiB>mP%kRP!xJzuv73$8T`xis$zP;9O#TwxY4VpT*W|Cz29tk-Hk$mK zv`P3T%=sc_X`#X777*#ep2v&;6cG+!A}X6 z2tF!!Nbu8wpAr15;A4W13qB!e7kpB%RIp6YAy_VWSnzX#PQfFBPYG5CRtmZV-GUy$ zr-84L7uZEU;OpcEewV6%9jI=`8sPWnDDeAK3w#Z=zCu5s&jUND4%k6o0KP%b0Dnlw zffwim9YS6Hhyv37m`+Oj6ADV(P4&|LltR*8qy|L&j80LW(n&w3Mp~rZS^7Qj3)H$s zXRwNXZ=6_9xL2Mt`$y4Vp%g45N-KrIJLy@cW%%^LxlcyBlqR&7jmXQe z9)gNKT-k{01>-sUFlRq>_JdDjDSw8Jeyq@sdwKvm1~7I$L&pGg3}Ec04&BQIAJ#F5 zRR%M33>Z2FU}YVHrj9`w8HA22&~fE9I<7#+75Wuc>{f=LW3%OEK89c&!q`n6y4N2J z9mCKuoS|dL&@lun>lik549mzcbi556Z)fP}R#K9e75X(Y$5~5>*AP7UB%0|ut|s)> zp+z)wjzFguI#*;Q9Ww&0Bce7PGa@k~G>RBJn(2jGVnz`&Dw$5lj7rQXjUi?XF=MyH zj3H)>ev_eXOk&1p95LgF`PVHmRAHB9Fj9g66RmtU5 zennC7Q(ClNkHZs5`FlNhq0IRpYwXCHO33&MBPf z6m&L`u47VW?M2L#=$JCkbV^31Fy}P%OdEPKbxcFYG)`m&I%c4wdF{>Gnt_g)Rkfvi z6~Tvf%tFU(hK?CS#|*4oTeGH)Ss9syjydR<%h18K#d=oP)*M!zTUA?gau#zm51sSS z*#`})Yik}c^Q&rWUSj5H0Wk}R`QVnA1;i|@s*?qYS-{h-TUkWRcG1Swt)JXm7#YHq zStpAUvq;wva}6;^%ozQAt{Jh{Xi4(2lu;*3$j4GfK5`WO8OhJYF3iJu{2i`boL)7a zaVNl$G5mVSqcj5Fp%&`rP&R#Vgl?4UR*V-M`-WQO-~dOX@8qbV81J#LP3<+fwBcIaKA9L$;Nc?^Da z*u!~zck#O;WxP8s+`;FVqzF_bkh==$x0@^F;;X8IqS*g+V8V#P_Z#LrrnJ*(#A?9w zyJ#MEeFwS9MWs#rvJsh*Ii{%#Ex4{NX5>#-kt1_)1x(W-^lU_~xDGt9bKdsJ zxLzAP!?92>5s9^_(Lkb6ZHPr$)S9qXA8C!N-q5LVJP~WNx!itdd97OOuJWqB zTA$xhsoKjboi3-(@3s5gUYox$WO}P14KZp73THIDw zcHHHtv6q(W=ya94y_I&q)9vy&OP}&O>=jObZQ1dvYFl}Qz1rT9d>&EGZia^#9tLEo47l)_YydtI(0k12DGz`= z&Yc5*6HM5%iwPdT_*MtOI~pI^ASh;hKZEd6eN6EB!FQZ7#2-5f9!7Xe8kTpN;FhC5 zGU1^Q(&QgZSlYjtu+M*(@LDWE$l5g7z=ZW|O_QBWT(CUIgg14X$=x7lm~b9mX0idK zKkYNlgqN6N!r~X0@V?$llRq)Zh2_Jv6ACfAk3+K9l=U}I3+L0q^I2G&g@svoyK)#$a{%Yg!dbGg*sQ;E6pOU* z{wyp`e7)?uDc$pNZ!zQakD0PqwDhXb N6H?7)5q}@X{tqCm(1rj2 literal 0 HcmV?d00001 diff --git a/Ardent/UV/APP.PROGS.O/GET.BASENAME b/Ardent/UV/APP.PROGS.O/GET.BASENAME new file mode 100755 index 0000000000000000000000000000000000000000..39c96c2138260dabba1af3d711bad6f31bfafdbd GIT binary patch literal 1877 zcmZvdU2NM_6o60Ku3fivqiln*0lP~(7|=LBw51zkBjl%;HFijxc7d?gbDYLBwo}__ z7ybs6|M4?m9TE~xydprnA@PEQ#1lNj3lfMoUU)#F5)$H^Lu2tk9DnEY@%6pOSHAYo zpNwwqfKg~dAJA_Cw-0bz!8m^C0Mz;cBt8Rh9Gh&61ALA-+W+r&0+Sy`R-gqDaB#Pg zKlM2BsB(z=!_O0~lZ*zHrthnN{=mYHMbnX}A? znKJVc<~imZv%plCDznIZ6uAK<6FJB}NOx*3?BZ8@f} z96!)oEm5~T(+FIzE82R{6b;X{#e(J3-F07-%w@|Dyso6Enw+nSs#+2? z$ckLnN@-0kNm|nkTMN^{YlN+L1r6EM*Gyr!9t|VfG`jCwuH#F!?4pueNM|ztQdaV6 zsgTxWRVm7ubERB*PS&c~#mc;tpG(iHrBJW}sgNs|)3Z6uVFzkO(Xw(zljy>9u_zTw z>TLO<<#gJ0-7wsa6Bv4cce-p?NMEQ!Eg zQPxQC>jYOwMo>QMwfTyKhWMI0ESF-|*dcM+1;RSlaT?RaPHm@M zxnIV(jLU#_j7dE4iaL0XtC0pYAp#CxF8tEv z!W8CXkqESy4s-cG?!l$Vb?|W&J&|tg*98G|hu(%B_8!c)p*Qpu=nH)n`a?elTi9uw zH5dr}Y1kV2Gq5f6XJLEj&%t2m&%=(;Ux1zLJ8{ex;ifSE67F7S%`d~vp}zvV;5zQZ zZss25EzDb)dzrT}_c8Y~Z)e`Yypwr=DVPVD5_6b2!n})lH}f9mA?Cfz`Mh@qMs3egHM>wGNBOC8$GRz6TKhZA^R#+olT;}uwsT!9baBe;e=DcU%O4NpM@-w=l*qzuP#15vdC z%WK+>C2YqJj7CFLZO<|T*IN@UBdCj-=QhQh?Nr@WUlgoG+Yh`oS=DqUTNY)lR1n2- zQP1Q=GM!UYrKlH@x>k_&x)rt-mV&vp&KI=l;)3n8TUEm}-L?~$Mu2y^Xxd2MXto+w+p%XY&$mjOQPQPod@Lb}z-U>c zLdr_fTElI%)^LmbB}}BGsA+hCXIB@kPNTdOZF#nXn>s37Pe_^+b%VO)$$B=G*OFcp z_d*oiTCi$(IH=;7^5mqMm`sevC*o5vIhK&kNleML!*YB=j$wv=_2uQ-QX&yJQ@%Bx zE6youS}Te%Gp7|YVk}d^TdOo2**a&jHdjJztyV+#nxO`6+pLGBy6Xpy(X=RmW2<^e zRZfp}3;g8rS2}`%k1pVcljPWDDRL0yI2FbbXGy5hI>{Eq21y^{W0Gx%Pe^(YpON$< zz96BhuSo_F-*qxSkZeW#L_$@+cjQkJTH0SE)aGvznv0ge(%+Fm5?ar$j_fBT%2W5q11mz;hAj;>RHs6rY6yK82;=d=M#sAompGmf3=8sP18p#gK{6jK?GJyYr WJn23X+KmGwSPjD{-6XvXEWy9@wS|lT literal 0 HcmV?d00001 diff --git a/Ardent/UV/APP.PROGS.O/GET.FNAME.B b/Ardent/UV/APP.PROGS.O/GET.FNAME.B new file mode 100755 index 0000000000000000000000000000000000000000..6b148d3ae9e9dbce04d393bafcada6900c1009ac GIT binary patch literal 627 zcmZuuu};EJ6g_Pz1Ti2Kp$bB&M2#{0fDU3TNQ6Qt5KKBaJMa~JfQyN7c4TyMH4c6S ziGSeOIC<^^69->%U(dbwymRh*{aj=pOk|Nj9DoK31)QMHiiNtJ$5aC@*^za{n4SX* z)?OI@ts@p^Nb`ISOFc&|z}76}k--P?0pkwaxYr^&rO8PmWGzCG?h%sE@yz^*F=uA8 zy2I}q^GC)EDNeT1mVBvis(OSH44$_TLj}83F^FC{M^-6{UZ~B9ZTc3d($coLn|Q~F zcey1hD0U8C)E7>fZe{FIZ>d*!{+Cx&yehj@IH<8(Q@x0K8+;iZE@yY?R8&q8_IZod z~a2&)$A$O6FT!U z|C{&zZ{E!7US6$A#fs!sgXj_&c{J$hLT~CFDJSoD(v$4=zcr@$=B`0AC0yOi5Ln+Gw)buB!EX YSuJMnHBd3!9kO2)aImfwIwR~OA5qpBSO5S3 literal 0 HcmV?d00001 diff --git a/Ardent/UV/APP.PROGS.O/GET.PGMS b/Ardent/UV/APP.PROGS.O/GET.PGMS new file mode 100755 index 0000000000000000000000000000000000000000..5eba2effa9c72567cb009aef54d2cdff10fcc63a GIT binary patch literal 6745 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 M#>f!E7{kZ_0BD^CegFUf literal 0 HcmV?d00001 diff --git a/Ardent/UV/APP.PROGS.O/HELP.BOX.B b/Ardent/UV/APP.PROGS.O/HELP.BOX.B new file mode 100755 index 0000000000000000000000000000000000000000..b12088e19565c040cfea285e28e84fba37d7410c GIT binary patch literal 355 zcmY+9u};EJ6o&ua+tOMADb&Qt$pIKT_y7)VOk`ps#4ze+s)_I6rjOv{$ipx}d<#au zb0J21@}K|yU(ZQzzrTw2M1^9?o-TDxo#0m&rPi=Xcq5JQ-A2lygO2#0jY)g9BR!y8 zr&NAS-H>{uJtwDD3EtP%^>q{W&LFMQUn(sEAHZ65{_qd@i_iE{p?j3d>k|z*Z(X6c zus4LnXvD7FD%Pb+W)pI%jGH*vDq2Nqo}OPHr_J4b*4$S0d|B1}rI?U>XqLP)lvqRN S^49&e#W0px^t8A~>!2U?QXMV; literal 0 HcmV?d00001 diff --git a/Ardent/UV/APP.PROGS.O/HELP.PRINT.B b/Ardent/UV/APP.PROGS.O/HELP.PRINT.B new file mode 100755 index 0000000000000000000000000000000000000000..510d83e57ad5d8fb83ac44b444b64ce7d23c3862 GIT binary patch literal 2201 zcmZve+fQ6o6vn?ZXU+iSE|gM=Fu(vUL$Ow^Fwkl%-mukrsRf}Gxt11YXsx%Tk3Rcg z&@?7CJ~Tf0M;M-c?1K-csfm9;qluXZBmUMpXGWtA+22}guW#M<*=L5Izia&>QmY!3 zk`!oCOZr4N^fX$ovt9Qy(iJ@R>1N&dS~^}M6@|Hx67hhG@*j-rwSTLOI@i6I{rME)Ra!BjBf-ysl4l>;3+-o`ccO*$HyFx zIX>=q-0=y=Cmo;CjGoc6I*dGxJfb4{DV;$cK|ZJc;0!oTFVjSb^*oHSUchg4L&vmZ zq(%CCk^UywH~l5o)2_eldd!(|y~p=oalO~|v#w`dKj(U%>#w@r@A_-554e8b^&!_^ zcYWCPH(bxT{-*1LOw>ca)5t9HEhd`=FJSj!zm0tXyolY4J&S!2oMZAid+=PBvfd$w zVb-zFv6qMeB4TET^XAzps=vA`jrslpdqoZTeo@27OVpVIFFSuh?_ysD7pc2Q+0CTx zkk=Z9HAvJVGKYK*_9D0hdr7ww?x1sX$^;RdC1e`8tXlMCt-xK;y-?)nVU|_wRXrrO zfSqO)IDs^)pomGcF8es8UHWMuuHY==8OwNCXBOZ@tV|G6FV1_+`61^q;PGd%Gr@r7 zwMN}FnVp88#vidV!Jzk)33A9adR_(B;jZh`q;`(k3!Fp5vYvK)KSvJRw_SVML&UEm zhmlt}r*&|HJRABUsTsjZ+oFC1FU_)i-Mn)JZg7vEMVQPOCT9^cVW0bLCgWK>lW|`m z8Hd~+CZFy1^H=8kp#?mt40u&FzEcZMsg5p3xTWzMFRf9(4Davvd)(jnChdbcN~V}u z8yRncouZm`ts4K0$B(nmG;qwjnRvg)cb6Hzp7Tv(Tu{T4o~>G z-l^tV2o{0><`_#`rJEaTW6Pzjtx{3ppS62!f7B^Ee<^?KXt)o5XiQ!$zf=6Sn%QAn z=L}i_+tC5De%ssI3t4;NuRvsuC}m*r9%(dJI#I%_2I~g);~ZWy*fQ8OC>p$Pux;>x z!G{JP8GH;xTx&%k>l~~oT@~e!`E9bO-k`yt(V)qo*`US1MvERX fXftRx*l*y|n-z>12e+{MrH;PAis`*1uVu26$7cMV_*Y|u|vgdz+xN>F^n;c3;_!Men9Nz7QhU0 d6)O-kFtUIMAZ7;hKw==w{2vGyLE>CM3;>O!5-MGBBt}h%oQ~X(^~UBarqpVPHrA(jbftXaEIoFfsv6 MV`PY7jA3K|07w=E(*OVf literal 0 HcmV?d00001 diff --git a/Ardent/UV/APP.PROGS.O/IDENT b/Ardent/UV/APP.PROGS.O/IDENT new file mode 100755 index 0000000000000000000000000000000000000000..5950b6bb4adcadb803987cd8098fac4c371cdcac GIT binary patch literal 130 zcmaF3MsO-CgCGL~10xWFNEQY*AY=m4DiR_LB0w=IunYrGjDbOA7Xw2EkOpCFKm#bq k!pI6#%gVqE#4JD)V;Ex?8UC?>l(T_sVFMY&2x5US03vq=rT_o{ literal 0 HcmV?d00001 diff --git a/Ardent/UV/APP.PROGS.O/IFS b/Ardent/UV/APP.PROGS.O/IFS new file mode 100755 index 0000000000000000000000000000000000000000..1a044f402fe2d492eda457933a9571e444ccd7b5 GIT binary patch literal 99 zcmaF3MsO-CgCGL~0}BvC04oCsGBBt}h%oR0X(^~UBanW}&cKiaq(K-P&;SbFVq{`q O2Aapn5W^V5$N&IqUq(K-P&;SbFVPs-p O2Aapn5W^V5$N&I-@&>v9 literal 0 HcmV?d00001 diff --git a/Ardent/UV/APP.PROGS.O/INDIRECT b/Ardent/UV/APP.PROGS.O/INDIRECT new file mode 100755 index 0000000000000000000000000000000000000000..2405b94e71bf27fcccc9fe9fd4044fcd9a190b3f GIT binary patch literal 370 zcmZusD-Oay5PiGbLVpXCR-iDHgnIy@2to)F!3j79H$Y<%NF<6AAka;4NFhcFzZPqOVV2J)`Eoj54HW;+2h)V9Y-hmn36h~K9Cm{8 LG`khDa1H+f3{)WZ literal 0 HcmV?d00001 diff --git a/Ardent/UV/APP.PROGS.O/INTS.B b/Ardent/UV/APP.PROGS.O/INTS.B new file mode 100755 index 0000000000000000000000000000000000000000..6927b5813d83f971cf101aced972165c79c00fed GIT binary patch literal 333 zcmZutyA8rX41MPA_y$5qkQji1h6R{{iUOt1G!!)S48RN&41$D&m;s6Kc{WGKS$-d% z?VNHsWV?V24h`r@8DmD1Je?HSvNpFHum)6T;7Zo~cV;Z!+3B%@poKPSx(->Wy5z6w zA&IJwK~yP*QDrtM+!PpV3HH7t-#EgJn;iRcEa-9+WKZ-+WG{~2-!Kz7VM#8f6ue*0 m`XO{21zb=tWhGUX3i=nEg8Ukst~BTMPQjdR(L~VBpfexvbsJv* literal 0 HcmV?d00001 diff --git a/Ardent/UV/APP.PROGS.O/INVERSE.B b/Ardent/UV/APP.PROGS.O/INVERSE.B new file mode 100755 index 0000000000000000000000000000000000000000..c8e91168521936f1127a88ebb74e6e429bd02312 GIT binary patch literal 1660 zcmZvc%W_mz6o%KyIlB|CNl5yVzNLX67$6rAgbpfK6$}tT3?ZEm6S)c9u}ZlN82SVj zR{01HdC-R&?EfuTzXglTSV!!- zHSMO2!A1&$_E%yy%8ou|)*nk|Bf)GR>;FD`2wt^~oFB(-O6}&#<*>19s5%+d6yO!H;Z*^PS)!8+1P6xXbYa$K8&5 z96xj%b=>Q?&(7Il``CuDN3b<(!4KI{Yzin$p zlJj%U%S@D|-zjV!`xTQ-fz$W}{PXzJ;062~{zd!?;0%+`=)res_OHny%sUnwbDSu0 zqNB{Y?h=uf4ZVw+jd}bsv6fXl-m)t88|ut}S6qMDzQw-+&Qf=lviH)u6|YrARp!(z zwuHTkdKR2RJ!ikC+Olg)mWcwIIc$Qx#`Bm1=h4pF^VrCdWtIkh!~WrH9Y0~!xq*aL z=Pk+el`ZgnN^)_o5_W-}8{i_^Mf)YKU1Ih+_Yhd>>50cnsnna8G0bRmUzB2DzonLU)?;=iTjMKY_{VuexnPgQ@w$oQk#)|t@@+m&Vcb)%- zZo0|vYwWz)W{;_(x8ytjg-+Vv?2Pk#GEt59OFQ%6GCeO_3vIP4vICAa?{kfqGLEMj z`O*x(mvxz}%P3aJI?TKKJy}=48)Ut~tk2%%eQG-2h#FBue2ity)t~R&99vm!Hdk8~ zzv*cYyxw57`GviY_s1LAkEM*I^nXV`m{aJypdXNcd&7IxZntArJN_34+6esSEa<$S zl*~y168|8$CAclPD`*Pt30i`m1V0My3mym_3LXK0VJxVxkP&nXdITE)uQT+P6yK7P q_BC19B-kw2BG@YE74!)-TG%ES5DW^k0-yejn5GGuB&bYKiT?o6sKed> literal 0 HcmV?d00001 diff --git a/Ardent/UV/APP.PROGS.O/IS.EQPATHS b/Ardent/UV/APP.PROGS.O/IS.EQPATHS new file mode 100755 index 0000000000000000000000000000000000000000..4091fc1ffd5a8f30fc017ebf6b76e5542be27625 GIT binary patch literal 1880 zcmZvdTWs586o5~9UAJ|kY=f}@`RY?b=SW zavQge%eV|!flcCxR|FDIAn}5P#1lNj3lfMoUU)!a5-*%{)>u3cC*S%0^I!eTzw_&7 zBOCoN0?W_~^clzNI$k!$vAw&YhUqxh0F3nj9Nq@-73S#of1g8`ydJT^fe4Nf0T))` zm!4Ia#(W|Y0gvf2{r`9XS0Xo{4L#5o>BW9Mu!bw@dI$R0`!L^u{?O0EKBj2Q_K|eA?7sm2=gfOVdgRBBh2H>6U;}MY3500hM8sNn0e+5 z^D(B(e4KfTIm;|C6{gB8GM_+Rf)esIC?j774fzICkPgf-=aFy1Y2;<7A}_&{$hY7r zqzem32cAa04QG(=z#{TpI15Mdxx4~8$M@hI$M?bD_yN>7UImlm2Gp_Fhp>cfLIc?X z3kD)*;G@kG0Wgba=omipA7lMBoc9{Wn`LXWY~dMdV83PTzYHs|fM>+z2pQeBoj}yg z!1P*{Z3@fw1HIW4HOn)N!130Fs|O8H_nelPx9pnJ@kPm8vi!hXmlRc#^Hot*DXk`kDqZ)0_}zLHD^_Ox$K z7RvLol2ywhZWPo~PQ-HycxwwyTQbj^tgW?B-A*lZuN7+Gw2eksYB+vi>n)QKIJTly z6!~<#SKv#R-_sEke0Tw0og~LMOOb;pC#W!qI7>o}u99p)Y>*5fJ|V$3KYU8khxnXi z5b-4mReen|g!rzT`GI6B;wKWS`mHN}kkHcpBB3^alh9nW1eU?B43p4$c6DVxiGrC? z61u5Xl07JEBx5L-Nrq9r=(hQWgr@kGgckoj2`&D|uKY~09W%doGk=ooz|21+BPc`o UKgg5rBca_mK!VjUiqcQ=FE*Zp!2kdN literal 0 HcmV?d00001 diff --git a/Ardent/UV/APP.PROGS.O/IS.FULLPATH b/Ardent/UV/APP.PROGS.O/IS.FULLPATH new file mode 100755 index 0000000000000000000000000000000000000000..9cb47bfb16121e67cb8bd47086b01c36b1853678 GIT binary patch literal 1997 zcmZvdTWs586vt1RW?i>+qiln*0sEGgZ9wC+p$%Or8zGls*2E!k+7-$=&v6>l#7=Fe zUASMybpr;hZ0l}ZUJ*#VA@Kr2;t8JN1qs9(FMB{@5-*%{)>udo$G`9A|9ADL*!lId z-jxvaf(ac!pEw?$;8DY}f5$es6aFmI=Hxs&Oi|Rb$|y!-<#0M-idh=LcTA-I^UO}%l8woo}I>N zLAUQu!v^1$nfw znA@4RFmGkYnGsB! zb$Aka3XURA!yNK$I0j?*yL<;UF5iXYT%G})%lDwn<@;c8`2ke0*IAfHEJqjyu z<5?J|=LfS7@i>Py=iod(f8WAs%*XK=IFEJJ|FpQUmaM`>>~j$=!DR>sE+DUP%_@#| z6>F}-NANM$TtS*Ry9rOhEIwNnmypyf%l1Us@C>JJT81z!*VAe>Q8pbz_iU#n8k$!X z700fNY11m(%dRLG^QP-LEh(p{a%M)%D5ZiZ&J@*jRwPncIVTs@LPAvvl3F$V*21u` zkEm-cK~q+>B}3@8L(_-`&F;FUZMo8HYA%9Q6nw!INZE9;n3zaoh65<2oSKr8szeshMP6NjPQP3sJNy-m>Q4pt7Y)@wgs~$A*VS zhDHaa!I-4SF_J0=q@fXM5EJ@V7Z)oFv6yF#y2fy}I4$Q=N>N1htWrpeXnGcJZMJ4f z#tDP9zT|6Tx$L`B_tmqTdey(G+OB75b%O#NJExX%@{wpXIu;c8zUEha00n>dfNx!r zgKJlTJt&9hVi<9Zgc_YCS&vvDS%<*?3kYmPd`i-Z_?)B*@g)gWeMQoZ_^zG&K(Ybx z6A4xQ)|Nj=XlZ|vP@BI!!he;m^-P9tgekR$3$?xst8p&o%{wC=~>BhfMo^&S(?Z$4DAXY<&z?;~I dQ3y{65<+yZ0kVF|sZWTO9cte(?4_L6^ba$}n27)Y literal 0 HcmV?d00001 diff --git a/Ardent/UV/APP.PROGS.O/ISNULLS.B b/Ardent/UV/APP.PROGS.O/ISNULLS.B new file mode 100755 index 0000000000000000000000000000000000000000..e4ce2c817e93e1053258f8a6b819de1079b2f31a GIT binary patch literal 95 zcmaF3MsO-CgCGL~0}~KK05by!GBBt}h%j&gX-TL!Bak-9VPJ>@(jbftXaEI|F)=YP LGQ=>(FfsrDKhg!# literal 0 HcmV?d00001 diff --git a/Ardent/UV/APP.PROGS.O/ISUSER.B b/Ardent/UV/APP.PROGS.O/ISUSER.B new file mode 100755 index 0000000000000000000000000000000000000000..073416642397e9687edc2be85f9071850809b35b GIT binary patch literal 151 zcmaF3MsO-CgCGL~0}~K4Ft7k2I}kDhX%z_(20fsd3|NMNfe}d0GGbt80@5Ii4QK!b zXEB0wGcn`=bucloGTdWgWl#Z%|6pJP@((d+f!QDxF^n;c49wC%J~I#lm4a9xYXE3B B3he*@ literal 0 HcmV?d00001 diff --git a/Ardent/UV/APP.PROGS.O/LENS b/Ardent/UV/APP.PROGS.O/LENS new file mode 100755 index 0000000000000000000000000000000000000000..0db97809233f1243ac9135013bf73652afa1a604 GIT binary patch literal 95 zcmaF3MsO-CgCGL~0}~KK05by!GBBt}h%j&gX(^~UBakj_V_=8_(jbftXaEHtFfuVP LGQ=>(FfsrDQM?96 literal 0 HcmV?d00001 diff --git a/Ardent/UV/APP.PROGS.O/LES b/Ardent/UV/APP.PROGS.O/LES new file mode 100755 index 0000000000000000000000000000000000000000..e77bb5e0188a3b99572053b1df4b8e3abe5f2c62 GIT binary patch literal 97 zcmaF3MsO-CgCGL~12Ygq01E>MGBBt}h%oQ~X(^~UBal|z&A^ZVq(K-P&;SbFV`KuF M#>f!E7{kZ_09o4xHvj+t literal 0 HcmV?d00001 diff --git a/Ardent/UV/APP.PROGS.O/LIST.BOX.B b/Ardent/UV/APP.PROGS.O/LIST.BOX.B new file mode 100755 index 0000000000000000000000000000000000000000..82f3713ede000b324ac2d9a3d61b4da2277206cc GIT binary patch literal 142 zcmaF3MsO-CgCGMV0|x^LFaaSC5OM)&6$udr1)!J|NCF6WfVe%2fuRIQgD^Ir0Tlef zzzsA{4rm4^&=h6{76w)ZHU@T}4V*yn7)A!IVE>>HJtzMNJtr1!paw=DW(JuC0NpqV A-2eap literal 0 HcmV?d00001 diff --git a/Ardent/UV/APP.PROGS.O/LIST.GCI b/Ardent/UV/APP.PROGS.O/LIST.GCI new file mode 100755 index 0000000000000000000000000000000000000000..80fb1dc52394a54d719b820a35964ff2c7ce3d82 GIT binary patch literal 3686 zcmd^?Yj7J^701t7QPT89)268tAl#~PoV51FHi=1%F;OJhm1|2vT01tR7)4syiltp; zckNhCDGAW>D#a99pgdaI0u2;XN_eC+6x@=Q5C{~Q316Ty?H4{U%rHYIGccI{IkL76 zkj(IzB=>j!=iJx1=U!bYFFn5Iz96lkDXRUsjowYa#ouYvn;O^B=2b-IQroKmqL&{e znuU+cfBUlq&U18-G$~VOUw?=$_w|SA3SWPO zuJrXs>2<#T7+od$D$IE|GFOlD<8-yJ@1bja{Rvuofm{q||Btyihg)$i?nsr^39l12 z3fBua2wyLJgYb>QjlwqxmGF9DNO*&Aldws+S=cPxBHSvxQFxQEMc69Th1-N}!ggVY z@Xf;Q!X3g+;ah||g*OYkgl`pg3*RQ}5x!lxOBfdJ7Dj|oVNBR7>=WK1j0^jPw+aV@ zgTjO`DNG69AxwjFlmS0U26!(GfuEvbuu6M`BjBfL6ugh#3C_{G!24-0I7_#IRlEr2 z=rc41ewN+?evY!#h0o{%v`^~KQ%>qHP+saU;^pA>FHu422WcFm9-;~A)@G@nzDy5O z5p|Uw!TZpKQl$N;_tT>^iF%U0LM8beO(O2EQkjlv)9BSrU!%uRTZqDGDc6ps=aw_K|=3G=-W%Z=IKf7=R353w{Z8ewl=(Y z^K=X=b56dC@%L)qqwmY823YgrKMKXWs73GtvAFfP#9Jj7tGo0RJY4?}qe2>weOl}j z^ds0$gU^WlWBLi~XTSwSyFd$wXHMgh&%(p?bM#a6SO8C=$4SI|_e##~EO|I*4;kV7 zKM%z(;R}fVXLM>=%c=AF{Tx;;JEt()De9KFPUHJ$f%--N0=f(3mrM1TrTSN>Ut4eL zyjh<;&-yhi&h18gM_nw=7ypMiUs)FCUoRTxZ!QuiN7kd=0nTZ(Ys(E=n+BU!H^rMG zSr1awx4bqZuPMsKU{~cp{!L(qSW+){P0%@2yM=V^ld?RlMXxcG^@q+u>zYg;#go zqHVeQ-so5&wkI5k)EH0nCewpqBc4p8;*nd^vG73L7>$k%4ePxF;o)T37l=R~jAb(6 zz8HL%AUTvUqVb5K^T2Q_rKi%#zRbR&HC4%Hb2)p;@^V=ZI~~szK{s2jl*}osIBYtu zIkZ%Vj8JR)wvLeUvK6yMg?dA+g_2#VRFNWg5{^iyHJ5cfrzz`e){0ZKkkl4s zJ1Ue6wc6f<>F7ppB$W(1dE`Q6?1FbN>tNEjmD4*ra~+)>+uL`v?`+fCI`mv8TzcVV zy?uw?1`q$6IB=ja+0o%yJ6&`8U}jG|5lv>)w%lMc9aGz4d$F~>B}+GFOp)bjUsew0 zeeINe>Dg1c3E!HqUC+vvO?F`Jgt2PK%I+&+SGKY%rlqh2RVc#Is#Kq8nNGH(BDgI@ zYaDyPZVTBQu8=DSymXVyysrM)7l}v1Mp!pSQ?bm2M~3sbgM78J9rA?myUu@qC1lA5uclLOza3}SSjH~ zj*QIAjLh(mQpIypMl3z3BH>I-C6e*Pa4c#7|GwGg-e!fZHmi^t zTNZUKW)3%_*8&c$#PNu%%rO^t0FwOtRo{_z_OpCBQ>0 z@Eqa$5Q3+jXTggcXTiVHPq5&o=UA);&eT0;SzHRd%z~T#ToYl%|xDuX~4G?P}*0SJ5n;-)JSX^8TpezQigG&;4BX`&U>n0X05HS{*hz`_+ z0}+tp;xxGI<}^&R;Q!_v=Jq~_AP)FMd4sr%1j16#!*vM_1&mfHLWWhxIpze*vu{ B{D}Yn literal 0 HcmV?d00001 diff --git a/Ardent/UV/APP.PROGS.O/LIST.TYPES b/Ardent/UV/APP.PROGS.O/LIST.TYPES new file mode 100755 index 0000000000000000000000000000000000000000..827e6feae3e6e841430f27de1551ed87339d3152 GIT binary patch literal 3523 zcmd^?{dXKy8ONW^3w?pM6iTT@?d`S@tj#ouZ7j7GC$pQd?Ph1)nIw%Cmtl7{yL2*+o3Ig(`r7egpqTmnuqX%D(hvVsQ{NfM3^c+2>exE11leAX; z0kfUY{XWmV_qoq~=H_nt?z2k|w$oCYpqZZ$8lhj~Vi{F0Axby;5^Y2;{)6Zg zeEeMO=Xy9FjrkN%j66IcP12uRCTTPLU9lML5r)FObMzD)h@GWrYN57RE9SM(=czT) zw^N(wHu!I+_DFw$E{XIPX9k-md2jr3ROvPgfG7Df7Nv^dgt z(h|{25c4j&Jo0}X)obQ_H(e3wZ_t$&tprgb_WxLmvp5sWh=JehdxReoZWL}3 z_6k2P+$_97xJCF0;a1@%h1-NT3O^;(g?&Opm=Gp~{lWp^O~RCLyKsjvEgTePgr+bn z{4{tE<-q-9f!`z>{1y#?0SyaBzJ}O*4U0{hY*8rmr02lNc$wl z9mS|NSWiHGAAN`E2e4**Kg1eO$@r(?dm#2BdPc^#z&a}aBQmxb^;xmF_c_TS!2QOb zAH&1#^OzNn@!S{0evw{+{Q~&1*gv74!hRV%h8yu1?nAAekU!6T1wL+%BXT@;3_OW3 zCo$#>#_*e{p{6zLGr;FnsI&AM)lsuL{jAZxj&^oT{k$1JKhHWP^H1Z>--73jM*E9K z`zG4iI1}g1d1^stM|$2t@9$ke@<`zS5Dhv`!N4Nj10%~YN0B+ zq3e%VJXck`Aatr#Rjl}KA*}h+s_ukkRq|`&YNX;7YkLEgbH^${=uc}I(@yn|s!?+& zr>s%SP7W$PF__AvEIX&$W=^xqZZulC9_FZVXIk-+WoM783N@dXQFUHD2r4x%&~_#A zndFFW7&A;|`pw*+Zl}ylHf8L{CG~X59!=zjhPD2*K5XV9fef_4q-E&?N%#=J9Lm^< zlwoT;QO{K;Dp%eSfK(2&Un4*PI{GL*ALvGMjN-|o!uLH z;wp6N?s^sPk9U@;wR(LTB?@-KVZ=KNjvxA!;+WeUl#O@R{fdX8u2(f*#m#tUEiAjf zX7?LeQ}>Igg|cd;aIfPdXv!;Sy}gB=-ky!!o4Pl5X9p%*T#bc5EtN$Y}#|CJ{u zO1pb{LT_{6ZXC2mQkjHlsSSleGnZ5wlDn|AT~$wWr(BWadm>riTa2_n9?7saStv(V zxfX<;Gw!kju`~8OHQ;)#?^Kn6Gg0xzkSX?5atb&ofxO1Xd2x$cLbr9z9?d4L|2;`B z;*jy#aYDT7G|tJ)j5K@-1yX7@it4Xa-OeO0s5;VFJJ+E~sAZ$BT-L2dZkzamg73N> zzmR$r$7|=#si~b)Jf&I>eap<*bHnzHs4@3aPR>%!XBuwttrZe(L4a0?3_ z`5=q=z(E%L2k~JRmjX|+z*iQ&9U$fbFR|dR6D$@0Z#F%@VX+W+hXr^2r77NH!KwX? z1&{eB3to#;5HYVQ7O~)bu55~HSY+T?!-6+8!Qv{2JuKEj>}RnE;`!#7*I4ipr&)0F zZ?WLyf7=wlXK@)kXPTbBvRDkyzgR4VSkMB&i>`!d{r9nnU)mEqk_Y^* zDc*r-XOE=v2e!D-?Xo(r@JDuW`t4F~_Wubkd9CkqA6KTG>m6GMoZ&vM$YO+%@~vdS xyHYIpHLPR7iBGXu191n7We`VM@IuE~;Gx%9aOBf0IL>=4IL_Z$aE=DD`VY!@(l-DA literal 0 HcmV?d00001 diff --git a/Ardent/UV/APP.PROGS.O/LOAD.PIO.B b/Ardent/UV/APP.PROGS.O/LOAD.PIO.B new file mode 100755 index 0000000000000000000000000000000000000000..998a17bc0232bba124abb781206a3d77b7e66f0d GIT binary patch literal 2176 zcmZuyK~Ec35T0jy!4420aSS18^MGIy2*xdO+S)X&F{Xwlg(MJF!6;pM*JLBuMeC&{ zRewO#R#gtEDpgfgMF^=?j{E`+6-QL{&_fiV9(#&8{~oO8yW^D5h{lD#cL(d$1)}?ivHaiP1q2W13<=6Y&Iapi z!TNfzp2NCHQPkT6{&t8cEi{r8qFxG9A1d@yL}^XwCZ(I9&r?+C7|nNQ;0$)b;gR6^I#Bx(p2#Oa52H&zogf=B5@axr`;RDODnO0~$SkFS4PpNcI!Qb9 zgTnfeQA7^tO^VYNtoFltyTD|T)k&wYe+rZA&^-9q4X78uFr$;I&wp{x8gQH!fzKzt zrFx8E&N1pkoX^gm^QclhK#!^FV?p(Z2!qFEFs*Yb3n}7=wcv^Wgj(N-G4Nx22K6)a z5V16}t{~$r@c%LJ--iDV&^hdeFl7#>*DX3QZJW9~zbae^PbmacCO~C?Dhp;gpcrvH zOz)!CRVs`6oywrzdx#}4*-O+Z3!gy(PoMAe`?wc*^ym9LKpOVs?;7*H16(8j`^snu@gZ@N3OEx?$PNQdV7ORi@;M zWt%nWn!4dfU{)O0sL9V<%kxZIdXAK@?oQ_C^OMts`Ma#Vd!{t3if1{t?mm!CRVEjv zCX>>#WzlsVH!G##psMY7(%i6WUatyEXU(*^ckeAv_ttB&;uxkZ==Pwew&X%hUpA4v z$W4}H)mkxAw!Ui0#l@Pl?pDl{VYy4vGdH}{;pUQMf2yxohMGir57tbX_k4$$UH>>; zuxyNkxq@)jaaVOO2YRx$rdQ0G?bsvs`l{(#m0*0iV%p2zJvlgN=$>BpOn*3YV-2-T zLtc_qXWcer6P^JHe4y}!4-CAGegxOkHx4oU!zH3n{OK30jU)gwGJ+;})c3>qZVnShZ#NIET4qo(+x^Az{Vl1gshM6eZp(Lo~&mLppn^QZpYzv%m%mpgAJbjFE+T@-w=%rjfrS{ z92)0pj8cey*o(0`#)>;=+*C-Ymk@CVst1G=sSFIQ4H1pGYV8a-3w4D7T=XUbcp!~W F^j~NnK6C&8 literal 0 HcmV?d00001 diff --git a/Ardent/UV/APP.PROGS.O/LOC.BY.FLD.B b/Ardent/UV/APP.PROGS.O/LOC.BY.FLD.B new file mode 100755 index 0000000000000000000000000000000000000000..d768ce0d0e719279a9b13d639a451d420d225422 GIT binary patch literal 229 zcmZvWy$!-p41_(cB^pfe9X^a-p27ZdXe#()QT_Qyo6=Qg!@`ox~?m`xWm{u~t8-GkP|eNAZ!G y8CUbUz+EWC&hnFWa_ZkUSvykX|6J{aDM_~zr+hDHzULs`T5A;kWfZjJ%-b()g%#ld literal 0 HcmV?d00001 diff --git a/Ardent/UV/APP.PROGS.O/LOG.ACT.B b/Ardent/UV/APP.PROGS.O/LOG.ACT.B new file mode 100755 index 0000000000000000000000000000000000000000..d362e7eaf17dcc9543a2b12204628667b97b1542 GIT binary patch literal 10483 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 H{08z5+N4n~ literal 0 HcmV?d00001 diff --git a/Ardent/UV/APP.PROGS.O/LOG.UVTRNS.B b/Ardent/UV/APP.PROGS.O/LOG.UVTRNS.B new file mode 100755 index 0000000000000000000000000000000000000000..a51b49bcc1d456300039393b7d64fbab5bdf98fe GIT binary patch literal 1974 zcmZuyOLtmT6#j0`y)=*J{b*jbSZi%bAOx%rS|22kmPir=5~F<>OerCS3ki@`)B0*> zPFyZ^`6C=T(_zOB9lQJqE_J}bW&HNets`OWZ+~Z>@0`8&xtGIl-w%G{U=UM~kA*mP z@C6=Yk?h>~2yQvRWt{^)p+BqwKQQ(a?f*U(7~I4eu20bWJ^!rd&wBnj&!6-B^PWHN z`4>EYLA{GT=^E#c#(dE{t{f}tMr!`Tf&lNc8_EM3e@FR@@=fKl%HLHURQ{gwkn-!w=ak=29#MW%c~to=W$a9kj6b3DWGZH~8zMRs142j3yR-{BsDvx-5*8LpV) zieu%N>Pn2b2>llYLK@#;%tb`wE~4~h<|z_)RlkF~9Pbh<%v)jFikCN{xuR6fb5(^t zOkbtCLUgHi@tvogS8W(R%b~`lx9Mx>B(I@PZ5_WDa1>xKdmQiKcdm_bY|~;q0h<Z*Xu+O~vkg-j@ z&3T9Bv*xuXpB1LxXU%)W2DJ@5_Hu{WdyMDc(4?lXH6G?35|^kv?FiR5=%e&ao>PO^ z;yx|>?B#T*vBj9*q0Xkse$)KT#rOsX^el|mqw&tdu*0CvOHZPceBzJmGTbqu<0$u& zc!=LN?}urgN}69Eu2{>A9N+|TnLP@2@onp(N`5^FvNk?Mx6bt7TkAewz;5*LRuI)a zRV}G1fs?B0C4PiH<^A4@KJ-K4%Umt@#sHqdA^8ArK$n*AZW-V&_WUs(;JnqQAJR3$ zR6nG82*dbMD;vR=))U;|UD)RBII5~KFV`r>w38H0G5#6GiJxNvTZ|reRVVNDcuP;c zjz@eZle*6ovwg}FImML|jCHZEDdw~IL_#!FYt8bV&~~j_t+_D&bRG@=-39;kn==oB z`Tc_1C~P;&HP@f6l}cr|Kuh32 z;GV#Jg2N{WN9uBX0w)AI1-b~DXW}WDd`jeR(2>rZ9)Xhry#jp#{Q?65(wZ|QFf1@4 zFe)J3TNeq_G$Z}lvRzU}$~ znM^hc8*GdTZY>i*u}nln#fgdvvrL%C6y_IGC2$bG5VfGU|9`zWfIV>>cE|`FFL;7r zx!{R{GXy^&c#`1Bf-?nA5mbVw3c3VO6PzV@y5MZVIf7>ho+)^i;Msx|f|Y`9!79OO z!5YC@!E*%b1m_CQ6a1v$e8F=C>jlpfJYVnv!3BaB3SK1W5nL$PAlNAA74!)%61-T@ zFL;UIV!C?aw`V8=Uv=sONEdzd^qEwGF`UC2e`wuB5_Xnv2W#3kJ4jcNgAVp$t0295QCW zsSeLlKKH-0Djb$MJ5f=Za{O1|8H+y&Zd&{)@T|r6fDcGMqwrU(O`%_7{%m z?0ye@KJPK~XAJpo#jM+D1r6eUbqQpU*BwDrqQ$W$x%{4lzj4S1p)b*fY&jmdSiM1d z8r7`;?nU&yuw!}Np7U5nf50>HkI3LLT8Ybq{gsj_V!^hap2e6mBk8G0pQTlnMMU%y zkQ~%+$LKjk*iA=kyRE34TW)`h(?)zxar`mlZ6MmHWwRAF3mqobVF&)5q?vRTIMGXx zZ`Agpw!O5Eo(F#c`~~><6TUm12ku9<`)MESs_`xKB7FYYjz;v3$cyMNkmqvX{d|?R zE>FPED&(;WdF1@eoW!}l1PSl&mtnb!=0nDN;1$b5i*^2qLt9*wq<>1EM&Pv+HS*cNSz_^7ACa?ur;Ix^UWIq*TFGaZ#NI>KVK+{hlG{hT zpAMk1E3jVg!E!AuUl+T79oDXo0@_-7pVq;y9B1hOZ8^kl8MHf*2j};`_A0y&N{j@a zZ}s$VjIPIc6mMX>+C#$E3$7I0KtAnSoVptj!;l!`urhFs+kIREd55+PHcv>T_0ln- zyCJWq4`_YCnaVwZOSJX$p*??>jnfA7n00%s=q=D~L|>{kysJrn$hIlQnD=eMn(r)_zr~ur z&eD|>=q6e7?k(^=`D4C!TJxVQusPymHd8D=Zxz@a`7xVP%Vs+2;%CND+Vyx^9jx;h zOJ8T{r$RriKwoC*BL(_n3-r@1eMjbQc<&4b*Gd4sy%LWC0ArrNbiYf%=C~u5RCYJOVpBJYe4NXQcjhTM@}-L_V`fjO!_I;1#cZ*)Lcv1FRVs1!%fWa3F93T)47B(g7Kgl^CVyl}hPx39_577W=08MvFh;jm|s7cw{qwgw`N z{)UK~Cwf|1+%2KtqHt&2$fmlYu~;%|n6apdN_%2)U?$q1O6XZ5-lnHBdaHGJMO>9N zRkbcHG~#r`XFdgIo$3KGzP<}D%Knfc~zCS1EqB&47Wb03+*4UX=+86&C~rh zHIvy`uRZEbW=td6ud@KY1Ch31Lt8Uev~l4gcU7a_neAEHSX-r5WAV&>AbOif3el zMGx*_x20+|qMev#CRH+}8>pjtcB8k=-{75nc!RuFaWuC|^r$(pE;W006&hWY9q5e4 z`m!liIiM;#)!dp|RoSg7O{Es7Iq7~_pQS#S(%QC^3*l{uyF1{$ERyK)`J24%aKsbw zB5z-AHoCz7!~y-RftsVL4bHnYlRu%oRE zc`g_EKRXEN(JtOh@}w!u;?O+X)7X44#XA1ihKJ;Ks9UR1Rv#N$Lm_V&V9L9AZJU4oZRDmj^fU)@TI8Sp|z z__87VJVE4847l(E3_fMJ@Is8y0&Aq53ev)oI>2%!YW zj`T1Sj`j!>Rz1!HFAVr=!;(xe!B-^Sa4prFdGbCJPR)scVl$Zu$12N{@;sTzg!7q| zClyQrkkm2ZqSi1u4rDEpSs=GDISOP)-exxw4zY&`C;v1PPX4((d4&o8ob`5Ig7**7 zj)tU^$uy7|OgQM-Ot^|_5XXo3NSf#H2-9;(pT{FyIm-qxt~u9fACGL^A|A0jjaT&& zj2xV;llv_t^{|Ky94vBh3JzIuX6vDp>NYXqc5TU%+nI0)+d!Ob>}1DW8Et1Bx9I^U zoY^Bx*m@@u?#`aP>RAxSv5+`9tdoN{dC8r;%F@vZHl2>qi%gCOd6x+%eGEYIDr3S+ zG=mAN766BKB+Z2L z&g5;b1aU}2u4EO9IpTFpIM6yK>|-+%4z?vv#+aNB$^A^u0(lL@!G1(sjvO=(M*O>l z!^PsW0h?KTCddvJpUPr4;AI}2#G^TY6HtgGvH-+!3X6H$UBu$4AeXY3w}{54Jjx^P Nopu@^#iLmu9|2n#$Tt80 literal 0 HcmV?d00001 diff --git a/Ardent/UV/APP.PROGS.O/LTS b/Ardent/UV/APP.PROGS.O/LTS new file mode 100755 index 0000000000000000000000000000000000000000..86a0a1bba43c1758d608946d7a07710e3bf656e3 GIT binary patch literal 97 zcmaF3MsO-CgCGL~12Ygq01E>MGBBt}h%oQ~X(^~UBar6nV_--C(jbftXaEHtF){&7 MV`PY7jA3K|08Kar_W%F@ literal 0 HcmV?d00001 diff --git a/Ardent/UV/APP.PROGS.O/MAKE.NEW.UV b/Ardent/UV/APP.PROGS.O/MAKE.NEW.UV new file mode 100755 index 0000000000000000000000000000000000000000..8881ec44f70778c0c8abaeb8dd99957d32a3ca70 GIT binary patch literal 3396 zcmd^?`;#116~|BS?1KOSBd-_&xlAGnn(2L*tRXz&I5WFUvh#4Jch|*W==AjNbatkD zw!3GS(WOns5Qh593XD-A^YHabHzkF%dvMEZ6*Gtyt9vm*UBH?P`r-W;S7Yo-4 zFA-iUTqjh*%Y<>^df^7)r-hdbHwrfiuMmDl_*vm*VM3@22ZckzVd04IbHXjct-?{^ z=Y`vZR|>ZauM%D@yheDfaEI^aCMF5!eQC(H{A!lLj? z;GI+gzei>802$!-X%h5lN;nN3q%VU%pc(K^x*q%?eFY3?H|Wz1;34`d_#@f_-bFXk zc6>&EOs2GlX|J?L$ddLaRFU?lWJ~)qnnl#lX^yVe0@_J;(^0CT_30P59k%1Cl7rTv zduX40e)b{XU(!6ShX1dqM$c1-yGO_UF;7n-?ikgj=g{AAuZ-d@;(YGKNNcqa_s(;4 z82+5Q3y()SvChZDwzE2ltU|ewLdnfXZztW4Fiwf54tRjF?Acwm;J48n5h8$<8N_p3ywe#q$^< z`1T|!VU2CSKb_XE1-};jPV^COyvJqM6Z8bK>;eD$k(hqW@EGi`^*qsuIi&4}&wly~ zBDoSR$*r9|SD;-99E_Un#oE5{8&vsP0T$G5G}^Ose_46AC^ z_v&ieaVy?Zpi1_f6NLV|g?ura+EvOVC$h#& zde7vPJ~ok@DwHCD4D?*4TuzQ>V8Z}~$-I%yrVO0}lf|N5EEUGfdmXpgsF;@JHQmrM zL#%Ypa=^f>H)?j%b*5}TuqQih+=wTJ2S?&6G#mD26(5TyW@}!fv5XQ0^Dw013Cr|D z->J;mU8iC^(eND?Mcu4CU&RaYgcnwAUpK~5#X{1rpcbm^&4x>+k3qAprH_tUBcmf* zhPMuH8`6hHbZZnQefCOyc&k1H3;$FX7G~#1MnZR6U~kElr?dHVp{xe2T%nXvgPGk} z+U}aG+c()F>x+?WEL9@y*CQEvO{*I9s$LMfX5D53#?Bi9YTR~h->j(=&V=L6Aycer z*0gX?0@=pSd9f>cI%yb2b+sQRfi#-Fshic;d_={Y5KNWa&SuLB)$IyVIy@b&R%oASy!f8!FiiM zbxiDonssWnipJKnVS6~U7I+Fr!mN372wqk}bFc3;Lwqm-wN!Pis`BlHCO#TnFVsX& zqPy%h;oK2RCU!T(NS=$(roBULnir}#08?A~Oyo$@SvFO`DAPb(imp?qX zuIn*{yDWwWS8E5j4AHx`)6*`4*ukAGz>O@}^Dv7ufFmsU@7jA3?QWkU=A zkFwxbPqJ76JlD0n$l^@k6&C#J&8~Qx1*i5;7VPsr3!aNp5HZjdD_L+p=XJ%!Eb_3d zXTghFU~vJ&B8v?W2Ux6xc)08H6bqi>Sr(l9KUi?`FLlMMEY61It*+%=7U#h7FBYpH zR`fvdq-!8z|2}#0WDL*A*hMf&0oSp^X7m&bUfl$Ha^0kOQ*7pc46bK$8ln$lw==ne zO*~6XOg!;HcIUj0vf$zFWhXrC=^o-_S7N@O+WdP#81<1o) literal 0 HcmV?d00001 diff --git a/Ardent/UV/APP.PROGS.O/MAKE.PATH.B b/Ardent/UV/APP.PROGS.O/MAKE.PATH.B new file mode 100755 index 0000000000000000000000000000000000000000..da41df1fb1d52b98a8839313a5a778715344f0f9 GIT binary patch literal 571 zcmZvZyH3ME5Jj(THnC&!FeGsj@*poj`~yV_B!mQ_0IC#}G~{pSsZvo=Q0EKy1^&V% zXI7Sw5MJ$F-Ktpp?gpft)|_vo zoZ6h)z9$W|(ExV@sgDjJ4fW|cBM8<_rKCBkD_Q_|J?bXqGv_SsLKDk6d*R5(EbS^LRg>5fK9-oRnHb60i@Ul> M!=!1_LLx)`0D8MJ*8l(j literal 0 HcmV?d00001 diff --git a/Ardent/UV/APP.PROGS.O/MATBLOCK.B b/Ardent/UV/APP.PROGS.O/MATBLOCK.B new file mode 100755 index 0000000000000000000000000000000000000000..f8f8911a6ac8ac632bde304679d9a581ee1f1f74 GIT binary patch literal 428 zcmZvYJ5B>Z5JanI_5=0;yNfXn2oXYvYnVeIM~HYu%n3LE%kHZm{EVKKU1Z7e`+3bHQG`pKieAVkh?=Xo=tRQ(mZvfKzzNDZm7BacTOpOXqR_x zZ7kEEJ@y9GiueYWfo`6Bp-UUVTN_uHT!1PGyCIxU-Y*@y(;DMR?!FgHuZ3S(5Xom>5Bx_)uVI+as1bgnOu>s zb!R(j$arm)G275r@KzIRRIua3T9pc#qe?~1Es`InH41HMsmsJm_{?@0qmDqOH_`!i zo>WJz)q(4@QpZZ27Gz!b8lgwJM=!y^*}WcshYkM=I$E}NOV4P(OTb-_dEM~3j%I(} yueCSFdjkKxq3?4Bp3?bdoNABE2g+-$sZA~Y*fivyyh6av?bslIpLYqFGne1BdntVY literal 0 HcmV?d00001 diff --git a/Ardent/UV/APP.PROGS.O/MAXIMUM.B b/Ardent/UV/APP.PROGS.O/MAXIMUM.B new file mode 100755 index 0000000000000000000000000000000000000000..3a4f4a36754d11b124a58d6835137ca1950195bf GIT binary patch literal 95 zcmaF3MsO-CgCGL~0}~KK05by!GBBt}h%j&gX&I+jA3j6vxk!rrbf~B7(|~fC5Uk7fUV3#gL>m&|FNmEtM*SWZMLq-E^~UsUqI- zf)`Zqf+AJGE0-C^7iWCYVMfPM$47kB@y!<>oUt>$_&q1d4$SCZVAFhl-*bNFoZs0q zyF2;i{DKpHT0jNz6aR(qxrC2}b@kFk^gY}~*&)hLBf4^iNHtc!HTN~kT39DFi)_+R zL!&Z{(4;m(9q>168acwUuyU1l>6kV}qcn{gG#~P&(HQwWJx&dx8{i*DryRrjAT@e= zf~I@=A(|nY>pV;|J$;B~dHNBW?diib$J39}Tu(nn^E~}H%@;i%HJ_mCJpYrJUcKk1 z=z32-O$+~Z5=0U0|2T^&+!Kq4xmdVFc!O}M@J8V>;d0?k!kdM+2v-P|aHTLHTqRsB zyj6IcaE)-SaGmgW;T^*D!k|zWHVK=BEy7meox(QZ24TDKE@6joqi~b(ZsBI(7U5Rm zHsL+OkZ`*&EQ|=F!cJkA@Lpj|xI?&8*e#3;6T+l0CA<$jLTT_B%7D+30X|1PpiRBP zKJaJpjH)4}vez9`I$_OPlbF9;2+Ruh2eOU!|O^uTfss z<7CQuf(DWGIt_s~mGFc#pw1hp@Fw0n7VVd}M5A^9>sxqoN5GSKYn;S8W1xYM^)|A; zrf=~svhX%~r?z|Ws=Y(Cy;IoZn0M(k1yJEMO`_5y{e)PHhH*mG{#vFym@1o)`Cc9$%ixDb%da<^pDOmM+jm z%;q9pMx2WZhikPtkM)2ypiww$S+=Y4rfWK-qGhV0RdKV!!zy2N%$#dG6RMnb3u@4@ zORBGE{tECp0vvJXN+iEg(C4-B9<}IAtRaAje_Y#E7L-b zDrF}WA6dwbnJQ;He2gmd>6J>+wkrBSWKSa67Yc`~j3qjg>3GP9B@?MwcxO5q>W&%x zkv%=VdS`d2H<|VXI?&_MOeWM7g%1UiJqaTc3mZBohEgd#l}>hL_7$zsaz2~O*`t=5 z%euJIp)9hL8(Bn>=Z2wb-l736-Wkxwp%bA-RKObk|8ILS*VOX=#FO{6pdLqy}dox z+TPmMvZ1A;S#NIDbM0{HgB$gh4SF*?{9hOu89dP1>RKHYvn`(KizOn-jB3iolj*2x ziVon?28J!&JZOq6jd`*>p7*p<@}z5z<_exwuq&>WEt%{}A1`$63q(PO!j_65QbsvjO}{Aw1E9I~-y<@EHr<`hvww;Bwvb1B+R}6&AepYhC=# zf?NBO1;_lwg3sa>L`<)Xxh%M!g>|uYhJX%!B7|77HL|;`f>yx{L+Bw1NenwGzUQIP$aGw-&AW zMDfgg+^CbdK_|rOgMnz~$o{vAWrkDe*jZv$YQKlAPmY-t+UN F{R2Wm`!@gp literal 0 HcmV?d00001 diff --git a/Ardent/UV/APP.PROGS.O/MINIMUM.B b/Ardent/UV/APP.PROGS.O/MINIMUM.B new file mode 100755 index 0000000000000000000000000000000000000000..c5150d8f0e6ea5826c321612f1c0c46d7b2d94cc GIT binary patch literal 95 zcmaF3MsO-CgCGL~0}~KK05by!GBBt}h%j&gX&IJ6rAU^v)N=fAJ{BQB1IG_sHk!PYAPBUl!6l=&VoSV5FCIi1qVTbih={A z%*@LQDYo9&o|!kc{QW+CO_(AgK%?edaOPZBZH+&2m#)AaS9id*9jc>`7I`0#*q@^h z>-Girfp-|$A?`6Cme{f~?5IV&b?PtsgGKTsnMi--8I>oF@RW@(#)KIY6nyuVb%GZw ziKn<>1-^V4jQEHiyJ~!e8XwF(EGDKaFOvh_*{X$FuNrr9g~D4E=ktOAw^NLq@Exb^aX`rKrorTeJH9FRD?ZU{us9a literal 0 HcmV?d00001 diff --git a/Ardent/UV/APP.PROGS.O/MODS.B b/Ardent/UV/APP.PROGS.O/MODS.B new file mode 100755 index 0000000000000000000000000000000000000000..028c3ccabf08020fd947cbf102fe0d4e43d478a9 GIT binary patch literal 97 zcmaF3MsO-CgCGL~12Ygq01E>MGBBt}h%oQ~X(^~UBalu75(z*Wgs}k)px_fmCZK7I K3^9x`j0^xni3P&| literal 0 HcmV?d00001 diff --git a/Ardent/UV/APP.PROGS.O/MULS b/Ardent/UV/APP.PROGS.O/MULS new file mode 100755 index 0000000000000000000000000000000000000000..c7520eaf2bf7f5313cdf55678924c06cf0be5c64 GIT binary patch literal 97 zcmaF3MsO-CgCGL~12Ygq01E>MGBBt}h%oQ~X(^~UBamL)&A^ZVq(K-P&;SZPV`KuF M#>f!E7{kZ_0BK(FfsrDP*4T_ literal 0 HcmV?d00001 diff --git a/Ardent/UV/APP.PROGS.O/NES b/Ardent/UV/APP.PROGS.O/NES new file mode 100755 index 0000000000000000000000000000000000000000..2055449b1b8636c07cab91c06e1d1d4de6b868b0 GIT binary patch literal 97 zcmaF3MsO-CgCGL~12Ygq01E>MGBBt}h%oQ~X(^~UBaoiN&%lrXq(K-P&;Sa)U}OTC M#>f!E7{kZ_08aV_0ssI2 literal 0 HcmV?d00001 diff --git a/Ardent/UV/APP.PROGS.O/NOTS b/Ardent/UV/APP.PROGS.O/NOTS new file mode 100755 index 0000000000000000000000000000000000000000..e3910c4fbe8aab4b783416268b39b23ec1cd02ad GIT binary patch literal 95 zcmaF3MsO-CgCGL~0}~KK05by!GBBt}h%j&gX(^~UBarrJVPJ>@(jbftXaEIYF)}eQ LGQ=>(FfsrDNs9&| literal 0 HcmV?d00001 diff --git a/Ardent/UV/APP.PROGS.O/NUMS b/Ardent/UV/APP.PROGS.O/NUMS new file mode 100755 index 0000000000000000000000000000000000000000..6f31f79163e8c9f47b137be810523d2488e2f582 GIT binary patch literal 95 zcmaF3MsO-CgCGL~0}~KK05by!GBBt}h%j&gX(^~UBaq%x%D@l@q(K-P&;Sa)VPs-p LWQbvmVPpURTssDd literal 0 HcmV?d00001 diff --git a/Ardent/UV/APP.PROGS.O/OCONVS b/Ardent/UV/APP.PROGS.O/OCONVS new file mode 100755 index 0000000000000000000000000000000000000000..7f39cd7fdeb9e4ec176d6a2f44c1c2787caf0cd8 GIT binary patch literal 97 zcmaF3MsO-CgCGL~12Ygq01E>MGBBt}h%oQ~X(^~UBar^tz`&3Iq(K-P&;Sa)V`KuF M#>f!E7{kZ_0C+D3-~a#s literal 0 HcmV?d00001 diff --git a/Ardent/UV/APP.PROGS.O/OPEN.FILE.B b/Ardent/UV/APP.PROGS.O/OPEN.FILE.B new file mode 100755 index 0000000000000000000000000000000000000000..543d9f970ea81ff30bcaa70115ad1c62fd99bc85 GIT binary patch literal 1073 zcma)5JBt%x6g^*NzDWWi#H+Zr5<%=N1QAixZEQtFWQnV|f)Ju$E7&d;VxGI19h3M< zVrG04`vW9cSXe4-Aq#?)zhK!yJa=Xi6R>c?T)z7{_nz}*enf?)MFB2;!j%;T- zax$(B#K9P6;? z>x?(_ZWBF09g1o^BF`oB6**2zc4&)>&#ZdP9aIySm{nTcq%WQ^++)aXTnr`TMj>(b zk;gJ>X;mb<@lL)(#LS~Kli5KeH7QLIBWfM-4ociRnUO>qj5OyWOUJ%533og`x-S`YczgZ4_c)kn6t{g;_z8|R&lHj Yu~|)OpA%!LI5tlccb?O@);c=l5A$^0FaQ7m literal 0 HcmV?d00001 diff --git a/Ardent/UV/APP.PROGS.O/OPEN.INIT.B b/Ardent/UV/APP.PROGS.O/OPEN.INIT.B new file mode 100755 index 0000000000000000000000000000000000000000..e89413f8d9b3e99b3236b166f732aca563a04bbd GIT binary patch literal 2383 zcmd^>-E$LF6u?jVL0h0;1r!0>OQ?#KZkt$YK>hzy!Q9Ebli9_*i@A&0&6Jou%wA@U8E4+j>|^d`_A~Ec4lwsH_cHHg-pAa>+|N9~ zyq}q19%Lq&DW=R!GY6RuFcs#5%tOo}W`?OUHD;E17GUSmS3^PZN zufQnsRTx8_frpUi;0V%(aij+iBhSMl$k*T~@^v@{d+{B8157S2z;P}Yz~b^E6u5j7 zY%bq|32b!%SlGj4zq>rU>i{}=LHQ}G-qvLxgHH8sx-Rqmt4n} z##2XCc_ficE>Tg_S}v0?6iv-4$wN6gF{Bt{siXN}DLs@J)^efX45W;#>xn@bW7vU~ zSB;dCG$d-6$Y!N%P8-yZmz= z+MZ;jlUXg{6>u+v?oI@AriYy>jwSW?Tk-yQUu<`5pjYaROIAOIq=`LJY`4^l5&9LU zrzfW3@xU4I?Y@jYqNpiN7d=)+%gLfg9>=APmmSGIVY60dL#@sgLiZ}62JVbi3~NQ# z4;-^%Qvmx`jV?vc>vB#y*p(l~jZbCtK`kq*QeIUK=j9}Z3|UGmL$X*A7O?>l6S1BZ zA=&eA7u>4tl$^=`+!-zb{UN<`BldU8wMs|?UqNYhUq0EwWqMRjZMft3j^Cbxl@f8V8{u>gS z{P#8akz_4Keyv4*Cs~J)e@NO;TJYZ&9&`&z1FfrrgjTT=rG9i%1R61Usp~jpw_|M| Y33YvhqyuG=gxa4*spl5d$vLe33;F%clK=n! literal 0 HcmV?d00001 diff --git a/Ardent/UV/APP.PROGS.O/ORS.B b/Ardent/UV/APP.PROGS.O/ORS.B new file mode 100755 index 0000000000000000000000000000000000000000..f434778228013896f19a6ac07f05b40219f8a0a1 GIT binary patch literal 97 zcmaF3MsO-CgCGL~12Ygq01E>MGBBt}h%oQ~X(^~UBap5UVqi!B(jbftXaEI2Ffsv6 MV`PY7jA3K|086|D_W%F@ literal 0 HcmV?d00001 diff --git a/Ardent/UV/APP.PROGS.O/OpenError.B b/Ardent/UV/APP.PROGS.O/OpenError.B new file mode 100755 index 0000000000000000000000000000000000000000..e2b18b353d9c227403df894428d33c79ff983099 GIT binary patch literal 961 zcmZwFJ5v);7zW^Xce4A{r1^!&Y9ispGFR1j9?fMbX0k6@GNkylnU4nfoJXs zQ0Ck@0!~@e^}nOW;(PWhpoo*O2;KMa5CNv}03qj59J98^_vK3F_E{G@E*XI#C-1iBs&#tRaarO80$m{>u-v8{}6Qs zzAET5*XOyaxtepc=r`BzxjA#2&ef1Mm-gJexsT4(F<@@Ma|`AUoogUtF5|hTxi8Ko z$ePP~u4V3rb8Y0zSQdth%A)?CH zJfa)cgEVh*Dk~It#R4(cgQzMstKph7np3(`swrJ6%`06f)s_A#EhzPr8cOF%O{FuX aMCp%GOX;^#Tj`h5qS8;Lj*?sK64M=sQ>UZ= literal 0 HcmV?d00001 diff --git a/Ardent/UV/APP.PROGS.O/PACK.FNKEYS.B b/Ardent/UV/APP.PROGS.O/PACK.FNKEYS.B new file mode 100755 index 0000000000000000000000000000000000000000..a9b7ec81940b7f2c79396b66fc92c46c5c1b2b00 GIT binary patch literal 95 zcmaF3MsO-CgCGMV0}}%burPoi1A~f$2m=?8mVrtz0_l6Z7#QM!Gzen@8bHB4%uGP@ JVi;o>831mJ2FL&a literal 0 HcmV?d00001 diff --git a/Ardent/UV/APP.PROGS.O/PACT b/Ardent/UV/APP.PROGS.O/PACT new file mode 100755 index 0000000000000000000000000000000000000000..da07ecc113c2f2c74e364a54f74a1bec8114b2fe GIT binary patch literal 17858 zcmaJ|31C#!)jszn1Bj@IiAALN49X@M0wO}hK*$0kWHAe%Mj&J+5J@IsW`ckSE^Hzo zSfo@1H{7XO_pKG;Mv*GDDAonh;!>B2)wXGWi2wJU_ukATsN$SC_w4tabC)+W`DojT zH~Hj5NinG+Vr0F!#XM-;Wpy{dGH3KmlbJ(BdUgQ||J{xEb9ah73ECg<`mz58fS6@c zB-QjVK6A4<$)p)0VOUN#C!77&$wnk!WsLm7WPz8iuxAo}idkn`rI)c_B?X$6oT?Tb zyf-2xJr(rc#uvwbX*$L6KBjXVKh1PeoOWz;OdLPmbdBQ~=GZvi*K~{HXPD#S_?hPT zINr~kp!f-}+23@J(+8LnHnq??&&&esW##~m zHuZq#n+Cvi(+S<4W;$zM=a^I-g~3TPjdHUYgB9egoM4JbOqyh|jKxaoYBph*nF-|)c_D>XXmx7mw;;)HwiIG^i5ROe z!*mnT8Aja=XSn>k>`WHrWnB_iWZj?ORLL?I<|4d_AX zWF{yz0<4>90evj!j<06d%M9_ky7Pp1Ks7E``~t=2D?U;21&U8ne4*k+ieI64vEqvq zFH!tT#Y+`mj5&8Pm&+1FX!|&i3z35snU9>sXM0bti&J3=_&U>v)g*CokWG*%tz%MqJ z!1^WTQMFxVno-5Y$k+QAXUnB#o-Dm)57bRx!U$ zf*LGBjiQyI2b!H`T zvSl{rpDZbw(|hDf^p4~2fa)I8!CxKLTtbhXwoEq3GU(+X&p)nnSvwu(;DHWv8-RMI zV%Kj!w>d}6E!j8iun%~OQLnz;{FWj&OO@9EUi-O+k-fwmvNe;5aacN|_ng|^4Etk| z$>~`0DKZ^?remL}LeF?BV7Ydy(?2WFt;d?>vQl0`Y|9x&akmQwh*4wlwHH>-=cCaTQipj?6uy~KDOBT}mT zCfKgh8LW{xGS{rdsXq~`_68}lBDf!{l^ZZa_ShFHAJtgW%(^ rCr`sx==gKL);I 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 literal 0 HcmV?d00001 diff --git a/Ardent/UV/APP.PROGS.O/PERMS.B b/Ardent/UV/APP.PROGS.O/PERMS.B new file mode 100755 index 0000000000000000000000000000000000000000..4f50dbb6590efee46d00f3ecffa79211efe6c665 GIT binary patch literal 624 zcmZvaJx&8L5QU%D+5GUAY%s71A^c0+fQFh5B2lM^1a%HVK@}u~Qc+NGiiiUsL5;)> zC<6_A<3s@oY64hP|Hc8q zG3q5WG0+`41ZAt{p5yKUfbT~Xu7ZQYoF=1Bd;k12WqF- zoL+M@eKbG4HtEjJ&Sv?mKlxGY-QM7i+*mujLf3VjPC94%hlE5^l26STGa#3kF=mEO jGD&*-2fY0%scrDlM0v|-+sqfkf1vPXqZKnze-8QvbA>rc literal 0 HcmV?d00001 diff --git a/Ardent/UV/APP.PROGS.O/PR.RECORD.B b/Ardent/UV/APP.PROGS.O/PR.RECORD.B new file mode 100755 index 0000000000000000000000000000000000000000..b92a97de9944fb6fc77311281858c7a86f7d9f61 GIT binary patch literal 1013 zcmZvbKW`I35XIkmedn076FWF2aQrdmz=q02kdO-$DHJJ)6d@s{a6v_h@*$|HKuQr& zP*9~rh=#@=0Pz7(B-&IdB4h~(_|4vNCdhZ%+nF~rZ)e`>z8|&UL~5(4n(SHQy~k^N zw%*ZMMfw~f(pB~c@1$*?uL3@|4e@5wI(>oFsjK5k7c2|-B~>(q-E!L4%Wk#E*aUm+ zDpVMHv8Gi!jWaOuQqV^e?5r|={uFDLu zesIP$d^@ijI+9vWdO_{=qV{Y-?TwS$M| z?t)&1Jw>;K$(Ksiq!V&Y^N%i}-juJg+Z1`v7N2n&HNL4D=-+@Z)d%#?SsQrGbF7bu z<($ohoDYfToKqcPSDmM?AuN4;WqEGaGgsaLnw5MB3gta!p~nneGrcPLW^g1y1LGYB zPSe`za{QEeVmDXdTXH*xCO^J`~sw6*hew6!r94W9Jw+xO>VACY8B zewU9klOvhO46|bM%y3mc_9uGIkpImSpu{|j`PKlgkZLq5tjJOWO~(v_*UVt?lN6!S HNJ0JpDcx)E literal 0 HcmV?d00001 diff --git a/Ardent/UV/APP.PROGS.O/PRECOMP.SUB b/Ardent/UV/APP.PROGS.O/PRECOMP.SUB new file mode 100755 index 0000000000000000000000000000000000000000..a432b74cb648233668c9cf4eb7b197ffb8d3fc7a GIT binary patch literal 3999 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 literal 0 HcmV?d00001 diff --git a/Ardent/UV/APP.PROGS.O/PTERM b/Ardent/UV/APP.PROGS.O/PTERM new file mode 100755 index 0000000000000000000000000000000000000000..3ccdaaa9938623db5c39d3053737210569282d70 GIT binary patch literal 1461 zcmZ{kPfrs;7{=eBodRX)AFURuz-TLArHX)+HbztEuGOxrshB_{F)=0@4?TM@#za1V z2fg>;(PKXW@dI%13z+x;Jb2*f^Gvr!O?NlX>^sl?=ACzUXZHJ->?bW*(V~RMI?g)I zaa>C?Ie8Nkd2jECyu!7-AaV?k8g(qgJi%xseU*>|G9_dJ`V4;!>MJElxRYqdGWEK1>_GF>;H$DJHSjg?%?Q4y9J@{jYq(}}*8a;G$8O<{anzCAMy>;Opu{}fbvqAC zWy@@J+(x@;ny%m2cejnZ-3r`}aXXDiu4lZ*zTYyfhVQja`=0On#`kuDrh&-s1U^Dq zd${feo)>rqEh59-Ua*6OASej34TA(4yf17z9C$D^e}D<}G`s>{+To@v^2lFwKr+o z0$C0}SIpMM<`(bSnmO(cgujl+UD{LZv8MYBXa|sX*yH3K1}uIb($nnm!JaT6{S?yt PyV)eqhV~2EX*9n9*7ucf literal 0 HcmV?d00001 diff --git a/Ardent/UV/APP.PROGS.O/PUT.FORM.B b/Ardent/UV/APP.PROGS.O/PUT.FORM.B new file mode 100755 index 0000000000000000000000000000000000000000..3880b700832473340fc56b5a195c8be546ab3dc6 GIT binary patch literal 522 zcmZvZ%}v8l5QOLXFaAj&HV$zxia6wesDWb+6p;fJqzWoPAaS4ss-OZYKtiGbjvV=R z6NnG^X~*N)ndg1>$4mW~s#c^_cD1Z?R?dCZwYmw?m3M?ky6dH9G^_uvOT;&2Ds&%m zFz8z)$tNmSr8T)*B|Md^LR)IAiQc1$)?{C)Ydl+xaPRa_v|XkmbF}Bj@adk{@J7oh zp*w|T=qc|Q`cK^dg`;xMZbwtwfqTaEGo9)owBX!NF;~al5&L$3^Bv}C2J>{JJ1so5 z(Ai+R-luEOdcMiw-Hm%qUq%76^S9I{Y=SO=ePt{EIWa`>uf*}ty=g4AZfX#FBQchl TX4%x)$XISr7?cK;!5H`fU=JVm literal 0 HcmV?d00001 diff --git a/Ardent/UV/APP.PROGS.O/RD.UNX.FIL.B b/Ardent/UV/APP.PROGS.O/RD.UNX.FIL.B new file mode 100755 index 0000000000000000000000000000000000000000..fbd38ce568f4dc1b47be97adc12b5a32097b74c8 GIT binary patch literal 188 zcmaF3MsO-CgCGL~0}Bu{Ft7n3HxRM{X%z_(1{0u|ELa94$H1`mFatvekOpCFKm#b~ z#>mLP#K6pO0>~Bv;vYcMm>Fz<`q_arGlK&Vb1-lMZRBL&0+KO|F^mjcR{#F~V+0uq UA{d#F8O$IKNSGCh8JIyl0AN!L#sB~S literal 0 HcmV?d00001 diff --git a/Ardent/UV/APP.PROGS.O/REC.CHKPT.B b/Ardent/UV/APP.PROGS.O/REC.CHKPT.B new file mode 100755 index 0000000000000000000000000000000000000000..cad0b34a7101a638e37b838a6d248e8e38c2e180 GIT binary patch literal 1823 zcmZuxO>7%Q6#mA4367KgrLK$PWZEVr4YA|2X(z zR3TI$#DNp4#IHCYBv8enN6rXY96;j00fAaYRm6ca+=37)->``*l( z@oqgh^kEo>a17p)#sn_&m*9Ii(T_|B_|5mtDd0^`-XHlBvsu}K8+wK|Rv zW;q5BMnr{?!XO?8262n=4!I#{ykq<)=sQX7Bu-%%-QYn!~RQaFu! z%F7!vn%}BHL|8kCE^0*Zj9=#gb6Zrqi&1)0^tQ1{?ouGa*zXN?sGRa^{Y;3(b{xINMvzeBNTZLcK%703)x->&!2z-h;yY{w!2NgOUA~Lz0J&bWz^jIjVS(@0$fZ~($+Ik~KH9@3X3F>uW77DJ zU>ZkomOU9@pZXc0{oEnrA7pMny+=)M%=nJ-Y(zJXkJLGyYuxWB_ht4LXP4UuF*c-v zRG(smFhIiBK5z0pZhRkZb|22#hkJ|MfBSZabLra!R=ext=h(M4Yrn_&Haq3r1-Xq$ z-s!nuggdy1=c$t*ii1dG`1DPO?kg#M78z-)A8HZR2m_cY~9>12N^$ipCc2 zF|Q7pwmDm`mRQA#3NP?v_ErQgGX4XuJ%t|AtFJgus26dG|3tYrb`Ebl}V^JbUhW*$I+OjZR@BzsR`Z=kbz@Ce-SyiWw$p0nN~LnSP%7jtUAdC6Ud}C*_0>gdL6@zZRViz0 zS!dIe`KseIT6*1X>84#5sd}y1VnQyTU#=`!oz(PMKeBPlc6J5VYIS?!%5r{ev79MZ zN~M*YwJ?!BS8=M>>$Yw+v};#ab**J@=ry;ou{UvkF;D$#rRB@z^we&OsW5-d_t2YJ zD!gK)&+kSU(T;;9*o9S3e<$sqV$E%GGmUj!YwA*U7e^wzFcJA6v)MEp@&>Pq91>>& z!W;{1o6^`JOA3mKCNvv_GXa{r? z$miW;+!1h`<_(TukIbad`y8Pd&Bwxs$QK+zvj!>jrO>Bo?hD-|<_Vv$S*|QFD9J|Z rM*$M?lK@HnRX~E~p#WLVp8~}7mjKz$-vXrWD2?hRI3qw*FA)3-)rt?} literal 0 HcmV?d00001 diff --git a/Ardent/UV/APP.PROGS.O/REC.CONSIST.B b/Ardent/UV/APP.PROGS.O/REC.CONSIST.B new file mode 100755 index 0000000000000000000000000000000000000000..19627057cbae530e4645a0ba71f1c463d8e28ae0 GIT binary patch literal 328 zcmZusJ5B>J6dc>Tn-9N4qM&?57C}crMTL-3P*EWogtS?CqezJ@d7T?@fHd5Jf(mh- zz%l4x9Jb^=&Aic@kw0H=E0L7@x=7-Fl3%v}-}O7W(Rdfp}W>1Mbw84hsB-s+s0$6Ze2h~7q_d?;la zf)7`6>uMi@t)sa0YG#A@MyfDhudIvhy{l$RE7419qtxEDi#F1bW?9X}J82fQi-M;Y f>HB;eDIrnXm?Y8*peCI%n!@xG{jk(2)j9DC#0f9v literal 0 HcmV?d00001 diff --git a/Ardent/UV/APP.PROGS.O/REL.LFILE.B b/Ardent/UV/APP.PROGS.O/REL.LFILE.B new file mode 100755 index 0000000000000000000000000000000000000000..a182286c666a59a88db621a6f7b10e12c7653dde GIT binary patch literal 753 zcmZut&1w@-6h1eTA7g7`YHI5*XVFsWqI4sQC^TutIuKImOi~H~nZ(<6WHN*Eqv%36 zK0pzCgW}4i_yFP?xN{*c#0PMdoqi{oics(6`_A8Y4(HzQ?`v-hRHGT1o+|unxU;ZJ zi*?#jL}^z03VZtt(L3Y>|2sF398-nVU#?OPew7TmPUqnpKt<&+|68s`t%-h)@^nnU z;C})-n0*Y}2gLpaPVyhrEEQ-2xIjfJsv^y0lZf6xH>UcjSx4&iL_ZI035tt!hF)N! zG9`4DULty|%J_lL=>Gu})eLmg{UjdK!l{{k)ig@9NSAQ?YF#NhM*&nP+tl#}$zI0h zZTM1K$Y!o*wJZPB>RC;+(swnh_0F4*aC470tQOmip4HhB*Nmbty2IOn|D2OU&E3H3=_uCRcr@|?FHRyi z2_qi50k<&UG1(6fc;EANyq5L0k+AiXR0l)NopdzN5s%V1;enov^uuQwk^9v3e0SjM ztj!9BVHD|M!ojpB+-EmBNJlzI;$mJtyaZB)5FnQFWg(y-ks*2f3gMR#EeYi$brV#P YXkJM4#%~;T7v3hIZh>BjBRwC1KSU3LPyhe` literal 0 HcmV?d00001 diff --git a/Ardent/UV/APP.PROGS.O/REMOTE.B b/Ardent/UV/APP.PROGS.O/REMOTE.B new file mode 100755 index 0000000000000000000000000000000000000000..257889eff091df0806bdd214c520df46f1cb89e1 GIT binary patch literal 3952 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 literal 0 HcmV?d00001 diff --git a/Ardent/UV/APP.PROGS.O/RLS.FILE.B b/Ardent/UV/APP.PROGS.O/RLS.FILE.B new file mode 100755 index 0000000000000000000000000000000000000000..166d4e2717f6c633752dd66d160a43442cc14502 GIT binary patch literal 422 zcma)1yGjE=6g@M$v%acuQrOrnVqs}xto#SHkU-Kz5F`qIfUT7XNp?58CinrC`UAnz zBCSop(m${fJ$DgoEWE?HbMKjRAM^Im7zH#C-~eG21@GC!3f7RWH!&C670mX8*LNV5 zblc>A*p|3`3^-!O7#VXqByPY$`NC&>(ffyHcoguOmlH6qs~U0AjXB4drF?>lLszn5 zq?%m)epMw~xT7haV2W5j=nIjuW!=Ute8tDQ_w7&b35U4WMoXAzvndbUlrua_6YJQ7 znc`!??oFZX+RnauqdjqWl%8Mo`svB(S?>~8|FfMhe0GuzmDi1S6$Am1wT&za76ot4 M@>FoUgOTU2c zpux%yu&^SY*+}PX&dixJJ3E`1zZYIpD8NG!Y5`A$C&O5)lrf>!a24Q?aqta%GAjPF zJ&GSlv)_jxCbG!kO>)!^h#%Gx^m)#kGCwA+sQJ8?W#z^7u40Y#8T0kO?pxOz@SjsW zIIe#V#YYhNp??oTvTNQTZ+642$B%C-{S Rb4^K_ZdZwRgoL+T(l7YoDn|eS literal 0 HcmV?d00001 diff --git a/Ardent/UV/APP.PROGS.O/SEQS b/Ardent/UV/APP.PROGS.O/SEQS new file mode 100755 index 0000000000000000000000000000000000000000..8c39ee535c48bce6628412645c884fb5b585211c GIT binary patch literal 95 zcmaF3MsO-CgCGL~0}~KK05by!GBBt}h%j&gX(^~UBar5AVqk~^(jbftXaEJjFfuVP LGQ=>(FfsrDKPCn7 literal 0 HcmV?d00001 diff --git a/Ardent/UV/APP.PROGS.O/SET.PTR.B b/Ardent/UV/APP.PROGS.O/SET.PTR.B new file mode 100755 index 0000000000000000000000000000000000000000..dcf088ae22dc86370b8b711a00ed2d9b51fce278 GIT binary patch literal 3458 zcmZ{m`)^c56vw~Y?UrpR(Cq`tdnvC1%kjP))PlgzN@O#eA-fY9To0&Uj&Y90SbLP(6 z`RiKbYzPr_U;^aV#s5|QJw6xI*P^Tfhy+xHKlr%h0^RJBV*53+vkL)^_wXl@=%jR` zqzgyNfm0<(1&-+wV@jGVtokenaDAWI+m>7k!%afP~HsXNHLAH+i#P)m7+jqiuq>Q~?W zMZO=wRP{a0_@0VsR^MeM;MfQbSr~(;SH^V1sK<0GW0;IW{QZo-pYabc{sG4S5Oos& zVa9)$@gFhqAJO^OzbeaGtPop2QsG%r%@jnCo)}IpQhvUUZWqIXz~HWDV7`@c(=eW~FrLK%Wh^v|1z6}air>verTMwo@;Zb?%2;d|i?G3WPM&V>+`Rf)37BkFQG{p%MGIm z%f~SaYrHL#&&$ge#w%E%jFpD50xPYIlZNrCh4C6zDPy%^tio!aQM^7k$;h8&uk-W> zYkNdblEV3L%9^V;utxc74Sx;Rl0VGS%U${=pBqa;JmEdug&$=fmw}p6N}c?Nk!I<| zI^%nt@B1zForBBsu@|Rlm0$U{*~;l2&lT&Mo-UOIYyU!?|(+xkC&#bXr z#!lrV3}+`2KBqXA2EIEI%jcF@zQ8VJ>^6*D*zGflV;LYL|K5ISiDe8|RbQ$1s1e?f zMv!7jv+QBX@LngQN4RIM=>F+o-Jy4{AwGKovSUYe&xN?>WcQwC&-lH2n?8#7uACR6 z+~sm!xFxcWWuK0rgm*%D|HI_=1dw&Sw3mr4?d-}pv9@HkJsMAClF_DULrctcolG?U zXmV3KsgHTl)>Jy-WTUCUd{4p^`;6no5^g$^NM#b{fa_O?Vv!gaFgSgRAw#ByG&Mf;mtG6^T%9ORt}K^A68DiH(ROT6}SvE*XR7YM-# z{7gs>?}L=Wl!E0_RY)~al%iE-tw;i^VF~d%f`C-@EWzr6_$k&sOy>1 zUn8bGp!j{K6yHn(kwO}qRE^SKC04>&DN>zCqFW37 z`i4?)RJ!<@@HS7WwqVdDQbZ*2*TbT&_Dgqlp}S9{8j4)WbyB1%ky!X$q9mVQb#+Fh$(*2$J1^1{k;K(Sk*Y+J uS&fPmDM;5vsufAX_+F%Hk!0KtBGnaiKZ#T$l0^11i)QgRX~^RL&hj5^AR>_f literal 0 HcmV?d00001 diff --git a/Ardent/UV/APP.PROGS.O/SETDIR.B b/Ardent/UV/APP.PROGS.O/SETDIR.B new file mode 100755 index 0000000000000000000000000000000000000000..c29a94b0820d99d4b8f0bf62541b6e64a4272e04 GIT binary patch literal 522 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 KENqBZAbtRp{JAjz literal 0 HcmV?d00001 diff --git a/Ardent/UV/APP.PROGS.O/SLEEP b/Ardent/UV/APP.PROGS.O/SLEEP new file mode 100755 index 0000000000000000000000000000000000000000..fa2f93423578187545507166b03f61d39b4d40e1 GIT binary patch literal 149 zcmaF3MsO-CgCGL~10xVKFt7k28xS%9X%z_(1|6W7B3K5Z!p?(%p#jJTVQfGHD0l~G z783(A!vaQT1{ol~j**4o5ReARMS85mfBG7QWh7qEf|04#b6 AT>t<8 literal 0 HcmV?d00001 diff --git a/Ardent/UV/APP.PROGS.O/SORT.BOX.B b/Ardent/UV/APP.PROGS.O/SORT.BOX.B new file mode 100755 index 0000000000000000000000000000000000000000..a0c66ce96a76ced4abfa548e02b9017e938dcd82 GIT binary patch literal 8970 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 literal 0 HcmV?d00001 diff --git a/Ardent/UV/APP.PROGS.O/SPACES b/Ardent/UV/APP.PROGS.O/SPACES new file mode 100755 index 0000000000000000000000000000000000000000..b511167979567907b000c490a5ee261771f4b202 GIT binary patch literal 95 zcmaF3MsO-CgCGL~0}~KK05by!GBBt}h%j&gX(^~UBaq&s#J~^-q(K-P&;Sa4V`O4r LWQbvmVPpURO}_>} literal 0 HcmV?d00001 diff --git a/Ardent/UV/APP.PROGS.O/SPLICE b/Ardent/UV/APP.PROGS.O/SPLICE new file mode 100755 index 0000000000000000000000000000000000000000..bace3c84cc65e8e3f2f396b7c5866d24c9f4c6ff GIT binary patch literal 99 zcmaF3MsO-CgCGL~0}BvC04oCsGBBt}h%oR0X(^~UBal|O&cKiaq(K-P&;SblU}R!o O2Aapn5W^V5$N&Isa0Ye& literal 0 HcmV?d00001 diff --git a/Ardent/UV/APP.PROGS.O/SQLINTCHK.B b/Ardent/UV/APP.PROGS.O/SQLINTCHK.B new file mode 100755 index 0000000000000000000000000000000000000000..1d183caa735db3fa8387d3b5f1c5eabc913f0f34 GIT binary patch literal 1066 zcmZ9LyKfUg5XQf~_4$>=v9TRONMd6QIDvq})4U`)L;*q}P(?fnBmyL|q9DaQMG4eU zQBWa@l>7xQsVFEYkOe&@g+&qgW^P2n-RWj$XMf-9%--FP^}_2A1&knsT)TLm;-ca7A*2WonO!#mBhm)%Wb4~bAS z0&lsuC@QA-YW!#A_aSL~GRD`9PrE2TTV$OLq>N9+_$lLC#y6FpM%wsvjNeaQ>N>z) zYpzN=!#-xPX8N}340c;8ha><1 literal 0 HcmV?d00001 diff --git a/Ardent/UV/APP.PROGS.O/SQUOTE.B b/Ardent/UV/APP.PROGS.O/SQUOTE.B new file mode 100755 index 0000000000000000000000000000000000000000..1c3e4db758d478f2e4e53ce5f9fbbec0636a5394 GIT binary patch literal 95 zcmaF3MsO-CgCGL~0}~KK05by!GBBt}h%j&gX&I(FfsrDUzi3M literal 0 HcmV?d00001 diff --git a/Ardent/UV/APP.PROGS.O/ST.LOG.ATTR.B b/Ardent/UV/APP.PROGS.O/ST.LOG.ATTR.B new file mode 100755 index 0000000000000000000000000000000000000000..76811cd51303a688db71330b45ac5ec0929def67 GIT binary patch literal 3243 zcmai0Yfw~W7=8|C&nkjk6cw+WMMdyJ2!gnFk(){`msUi~ED=^%VRwmLP*l2jNz=Th zW>#k2Evu<<`t2}ILN2{o9GqedO-v79+;@Fej$ zJf-|;q90Eve@1bMVwqyOVufO*VwK`j#bxYbB^uzRTt&GUVRAnjDHl_&Mz+yNY+@}< zaB((+SVN0JJkN8<>r%87-B`~$*RsAE>V?0c+)}y;NOZ&qHU ze1q}@%3G8dD{oa^syv{4k@AhoOO&@MU&xLMSZ@<$A!R!|Ya#}@FXDa^_d#L@_w%{$ znI}Z- zR{JhQx$h>%m^a3}Tb#V5nrjiQ7Sbz5Swh)E>lm?@*1b6I*e+Dt61WXFZF(s!%FP%_ zz8PC+y9IYmFh&7aANPH@PhT(h7MGV3u(-T%v(rMAMV!(A>zP77uUd(nSczSsT6$^Y zmSwn@FCOV0z1t{81Y4PRD`f97OhziEFP9-V)kj%Exs^5d5x3EH8xA|U zOW3=Yb8vG>O=nbJ!Wg0#t;8th+Qua_+s-*{Bla^+KW;lY-L$c|B)^+>7MH}!~D~oM4T{QMFMw;eD4bkgLv4G_iGf&%~5!r-VL;@K@!oAWcD-)JDhLCmyA_zCS#{s zg?YNmxn)4kBzKZ}_~;>?D|nu5)Dru3zZ-9G-%s45`@MLR`#r>cl>6wtpOf1!_istO zy%vHoj2fi@Fxc-ZEK=JT=Y0eqvphWtUi z0W2RO@5Fc zFQ9&@F@hCM!VS(opZoRXyY!28khLDf+c@@+?l^VFaRTq~){YTRGVV#-XU-oPC7pHp z=X@UKfp96 z+ElXB8tpXwmaz5$zGolO?hNl$-ZSYt+4z=sId=GtT2(gyc{VO0O=mHZrzuV^J9sYd zK?=VRDSQIs9RjzgFE>TMTi=wAki}V~u;0_1!D(Dqzr#4oTE13(j@(PDvt07TW-(&w zaK!KUKS8-E_Zp9PUgM=Q-dV;wi!`1O^4Yq;c;l6yBbRs=hAl79@&fz3$#b`n&beRY z8=gkI#FI<7tU1!Dxy-!cdxa}rOFgIkF>LMC!!AAKKE^sjpAuH<=ltb9J)Ff=ova6+ zkjY%bv=Mn-Y4W1b#u1Q%c-nttgfianZ2sfUsYCFvvQd)($*FXx7jOuHbncPu|UWU^+aQKI1;lr z1nlOPSg<$X@p$Ztg%d&8|rGy{1wZq8>`~6eAO!(DjO;*?A*NSaBp*Gu+=W> zZtDpJ!ZCZ+to(}hKubqgB*%#KCux}{6Yx?9?r{HDul+SaM(`2#CLWikXthB<3c8Hi3454gvY!!|W6Y3q%FF z1bPH|1vU$8Ay`tbC3RVRb7Ao@hs8UFCI853o+%H=)CXjmoJ(g`l0dS+Xn_=gRDm=B zY0VlVFjgQ#V4Q%A#*i#oTrP<;i_83tb(j*;lrvMDOsUV*(k75unX=V^$OJ7Jh9!eA zatZUf%v&_Jv}TFBM$W{(MTm445F$r1Aw80bSkjy&jj2jUBgI)Z!Thmd^$dZT0yzXzM{bjS&!xeC7b4;A Saal4XLuU7<5P3F65&i{$WeolR literal 0 HcmV?d00001 diff --git a/Ardent/UV/APP.PROGS.O/STKMATH b/Ardent/UV/APP.PROGS.O/STKMATH new file mode 100755 index 0000000000000000000000000000000000000000..6932bf0bc5dfd841245c21845af532a1e9f7ec45 GIT binary patch literal 1836 zcmZvd&rTCj6vn@q&d}0QXep&opcGo6LV*h9k6IwQGEozw#1PUDLQo+=OwhIQ5nQNi zSB3>K#<(!9Odr4}Fpchf02hrh#_yb&DO1v!^vpTue&=`3+&f%;p2lC>h$8?KaxL<{ z%DaQl{6HVJY+zSMfEhlYF9PqGlV7{5z~m8Z)(25HgXm>kHFlT@p_6wIF(ZgD$HI8Q zvASttlg~3n7p@?JE=2jXXf4z@zSp9$u-zou$e^3uTg=q3$-d55MvLwaH4zeD8Bum) zvQGm&jO%6;zm#t=D_zR0CN(j#ELzFM=|y#=q#uj(NPVwcUod3e^YwAf#kD@6^Cq~` z{`x+*e!p#fLhBP+pM=T2ljrLD-TITZ^+~NyYJCb@)TYkW54iPw-8TKFG?&u)L9Ry> zgGh6|()i8!8qCPs{87JCeQ#ZcT-|01H|?(LuyTi$JA!c|jS=o*-OS(?^&a=G`mNki zSNDNq&K_lyl~Gofj4WRI>fSVYb(1bmXym(!@K^Kg;~1RUP{8A6m77)Wxcbhwk;8Y4 zBZoZa%Hwa7UxUfo2KBNg-a1@xbvsRNURinNPWZT!_=X8gqCjo|8_IIlcT4?N?nPJk znPbj66qHp^?v(mYzteb!DNLhCZV{)-a=0JWZ{^Oox|rp0i^?i0ch<+9!&}T^4kdC+ zu&DR;Ev$Yk_mZpIZ*oh@Dk*o~$6X+I9t$XwTSnE#-EG5Nbah{w+_JLD%3bntm$|-6 zSjGyuEBNH&erdzK?CO5#SO?FRs^NVvbu*;Mo%sf{qN0oYG-qd9)uXInvMNx?apvrEEI>iV^Q#}$XK?_B%`IzKIuTfkgm1Lt2u5 zBet4^czu$WHxS28is=`VqEWr31|&5oChg@#U=N8I7Bk}IRh5y{sFUI6 z%=`zFS(sT(_yZ=aT$;>wLNdu@#-%%1)Q{h}wuS|_xlhkMAJ2Wx>HGGd-@AT^)TLI% zBn3LB^SY+XN@0zpdvr6D)`{5qf!+Q}dX4W7_I_&|XH5sF@6b-HLsOj7L8lI?U2m|D zvmbNckHN0G$=f9})RvMu#5wM*9;`@zbBbW8fhiqUHs}D4pfnEl!rlwl#Xx%LtJ72^ zG^ak*gFftx-s8_;^~2GxqZ*)QfSP~Va~dRXkmxa=XWvfq%4$2v;vM$hVU1{1@gPnt zp&{&~wzb5arn?0^j-FrP8)tlTWYq&l^=N~0RAX>Xz&U~Ug!i6+a}v&o*f_lpaZ0KV ze@IRn{CW6xVv!u2)?1I7z4gN1OV)sA8o(N(w=sH~q+*h~KhZYF)a$_%(UT1wCzV6T zDRi8|JMF#G=$P@n<$P~5zPAi_?%!Ju&K%V<4bB;K&g(Rsr}3Wg-ZOB{`rh)5-e&jd zZ7WFPy&e2Vx2@FLG(uD-bQaDn&Uw6{eq*N^o&AiiW`168$(`lq5S-_Go(X-2f;@Om z3%bMZ=3~#+wyyK6CW3@I@!Ip9(Be0)C32SsRF$iSNW#sLOEwbP%ZICu3cP>=xqh8WZ>l=1VZ8@X7bpja6qGUmLT! zO}%(uST}CwuB@(?uCEr#ihWS!RwZ|}RH+m$mu{>Uish19Uvq2MN~>;9#9g{lF6G9u zQ!f1Uv9P|e;hx^Dy>QPro>Xg_?orKcR%_3zwfj|fullI=&^^2R{bu!n8!uOGT`jJa zCvvnPUPPAZ;C03@HQsO-{p`?UUg$#8IFAvTJEBEJMiY7~Zbu`G5`ZsSv{Q>gt3lGB z4e-GwJK2pYVKW literal 0 HcmV?d00001 diff --git a/Ardent/UV/APP.PROGS.O/STRS b/Ardent/UV/APP.PROGS.O/STRS new file mode 100755 index 0000000000000000000000000000000000000000..d199cf68705e645d74e1b0389734d031e3381856 GIT binary patch literal 97 zcmaF3MsO-CgCGL~12Ygq01E>MGBBt}h%oQ~X(^~UBanVDnSmhzNP{popaB&8#mEFS MjgcXSF@})=0C$oG<^TWy literal 0 HcmV?d00001 diff --git a/Ardent/UV/APP.PROGS.O/SUBS b/Ardent/UV/APP.PROGS.O/SUBS new file mode 100755 index 0000000000000000000000000000000000000000..9e0020b103f19f45bd0601439951169ece894650 GIT binary patch literal 97 zcmaF3MsO-CgCGL~12Ygq01E>MGBBt}h%oQ~X(^~UBarTvVPHrA(jbftXaEKOFfsv6 MV`PY7jA3K|08tkP8~^|S literal 0 HcmV?d00001 diff --git a/Ardent/UV/APP.PROGS.O/SUBSTRINGS b/Ardent/UV/APP.PROGS.O/SUBSTRINGS new file mode 100755 index 0000000000000000000000000000000000000000..ef5e482404e401ed67ef43a9225fa12e56b8454a GIT binary patch literal 99 zcmaF3MsO-CgCGL~0}BvC04oCsGBBt}h%oR0X(^~UBaq&+mw_P(NP{popaB&8#K^?J O3^b3CA%-!AkpTdQ76$SF literal 0 HcmV?d00001 diff --git a/Ardent/UV/APP.PROGS.O/SUBSTRINGSH b/Ardent/UV/APP.PROGS.O/SUBSTRINGSH new file mode 100755 index 0000000000000000000000000000000000000000..d95eca904e71dd408f550f411e31882dbda39df6 GIT binary patch literal 595 zcmY*XJ5Iwu6r8u~b%-&>p8!UpLI|Zo)KpX)0D*)eSDXZK0t(;+DLDd_6(K50Dhq`h zP^O?@-g+$sTl>EA-i%lNekq7BWJ;A#GSH1%<#PtnuVEPlv|J;<> ziqo5zN(c>H81@cj2HE`Z& S>i7e|YSH#xTBoVgpXd+mK|lfk literal 0 HcmV?d00001 diff --git a/Ardent/UV/APP.PROGS.O/SUMMATION.B b/Ardent/UV/APP.PROGS.O/SUMMATION.B new file mode 100755 index 0000000000000000000000000000000000000000..dd74d4532051d784852c6b6e52ee495c8302866e GIT binary patch literal 95 zcmaF3MsO-CgCGL~0}~KK05by!GBBt}h%j&gX&IOD+FTElMy>(cZD zwG`2A|LiN`7o$XGvv!@Md0JGn z@C!gJ&_}E9I%Q}B#<0)yy?-3u_N$0*fs>Y>FRwkW?boV%rE)cj!f1ncgVq_FBh6clwjcPhi98cVT=xR5 zC2>aw4c-o$O+RQBYiF_1ZT4e6PGZAB_?qh>E;Tvn+~!V8d$HyN%^lD9Ixy_TmKgP( zR(C4Z3U{Kgt{X|Dx$U8-_eygdwly1HTqtZ{F}n1pQay|wjb}i8ZAb`AsXveXz&mJJHUGB%eh@N*b&iTP!i*zyVHBcooa_;II&5wv=f?a5qW=tzY6R7d_{?_cTn z-){s>%l*N%-vvvV3|+R4rIr641B-uxBva_vzz?< zN#mj$8bJpE=ragM;A8xo#=5O}7j#zx`o`yQ6~Kj`0M24Y<^Mh%7%mG%FmOC7CY0c^ zP=W!>y9EJem?qQukC)-1a2;%@f@;Bq{ivv4YiIhz!r8I z=Lx8D{7KmA_*1aW@u#8Q@n@jH@iVa9@n>NN`wkrQIk?5ipU2aytoa3Ka{MgpgzI<) zyO_I~dziN}o0+#UTbO&9w=?%K_cISLMP@70!#v1rW41F7G4Eh@Fz;mE#XQXHWO|tr zvy0iy>|y$tcQbpLeawF5JBW0iYc!#g)7 ze`50CP1&+=8TWT%yK12pS7YEPl`;h$VGnd*JCCpm```-JS71L}#ri5V!y49W&;slD zcCX{RU60=f^cGCPN4%D=F>7|R70x#97ubie&WkzAEQ;g0ku~SbVnUnL%eJ*3#pF~ZoEFpaXhKY;lc`Wt^arDn zSR|QB_)~I1O64`DwWt}`M=UA}B2AfB<}^_?Et*Cw(d^~2ZW?7N6P$>J#{Gf71|zYs zoQV2U5jhr*1WqJE{*g#39h?{)lfonZF*)G~u0V>0l1cw?2s0c&9*w1fkw8kKj{bOD ziYMgZFcwER`1Uh|1F#1Uz0{HZr)XNDNA`G4JFi(%DjbN*ek+S- zAtue7J+D|eXv9#Z{(jZh@9XX9>lx^lx_y$`kCBuclzRH4ZcOMuKQoh?_W5jMpse*q zljD(CP)>?nYE({y#I8^Vx0Wdwl6G2SEzUVwn$J3J6&9H)z3#7Pord5L5TVv(c&bfY}R z!-*&;0|60HQ3eX4%#VnOI<_)4@PVl4+JOZT6%`c$wJ0*bzu&z#$#D7)NV(thJ-_oi zzt=hUoFsec!RfadG@TwI`H$&yw41Kv4ZIg@_VF`l< zZ!Ux@>FczY#?U_OwBK;rN1XPXPW!0Se#>bebJ}k^?RT`bXd8{wKANc5M>UAy#ENnH z8r{Or(+l)-n#9=mfWM&cEB^s-g1)Q#hlIB z@08m*zgNCp<$qBAxboMO?@<0n{m0RtME~!=w~_hVvhWp>`#)eqaEIbf#m6z@ z3CyrHk5#>YLSoTqQA*@f`8$wV*m0t5(H^w_f}gj6@2dVgv>*L&{iU51MyFR?iAka_}+!wn^6Y?kHmDV z%6Gwr$VDovy&LnVpiXv9haO$Py9)1$K`>=-P+#+dmq82`ltCUwMKcvW~^Pxq46dzXPNAuyzW$p|< zqR5ZoBa8f4o>t_?@$@1;o{uW>6Zq&NKapoBp8=aE@i9gDOg^^APv+x_d=?-7Uuuyx z{vT^0XZi`)Bja?U;z^1#6;D>2rFe>>sd%blwc=@tvlZtkp00R?;#|cu6>AjFQkS`z*Bh@u$nIfj?+bo z{lL@sV&H840PqxE4V=SkfD;r2j?-G;=^O)|!ExYRPT-xdq%(Oy+ZrC!_ADOKb{;3S zt>sI!_3=8)n$Ia<9j6^!hP(JBoDXIN1I3#K9H$J;qI#}CYw4f+DFL5RrV=#X$63{0 zPq%Xe^s=-b@0?ii@+NN7b7X>Y)auDm6N?WEJ@+JfOKmLRJZv;_0l1fjfoJmu_E6&N+jufBGyb(A?mqO~>A8@OfKAeQd^vD}u5jYJ z9PCO+ns^iR7DDez+Jychz7{w}AB6OL++tVJ)pQMAi~bt0&9oS&=!aC}I%nR8=sIVt z31jJW^G2@#W68d2)~LQa)((B9_A>2ueir>szLh(GOISYT zE#alAx0FZePMv>)lZ7i^LnXXbEC9&L`09l<|Jym z8TV4EiuBHV*vYfoxg)n7TApW>=2>+>o>j;b7O4w&Y8Nk6eK*e@_1{yLXAko1;ef^& z;Go7CVI9!rL`UZXKH( zox4z1iQ(h0xg7g!1kB#e7T8!Z*8YRo%IcbY9B+pm>(&25r_s@Q3ObXt0`KrbT8X`s z$DibM6L2qW0j}bk5sSRdH=%zs#z*lkyS^4Xc1(@?LcRqvCg>B+`+5u5doACpmTyzb zw>y?^rQ7Iswd~sMcI--D;`yY`x&wF-e+t;ocLFEq(~hS*!R~UbeUk2=Pod|=Dd)py zpgl&Pg+}Ro_ze1@Q@*DsD#mn8L|(p*(ti}^m!&($uJ08`NNg6q3BG{mVkcsvA(elC z@5X2&e;&A(z5ra!_c#%L9{qdhZi*LAfs6T?vU4KLrSoA8_N<4(@-CH0!`R=@!v2l| z*XsUW%Q4;GG3+bJsbt-PpHW)q#P9A8=}Y`u5&zb*y){?maVP$JHU9fF{x3T5-%Iz= z7Y~Sk3?A&WR?gE{S)>V#KZf`dWzrbpk3k~wCwM^PAK*cafAD|AU-HpaW=-aK@NO)E zg;M3Z;G+u?@iE9l>SKtL>LXb^1D??{Ac?m-iSJL_ko#!ao{%-)ivDi2?k#%>PWvr5 zv%Pc)e~zBV_?L=f_6@uVl1=!Hpda6~)^UpONA(){0pJAgBf)EQb;k6rx!>tY<;Lj& z^yG%S3MgmMGMqGN-Ut1w(U%$fz?R{bElKS=>}p4+5q2zgdvf<>(38rI=}qX`k`qj9 z*_P#w+pCtlIqUdq;&Oi_X}P~9d`=jr^^U(L7Js>e_-o>Fe@!g@^3aoN+<+Kv(A>t0 zJ-Zq**3Xkv;0IOnE6)4=Abo|ttdbGT9l>0Qw2|GO%pQY$4YcekOV%T(t7z^6b9*AO z^&}#xh&>|ml3o*+^dj%kYecnd3w>oHjR$y=Udckar$)8xdXk>}+4jmk$%yS~l7{)K zBz1epsm52qzWg7#E4^o~vRz#}*Tt}0%2j$LJy~0~CNfgWRo1yQBKf&FEQXfs z1KX3VdbwW7LU|PyL%-aD`074L6-3Xr(9Z|Hk6Z9v7{8m~p>(E@9Pq_5>2$^-&%0Ci zAN@`hnHODr))lpFQOn8{%y^=Z$fc83!c1EELNt{!&!= zif1R{;Z@;CM~~Uk-s2DW!;w%+BpC8Vh7v_>Ghtzl znU0Q_;&LduAz{WcIdNlV#d|)V%vgC}fBWh{$BLG=HXHqc&S0pgCE^bTdi`x(p^lbr ze`Hnr>b~W^&hD1w!BCMP0$)!@INY+N12Py0_5~vC{M6Yd9N^ z#$uUas}PG8km+D73Cu^+*;HcKN-j_2@`*mDt&UXJ*3WOKHVe^gVxC#uSzSAj%4D-6 zC{cbL1Z~x|v1qQ4OU4Hiu2OGxZ8n#*P}F&5CTCU$t7|ibp+wFX>1^u_w&dcdg&EEa z6gEb4FzUBrz6A?n4GS6?>znG&uJhG3_+kqn@(rBht8envK_dSTtzSQ|uA!k|ot;lK z_JmjX1MR`EIX~7D40V|EJNl7Yf6DSDE=?#+Zz$62#(0tE(nVUx49A9wy`fCLU`5jj z5x{mJGH1n{8h^Mi+!6A%*7Pk$?c008O9C0QJ2N<#v}9FB=Rb8Cz<)7%y24hu1%OxE3QMeZ06j2HX1|J@&*(NDC(K&P`0R(P~Y;^-PpI9i#W_B z22%3UNCH-3V`{{)A9u2SwO)5B>kx07PttgowEXXoh-2a5UVx|j&Qz71;}>F{-T z`nx;K4%xu!#$7x!jOyYKrUI@wMQxKWr~~S#nN;yOXMr7Eoay*FV5`jU1A%S%QX@Qi0C6E`$3JeQu5ZEYiDZuawNL)sx zz!U-efItR5soH){aLI`-IZ4JPGXr0{$iR0MGVq0f41B^S10TuAm?j{p8Al1oKf4$+ z1db8V>`gE}A23tMselWGGy*OcBDp^#M8er7L?V1th`8M@M52FMh{XLvAu{xw5Q+aq zSMsV5iTF(+GW0K(RKgE_gC+bL>*yRMM10M3NwrJn3XynxE?FQX0Ll46q>wiXku+}> zG8^PRAyT04xjK7=h>I75NboNUk>G#llDC9NZTGv9L$MR^Q!kPH^8|j+C7LZnoHhxO zESf>QlHhqlB;`&J&&p$%JTmSYAm2rvsCYRhLiuEVs zXDFF=zbN9Nhea$ap?)86#gB_vHgADD(C~JOLs_9`grKF@k*H^(DE$%(=BX9-lCZn4!@skL?Z1dd1Bfw4 z26eZdF5NQ#ED=pZLWUH@I8&fT;4Fc80IknFXn5owlsvDBHK{p%8z(vka$XJ6D+*F6 XmW&?~u}pqS#Ir#>SD}=iYXJWS2@k70 literal 0 HcmV?d00001 diff --git a/Ardent/UV/APP.PROGS.O/TL.ALIST.B b/Ardent/UV/APP.PROGS.O/TL.ALIST.B new file mode 100755 index 0000000000000000000000000000000000000000..d7a639d7f01118592a5b5c8555d1656e398cee4f GIT binary patch literal 6017 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 Cv3rRC literal 0 HcmV?d00001 diff --git a/Ardent/UV/APP.PROGS.O/TL.CDIR.B b/Ardent/UV/APP.PROGS.O/TL.CDIR.B new file mode 100755 index 0000000000000000000000000000000000000000..d6c6b9c944330ebaa5c854e2ae32f16126426e21 GIT binary patch literal 7196 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 IYOVnM8Gyv-tX^w&ON{L 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 N2$c_`Rx!3gz6FsBl4k$_ literal 0 HcmV?d00001 diff --git a/Ardent/UV/APP.PROGS.O/TL.DFILE.B b/Ardent/UV/APP.PROGS.O/TL.DFILE.B new file mode 100755 index 0000000000000000000000000000000000000000..ee651fab4ef9a698961b1fc74c7fdb547b22db83 GIT binary patch literal 5889 zcmd^@jek?+701uhG?iC*D~O1At)R5fOIvA$h+tn*47N#^q`YVygygmjq&Fc+TRIiR zp)y4WzU!Rx1^sN(O*aH7FgJB?I$GSSb8ODH>88#x6`4hm?srb^O{;VJ2S&Kx=l7g@ zo^#Ig+~?k#=Cw!0-Rh)qw4L~$qATbj@~aEgeyHh_^C^D}QMa5UnvzR2Vir*=YzZ7+ z_HQPP%jvtcpL)=K&uYJKwGUhEBUbwZtNo$XK5Dg(S?!OcHR(a>r33Uz&H*Yy4O4P@ zQRPkQdHOB=hWc^tr{M4CXQH11`{>7_pB6qN{JHQK!e0u1CH%GUS>bcEgkGQ*=_hD^ zkM>D2q5J41v`?b_0~M&3z=NpeAVv_5KfQri!p{27qH{&R zB0A&qs^}eJe@*n`qF)!iQ}i36cZvRs=qE(KDSEf)w?yw1{a4ZZME^~6x9GP;@4<|A zpx%RMccOgri~cV3|Bn8<;Ctvlj{ZN;e-Au_nIGZ{pTl$iCt@&n3U>(~$B5k+ zk@1`)e(%F#(i2%LkuLTRU^8j2*iG7p_Cw@31RfUu59lNG4}(XL_XyI)th{?A*FJdd z!Kfo>yV3p&-bcWX;r%h)VfpS6-)_oNPWXI`HWzI_4TJ8dqwqaSFE|J>c3>`_p#KTI zkFhTFb8)z^0=YO`J1nc6YPjg(ushX=tj<#-v-$)zDyxU7(V{udaCKr< zk5FT>dZZeg)uYt7tRAh#XZ49{LRODa`J(d?bF7+}wU1MivUq`A30jBe zJx4i88&sh@NBSs9RgNSTDb8V{XFrKPk{Gj83NZ>*8r)CqV6o~z-r0DIq|xu76m3=8 z@tmv}#X0AwPOyj8!$(KXPN?m4NY3@p*I+GywF|1B%G9M`A6;hEcPZ56uoS5c@GFJi z<+K6)x#}vghrSN$*?5axL08g7x(fYOP@AY+_0rYiag8((plcaFN&8b1#{-@y1@x(?$jkl|W*Y=-SRyn!~uZaWh(YmdLkAJG3<-3j*5T~?+$p}u8ByNzzAJJ7T1CHX?^f_sHKCy*Ou&v18eH^&0Fh zexvtcFEck{SGZKQI)G?bA{xg#0JVf_hFCNE`bx{E5WCN<>>l3_+~d2WNA38b)qVzTfQ6qRO{m+W?vuLjx7PkXx}WY9 zOBeEVAr8-=P}x1Mya)DG@XD+eSJ#Do%AN>gV(eq1S6o;kzzLBAq3=r{iheuY@Y zOoVfXoGJWVChiSJ7@Db2BHNj`$Dd5Rp_%whCR0BxQ4h%6w_B_60IvVN|1sC{&sD%Z zj*yAW>toNg9FYg-%Dq89zUD*y2ItDxfA9>?&z?g$vJ|OuD--XAp?-rAhOR<6{D(&1 zDqLT(3hbAO(4;=Ux3}`QS<-P(TRa_Y*2D3(wzx@-Rp>(U(oQ$_=%c5o^-kH+;MoTo6PIl>DU(i## zLR;Z$^lO0?fuOrytE{Q_cs+rjzcT3a>%mqd>#Z3k#%OJ!E{#*RhB^!_98Yo@Ey3AS zsc76x=}k2&z3yd|)zuk#ytO`mePz(&^EP;@FZ8=B>pZ~~H7gsJ>a}&1OMU*VKm~fe zI}oT`?1l{ie2v~gi_SSA1rsM75)@-jeo=TgcHiHd_?G4UYHlxTBXbiahdR0;5QmlPV zePFRSuGPg`TB2r)R+HT&?)BIbsiF(qbq#uzZ#n#H{FTe}K(*hiSJfCXY%m_B)kb4R zQN6cOud4LpdcaSHH26KB3j6dSei$K(%8G^keC|olq8C1(K@5JML1?GluB!H+(zM~5lR~oJ8fIM!^mV! zw05PU;ZRJ}wlt6#S~kd!smHrPJD48C%y%cb2Q^b2LFiY9LwOTIma_5F!C7_ z88UkfN-YGYvN#>Mh{assQWiY-M_F(=kFnqiceCKMPqN_ZpJl;y_psnoFREV%eLSa9+0*y1A=ytV_jWh8b2e#{`^AK>td1<`aCoV1(;&%y^g34AQOxQ! gRy-L;8KBMr-eNZ{PX>)bT3OlA5RNNQnqwpIZ$vC%^8f$< literal 0 HcmV?d00001 diff --git a/Ardent/UV/APP.PROGS.O/TL.DISPLAY.B b/Ardent/UV/APP.PROGS.O/TL.DISPLAY.B new file mode 100755 index 0000000000000000000000000000000000000000..b284d8eb08fc0e1ffc6982fdb1c7829a00e82f62 GIT binary patch literal 7690 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 C#OJU8 literal 0 HcmV?d00001 diff --git a/Ardent/UV/APP.PROGS.O/TL.DLIST.B b/Ardent/UV/APP.PROGS.O/TL.DLIST.B new file mode 100755 index 0000000000000000000000000000000000000000..0b9f8b4a58544e5b608f57012429371350d0580d GIT binary patch literal 6026 zcmd^DiGLLJ6@R~MHh`$yh=@2w5KPEGVnB!pY_bV1CfRg%!=YGMcPH%1W+v=TfC!5B zRS#6K)&pduWw})>JJP(O%kGOGQhR%kO(LyIGI+A1GnIzwdj$_j}j; z<~Nh5T55dPq)N%;&A=-zvRgepD zRiOigxT?sDN;k>48C`k-`3%ImDzRcawqm(*_ zg+8Xkhl>_g%8%V zmhbjl~P?)gsh6tA?FDviX+}6rKmtLb_@69 z@j|s$^^jNfkxYxI54zMh$NQ*$!uvtrM;(*neO3P)@28H<@nh6+!r4!Mb$pH=s|Muw zacW?WAFl@G_y9FH#|Nq*IX*}Y6+RR`2diN@{SY-g$A_vDa(tK?@n3q;=KX){1)u3B zVvlsuNWqf?M+u%RI9l)&K~3;f!D7MF1jh)D6+B&VoZxuDGXzTnO9dwgmI>;D69p#; zmJ3!0o+(%$mG<^xBl1;7*4`M@r^KyV>&q`DAz zlKM7qxLO1pr4|FbDGKbOi-0Gq7;v^*Q>`w}!MpekoDW)o0&+AH*hLnNrtzu(qbWbxuLPne`ttj!M74?aGP+Zp z0lPL@hV!1i9Hh%sDbA5caK3%ipKZ%j8rVr0_?!USG}t3_yBusKH07!Tb`xQ@k~$!tsV)U}(q+(A;O%n>t)kU*DdfdqYp4>Z-{oR)g}d%@ zx$`<*x04-nk0)$pt$HD6Q|{Va zEj{g|>*4cke@UFn;x33ZlLLO4!#U; zzz^4SBXB2u2RKvRgj{Ce-G3wGn=sF{Wn)#ke)>w@v((L4(M`9w_xEP7uX?^!Jg*hc zx4E8grL}aMc+UEr=K5us^SNDC-2wEeb--%19@tHHx{=m{eb@DNJKaI+AZ7F9{d5*d0}Y|O;a^$7qqM3o4xM>n?wFQt+UHlxi+QPi?u2% z@zYTUiJz5Dc~*AejMzo9(No7K@7;r#btHZo&V@a9=n}y-v=I3P)IE^O)xGE%Kb!Z^ zz3?+f-A(slUv9wDcpq}x08i`Sxf5SS`ylbS0e#wl%AD_{Lvj}Er2FA*Cp`e1sUCFi z)%}nk#43(=o_ZK_-RPfl>O2hgkZ5dVYQr=4qEuxi?m;K?i(%#51H##9BV)EC*N!E= z96PSH3v-Sg>wE3WRj=LDuh^9;w&O@uc{8P7io{Z{hx|yT;yD|MCH`^zdO`3+5G&6QImD1wLv=Otdbcfa!wG&!P z+G^G2CC#|CBBOjYB4)%MC4Nr8$h&#?dpGq-AFGh5kj2wex&6H4X+E>w=*MUnCH0Yzowz z7pnEu2Oywj4v^=MoqMirro<|yR8*EvE}uF{pH!j8ra+~)Ow-FJ>yx12|A}SGT9#H+*yhxX zQP~il7ijbc!`j4HLoigUO{`sr(iWyn-B@V|ZC#$DZ7bqAo^H)i+iH&`a#F&|*k-iV zU}9 z+18dD>10a>mb&ZH#sKn%EAVP*%7Ca z)xr6CbuDiz#{&0Cvs#3^+g(c`M{a=MDD$~@=9?FUjTAq5Vjr_iJDN0;<`VJcbkgZ! zJa>cRx)woNEmpb}U6Zi5Rcxze5>`7>N7Ki-yP&EL`f>U^E4>t6bzS$@`f4KeI2be! zKBLIPhm(g7C;ak>^NPjcxI7IEgII-&PGD*O(W6H_xQ=>026%bGTfo5UWhI*l83E$K z`A4253<-v%46O_)29qJf(8kctu$*B9!%Bb`e;Xh#=jAP8=)-_-ee&Yt$BA=dmW<4j zlX#vh^WsZ~ym*b1_c(^*83r&6WZ=@ggBgY}3}qO`Ak}MNY6f5wlT!ibGpPiuV#2jQ z#e~y&nh9sPnF)v8!GyDanF;6p8WWy+oeAgvPFC|i6V7-)6P`MpB}IsXKhO{jV8S+o znQ*L8SyG%O$um+(*&ggnDeC83|!E@Yl39vq^-oR=u#>0hpI2{l7NE|=FR>M)j zlT0wui%3KKz69c#&erduubwhydzo?ip78)x4(NoL3V`4bXrwAI20%RASh-!RSj~lA M!|FAh`W1jL0C_5W$N&HU literal 0 HcmV?d00001 diff --git a/Ardent/UV/APP.PROGS.O/TL.ENABLE.B b/Ardent/UV/APP.PROGS.O/TL.ENABLE.B new file mode 100755 index 0000000000000000000000000000000000000000..b9710dfefc3e117addf9c820dab538412f7a357c GIT binary patch literal 6341 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 literal 0 HcmV?d00001 diff --git a/Ardent/UV/APP.PROGS.O/TL.IDENT.B b/Ardent/UV/APP.PROGS.O/TL.IDENT.B new file mode 100755 index 0000000000000000000000000000000000000000..9dd8be7d9894b9a846db6f6e9e8110573fe85fd1 GIT binary patch literal 5612 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 literal 0 HcmV?d00001 diff --git a/Ardent/UV/APP.PROGS.O/TL.PURGE.B b/Ardent/UV/APP.PROGS.O/TL.PURGE.B new file mode 100755 index 0000000000000000000000000000000000000000..8afba9af98f6b2f3e9990d1247d2490723ac0f14 GIT binary patch literal 6706 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 Is(lUM-%P|8`~Uy| literal 0 HcmV?d00001 diff --git a/Ardent/UV/APP.PROGS.O/TL.RESTORE.B b/Ardent/UV/APP.PROGS.O/TL.RESTORE.B new file mode 100755 index 0000000000000000000000000000000000000000..f887ab3b4b9b45a376fdbaa23a269d2315f87f13 GIT binary patch literal 8532 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 yLV244KJfa7vsK5*q|Tu_GcX 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 Y^l36S3B+t67K8XilxAQrIobgK1_@r~!vFvP literal 0 HcmV?d00001 diff --git a/Ardent/UV/APP.PROGS.O/TL.SFILE.B b/Ardent/UV/APP.PROGS.O/TL.SFILE.B new file mode 100755 index 0000000000000000000000000000000000000000..833be8e1767a2455bf8c396d7a86d133db042981 GIT binary patch literal 10740 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 SvBH)zP8IfDSRkHBfd2!J8fuvU literal 0 HcmV?d00001 diff --git a/Ardent/UV/APP.PROGS.O/TL.SHUT.B b/Ardent/UV/APP.PROGS.O/TL.SHUT.B new file mode 100755 index 0000000000000000000000000000000000000000..d23c104599b80fede9d472bc6d6457e18004855f GIT binary patch literal 5123 zcmd^@i(?ek6~@oa>_iZayorE1te_ak5K=%*eKaH+SR}jY?uHnRk7YB-u4HGH-Pwdx zQBkyNUuxCzepE|sYpW!*rPR`vKDAnFeU@SX?L%AJTD5I#)$}`O9|>sxf)eI;zI*Sv z=bn4!?(8H-9vXMAPUGly;(v*U@wQ!K1^?5 zZVlQVTs5eG2UiX0*y$#*n^C0$$Y(6()rc4Su^0Po63-g==(tLihV^oBtHfVJJ+{jH zs~c??gQA--4e(JRk0$P3m_zjitz{6cx&S!in0kUX@bx zd*NQ;A4cdu(w%CMUZoQx(^A;iP#4ac^`B_8=+UB2Eb2egn4*52PAclZ(8;2C?q8{_ zsQ*T%6!jZ4wy6J(r)6QSH)(uPzeN*@`fZvhdLm-}gC-UG|4EaJ`d>7qs0XS1f7BwS z|3B7(pXsOKjP%n~;WXiN;c3Ftg=Yv2;S8Zyc&2csaF*~a;n~93!gGWb!a2gZ!b+hj zoF}Xj&KFh-KO$TpTqs;5JXd(0@O)v7@T0;Dgck}g5?(C)n6Os3SXd{l7y5(^!X?6` zLcegC@Dky2VWTi03<{fs9~Xv%VPQnrEL;J;LoMLH@x47r|Djg!UAheHr^|(H;Cplh z_&!|;zC%}mLv%H`m!e=ltprKMK&9Hj5@q2tUrL(l5bIH$Vs#Z4TdERbPf*v09i>)b z)@aoQo~V*}F2i^6K0F_c5(V;VHrP)Nolav^39KzYg|`Hvhei=RPF5-LUQPF@li-)4 z)p*`>lmWV4l_`FXj8$p)^ic+}PJvGv>H#uOX}sz~KAb@h zp3vPiLG2McQ4Qcpgy$HZtlU3IO;)3zC#xxHpk#_7+BcfNXS%6eovPTDsj12fJylJE z$21ke_#jPJYfz0fbQQ;E{rBCMX(ydUpNRLbHh}wsrency@=BR%3xHxyW$Vfj;!C7-@4(>`Hbk2`keC7Nm zVa~80_YeEcQNw<7kMk?Toy$d-IAWyin3cFS9AV^2WfHlt61Vs#7jNWBJd#^!kSf(} zviIBb)wm7s=C^!cujR*Nz%7oDi_G;Y?6n+`hxf{@VZXBD{D${he#{8(uds)5tTIQH z=U19=oZoPSkyR*%|HufO#e@&30{i76w5i;=oPu*X1?Tckyba);5f>#LH_>6noMh6m zNqc|P(1dqKlX3YKbFQnbi`us18ts;ArIQKUG7@&ijdpbz?TNG%bDeark&3!;qa*Dk zjh2Mn?(}4gkky&UxanRq5RCX6T8-9VbI1s{h9ka4qqe@$AMl4Gq1s3=WJcmv(c7?W z%rTPDUW1p6N4qT}=A?NUBgLy{G6~1dm~Hh}1$-^Fb#*!V0}a7YV{ODA3^e)cE(!T+ zm-{2F^;b2oFdLTFt_X&T0vVW%zHqp9i4T1U5Nr-a>iu;QlPA_THJMGJ;F9plgq=;b zM`JN3YrCmsXz#QNPEFp*R61d!sB;Y`ZFqy;O2>^`X*1GL*A%Qxx1$zD*y(V4 zqG<&6+c9&|qFD8!>IL%`&Ofiptg1F+i_m3uoNvxwXjY+z|HoIa?pRe_?b_#MtObqX z7Jr~V7&hj`8iOI9G0)eAt+jR8rnSZrnd~mgR8Mfh7Ydk*!||+(GhrLcozBjL-D!lgD>JS5L59s)9 zj&zLOq|iy6RW zEEWLQvf#Zx%!1Q-gav1~mjy4op9N?C7z@t(NftcxEDO&6aG~c_7M$^0EO_X>f+)p0 zcpo6VKjnSKv*5L+7lgMUX0zaY%z{|NB7mNYSa2af&4Rai7mJw?yI6369xwR3z=D@J z#DbH5nFS~RT0y+cf@?ce=oy2Ppt#2ThY7{ioyme1UC4rWQ3K)O4PMBCx7+}sT{=mT z#^WB2*u>s^JKNZaGwWt2US8v98gEgP1Hs2lm!l>pg%5+yGj%=$>RjMv4pt4Zk7LMT zkUP2%U9a=lg%C5awuj?i387U&$g&BvR25p?JkE*i;vN&Cp9SynD1>$agm%Me*aRYy K#ud}nq4{5l-fC6= literal 0 HcmV?d00001 diff --git a/Ardent/UV/APP.PROGS.O/TL.STAT.B b/Ardent/UV/APP.PROGS.O/TL.STAT.B new file mode 100755 index 0000000000000000000000000000000000000000..ba49fe17c3e163c9f74783a42ee5d7aadcba7336 GIT binary patch literal 4422 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 D#uGob literal 0 HcmV?d00001 diff --git a/Ardent/UV/APP.PROGS.O/TL.TLDET.B b/Ardent/UV/APP.PROGS.O/TL.TLDET.B new file mode 100755 index 0000000000000000000000000000000000000000..e153d94ff402fa06e8a5c1b35f5d6f33534642ef GIT binary patch literal 4433 zcmd^?`+w8b8ONW~Z@%GD?)P#jU&5`HHk1xJ=#){~6asD1HEFS02Qf`)Ao(UFDWwAe z9aGU=z@dWzrHqZ;+|&kV#~gFaU35Crq_+h4GT^L{?( zInO!gIhTC%<@hN-`{+s7W3WFUn|cyFg*AN zg6)F+C02F{d;#@?sQ(J}7r+-$KY;qLQGXFUgO#7*gU4Oyr?VJ?*(E$EJb)gD(IXW( zLE>J5$D~79FOgmRFT-b2kN8d8ygqsb^PB-+mH3zGH>ke~p2NK7Fl{J3Z;#A%6j4Xe z>l|!1>~9f$4m^+O^Rz!5dqiTp$*Oe3oQJi*zD9$gU!x0%y+CI*!WjFpmW!xgq<7G_ z9CZsyId;H;QcgNn+9mcNcIhX&fm*^7ay+mBMAl`y@9mT4SNKRJO4SNYWUj#2B_A>2C&)to+mt!Av6wYa%_`5L% z``OE<-Gly@VUNPTj(xfeUcoq5=(+TqI$|tbFu#sC3kr`n72mmX+~EDP7g~CaT6!-u ztni?;^O`u0=VP17OT&mgQa_6E*nbG0emo!Uqb~J3+(s+1vSNo)-*BQ9%vYim{a)B7 z{KJRzA8C*3r#EPjWNL+d6Z^thv;Gqe5j{lo(5(J5LK-?wQ*R{xbo zX7xKXDy#p7r)6fYcWF#kU!}2GeT~M69)~giPUExwf6#=i{wGb$>VBH^KlUQ3|3B^p zKhyJYN0KyII7K*BI8B%@oGvtkGlVwbOyMlyY~dW?Tw#Im24SIap0G$*EVK*f3rmCx zgr&ld2p0+$3Cn~Z6)qMo5ta)-CcII2lW?i<x7>W)(bsCudqSb2>y%Kfd9ttc0c`xn!xLH3z(!^h0Wl5bQ}0S-U&E< zEjU2yz&`SUNxB^*ml_5eL5xXJFhZN;yEI&xG(yFw0HvQssyHR^*-ml1ArQSi znBeWDcJK+>431VE;25<99H%V(=#`7{c@7MrPqwxD*Jt_`JZP8*OB zKZz2w4L!Hf9dsj&$6LuA_?%Eo6NR5^Y#+xjjZNVhmwxJEoFOD{F%#58RZbJtB$bCf z+lCDJjUi8Mqh+X#S6A>Pz5?%d%#x%XV6NJUXYo#&ta|x*k8xI^WhbIm(G+zOee-j2 zP|H*N{BA{iX5GDr;+|8vC)RQtdV4yfrxC~TyhaQBy)s@>#<5`Doit7DQ`68hU#&xC z`8b0lO_#ay)O4Av2V-!op?2WcbqB`IQx|gb6pz_YGt^yRAALH#$9F;9DV|-_Lc7u{ z&sC`!pLG&@ma6fICut^Xe0rY&hpD^4+3FtLz&q1@@0HPZsTy+xpHRCKlyt8k?m)h64Dz&c#vevn(K-T&c+Ihct|1Eg8 z;M;eDicn$t1~#ib_!Yyu4hn@MiD0YU9|?yeCTZ^v9vFLl2pPBDHg8*TrOz}Y38N*D z2*kocGhhVGc)}M787;wBz@Lc3I*q6=(Pp&9B4J}q&}@lx#EtsE`d~Z}>$JPvUT1Za z(d2HZH#|)qucOwesH%0koE~p|h1Xqg_qGMH(MG^TA0zDRGMXM#eQEb5ev4g4`hPs zY{k)7(8Q(|8IhP_bK8m|iMBw@?yat@b63P#uos3W(wgY-#W1MT^xMnI{H0~33l}U} zu(-rtQfl{?!DVk*cDe?=ul zB{eu%qoHwa4ffGk-ej-xxT=h0&Z@$dj+#3Aa`(;l<%JE6IHRgs&x-e55u-I23dD^> z#0cTWxHsau`2(TC%9U4F15a|UPC(IW8Kc>Sf>#&Rt_}|Ze5+;o-&=YKKdd4mOKe3b<^y_XSI z%!Ail!cSW|W(*6SYidT=GNOP5=VQ-^G8Qg)ma^cD{45Jz=3W-FAda)(4SF^c^9l=| z;yepZ{&g0d{F@nZjRo)RK*p1co1l1)`G0_lcXt*Go^%llUPU>ChC-U$7;d|X+jz~( zS@5-44PoKQ{16()Xr+LKcgSSdR`}!qws0*UZe8vjA8RLEx?Da!Y3({+RylaSC^}yf voiB*S3)Y&aDZ&pw(QZIid_RPR+x9|eGa+=o0Qxir&m{A9b2y*w5r_`}toFYn literal 0 HcmV?d00001 diff --git a/Ardent/UV/APP.PROGS.O/TL.TRANS.B b/Ardent/UV/APP.PROGS.O/TL.TRANS.B new file mode 100755 index 0000000000000000000000000000000000000000..6b64c10c3ff5424e1fdd8b138806d50c36356130 GIT binary patch literal 8421 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 literal 0 HcmV?d00001 diff --git a/Ardent/UV/APP.PROGS.O/TL.VDELETE.B b/Ardent/UV/APP.PROGS.O/TL.VDELETE.B new file mode 100755 index 0000000000000000000000000000000000000000..0a83a6269a95bc273d6c0f365bd41ff4638f73f5 GIT binary patch literal 3921 zcmd^?i+@{X8ONW~WDH-lXPTjlbWRK3d0d{X|g8gWVy7f zAgF7*buCaPC?ZghI&mW49YvVTId`jgnc@WpA}Dx8hFW#3{+_2N`S9VRe}PHg@AG?~ z_j%vvdEcCzoIdy9+}l-}OGV-AgO&M2o9N zshjpH_tB^6Q#66GTfqBiMD(rT7=2XqUg5`tw+U|-eq8to;T^(H3h$&1^cmVmH^F`u z_GU7m$LImrn_)jkPUQh`KWf>J8HDzEL`=|w80Wk;pM1NKEZqZ*8JtX?;qK8F4Dtb`#H$?Bjj&`En z{jmM8-^9-LgO8yu;@0Cs+WKX_aV6ZCDY!R!|f2>UQ&H)c#l zE|j<@;W21e#Y?1%{~&w@4T;~NVc72=&jIj|#2=*ZqJIcHjJ$`DHe=--l3c@x+Jjk# zVFzKqhv>uL5kw!MJFM6}5<5r^MMcaJSUc=dnht%Gjv@9KowO0w*onOyNB=mzg1IjA z?PxBXfE~?6Dt6j0b^xbz5cSN#JeNdq97l0nzeKtaqoO$!8}d!9TPyK4oX2jN-;BOP z*-cN<3FJLN+_xj%j&T*uq3n^G9LgZ<3DkTX97pUp^;x+Gv3D2FK}F-5ZWI3?)?hz- z`O_Z4{BhV}*ze<<#=)ns&Qo;4%Bdp8&JFoh#M#k!y(Re0xo`#Vl(Vo|d$d_+VZ#mw zWSsZJah#9sR9!Z#I3)dHtjGRccu(N|P@+4PAK+?qpehGWXzCkI6i2>VMWG)G$Amw6 zgZ?p%C=+y&rb(p^*q`8BxN6ovr5U1Uh(4#HpQf1={WChZqJK{3iRQV#pjj3DOPXEL z&(NHT{uS<)*8DY{U-3Ur3oH6J^p=W#ffoIbv&gCck7vR6 z^b2r}jM8G^g~BDmw+b&3zD=kJFBUq5Zx=2VE)%{(xLmkG_)g(U;U&UV!fK%|tP$1< z>xA{fcL`Su*9aSg?-s5VUMh46-y?jl@G{{#;pM{j3Ejd*p-1Qy`h-ow^};KJe&Gh; zMq#tCMHmnUg{{K(3q!)NFd}RdZUSGVcJR0O-JYP|Q3v=ET?vlTRl+Uc%XBsPd-?$Q zB5ei#K-Yj{6a`1=TJVn)1OG&E@XwUMciusNp`_SXs8j4;DJAw*N{c;>Cl8K$4bL4D z^f$_Yf2XX)4frkIhx>z8rGR~O7u`qyz#YWE_!ybgXfvTW#)aNL(G0x*W!+K6rt|&F zq<^FF{p<|-JbuO+KV*%+{-*J>*7yt7_~aYLPgUI`>%4hgzB7=O?@3z!}+3PzrboE7A>Az|+Unez&255oHATLi}Q)QPwP` zlX}d|W=(@^XQxljKQn{0tFFG}`f5+qFwCMBPZSgRY}!a@X`@h#W-?klolnGyX1-U; zMT;pdnK!dqd)kPbJq0b4=u8)i`CdH`jQE>6w2oj~NDFs_Bfb{R?QQV~{NYH*9SMf? zNGef@))EHhXxV75#wkgeW6kH#^ zHf@x0@n|e&mW*O7TEtE}V`;Du&E_(Rl9Aq&$QKfAmUTv))pa%XPOTWtC01$9CTDdr zW9D+bIHE!q93E$NESfLo)A7zkIjGfHoy(^U9O^2~%xlh|v)U}C5_vt+d=#9b6dZV^nt4?am9r*Po+c^xrZ1Hs< zJWb#wSMfp!TMJ_@yU_46h~DYR$w?d9r0rEe1#lKt@ud(2>oh*B1;!05XjQPI_g->@W z3r@O*1@FQIVUtS_V(JhtD+jG(!8trEc&mZ3XLDJ^%EDm5A5WDDS(saw#CN)Xh6^0`uX_K|NH_J;) zWq`_bYuB!2ZUa#f=)ekd;5)v7FhHmq+hhtV4n$PuD{i0_2laPOZ}P#9`WM*re$VeY z&v~A6o+md?ZeBV#d!LfVFclN01;#KAo@A4DzpjhbPekK3hEn%pY>No+eCj& zv|aSqMeh*(4beMAe^Yd?=x>Sc6aA3rU827&x?l8nL=TGouIM4r-xEC``un1HV?{eq z?;+S;*oU#QL*OH5_o4j*v>yQi2co-``%x^sIg)w>@b1-{_eZrj>(T@=m zk@F?)33v?JRrC_+;(ro8g9gQK&=Bkok>@b@l*B(tPow=5IEuWZNZV=U9h6){h}w-& zqp$<8KSJ~~2&@hEC{2bwO3xtn89J#F=GcL?97FpUy@s(a zv~9Rt*Z~_Z7um7WUa@`HrN>auER1tW6vuHC$Ms623o&+F4n;-2iFqp}Ud4X&%lLY< z9ZEkvLC2BzIC0yCcpLidxE#uEsmY-Xz#d1<$G{VaJwe;8+yhv<3;STl#Wn2}{{ZG- zKYRJz9>n+)utTsv#y*_@pT#`S(h)1C9Wge(kl&6t8!n!25k7M++`&6!FH~!dsP5^Jk0qUI zg;m08;roOuge!$L!uJbT2`>}6gdY%IF1$jxTKGZXhlFn78lgv6EA$HMglmQCgg)VV z;Ra#7utDe-284~m4-13BkT5K45;lXUsRjH!zPHEd57Y|&k*)-X=_=tS@K1C#_-FbE zc$zkYf1zu@5sHArbS?NAMZv#P3_L?|eC8c=mfFO=PVHjfpoG}JQBv&RX^Yq~>cFUf zP$&2%r7W(;ckz8VAG8t$+)j7WJ@ikUAO`wJ@XWGCHR+thxX^kFmx0&Y)`@apGM`^2 zjpO3;>>S$MPs+rJ^SIToDF5DHV)egb^{embKUH$K%=4e~M)9ehm{-Fyk`3QAF|uQ% zLrEk1D)=r(h0miF)9Rgs-pS~_5zkzgD1{fFkXvyolq$oNp}k6mrYc#icbbv|rz?4I zrqU%l&`tZ58A=ItQ8%9CE}|*Onx!1&(JJiS7VO55GK6y#-@dpgW#*D?dels%OoP<7 zCy&oPS4!GdS6{lV+!HYjGpEJkxp*d(G~!y)$mSxQomwoJiAQs0rbkOhatW<1W2Us0 zq!BZ_vsy6Tp3LSlJ-R;-_SLm&t%0VX7HSQJy$zbXw!!E3g~CC1I1tpsiFh$uiyIiD zr6N5Vr%Xh;;#$SWuJw7sIuCR=HtLPRz}nEYNh6<*MWRtN zZ{(tp99G&MO@i4-D%}~+8_DK)CL3?EtTXH^ud1kaYPm={zFc$GIm_ER&2+j4Ta@j9 z!{aQEMl!ifGS(h11T{L#)0w1!OAQcGZKsrMvBqNz;Qup zmXT)U8C{HS2LF7rbCq_k%kE%IV&Lc?JO5UaJQozi!h*Pv`*~&dsf=li>5LhSnT%Ns zUYdOlV=iMJ<2;6}UV~Cr1B+N(3|z@#1#mqJUi$+qxSR)BaD@-C;It33;Od`d!F3;H z!Cm;dM+(>fV!`t&3$FMq3+{TWARNepr!c~~WW~&3!MPR{gtH))vfz63f~aBPhi5el z-pGCyyv$ozEQYw31#i%3A?7(2oZQ%{xcJir@j46M+wp>DD((b@_n3d6D7?Fi zS#Z*oEO-?z2vu%9h>1co~VZf*LnjBUi{50c=#?B esE+nQsGQ!$)9>dNk5IWZwVM4Lei!?%hwop=|6M)+ literal 0 HcmV?d00001 diff --git a/Ardent/UV/APP.PROGS.O/TRIMBS b/Ardent/UV/APP.PROGS.O/TRIMBS new file mode 100755 index 0000000000000000000000000000000000000000..7559cca66937cf01a6ffbb2727e6100bcdbea995 GIT binary patch literal 95 zcmaF3MsO-CgCGL~0}~KK05by!GBBt}h%j&gX(^~UBamL~$-oc?q(K-P&;SZnFflPO LGQ=>(FfsrDO3DS% literal 0 HcmV?d00001 diff --git a/Ardent/UV/APP.PROGS.O/TRIMFS b/Ardent/UV/APP.PROGS.O/TRIMFS new file mode 100755 index 0000000000000000000000000000000000000000..764ad77e77c4e92566776df6283a7cae432689e0 GIT binary patch literal 95 zcmaF3MsO-CgCGL~0}~KK05by!GBBt}h%j&gX(^~UBaprc(FfsrDMWqHD literal 0 HcmV?d00001 diff --git a/Ardent/UV/APP.PROGS.O/UNIMPLEM b/Ardent/UV/APP.PROGS.O/UNIMPLEM new file mode 100755 index 0000000000000000000000000000000000000000..2c65a7c3c92e73351b7de0d52318fbf077d48361 GIT binary patch literal 357 zcmaE`MsO-CgCGMF0|f9g@G=MhAv2Ixkq}{M0Sc=?oW$18$cR_u>lRBpcha# zGXo=o4I>M~4@Q`b&)JlvVy}y}@9$LL^^b%&7i!b`mH*I~N zt#9rUU)lP;Tc5tfchmZ$k1D&GzrYu$Ge`a#kLQ=3_YZNnN*&yY1tyZtNYV&E#denlzWXy46mbS|^8{G^wBH^!46R_vp?x z6Pt%hAp6H_QSKj%Rw|?c#&h|!a?aA7fZX_&M&wJdAdvh29c4HEL8NiiH z0Qj*ol#|RgqFFq}w7^g$4l@EKI4m+;Q!^yGD|DX2x&Wac4Z&jpQf+exwg_C=#n3eY J;~aJv{{WMnW!3-y literal 0 HcmV?d00001 diff --git a/Ardent/UV/APP.PROGS.O/USER.TYPE.B b/Ardent/UV/APP.PROGS.O/USER.TYPE.B new file mode 100755 index 0000000000000000000000000000000000000000..603b4dc8c414acca699a42ddbe2aa8776741ca21 GIT binary patch literal 253 zcmZvXJrV&y6okKLcW13d)m90_N}v$o0&XA@s7+)NyGrd<0kj0j$mwfFs^j5+oxD{@psV_r!Clqk-e&X})9XqrjniRYHTCga*NvMha!Zk=o`ggQLf2^(EdQ-& N?a41K7Wps|_yBIl725y+ literal 0 HcmV?d00001 diff --git a/Ardent/UV/APP.PROGS.O/UVORNF.B b/Ardent/UV/APP.PROGS.O/UVORNF.B new file mode 100755 index 0000000000000000000000000000000000000000..81fa805030bd01a4d7b8c7b4b532d3e3e1fe0827 GIT binary patch literal 1804 zcmZ{lJ8T?P6o&u1<5_IS@pGLli;W$}1cM=dk;K?Z9OJ~;Ah5+t6f2Yt3gnK0h877S zcStExMyV)MQbaCLiU=(d1yv*@YLs#cg!ulmvrZh$TKAuO&+|X$%pL#n&%Lx^~Gpx_QmF^>Zz&h?XgRoFT1A+a4J=!BfuU;U_AULK+ zl`-tzVD+T~ZSuUs`XCdUfjBo)p+40@KGW5fe}+vnRntkGI*f4(Ss_a{(+JPgdZ4y! z99f|kgUN*Y@qCPSg1-cxq{+h=uJ0zgGw^Px68ovxXKHaC!+wnOSq-L&rq!RO^^&I2 zS@0Z;&%vQej6&_4FO##G_V8>R>Ze0rQ;!ZbANfW@-w28Hdqu%&ru4W~a_aE72ftVJ zD%xLI4b75wmb~BmCvQR5o`=gQGrW(NGd_v`8lJBHb)BbzS#XX>bNY$=&-P%x?1AMA zvG0n0%n@OZ^J4U4iGD0G%c-;oULe{9^3{lECeD62YI8R(qP?j3XLL8=YOQ$1fL&m4~%s)Cz*2khO=-2M!%y`dcsZEt9ApslAW@?mb9^mo|39W~XH zza%3eZ*Xr5ZI$yFrs4uVuA`Sad_zu9SG)F4vE59=yfLHUyBof~z3th2!S}}YonGBR zzf;=(42SQ-ejEG!qLZCXzs3G9lbdknUFKchV{p3MadOAV?Ujdzqh;G<%1u5WG7K9=3^l{3 j;S`XWRx*T_Ipn7;GH07|E13x^+aO|A{~B0y**5qWfHCJF literal 0 HcmV?d00001 diff --git a/Ardent/UV/APP.PROGS.O/UVPATHNAME.B b/Ardent/UV/APP.PROGS.O/UVPATHNAME.B new file mode 100755 index 0000000000000000000000000000000000000000..d709393f7f1963d285529847cbb9dbd78c3f7507 GIT binary patch literal 4718 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 M4Bo%8B+H=x5B&%0AOHXW literal 0 HcmV?d00001 diff --git a/Ardent/UV/APP.PROGS.O/UVPRINTMSG b/Ardent/UV/APP.PROGS.O/UVPRINTMSG new file mode 100755 index 0000000000000000000000000000000000000000..471df501e13a6a1f20b54e43215c6074c50bc74f GIT binary patch literal 1731 zcma)6O-~b16g{u)^aBv27Qqj6s8&#FK|xVb=(L>zT3XVg)&PoM_z{EO#*I7U!j&5n z7yJMh{03uK5mzo<7=k;OEKFo&JomMaAYx*hcYEHs=iGPac4ofKH@>ydh+236C=9?s z83k;`AojOJ5cUBtn32ybt_yKshTJUIW}gm{tE{Imi+Y5y4NIPFn^tAjao%Bm2;>=3wy|_21c*eltrh!*g<9|CRM%Kx>oNIbEmNj5o*2o%;n>`5m=02 z_;n269RlQ=sSUE<6{-T<1=(8=yVq(-Kix`cuT)szo;Iy&t*X9zWiQn#SF}pWDQbgN z{W9}DT|KaNPKb^WTCs;S*h76>RXnYKc>L_hk7;aS4D(x~ucKCb_rj*vruQqomGj%k zwBZ@|3FTv@D5tZJ)A{@KIwj}tM;n&u0OsjA#eX`)Ri_qE-ca+?f7FzUG1$7h1FRfX zHe)+`YDbW_&zZE`|$A}`V-8H{v;T`RX^{*_1Aia8u1M9*@-ech$KBpbZ{0jmn1#O4IYQAcv48ylVr@$lff80 z@*kQ0UGk#KVu-p7<1lr@c)me5LSA%dagMrS#vFAyyr*u3Jv8%cdS3E0>-s)bxr;{W z%j;}qZcCn8e4%fSTrHQ}?={tXmqTV|(5RsgxLXOC@K>J)d_{IoBR9*o84SZ?DVP*^!)^D8`OYOa*?$Iwq?wbM zo$$Q^zU9Do0zZ}n>5`8(f%K|@O(2i1S901iAV7AG0VxC024oCy2`p`ukd>WBf}E*B z3_}98FpLQh(Ubv~4Y)#Jajcd6v;kLzmcA{&p{^NlU1+&VD`==22HX@{&bDd{HDkan zq2=POIz!zy;EvGJs#PzPG;~*hG(Bs;eFCdNf{a$@9vJXY=tc=)L&;lQiyjLt6SpFU WdSbv+p_?RZ7fMclCO{_nlIu6?&bi6} literal 0 HcmV?d00001 diff --git a/Ardent/UV/APP.PROGS.O/UVREADMSG b/Ardent/UV/APP.PROGS.O/UVREADMSG new file mode 100755 index 0000000000000000000000000000000000000000..4d3e877273b5264618d087340dc2b0cca8d346f8 GIT binary patch literal 1574 zcmbVMzfV(96#icO9xW|DOBEE5YfBXnDO)nD_^<$z=S_rI(=M;%m-%-#zC$Kkn(h@7ss!Hx8;1h97{1Zd^tV z8Cts0To=V>nwRO3=N09n4MZsol%t*&8uu7&F{%;~)L`3JLt7W6&Whp~s_=z4NqL0h zShMy}OXfPtQ3oF~Ru#2hbLPmgEk91sauPQ4+9<<}wMDAo~cS{-BQy=ImiyJ!O;lz209C4MoP9UQ3?+&UcFZV3Gftep_b_9MmXfjZ$W4 zobU?gC7iSL$-4!u|sKS|w5eka!d!M{Ym@Vj`%V^$}1iu@F|ioK)|u~NJThx@-mj>KH${A2X?pqDYd z*kg>$)b!FvyYQ}|pS)h`0rCc*IETZ$LE44qVu-u}>NI(2jFY#^%C-EN`rE!*o!_<` zeF}yd=N+2Cwl9pAj9aHIOp)^)qR5Qod`rB%#cs~Ati``dF(*lGl-w^K2j<~3c_TTJ zo$&HmcND%KNZd>mZWWSaUZLP#_a?LM(5R;-aw<3OWz`{%%8ZP9$$TO;J^M4!GF{}W zc2!8bS>@&Px%_PF$iva4;f2iN)auw&N4oGlyPTeHS3~Zw%H;B6?u1IHS>Ao{djZIs zSCWtP#;Zvn9crKmPEq{g(;@u=WaSz#WI)=0VFE`-i1K8`zY>m=vP!8k0?Mg!6h}UH zI^~Q3vj*HY;En-v1dg=plo-=p1MZ1AAS!4~^9C%4S!z2WW4dp^qL^jRPMMgbp9cb@ r`^N?>5jfJbQ(;U`43Mw5Qz=R&s^gv-up;JaQ4ujo@G}82kr$L-Q^2Px literal 0 HcmV?d00001 diff --git a/Ardent/UV/APP.PROGS.O/UVSUSPEND.B b/Ardent/UV/APP.PROGS.O/UVSUSPEND.B new file mode 100755 index 0000000000000000000000000000000000000000..b3940bccc3bbd53d6319eceead348532d6f4c326 GIT binary patch literal 1050 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 J)0tcV@;@~Fv916B literal 0 HcmV?d00001 diff --git a/Ardent/UV/APP.PROGS.O/VERF.SCHEMS.B b/Ardent/UV/APP.PROGS.O/VERF.SCHEMS.B new file mode 100755 index 0000000000000000000000000000000000000000..183ca7fbc799061945e39bb58d47f76c53aac49b GIT binary patch literal 4266 zcmbVPdwf&%6+gFWiYOu|D(c35c1W=!x1}o`7IlU+rI~F~leAc^gOJ=d8R<>Pqoq83 z%cGk*AEQ{Do4P0N;n>Sf=O|9VO&t@*T#drO;^q_|8>o=(drp(IpMCb%0{45rzjMy- zyng52qzAW8z0XQh=}xlHBq9n^7fsMe+X6Oo`ZOw^Nc1G+{Fz=%wBSLab&&D(zdo}e z+=|`(q|pi5N<~;bfYsN?#5F+MC{wfzHVwEcHH{t=91#5aIQ|gbrJbN}Agf}{f}Ixn zCKVU>!(>he?Hdt=*$BDK20w0 z?Q~XwKSoo8Pl3-Lpo96nKcuq@{6}<7f&ZAMp(FituHbos=L=33yg=|m!HWbxA^1tb z8G@e@RDu@^mI{7aaHilTg0lq61ZN9gDp)S~8NoS%HbGsmLaNLXnwH7^NeasSDGJH`H)P2DY3h*sZ>bZzcH*g;tldpfdIa;I!1Khu zyJ!n8lLjH%VPV-b6cbHca0ShvU6}qDo~bykK>P&k`|)p^OxN#lf0mMBn-Watb|kSQ zMQQBl&h6-dW;cBG&|P#leH9rIRY^?FqnTFH9@;DU?3H}t$kBvm5YkN1UQ&|tGt?__ zRtc`oMe9YhRkRwi=V*;+)(Wo6>DNHNmewJgmAP#8g0Ii<=TVE5evdeRpyyG~jk5P9 z;0ttf&cluHa1&O=bU!k>AK5>F+}pKG(S4}nX5>~6ix-h;6zlDh>x*=Yc)C^aww$M1 zV0SCshT4|UA88+U?4tv)Ptont(?8*CU!wiUcE9xKt#P`Sq5E@A$C0woRcrT>j`!IC zx(Xil&>e_2fUYwp1UE>0Q}{~3^}sL}*qRbTKW@+UV;>zuUW4=(M0#4=Pp=@? zSLm-agj|Ox1zV22$~qSNRrH0Y$Q_ zgT5Vw&wDjK^Mm5)px7OPr`O@>5WMW962u?1IV3iR#O5$;{sx=FxoCsA2qD@~h_(Ut zW2-TK80U7Fj=<{?dV_{heFhl}!_(OAjo2ANS4T772v&@4aSwTpE0H%9-9wwC)0^o_ z+9vA5v~NYO-096UNt>)~&UFxVPQbiq_rT`Mup-(8JNENB^O!!??U@7Vut@qKj!hhao*p@9KBB;V2(bZf6>3kX^um491)Judyt=?4-x%C z`iMS;|BvB+xA;Ff2PCr^Ty$Z9c!VN!ja~TyB@o@3s3q zUfmxy3f9Unu}5_UdKHHZ2f7Uvj3qdXigWa2G7>YBdVAdxw{x-G;TT1iyWZn%vin^g zceBfJHCN~Ix796aY1Qi+?X4bffgl6D$?5ai7dat=15b3)iZq}Q0r393dfQuGtgzQ z0KVP+^2J^|cMTJ!(3D6=Z^Z0W$za&%3aGL&y}T9ERNtoi91YGUdlsjiG;-=B&Ndwl z$x$yeR5$OA7$G$~lt!0g3VEY3zH1uCpZ%q^<>ktkcdw!`91r$HOjYJH0*PRl!=rVW zO_l6Tri?Dt0WYHoC3WQwN0KsNslakW1yoNs5;gP|x9eJ8gR%uxSqCOqRVW)*saib_ zWkab!Re{D;w6u1>TG^6n^;*@wpiElpP-UV_clQLM%T@dMt(e?221VKUd9j(Pj-;}s zyV*(E!gM4W8rQ2Ro)^vo{qi|0P<5?dTdOLNfgXzCsT&P4mO8v55VyQD1u9A_Q(o_}{+MLYwm8ZfEc&tld~uOckwV_lKg zKMG>uhFCdwX$}7hwsO-Yr)PP^ZLx5(MYNkmyt4AiN-cX>#HVWIge@G<$_=xO;3N4x z2Mg)X3rx6(mzbOd@-h=H`v?p2Y582Grg X3jia$>pT!k7CBhYXC-g2oWk-yCMFJp literal 0 HcmV?d00001 diff --git a/Ardent/UV/APP.PROGS.O/VERF.TAB.B b/Ardent/UV/APP.PROGS.O/VERF.TAB.B new file mode 100755 index 0000000000000000000000000000000000000000..ed4267b326e5220375355069180014ab806452f4 GIT binary patch literal 43193 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 literal 0 HcmV?d00001 diff --git a/Ardent/UV/APP.PROGS.O/VMADMSUB.B b/Ardent/UV/APP.PROGS.O/VMADMSUB.B new file mode 100755 index 0000000000000000000000000000000000000000..9e3f84c86c91037600c5b7f6e52271fe7ef26567 GIT binary patch literal 93334 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 z%0D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 literal 0 HcmV?d00001 diff --git a/Ardent/UV/APP.PROGS.O/VOC.PATH.B b/Ardent/UV/APP.PROGS.O/VOC.PATH.B new file mode 100755 index 0000000000000000000000000000000000000000..bed321433fffa4db3ccb47109e3cfcb19875b8c6 GIT binary patch literal 1051 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 b^-(08LGY*B%;I%Hft`Y2iK#5|C(yqEk`I~8 literal 0 HcmV?d00001 diff --git a/Ardent/UV/APP.PROGS.O/WRAP.PRINT b/Ardent/UV/APP.PROGS.O/WRAP.PRINT new file mode 100755 index 0000000000000000000000000000000000000000..d647359cdaa3624b96ee5df825424cebbba06494 GIT binary patch literal 795 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 Gi|`k7v!TiW literal 0 HcmV?d00001 diff --git a/Ardent/UV/APP.PROGS/.Type1 b/Ardent/UV/APP.PROGS/.Type1 new file mode 100755 index 00000000..e69de29b diff --git a/Ardent/UV/APP.PROGS/0114 b/Ardent/UV/APP.PROGS/0114 new file mode 100755 index 00000000..5ac44285 --- /dev/null +++ b/Ardent/UV/APP.PROGS/0114 @@ -0,0 +1,108 @@ +subroutine U0114( Resultat, Status, Long ) +******************************************************************************* +* +* Saisie de caracteres au clavier sans retour-chariot +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description......................................... +* 10/14/98 23801 SAP Change copyrights. +* 08/18/96 18335 MAA Ported release 9 to SNI +* 01/14/91 7930 JWT Added new Ucode for Siemens/Nixdorf +* 10/09/90 - BHX Abandon de PTERM => TTYGET / TTYSET +* 26/09/89 - HBI Ajout test ECHO ON/OFF +* 17/07/89 - BHX creation du source +* +******************************************************************************* +* +$INCLUDE UNIVERSE.INCLUDE TTY +$INCLUDE UNIVERSE.INCLUDE DEF.USERS +$INCLUDE UNIVERSE.INCLUDE TERMINFO +*** validiter de la demande + IF (NOT( NUM( Long )) OR Long < 1 OR Long > 140) THEN Long=140 + UnCarAGauche = KEY.MOVE.CURSOR.LEFT + Status = 0 + Resultat = "" + Nombre = 0 + TTYGET tty$ ELSE Status = 1 ; RETURN + SAVEICRNL=CRMODE.ICRNL + CRMODE.ICRNL = 0 + TTYSET tty$ ELSE Status = 1 ; RETURN +******** +debut: * +******** +*** saisie d'un caractere quelconque de CHAR(0) a CHAR(255) + Command = KEYIN() +IF CASE.INVERT THEN +*** Inversion upcase/downcase + IF Command >= 'a' AND Command <= 'z' THEN + Command = CHAR(SEQ(Command)-32) + END ELSE + IF Command >= 'A' AND Command <= 'Z' THEN + Command = CHAR(SEQ(Command)+32) + END + END +END +*** test du caractere recu + Flag = 0 + BEGIN CASE +*** fleche a gauche (basckspace sans effacement?) + CASE Command = KEY.MOVE.CURSOR.LEFT + Command = "" + Flag = 4 +*** backspace + CASE Command = KEY.BACKSPACE + Command = "" + Flag = 4 +*** envoi + CASE Command = Envoi OR Command = Exec + Command = "" + Flag = 1 + END CASE +*** c'est fini + IF Flag = 1 THEN GOTO fin +*** si caractere de controle autre que ceux prevu, l'absorber + IF (Command < CHAR(32) OR Command > CHAR(249)) THEN + IF Flag = 0 THEN + GOTO debut + END + END +*** si backspace + IF Flag = 4 THEN + IF Nombre = 0 THEN + PRINT BELL: + END ELSE + Nombre = Nombre - 1 + PRINT UnCarAGauche:" ":UnCarAGauche: + Resultat = Resultat[1,LEN(Resultat)-1] + END + END ELSE + Nombre = Nombre + 1 +*** cumuler le resultat saisi +*** Test ECHO ON/OFF + ResulImp="" + IF(SYSTEM(24))THEN ResulImp=Command + PRINT ResulImp: + Resultat = Resultat:Command +*** si longueur atteinte c'est fini + IF Nombre = Long THEN + GOTO fin + END + END + GOTO debut +******* +fin : * +******* + CRMODE.ICRNL=SAVEICRNL + TTYSET tty$ ELSE Status = 1 ; RETURN + RETURN +END diff --git a/Ardent/UV/APP.PROGS/0190 b/Ardent/UV/APP.PROGS/0190 new file mode 100755 index 00000000..9196d59c --- /dev/null +++ b/Ardent/UV/APP.PROGS/0190 @@ -0,0 +1,111 @@ +subroutine U0190( proc, ibn, pib, sib, ip, obn, pob, sob ) +******************************************************************************* +* +* Perform aritemetic on reverse Polish string in current output buffer +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description......................................... +* 10/14/98 23801 SAP Change copyrights. +* 07/25/88 - - Maintenence log purged at 5.2.1, see release 5.1.10. +* +******************************************************************************* +* This "user-exit", called from a ProVerb, takes the string in the +* current output buffer (delimited on the left by an arbitrary character +* specified in the calling sequence, on the right by an '?'), evaluates +* the entire string, deletes the string (including any delimiters), +* and sends the answer to the specified target. +* +* Usage: +* U0190 +* left.delimiter target +* +* Where target can be: +* T - terminal +* S - Current output buffer +* A - Alternate output buffer +* P - Primary input buffer +* +* Arguments to this subroutine are: +* proc - the text of the proc itself +* ibn - the current input buffer switch (0 = primary; +* 1 = secondary) +* pib - the primary input buffer +* sib - the secondary input buffer +* ip - the input buffer pointer (character count) +* obn - the current output buffer switch (0 = primary; +* 1 = secondary) +* pob - the primary output buffer +* sob - the secondary output buffer +* +******************************************************************************* + + DIM parse( 200 ) +* +* The "REMOVE" pointer has been initialized to the current line in the proc. +* Get next proc line after "U0190" to see where the output goes. +* + REMOVE target FROM proc SETTING x + leftdelim = ( TRIM( target ))[ 1, 1 ] + target = TRIM( target[ 2, 99 ]) + + stack = IF obn THEN sob ELSE pob + start = INDEX( stack, leftdelim, 1 ) + i = 1 + LOOP + finish = INDEX( stack, "?", i ) + UNTIL finish > start DO + i += 1 + REPEAT + stack = stack[ start + 1, finish - start - 1 ] + + IF obn THEN + sob = sob[ 1, start - 1 ] : sob[ finish + 1, len( sob )] + END ELSE + pob = pob[ 1, start - 1 ] : pob[ finish + 1, len( pob )] + END + + answer = stack< 1 > + DEL stack< 1 > + CALL $STKMATH( answer, stack ) + + BEGIN CASE + CASE target = "S" + IF( obn ) THEN + sob = answer + END ELSE + pob = answer + END + + CASE target = "A" + IF( obn ) THEN + pob = answer + END ELSE + sob = answer + END + + CASE target = "P" + IF pib[ ip, 1 ] = @AM THEN ip += 1 + first.part = pib[ 1, ip - 1 ] : answer : @AM + last.part = pib[ ip + 1, len( pib )] + DEL last.part< 1 > + pib = first.part : last.part + + CASE target = "T" + print answer + + CASE target = "T+" + print answer: + + END CASE + RETURN +END diff --git a/Ardent/UV/APP.PROGS/0192 b/Ardent/UV/APP.PROGS/0192 new file mode 100755 index 00000000..303c808b --- /dev/null +++ b/Ardent/UV/APP.PROGS/0192 @@ -0,0 +1,174 @@ +SUBROUTINE U0192(proc, ibn, pib, sib, ip, obn, pob, sob) +******************************************************************************* +* +* This user exit provides output formatting. +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description......................................... +* 10/14/98 23801 SAP Change copyrights. +* 07/25/88 - - Maintenence log purged at 5.2.1, see release 5.1.10. +* +******************************************************************************* +* This user exit provides output formatting. +* there are two kinds of format items, those which control spacing and those +* which output data. The data may be constants or data read and (optionally) +* converted. +****************************************************************************** + + DIM parse(200) + line = "" + output = "" + DIM words(10) + linefeed = CHAR(10) + pflag = 0 + LOOP + REMOVE line FROM proc SETTING x + format = TRIM( line ) + WHILE format[1,4] # "-> T" DO + BEGIN CASE +* 'Xnn' places nn blanks on the output + CASE format[1,1] = "X" + IF format[2,2] MATCHES '1n0n' THEN + output := SPACE(format[2,2]) + END +* Snn places nn line feeds in the output + CASE format[1,1] = "S" + IF format[2,2] MATCHES '1n0n' THEN + output := STR( linefeed, format[2,2]) + END +* 'P' places a form feed in the output, resets the current +* page and line counters and blanks out the heading + CASE format = "P" + output := CHAR(12) + PRINTER RESET + CASE format = "L" + PRINTER ON + pflag = 1 + CASE format[1,1] = "H" + MATPARSE words FROM format," " + IF words(1)[2,2] MATCHES "1n0n" THEN + pad = words(1)[2,2] + IF LEN(output) < pad THEN + output := SPACE(pad - len(output)) + END ELSE + output = output[1,pad] + END + END + pos = LEN(words(1)) + string = format[pos+2,99999] + CALL $INDIRECT( temp, pib, sib, pob, sob, obn, string) + output := temp + + + CASE format[1,1] = "V" or format[1,1] = "*" +* The V format gets and PRINTs a value +* the format of the format code is... +* Vnn file-ref item-ref field-ref +* The references may be explicit or indirect through the +* primary input buffer or either output buffer. +* See your 'PROC' manual for a discussion of indirect references. +* The * format behaves much like a V format with the exception +* that the amc specification is a reference to a named value +* and that the conversion in the dictionary is applied to the data +* before they are printed. + MATPARSE words FROM format," " +* take care of nn + pos = 2 + IF words(1)[2,2] MATCHES '1n0n' THEN + IF LEN(output) < words(1)[2,2] THEN + output := SPACE(words(1)[2,2]) + END ELSE + output = output[1,words(1)[2,2]] + END + END + +* now resolve fileref + fileref = words(pos) + pos += 1 + CALL $INDIRECT( temp, pib, sib, pob, sob, obn, fileref) + fileref = temp + filename = temp + IF temp = "DICT" THEN + fileref = words(pos) + pos += 1 + CALL $INDIRECT( temp, pib, sib, pob, sob, obn, fileref) + fileref = temp + Dstr = "DICT" + END ELSE + IF temp[1,1] = "*" THEN + Dstr = "DICT" + END ELSE + Dstr = "" + END + END + +* now resolve itemref + itemref = words(pos) + pos += 1 + CALL $INDIRECT( temp, pib, sib, pob, sob, obn, itemref) + itemref = temp + +* now resolve amcref + amcref = words(pos) + CALL $INDIRECT( temp, pib, sib, pob, sob, obn, amcref) + amcref = temp +* if we are a V item we're almost there, if a * item we have to go +* to the dict +* first do some stuff common to both kinds (like get the data) + + OPEN Dstr,fileref TO fvU0192 ELSE + PRINT "unable to open ":Dstr:" ":fileref + RETURN + END + READ record FROM fvU0192,itemref ELSE + PRINT "unable to read ":itemref:" FROM ":fileref + RETURN + END + + + IF format[1,1] = "*" THEN + OPEN "DICT",filename TO fvdU0192 ELSE + PRINT "1UNABLE TO OPEN DICT ":filename + RETURN + END + + READ drec FROM fvdU0192,amcref ELSE + PRINT "UNABLE TO READ DICT ":fileref:" ":amcref + RETURN + END + IF drec<1>[1,1] = "D" THEN + conv = drec<3> + * microdata only returns first value + loc = drec<2> + output := oconv(record,conv) + END ELSE +* had best be an I descriptor + @RECORD = record + temp = ITYPE(drec) + output:=oconv(temp,drec<3>) + END + END ELSE + output := record + END + + END CASE + IF x = 0 THEN proc = "-> T" ;* handle bad endfile condition (mr2369) + REPEAT + IF format[5,1] = "+" THEN + PRINT output: + END ELSE + PRINT output + END + IF pflag THEN PRINTER off + RETURN + END diff --git a/Ardent/UV/APP.PROGS/0196 b/Ardent/UV/APP.PROGS/0196 new file mode 100755 index 00000000..01348a11 --- /dev/null +++ b/Ardent/UV/APP.PROGS/0196 @@ -0,0 +1,47 @@ +subroutine U0196( ans, status, data, type ) +******************************************************************************* +* +* Replace all system delimiters in the "data" with tildes +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description......................................... +* 10/14/98 23801 SAP Change copyrights. +* 07/25/88 - - Maintenence log purged at 5.2.1, see release 5.1.10. +* +******************************************************************************* +* +* This "user-exit", called from a BASIC program, takes the "data" +* string and replaces system delimiters with tildes. +* +* +* Usage: x = OCONV( y, "U0196 ) +* +* Arguments to this subroutine are: +* ans - the returned string containing tildes in place of +* system delimiters +* data - the input string containing system delimiters +* status - 0 if the "conversion" succeeds +* type - 0 if ICONVerting, 1 if OCONVerting +* irrelevant in the case of 0196 +* +******************************************************************************* +* +$options DEFAULT + + ans = data + CONVERT @AM to "~" in ans + CONVERT @VM to "~" in ans + CONVERT @SVM to "~" in ans + status = 0 + RETURN +END diff --git a/Ardent/UV/APP.PROGS/01A2 b/Ardent/UV/APP.PROGS/01A2 new file mode 100755 index 00000000..3662ca6a --- /dev/null +++ b/Ardent/UV/APP.PROGS/01A2 @@ -0,0 +1,36 @@ +subroutine U01A2(proc,ibn,pib,sib,ip,obn,pob,sob) +******************************************************************************* +* +* NWAY BRANCH U01A2 +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description......................................... +* 10/14/98 23801 SAP Change copyrights. +* 07/25/88 - - Maintenence log purged at 5.2.1, see release 5.1.10. +* +******************************************************************************* + + dim parse(200) + + remove line from proc setting x + matparse parse from line,' ' + + n = inmat() + test = extract(if obn then sob else pob,parse(1)) + + for i = 2 to n until test = parse(i) + remove line from proc setting x + next i + return + + END diff --git a/Ardent/UV/APP.PROGS/01A6 b/Ardent/UV/APP.PROGS/01A6 new file mode 100755 index 00000000..3d9e075b --- /dev/null +++ b/Ardent/UV/APP.PROGS/01A6 @@ -0,0 +1,133 @@ + subroutine U01A6( proc, ibn, pib, sib, ip, obn, pob, sob ) +******************************************************************************* +* +* Position the cursor from a ProVerb +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description......................................... +* 10/14/98 23801 SAP Change copyrights. +* 03/17/93 9178 PVW Fix problem with ICONV +* 07/25/88 - - Maintenence log purged at 5.2.1, see release 5.1.10. +* +******************************************************************************* +* +* This "user-exit", called from a ProVerb, takes a number +* pair (either or both of which may be indirect references) and +* positions the cursor to that column/row. "B" sounds the terminal +* bell. "C" clears the screen. "X" indicates the hexadecimal +* equivalent of an ASCII character. +* +* Usage: +* U01A6 +* ( col.reference, row.reference ) +* +* All references can be indirect through the proc buffers. +* +* Arguments to this subroutine are: +* proc - the text of the proc itself +* ibn - the current input buffer switch (0 = primary; +* 1 = secondary) +* pib - the primary input buffer +* sib - the secondary input buffer +* ip - the input buffer pointer +* obn - the current output buffer switch (0 = primary; +* 1 = secondary) +* pob - the primary output buffer +* sob - the secondary output buffer +* +******************************************************************************* +* + EQUATE true TO 1 + EQUATE false TO 0 + + DIM cntrl( 100 ) + + temp = "" + LOOP + REMOVE line FROM proc SETTING x + MATPARSE cntrl FROM line,"(),'":'"' + tokens = INMAT() + done = true + + FOR i = 1 TO tokens + BEGIN CASE + CASE cntrl(i) = "(" + i += 1 + CALL $INDIRECT( result, pib, sib, pob, sob, obn,cntrl( i )) + r = result + i += 1 + IF cntrl( i ) = "," THEN + i += 1 + CALL $INDIRECT( result, pib, sib, pob, sob, obn,cntrl( i )) + i += 1 + IF cntrl( i ) # ")" THEN + PRINT "ProVerb syntax error: missing closing parenthesis." + PRINT line + RETURN + END + temp := @( r, result ) + END ELSE + IF cntrl( i ) = ")" THEN + temp := @( result ) + END + i += 1 + END + + CASE cntrl( i ) = ")" + PRINT "ProVerb syntax error: extraneous closing parenthesis." + PRINT line + RETURN + + CASE cntrl( i ) = '"' or cntrl( i ) = "'" + quote = cntrl( i ) + i += 1 + LOOP + UNTIL cntrl( i ) = quote OR i = tokens DO + temp := cntrl( i ) + i += 1 + REPEAT + IF i = tokens AND cntrl( i ) # quote THEN + PRINT "ProVerb syntax error: missing closing quotation mark." + PRINT line + RETURN + END + + CASE cntrl( i ) = "," + IF i = tokens THEN done = false + + CASE cntrl( i )[ 1, 1 ] = "X" + char.string = ICONV( cntrl( i )[ 2, 2 ], "MX0C" ) + IF STATUS() THEN + PRINT "ProVerb syntax error: invalid hexadecimal number." + PRINT line + END + temp := char.string + + CASE cntrl(i)[1,1] = "B" + temp := @SYS.BELL + + CASE cntrl( i )[ 1, 1 ] = "C" + PRINT @( -1 ): + + CASE cntrl( i ) = "+" + NULL + + END CASE + + NEXT i + UNTIL done DO + REPEAT + + PRINT temp: + RETURN + END diff --git a/Ardent/UV/APP.PROGS/01AD b/Ardent/UV/APP.PROGS/01AD new file mode 100755 index 00000000..b97d1e6b --- /dev/null +++ b/Ardent/UV/APP.PROGS/01AD @@ -0,0 +1,151 @@ +subroutine U01AD( proc, ibn, pib, sib, ip, obn, pob, sob ) +******************************************************************************* +* +* Perform a file translation from a ProVerb +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description......................................... +* 10/14/98 23801 SAP Change copyrights. +* 11/02/95 17595 SHJ Don't convert blanks when printing to terminal +* 04/15/92 9342 JWT Fix case for pib len = 0 +* 01/03/92 8557 GMH Corrected placement in pib +* 07/25/88 - - Maintenence log purged at 5.2.1, see release 5.1.10. +* +******************************************************************************* +* +* This "user-exit", called from a ProVerb, takes the filename, +* item-ID, and translation attribute number specified and returns +* the looked-up value to the named target. +* +* Usage: +* U01AD +* file.ref item.ref amc.ref target +* error return +* success return +* +* Where target can be: +* T - terminal +* S - Current output buffer +* A - Alternate output buffer +* P - Primary input buffer +* V - Verify existence (produces no output) +* VA - Verify nonnull attribute +* +* All references can be indirect through the proc buffers. +* Work files are not supported. +* +* Arguments to this subroutine are: +* proc - the text of the proc itself +* ibn - the current input buffer number (0 = primary; +* 1 = secondary) +* pib - the primary input buffer +* sib - the secondary input buffer +* ip - the input buffer pointer (character count) +* obn - the current output buffer number (0 = primary; +* 1 = secondary) +* pob - the primary output buffer +* sob - the secondary output buffer +* +******************************************************************************* +* + +* +* + DIM words( 10 ) + REMOVE line FROM proc SETTING x + line = TRIM( line ) + MATPARSE words FROM line," " + CALL $INDIRECT( fileref, pib, sib, pob, sob, obn, words( 1 )) + IF fileref[ 1,1 ] = "*" THEN + Dstr = "DICT" + fileref = fileref[ 2, 999 ] + END ELSE + Dstr = "" + END + CALL $INDIRECT( itemref, pib, sib, pob, sob, obn, words( 2 )) + CALL $INDIRECT( amcref, pib, sib, pob, sob, obn, words( 3 )) + CALL $INDIRECT( target, pib, sib, pob, sob, obn, words( 4 )) + found = 1 + OPEN Dstr, fileref TO fvu01ad ELSE + RETURN + END + READV item FROM fvu01ad, itemref, amcref ELSE + found = 0 + END + IF found THEN +* +* If the target designation is prefaced with a "B", then we're +* to replace all embedded blanks with backslashes. +* + IF target[ 1, 1 ] = "B" THEN + CONVERT " " TO "\" IN item + target = target[ 2, LEN( target )] + END ELSE + IF target[ 1, 1 ] # "T" THEN CONVERT " " TO @AM IN item + END + + BEGIN CASE + CASE target = "T" + print item + + CASE target = "T+" + print item: + + CASE target = "S" + IF( obn ) THEN + sob := item + END ELSE + pob := item + END + + CASE target = "A" + IF ( obn ) THEN + pob = item + END ELSE + sob = item + END + + CASE target = "P" + pib.len = len(pib) + IF ip = pib.len THEN + IF pib[ip,1] # @AM AND pib.len THEN pib := @AM + pib := item + END ELSE + IF pib[ ip, 1 ] = @AM THEN ip += 1 + first.part = pib[ 1, ip - 1 ] : item : @AM + last.part = pib[ ip + 1, len( pib )] + IF pib[ ip, 1 ] # @AM THEN DEL last.part< 1 > + pib = first.part : last.part + END + + CASE target = "V" + NULL + + CASE target = "VA" + IF item = "" THEN + found = 0 + END + END CASE + END + +* +* If we found an item, we must remove the error return line +* from the proc. +* + IF found THEN + REMOVE line FROM proc SETTING x + END + + RETURN + +END diff --git a/Ardent/UV/APP.PROGS/01B0 b/Ardent/UV/APP.PROGS/01B0 new file mode 100755 index 00000000..d7123093 --- /dev/null +++ b/Ardent/UV/APP.PROGS/01B0 @@ -0,0 +1,133 @@ +subroutine U01B0( proc, ibn, pib, sib, ip, obn, pob, sob ) +******************************************************************************* +* +* Return date and/or time to a ProVerb +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description......................................... +* 10/14/98 23801 SAP Change copyrights. +* 11/21/94 15189 GMH Add READU +* 01/14/91 7930 JWT Added new Ucode for Siemens/Nixdorf +* 24/10/89 BHX creation of the source +* +******************************************************************************* +* +* This "user-exit", called from a ProVerb, returns the date and/or time +* of the systeme +* +* Usage: +* U11B0 +* What Target +* error return +* success return +* +* Where "What" can be: +* T - Time of the system +* U01B0 : in milliseconds since midnight +* U11B0 : in form hh:mm:ss +* U31B0 : like U01B0 in hexadecimal +* D - Date of the system +* U01B0 : in number of days since 31 DEC 1967 +* U11B0 : in form dd mmm aa +* U31B0 : like U01B0 in hexadecimal +* TD - time and date of the system +* U01B0 : the 2 results are separated by '\' +* U11B0 : the 2 results are separated by 2 blanks +* U31B0 : the 2 results are separated by '\' +* +* Where "Target" can be: +* T - terminal +* S - Current output buffer +* P - Primary input buffer +* WIdArt - write in private file "nnP", where nn is the user #, +* item named IdArt. +* +* Arguments to this subroutine are: +* proc - the text of the proc itself +* ibn - the current input buffer number (0 = primary; +* 1 = secondary) +* pib - the primary input buffer +* sib - the secondary input buffer +* ip - the input buffer pointer (character count) +* obn - the current output buffer number (0 = primary; +* 1 = secondary) +* pob - the primary output buffer +* sob - the secondary output buffer +* +******************************************************************************* +* + CR = 1 + + DIM Words( 10 ) + REMOVE Line FROM proc SETTING x + Line = TRIM( Line ) + MATPARSE Words FROM Line," " + What = Words(1) + Target = Words(2) + + BEGIN CASE + CASE What = "T" + TimeDate = TIME() * 1000 + CASE What = "D" + TimeDate = DATE() + CASE What = "TD" + TimeDate = (TIME() * 1000):"\":DATE() + CASE 1 + ERRMSG 270 + CR = 0 + END CASE + + IF CR = 0 THEN RETURN + + BEGIN CASE + CASE Target = "T" + PRINT TimeDate + CASE Target = "S" + IF ( obn ) THEN + sob := TimeDate + END ELSE + pob := TimeDate + END + CASE Target = "P" + IF ip = LEN(pib) THEN + pib := TimeDate + END ELSE + IF pib[ip,1] = @AM THEN ip += 1 + first.part = pib[1,ip-1]:TimeDate:@AM + last.part = pib[ip+1,LEN(pib)] + DEL last.part<1> + pib = first.part:last.part + END + CASE Target[1,1] = "W" + IdArt = Target[2,LEN(Target)-1] + OPEN @USER.NO:"P" TO IdFicnnP ELSE + ERRMSG 201,@USER.NO:"P" + CR = 0 + END + IF CR THEN + READU Dummy FROM IdFicnnP,IdArt ELSE NULL + WRITE TimeDate ON IdFicnnP,IdArt ELSE + ERRMSG 202,IdArt + CR = 0 + END + END + CASE 1 + ERRMSG 270 + CR = 0 + END CASE + +* If no error, we must remove the error return line from the proc. + IF CR THEN REMOVE Line FROM proc SETTING x + RETURN + +END diff --git a/Ardent/UV/APP.PROGS/01BE b/Ardent/UV/APP.PROGS/01BE new file mode 100755 index 00000000..86c1f517 --- /dev/null +++ b/Ardent/UV/APP.PROGS/01BE @@ -0,0 +1,49 @@ +subroutine U01BE( ans, status, data, type ) +******************************************************************************* +* +* Input a string of no more than "data" characters, performing a +* carriage return / line feed afterward. +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description......................................... +* 10/14/98 23801 SAP Change copyrights. +* 07/25/88 - - Maintenence log purged at 5.2.1, see release 5.1.10. +* +******************************************************************************* +* +* This "user-exit", called from a BASIC program, accepts a specified +* number of characters into a variable and sends the cursor to +* the leftmost column of the next line. +* +* Usage: x = OCONV( n, "U01BE" ) +* where "n" is the number of characters to accept +* +* Arguments to this subroutine are: +* ans - the characters put in +* data - the number of characters to accept +* status - 0 if the "conversion" succeeds +* type - 0 if ICONVerting, 1 if OCONVerting +* irrelevant in the case of 01BE +* +******************************************************************************* +* +$options DEFAULT + + if not( num( data )) or data < 1 then + status = 1 + end else + status = 0 + input ans,data + end + return +end diff --git a/Ardent/UV/APP.PROGS/0230 b/Ardent/UV/APP.PROGS/0230 new file mode 100755 index 00000000..d6bd3e11 --- /dev/null +++ b/Ardent/UV/APP.PROGS/0230 @@ -0,0 +1,48 @@ +subroutine U0230( Resultat, Status ) +******************************************************************************* +* +* passage de parametre de tsp vers basic +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description......................................... +* 10/14/98 23801 SAP Change copyrights. +* 01/14/91 7930 JWT Added new Ucode for Siemens/Nixdorf +* 17/07/89 - creation du source +* +******************************************************************************* +* + Resultat = "" + OPEN "","VOC" TO FileVOC ELSE + RETURN + END + Temp = CONVERT( " ",@FM,TRIM(@SENTENCE)) + READV VerbType FROM FileVOC,Temp<1>,3 ELSE + VerbType = "B" + END + VerbType = UPCASE(VerbType[1,1]) + argc = DCOUNT(Temp,@FM) + IF VerbType = "I" THEN +*** RUN command or synonym + IF argc < 2 THEN +*** no arguments + UARGS = "" + END ELSE + UARGS = FIELD(Temp,@FM,2,999) + END + END ELSE +*** CATALOGed program + UARGS = FIELD(Temp,@FM,2,999) + END + Resultat = CONVERT( @FM," ",UARGS) + RETURN +END diff --git a/Ardent/UV/APP.PROGS/0358 b/Ardent/UV/APP.PROGS/0358 new file mode 100755 index 00000000..228eda56 --- /dev/null +++ b/Ardent/UV/APP.PROGS/0358 @@ -0,0 +1,140 @@ +subroutine U0358( Resultat, Status, Long ) +******************************************************************************* +* +* Saisie de caracteres avec caractere de fin de saisie +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description......................................... +* 10/14/98 23801 SAP Change copyrights. +* 18/18/96 18335 MAA Port release 9 to SNI +* 01/14/91 7930 JWT Added new Ucode for Siemens/Nixdorf +* 11/07/89 - BHX creation du source +* 26/09/89 - HBI Ajout test ECHO ON/OFF +* 10/09/90 - BHX Abandon de PTERM => TTYGET / TTYSET +* +******************************************************************************* +* +$INCLUDE UNIVERSE.INCLUDE TTY +$INCLUDE UNIVERSE.INCLUDE TERMINFO +$INCLUDE UNIVERSE.INCLUDE DEF.USERS +*** validiter de la demande + IF (NOT( NUM( Long )) OR Long < 1 OR Long > 500) THEN + Status = 1 +*** demande valide + END + ELSE + UnCarAGauche = KEY.MOVE.CURSOR.LEFT + Status = 0 + Resultat = "" + Nombre = 0 + TTYGET tty$ ELSE Status = 1 ; RETURN + SAVEICRNL=CRMODE.ICRNL + CRMODE.ICRNL = 0 + TTYSET tty$ ELSE Status = 1 ; RETURN +******** +debut: * +******** +*** saisie d'un caractere quelconque de CHAR(0) a CHAR(255) + Command = KEYIN() +IF CASE.INVERT THEN +*** Inversion upcase/downcase + IF Command >= 'a' AND Command <= 'z' THEN + Command = CHAR(SEQ(Command)-32) + END ELSE + IF Command >= 'A' AND Command <= 'Z' THEN + Command = CHAR(SEQ(Command)+32) + END + END +END +*** test du caractere recu + Flag = 0 + BEGIN CASE +*** fleche a droite (^X) + CASE Command = KEY.MOVE.CURSOR.RIGHT + PRINT BELL: + GOTO debut +*** fleche a gauche (^Y, basckspace sans effacement?) + CASE Command = KEY.MOVE.CURSOR.LEFT + Flag = 4 +*** backspace (^H) + CASE Command = KEY.BACKSPACE + Flag = 4 +*** exec (^J) + CASE Command = Exec + Flag = 1 +*** abandon (^N) + CASE Command = Abandon + Flag = 1 +*** sortie (^W) + CASE Command = Sortie + Flag = 1 +*** vider (^L) + CASE Command = Vider + Flag = 1 +*** envoi (^M) + CASE Command = Envoi + Flag = 1 +*** fleche en haut (^Z) + CASE Command = KEY.MOVE.CURSOR.UP + Flag = 1 +*** fleche en bas (^K) + CASE Command = KEY.MOVE.CURSOR.DOWN + Flag = 1 + END CASE +*** si caractere de controle autre que ceux prevu, l'absorber + IF (Command < CHAR(32) OR Command > CHAR(249)) THEN + IF Flag = 0 THEN + Command = "" + END +*** si exec, abandon, sortie, vider, envoi, fleches en haut/bas + IF Flag = 1 THEN + Command = @AM:Command + END +*** si backspace + IF Flag = 4 THEN + Command = "" + IF Nombre # 0 THEN + PRINT UnCarAGauche:" ":UnCarAGauche: + Resultat = Resultat[1,LEN(Resultat)-1] + Nombre = Nombre - 1 + END ELSE + PRINT BELL: + END + END + END +*** cumuler le resultat saisi + IF Flag = 0 THEN +*** Test ECHO ON/OFF + ResulImp="" + IF(SYSTEM(24))THEN ResulImp=Command + PRINT ResulImp: + Nombre = Nombre + LEN(Command) + END + Resultat = Resultat:Command + IF Flag = 1 THEN GOTO fin +*** si longueur atteinte faire beep + IF Nombre > Long THEN + Nombre = Nombre - 1 + PRINT BELL: + PRINT UnCarAGauche:" ":UnCarAGauche: + Resultat = Resultat[1,LEN(Resultat)-1] + END + GOTO debut + END +******* +fin : * +******* + CRMODE.ICRNL=SAVEICRNL + TTYSET tty$ ELSE Status = 1 ; RETURN + RETURN +END diff --git a/Ardent/UV/APP.PROGS/035A b/Ardent/UV/APP.PROGS/035A new file mode 100755 index 00000000..bb111dd8 --- /dev/null +++ b/Ardent/UV/APP.PROGS/035A @@ -0,0 +1,162 @@ +subroutine U035A( Resultat, Status, Param ) +******************************************************************************* +* +* Saisie en mode editeur pleine ligne +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description......................................... +* 10/14/98 23801 SAP Change copyrights. +* 08/18/96 18335 MAA Added new code to port 9 to Siemens Nixdorf. +* 01/14/91 7930 JWT Added new Ucode for Siemens/Nixdorf +* 17/07/89 - BHX creation du source +* 10/09/90 - BHX Abandon de PTERM => TTYGET / TTYSET +* +******************************************************************************* +* +$INCLUDE UNIVERSE.INCLUDE TTY +$INCLUDE UNIVERSE.INCLUDE DEF.USERS +$INCLUDE UNIVERSE.INCLUDE TERMINFO +*** validiter de la demande + Status = 0 + Resultat = "" + Nombre = 1 + Position = 1 + TTYGET tty$ ELSE Status = 1 ; RETURN + SAVE.NL = CRMODE.ICRNL + CRMODE.ICRNL = 0 + TTYSET tty$ ELSE Status = 1 ; RETURN + Long = EXTRACT(Param,1) + CarVal = EXTRACT(Param,2) + ValIni = EXTRACT(Param,3) + IF LEN(ValIni) > Long THEN ValIni = ValIni[1,Long] + PRINT ValIni: + UnCarAGauche = KEY.MOVE.CURSOR.LEFT + FOR Indice = 1 TO LEN(ValIni) + PRINT UnCarAGauche: + NEXT Indice + Resultat = ValIni:SPACE(Long-LEN(ValIni)) +******** +debut: * +******** +*** saisie d'un caractere quelconque de CHAR(0) a CHAR(255) + Command = KEYIN() +*** Inversion upcase/downcase + IF CASE.INVERT THEN + IF Command >= 'a' AND Command <= 'z' THEN + Command = CHAR(SEQ(Command)-32) + END ELSE + IF Command >= 'A' AND Command <= 'Z' THEN + Command = CHAR(SEQ(Command)+32) + END + END + END +*** test du caractere recu + Flag = 0 + BEGIN CASE +*** Caractere de validation + CASE INDEX(CarVal,Command,1) > 0 + Flag = 1 + GOTO fin +*** fleche a gauche (^Y ; basckspace sans effacement?) + CASE Command = KEY.MOVE.CURSOR.LEFT + Command = "" + IF Nombre = 1 THEN + PRINT BELL: + END ELSE + Flag = 2 + Nombre = Nombre - 1 + GOSUB Reafficher + END +*** fleche a droite (^X) + CASE Command = KEY.MOVE.CURSOR.RIGHT + Command = "" + IF Nombre < LEN(Resultat) THEN + Flag = 3 + Nombre = Nombre + 1 + GOSUB Reafficher + END ELSE + PRINT BELL: + END +*** touche Mot (^B) suppression du caractere courant + CASE Command = Mot OR Command = KEY.BACKSPACE OR Command = CHAR(02) + Command = "" + Resultat = Resultat[1,Nombre-1]:Resultat[Nombre+1,LEN(Resultat)-Nombre]:" " + GOSUB Reafficher + Flag = 4 +*** touche Car (^A) insertion d'un blanc devant le caractere courant + CASE Command = Car OR Command = CHAR(01) + Command = "" + Resultat = Resultat[1,Nombre-1]:" ":Resultat[Nombre,LEN(Resultat)-Nombre] + GOSUB Reafficher + Flag = 5 +*** touche Supp suppression de la partie droite caractere courant compris + CASE Command = Supp OR Command = CHAR(03) + Command = "" + IF Nombre # 1 THEN +*** Nombre = Nombre - 1 + Resultat = Resultat[1,Nombre-1]:Space(LEN(Resultat)-Nombre+1) + END ELSE + Resultat = Space(LEN(Resultat)) + END + GOSUB Reafficher + Flag = 6 + END CASE +*** si caractere de controle autre que ceux prevu, l'absorber + IF (Command < CHAR(32) OR Command > CHAR(249)) THEN + IF Flag = 0 THEN + GOTO debut + END + END +*** si longueur atteinte + IF Nombre = Long + 1 THEN + Command = "" + PRINT BELL: + END +*** mise a jour du resultat + IF Command # "" THEN + Resultat = Resultat[1,Nombre-1]:Command:Resultat[Nombre+1,LEN(Resultat)-Nombre] + Nombre = Nombre + 1 + GOSUB Reafficher + END + GOTO debut +******* +fin : * +******* +*** suppression des blancs de fin de ligne + Temp = Resultat + FOR Indice = LEN(Resultat) TO 1 STEP -1 + IF Resultat[Indice,1] = " " THEN + Temp = Temp[1,Indice-1] + END ELSE + GOTO LSuite + END + NEXT Indice +LSuite: Resultat = Temp + IF Resultat = ValIni THEN Modif = 0 ELSE Modif = 1 + Resultat = Resultat:@AM:Command:@AM:Modif + CRMODE.ICRNL = SAVE.NL + TTYSET tty$ ELSE Status = 1 ; RETURN + RETURN +************* +Reafficher: * +************* + FOR Indice = 1 TO Position - 1 + PRINT UnCarAGauche: + NEXT Indice + PRINT Resultat: + Position = Nombre + FOR Indice = LEN(Resultat) TO Nombre STEP -1 + PRINT UnCarAGauche: + NEXT Indice + RETURN +END diff --git a/Ardent/UV/APP.PROGS/1114 b/Ardent/UV/APP.PROGS/1114 new file mode 100755 index 00000000..457217ae --- /dev/null +++ b/Ardent/UV/APP.PROGS/1114 @@ -0,0 +1,59 @@ +subroutine U1114( Resultat, Status, Long ) +******************************************************************************* +* +* Saisie d'un caractere quelconque au clavier sans retour-chariot +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description......................................... +* 10/14/98 23801 SAP Change copyrights. +* 08/18/96 18335 MAA Added new code to port 9 to Siemens Nixdorf. +* 01/14/91 7930 JWT Added new Ucode for Siemens/Nixdorf +* 17/07/89 - BHX creation du source +* 10/09/90 - BHX Abandon de PTERM => TTYGET / TTYSET +* +******************************************************************************* +* +$INCLUDE UNIVERSE.INCLUDE TTY +$INCLUDE UNIVERSE.INCLUDE DEF.USERS +*** validiter de la demande + IF (NOT( NUM( Long )) OR Long # 1) THEN Long=1 + Status = 0 + Resultat = "" + TTYGET tty$ ELSE Status = 1 ; RETURN + SAVEICRNL=CRMODE.ICRNL + CRMODE.ICRNL = 0 + TTYSET tty$ ELSE Status = 1 ; RETURN +******** +debut: * +******** +*** boucle de saisie d'un caractere quelconque de CHAR(0) a CHAR(255) + Resultat = KEYIN() +*** Inversion upcase/downcase + IF CASE.INVERT THEN + IF Resultat >= 'a' AND Resultat <= 'z' THEN + Resultat = CHAR(SEQ(Resultat)-32) + END ELSE + IF Resultat >= 'A' AND Resultat <= 'Z' THEN + Resultat = CHAR(SEQ(Resultat)+32) + END + END + END +*** test ECHO ON/OFF + ResulImp="" + IF(SYSTEM(24))THEN ResulImp=Resultat +*** test du caractere recu + IF Resultat >= CHAR(32) AND Resultat < CHAR(127) THEN PRINT ResulImp: + CRMODE.ICRNL=SAVEICRNL + TTYSET tty$ ELSE Status = 1 ; RETURN + RETURN +END diff --git a/Ardent/UV/APP.PROGS/11A2 b/Ardent/UV/APP.PROGS/11A2 new file mode 100755 index 00000000..cff9ae99 --- /dev/null +++ b/Ardent/UV/APP.PROGS/11A2 @@ -0,0 +1,81 @@ +subroutine U11A2( proc, ibn, pib, sib, ip, obn, pob, sob ) +******************************************************************************* +* +* Pad the current input buffer with enough zeroes to achieve the +* total specified number of digits +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description......................................... +* 10/14/98 23801 SAP Change copyrights. +* 07/25/88 - - Maintenence log purged at 5.2.1, see release 5.1.10. +* +******************************************************************************* +* +* This "user-exit", called from a ProVerb, left zero-fills the string in +* the current input buffer until the number of digits requested is +* achieved. It returns the result to the current input buffer. +* +* Usage: +* U11A2 +* requested.number.of.digits +* +* Arguments to this subroutine are: +* proc - the text of the proc itself +* ibn - the current input buffer switch (0 = primary; +* 1 = secondary) +* pib - the primary input buffer +* sib - the secondary input buffer +* ip - the input buffer pointer (character count) +* obn - the current output buffer switch (0 = primary; +* 1 = secondary) +* pob - the primary output buffer +* sob - the secondary output buffer +* +******************************************************************************* +* +* The documentation says to pad the current value in the SECONDARY input +* buffer with zeroes. +* Assume that we mean the currently active input buffer +* and that the current value is pointed to by "ip". If "ip" points to an +* attribute mark, then we move foward one character and try again. + + REMOVE n FROM proc SETTING x + cp = ip + 1 + IF ibn THEN + IF sib[ cp, 1 ] = @AM THEN cp += 1 + t = sib[ cp, len( sib )] + END ELSE + IF pib[ cp, 1 ] = @AM THEN cp += 1 + t = pib[ cp, len( pib )] + END + + t = t< 1 > + + len.t = len( t ) + t = STR( "0", n - len.t ) : t + IF ibn THEN + IF sib[ ip, 1 ] = @AM THEN ip += 1 + first.part = sib[ 1, ip - 1 ] : t : @AM + last.part = sib[ ip + 1, len( sib )] + DEL last.part< 1 > + sib = first.part : last.part + END ELSE + IF pib[ ip, 1 ] = @AM THEN ip += 1 + first.part = pib[ 1, ip - 1 ] : t : @AM + last.part = pib[ ip + 1, len( pib )] + DEL last.part< 1 > + pib = first.part : last.part + END + RETURN +END + diff --git a/Ardent/UV/APP.PROGS/11B0 b/Ardent/UV/APP.PROGS/11B0 new file mode 100755 index 00000000..80efba4d --- /dev/null +++ b/Ardent/UV/APP.PROGS/11B0 @@ -0,0 +1,133 @@ +subroutine U11B0( proc, ibn, pib, sib, ip, obn, pob, sob ) +******************************************************************************* +* +* Return date and/or time to a ProVerb +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description......................................... +* 10/14/98 23801 SAP Change copyrights. +* 11/21/94 15189 GMH Add READU +* 01/14/91 7930 JWT Added new Ucode for Siemens/Nixdorf +* 24/10/89 BHX creation of the source +* +******************************************************************************* +* +* This "user-exit", called from a ProVerb, returns the date and/or time +* of the systeme +* +* Usage: +* U11B0 +* What Target +* error return +* success return +* +* Where "What" can be: +* T - Time of the system +* U01B0 : in milliseconds since midnight +* U11B0 : in form hh:mm:ss +* U31B0 : like U01B0 in hexadecimal +* D - Date of the system +* U01B0 : in number of days since 31 DEC 1967 +* U11B0 : in form dd mmm aa +* U31B0 : like U01B0 in hexadecimal +* TD - time and date of the system +* U01B0 : the 2 results are separated by '\' +* U11B0 : the 2 results are separated by 2 blanks +* U31B0 : the 2 results are separated by '\' +* +* Where "Target" can be: +* T - terminal +* S - Current output buffer +* P - Primary input buffer +* WIdArt - write in private file "nnP", where nn is the user #, +* item named IdArt. +* +* Arguments to this subroutine are: +* proc - the text of the proc itself +* ibn - the current input buffer number (0 = primary; +* 1 = secondary) +* pib - the primary input buffer +* sib - the secondary input buffer +* ip - the input buffer pointer (character count) +* obn - the current output buffer number (0 = primary; +* 1 = secondary) +* pob - the primary output buffer +* sob - the secondary output buffer +* +******************************************************************************* +* + CR = 1 + + DIM Words( 10 ) + REMOVE Line FROM proc SETTING x + Line = TRIM( Line ) + MATPARSE Words FROM Line," " + What = Words(1) + Target = Words(2) + + BEGIN CASE + CASE What = "T" + TimeDate = OCONV(TIME(),"MTS") + CASE What = "D" + TimeDate = OCONV(DATE(),"D2/") + CASE What = "TD" + TimeDate = OCONV(TIME(),"MTS"):" ": OCONV(DATE(),"D2/") + CASE 1 + ERRMSG 270 + CR = 0 + END CASE + + IF CR = 0 THEN RETURN + + BEGIN CASE + CASE Target = "T" + PRINT TimeDate + CASE Target = "S" + IF ( obn ) THEN + sob := TimeDate + END ELSE + pob := TimeDate + END + CASE Target = "P" + IF ip = LEN(pib) THEN + pib := TimeDate + END ELSE + IF pib[ip,1] = @AM THEN ip += 1 + first.part = pib[1,ip-1]:TimeDate:@AM + last.part = pib[ip+1,LEN(pib)] + DEL last.part<1> + pib = first.part:last.part + END + CASE Target[1,1] = "W" + IdArt = Target[2,LEN(Target)-1] + OPEN @USER.NO:"P" TO IdFicnnP ELSE + ERRMSG 201,@USER.NO:"P" + CR = 0 + END + IF CR THEN + READU Duummy FROM IdFicnnP,IdArt ELSE NULL + WRITE TimeDate ON IdFicnnP,IdArt ELSE + ERRMSG 202,IdArt + CR = 0 + END + END + CASE 1 + ERRMSG 270 + CR = 0 + END CASE + +* If no error, we must remove the error return line from the proc. + IF CR THEN REMOVE Line FROM proc SETTING x + RETURN + +END diff --git a/Ardent/UV/APP.PROGS/11BE b/Ardent/UV/APP.PROGS/11BE new file mode 100755 index 00000000..fa30bb68 --- /dev/null +++ b/Ardent/UV/APP.PROGS/11BE @@ -0,0 +1,49 @@ +subroutine U11BE( ans, status, data, type ) +******************************************************************************* +* +* Input a string of no more than "data" characters, performing no +* carriage return / line feed afterward. +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description......................................... +* 10/14/98 23801 SAP Change copyrights. +* 07/25/88 - - Maintenence log purged at 5.2.1, see release 5.1.10. +* +******************************************************************************* +* +* This "user-exit", called from a BASIC program, accepts a specified +* number of characters into a variable and leaves the cursor in +* position after the last character entered +* +* Usage: x = OCONV( n, "U11BE" ) +* where "n" is the number of characters to accept +* +* Arguments to this subroutine are: +* ans - the characters put in +* data - the number of characters to accept +* status - 0 if the "conversion" succeeds +* type - 0 if ICONVerting, 1 if OCONVerting +* irrelevant in the case of 01BE +* +******************************************************************************* +* +$options DEFAULT + + if not( num( data )) or data < 1 then + status = 1 + end else + status = 0 + input ans,data_: + end + return +end diff --git a/Ardent/UV/APP.PROGS/11ED b/Ardent/UV/APP.PROGS/11ED new file mode 100755 index 00000000..fa64b505 --- /dev/null +++ b/Ardent/UV/APP.PROGS/11ED @@ -0,0 +1,124 @@ +subroutine U11ED( Resultat, Status, Long ) +******************************************************************************* +* +* Saisie de caracteres avec elimination des caracteres de controle +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description......................................... +* 10/14/98 23801 SAP Change copyrights. +* 08/18/96 18335 MAA Added new code to port 9 to Siemens Nixdorf. +* 01/14/91 7930 JWT Added new Ucode for Siemens/Nixdorf +* 11/07/89 - BHX creation du source +* 26/09/89 - HBI Ajout test ECHO ON/OFF +* 10/09/90 - BHX Abandon de PTERM => TTYGET / TTYSET +* +******************************************************************************* +* +$INCLUDE UNIVERSE.INCLUDE TTY +$INCLUDE UNIVERSE.INCLUDE DEF.USERS +$INCLUDE UNIVERSE.INCLUDE TERMINFO +*** validiter de la demande + IF (NOT( NUM( Long )) OR Long < 1 OR Long > 500) THEN + Status = 1 +*** demande valide + END + ELSE + Status = 0 + UnCarAGauche = KEY.MOVE.CURSOR.LEFT + TTYGET tty$ ELSE Status = 1 ; RETURN + SAVEICRNL=CRMODE.ICRNL + CRMODE.ICRNL = 0 + TTYSET tty$ ELSE Status = 1 ; RETURN +************ +vraidebut: * +************ + Resultat = "" + Nombre = 0 + IF SYSTEM(26) # CHAR(0) THEN + LongPrompt=1 + END ELSE + LongPrompt=0 + END + PRINT SYSTEM(26): + FOR Indice = 1 TO Long + PRINT FondDeZone: + NEXT Indice + FOR Indice = 1 TO Long + PRINT UnCarAGauche: + NEXT Indice +******** +debut: * +******** +*** saisie d'un caractere quelconque de CHAR(0) a CHAR(255) + Command = KEYIN() + IF CASE.INVERT THEN +*** Inversion upcase/downcase + IF Command >= 'a' AND Command <= 'z' THEN + Command = CHAR(SEQ(Command)-32) + END ELSE + IF Command >= 'A' AND Command <= 'Z' THEN + Command = CHAR(SEQ(Command)+32) + END + END + END +*** si fleche a gauche (faire comme backspace) + IF Command = KEY.MOVE.CURSOR.LEFT OR Command = KEY.BACKSPACE THEN + Command = "" + IF Nombre # 0 THEN + Nombre = Nombre - 1 + Resultat = Resultat[1,LEN(Resultat)-1] + PRINT UnCarAGauche:FondDeZone:UnCarAGauche: + END + END +*** si caractere de validation + IF Command = Exec OR Command = Envoi THEN + GOTO fin + END +*** si fleche a droite, on remet ca! + IF Command = KEY.MOVE.CURSOR.RIGHT THEN + FOR Indice = 1 TO Nombre+LongPrompt + PRINT UnCarAGauche: + NEXT Indice + GOTO vraidebut + END + IF (Command < CHAR(32)) THEN + Command = "" + END ELSE + Nombre = Nombre + LEN(Command) + END + IF Nombre # Long + 1 THEN +*** cumuler le resultat saisi + Resultat = Resultat:Command +*** Test ECHO ON/OFF + ResulImp="" + IF(SYSTEM(24))THEN ResulImp=Command + PRINT ResulImp: + END ELSE +*** si longueur atteinte, on remet ca! + FOR Indice = 1 TO Nombre-1+LongPrompt + PRINT UnCarAGauche: + NEXT Indice + GOTO vraidebut + END + GOTO debut + END +******* +fin : * +******* + FOR Indice = Nombre TO Long-1 + PRINT " ": + NEXT Indice + CRMODE.ICRNL=SAVEICRNL + TTYSET tty$ ELSE Status = 1 ; RETURN + RETURN +END diff --git a/Ardent/UV/APP.PROGS/201E b/Ardent/UV/APP.PROGS/201E new file mode 100755 index 00000000..81202e46 --- /dev/null +++ b/Ardent/UV/APP.PROGS/201E @@ -0,0 +1,36 @@ +SUBROUTINE U201E(ANS,STATUS,DATA,TYPE) +******************************************************************************* +* +* 201E - CALC NBR OF FIELDS SUBROUTINE +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description......................................... +* 10/14/98 23801 SAP Change copyrights. +* 07/25/88 - - Maintenence log purged at 5.2.1, see release 5.1.10. +* +******************************************************************************* +$OPTIONS DEFAULT + + ANS = '' + STATUS = 0 + OPEN '',@FILENAME TO FILE.NAME ELSE + ABORT 'CAN NOT OPEN ':@FILENAME + END + IF STATUS() = 1 AND @RECORD = '' THEN + READ RECORD FROM FILE.NAME,@ID ELSE RECORD = ''; STATUS = 1 + @RECORD = RECORD + END + ANS = DCOUNT(@RECORD,@AM) + STATUS = 0 + RETURN + END diff --git a/Ardent/UV/APP.PROGS/20E0 b/Ardent/UV/APP.PROGS/20E0 new file mode 100755 index 00000000..cf5cffea --- /dev/null +++ b/Ardent/UV/APP.PROGS/20E0 @@ -0,0 +1,28 @@ +SUBROUTINE U020E0(ANS,STATUS,DATA,TYPE) +******************************************************************************* +* +* 020E0 - TCL INPUT STATEMENT SUBROUTINE +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description......................................... +* 10/14/98 23801 SAP Change copyrights. +* 07/25/88 - - Maintenence log purged at 5.2.1, see release 5.1.10. +* +******************************************************************************* + +$OPTIONS DEFAULT + +ANS = @SENTENCE +STATUS = 0 +RETURN +END diff --git a/Ardent/UV/APP.PROGS/2193 b/Ardent/UV/APP.PROGS/2193 new file mode 100755 index 00000000..cd67b383 --- /dev/null +++ b/Ardent/UV/APP.PROGS/2193 @@ -0,0 +1,33 @@ +SUBROUTINE U2193(ANS,STATUS,DATA,TYPE) +******************************************************************************* +* +* 2193 - Cause page break after this line is printed, or +* after this attribute is printed with vertical format +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description......................................... +* 10/14/98 23801 SAP Change copyrights. +* 03/21/89 5305 JSM Initial implementation +* +******************************************************************************* +$OPTIONS DEFAULT + + ANS = '' + STATUS = 0 + IF DATA # '' THEN + ASSIGN 1 TO SYSTEM(1000) + END + ANS = DATA + STATUS = 0 + RETURN + END diff --git a/Ardent/UV/APP.PROGS/2196 b/Ardent/UV/APP.PROGS/2196 new file mode 100755 index 00000000..c1072791 --- /dev/null +++ b/Ardent/UV/APP.PROGS/2196 @@ -0,0 +1,95 @@ +subroutine U2196( proc, ibn, pib, sib, ip, obn, pob, sob ) +******************************************************************************* +* +* Retrieve the terminal number into a proc +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description......................................... +* 10/14/98 23801 SAP Change copyrights. +* 07/25/88 - - Maintenence log purged at 5.2.1, see release 5.1.10. +* +******************************************************************************* +* +* This "user-exit" returns the user's terminal number onto the +* terminal or into the primary input buffer or current output buffer +* of a proc. +* +* Usage: proc line n: U2196 +* line n+1: target +* line n+2: normal return +* +* where target can be: T - print on the terminal screen +* P - place into primary input buffer +* S - place into the current output buffer +* A - place into the other output buffer +* +* Arguments to this subroutine are: +* proc - the text of the proc itself +* ibn - the current input buffer switch (0 = primary; +* 1 = secondary) +* pib - the primary input buffer +* sib - the secondary input buffer +* ip - the input buffer pointer +* obn - the current output buffer switch (0 = primary; +* 1 = secondary) +* pob - the primary output buffer +* sob - the secondary output buffer +* +* +******************************************************************************* +* +$options DEFAULT + +* +* Get the next line of the proc after the one containing "U2196". +* That line contains the "target" and tells us where to put the +* terminal number. +* Note that the "remove" pointer has already been set to the current +* line in the proc. +* + REMOVE target FROM proc SETTING junk + target = TRIM( target ) +* +* Find out the user's terminal number. +* + ans = @USERNO +* +* Put it wherever the proc says to. +* + BEGIN CASE + CASE target = "T" + print ans + CASE target = "T+" + print ans: + CASE target = "S" + IF( obn ) THEN + sob = ans + END ELSE + pob = ans + END + CASE target = "A" + IF ( obn ) THEN + pob = ans + END ELSE + sob = ans + END + CASE target = "P" + IF pib[ ip, 1 ] = @AM THEN ip += 1 + first.part = pib[ 1, ip - 1 ] : ans : @AM + last.part = pib[ ip + 1, len( pib )] + DEL last.part< 1 > + pib = first.part : last.part + + END CASE + RETURN +END diff --git a/Ardent/UV/APP.PROGS/21A2 b/Ardent/UV/APP.PROGS/21A2 new file mode 100755 index 00000000..a168ee42 --- /dev/null +++ b/Ardent/UV/APP.PROGS/21A2 @@ -0,0 +1,47 @@ +SUBROUTINE U21A2( proc, ibn, pib, sib, ip, obn, pob, sob ) +******************************************************************************* +* +* SCLIP U21A2 +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description......................................... +* 10/14/98 23801 SAP Change copyrights. +* 07/25/88 - - Maintenence log purged at 5.2.1, see release 5.1.10. +* +******************************************************************************* +* +* Deletes values from the current output buffer +* +******************************************************************************** + DIM parse(200) +* get line after U21A2 + REMOVE flag FROM proc SETTING x + flag = TRIM(flag) + CALL $INDIRECT( result, pib, sib, pob, sob, obn, flag) + flag = result + IF flag THEN + IF obn THEN + FOR i = 1 TO flag + DEL sob + NEXT i + END ELSE + FOR i = 1 TO flag + DEL pob + NEXT i + END + END ELSE + IF obn THEN sob = "" ELSE pob = "" + END + RETURN + END + diff --git a/Ardent/UV/APP.PROGS/307A b/Ardent/UV/APP.PROGS/307A new file mode 100755 index 00000000..10f97f63 --- /dev/null +++ b/Ardent/UV/APP.PROGS/307A @@ -0,0 +1,50 @@ +subroutine U307A( ANS, STATUS, DATA, TYPE ) +******************************************************************************* +* +* 307A - SLEEP UNTIL SUBROUTINE +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description......................................... +* 10/14/98 23801 SAP Change copyrights. +* 07/25/88 - - Maintenence log purged at 5.2.1, see release 5.1.10. +* +******************************************************************************* +* +* This "user-exit", called from a BASIC program, sleeps until +* the time specified (in external form). +* +* Usage: +* X = oconv( hh:mm:ss, "U01AD" ) +* +* +****************************************************************************** + +$OPTIONS DEFAULT + +ANS = '' +if DATA = "" then + STATUS = 1 + return +end +seconds = iconv( DATA, "MTHS" ) +if status() then + STATUS = status() + return +end +seconds -= int( TIME()) +if seconds < 0 then + seconds += 86400 +end +execute 'SLEEP ': seconds +STATUS = @SYSTEM.RETURN.CODE +return diff --git a/Ardent/UV/APP.PROGS/30E0 b/Ardent/UV/APP.PROGS/30E0 new file mode 100755 index 00000000..f95900fb --- /dev/null +++ b/Ardent/UV/APP.PROGS/30E0 @@ -0,0 +1,28 @@ +SUBROUTINE U030E0(ANS,STATUS,DATA,TYPE) +******************************************************************************* +* +* 30E0 - CHECK SELECT LIST ACTIVE SUBROUTINE +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description......................................... +* 10/14/98 23801 SAP Change copyrights. +* 07/25/88 - - Maintenence log purged at 5.2.1, see release 5.1.10. +* +******************************************************************************* + +$OPTIONS DEFAULT + +ANS = SYSTEM(11) +STATUS = 0 +RETURN +END diff --git a/Ardent/UV/APP.PROGS/31AD b/Ardent/UV/APP.PROGS/31AD new file mode 100755 index 00000000..e6c4257c --- /dev/null +++ b/Ardent/UV/APP.PROGS/31AD @@ -0,0 +1,89 @@ +subroutine U31AD( proc, ibn, pib, sib, ip, obn, pob, sob ) +******************************************************************************* +* +* Retrieve nnP into a proc, where nn is the terminal number +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description......................................... +* 10/14/98 23801 SAP Change copyrights. +* 01/14/91 7930 JWT added patch supplied by Siemens/Nixdorf +* 02/15/90 6563 JWT made target 'S' append result (per 01AD) +* 07/25/88 - - Maintenence log purged at 5.2.1, see release 5.1.10. +* +******************************************************************************* +* +* This "user-exit" returns the user's terminal number in file name form +* onto the terminal or into the primary input buffer or current output +* buffer of a proc. +* +* Usage: proc line n: U31AD +* line n+1: target +* line n+2: normal return +* +* where target can be: T - print on the terminal screen +* P - place into primary input buffer +* S - place into the current output buffer +* A - place into the other output buffer +* +* Arguments to this subroutine are: +* proc - the text of the proc itself +* ibn - the current input buffer switch (0 = primary; +* 1 = secondary) +* pib - the primary input buffer +* sib - the secondary input buffer +* ip - the input buffer pointer +* obn - the current output buffer switch (0 = primary; +* 1 = secondary) +* pob - the primary output buffer +* sob - the secondary output buffer +* +* +******************************************************************************* + + REMOVE target FROM proc SETTING x + target = TRIM( target ) + answer = @USER.NO : "P" + IF LEN( answer ) < 3 THEN answer = "0" : answer + + BEGIN CASE + CASE target = "S" + IF( obn ) THEN + sob := answer + END ELSE + pob := answer + END + + CASE target = "A" + IF( obn ) THEN + pob = answer + END ELSE + sob = answer + END + + CASE target = "P" + IF pib[ ip, 1 ] = @AM THEN ip += 1 + first.part = pib[ 1, ip - 1 ] : answer : @AM + last.part = pib[ ip + 1, len( pib )] + IF pib[ ip, 1 ] # @AM THEN DEL last.part< 1 > + pib = first.part : last.part + + + CASE target = "T" + print answer + + CASE target = "T+" + print answer: + + END CASE + RETURN +END diff --git a/Ardent/UV/APP.PROGS/31B0 b/Ardent/UV/APP.PROGS/31B0 new file mode 100755 index 00000000..7092b3c2 --- /dev/null +++ b/Ardent/UV/APP.PROGS/31B0 @@ -0,0 +1,133 @@ +subroutine U01B0( proc, ibn, pib, sib, ip, obn, pob, sob ) +******************************************************************************* +* +* Return date and/or time to a ProVerb +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description......................................... +* 10/14/98 23801 SAP Change copyrights. +* 11/21/94 15189 GMH Add READU +* 01/14/91 7930 JWT Added new Ucode for Siemens/Nixdorf +* 24/10/89 BHX creation of the source +* +******************************************************************************* +* +* This "user-exit", called from a ProVerb, returns the date and/or time +* of the systeme +* +* Usage: +* U11B0 +* What Target +* error return +* success return +* +* Where "What" can be: +* T - Time of the system +* U01B0 : in milliseconds since midnight +* U11B0 : in form hh:mm:ss +* U31B0 : like U01B0 in hexadecimal +* D - Date of the system +* U01B0 : in number of days since 31 DEC 1967 +* U11B0 : in form dd mmm aa +* U31B0 : like U01B0 in hexadecimal +* TD - time and date of the system +* U01B0 : the 2 results are separated by '\' +* U11B0 : the 2 results are separated by 2 blanks +* U31B0 : the 2 results are separated by '\' +* +* Where "Target" can be: +* T - terminal +* S - Current output buffer +* P - Primary input buffer +* WIdArt - write in private file "nnP", where nn is the user #, +* item named IdArt. +* +* Arguments to this subroutine are: +* proc - the text of the proc itself +* ibn - the current input buffer number (0 = primary; +* 1 = secondary) +* pib - the primary input buffer +* sib - the secondary input buffer +* ip - the input buffer pointer (character count) +* obn - the current output buffer number (0 = primary; +* 1 = secondary) +* pob - the primary output buffer +* sob - the secondary output buffer +* +******************************************************************************* +* + CR = 1 + + DIM Words( 10 ) + REMOVE Line FROM proc SETTING x + Line = TRIM( Line ) + MATPARSE Words FROM Line," " + What = Words(1) + Target = Words(2) + + BEGIN CASE + CASE What = "T" + TimeDate = OCONV((TIME() * 1000),"MX") + CASE What = "D" + TimeDate = OCONV(DATE(),"MX") + CASE What = "TD" + TimeDate = OCONV((TIME() * 1000),"MX"):"\":OCONV(DATE(),"MX") + CASE 1 + ERRMSG 270 + CR = 0 + END CASE + + IF CR = 0 THEN RETURN + + BEGIN CASE + CASE Target = "T" + PRINT TimeDate + CASE Target = "S" + IF ( obn ) THEN + sob := TimeDate + END ELSE + pob := TimeDate + END + CASE Target = "P" + IF ip = LEN(pib) THEN + pib := TimeDate + END ELSE + IF pib[ip,1] = @AM THEN ip += 1 + first.part = pib[1,ip-1]:TimeDate:@AM + last.part = pib[ip+1,LEN(pib)] + DEL last.part<1> + pib = first.part:last.part + END + CASE Target[1,1] = "W" + IdArt = Target[2,LEN(Target)-1] + OPEN @USER.NO:"P" TO IdFicnnP ELSE + ERRMSG 201,@USER.NO:"P" + CR = 0 + END + IF CR THEN + READU Dummy FROM IdFicnnP,IdArt ELSE NULL + WRITE TimeDate ON IdFicnnP,IdArt ELSE + ERRMSG 202,IdArt + CR = 0 + END + END + CASE 1 + ERRMSG 270 + CR = 0 + END CASE + +* If no error, we must remove the error return line from the proc. + IF CR THEN REMOVE Line FROM proc SETTING x + RETURN + +END diff --git a/Ardent/UV/APP.PROGS/407A b/Ardent/UV/APP.PROGS/407A new file mode 100755 index 00000000..60e622fa --- /dev/null +++ b/Ardent/UV/APP.PROGS/407A @@ -0,0 +1,29 @@ +SUBROUTINE U0407A(ANS,STATUS,DATA,TYPE) +******************************************************************************* +* +* 407A - SLEEP SECONDS SUBROUTINE +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description......................................... +* 10/14/98 23801 SAP Change copyrights. +* 07/25/88 - - Maintenence log purged at 5.2.1, see release 5.1.10. +* +******************************************************************************* + +$OPTIONS DEFAULT + +ANS = '' +SLEEP DATA +STATUS = 0 +RETURN +END diff --git a/Ardent/UV/APP.PROGS/41AD b/Ardent/UV/APP.PROGS/41AD new file mode 100755 index 00000000..23ecd7a8 --- /dev/null +++ b/Ardent/UV/APP.PROGS/41AD @@ -0,0 +1,37 @@ +subroutine U41AD(proc, ibn, pib, sib, ip, obn, pob, sob) +******************************************************************************* +* +* HOLLPIB U41AD +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description......................................... +* 10/14/98 23801 SAP Change copyrights. +* 07/25/88 - - Maintenence log purged at 5.2.1, see release 5.1.10. +* +******************************************************************************* +* HOLLPIB +* This exit replaces the 'current' item in the primary input buffer +* with a character string from the line in the PROC after the +* invocation. The string may contain blanks which will be +* turned into attribute marks, so a single call to this exit can +* insert more than one item. +******************************************************************************* + + temp = pib[1,ip] + pos = COUNT(temp,@FM) + REMOVE string FROM proc SETTING x + CONVERT " " TO @FM IN string + pib = REPLACE(pib, pos + 1, 0, 0, string) + return + + END diff --git a/Ardent/UV/APP.PROGS/508E b/Ardent/UV/APP.PROGS/508E new file mode 100755 index 00000000..de9307f4 --- /dev/null +++ b/Ardent/UV/APP.PROGS/508E @@ -0,0 +1,63 @@ +SUBROUTINE U508E(ANS,STATUS,DATA,TYPE) +******************************************************************************* +* +* 508E - LIST CONTENTS OF A RECORD SUBROUTINE +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description......................................... +* 10/14/98 23801 SAP Change copyrights. +* 07/25/88 - - Maintenence log purged at 5.2.1, see release 5.1.10. +* +******************************************************************************* +$OPTIONS DEFAULT + + ANS = '' + STATUS = 0 + OPEN '',@FILENAME TO FILE.NAME ELSE + ABORT 'CAN NOT OPEN ':@FILENAME + END + IF STATUS() = 1 AND @RECORD = '' THEN + READ RECORD FROM FILE.NAME,@ID ELSE RECORD = ''; STATUS = 1 + @RECORD = RECORD + END + PRINT + PRINT @ID + MAX = DCOUNT(@RECORD,@AM) + TERMW = SYSTEM(2) + FOR X = 1 TO MAX + PRTLN = '' + IF X LE 99 THEN + PRTLN = PRTLN:STR('0',3-LEN(X)):X + MARG = 3 + END ELSE + PRTLN = PRTLN:X + MARG = LEN(X) + END + PRTLN = PRTLN:' ' + MARG += 1 + LINE = @RECORD + LMAX = LEN(LINE) + PTR = 1 + CC = TERMW - MARG + LOOP UNTIL LMAX LE 0 DO + IF PTR GT 1 THEN PRTLN = PRTLN:SPACE(MARG) + PRTLN = PRTLN:LINE[PTR,CC] + PRINT PRTLN + PRTLN = '' + PTR += CC + LMAX -= CC + REPEAT + NEXT X + STATUS = 0 + RETURN + END diff --git a/Ardent/UV/APP.PROGS/50BB b/Ardent/UV/APP.PROGS/50BB new file mode 100755 index 00000000..e9928db3 --- /dev/null +++ b/Ardent/UV/APP.PROGS/50BB @@ -0,0 +1,28 @@ +SUBROUTINE U050BB(ANS,STATUS,DATA,TYPE) +******************************************************************************* +* +* 50BB - WHO SUBROUTINE +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description......................................... +* 10/14/98 23801 SAP Change copyrights. +* 07/25/88 - - Maintenence log purged at 5.2.1, see release 5.1.10. +* +******************************************************************************* + +$OPTIONS DEFAULT + +ANS = @USERNO:' ':@WHO +STATUS = 0 +RETURN +END diff --git a/Ardent/UV/APP.PROGS/5114 b/Ardent/UV/APP.PROGS/5114 new file mode 100755 index 00000000..e0fac7d5 --- /dev/null +++ b/Ardent/UV/APP.PROGS/5114 @@ -0,0 +1,142 @@ +subroutine U5114( Resultat, Status, Long ) +******************************************************************************* +* +* Saisie de caracteres avec caractere de fin de saisie +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description......................................... +* 10/14/98 23801 SAP Change copyrights. +* 08/18/96 18335 MAA Added new code for port of 9 to Siemens Nixdorf. +* 01/14/91 7930 JWT Added new Ucode for Siemens/Nixdorf +* 17/07/89 - BHX creation du source +* 26/09/89 - HBI Ajout test ECHO ON/OFF +* 10/09/90 - BHX Abandon de PTERM => TTYGET / TTYSET +* +******************************************************************************* +* +$INCLUDE UNIVERSE.INCLUDE TTY +$INCLUDE UNIVERSE.INCLUDE DEF.USERS +$INCLUDE UNIVERSE.INCLUDE TERMINFO +*** si longueur egale a zero saisir un seul caractere : +IF Long = 0 THEN + TTYGET tty$ ELSE Status = 1 ; RETURN + SAVEICRNL=CRMODE.ICRNL + CRMODE.ICRNL = 0 + TTYSET tty$ ELSE Status = 1 ; RETURN +10 Command = KEYIN() ; IF Command # Exec AND Command # Envoi THEN GOTO 10 + Status = 0 + CRMODE.ICRNL=SAVEICRNL + TTYSET tty$ ELSE Status = 1 ; RETURN + RETURN +END +*** validiter de la demande +IF (NOT( NUM( Long )) OR Long < 0 OR Long > 500) THEN + Status = 1 +*** demande valide +END +ELSE + UnCarAGauche = KEY.MOVE.CURSOR.LEFT + Status = 0 + Resultat = "" + Nombre = 0 + TTYGET tty$ ELSE Status = 1 ; RETURN + SAVEICRNL=CRMODE.ICRNL + CRMODE.ICRNL = 0 + TTYSET tty$ ELSE Status = 1 ; RETURN +******** +debut: * +******** +*** saisie d'un caractere quelconque de CHAR(0) a CHAR(255) + Command = KEYIN() + IF CASE.INVERT THEN +*** Inversion upcase/downcase + IF Command >= 'a' AND Command <= 'z' THEN + Command = CHAR(SEQ(Command)-32) + END ELSE + IF Command >= 'A' AND Command <= 'Z' THEN + Command = CHAR(SEQ(Command)+32) + END + END + END +*** test du caractere recu + Flag = 0 + BEGIN CASE +*** fleche a gauche (^Y, basckspace sans effacement?) + CASE Command = KEY.MOVE.CURSOR.LEFT + Flag = 4 +*** exec (^J) + CASE Command = Exec + Flag = 1 +*** abandon (^N) + CASE Command = Abandon + Flag = 1 +*** sortie (^W) + CASE Command = Sortie + Flag = 1 +*** vider (^L) + CASE Command = Vider + Flag = 1 +*** envoi (^M) + CASE Command = Envoi + Flag = 1 +*** fleche en haut (^Z) + CASE Command = KEY.MOVE.CURSOR.UP + Flag = 1 +*** fleche en bas (^K) + CASE Command = KEY.MOVE.CURSOR.DOWN + Flag = 1 +*** IMP ECRAN (^S, a ignorer!!!) + CASE Command = ImpEcran + Flag = 9 + END CASE +*** si caractere de controle autre que ceux prevu, l'absorber + IF (Command < CHAR(32) OR Command > CHAR(249)) THEN + IF Flag = 0 OR Flag = 9 THEN + GOTO debut + END + END +*** si backspace + IF Flag = 4 THEN + IF Nombre = 0 THEN + PRINT BELL: + END ELSE + Nombre = Nombre - 1 + Command = "" + PRINT UnCarAGauche:" ":UnCarAGauche: + Resultat = Resultat[1,LEN(Resultat)-1] + END + END ELSE +*** si longueur atteinte faire beep + IF Nombre = Long AND Flag # 1 THEN + PRINT BELL: + END ELSE + Nombre = Nombre + 1 +*** echo +*** Test ECHO ON/OFF + ResulImp="" + IF(SYSTEM(24))THEN ResulImp=Command + IF Flag = 0 THEN PRINT ResulImp: +*** cumuler le resultat saisi + Resultat = Resultat:Command + IF Flag = 1 THEN GOTO fin + END + END + GOTO debut + END +******* +fin : * +******* + CRMODE.ICRNL=SAVEICRNL + TTYSET tty$ ELSE Status = 1 ; RETURN + RETURN +END diff --git a/Ardent/UV/APP.PROGS/534E b/Ardent/UV/APP.PROGS/534E new file mode 100755 index 00000000..f0277c57 --- /dev/null +++ b/Ardent/UV/APP.PROGS/534E @@ -0,0 +1,97 @@ +subroutine U534E( Resultat, Status, Delai ) +******************************************************************************* +* +* input a single character on a timeout +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description......................................... +* 10/14/98 23801 SAP Change copyrights. +* 08/18/96 18335 MAA Added new code to port 9 to Siemens Nixdorf. +* 03/25/94 12694 GMH Rewrote to avoid locks +* 01/14/91 7930 JWT Added new Ucode for Siemens/Nixdorf +* 17/07/89 - BHX creation du source +* 05/09/89 - HBI test ECHO ON/OFF +* 10/09/90 - BHX Abandon de PTERM => TTYGET / TTYSET +* +******************************************************************************* +* +$INCLUDE UNIVERSE.INCLUDE TTY + Status = 0 ;* returns 1 on error, 0 otherwise + Resultat = "" ;* character returned from user exit + Reset = 0 ;* 1 if ICRNL should be reenabled on exit + Iterations = Delai ;* delay iterations. Delai specifies the number of + ;* 1/10th second itervals to wait for a keystroke +! +* Disable ICRNL mode +! + ttyget tty$ THEN + IF CRMODE.ICRNL # 0 THEN + CRMODE.ICRNL = 0 ;* disable only if not already + ttyset tty$ THEN Reset = 1 ELSE Status = 1 + end + END ELSE + Status = 1 + END +! +* Did TTYGET/TTYSET fail? +! + IF Status THEN return +! +* Check for echo enable/disable and display prompt +! + EchoON=SYSTEM(24) + PRINT (IF EchoON THEN SYSTEM(26) ELSE ""): +! +* If no delay, then just return type-ahead character +! + loop + * check for char in typeahead buffer + INPUT Command, -1 + IF Command THEN + * Assign typeahead character + Resultat = keyin() + END + until Iterations <= 0 or Resultat # "" do + nap 100 ;* sleep for 1/10th second + Iterations -= 1 ;* decrement iteration counter + repeat +! +* Convert +! + IF CASE.INVERT THEN + IF Resultat >= 'a' AND Resultat <= 'z' THEN + Resultat = CHAR(SEQ(Resultat)-32) + END ELSE + IF Resultat >= 'A' AND Resultat <= 'Z' THEN + Resultat = CHAR(SEQ(Resultat)+32) + END + END + END +! +* If char is printable, then do +! + IF Resultat > CHAR(31) AND Resultat < CHAR(127) THEN + PRINT (IF EchoON THEN Resultat ELSE ""): + END +! +* Reset ICRNL mode +! + if Reset then + CRMODE.ICRNL = 1 + ttyset tty$ ELSE Status = 1 + end +! +* return +! +RETURN +END diff --git a/Ardent/UV/APP.PROGS/6072 b/Ardent/UV/APP.PROGS/6072 new file mode 100755 index 00000000..e994ff1f --- /dev/null +++ b/Ardent/UV/APP.PROGS/6072 @@ -0,0 +1,40 @@ +SUBROUTINE U6072(ANS,STATUS,DATA,TYPE) +******************************************************************************* +* +* 6072 - SET PTERM INPUTCTL TCL.RESET +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description......................................... +* 10/14/98 23801 SAP Change copyrights. +* 07/26/90 6272 JWT Add U6072 per Ken Pike of Ultimate +* +******************************************************************************* + +$OPTIONS DEFAULT +$INCLUDE UNIVERSE.INCLUDE TTY + +TTYGET tty$ +THEN + CC.CCDEL = 2 + TTYSET tty$ + THEN + ANS = "" + STATUS = 0 + RETURN + END +END +ANS = DATA +STATUS = 1 +RETURN + +END diff --git a/Ardent/UV/APP.PROGS/60BB b/Ardent/UV/APP.PROGS/60BB new file mode 100755 index 00000000..9656d6cb --- /dev/null +++ b/Ardent/UV/APP.PROGS/60BB @@ -0,0 +1,28 @@ +SUBROUTINE U060BB(ANS,STATUS,DATA,TYPE) +******************************************************************************* +* +* 60BB - WHO SUBROUTINE +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description......................................... +* 10/14/98 23801 SAP Change copyrights. +* 07/25/88 - - Maintenence log purged at 5.2.1, see release 5.1.10. +* +******************************************************************************* + +$OPTIONS DEFAULT + +ANS = @WHO +STATUS = 0 +RETURN +END diff --git a/Ardent/UV/APP.PROGS/60E0 b/Ardent/UV/APP.PROGS/60E0 new file mode 100755 index 00000000..978dbbd1 --- /dev/null +++ b/Ardent/UV/APP.PROGS/60E0 @@ -0,0 +1,28 @@ +SUBROUTINE U060E0(ANS,STATUS,DATA,TYPE) +******************************************************************************* +* +* 60E0 - PAGE WIDTH SUBROUTINE +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description......................................... +* 10/14/98 23801 SAP Change copyrights. +* 07/25/88 - - Maintenence log purged at 5.2.1, see release 5.1.10. +* +******************************************************************************* + +$OPTIONS DEFAULT + +ANS = SYSTEM(2) +STATUS = 0 +RETURN +END diff --git a/Ardent/UV/APP.PROGS/61A2 b/Ardent/UV/APP.PROGS/61A2 new file mode 100755 index 00000000..cc91ab19 --- /dev/null +++ b/Ardent/UV/APP.PROGS/61A2 @@ -0,0 +1,29 @@ +subroutine U61A2(proc, ibn, pib, sib, ip, obn, pob, sob) +******************************************************************************* +* +* U61A2 HUSH +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description......................................... +* 10/14/98 23801 SAP Change copyrights. +* 07/25/88 - - Maintenence log purged at 5.2.1, see release 5.1.10. +* +******************************************************************************* +* U61A2 HUSH +* toggle terminal output +******************************************************************************* + + execute "P" + + return + END diff --git a/Ardent/UV/APP.PROGS/70E0 b/Ardent/UV/APP.PROGS/70E0 new file mode 100755 index 00000000..5ab997e6 --- /dev/null +++ b/Ardent/UV/APP.PROGS/70E0 @@ -0,0 +1,29 @@ +SUBROUTINE U070E0(ANS,STATUS,DATA,TYPE) +******************************************************************************* +* +* 70E0 - ECHO ON SUBROUTINE +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description......................................... +* 10/14/98 23801 SAP Change copyrights. +* 07/25/88 - - Maintenence log purged at 5.2.1, see release 5.1.10. +* +******************************************************************************* + +$OPTIONS DEFAULT + +ANS = '' +ECHO ON +STATUS = 0 +RETURN +END diff --git a/Ardent/UV/APP.PROGS/7201 b/Ardent/UV/APP.PROGS/7201 new file mode 100755 index 00000000..a8973d03 --- /dev/null +++ b/Ardent/UV/APP.PROGS/7201 @@ -0,0 +1,28 @@ +SUBROUTINE U07201(ANS,STATUS,DATA,TYPE) +******************************************************************************* +* +* 7201 - CHECK TYPE AHEAD SUBROUTINE +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description......................................... +* 10/14/98 23801 SAP Change copyrights. +* 07/25/88 - - Maintenence log purged at 5.2.1, see release 5.1.10. +* +******************************************************************************* + +$OPTIONS DEFAULT + +INPUT ANS, -1 +STATUS = 0 +RETURN +END diff --git a/Ardent/UV/APP.PROGS/80E0 b/Ardent/UV/APP.PROGS/80E0 new file mode 100755 index 00000000..b9353f57 --- /dev/null +++ b/Ardent/UV/APP.PROGS/80E0 @@ -0,0 +1,29 @@ +SUBROUTINE U080E0(ANS,STATUS,DATA,TYPE) +******************************************************************************* +* +* 80E0 - ECHO OFF SUBROUTINE +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description......................................... +* 10/14/98 23801 SAP Change copyrights. +* 07/25/88 - - Maintenence log purged at 5.2.1, see release 5.1.10. +* +******************************************************************************* + +$OPTIONS DEFAULT + +ANS = '' +ECHO OFF +STATUS = 0 +RETURN +END diff --git a/Ardent/UV/APP.PROGS/81F5 b/Ardent/UV/APP.PROGS/81F5 new file mode 100755 index 00000000..69e63188 --- /dev/null +++ b/Ardent/UV/APP.PROGS/81F5 @@ -0,0 +1,28 @@ +SUBROUTINE U81F5(ANS,STATUS,DATA,TYPE) +******************************************************************************* +* +* 815F - SUBROUTINE TO RETURN USER NUMBER +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description......................................... +* 10/14/98 23801 SAP Change copyrights. +* 07/25/88 - - Maintenence log purged at 5.2.1, see release 5.1.10. +* +******************************************************************************* +$OPTIONS DEFAULT + + ANS = '' + STATUS = 0 + ANS = @USER.NO + RETURN + END diff --git a/Ardent/UV/APP.PROGS/9072 b/Ardent/UV/APP.PROGS/9072 new file mode 100755 index 00000000..a56815c8 --- /dev/null +++ b/Ardent/UV/APP.PROGS/9072 @@ -0,0 +1,40 @@ +SUBROUTINE U9072(ANS,STATUS,DATA,TYPE) +******************************************************************************* +* +* 9072 - SET PTERM INPUTCTL ON +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description......................................... +* 10/14/98 23801 SAP Change copyrights. +* 07/26/90 6272 JWT Add U9072 per Ken Pike of Ultimate +* +******************************************************************************* + +$OPTIONS DEFAULT +$INCLUDE UNIVERSE.INCLUDE TTY + +TTYGET tty$ +THEN + CC.CCDEL = 0 + TTYSET tty$ + THEN + ANS = "" + STATUS = 0 + RETURN + END +END +ANS = DATA +STATUS = 1 +RETURN + +END diff --git a/Ardent/UV/APP.PROGS/A1A2 b/Ardent/UV/APP.PROGS/A1A2 new file mode 100755 index 00000000..72d8e858 --- /dev/null +++ b/Ardent/UV/APP.PROGS/A1A2 @@ -0,0 +1,28 @@ +SUBROUTINE UA1A2(proc, ibn, pib, sib, ip, obn, pob, sob) +******************************************************************************* +* +* PCLIP UA1A2 +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description......................................... +* 10/14/98 23801 SAP Change copyrights. +* 07/25/88 - - Maintenence log purged at 5.2.1, see release 5.1.10. +* +******************************************************************************* +* UA1A2 PCLIP +* CLIP ONE PARAMETER OFF OF THE PRIMARY INPUT BUFFER EACH TIME THIS IS CALLED +******************************************************************************* + + DEL pib + RETURN + END diff --git a/Ardent/UV/APP.PROGS/ACCT.DUMP b/Ardent/UV/APP.PROGS/ACCT.DUMP new file mode 100755 index 00000000..4e1474d0 --- /dev/null +++ b/Ardent/UV/APP.PROGS/ACCT.DUMP @@ -0,0 +1,650 @@ +****************************************************************************** +* +* Program to provide a means of dumping uniVerse files to tape +* and loading these files on a Pick or Information system +* +* ACCT.DUMP Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +****************************************************************************** +* +* Date.... GTAR# WHO Description......................................... +* 07/25/88 - - Maintenence log purged at 5.2.1, see release 5.1.10. +* +****************************************************************************** +$OPTIONS DEFAULT +$INCLUDE UNIVERSE.INCLUDE FILENAMES.H + +MAX.NAME = 12 + +DATA.START = MAX.NAME - 3 +DATA.LIMIT = MAX.NAME + +open '','VOC' to voc.file else print 'Cannot open VOC file'; stop +savemod = inmat() +savetype = status() +open '','NEWACC' to newacc.file else print 'Cannot open NEWACC file'; stop +open '','VOCLIB' to voclib.file else print 'Cannot open VOCLIB file'; stop + +x = 0 +flavors = '' +pick.dict = 0 +pick.flag = 0 +part.voc = 0 +dfnames = '' +fmods = '' +ftypes = '' +lfnames = '' +pathnames = '' +fno = 0 +lno = 0 + +* look for format keyword * + +acct.format = 0 +dim line(6) +matparse line from trim(@sentence),' ' +i = 2 +loop +until line(i) = '' or i = 6 do + keyword = upcase(line(i)) + read item from voc.file,keyword then + if item<1> = 'K' then + begin case + case item<2> = 205 + if acct.format = 0 then + acct.format = 1; * REALITY.FORMAT * + dump.format = keyword + + end else + print 'Account format keyword previously specified' + stop + end + case item<2> = 206 + if acct.format = 0 then + acct.format = 2; * INFORMATION.FORMAT * + dump.format = keyword + end else + print 'Account format keyword previously specified' + stop + end + case item<2> = 211 + if acct.format = 0 then + acct.format = 3; * PICK.FORMAT * + dump.format = keyword + end else + print 'Account format keyword previously specified' + stop + end + end case + end + end +i += 1 +repeat + +* get valid account types * + +openpath UV.NEWACC to file then + sselect file to 1 +10* + readnext fid from 1 else goto 20 + x += 1 + flavors = fid + goto 10 +end else + print 'Unable to open ':UV.NEWACC:' file' + stop +end + +20* + + +* get account type * + +readv uv.type from voc.file,'RELLEVEL',3 else uv.type = '' +if uv.type = '' then +30* + msg = 'Enter uniVerse account type ' + print msg: + input uv.type + uv.type = upcase(uv.type) + if uv.type = '' or uv.type = 'QUIT' then print 'ACCT.DUMP aborted!'; stop + if uv.type = 'IDEAL' then uv.type = 'NEWACC' +end + +fnd = 0 +for i = 1 to x while fnd = 0 + if trim(uv.type) = flavors then fnd = 1 +next x +40* +if fnd = 0 then + print 'Type "':uv.type:'"':' is not a valid uniVerse account type' + print + print 'Valid account types are: ' + for i = 1 to 32 until flavors = '' + print flavors + next i + goto 30 +end + +* default to current account type, if format keyword is not specified * + +if acct.format = 0 then + if uv.type = 'PICK' then + acct.format = 3; dump.format = 'PICK.FORMAT' + end else + if uv.type = 'REALITY' then + acct.format = 1; dump.format = 'REALITY.FORMAT' + end else + acct.format = 2; dump.format = 'INFORMATION.FORMAT' + end + end +end + +print + +* prompt for voc file handling * + +msg = "Do you want to dump 'ALL' VOC entries or just those 'NOT' in NEWACC? (A/N)" +50* +print msg: +input ans +ans = upcase(ans) +if ans = 'QUIT' then print 'ACCT.DUMP aborted!'; stop +if ans # 'A' and ans # 'N' then goto 50 +if ans # 'A' then part.voc = 1 + +* prompt for dictionary file handling * + +if acct.format # 2 then +60* + msg = "Do you want to dump the 'DICT' or the 'PDICT' files? (D/P)" + print msg: + input ans + ans = upcase(ans) + if ans = 'QUIT' then print 'ACCT.DUMP aborted!'; stop + if ans # 'D' and ans # 'P' then goto 60 + if ans = 'P' then pick.dict = 1 +end + +* check VOCLIB file for ACCT.DUMP * + +print + +dump.name = 'ACCT.DUMP' +read item from voclib.file,dump.name then +70* + msg = dump.name:' exists in VOCLIB file. OK to overwrite? (Y/N)' + print msg: + input ans + ans = upcase(ans) + if ans = 'QUIT' then print 'ACCT.DUMP aborted!'; stop + if ans # 'Y' and ans # 'N' then goto 70 + if ans # 'Y' then print 'ACCT.DUMP aborted!'; stop +end + +* check VOC file for ACCT.DUMP * + +read item from voc.file,dump.name then +80* + msg = dump.name:' exists in VOC file. OK to overwrite? (Y/N)' + print msg: + input ans + ans = upcase(ans) + if ans = 'QUIT' then print 'ACCT.DUMP aborted!'; stop + if ans # 'Y' and ans # 'N' then goto 80 + if ans # 'Y' then print 'ACCT.DUMP aborted!'; stop +end + +* check VOCLIB file for ACCT.LOAD * + +load.name = 'ACCT.LOAD' +read item from voclib.file,load.name then +90* + msg = load.name:' exists in VOCLIB file. OK to overwrite? (Y/N)' + print msg: + input ans + ans = upcase(ans) + if ans = 'QUIT' then print 'ACCT.DUMP aborted!'; stop + if ans # 'Y' and ans # 'N' then goto 90 + if ans # 'Y' then print 'ACCT.DUMP aborted!'; stop +end + +* get VOC entries to dump * + +voc.list = '&&ACCT.DUMP':@USERNO +if part.voc = 0 then + perform 'SSELECT VOC' + stmt = 'SAVE.LIST ':voc.list + perform stmt +end else + perform 'SSELECT VOC' + perform 'NSELECT NEWACC' + stmt = 'SAVE.LIST ':voc.list + perform stmt +end + +* handle VOC file * + +read rec from voc.file,'VOC' else + print "Cannot read VOC record 'VOC'" + stop +end +path = rec<3> +if path # '' then ins path before pathnames<-1> +mod = 1 +type = 3 +fno += 1 +lfnames = 'DICT UV.VOC' +dfnames = '' +fmods = mod +ftypes = type +path = rec<2> +if path # '' then ins path before pathnames<-1> +mod = savemod +type = savetype +fno += 1 +lfnames = 'DATA UV.VOC' +dfnames = '' +fmods = mod +ftypes = type + + +* get filenames to dump * + +stmt = \SSELECT VOC BY F3 WITH TYPE EQ "F" AND F2 NOT.MATCHING ".../..."\ +stmt := ' AND F2 NOT.MATCHING "...\..."' +stmt := \ AND F2 NE "."\ +stmt := \ AND @ID NOT.MATCHING "...'.O'"\ +stmt := \ AND @ID NE "VOC"\ +stmt := \ TO 1\ +perform stmt + +100* +readnext id from 1 else goto 200 +read rec from voc.file,id else + print 'Warning - Cannot read VOC record ':id + goto 100 +end + +* get DICT filename * + +no.pdict = 0 +path = rec<3> +dictword = 'DICT ' +if pick.dict then + if rec<5> # '' then path = rec<5>; dictword = 'PDICT ' else no.pdict = 1 +end +if path # '' then + * ignore remote dict files * + if path matches ".../..." or path matches "...\..." then goto 105 + * ignore null file names - query will not handle * + if path = "D_?" or path = "P_?" then goto 105 + gosub eftoif + savepath = path + path = path[3,999] + gosub matchid + path = savepath + if match.flag then + fnd = 1 + locate path in pathnames setting val else fnd = 0 + if fnd = 0 then + open dictword,id then + mod = inmat() + type = status() + ins path before pathnames<-1> + name = dictword:id + if type = 1 and acct.format # 2 then gosub type.chk + fno += 1 + if no.pdict then dfnames = '' else dfnames = name + lfnames = 'DICT ':id + fmods = mod + ftypes = type + close file + end else + name = dictword:id + print 'WARNING - Unable to open ':name + end + end else + *** must be a dict qpointer *** + end + end else + *** must be a dict qpointer *** + end +end + +105* + +* get DATA filename(s) * + +path = rec<2> +if path # '' and path # rec<3> then + * ignore null filename - query will not handle * + if path = "?" then goto 120 + gosub eftoif + gosub matchid + * handle multi-level data files * + if upcase(rec<4>[1,1]) = 'M' then + if match.flag then + fnd = 1 + locate path in pathnames setting val else fnd = 0 + if fnd = 0 then + if rec<3> = '' then + print 'WARNING - Ignoring file ':id:' - data file without a dictionary file' + goto 120 + end + ins path before pathnames<-1> + openpath path to file then + sselect file to 2 +110* + readnext fid from 2 else goto 120 + open '',id:',':fid to file then + if acct.format = 2 then + print 'WARNING - ':id:',':fid:' is not a valid name on Prime Information' + end + mod = inmat() + type = status() + name = 'DATA ':id:',':fid + if type = 1 and acct.format # 2 then gosub type.chk + fno += 1 + dfnames = name + lfnames = name + fmods = mod + ftypes = type + close file + end else + name = 'DATA ':id:',':fid + print 'WARNING - Unable to open ':name + end + goto 110 + end else + print 'WARNING - Unable to open path ':path + end + end else + *** must be a multi level qpointer *** + end + end + end else + * handle regular data files * + if match.flag then + fnd = 1 + locate path in pathnames setting val else fnd = 0 + if fnd = 0 then + if rec<3> = '' then + print 'WARNING - Ignoring file ':id:' - data file without a dictionary file' + goto 120 + end + open '',id to file then + mod = inmat() + type = status() + ins path before pathnames<-1> + name = 'DATA ':id + if type = 1 and acct.format # 2 then gosub type.chk + fno += 1 + dfnames = name + lfnames = name + fmods = mod + ftypes = type + close file + end else + name = 'DATA ':id + print 'WARNING - Unable to open ':name + end + end else + *** must be a data qpointer *** + end + end else + ** must be a data qpointer *** + end + end +end + +120* + +goto 100 + +200* + +print +print 'The following files will dumped to tape:' +print +for j = 1 to fno + if dfnames # '' then print dfnames +next j + +210* + +msg = "OK to continue? (Y/N)" +print msg: +input ans +ans = upcase(ans) +if ans = 'QUIT' then print 'ACCT.DUMP aborted!'; stop +if ans # 'Y' and ans # 'N' then goto 210 +if ans # 'Y' then print 'ACCT.DUMP aborted!'; stop + +* setup ACCT.LOAD * + +sep = 1 +if acct.format = 2 then sep = 4 +dfnames<2> = 'DATA UV.VOC' + +pa = '' +lno = 0 +if acct.format = 2 then + lno += 1 + pa = 'PA' + lno += 1 + pa = 'T.ATT' + lno += 1 + pa = 'T.REW' + lno += 1 + pa = 'T.FWD' +end else + lno += 1 + pa = 'PQ' + lno += 1 + pa = 'H T-ATT (8192)' + lno += 1 + pa = 'P' + lno += 1 + pa = 'H T-REW' + lno += 1 + pa = 'P' + lno += 1 + pa = 'H T-FWD' + lno += 1 + pa = 'P' +end + +for j = 1 to fno + if acct.format = 2 then + cmd = 'CREATE.FILE ' + cmd := lfnames + cmd := ' ' + cmd := ftypes + if ftypes # 1 then + cmd := ' ' + cmd := fmods + cmd := ' ' + cmd := sep + end + lno += 1 + pa = cmd + if dfnames # '' then + name = lfnames + if name[1,4] = 'DATA' then name = name[6,999999] + cmd = 'T.LOAD ' + cmd := name + lno += 1 + pa = cmd + end + end else + cmd = 'H CREATE-FILE (' + cmd := lfnames + cmd := ' ' + cmd := fmods + cmd := ',' + cmd := sep + lno += 1 + pa = cmd + lno += 1 + pa = 'P' + if dfnames # '' then + name = lfnames + if name[1,4] = 'DATA' then name = name[6,999999] + cmd = 'H T-LOAD ' + cmd := name + lno += 1 + pa = cmd + lno += 1 + pa = 'P' + end + end +next j + +if acct.format = 2 then + cmd = 'T.DET' + lno += 1 + pa = cmd +end else + cmd = 'H T-DET' + lno += 1 + pa = cmd + cmd = 'P' + lno += 1 + pa = cmd +end +write pa on voclib.file,load.name + +* setup ACCT.DUMP * + +dfnames<2> = '' + +pa = '' +lno = 0 +lno += 1 +pa = 'PA' +lno += 1 +pa = 'T.ATT' +if acct.format # 2 then pa = pa:' BLK 8192' +lno += 1 +pa = "T.DUMP VOCLIB '":load.name:"' ":dump.format +lno += 1 +pa = 'GET.LIST ':voc.list +lno += 1 +pa = 'T.DUMP VOC ':dump.format + +for j = 1 to fno + name = dfnames + if name # '' then + if name[1,4] = 'DATA' then name = name[6,999999] + lno += 1 + pa = 'T.DUMP ':name:' ':dump.format + end +next j +lno += 1 +pa = 'T.DET' +write pa on voclib.file,dump.name + +pa = '' +pa<1> = 'R' +pa<2> = 'VOCLIB' +pa<3> = dump.name +write pa on voc.file,dump.name + +* now ready to dump files * + +perform dump.name + +print "ACCT.DUMP completed" +stop + +* subroutine to calc modulo for type 1 files * + +type.chk: + +cmd = 'COUNT ' +if name[1,4] = 'DATA' then + cmd := name[6,999999] +end else + cmd := name +end +perform cmd +mod = @SYSTEM.RETURN.CODE +if mod = 0 then mod = 1 else gosub prime.chk + +return + + +* subroutine to make modulo a prime number * + +prime.chk: + +pno = mod +if pno < 0 then pno = 1 +if (pno > 2 and mod(pno,2) = 0) then pno += 1 +ptest: +limit = sqrt(pno + 0.0) + .5 +for test = 3 to limit + if mod(pno,test) = 0 then + pno += 2 + goto ptest + end +next test +mod = pno + +return + +* subroutine to see if pathname matches record id * + +matchid: + +match.flag = 0 + +if uid = path then + match.flag = 1 +end else + if len(uid) > MAX.NAME then + if uid[1,DATA.START] = path[1,DATA.START] then + if num(path[DATA.START+1,DATA.LIMIT-DATA.START]) then + match.flag = 1 + end + end + end +end + +return + +* subroutine to convert record id to unix filename * + +eftoif: + +if id = '' then + uid = '?' +end else + if id[1,1] = '.' then + uid = '?.'; m = 2 + end else + uid = ''; m = 1 + end + l = len(id) + for j = m to l + c = id[j,1] + begin case + case c = '?'; uid := '??' + case c = '/'; uid := '?\' + case c = '\'; uid := '?\' + case c = char(0); uid := '?0' + case 1; uid := c + end case + next j +end + +return + +end + diff --git a/Ardent/UV/APP.PROGS/ACCT.RESTORE b/Ardent/UV/APP.PROGS/ACCT.RESTORE new file mode 100755 index 00000000..a9348966 --- /dev/null +++ b/Ardent/UV/APP.PROGS/ACCT.RESTORE @@ -0,0 +1,756 @@ +$INCLUDE UNIVERSE.INCLUDE MTF.INCL.H +$INCLUDE UNIVERSE.INCLUDE MACHINE.NAME +$INCLUDE UNIVERSE.INCLUDE FILENAMES.H +****************************************************************************** +* +* Routine to handle Account Importation +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description........................................ +* 10/14/98 23801 SAP Change copyrights. +* 08/18/96 18335 MAA Ported release 9 to the SNI +* 06/28/96 16464 DJL Allow restore from linked device +* 04/16/96 18292 AGM Change OS.TYPE for NT +* 02/27/96 17917 JJV Port to NT. +* 02/24/94 10694 WLG Made SNI changes for IN2 tape acct import. +* 02/10/94 11724 JWF Fixed tape corruption problem caused by closeseq +* 04/30/93 10271 DTM Allowed multiple acct. save format for reality flavor +* 11/06/92 8137 PVW Allow restoring tape image from disk +* 05/15/91 6444 LPC Add -m option to create REALITY flavored accounts +* 05/13/91 8345 DTM changed print to tprint +* 3/19/91 7673 DTM Added support for F.4 key +* 3/14/91 7673 DTM Made changes to CHOICE.BOX.B +* 1/9/91 7673 DTM Final changes for internationalization and things +* 11/27/90 7403 DTM Initial programming +* +******************************************************************************* +* This subroutine will accept as an argument the value of the operation +* to perform. It can perform the following functions on spooler jobs: +****************************************************************************** +id = "%W%" +****************************************************************************** +* Various Prompts and Help string values +****************************************************************************** +equ PRMPT.LOC to 2 +equ SHRT.HELP to 4 +equ LONG.HELP to 5 +****************************************************************************** +* Various other variables +****************************************************************************** +equ PAINT to 1 ;* flag to paint forms +equ Default to 1 +****************************************************************************** +* Strings representing shell scripts to be executed and files used +****************************************************************************** +equ device.record to "&DEVICE&" +equ account.record to "UV.ACCOUNT" + +temp=NULL +CALL *ISUSER.B(0,temp) +IF temp=0 THEN + TPRINT UVREADMSG(071000,"") + SLEEP 3 + STOP +END +DECLARE GCI access +user.file.open=FALSE +device.file.open=FALSE + +GOSUB init.messages +GOSUB init.files ;* Initialize /usr/spool/uv/sp.config +GOSUB init.vars ;* initialize local variables +GOSUB init.form ;* Initialize forms to be used +GOSUB init.menu +****************************************************************************** +* In this section, we draw the first screen, print the menu bar and help +* areas, and put up the first title and form to fill out. +****************************************************************************** +CALL *DRAW.SCRN.B(UVREADMSG(073120,""),1) +CALL *HELP.PRINT.B(UVREADMSG(073009,""),2) +CALL *PUT.FORM.B(form.size,form,temp.form,PRMPT,PAINT) +CALL *MNU.BAR.PR.B(Menu.Bar,1) + +****************************************************************************** +* Starting point for routines actual activity. Paint help message and +* continue +****************************************************************************** +help.loop: + +CALL *HELP.PRINT.B(form,1) + +****************************************************************************** +* Starting point for actual data input. Here we position the cursor to the +* place of the secondary prompt and get the input character, which is returned +* in special, if a special character was encountered, or in temp, is data +* was entered. +****************************************************************************** +input.loop: + +TPRINT form: ;* position cursor +temp=temp.form +CALL *CINPUT.B(SEC.PRMPT,temp,special,form,form) + +****************************************************************************** +* First section handles all the special characters. +****************************************************************************** +IF special # 0 THEN ;* if special character encountered + BEGIN CASE +****************************************************************************** +* Up arrow was pressed. +****************************************************************************** + CASE special = UP.ARROW ;* Up arrow was pressed + TPRINT form:PRMPT: + IF temp.form # NULL THEN + TPRINT temp.form: + TPRINT STR(SPACE,form-LEN(temp.form)) + END + form.line-=1 + IF form.line < 1 THEN + form.line=form.size + END + GOTO help.loop ;* get more input +****************************************************************************** +* Down arrow was pressed. +****************************************************************************** + CASE special = DOWN.ARROW ;* Down arrow was pressed + TPRINT form:PRMPT: + IF temp.form # NULL THEN + TPRINT temp.form: + TPRINT STR(SPACE,form-LEN(temp.form)) + END + form.line+=1 + IF form.line > form.size THEN + form.line=1 + END + GOTO help.loop ;* get more input +****************************************************************************** +* Function key F1 was pushed. This key is used to display more involved +* Help messages +****************************************************************************** + CASE special = F.1 + CALL *HELP.PRINT.B(form,3) + GOTO input.loop ;* get more input +****************************************************************************** +* Escape key pressed. This is the systems signal to return to the calling +* procedure. First clear the screen however +****************************************************************************** + CASE special = ESCAPE ;* escape was pressed + STOP @(-1) + CASE special = F.4 + temp="*" + GOTO new.enter + CASE special = F.10 + action.value=1 + CALL *DO.MNU.BAR.B(Menu.Bar,action.value,form.size,form,temp.form) + BEGIN CASE + CASE action.value = 1 + STOP @(-1) + CASE action.value = 2 + STOP @(-1) + CASE action.value = 3 + message=UVREADMSG(073123,"") + CONVERT @FM TO " " IN message + CALL *HELP.BOX.B(3,10,60,message) + CASE action.value = 4 + message=UVREADMSG(076001,"") + CONVERT @FM TO " " IN message + CALL *HELP.BOX.B(3,10,60,message) + CASE action.value = 5 + CALL *HELP.BOX.B(3,10,45,UVREADMSG(076000,"")) + END CASE + CALL *PUT.FORM.B(form.size,form,temp.form,PRMPT,PAINT) + GOTO help.loop + CASE Default + GOTO help.loop + END CASE ;* end of case +END ;* end of if statement + +****************************************************************************** +* If we reach here, we must have had data input, which is returned from +* *NINPUT in the variable temp. Therefore, process it and execute the +* desired operation. +****************************************************************************** +ELSE ;* DAVE +new.enter: + sel.val=1 + CALL *HELP.PRINT.B(NULL,3) ;* Clears help area + BEGIN CASE + CASE form.line=1 ;* + IF temp=temp.form THEN GOTO jump.spot + IF temp="*" THEN + CALL *HELP.PRINT.B(UVREADMSG(073058,""),3) + CALL *HELP.PRINT.B(help.message,2) + CALL *PTBCODE(fvuv.account,11,sel.val) + CALL *HELP.PRINT.B(NULL,3) + IF sel.val = -1 THEN + temp=NULL + CALL *PUT.FORM.B(form.size,form,temp.form,PRMPT,PAINT) + GOTO help.loop + END + ELSE + temp=sel.val + temp.form=temp + END + CALL *PUT.FORM.B(form.size,form,temp.form,PRMPT,PAINT) + END + IF temp=NULL THEN + CALL *HELP.BOX.B(17,5,50,msg2) + GOTO help.loop + END + + IF OS.TYPE = "MSWIN" THEN + temp = CONVERT( "\", "/", temp ) + END + + temp.directory=temp + parent.directory=temp + + IF temp[1,1] <> "/" AND (OS.TYPE = "UNIX" OR temp MATCH "1A~':/'0X") THEN + READ parent.directory.rec FROM fvuv.account,temp ELSE + READ parent.directory.rec FROM fvuv.account,UPCASE(temp) ELSE + CALL *HELP.BOX.B(5,5,50,msg5) + temp.form=NULL + CALL *PUT.FORM.B(form.size,form,temp.form,PRMPT,PAINT) + GOTO help.loop + END + END + parent.directory=parent.directory.rec<11> + temp.directory=parent.directory + END + IF access(temp.directory,6) THEN + CALL *HELP.BOX.B(5,5,50,Warn:UVREADMSG(073107,temp.directory)) + temp.form=NULL + CALL *PUT.FORM.B(form.size,form,temp.form,PRMPT,PAINT) + GOTO help.loop + END + temp.form=temp.directory + IF temp.directory#temp THEN + temp.form=temp:" ":temp.directory + END + CASE form.line=2 ;* Device name + IF temp=temp.form THEN GOTO jump.spot + IF temp="*" THEN + sel.val=1 + CALL *HELP.PRINT.B(UVREADMSG(073058,""),3) + CALL *HELP.PRINT.B(help.message,2) + CALL *PTBCODE(device.file,2,sel.val) + CALL *HELP.PRINT.B(NULL,3) + IF sel.val=-1 THEN + temp=NULL + CALL *PUT.FORM.B(form.size,form,temp.form,PRMPT,PAINT) + GOTO help.loop + END + ELSE + temp=sel.val + temp.form=temp + END + CALL *PUT.FORM.B(form.size,form,temp.form,PRMPT,PAINT) + END + IF temp=NULL THEN + CALL *HELP.BOX.B(17,5,50,msg2) + GOTO help.loop + END + DEV.REC=NULL + + temp.path=temp + IF temp[1,1] <> "/" THEN + READ DEV.REC FROM device.file,temp THEN + device.pathname=DEV.REC<2> + device.rewind=DEV.REC<6> + device.type=DEV.REC<4> + temp.path=device.pathname + ibs=DEV.REC<16> + temp.form<3>=device.rewind + temp.form<4>=device.type + temp.form<5>=ibs + IF ibs=NULL THEN + form.jump=5 + END + ELSE + form.jump=6 + END + IF device.type="T" OR device.type="DT" THEN + IF ibs=NULL THEN + ibs=8192 + temp.form<5>=ibs + END + END + ELSE IF device.type= "C" or device.type = "F" OR device.type="DC" THEN + IF ibs=NULL THEN + ibs=512 + temp.form<5>=ibs + END + END + END ELSE + READ DEV.REC FROM device.file,UPCASE(temp) THEN + temp=UPCASE(temp) + device.rewind=DEV.REC<6> + temp.form<3>=device.rewind + device.type=DEV.REC<4> + temp.form<4>=device.type + device.pathname=DEV.REC<2> + temp.path=device.pathname + ibs=DEV.REC<16> + temp.form<5>=ibs + IF device.type="T" OR device.type="DT" THEN + IF ibs=NULL THEN + ibs=8192 + temp.form<5>=ibs + END + END + ELSE IF device.type="C" or device.type = "F" OR device.type="DC" THEN + IF ibs=NULL THEN + ibs=512 + temp.form<5>=ibs + END + END + IF ibs=NULL THEN + form.jump=5 + END + ELSE + form.jump=6 + END + END ELSE + CALL *HELP.BOX.B(5,5,50,msg5) + temp.form=NULL + CALL *PUT.FORM.B(form.size,form,temp.form,PRMPT,PAINT) + GOTO help.loop + END + END + END ELSE + CALL *HELP.PRINT.B(NULL,3) + CALL *HELP.PRINT.B(UVREADMSG(073112,""),2) + device.pathname=temp + END + IF OS.TYPE = "UNIX" THEN + EXECUTE OS.EXEC:"'ls -l ":temp.path:"'" CAPTURING OUTPUT + user.permissions = OUTPUT[1,3] + IF user.permissions # "crw" AND user.permissions # "lrw" THEN +NoRewindDevice.Error: + CALL *HELP.BOX.B(5,5,50,Warn:UVREADMSG(073107,temp.path)) + temp.form=NULL + CALL *PUT.FORM.B(form.size,form,temp.form,PRMPT,PAINT) + GOTO help.loop + END + END + device.name=temp + IF device.pathname#temp THEN + temp.form=temp:" ":device.pathname + END + ELSE + temp.form = temp + END + CALL *PUT.FORM.B(form.size,form,temp.form,PRMPT,PAINT) + CASE form.line=3 + IF OS.TYPE = "MSWIN" THEN + temp = CONVERT( "\", "/", temp ) + END + + IF temp="*" THEN GOTO help.loop + IF temp=NULL AND temp.form=NULL THEN + CALL *HELP.BOX.B(5,5,50,msg2) + CALL *PUT.FORM.B(form.size,form,temp.form,PRMPT,PAINT) + GOTO help.loop + END + IF temp=NULL THEN + temp=temp.form + END + IF temp[1,1] <> "/" THEN + CALL *HELP.BOX.B(5,5,50,msg5) + temp.form=NULL + CALL *PUT.FORM.B(form.size,form,temp.form,PRMPT,PAINT) + GOTO help.loop + END + IF access(temp,4) THEN + CALL *HELP.BOX.B(5,5,50,Warn:UVREADMSG(073107,temp)) + temp.form=NULL + CALL *PUT.FORM.B(form.size,form,temp.form,PRMPT,PAINT) + GOTO help.loop + END + device.rewind=temp + temp.form=temp + CASE form.line=4 ;* Enter Device Type + IF temp="*" THEN GOTO help.loop + IF temp=NULL THEN + CALL *HELP.BOX.B(17,5,50,msg2) + GOTO help.loop + END + temp=UPCASE(temp) + IF temp # "T" AND temp # "C" AND temp # "F" AND temp # "DT" AND temp # "DC" + THEN + CALL *HELP.BOX.B(5,5,50,Warn:UVREADMSG(073108,"")) + temp.form=NULL + CALL *PUT.FORM.B(form.size,form,temp.form,PRMPT,PAINT) + GOTO help.loop + END + IF temp="T" OR temp="DT" THEN + IF ibs=NULL THEN + ibs=8192 + temp.form<5>=ibs + END + END + ELSE IF temp="C" or temp = "F" OR temp="DC" THEN + IF ibs=NULL THEN + ibs=512 + temp.form<5>=ibs + END + END + device.type=temp + temp.form=temp + CALL *PUT.FORM.B(form.size,form,temp.form,PRMPT,PAINT) + CASE form.line=5 ;* Enter Block size + IF temp="*" THEN GOTO help.loop + IF temp=NULL THEN + CALL *HELP.BOX.B(17,5,50,msg2) + GOTO help.loop + END + ICONV.TEMP=ICONV(temp,"MD0") + IF STATUS()#0 THEN + CALL *HELP.BOX.B(5,5,50,msg4) + temp.form=NULL + CALL *PUT.FORM.B(form.size,form,temp.form,PRMPT,PAINT) + GOTO help.loop + END + ibs=temp + temp.form = temp + CASE form.line=6 ;* tape type + IF temp="*" THEN GOTO help.loop + IF temp=NULL THEN + CALL *HELP.BOX.B(17,5,50,msg2) + GOTO help.loop + END + temp=UPCASE(temp) + FLAGIN2=0 + MAXINK=0 + + BEGIN CASE + + CASE temp="I" + FLAGIN2="IN8000" + FLAVOR=" -i" + CASE temp="J" + FLAGIN2="IN5000" + CASE temp="K" + FLAGIN2="IN8000" + FLAVOR=" -i" + MAXINK=-1 + CASE temp="L" + FLAGIN2="IN5000" + MAXINK=-1 + CASE temp="P" + FLAVOR="" + CASE temp="M" + FLAVOR=" -m" + form.size = 8 + CALL *PUT.FORM.B(form.size,form,temp.form,PRMPT,PAINT) + CASE Default + CALL *HELP.BOX.B(5,5,50,Warn:UVREADMSG(073109,"")) + temp.form=NULL + CALL *PUT.FORM.B(form.size,form,temp.form,PRMPT,PAINT) + GOTO help.loop + END CASE + tape.type=temp + temp.form=temp + CALL *PUT.FORM.B(form.size,form,temp.form,PRMPT,PAINT) + CASE form.line=7 ;* type 19 files + IF temp="*" THEN GOTO help.loop + IF temp=NULL THEN + CALL *HELP.BOX.B(17,5,50,msg2) + GOTO help.loop + END + temp=UPCASE(temp) + IF temp # "Y" AND temp # "N" THEN + CALL *HELP.BOX.B(5,5,50,Warn:UVREADMSG(073110,"")) + temp.form=NULL + CALL *PUT.FORM.B(form.size,form,temp.form,PRMPT,PAINT) + GOTO help.loop + END + temp.form = temp + type19=temp + CASE form.line = 8 ;* mult.account save format + IF temp="Y" OR temp="y" THEN masf = " -mas" ELSE masf = "" + temp.form = temp + CALL *PUT.FORM.B(form.size,form,temp.form,PRMPT,PAINT) + END CASE +jump.spot: + TPRINT form:PRMPT:temp.form: + TPRINT STR(SPACE,form-LEN(temp.form)): + form.line +=1 + IF form.jump#0 THEN + form.line=form.jump + form.jump=0 + END + IF form.line <= form.size THEN + GOTO help.loop + END + flag=0 + CALL *YES.NO.BOX.B(17,UVREADMSG(073065,""),flag) + IF flag=1 THEN + form.line=1 + GOTO help.loop + END + IF flag=-1 THEN RETURN + B.array=NULL + B.array<1>=1 + B.array<2>=UVREADMSG(073029,"") + sel.val=1 + CALL *CHOICE.BOX.B(17,3,LEN(msg10)+3,msg10,B.array,sel.val,"") + IF sel.val = -1 THEN + RETURN + END +* commented out for gtar 8137 +* CMD=NULL +* IF device.type="F" THEN +* CMD=UV.BIN:"/acct.restore -a ":device.pathname +* IF type19="Y" THEN CMD = CMD:" -19" +* END +* ELSE + LOOPINK=0 + TPRINT @(-1) + IF MAXINK = -1 THEN + TPRINT UVREADMSG(073128,""): + INPUT MAXINK + MAXINK = MAXINK -1 + END + + IF FLAGIN2 = "IN5000" AND device.type = "DC" THEN + TPRINT UVREADMSG(073129,""): + INPUT NBVOL + END +LOOPK: + + CMD="" + IF FLAGIN2 # 0 THEN + FORWARD.TAPE=DEV.REC<10> + PATHNAME=device.pathname + CMD="tape=":PATHNAME:";" + IF LOOPINK = 0 THEN CMD:= FORWARD.TAPE:";":FORWARD.TAPE:";" ELSE CMD:= FORWARD.TAPE:";" + IF FLAGIN2 = "IN5000" AND device.type = "DC" THEN + CMD:=UV.BIN:"/ddm ":NBVOL + CMD1 = " if=":PATHNAME:" | ":UV.BIN:"/INfilter | ":UV.BIN:"/acct.restore -i -" + CMD := CMD1 + GOTO end.rest + END + END + + CMD := UV.BIN:"/tapein" + CMD := " -p":UV.BIN:"/acct.restore" + CMD := " -f":device.pathname + CMD := " -g":device.rewind + CMD := " -b":ibs + CMD := FLAVOR + CMD := masf + if type19 = "Y" then CMD := " -t" + if device.type = "C" or device.type = "DC" then CMD := " -c" + if not(ImageFromDisk) then CMD := " -a" else CMD := " -r" + if LOOPINK # 0 THEN CMD := " -I" +* END + +end.rest: + TPRINT @(-1) + TTYGET tty$ ELSE NULL + tmptty=tty$ + CRMODE.ICRNL=1 + CRMODE.ONLCR=1 + TTYSET tty$ ELSE NULL + + IF OS.TYPE = "UNIX" THEN + EXECUTE OS.EXEC:"'cd ":parent.directory:"; ":CMD:"'" + END ELSE +* NT needs slash's in correct format for execute + parent.directory = CONVERT( "/", "\", parent.directory ) + EXECUTE OS.EXEC:" 'cd ":parent.directory :"& ":CMD:"'" + END + IF LOOPINK # MAXINK THEN + LOOPINK = LOOPINK +1 + GOTO LOOPK + END + + TTYGET tty$ ELSE NULL + tty$=tmptty + TTYSET tty$ ELSE NULL + CALL *HELP.BOX.B(5,5,50,UVREADMSG(001403,"")) +END + + +****************************************************************************** +* Init.form +* This routine initializes all the positional parameters, help strings, +* text strings, and default values for the two forms used in this subroutine +****************************************************************************** + +init.form: + scratch=UVREADMSG(073101,"") + masf = "" + form.size=7 + form.line=1 + temp.form=NULL + form=NULL + form<1,1>=@(2,5) + form<1,2>=@(25,5) + form<1,3>=scratch<1> + form<1,4>=scratch<2> + form<1,5>=form<1,4>:SPACE:scratch<3> + form<1,6>=50 + form<1,7>=0 + form<2,1>=@(2,6) + form<2,2>=@(25,6) + form<2,3>=scratch<4> + form<2,4>=scratch<5> + form<2,5>=form<2,4> + form<2,6>=30 + form<2,7>=0 + form<3,1>=@(2,7) + form<3,2>=@(25,7) + form<3,3>=scratch<6> + form<3,4>=scratch<5> + form<3,5>=form<3,4> + form<3,6>=30 + form<3,7>=0 + form<4,1>=@(2,8) + form<4,2>=@(25,8) + form<4,3>=scratch<7> + form<4,4>=scratch<8> + form<4,5>=form<4,4> + form<4,6>=2 + form<4,7>=1 + form<5,1>=@(2,9) + form<5,2>=@(25,9) + form<5,3>=scratch<9> + form<5,4>=scratch<10> + form<5,5>=form<5,4> + form<5,6>=10 + form<5,7>=1 + form<6,1>=@(2,10) + form<6,2>=@(25,10) + scratch1=UVREADMSG(073121,"") + form<6,3>=scratch1<1> + form<6,4>=scratch1<2> + form<6,5>=form<6,4> + form<6,6>=1 + form<6,7>=1 + form<7,1>=@(2,11) + form<7,2>=@(25,11) + form<7,3>=scratch<14> + form<7,4>=scratch<15> + form<7,5>=form<7,4> + form<7,6>=1 + form<7,7>=1 + form<8,1>=@(2,12) + form<8,2>=@(25,12) + form<8,3>="Mult Acct Save Format" + form<8,4>="Enter Y if the tape is in Multiple Account Save Format" + form<8,5>=form<8,4> + form<8,6>=1 + form<8,7>=1 + type19="N" + temp.form<9>="N" + RETURN + +****************************************************************************** +* Init.files +* It also opens up the &DEVICE& File so they can both be used to modify +* entries, existing or not, for printers on system. +****************************************************************************** +init.files: +m1=UVREADMSG(073614,"") + IF device.file.open = FALSE THEN + OPEN "",device.record TO device.file ELSE + retry=0 + CALL *ERROR.BOX.B(5,5,50,UVREADMSG(073005,device.record),retry,m1) + IF retry#0 THEN STOP @(-1) + ELSE GOTO init.files + END + device.file.open=TRUE + END +inf.2: + IF user.file.open = FALSE THEN + OPEN "",account.record TO fvuv.account ELSE + retry=0 + CALL *ERROR.BOX.B(5,5,50,UVREADMSG(073005,account.record),retry,m1) + IF retry#0 THEN STOP @(-1) + ELSE GOTO inf.2 + END + user.file.open=TRUE + END + RETURN + +****************************************************************************** +* Init.vars - +* Routine which initializes various global variables +****************************************************************************** +init.vars: + form.jump=0 + parent.directory=NULL + device.name=NULL + device.rewind=NULL + device.pathname=NULL + device.type=NULL + ibs=NULL + ImageFromDisk=1 + tape.type=NULL + type19=NULL + NEW.ITEM=TRUE + FLAVOR=NULL + RETURN + +****************************************************************************** +* Strings from help messages and such +****************************************************************************** +init.messages: + help.message=CONVERT(@FM," ",UVREADMSG(073644,"")) + Warn=UVREADMSG(073613,""):": " + msg2=Warn:UVREADMSG(071004,"") + msg4=Warn:UVREADMSG(073103,"") + msg5=Warn:UVREADMSG(073105,PROD.NAME) + word=UVREADMSG(073122,"") + msg10=UVREADMSG(073111,word) + RETURN + +*************************************************************************** +* init.menu - initializes menu bar +*************************************************************************** +init.menu: + scratch=UVREADMSG(073087,"") + Menu.Bar = NULL + Menu.Bar<1,1> = 3 ;* Number of Items in Menu.Bar + Menu.Bar<1,2> = 1 ;* Line # on which to print the Menu Bar +* First Item + Menu.Bar<2,1,1>=scratch<1> ;* SubMenu Title + Menu.Bar<2,1,2>=1 ;* # of items in SubMenu +* SubMenu #1 + Menu.Bar<2,2,1>=scratch<6> ;* SubMenu Item + Menu.Bar<2,2,2>=1 ;* Action Code (Returned to calling process) + Menu.Bar<2,2,3>=scratch<7> +* Second Item + Menu.Bar<3,1,1>=scratch<8> ;* SubMenu Title + Menu.Bar<3,1,2>=1 ;* # of items in SubMenu +* SubMenu #1 + Menu.Bar<3,2,1>=scratch<6> ;* SubMenu Item + Menu.Bar<3,2,2>=2 ;* Action Code + Menu.Bar<3,2,3>=scratch<7> + scratch=UVREADMSG(073089,"") + Menu.Bar<4,1,1>=scratch<1> + Menu.Bar<4,1,2>=3 + Menu.Bar<4,2,1>=scratch<2> + Menu.Bar<4,2,2>=3 + Menu.Bar<4,2,3>=scratch<3> + Menu.Bar<4,3,1>=scratch<4> + Menu.Bar<4,3,2>=4 + Menu.Bar<4,3,3>=scratch<5> + Menu.Bar<4,4,1>=scratch<6> + Menu.Bar<4,4,2>=5 + Menu.Bar<4,4,3>=scratch<7> +RETURN +STOP @(-1) +END diff --git a/Ardent/UV/APP.PROGS/ACTLIST.B b/Ardent/UV/APP.PROGS/ACTLIST.B new file mode 100755 index 00000000..8a80767d --- /dev/null +++ b/Ardent/UV/APP.PROGS/ACTLIST.B @@ -0,0 +1,175 @@ +******************************************************************************* +* +* Activate files from select list +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description......................................... +* 10/14/98 23801 SAP Change copyrights. +* 03/25/96 18212 LAG Windows NT port +* 03/13/96 17797 AGM Replace 'SH -c' with OS.EXEC +* 04/07/95 14980 GMH Verify filetype first +* 02/09/93 11033 CSM Process file names containing $ +* 01/19/93 10886 CSM Detect missing/incorrect UV.TRANS index +* 01/18/93 10886 CSM Initial Creation +* +******************************************************************************* + +$OPTIONS DEFAULT +$INCLUDE UNIVERSE.INCLUDE FILENAMES.H +$INCLUDE UNIVERSE.INCLUDE MACHINE.NAME + +****************** +** Windows NT port +** +DEFFUN IS.EQPATHS(FILESPEC.A, FILESPEC.B) CALLING "*IS.EQPATHS" +** +****************** + +! +* Check that we are within uniVerse home directory +! +****************** +** Windows NT port +** +if not(IS.EQPATHS(@PATH, UV.ROOT)) then + print "You must be within the uniVerse home account to run this program!" + stop +END +** +****************** + +if SYSTEM(27) # 0 then stop "You must be root to run this program!" + +! +* Get command line +! +CommandLine = convert(" ",@fm,@sentence) +locate "ACTLIST" in CommandLine setting POS then + * Get rid of everything up to and including program name + for i = 1 to POS + del CommandLine<1> + next i +end + +! +* Make certain enough arguments +! +NumArgs = dcount(CommandLine,@fm) +if NumArgs # 1 then + print "Incorrect Number of arguments" + print + print "Syntax: ACTLIST listname" + print + stop +end + +ListName = CommandLine<1> + +! +* Make certain ListName name does exist +! +getlist ListName to 1 else + print + print "List '":ListName:"' does NOT exist!" + stop +end + +! +* Check that UV.TRANS has a current Index +! +open "UV.TRANS" TO uvtrans then + IndexStatus = indices(uvtrans,"FILE") + if IndexStatus<1,1> <> "D" then + print "UV.TRANS must have an Index!" + stop + end + if IndexStatus<1,2> = "1" then + print "Index of UV.TRANS must be rebuilt!" + stop + end +end else stop "Unable to open UV.TRANS file!" + +! +* Open UV.ACCOUNT file +open "UV.ACCOUNT" to uvaccount else + print "Unable to open UV.ACCOUNT file!" + stop +end + +! +* Disable pagination +! +assign 0 to system(1005) + +LastAccount="" +ThisAccount="" +AccountPath="" +ThisFile="" +skip = 0 +! +* Read through list +! +eof = 0 +loop + readnext aline from 1 else eof = 1 +until eof do + * Get current account and file + ThisAccount = field(aline,":",1) + ThisFile = field(aline,":",2) + + * Skip files that begin with ampersand & + if ThisFile[1,1] = "&" then continue + + * Check + if AccountPath = "" or ThisAccount # LastAccount then + * Read new path + readv AccountPath from uvaccount,ThisAccount,11 else + skip += 1 + if skip = 1 then + print "No entry for ":ThisAccount:" in UV.ACCOUNT file!" + end + print " File '":ThisFile:"' cannot be activated!" + end + end else + * Check file type + cmd = OS.EXEC:" '":UV.BIN:"/UVfile ":ThisAccount:"/":ThisFile:"'" + execute cmd capturing ALINE + * Look for word directory + if index(ALINE<1>,": directory",1) then + * Skip directories + skip = 1 + end else + skip = 0 + end + end + + * Skip? + if not(skip) then + * Activate DATA portion of file + cmd = OS.EXEC:" '":UV.BIN:"/log_main 10 ":ThisAccount:" 0 ":ThisFile:"'" + execute cmd + * Activate DICT portion of file + cmd = OS.EXEC:" '":UV.BIN:"/log_main 10 ":ThisAccount:" 1 DICT ":ThisFile:"'" + execute cmd + end + + LastAccount = ThisAccount + +repeat + +! +* end of code +! +stop +end + diff --git a/Ardent/UV/APP.PROGS/ADDS b/Ardent/UV/APP.PROGS/ADDS new file mode 100755 index 00000000..0204f7bb --- /dev/null +++ b/Ardent/UV/APP.PROGS/ADDS @@ -0,0 +1,26 @@ +******************************************************************************** +* +* Support of PR1ME INFORMATION subroutine '-ADDS' +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description......................................... +* 10/14/98 23801 SAP Change copyrights. +* 12/09/88 5287 JSM Initial implementation. +* +******************************************************************************* + +$OPTIONS DEFAULT + +subroutine PR1ME(ans,m1,m2) + ans = ADDS(m1,m2) +return diff --git a/Ardent/UV/APP.PROGS/AMLC b/Ardent/UV/APP.PROGS/AMLC new file mode 100755 index 00000000..6cd5b26f --- /dev/null +++ b/Ardent/UV/APP.PROGS/AMLC @@ -0,0 +1,328 @@ +******************************************************************************** +* +* Support of PR1ME INFORMATION Subroutine '!AMLC' +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description......................................... +* 06/16/99 17755 RJE Fix functionality of key = 4 and key = 5 +* 10/14/98 23801 SAP Change copyrights. +* 10/08/91 8338 LPC Fixed assignment to variable "filestat". +* 07/25/88 - - Maintenence log purged at 5.2.1, see release 5.1.10. +* +******************************************************************************* + +$OPTIONS DEFAULT + +subroutine PR1ME(key , line , buffer , count , carrier) + +************************************************************************* +* * +* Support of PR1ME INFORMATION subroutine !AMLC * +* * +* This subroutine maintans a named common segment called 'AMLC%' * +* to keep a file descriptor for each terminal opened using * +* !AMLC (This name cannot possibly conflict with existing * +* INFORMATION programs cause the character '%' is illegal * +* on INFORMATION). * +* * +* This subroutine produced error messages on the controling * +* terminal. If users wish to suppress the messages, change * +* the definition of ERROR.MESSAGE, re-compile and re-catalog * +* this subroutine. * +* * +* Users wishing more efficient code might want to convert * +* existing programs using !AMLC to use the more effieicnt * +* uni*Verse statments: OPENDEV, READSEQ, WRITESEQ, READBLK, * +* WRITEBLK, STATUS, NOBUF, and FLUSH. * +* * +************************************************************************* + +equ ERROR.MESSAGE lit '$TRUE' + +common /AMLC%/ init,AMLC(128),open(128) + +if not(init) then mat open = 0; init = 1 +if line < 0 or line > 128 then + if ERROR.MESSAGE then + crt '!AMLC: Illegal terminal line number' + end + return +end + +if not(open(line)) then + dev = fmt(line,if line>99 then "r(TTY%3)" else "r(TTY%2)") + opendev dev to AMLC(line) then + nobuf AMLC(line) then null + open(line) = 1 + end else + if ERROR.MESSAGE then + crt "!AMLC: can't open ":dev + end + return + end +end + +begin case +case key = 1 + +************************************************************************* +* * +* KEY = 1 * +* * +* 1) Input characters * +* * +* Since readblk will terminate input when a buffer is sent * +* from the tty to the system (on each character when terminal * +* is in CBREAK or RAW mode, at the end of each line otherwise) * +* we have to loop and read until the number of characters * +* desired have been read. * +* * +************************************************************************* + buffer = '' + loop + while count > 0 do + readblk buf0 from AMLC(line),count then + count -= len(buf0) + end else + if ERROR.MESSAGE then + crt '!AMLC: unable to read from TTY':line + end + return + end + buffer := buf0 + repeat + for i=1 to count; buffer[1,i] = char(bitand(seq(buffer[1,i]),127)); next + return + +case key = 2 + +************************************************************************* +* * +* KEY = 2 * +* * +* 1) Input characters, or until a LINE FEED * +* (ASCII 10) or CARRIAGE RETURN (ASCII 13) is * +* encountered, whichever occurs first. * +* * +* NOTE: if the terminal is NOT in CBREAK or RAW mode, * +* a buffer is automatically termiated by NL (or the EOF/BRK) * +* character, thus this key can be replaced by the code: * +* READBLK buffer FROM AMLC(line),count * +* * +************************************************************************* + + buffer = '' + for i=1 to count + readblk buf0 from AMLC(line),1 then + s = bitand(seq(buf0),127); buf0 = char(s) + if s=10 or s=13 then + return + end else + buffer := buf0 + end + end else + if ERROR.MESSAGE then + crt '!AMLC: Unable to read from TTY':line + end + return + end + next i + return + +case key = 3 + +************************************************************************* +* * +* KEY = 3 * +* * +* 1) Output characters * +* * +* PR1ME maximum of 80 does not apply to uni*Verse * +* * +************************************************************************* + writeblk buffer[1,count] on AMLC(line) else + if ERROR.MESSAGE then + crt '!AMLC: Unable to write to TTY':line + end + end + return + +case key = 4 + +************************************************************************* +* * +* KEY = 4 * +* * +* 1) Return the number of characters waiting for input * +* in * +* 2) Determine the carrier status and return result * +* in * +* * +* Uni*Verse is currently unable to determine the carrier * +* status of a TTY, thus result is also always 1 * +* * +************************************************************************* + status filestat from AMLC(line) else + if ERROR.MESSAGE then + crt '!AMLC: Unable to determine status of TTY':line + end + return + end + count = filestat<4> + carrier = 1 + return + +case key = 5 + +************************************************************************* +* * +* KEY = 5 * +* * +* 1) Determine if there is enough room in buffer for * +* characters and return the result in * +* 2) Determine the carrier status and return result * +* in * +* * +* Uni*Verse is currently unable to determine the carrier * +* status of a TTY, thus result is also always 1 * +* * +************************************************************************* + + status filestat from AMLC(line) else + if ERROR.MESSAGE then + crt '!AMLC: Unable to determine status of TTY':line + end + return + end + count = (count <= filestat<19>) + carrier = 1 + return + +case key=6 + +************************************************************************* +* * +* KEY = 6 * +* * +* 1) Input all available characters in the input buffer * +* maximum = , return in actual number * +* of characters input * +* * +************************************************************************* + + status filestat from AMLC(line) else + if ERROR.MESSAGE then + crt '!AMLC: Unable to determine status of TTY':line + end + return + end + + if count > filestat<19> then count = filestat<19> + readblk buffer from AMLC(line),count else + if ERROR.MESSAGE then + crt '!AMLC: Unable to read from TTY':line + end + end + return + +case key=7 +************************************************************************* +* * +* KEY = 7 * +* * +* 1) Return in the amount of output buffer space * +* available. * +* * +************************************************************************* + + status filestat from AMLC(line) else + if ERROR.MESSAGE then + crt '!AMLC: Unable to determine status of TTY':line + end + return + end + count = filestat<4> + return + +case key=8 +************************************************************************* +* * +* KEY = 8 * +* * +* 1) Flush the input buffer * +* * +* Since uni*Verse does not support seperate flushing of input * +* and output buffers, fall into KEY# 10 * +* * +************************************************************************* +case key=9 +************************************************************************* +* * +* KEY = 9 * +* * +* 1) Flush the output buffer * +* * +* Since uni*Verse does not support seperate flushing of input * +* and output buffers, fall into KEY# 10 * +* * +************************************************************************* +case key=10 +************************************************************************* +* * +* KEY = 10 * +* * +* 1) Flush both the input & output buffers * +* * +************************************************************************* + ttyctl AMLC(line),9 else + if ERROR.MESSAGE then + crt '!AMLC: Unable to flush buffer on TTY':line + end + end + return +case key=11 +************************************************************************* +* * +* KEY = 11 * +* * +* 1) Output characters to available room in output buffer * +* return in the number of character NOT output * +* * +************************************************************************* + + + status filestat from AMLC(line) else + if ERROR.MESSAGE then + crt '!AMLC: Unable to determine status of TTY':line + end + return + end + cnt = filestat<4> + if cnt > count then cnt = count + writeblk buffer[1,cnt] on AMLC(line) else + if ERROR.MESSAGE then + crt '!AMLC: Unable to write to TTY':line + end + return + end + count -= cnt + return + +case 1 + + if ERROR.MESSAGE then + crt '!AMLC: Illegal argument' + end + return + +end case diff --git a/Ardent/UV/APP.PROGS/ANDS.B b/Ardent/UV/APP.PROGS/ANDS.B new file mode 100755 index 00000000..d417439e --- /dev/null +++ b/Ardent/UV/APP.PROGS/ANDS.B @@ -0,0 +1,26 @@ +******************************************************************************** +* +* Support of PR1ME INFORMATION subroutine '-ANDS' +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description......................................... +* 10/14/98 23801 SAP Change copyrights. +* 08/09/90 7338 JWT Initial implementation. +* +******************************************************************************* + +$OPTIONS DEFAULT + +subroutine PR1ME(ans,m1,m2) + ans = ANDS(m1,m2) +return diff --git a/Ardent/UV/APP.PROGS/ASCII.EXPORT b/Ardent/UV/APP.PROGS/ASCII.EXPORT new file mode 100755 index 00000000..e6b3ad12 --- /dev/null +++ b/Ardent/UV/APP.PROGS/ASCII.EXPORT @@ -0,0 +1,97 @@ +****************************************************************************** +* +* ASCII.EXPORT - Generate Delimited ASCII output from &SAVEDLISTS& +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description........................................ +* 10/14/98 23801 SAP Change copyrights. +* 12/15/93 11810 FTW Allow choice to include/exclude null in ASCII EXPT +* 07/23/92 9064 WLC Initial Release +******************************************************************************* +* +* This subroutine reads the already opened &SAVEDLISTS& entry and generates +* a comma delimited ascii data file as output. +* +******************************************************************************* +SUBROUTINE ASCII.EXPORT(return.code) +$INCLUDE UNIVERSE.INCLUDE UVEXPORT.H + + return.code = NO.ERR + IF interactive THEN + IF XPTNUL = 0 OR XPTNUL = 1 THEN + expt.null = XPTNUL + END ELSE + IF rec.onfile AND XPTNUL = '' THEN expt.null = 0 ELSE expt.null = 1 + END + msg = "Do you wish to export null fields? " + CALL *YES.NO.BOX.B(Y.N.Start,msg,expt.null) + IF XPTNUL # expt.null THEN + XPTNUL = expt.null + IF rec.onfile THEN WRITEV record<1> ON ss.file,record.name,1 ; READ.record<1> = record<1> + END + END ELSE + IF XPTNUL = 0 OR XPTNUL = 1 THEN + expt.null = XPTNUL + END ELSE + IF XPTNUL = '' THEN expt.null = 0 ELSE expt.null = 1 + XPTNUL = expt.null + WRITEV record<1> ON ss.file,record.name,1 + END + END +Gen.ASCII: + GOSUB read.data + IF return.code = -1 THEN return.code = NO.ERR; RETURN + num.done += 1 + new.bar = INT((num.done / num.records) * 50) + IF new.bar > old.bar AND interactive THEN + PRINT @(15,10): + CALL *INVERSE.B(1) + PRINT SPACE(new.bar): + CALL *INVERSE.B(0) + old.bar = new.bar + END + + mv.count = 1; + field.count = COUNT(uvdata,@FM)+1 + FOR fld = 1 TO field.count + mv = COUNT(uvdata,@VM)+1 + IF mv > mv.count THEN mv.count = mv + NEXT fld + FOR value = 1 TO mv.count + line = "" + FOR fld = 1 To field.count + IF normalize AND (single.multi = "S") THEN + this.value = 1 + END ELSE this.value = value + data = uvdata +* Quotes around text only... + IF NUM(data) AND data#'' THEN line := data ELSE line := '"':data:'"' + IF fld # field.count THEN line := "," + NEXT fld + WRITESEQ line ON SEQ.result ELSE return.code = WRITE.ERR; RETURN + NEXT value + GOTO Gen.ASCII +RETURN + +read.data: +* Get a record into data buffer + uvdata = "" + FOR i = 1 TO fcount + READSEQ data FROM SEQ.exp ELSE return.code = -1; RETURN + IF expt.null THEN + uvdata=data + END ELSE + IF data # '' THEN uvdata<-1>=data + END + NEXT i +RETURN diff --git a/Ardent/UV/APP.PROGS/BIN.CONV.B b/Ardent/UV/APP.PROGS/BIN.CONV.B new file mode 100755 index 00000000..cce25c01 --- /dev/null +++ b/Ardent/UV/APP.PROGS/BIN.CONV.B @@ -0,0 +1,353 @@ +******************************************************************************** +* +* Support of PR1ME INFORMATION subroutine '!BINARY.CONVERT' +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description......................................... +* 10/14/98 23801 SAP Change copyrights. +* 09/07/93 12299 LA Initial implementation. +* +******************************************************************************* +* START-DESCRIPTION: +* +* Converts a string to or from INFO/BASIC format from or to binary format +* according to a picture or format given. +* +* +* END-DESCRIPTION +* +* START-DESIGN: +* +* The routine is split into two parts according to direction. Each part +* loops on each field of the format string converting the corresponding +* parts of the input buffer to the output buffer. If a field in the format +* consists of a number of values starting with an integer, the following values +* are used as format codes for multi-valued fields. +* +* END-DESIGN +* + +$OPTIONS DEFAULT + +subroutine PR1ME(INBUF, BUFFMT, DIRECTION, OUTBUF, STATUS) + + EQUATE IB.TO.INT TO 0, + INT.TO.IB TO 1, + OTHERWISE LIT 'CASE 1', + NULL TO '' +* +* ================================================================== +* +* Initialize variables + OUTPUT = NULL + STATUS = '' + BFCOUNT = 1 + FFCOUNT = 1 + INDEX = 1 +* +* Loop on each field of format + LOOP + FMT = BUFFMT + WHILE FMT +* +* Check for simple or multi-value format + NV = FMT<1, 1> + IF NUM(NV) THEN +* +* Multi-value format, set up number of fields + NF = COUNT(FMT, @VM) + 1 +* +* Adjust buffer field counter for loops + BFC = BFCOUNT - 2 +* +* Loop for each value + FOR J = 1 TO NV +* +* Loop for each field + FOR I = 2 TO NF +* +* Get format code for this multi-valued field + FMT.CODE = FMT<1, I> +* +* Calculate field number for this value + BFP = BFC + I + IF DIRECTION = IB.TO.INT THEN +* +* INFO/BASIC to internal format, convert value and append + FIELD = INBUF +* +* to buffer string + GOSUB IB.TO.INT.CONV + END ELSE +* +* Internal to INFO/BASIC format, convert value and place + GOSUB INT.TO.IB.CONV +* +* in output string + OUTPUT = FIELD + END + NEXT I + NEXT J +* +* Increment buffer field count by number of fields added + BFCOUNT += NF - 1 + END ELSE +* +* Simple format, set up format code and buffer field number + FMT.CODE = FMT + BFP = BFCOUNT + IF DIRECTION = IB.TO.INT THEN +* +* INFO/BASIC to internal format, get field, convert and append + FIELD = INBUF +* +* to buffer string + GOSUB IB.TO.INT.CONV + END ELSE +* +* Internal to INFO/BASIC format, convert and place field into + GOSUB INT.TO.IB.CONV +* +* output string + OUTPUT = FIELD + END +* +* Increment buffer field count (by one) + BFCOUNT += 1 + END +* +* Increment format field count (by one) + FFCOUNT += 1 + REPEAT +* +* If converting from internal format check that whole buffer is consumed + IF DIRECTION = INT.TO.IB THEN + IF LEN(INBUF) <> INDEX - 1 THEN GOSUB ILLEGAL ;*001 + END +* +* Copy output to result argument (this is done in case actual input and +* output arguments supplied by caller are the same variable) + OUTBUF = OUTPUT + RETURN +* +* +* INFO/BASIC to internal conversion subroutine +IB.TO.INT.CONV: +* +* Set up parts for format code for case statements + F1 = FMT.CODE[1,1] + F12 = FMT.CODE[1,2] + N = FMT.CODE[3,99] +* +* Split on format code + BEGIN CASE + CASE F12 = 'AS' +* +* ASCII conversion + IF NUM(N) THEN +* N += MOD(N, 2) ;*004 + OUTPUT := ICONV(FIELD[1, N]:STR(' ', N - LEN(FIELD)),'ECS') + END ELSE + GOSUB ILLEGAL + END + CASE F1 = 'B' +* +* Binary conversions + IF NUM(N) THEN + IF N < 1 OR N > 256 THEN + GOSUB ILLEGAL + END ELSE +* Compress spaces + CONVERT ' ' TO '' IN FIELD +* Convert number of bits to number of bytes + N = INT((N + 7) / 8) ;*004 + F2 = FMT.CODE[2, 1] + BEGIN CASE + CASE F2 = 'B' +* Binary string (zeros and ones) + N = N * 8 ;*004 + FIELD = FIELD[1, N]:STR('0', N - LEN(FIELD)) + IF N > 188 THEN +* Have to take into account limit of 188 chars + FIELD1 = FIELD[1, 128] + FIELD2 = FIELD[129, 128] + FIELD1 = ICONV(FIELD1, 'MB0C') + IF STATUS() = 0 THEN FIELD2 = ICONV(FIELD2, 'MB0C') + OUTPUT := FIELD1:FIELD2 + END ELSE + OUTPUT := ICONV(FIELD, 'MB0C') + END + GOSUB STATUS + CASE F2 = 'O' +* Octal string (Zeros to sevens) + L = LEN(FIELD) / 3 +* Three digits per byte + IF INT(L) = L THEN + FIELD = ICONV(FIELD, 'MO0C') +* N = N * 2 ;*004 + OUTPUT := FIELD[1, N]:STR(CHAR(128), N - LEN(FIELD)) + GOSUB STATUS + END ELSE + GOSUB FAILED + END + CASE F2 = 'H' +* Hexadecimal string (Zeros to Fs) + N = N * 2 ;*004 + FIELD = FIELD[1, N]:STR('0', N - LEN(FIELD)) + OUTPUT := ICONV(FIELD, 'MX0C') + GOSUB STATUS + OTHERWISE + GOSUB ILLEGAL + END CASE + END + END ELSE + GOSUB ILLEGAL + END + CASE F1 = 'I' OR F12 = 'FS' OR F12 = 'FD' OR F12 = 'PD' +* +* Number and packed decimal conversions + OUTPUT := ICONV(FIELD, FMT.CODE) + GOSUB STATUS + CASE F12 = 'SK' ;*002 +* ;*002 +* Create N bytes to skip in Midasplus record ;*002 + IF NUM(N) THEN ;*002 +* N += MOD(N, 2) ;*004 + OUTPUT := STR( CHAR( 128), N) ;*002 + END ELSE ;*002 + GOSUB ILLEGAL ;*002 + END ;*002 + OTHERWISE +* +* Illegal conversion code + GOSUB ILLEGAL + END CASE + RETURN +* +* +* Internal to INFO/BASIC conversion subroutine +INT.TO.IB.CONV: +* +* Set up parts for format code for case statements + F1 = FMT.CODE[1,1] + F12 = FMT.CODE[1,2] + N = FMT.CODE[3,99] + BEGIN CASE + CASE F12 = 'AS' +* +* ASCII conversion + IF NUM(N) THEN + FIELD = OCONV(INBUF[INDEX, N], 'ECS') + IF LEN(FIELD) <> N THEN GOSUB FAILED + END ELSE + GOSUB ILLEGAL + END + CASE F1 = 'B' +* +* Binary conversions + IF NUM(N) THEN + IF N < 1 OR N > 256 THEN + GOSUB ILLEGAL + END ELSE + L = N +* Convert number of bits to number of bytes + N = INT((N + 7) / 8) ;*004 + F2 = FMT.CODE[2,1] + IF F2 = 'H' THEN F2 = 'X' + FIELD = OCONV(INBUF[INDEX, N], 'M':F2:'0C') + GOSUB STATUS + BEGIN CASE + CASE F2 = 'B' +* Binary string + FIELD = FIELD[1, L] + CASE F2 = 'O' +* Octal string, three digits to a byte + L = N * 3 ;*004 + TEMP = FIELD[1, L] +* Separate each three digits by spaces + FIELD = NULL + FOR I = 1 TO L STEP 3 + FIELD<-1> = TEMP[I, 3] + NEXT I + CONVERT @FM TO ' ' IN FIELD + CASE F2 = 'X' +* Hexadecimal string + FIELD = FIELD[1, INT((L + 3) / 4)] + END CASE + END + END ELSE + GOSUB ILLEGAL + END + CASE F1 = 'I' OR F1 = 'F' +* +* Number conversions + N = IF F12 = 'IS' THEN 2 ELSE IF F12 = 'FD' THEN 8 ELSE 4 + FIELD = OCONV(INBUF[INDEX, N], F12) + GOSUB STATUS + CASE F12 = 'PD' +* +* Packed decimal conversion +* ;*005 +* Get the length of the PD string... ;*005 + N = FIELD(N, '.', 1, 1) + IF NUM(N) THEN +* Packed decimal strings are this long ;*005 + N = INT(N / 2) + 1 ;*005 + FIELD = OCONV( INBUF[ INDEX, N], FMT.CODE) + GOSUB STATUS + END ELSE + GOSUB ILLEGAL + END + CASE F12 = 'SK' ;*002 +* ;*002 +* Skip N bytes in Midasplus record ;*002 + IF NUM(N) THEN ;*002 + FIELD = NULL ;*002 + END ELSE ;*002 + GOSUB ILLEGAL ;*002 + END ;*002 + OTHERWISE +* +* Illegal conversion code + GOSUB ILLEGAL + FIELD = NULL + END CASE +* +* Increment index to next byte + IF NUM(N) THEN + INDEX += N ;*004 + END + RETURN +* +* +ILLEGAL: + STATUS<-1> = FFCOUNT:@VM:'I' + RETURN +* +* +FAILED: + STATUS<-1> = BFP:@VM:'F' + RETURN +* +* +STATUS: + IF STATUS() = 1 THEN GOSUB FAILED ELSE + IF STATUS() = 2 THEN GOSUB ILLEGAL ELSE + IF STATUS() = -1 THEN STATUS<-1> = BFP:@VM:'P' + END + END + RETURN +* +* + +END diff --git a/Ardent/UV/APP.PROGS/BPIOCP b/Ardent/UV/APP.PROGS/BPIOCP new file mode 100755 index 00000000..a8bb42f4 --- /dev/null +++ b/Ardent/UV/APP.PROGS/BPIOCP @@ -0,0 +1,29 @@ +******************************************************************************** +* +* Support of PR1ME INFORMATION subroutine '!BPIOCP' +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description......................................... +* 10/14/98 23801 SAP Change copyrights. +* 07/25/88 - - Maintenence log purged at 5.2.1, see release 5.1.10. +* +******************************************************************************* + +$OPTIONS DEFAULT + +subroutine PR1ME + flag = system(1) + if flag then printer off + printer reset + if flag then printer on +return diff --git a/Ardent/UV/APP.PROGS/BPIOTT b/Ardent/UV/APP.PROGS/BPIOTT new file mode 100755 index 00000000..5fa76fa0 --- /dev/null +++ b/Ardent/UV/APP.PROGS/BPIOTT @@ -0,0 +1,25 @@ +******************************************************************************** +* +* Support of PR1ME INFORMATION subroutine '$BPIOTT' +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description......................................... +* 10/14/98 23801 SAP Change copyrights. +* 07/25/88 - - Maintenence log purged at 5.2.1, see release 5.1.10. +* +******************************************************************************* + +$OPTIONS DEFAULT + +subroutine PR1ME(term.type) +return diff --git a/Ardent/UV/APP.PROGS/CATALOG.PGMS b/Ardent/UV/APP.PROGS/CATALOG.PGMS new file mode 100755 index 00000000..0ce9cd65 --- /dev/null +++ b/Ardent/UV/APP.PROGS/CATALOG.PGMS @@ -0,0 +1,153 @@ +$INCLUDE UNIVERSE.INCLUDE MTF.INCL.H +****************************************************************************** +* +* Catalog all BASIC programs +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description........................................ +* 10/14/98 23801 SAP Change copyrights. +* 05/13/91 8345 DTM changed print to tprint +* 3/14/91 7673 DTM Made changes to CHOICE.BOX.B +* 1/13/91 7673 DTM Put in final changes +* 12/17/90 7673 DTM Added motif menuing, initial programming +* +******************************************************************************* +* This subroutine will accept as an argument the value of the operation +* to perform. It can perform the following functions on spooler jobs: +****************************************************************************** +id = "%W%" +****************************************************************************** +* Various Prompts and Help string values +***************************************************************************** +equ PRMPT.LOC to 2 +equ SHRT.HELP to 4 +equ LONG.HELP to 5 +****************************************************************************** +* Various other variables +****************************************************************************** +equ Clear.Screen to TPRINT @(-1) +equ Yes to 1 +equ No to 0 +****************************************************************************** +* Strings from help messages and such +****************************************************************************** + +GOSUB init.messages ;* initialize all messages +GOSUB init.files ;* Initialize /usr/spool/uv/sp.config + +****************************************************************************** +* In this section, we draw the first screen, print the menu bar and help +* areas, and put up the first title and form to fill out. +****************************************************************************** + ID="CATALOG.PGMS" + SOURCE.MACHINE=NULL + Q=NULL + REC=NULL + CALL *GET.PGMS(ID,Q,fvsavedlists,fvvoc,REC,SOURCE.MACHINE) + Clear.Screen + IF Q="XX" OR Q="xx" OR Q=-1 THEN STOP + CALL *DRAW.SCRN.B(UVREADMSG(073701,""),1) + TYPE=NULL + DO.INDIVIDUAL.PGMS=No + CAT.STYLE=NULL + READV CAT.STYLE FROM fvvoc, "CATALOG", 6 ELSE CAT.STYLE="I" + CAT.STYLE=CAT.STYLE[1,1] + IF CAT.STYLE="I" THEN + Q=NULL + GOSUB catalog.type + BEGIN CASE + CASE TYPE="N" + TYPE=NULL + CASE TYPE="G" + DO.INDIVIDUAL.PGMS=Yes + CASE TYPE="L" + TYPE="LOCAL" + END CASE + END + PARAGRAPH=NULL + PARAGRAPH<1>="PA" + NEXT.LINE=2 + NBR.PROGRAMS=DCOUNT(REC,@AM) + FOR I=1 TO NBR.PROGRAMS + IF DO.INDIVIDUAL.PGMS THEN + OPEN "",REC TO fvjunk ELSE + CALL *HELP.PRINT.B(UVREADMSG(073005,REC),2) + GOTO end.for + END + SELECT fvjunk + EOF=No + LOOP + READNEXT PGM.ID ELSE EOF=Yes + UNTIL EOF DO + PARAGRAPH=msg3:SPACE:REC:msg4:PGM.ID:msg5 + NEXT.LINE += 1 + REPEAT + END ELSE + PARAGRAPH=msg3:SPACE:REC:msg4:SPACE:TYPE + NEXT.LINE += 1 + END +end.for: + NEXT I + WRITE PARAGRAPH ON fvvoc,"CATALOG.ALL.PGMS" + CALL *HELP.PRINT.B(UVREADMSG(073702,"CATALOG.ALL.PGMS"),2) + EXECUTE "PHANTOM CATALOG.ALL.PGMS" CAPTURING error + SLEEP 2 + IF error # NULL THEN + CALL *HELP.PRINT.B(NULL,3) + count=DCOUNT(error,@FM)+1 + FOR i=1 TO count + IF error # NULL THEN CALL *HELP.PRINT.B(error,2) + NEXT i + END + SLEEP 3 + STOP @(-1) + +catalog.type: + s.val=1 + CALL *CHOICE.BOX.B(8,4,50,UVREADMSG(073703,""),UVREADMSG(073700,""),s.val,UVREADMSG(073704,"")) + BEGIN CASE + CASE s.val=-1 + SLEEP 1 + STOP @(-1) + CASE s.val=0 + Q="G" + CASE s.val=1 + Q="N" + CASE s.val=2 + Q="L" + END CASE + TYPE=Q + RETURN + +init.messages: + scratch=UVREADMSG(073705,"") + msg3=scratch<1> + msg4=scratch<2> + msg5=scratch<3> + RETURN + +init.files: + OPEN "","&SAVEDLISTS&" TO fvsavedlists ELSE + CALL *HELP.PRINT.B(UVREADMSG(073005,"&SAVEDLISTS&"),2) + SLEEP 3 + STOP @(-1) + END + OPEN "","VOC" TO fvvoc ELSE + CALL *HELP.PRINT.B(UVREADMSG(073005,"VOC"),2) + SLEEP 3 + STOP @(-1) + END + RETURN + + STOP @(-1) + END diff --git a/Ardent/UV/APP.PROGS/CATLG.GCI b/Ardent/UV/APP.PROGS/CATLG.GCI new file mode 100755 index 00000000..38d78ee0 --- /dev/null +++ b/Ardent/UV/APP.PROGS/CATLG.GCI @@ -0,0 +1,98 @@ +***************************************************************************** +* +* Catalog GCI subroutines +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description......................................... +* 10/14/98 23801 SAP Change copyrights. +* 04/03/96 18026 PGW Added file name on cmd line, & setting @SYSTEM.SET +* 02/22/94 12300 LA Changed to scan GCI file and catalog any routines +* which contain a catalog prefix ("$", "!", "-" or "*") +* 10/27/89 5273 DSC Exit when given XX et al (formerly restarted) +* 07/25/88 - - Maintenence log purged at 5.2.1, see release 5.1.10. +* +******************************************************************************* + +PROGRAM CATLG.GCI + + ID = "@(#)%M% %I%" + +$INCLUDE UNIVERSE.INCLUDE FILENAMES.H +$INCLUDE UNIVERSE.INCLUDE MACHINE.NAME +* + prompt "" + cl = @(-4) + cl.err = @(0,23):cl + EQU bell TO CHAR(7) + err = cl.err:bell + msg10=err:PROD.NAMEU:' General Calling Interface is not installed.' + + IF OS.TYPE = "UNIX" THEN + * Unix: this program can only be run in uvhome + OPEN '','DATA.TYPES' TO fvdata.types ELSE + PRINT msg10: + INPUT q: ; PRINT cl.err: + @SYSTEM.SET = -1 + STOP + END + def.file.name = 'GCI' + END ELSE + * Windows NT: this program can be run in any account + OPENPATH UV.ROOT:'\DATA.TYPES' TO fvdata.types ELSE + PRINT msg10: + INPUT q: ; PRINT cl.err: + @SYSTEM.SET = -1 + STOP + END + * You can specify the definition file by putting its name on the + * command line, otherwise it defaults to 'GCI' + cmd = CONVERT(" ", @FM, TRIM(@SENTENCE)) + def.file.name = cmd<4> + IF def.file.name = "" THEN def.file.name = 'GCI' + END + + PRINT @( -1 ) + PRINT @( 0, 0 ):"General Calling Interface Administration" : @( 69, 0 ) : "CATLG.GCI": + IF OS.TYPE = "UNIX" THEN + PRINT @( 23, 1): "Catalog GCI subroutines": + END ELSE + PRINT @( 23, 1): "Catalog GCI subroutines from GCI Definition File ":def.file.name: + END + PRINT @( 0, 2 ): STR( "-", 79 ): + PRINT @( 0, 4 ): + + gci.fvar = '' + OPEN '', def.file.name TO gci.fvar ELSE + PRINT "Cannot open file ":def.file.name:".": + PRINT " Subroutines will not be cataloged." + @SYSTEM.SET = -1 + GOTO exit.catlg.gci + END + SELECT gci.fvar + eof = 0 + id.count = 0 + LOOP + READNEXT id ELSE eof = 1 + UNTIL eof + prefix = id[1,1] + IF prefix = "$" OR prefix = "!" OR prefix = "*" OR prefix = "-" THEN + PERFORM "CATALOG.GCI ":id + id.count += 1 + END + REPEAT + CLOSE gci.fvar + @SYSTEM.SET = id.count + +exit.catlg.gci: + + END diff --git a/Ardent/UV/APP.PROGS/CATS b/Ardent/UV/APP.PROGS/CATS new file mode 100755 index 00000000..3e99de73 --- /dev/null +++ b/Ardent/UV/APP.PROGS/CATS @@ -0,0 +1,26 @@ +******************************************************************************** +* +* Support for PR1ME INFORMATION subroutine -CATS +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description......................................... +* 10/14/98 23801 SAP Change copyrights. +* 07/25/88 - - Maintenence log purged at 5.2.1, see release 5.1.10. +* +******************************************************************************* + +$OPTIONS DEFAULT + +subroutine PR1ME(ans,m1,m2) + ans = CATS(m1,m2) +return diff --git a/Ardent/UV/APP.PROGS/CHANGE.DOMAIN b/Ardent/UV/APP.PROGS/CHANGE.DOMAIN new file mode 100755 index 00000000..48d61763 --- /dev/null +++ b/Ardent/UV/APP.PROGS/CHANGE.DOMAIN @@ -0,0 +1,117 @@ +******************************************************************************* +* +* SQL catalogue DOMAIN name change tool. +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1993 Vmark Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Vmark Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenance log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description......................................... +* 08/13/99 25549 JBG Improve user-id chacking, make NT compatable +* 08/10/99 25549 JBG Initial release of CHANGE.DOMAIN +* +******************************************************************************* +INCLUDE UNIVERSE.INCLUDE VERIFY.COM +INCLUDE UNIVERSE.INCLUDE MACHINE.NAME + +argv = SYSTEM(1030) +argc = DCOUNT(argv,@FM) + +BREAK OFF ;* Turn breaks off. +ASSIGN 1 TO SYSTEM(999) ;* Turn off 'Q' to quit at 'Press a Key'. + +****************** +** Windows NT port +** +UV.ROOT = SYSTEM(32) +** +****************** + +UID = SYSTEM(28) +GOSUB GETUSER + +* do arguments +OLD = argv<2> +IF LEN(OLD) = 0 +THEN + CALL *WRAP.PRINT("** OLD domain name is empty.",Width,0,3) + CALL *WRAP.PRINT("** CHANGE.DOMAIN OLD_domain NEW_domain.",Width,0,3) + GOTO TERMINATE +END +NEW = argv<3> +* verify if valid user +OPEN "UV_USERS" TO uvusers +ELSE + CRT "Can't Open UV_USERS" + GOTO TERMINATE +END + +READ urec FROM uvusers,Uname +THEN + IF urec<1> = "YES" THEN DBA = 1 ELSE DBA = 0 +END +ELSE +* Since we've already discovered that Uname is not in UV_USERS, we +* assume that Uname is prefixed by the new domain name. So we want +* to construct Oname in which the prefix is the old domain name. + IF LEN(NEW) GT 0 AND Uname[1,LEN(NEW)] EQ NEW + THEN + Oname = OLD:Uname[LEN(NEW) + 1, LEN(Uname)] + READ urec FROM uvusers,Oname + THEN + IF urec<1> = "YES" THEN DBA = 1 ELSE DBA = 0 + END + ELSE + CALL *WRAP.PRINT("** '":Uname:"' or '":Oname:"' are not valid SQL user.",Width,0,3) + GOTO TERMINATE + END + END + ELSE + CALL *WRAP.PRINT("** '":Uname:"' is not a valid SQL user.",Width,0,3) + GOTO TERMINATE + END +END +CLOSE uvusers + +* check for user being DBA +IF DBA = 0 +THEN + CALL *WRAP.PRINT("** '":Uname:"' is not a DBA.",Width,0,3) + GOTO TERMINATE +END + +CMD = OS.EXEC:" '":UV.ROOT:"/bin/mksecure -nobobo ":UV.ROOT:"/sql/catalog/" +EXECUTE CMD:"UV_USERS'" + +CMD = "UPDATE UV_USERS SET NAME = '":NEW:"'||SUBSTRING(NAME FROM ":LEN(OLD)+1 +CMD2 = " FOR 999) WHERE SUBSTRING(NAME FROM 1 FOR ":LEN(OLD):") = '":OLD:"';" +EXECUTE CMD:CMD2 + +* terminate +CMD = OS.EXEC:" '":UV.ROOT:"/bin/mksecure ":UV.ROOT:"/sql/catalog/" +EXECUTE CMD:"UV_USERS'" +GOTO TERMINATE +STOP + +TERMINATE: + BREAK ON ;* Turn breaks back on. + ASSIGN 0 TO SYSTEM(999) ;* Turn on 'Q' to quit at 'Press a key'. + STOP +RETURN + +GETUSER: + ****************** + ** Windows NT port + ** + Uname = OCONV(UID, "PW") + IF STATUS() # 0 THEN Uname = -1 + ** + ****************** +RETURN diff --git a/Ardent/UV/APP.PROGS/CHARGE-TO b/Ardent/UV/APP.PROGS/CHARGE-TO new file mode 100755 index 00000000..1e114686 --- /dev/null +++ b/Ardent/UV/APP.PROGS/CHARGE-TO @@ -0,0 +1,33 @@ +******************************************************************************* +* +* CHARGE-TO verb simulator sub-routine definition +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description......................................... +* 10/14/98 23801 SAP Change copyrights. +* 07/25/88 - - Maintenence log purged at 5.2.1, see release 5.1.10. +* +******************************************************************************* +* +* CHARGE-TO IS NOT A SUPPORTED UNI*VERSE COMMAND. THIS PROGRAM IF +* CATALOGED, WILL GIVE THE APPEARANCE OF A CHARGE-TO LIKE VERB. +* THE EFFECT OF RUNNING THIS PROGRAM WILL BE TO CHANGE THE @WHO +* VARIABLE TO CONTAIN THE ORIGINAL @WHO + "*" + SECOND ITEM ON +* COMMAND LINE +* +******************************************************************************** +DIM COMMAND(2) +WORK = TRIM(@SENTENCE) +MATPARSE COMMAND FROM WORK , ' ' +EXECUTE "IAM ":@WHO:"*":COMMAND(2) +END diff --git a/Ardent/UV/APP.PROGS/CHARS b/Ardent/UV/APP.PROGS/CHARS new file mode 100755 index 00000000..fee897f2 --- /dev/null +++ b/Ardent/UV/APP.PROGS/CHARS @@ -0,0 +1,26 @@ +******************************************************************************** +* +* Support for PR1ME INFORMATION subroutine '-CHARS' +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description......................................... +* 10/14/98 23801 SAP Change copyrights. +* 07/25/88 - - Maintenence log purged at 5.2.1, see release 5.1.10. +* +******************************************************************************* + +$OPTIONS DEFAULT + +subroutine PR1ME(ans,m1) + ans = CHARS(m1) +return diff --git a/Ardent/UV/APP.PROGS/CHECK.DICTS b/Ardent/UV/APP.PROGS/CHECK.DICTS new file mode 100755 index 00000000..daf95a50 --- /dev/null +++ b/Ardent/UV/APP.PROGS/CHECK.DICTS @@ -0,0 +1,62 @@ +******************************************************************************* +* +* Program to check all of the dictionaries on an account +* and flag those that did not compile. +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description......................................... +* 10/14/98 23801 SAP Change copyrights. +* 06/04/96 18438 JC Port to NT +* 07/25/88 - - Maintenence log purged at 5.2.1, see release 5.1.10. +* +******************************************************************************* + +$OPTIONS DEFAULT + + OPEN 'VOC' TO VOC ELSE STOP 'CANNOT OPEN VOC' + DATAREC = 'PA' + SELECT.ITEMS = "SSELECT VOC WITH TYPE = 'F' AND F2 NOT.MATCHING" + SELECT.ITEMS := " '...\...' AND F2 NOT.MATCHING" + SELECT.ITEMS := " '.../...' AND F2 # '*' AND F2 # '' AND F3 NOT.MATCHING " + SELECT.ITEMS := " '...\...' AND F3 NOT.MATCHING" + SELECT.ITEMS := " '.../...' AND F3 # '' TO 1" + PRINT 'Select all the items in your VOC file that are local files' + PRINT 'with local DICT files to Select List 1.' + PRINT + EXECUTE SELECT.ITEMS + PRINT 'Now loop through each file, checking for any I-types that were not compiled.' + LOOP + READNEXT ID FROM 1 ELSE ID = '' + WHILE ID DO + PRINT + PRINT 'Processing DICT ':ID + SELECT.ITEMS = 'SSELECT DICT ':ID:' WITH F1 LIKE I... WITH NO F20' + EXECUTE SELECT.ITEMS + IF @SYSTEM.RETURN.CODE THEN + ID.LIST = '' + LOOP + READNEXT ITEM.ID ELSE ITEM.ID = '' + WHILE ITEM.ID DO + ID.LIST := ' ' : ITEM.ID + REPEAT + DATAREC <-1> = 'DISPLAY PROCESSING DICT ':ID:ID.LIST + DATAREC <-1> = 'ED DICT ':ID:ID.LIST + DATAREC <-1> = 'CD ':ID:ID.LIST + END + REPEAT + PRINT + PRINT 'Write the paragraph CHECK.DICTS on the VOC file.' + PRINT + WRITE DATAREC ON VOC, 'CHECK.DICTS' + PRINT + PRINT 'DONE.' diff --git a/Ardent/UV/APP.PROGS/CHG.RAWCHG.B b/Ardent/UV/APP.PROGS/CHG.RAWCHG.B new file mode 100755 index 00000000..608b5f59 --- /dev/null +++ b/Ardent/UV/APP.PROGS/CHG.RAWCHG.B @@ -0,0 +1,315 @@ +****************************************************************************** +* +* Transaction Logging Routine to Change from Raw Log To Unix files +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description........................................ +* 10/14/98 23801 SAP Change copyrights. +* 06/01/98 23161 RGA Raw Device support +* +******************************************************************************* +id = "%W%" +******************************************************************************* +$INCLUDE UNIVERSE.INCLUDE MTF.INCL.H +$INCLUDE UNIVERSE.INCLUDE TLOG.H +$INCLUDE UNIVERSE.INCLUDE MACHINE.NAME +$INCLUDE UNIVERSE.INCLUDE FILENAMES.H + + * Initialize + + OPENED.FLAG = @FALSE + DICT.OPENED.FLAG = @FALSE + DICT.LOCKED.FLAG = @FALSE + +* Equate tokens for return values for sysadmin option + +EQU LDIR$BADPATH TO "1" +EQU LDIR$BADRAWDEV TO "2" +EQU ALF$RELEASE TO 'R' + +****************** +** Windows NT port +** +DEFFUN GET.DIRNAME(FILESPEC) CALLING "*GET.DIRNAME" +** +****************** + + +temp = "" +CALL *ISUSER.B(0, temp) +IF temp = 0 THEN + TPRINT UVREADMSG(071000,"") + SLEEP 3 + STOP +END + +State ="" +RECIO( State, FINFO$AI.STATE, RECIO$FINFO ) + +IF State = AI$INITIAL OR State = AI$WARM.START OR State = AI$LOGGING OR State = AI$SUSPENDED OR State = AI$SUSP.PROG OR State = AI$SHUT.PROG THEN + PRINT "Cannot Change to unix files... Logging must be SHUTDOWN" + STOP +END + + +IF State = AI$FULL THEN + Cpt = "" + RECIO( Cpt, FINFO$AI.CHECKPOINT, RECIO$FINFO ) + IF Cpt = 1 THEN + PRINT "Cannot Change to unix files... Logging must be SHUTDOWN" + STOP + END +END +File.Name = FIELD( @SENTENCE, " ", 2 ) ;* get file name from command line +Option = FIELD( @SENTENCE, " ", 3 ) ;* see if we are from SysAdm +IF Option = "" THEN + Option = 0 +END + + * First, open UV_LOGS to check for any logs which have status + * other than released. If so, then we disallow this operation + * and return to user + + * Do some initialization + + GOSUB INIT + + * process list of log file numbers - we have at least one + * If we drop out because SEQUENCE.NUMBER is zero, then we are + * OK to continue the changeover + FOR I = 1 TO SEQUENCE.NUMBER + GOSUB CHECK.LOGFILE + NEXT I + + REC = "" + ;* initialize dynamic array + REC<1> = "X" + ;* set RAWDIR to NULL + REC<2> = "" + + ;* Ok, now update record + WRITE REC ON UV.LOGS.DICT.FVAR, LOGS.RAWDIR ELSE + ERROR = CANNOT.WRITE.UV.LOGS.DICT.ERROR + PRINT CANNOT.WRITE.UV.LOGS.DICT.ERROR + GOTO EXIT + END + + REC = "" + ;* initialize dynamic array + REC<1> = "X" + ;* set sequence number back to 1 + REC<2> = "1" + + WRITE REC ON UV.LOGS.DICT.FVAR, "LOG.NEXT" ELSE + ERROR = CANNOT.WRITE.UV.LOGS.DICT.ERROR + PRINT CANNOT.WRITE.UV.LOGS.DICT.ERROR + GOTO EXIT + END + + + ;* Second, make sure the raw device exists + Exec.uvfile = OS.EXEC:" '":UV.BIN:"/UVchange":"'" + + EXECUTE Exec.uvfile CAPTURING trashcan + + IF (INDEX(trashcan, "Error", 1)) THEN + IF Option = 0 THEN + PRINT ERR.DIR:File.Name:")" + path = GET.DIRNAME(File.Name) + PRINT "Path (":path:") not found" + END ELSE ;* called from sysadmin + PRINT LDIR$BADRAWDEV + END + GOTO EXIT + END + + + GOTO EXIT + +*==== +INIT: +*==== + + * Parse command line + + TMP = TRIM( @SENTENCE ) + CNT = COUNT( TMP, " " ) + IF ( CNT NE 1 ) THEN + ERROR = INCORRECT.NUM.ARGS + GOSUB ERROR.SUB + GOTO EXIT + STOP + END + CVTTYPE = FIELD( TMP, " ", 2 ) + + * Open UV.LOGS + OPEN '', UV.LOGS.FILE.NAME TO UV.LOGS.FVAR ELSE + ERROR = CANNOT.OPEN.UV.LOGS.ERROR + GOSUB ERROR.SUB + GOTO EXIT + END + + OPENED.FLAG = @TRUE + + * Open DICT UV.LOGS + + OPEN 'DICT', UV.LOGS.FILE.NAME TO UV.LOGS.DICT.FVAR ELSE + ERROR = CANNOT.OPEN.UV.LOGS.DICT.ERROR + GOSUB ERROR.SUB + GOTO EXIT + END + + DICT.OPENED.FLAG = @TRUE + + * Lock UV.LOGS to protect us from other users + + READU LOG.NEXT FROM UV.LOGS.DICT.FVAR, "LOG.NEXT" ELSE + ERROR = UV.LOGS.DICT.IS.LOCKED.ERROR + GOSUB ERROR.SUB + GOTO EXIT + END + SEQUENCE.NUMBER = LOG.NEXT<2> - 1 + + DICT.LOCKED.FLAG = @TRUE + + RETURN + +*============= +CHECK.LOGFILE: +*============= + + * Open the After-Image logfile + + FILENAME = AL.PREFIX : SEQUENCE.NUMBER + + * Determine state of the file + + AI.REC = "" + READ AI.REC FROM UV.LOGS.FVAR, SEQUENCE.NUMBER ELSE + EOF = 1 + END + IF (EOF = 1) THEN + RETURN + END + + FILE.STATE = AI.REC< AIF.STATUS > + + * If file state not EMPTY, error + + IF FILE.STATE # ALF$RELEASE THEN + * Changing From Raw to Unix Files + IF (CVTTYPE = "1") THEN + ERROR = FAILED.CHANGEOVER.ERROR + PRINT FAILED.CHANGEOVER.ERROR + GOTO EXIT + END + ELSE + * Changing From Unix files to Raw + ERROR = FAILED.CHANGEFLOVER.ERROR + PRINT FAILED.CHANGEFLOVER.ERROR + GOTO EXIT + END + END + + RETURN + +*========= +ERROR.SUB: +*========= + + * Error handling routine + + PRINT @SYS.BELL + + * Set return code and report the error + + BEGIN CASE + + CASE ERROR = NOT.ADMINISTRATOR.ERROR + PRINT 'Error: Only the UniVerse Administrator can DELETE log files.' + CASE ERROR = CANNOT.OPEN.UV.LOGS.ERROR + PRINT 'Error: Cannot open UV.LOGS file, Status = ' : STATUS() + CASE ERROR = UV.LOGS.IS.LOCKED.ERROR + PRINT 'Error: The UV.LOGS file is currently locked by another user.' + CASE ERROR = UV.LOGS.DICT.IS.LOCKED.ERROR + PRINT 'Error: The DICT UV.LOGS file is currently locked by another user.' + CASE ERROR = CANNOT.READ.UV.LOGS.ERROR + PRINT 'Error: Reading from UV.LOGS file, Status = ' : STATUS() + CASE ERROR = CANNOT.WRITE.UV.LOGS.ERROR + PRINT 'Error: Writing to UV.LOGS file, Status = ' : STATUS() + CASE ERROR = CANNOT.WRITE.UV.LOGS.DICT.ERROR + PRINT 'Error: Writing to DICT UV.LOGS file, Status = ' : STATUS() + CASE ERROR = CANNOT.DELETE.CURR.LOGFILE.ERROR + PRINT 'Error: Cannot DELETE CURRENT log file "' : FILENAME : '".' + CASE ERROR = FILE.STATE.NOT.EMPTY.ERROR + PRINT 'Error: Log file "' : FILENAME : '" is not empty."' + CASE ERROR = LOGFILE.NOT.FULL.ERROR + PRINT 'Error: Log file "' : FILENAME : '" is not full."' + CASE ERROR = INVALID.UV.LOGS.DIR.ERROR + PRINT 'Error: No Logging Directory Exists.' + CASE ERROR = INCORRECT.NUM.ARGS + PRINT 'Error: Incorrect number of arguments' + + END CASE + + RETURN + + +*--------------- +EXIT: +*--------------- + + * RELEASE the lock and close UV.LOGS + + IF DICT.LOCKED.FLAG THEN + RELEASE UV.LOGS.DICT.FVAR + END + + IF OPENED.FLAG THEN + CLOSE UV.LOGS.FVAR + END + + IF DICT.OPENED.FLAG THEN + CLOSE UV.LOGS.DICT.FVAR + END + + STOP + END + +* END-CODE + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Ardent/UV/APP.PROGS/CHK.ID.B b/Ardent/UV/APP.PROGS/CHK.ID.B new file mode 100755 index 00000000..9af4e59f --- /dev/null +++ b/Ardent/UV/APP.PROGS/CHK.ID.B @@ -0,0 +1,100 @@ +******************************************************************************** +* +* Support of PR1ME INFORMATION subroutine '!CHECK.TYPE1.ID' +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description......................................... +* 10/14/98 23801 SAP Change copyrights. +* 10/08/93 12299 LA Initial implementation. +* +******************************************************************************* +* +* This subroutine serves no purpose in uniVerse as invalid type1/type19 ids +* are converted on the fly and can only be accessed using the name they +* were created with. +* +* However, the routine IS needed for compatibility with accounts coming +* from PI/open which may already have records created with invalid +* record ids. We need to perform the same mapping as PI/open, otherwise +* the records will not be accessible. +* +* This means we need to map the following: +* +* null record id --> & +* record id of '.' --> & +* record id of '..' --> && +* / --> & +* +* We don't need to worry about converting '?' in the record ids (which +* is invalid in uniVerse) as the account convert program will already +* have sorted these out. We do, however, have to count them as two +* characters rather than one when working out whether to truncate the +* record id. This is because if a record id contains a '?' character, +* uniVerse will write this as '??' in the actual file name. +* +* This functionality is only needed in PI/open flavour uniVerse accounts. +* +******************************************************************************* + +$OPTIONS DEFAULT + +subroutine PR1ME(NEWID, OLDID) + +$INCLUDE UNIVERSE.INCLUDE CHK.ID.H ;* Contains value for MAX.ENTRYNAME.LENGTH + +EQUATE PIOPEN.FLAVOUR TO 64 + + flavour = system(1001) + if flavour eq PIOPEN.FLAVOUR then + +* Create temporary id with '?' expanded to check length + + tmpid = change(OLDID, '?', '??') + if len(tmpid) > MAX.ENTRYNAME.LENGTH then + tmpid = tmpid[1,MAX.ENTRYNAME.LENGTH] + +* Check for a single question mark at the end of the id, which means +* that the truncation has split a question mark pair, and remove it +* if it exists + + numq = count(tmpid, '?') + tmplen = len(tmpid) + if mod(numq, 2) ne 0 and tmpid[tmplen, 1] eq '?' then + tmpid = tmpid[1, tmplen - 1] + end + end + +* Now contract '??' to get back to the real id + + tmpid = change(tmpid, '??', '?') + +* If the last character is a +* Now cater for the special cases + + begin case + case tmpid = '' + NEWID = '&' + case tmpid = '.' + NEWID = '&' + case tmpid = '..' + NEWID = '&&' + case 1 + NEWID = convert('/', '&', tmpid) + end case + end else + NEWID = OLDID + end + + +return +end diff --git a/Ardent/UV/APP.PROGS/CHOICE.BOX.B b/Ardent/UV/APP.PROGS/CHOICE.BOX.B new file mode 100755 index 00000000..06ce5d7b --- /dev/null +++ b/Ardent/UV/APP.PROGS/CHOICE.BOX.B @@ -0,0 +1,403 @@ +******************************************************************************* +* +* New System Admin - This module allows the user to create a box on the +* screen which contains some text (Which you can page through), +* and from 1 to 4 buttons. +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description......................................... +* 10/14/98 23801 SAP Change copyrights. +* 05/15/96 18330 LDG Changed LEN() function to LENDP() for NLS DBCS. +* 01/17/92 8963 TMC fix dealing with lines >= width +* 06/19/91 8408 DPB Fixed number of lines bug for HELP routines. +* 06/12/91 7673 DTM Added More functionality for HELP routines +* 05/31/91 8408 DPB Added @FM feature for HELP routines +* 05/13/91 8345 DTM changed print to tprint +* 03/05/91 7673 DTM Fixed error conditions +* 11/05/90 7393 DPB Routine first created and admin'd. +******************************************************************************* + +SUBROUTINE CHOICE.BOX.B(start.line, max.lines, width, textstr.orig, Button.Array, selvalue,helpstring) + +$INCLUDE UNIVERSE.INCLUDE MTF.INCL.H +EQU KEYNUM TO 7 +DIM string.array(KEYNUM) +DIM string.codes(KEYNUM) +Default.list=0 + +textstr=textstr.orig + +Help.number=0 +IF width < 25 THEN width = 25 +start.col = 39-int(width/2) +text.start = start.col +IF LENDP(textstr) < width THEN text.start = (39-int(LENDP(textstr)/2)) -1 + +IF Button.Array="" THEN + selvalue=-2 + RETURN +END + +IF selvalue > Button.Array<1> OR selvalue <= 0 THEN selvalue=1 + +IF Button.Array<1> > 4 OR NUM(Button.Array<1>) = 0 THEN + selvalue = -2 + RETURN +END + +FOR i=2 to Button.Array<1>+1 + IF UPCASE(Button.Array)="HELP" THEN Help.number=i-1 +NEXT i +TPRINT CURSOR.INVISIBLE: +GOSUB screen.init +GOSUB light.label +GOSUB key.init + +TTYGET tty$ ELSE NULL +tmptty="" +tmptty=tty$ +CRMODE.ICRNL=0 +CRMODE.ONLCR=0 +TTYSET tty$ ELSE NULL +looplabel1: +left.over="" + CALL *GET.TOKEN.B(25, 75, 100, KEYNUM, mat string.array, mat string.codes, ESC.KEY, MNEMONIC, 0, Button.Array<1>, MNEMOS, left.over, input.code, mnemos) + + +looplabel2: + BEGIN CASE + + CASE input.code = ESCAPE + selvalue = -1 + GOSUB cleanup + GOTO end.stuff + + CASE input.code = NEXT.PAGE + IF ((cur.screen+1)*(box.lines-2)) < numlines THEN + GOSUB Blank.Page + cur.screen += 1 + GOSUB Draw.Page + END + + CASE input.code = PREV.PAGE + IF (cur.screen -1) >= 0 THEN + GOSUB Blank.Page + cur.screen -= 1 + GOSUB Draw.Page + END + + CASE input.code = SEL.ACTION + selvalue = item.no -1 + IF UPCASE(Button.Array) = "MORE" THEN + input.code = NEXT.PAGE + GOTO looplabel2 + END + IF selvalue=Help.number-1 THEN + IF helpstring # "" THEN + CALL *HELP.BOX.B(start.line+3,start.col+3,0,helpstring) + CALL *DRAW.BOX.B(start.line, start.col, box.lines, width, 1) + GOSUB Draw.Page + GOSUB Do.Labels + GOSUB light.label + GOTO looplabel1 + END + END + GOSUB cleanup + GOTO end.stuff + + CASE input.code = RIGHT.ARROW + IF ((item.no +1) > Button.Array<1> AND Button.Array<1> # 1) THEN + GOSUB unlight.label + item.no = 1 + GOSUB light.label + END + ELSE IF Button.Array<1> # 1 THEN + GOSUB unlight.label + item.no += 1 + GOSUB light.label + END + + CASE input.code = LEFT.ARROW + IF ((item.no -1) < 1 AND Button.Array<1> # 1) THEN + GOSUB unlight.label + item.no = Button.Array<1> + GOSUB light.label + END + ELSE IF Button.Array<1> # 1 THEN + GOSUB unlight.label + item.no -= 1 + GOSUB light.label + END + + CASE input.code = MNEMONIC + item.no = mnemos + input.code = SEL.ACTION + GOTO looplabel2 + + CASE 1 + GOTO looplabel1 + END CASE + GOTO looplabel1 + +TPRINT CURSOR.VISIBLE: +GOTO end.stuff +RETURN + +* +* Everything after this point is support routines. +* + +cleanup: + CALL *DRAW.BOX.B(start.line, start.col, box.lines, width, 0) + TPRINT CURSOR.VISIBLE: +RETURN + +Draw.Page: + FOR I = 1 to box.lines-2 + TPRINT @(text.start+2, start.line+I):tstr: + NEXT I + + IF cur.screen < max.screen THEN + IF cur.screen < 1 THEN + IF r.tee = "+" THEN + TPRINT @(28,start.line+1+box.lines):r.tee: + TPRINT " Page Down ":l.tee: + END + ELSE + TPRINT @(28,start.line+1+box.lines):LINEDRAW.BEGIN: + TPRINT r.tee:" Page Down ":l.tee:LINEDRAW.END: + END + RETURN + END + IF r.tee = "+" THEN + TPRINT @(28,start.line+1+box.lines):r.tee: + TPRINT " Page Up/Page Down ":l.tee: + END + ELSE + TPRINT @(28,start.line+1+box.lines):LINEDRAW.BEGIN: + TPRINT r.tee:" Page Up/Page Down ":l.tee:LINEDRAW.END: + END + END + ELSE + IF cur.screen < 1 AND max.screen < 1 THEN + IF h.line = '-' THEN + TPRINT @(28,start.line+1+box.lines):STR(h.line,9): + END + ELSE + TPRINT @(28,start.line+1+box.lines):LINEDRAW.BEGIN: + TPRINT STR(h.line,9):LINEDRAW.END: + END + RETURN + END + IF r.tee = '+' THEN + TPRINT @(28,start.line+1+box.lines):r.tee: + TPRINT " Page Up ":l.tee: + END + ELSE + TPRINT @(28,start.line+1+box.lines):LINEDRAW.BEGIN: + TPRINT r.tee:" Page Up ":l.tee:LINEDRAW.END: + END + END + + +RETURN + +Blank.Page: + FOR I = 1 to box.lines-2 + TPRINT@(text.start+2, start.line+I):STR(" ",LENDP(tstr)): + NEXT I +RETURN + +light.label: + If item.no <= int(Button.Array<1>/2) THEN + spacing = 0 - ((int(Button.Array<1>/2)+1) - item.no) + END + ELSE + spacing = (item.no - (int(Button.Array<1>/2))) + END + TPRINT @(start.col + spacing - 1 +((item.no*Offset) - int (LENDP(Button.Array)/2)) + LENDP(Button.Array)+1, start.line + box.lines): + CALL *INVERSE.B(0) + TPRINT @(start.col + spacing - 1 +((item.no*Offset) - int (LENDP(Button.Array)/2)), start.line + box.lines): + CALL *INVERSE.B(1) + TPRINT Button.Array: + CALL *INVERSE.B(0) +RETURN + +unlight.label: + If item.no <= int(Button.Array<1>/2) THEN + spacing = 0 - ((int(Button.Array<1>/2)+1) - item.no) + END + ELSE + spacing = (item.no - (int(Button.Array<1>/2))) + END + TPRINT @(start.col + spacing - 1 +((item.no*Offset) - int (LENDP(Button.Array)/2)) + LENDP(Button.Array)+1, start.line + box.lines): + CALL *INVERSE.B(0) + TPRINT @(start.col + spacing - 1 +((item.no*Offset) - int (LENDP(Button.Array)/2)), start.line + box.lines): + CALL *INVERSE.B(0) + TPRINT Button.Array: + CALL *INVERSE.B(0) +RETURN + + +Do.Labels: + FOR I = 1 to Button.Array<1> + IF I <= int(Button.Array<1>/2) THEN + spacing = 0 - ((int(Button.Array<1>/2)+1) - I) + END + ELSE + spacing = (I - (int(Button.Array<1>/2))) + END + TPRINT @(start.col + spacing + ((I*Offset) - int (LENDP(Button.Array)/2)), start.line + box.lines):Button.Array: + NEXT I + +RETURN + +UnDo.Labels: + FOR I = 1 to Button.Array<1> + IF I <= int(Button.Array<1>/2) THEN + spacing = 0 - ((int(Button.Array<1>/2)+1) - I) + END + ELSE + spacing = (I - (int(Button.Array<1>/2))) + END + TPRINT @(start.col + spacing + ((I*Offset) - int (LENDP(Button.Array)/2)), start.line + box.lines):STR(" ",LENDP(Button.Array)): + NEXT I + +RETURN + +screen.init: + GOSUB format.labels + GOSUB format.text + CALL *DRAW.BOX.B(start.line, start.col, box.lines, width, 1) + GOSUB Draw.Page + GOSUB Do.Labels + RETURN + +format.text: + cur.screen = 0 + tstr = "" + numlines = 0 +loop1: + numlines += 1 + temp = INDEX(textstr,@FM,1) + IF ((temp <= width) AND (temp # 0)) THEN + tstr = textstr[1,temp-1] + textstr = textstr[temp+1, LENDP(textstr)] + GOTO loop1 + END + IF LENDP(textstr) > width THEN + temp = width-1 + LOOP UNTIL textstr[temp,1] = ' ' OR temp <= 0 DO + temp -= 1 + REPEAT + IF temp < width - int(width/4) THEN temp = width-1 + tstr = textstr[1,temp] + textstr = textstr[temp+1, LENDP(textstr)] + GOTO loop1 + END + ELSE + IF LENDP(textstr) > 0 THEN + tstr = textstr + END + IF numlines < max.lines -2 THEN + box.lines = numlines+2 + END + ELSE + box.lines = max.lines + END + max.screen = INT((numlines-1)/(box.lines-2)) + RETURN + END + +format.labels: + item.no = selvalue + IF selvalue < 0 THEN + item.no = 1 + END + IF selvalue > 4 THEN + item.no =4 + END + IF Button.Array<1> = 0 THEN + Button.Array<1> = 3 + Button.Array<2> = "Ok" + Button.Array<3> = "Cancel" + Button.Array<4> = "Help" + Help.number=3 + Default.list=1 + END + button.width = 0 + FOR I = 1 to Button.Array<1> + button.width += LENDP(Button.Array) + 2 + NEXT I + If width < button.width THEN width = button.width + Offset = int(width/(Button.Array<1>+1)) + RETURN + +key.init: + OPEN "","INCLUDE" TO alt.key.file ELSE GOTO end.loop + alt.record="" + READ alt.record FROM alt.key.file,"ALT.MTF.KEYS" ELSE GOTO end.loop + alt.rec.count=COUNT(alt.record,@FM)+1 + FOR i=1 TO alt.rec.count STEP 2 + BEGIN CASE + CASE alt.record="ALT.RT.ARROW" + KEY.MOVE.CURSOR.RIGHT=alt.record + CASE alt.record="ALT.LT.ARROW" + KEY.MOVE.CURSOR.LEFT=alt.record + CASE alt.record="ALT.PAGE.UP" + KEY.PREVIOUS.PAGE=alt.record + CASE alt.record="ALT.PAGE.DOWN" + KEY.NEXT.PAGE=alt.record + END CASE + NEXT i + CLOSE alt.record +end.loop: + string.array(1) = CHAR(27) + string.array(2) = KEY.PREVIOUS.PAGE + string.array(3) = KEY.NEXT.PAGE + string.array(4) = " " + string.array(5) = CARRIAGE.RETURN + string.array(6) = KEY.MOVE.CURSOR.RIGHT + string.array(7) = KEY.MOVE.CURSOR.LEFT + string.codes(1) = ESCAPE + string.codes(2) = PREV.PAGE + string.codes(3) = NEXT.PAGE + string.codes(4) = SEL.ACTION + string.codes(5) = SEL.ACTION + string.codes(6) = RIGHT.ARROW + string.codes(7) = LEFT.ARROW + + CALL *TOKEN.SORT.B(KEYNUM, mat string.array, mat string.codes) + + FOR I = 1 to KEYNUM + IF string.codes(I) = ESCAPE THEN ESC.KEY = I + NEXT I + + MNEMOS = "" + FOR I = 1 TO Button.Array<1> + FOR J = 1 to LENDP(Button.Array) + IF Button.Array[J,1] = UPCASE(Button.Array[J,1]) THEN + MNEMOS = Button.Array[J,1] + GOTO out + END + NEXT J +out: + NEXT I +RETURN +end.stuff: + TTYGET tty$ ELSE NULL + tty$=tmptty + TTYSET tty$ ELSE NULL + RETURN + +END diff --git a/Ardent/UV/APP.PROGS/CINPUT.B b/Ardent/UV/APP.PROGS/CINPUT.B new file mode 100755 index 00000000..26100c31 --- /dev/null +++ b/Ardent/UV/APP.PROGS/CINPUT.B @@ -0,0 +1,334 @@ +******************************************************************************* +* +* New System Admin - This is an input routine which recognizes special +* keys, and will return a special code if the key is pressed. +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description......................................... +* 10/14/98 23801 SAP Change copyrights. +* 10/30/96 19533 JC Fix special character handling when NLS on. +* 05/15/96 18330 LDG Changed LEN() function to LENDP() for NLS DBCS +* 10/18/91 8834 DPB Added -(length) option for wrapping field data. +* 06/14/91 8477 DTM Fixed input of newlines +* 05/13/91 8345 DTM changed print to tprint +* 4/25/91 8222 DTM Added inline editing capability +* 1/12/91 7818 DTM Changed function into CINPUT, modified NINPUT to all +* upper case/lower case translation. +******************************************************************************* + +SUBROUTINE CINPUT(PRPT, DATA.BUFFER, SPECIAL.TYPE, LENGTH,case.value) + +$INCLUDE UNIVERSE.INCLUDE MTF.INCL.H + +EQU SPECIAL.ERASE TO -2 +EQU SPECIAL.RETURN TO -3 + +IF LENGTH # ABS(LENGTH) THEN wrap = 1 ELSE wrap = 0 +LENGTH = ABS(LENGTH) +IF LENGTH <= 0 THEN LENGTH=1 +SPECIAL = FALSE +if wrap = 1 AND (LENDP(DATA.BUFFER) > LENGTH) +THEN + y = LENDP(DATA.BUFFER) + z = DIV(LENGTH,2) + x = MOD(y,z) + SAVE = DATA.BUFFER[1,y-(x+z)] + DATA.BUFFER = DATA.BUFFER[y-(x+z)+1,y] +END +ELSE + SAVE = "" +END +TEST.BUFFER = "" +LEFT.OVER = "" +**************************************************************************** +*If case.value=1 THEN change case on all input, UPPER case by default. +**************************************************************************** + +GOSUB INIT.LABEL: + +PROMPT PRPT +TPRINT PRPT: +IF DATA.BUFFER # NULL THEN + TPRINT DATA.BUFFER: +END + +START.LABEL: + CALL *GET.TA.BUF.B(1,1,0,0,INPUT.CHARACTER) + IF case.value=1 THEN + tmp.char=UPCASE(INPUT.CHARACTER) + IF tmp.char=INPUT.CHARACTER THEN + tmp.char=DOWNCASE(INPUT.CHARACTER) + END + INPUT.CHARACTER=tmp.char + END + + SPECIAL.TYPE = "" + GOSUB CHECK.FOR.SPECIAL + + IF SPECIAL = TRUE THEN + IF SPECIAL.TYPE = SPECIAL.ERASE THEN + IF LENDP(DATA.BUFFER) # 0 THEN + IF (SEQ(DATA.BUFFER[1]) >31 AND SEQ(DATA.BUFFER[1]) <127) THEN + TPRINT BACKSPACE:" ":BACKSPACE: + END + DATA.BUFFER = DATA.BUFFER[1,LENDP(DATA.BUFFER) - 1] + IF wrap = 1 THEN + IF LENDP(DATA.BUFFER) < DIV(LENGTH,2) + THEN + IF SAVE # "" THEN + TPRINT STR(BACKSPACE,LENDP(DATA.BUFFER)):STR(" ",LENDP(DATA.BUFFER)):STR(BACKSPACE,LENDP(DATA.BUFFER)): + DATA.BUFFER = SAVE[LENDP(SAVE)-DIV(LENGTH,2)+1,LENDP(SAVE)]:DATA.BUFFER + TPRINT DATA.BUFFER: + SAVE = SAVE[1,LENDP(SAVE)-DIV(LENGTH,2)] + END + END + END + END + GOTO START.LABEL + END + ELSE IF SPECIAL.TYPE = SPECIAL.RETURN THEN + SPECIAL.TYPE = 0 + GOTO END.ROUTINE + END + ELSE GOTO END.ROUTINE + END + + IF LENDP(DATA.BUFFER) < LENGTH THEN + TPRINT INPUT.CHARACTER: + DATA.BUFFER := INPUT.CHARACTER + END + ELSE + IF wrap = 1 THEN + X = DIV (LENDP(DATA.BUFFER),2) + SAVE := DATA.BUFFER[1,X] + DATA.BUFFER = DATA.BUFFER[X+1,LENDP(DATA.BUFFER)] + TPRINT STR(BACKSPACE,LENGTH):STR(" ",LENGTH):STR(BACKSPACE,LENGTH): + TPRINT DATA.BUFFER:INPUT.CHARACTER: + DATA.BUFFER := INPUT.CHARACTER + END + ELSE + TPRINT @SYS.BELL: + END + END + +GOTO START.LABEL + +CHECK.FOR.SPECIAL: + + SPECIAL = TRUE + + IF INPUT.CHARACTER = CARRIAGE.RETURN THEN + SPECIAL.TYPE = SPECIAL.RETURN + RETURN + END + + FOR I = 1 TO 10 + IF INPUT.CHARACTER[1,1] = MO.KEYS[1,1] THEN + IF LEN(MO.KEYS) = 1 AND LEN(INPUT.CHARACTER) = 1 THEN + TESTING = "" + INPUT TESTING,-1 + IF TESTING = 1 THEN + INPUT.CHARACTER = "" + INPUTCLEAR + SPECIAL = FALSE + RETURN + END + SPECIAL.TYPE = MO.KEYS + IF LEN(INPUT.CHARACTER) > 1 THEN + LEFT.OVER = INPUT.CHARACTER[LEN(INPUT.CHARACTER)-1] + TPRINT LEFT.OVER + END + GOTO LOOP.END + END + ELSE IF LEN(MO.KEYS) > 1 THEN + IF LEN(INPUT.CHARACTER) = 1 THEN + TEST.BUFFER = INPUT.CHARACTER + CALL *GET.TA.BUF.B(0,LEN(MO.KEYS)-1,25,100,INPUT.CHARACTER) + IF INPUT.CHARACTER = "" THEN + INPUT.CHARACTER = TEST.BUFFER + END + ELSE + TEST.BUFFER := INPUT.CHARACTER + IF TEST.BUFFER = MO.KEYS THEN + SPECIAL.TYPE = MO.KEYS + GOTO LOOP.END + END + ELSE + INPUT.CHARACTER = TEST.BUFFER + END + END + END + ELSE IF INPUT.CHARACTER[1,LEN(MO.KEYS)] = MO.KEYS THEN + SPECIAL.TYPE = MO.KEYS + LEFT.OVER = INPUT.CHARACTER[LEN(INPUT.CHARACTER)-LEN(MO.KEYS)] + TPRINT LEFT.OVER: + GOTO LOOP.END + END + END + END + NEXT I + +LOOP.END: + IF SPECIAL.TYPE # "" THEN + BEGIN CASE + CASE SPECIAL.TYPE=ESCAPE + DATA.BUFFER = "" + SAVE = "" + + CASE SPECIAL.TYPE=UP.ARROW + DATA.BUFFER = "" + SAVE = "" + + CASE SPECIAL.TYPE=DOWN.ARROW + DATA.BUFFER = "" + SAVE = "" + + CASE SPECIAL.TYPE=F.1 + DATA.BUFFER = "" + SAVE = "" + + CASE SPECIAL.TYPE=F.10 + DATA.BUFFER = "" + SAVE = "" + + CASE SPECIAL.TYPE=F.4 + DATA.BUFFER = "" + SAVE = "" + + CASE SPECIAL.TYPE=PREV.PAGE + DATA.BUFFER = "" + SAVE = "" + + CASE SPECIAL.TYPE=NEXT.PAGE + DATA.BUFFER = "" + SAVE = "" + + END CASE + RETURN + END + + SPECIAL = FALSE +RETURN + + +INIT.LABEL: + +IF MO.INITIALIZED # TRUE OR MO.TERM.TYPE # TERMINAL.NAME +THEN + + TTYGET tty$ ELSE NULL + IF CC.ERASE # "" THEN + BKSP.KEY = CHAR(CC.ERASE) + IF ECHO.ERASE # ECHOE$BSB THEN + ECHO.ERASE = ECHOE$BSB + TTYSET tty$ ELSE NULL + END + END + IF BACKSPACE = "" THEN + BACKSPACE = CHAR(8) + END + + + MO.TERM.TYPE = TERMINAL.NAME + MO.INITIALIZED = TRUE + OPEN "","INCLUDE" TO alt.key.file ELSE GOTO end.loop + alt.record="" + READ alt.record FROM alt.key.file,"ALT.MTF.KEYS" ELSE GOTO end.loop + alt.rec.count=COUNT(alt.record,@FM)+1 + FOR i=1 TO alt.rec.count STEP 2 + BEGIN CASE + CASE alt.record="ALT.RT.ARROW" + KEY.MOVE.CURSOR.RIGHT=alt.record + CASE alt.record="ALT.LT.ARROW" + KEY.MOVE.CURSOR.LEFT=alt.record + CASE alt.record="ALT.UP.ARROW" + KEY.MOVE.CURSOR.UP=alt.record + CASE alt.record="ALT.DN.ARROW" + KEY.MOVE.CURSOR.DOWN=alt.record + CASE alt.record="ALT.F.1" + KEY.FUNCTION.1=alt.record + CASE alt.record="ALT.F.4" + KEY.FUNCTION.4=alt.record + CASE alt.record="ALT.F.10" + KEY.FUNCTION.10=alt.record + CASE alt.record="ALT.PAGE.UP" + KEY.PREVIOUS.PAGE=alt.record + CASE alt.record="ALT.PAGE.DOWN" + KEY.NEXT.PAGE=alt.record + END CASE + NEXT i + CLOSE alt.record +end.loop: + MO.KEYS<1,1>=CHAR(27) + MO.KEYS<2,1>=KEY.FUNCTION.1 + IF KEY.FUNCTION.1 ='' THEN ;* set up default to be ? if not found + MO.KEYS<2,1>=char(63) + END + MO.KEYS<3,1>=KEY.MOVE.CURSOR.DOWN + MO.KEYS<4,1>=KEY.MOVE.CURSOR.UP + MO.KEYS<5,1>=KEY.MOVE.CURSOR.LEFT + MO.KEYS<6,1>=BKSP.KEY + MO.KEYS<7,1>=KEY.FUNCTION.10 ;* set up default to be control-T if not found + IF KEY.FUNCTION.10 = '' THEN + MO.KEYS<7,1>=char(20) + END + MO.KEYS<8,1>=KEY.PREVIOUS.PAGE + MO.KEYS<9,1>=KEY.NEXT.PAGE + MO.KEYS<10,1>=KEY.FUNCTION.4 + MO.KEYS<1,2>=ESCAPE + MO.KEYS<2,2>=F.1 + MO.KEYS<3,2>=DOWN.ARROW + MO.KEYS<4,2>=UP.ARROW + MO.KEYS<5,2>=SPECIAL.ERASE + MO.KEYS<6,2>=SPECIAL.ERASE + MO.KEYS<7,2>=F.10 + MO.KEYS<8,2>=PREV.PAGE + MO.KEYS<9,2>=NEXT.PAGE + MO.KEYS<10,2>=F.4 + + FOR I = 1 TO 8 + FOR J = I+1 TO 9 + IF LEN(MO.KEYS) < LEN(MO.KEYS) + THEN + TEMP = MO.KEYS + MO.KEYS = MO.KEYS + MO.KEYS = TEMP + TEMP = MO.KEYS + MO.KEYS = MO.KEYS + MO.KEYS = TEMP + END + NEXT J + NEXT I + + MO.KEYS<1,3> = LEN(MO.KEYS<1,1>) + + END + + TTYGET tty$ ELSE NULL + tmptty="" + tmptty=tty$ + CRMODE.ICRNL=0 + CRMODE.ONLCR=0 + TTYSET tty$ ELSE NULL + +RETURN + +END.ROUTINE: + DATA.BUFFER = SAVE:DATA.BUFFER + CONVERT char(10) TO "" IN DATA.BUFFER + TTYGET tty$ ELSE NULL + tty$=tmptty + TTYSET tty$ ELSE NULL + RETURN +END + diff --git a/Ardent/UV/APP.PROGS/CLOSE.FILE.B b/Ardent/UV/APP.PROGS/CLOSE.FILE.B new file mode 100755 index 00000000..303025de --- /dev/null +++ b/Ardent/UV/APP.PROGS/CLOSE.FILE.B @@ -0,0 +1,100 @@ +****************************************************************************** +* +* CLOSE.FILE.B - Close file opened by OPEN.FILE.B +* (catalog name CLOSE$UV$FILE) +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description........................................ +* 10/14/98 23801 SAP Change copyrights. +* 11/04/92 10327 WLC Updated incorrect comments. +* 10/12/92 10327 WLC Initial release. +******************************************************************************* +* +* This subroutine replaces a standard UniVerse BASIC CLOSE +* statement. It checks a table to see if the given file +* has previously been opened. If not, the file is clsoed. +* If it was, close is done, and related labelled common entries +* are removed. +* + SUBROUTINE CLOSE$UV$FILE(FILE.VAL, VAR.STAMP) +* +* FILE.VAL : file to be closed +* +* VAR.STAMP : string containing variable name with _# appended +* # is unique for each source program. +* (See OPEN.UNIQUE file in /.uvhome) +* +* +* Equates +* +* TABLE.MAX: This is the MAXIMUM number of entries that ONE +* user can make. Basically, the maximum number +* of files that can be "held" open. +* +$INCLUDE UNIVERSE.INCLUDE OPEN.TOOLS.H + +* +$OPTIONS PICK +* Declare named common +* + COMMON /UV$open$files/ FILE$VARS(TABLE.MAX),FILE$TABLE(5),curr$UV$ACCOUNT +* +* FILE$VARS : contains actual filevars that are returned +* FILE$TABLE : 5 elements +* element 1 : list of opened file names ascending left (multi valued) +* element 2 : pointer into file$vars array (multi valued) +* element 3 : current number of open files (single value) +* element 4 : file open requests (multi valued) +* element 5 : variable stamp - unique identifier for the variable name +* used in open call. (multi valued) +* +* curr$UV$ACCOUNT : the name of the account in which these files +* were opened. +* +* +* Equates +* + EQU FILES.NOW.OPENED TO FILE$TABLE(1) ;* list of file names + EQU TABLE.POINTER TO FILE$TABLE(2) ;* list of pointers to FILE$VARS + EQU TABLE.COUNTER TO FILE$TABLE(3) ;* current # of FILE$VARS + EQU OPEN.REQUESTS TO FILE$TABLE(4) ;* list of # of open requests + EQU VARIABLE.LIST TO FILE$TABLE(5) ;* list of variable stamps + EQU NO TO 0 + EQU YES TO 1 +* +* Find the variable stamp in the list to determine which FILE$VAR entry to close +* + locate VAR.STAMP in VARIABLE.LIST setting field.loc else field.loc=0 + if field.loc then + CLOSE FILE$VARS(TABLE.POINTER) + TABLE.POINTER=delete(TABLE.POINTER,field.loc) + FILES.NOW.OPENED=delete(FILES.NOW.OPENED,field.loc) + OPEN.REQUESTS=delete(OPEN.REQUESTS,field.loc) + VARIABLE.LIST=delete(VARIABLE.LIST,field.loc) + end else +* We never opened it, close it anyway! + CLOSE FILE.VAL + end +* +* If this was the entry on the end, then we can re-use it. +* + if TABLE.POINTER = TABLE.COUNTER then TABLE.COUNTER-=1 + +* +* Return to calling program +* + return +* +* End of subroutine +* + END diff --git a/Ardent/UV/APP.PROGS/CLRPROMPT.B b/Ardent/UV/APP.PROGS/CLRPROMPT.B new file mode 100755 index 00000000..27b7130b --- /dev/null +++ b/Ardent/UV/APP.PROGS/CLRPROMPT.B @@ -0,0 +1,28 @@ +******************************************************************************** +* +* Support of PR1ME INFORMATION subroutine '!CLEAR.PROMPTS' +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description......................................... +* 10/14/98 23801 SAP Change copyrights. +* 07/15/93 12299 LA Initial implementation. +* +******************************************************************************* + +$OPTIONS DEFAULT + +subroutine PR1ME + CLEARPROMPTS +return + + diff --git a/Ardent/UV/APP.PROGS/COMO b/Ardent/UV/APP.PROGS/COMO new file mode 100755 index 00000000..693be1d7 --- /dev/null +++ b/Ardent/UV/APP.PROGS/COMO @@ -0,0 +1,85 @@ +******************************************************************************** +* +* Support of PR1ME INFORMATION subroutine '!COMO' +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description......................................... +* 10/14/98 23801 SAP Change copyrights. +* 03/17/93 9449 WLG Fixed comments, and logic when 16 bit is set +* so that bit 2 will turn TTY back on. +* Added create of &COMO& if it doesn't exist. +* 07/25/88 - - Maintenence log purged at 5.2.1, see release 5.1.10. +* +******************************************************************************* + +$OPTIONS DEFAULT + +subroutine PR1ME(key , filename) + +************************************************************************* +* * +* Support of PR1ME INFORMATION subroutine !COMO * +* * +* key Action * +* * +* 1 Disable terminal output * +* 2 Enable terminal output * +* 8 Disable output to COMO file * +* 16 Enable output to COMO file * +* 32 Append to end of file if enabling COMO * +* Close file if disabling COMO * +* 64 Truncate file in enabling COMO * +* * +************************************************************************* + + open "&COMO&" to f.como else + execute "CREATE.BFILE &COMO& 1,1 1,1 'used for COMO listings'" + open "&COMO&" to f.como else + @SYSTEM.RETURN.CODE = -1 + print "Unable to create '&COMO&' file" + stop + end + end + + if bitand(key,8) then + if bitand(key,32) then + execute "DIVERT.OUT OFF" + end else + execute "DIVERT.OUT FILE.OFF" + end + if bitand(key,1) then + execute "DIVERT.OUT TTY.OFF" + end + else if bitand(key,2) then + execute "DIVERT.OUT TTY.ON" + end + end + else if bitand(key,16) then + if filename = "" then + cmd = "DIVERT.OUT FILE.ON" + end else + cmd = "DIVERT.OUT ON &COMO& ":filename + end + if bitand(key,32) then cmd := " APPEND" + if bitand(key,64) then cmd := " TRUNCATE" + if bitand(key,2 ) then cmd := " TTY.ON" + if bitand(key,1 ) then cmd := " TTY.OFF" + execute cmd + end + else if bitand(key,1) then + execute "DIVERT.OUT TTY.OFF" + end + else if bitand(key,2) then + execute "DIVERT.OUT TTY.ON" + end + return diff --git a/Ardent/UV/APP.PROGS/COMPIL.DICTS b/Ardent/UV/APP.PROGS/COMPIL.DICTS new file mode 100755 index 00000000..cbb2ed55 --- /dev/null +++ b/Ardent/UV/APP.PROGS/COMPIL.DICTS @@ -0,0 +1,54 @@ +******************************************************************************** +* +* Program to compile all of the dictionaries on an account. +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description......................................... +* 10/14/98 23801 SAP Change copyrights. +* 06/04/96 18438 JC Port to NT +* 07/25/88 - - Maintenence log purged at 5.2.1, see release 5.1.10. +* +******************************************************************************* + +$OPTIONS DEFAULT + + OPEN 'VOC' TO VOC ELSE STOP 'CANNOT OPEN VOC' + DATAREC = 'PA' + SELECT.ITEMS = 'SSELECT VOC WITH TYPE = "F" AND F2 NOT.MATCHING' + SELECT.ITEMS := " '...\...' AND F2 NOT.MATCHING" + SELECT.ITEMS := ' ".../..." AND F2 # "*" AND F2 # "" AND F3 NOT.MATCHING ' + SELECT.ITEMS := " '...\...' AND F3 NOT.MATCHING" + SELECT.ITEMS := ' ".../..." AND F3 # ""' + PRINT 'Select all the items in your VOC file that are local files' + PRINT 'with local DICT files.' + PRINT + EXECUTE SELECT.ITEMS + LOOP + READNEXT ID ELSE ID = '' + WHILE ID DO + DATAREC<-1> = 'DISPLAY - COMPILING ':ID:' -' + DATAREC<-1> = 'CD ':ID + REPEAT + PRINT + PRINT 'Write the paragraph COMPILE.DICTS.PA on the VOC file.' + PRINT + WRITE DATAREC ON VOC, 'COMPILE.DICTS.PA' + PRINT 'Turn on the COMO file COMPILE.DICTS.' + PRINT + EXECUTE 'COMO ON COMPILE.DICTS' + PRINT + PRINT 'Execute the paragraph COMPILE.DICTS.PA.' + PRINT + EXECUTE 'COMPILE.DICTS.PA' + EXECUTE 'COMO OFF' + PRINT 'DONE.' diff --git a/Ardent/UV/APP.PROGS/COMPILE.PGMS b/Ardent/UV/APP.PROGS/COMPILE.PGMS new file mode 100755 index 00000000..d3f99aa7 --- /dev/null +++ b/Ardent/UV/APP.PROGS/COMPILE.PGMS @@ -0,0 +1,69 @@ +$INCLUDE UNIVERSE.INCLUDE MTF.INCL.H +***************************************************************************** +* +* Compile all BASIC programs +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description......................................... +* 10/14/98 23801 SAP Change copyrights. +* 05/13/91 8345 DTM changed print to tprint +* 3/14/91 7673 DTM Made changes to CHOICE.BOX.B +* 01/13/91 7673 DTM Put in final changes +* 11/08/90 7673 DTM Added motif menuing +* 07/25/88 - - Maintenence log purged at 5.2.1, see release 5.1.10. +* +****************************************************************************** +id = "%W%" +* +TAG1 = @(68,0):"COMPILE.PGMS" +TAG2 = @(25,1):UVREADMSG(073711,"") +* +1 OPEN '','&SAVEDLISTS&' TO FVSAVEDLISTS ELSE + CALL *HELP.PRINT.B(UVREADMSG(073005,"&SAVEDLISTS"),2) + SLEEP 3 + STOP + END +2 OPEN '','VOC' TO FVVOC ELSE + CALL *HELP.PRINT.B(UVREADMSG(073005,"VOC"),2) + SLEEP 3 + STOP + END + ID="COMPILE.PGMS" + Q="" + REC="" + CALL *GET.PGMS(ID,Q,FVSAVEDLISTS,FVVOC,REC,SOURCE.MACHINE) + IF Q = -1 OR Q = "XX" OR Q = "xx" OR Q = "^" THEN STOP +* +CALL *DRAW.SCRN.B(UVREADMSG(073710,""),1) + PARAGRAPH = "PA" + NBR.PROGRAMS = DCOUNT( REC, @AM ) + FOR I = 1 TO NBR.PROGRAMS + PARAGRAPH< I + 1 > = "BASIC " : REC< I > : " * " +79 NEXT I + WRITE PARAGRAPH ON FVVOC, "COMPILE.ALL.PGMS" + CALL *HELP.PRINT.B(UVREADMSG(073702,"COMPILE.ALL.PGMS"),2) +* +9999 B.array="" + B.array<1>=1 + B.array<2>=UVREADMSG(073029,"") + sel.val=1 + CALL *CHOICE.BOX.B(11,3,75,UVREADMSG(073712,""),B.array,sel.val,"") + IF sel.val=-1 THEN STOP + CALL *HELP.PRINT.B(UVREADMSG(073711,""),2) + SLEEP 2 + TPRINT @(-1) + EXECUTE "COMPILE.ALL.PGMS" + STOP +* +* +END diff --git a/Ardent/UV/APP.PROGS/COMPMAINT.SUB b/Ardent/UV/APP.PROGS/COMPMAINT.SUB new file mode 100755 index 00000000..a5e938f5 --- /dev/null +++ b/Ardent/UV/APP.PROGS/COMPMAINT.SUB @@ -0,0 +1,218 @@ +SUBROUTINE COMPILE.MAINT.FILE.SUB(PRECOMP.FILENAME,PRECOMP.XREF.REC,PRECOMP.XREF.ID,RESULTS) +******************************************************************************* +* +* Server subroutine for PICK Account Conversion Toolkit +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Vmark Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Vmark Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +************************************************************************ +* +* DESCRIPTION: +* +************************************************************************ + +$INCLUDE UNIVERSE.INCLUDE PACTERR.H + +EQU AM TO CHAR(254) +EQU VM TO CHAR(253) +EQU TRUE TO 1 +EQU FALSE TO 0 +* +RESULTS = '' +PROMPT '' +PROMPT.LINE = @(0,22):@(-4):@(0,22):@(0,23):@(-4):@(0,22) +OPENPATH PRECOMP.FILENAME TO F.PRECOMP ELSE + RESULTS = EADM.CANTOPENPRECOMP + RETURN +END +* Read the record +PRINT @(-1): +TOKEN.NAME = PRECOMP.XREF.ID +NEW.REC = FALSE +READU PRECOMP.XREF.REC FROM F.PRECOMP,TOKEN.NAME ELSE + PRECOMP.XREF.REC = '' + NEW.REC = TRUE +END +IF NOT(NEW.REC) THEN GOSUB 100 ; * Build display list +FIRST.PASS = TRUE +COMPLETE = FALSE +IF NEW.REC THEN +* The record is new so we will go through the addition procudure +* The first step is to enter the conditions (if any) +* If this is a multi line replacement then we will leave line one +* empty. + LOOP + TEXT = "Enter the conditions. (Space for empty line, 'X' continue)." + GOSUB 10 + CONDITION = RESP + IF FIRST.PASS AND RESP = ' ' THEN COMPLETE = TRUE + IF OCONV(TRIM(RESP),'MCU') = 'X' THEN COMPLETE = TRUE + UNTIL COMPLETE DO + CONDITION = TRIM(CONDITION) + IF CONDITION = " " THEN CONDITION = '' + IF FIRST.PASS AND CONDITION = "X" THEN + PRINT @(-1): + STOP + END ELSE + IF CONDITION # "X" THEN + PRECOMP.XREF.REC<1,-1> = CONDITION + END + END + FIRST.PASS = FALSE + GOSUB 100 ; * Build display list + REPEAT + VALID.RESP = FALSE + IF PRECOMP.XREF.REC<1> = '' THEN +* We left attribute one blank so this is a multi line replacement +* Prompt to enter the result varable. + GOSUB 100 ; * Go ahead and display the record. + LOOP + TEXT = "Enter the result varable. ('X' to continue)" + GOSUB 10 + RESULTS = RESP + IF RESULTS <> 'X' AND RESULTS <> "" THEN VALID.RESP = TRUE + UNTIL VALID.RESP DO REPEAT + IF RESULTS <> "X" THEN + PRECOMP.XREF.REC<2> = RESULTS + END + GOSUB 100 +* Now we enter the statements to replace the token + LOOP + TEXT = "Enter the statement(s) to replace this token (Empty line to continue)." + GOSUB 10 + STATEMENTS = RESP + UNTIL STATEMENTS = "" DO + PRECOMP.XREF.REC<3,-1> = STATEMENTS + GOSUB 100 + REPEAT + END ELSE + NUM.OF.CONDITIONS = DCOUNT(PRECOMP.XREF.REC<1>,VM) + COMPLETE = FALSE + FOR CONDITION.COUNT = 1 TO NUM.OF.CONDITIONS + LOOP + TEXT = "Enter the statement(s) to replace condition ":CONDITION.COUNT:" (Empty line to continue)" + GOSUB 10 + CONDITION = RESP + UNTIL OCONV(TRIM(RESP),'MCU') = '' DO + PRECOMP.XREF.REC = CONDITION + GOSUB 100 + REPEAT + NEXT CONDITION.COUNT + END + GOSUB 100 ; * Display the line + GOSUB 200 +END ELSE + GOSUB 200 +END +WRITE PRECOMP.XREF.REC ON F.PRECOMP,TOKEN.NAME +RETURN +STOP +10 * Input RESP +PRINT PROMPT.LINE:TEXT: +PRINT @(0,23): +INPUT RESP: +RETURN +* +100 * Display a line +YPOS = 4 ; XPOS = 1 +PRINT @(-1):@(1,2):"Token: ":TOKEN.NAME +NUM.OF.LINES = DCOUNT(PRECOMP.XREF.REC,@AM) +FOR A = 1 TO NUM.OF.LINES + NUM.OF.SUBVALUES = DCOUNT(PRECOMP.XREF.REC,@VM) + IF A < 3 AND NUM.OF.SUBVALUES = 0 THEN NUM.OF.SUBVALUES = 1 + FOR B = 1 TO NUM.OF.SUBVALUES + IF PRECOMP.XREF.REC = "" THEN + NUM.VALUE = A + END ELSE + NUM.VALUE = A:".":B + END + IF LEN(PRECOMP.XREF.REC) > 40 THEN + LINE = @(XPOS,YPOS):NUM.VALUE "L#5":PRECOMP.XREF.REC "L#39":">" + END ELSE + LINE =@(XPOS,YPOS):NUM.VALUE "L#5":PRECOMP.XREF.REC "L#40" + END + IF A < 3 THEN + PRINT @(XPOS,YPOS):LINE: + IF XPOS > 20 THEN XPOS = 4 ; YPOS = 46 + YPOS = YPOS + 1 + END ELSE + IF PRECOMP.XREF.REC # "" THEN + PRINT @(XPOS,YPOS):LINE: + YPOS = YPOS + 1 + IF XPOS > 20 THEN XPOS = 4 ; YPOS = 46 + END + END + NEXT B +NEXT A +RETURN +* +200 * Edit a line +* +* This will edit the lines that have been entered previously. +* We will allow the user to go through this as much +* As they like to do so. Then when they exit all will be saved. +LOOP + TEXT = "Enter the line to change XX or XX.XX ('A' to add a line. , 'X' to exit)" + GOSUB 10 +UNTIL RESP = 'X' DO + IF RESP MATCHES "0N.0N" OR RESP MATCHES "0N" THEN + IF RESP MATCHES "0N.0N" THEN + NUMBER = FIELD(RESP,'.',1) + ITEM = FIELD(RESP,'.',2) + END ELSE + NUMBER = RESP + ITEM = 1 + END +* If the line contains a value then we allow a change. + IF PRECOMP.XREF.REC # "" THEN + TEXT = "Enter the new value for line ":NUMBER:".":ITEM:" Space to delete line 'D' to display more information" + GOSUB 10 + NEW.VALUE = RESP + IF NEW.VALUE = " " THEN + PRECOMP.XREF.REC = DELETE(PRECOMP.XREF.REC,NUMBER,ITEM) + GOSUB 100 + END ELSE + IF OCONV(NEW.VALUE,'MCU') = 'D' THEN + PRINT @(0,22):@(-4):@(0,22):"Press to continue. ": + PRINT @(0,23):@(-4):@(0,23):PRECOMP.XREF.REC "L#79": + INPUT XXX: + END ELSE + PRECOMP.XREF.REC = NEW.VALUE + GOSUB 100 + END + END + END ELSE + TEXT = "There is no such item. Press to continue." + GOSUB 10 + END + END ELSE + IF RESP = 'A' THEN + LOOP + IF PRECOMP.XREF.REC<2> = "" THEN + TEXT = "Enter condition to add. 'X' exits" + END ELSE + TEXT = "Enter the statement to add. 'X' exits" + END + GOSUB 10 + UNTIL OCONV(RESP,'MCU') = 'X' DO + IF PRECOMP.XREF.REC<2> = "" THEN + PRECOMP.XREF.REC<1,-1> = RESP + TEXT = "Enter the statement for this condition." + PRECOMP.XREF.REC<-1> = RESP + GOSUB 10 + END ELSE + PRECOMP.XREF.REC<3,-1> = RESP + END + REPEAT + END + END +REPEAT +RETURN + END diff --git a/Ardent/UV/APP.PROGS/CONFIG b/Ardent/UV/APP.PROGS/CONFIG new file mode 100755 index 00000000..b3c9487a --- /dev/null +++ b/Ardent/UV/APP.PROGS/CONFIG @@ -0,0 +1,52 @@ +****************************************************************************** +* +* Display uniVerse configuration data +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description......................................... +* 10/14/98 23801 SAP Change copyrights. +* 03/13/96 17797 AGM Replace 'SH -c' with OS.EXEC +* 11/21/94 15313 TMC call with -z in all cases +* 10/18/94 14073 TMC call analyze.shm with -cz +* 10/11/94 14073 TMC change uvregen -t -c to analyze.shm -t0 -c +* 03/18/93 10115 JSM Added UV.BIN to uvregen command +* 12/06/89 6579 JWT Machine independent mktape +* +******************************************************************************* +$INCLUDE UNIVERSE.INCLUDE FILENAMES.H +$INCLUDE UNIVERSE.INCLUDE MACHINE.NAME + + ID = "%W%" + + DIM COMMAND(2) + OPEN 'VOC' ELSE STOP 'Sorry, unable to access VOC.' + WORK = TRIM(@SENTENCE) + MATPARSE COMMAND FROM WORK , ' ' + OPTS = "" + IF INMAT() > 1 THEN + READ VDESC FROM COMMAND(2) ELSE + STOP 'Unrecognised word "':COMMAND(2):'" in command line.' + END + IF VDESC[1,1] = 'K' + THEN + IF VDESC<2> = 37 THEN OPTS = "-cz -t0" + ELSE IF VDESC<2> = 62 THEN OPTS = "-cz" + ELSE IF VDESC<2> = 63 THEN OPTS = "-t0" + END + END + + IF OPTS = "" THEN OPTS = "-cz" + + EXECUTE OS.EXEC : " '" : UV.BIN : "/analyze.shm " : OPTS : "'" + + END diff --git a/Ardent/UV/APP.PROGS/CONV.DICTS b/Ardent/UV/APP.PROGS/CONV.DICTS new file mode 100755 index 00000000..82f4ba2c --- /dev/null +++ b/Ardent/UV/APP.PROGS/CONV.DICTS @@ -0,0 +1,302 @@ +***************************************************************************** +* +* Convert Dictionaries from Pick to Uni*Verse Format +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description......................................... +* 10/14/98 23801 SAP Change copyrights. +* 06/04/96 18438 JC Port to NT +* 07/25/88 - - Maintenence log purged at 5.2.1, see release 5.1.10. +* +******************************************************************************* +* +* This program was produced in part by SCREENGEN, a proprietary program of +* Infocel, Inc., P.O. Box 18305, Raleigh, N.C. 27609 +* +***************************************************************************** +* +* +* +* +$OPTIONS A + CLEAR COMMON + COMMON CLR, CL, CL.ERR, PROMPT, ERR, HELP, HELP3, STD.HELP, MV.HELP, + ERR.MSG, MSG1, MSG2, MSG3, MSG4, MSG5, + ID, Q, NEW.ITEM, REC(100) +* +* +* + CLR = @(-1) + CL = @(-4) + CL.ERR = @(0,23):CL + EQU BELL TO CHAR(7) + PROMPT=@(0,22):CL:@(0,21):CL + PROMPT "" +* + EQU TRUE TO 1, FALSE TO 0 +* + ERR = CL.ERR:BELL + HELP = CL.ERR + HELP3 = CL.ERR:PROMPT +* + STD.HELP=HELP3 + STD.HELP=STD.HELP:'Enter "?" for help, "^" to back up to previous prompt, "XX" to cancel input,' + STD.HELP=STD.HELP:@(0,22):' or data value requested by prompt. Data will be edited and an error' + STD.HELP=STD.HELP:@(0,23):' will appear if data are invalid. --- Enter ' + MV.HELP=HELP3 + MV.HELP=MV.HELP:'Enter "?" for help, "^" to back up to previous prompt, "XX" to cancel input,' + MV.HELP=MV.HELP:@(0,22):' "+" to display next value group, "DE" to delete value, "I" to insert value,' + MV.HELP=MV.HELP:@(0,23):' "/" to end value input, or data value requested. --- Enter ' + ERR.MSG=ERR:"Your response does not pass the edits. Enter a new response." + MSG1=ERR:'Unable to open the file - ' + MSG2=ERR:'A response is required.' + MSG3=ERR:'Response is too long.' + MSG4=ERR:'Numeric input required.' + MSG5=ERR:'Response is not in the code file.' +* + EQU AM TO CHAR(254) + EQU VM TO CHAR(253) + EQU SVM TO CHAR(252) + EQU NO.DATA TO CHAR(0) +* +* + MV3=1 ;* CRITERIA + COL3=2:AM:2:AM:2:AM:2:AM:2 + LIN3=10:AM:11:AM:12:AM:13:AM:14 +* +* +* + EQU FOREGROUND.BACKGROUND TO REC(1) + EQU PRINTED.LISTING TO REC(2) + EQU CRITERIA TO REC(3) +* +* + SSA07=CLR ;* Convert Dictionaries from Pick to Uni*Verse Format + SSA07=SSA07:@(0,0):"Account Conversion":SPACE(44):" CONV.DICTS" + SSA07=SSA07:@(13,1):"Convert Dictionaries from Pick to Uni*Verse Format" + SSA07=SSA07:@(0,2):STR("-",79) + SSA07=SSA07:@(0,5):"1. Foreground/background:" + SSA07=SSA07:@(0,7):"2. Printed listing:" + SSA07=SSA07:@(0,9):"3. Additional selection criteria:" + SSA07=SSA07:@(0,10):"3.1" + SSA07=SSA07:@(0,11):"3.2" + SSA07=SSA07:@(0,12):"3.3" + SSA07=SSA07:@(0,13):"3.4" + SSA07=SSA07:@(0,14):"3.5" + SSA07=SSA07:@(0,19):STR("-",79) +* + CLR.SSA07=@(0,0):@(26,5):CL:@(26,7):CL + CLR.SSA07=CLR.SSA07:@(2,10):1:CL:@(2,11):2"L#78":@(2,12):3"L#78":@(2,13):4"L#78":@(1,14):".":5"L#79" +* +2 OPEN '','VOC' TO FVVOC ELSE + PRINT MSG1:'VOC': + INPUT Q: ; PRINT CL.ERR: ; GOTO 2 + END + READV SOURCE.MACHINE FROM FVVOC, "RELLEVEL", 4 ELSE SOURCE.MACHINE = "O" + SOURCE.MACHINE = SOURCE.MACHINE[ 1, 1 ] + IF SOURCE.MACHINE <> "M" THEN SOURCE.MACHINE = "O" +* +************* ENTER RECORD KEY *************** +* +30 PRINT SSA07: ;* Convert Dictionaries from Pick to Uni*Verse Format + MAT REC=""; NEW.ITEM=TRUE ; GOSUB 50 ;*** UPDATE RECORD + STOP +50 ***** UPDATE SUBROUTINE ***** + IF NEW.ITEM THEN ;***** PROMPT FOR INPUT OF NEW REC + MV=0 + FOR Z = 1 TO 3 + Q=NO.DATA + ON Z GOSUB 100,200,300 + IF FOREGROUND.BACKGROUND = "F" THEN + NEW.ITEM = FALSE + GOTO 70 + END + IF Q="^" THEN IF MV>1 THEN MV=MV-2 ; Z=Z-1 ELSE IF Z<=1 THEN GOTO 9999 ELSE Z=Z-2 + IF Q="XX" THEN GOTO 9999 + NEXT Z + NEW.ITEM=FALSE + END ELSE MV=0 ; Q=""; GOSUB 88 ;*** PRINT SCREEN AND DATA +* +*######################### PRIMARY CONTROL LOOP ######################### + LOOP +70 PRINT PROMPT:"Enter save(S), cancel(XX), delete(DE), or field # to change: ": + INPUT Q ; PRINT CL.ERR:PROMPT: + UNTIL Q="S" OR Q="s" OR Q="." DO + IF Q="+" THEN Q="3,+" + Z=FIELD(Q,",",1) + BEGIN CASE + CASE Z>=1 AND Z<=3.99 AND NUM(Z) + Q=Q[COL2()+1,999] + IF Q="" THEN Q=NO.DATA + ON Z GOSUB 100,200,300 + MV=0 + CASE Q="XX" OR Q="xx" or Q="DE" or Q="de" + GOTO 9999 + CASE Q="R" OR Q="r" OR Q="^^"; PRINT SSA07: ; GOSUB 88 ;* REFRESH SCREEN + CASE 1 ; PRINT ERR:'Enter one of the requested commands.': + END CASE + REPEAT + IF FOREGROUND.BACKGROUND = "F" THEN + EXECUTE "DC" + STOP + END ELSE + PARA = "PA" + PARA< 2 > = "SSELECT VOC WITH F1 LIKE F... AND WITH F3 UNLIKE .../... " + PARA< 2 > = PARA< 2 > : 'AND WITH F3 UNLIKE "...\..."' + PARA< 2 > = PARA< 2 > : 'AND WITH F3 UNLIKE "&..." AND WITH F3 UNLIKE VOC... ' + NBR.LINES = DCOUNT( CRITERIA, @VM ) + FOR I = 1 TO NBR.LINES + PARA< 2 > = PARA< 2 > : CRITERIA< 1, NBR.LINES > : " " + NEXT I + PARA< 3 > = "DC -" : PRINTED.LISTING : SOURCE.MACHINE : "P" + WRITE PARA ON FVVOC, "CONVERT.DICTS" + PRINT PROMPT : "Adding CONVERT.DICTS paragraph to your VOC." + EXECUTE "PHANTOM CONVERT.DICTS" + PRINT CLR.SSA07: + RETURN + END +* +9999 PRINT CLR.SSA07:PROMPT: + RETURN ;********** EXIT UPDATE ROUTINE +* +88*** REFRESH DATA + PRINT @(26,5):FOREGROUND.BACKGROUND "L#10" + PRINT @(26,7):PRINTED.LISTING "L#3" + GOSUB 360 ; MV=0 ;* DISPLAY CRITERIA + Q=NO.DATA + RETURN +* +*########################################################################## +* +100 *** ########## FOREGROUND.BACKGROUND + IF Q=NO.DATA THEN +110 PRINT PROMPT:"Do you want to run the conversions in the Foreground or Background (F/B)? .": + PRINT @(74,21): + INPUT Q,3: ; PRINT CL.ERR:PROMPT: + Q = UPCASE( Q ) + END + IF Q="" THEN + PRINT ERR:'Response must be: "F" or "B".'[1,78]: + GOTO 110 + END + IF Q="?" THEN + PRINT STD.HELP: ; INPUT Q: ; PRINT HELP3: + GOTO 110 + END + IF Q="^" OR Q="XX" THEN RETURN +130 *** EDITS FOR FOREGROUND.BACKGROUND + IF Q#"F" AND Q#"B" THEN + PRINT ERR:'Response must be: "F" or "B".'[1,78]: + GOTO 110 + END +140 *** DISPLAY FOREGROUND.BACKGROUND + FOREGROUND.BACKGROUND=Q + IF Q="F" THEN Q="Foreground" + IF Q="B" THEN Q="Background" + PRINT @(26,5):Q "L#10" + RETURN +* +200 *** ########## PRINTED.LISTING + IF Q=NO.DATA THEN +210 PRINT PROMPT:"Do you want a listing sent to the printer (Y/N)? .":@(49,21): + INPUT Q,3: ; PRINT CL.ERR:PROMPT: + Q = UPCASE( Q ) + END + IF Q="" THEN + PRINT ERR:"Response must be Yes(Y) or No(N).": + GOTO 210 + END + IF Q="?" THEN + PRINT STD.HELP: ; INPUT Q: ; PRINT HELP3: + GOTO 210 + END + IF Q="^" OR Q="XX" THEN RETURN +230 *** EDITS FOR PRINTED.LISTING + IF Q#"Y" AND Q#"N" THEN + PRINT ERR:"Response must be Yes(Y) or No(N).": + GOTO 210 + END + IF LEN(Q)>3 THEN + PRINT MSG3: + GOTO 210 + END +240 *** DISPLAY PRINTED.LISTING + PRINTED.LISTING=Q + IF Q="Y" THEN Q="Yes" ELSE Q="No " + PRINT @(26,7):Q "L#3" + RETURN +* +300 *** ########## CRITERIA +* MULTIVALUE + VALUE.INSERTED=FALSE + IF NEW.ITEM THEN MV=MV+1 ELSE + MV=FIELD(Z,".",2) ; Z=INT(Z) + IF MV<1 THEN + IF Q="DE" THEN + CRITERIA=""; MV=1 ; GOSUB 360 ;* DELETE FIELD + END ELSE IF Q="+" THEN MV=1 ELSE + FOR MV=1 TO 99 UNTIL CRITERIA<1,MV>=""; NEXT MV + IF MV>MV3+5 THEN GOSUB 360 ;* DISPLAY FIELD + END + END ELSE IF CRITERIA<1,MV>='' AND Q#'DE' THEN GOTO 300 + END + IF Q=NO.DATA THEN + PRINT HELP:"Now reads: SSELECT VOC WITH F1 LIKE F... AND WITH F3 UNLIKE .../... AND WITH F3 UNLIKE ...\...": +310 PRINT PROMPT:"Enter any additional SELECTion criteria, line ":MV:":" + PRINT @(0,22):STR(".",74):@(0,22): + INPUT Q,76: ; PRINT CL.ERR:PROMPT: + IF(Q="/" or Q="") AND NOT(VALUE.INSERTED) THEN MV=0 ; RETURN + END + IF Q="" THEN + PRINT MSG2: + GOTO 310 + END + IF Q="I" THEN + VALUE.INSERTED=TRUE ; CRITERIA=INSERT(CRITERIA,1,MV,0,"") + GOSUB 360 ; Q=NO.DATA ; GOTO 310 ;* INSERT MV + END + IF Q="+" THEN MV=MV3+5 ; GOSUB 360 ; RETURN ;* DISPLAY ONLY + IF Q="DE" THEN + CRITERIA=DELETE(CRITERIA,1,MV,0) + GOSUB 360 ; RETURN ;* DELETE MV + END + IF Q="?" THEN + PRINT HELP:"Now reads: SSELECT VOC WITH F1 LIKE F... AND WITH F3 UNLIKE .../... AND WITH F3 UNLIKE ...\...": + GOTO 310 + END + IF Q="^" OR Q="XX" OR Q="/" THEN + IF NOT(VALUE.INSERTED) THEN MV=0 ; RETURN ELSE CRITERIA=DELETE(CRITERIA,1,MV,0) ; GOSUB 360 ; MV=0 ; RETURN + END +330 *** EDITS FOR CRITERIA + IF LEN(Q)>74 THEN + PRINT MSG3: + GOTO 310 + END +340 *** DISPLAY CRITERIA + CRITERIA<1,MV>=Q + IF MVMV3+4 THEN GOSUB 360 + PRINT @(COL3,LIN3):MV"L#3":Q "L#74" + IF NEW.ITEM THEN MV=MV+1 ; GOTO 310 ELSE MV=0 + RETURN +360 MV3=5*INT((MV-1)/5)+1 ;* DISPLAY FIELD + IF CRITERIA<1,MV3>="" AND Q="+" THEN MV3=1 + FOR K=MV3 TO MV3+4 + PRINT @(COL3,LIN3):K"L#3":CRITERIA<1,K> "L#74": + NEXT K + PRINT @(COL3<5>-1,LIN3<5>): + IF CRITERIA<1,K>#"" THEN PRINT "+" ELSE PRINT "." + RETURN +* +* +* + END diff --git a/Ardent/UV/APP.PROGS/CONVERT.BP.B b/Ardent/UV/APP.PROGS/CONVERT.BP.B new file mode 100755 index 00000000..ef1528a1 --- /dev/null +++ b/Ardent/UV/APP.PROGS/CONVERT.BP.B @@ -0,0 +1,538 @@ +****************************************************************************** +* +* CONVERT.BP.B - Convert basic source to utilize OPEN$UV$FILE, +* CLOSE$UV$FILE, and RELEASE$UV$FILE +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description........................................ +* 10/14/98 23801 SAP Change copyrights. +* 10/12/92 10327 WLC Initial Release. +******************************************************************************* +* +* Replace all OPEN's with CALL *OPEN$UV$FILE +* Replace all CLOSE's with CALL *CLOSE$UV$FILE +* If there aren't GOSUB statements and OPEN statements exist, +* replace RETURNs with CALL *RELEASE$UV$FILE; RETURN. +* +* This program will examine source code in a file and +* change all: +* +* OPEN {dict,} filename {TO filevar} {THEN/ELSE} +* +* that are on SEPARATE lines, to: +* +* CALL *OPEN$UV$FILE(dict,filename,filevar,var.stamp) +* +* var.stamp is a string which is generated using variable name and +* a unique number for each source module. This is used +* to locate the file variable when it comes time to close +* a file. +* +* To ensure the program logic, when a THEN or ELSE clause +* is found, one (or both) of the following may happen: +* +* A THEN clause ONLY: a newly inserted line will be +* added after the call to emulate the +* logic of this clause, thus +* +* IF @user.return.code THEN +* +* An ELSE clause ONLY: a newly inserted line will be +* added after the call to emulate the +* logic of this clause, thus +* +* IF NOT(@user.return.code) THEN +* +* Both clauses: since the THEN clause must preceed the +* ELSE clause, only the THEN 'IF' code must +* be inserted. (see above) +* +* +* The internal variable @user.return.code is set within the +* called subroutine and is returned with one of the following +* values: +* +* 0 - File could not be opened +* 1 - File was opened successfully +* 2 - File was previously opened +* +* If there is no DICT keyword specified, either null ("", '') +* or non-existant, then a null ("") will be placed in the +* parameter string. +* +* Furthermore, there may be the string DATA where one +* would normally expect to find the string DICT. If DATA is +* found, this will get filtered by the subroutine. +* +* If there is no FILENAME keyword specified, an ERROR message +* will be displayed and the source code exited. +* +* If there is no FILEVAR, it is assumed that the desired option +* is to open to the default file variable. For this, the +* UniVerse internal 'at' variable @STDFIL will be substituted +* as the FILEVAR in the parameter list. +* +* +$OPTIONS PICK +$INCLUDE UNIVERSE.INCLUDE FILENAMES.H +* +* Set EQUATES +* + equ TRUE to 1 + equ FALSE to 0 +* +* Define Upcase VARIABLES +* + ACTIVE.LIST="" + COMMAND.LINE="" + SOURCE.FILE="" + THIS.PROGRAM="" +* +* Define Downcase VARIABLES +* + a.N.line="" + a.S.line="" + disable.auto.paging=@(0,0) + eol=FALSE + items.selected=0 + look.for.a.clause=FALSE + S.mark=0 + prompt "" + N.record="" ;* new record being built and eventually written + S.record="" ;* source record from file + record.attempts=FALSE + change.count=0 + save.S.line="" + write.this.record=FALSE + use.else=FALSE ; use.then=FALSE +* +* Get & Parse command line +* + COMMAND.LINE=@sentence + convert " " to @fm in COMMAND.LINE + if COMMAND.LINE<1> = "RUN" then + del COMMAND.LINE<1> ;* get rid of 'RUN' + del COMMAND.LINE<1> ;* get rid of 'FILE' + end + THIS.PROGRAM=COMMAND.LINE<1> + del COMMAND.LINE<1> ;* get rid of 'PROGRAM' +* +* Get Name of source code file to look at +* + if COMMAND.LINE<1> # "" then + SOURCE.FILE=COMMAND.LINE<1> + del COMMAND.LINE<1> + end else + crt 'Enter Filename: ': + input SOURCE.FILE + end +* +* Attempt open of file to default file +* + open SOURCE.FILE else + crt "Unable to open file '":SOURCE.FILE:"'. Program '":THIS.PROGRAM:"' halted." + abort + end +* +* Select the file or get active list +* +GET.RECORDS: + if COMMAND.LINE<1>="*" or COMMAND.LINE<1>="ALL" then + echo off + execute "SSELECT ":SOURCE.FILE rtnlist ACTIVE.LIST + items.selected=@selected + echo on + end else + if not(system(11)) or record.attempts=TRUE then + items.selected=dcount(COMMAND.LINE,@fm) + select COMMAND.LINE to ACTIVE.LIST + end else + items.selected=@selected + selecte to ACTIVE.LIST + end + end +* +* Check to see if anything was selected +* + if not(items.selected) then + if not(record.attempts) then + record.attempts=TRUE + record.id=""; COMMAND.LINE="" + loop + crt "Record: ": + input record.id + until record.id="" do + COMMAND.LINE<-1>=record.id + repeat + goto GET.RECORDS: + end else + crt "Unable to retrieve any record keys. Program '":THIS.PROGRAM:"' halted." + abort + end + end +* +* Display number selected +* + crt + crt "'":items.selected:"' selected for processing." + crt +* +* Read one item off of list at a time +* + loop + readnext record.id from ACTIVE.LIST else eol=TRUE + until eol=TRUE do ;* beginning of major loop + write.this.record=FALSE ;* reset WRITE flag + opens.exist=FALSE + change.count=0 + gosubs.found=FALSE +* +* Read and lock record +* + readu S.record from record.id then + N.record="" ;* NULL out new record + + GOSUB FIND.UNIQUE.ID + GOSUB FIND.GOSUBS +* +* Look at each line for OPEN/CLOSE/RETURN statements +* + loop ;* beginning of loop A + a.S.line=remove(S.record,S.mark) + until a.S.line="" and S.mark=0 do +* +* Find first non-blank in line. +* + orig.line=a.S.line + blanks = 0 + blank=1 + loop + while (blanks = 0 and blank < LEN(a.S.line)) + if a.S.line[blank,1] # " " and a.S.line[blank,1] # char(9) then + blanks = blank-1 + end + blank += 1 + repeat + if blanks = 0 then whitespace="" else whitespace=orig.line + a.S.line=trimf(a.S.line) + open.ix=index(upcase(a.S.line), "OPEN", 1) + close.ix=index(upcase(a.S.line), "CLOSE", 1) + return.ix=index(upcase(a.S.line), "RETURN", 1) + begin case + case open.ix # 0 + if open.ix > 1 and a.S.line[open.ix-1,1] # " " then + string="" + end else string=upcase(a.S.line[open.ix,5]) + case close.ix # 0 + if close.ix > 1 and a.S.line[close.ix-1,1] # " " then + string="" + end else string=upcase(a.S.line[close.ix,6]) + case return.ix # 0 + if return.ix > 1 and a.S.line[return.ix-1,1] # " " then + string="" + end else string=upcase(a.S.line[return.ix,7]) + case 1 + string="" + end case + begin case + case string="OPEN " or string="OPEN'" or string='OPEN"' + gosub PARSE.OPEN + if not(look.for.a.clause) then + N.record<-1>= a.N.line + end + case look.for.a.clause = TRUE and a.S.line#"" + if upcase(a.S.line) MATCHES "'ELSE'0X" then + a.N.line:="*":a.S.line + a.N.line:=@fm:whitespace[1,blanks]:"IF NOT(@user.return.code) THEN ":a.S.line[5,999999] + N.record<-1>= a.N.line + change.count+=1 + end else + if upcase(a.S.line) MATCHES "'THEN'0X" then + a.N.line:="*":a.S.line + a.N.line:=@fm:whitespace[1,blanks]:"IF @user.return.code ":a.S.line + N.record<-1>= a.N.line + change.count+=1 + end else + N.record<-1>= whitespace[1,blanks]:save.S.line + N.record<-1>= whitespace[1,blanks]:a.S.line + end + end + look.for.a.clause=FALSE + case string[1,5]="CLOSE" + gosub PARSE.CLOSE + N.record<-1>=a.N.line + case string[1,6]="RETURN" + gosub PARSE.RETURN + N.record<-1>=a.N.line + case 1 + N.record<-1>=orig.line ;* no match - just add to new record + end case + repeat ;* end of loop A + end else + crt "Unable to read record '":record.id:"'." + end +* +* Write out record if changes made +* + if write.this.record and opens.exist then + crt change.count:" changes made to ",record.id + write N.record on record.id + end +* +* If gosubs exist in source, we cannot replace RETURNs properly, warn them... +* + if gosubs.found and write.this.record and opens.exist then + crt + crt "************************************************************" + crt "Warning: program ":record.id:" from ":SOURCE.FILE:" contains" + crt " gosub statements. Therefore, the open tools" + crt " cannot determine which RETURN statments" + crt " to replace with:" + crt " 'CALL *RELEASE$UV$FILE(":'"':unique.id:'"':"); RETURN'" + crt " Please examine source and put the above statements" + crt " wherever the non-gosub RETURNs are. " + crt " This is only necessary if locks have been set and " + crt " need to be released at the end of this routine." + crt "************************************************************" + end + +* +* Unlock the record +* + release record.id +* +* Go process next record.id +* + repeat ;* end of major loop +* +* This program is all done +* + STOP +* +* BEGINNING OF SUBROUTINE AREA +* +FIND.UNIQUE.ID: + curr.account=@who + record.key = curr.account:"*":SOURCE.FILE:"*":record.id + + openpath UV.ROOT:"/OPEN.UNIQUE" to UNIQUE.FV else + crt "*** Error opening the OPEN.UNIQUE file in ":UV.ROOT + crt "*** Please RUN APP.PROGS OPEN.INIT.B as root " + crt "*** from the ":UV.ROOT:" account and try again." + stop + end + + read curr.entry from UNIQUE.FV,record.key then + unique.id = curr.entry + return + end + + tries = 0 +try.again: + readu unique.id from UNIQUE.FV,"NEXT.VALUE" locked + tries += 1 + if tries > 20 then + crt "*** The NEXT.VALUE record in the OPEN.UNIQUE file in " + crt "*** the ":UV.ROOT:" account is currently locked by " + crt "*** another user. Please try again later." + stop + end + sleep 10 + goto try.again + end else + crt "*** Error reading NEXT.VALUE from OPEN.UNIQUE file in " + crt "*** ":UV.ROOT:". Please RUN APP.PROGS OPEN.INIT.B as root " + crt "*** from the ":UV.ROOT:" account and try again." + end + + write unique.id+1 on UNIQUE.FV,"NEXT.VALUE" + write unique.id on UNIQUE.FV,record.key +return + +FIND.GOSUBS: + temp.mark=0 + T.record=S.record + loop + a.T.line=remove(T.record,temp.mark) + until a.T.line="" and temp.mark=0 do + a.T.line=upcase(trimf(a.T.line)) + gosub.ix = INDEX(a.T.line,"GOSUB ",1) + pc = a.T.line[gosub.ix-1,1] + if gosub.ix and a.T.line[1,1] # "*" and (pc = " " or pc = char(9)) then + gosubs.found=TRUE + end + repeat +return + +PARSE.OPEN: + use.then=FALSE ; use.else=FALSE + DICT.VALUE=""; DATA.VALUE=""; FILE.VALUE="" +* +* Assign TEMP variable +* + TEMP.LINE=convert(" ",@fm,trim(a.S.line)) + +* +* Put space between OPEN & DICT/DATA name +* + if TEMP.LINE<1>[5,1]="'" or TEMP.LINE<1>[5,1]='"' then + Lhalf=TEMP.LINE<1>[1,4] + Rhalf=TEMP.LINE<1>[5,999999] + TEMP.LINE<1>=Lhalf:@fm:Rhalf + end +* +* Check to see if there aren't any spaces between comma +* +* if index(TEMP.LINE<2>,',',1) then +* TEMP.LINE<2>=field(TEMP.LINE<2>,",",1,1):",":@fm:field(TEMP.LINE<2>,",",2,9999) +* end +* +* Setup +* + a.N.line=whitespace[1,blanks] + a.N.line:="CALL *OPEN$UV$FILE(" ;* start making call + word.cnt=dcount(TEMP.LINE,@fm) + if upcase(TEMP.LINE<1>)="OPEN" then +* +* Look for dict +* + findstr "," in TEMP.LINE,1 setting FMC then + DICT.VALUE=field(TEMP.LINE,",",1) + DATA.VALUE=field(TEMP.LINE,",",2) + end else + DICT.VALUE='""' ;* no dict specified + FMC=1 + end +* +* Update +* + a.N.line:=DICT.VALUE:"," +* +* Get filename (var) +* + if DATA.VALUE="" then + FMC+=1 + DATA.VALUE=TEMP.LINE + end +* +* Update +* + a.N.line:=DATA.VALUE:"," +* +* See if there is a 'TO' keyword +* + FMC+=1 + if upcase(TEMP.LINE) = 'TO' then + FMC+=1 + FILE.VALUE=TEMP.LINE + end else +* +* There is no file variable, so use default +* + FILE.VALUE='@STDFIL' + FMC-=1 + end +* +* Update +* + a.N.line:=FILE.VALUE:',"':FILE.VALUE:"_":unique.id:'")' +* +* Now look for THEN or ELSE. +* + FMC+=1 + if upcase(TEMP.LINE)='THEN' then use.then=TRUE + if upcase(TEMP.LINE)='ELSE' then use.else=TRUE ; FMC+=1 + line.remainder="" + for a=FMC to word.cnt + line.remainder:=TEMP.LINE:" " + next a +* +* Assemble new +* + a.N.line="* ":a.S.line:@fm:a.N.line:@fm + if use.then then + a.N.line:=whitespace[1,blanks]:"IF @user.return.code ":line.remainder + write.this.record=TRUE + opens.exist=TRUE + change.count+=1 + end + if use.else then + a.N.line:=whitespace[1,blanks]:"IF NOT(@user.return.code) THEN ":line.remainder + write.this.record=TRUE + opens.exist=TRUE + change.count+=1 + end + if not(use.else) and not(use.then) then + look.for.a.clause=TRUE + save.S.line=a.S.line + end + end else + * oops! no change - bad line + a.N.line=orig.line + end +EXIT.PARSE.OPEN: + return + +PARSE.CLOSE: + DICT.VALUE=""; DATA.VALUE=""; FILE.VALUE="" +* + TEMP.LINE=convert(" ",@fm,trim(a.S.line)) +* + +* Make sure the CLOSE was not part of variable or label name + + nc = string[6,1] + if (nc # '' and nc # ";" and nc # " " and nc # char(9)) or (trim(a.S.line)[1,1] = "*") then + a.N.line=whitespace[1,blanks] + a.N.line:=a.S.line + return + end + + locate "CLOSE" in TEMP.LINE setting loc else loc=0 + FILE.VALUE=TEMP.LINE + if FILE.VALUE="" or FILE.VALUE=";" then FILE.VALUE='@STDFIL'; fv.len=0 + else fv.len=len(FILE.VALUE) + + a.N.line=whitespace[1,blanks] + a.N.line:=a.S.line[1,close.ix-1]:"CALL *CLOSE$UV$FILE(" + a.N.line:=FILE.VALUE:',"':FILE.VALUE:"_":unique.id:'")' + next.item=close.ix+6+fv.len + a.N.line:=a.S.line[next.item,99] + a.N.line="* ":a.S.line:@fm:a.N.line:@fm + write.this.record=TRUE + change.count+=1 + return + +PARSE.RETURN: + +* Make sure RETURN is not part of variable, label, comment or gosubs exist + + nc = string[7,1] + if (nc # '' and nc # ";" and nc # " " and nc # char(9)) or gosubs.found or trim(a.S.line)[1,1] = "*" then + a.N.line=orig.line + return + end + + a.N.line=whitespace[1,blanks] + a.N.line:=a.S.line[1,return.ix-1] + a.N.line:='CALL *RELEASE$UV$FILE("':unique.id:'"); RETURN' + a.N.line:=a.S.line[return.ix+6,99] + a.N.line="* ":a.S.line:@fm:a.N.line:@fm + write.this.record=TRUE + change.count+=1 + + return +* +* End of code +* + END diff --git a/Ardent/UV/APP.PROGS/CONVERT.PGMS b/Ardent/UV/APP.PROGS/CONVERT.PGMS new file mode 100755 index 00000000..23b81599 --- /dev/null +++ b/Ardent/UV/APP.PROGS/CONVERT.PGMS @@ -0,0 +1,135 @@ +$INCLUDE UNIVERSE.INCLUDE MTF.INCL.H +$OPTIONS A +***************************************************************************** +* +* Enter names of BASIC program files; save into &SAVEDLISTS&; resize +* files; delete old object +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description........................................ +* 10/14/98 23801 SAP Change copyrights. +* 08/05/92 9887 PVW del last changes as changes made in GET.PGMS +* 07/16/92 9550 PVW add in REALITY.FORMAT and INFORMATION.FORMAT +* flavours for deleting object code from files. +* 07/15/92 9045 PVW allow option to select file resizing type +* 1/19/91 7673 DTM Put in final changes +* 11/7/90 7673 DTM Added Motif Menuing +* 08/18/90 7373 JWT correct spelling error +* 07/25/88 - - Maintenence log purged at 5.2.1, see release 5.1.10. +* +****************************************************************************** +* This subroutine will accept as an argument the value of the operation +* to perform. It can perform the following functions on spooler jobs: +****************************************************************************** +id = "%W%" +****************************************************************************** +* In this section, we draw the first screen, print the menu bar and help +* areas, and put up the first title and form to fill out. +****************************************************************************** + Q=NULL + ID="CONVERT.PGMS" + FVSAVEDLISTS=NULL + FVVOC=NULL + REC=NULL + CALL *GET.PGMS(ID,Q,FVSAVEDLISTS,FVVOC,REC,SOURCE.MACHINE) + CALL *DRAW.SCRN.B(UVREADMSG(073715,""),1) + CALL *HELP.PRINT.B(UVREADMSG(073009,""),2) + IF Q = "XX" OR Q = "xx" OR Q = "^" THEN + STOP + END +* +* prompt to get file type for resize +* + existing.type=FALSE + file.type="1" + text=UVREADMSG(073751,"") + text.length=LEN(text)+4 + b.option=0 + b.array="" + b.array<1>=3 + b.array<2>="1" + b.array<3>="19" + b.array<4>=UVREADMSG(073750,"") + CALL *HELP.PRINT.B(UVREADMSG(073752,""),2) + CALL *CHOICE.BOX.B(8,3,text.length,text,b.array,b.option,"") + IF b.option=-1 THEN GOTO 9999 + b.option+=2 + IF b.option=4 THEN + existing.type=TRUE + end else + existing.type=FALSE + file.type=b.array + end +* + flag=1 + CALL *HELP.PRINT.B(UVREADMSG(073716,""),2) + CALL *YES.NO.BOX.B(8,UVREADMSG(073152,""),flag) + IF flag=0 THEN + GOTO 9999 + END + NBR.PROGRAMS = DCOUNT( REC, @AM ) + message1=UVREADMSG(073717,"") + message2=UVREADMSG(073718,"") +****************************************************************************** + FOR I = 1 TO NBR.PROGRAMS +* +* Delete the old object code. +* + CALL *HELP.PRINT.B("",3) + CALL *HELP.PRINT.B(message1:REC:".",2) + IF SOURCE.MACHINE = "MICRODATA" OR SOURCE.MACHINE = "PRIME" THEN + OPEN "", REC< I > TO FVJUNK ELSE + CALL *HELP.PRINT.B(UVREADMSG(073005,REC),2) + SLEEP 3 + GOTO 79 + END + file.opened = TRUE + SELECT FVJUNK + EOF = 0 + LOOP + READNEXT PGM.ID ELSE EOF = 1 + UNTIL EOF DO + IF PGM.ID[ 1, 1 ] = "$" THEN + DELETE FVJUNK, PGM.ID + END + REPEAT + END ELSE + file.opened = FALSE + PERFORM "CLEAR.FILE DICT " : REC< I > + END +* +* Resize file +* + If existing.type THEN + IF NOT(file.opened) THEN + OPEN "", REC< I > TO FVJUNK ELSE + CALL *HELP.PRINT.B(UVREADMSG(073005,REC),2) + SLEEP 3 + GOTO 79 + END + END + STATUS stat.variable FROM FVJUNK THEN + file.type=stat.variable<21> + END ELSE + file.type="1" + END + END +* + CALL *HELP.PRINT.B(message2<1>:REC:message2<2>:file.type:message2<3>,2) + PERFORM "RESIZE " : REC< I > :" ": file.type +79 NEXT I +* +9999 STOP +* +* +END diff --git a/Ardent/UV/APP.PROGS/CONVERT.PROC b/Ardent/UV/APP.PROGS/CONVERT.PROC new file mode 100755 index 00000000..4f6814dd --- /dev/null +++ b/Ardent/UV/APP.PROGS/CONVERT.PROC @@ -0,0 +1,225 @@ +$INCLUDE UNIVERSE.INCLUDE MACHINE.NAME +$INCLUDE UNIVERSE.INCLUDE MTF.INCL.H +****************************************************************************** +* +* Convert Procs From Microdata Format to Uni*Verse +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description........................................ +* 10/14/98 23801 SAP Change copyrights. +* 06/04/96 18438 JC Convert to NT +* 07/02/93 11629 KAM No longer hang when line is numeric or null +* 05/13/91 8345 DTM changed print to tprint +* 05/09/91 8331 DTM Fixed Enter.box.b to handle F.4 +* 2/26/91 7673 DTM Added paramter to ENTER.BOX.B for case checking +* 1/13/91 7673 DTM Final changes for FCS +* 12/17/90 7673 DTM Added motif menuing, initial programming +* +******************************************************************************* +* This subroutine will accept as an argument the value of the operation +* to perform. It can perform the following functions on spooler jobs: +****************************************************************************** +id = "%W%" +****************************************************************************** +* Various other variables +****************************************************************************** +****************************************************************************** +GOSUB init.files ;* Initialize /usr/spool/uv/sp.config +CALL *DRAW.SCRN.B(UVREADMSG(073720,""),1) +cmd=TRIM(@sentence) +word=FIELD(cmd,SPACE,1) +IF word="RUN" OR word="RAID" THEN + cmd=FIELD(cmd,SPACE,2,99) + word=FIELD(cmd,SPACE,1) + IF word="APP.PROGS" OR word="BP" THEN cmd=FIELD(cmd,SPACE,2,99) +END +cmd=FIELD(cmd,SPACE,2,999) + +IF cmd=NULL THEN + scratch=UVREADMSG(073723,"") + TPRINT @(4,3):scratch<1>: + TPRINT @(4,4):NULL: + TPRINT @(4,5):scratch<2>: + TPRINT @(4,6):scratch<3>: + TPRINT @(4,7):scratch<4>: + TPRINT @(4,8):NULL: + TPRINT @(4,9):scratch<5>: + TPRINT @(4,10):scratch<6>: + TPRINT @(4,11):scratch<7>: + CALL *HELP.PRINT.B(UVREADMSG(073728,""),2) +loop.here: + CALL *ENTER.BOX.B(13,4,24,UVREADMSG(073727,""),cmd,1) + IF cmd="*" THEN GOTO loop.here + IF cmd=NULL OR cmd=-1 THEN STOP + flag=0 + CALL *HELP.PRINT.B(NULL,3) + CALL *HELP.PRINT.B(UVREADMSG(073724,""),2) + CALL *YES.NO.BOX.B(11,UVREADMSG(073725,""),flag) + IF flag=1 THEN + CHAIN "PHANTOM RUN APP.PROGS CONVERT.PROC ":cmd + END +END +IF cmd="*" THEN EXECUTE "SELECTFL" ELSE SELECT cmd TO 0 +paths=NULL +LOOP + READNEXT file ELSE exit + READ item FROM f.voc,file THEN + name="DICT ":file + path=item<3> + GOSUB convert + IF item<5> # NULL THEN + name="PDICT "file + path=item<5> + GOSUB convert + END + IF UPCASE(item<4>[1,1])="M" THEN + top=item<2> + OPENPATH top TO f.file THEN + SSELECT f.file TO 1 + LOOP + READNEXT sid FROM 1 ELSE EXIT + name="DATA ":file:",":sid + path=top:"/":sid + GOSUB convert + REPEAT + END ELSE + CALL *HELP.PRINT.B(UVREADMSG(073726,""),2) + END + END ELSE + name="DATA ":file + path=item<2> + GOSUB convert + END + END +REPEAT +STOP + +* Convert '\' to '/' in case of NT pathnames + +convert '\' to '/' in path + +convert: + IF path="." OR path=NULL OR INDEX(path,"/",1) THEN RETURN + LOCATE path IN paths SETTING loc THEN RETURN ELSE paths=path + OPENPATH path THEN + CALL *HELP.PRINT.B(UVREADMSG(073721,name),2) + SELECT TO 2 + LOOP + READNEXT id FROM 2 ELSE EXIT + change = 0 + READU proc FROM id ELSE proc=NULL + IF UPCASE(proc[1,2])="PQ" THEN + cnt=DCOUNT(proc,@am) + FOR i=2 TO cnt + line=proc + len=LEN(line) + j=1 + LOOP + c=line[j,1] + WHILE (j<=len) AND (c=SPACE OR c=char(9) OR NUM(c)) DO + j += 1 + REPEAT + BEGIN CASE + CASE UPCASE(line[j,1]) = "X" + line[j,i]="Q" + proc=line + change=1 + CASE UPCASE(line[j,2]) = "IF" + op = 0 + j += 2 + c=UPCASE(line[j,1]) + IF UPCASE(line[j,1]) = "N" THEN + j+=1 + c=UPCASE(line[j,1]) + END + IF c # SPACE AND c # char(9) THEN GOTO ill + LOOP WHILE c=SPACE OR c=char(9) DO + j += 1 + c=UPCASE(line[j,1]) + REPEAT + IF c="#" THEN + j += 1 + c=UPCASE(line[j,1]) + LOOP WHILE c=SPACE OR c=char(9) DO + j += 1 + c=UPCASE(line[j,1]) + REPEAT + END + IF c="A"!c="E"!c="S"!c="!"!c="%"!c="&"!c="#"!c="@" + THEN + LOOP WHILE c#NULL AND c#SPACE AND c#char(9) DO + j += 1 + c=line[j,1] + REPEAT + END + ELSE + GOTO ill + END + LOOP WHILE c=SPACE OR c=char(9) DO + j += 1 + c=line[j,1] + REPEAT + IF op=0 & (c="="!c="<"!c=">"!c="["!c="]"!c="#") + THEN + j+=1 + c=line[j,1] + LOOP WHILE c=SPACE OR c=char(9) DO + j+=1 + c=line[j,1] + REPEAT + LOOP + WHILE c#NULL AND c#SPACE AND c#char(9) DO + k=c + j += 1 + c=line[j,1] + IF k='"'!k="'"!k="\"!k="(" THEN + IF k="(" THEN k=")" + j += 1 + c=line[j,1] + LOOP WHILE c#NULL AND c#k DO + j += 1 + c=line[j,1] + REPEAT + END + REPEAT + END + LOOP WHILE c=SPACE!c=char(9) DO + j += 1 + c=line[j,1] + REPEAT + IF UPCASE(c) = "X" THEN + line[j,1]="Q" + proc=line + change=1 + END +ill: + + END CASE + NEXT i + IF change THEN WRITE proc ON id ELSE release id + END + REPEAT + END ELSE + CALL *HELP.PRINT.B(UVREADMSG(073722,path),2) + END + RETURN + +init.files: + OPEN "","VOC" TO f.voc ELSE + CALL *HELP.PRINT.B(UVREADMSG(073005,"VOC"),2) + SLEEP 1 + STOP @(-1) + END + RETURN + +END diff --git a/Ardent/UV/APP.PROGS/CONVERT.VOC b/Ardent/UV/APP.PROGS/CONVERT.VOC new file mode 100755 index 00000000..0e40745b --- /dev/null +++ b/Ardent/UV/APP.PROGS/CONVERT.VOC @@ -0,0 +1,888 @@ +******************************************************************************* +* +* Convert a PRIME VOC or a PICK M/DICT to a uni*Verse VOC +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description......................................... +* 10/14/98 23801 SAP Change copyrights. +* 06/05/96 18438 JC Port to NT +* 05/04/93 11385 PVW Fixed so screen does appear. +* 08/24/92 9549 PVW Stop truncating of Prime Remote Pointers +* 08/03/92 8791 PVW Use ADDS suffix for IN2 conversion +* 07/27/92 8792 PVW Changed sleep period to 3 seconds before cls +* 07/15/92 9033 PVW Corrected spelling of remote from remove +* 07/14/92 9697 PVW Corrected spelling of vocabulatry in Title +* 05/13/91 8345 DTM changed print to tprint +* 05/09/91 8316 DTM Fixed screen message +* 05/09/91 8331 DTM Fixed Enter.box.b to handle F.4 +* 04/22/91 7121 GMH Added code to move description on F types +* 02/26/91 7673 DTM Added paramter to ENTER.BOX.B for case checking +* 12/31/90 7673 DTM Added motif menuing +* 06/08/90 7116 JWT reset remote flag after each loop +* 04/19/89 5890 JWT Added IN2 to conversion menu. Setup to run as PICK +* 07/25/88 - - Maintenence log purged at 5.2.1, see release 5.1.10. +* +******************************************************************************* + +$OPTIONS DEFAULT + +$INCLUDE UNIVERSE.INCLUDE DC.COMM.DECL +$INCLUDE UNIVERSE.INCLUDE FILENAMES.H +$INCLUDE UNIVERSE.INCLUDE MACHINE.NAME +$INCLUDE UNIVERSE.INCLUDE MTF.INCL.H + + prime.remote.ptr = 0 + counter=0 + NO.UCODES = 1 + equ PATH to UV.ROOT:'/' + equ TYPES to 15 + + equ o.VERB to 1 + equ o.CATALOG to 2 + equ o.KEYWORD to 3 + equ o.FILE to 4 + equ o.QPOINTER to 5 + equ o.ITYPE to 6 + equ o.DICT to 7 + equ o.PARAGRAPH to 8 + equ o.PHRASE to 9 + equ o.PROVERB to 10 + equ o.SENTENCE to 11 + equ o.REMOTE to 12 + equ o.MENU to 13 + equ o.USER to 14 + equ o.OTHER to 15 + + equ id.PICK to 1 + equ id.PRIME to 2 + + equ cat.ADDS to 1 + equ cat.MICRO to 2 + equ cat.PRIME to 3 + equ cat.ULTI to 4 + equ cat.IBM to 5 + + dim nosupport(TYPES) + dim noconvert(TYPES) + dim vocexists(TYPES,TYPES) + dim convertok(TYPES,TYPES) + dim out(TYPES) + dim in(TYPES) + + out(o.VERB) = "VERBS" + out(o.CATALOG) = "CATALOGED PROGRAMS" + out(o.KEYWORD) = "KEYWORDS" + out(o.FILE) = "FILES" + out(o.QPOINTER) = "Q-POINTERS" + out(o.ITYPE) = "I-TYPES" + out(o.DICT) = "DICTIONARY DEFINITIONS" + out(o.PHRASE) = "PHRASES" + out(o.PARAGRAPH)= "PARAGRAPHS" + out(o.PROVERB) = "PROVERBS" + out(o.SENTENCE) = "SENTENCES" + out(o.REMOTE) = "REMOTES" + out(o.MENU) = "MENUS" + out(o.USER) = "USER DEFINED ITEMS" + out(o.OTHER) = "UNIDENTIFIED ITEMS" + + TPRINT @(-1) + ftrans = "ISYS":@AM:UV.ROOT + + Title=PROD.NAMEU:" vocabulary conversion utility" + CALL *DRAW.SCRN.B(Title,1) + cvoc = "" + dest.voc = "" + sentence = trim( @sentence ) + word.count = dcount( sentence, " " ) + + for i = 1 to word.count + word = upcase( field( sentence, " ", i )) + begin case + case word = "CONVERT.VOC" + null + case word = "RUN" + i += 2 + case word = "RAID" + i += 2 + case word[ 1, 1 ] = "<" and len( word ) > 1 + cvoc = word[ 2, 999 ] + in.name = cvoc + case word = "FROM" or word[ 1, 1 ] = "<" + i += 1 + cvoc = field( sentence, " ", i ) + in.name = cvoc + case word[ 1, 1 ] = ">" and len( word ) > 1 + dest.voc = word[ 2, 999 ] + case word = "TO" or word = ">" + i += 1 + dest.voc = field( sentence, " ", i ) + case 1 + msg1="Invalid command line option. " + CALL *HELP.PRINT.B(msg1,2) + SLEEP 1 + STOP @(-1) + end case + next i + if dest.voc = "" then dest.voc = "VOC" + + title=NULL + title<1>=0 + title<2>="Computer" + title<3>="Operating System" + array=NULL + array<1,1>="ADDS" + array<1,2>="Mentor" + array<2,1>="IBM PC-XT" + array<2,2>="Pick" + array<3,1>="MICRODATA" + array<3,2>="Reality" + array<4,1>="PRIME" + array<4,2>="Information" + array<5,1>="ULTIMATE" + array<5,2>="Ultimate" + array<6,1>="IN2" + array<6,2>="IN-Pick" + csys=1 + msg10="Use arrow keys to highlight selection and press to select Computer and Operating System converting from." + CALL *HELP.PRINT.B(msg10,2) + CALL *LIST.BOX.B(title,5,6,array,6,3,csys,0) + IF csys=-1 THEN RETURN + msg2="Do you want a hard copy report?" + flag=1 + CALL *HELP.PRINT.B(NULL,3) + CALL *YES.NO.BOX.B(17,msg2,flag) + IF flag=-1 THEN RETURN + IF flag=1 THEN hcpy="Y" ELSE hcpy="N" + msg3="Include non-ERROR conversions on the report?" + flag=1 + CALL *YES.NO.BOX.B(17,msg3,flag) + IF flag=-1 THEN RETURN + IF flag=1 THEN ierr="Y" ELSE ierr="N" + + error.include = (upcase(ierr[1,1]) = "Y") + + begin case + * ADDS + case csys = 1 + suffix = "ADDS" + cat.id = "E6" + cat.type = cat.ADDS + goto PICKsetup + * IBM + case csys = 2 + suffix = "IBM" + cat.id = "E6" + cat.type = cat.IBM + goto PICKsetup + * MICRODATA + case csys = 3 + suffix = "MICRODATA" + cat.id = "10B4" + cat.type = cat.MICRO + goto PICKsetup + * PRIME + case csys = 4 + suffix = "PRIME" + cat.id = "IB" + cat.type = cat.PRIME + in(01) = "VERBS" + in(02) = "CATALOGED PROGRAMS" + in(03) = "KEYWORDS" + in(04) = "FILES" + in(05) = "I-TYPES" + in(06) = "DICTIONARY DEFINITIONS" + in(07) = "PHRASES" + in(08) = "PARAGRAPHS" + in(09) = "SENTENCES" + in(10) = "REMOTES" + in(11) = "MENUS" + in(12) = "USER DEFINED ITEMS" + in(13) = "UNIDENTIFIED ITEMS" + id.type = id.PRIME + in.count = 13 + cat.amc = 3 + if cvoc = "" then + cvoc = "PRIME.VOC" + in.name = "VOC" + end + dict.flag= 1 + gosub prime.remote.form + + * ULTIMATE + case csys = 5 + suffix = "ULTIMATE" + cat.id = "E6" + cat.type = cat.ULTI + goto PICKsetup + * IN2 - These parameters are a guess + case csys = 6 + suffix = "ADDS" + cat.id = "E6" + cat.type = cat.ADDS + goto PICKsetup + * PICK + case 1 + suffix = "PICK" + cat.id = "E6" + cat.type = cat.ADDS +PICKsetup: + in(01) = "VERBS" + in(02) = "CATALOGED PROGRAMS" + in(03) = "CONNECTIVES" + in(04) = "FILES" + in(05) = "Q-POINTERS" + in(06) = "PROCS" + in(07) = "DICTIONARY DEFINITIONS" + in(08) = "UNIDENTIFIED ITEMS" + id.type = id.PICK + cat.amc = 2 + in.count = 8 + if cvoc = "" then + cvoc = "PICK.VOC" + in.name = "M/DICT" + end + dict.flag= 0 + end case + msg4="Cannot open file - " + open dest.voc to f.voc else + CALL *HELP.PRINT.B(msg4:dest.voc,2) + SLEEP 3 + STOP @(-1) + END + msg5="Cannot open DICT - " + open "DICT", dest.voc to d.voc else + CALL *HELP.PRINT.B(msg5:dest.voc,2) + SLEEP 3 + STOP @(-1) + END + open cvoc to f.cvoc else + CALL *HELP.PRINT.B(msg4:cvoc,2) + SLEEP 3 + STOP @(-1) + END + if dict.flag then + open "DICT",cvoc to d.cvoc else + CALL *HELP.PRINT.B(msg5:cvoc,2) + SLEEP 3 + STOP @(-1) + END + end + + map = PATH:"CVI/":suffix + openpath map to f.map else + CALL *HELP.PRINT.B(msg4:map,2) + SLEEP 3 + STOP @(-1) + END + + open "NEWACC" to f.nac else + CALL *HELP.PRINT.B(msg4:"NEWACC",2) + SLEEP 3 + STOP @(-1) + END + + if id.type = id.PICK then + open "BASE_FILE" to f.base then + base.open = 1 + msg6="Delete the BASE_FILE when done ?" + delb=1 + CALL *HELP.PRINT.B(NULL,3) + CALL *YES.NO.BOX.B(17,msg6,delb) + IF delb=-1 OR delb=2 THEN delb="N" ELSE delb="Y" + end else + base.open = 0 + delb = "N" + end + end else + base.open = 0; + delb = "N" + end + +****************************************************************************** + + width = 4 + + sselect f.cvoc + if upcase(hcpy[1,1]) = "Y" then printer on; width = 6 + filename = in.name; vocname = dest.voc + file = f.cvoc; vocfile = f.voc + mat nosupport = ""; mat noconvert = "" + mat vocexists = ""; mat convertok = "" + cat.para = "" + + on id.type gosub convert.pick,convert.prime + if cat.para <> "" then + cat.para = "PA" : cat.para + write cat.para on f.voc, "&CATALOG.ALL&" + end + if dict.flag then + sselect d.cvoc + filename = "DICT " : in.name; vocname = "DICT " : dest.voc + file = d.cvoc; vocfile = d.voc + mat nosupport = ""; mat noconvert = "" + mat vocexists = ""; mat convertok = "" + on id.type gosub convert.pick,convert.prime + end + + if error.include and id.type = id.PRIME then + printer reset + h = "'C'Map of PRIMOS UFD''s to UNIX pathnames'LL'" + h:= "PRIMOS.UFD............... UNIX.pathname............'L'" + headinge h + footing "'LC' 'D' - Page 'P'" + n = dcount(ftrans<1>,@vm) + for i = 1 to n + tprint fmt(ftrans<1,i>,"l#25"):" ":ftrans<2,i> + next i + end + + if base.open and upcase(delb[1,1]) = "Y" then + execute "DELETE.FILE BASE_FILE" + end + stop + + +convert.prime: + ncvt = 0; + line=17 + counter=4 + CALL *HELP.PRINT.B(NULL,3) +convert.prime.loop: + prime.remote.ptr = 0 + readnext id else crt1=0; goto DUMP + read item from file,id else goto convert.prime.loop + + ncvt+=1 + if mod(ncvt,10)=0 then + counter+=1 + TPRINT @(counter,line):"*": + IF counter=70 THEN + counter=4 + line+=1 + IF line=20 THEN + CALL *HELP.PRINT.B(NULL,3) + line=17 + END + END + end + type = item[1,1]; + if type='P' then type=item[1,2] + + begin case + case type='V'; sub = 1; code = 1 + case type='K'; sub = 2; code = 3 + case type='F'; sub = 3; code = 4 + case type='I'; sub = 4; code = 5 + case type='D'; sub = 5; code = 6 + case type='PH'; sub = 5; code = 7 + case type='PA'; sub = 5; code = 8 + case type='S'; sub = 5; code = 9 + case type='R'; sub = 5; code = 10 + case type='M'; sub = 5; code = 11 + case type='X'; sub = 5; code = 12 + case 1; sub = 5; code = 13; type = "?" + end case + + on sub gosub PRIME.VERB,KEYWORD,PRIME.FILE,ITYPE,STUFF + + goto convert.prime.loop + +convert.pick: + ncvt = 0; + PFV = vocfile + LOGGING = 0 + SOURCE.MACHINE = "O" + line=17 + counter=4 + CALL *HELP.PRINT.B(NULL,3) +convert.pick.loop: + readnext id else crt1=0; goto DUMP + read item from file,id else goto convert.pick.loop + + ncvt+=1 + if mod(ncvt,10)=0 then + counter+=1 + TPRINT @(counter,line):"*": + IF counter=70 THEN + counter=4 + line+=1 + IF line=20 THEN + CALL *HELP.PRINT.B(NULL,3) + line=17 + END + END + end + type = item[1,1]; + if type='P' and item[2,1]='Q' then type="PQ" + + begin case + case type='P'; sub = 1; code = 1 + case type='C'; sub = 2; code = 3 + case type='D'; sub = 3; code = 4 + case type='A'; sub = 4; code = 7 + case type='S'; sub = 4; code = 7 + case type='X'; sub = 5; code = 7 + case type='Q'; sub = 5; code = 5 + case type='PQ'; sub = 5; code = 6 + case 1; sub = 5; code = 8; type = "?" + end case + + on sub gosub PICK.VERB,CONNECTIVE,PICK.FILE,PICK.DICT,STUFF + + goto convert.pick.loop + +DUMP: + PRINTER RESET + HEADINGE "'C'Conversion of ":suffix:" ":filename:" to ":PROD.NAME:" ":vocname:"'LL'" + FOOTING "'LC' 'D' - Page 'P'" + for i = 1 to in.count + msg = " not supported by ":PROD.NAME + rpt = nosupport(i) + gosub PRINT + + msg = " that cannot be converted" + rpt = noconvert(i) + gosub PRINT + + for j = 1 to TYPES + msg = " defined as different ":PROD.NAME:" ":out(j) + rpt = vocexists(i,j) + gosub PRINT + next + if error.include then + for j = 1 to TYPES + msg = " converted to ":PROD.NAME:" ":out(j) + rpt = convertok(i,j) + gosub PRINT + next + end + next + if cat.para <> "" then + tprint; tprint + tprint '"&CATALOG.ALL&" paragraph added to VOC file.' + end + return + +PRINT: + if rpt = "" then return + tprint; tprint + tprint in(i):msg + remove x from rpt setting z; k = 1; + loop + remove x from rpt setting z + tprint fmt(oconv(x,"mcp"),"l#18 "): + if mod(k,width)=0 then tprint + while z do + k+=1 + repeat + return + +PRIME.VERB: + n = dcount(item,@fm) + cvt = "V" + for i=2 to n + cvt := "*":item + next + loop while cvt[1]='*' do cvt = cvt[1,len(cvt)-1] repeat + if item<2> = "-RADIX" then cvt:="*":id + + goto GENERAL.VERB + +PICK.VERB: + n = dcount(item,@fm) + cvt = item<1> + for i=2 to n + cvt := "*":item + next + loop while cvt[1]='*' do cvt = cvt[1,len(cvt)-1] repeat + +GENERAL.VERB: + is.cat = ( item = cat.id ) + if is.cat then code+=1 + + gosub MAP + + if not( is.cat ) then convert "-" to "." in id + + begin case + case ccode = 0 + gosub CHECK.VOC + case ccode = 1 + nosupport(code) := @fm : id + case ccode = 2 + if is.cat then + begin case + case cat.type = cat.ADDS + cat.para := @AM : "CATALOG " : item< 5 > : " " : id + case cat.type = cat.IBM + cat.para := @AM : "CATALOG " : item< 6 > : " " : id + case cat.type = cat.MICRO + cname = "*":item<5>:"*":id + cname = cname[ 1, 41 ] + citem = "V":@fm:cname:@fm:"B":@fm:"BN" + gosub CHECK.VOC + case cat.type = cat.PRIME + if item<2>[1,1] = "*" then + cname = item<2>[ 1, 41 ] + citem = "V":@fm:cname:@fm:"B":@fm:"BN" + gosub CHECK.VOC + end else + gosub PRIME.CATALOG.LOCAL + gosub CHECK.VOC + end + case cat.type = cat.ULTI + cat.para := @AM : "CATALOG " : field( item< 5 >, " ", 1) + fnam = field(item<5>," ",2); + if fnam = "" then fnam = id + cat.para := " " : fnam + end case + end else + noconvert(code) := @fm : id + end + end case + return + +KEYWORD: + n = dcount(item,@fm) + cvt = "K" + for i=2 to n + cvt := "*":item + next + loop while cvt[1]='*' do cvt = cvt[1,len(cvt)-1] repeat + + gosub MAP + gosub CHECK.MAP + return + +CONNECTIVE: + cvt = item<1> + gosub MAP + gosub CHECK.MAP + return + +ITYPE: + n = index(item,@AM,15) + if n then item=item[1,n] + citem = replace(item,1;"I") + gosub CHECK.VOC + return + +PRIME.FILE: + fname = item<2>; gosub Ftrans; item<2> = fname + fname = item<3>; gosub Ftrans; item<3> = fname + gosub STUFF + return + +PICK.FILE: + if base.open then + read bitem from f.base,item<2> then + fnam = bitem<2> + end else + fnam = id + end + end else + fnam = id + end + gosub EFTOIF + citem = "F":@FM:pnam:@FM:"D_":pnam + gosub CHECK.VOC + return + +PICK.DICT: + ITEM.NAME = id + citem = item + call *DC.ITEM(citem , assoc.name , assoc.item , flag ) + gosub CHECK.VOC + return + +STUFF: + + cvt = type : "*" : id + gosub MAP + begin case + case ccode = 0 + gosub CHECK.VOC + case ccode = 1 + nosupport(code) := @fm : id + case ccode = 2 + citem = item + gosub CHECK.VOC + end case + return + +Ftrans: + directory.levels = count(fname,">") + if directory.levels then + prime.remote.ptr = 1 + * split prime pathname into directory and file + prime.directory = FIELD(fname,">",1,directory.levels) + prime.filename = FIELD(fname,">",directory.levels + 1,1) + * locate prime.directory in list + locate prime.directory in ftrans<1> by 'al' setting loc + then + unix.directory = ftrans<2,loc> + end + else + printer.on = system(1) + if printer.on then + PRINTER OFF + end + unix.directory = "" + call *HELP.PRINT.B(NULL,3) + call *HELP.PRINT.B(convert.form,3) + call *PUT.FORM.B(convert.form.size,convert.form,prime.directory:@AM:unix.directory,PRMPT,1) + loop + TPRINT convert.form: + temp = unix.directory + call *CINPUT.B(SEC.PRMPT,temp,special,convert.form,convert.form) + if NOT(temp = "" or temp = "*") + then + if temp[1,1] # "/" or temp[1,1] # "\" + then + temp = "/":temp + end + unix.directory = temp + end + until unix.directory # "" do + repeat + call *HELP.PRINT.B(NULL,3) + ins prime.directory before ftrans<1,loc> + ins unix.directory before ftrans<2,loc> + call *DRAW.SCRN.B(Title,1) + if printer.on then + PRINTER ON + end + end + + remote.file = unix.directory:"/&TRUNCATED&" + truncated.name = "" + openpath remote.file to truncated.file + then + readv truncated.name from truncated.file,prime.filename,2 + else + truncated.name = "" + end + end + close truncated.file + if truncated.name = "" + then + fnam = prime.filename + gosub EFTOIF + fname = unix.directory:"/":pnam + end + else + fname = unix.directory:"/":truncated.name + end + end +return + +MAP: + read mitem from f.map,cvt then + mtype = mitem<2> + cid = mitem<3> + begin case + case mtype = "C" + ccode = 0 + read citem from f.nac, cid else citem = "" + case mtype = "S" + ccode = 0 + citem = "S":@fm:cid + case mtype = "P" + ccode = 0 + citem = "PH":@fm:cid + case 1 + ccode = 1 + citem = "" + end case + end else + ccode = 2 + citem = "" + end + citem<1> = citem<1>[1,if citem<1>[1,1] = "P" then 2 else 1] + return + +CHECK.MAP: + begin case + case ccode = 0 + gosub CHECK.VOC + case ccode = 1 + nosupport(code) := @fm : id + case ccode = 2 + noconvert(code) := @fm : id + end case + return + +CHECK.VOC: + loop while citem[1]=@fm do citem = citem[1,len(citem)-1] repeat + read xitem from vocfile,id then + gosub IDENTIFY + xitem<1> = itype + if itype = "I" then + n = index(xitem,@AM,15) + if n then xitem=xitem[1,n] + end + loop while xitem[1]=@AM do xitem=xitem[1,len(xitem)-1] repeat + if itype = "F" and (citem<1>[2,9999] # "") then + xitem<1> = xitem<1>:citem<1>[2,9999] + write xitem on vocfile,id + end + if prime.remote.ptr + then + gosub PRIME.REMOTE.POINTER + end + else + if xitem = citem then + convertok(code,idtype) := @fm : id + end else + vocexists(code,idtype) := @fm : id + end + end + end else + xitem = citem + gosub IDENTIFY + convertok(code,idtype) := @fm : id + write citem on vocfile,id + end + return + +IDENTIFY: + itype = upcase(xitem[1,1]) + if itype = "P" then itype = upcase(xitem[1,2]) + begin case + case itype = "V"; idtype = if xitem<3> # "B" then o.VERB else o.CATALOG + case itype = "K"; idtype = o.KEYWORD + case itype = "F"; idtype = o.FILE + case itype = "Q"; idtype = o.QPOINTER + case itype = "I"; idtype = o.ITYPE + case itype = "D"; idtype = o.DICT + case itype = "PA"; idtype = o.PARAGRAPH + case itype = "PH"; idtype = o.PHRASE + case itype = "PQ"; idtype = o.PROVERB + case itype = "S"; idtype = o.SENTENCE + case itype = "R"; idtype = o.REMOTE + case itype = "M"; idtype = o.MENU + case itype = "X"; idtype = o.USER + case 1; idtype = o.OTHER + end case + return + +EFTOIF: + if fnam = '' then + pnam = '?' + end else + if fnam[1,1] = '.' then + pnam='?.'; m=2 + end else + pnam='' ; m=1 + end + l = len(fnam) + for j=m to l + c = fnam[j,1] + begin case + case c='?'; pnam:='??' + case c='/'; pnam:='?\' + case c='\'; pnam:='?\' + case c=char(0); pnam:='?0' + case 1; pnam:=c + end case + next j + end + return + +PRIME.CATALOG.LOCAL: +* +* Remove prefix $ or suffix .IRUN from item<2> to get program name. +* Prime item<4> gives directory name which when appended by .O results in +* basic objects file name under uniVerse. Locally catlogued universe files +* have voc entry for second field as the object programs pathname and the +* ninth field as object directory name. +* Also continue appending to cat.para. +* + if item<2>[1,1] = "$" + then + cname = item<2>[2,41] + end + else + pos.irun = index(item<2>,".IRUN",1) + if pos.irun + then + cname = item<2>[1,pos.irun-1] + end + else + cname = item<2> + end + end + citem<1> = "V" + citem<2> = item<4>:".O/":cname + citem<3> = "B" + citem<4> = "BN" + citem<9> = item<4>:".O" + cat.para := @AM : "CATALOG " : item<4> : " " : cname : " LOCAL" + return +PRIME.REMOTE.POINTER: + prime.remote.ptr = 0 + res1 = 0 ; res2 = 0 + if xitem = citem then + convertok(code,idtype) := @fm : id + end else + if itype = "F" then + diff.msg=str(" ",77) + diff.msg:=FMT("Prime remote pointer has equivalent VOC entry for record id = ":id,"L#77") + diff.msg:=FMT("PRIME.VOC entry : ":citem<1>:" ":citem<2>:" ":citem<3>,"L#77") + diff.msg:=FMT(" VOC entry : ":xitem<1>:" ":xitem<2>:" ":xitem<3>,"L#77") + msg8="Do you want to overwrite existing voc entry?" + CALL *HELP.PRINT.B(diff.msg,3) + CALL *YES.NO.BOX.B(11,msg8,res1) + if res1 then + convertok(code,idtype) := @fm : id + write citem on vocfile,id + slash.found = index(convert('\','/',xitem<2>),'/',1) + if slash.found then + null + end else + msg9= "Do you want to remove local files defined by this voc entry?" + CALL *YES.NO.BOX.B(17,msg9,res2) + if res2 then + delete.cmd='delete.file ':xitem<2> + execute delete.cmd + end + end + end else + vocexists(code,idtype) := @fm : id + end + end else + vocexists(code,idtype) := @fm : id + end + end + return + +prime.remote.form: + convert.msg = UVREADMSG(073740,"") + convert.form = NULL + convert.form.size = 2 + convert.form.line = 2 + convert.form.top = 4 + convert.form<1,1> = @(02,convert.form.top) + convert.form<1,2> = @(02,convert.form.top+2) + convert.form<1,3> = convert.msg<2> + convert.form<1,6> = 75 + convert.form<1,7> = 1 + convert.form<2,1> = @(02,convert.form.top+4) + convert.form<2,2> = @(02,convert.form.top+6) + convert.form<2,3> = convert.msg<3> + convert.form<2,4> = convert.msg<4> + convert.form<2,5> = convert.form<2,4> + convert.form<2,6> = 75 + convert.form<2,7> = 1 +return +end diff --git a/Ardent/UV/APP.PROGS/COUNTS b/Ardent/UV/APP.PROGS/COUNTS new file mode 100755 index 00000000..6547d24a --- /dev/null +++ b/Ardent/UV/APP.PROGS/COUNTS @@ -0,0 +1,26 @@ +******************************************************************************** +* +* Support of PR1ME subroutine '-COUNTS' +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description......................................... +* 10/14/98 23801 SAP Change copyrights. +* 07/25/88 - - Maintenence log purged at 5.2.1, see release 5.1.10. +* +******************************************************************************* + +$OPTIONS DEFAULT + +subroutine PR1ME(ans,m1,p1) + ans = COUNTS(m1,p1) +return diff --git a/Ardent/UV/APP.PROGS/CR.LFILE.B b/Ardent/UV/APP.PROGS/CR.LFILE.B new file mode 100755 index 00000000..a2ffc0d1 --- /dev/null +++ b/Ardent/UV/APP.PROGS/CR.LFILE.B @@ -0,0 +1,255 @@ +****************************************************************************** +* +* System Admin Transaction Logging - Create Log File +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description........................................ +* 10/14/98 23801 SAP Change copyrights. +* 11/03/95 17590 CSM no need to use recio to get last log number +* 11/14/94 15284 DTM Fixed READU situation so it would work at ISO2 +* 10/14/94 15104 DTM Fixed to verify number of prompts +* 08/24/94 14760 CSM make filsiz 512 multiple, streamline locking, blkwrts +* 05/15/94 13286 DTM Initial programming +* +******************************************************************************* +id = "%W%" +******************************************************************************* + * Inserts +$INCLUDE UNIVERSE.INCLUDE TLOG.H + + * Equates + + EQU MINIMUM.FILE.SIZE TO (10 * BKSIZE) ;* Smallest size in bytes + + * Initialize variables + + OPENED.FLAG = @FALSE + OPENED2.FLAG = @FALSE + LOCKED.FLAG = @FALSE + LOCKED2.FLAG = @FALSE + + * Check that this user is a system administrator + + ALLOWED = 0 + CALL *ISUSER.B(0, ALLOWED) + + IF NOT(ALLOWED) THEN + ERROR = NOT.ADMINISTRATOR.ERROR + GOSUB ERROR.SUB + GOTO EXIT + END + + * Do some initialization + + GOSUB INIT + LAST.SEQ = 0 + + * Loop to create new AL files + + FOR FILECR = 1 TO NUMBER.OF.FILES + + READU LOG.NEXT FROM UV.LOGS.DICT.FVAR, "LOG.NEXT" THEN + LOCKED.FLAG = @TRUE + END + SEQ.NUMBER = LOG.NEXT<2> + + FILENAME = AL.PREFIX : SEQ.NUMBER + + * Disable breaks, need a complete initialized log file + + BREAK OFF + + * Print message + + PRINT + PRINT "Creating " : FILENAME : " (Each '*' = 1024 bytes.)" + + * Get junk readu lock for ISO mode 2 support + + READU JUNK FROM UV.LOGS.FVAR,SEQ.NUMBER THEN + LOCKED2.FLAG = @TRUE + END + + + RECIO( SEQ.NUMBER, SIZE.OF.FILES, RECIO$CREATE ) + + IF @SYSTEM.RETURN.CODE THEN + ERROR = FAILED.CREATE.ERROR + GOSUB ERROR.SUB + GOTO EXIT + END + + * Write a new logfile record to UV.LOGS + + AI.REC = '' + AI.REC< AIF.CURR.DATE > = '' + AI.REC< AIF.CURR.TIME > = '' + AI.REC< AIF.FULL.DATE > = '' + AI.REC< AIF.FULL.TIME > = '' + AI.REC< AIF.SIZE > = SIZE.OF.FILES + AI.REC< AIF.STATUS > = 'A' + + WRITE AI.REC TO UV.LOGS.FVAR, SEQ.NUMBER ELSE + ERROR = CANNOT.WRITE.UV.LOGS.ERROR + GOSUB ERROR.SUB + GOTO EXIT + END + + LOCKED2.FLAG = @FALSE + + REC = "" + REC<1> = "X" + REC<2> = SEQ.NUMBER + 1 + + WRITE REC TO UV.LOGS.DICT.FVAR, "LOG.NEXT" ELSE + ERROR = CANNOT.WRITE.UV.LOGS.DICT.ERROR + GOSUB ERROR.SUB + GOTO EXIT + END + + LOCKED.FLAG = @FALSE + + * Enable breaks and tell them the good news + + BREAK ON + + PRINT FILENAME : " Created." + + NEXT FILECR + + * Finished + + GOTO EXIT + +*==== +INIT: +*==== + + TMP = TRIM( @SENTENCE ) + CNT = COUNT( TMP, " " ) + + IF ( CNT NE 2 ) THEN + ERROR = INCORRECT.NUM.ARGS + GOSUB ERROR.SUB + GOTO EXIT + STOP + END + SIZE.OF.FILES = FIELD( TMP, " ", 2 ) + NUMBER.OF.FILES = FIELD( TMP, " ", 3 ) + + PATH = "" ;* verify that logging directory exists. + RECIO( PATH, RECIO$PATH ) + IF PATH = "" THEN + ERROR = INVALID.UV.LOGS.DIR.ERROR + GOSUB ERROR.SUB + GOTO EXIT + END + * verify size is at lesat minimum, make it multiple of 512 + TEMP = MOD( SIZE.OF.FILES, 512 ) + SIZE.OF.FILES = SIZE.OF.FILES - TEMP + IF SIZE.OF.FILES < MINIMUM.FILE.SIZE THEN + ERROR = BLOCK.SIZE.TOO.SMALL.ERROR + GOSUB ERROR.SUB + GOTO EXIT + END + + * Open UV.LOGS + OPEN '', UV.LOGS.FILE.NAME TO UV.LOGS.FVAR ELSE + ERROR = CANNOT.OPEN.UV.LOGS.ERROR + GOSUB ERROR.SUB + GOTO EXIT + END + + OPENED.FLAG = @TRUE + + * Open DICT UV.LOGS + OPEN 'DICT', UV.LOGS.FILE.NAME TO UV.LOGS.DICT.FVAR ELSE + ERROR = CANNOT.OPEN.UV.LOGS.DICT.ERROR + GOSUB ERROR.SUB + GOTO EXIT + END + + OPENED2.FLAG = @TRUE + + RETURN + + + +*========= +ERROR.SUB: +*========= + + * Error handling routine + + PRINT @SYS.BELL + + BREAK ON + + * Set return code and report the error + + @SYSTEM.SET = -1 + + BEGIN CASE + CASE ERROR = CANNOT.OPEN.UV.LOGS.ERROR + PRINT 'Error: Cannot open UV.LOGS file, Status = ' : STATUS() + CASE ERROR = CANNOT.OPEN.UV.LOGS.DICT.ERROR + PRINT 'Error: Cannot open DICT UV.LOGS file, Status = ' : STATUS() + CASE ERROR = CANNOT.READ.UV.LOGS.ERROR + PRINT 'Error: Reading from UV.LOGS file, Status = ' : STATUS() + CASE ERROR = CANNOT.READ.UV.LOGS.DICT.ERROR + PRINT "Error: Cannot read DICT UV.LOGS LOG.NEXT record, Status = " : STATUS() + CASE ERROR = CANNOT.WRITE.UV.LOGS.ERROR + PRINT 'Error: Writing to UV.LOGS file, Status = ' : STATUS() + CASE ERROR = CANNOT.WRITE.UV.LOGS.DICT.ERROR + PRINT 'Error: Writing to UV.LOGS DICT file, Status = ' : STATUS() + CASE ERROR = FAILED.CREATE.ERROR + PRINT 'Error : Failed to create log file "': FILENAME : '", Status = ' : STATUS() + CASE ERROR = NOT.ADMINISTRATOR.ERROR + PRINT 'Error: Only the UniVerse Administrator can create log files.' + CASE ERROR = INVALID.UV.LOGS.DIR.ERROR + PRINT 'Error: No Logging Directory Exists.' + CASE ERROR = INCORRECT.NUM.ARGS + PRINT 'Error: Incorrect Number of arguments. ' + CASE ERROR = BLOCK.SIZE.TOO.SMALL.ERROR + PRINT 'Error: Block size too small. Must be at least ':MINIMUM.FILE.SIZE:' bytes.' + END CASE + + RETURN + + +*--------------- +EXIT: +*--------------- + + * Release the lock and close UV.LOGS + + IF LOCKED.FLAG THEN + RELEASE UV.LOGS.DICT.FVAR + END + + IF LOCKED2.FLAG THEN + RELEASE UV.LOGS.FVAR + END + + IF OPENED.FLAG THEN + CLOSE UV.LOGS.FVAR + END + + IF OPENED2.FLAG THEN + CLOSE UV.LOGS.DICT.FVAR + END + + STOP + END + +* END-CODE diff --git a/Ardent/UV/APP.PROGS/CR.LFILERAW.B b/Ardent/UV/APP.PROGS/CR.LFILERAW.B new file mode 100755 index 00000000..b6841e68 --- /dev/null +++ b/Ardent/UV/APP.PROGS/CR.LFILERAW.B @@ -0,0 +1,268 @@ +****************************************************************************** +* +* System Admin Transaction Logging - Create Log File +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description........................................ +* 10/14/98 23801 SAP Change copyrights. +* 06/26/98 23161 RGA Initial programming +* +******************************************************************************* +id = "%W%" +******************************************************************************* + * Inserts +$INCLUDE UNIVERSE.INCLUDE TLOG.H + + * Equates + + EQU MINIMUM.FILE.SIZE TO (10 * BKSIZE) ;* Smallest size in bytes + + * Initialize variables + + OPENED.FLAG = @FALSE + OPENED2.FLAG = @FALSE + LOCKED.FLAG = @FALSE + LOCKED2.FLAG = @FALSE + + * Check that this user is a system administrator + TRUE.OFFSET = 0 + ALLOWED = 0 + CALL *ISUSER.B(0, ALLOWED) + + IF NOT(ALLOWED) THEN + ERROR = NOT.ADMINISTRATOR.ERROR + GOSUB ERROR.SUB + GOTO EXIT + END + + * Do some initialization + + GOSUB INIT + LAST.SEQ = 0 + + * Loop to create new AL files + + FOR FILECR = 1 TO NUMBER.OF.FILES + + READU LOG.NEXT FROM UV.LOGS.DICT.FVAR, "LOG.NEXT" THEN + LOCKED.FLAG = @TRUE + END + SEQ.NUMBER = LOG.NEXT<2> + + FILENAME = AL.PREFIX : SEQ.NUMBER + + * Disable breaks, need a complete initialized log file + + BREAK OFF + + * Print message + + * PRINT + * PRINT "Creating " : FILENAME : " (Each '*' = 1024 bytes.)" + + * Get junk readu lock for ISO mode 2 support + + READU JUNK FROM UV.LOGS.FVAR,SEQ.NUMBER THEN + LOCKED2.FLAG = @TRUE + END + + * Calculate the starting offset of this new log + IF (NUMBER.OF.FILES > 1) THEN + TRUE.OFFSET = STARTING.OFFSET + ((FILECR - 1) * SIZE.OF.FILES) + END + IF (NUMBER.OF.FILES < 2) THEN + TRUE.OFFSET = STARTING.OFFSET + END + RECIO( SEQ.NUMBER, SIZE.OF.FILES, TRUE.OFFSET, RECIO$RAWCREATE ) + + IF (@SYSTEM.RETURN.CODE = FAILED.BADOFFSET.ERROR) THEN + ERROR = FAILED.BADOFFSET.ERROR + PRINT FAILED.BADOFFSET.ERROR + GOSUB ERROR.SUB + GOTO EXIT + END + + IF @SYSTEM.RETURN.CODE THEN + PRINT FAILED.CREATE.ERROR + ERROR = FAILED.CREATE.ERROR + GOSUB ERROR.SUB + GOTO EXIT + END + + * Write a new logfile record to UV.LOGS + AI.REC = '' + AI.REC< AIF.CURR.DATE > = '' + AI.REC< AIF.CURR.TIME > = '' + AI.REC< AIF.FULL.DATE > = '' + AI.REC< AIF.FULL.TIME > = '' + AI.REC< AIF.SIZE > = SIZE.OF.FILES + AI.REC< AIF.OFFSET > = TRUE.OFFSET + AI.REC< AIF.STATUS > = 'A' + + WRITE AI.REC TO UV.LOGS.FVAR, SEQ.NUMBER ELSE + ERROR = CANNOT.WRITE.UV.LOGS.ERROR + GOSUB ERROR.SUB + GOTO EXIT + END + + LOCKED2.FLAG = @FALSE + + REC = "" + REC<1> = "X" + REC<2> = SEQ.NUMBER + 1 + + WRITE REC TO UV.LOGS.DICT.FVAR, "LOG.NEXT" ELSE + ERROR = CANNOT.WRITE.UV.LOGS.DICT.ERROR + GOSUB ERROR.SUB + GOTO EXIT + END + + LOCKED.FLAG = @FALSE + + * Enable breaks and tell them the good news + + BREAK ON + + PRINT FILENAME : " Created." + + NEXT FILECR + + * Finished + + GOTO EXIT + +*==== +INIT: +*==== + + TMP = TRIM( @SENTENCE ) + CNT = COUNT( TMP, " " ) + + IF ( CNT NE 3 ) THEN + ERROR = INCORRECT.NUM.ARGS + GOSUB ERROR.SUB + GOTO EXIT + STOP + END + SIZE.OF.FILES = FIELD( TMP, " ", 2 ) + NUMBER.OF.FILES = FIELD( TMP, " ", 3 ) + STARTING.OFFSET = FIELD( TMP, " ", 4 ) + + PATH = "" ;* verify that raw logging device exists. + RECIO( PATH, RECIO$RAWPATH ) + IF PATH = "" THEN + ERROR = INVALID.UV.LOGS.DIR.ERROR + GOSUB ERROR.SUB + GOTO EXIT + END + * verify size is at lesat minimum, make it multiple of 512 + TEMP = MOD( SIZE.OF.FILES, 512 ) + SIZE.OF.FILES = SIZE.OF.FILES - TEMP + IF SIZE.OF.FILES < MINIMUM.FILE.SIZE THEN + ERROR = BLOCK.SIZE.TOO.SMALL.ERROR + GOSUB ERROR.SUB + GOTO EXIT + END + + * Open UV.LOGS + OPEN '', UV.LOGS.FILE.NAME TO UV.LOGS.FVAR ELSE + ERROR = CANNOT.OPEN.UV.LOGS.ERROR + GOSUB ERROR.SUB + GOTO EXIT + END + + OPENED.FLAG = @TRUE + + * Open DICT UV.LOGS + OPEN 'DICT', UV.LOGS.FILE.NAME TO UV.LOGS.DICT.FVAR ELSE + ERROR = CANNOT.OPEN.UV.LOGS.DICT.ERROR + GOSUB ERROR.SUB + GOTO EXIT + END + + OPENED2.FLAG = @TRUE + + RETURN + + + +*========= +ERROR.SUB: +*========= + + * Error handling routine + + PRINT @SYS.BELL + + BREAK ON + + * Set return code and report the error + + @SYSTEM.SET = -1 + + BEGIN CASE + CASE ERROR = CANNOT.OPEN.UV.LOGS.ERROR + PRINT 'Error: Cannot open UV.LOGS file, Status = ' : STATUS() + CASE ERROR = CANNOT.OPEN.UV.LOGS.DICT.ERROR + PRINT 'Error: Cannot open DICT UV.LOGS file, Status = ' : STATUS() + CASE ERROR = CANNOT.READ.UV.LOGS.ERROR + PRINT 'Error: Reading from UV.LOGS file, Status = ' : STATUS() + CASE ERROR = CANNOT.READ.UV.LOGS.DICT.ERROR + PRINT "Error: Cannot read DICT UV.LOGS LOG.NEXT record, Status = " : STATUS() + CASE ERROR = CANNOT.WRITE.UV.LOGS.ERROR + PRINT 'Error: Writing to UV.LOGS file, Status = ' : STATUS() + CASE ERROR = CANNOT.WRITE.UV.LOGS.DICT.ERROR + PRINT 'Error: Writing to UV.LOGS DICT file, Status = ' : STATUS() + CASE ERROR = FAILED.CREATE.ERROR + PRINT 'Error : Failed to create log file "': FILENAME : '", Status = ' : STATUS() + CASE ERROR = FAILED.BADOFFSET.ERROR + PRINT 'Error : Failed to create log file - invalid offset "': FILENAME : '", Status = ' : STATUS() + CASE ERROR = NOT.ADMINISTRATOR.ERROR + PRINT 'Error: Only the UniVerse Administrator can create log files.' + CASE ERROR = INVALID.UV.LOGS.DIR.ERROR + PRINT 'Error: No Logging Directory Exists.' + CASE ERROR = INCORRECT.NUM.ARGS + PRINT 'Error: Incorrect Number of arguments. ' + CASE ERROR = BLOCK.SIZE.TOO.SMALL.ERROR + PRINT 'Error: Block size too small. Must be at least ':MINIMUM.FILE.SIZE:' bytes.' + END CASE + + RETURN + + +*--------------- +EXIT: +*--------------- + + * Release the lock and close UV.LOGS + + IF LOCKED.FLAG THEN + RELEASE UV.LOGS.DICT.FVAR + END + + IF LOCKED2.FLAG THEN + RELEASE UV.LOGS.FVAR + END + + IF OPENED.FLAG THEN + CLOSE UV.LOGS.FVAR + END + + IF OPENED2.FLAG THEN + CLOSE UV.LOGS.DICT.FVAR + END + + STOP + END + +* END-CODE diff --git a/Ardent/UV/APP.PROGS/CREATE.LDIR.B b/Ardent/UV/APP.PROGS/CREATE.LDIR.B new file mode 100755 index 00000000..c6f0de93 --- /dev/null +++ b/Ardent/UV/APP.PROGS/CREATE.LDIR.B @@ -0,0 +1,152 @@ +****************************************************************************** +* +* Transaction Logging Routine to Create a Log Directory +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description........................................ +* 11/03/98 23924 RGA Create dummy entry for rawdisk. +* 10/14/98 23801 SAP Change copyrights. +* 08/05/96 19000 JC Fix creation of log directory. +* 06/03/96 18426 LA Re-implemented special sys admin option +* 03/25/96 18212 LAG Windows NT port +* 10/21/94 15120 DTM added changes for support of susp/shut inprogress +* 05/15/94 13286 DTM Initial Programming +* +******************************************************************************* +id = "%W%" +******************************************************************************* +$INCLUDE UNIVERSE.INCLUDE MTF.INCL.H +$INCLUDE UNIVERSE.INCLUDE TLOG.H +$INCLUDE UNIVERSE.INCLUDE FILENAMES.H +$INCLUDE UNIVERSE.INCLUDE MACHINE.NAME + +* Equate tokens for return values for sysadmin option + +EQU LDIR$DIREXISTS TO "0" +EQU LDIR$BADPATH TO "1" + +****************** +** Windows NT port +** +DEFFUN GET.DIRNAME(FILESPEC) CALLING "*GET.DIRNAME" +** +****************** + +temp = "" +CALL *ISUSER.B(0, temp) +IF temp = 0 THEN + TPRINT UVREADMSG(071000,"") + SLEEP 3 + STOP +END + +State ="" +RECIO( State, FINFO$AI.STATE, RECIO$FINFO ) + +IF State = AI$INITIAL OR State = AI$WARM.START OR State = AI$LOGGING OR State = AI$SUSPENDED OR State = AI$SUSP.PROG OR State = AI$SHUT.PROG THEN + PRINT "Cannot Create Logging Directory... Logging must be SHUTDOWN" + STOP +END + + +IF State = AI$FULL THEN + Cpt = "" + RECIO( Cpt, FINFO$AI.CHECKPOINT, RECIO$FINFO ) + IF Cpt = 1 THEN + PRINT "Cannot Create Logging Directory... Logging must be SHUTDOWN" + STOP + END +END +File.Name = FIELD( @SENTENCE, " ", 2 ) ;* get file name from command line +Option = FIELD( @SENTENCE, " ", 3 ) ;* see if we are from SysAdm +IF Option = "" THEN + Option = 0 +END + +;* First, open file +OPEN "DICT", LOGS.FILE to Log.File ELSE ;* open D_UV_LOGS files + PRINT ERR.OPEN.D + STOP +END + +;* Second, make sure we can create the directory + +****************** +** Windows NT port +** +IF OS.TYPE NE "UNIX" THEN + File.Name = CONVERT("/", "\", File.Name) +END +** +****************** + +Exec.uvfile = OS.EXEC:" '":UV.BIN:"/UVfile ":File.Name:"'" +Exec.mkdir = OS.EXEC:" '":"mkdir ":File.Name:"'" + +;* Make sure it does not already exist + +EXECUTE Exec.uvfile CAPTURING trashcan + +IF INDEX(trashcan, ": directory", 1) THEN + IF Option = 0 THEN + PRINT ERR.DIR:File.Name:")" + PRINT "File already exists" + END ELSE ;* called from sysadmin + PRINT LDIR$DIREXISTS + END + GOTO EXIT +END + +;* Try and create the directory + +EXECUTE Exec.mkdir CAPTURING trashcan + +;* See if it exists + +EXECUTE Exec.uvfile CAPTURING trashcan + +IF NOT(INDEX(trashcan, ": directory", 1)) THEN + IF Option = 0 THEN + PRINT ERR.DIR:File.Name:")" + path = GET.DIRNAME(File.Name) + PRINT "Path (":path:") not found" + END ELSE ;* called from sysadmin + PRINT LDIR$BADPATH + END + GOTO EXIT +END + +REC = "" ;* initialize dynamic array +REC<1> = "X" +REC<2> = File.Name + +;* Ok, now update record +WRITE REC ON Log.File, LOGS.DIR ELSE + PRINT ERR.WRITE.D + GOTO EXIT +END + +;* Create a dummy entry for rawdisk +REC = "" ;* initialize dynamic array +REC<1> = "X" +REC<2> = "" + +;* Ok, now update record +WRITE REC ON Log.File, LOGS.RAWDIR ELSE + PRINT ERR.WRITE.D + GOTO EXIT +END + +EXIT: + CLOSE Log.File +END diff --git a/Ardent/UV/APP.PROGS/CREATE.LRAW.B b/Ardent/UV/APP.PROGS/CREATE.LRAW.B new file mode 100755 index 00000000..0c79cbfd --- /dev/null +++ b/Ardent/UV/APP.PROGS/CREATE.LRAW.B @@ -0,0 +1,115 @@ +****************************************************************************** +* +* Transaction Logging Routine to Create a Raw Log Directory +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description........................................ +* 10/14/98 23801 SAP Change copyrights. +* 06/26/98 23161 RGA Raw Device support +* +******************************************************************************* +id = "%W%" +******************************************************************************* +$INCLUDE UNIVERSE.INCLUDE MTF.INCL.H +$INCLUDE UNIVERSE.INCLUDE TLOG.H +$INCLUDE UNIVERSE.INCLUDE FILENAMES.H +$INCLUDE UNIVERSE.INCLUDE MACHINE.NAME + +* Equate tokens for return values for sysadmin option + +EQU LDIR$BADPATH TO "1" +EQU LDIR$BADRAWDEV TO "2" + +****************** +** Windows NT port +** +DEFFUN GET.DIRNAME(FILESPEC) CALLING "*GET.DIRNAME" +** +****************** + + +temp = "" +CALL *ISUSER.B(0, temp) +IF temp = 0 THEN + TPRINT UVREADMSG(071000,"") + SLEEP 3 + STOP +END + +State ="" +RECIO( State, FINFO$AI.STATE, RECIO$FINFO ) + +IF State = AI$INITIAL OR State = AI$WARM.START OR State = AI$LOGGING OR State = AI$SUSPENDED OR State = AI$SUSP.PROG OR State = AI$SHUT.PROG THEN + PRINT "Cannot Create Logging Directory... Logging must be SHUTDOWN" + STOP +END + + +IF State = AI$FULL THEN + Cpt = "" + RECIO( Cpt, FINFO$AI.CHECKPOINT, RECIO$FINFO ) + IF Cpt = 1 THEN + PRINT "Cannot Create Logging Directory... Logging must be SHUTDOWN" + STOP + END +END +File.Name = FIELD( @SENTENCE, " ", 2 ) ;* get file name from command line +Option = FIELD( @SENTENCE, " ", 3 ) ;* see if we are from SysAdm +IF Option = "" THEN + Option = 0 +END + +;* First, open file +OPEN "DICT", LOGS.FILE to Log.File ELSE ;* open D_UV_LOGS files + PRINT ERR.OPEN.D + STOP +END + +;* Second, make sure the raw device exists + +Exec.uvfile = OS.EXEC:" '":UV.BIN:"/UVfile ":File.Name:"'" + +EXECUTE Exec.uvfile CAPTURING trashcan + +IF NOT(INDEX(trashcan, ": rawdevice", 1)) THEN + IF Option = 0 THEN + PRINT ERR.DIR:File.Name:")" + path = GET.DIRNAME(File.Name) + PRINT "Path (":path:") not found" + END ELSE ;* called from sysadmin + PRINT LDIR$BADRAWDEV + END + GOTO EXIT +END + +REC = "" ;* initialize dynamic array +REC<1> = "X" +REC<2> = File.Name + +;* Ok, now update record +WRITE REC ON Log.File, LOGS.RAWDIR ELSE + PRINT ERR.WRITE.D + GOTO EXIT +END + +EXIT: + CLOSE Log.File +END + + + + + + + + diff --git a/Ardent/UV/APP.PROGS/DC b/Ardent/UV/APP.PROGS/DC new file mode 100755 index 00000000..129aad4f --- /dev/null +++ b/Ardent/UV/APP.PROGS/DC @@ -0,0 +1,531 @@ +program DC +******************************************************************************* +* +* Convert dictionary item(s) from Pick to Uni*Verse format: +* entry point and main control loop +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description......................................... +* 10/22/98 23801 SAP Change company name to Ardent +* 10/14/98 23801 SAP Change copyrights. +* 06/05/96 18438 JC Port to NT +* 06/22/89 6086 CAC Handle X dictionary items when building @ phrase +* 07/25/88 - - Maintenence log purged at 5.2.1, see release 5.1.10. +* +******************************************************************************* +* +* The basis for this Pick-to-Uni*Verse dictionary converter was a +* Microdata-to-Prime converter written by J. Michael Cannady and +* Thomas J. Rauschenbach of Fulcrum Computer Group, Inc. Ardent +* was granted permission to use that code by Infocel, Inc., a successor +* of Fulcrum. +* +******************************************************************************* +* +$options DEFAULT +$include UNIVERSE.INCLUDE DC.COMM.DECL +* + dummy = @( 0, 0 ) + equ true to 1; equ false to 0 + equ CR to char( 13 ) : char( 10 ) +* +* << A "clear common" would be meaningless here, since we're using >> +* << named COMMON. So we must do it by hand. >> +* + VTYPE = "" + SOURCE.MACHINE = "" + EFV = "" + UFV = "" + PFV = "" + VOC = "" + LOGGING = 99 + FILE = "" + ITEM.NAME = "" + A.AMC = "" + PARSE.ONLY = "" + CRT.COL = "" + LPTR.COL = "" + MAINTAIN.WHICH = "" + A.REC.LEVEL = "" + NO.ERR = "" + ERR.REC = "" + UCODE.FV = "" + NO.UCODES = "" + PICK.LINE = "" +* + items.to.convert = "" + nogo.msg = "*** Not converted. ***" + using.select = false +* +* << Get rid of "DC " in the invoking sentence. >> +* + sentence = trim( @sentence ) + sentence = field( sentence, " ", 2, 9999 ) + if sentence[ 1, 1 ] = "-" then +* +* << User is allowed to answer the "send to printer", "name the source +* << machine", and "which style will you maintain" prompts with a single +* << option. E.g., "DC -NOU" means no printed output, other +* << (non-Microdata) source, and maintain UniVerse dictionaries. +* + options = upcase( field( sentence, " ", 1, 1 )) + good.options = true + for opt.pos = 1 to len( options ) + begin case + case options[ opt.pos, 1 ] = "Y" + LOGGING = true + case options[ opt.pos, 1 ] = "L" + LOGGING = true + case options[ opt.pos, 1 ] = "N" + LOGGING = false + case options[ opt.pos, 1 ] = "M" + SOURCE.MACHINE = "M" + case options[ opt.pos, 1 ] = "O" + SOURCE.MACHINE = "O" + case options[ opt.pos, 1 ] = "P" + MAINTAIN.WHICH = "P" + case options[ opt.pos, 1 ] = "U" + MAINTAIN.WHICH = "U" + case options[ opt.pos, 1 ] = "-" + null + case 1 + good.options = false + end case + next opt.pos + if good.options then + sentence = field( sentence, " ", 2, 9999 ) + end + end +* +* +* << Go get name of file to convert. >> + if len( sentence ) then + gosub 500 + FILE = stuff + loop + while ( len( sentence )) do + gosub 500 + ins stuff before items.to.convert< 1, -1, 0 > + repeat + end +* + open "" , "VOC" to VOC else + call @DC.MESSAGE( "Unable to open VOC.", "Dictionary converter halting." ) + stop + end +* + if items.to.convert then + gosub 75 + end else + gosub 50 + end +* +* Write out the error record, if required. +* + if not( NO.ERR ) and ERR.REC <> "" then + err.id = "DC.ERRORS_" : iconv( time(), "MD0" ) : "_" : date() + print + print 'Error list written to file "&SAVEDLISTS&" item "' : err.id : '".' + write ERR.REC on EFV, err.id + end + print + stop +* +* +* +****************************************************************************** +* S U B R O U T I N E S +****************************************************************************** +* +* +* +****************************************************** +50 +* Convert entire dictionary or multiple dictionaries +* +****************************************************** +* +* + list.of.files = "" +* + print @( -1 ) + print @( 0, 0 ) : str( "=", 79 ) + print @( 15, 2 ) : "Convert dictionaries from Pick to Uni*Verse format." + print @( 0, 4 ) : str( "=", 79 ) + print +* + if LOGGING = 99 then + print "Send listing to the printer (Y/N) " : + input ans + if ans[ 1, 1 ] = "N" then + LOGGING = false + end else + LOGGING = true + end + print + end +* +* << Either the user has a SELECT list of files to convert, or he has >> +* << given us a single file name, or we must prompt him. >> +* + if FILE = "" then +* +* << The user didn't provide us a single file name. See if there's >> +* << a SELECT list. >> +* + eosl = false + using.select = true + readnext FILE from 0 else + using.select = false + eosl = true + FILE = "" + end + if eosl then +* +* << No SELECT list. Must prompt for file name. >> +* + print "Enter name of dictionary to convert, " + print " or '*' for all local dictionaries " : + input ans + begin case + case ans = "*" + using.select = true + execute "SELECTFL TO 1" + eov = false + loop + readnext vocitem.name from 1 else eov = true + until eov do + read vocitem from VOC, vocitem.name then + if count( convert('\','/',vocitem< 3 >), "/" ) = 0 and vocitem.name[ len( vocitem.name ) - 1, 2 ] <> ".O" and vocitem.name[ 1, 3 ] <> "VOC" and vocitem.name[ 1, 1 ] <> "&" then + FILE = vocitem.name + print "Convert DICT " : FILE : " (y/n) " : + input ans + if ans[ 1, 1 ] = "Y" or ans[ 1, 1 ] = "y" then + list.of.files = insert( list.of.files, -1; FILE ) + end + end + end else + print "A SELECTed item -- " : vocitem.name : + print " -- cannot be read from your VOC." + end + repeat + case ans = "" + stop + case 1 + list.of.files = ans + end case + end else +* +* << There was a SELECT list. Use it. >> +* + loop + list.of.files = insert( list.of.files, -1; FILE ) + readnext FILE from 0 else eosl = true + until eosl do + repeat + end + end else +* +* << We were given an explicit file name. >> +* + list.of.files = FILE + end +* +* << Now convert the files in the list. >> +* + loop + while list.of.files <> "" do + FILE = list.of.files< 1 > + list.of.files = delete( list.of.files, 1 ) + gosub 100 + repeat + return +* +* +* +********************************************* +75 +* Convert only specified dictionary item(s) +* +********************************************* +* +* + LOGGING = false + call @DC.OPENS( true, proceed ); * Open files. + if not( proceed ) then stop; * Abort conversion. + readv SOURCE.MACHINE from PFV, "&PICK.SOURCE.MACHINE&", 1 else + SOURCE.MACHINE = "O" + end + nbr.items = count( items.to.convert, @VM ) + 1 + for di = 1 to nbr.items + ITEM.NAME = items.to.convert< 1, di > +* + read dict.item from PFV, ITEM.NAME then + call @DC.MESSAGE( fmt( "Converting " : ITEM.NAME, "L#25" ), "" ) + if ITEM.NAME <> "@ID" and ITEM.NAME[ 1, 6 ] <> "&PICK." then + gosub 300; * Check D/TYPE and A/AMC + if not( skip.item ) then + gosub 400; * Convert the dictionary item + end; * if not( skip.item ) + end; * if not @ID and not &PICK. + end else; * read then +* +* << It was deleted. Delete Uni*Verse version as well. >> +* + print "Deleting DICT " : FILE : " " : ITEM.NAME : "." + sleep 1 + delete UFV, ITEM.NAME +* + end; * read +* + if num( ITEM.NAME ) and ITEM.NAME then +* +* << Numeric item-ID. Be sure that it's in the @-phrase. >> +* + gosub 200 + end; * if num( ITEM.NAME ) +* + next di + return +* +* +* +************************************ +100 +* Main conversion control routine. +* +************************************ +* +* + call @DC.OPENS( using.select, proceed ); * Open files. + if not( proceed ) then return; * Abort conversion of current dict. + + if LOGGING then + left.half = iconv((( 110 - len( FILE )) / 2), "MD0" ) + right.half = 110 - len( FILE ) - left.half + print on 1 str( "#", 130 ) + print on 1 str( "#", left.half ) : space( 20 + len( FILE )) : str( "#", right.half ) + print on 1 str( "#", left.half ) : " Converting DICT " : FILE : " ": + print on 1 str( "#", right.half ) + print on 1 str( "#", left.half ) : space( 20 + len( FILE )) : str( "#", right.half ) + print on 1 str( "#", 130 ) + print on 1 + end + print + print "Converting DICT " : FILE +* + sselect PFV to 2; * Use SELECT list 2 for item list +* +* << Copy all items from P_FILE to D_FILE, converting if valid. >> +* + eop = false + loop + readnext ITEM.NAME from 2 else eop = true + until eop do +120 read dict.item from PFV, ITEM.NAME else + print "SELECTed item '": ITEM.NAME : + print "' cannot be read from PDICT " : FILE : "." + print "Enter to try again, anything else to quit " + input ans: + if ans = "" then + GOTO 120 + end else + proceed = false + return + end + end + if ITEM.NAME[ 1, 6 ] <> "&PICK." and ITEM.NAME <> "@ID" then + call @DC.MESSAGE( fmt( ITEM.NAME, "L#25" ), "" ) + gosub 300; * Check D/TYPE, A/AMC + if not( skip.item ) then + gosub 400; * Convert the item. + end + end + repeat +* +* +* << Create the "@" dictionary entry to control listings. >> +* + gosub 200 +* + read dict.item from UFV, "@ID" else + dict.item = "" + dict.item< 1 > = "D" + dict.item< 2 > = 0 + dict.item< 4 > = FILE + dict.item< 5 > = "10R" + dict.item< 6 > = "S" + write dict.item on UFV, "@ID" + end +* +* Compile the I-descriptors. +* + print + print "Compiling I-descriptors." + execute "CD " : FILE + print + print + if LOGGING then + print on 1 char( 12 ) + end + return +* +* +* +************************************ +300 +* Check D/TYPE and A/AMC of Pick +* item. +* +************************************ +* +* +* << Convert items with A or S D/TYPES. Copy any others as they are. >> +* + skip.item = false; * Convert or not? + dict.item< 1 > = trim( dict.item< 1 >) + begin case + case ITEM.NAME = FILE or ITEM.NAME = "DL/ID" + delete UFV, ITEM.NAME; * Will change to "@ID" + dict.item< 1 > = "A"; * In Pick, is "D" + dict.item< 2 > = 0; * In Pick, is the base frame + dict.item< 3 > = ITEM.NAME; * In Pick, is the modulo + ITEM.NAME = "@ID" +* + case dict.item< 1 >[ 1, 1 ] = "A" or dict.item< 1 >[ 1, 1 ] = "S" + if num( dict.item< 2 > ) and count( dict.item< 2 >, @VM ) = 0 then + null + end else + call @DC.MESSAGE( "Non-numeric A/AMC: " : dict.item< 2 > : ".", "Copied verbatim." ) + call @DC.MESSAGE( nogo.msg, CR ) + if not( NO.ERR ) then + ins FILE : " " : ITEM.NAME before ERR.REC< -1 > + end + skip.item = true + end +* + case 1 + call @DC.MESSAGE( "Unconvertible D/TYPE: " : dict.item< 1 > : ".", "Copied verbatim." ) + call @DC.MESSAGE( nogo.msg, CR ) + if not( NO.ERR ) then + ins FILE : " " : ITEM.NAME before ERR.REC< -1 > + end + skip.item = true +* + end case + if skip.item then + write dict.item on UFV, ITEM.NAME + end + return +* +* +* +************************************ +400 +* Read the item. Call @DC.ITEM to +* convert it, then write it. +* +************************************ +* +* + assoc.item = "" + assoc.name = "" + result = "" +* +*410 read dict.item from UFV, ITEM.NAME else +* print "SELECTed item '": ITEM.NAME : +* print "' cannot be read from DICT '" : FILE : "'." +* print "Enter to try again, 'Q' to quit" +* input pause : +* if pause = "" then +* goto 410 +* end else +* call @DC.MESSAGE( "Dictionary converter halting.", "" ) +* stop +* end +* end +* + call @DC.ITEM( dict.item, assoc.name, assoc.item, result ) +* + if result then + call @DC.MESSAGE( "Converted.", CR ) + end else + call @DC.MESSAGE( nogo.msg, CR ) + end +* + write dict.item on UFV, ITEM.NAME +* + return +* +* +* +************************************************************************** +500 +* Parse the command-line sentence for the next name. It may be quoted, +* and, if it is, it may contain blanks. +* +************************************************************************** +* +* + loop + while sentence[ 1, 1 ] = " " do + sentence = sentence[ 2, len( sentence )] + repeat +* + stuff = "" + if sentence[ 1, 1 ] = '"' or sentence[ 1, 1 ] = "'" or sentence[ 1, 1 ] = "\" then + quote = sentence[ 1, 1 ] + sentence = sentence[ 2, len( sentence )] + loop + while sentence[ 1, 1 ] <> quote and len( sentence ) do + stuff := sentence[ 1, 1 ] + sentence = sentence[ 2, len( sentence )] + repeat + if sentence[ 1, 1 ] <> quote then + call @DC.MESSAGE( "Unable to parse command-line sentence: ", sentence ) + stop + end + sentence = sentence[ 2, len( sentence )] + end else + stuff = field( sentence, " ", 1 ) + sentence = sentence[ COL2() + 1, LEN( sentence )] + end + return +* +* +******************************** +200 +* Create/amend the @-phrase +******************************** +* + at.phrase = "" + quit.loop = false + for i = 1 to 100 until quit.loop + read xx from UFV, i then + if xx<1>[1,1] # 'X' then at.phrase := " " : i + end else + quit.loop = true + end + next i + at.phrase = trim( at.phrase ) + if at.phrase then + at.rec = "" + at.rec< 1 > = "PH" + at.rec< 2 > = at.phrase + write at.rec on UFV, "@" + end else + delete UFV, "@" + end + return +end + diff --git a/Ardent/UV/APP.PROGS/DC.A b/Ardent/UV/APP.PROGS/DC.A new file mode 100755 index 00000000..6cbb43a9 --- /dev/null +++ b/Ardent/UV/APP.PROGS/DC.A @@ -0,0 +1,425 @@ +subroutine DC.A( psource, ucode, result ) +******************************************************************************* +* +* Convert dictionary item(s) from Pick to Uni*Verse format: +* parse A correlatives/conversions for correct syntax +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description......................................... +* 10/22/98 23801 SAP Change company name to Ardent +* 10/14/98 23801 SAP Change copyrights. +* 02/23/90 5454 JWT Fix error in processing parenthesized expressions. +* if first character of expression is not a valid +* leading character for a conversion code, we +* need to recurse in DC.A rather than calling +* DC.CORR.CONV +* 07/25/88 - - Maintenence log purged at 5.2.1, see release 5.1.10. +* +******************************************************************************* +* +* The basis for this Pick-to-Uni*Verse dictionary converter was a +* Microdata-to-Prime converter written by J. Michael Cannady and +* Thomas J. Rauschenbach of Fulcrum Computer Group, Inc. Ardent +* was granted permission to use that code by Infocel, Inc., a successor +* of Fulcrum. +* +******************************************************************************* +* +* Parse A correlatives/conversions for correct syntax +* +* Arguments: +* psource - the Pick dictionary item's conversion code +* ucode - the returned Uni*Verse conversion code +* result - Boolean: returned "true" if the conversion is successful, +* false otherwise +* +* This subroutine parses the "psource" to insure that it is a valid A +* correlative or conversion. The form is: +* A(expression) +* where an "expression" may comprise one or more of the following: +* +* 1. A numeric AMC, optionally followed by an 'R' (repeat or reuse code). +* 2. "N(name)", where "name" is a dictionary entry for an attribute +* 3. "string", a literal string enclosed within pairs of "s, 's, or \s. +* 4. "number", a constant number enclosed within pairs "s, 's, or \s. +* 5. 'D', the internal system date. +* 6. 'T', the internal system time. +* 7. A special system counter operand: +* a. "NI", the current item counter +* b. "ND", the number of detail lines since BREAK +* c. "NV", the current multivalue counter +* d. "NS", the current submultivalue counter +* e. "NB", the current BREAK level +* f. "LPV", load the result of the last correlative/conversion +* 8. A function: +* a. 'R', the remainder after integer division of the first +* attribute/constant by the second. E.g., "R( 2, '5' )" +* returns the mod when attribute 2's value is divided by 5. +* b. 'S', the sum of the multivalues. E.g., +* "S(6)" sums the multivalues of attribute 6. +* c. "[]", substring. AMCs, literal numbers, or expressions can +* comprise the arguments within the brackets. E.g., if the +* value of attribute 3 is 9, then "7[ '2', 3 ]" will return +* the second through ninth characters of attribute 7. +* d. "IF (expression) THEN (expression) ELSE (expression) +* 9. An arithmetic operator: +* a. "*(n)", multiply operands +* The optional 'n' is the descaling factor (i.e., result +* is divided by 10 raised to the nth power). +* b. '/', divide operands (integer division) +* c. '+', add operands +* d. '-', subtract operands +* e. ':', concatenate operands +* 10. A relational operator: +* a. '=', equal to +* b. '<', less than +* c. '>', greater than +* d. '#', not equal to +* e. "<=", less than or equal to +* f. ">=", greater than or equal to +* g. "<>", not equal to +* 11. A parenthesized expression: +* a. "(expression)" used for ordering; must follow an operator +* b. "(conversion)" used to apply another conversion to a value; +* may not follow an operator +* +************************************************************************ +* +$options DEFAULT +$include UNIVERSE.INCLUDE DC.COMM.DECL +* + equ true to 1 + equ false to 0 +* +* + ucode = "A" + psource = psource[ 2, len( psource )] + result = 1 + need.right.paren = 0 + need.right.bracket = 0 + need.then = 0 + need.else = 0 + need.comma = 0 + OPERATOR.LAST = true +* + loop + char1 = psource[ 1, 1 ] + while len( psource ) and char1 <> @VM and char1 <> "}" and not( char1 = "]" and need.right.bracket = 0 ) + begin case + case char1 matches "1N" +* +* << AMC. Get all the digits >> +* + loop + temp = psource[ 1, 1 ] + while temp matches "1N" do + ucode := temp + psource = psource[ 2, len( psource )] + repeat + if psource[ 1, 1 ] = "R" then; * Reuse code + ucode := "R" + psource = psource[ 2, len( psource )] + end + OPERATOR.LAST = false +* + case psource[ 1, 2 ] = "N(" +* +* << Attribute name: N(name) >> +* + loop + temp = psource[ 1, 1 ] + until temp = "" or temp = ")" do + ucode := temp + psource = psource[ 2, len( psource )] + repeat + if temp <> ")" then + call @DC.MESSAGE( '"N( name )" function missing right parenthesis:', psource ) + result = 0 + return + end + ucode := ")" + psource = psource[ 2, len( psource )] + OPERATOR.LAST = false +* + case char1 = '"' or char1 = "'" or char1 = "\" +* +* << Quoted expression: "EXP" >> +* + quote = char1 + ucode := quote + psource = psource[ 2, len( psource )] + loop + temp = psource[ 1, 1 ] + until temp = quote or temp = "" or temp = @VM do + ucode := temp + psource = psource[ 2, len( psource )] + repeat + if temp <> quote then + call @DC.MESSAGE( "Quoted string missing closing quotation mark:", psource ) + result = 0 + return + end + ucode := quote + psource = psource[ 2, len( psource )] + OPERATOR.LAST = false +* + case psource[ 1, 2 ] = "NI" or psource[ 1, 2 ] = "ND" or psource[ 1, 2 ] = "NB" or psource[ 1, 2 ] = "NS" or psource[ 1, 2 ] = "NV" +* +* << Current item counter >> +* << Number of detail lines since last BREAK >> +* << Current multivalue counter >> +* << Current submultivalue counter >> +* << Current break level >> +* + ucode := "@" : psource[ 1, 2 ] + psource = psource[ 3, len( psource )] + OPERATOR.LAST = false +* + case psource[ 1, 3 ] = "LPV" +* +* << Load value from previous correlative/conversion >> +* + ucode := "@LPV" + psource = psource[ 4, len( psource )] + OPERATOR.LAST = false +* + case psource[ 1, 2 ] = "R(" or psource[ 1, 2 ] = "S(" +* +* << Remainder function: R(n,m) >> +* << Summation function: S(n) >> +* + if psource[ 1, 2 ] = "R(" then + need.comma += 1 + end + ucode := psource[ 1, 2 ] + psource = psource[ 3, len( psource )] + need.right.paren += 1 + OPERATOR.LAST = false +* + case char1 = "[" +* +* << Substring specification: AMC[ m, n ] >> +* + ucode := "[" + psource = psource[ 2, len( psource )] + need.right.bracket += 1 + need.comma += 1 + OPERATOR.LAST = true +* + case char1 = ")" + if need.right.paren = 0 then + call @DC.MESSAGE( "Extraneous closing parenthesis:", psource ) + result = 0 + return + end + ucode := ")" + need.right.paren -= 1 + psource = psource[ 2, len( psource )] + OPERATOR.LAST = false +* + case char1 = "]" + if need.right.bracket = 0 then + call @DC.MESSAGE( "Extraneous closing bracket:", psource ) + result = 0 + return + end + ucode := "]" + need.right.bracket -= 1 + psource = psource[ 2, len( psource )] + OPERATOR.LAST = false +* + case char1 = "," + if need.comma = 0 then + call @DC.MESSAGE( "Extraneous comma:", psource ) + result = 0 + return + end + ucode := "," + need.comma -= 1 + psource = psource[ 2, len( psource )] + OPERATOR.LAST = true +* + case psource[ 1, 2 ] = "IF" +* +* << IF/THEN/ELSE statement coming up. >> +* + ucode := "IF" + psource = psource[ 3, len( psource )] + need.then += 1 + OPERATOR.LAST = true +* + case psource[ 1, 4 ] = "THEN" +* +* << IF/THEN/ELSE statement continuing. >> +* + ucode := "THEN" + psource = psource[ 5, len( psource )] + need.then -= 1 + need.else += 1 + OPERATOR.LAST = true +* + case psource[ 1, 4 ] = "ELSE" +* +* << IF/THEN/ELSE statement finishing. >> +* + ucode := "ELSE" + psource = psource[ 5, len( psource )] + need.else -= 1 + OPERATOR.LAST = true +* + case char1 = "*" or char1 = "/" or char1 = "+" or char1 = "-" or char1 = ":" +* +* << Arithmetic or concatenation operator. Take it. >> +* + ucode := char1 + psource = psource[ 2, len( psource )] + OPERATOR.LAST = true + +* + case psource[ 1, 3 ] = "OR " +* +* << Logical or. >> +* + ucode := "OR " + psource = psource[ 4, len( psource )] + OPERATOR.LAST = true +* + case psource[ 1, 4 ] = "AND " +* +* << Logical and. >> +* + ucode := "AND " + psource = psource[ 5, len( psource )] + OPERATOR.LAST = true +* + case psource[ 1, 2 ] = "<=" or psource[ 1, 2 ] = ">=" or psource[ 1, 2 ] = "<>" +* +* << Relational operators. >> +* + ucode := psource[ 1, 2 ] + psource = psource[ 3, len( psource )] + OPERATOR.LAST = true +* + case char1 = "=" or char1 = "#" or char1 = "<" or char1 = ">" +* +* << Relational operators. >> +* + ucode := char1 + psource = psource[ 2, len( psource )] + OPERATOR.LAST = true +* + case char1 = "(" +* +* << Conversion code (conv) or parenthetical expression (n) >> +* + psource = psource[ 2, len( psource )] + loop + temp = psource[ 1, 1 ] + while temp = " " do + psource = psource[ 2, len( psource )] + repeat + psource = "(" : psource + if not( OPERATOR.LAST ) then + hold.psource = psource + psource = "" + op = 1; cp = 0; quit.loop = false + for k = 2 to len( hold.psource ) until quit.loop + if hold.psource[ k, 1 ] = "(" then + op += 1 + end else + if hold.psource[ k, 1 ] = ")" then + cp += 1 + end + end + if cp = op then + quit.loop = true + nbr.chars = k + end else + psource := hold.psource[ k, 1 ] + end + next k + conv.code = "" + index.type = index( "ACDFGLMPRSTU", psource[1,1], 1 ) + if index.type < 1 + then + call @DC.A( "A;":psource, conv.code, result ) + end + else + call @DC.CORR.CONV( "", "", psource, conv.code, result ) + end + if result then + ucode := hold.psource[ 1, nbr.chars ] + psource = hold.psource[ nbr.chars + 1, 999 ] + end + OPERATOR.LAST = false + end else + ucode := "(" + psource = psource[ 2, len( psource )] + need.right.paren += 1 + OPERATOR.LAST = true + end +* + case char1 = ";" or char1 = " " or char1 = "D" or char1 = "T" +* +* << Semicolon, spaces taken in. Likewise date and time. >> +* + ucode := psource[ 1, 1 ] + psource = psource[ 2, len( psource ) ] + if char1 = "D" or char1 = "T" then + OPERATOR.LAST = false + end +* + case 1 +* +* << Conversion code, or error >> +* + call @DC.MESSAGE( "Invalid expression in A conversion: ", psource ) + result = 0 + return + end case + repeat +* + if need.right.paren <> 0 then + call @DC.MESSAGE( '"A" conversion missing closing parenthesis: ', ucode ) + result = 0 + return + end +* + if need.right.bracket <> 0 then + call @DC.MESSAGE( '"A" conversion missing closing bracket: ', ucode ) + result = 0 + return + end +* + if need.then <> 0 then + call @DC.MESSAGE( '"A" conversion conditional missing "THEN" clause: ', ucode ) + result = 0 + return + end +* + if need.else <> 0 then + call @DC.MESSAGE( '"A" conversion conditional missing "ELSE" clause: ', ucode ) + result = 0 + return + end +* + if need.comma <> 0 then + call @DC.MESSAGE( '"A" conversion text extraction missing comma: ', ucode ) + result = 0 + return + end +* + if psource[ 1, 1 ] = "]" or psource[ 1, 1 ] = "}" then + psource[ 1, 1 ] = @VM + return +end diff --git a/Ardent/UV/APP.PROGS/DC.CORR.CONV b/Ardent/UV/APP.PROGS/DC.CORR.CONV new file mode 100755 index 00000000..ec1329e8 --- /dev/null +++ b/Ardent/UV/APP.PROGS/DC.CORR.CONV @@ -0,0 +1,1110 @@ +subroutine DC.CORR.CONV( home.amc, pkey, psource, ucode, result ) +******************************************************************************* +* +* Convert dictionary item(s) from Pick to Uni*Verse format: +* convert all correlatives to I descriptors, +* parse all conversions for correct syntax +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description......................................... +* 10/22/98 23801 SAP Change company name to Ardent +* 10/14/98 23801 SAP Change copyrights. +* 07/25/88 - - Maintenence log purged at 5.2.1, see release 5.1.10. +* +******************************************************************************* +* +* The basis for this Pick-to-Uni*Verse dictionary converter was a +* Microdata-to-Prime converter written by J. Michael Cannady and +* Thomas J. Rauschenbach of Fulcrum Computer Group, Inc. Ardent +* was granted permission to use that code by Infocel, Inc., a successor +* of Fulcrum. +* +******************************************************************************* +* +* +* Arguments: +* +* home.amc - The AMC of the item being converted +* +* pkey - The data on which the conversion is to be performed +* +* psource - The Pick V/CORR or V/CONV code. It will be modified. +* +* ucode - The resulting Uni*Verse I-descriptor/conversion code. +* +* result - Boolean: returned "true" if process succeeds, "false" +* otherwise +* +************************************************************************ +$options DEFAULT +$include UNIVERSE.INCLUDE DC.COMM.DECL +* + equ true to 1, false to 0 + err.msg = "" +* + key = pkey ;* << We don't want to modify pkey >> + save.psource = psource + open.parens = 0 + ucode = "" + if PARSE.ONLY then + word = "conversion" + end else + word = "correlative" + end +* +* + result = true + first.iteration = true + loop + real.code = false + loop + until real.code do +* + begin case + case psource[ 1, 1 ] = " " + psource = psource[ 2, len( psource )] + case psource[ 1, 1 ] = @VM or psource[ 1, 1 ] = "}" or psource[ 1, 1 ] = "]" + if PARSE.ONLY then + ucode := @VM ;* was " := ';'" + end + psource = psource[ 2, len( psource ) ] + if psource = "" and not( first.iteration ) then + call @DC.MESSAGE( "Multivalued " : word : " contains null value.", "" ) + end + case psource[ 1, 1 ] = "(" + open.parens += 1 + if PARSE.ONLY then + ucode := "(" + end + psource = psource[ 2, len( psource ) ] + case psource[ 1, 1 ] = ")" + open.parens -= 1 + if PARSE.ONLY then + ucode := ")" + end + psource = psource[ 2, len( psource ) ] + case 1 + real.code = true + end case + repeat + if not( result ) then return +* + while len( psource ) do +* +* << Strip leading blanks. Get the first letter, and dispatch off it. >> +* +* + first.iteration = false + + first.letter = psource[ 1, 1 ] + index.type = index( "ACDFGLMPRSTU", first.letter, 1 ) + corr.source = "" + conv.source = "" + if index.type < 1 then + call @DC.MESSAGE( "Unrecognizable " : word : " code: ", psource ) + result = false + return + end + pos = 2 + on index.type gosub 1000, 2000, 3000, 4000, 5000, 6000, 7000, 8000, 9000, 10000, 11000, 12000 +* +* +* << Since "key" is taken as the data to be converted, it is here >> +* << assigned the results of the previous conversion. In this way >> +* << multiple correlatives get nested. >> +* + if PARSE.ONLY then + ucode := conv.source + end else + if corr.source then + key = corr.source + end + end +* + repeat + + if open.parens > 0 then + call @DC.MESSAGE( "Missing closing parenthesis: ", psource ) + result = false + return + end + if open.parens < 0 then + call @DC.MESSAGE( "Extraneous closing parenthesis: ", psource ) + result = false + return + end + if not( PARSE.ONLY ) then + ucode = key + end + return +* +* +* +************************ +* +* +************* +1000 +* We have an "A" correlative. +* +************* +* + call @DC.A( psource, conv.source, result ) + if not( PARSE.ONLY ) then + corr.source = "OCONV( " : key : ", \" : conv.source : "\ )" + end + return +* +* +* +************* +2000 +* We have a "C". Must be the concatenation correlative. +* +************* +* Form is: +* C*n +* Where +* * is the character to insert between concatenated attributes or +* literals. A ";" is reserved to mean no separation character +* n is any AMC; or any literal string enclosed in single quotation +* marks ('), double quotation marks ("), or backslashes (\); or any +* named attribute (e.g., "N(name)" ); or an asterisk. +************* +* +* << Skip the "C", and get the separator. >> +* + sep = psource[ 2, 1 ] + if sep matches "1N" or sep = '"' or sep = "'" then + sep = "" + pos = 2 + end else + pos = 3 + end +* + gosub 19000; * << Strip any leading blank. >> +* +* +* << Now see what we are to concatenate. >> +* + corr.source = "C" : sep + arg.count = 0 + char1 = psource[ pos, 1 ] + loop + while pos <= len( psource ) and result and char1 <> "}" and char1 <> "]" and char1 <> @VM do + quote = "" + amc = "" + string = "" + temp = psource[ pos, 1 ] + begin case + case temp matches "1N" +* +* << It's an AMC. Get all the digits. >> +* + loop + temp = psource[ pos, 1 ] + while temp matches "1N" and pos <= len( psource) do + amc := temp + pos += 1 + repeat + corr.source := amc + arg.count += 1 +* + case temp = '"' or temp = "'" or temp = "\" +* +* << It's a quoted string. >> +* + quote = temp + loop + pos += 1 + temp = psource[ pos, 1 ] + until temp = quote do + string := temp + if pos > len( psource ) then + call @DC.MESSAGE( "Quoted string missing closing quotation mark: ", psource ) + result = false + corr.source = "" + return + end + repeat + corr.source := quote : string : quote + pos += 1 + arg.count += 1 +* + case psource[ pos, 2 ] = "N(" +* +* << Attribute name: N(name) >> +* + name = "" + pos += 1 + loop + pos += 1 + temp = psource[ pos, 1 ] + until temp = "" or temp = ")" do + name := temp + repeat + if temp <> ")" then + call @DC.MESSAGE( '"N( name )" function missing right parenthesis:', psource ) + result = false + return + end + pos += 1; * get past ")" + corr.source := "N(" : name : ")" + arg.count += 1 +* + case psource[ pos, 1 ] = ";" + pos += 1; + corr.source := ";" +* + case 1 + corr.source := temp + arg.count += 1 + pos += 1 + end case + repeat +* + if arg.count < 1 or not( result ) then + call @DC.MESSAGE( "Invalid concatenation code: ", psource ) + corr.source = "" + result = false + return + end +* +* << Recode. >> +* + corr.source = "OCONVS( " : key : ', \' : corr.source : '\ )' + conv.source = psource[ 1, pos - 1 ] +* +* << Zap the psource. >> +* + psource = psource[ pos, len( psource )] + return +* +* +* +************* +3000 +* We got a "D". Since D1/D2 associations have already been removed in +* DC, this must be Date specifier. +* +************* +* Forms: +* D [ n ][ dm ][ s ] +* +* Where n is the single-digit number of digits of the year to print, +* d is any nonnumeric, non-system delimiter field delimiter, +* m is the single-digit number of fields to skip +* s is any non-numeric, non-system delimiter character used +* to separate the month, day, and year fields on output, or +* a special one- or two-character format subcode (D, I, J, M, MA, Q, +* W, WA, or Y). +* +************ +* +* +* Date conversions can't contain value marks, so let's extract +* the code we want to play with. +* + date.code = psource + N = ""; D = ""; M = ""; S = "" + pos = 2 + loop + temp = date.code[ pos, 1 ] + while ( pos <= len( date.code )) and ( temp <> ")" ) and temp <> "}" and temp <> @VM and temp <> "]" do + begin case + case num( temp ) and N = "" + N = temp + pos += 1 + case num( temp ) and N <> "" and D <> "" and M = "" + M = temp + pos += 1 + case num( temp ) + call @DC.MESSAGE( "Invalid date conversion:", date.code ) + corr.source = "" + result = false + return + case index( "DMAQWAY", date.code[ pos, 1 ], 1 ) + loop + while index( "DMAQWAY", date.code[ pos, 1 ], 1 ) and pos <= len( date.code ) do + S := date.code[ pos, 1 ] + pos += 1 + repeat + case not( D ) + D = temp + pos += 1 + case N <> "" and D <> "" and M <> "" and S = "" + S = temp + pos += 1 + case 1 + call @DC.MESSAGE( "Invalid date conversion:", date.code ) + corr.source = "" + result = false + return + end case + repeat + +* +* Code it. +* + corr.source = "OCONVS( " : key : ', \D' : N : D : M : S : '\ )' + conv.source = psource[ 1, pos - 1 ] + result = true +* + psource = psource[ pos, len( psource )] + return +* +* +* +************** +4000 +* We got an "F". Go parse the function correlative. +* +************** + call @DC.F( psource, corr.source, result ) + if result and not( PARSE.ONLY ) then + corr.source = "OCONV( " : key : ", \" : corr.source : "\ )" + end else + conv.source = corr.source + end + return +* +* +* +************** +5000 +* We got a "G". That means a group extraction. +* +************** +* Form is: +* Gmcn +* Gcn +* Where m is the number of segments to skip, +* c is the segment delimiter, and +* n is the number of segments to take. +* +************* +* +* << First find the m. >> +* + M = "" + N = "" + C = "" + loop + temp = psource[ pos, 1 ] + while temp matches "1N" and pos <= len( psource ) do + M := temp + pos += 1 + repeat +* +* << Now get the delimiter character. >> +* + C = temp + pos += 1 +* +* << Now get the n. >> +* + N = "" + loop + temp = psource[ pos, 1 ] + while temp matches "1N" and pos <= len( psource ) do + N := temp + pos += 1 + repeat +* + if N = "" and M <> "" then + N = M + M = "" + end + + if N < 1 then; * << n must be positive. >> + call @DC.MESSAGE( "Negative group extraction code:", psource ) + corr.source = "" + result = false + return + end +* +* << Recode. >> +* + corr.source = "OCONVS( " : key : ', \' : "G" : M : C : N : '\ )' + conv.source = psource[ 1, pos - 1 ] + result = true +* +* << Zap the psource. >> +* + psource = psource[ pos, len( psource ) ] + return +* +* +* +************** +6000 +* We got an "L" or length specification. +* +************** +* Forms: +* Lm +* Lm,n +* Where m is the maximum number of characters acceptable, and +* n is the minimum number of characters acceptable. +************** +* +* << First find the max. >> +* + m = "" + comma = "" + n = "" + loop + temp = psource[ pos, 1 ] + while temp matches "1N" do + m := temp + pos += 1 + repeat +* + if m = "" then + call @DC.MESSAGE( "Invalid length " : word, psource ) + corr.source = "" + result = false + return + end +* + if pos < len( psource ) then +* + gosub 19000; * << Strip any spaces. >> +* +* << Now see if there's a comma. >> +* + if temp = "," or temp = "-" then + comma = "," + pos += 1 +* +* << Now get the n. >> +* + n = "" + loop + temp = psource[ pos, 1 ] + while temp matches "1N" do + n := temp + pos += 1 + repeat + end + end +* +* << Fix the source, and code up the conversion. >> +* + corr.source = "OCONVS( ": key : ', \L' : m : comma : n : '\ )' + conv.source = psource[ 1, pos - 1 ] + psource = psource[ pos, len( psource )] + return +* +* +* +************** +7000 +* We got an "M". Could be MD (mask decimal), +* ML (mask left), +* MR (mask right), +* MF (mask field -- UV does not handle this ), +* MP (packed decimal) +* MT (time), +* MCA (mask alphabetic), +* MCL (mask lower-case), +* MCN (mask numerics), +* MCP (make printable), +* MCT (capitalize all words), +* MCU (mask upper-case), +* MC/A (mask nonalphabetic), +* MC/N (mask nonnumerics), +* MX (hexadecimal/decimal), +* MCDX (decimal/hexadecimal), +* MCXD (hexadecimal/decimal), +* MX0C (hexadecimal/ASCII), +* MB (binary/decimal), +* MB0C (binary/ASCII), +* MO (octal/decimal), +* MO0C (octal/ASCII) +* +************** +* + temp2 = psource[ 1, 2 ] + temp3 = psource[ 1, 3 ] + temp4 = psource[ 1, 4 ] + begin case + case temp4 = "MTHS" or temp4 = "MTSH" or temp4 = "MO0C" or temp4 = "MB0C" or temp4 = "MX0C" or temp4 = "MCDX" or temp4 = "MCXD" or temp4 = "MC/N" or temp4 = "MC/A" + corr.source = "OCONVS( " : key : ', \' : temp4 : '\ )' + conv.source = psource[ 1, 4 ] + psource = psource[ 5, len( psource )] + result = true + + case temp3 = "MTS" or temp3 = "MTH" or temp3 = "MCA" or temp3 = "MCL" or temp3 = "MCN" or temp3 = "MCP" or temp3 = "MCT" or temp3 = "MCU" + corr.source = "OCONVS( " : key : ', \' : temp3 : '\ )' + conv.source = psource[ 1, 3 ] + psource = psource[ 4, len( psource )] + result = true + + case temp2 = "MD" or temp2 = "ML" or temp2 = "MR" + gosub 15000 + + case temp2 = "MF" + call @DC.MESSAGE( 'Incompatibility. Uni*Verse has no "MF" coversion', psource ) + corr.source = "" + conv.source = "" + result = false + + case temp2 = "MP" or temp2 = "MB" or temp2 = "MO" or temp2 = "MT" + corr.source = "OCONVS( " : key : ', \' : temp2 : '\ )' + conv.source = psource[ 1, 2 ] + psource = psource[ 3, len( psource )] + result = true + + case temp2 = "MX" + call @DC.MESSAGE( '"MX" converted to "MCDX".', "" ) + corr.source = "OCONVS( " : key : ", \MDCX\ )" + conv.source = "MCDX" + psource = psource[ 3, len( psource )] + result = true + + case 1 ;* << It's bad. >> + call @DC.MESSAGE( '"Masked" ' : word : ' expected:', psource ) + corr.source = "" + result = false +* + end case + return +* +* +* +************** +8000 +* It's a pattern-match conversion. +* +************** +* Form: +* P (pattern) +* Where the pattern can contain one or more of the following codes: +* nN tests for n numeric characters +* nA tests for n alphabetic characters +* nX tests for n alphanumeric characters +* xxx tests for a literal string +* +* E.g., P(3N-2N-4N) returns a valid Social Security Number (stored with +* hyphens), or null. +* +************** +* +* Get the string up to a terminator: +* NULL +* @VM +* ) +*************** + pos = 3 + mask = "" + loop + temp = psource[ pos, 1 ] + while temp <> "" and temp <> @VM and temp <> ")" do + mask := temp + pos += 1 + repeat +* +* Now code it. +* + corr.source = 'OCONVS( ' : key : ', \P(' : mask : ')\ )' + conv.source = psource[ 1, pos - 1 ] + result = true +* +* Fix psource. +* + psource = psource[ pos + 1, len( psource )] + return +* +* +* +* +************** +9000 +* We got an "R" or range specification. +* +************** +* Forms: +* Rn,m[;n,m;...] +* Where n is the minimum data value acceptable, +* m is the maximum data value acceptable. +* +************** +* +* + loop + temp = psource[ pos, 1 ] + if temp = "-" then temp = "," + while pos <= len( psource ) do + if temp matches "1N" or temp = "," or temp = ";" or temp = " " then + corr.source := temp + end else + call @DC.MESSAGE( "Invalid range " : word, psource ) + corr.source = "" + result = false + return + end + pos += 1 + repeat +* +* << Fix the source, and code up the conversion. >> +* + corr.source = "OCONVS( ": key : ', \R' : trim( corr.source ) : '\ )' + conv.source = psource[ 1, pos - 1 ] + psource = psource[ pos, len( psource )] + return +* +* +* +************** +10000 +* We got an "S" or substitution conversion. +* +************** +* Forms: +* S;amc1;'string' +* S;amc1;amc2 +* S;amc1;* +* Where amc1 is the number of the field to test, +* 'string' is the replacement value in the event amc1 is null or zero, +* amc2 is the number of the attribute whose value is to be +* substituted in the event amc1 is null or zero +* * means to substitute the current value +* Actually, the S conversion processor will take damned near any syntax, so +* we can't afford to check too closely. +************** +* +* + conv.source = "S" + loop + char1 = psource[ pos, 1 ] + while char1 <> @VM and char1 <> "}" and char1 <> "]" and pos <= len( psource ) and not( char1 = ")" and pos = len( psource )) do + conv.source = conv.source : char1 + pos += 1 + repeat +* +* +* << Fix the source, and code up the conversion. >> +* + psource = psource[ pos, len( psource )] + corr.source = "OCONVS( " : key : ', \' : conv.source : '\)' + return +* +* +* +************** +11000 +* We got a "T". Could be text or translate. +* +************** +* + punct = "" + tpos = 2 + loop + while tpos <= len( psource ) and punct = "" do + tchar = psource[ tpos, 1 ] + begin case + case tchar = ";" + punct = ";" + case tchar = @VM or tchar = "]" or tchar = "}" or tchar = "," + punct = "*" ;* << or whatever >> + case 1 + null + end case + tpos += 1 + repeat + if punct = ";" then + gosub 17000 ;* << It's a Tfile >> + end else + gosub 16000 ;* << It's text. >> + end + return +* +* +* +************** +12000 +* "U" code. On Pick systems, this names a frame containing assembler. +* We have implemented most of the standard user exits. Any others +* (user-written assembler, e.g.) we'll convert and issue a warning. +* +************** +* + frame = psource[ 2, 4 ] + if NO.UCODES then + if frame <> "20E0" and frame <> "307A" and frame <> "30E0" and frame <> "407A" and frame <> "50BB" and frame <> "60BB" and frame <> "60E0" and frame <> "70E0" and frame <> "7201" and frame <> "80E0" then + call @DC.MESSAGE( "Unable to verify user exit U" : frame : ".", "Item copied." ) + end + end else + junk = "" + readv junk from UCODE.FV, frame, 1 else + call @DC.MESSAGE( "Unsupported user exit: U" : frame : ".", "Item copied." ) + end + end + corr.source = "OCONVS( " : key : ', \U' : frame : '\)' + conv.source = "U" : frame + psource = psource[ 6, len( psource )] + return +* +* +* +************* +15000 +* It's an MD (Masked Decimal) or ML (Mask Left) or MR (Mask Right) +* specification. +* +************* +* Get the string up to a terminator: +* NULL +* @VM +* ) +*************** + pos = 1 + mask = "" + corr.source = psource[ 1, 2 ]; * "MD", "ML", or "MR" + which.code = '"' : corr.source : '" ' : word + pos = 3 + escape = false + loop + temp = psource[ pos, 1 ] + begin case + case temp matches "1N" + corr.source := temp + case index( "CDEMNPTZ$,-<", temp, 1 ) + precision.scaling = 0 + corr.source := temp + case temp = "(" + mask.open.parens = 1 + mask = temp + loop + pos += 1 + temp = psource[ pos, 1 ] + while pos <= len( psource ) and mask.open.parens and temp <> "]" and temp <> "}" and temp <> @VM and temp <> "" do + mask := temp + if temp = "(" then + mask.open.parens += 1 + end else + if temp = ")" then + mask.open.parens -= 1 + end + end + repeat + if mask.open.parens > 0 then + call @DC.MESSAGE( which.code : " missing closing parenthesis: ", psource ) + result = false + end else + if mask.open.parens < 0 then +call @DC.MESSAGE( "Extraneous closing parenthesis in " : which.code : ":", psource ) + result = false + end else + pos -= 1 + end + end + corr.source := mask + escape = true + case temp = "#" or temp = "*" or temp = "%" or temp = " " + mask = temp + loop + pos += 1 + temp = psource[ pos, 1 ] + while pos <= len( psource ) and temp <> ")" and temp <> "}" and temp <> "]" and temp <> @VM and temp <> "" do + mask := temp + repeat + corr.source := mask + if temp = ")" then pos -= 1 + escape = true + case temp = ")" and open.parens + escape = true + pos -= 1 + case 1 + call @DC.MESSAGE( 'Invalid option "' : temp : '" in ' : which.code : ":", psource ) + result = false + end case + if not( result ) then return + pos += 1 + until escape or pos > len( psource ) do + repeat +* +* << Now code it. >> +* + corr.source = "OCONVS( " : key : ', \' : corr.source : '\ )' + conv.source = psource[ 1, pos - 1 ] + result = true +* +* << Fix psource. >> +* + psource = psource[ pos, len( psource )] + return +* +* +* +************* +16000 +* It's a Text extraction. +* +************* +* Forms: +* Tm,n +* Tn +* N.B.: 1st form is the same as [m,n]. +* 2nd form depends on the V/TYPE +* If V/TYPE is "L" then it's the same as [1,n]. +* If V/TYPE is "R" then it's the same as [n]. +* +************* + m = "" + n = "" +* +* Get n. m is optional and is indicated if the following is stopped +* by a comma. +* + loop + temp = psource[ pos, 1 ] + while temp matches "1N" do + n := temp + pos += 1 + repeat +* +* << So was there a comma? >> +* + if temp = "," then +* +* << Form is Tm,n . >> +* + m = n + n = "" + pos += 1 + loop + temp = psource[ pos, 1 ] + if temp = " " then + pos += 1 + temp = psource[ pos, 1 ] + end + while temp matches "1N" do + n := temp + pos += 1 + repeat + if m < 1 then m = 1 + if len( n ) < 1 then + call @DC.MESSAGE( "Text extraction - missing or negative length:", psource ) + corr.source = "" + result = false + return + end +* +* << Code for Tm,n. >> +* + corr.source = "OCONVS( " : key : ', \T' : m : "," : n : '\ )' + end else +* +* << Form is Tn. >> +* + corr.source = "OCONVS( " : key : ', \T' : n : '\ )' + end + conv.source = psource[ 1, pos - 1 ] +* +* << Fix psource. >> +* + psource = psource[ pos, len( psource )] + result = true + return +* +* +* +************** +17000 +* It's a file translation. +* +************** +* Form: +* T [ * or DICT ] file ; c[ n ] ; i ; o [ ;b ] +* Where * is the DICT indicator (optional), +* file is the file name, with no imbedded ";", +* c is the translation failure action code, +* n is the (optional) value mark count to be returned if the +* item is multivalued +* i is the input AMC, and +* o is the output AMC. +* b is the (optional) AMC to be used instead of o in BREAK-ON and +* TOTAL lines +* +************** +* +* << Check for DICT indicator. >> +* + gosub 19000; * Strip leading blanks. + if psource[ pos, 1 ] = "*" then + dict = "DICT " + pos += 1 + end else + if psource[ pos, 5 ] = "DICT " then + dict = "DICT " + pos += 5 + end else + dict = "" + end + end +* +* << Get the file name. >> +* + tfile = "" + loop + temp = psource[ pos, 1 ] + while temp <> ";" and len( temp ) > 0 do + tfile := temp + pos += 1 + repeat + pos += 1 + tfile = trim( tfile ) +* +* << Got a file name? >> +* + if len( tfile ) < 1 then + call @DC.MESSAGE( "TFILE " : word : " specifies no file name:", psource ) + conv.source = "" + corr.source = "" + result = false + return + end +* +* Get the translation option. +* + gosub 19000; * Strip any leading blank + C = psource[ pos, 1 ] + pos += 1 + if C = '"' or C = "'" or C = "\" and psource[ pos + 1, 1 ] = C then + C = psource[ pos, 1 ]; * In case they quoted the damned thing + pos += 2 + end +* +* << Ensure that the option is valid. >> +* + begin case + case C = "I" + case C = "O" + case C = "C" + case C = "V" + case C = "X" + case 1 + call @DC.MESSAGE( "TFILE " : word : " has invalid translation subcode:", psource ) + corr.source = "" + conv.source = "" + result = false + return + end case +* +* << Get the value mark count, if any. >> +* + N = "" + loop + temp = psource[ pos, 1 ] + while temp # ";" and len( temp ) > 0 do + N := temp + pos += 1 + repeat + pos += 1 + if N = " " then N = "" + if N <> "" and not( N matches "0N" ) then + call @DC.MESSAGE( "TFILE " : word : " has invalid value mark count:", psource ) + corr.source = "" + conv.source = "" + result = false + return + end +* +* << Get the input AMC. >> +* + I = "" + loop + temp = psource[ pos, 1 ] + while temp <> ";" and len( temp ) > 0 do + I := temp + pos += 1 + repeat + pos += 1 + if I = " " then I = "" + if I <> "" and not( I matches "0N" ) then + call @DC.MESSAGE( "TFILE " : word : " has invalid input AMC:", psource ) + corr.source = "" + conv.source = "" + result = false + return + end +* +* << Get the output AMC. >> +* + O = "" + loop + temp = psource[ pos, 1 ] + while temp matches "1N" do + O := temp + pos += 1 + repeat +* +* << Output AMC OK? >> +* + if len( O ) < 1 then + call @DC.MESSAGE( "TFILE " : word : " has invalid output AMC:", psource ) + corr.source = "" + conv.source = "" + result = false + return + end +* +* << Get the BREAK-ON AMC, if any. >> +* + B = "" + if psource[ pos, 1 ] = ";" then + pos += 1 + loop + temp = psource[ pos, 1 ] + while temp matches "1N" do + B := temp + pos += 1 + repeat + end +* +* << Code it. >> +* + corr.source = "OCONVS( " : key : ", " + corr.source := '\T' : dict : tfile : ";" : C : N : ";" : I : ";" : O + if B then + corr.source := ";" : B + end + corr.source := '\ )' + conv.source = psource[ 1, pos - 1 ] + result = true +* +* << Fix psource. >> +* + psource = psource[ pos, len( psource )] + return +* +* +* +*************** +19000 +* Strip blanks. +* +*************** + loop + temp = psource[ pos, 1 ] + while temp = " " do + psource = psource[ 1, pos - 1 ] : psource[ pos + 1, len( psource )] + repeat + return +* +* +* +end + diff --git a/Ardent/UV/APP.PROGS/DC.F b/Ardent/UV/APP.PROGS/DC.F new file mode 100755 index 00000000..504ddb3e --- /dev/null +++ b/Ardent/UV/APP.PROGS/DC.F @@ -0,0 +1,262 @@ +subroutine DC.F( psource, ucode, result ) +******************************************************************************* +* +* Convert dictionary item(s) from Pick to Uni*Verse format: +* parse F correlative/conversion for correct syntax +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description......................................... +* 10/22/98 23801 SAP Change company name to Ardent +* 10/14/98 23801 SAP Change copyrights. +* 07/25/88 - - Maintenence log purged at 5.2.1, see release 5.1.10. +* +******************************************************************************* +* +* The basis for this Pick-to-Uni*Verse dictionary converter was a +* Microdata-to-Prime converter written by J. Michael Cannady and +* Thomas J. Rauschenbach of Fulcrum Computer Group, Inc. Ardent +* was granted permission to use that code by Infocel, Inc., a successor +* of Fulcrum. +* +******************************************************************************* +* +* Parse F correlative/conversion for correct syntax +* +* Arguments: +* psource - the Pick dictionary item's correlative code +* ucode - the returned Uni*Verse I descriptor code +* result - Boolean: returned "true" if the conversion is successful, +* false otherwise +* +******************************************************************************* +* +$options DEFAULT +$include UNIVERSE.INCLUDE DC.COMM.DECL +* +* + equ true to 1 , false to 0 + result = true +* + if PARSE.ONLY then + word = "conversion" + end else + word = "correlative" + end +* +* << Strip off the "F;" >> +* + ucode = "F" + psource = psource[ 2, len( psource )] +* +* << Now process the bulk of the F correlative. >> +* + loop + char1 = psource[ 1, 1 ] + until char1 = @VM or char1 = "" do + char2 = psource[ 2, 1 ] +* + begin case +* + case char1 = " " + psource = psource[ 2, len( psource )] +* + case psource[ 1, 3 ] = "LPV" + if PARSE.ONLY then + ucode := "LPV" + end else + ucode := '""' + call @DC.MESSAGE( '"LPV" not supported in correlatives. Null used.', "" ) + end + psource = psource[ 4, len( psource )] +* + case char1 matches "1N" +* +* << It's an attribute number. Get all the digits. >> +* + loop + temp = psource[ 1, 1 ] + while temp matches "1N" do + ucode := temp + psource = psource[ 2, len( psource ) ] + repeat +* +* << Is there an "R" (multivalue reuse)? >> +* + if temp = "R" then + psource = psource[ 2, len( psource ) ] + ucode := "R" + end +* + case char1 = "(" +* +* << It's some conversion. Parse it for validity. >> +* + hold.psource = psource + conv.source = "" + open.parens = 0 + hit.vm = false + pos = 1 + loop + temp = psource[ pos, 1 ] + begin case + case temp = "(" + open.parens += 1 + case temp = ")" + open.parens -= 1 + case temp = @VM and open.parens +* +* << If some asshole puts multivalued conversions >> +* << into an F, change the "]" to ")(". >> +* + temp = ")" + hit.vm = true + open.parens -= 1 + case 1 + null + end case + conv.source := temp + pos += 1 + until pos > len( psource ) or not( open.parens ) do + repeat + if open.parens then + call @DC.MESSAGE( "F " : word : " missing closing parenthesis: ", psource ) + result = false + return + end + conv.code = "" + save.parse = PARSE.ONLY + PARSE.ONLY = true + call @DC.CORR.CONV( "", "", conv.source, conv.code, result ) + PARSE.ONLY = save.parse + if not( result ) then + call @DC.MESSAGE( "Invalid conversion specification within F " : word : ":", ucode : " " : psource ) + ucode = "" + return + end + ucode := conv.code + if hit.vm then + psource = "(" : hold.psource[ pos, len( psource )] + end else + psource = hold.psource[ pos, len( psource )] + end +* + case char1 = "[" and char2 = "]" +* +* << Take a substring of Stack 3 value, using Stack 2 as >> +* << starting character position and Stack 1 as length. >> +* Put resulting substring in Stack 1. >> +* + ucode := "[]" + psource = psource[ 3, len( psource ) ] +* + case char1 = "'" or char1 = "\" or ( char1 = '"' and ( char2 <> "" and char2 <> ";" and char2 <> @VM and char2 <> ")" )) +* +* << Quoted string or constant. Get it all. >> +* + quote = char1 + loop + ucode := char1 + psource = psource[ 2, len( psource )] + char1 = psource[ 1, 1 ] + while len( psource ) and char1 <> quote do + repeat + if char1 <> quote then + call @DC.MESSAGE( "Quoted string missing closing quotation mark:", psource ) + ucode = "" + result = 0 + return + end + ucode := quote + psource = psource[ 2, len( psource )] +* + case char1 = "C" +* +* << Push a constant value onto the stack. >> +* + loop + char1 = psource[ 1, 1 ] + until char1 = ";" or char1 = "" or char1 = @VM or char1 = "(" do + psource = psource[ 2, len( psource ) ] + ucode := char1 + repeat +* + case char1 = "N" +* +* << See if it's one of the special F code operands: >> +* << current Break level, number of detail lines since >> +* << last BREAK, current item counter, current sub- >> +* << multivalue counter, current multivalue counter. >> +* + if index( "BDISV", char2, 1 ) then + ucode := "@" : char1 : char2 + psource = psource[ 3, len( psource )] + end else + call @DC.MESSAGE( "Invalid special F code operand:", "N" : psource ) + ucode = "" + result = false + return + end +* + case index( "-/R:", char1, 1 ) +* +* << Subtract Stack 1 from Stack 2; divide Stack 2 by >> +* << Stack 1; get the remainder after dividing Stack 2 by >> +* << Stack 1; concatenate Stack 1 onto the end of Stack 2. >> +* << Microdatas perform these operations backwards from >> +* << other Pick systems, so if this is a Microdata, we'll >> +* << add an exchange operator before adding the current >> +* << operator. >> +* + if SOURCE.MACHINE = "M" then + ucode := "_;" + end + ucode := char1 + psource = psource[ 2, len( psource ) ] +* + case index( ';DT+*SP_^][=#<>"&!', char1, 1 ) +* +* << Semicolon delimiter, >> +* << system date, >> +* << system time, >> +* << add Stack 1 and Stack 2 >> +* << multiply Stack 1 and Stack 2, >> +* << sum multivalued Stack 1, >> +* << push (duplicate) Stack 1 value, >> +* << exchange Stack 1 and Stack 2, >> +* << pop Stack 1 value off stack, >> +* << greater than or equal to operator, >> +* << less than or equal to operator, >> +* << equality operator, >> +* << inequality operator, >> +* << push (duplicate) Stack 1 value, >> +* << logical AND operator, >> +* << logical OR operator, >> +* << all are OK to add to our F code. >> +* + ucode := char1 + psource = psource[ 2, len( psource )] +* + case 1 +* +* << Should be impossible to get here with a valid F-correl. >> +* + call @DC.MESSAGE( "Invalid F " : word : ".", "" ) + ucode = "" + result = false + return +* + end case + repeat + return +* +end diff --git a/Ardent/UV/APP.PROGS/DC.ITEM b/Ardent/UV/APP.PROGS/DC.ITEM new file mode 100755 index 00000000..d7ae66b4 --- /dev/null +++ b/Ardent/UV/APP.PROGS/DC.ITEM @@ -0,0 +1,149 @@ +subroutine DC.ITEM( item, assoc.name, assoc.item, result ) +******************************************************************************* +* +* Convert dictionary item(s) from Pick to Uni*Verse format: +* convert a single item +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description......................................... +* 10/22/98 23801 SAP Change company name to Ardent. +* 10/14/98 23801 SAP Change copyrights. +* 06/30/90 7237 JWT pass pick conversions through without change +* 01/12/90 6779 JWT dont do vm to ; conversion +* 07/25/88 - - Maintenence log purged at 5.2.1, see release 5.1.10. +* +******************************************************************************* +* +* The basis for this Pick-to-Uni*Verse dictionary converter was a +* Microdata-to-Prime converter written by J. Michael Cannady and +* Thomas J. Rauschenbach of Fulcrum Computer Group, Inc. Ardent +* was granted permission to use that code by Infocel, Inc., a successor +* of Fulcrum. +* +******************************************************************************* +* +* Convert a single dictionary item from Pick to Uni*Verse format. +* +* Arguments: +* item - On entry, the Pick dictionary item to convert. +* On return, the Uni*Verse item to write. +* assoc.name - On entry, null. On return, the name of any +* "ASSOCnn" phrase to write to the dictionary. +* assoc.item - On entry, null. On return, the association phrase +* named by "assoc.name" +* result - Boolean: returned "true" if the conversion is +* successful, false otherwise +* +******************************************************************************* +* +$options DEFAULT +$include UNIVERSE.INCLUDE DC.COMM.DECL +* + equ true to 1 + equ false to 0 + equ CR to char( 13 ) : char( 10 ) + CRT.COL = 26 + LPTR.COL = 26 + assoc.name = "" + assoc.item = "" + result = true + pick.item = item +* +* +* +* +****************************************************************************** +* +* Look for associated multivalues. On regular Pick systems, they're +* specified in attribute 4 in the forms "C;AMC[;AMC...;AMC]" and "D;AMC". +* On a Microdata, they're specified as correlatives in the forms +* "D1;AMC[;AMC...;AMC]" and "D2;AMC". For convenience, we seek out the +* Microdata form and change it to the Pick form before processing. +* +****************************************************************************** +* + if pick.item< 8 > <> "" then + assoc = "" + for i = 1 to ( count( pick.item< 8 >, @VM ) + 1 ) + temp = pick.item< 8, i > + if temp matches "D1;0X" then + assoc = "C;" : temp[ 4, len( temp ) - 3 ] + pick.item = delete( pick.item, 8, i, 0 ) + end else + if temp matches "D2;1N0N" then + assoc = "D;" : temp[ 4, len( temp ) - 3 ] + pick.item = delete( pick.item, 8, i, 0 ) + end + end + next i + convert "," to ";" in assoc; * in case they can't type + pick.item< 4 > = assoc + end +* +* +* + A.AMC = pick.item< 2 > ;* set up COMMON variables + name = "@RECORD< " : A.AMC : " >" +* +* Strip leading spaces from correlative/conversion attributes. +* + pick.item<8> = trimf(pick.item<8>) + pick.item<7> = trimf(pick.item<7>) + + psource = pick.item< 8 > ;* Pick correlative + ucode = "" ;* in COMMON + PARSE.ONLY = true ;* Really convert the code + call @DC.CORR.CONV( pick.item< 2 >, name, psource, ucode, result ) + if result and ucode and psource = "" then +* convert @VM to ";" in ucode; +* pick.item< 8 > = ucode ;* I code from correlative + end else + if not( NO.ERR ) then + ins FILE : " " : ITEM.NAME before ERR.REC< -1 > + end + end +* +* + if result then + psource = pick.item< 7 > ;* Pick conversion(s) + if psource then + ucode = "" ;* in COMMON + PARSE.ONLY = true ;* just check the syntax + call @DC.CORR.CONV( pick.item< 2 >, name, psource, ucode, result ) + if result and ucode and psource = "" then +* pick.item< 7 > = ucode ;* Uni*Verse conversion(s) + end else + if not( NO.ERR ) then + ins FILE : " " : ITEM.NAME before ERR.REC< -1 > + end + end + end + end +* +* + if pick.item< 4 > matches "C;0X" then; * primary associated mv + assoc.name = "ASSOC" : pick.item< 2 > + assoc.item = "" + assoc.item< 1 > = "PH" + assoc.item< 2 > = ITEM.NAME + for i = 2 to ( count( pick.item< 4 >, ";" ) + 1 ) + assoc.item< 2 > = assoc.item< 2 >:" ":field( pick.item< 4 >, ";", i ) + next i + assoc.item< 2 > = trim( assoc.item< 2 >) + end + universe.item = pick.item + item = universe.item +* +* + return +end diff --git a/Ardent/UV/APP.PROGS/DC.ITEM4 b/Ardent/UV/APP.PROGS/DC.ITEM4 new file mode 100755 index 00000000..6f7ae159 --- /dev/null +++ b/Ardent/UV/APP.PROGS/DC.ITEM4 @@ -0,0 +1,242 @@ +subroutine DC.ITEM4( item, assoc.name, assoc.item, result ) +******************************************************************************* +* +* +* Convert dictionary item(s) from Pick to Uni*Verse format: +* convert a single item +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +* The basis for this Pick-to-Uni*Verse dictionary converter was a +* Microdata-to-Prime converter written by J. Michael Cannady and +* Thomas J. Rauschenbach of Fulcrum Computer Group, Inc. Ardent +* was granted permission to use that code by Infocel, Inc., a successor +* of Fulcrum. +* +******************************************************************************* +* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description......................................... +* 10/22/98 23801 SAP Change company name to Ardent +* 10/14/98 23801 SAP Change copyrights. +* 08/01/89 - MR # 6152, put release four DC in release 5 +* 10/22/86 - MR #3303, added missing "end" before "for i = 11 to +* nbr.fields" HBB +* 09/24/86 - MR #3257, bring across attributes > 10 HBB +* 09/23/86 - MR #3244, assume a null A/AMC to mean @ID HBB +* 08/18/86 - MR #3102, changed DC.COMMON.DECL to DC.COMM.DECL HBB +* 03/15/86 - MR history purged at 3.4.1, see previous release for changes +* +******************************************************************************* +* +* Convert a single dictionary item from Pick to Uni*Verse format. +* +* Arguments: +* item - On entry, the Pick dictionary item to convert. +* On return, the Uni*Verse item to write. +* assoc.name - On entry, null. On return, the name of any +* "ASSOCnn" phrase to write to the dictionary. +* assoc.item - On entry, null. On return, the association phrase +* named by "assoc.name" +* result - Boolean: returned "true" if the conversion is +* successful, false otherwise +* +******************************************************************************* +* +$options DEFAULT +$include UNIVERSE.INCLUDE DC.COMM.DECL +* + equ true to 1 + equ false to 0 + equ CR to char( 13 ) : char( 10 ) + CRT.COL = 26 + LPTR.COL = 26 + assoc.name = "" + assoc.item = "" + result = true + pick.item = item +* +* +* +* +****************************************************************************** +* +* Look for associated multivalues. On regular Pick systems, they're +* specified in attribute 4 in the forms "C;AMC[;AMC...;AMC]" and "D;AMC". +* On a Microdata, they're specified as correlatives in the forms +* "D1;AMC[;AMC...;AMC]" and "D2;AMC". For convenience, we seek out the +* Microdata form and change it to the Pick form before processing. +* +****************************************************************************** +* + if pick.item< 8 > <> "" then + assoc = "" + for i = 1 to ( count( pick.item< 8 >, @VM ) + 1 ) + temp = pick.item< 8, i > + if temp matches "D1;0X" then + assoc = "C;" : temp[ 4, len( temp ) - 3 ] + pick.item = delete( pick.item, 8, i, 0 ) + end else + if temp matches "D2;1N0N" then + assoc = "D;" : temp[ 4, len( temp ) - 3 ] + pick.item = delete( pick.item, 8, i, 0 ) + end + end + next i + convert "," to ";" in assoc; * in case they can't type + pick.item< 4 > = assoc + end +* +****************************************************************************** +* +* Set up the new uni*Verse item. It's seven attributes long. +* +****************************************************************************** +* +* + universe.item = @FM : @FM : @FM : @FM : @FM : @FM : @FM +* +* +* + A.AMC = pick.item< 2 > ;* set up COMMON variables + if A.AMC = 0 or A.AMC = "" then + name = '@ID' + end else + if num( A.AMC ) then + if A.AMC = 9999 then + name = "LEN( @RECORD )" + end else + name = "@RECORD< " : A.AMC : " >" + end + end else +* +* << This check has to be here because CONVERT.VOC doesn't. >> +* + call @DC.MESSAGE( "Nonnumeric A/AMC: ", A.AMC ) + result = false + return + end + end + pick.item< 9 > = pick.item< 9 >[ 1, 1 ] + if pick.item< 9 >= "U" then pick.item< 9 >= "L" + VTYPE = pick.item< 9 > +* +* +* +****************************************************************************** +* +* Now let's build the new uni*Verse item. +* +****************************************************************************** +* +* +* Strip leading spaces from correlative/conversion attributes. +* + loop + while pick.item< 8 >[ 1, 1 ] = " " do + pick.item< 8 > = pick.item< 8 >[ 2, len( pick.item< 8 >)] + repeat + loop + while pick.item< 7 >[ 1, 1 ] = " " do + pick.item< 7 > = pick.item< 7 >[ 2, len( pick.item< 7 >)] + repeat + + if pick.item< 8 > = "" and A.AMC <> 9999 then + universe.item< 1 > = "D" ;* Data type + universe.item< 2 > = pick.item< 2 > ;* Location = A/AMC + end else + universe.item< 1 > = "I " : A.AMC ;* I descriptor + psource = pick.item< 8 > ;* Pick correlative + ucode = "" ;* in COMMON + universe.item< 8 > = psource ;* save correlative + PARSE.ONLY = false ;* Really convert the code + call @DC.CORR.CONV( pick.item< 2 >, name, psource, ucode, result ) + if result and ucode and psource = "" then + convert @VM to ";" in ucode; + universe.item< 2 > = ucode ;* I code from correlative + end else + if not( NO.ERR ) then + ins FILE : " " : ITEM.NAME before ERR.REC< -1 > + end + end +* +* Check for special Pick "size of record" item. +* + if A.AMC = 9999 and universe.item< 2 > = "" then + universe.item< 2 > = "LEN( @RECORD )" + end + + end +* +* + if result then + psource = pick.item< 7 > ;* Pick conversion(s) + if psource then + ucode = "" ;* in COMMON + PARSE.ONLY = true ;* just check the syntax + call @DC.CORR.CONV( pick.item< 2 >, name, psource, ucode, result ) + if result and ucode and psource = "" then + universe.item< 3 > = ucode ;* Uni*Verse conversion(s) + end else + if not( NO.ERR ) then + ins FILE : " " : ITEM.NAME before ERR.REC< -1 > + end + end + end + end +* +* + universe.item< 4 > = pick.item< 3 > ;* Column heading + universe.item< 5 > = pick.item< 10 > : VTYPE +* ;* Length and justification + universe.item< 6 > = "M" ;* assume multivalued +* +* + if pick.item< 4 > matches "D;0N" then; * secondary associated mv + universe.item< 7 > = "ASSOC" : pick.item< 4 >[ 3, len( pick.item< 4 > )] + end else + if pick.item< 4 > matches "C;0X" then; * primary associated mv + assoc.name = "ASSOC" : pick.item< 2 > + universe.item< 7 > = assoc.name + assoc.item = "" + assoc.item< 1 > = "PH" + assoc.item< 2 > = ITEM.NAME + for i = 2 to ( count( pick.item< 4 >, ";" ) + 1 ) + assoc.item< 2 > = assoc.item< 2 > : " " : field( pick.item< 4 >, ";", i ) + next i + assoc.item< 2 > = trim( assoc.item< 2 >) + end else + universe.item< 7 > = "" + end + end +* +* +* << Allow for the clowns who keep extra stuff in their dictionaries. >> +* + nbr.fields = dcount( pick.item, @AM ) + if nbr.fields > 10 then + if universe.item< 1 > <> "D" then + if nbr.fields > 14 then + call @DC.MESSAGE( "Truncating at attribute 14.", "" ) + nbr.fields = 14 + end + end + for i = 11 to nbr.fields + if pick.item< i > <> "" then universe.item< i > = pick.item< i > + next i + end + item = universe.item +* +* + return +* +* +* +end diff --git a/Ardent/UV/APP.PROGS/DC.MESSAGE b/Ardent/UV/APP.PROGS/DC.MESSAGE new file mode 100755 index 00000000..dfdd73b1 --- /dev/null +++ b/Ardent/UV/APP.PROGS/DC.MESSAGE @@ -0,0 +1,96 @@ +subroutine DC.MESSAGE( message1, message2 ) +******************************************************************************* +* +* Convert dictionary item(s) from Pick to Uni*Verse format: +* print informative/warning messages during conversion +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description......................................... +* 10/22/98 23801 SAP Change company name to Ardent +* 10/14/98 23801 SAP Change copyrights. +* 07/25/88 - - Maintenence log purged at 5.2.1, see release 5.1.10. +* +******************************************************************************* +* +* The basis for this Pick-to-Uni*Verse dictionary converter was a +* Microdata-to-Prime converter written by J. Michael Cannady and +* Thomas J. Rauschenbach of Fulcrum Computer Group, Inc. Ardent +* was granted permission to use that code by Infocel, Inc., a successor +* of Fulcrum. +* +******************************************************************************* +* +* Convert A correlatives to I descriptors. +* +* Arguments: +* message1 - the text to print +* message2 - more text to print; may be CR, in which case we +* print a carriage return / linefeed +* +* +******************************************************************************* +* +$options DEFAULT +$include UNIVERSE.INCLUDE DC.COMM.DECL +* + equ CR to char( 13 ) : char( 10 ) +* + if LOGGING then + if LPTR.COL + len( message1 ) + 2 > 130 then + print on 1 + print on 1 space( 27 ): + LPTR.COL = 28 + end + print on 1 message1 : " ": + LPTR.COL += len( message1 ) + 2 + begin case + case message2 = CR + print on 1 + LPTR.COL = 1 + case message2 = "" + null + case 1 + if LPTR.COL + len( message2 ) + 2 > 130 then + print on 1 + print on 1 space( 27 ): + LPTR.COL = 28 + end + print on 1 message2 : " ": + LPTR.COL += len( message2 ) + 2 + end case + end +* + if CRT.COL + len( message1 ) + 2 > 78 then + print + print space( 27 ): + CRT.COL = 28 + end + print message1 : " ": + CRT.COL += len( message1 ) + 2 + begin case + case message2 = CR + print + CRT.COL = 1 + case message2 = "" + null + case 1 + if CRT.COL + len( message2 ) + 2 > 78 then + print + print space( 27 ): + CRT.COL = 28 + end + print message2 : " ": + CRT.COL += len( message2 ) + 2 + end case + return +end diff --git a/Ardent/UV/APP.PROGS/DC.OPENS b/Ardent/UV/APP.PROGS/DC.OPENS new file mode 100755 index 00000000..329b8c27 --- /dev/null +++ b/Ardent/UV/APP.PROGS/DC.OPENS @@ -0,0 +1,188 @@ +subroutine DC.OPENS( do.reconvert, proceed ) +******************************************************************************* +* +* Convert dictionary item(s) from Pick to Uni*Verse format: +* open all necessary files +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description......................................... +* 10/22/98 23801 SAP Change company name to Ardent. +* 10/14/98 23801 SAP Change copyrights. +* 07/25/88 - - Maintenence log purged at 5.2.1, see release 5.1.10. +* +******************************************************************************* +* +* The basis for this Pick-to-Uni*Verse dictionary converter was a +* Microdata-to-Prime converter written by J. Michael Cannady and +* Thomas J. Rauschenbach of Fulcrum Computer Group, Inc. Ardent +* was granted permission to use that code by Infocel, Inc., a successor +* of Fulcrum. +* +******************************************************************************* +* +* Open the files for dictionary conversion. +* +* Arguments: +* do.reconvert - If "false", and both Pick and Uni*Verse +* dictionaries exist, this program alerts +* the user and requests permission to reconvert. +* If "true", the program (re)converts regardless. +* +* proceed - Returned "true" if all files opened, "false" +* otherwise. +* +* The calling program must set the FILE string to the name of the +* dictionary being converted. +* +************************************************************************ +* +$options DEFAULT +$include UNIVERSE.INCLUDE DC.COMM.DECL +$include UNIVERSE.INCLUDE FILENAMES.H +* + equ true to 1 ; equ false to 0 +* +******************************************************************** +* +* Insure that PDICT FILE (P_FILE) holds the Pick dictionary items +* and DICT FILE (D_FILE) is open to hold the converted items. +* +******************************************************************** +* +* + maintain.pick.prompt = false + no.ufv = false + no.pfv = false + NO.ERR = false + NO.UCODES = false +* + open "", "&SAVEDLISTS&" to EFV else NO.ERR = true + openpath UV.APP.PROGS to UCODE.FV else NO.UCODES = true +* + + open "DICT", FILE to UFV then + u.file.type = status() + u.file.mod = inmat() + end else + no.ufv = true + end +* + open "PDICT", FILE to PFV then + p.file.type = status() + p.file.mod = inmat() + end else + no.pfv = true + end +* + errmsg1 = "Dictionary converter halting." +* + readv create.syntax from VOC, "CREATE.FILE", 5 else create.syntax = "" +* + proceed = true + begin case + case no.ufv and no.pfv + call @DC.MESSAGE( "Neither DICT " : FILE : " nor PDICT ": FILE : " can be opened.", errmsg1 ) + proceed = false + return + + case no.ufv = false and no.pfv +* +* << The Pick dictionary exists as DICT FILE. We must >> +* << create a PDICT FILE, move the dictionary items to it, >> +* << and clear DICT FILE, before converting the items. >> +* + maintain.pick.prompt = true + if create.syntax = "PICK" then + execute "CREATE.FILE PDICT " : FILE : " " : u.file.mod : ",4," : u.file.type + end else + execute "CREATE.FILE PDICT " : FILE : " " : u.file.type : " " : u.file.mod + end + open "PDICT", FILE to PFV else + call @DC.MESSAGE( "PDICT " : FILE : " cannot be opened.", errmsg1 ) + proceed = false + return + end + + select UFV to 2 + eof = false + loop + readnext ID from 2 else eof = true + until eof do + read ITEM from UFV, ID then + write ITEM on PFV, ID + end else + call @DC.MESSAGE( "Unable to read SELECTed item ": ID : " from DICT " : FILE, "" ) + end + repeat + clearfile UFV +* + case no.ufv and no.pfv = false +* +* << The Pick dictionary exists as PDICT FILE. We must >> +* << create an empty DICT FILE prior to converting the >> +* << dictionary items. >> +* + maintain.pick.prompt = true + if create.syntax = "PICK" then + execute "CREATE.FILE DICT " : FILE : " " : p.file.mod : ",4," : p.file.type + end else + execute "CREATE.FILE DICT " : FILE : " " : p.file.type : " " : p.file.mod + end + + open "DICT", FILE to UFV else + call @DC.MESSAGE( "Cannot open DICT " : FILE, errmsg1 ) + proceed = false + return + end +* + case 1 +* +* << Both PDICT FILE and DICT FILE exist. Prompt for the >> +* << user's OK for converting PDICT FILE items. >> +* << Do not clearfile DICT. >> +* + if not( do.reconvert ) then + print "DICT ": FILE : " already exists. Reconvert (Y/N) ": + input ans + if ans[ 1, 1 ] <> "y" and ans[ 1, 1 ] <> "Y" then + proceed = false + end + end +* + end case + gosub 600; * Find out source machine + return +* +* +****************************************************************************** +* S U B R O U T I N E S +****************************************************************************** +* +************************************************** +600 +* Find out what machine the dictionary came from. +************************************************** +* + if SOURCE.MACHINE <> "M" and SOURCE.MACHINE <> "O" then + readv SOURCE.MACHINE from PFV, "&PICK.SOURCE.MACHINE&", 1 else + loop + until SOURCE.MACHINE = "M" or SOURCE.MACHINE = "O" do + print "Is this dictionary in Microdata format or Other ": + print "(M/O) ": + input SOURCE.MACHINE + repeat + end + end + writev SOURCE.MACHINE on PFV, "&PICK.SOURCE.MACHINE&", 1 + return +end diff --git a/Ardent/UV/APP.PROGS/DC4 b/Ardent/UV/APP.PROGS/DC4 new file mode 100755 index 00000000..f0d5f524 --- /dev/null +++ b/Ardent/UV/APP.PROGS/DC4 @@ -0,0 +1,538 @@ +program DC4 +******************************************************************************* +* +* +* Convert dictionary item(s) from Pick to Uni*Verse format: +* entry point and main control loop +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +* The basis for this Pick-to-Uni*Verse dictionary converter was a +* Microdata-to-Prime converter written by J. Michael Cannady and +* Thomas J. Rauschenbach of Fulcrum Computer Group, Inc. Ardent +* was granted permission to use that code by Infocel, Inc., a successor +* of Fulcrum. +* +******************************************************************************* +* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description......................................... +* 10/22/98 23801 SAP Change company name to Ardent +* 10/14/98 23801 SAP Change copyrights. +* 06/12/96 18438 JC Port to NT +* 08/01/89 - MR # 6152, put release four DC in release 5 +* 09/23/86 - MR #3241, reworked handling of @-phrase HBB +* 08/18/86 - MR #3102, changed DC.COMMON.DECL to DC.COMM.DECL HBB +* 07/23/86 - MR #2945, permit description after A or S in field 1 HBB +* 07/03/86 - MR #2694, when converting item named after the file, replace +* modulo with item name in UV dict. HBB +* 05/15/86 - MR #2663, replaced "execute SSELECT" with "sselect" HBB +* 03/15/86 - MR history purged at 3.4.1, see previous release for changes +* +******************************************************************************* +* +$options DEFAULT +$include UNIVERSE.INCLUDE DC.COMM.DECL + DC.ITEM4 = "*DC.ITEM4" +* + dummy = @( 0, 0 ) + equ true to 1; equ false to 0 + equ CR to char( 13 ) : char( 10 ) +* +* << A "clear common" would be meaningless here, since we're using >> +* << named COMMON. So we must do it by hand. >> +* + VTYPE = "" + SOURCE.MACHINE = "" + EFV = "" + UFV = "" + PFV = "" + VOC = "" + LOGGING = 99 + FILE = "" + ITEM.NAME = "" + A.AMC = "" + PARSE.ONLY = "" + CRT.COL = "" + LPTR.COL = "" + MAINTAIN.WHICH = "" + A.REC.LEVEL = "" + NO.ERR = "" + ERR.REC = "" + UCODE.FV = "" + NO.UCODES = "" + PICK.LINE = "" +* + items.to.convert = "" + nogo.msg = "*** Not converted. ***" + using.select = false +* +* << Get rid of "DC " in the invoking sentence. >> +* + sentence = trim( @sentence ) + sentence = field( sentence, " ", 2, 9999 ) + if sentence[ 1, 1 ] = "-" then +* +* << User is allowed to answer the "send to printer", "name the source +* << machine", and "which style will you maintain" prompts with a single +* << option. E.g., "DC -NOU" means no printed output, other +* << (non-Microdata) source, and maintain UniVerse dictionaries. +* + options = upcase( field( sentence, " ", 1, 1 )) + good.options = true + for opt.pos = 1 to len( options ) + begin case + case options[ opt.pos, 1 ] = "Y" + LOGGING = true + case options[ opt.pos, 1 ] = "L" + LOGGING = true + case options[ opt.pos, 1 ] = "N" + LOGGING = false + case options[ opt.pos, 1 ] = "M" + SOURCE.MACHINE = "M" + case options[ opt.pos, 1 ] = "O" + SOURCE.MACHINE = "O" + case options[ opt.pos, 1 ] = "P" + MAINTAIN.WHICH = "P" + case options[ opt.pos, 1 ] = "U" + MAINTAIN.WHICH = "U" + case options[ opt.pos, 1 ] = "-" + null + case 1 + good.options = false + end case + next opt.pos + if good.options then + sentence = field( sentence, " ", 2, 9999 ) + end + end +* +* +* << Go get name of file to convert. >> + if len( sentence ) then + gosub 500 + FILE = stuff + loop + while ( len( sentence )) do + gosub 500 + ins stuff before items.to.convert< 1, -1, 0 > + repeat + end +* + open "" , "VOC" to VOC else + call @DC.MESSAGE( "Unable to open VOC.", "Dictionary converter halting." ) + stop + end +* + if items.to.convert then + gosub 75 + end else + gosub 50 + end +* +* Write out the error record, if required. +* + if not( NO.ERR ) and ERR.REC <> "" then + err.id = "DC.ERRORS_" : iconv( time(), "MD0" ) : "_" : date() + print + print 'Error list written to file "&SAVEDLISTS&" item "' : err.id : '".' + write ERR.REC on EFV, err.id + end + print + stop +* +* +* +****************************************************************************** +* S U B R O U T I N E S +****************************************************************************** +* +* +* +****************************************************** +50 +* Convert entire dictionary or multiple dictionaries +* +****************************************************** +* +* + list.of.files = "" +* + print @( -1 ) + print @( 0, 0 ) : str( "=", 79 ) + print @( 15, 2 ) : "Convert dictionaries from Pick to Uni*Verse format." + print @( 0, 4 ) : str( "=", 79 ) + print +* + if LOGGING = 99 then + print "Send listing to the printer (Y/N) " : + input ans + if ans[ 1, 1 ] = "N" then + LOGGING = false + end else + LOGGING = true + end + print + end +* +* << Either the user has a SELECT list of files to convert, or he has >> +* << given us a single file name, or we must prompt him. >> +* + if FILE = "" then +* +* << The user didn't provide us a single file name. See if there's >> +* << a SELECT list. >> +* + eosl = false + using.select = true + readnext FILE from 0 else + using.select = false + eosl = true + FILE = "" + end + if eosl then +* +* << No SELECT list. Must prompt for file name. >> +* + print "Enter name of dictionary to convert, " + print " or '*' for all local dictionaries " : + input ans + begin case + case ans = "*" + using.select = true + execute "SELECTFL TO 1" + eov = false + loop + readnext vocitem.name from 1 else eov = true + until eov do + read vocitem from VOC, vocitem.name then + if count( convert('\','/',vocitem< 3 >), "/" ) = 0 and vocitem.name[ len( vocitem.name ) - 1, 2 ] <> ".O" and vocitem.name[ 1, 3 ] <> "VOC" and vocitem.name[ 1, 1 ] <> "&" then + FILE = vocitem.name + print "Convert DICT " : FILE : " (y/n) " : + input ans + if ans[ 1, 1 ] = "Y" or ans[ 1, 1 ] = "y" then + list.of.files = insert( list.of.files, -1; FILE ) + end + end + end else + print "A SELECTed item -- " : vocitem.name : + print " -- cannot be read from your VOC." + end + repeat + case ans = "" + stop + case 1 + list.of.files = ans + end case + end else +* +* << There was a SELECT list. Use it. >> +* + loop + list.of.files = insert( list.of.files, -1; FILE ) + readnext FILE from 0 else eosl = true + until eosl do + repeat + end + end else +* +* << We were given an explicit file name. >> +* + list.of.files = FILE + end +* +* << Now convert the files in the list. >> +* + loop + while list.of.files <> "" do + FILE = list.of.files< 1 > + list.of.files = delete( list.of.files, 1 ) + gosub 100 + repeat + return +* +* +* +********************************************* +75 +* Convert only specified dictionary item(s) +* +********************************************* +* +* + LOGGING = false + call @DC.OPENS( true, proceed ); * Open files. + if not( proceed ) then stop; * Abort conversion. + readv SOURCE.MACHINE from PFV, "&PICK.SOURCE.MACHINE&", 1 else + SOURCE.MACHINE = "O" + end + nbr.items = count( items.to.convert, @VM ) + 1 + for di = 1 to nbr.items + ITEM.NAME = items.to.convert< 1, di > +* + read dict.item from PFV, ITEM.NAME then + call @DC.MESSAGE( fmt( "Converting " : ITEM.NAME, "L#25" ), "" ) + if ITEM.NAME <> "@ID" and ITEM.NAME[ 1, 6 ] <> "&PICK." then + gosub 300; * Check D/TYPE and A/AMC + if not( skip.item ) then + gosub 400; * Convert the dictionary item + end; * if not( skip.item ) + end; * if not @ID and not &PICK. + end else; * read then +* +* << It was deleted. Delete Uni*Verse version as well. >> +* + print "Deleting DICT " : FILE : " " : ITEM.NAME : "." + sleep 1 + delete UFV, ITEM.NAME +* + end; * read +* + if num( ITEM.NAME ) and ITEM.NAME then +* +* << Numeric item-ID. Be sure that it's in the @-phrase. >> +* + gosub 200 + end; * if num( ITEM.NAME ) +* + next di + return +* +* +* +************************************ +100 +* Main conversion control routine. +* +************************************ +* +* + call @DC.OPENS( using.select, proceed ); * Open files. + if not( proceed ) then return; * Abort conversion of current dict. + + if LOGGING then + left.half = iconv((( 110 - len( FILE )) / 2), "MD0" ) + right.half = 110 - len( FILE ) - left.half + print on 1 str( "#", 130 ) + print on 1 str( "#", left.half ) : space( 20 + len( FILE )) : str( "#", right.half ) + print on 1 str( "#", left.half ) : " Converting DICT " : FILE : " ": + print on 1 str( "#", right.half ) + print on 1 str( "#", left.half ) : space( 20 + len( FILE )) : str( "#", right.half ) + print on 1 str( "#", 130 ) + print on 1 + end + print + print "Converting DICT " : FILE +* + sselect PFV to 2; * Use SELECT list 2 for item list +* +* << Copy all items from P_FILE to D_FILE, converting if valid. >> +* + eop = false + loop + readnext ITEM.NAME from 2 else eop = true + until eop do +120 read dict.item from PFV, ITEM.NAME else + print "SELECTed item '": ITEM.NAME : + print "' cannot be read from PDICT " : FILE : "." + print "Enter to try again, anything else to quit " + input ans: + if ans = "" then + GOTO 120 + end else + proceed = false + return + end + end + if ITEM.NAME[ 1, 6 ] <> "&PICK." and ITEM.NAME <> "@ID" then + call @DC.MESSAGE( fmt( ITEM.NAME, "L#25" ), "" ) + gosub 300; * Check D/TYPE, A/AMC + if not( skip.item ) then + gosub 400; * Convert the item. + end + end + repeat +* +* +* << Create the "@" dictionary entry to control listings. >> +* + gosub 200 +* + read dict.item from UFV, "@ID" else + dict.item = "" + dict.item< 1 > = "D" + dict.item< 2 > = 0 + dict.item< 4 > = FILE + dict.item< 5 > = "10R" + dict.item< 6 > = "S" + write dict.item on UFV, "@ID" + end +* +* Compile the I-descriptors. +* + print + print "Compiling I-descriptors." + execute "CD " : FILE + print + print + if LOGGING then + print on 1 char( 12 ) + end + return +* +* +* +************************************ +300 +* Check D/TYPE and A/AMC of Pick +* item. +* +************************************ +* +* +* << Convert items with A or S D/TYPES. Copy any others as they are. >> +* + skip.item = false; * Convert or not? + dict.item< 1 > = trim( dict.item< 1 >) + begin case + case ITEM.NAME = FILE or ITEM.NAME = "DL/ID" + delete UFV, ITEM.NAME; * Will change to "@ID" + dict.item< 1 > = "A"; * In Pick, is "D" + dict.item< 2 > = 0; * In Pick, is the base frame + dict.item< 3 > = ITEM.NAME; * In Pick, is the modulo + ITEM.NAME = "@ID" +* + case dict.item< 1 >[ 1, 1 ] = "A" or dict.item< 1 >[ 1, 1 ] = "S" + if num( dict.item< 2 > ) and count( dict.item< 2 >, @VM ) = 0 then + null + end else + call @DC.MESSAGE( "Non-numeric A/AMC: " : dict.item< 2 > : ".", "Copied verbatim." ) + call @DC.MESSAGE( nogo.msg, CR ) + if not( NO.ERR ) then + ins FILE : " " : ITEM.NAME before ERR.REC< -1 > + end + skip.item = true + end +* + case 1 + call @DC.MESSAGE( "Unconvertible D/TYPE: " : dict.item< 1 > : ".", "Copied verbatim." ) + call @DC.MESSAGE( nogo.msg, CR ) + if not( NO.ERR ) then + ins FILE : " " : ITEM.NAME before ERR.REC< -1 > + end + skip.item = true +* + end case + if skip.item then + write dict.item on UFV, ITEM.NAME + end + return +* +* +* +************************************ +400 +* Read the item. Call @DC.ITEM to +* convert it, then write it. +* +************************************ +* +* + assoc.item = "" + assoc.name = "" + result = "" +* +*410 read dict.item from UFV, ITEM.NAME else +* print "SELECTed item '": ITEM.NAME : +* print "' cannot be read from DICT '" : FILE : "'." +* print "Enter to try again, 'Q' to quit" +* input pause : +* if pause = "" then +* goto 410 +* end else +* call @DC.MESSAGE( "Dictionary converter halting.", "" ) +* stop +* end +* end +* + call @DC.ITEM4( dict.item, assoc.name, assoc.item, result ) +* + if result then + call @DC.MESSAGE( "Converted.", CR ) + end else + call @DC.MESSAGE( nogo.msg, CR ) + end +* + write dict.item on UFV, ITEM.NAME +* + return +* +* +* +************************************************************************** +500 +* Parse the command-line sentence for the next name. It may be quoted, +* and, if it is, it may contain blanks. +* +************************************************************************** +* +* + loop + while sentence[ 1, 1 ] = " " do + sentence = sentence[ 2, len( sentence )] + repeat +* + stuff = "" + if sentence[ 1, 1 ] = '"' or sentence[ 1, 1 ] = "'" or sentence[ 1, 1 ] = "\" then + quote = sentence[ 1, 1 ] + sentence = sentence[ 2, len( sentence )] + loop + while sentence[ 1, 1 ] <> quote and len( sentence ) do + stuff := sentence[ 1, 1 ] + sentence = sentence[ 2, len( sentence )] + repeat + if sentence[ 1, 1 ] <> quote then + call @DC.MESSAGE( "Unable to parse command-line sentence: ", sentence ) + stop + end + sentence = sentence[ 2, len( sentence )] + end else + stuff = field( sentence, " ", 1 ) + sentence = sentence[ COL2() + 1, LEN( sentence )] + end + return +* +* +******************************** +200 +* Create/amend the @-phrase +******************************** +* + at.phrase = "" + quit.loop = false + for i = 1 to 100 until quit.loop + readv xx from UFV, i, 0 then + at.phrase := " " : i + end else + quit.loop = true + end + next i + at.phrase = trim( at.phrase ) + if at.phrase then + at.rec = "" + at.rec< 1 > = "PH" + at.rec< 2 > = at.phrase + write at.rec on UFV, "@" + end else + delete UFV, "@" + end + return +end + diff --git a/Ardent/UV/APP.PROGS/DEACTLIST.B b/Ardent/UV/APP.PROGS/DEACTLIST.B new file mode 100755 index 00000000..94a77ffd --- /dev/null +++ b/Ardent/UV/APP.PROGS/DEACTLIST.B @@ -0,0 +1,136 @@ +******************************************************************************* +* +* Deactivate files from select list +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description......................................... +* 10/14/98 23801 SAP Change copyrights. +* 09/11/97 21464 NDP Removed superfluous double-quoting of command +* arguments for log_main; this caused problems for +* multi-byte filenames. +* 08/30/96 19125 DTM Fixed problem with quotation marks +* 06/12/96 18438 JC Port to NT +* 03/25/96 18212 LAG Windows NT port +* 02/09/93 11033 CSM Process file names containing $ +* 01/19/93 10886 CSM Detect missing/incorrect UV.TRANS index +* 01/18/93 10886 CSM Initial Creation +* +******************************************************************************* + +$OPTIONS DEFAULT +$INCLUDE UNIVERSE.INCLUDE OSDEF.H +$INCLUDE UNIVERSE.INCLUDE FILENAMES.H +$INCLUDE UNIVERSE.INCLUDE MACHINE.NAME + +****************** +** Windows NT port +** +DEFFUN IS.EQPATHS(FILESPEC.A, FILESPEC.B) CALLING "*IS.EQPATHS" +** +****************** + +! +* Check that we are within uniVerse home directory +! +****************** +** Windows NT port +** +if not(IS.EQPATHS(@PATH, UV.ROOT)) then + print "You must be within the uniVerse home account to run this program!" + stop +END +** +****************** + +$IFDEF UV.MSWIN +if SYSTEM(27) # 0 then stop "You must be an administrator to run this program!" +$ELSE +if SYSTEM(27) # 0 then stop "You must be root to run this program!" +$ENDIF + +! +* Get command line +! +CommandLine = convert(" ",@fm,@sentence) +locate "DEACTLIST" in CommandLine setting POS then + * Get rid of everything up to and including program name + for i = 1 to POS + del CommandLine<1> + next i +end + +! +* Make certain enough arguments +! +NumArgs = dcount(CommandLine,@fm) +if NumArgs # 1 then + print "Incorrect Number of arguments" + print + print "Syntax: DEACTLIST listname" + print + stop +end + +ListName = CommandLine<1> + +! +* Make certain ListName name does exist +! +getlist ListName to 1 else + print + print "List '":ListName:"' does NOT exist!" + stop +end + +! +* Check that UV.TRANS has a current Index +! +open "UV.TRANS" TO uvtrans then + IndexStatus = indices(uvtrans,"FILE") + if IndexStatus<1,1> <> "D" then + print "UV.TRANS must have an Index!" + stop + end + if IndexStatus<1,2> = "1" then + print "Index of UV.TRANS must be rebuilt!" + stop + end +end else stop "Unable to open UV.TRANS file!" + +! +* Read through list +! +eof = 0 +loop + readnext aline from 1 else eof = 1 +until eof do + * Skip files that begin with ampersand & + if aline[1,1] = "&" then continue + + * Deactivate DATA portion of file + cmd = OS.EXEC:" '":UV.ROOT:"/bin/log_main 11 " + cmd:= field(aline,":",1):" 0 ":field(aline,":",2):" '" + execute cmd + + * Deactivate DICT portion of file + cmd = OS.EXEC:" '":UV.ROOT:"/bin/log_main 11 " + cmd:= field(aline,":",1):" 1 DICT ":field(aline,":",2):" '" + execute cmd +repeat + +! +* end of code +! +stop +end + diff --git a/Ardent/UV/APP.PROGS/DEADLOCK.B b/Ardent/UV/APP.PROGS/DEADLOCK.B new file mode 100755 index 00000000..d47ac4a4 --- /dev/null +++ b/Ardent/UV/APP.PROGS/DEADLOCK.B @@ -0,0 +1,575 @@ +$INCLUDE UNIVERSE.INCLUDE MTF.INCL.H +$INCLUDE UNIVERSE.INCLUDE MACHINE.NAME +$INCLUDE UNIVERSE.INCLUDE FILENAMES.H +****************************************************************************** +* +* Routine to handle Deadlock Administration +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description........................................ +* 10/14/98 23801 SAP Change copyrights. +* 10/11/96 19412 JEM Fixed uvlockd.log viewing +* 09/30/96 19315 PEJ On NT use uvbootd to start uvdlockd +* 07/11/96 18812 ALC Ported to NT +* 06/17/96 18403 DTM Changes due to testing +* 06/13/96 18403 DTM Initial programming +* +******************************************************************************* +* This subroutine will accept as an argument the value of the operation +* to perform. It can perform the following functions on spooler jobs: +****************************************************************************** +id = "%W%" +****************************************************************************** +* Various Prompts and Help string values +****************************************************************************** +equ PRMPT.LOC to 2 +equ SHRT.HELP to 4 +equ LONG.HELP to 5 +****************************************************************************** +* Various other variables +****************************************************************************** +equ PAINT to 1 ;* flag to paint forms +equ Yes to 1 +equ No to 0 +equ Default to 1 +****************************************************************************** +* Strings representing shell scripts to be executed and files used +****************************************************************************** +temp=NULL +CALL *ISUSER.B(0,temp) +IF temp=0 THEN + TPRINT UVREADMSG(071000,"") + SLEEP 3 + STOP +END + +OPTION = FIELD( @SENTENCE, " ", 4 ) + +GOSUB init.messages ;* Initialize messages + +BEGIN CASE + CASE OPTION = 1 ;* Examine the logfile + GOTO examine.log + CASE OPTION = 2 ;* start the daemon + GOSUB init.form.1 + CASE OPTION = 3 ;* stop the daemon + GOTO stop.daemon + CASE OPTION = 4 ;* Purge the logfile + GOTO purge.log + CASE OPTION = 5 ;* check for deadlock + GOTO check.deadlock + CASE OPTION = 6 ;* select single victim + GOSUB init.form.2 +END CASE + +****************************************************************************** +* In this section, we draw the first screen, print the menu bar and help +* areas, and put up the first title and form to fill out. +****************************************************************************** +GOSUB init.menu +GOSUB init.screen + +****************************************************************************** +* Starting point for routines actual activity. Paint help message and +* continue +****************************************************************************** +help.loop: + +CALL *HELP.PRINT.B(form,1) + +****************************************************************************** +* Starting point for actual data input. Here we position the cursor to the +* place of the secondary prompt and get the input character, which is returned +* in special, if a special character was encountered, or in temp, is data +* was entered. +****************************************************************************** +input.loop: + +TPRINT form: ;* position cursor +temp=temp.form +CALL *CINPUT.B(SEC.PRMPT,temp,special,form,form) + +****************************************************************************** +* First section handles all the special characters. +****************************************************************************** +IF special # 0 THEN ;* if special character encountered + BEGIN CASE +****************************************************************************** +* Up arrow was pressed. +****************************************************************************** + CASE special = UP.ARROW ;* Up arrow was pressed + TPRINT form:PRMPT: + TPRINT temp.form: + TPRINT STR(SPACE,form-LEN(temp.form)) + form.line-=1 + IF form.line < 1 THEN + form.line=form.size + END + GOTO help.loop ;* get more input +****************************************************************************** +* Down arrow was pressed. +****************************************************************************** + CASE special = DOWN.ARROW ;* Down arrow was pressed + TPRINT form:PRMPT: + TPRINT temp.form: + TPRINT STR(SPACE,form-LEN(temp.form)) + form.line+=1 + IF form.line > form.size THEN + form.line=1 + END + GOTO help.loop ;* get more input +****************************************************************************** +* Function key F1 was pushed. This key is used to display more involved +* Help messages +****************************************************************************** + CASE special=F.1 + CALL *HELP.PRINT.B(form,3) + GOTO input.loop ;* get more input +****************************************************************************** +* Escape key pressed. This is the systems signal to return to the calling +* procedure. First clear the screen however +****************************************************************************** + CASE special = ESCAPE ;* escape was pressed + STOP @(-1) + CASE special = F.4 + temp="*" + GOTO new.enter + CASE special = F.10 + action.value=1 + CALL *DO.MNU.BAR.B(Menu.Bar,action.value,form.size,form,temp.form) + BEGIN CASE + CASE action.value = 1 + STOP @(-1) + CASE action.value = 2 + STOP @(-1) + CASE action.value = 3 + message=msg.app.help + CONVERT @FM TO " " IN message + CALL *HELP.BOX.B(3,10,60,message) + CASE action.value = 4 + message=UVREADMSG(076001,"") + CONVERT @FM TO " " IN message + CALL *HELP.BOX.B(3,10,60,message) + CASE action.value = 5 + CALL *HELP.BOX.B(3,10,45,UVREADMSG(076000,"")) + END CASE + CALL *PUT.FORM.B(form.size,form,temp.form,PRMPT,PAINT) + GOTO help.loop + CASE Default + GOTO help.loop + END CASE ;* end of case +END ;* end of if statement + +****************************************************************************** +* If we reach here, we must have had data input, which is returned from +* *NINPUT in the variable temp. Therefore, process it and execute the +* desired operation. +****************************************************************************** +ELSE +new.enter: +CALL *HELP.PRINT.B(NULL,3) + sel.val=1 + BEGIN CASE + CASE form.line=1 ;* timer value || victim sig + IF NOT(NUM(temp)) THEN + CALL *HELP.BOX.B(10,5,30,msg.error2) + CALL *PUT.FORM.B(form.size,form,temp.form,PRMPT,PAINT) + GOTO help.loop + END + IF OPTION = 6 THEN + victim.sig = temp + GOTO victim.kill + END + timer = temp + temp.form< form.line > = temp + CASE form.line=2 ;* resolution strategy + IF NOT(NUM(temp)) THEN + CALL *HELP.BOX.B(10,5,30,msg.error2) + CALL *PUT.FORM.B(form.size,form,temp.form,PRMPT,PAINT) + GOTO help.loop + END + IF temp < 0 OR temp > 3 THEN + GOTO help.loop + END + res.strategy = temp + temp.form< form.line > = temp + CASE form.line=3 ;* log directory + log.directory = temp + temp.form< form.line > = temp + CASE form.line = 4 ;* Should we boot up with daemon started + boot.option = UPCASE(temp) + IF boot.option # "Y" AND boot.option # "N" THEN + CALL *HELP.BOX.B(10,5,25,msg.error3) + CALL *PUT.FORM.B(form.size,form,temp.form,PRMPT,PAINT) + GOTO help.loop + END + temp.form< form.line > = temp + CASE form.line = 5 ;* Should we store values in config file + config.option = UPCASE(temp) + IF config.option # "Y" AND config.option # "N" THEN + CALL *HELP.BOX.B(10,5,25,msg.error3) + CALL *PUT.FORM.B(form.size,form,temp.form,PRMPT,PAINT) + GOTO help.loop + END + temp.form< form.line > = temp + END CASE +jump.spot: + TPRINT form:PRMPT:temp.form: + TPRINT STR(SPACE,form-LEN(temp.form)): + form.line +=1 + IF form.line <= form.size THEN + GOTO help.loop + END + + IF config.option = "Y" THEN + GOSUB store.config.file + END + flag=0 + + LockOptions = "-t " : timer : " -r " : res.strategy : " -l " : log.directory + + if OS.TYPE = "MSWIN" then + LockCommand = UV.BIN : UV.FSEP : "uvdlockd.exe" + + LockCommand = UV.BIN : UV.FSEP : "uvbootd " : LockCommand + end else + LockCommand = UV.BIN : UV.FSEP : "uvdlockd" + end + + ExecCommand = OS.EXEC : " " : squote( LockCommand : " " : LockOptions ) + EXECUTE ExecCommand CAPTURING details + + IF details = "" THEN + details = UVREADMSG( 074028, "" ) + END + + CALL *HELP.BOX.B( 10,5, 50, details ) +END + + +****************************************************************************** +* Init.form +* This routine initializes all the positional parameters, help strings, +* text strings, and default values for the two forms used in this subroutine +****************************************************************************** + +init.form.1: + temp.form=NULL + form=NULL + form.size=5 + form<1,1>=@(2,5) + form<1,2>=@(38,5) + form<1,3>=UVREADMSG(074009,"") + form<1,4>=UVREADMSG(074010,"") + form<1,5>=form<1,4> + form<1,6>=10 + form<1,7>=0 + form<2,1>=@(2,7) + form<2,2>=@(38,7) + form<2,3>=UVREADMSG(074011,"") + form<2,4>=UVREADMSG(074012,"") + form<2,5>=form<2,4> + form<2,6>=1 + form<2,7>=0 + form<3,1>=@(2,9) + form<3,2>=@(38,9) + form<3,3>=UVREADMSG(074013,"") + form<3,4>=UVREADMSG(074014,"") + form<3,5>=form<3,4> + form<3,6>=35 + form<3,7>=0 + form<4,1>=@(2,11) + form<4,2>=@(52,11) + form<4,3>=UVREADMSG(074015,"") + form<4,4>=UVREADMSG(074016,"") + form<4,5>=form<4,4> + form<4,6>=1 + form<4,7>=0 + form<5,1>=@(2,13) + form<5,2>=@(65,13) + form<5,3>=UVREADMSG(074017,"") + form<5,4>=form<5,3> + form<5,5>=form<5,4> + form<5,6>=1 + form<5,7>=0 + form.line=1 + temp.form<1>=60 + temp.form<2>=0 + temp.form<3>=UV.ROOT:UV.FSEP:"uvdlockd.log" + temp.form<4>="Y" + temp.form<5>="Y" + RETURN + +init.form.2: + temp.form=NULL + form=NULL + form.size=1 + form.line=1 + form<1,1>=@(2,5) + form<1,2>=@(55,5) + form<1,3>=UVREADMSG(074018,"") + form<1,4>=UVREADMSG(074019,"") + form<1,5>=form<1,4>:UVREADMSG(074020,"") + form<1,6>=10 + form<1,7>=0 + RETURN + +*************************************************************************** +* init.menu - initializes menu bar +*************************************************************************** +init.menu: + scratch=UVREADMSG(073087,"") + Menu.Bar = NULL + Menu.Bar<1,1> = 3 ;* Number of Items in Menu.Bar + Menu.Bar<1,2> = 1 ;* Line # on which to print the Menu Bar +* First Item + Menu.Bar<2,1,1>=scratch<1> ;* SubMenu Title + Menu.Bar<2,1,2>=1 ;* # of items in SubMenu +* SubMenu #1 + Menu.Bar<2,2,1>=scratch<6> ;* SubMenu Item + Menu.Bar<2,2,2>=1 ;* Action Code (Returned to calling process) + Menu.Bar<2,2,3>=scratch<7> +* Second Item + Menu.Bar<3,1,1>=scratch<8> ;* SubMenu Title + Menu.Bar<3,1,2>=1 ;* # of items in SubMenu +* SubMenu #1 + Menu.Bar<3,2,1>=scratch<6> ;* SubMenu Item + Menu.Bar<3,2,2>=2 ;* Action Code + Menu.Bar<3,2,3>=scratch<7> + scratch=UVREADMSG(073089,"") + Menu.Bar<4,1,1>=scratch<1> + Menu.Bar<4,1,2>=3 + Menu.Bar<4,2,1>=scratch<2> + Menu.Bar<4,2,2>=3 + Menu.Bar<4,2,3>=scratch<3> + Menu.Bar<4,3,1>=scratch<4> + Menu.Bar<4,3,2>=4 + Menu.Bar<4,3,3>=scratch<5> + Menu.Bar<4,4,1>=scratch<6> + Menu.Bar<4,4,2>=5 + Menu.Bar<4,4,3>=scratch<7> +RETURN + +****************************************************************************** +* Strings from help messages and such +****************************************************************************** +init.messages: + msg.header = UVREADMSG(074000,"") + msg.stop = UVREADMSG(074001,"") + msg.purge = UVREADMSG(074002,"") + msg.details = UVREADMSG(074003,"") + msg.error1 = UVREADMSG(074005,"") + msg.error2 = UVREADMSG(074006,"") + msg.error3 = UVREADMSG(074007,"") + msg.error4 = UVREADMSG(074021, "") + msg.app.help = UVREADMSG(074008,"") + msg.nopurge = UVREADMSG(074022,"") + msg.nostop = UVREADMSG(074023,"") + msg.noexist = UVREADMSG(074024,"") + msg.store1 = UVREADMSG(074027,"") + + RETURN +****************************************************************************** +* init.screen - used for initial painint of screen +****************************************************************************** +init.screen: + CALL *DRAW.SCRN.B(msg.header,1) + CALL *HELP.PRINT.B(UVREADMSG(073009,""),2) + CALL *PUT.FORM.B(form.size,form,temp.form,PRMPT,PAINT) + CALL *MNU.BAR.PR.B(Menu.Bar,1) + RETURN + +****************************************************************************** +* stop.daemon - stop the deadlock daemon +****************************************************************************** +stop.daemon: + flag = No + CALL *YES.NO.BOX.B( 10, msg.stop, flag ) + IF flag = Yes THEN + ExecCommand = OS.EXEC:" '":UV.BIN:UV.FSEP:"uvdlockd -stop":" '" + EXECUTE ExecCommand CAPTURING details + CALL *HELP.BOX.B(10,5,50,details) + END + ELSE + CALL *HELP.BOX.B(10,5,50,msg.nostop) + END + STOP @(-1) + RETURN + +examine.log: + logrec = '' + linecnt = 0 + OPEN '&UFD&' TO Fvar THEN + READ logrec FROM Fvar, 'uvdlockd.log' ELSE + CALL *HELP.BOX.B( 10, 5, 50,msg.noexist ) + STOP @(-1) + END + lines = DCOUNT(logrec, @AM) + FOR i = 1 to lines + PRINT logrec + linecnt += 1 + if linecnt = 20 then + linecnt = 1 + print "Press any key to Continue or Q to quit ... ": + prompt "" + input ans + if (ans = "q") or (ans = "Q") then stop + end + NEXT i + CLOSE Fvar + input WAIT,1 + END + STOP @(-1) + +purge.log: + flag = No + logrec = '' + CALL *YES.NO.BOX.B( 10, msg.purge, flag ) + IF flag = Yes THEN + OPEN '&UFD&' TO Fvar THEN + READV logrec FROM Fvar, 'uvdlockd.log',0 ELSE + CALL *HELP.BOX.B( 10, 5, 50,msg.noexist ) + STOP @(-1) + END + logrec = '' + WRITE logrec TO Fvar, 'uvdlockd.log' ELSE + CALL *HELP.BOX.B(10,5,50, msg.nopurge ) + STOP @(-1) + END + CLOSE Fvar + END + END + ELSE + CALL *HELP.BOX.B(10,5,50, msg.nopurge ) + END + STOP @(-1) + +check.deadlock: + TPRINT @(-1) + ExecCommand = OS.EXEC:" '":UV.BIN:UV.FSEP:"uvdlockd -query":" '" + EXECUTE ExecCommand + CALL *HELP.BOX.B( 10,5,50, UVREADMSG( 001069, "" ) ) + STOP @(-1) + +victim.kill: + flag = No + msg.victim = UVREADMSG(074004,victim.sig) + CALL *YES.NO.BOX.B( 10, msg.victim, flag ) + IF flag = Yes THEN + ExecCommand = OS.EXEC:" '":UV.BIN:UV.FSEP:"uvdlockd -victim ":victim.sig:" '" + EXECUTE ExecCommand CAPTURING details + CALL *HELP.BOX.B(10,5,50, UVREADMSG( 074025, victim.sig)) + END + ELSE + CALL *HELP.BOX.B(10,5,50, UVREADMSG( 074026, victim.sig )) + END + STOP @(-1) + +store.config.file: + config.file=UV.ROOT:UV.FSEP:"uvdlockd.config" + OPENSEQ config.file TO OUTPUT ELSE + CALL *HELP.BOX.B( 10,5,50, msg.error1 ) + flag = 1 + CALL *YES.NO.BOX.B( 10, msg.store1, flag ) + IF flag=0 THEN + STOP @(-1) + END + ELSE + CREATE OUTPUT ELSE STOP @(-1) + rec="" + IF boot.option = 'Y' THEN + rec<1>="start=1" + END + ELSE + rec<1>="start=0" + END + rec<2>="timer=":timer + rec<3>="res=":res.strategy + rec<4>="log=":log.directory + CONVERT @FM TO CHAR(10) in rec + WRITESEQ rec TO OUTPUT ELSE STOP @(-1) + CLOSE OUTPUT + STOP @(-1) + END + END + rec="" + line.no = 0 + line = "" + eof = 0 + a1 = 0 + a2 = 0 + a3 = 0 + a4 = 0 + loop + READSEQ line FROM OUTPUT else eof = 1 + until eof do + BEGIN CASE + CASE line[1,3]='sta' + if boot.option = 'Y' THEN + line="start=1" + END + ELSE + line="start=0" + END + a1 = 1 + CASE line[1,3]='tim' + line="timer=":timer + a2 = 1 + CASE line[1,3]='res' + line="res=":res.strategy + a3 = 1 + CASE line[1,3]='log' + line="log=":log.directory + a4 = 1 + CASE 1 + line=line + END CASE + line.no += 1 + rec< line.no > = line + repeat + CLOSE OUTPUT + IF a1 = 0 THEN + if boot.option = 'Y' THEN + rec< line.no > = "start=1" + end + else + rec< line.no > = "start=0" + end + line.no += 1 + END + IF a2 = 0 THEN + rec = "timer=":timer + line.no += 1 + END + IF a3 = 0 THEN + rec = "res=":res.strategy + line.no += 1 + END + IF a4 = 0 THEN + rec = "log=":log.directory + line.no += 1 + END + OPENSEQ config.file TO OUTPUT ELSE + CALL *HELP.BOX.B( 10,5,50, msg.error1 ) + END + FOR i = 1 TO line.no + WRITESEQ rec< i > TO OUTPUT else + CALL *HELP.BOX.B( 10,5,50,msg.error4) + STOP @(-1) + END + NEXT i + + RETURN + +STOP @(-1) +END diff --git a/Ardent/UV/APP.PROGS/DEF.MNU.B b/Ardent/UV/APP.PROGS/DEF.MNU.B new file mode 100755 index 00000000..d65fc205 --- /dev/null +++ b/Ardent/UV/APP.PROGS/DEF.MNU.B @@ -0,0 +1,42 @@ +*****************************************************************************t +* +* +* New System Admin tools - this routine creates a Menubar structure +* in a new, easier fashion +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description......................................... +* 10/14/98 23801 SAP Change copyrights. +* 11/10/90 7673 DTM Initial programmin +******************************************************************************* +* This routine will build the basic menu bar, and when used in conjunction +* with DEF.SUB.B, can build the complete menu bar structure. +* MB - Structure that holds all the Menu Bar information, used in DEF.MNU.B +* DEF.SUB.B, DO.MNU.BAR.B, and MENU.BAR.PR.B +* print.line - line to display menu bar, usually 1 +* sub.count - number of main menu bar selections +* label.array - array of main menu bar labels +* help.array - array of main menu bar help labels +******************************************************************************* + +SUBROUTINE DEF.MNU.B(MB,print.line,sub.count,label.array,help.array) + +MB<1,1>=sub.count +MB<1,2>=print.line +FOR i=1 TO MB<1,1> + MB=label.array + MB=0 + MB=help.array +NEXT i + + diff --git a/Ardent/UV/APP.PROGS/DEF.SUB.B b/Ardent/UV/APP.PROGS/DEF.SUB.B new file mode 100755 index 00000000..e39156c3 --- /dev/null +++ b/Ardent/UV/APP.PROGS/DEF.SUB.B @@ -0,0 +1,46 @@ +******************************************************************************* +* +* New System Admin tools - this routine creates a Menubar structure +* in a new, easier fashion, creates the sub-menu part +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description......................................... +* 10/14/98 23801 SAP Change copyrights. +* 11/10/90 7673 DTM Initial programming +******************************************************************************* +* This routine is used to fill in all the submenus off of the main menu +* bar. It should be called using the MB structure that was passed to +* DEF.MNU.B. It returns ACTION.ARRAY, which is an array of selection +* values for each corresponding entry. To determine which value was +* selected, you should check the return value from DO.MNU.BAR.B with +* action.array. +* MB - same Menu bar structure used in DEF.MNU.B +* action.array - return values. X defines main menu bar choice, +* Y defines submenu choice +* subvalue- which main menu bar selection to add subvalues to +* sub.count-# of subvalues in this selection +* text.array- array of labels for submenu +* help.array- array of help strings for labels of submenu +******************************************************************************* + +SUBROUTINE DEF.SUB.B(MB,action.array,subvalue,sub.count,text.array,help.array) + +MB=sub.count +FOR i=1 TO sub.count + MB=text.array + MB=(subvalue * 20)+i + action.array=(subvalue * 20)+i + MB=help.array +NEXT i + + diff --git a/Ardent/UV/APP.PROGS/DEL.RFILE.B b/Ardent/UV/APP.PROGS/DEL.RFILE.B new file mode 100755 index 00000000..a0f76fe8 --- /dev/null +++ b/Ardent/UV/APP.PROGS/DEL.RFILE.B @@ -0,0 +1,85 @@ +****************************************************************************** +* +* System Admin Transaction Logging - Create Log DIrectory +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description........................................ +* 10/14/98 23801 SAP Change copyrights. +* 05/22/96 18438 JC Correct execute for NT. +* 03/25/96 18212 LAG Windows NT port +* 10/14/94 15104 DTM Fixed to verify number of prompts +* 05/15/94 13286 DTM Initial programming +* +******************************************************************************* +id = "%W%" +******************************************************************************* +$INCLUDE UNIVERSE.INCLUDE TLOG.H +$INCLUDE UNIVERSE.INCLUDE MACHINE.NAME + +TMP = TRIM( @SENTENCE ) +CNT = COUNT( TMP, " " ) + +IF ( CNT < 2 OR CNT > 3 ) THEN + PRINT 'Error: Incorrect Number of arguments' + STOP +END +FirstLog = FIELD( TMP, " ", 2 ) +LastLog = FIELD( TMP, " ", 3 ) +PATH = "" +PATH = FIELD( TMP, " ", 4 ) + +IF PATH = "" THEN + RECIO( PATH, RECIO$PATH ) +END + +OPEN '',"UV_LOGS" TO uv.log.fp ELSE + PRINT "Cannot Open UV_LOGS file" + STOP +END + +****************** +** Windows NT port +** +PATH = CONVERT("\", "/", PATH) +IF PATH[1] NE "/" THEN PATH:= "/" + +FOR count = FirstLog TO LastLog + + File = PATH:"lg":count + + READ rec FROM uv.log.fp, count THEN + IF rec NE "R" THEN + PRINT "Log File Number ":count:"'s status is incompatible for operation." + PRINT "Cannot delete files ":FirstLog:" through ":LastLog + STOP + END + END + ELSE + PRINT "Log File Number ":count:" does not exist" + STOP + END + + Exec.Sentence = OS.EXEC:" '":RM.CMD:" -f ":File:"'" + EXECUTE Exec.Sentence CAPTURING junk + + IF LEN(junk) EQ 0 THEN + PRINT "File ":File:" has been removed" + END + ELSE + PRINT junk + END +NEXT count +** +****************** + +END diff --git a/Ardent/UV/APP.PROGS/DELCAT.GCI b/Ardent/UV/APP.PROGS/DELCAT.GCI new file mode 100755 index 00000000..1a4b0c52 --- /dev/null +++ b/Ardent/UV/APP.PROGS/DELCAT.GCI @@ -0,0 +1,52 @@ +***************************************************************************** +* +* Delete GCI subroutines from CATALOG space +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description......................................... +* 10/14/98 23801 SAP Change copyrights. +* 12/06/89 6707 DSC Correct menu banner text +* 10/27/89 5273 DSC Exit when given XX et al (formerly restarted) +* 07/25/88 - - Maintenence log purged at 5.2.1, see release 5.1.10. +* +******************************************************************************* +$INCLUDE UNIVERSE.INCLUDE FILENAMES.H +$INCLUDE UNIVERSE.INCLUDE MACHINE.NAME +* + prompt "" + CL = @(-4) + CL.ERR = @(0,23):CL + EQU BELL TO CHAR(7) + ERR = CL.ERR:BELL + MSG10=ERR:PROD.NAMEU:' General Calling Interface is not installed.' +1 OPEN '','DATA.TYPES' TO FVDATA.TYPES ELSE + PRINT MSG10: + INPUT Q: ; PRINT CL.ERR: ; STOP + END + print @( -1 ) + print @( 0, 0 ):"General Calling Interface Administration" : @( 69, 0 ) : "DELCAT.GCI": + print@( 23, 1): "Delete GCI subroutines from CATALOG space": + print @( 0, 2 ): str( "-", 79 ): + print @( 0, 4 ): + NAME = 1 + LOOP + print @( 0, 21):@(-4): + print @( 0, 21):"Enter GCI subroutine name:": + INPUT NAME + IF NAME='XX' OR NAME='xx' OR NAME='X' OR NAME='x' THEN STOP + print @( 0, 22):@(-4): + WHILE NAME NE "" DO + PERFORM "DELETE.CATALOG ":NAME + REPEAT + + END diff --git a/Ardent/UV/APP.PROGS/DISLEN.B b/Ardent/UV/APP.PROGS/DISLEN.B new file mode 100755 index 00000000..bd8fb6eb --- /dev/null +++ b/Ardent/UV/APP.PROGS/DISLEN.B @@ -0,0 +1,30 @@ +****************************************************************************** +* +* DISLEN.B: Prime INFORMATION MULTINATIONAL (PIM) Interlude +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +****************************************************************************** +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description......................................... +* 10/14/98 23801 SAP Change copyrights. +* 08/15/95 17132 LDG Module created. +* +******************************************************************************* +* +* This routine is cataloged as !DISLEN for NLS users. +* It is just a compatibility interlude to the LENDP() function. +* Note that it omits the second argument to LENDP so uses the default map. +* +SUBROUTINE DISLEN(string, length) + length = LENDP(string) +RETURN +END + diff --git a/Ardent/UV/APP.PROGS/DISP.SP.OPTS b/Ardent/UV/APP.PROGS/DISP.SP.OPTS new file mode 100755 index 00000000..0c6c6b14 --- /dev/null +++ b/Ardent/UV/APP.PROGS/DISP.SP.OPTS @@ -0,0 +1,177 @@ +subroutine DISP.SP.OPTS( RESULT, REC ) +******************************************************************************* +* +* Display "sp.config" options for printers in &DEVICE& +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description......................................... +* 10/14/98 23801 SAP Change copyrights. +* 07/25/88 - - Maintenence log purged at 5.2.1, see release 5.1.10. +* +******************************************************************************* +* +* + +RESULT = "" + +if REC< 6 > then + RESULT = "Driver: " : REC< 6 > : "; " +end + +if REC< 7 > then + RESULT := "Form: " : REC< 7 > : "; " +end + +begin case + case REC< 8 > = 1 + RESULT := "No flow control; " + case REC< 8 > = 2 + RESULT := "DTR flow control; " + case REC< 8 > = 3 + RESULT := "XON/XOFF flow control, any character restarts; " + case REC< 8 > = 4 + RESULT := "XON/XOFF flow control, XON only restarts; " + case 1 + null +end case + +if REC< 9 > = 1 then + RESULT := "Printing enabled; " +end else + if REC< 9 > = 2 then + RESULT := "Printing disabled; " + end +end + +if REC< 10 > = 1 then + RESULT := "Queuing enabled; " +end else + if REC< 10 > = 2 then + RESULT := "Queuing disabled; " + end +end + +begin case + case REC< 11 > = 1 + RESULT := "75 baud; " + case REC< 11 > = 2 + RESULT := "110 baud; " + case REC< 11 > = 3 + RESULT := "134.5 baud; " + case REC< 11 > = 4 + RESULT := "150 baud; " + case REC< 11 > = 5 + RESULT := "300 baud; " + case REC< 11 > = 6 + RESULT := "600 baud; " + case REC< 11 > = 7 + RESULT := "1200 baud; " + case REC< 11 > = 8 + RESULT := "1800 baud; " + case REC< 11 > = 9 + RESULT := "2400 baud; " + case REC< 11 > = 10 + RESULT := "4800 baud; " + case REC< 11 > = 11 + RESULT := "9600 baud; " + case REC< 11 > = 12 + RESULT := "19,200 baud; " + case 1 + null +end case + +begin case + case REC< 12 > = 1 + RESULT := "No parity; " + case REC< 12 > = 2 + RESULT := "Even parity; " + case REC< 12 > = 3 + RESULT := "Odd parity; " + case 1 + null +end case + +begin case + case REC< 13 > = 1 + RESULT := "No CR/LF conversion; " + case REC< 13 > = 2 + RESULT := "Convert LF to CR/LF; " + case REC< 13 > = 3 + RESULT := "Convert CR to LF; " + case REC< 13 > = 4 + RESULT := "CR suppressed at top of page; " + case 1 + null +end case + +begin case + case REC< 14 > = 1 + RESULT := "Tab expansion on; " + case REC< 14 > = 2 + RESULT := "Tab expansion off; " + case 1 + null +end case + +begin case + case REC< 15 > = 1 + RESULT := "No formfeeds; " + case REC< 15 > = 2 + RESULT := "Formfeeds, no delay; " + case REC< 15 > = 1 + RESULT := "Formfeeds, 2 second delay; " + case 1 + null +end case + +begin case + case REC< 16 > = 1 + RESULT := "No linefeed delay; " + case REC< 16 > = 2 + RESULT := ".08 second linefeed delay; " + case REC< 16 > = 3 + RESULT := ".10 second linefeed delay; " + case REC< 16 > = 4 + RESULT := ".16 second linefeed delay; " + case REC< 16 > = 5 + RESULT := ".18 second linefeed delay; " + case REC< 16 > = 6 + RESULT := ".26 second linefeed delay; " + case REC< 16 > = 7 + RESULT := "Linefeed delay: emulate teletype 37; " + case REC< 16 > = 8 + RESULT := "Column + .08 second linefeed delay; " + case REC< 16 > = 9 + RESULT := "Column + .16 second linefeed delay; " + case 1 + null +end case + +if REC< 17 > then + RESULT := REC< 17 > : "-bit data word; " +end + +if REC< 18 > then + sv = dcount( REC< 18 >, @VM ) + for i = 1 to sv + RESULT := REC< 18, i > : "; " + next i +end + +res.length = len( RESULT ) +if res.length then + RESULT = RESULT[ 1, res.length - 2 ] +end + +return +end diff --git a/Ardent/UV/APP.PROGS/DIVH b/Ardent/UV/APP.PROGS/DIVH new file mode 100755 index 00000000..d2386599 --- /dev/null +++ b/Ardent/UV/APP.PROGS/DIVH @@ -0,0 +1,61 @@ +******************************************************************************** +* +* Support of subroutine '-DIVH' +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description......................................... +* 10/14/98 23801 SAP Change copyrights. +* 06/26/96 18703 KAM Integrate subroutine into universe +******************************************************************************* + +$OPTIONS DEFAULT +subroutine DIVH(ans,NUMER,DENOM) +* REV: 06/05/96 +* +* for DENOMinator values and sub-values, replace '' & non-numerics w/0 +* + FIXED.DENOM='' + DLM.TYP=255 + LOOP UNTIL DLM.TYP=0 DO + REMOVE TEMP FROM DENOM SETTING DLM.TYP + IF NOT(NUM(TEMP)) THEN TEMP=0 ELSE TEMP+=0 + FIXED.DENOM:=TEMP + IF DLM.TYP > 0 THEN FIXED.DENOM:=CHAR(256-DLM.TYP) + REPEAT +* +* build a boolean matching the structure of DENOM where +* the value is TRUE if the adjusted denominator is not 0 +* + BOOL.DENOM0=NES(FIXED.DENOM,REUSE(0)) +* +* for every place in the denominator where there is a zero, +* make the matching position of the numerator zero +* + NUMER.ZERO=MULS(NUMER,REUSE(BOOL.DENOM0)) +* +* in the 'fixed' denominator, set every zero value to one and +* leave all non-zero values alone +* + FIXED.DENOM=ADDS(FIXED.DENOM,NOTS(BOOL.DENOM0)) +* +* at this point, the numerator values that correspond to zeroes in the +* 'fixed' denominator are now zero and the 'fixed' denominator has +* ones in those positions. This way 0 (numerator) divided by +* 1 (denominator) = 0, without the Divide by Zero message. All other +* numbers in both the numerator and divisor are okay and division will +* work as expected. +* + ans=DIVS(NUMER.ZERO,REUSE(FIXED.DENOM)) + return + + diff --git a/Ardent/UV/APP.PROGS/DIVS b/Ardent/UV/APP.PROGS/DIVS new file mode 100755 index 00000000..44fa0358 --- /dev/null +++ b/Ardent/UV/APP.PROGS/DIVS @@ -0,0 +1,26 @@ +******************************************************************************** +* +* Support of PR1ME INFORMATION subroutine '-DIVS' +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description......................................... +* 10/14/98 23801 SAP Change copyrights. +* 12/09/88 5287 JSM Initial implementation. +* +******************************************************************************* + +$OPTIONS DEFAULT + +subroutine PR1ME(ans,m1,m2) + ans = DIVS(m1,m2) +return diff --git a/Ardent/UV/APP.PROGS/DL.LFILE.B b/Ardent/UV/APP.PROGS/DL.LFILE.B new file mode 100755 index 00000000..bca7f306 --- /dev/null +++ b/Ardent/UV/APP.PROGS/DL.LFILE.B @@ -0,0 +1,244 @@ +****************************************************************************** +* +* System Admin Transaction Logging - Delete Log File +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description........................................ +* 10/14/98 23801 SAP Change copyrights. +* 08/08/95 19023 JC Port to NT +* 11/03/95 17590 CSM no need to use recio to get last log number +* 10/14/94 15104 DTM Fixed to verify number of prompts +* 05/15/94 13286 DTM Initial programming +* +******************************************************************************* +id = "%W%" +******************************************************************************* + * Inserts + +$INCLUDE UNIVERSE.INCLUDE TLOG.H +$INCLUDE UNIVERSE.INCLUDE MACHINE.NAME +$INCLUDE UNIVERSE.INCLUDE FILENAMES.H + + * Equates + + EQU VALID.SEQUENCE.NUMBER LIT 'SEQUENCE.NUMBER MATCHES "0N" AND SEQUENCE.NUMBER # 0' + + * Initialize + + OPENED.FLAG = @FALSE + DICT.OPENED.FLAG = @FALSE + DICT.LOCKED.FLAG = @FALSE + + * Check that this user is a system administrator + + ALLOWED = 0 + CALL *ISUSER.B(0, ALLOWED) + + IF NOT(ALLOWED) THEN + ERROR = NOT.ADMINISTRATOR.ERROR + GOSUB ERROR.SUB + GOTO EXIT + END + + * Do some initialization + + GOSUB INIT + + * process list of log file numbers - we have at least one + FOR I = 1 TO SEQ.NUMBER + GOSUB DELETE.LOGFILE + NEXT I + + * Finished + + GOTO EXIT + +*==== +INIT: +*==== + + * Parse command line + + TMP = TRIM( @SENTENCE ) + CNT = COUNT( TMP, " " ) + IF ( CNT NE 1 ) THEN + ERROR = INCORRECT.NUM.ARGS + GOSUB ERROR.SUB + GOTO EXIT + STOP + END + SEQ.NUMBER = FIELD( TMP, " ", 2 ) + + PATH = "" + RECIO( PATH, RECIO$PATH ) + IF PATH = "" THEN + ERROR = INVALID.UV.LOGS.DIR.ERROR + GOSUB ERROR.SUB + GOTO EXIT + END + + * Open UV.LOGS + OPEN '', UV.LOGS.FILE.NAME TO UV.LOGS.FVAR ELSE + ERROR = CANNOT.OPEN.UV.LOGS.ERROR + GOSUB ERROR.SUB + GOTO EXIT + END + + OPENED.FLAG = @TRUE + + * Open DICT UV.LOGS + + OPEN 'DICT', UV.LOGS.FILE.NAME TO UV.LOGS.DICT.FVAR ELSE + ERROR = CANNOT.OPEN.UV.LOGS.DICT.ERROR + GOSUB ERROR.SUB + GOTO EXIT + END + + DICT.OPENED.FLAG = @TRUE + + * Lock UV.LOGS to protect us from other users + + READU LOG.NEXT FROM UV.LOGS.DICT.FVAR, "LOG.NEXT" ELSE + ERROR = UV.LOGS.DICT.IS.LOCKED.ERROR + GOSUB ERROR.SUB + GOTO EXIT + END + SEQUENCE.NUMBER = LOG.NEXT<2> - 1 + + DICT.LOCKED.FLAG = @TRUE + + AL.DIRECTORY = '' + RECIO (AL.DIRECTORY, RECIO$PATH) + + RETURN + +*============= +DELETE.LOGFILE: +*============= + + * Open the After-Image logfile + + FILENAME = AL.PREFIX : SEQUENCE.NUMBER + + * Determine state of the file + + AI.REC = "" + READ AI.REC FROM UV.LOGS.FVAR, SEQUENCE.NUMBER ELSE + ERROR = CANNOT.READ.UV.LOGS.ERROR + GOSUB ERROR.SUB + GOTO EXIT + END + FILE.STATE = AI.REC< AIF.STATUS > + + * If file state not EMPTY, error + + IF FILE.STATE # ALF$EMPTY THEN + ERROR = FILE.STATE.NOT.EMPTY.ERROR + GOSUB ERROR.SUB + GOTO EXIT + END + + * Delete record from UV.LOGS files + + DELETE UV.LOGS.FVAR, SEQUENCE.NUMBER ELSE + ERROR = CANNOT.DELETE.CURR.LOGFILE.ERROR + GOSUB ERROR.SUB + GOTO EXIT + END + + * Print message + + PRINT + PRINT "Deleting " : FILENAME + + RM.COMMAND = OS.EXEC:" '":RM.CMD:" ":AL.DIRECTORY:UV.FSEP:FILENAME:"'" + EXECUTE RM.COMMAND CAPTURING junk + + * Reset next available + + SEQUENCE.NUMBER = SEQUENCE.NUMBER - 1 + REC="" + REC<1>="X" + REC<2>=SEQUENCE.NUMBER + 1 + WRITEU REC TO UV.LOGS.DICT.FVAR,"LOG.NEXT" ELSE + ERROR = CANNOT.WRITE.UV.LOGS.DICT.ERROR + GOSUB ERROR.SUB + GOTO EXIT + END + + + RETURN + +*========= +ERROR.SUB: +*========= + + * Error handling routine + + PRINT @SYS.BELL + + * Set return code and report the error + + BEGIN CASE + + CASE ERROR = NOT.ADMINISTRATOR.ERROR + PRINT 'Error: Only the UniVerse Administrator can DELETE log files.' + CASE ERROR = CANNOT.OPEN.UV.LOGS.ERROR + PRINT 'Error: Cannot open UV.LOGS file, Status = ' : STATUS() + CASE ERROR = UV.LOGS.IS.LOCKED.ERROR + PRINT 'Error: The UV.LOGS file is currently locked by another user.' + CASE ERROR = UV.LOGS.DICT.IS.LOCKED.ERROR + PRINT 'Error: The DICT UV.LOGS file is currently locked by another user.' + CASE ERROR = CANNOT.READ.UV.LOGS.ERROR + PRINT 'Error: Reading from UV.LOGS file, Status = ' : STATUS() + CASE ERROR = CANNOT.WRITE.UV.LOGS.ERROR + PRINT 'Error: Writing to UV.LOGS file, Status = ' : STATUS() + CASE ERROR = CANNOT.WRITE.UV.LOGS.DICT.ERROR + PRINT 'Error: Writing to DICT UV.LOGS file, Status = ' : STATUS() + CASE ERROR = CANNOT.DELETE.CURR.LOGFILE.ERROR + PRINT 'Error: Cannot DELETE CURRENT log file "' : FILENAME : '".' + CASE ERROR = FILE.STATE.NOT.EMPTY.ERROR + PRINT 'Error: Log file "' : FILENAME : '" is not empty."' + CASE ERROR = LOGFILE.NOT.FULL.ERROR + PRINT 'Error: Log file "' : FILENAME : '" is not full."' + CASE ERROR = INVALID.UV.LOGS.DIR.ERROR + PRINT 'Error: No Logging Directory Exists.' + CASE ERROR = INCORRECT.NUM.ARGS + PRINT 'Error: Incorrect number of arguments' + + END CASE + + RETURN + +*--------------- +EXIT: +*--------------- + + * RELEASE the lock and close UV.LOGS + + IF DICT.LOCKED.FLAG THEN + RELEASE UV.LOGS.DICT.FVAR + END + + IF OPENED.FLAG THEN + CLOSE UV.LOGS.FVAR + END + + IF DICT.OPENED.FLAG THEN + CLOSE UV.LOGS.DICT.FVAR + END + + STOP + END + +* END-CODE diff --git a/Ardent/UV/APP.PROGS/DL.LFILER2.B b/Ardent/UV/APP.PROGS/DL.LFILER2.B new file mode 100755 index 00000000..697e17e3 --- /dev/null +++ b/Ardent/UV/APP.PROGS/DL.LFILER2.B @@ -0,0 +1,300 @@ +****************************************************************************** +* +* System Admin Transaction Logging - Delete Log File +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description........................................ +* 11/19/98 23999 RGA Add RECIO callout to update 'Rawlist'. +* 10/14/98 23801 SAP Change copyrights. +* 06/26/98 23161 RGA Raw Device Support +* +******************************************************************************* +id = "%W%" +******************************************************************************* + * Inserts + +$INCLUDE UNIVERSE.INCLUDE TLOG.H +$INCLUDE UNIVERSE.INCLUDE MACHINE.NAME +$INCLUDE UNIVERSE.INCLUDE FILENAMES.H + + * Equates + + EQU VALID.SEQUENCE.NUMBER LIT 'SEQUENCE.NUMBER MATCHES "0N" AND SEQUENCE.NUMBER # 0' + + * Initialize + FIRSTCHECK = @TRUE + OPENED.FLAG = @FALSE + DICT.OPENED.FLAG = @FALSE + DICT.LOCKED.FLAG = @FALSE + LARGEST.OFFSET = 0 + INOFFSET = 0 + ALF$RELEASED = "R" + + * Check that this user is a system administrator + + ALLOWED = 0 + CALL *ISUSER.B(0, ALLOWED) + + IF NOT(ALLOWED) THEN + ERROR = NOT.ADMINISTRATOR.ERROR + GOSUB ERROR.SUB + GOTO EXIT + END + + * Do some initialization + + GOSUB INIT + + FOR J = 1 TO SEQ.NUMBER + + * find the log file with the smallest offset + FOR I = 1 to SEQUENCE.NUMBER + GOSUB FINDSM.LOGFILE + NEXT I + + * process list of log file numbers - we have at least one + * we only allow the deletion if no other log file has a smaller + * offset - thus avoiding holes in the 'raw' device. + * + FOR I = 1 TO SEQUENCE.NUMBER + GOSUB DELETE.LOGFILE + NEXT I + FIRSTCHECK = @TRUE + LARGETS.OFFSET = 0 + NEXT J + + * Finished + + GOTO EXIT + +*==== +INIT: +*==== + + * Parse command line + + TMP = TRIM( @SENTENCE ) + CNT = COUNT( TMP, " " ) + IF ( CNT NE 1 ) THEN + ERROR = INCORRECT.NUM.ARGS + GOSUB ERROR.SUB + GOTO EXIT + STOP + END + SEQ.NUMBER = FIELD( TMP, " ", 2 ) + + PATH = "" + RECIO( PATH, RECIO$RAWPATH ) + IF PATH = "" THEN + ERROR = INVALID.UV.LOGS.DIR.ERROR + GOSUB ERROR.SUB + GOTO EXIT + END + + * Open UV.LOGS + OPEN '', UV.LOGS.FILE.NAME TO UV.LOGS.FVAR ELSE + ERROR = CANNOT.OPEN.UV.LOGS.ERROR + GOSUB ERROR.SUB + GOTO EXIT + END + + OPENED.FLAG = @TRUE + + * Open DICT UV.LOGS + + OPEN 'DICT', UV.LOGS.FILE.NAME TO UV.LOGS.DICT.FVAR ELSE + ERROR = CANNOT.OPEN.UV.LOGS.DICT.ERROR + GOSUB ERROR.SUB + GOTO EXIT + END + + DICT.OPENED.FLAG = @TRUE + + * Lock UV.LOGS to protect us from other users + + READU LOG.NEXT FROM UV.LOGS.DICT.FVAR, "LOG.NEXT" ELSE + ERROR = UV.LOGS.DICT.IS.LOCKED.ERROR + GOSUB ERROR.SUB + GOTO EXIT + END + SEQUENCE.NUMBER = LOG.NEXT<2> - 1 + + DICT.LOCKED.FLAG = @TRUE + + AL.DIRECTORY = '' + RECIO (AL.DIRECTORY, RECIO$RAWPATH) + + RETURN + +*============= +FINDSM.LOGFILE: +*============= + + * Open the After-Image logfile + + FILENAME = AL.PREFIX : SEQUENCE.NUMBER + + * Determine state of the file + + AI.REC = "" + READ AI.REC FROM UV.LOGS.FVAR, I ELSE + RETURN + END + FILE.STATE = AI.REC< AIF.STATUS > + + * If file state not RELEASED - 'R' we return + * otherwise any log file merits consideration + * to avoiding creation of holes + + IF FILE.STATE EQ ALF$RELEASED THEN + RETURN + END + + IF (FIRSTCHECK) THEN + LARGEST.OFFSET = AI.REC< AIF.OFFSET > + END + * Delete only if the offset is + INOFFSET = AI.REC + IF ( INOFFSET > LARGEST.OFFSET) THEN + LARGEST.OFFSET = INOFFSET + END + + FIRSTCHECK = @FALSE + + RETURN + +*============= +DELETE.LOGFILE: +*============= + + * Open the After-Image logfile + + FILENAME = AL.PREFIX : SEQUENCE.NUMBER + + * Determine state of the file + + AI.REC = "" + READ AI.REC FROM UV.LOGS.FVAR, I ELSE + RETURN + END + FILE.STATE = AI.REC< AIF.STATUS > + + * If file state not EMPTY, return + + IF FILE.STATE # ALF$EMPTY THEN + RETURN + END + + * Delete only if the offset is + INOFFSET = AI.REC + IF ( INOFFSET < LARGEST.OFFSET ) + THEN + RETURN + END + + * Remove entries from 'Rawlist' + DUMMY = -1; + + RECIO( SEQUENCE.NUMBER, DUMMY, DUMMY, RECIO$RAWCREATE ) + + * Delete record from UV.LOGS files + + DELETE UV.LOGS.FVAR, I ELSE + ERROR = CANNOT.DELETE.CURR.LOGFILE.ERROR + GOSUB ERROR.SUB + GOTO EXIT + END + + * Print message + + PRINT + PRINT "Deleting " : FILENAME + + * Reset next available + + SEQUENCE.NUMBER = SEQUENCE.NUMBER - 1 + REC="" + REC<1>="X" + REC<2>=SEQUENCE.NUMBER + 1 + WRITEU REC TO UV.LOGS.DICT.FVAR,"LOG.NEXT" ELSE + ERROR = CANNOT.WRITE.UV.LOGS.DICT.ERROR + GOSUB ERROR.SUB + GOTO EXIT + END + + + RETURN + +*========= +ERROR.SUB: +*========= + + * Error handling routine + + PRINT @SYS.BELL + + * Set return code and report the error + + BEGIN CASE + + CASE ERROR = NOT.ADMINISTRATOR.ERROR + PRINT 'Error: Only the UniVerse Administrator can DELETE log files.' + CASE ERROR = CANNOT.OPEN.UV.LOGS.ERROR + PRINT 'Error: Cannot open UV.LOGS file, Status = ' : STATUS() + CASE ERROR = UV.LOGS.IS.LOCKED.ERROR + PRINT 'Error: The UV.LOGS file is currently locked by another user.' + CASE ERROR = UV.LOGS.DICT.IS.LOCKED.ERROR + PRINT 'Error: The DICT UV.LOGS file is currently locked by another user.' + CASE ERROR = CANNOT.READ.UV.LOGS.ERROR + PRINT 'Error: Reading from UV.LOGS file, Status = ' : STATUS() + CASE ERROR = CANNOT.WRITE.UV.LOGS.ERROR + PRINT 'Error: Writing to UV.LOGS file, Status = ' : STATUS() + CASE ERROR = CANNOT.WRITE.UV.LOGS.DICT.ERROR + PRINT 'Error: Writing to DICT UV.LOGS file, Status = ' : STATUS() + CASE ERROR = CANNOT.DELETE.CURR.LOGFILE.ERROR + PRINT 'Error: Cannot DELETE CURRENT log file "' : FILENAME : '".' + CASE ERROR = FILE.STATE.NOT.EMPTY.ERROR + PRINT 'Error: Log file "' : FILENAME : '" is not empty."' + CASE ERROR = LOGFILE.NOT.FULL.ERROR + PRINT 'Error: Log file "' : FILENAME : '" is not full."' + CASE ERROR = INVALID.UV.LOGS.DIR.ERROR + PRINT 'Error: No Logging Directory Exists.' + CASE ERROR = INCORRECT.NUM.ARGS + PRINT 'Error: Incorrect number of arguments' + + END CASE + + RETURN + +*--------------- +EXIT: +*--------------- + + * RELEASE the lock and close UV.LOGS + + IF DICT.LOCKED.FLAG THEN + RELEASE UV.LOGS.DICT.FVAR + END + + IF OPENED.FLAG THEN + CLOSE UV.LOGS.FVAR + END + + IF DICT.OPENED.FLAG THEN + CLOSE UV.LOGS.DICT.FVAR + END + + STOP + END + +* END-CODE diff --git a/Ardent/UV/APP.PROGS/DL.LFILERAW.B b/Ardent/UV/APP.PROGS/DL.LFILERAW.B new file mode 100755 index 00000000..ffd3211a --- /dev/null +++ b/Ardent/UV/APP.PROGS/DL.LFILERAW.B @@ -0,0 +1,252 @@ +****************************************************************************** +* +* System Admin Transaction Logging - Delete Raw Log File when the logging +* state is either AI$DISABLED or +* AI$UNINIT or AI$INACTIVE +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description........................................ +* 11/19/98 23999 RGA Add RECIO callout to update 'Rawlist'. +* 10/14/98 23801 SAP Change copyrights. +* 06/26/98 23161 RGA Raw Device Support +* +******************************************************************************* +id = "%W%" +******************************************************************************* + * Inserts + +$INCLUDE UNIVERSE.INCLUDE TLOG.H +$INCLUDE UNIVERSE.INCLUDE MACHINE.NAME +$INCLUDE UNIVERSE.INCLUDE FILENAMES.H + + * Equates + + EQU VALID.SEQUENCE.NUMBER LIT 'SEQUENCE.NUMBER MATCHES "0N" AND SEQUENCE.NUMBER # 0' + + * Initialize + + OPENED.FLAG = @FALSE + DICT.OPENED.FLAG = @FALSE + DICT.LOCKED.FLAG = @FALSE + + * Check that this user is a system administrator + + ALLOWED = 0 + CALL *ISUSER.B(0, ALLOWED) + IF NOT(ALLOWED) THEN + ERROR = NOT.ADMINISTRATOR.ERROR + GOSUB ERROR.SUB + GOTO EXIT + END + + State ="" + RECIO( State, FINFO$AI.STATE, RECIO$FINFO ) + + IF State = AI$INITIAL OR State = AI$WARM.START OR State = AI$LOGGING OR State = AI$SUSPENDED OR State = AI$SUSP.PROG OR State = AI$SHUT.PROG OR State = AI$FULL OR State = AI$ERROR THEN + STOP + END + + * Do some initialization + GOSUB INIT + + * process list of log file numbers - we have at least one + FOR I = 1 TO SEQ.NUMBER + GOSUB DELETE.LOGFILE + NEXT I + + * Finished + + GOTO EXIT + +*==== +INIT: +*==== + + * Parse command line + + TMP = TRIM( @SENTENCE ) + CNT = COUNT( TMP, " " ) + IF ( CNT NE 1 ) THEN + ERROR = INCORRECT.NUM.ARGS + GOSUB ERROR.SUB + GOTO EXIT + STOP + END + SEQ.NUMBER = FIELD( TMP, " ", 2 ) + + PATH = "" + RECIO( PATH, RECIO$RAWPATH ) + IF PATH = "" THEN + ERROR = FAILED.WRONGSTATE + PRINT ERROR + GOTO EXIT + END + + * Open UV.LOGS + OPEN '', UV.LOGS.FILE.NAME TO UV.LOGS.FVAR ELSE + ERROR = CANNOT.OPEN.UV.LOGS.ERROR + GOSUB ERROR.SUB + GOTO EXIT + END + + OPENED.FLAG = @TRUE + + * Open DICT UV.LOGS + + OPEN 'DICT', UV.LOGS.FILE.NAME TO UV.LOGS.DICT.FVAR ELSE + ERROR = CANNOT.OPEN.UV.LOGS.DICT.ERROR + GOSUB ERROR.SUB + GOTO EXIT + END + + DICT.OPENED.FLAG = @TRUE + + * Lock UV.LOGS to protect us from other users + + READU LOG.NEXT FROM UV.LOGS.DICT.FVAR, "LOG.NEXT" ELSE + ERROR = UV.LOGS.DICT.IS.LOCKED.ERROR + GOSUB ERROR.SUB + GOTO EXIT + END + SEQUENCE.NUMBER = LOG.NEXT<2> - 1 + + DICT.LOCKED.FLAG = @TRUE + + AL.DIRECTORY = '' + RECIO (AL.DIRECTORY, RECIO$RAWPATH) + + RETURN + +*============= +DELETE.LOGFILE: +*============= + + * Open the After-Image logfile + + FILENAME = AL.PREFIX : SEQUENCE.NUMBER + + * Determine state of the file + + AI.REC = "" + READ AI.REC FROM UV.LOGS.FVAR, SEQUENCE.NUMBER ELSE + ERROR = CANNOT.READ.UV.LOGS.ERROR + GOSUB ERROR.SUB + GOTO EXIT + END + FILE.STATE = AI.REC< AIF.STATUS > + + * If file state not EMPTY, error + + IF FILE.STATE # ALF$EMPTY THEN + ERROR = FILE.STATE.NOT.EMPTY.ERROR + GOSUB ERROR.SUB + GOTO EXIT + END + + * Remove entries from 'Rawlist' + DUMMY = -1; + + RECIO( SEQUENCE.NUMBER, DUMMY, DUMMY, RECIO$RAWCREATE ) + + + * Delete record from UV.LOGS files + + DELETE UV.LOGS.FVAR, SEQUENCE.NUMBER ELSE + ERROR = CANNOT.DELETE.CURR.LOGFILE.ERROR + GOSUB ERROR.SUB + GOTO EXIT + END + + * Print message + + PRINT + PRINT "Deleting " : FILENAME + + * Reset next available + + SEQUENCE.NUMBER = SEQUENCE.NUMBER - 1 + REC="" + REC<1>="X" + REC<2>=SEQUENCE.NUMBER + 1 + WRITEU REC TO UV.LOGS.DICT.FVAR,"LOG.NEXT" ELSE + ERROR = CANNOT.WRITE.UV.LOGS.DICT.ERROR + GOSUB ERROR.SUB + GOTO EXIT + END + + + RETURN + +*========= +ERROR.SUB: +*========= + + * Error handling routine + + PRINT @SYS.BELL + + * Set return code and report the error + + BEGIN CASE + + CASE ERROR = NOT.ADMINISTRATOR.ERROR + PRINT 'Error: Only the UniVerse Administrator can DELETE log files.' + CASE ERROR = CANNOT.OPEN.UV.LOGS.ERROR + PRINT 'Error: Cannot open UV.LOGS file, Status = ' : STATUS() + CASE ERROR = UV.LOGS.IS.LOCKED.ERROR + PRINT 'Error: The UV.LOGS file is currently locked by another user.' + CASE ERROR = UV.LOGS.DICT.IS.LOCKED.ERROR + PRINT 'Error: The DICT UV.LOGS file is currently locked by another user.' + CASE ERROR = CANNOT.READ.UV.LOGS.ERROR + PRINT 'Error: Reading from UV.LOGS file, Status = ' : STATUS() + CASE ERROR = CANNOT.WRITE.UV.LOGS.ERROR + PRINT 'Error: Writing to UV.LOGS file, Status = ' : STATUS() + CASE ERROR = CANNOT.WRITE.UV.LOGS.DICT.ERROR + PRINT 'Error: Writing to DICT UV.LOGS file, Status = ' : STATUS() + CASE ERROR = CANNOT.DELETE.CURR.LOGFILE.ERROR + PRINT 'Error: Cannot DELETE CURRENT log file "' : FILENAME : '".' + CASE ERROR = FILE.STATE.NOT.EMPTY.ERROR + PRINT 'Error: Log file "' : FILENAME : '" is not empty."' + CASE ERROR = LOGFILE.NOT.FULL.ERROR + PRINT 'Error: Log file "' : FILENAME : '" is not full."' + CASE ERROR = INVALID.UV.LOGS.DIR.ERROR + PRINT 'Error: No Logging Directory Exists.' + CASE ERROR = INCORRECT.NUM.ARGS + PRINT 'Error: Incorrect number of arguments' + + END CASE + + RETURN + +*--------------- +EXIT: +*--------------- + + * RELEASE the lock and close UV.LOGS + + IF DICT.LOCKED.FLAG THEN + RELEASE UV.LOGS.DICT.FVAR + END + + IF OPENED.FLAG THEN + CLOSE UV.LOGS.FVAR + END + + IF DICT.OPENED.FLAG THEN + CLOSE UV.LOGS.DICT.FVAR + END + + STOP + END + +* END-CODE diff --git a/Ardent/UV/APP.PROGS/DO.MNU.BAR.B b/Ardent/UV/APP.PROGS/DO.MNU.BAR.B new file mode 100755 index 00000000..5cb859f4 --- /dev/null +++ b/Ardent/UV/APP.PROGS/DO.MNU.BAR.B @@ -0,0 +1,358 @@ +******************************************************************************* +* +* New System Admin - This routine, given the data structure for a menu +* bar, will allow the user to activate it, and select items from +* it. +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description......................................... +* 10/14/98 23801 SAP Change copyrights. +* 05/20/96 18330 LDG Changed LEN() function to LENDP() for NLS DBCS. +* 05/13/91 8345 DTM changed print to tprint +* 03/14/91 7673 DTM Changed a few flow statements +* 11/05/90 7393 DPB Routine first created and admin'd. +******************************************************************************* + +SUBROUTINE DO.MNU.BAR.B(menu.bar, action.code,form.size,form,temp.form) + +$INCLUDE UNIVERSE.INCLUDE MTF.INCL.H + +EQU TKC TO 6 ;* Top Key Count = # of keys used for top level menu. +EQU SKC TO 9 ;* Sub Key Count = # of keys used in submenu. + +DIM top.alpha(TKC) +DIM top.codes(TKC) +DIM sub.alpha(SKC) +DIM sub.codes(SKC) +input.code = "" +mnemos = "" +left.over = "" + + +GOSUB init + +TTYGET tty$ ELSE NULL +tmptty=tty$ +CRMODE.ICRNL=0 +CRMODE.ONLCR=0 +TTYSET tty$ ELSE NULL + +label1: + GOSUB hilight.item + +label2: + CALL *GET.TOKEN.B(25, 25, 75, TKC, mat top.alpha, mat top.codes, ESC.KEY, MNEMONIC, 0, num.items, M.MNEMOS, left.over,input.code, mnemos) + + +label3: + BEGIN CASE + + CASE input.code = ESCAPE + action.code = -1 + GOSUB unlight.item + GOTO end.stuff + RETURN + + CASE input.code = RIGHT.ARROW + GOSUB unlight.item + item.no += 1 + IF item.no > num.items THEN + item.no = 1 + END + GOTO label1 + + CASE input.code = LEFT.ARROW + GOSUB unlight.item + item.no -= 1 + IF item.no < 1 THEN + item.no = num.items + END + GOTO label1 + + CASE input.code = SEL.ACTION + GOTO sub.menu + GOTO label1 + + CASE input.code = MNEMONIC + GOSUB unlight.item + item.no = mnemos + GOSUB hilight.item + input.code = SEL.ACTION + GOTO sub.menu + + CASE input.code = F.1 + IF menu.bar # "" THEN + CALL *HELP.BOX.B(5,0,0,menu.bar) + GOSUB update.screen + END + GOTO label2 + + CASE 1 + GOTO label2 + + END CASE + +RETURN + +sub.menu: + GOSUB init.submenu + GOSUB draw.sub.menu +label5: + GOSUB hi.sub.menu +label6: + CALL *GET.TOKEN.B(25, 25, 75, SKC, mat sub.alpha, mat sub.codes, SUB.ESC.KEY, MNEMONIC, 0, sub.menu.num, sub.mnemos, left.over, input.code, mnemos) + + +label7: + BEGIN CASE + + CASE input.code = ESCAPE + GOSUB clear.sub.menu + GOSUB unlight.item + action.code = -1 + GOTO end.stuff + + CASE input.code = SEL.ACTION + GOSUB clear.sub.menu + GOSUB unlight.item + action.code = menu.bar + GOTO end.stuff + + CASE input.code = MNEMONIC + GOSUB clear.sub.menu + GOSUB unlight.item + action.code = menu.bar + GOTO end.stuff + + CASE input.code = F.1 + IF menu.bar # "" THEN + CALL *HELP.BOX.B(5,0,0,menu.bar) + GOSUB update.screen + GOSUB draw.sub.menu + END + GOTO label5 + + CASE input.code = F.10 + GOSUB clear.sub.menu + GOSUB update.screen + GOTO label2 + + CASE input.code = RIGHT.ARROW + GOSUB clear.sub.menu + GOSUB unlight.item + item.no += 1 + IF item.no > num.items THEN + item.no = 1 + END + GOSUB update.screen + GOSUB hilight.item + GOTO sub.menu + + CASE input.code = LEFT.ARROW + GOSUB clear.sub.menu + GOSUB unlight.item + item.no -= 1 + IF item.no < 1 THEN + item.no = num.items + END + GOSUB update.screen + GOSUB hilight.item + GOTO sub.menu + + CASE input.code = UP.ARROW + GOSUB un.sub.menu + sub.menu.no -= 1 + IF sub.menu.no < 1 THEN + sub.menu.no = sub.menu.num + END + GOTO label5 + + CASE input.code = DOWN.ARROW + GOSUB un.sub.menu + sub.menu.no += 1 + IF sub.menu.no > sub.menu.num THEN + sub.menu.no = 1 + END + GOTO label5 + + CASE 1 + GOTO label6 + + END CASE + +RETURN + +init.submenu: + sub.menu.num = menu.bar ;* # of items in submenu + sub.menu.no = 1 ;* Current item + sub.menu.width = 0 + sub.mnemos = "" + FOR I = 1 to sub.menu.num + sub.mnemos=menu.bar[1,1] + FOR J = 1 to LEN(menu.bar) + IF SEQ(menu.bar[J,1]) >= 65 AND SEQ(menu.bar[J,1]) <= 90 THEN + sub.mnemos=menu.bar[J,1] + END + NEXT J + IF LENDP(menu.bar) > sub.menu.width THEN + sub.menu.width = LENDP(menu.bar) + END + NEXT I + sub.menu.width += 4 + sub.menu.col = ((item.no*offset)-int(sub.menu.width/2)) + sub.menu.line = lineno+2 +RETURN + +draw.sub.menu: + CALL *DRAW.BOX.B(lineno+2, sub.menu.col-1, sub.menu.num, sub.menu.width,1) + FOR I = 1 TO sub.menu.num + TPRINT @(sub.menu.col+2,sub.menu.line+I):menu.bar: + NEXT I + RETURN + +clear.sub.menu: + CALL *DRAW.BOX.B(lineno+2, sub.menu.col-1, sub.menu.num, sub.menu.width,0) + RETURN + +hi.sub.menu: + TPRINT @(sub.menu.col+sub.menu.width-1,sub.menu.line+sub.menu.no): + CALL *INVERSE.B(0) + TPRINT @(sub.menu.col,sub.menu.line+sub.menu.no): + CALL *INVERSE.B(1) + TPRINT " ":menu.bar:STR(" ",sub.menu.width-(LENDP(menu.bar)+3)): + CALL *INVERSE.B(0) +RETURN + + +un.sub.menu: + TPRINT @(sub.menu.col+sub.menu.width-1,sub.menu.line+sub.menu.no): + CALL *INVERSE.B(0) + TPRINT @(sub.menu.col,sub.menu.line+sub.menu.no): + CALL *INVERSE.B(0) + TPRINT " ":menu.bar:STR(" ",sub.menu.width-(LENDP(menu.bar)+3)): + CALL *INVERSE.B(0) +RETURN + + +hilight.item: + tprint @(((item.no*offset)-int(LENDP(menu.bar)/2)-2)+3+LENDP(menu.bar),lineno): + CALL *INVERSE.B(0) + tprint @((item.no*offset)-int(LENDP(menu.bar)/2)-2,lineno): + CALL *INVERSE.B(1) + tprint " ":menu.bar:" ": + CALL *INVERSE.B(0) +RETURN + +unlight.item: + tprint @((item.no*offset)-int(LENDP(menu.bar)/2)-2,lineno): + tprint " ":menu.bar:" ": + CALL *INVERSE.B(0) +RETURN + +init: + num.items = menu.bar<1,1> + offset = int(80/(num.items+1)) + lineno= menu.bar<1,2> + item.no = action.code + IF item.no > num.items THEN item.no = 1 + GOSUB init.top.menu +RETURN + +init.top.menu: + + OPEN "","INCLUDE" TO alt.key.file ELSE GOTO end.loop + alt.record="" + READ alt.record FROM alt.key.file,"ALT.MTF.KEYS" ELSE GOTO end.loop + alt.rec.count=COUNT(alt.record,@FM)+1 + FOR i=1 TO alt.rec.count STEP 2 + BEGIN CASE + CASE alt.record="ALT.RT.ARROW" + KEY.MOVE.CURSOR.RIGHT=alt.record + CASE alt.record="ALT.LT.ARROW" + KEY.MOVE.CURSOR.LEFT=alt.record + CASE alt.record="ALT.UP.ARROW" + KEY.MOVE.CURSOR.UP=alt.record + CASE alt.record="ALT.DN.ARROW" + KEY.MOVE.CURSOR.DOWN=alt.record + CASE alt.record="ALT.F.1" + KEY.FUNCTION.1=alt.record + CASE alt.record="ALT.F.10" + KEY.FUNCTION.10=alt.record + END CASE + NEXT i + CLOSE alt.record +end.loop: + top.alpha(1) = KEY.MOVE.CURSOR.RIGHT + top.alpha(2) = KEY.MOVE.CURSOR.LEFT + top.alpha(3) = " " + top.alpha(4) = CHAR(27) + top.alpha(5) = CARRIAGE.RETURN + top.alpha(6) = KEY.FUNCTION.1 + top.codes(1) = RIGHT.ARROW + top.codes(2) = LEFT.ARROW + top.codes(3) = SEL.ACTION + top.codes(4) = ESCAPE + top.codes(5) = SEL.ACTION + top.codes(6) = F.1 + + CALL *TOKEN.SORT.B(TKC, mat top.alpha, mat top.codes) + ESC.KEY = 0 + FOR I = 1 TO TKC + IF top.codes(I) = ESCAPE then ESC.KEY = I + NEXT I + + M.MNEMOS = "" + FOR I = 1 TO menu.bar<1,1> + M.MNEMOS = menu.bar[1,1] + NEXT I + + sub.alpha(1) = KEY.MOVE.CURSOR.RIGHT + sub.alpha(2) = KEY.MOVE.CURSOR.LEFT + sub.alpha(3) = KEY.MOVE.CURSOR.UP + sub.alpha(4) = KEY.MOVE.CURSOR.DOWN + sub.alpha(5) = " " + sub.alpha(6) = CHAR(27) + sub.alpha(7) = KEY.FUNCTION.1 + sub.alpha(8) = KEY.FUNCTION.10 + sub.alpha(9) = CARRIAGE.RETURN + + sub.codes(1) = RIGHT.ARROW + sub.codes(2) = LEFT.ARROW + sub.codes(3) = UP.ARROW + sub.codes(4) = DOWN.ARROW + sub.codes(5) = SEL.ACTION + sub.codes(6) = ESCAPE + sub.codes(7) = F.1 + sub.codes(8) = F.10 + sub.codes(9) = SEL.ACTION + + CALL *TOKEN.SORT.B(SKC, mat sub.alpha, mat sub.codes) + SUB.ESC.KEY = 0 + FOR I = 1 TO SKC + IF sub.codes(I) = ESCAPE then SUB.ESC.KEY = I + NEXT I + +RETURN + +update.screen: + IF form.size # 0 THEN + CALL *PUT.FORM.B(form.size,form,temp.form,PRMPT,1) + END + RETURN + +end.stuff: + TTYGET tty$ ELSE NULL + tty$=tmptty + TTYSET tty$ ELSE NULL + RETURN +END diff --git a/Ardent/UV/APP.PROGS/DRAW.BOX.B b/Ardent/UV/APP.PROGS/DRAW.BOX.B new file mode 100755 index 00000000..98716b1f --- /dev/null +++ b/Ardent/UV/APP.PROGS/DRAW.BOX.B @@ -0,0 +1,58 @@ +******************************************************************************* +* +* New System Admin - This routine draws a box on the screen. (This inter- +* face should be generalized to allow for the same parameters +* to different procedures to create the same box.) +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description......................................... +* 10/14/98 23801 SAP Change copyrights. +* 05/13/91 8345 DTM changed print to tprint +* 03/13/91 7673 DTM Changed for performance +* 11/05/90 7393 DPB Routine first created and admin'd. +******************************************************************************* + +SUBROUTINE DRAW.BOX.B(top, left, lines, width,clear) + +$INCLUDE UNIVERSE.INCLUDE MTF.INCL.H + + +IF clear = 0 THEN GOTO clr: +TPRINT @(left,top):lu.corner:STR(h.line,width):ru.corner: +blank=STR(" ",width) +FOR I = 1 TO lines + IF clear = 1 THEN + TPRINT@(left,top+I):v.line:blank:v.line: + END + ELSE + TPRINT@(left,top+I):v.line:@(left+width+1,top+I):v.line: + END +NEXT I +TPRINT @(left,top+lines+1):ll.corner:STR(h.line,width):rl.corner: + + +RETURN + +clr: + +blank=STR(" ",width+2) +TPRINT @(left,top):blank: +FOR I = 1 TO lines + TPRINT@(left,top+I):blank: +NEXT I +TPRINT @(left,top+lines+1):blank: + + +RETURN + +END diff --git a/Ardent/UV/APP.PROGS/DRAW.SCRN.B b/Ardent/UV/APP.PROGS/DRAW.SCRN.B new file mode 100755 index 00000000..91e52b55 --- /dev/null +++ b/Ardent/UV/APP.PROGS/DRAW.SCRN.B @@ -0,0 +1,101 @@ +******************************************************************************* +* +* New System Admin - This draws the GUI screen, and varying parts of the +* GUI screen. +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description......................................... +* 10/14/98 23801 SAP Change copyrights. +* 05/15/96 18330 LDG Changed LEN() function to LENDP() for NLS DBCS. +* 05/13/91 8345 DTM changed print to tprint +* 03/13/91 7673 DTM Changed things for performance purposes +* 11/05/90 7393 DPB Routine first created and admin'd. +******************************************************************************* + +SUBROUTINE DRAW.SCRN(title, option) + +$INCLUDE UNIVERSE.INCLUDE MTF.INCL.H + +x = STR(h.line,78) + +BEGIN CASE + + CASE option = 1 + TPRINT @(-1): + GOSUB full.screen + + CASE option = 2 + GOSUB top.line + + CASE option = 3 + GOSUB open.help + + CASE option = 4 + GOSUB close.help + +END CASE + +RETURN + +full.screen: + GOSUB top.line + FOR I = 1 to 21 + TPRINT @(0,I):v.line:@(79,I):v.line: + NEXT I + + TPRINT @(0,2):l.tee:x:r.tee:@(0,16):l.tee:x:r.tee: + TPRINT @(0,22):ll.corner:x:rl.corner: + ;* added DTM + help.title="Help Region" + ht.len=LENDP(help.title) + TPRINT @((40 - (ht.len+4/2))+5+ht.len,16): + CALL *INVERSE.B(0) + TPRINT @((80 - (ht.len+4))/2, 16): + CALL *INVERSE.B(1) + TPRINT " ":help.title:" ": + CALL *INVERSE.B(0) +RETURN + +top.line: + TPRINT @(0,0):lu.corner:x:ru.corner + IF title # "" THEN + t.len=LENDP(title) + TPRINT @((40 - (t.len+4/2))+5+t.len,0): + CALL *INVERSE.B(0) + TPRINT @((80 - (t.len+4))/2, 0): + CALL *INVERSE.B(1) + TPRINT " ":title:" ": + CALL *INVERSE.B(0) + END +RETURN + +open.help: + TPRINT @(0,16):ll.corner:x:rl.corner: + blank=CL:" " + FOR I = 17 to 22 + TPRINT @(0,I):blank: + NEXT I +RETURN + +close.help: + TPRINT @(0,16):l.tee:x:r.tee: + blank=CL:" " + FOR I = 17 to 21 + TPRINT @(0,I):v.line:blank:v.line: + NEXT I + TPRINT @(0,22):ll.corner:x:rl.corner: +RETURN + +END + + diff --git a/Ardent/UV/APP.PROGS/EDIT.INPUT.B b/Ardent/UV/APP.PROGS/EDIT.INPUT.B new file mode 100755 index 00000000..b6242b98 --- /dev/null +++ b/Ardent/UV/APP.PROGS/EDIT.INPUT.B @@ -0,0 +1,28 @@ +******************************************************************************** +* +* Support of PI/Open Subroutine '!EDIT.INPUT' +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description......................................... +* 10/14/98 23801 SAP Change copyrights. +* 07/17/97 21135 LPC Added to sccs +* +******************************************************************************* + +subroutine PIO.EDINP(xkey, xcol, xrow, xwid, xbuf, xstart, ywid, xtable, xcode) + +call !EDIT.INPUT(xkey, xcol, xrow, xwid, xbuf, xstart, ywid, xtable, xcode ) + +return + +end diff --git a/Ardent/UV/APP.PROGS/EDT b/Ardent/UV/APP.PROGS/EDT new file mode 100755 index 00000000..af01de6a --- /dev/null +++ b/Ardent/UV/APP.PROGS/EDT @@ -0,0 +1,1537 @@ +****************************************************************************** +* +* Routine to handle UniVerse Spooled Device Management +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description........................................ +* 10/13/98 23801 RGA Change copyright info. +* 10/29/92 10493 TMC Add EDT, Ultimate's ED +* +******************************************************************************* +* +* +* @(#) EDITOR - ULTIMATE COMPATIBLE EDITOR +* Author: Rick Poleshuck +* Date: 6/14/90 +* Last modified: 1/9/91 +* +$OPTIONS PICK + +* +* $include EQUATES +* +EQU TRUE TO 1 +EQU FALSE TO 0 +EQU TAB TO CHAR(9) +EQU SUB.END TO 32000 + +* list of commands +EQU COM.NULL TO 1 +EQU COM.EXIT TO 2 +EQU COM.EXITALL TO 3 +EQU COM.QUESTION TO 4 +EQU COM.WILDCARD TO 5 +EQU COM.LIST TO 6 +EQU COM.GOTO TO 7 +EQU COM.SUPPRESS TO 8 +EQU COM.LENGTH TO 9 +EQU COM.TOP TO 10 +EQU COM.UP TO 11 +EQU COM.BOTTOM TO 12 +EQU COM.BREAK TO 13 +EQU COM.COLUMN TO 14 +EQU COM.FILEDELETE TO 15 +EQU COM.HEX TO 16 +EQU COM.JOIN TO 17 +EQU COM.DISP.PRE TO 18 +EQU COM.EXE.PRE TO 19 +EQU COM.SET.PRE TO 20 +EQU COM.DOWN TO 21 +EQU COM.ZONE TO 22 +EQU COM.TABS TO 23 +EQU COM.INSERT TO 24 +EQU COM.FILE TO 25 +EQU COM.FILESAVE TO 26 +EQU COM.FLIP TO 27 +EQU COM.CANCEL TO 28 +EQU COM.CANCELALL TO 29 +EQU COM.COPY TO 30 +EQU COM.DELETELINE TO 31 +EQU COM.MERGE TO 32 +EQU COM.REPLACE TO 33 +EQU COM.REP.UNIVERSAL TO 34 +EQU COM.APPEND TO 35 +EQU COM.BREAKLINE TO 36 + +$include UNIVERSE.INCLUDE TTY + +* +* $include INIT +* +PROMPT "" +wildcard = TRUE +suppress = FALSE +found = TRUE +hex = FALSE +dummy = @(0,0) +search.lines = 0 +search.string = "" +search.start = 0 +search.stop = 0 +zonestart = 1 +zonestop = SUB.END +multitems = FALSE +pre.execute = "" +DIMENSION prestore( 10 ) +prestore( 1 ) = "L22" +FOR i = 2 TO 10 + prestore( i ) = "" +NEXT i +TTYGET tty$ THEN + tty.save = tty$ + CC.QUIT = -1 + TTYSET tty$ THEN NULL +END + +* Get filename and file pointer +* input: ARG. +* output: filename - name of current file +* fp - current filepointer +* itemlist - dynamic array of all specified items +* nitems - number of items to process +* +* $include GETFN +* +dict = FALSE +GET ( ARG. ) filename ELSE filename = "" +BEGIN CASE + CASE filename = "" + STOPE 200 + CASE filename = "DICT" + dict = TRUE + GET ( ARG. ) filename + OPEN "DICT", filename TO fp ELSE + STOPE 202, filename + END + CASE filename = "DATA" + GET ( ARG. ) filename + OPEN "DATA", filename TO fp ELSE + STOPE 202, filename + END + CASE 1 + OPEN filename TO fp ELSE + STOPE 202, filename + END +END CASE +* +* get list of itemids +* +itemlist = "" +nitems = 0 +LOOP + GET ( ARG. ) item ELSE item = "" +UNTIL item = "" DO + * check for single * as argument + IF itemlist = "" AND item = "*" THEN + itemlist = "*" + nitems = 1 + EXIT + END + itemlist = itemlist:item:@VM + nitems += 1 +REPEAT + +* Check for no items specified +IF nitems = 0 THEN + * is select list active + IF SYSTEM(11) = 0 THEN + STOPE 203 + END ELSE + multitems = TRUE + itemlist = "" + LOOP + NULL + WHILE READNEXT tmp + itemlist = itemlist:tmp(0):@VM + nitems += 1 + REPEAT + END +END ELSE + * if Argument = * then loop thru get list of items + IF itemlist = "*" THEN + * Get list of items + nitems = 0 + multitems = TRUE + itemlist = "" + SELECT fp TO selectlist + LOOP + NULL + WHILE READNEXT tmp,junk FROM selectlist + itemlist = itemlist:tmp:"":@VM + nitems += 1 + REPEAT + END + IF nitems > 1 THEN multitems = TRUE +END + +* +* Loop thru all items +* +FOR item.no = 1 TO nitems + item = FIELD ( itemlist, @VM, item.no ) + modified = FALSE + + nattr = 0 + READ record FROM fp,item THEN + nattr = DCOUNT( record, @AM ) + new.item = FALSE + END ELSE + PRINT @SYS.BELL:"New item" + record = "" + new.item = TRUE + END + xrecord = record + xline = "" + xlineno = 0 + IF nattr = 0 THEN + lastline = TRUE + curline = 0 + END ELSE + lastline = FALSE + curline = 1 + END + IF multitems = TRUE THEN PRINT item + + PRINT "Top" + * + * main editing loop + * + exited = FALSE + LOOP + GOSUB getcommand + GOSUB docommand + WHILE exited = FALSE + REPEAT + +NEXT item.no + +* +* End of main routine +* +TTYSET tty.save ELSE NULL +STOP + +* +* subroutine section +* +getcommand: +* +* $include GETCOMMAND +* + +* 1 2 3 +* 123456789012345678901234567890123 +EQU comlist TO "ABCDEFGHIJLMNPQRSTUXZ0123456789^?" + +* +* look for a valid command +* + +valid = FALSE +LOOP +retry: + IF pre.execute <> "" THEN + * get prestore command + comline = FIELD ( pre.execute, @SM, 1 ) + IF COL2() THEN + pre.execute = pre.execute[ COL2()+1, SUB.END ] + END ELSE + pre.execute = "" + END + END ELSE + PRINT ".": + INPUT comline + IF comline = "" THEN PRINT @(-10): + END + comline = TRIMB( TRIMF( comline ) ) + + IF comline = "" THEN + command = COM.NULL + RETURN + END + command = INDEX ( comlist, UPCASE( comline[1,1] ), 1 ) + + ON command GOSUB gca, gcb, gcc, gcd, gce, gcf, gcg, gch, gci, gcj, + gcl, gcm, gcn, gcp, gcq, gcr, gcs, gct, gcu, gcx, + gcz, gc0, gc1, gc2, gc3, gc4, gc5, gc6, gc7, gc8, + gc9, gcup, gcquest + +WHILE valid = FALSE + PRINT "Cmnd?" +REPEAT +RETURN + +gca: + BEGIN CASE + CASE UPCASE(comline) = "A" + IF search.string <> "" THEN + parm1 = search.lines + parm2 = search.string + parm3 = search.start + parm4 = search.stop + valid = TRUE + command = COM.LIST + END + CASE UPCASE( comline[2,1] ) = "L" + command = COM.APPEND + comline = comline[3,SUB.END] + GOSUB parsenumber + parm1=parm + IF parm1 = 0 THEN parm1 = 1 + sep=comline[1,1] + parm2=FIELD( comline[2,SUB.END], sep, 1 ) + valid = TRUE + CASE UPCASE ( comline[2,1] ) = "S" + PRINT "AS not available" + END CASE + RETURN + +gcb: + BEGIN CASE + CASE UPCASE(comline) = "B" + command = COM.BOTTOM + valid = TRUE + CASE UPCASE(comline[1,2]) = "BL" + comline = comline[2,SUB.END] + GOSUB parseline + * parm1 = number of lines to break + * parm2 = search string + * parm3 = starting column + * parm4 = ending column + * search string is required for BL + IF parm2 <> "" THEN + * + * fixup parameters + * + IF parm1 = 0 THEN parm1 = 1 + IF parm3 = 0 THEN parm3 = 1 + BEGIN CASE + CASE parm4 = 0 + parm4 = SUB.END + CASE parm4 <= parm3 + parm4 = 1 + CASE 1 + parm4 = ( parm4 - parm3 ) + 1 + END CASE + command = COM.BREAKLINE + valid = TRUE + END + END CASE + RETURN + +gcc: + BEGIN CASE + CASE UPCASE(comline) = "C" + command = COM.COLUMN + valid = TRUE + CASE UPCASE( comline[2,1] ) = "L" + command = COM.COPY + comline = TRIMF( comline[3,SUB.END] ) + GOSUB parsenumber + IF parm <> 0 THEN + parm1 = parm + comline = TRIMF( comline ) + IF comline[1,1] = "-" THEN + comline = TRIMF( comline[2,SUB.END] ) + GOSUB parsenumber + parm2 = parm + END + command = COM.COPY + valid = TRUE + END + END CASE + RETURN +gcd: + IF UPCASE( comline[2,1] ) = "E" THEN + comline = comline[2,SUB.END] + GOSUB parseline + * + * fixup parameters + * + IF parm3 = 0 THEN parm3 = 1 + BEGIN CASE + CASE sep = ":" AND parm3 <> 1 + * if specified search from beginning ':' but don't + * look at first column then just return FALSE + RETURN + CASE parm4 = 0 + parm4 = SUB.END + CASE parm4 <= parm3 + parm4 = 1 + CASE 1 + parm4 = ( parm4 - parm3 ) + 1 + END CASE + command = COM.DELETELINE + valid = TRUE + END + RETURN + +gce: + BEGIN CASE + CASE UPCASE( comline ) = "EX" + command = COM.EXIT + valid = TRUE + CASE UPCASE( comline ) = "EXT" + command = COM.EXITALL + valid = TRUE + CASE 1 + NULL + END CASE + RETURN +gcf: + chr = UPCASE( comline[2,1] ) + BEGIN CASE + CASE chr = "" + command = COM.FLIP + valid = TRUE + RETURN + CASE chr = "D" + command = COM.FILEDELETE + valid = TRUE + * filedelete takes no parameters + RETURN + CASE chr = "I" + command = COM.FILE + CASE chr = "S" + command = COM.FILESAVE + CASE 1 + PRINT "Cmnd?" + RETURN to retry + END CASE + * + * parm1 = overwrite flag + * parm2 = item name + * parm3 = filename + * + * set overwrite flag + IF UPCASE ( comline[3,1] ) = "O" THEN + parm1 = TRUE + comline = comline[4,SUB.END] + END ELSE + parm1 = FALSE + comline = comline[3,SUB.END] + END + * set new file name + IF comline[1,1] = "(" THEN + * is it a DICT file + comline = comline[2,SUB.END] + tmp = FIELD( comline, " ", 1 ) + IF tmp = "DICT" THEN + tmp = TRIMF(comline[COL2()+1,SUB.END]) + parm3 = "DICT ":FIELD( comline, " ", 1 ) + comline = comline[ COL2()+1, SUB.END ] + END ELSE + parm3 = tmp + comline = comline[ COL2()+1, SUB.END ] + END + * if filename specified and no item specified + * then use same item name + parm2 = TRIMF( comline ) + IF parm2 = "" THEN + parm2 = item + END + END ELSE + parm2 = FIELD( comline , " ", 1 ) + parm3 = "" + END + + valid = TRUE + RETURN + +gcg: + comline = TRIMF( comline[2, SUB.END] ) + IF NUM ( comline ) = TRUE THEN + command = COM.GOTO + parm1 = comline + valid = TRUE + END + RETURN +gch: + IF UPCASE(comline[1,2]) = "HX" THEN + command = COM.HEX + valid = TRUE + END + RETURN +gci: + IF UPCASE(comline) = "I" THEN + parm1 = "" + END ELSE + parm1 = comline[3,SUB.END] + END + command = COM.INSERT + valid = TRUE + RETURN +gcj: + IF UPCASE(comline[1,2]) = "JL" THEN + command = COM.JOIN + valid = TRUE + END + RETURN +gcl: + GOSUB parseline + command = COM.LIST + * + * fixup parameters + * + IF parm3 = 0 THEN parm3 = 1 + BEGIN CASE + CASE sep = ":" AND parm3 <> 1 + * if specified search from beginning ':' but don' look at first + * column then just return FALSE + RETURN + CASE parm4 = 0 + parm4 = SUB.END + CASE parm4 <= parm3 + parm4 = 1 + CASE 1 + parm4 = ( parm4 - parm3 ) + 1 + END CASE + search.lines = parm1 + search.string = parm2 + search.start = parm3 + search.stop = parm4 + + valid = TRUE + RETURN + +gcm: + IF UPCASE ( comline[2,1] ) = "E" THEN + * parm1 = number of lines + * parm2 = filename + * parm3 = item-id + * parm4 = start line + comline = TRIMF( comline[3,SUB.END] ) + GOSUB parsenumber + parm1 = parm + comline = TRIMF( comline ) + IF comline[1,1] <> "(" THEN + * merge in same file + parm2 = filename + sep = comline[1,1] + comline = comline[2,SUB.END] + parm3 = FIELD( comline, sep, 1 ) + * null itemid specified defaults to current itemid + IF parm3 = "" THEN parm3 = item + comline = comline[ COL2() + 1, SUB.END ] + GOSUB parsenumber + parm4 = parm + END ELSE + * is it a DICT file + comline = comline[2,SUB.END] + tmp3 = FIELD( comline, ")", 1 ) + comline = comline[COL2()+1,SUB.END] + GOSUB parsenumber + parm4 = parm + IF tmp3[1,5] = "DICT " THEN + tmp1 = TRIMF(tmp3[6,SUB.END]) + parm2 = "DICT ":FIELD( tmp1, " ", 1 ) + tmp3 = tmp1[ COL2()+1, SUB.END ] + END ELSE + parm2 = FIELD( tmp3, " ", 1 ) + tmp3 = tmp3[ COL2()+1, SUB.END ] + END + * if filename specified and no item specified + * then use same item name + parm3 = TRIMF( tmp3 ) + IF parm3 = "" THEN + parm3 = item + END + END + valid = TRUE + command = COM.MERGE + END + RETURN +gcn: + comline = TRIMF( comline[2,SUB.END] ) + parm1 = 0 + IF LEN ( comline ) > 0 THEN + GOSUB parsenumber + parm1 = parm + END + IF LEN ( comline ) = 0 THEN + valid = TRUE + command = COM.DOWN + END + RETURN + +gcp: + BEGIN CASE + CASE UPCASE( comline ) = "PD" + command = COM.DISP.PRE + valid = TRUE + + CASE LEN ( comline ) = 2 AND NUM( comline[2,1] ) + * prestores are called as 0 based but stored 1 based + command = COM.EXE.PRE + parm1 = comline[2,1] + 1 + valid = TRUE + + CASE UPCASE( comline ) = "P" + * P with no arguments is P0 + command = COM.EXE.PRE + parm1 = 1 + valid = TRUE + + CASE NUM( comline[2,1] ) + command = COM.SET.PRE + valid = TRUE + parm1 = comline[2,1] + 1 + parm2 = comline[4,SUB.END] + + END CASE + RETURN +gcq: + RETURN +gcr: + * parm1 = number of lines + * parm2 = search string + * parm3 = replace string + * parm4 = start column + * parm5 = end column + IF UPCASE( comline[2,1] ) = "U" THEN + command = COM.REP.UNIVERSAL + comline = comline[3,SUB.END] + END ELSE + command = COM.REPLACE + comline = comline[2,SUB.END] + END + GOSUB parsenumber + parm1 = parm + comline = TRIMF( comline ) + IF comline = "" THEN + * simple replace command + parm4 = 0 + valid = TRUE + RETURN + END + sep = comline[1,1] + parm2 = FIELD( comline, sep, 2 ) + comline = comline[ COL2() + 1, SUB.END ] + IF comline = "" THEN + PRINT "Strng?" + RETURN + END + parm3 = FIELD( comline, sep, 1 ) + comline = TRIMF( comline[ COL2() + 1, SUB.END ] ) + parm4 = 1 + parm5 = 0 + IF LEN ( comline ) <> 0 THEN + GOSUB parsenumber + parm4 = parm + comline = TRIMF( comline ) + IF LEN( comline ) > 0 THEN + IF comline[1,1] <> "-" THEN + PRINT "Col#?" + RETURN + END + comline = comline[2,SUB.END] + GOSUB parsenumber + parm5=parm + END + END + IF sep = ":" THEN + * universal search would make no sense + command = COM.REPLACE + END + IF parm2 = "" AND command = COM.REP.UNIVERSAL THEN + PRINT "Strng?" + RETURN + END + + BEGIN CASE + CASE sep = ":" AND parm4 <> 1 + * if specified search from beginning ':' but don' look at first + * column then just return + RETURN + CASE parm5 = 0 + parm5 = SUB.END + CASE parm5 <= parm4 + parm5 = parm4 + END CASE + valid = TRUE + RETURN + +gcs: + IF comline[2,1] = "?" THEN + command = COM.LENGTH + END ELSE + command = COM.SUPPRESS + END + valid = TRUE + RETURN +gct: + IF UPCASE(TRIM( comline )) = "T" THEN + command = COM.TOP + valid = TRUE + END + RETURN + +gcu: + parm1 = 0 + comline = TRIMF( comline[2,SUB.END] ) + IF LEN ( comline ) > 0 THEN + GOSUB parsenumber + parm1 = parm + END + IF LEN ( comline ) = 0 THEN + valid = TRUE + command = COM.UP + END + RETURN +gcx: + BEGIN CASE + CASE UPCASE( comline ) = "X" + command = COM.CANCEL + valid = TRUE + CASE UPCASE ( comline ) = "XF" + command = COM.CANCELALL + valid = TRUE + END CASE + RETURN +gcz: + parm1 = 1 + parm2 = SUB.END + + comline = TRIMF ( comline[2,SUB.END] ) + IF LEN (comline ) > 0 THEN + GOSUB parsenumber + parm1 = parm + IF LEN( comline ) > 0 THEN + IF comline[1,1] <> "-" THEN + PRINT "Col#?" + RETURN TO retry + END + comline = comline[2,SUB.END] + GOSUB parsenumber + parm2 = parm + IF LEN( comline ) > 0 THEN + PRINT "Col#?" + RETURN TO retry + END + END + END + valid = TRUE + command = COM.ZONE + RETURN +* +* numbers +* +gc0: +gc1: +gc2: +gc3: +gc4: +gc5: +gc6: +gc7: +gc8: +gc9: + IF NUM( comline ) = TRUE THEN + valid = TRUE + command = COM.GOTO + parm1 = comline + END + RETURN +gcup: + valid = TRUE + command = COM.WILDCARD + RETURN +gcquest: + valid = TRUE + command = COM.QUESTION + RETURN + +parsenumber: +* +* inputs: comline - command line +* outputs: parm - parameter +* comline - points to after parameter +* + tmp = LEN( comline ) + parm = 0 + FOR i = 1 TO tmp + IF NUM( comline[1,1] ) THEN + parm = parm*10 + comline[1,1] + comline = comline[2,SUB.END] + END ELSE + i = tmp + END + NEXT i + RETURN + + +parseline: + parm2 = "" + parm3 = 0 + parm4 = 0 + sep = "" + + comline = TRIMF( comline[2,SUB.END] ) + GOSUB parsenumber + parm1 = parm + + IF LEN ( comline ) > 0 THEN + + sep = comline[1,1] + parm2 = FIELD( comline, sep, 2 ) + comline = comline[ COL2() + 1, SUB.END ] + IF LEN ( comline ) > 0 THEN + GOSUB parsenumber + parm3 = parm + IF LEN ( comline ) > 0 THEN + IF comline[1,1] <> "-" THEN + PRINT "Col#?" + RETURN TO retry + END + comline = comline[2,SUB.END] + GOSUB parsenumber + parm4 = parm + IF LEN ( comline ) > 0 THEN + PRINT "Col#?" + RETURN TO retry + END + END + END + END + RETURN + +docommand: +* +* $include DOCOMMAND +* +BEGIN CASE +CASE command = COM.NULL + GOSUB disp.line + GOSUB iseoi + +CASE command = COM.QUESTION + IF LEN ( curline ) > 3 THEN + PRINT item:" L ":curline + END ELSE + PRINT item:" L ":FMT(curline,"R%%%") + END + +CASE command = COM.WILDCARD + IF wildcard = TRUE THEN + wildcard = FALSE + PRINT "/^\ on" + END ELSE + wildcard = TRUE + PRINT "/^\ off" + END + +CASE command = COM.APPEND + curline -= 1 + tmp3 = curline + parm1 -1 + FOR i = curline TO tmp3 + modified = TRUE + record = record:parm2 + GOSUB disp.line + GOSUB iseoi + IF curline >= nattr THEN + i = tmp3 + lastline = TRUE + END + NEXT i + +CASE command = COM.BREAKLINE + curline -= 1 + found = TRUE + FOR i = 1 TO parm1 + IF parm2 <> "" THEN + start = parm3 + stop = parm4 + search = parm2 + GOSUB locate + END + IF found THEN + modified = TRUE + position += LEN( parm2 ) + * Add length of search to break position + record = record[1,position -1]:@AM:record[position,65536] + nattr += 1 + GOSUB disp.line + GOSUB disp.line + GOSUB iseoi + END ELSE + curline += 1 + IF curline >= nattr THEN + lastline = TRUE + END + END + IF lastline = TRUE THEN + i = parm1 + END + NEXT i + +CASE command = COM.COLUMN + IF suppress = FALSE THEN + PRINT " ": + tmp = @CRTWIDE - 3 + END ELSE + tmp = @CRTWIDE + END + PRINT " 1 2 3 4 5 6 7" [ 1, tmp ] + IF suppress = FALSE THEN PRINT " ": + PRINT " 123456789012345678901234567890123456789012345678901234567890123456789012345678" [ 1, tmp ] + +CASE command = COM.EXIT OR command = COM.EXITALL + IF modified = TRUE THEN + GOSUB sure + IF tmp = FALSE THEN + RETURN + END + END + PRINT "'":item:"' exited" + IF command = COM.EXITALL THEN + STOP + END + exited = TRUE + +CASE command = COM.COPY + IF parm2 < parm1 THEN parm2 = parm1 + modified = TRUE + * build list of attributes to move + tmp = "" + FOR i = parm1 TO parm2 + tmp = tmp:record + IF i < parm2 THEN tmp = tmp:@AM + DEL record + NEXT i + * adjust curline for deletion before insertion + IF curline > parm1 THEN + curline = curline - ( parm2 - parm1 + 1 ) + END + IF curline = nattr THEN + record = record:@AM:tmp + END ELSE + INS tmp BEFORE record + END + +CASE command = COM.DELETELINE + IF parm1 = 0 THEN parm1 = 1 + curline -= 1 + lastline = FALSE + IF curline < 1 THEN curline = 1 + IF curline > nattr THEN + PRINT "Seqn?" + GOTO enddelete + END + nattr.saved = nattr + FOR i = 1 TO parm1 WHILE curline <= nattr + IF parm2 <> "" THEN + start = parm3 + stop = parm4 + search = parm2 + GOSUB locate + END ELSE + found = TRUE + END + IF found THEN + modified = TRUE + DEL record + nattr -= 1 + END ELSE + curline += 1 + END + NEXT i + IF curline > nattr OR nattr = 0 THEN + PRINT "EOI ": + lno = nattr.saved + GOSUB disp.number + lastline = TRUE + PRINT + END + RETURN +enddelete: + NULL + +CASE command = COM.FLIP + curline = 1 + PRINT "Top" + lastline = FALSE + +CASE command = COM.FILEDELETE + IF modified = TRUE THEN + GOSUB sure + IF tmp = TRUE THEN + DELETE fp, item + exited = TRUE + PRINT "'":item:"' deleted." + END + END ELSE + DELETE fp, item + exited = TRUE + PRINT "'":item:"' deleted." + END + +CASE command = COM.FILE OR command = COM.FILESAVE + * if parm3 isn't specified use same file + IF parm3 = "" THEN + * if parm2 isn't specified than just rewrite item + IF parm2 = "" THEN + WRITE record TO fp, item THEN + modified = FALSE + END ELSE + PRINT "Write error!" + END + END ELSE + * if overwrite flag isn't specified + * and item exists then don't write record + IF parm1 = FALSE THEN + READU dummy FROM fp, parm2 THEN + PRINT "Cmnd?" + GOTO file.end + END + END + WRITE record TO fp, parm2 THEN + modified = FALSE + END ELSE + PRINT "Write error!" + END + END + END ELSE + * if parm3 is specified use different file + IF parm2 = "" THEN parm2 = item + * open specified filename + OPEN parm3 TO tmp ELSE + PRINT "Open error!" + GOTO file.end + END + * if overwrite flag isn't specified + * and item exists then don't write record + IF parm1 = FALSE THEN + READU dummy FROM tmp, parm2 THEN + PRINT "Cmnd?" + GOTO file.end + END + END + WRITE record TO tmp,item THEN + modified = FALSE + END ELSE + PRINT "Write error!" + END + CLOSE tmp + END + + IF command = COM.FILE THEN + exited = TRUE + END + xrecord = record + xline = "" + IF exited = FALSE THEN + curline = 1 + PRINT "Top" + lastline = FALSE + END ELSE + PRINT "'":item:"' filed" + END +file.end: + NULL + +CASE command = COM.HEX + IF hex = TRUE THEN + hex = FALSE + PRINT "Hex off" + END ELSE + hex = TRUE + PRINT "Hex on" + END + +CASE command = COM.INSERT + IF parm1 = "" THEN + IF curline = 0 THEN curline = 1 + * handle screw line number display + IF new.item = TRUE THEN + lno = curline + END ELSE + lno = curline -1 + END + LOOP + IF LEN( lno ) > 3 THEN + PRINT lno:"+": + END ELSE + PRINT FMT( lno, "R%%%" ):"+": + END + INPUT parm1 + UNTIL parm1 = "" + IF new.item = TRUE THEN lno += 1 + GOSUB insert.line + REPEAT + END ELSE + GOSUB insert.line + END + new.item = FALSE + +CASE command = COM.JOIN + IF curline > 1 THEN + * join line is really remove an @AM + tmp = INDEX ( record, @AM, curline - 1 ) + record = record[1,tmp-1]:record[tmp+1,65556] + modified = TRUE + curline -= 1 + nattr -= 1 + GOSUB disp.line + GOSUB iseoi + END + +CASE command = COM.LIST + GOSUB istop + found = TRUE ;* disp.line lists only found lines - default to found + IF parm1 = 0 THEN + IF parm2 = "" THEN parm1 = 1 + ELSE + * special case - parm1 = 0/locate first match in item + found = FALSE + LOOP + * disp.line only prints line if found = TRUE + * else it increments pointer + start = parm3 + stop = parm4 + search = parm2 + GOSUB locate + GOSUB disp.line + GOSUB iseoi + UNTIL lastline OR found + REPEAT + END + END + FOR i = 1 TO parm1 WHILE lastline = FALSE + IF parm2 <> "" THEN + start = parm3 + stop = parm4 + search = parm2 + GOSUB locate + END + * disp.line only prints line if found = TRUE else + * it increments pointer + GOSUB disp.line + GOSUB iseoi + NEXT i + +CASE command = COM.MERGE + * parm1 = number of lines + * parm2 = filename + * parm3 = item-id + * parm4 = start line + IF parm2 <> "" THEN + * merge from different file + OPEN parm2 TO mergefp ELSE + PRINT "Not on file" + RETURN + END + END ELSE + * merge from same file + mergefp = fp + END + + READ mergerecord FROM mergefp,parm3 ELSE + PRINT "Not on file" + RETURN + END + modified = TRUE + tmp1 = parm1 + parm4 - 1 + tmp2 = "" + j = 0 + * get all attributes to merge + nmattr = DCOUNT ( mergerecord, @AM ) + FOR i = parm4 to tmp1 WHILE i <= nmattr + tmp3 = mergerecord + tmp2 = tmp2:tmp3 + j = j + 1 + IF i <> tmp1 THEN + tmp2 = tmp2:@AM + END + NEXT i + * insert merged attributes and update counts + INS tmp2 BEFORE record + nattr += j + IF nattr <> 0 THEN new.item = FALSE + curline += j + + * release memory + tmp2 = "" + tmp3 = "" + mergerecord = "" + +CASE command = COM.REPLACE OR command = COM.REP.UNIVERSAL + * parm1 = number of lines + * parm2 = search string + * parm3 = replace string + * parm4 = start column + * parm5 = end column + IF parm1 = 0 THEN parm1 = 1 + curline -= 1 + lastline = FALSE ;* backed up so lastline is false + IF curline <= 0 THEN curline = 1 + IF parm4 = 0 THEN + * simple replace - prompting for input + IF curline >= nattr THEN curline = nattr + FOR i = 1 TO parm1 + IF NOT(suppress) THEN + lno = curline + GOSUB disp.number + END + PRINT " ": + INPUT insert.buf + IF insert.buf = "" THEN i = parm1 ELSE + modified = TRUE + record = insert.buf + END + IF curline >= nattr THEN + PRINT "EOI ":nattr + i = parm1 + END + curline += 1 + NEXT i + END ELSE + * search and replace + tmp = parm1 - curline - 1 + IF tmp > nattr THEN parm1 = tmp + FOR replace = 1 TO parm1 WHILE curline <= nattr + search = parm2 + start = parm4 + stop = parm5 + foundlist="" + LOOP + GOSUB locate + IF found THEN + position = position + start -1 + foundlist = foundlist:position:@AM + END + WHILE command = COM.REP.UNIVERSAL AND found = TRUE AND start < stop + start = position + LEN( parm2 ) + REPEAT + + IF foundlist <> "" THEN + j = DCOUNT( foundlist, @AM ) -1 + modified = TRUE + line = record + lensrch = LEN ( parm2 ) + FOR i = j TO 1 STEP -1 + k = foundlist + line = line[1,k-1]:parm3:line[k+lensrch,SUB.END] + NEXT i + record = line + GOSUB disp.line + line = "" + found = TRUE + END ELSE + curline += 1 + END + NEXT replace + END + GOSUB iseoi + +CASE command = COM.DISP.PRE + FOR i = 1 TO 10 + PRINT "P":i-1:" ":prestore(i) + NEXT i + +CASE command = COM.EXE.PRE + pre.execute = prestore( parm1 ) + +CASE command = COM.SET.PRE + prestore(parm1) = parm2 + +CASE command = COM.SUPPRESS + IF suppress = TRUE THEN + suppress = FALSE + PRINT "Suppress off" + END ELSE + suppress = TRUE + PRINT "Suppress on" + END + +CASE command = COM.LENGTH + PRINT "Item length is ":LEN(record):" bytes" + +CASE command = COM.TOP + lastline = FALSE + PRINT "Top" + curline = 1 + +CASE command = COM.BOTTOM + PRINT "EOI ":nattr + curline = nattr+1 + +CASE command = COM.UP + lastline = FALSE + curline -= parm1 + curline -= 1 + IF curline < 1 THEN + PRINT "Top" + curline = 1 + END ELSE + GOSUB disp.line + GOSUB iseoi + END + +CASE command = COM.DOWN + curline += parm1 + IF curline >= nattr THEN + PRINT "EOI ": + curline = nattr + lno = curline + GOSUB disp.number + PRINT + lastline = TRUE + END ELSE + GOSUB disp.line + GOSUB iseoi + END + +CASE command = COM.GOTO + lastline = FALSE + IF parm1 = 0 THEN + curline = 1 + PRINT "Top" + END ELSE + curline = parm1 + GOSUB disp.line + GOSUB iseoi + END + +CASE command = COM.ZONE + zonestart = parm1 + zonestop = parm2 - parm1 + 1 + +CASE command = COM.CANCEL + PRINT "Undo not available" + +CASE command = COM.CANCELALL + record = xrecord + nattr = DCOUNT( record, @AM ) + lastline = FALSE + curline = 1 + lno = xlineno + GOSUB disp.number + +END CASE +RETURN + +* +* subroutines +* + +disp.number: + IF LEN( lno ) > 3 THEN + PRINT lno: + END ELSE + PRINT FMT( lno, "R%%%" ): + END + RETURN + +disp.line: + IF lastline = TRUE THEN + IF new.item = TRUE THEN + PRINT "New item" + END + GOSUB istop + END + IF curline <= nattr THEN + IF new.item = FALSE AND nattr <> 0 THEN + * don't display when searching and not found + IF command <> COM.LIST OR found = TRUE THEN + IF suppress = FALSE THEN + lno = curline + GOSUB disp.number + END + GOSUB putline + END + curline += 1 + END + END + RETURN + +sure: + PRINT "Sure(Y/N=CR)?": + INPUT tmp + IF UPCASE( TRIMF(tmp)[1,1] ) = "Y" THEN + tmp = TRUE + END ELSE + tmp = FALSE + END + RETURN + +putline: + tmp = record[zonestart, zonestop] + tmp1 = LEN ( tmp ) + + IF hex = TRUE THEN + * + * format hex string + * + tmp2 = "" + FOR j = 1 TO tmp1 + tmp2 = tmp2:OCONV( tmp[j,1], "MX" ) + NEXT j + tmp = tmp2 + END + * + * filter nonprintable characters + * + length = LEN( tmp ) + tmp1 = "" + FOR j = 1 TO length + chr = tmp[j,1] + IF ( chr >= " " AND chr <= "~" ) OR chr = TAB THEN + tmp1 = tmp1:chr + END ELSE + tmp1 = tmp1:"." + END + NEXT j + PRINT " ":tmp1 + + RETURN + +* +* locate string in line +* input: record: string to search +* start = starting column +* stop = ending column +* search = string to find +* sep: separator - ":" means only match from start of line +* wildcard: TRUE|FALSE +* output: found - TRUE|FALSE +* position - position of found string +locate: + IF search = "" THEN + * special case - search for // + position = 1 + found = TRUE + RETURN + END + line = record[ start, stop ]:SPACE(256) + * + * look for exact match + * + IF wildcard = FALSE OR INDEX( search, "^", 1 ) = 0 THEN + IF sep = ":" THEN + IF search = line[ 1, LEN( search ) ] THEN + found = TRUE + position = 1 + END ELSE + found = FALSE + END + END ELSE + position = INDEX( line, search, 1 ) + IF position = 0 THEN + found = FALSE + END ELSE + found = TRUE + END + END + END ELSE + tline = line + IF sep = ":" THEN + * must start in column 1 + GOSUB wildcompare + IF found = TRUE THEN position = 1 + END ELSE + position = 1 + found = FALSE + LOOP + IF search[1,1] = '^' THEN + * wildcard always matches first char + tpos = 1 + END ELSE + * wildcard always matches first char + tpos = INDEX ( tline, search[1,1], 1 ) + END + IF tpos <> 0 THEN + * first character not found + tline = tline[tpos,SUB.END] + position = position + tpos -1 + END + WHILE tline <> "" AND tpos <> 0 + GOSUB wildcompare + IF found = TRUE THEN + GOTO locate.found + END ELSE + tline = tline[2,SUB.END] + END + REPEAT + END + END +locate.found: + tline = "" + line = "" + RETURN + +insert.line: + * Trailing Attribute mark denotes empty line - just remove it + * embedded attribute marks are inserted + * + tmp = LEN(parm1) + IF ( parm1[tmp,1] = @AM ) THEN parm1 = parm1[1,tmp-1] + + IF curline = nattr THEN + record = record:@AM:parm1 + END ELSE + INS parm1 BEFORE record + END + modified = TRUE + tmp = DCOUNT ( parm1, @AM ) + * line with no @AM is still one attribute + IF tmp = 0 THEN tmp = 1 + * increment curline and total number of attributes + curline += tmp + nattr += tmp + IF curline > nattr THEN lastline = TRUE + RETURN + + +wildcompare: + * + * input: search - search string + * line - searched string + k = LEN ( search ) + found = TRUE + FOR j = 1 TO k + IF search[j,1] <> '^' AND search[j,1] <> tline[j,1] THEN + found = FALSE + j = k + END + NEXT j + RETURN + +iseoi: + IF curline > nattr OR nattr = 0 THEN + PRINT "EOI ": + lno = nattr + GOSUB disp.number + lastline = TRUE + PRINT + END + RETURN + +istop: + IF curline > nattr OR lastline = TRUE THEN + curline = 1 + PRINT @SYS.BELL:"Top" + lastline = FALSE + END + RETURN + +END diff --git a/Ardent/UV/APP.PROGS/ENABLE.REC.B b/Ardent/UV/APP.PROGS/ENABLE.REC.B new file mode 100755 index 00000000..5dd534d9 --- /dev/null +++ b/Ardent/UV/APP.PROGS/ENABLE.REC.B @@ -0,0 +1,117 @@ +****************************************************************************** +* +* System Admin Transaction Logging - Enable Logging +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description........................................ +* 10/14/98 23801 SAP Change copyrights. +* 10/01/96 19347 LA Check if logging is already enabled or coming up. +* 06/07/96 18585 EAP Added $OPTIONS INFORMATION so that +* @SYSTEM.RETURN.CODE is set by EXECUTE +* 03/25/96 18212 LAG Windows NT port +* 05/24/95 16198 GMH Change how uniVerse home dir is obtained +* 01/23/95 15836 CSM option to terminate prepared stale tx at startup +* 10/14/94 15104 DTM Fixed to verify number of prompts +* 10/14/94 15101 DTM Corrected message displayed +* 07/12/94 13286 DTM Corrected flag/error file option +* 05/15/94 13286 DTM Initial programming +* +******************************************************************************* +$OPTIONS INFORMATION +id = "%W%" +******************************************************************************* + +$INCLUDE UNIVERSE.INCLUDE TLOG.H +$INCLUDE UNIVERSE.INCLUDE FILENAMES.H +$INCLUDE UNIVERSE.INCLUDE MACHINE.NAME + + ALLOWED = 0 + CALL *ISUSER.B( 0, ALLOWED ) + + ;* Do superuser verification + IF NOT(ALLOWED) THEN + PRINT ENBL.MSG3 + STOP + END + + * Check if it is OK to enable logging: if it is in the process of + * shutting down or suspending or if it is already enabled or being + * enabled, then don't try to enable it. + + State = "" + RECIO( State, FINFO$AI.STATE, RECIO$FINFO ) + IF State = AI$SHUT.PROG OR State = AI$SUSP.PROG THEN + PRINT ENBL.MSG12 + STOP + END + IF State = AI$LOGGING OR State = AI$INITIAL OR State = AI$WARM.START THEN + PRINT ENBL.MSG11 + STOP + END + + ;* Enable Logging + + TMP = TRIM( @SENTENCE ) + CNT = COUNT( TMP, " " ) + IF ( CNT > 2 ) OR ( CNT < 1 ) THEN + PRINT "Error: Incorrect number of arguments" + STOP + END + OPT = FIELD( TMP, " ", 2 ) + + ****************** + ** Windows NT port + ** + IF OS.TYPE = "UNIX" THEN + command = OS.EXEC:" '":UV.BIN:"/uvlogd" + END ELSE + command = OS.EXEC:" '":UV.BIN:"/uvbootd ":UV.BIN:"/uvlogd.exe" + END + ** + ****************** + + IF OPT = "NO" THEN + command := " -r " + END ELSE + IF OPT NE "YES" THEN + PRINT "Error: Must specify either YES or NO as the second option" + STOP + END + END + + OPT = FIELD( TMP, " ", 3 ) + IF OPT = "SYNC" THEN + command := " -s " + END + + command := "'" + + EXECUTE command CAPTURING junk + + IF @SYSTEM.RETURN.CODE THEN + PRINT ENBL.MSG4 + STOP + END ELSE + LOOP + CURR.DATE = DATE() + CURR.TIME = TIME() + UNTIL CURR.DATE = DATE() DO REPEAT + + CURR.TIME = OCONV( CURR.TIME, 'MTS' ) + CURR.DATE = OCONV( CURR.DATE, 'D' ) + + SEQ.NUMBER = 0 + RECIO( SEQ.NUMBER, FINFO$AI.SEQUENCE, RECIO$FINFO ) + PRINT ENBL.MSG5: CURR.TIME : SUSP.MSG7 :CURR.DATE: STATE.MSG + END +END diff --git a/Ardent/UV/APP.PROGS/ENTER.BOX.B b/Ardent/UV/APP.PROGS/ENTER.BOX.B new file mode 100755 index 00000000..01ee351e --- /dev/null +++ b/Ardent/UV/APP.PROGS/ENTER.BOX.B @@ -0,0 +1,64 @@ +******************************************************************************* +* +* New System Admin - This routine creates a box, and then prompts a user +* for a text input. +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* +* Date.... GTAR# WHO Description......................................... +* 10/14/98 23801 SAP Change copyrights. +* 05/15/96 18330 LDG Changed LEN() function to LENDP() for NLS DBCS. +* 05/13/91 8345 DTM changed print to tprint +* 05/09/91 8331 DTM Fixed Enter.box.b to handle F.4 +* 2/26/91 7673 DTM Added new option, case.in, for case support +* 11/08/90 7393 DPB Much nicer ENTER.BOX.B +* 11/05/90 7393 DPB Routine first created and admin'd. +******************************************************************************* + +SUBROUTINE ENTER.BOX.B(start.line, start.col, width, prmpt, invar, case.in) + +********************* +* Center box +********************* +IF start.col = -1 THEN + start.col = 39-INT((width+LENDP(prmpt))/2) +END +********************* +* Do not center box +********************* +ELSE IF (start.col+width+LENDP(prmpt)+1) > 79 THEN + start.col = (79 - (width+LENDP(prmpt)+1)) +END + +CALL *DRAW.BOX.B(start.line,start.col,1,width+LENDP(prmpt),1) +loop: + TPRINT @(start.col+1, start.line+1): + invar="" + CALL *CINPUT.B(prmpt, invar, special,width-1,case.in) + + BEGIN CASE + CASE special=8 ;* Escape was entered + invar = -1 + GOTO end.part + CASE special=0 ;* Data was entered + GOTO end.part + CASE special=12 + invar="*" + GOTO end.part + CASE 1 ;* Some other key entered + GOTO loop + END CASE + +end.part: + CALL *DRAW.BOX.B(start.line, start.col, 1, width+LENDP(prmpt),0) +RETURN diff --git a/Ardent/UV/APP.PROGS/EQS b/Ardent/UV/APP.PROGS/EQS new file mode 100755 index 00000000..6493e6c2 --- /dev/null +++ b/Ardent/UV/APP.PROGS/EQS @@ -0,0 +1,26 @@ +******************************************************************************** +* +* Support of PR1ME INFORMATION subroutine '-EQS' +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description......................................... +* 10/14/98 23801 SAP Change copyrights. +* 07/25/88 - - Maintenence log purged at 5.2.1, see release 5.1.10. +* +******************************************************************************* + +$OPTIONS DEFAULT + +subroutine PR1ME(ans,m1,m2) + ans = EQS(m1,m2) +return diff --git a/Ardent/UV/APP.PROGS/ERRNO.B b/Ardent/UV/APP.PROGS/ERRNO.B new file mode 100755 index 00000000..946dbeb8 --- /dev/null +++ b/Ardent/UV/APP.PROGS/ERRNO.B @@ -0,0 +1,29 @@ +******************************************************************************** +* +* Support of PR1ME INFORMATION subroutine '!ERRNO' +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description......................................... +* 10/14/98 23801 SAP Change copyrights. +* 09/07/93 12299 LA Initial implementation. +* +******************************************************************************* + +$OPTIONS DEFAULT + +subroutine PR1ME(ANS) + + ANS = SYSTEM(1021) + RETURN + +END diff --git a/Ardent/UV/APP.PROGS/ERROR.BOX.B b/Ardent/UV/APP.PROGS/ERROR.BOX.B new file mode 100755 index 00000000..b7446079 --- /dev/null +++ b/Ardent/UV/APP.PROGS/ERROR.BOX.B @@ -0,0 +1,42 @@ +******************************************************************************* +* +* ERROR.BOX.B - This widget allows the user to create a error message box +* on the screen with retry button. +* +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description......................................... +* 10/14/98 23801 SAP Change copyrights. +* 05/15/96 18330 LDG Changed LEN() function to LENDP() for NLS DBCS. +* 03/14/91 7673 DTM Routine first created and admin'd. +******************************************************************************* + +SUBROUTINE ERROR.BOX.B(s.ln, mx.ln,wd,txtstr,retry,help.string) + +Button.array="" +Button.array<1>=3 +Button.array<2>="Retry" +Button.array<3>="Cancel" +Button.array<4>="Help" +IF s.ln=0 THEN s.ln=5 +IF wd=0 THEN wd=60 +IF mx.ln=0 THEN + count=LENDP(txtstr)/wd + IF count > 8 THEN count = 8 + mx.ln=count+3 +END +txtstr="!!ERROR!! - ":txtstr +CALL *CHOICE.BOX.B(s.ln,mx.ln,wd,txtstr, Button.array,retry,help.string) +RETURN + +END diff --git a/Ardent/UV/APP.PROGS/EXAM.COMMON.B b/Ardent/UV/APP.PROGS/EXAM.COMMON.B new file mode 100755 index 00000000..5a5a949c --- /dev/null +++ b/Ardent/UV/APP.PROGS/EXAM.COMMON.B @@ -0,0 +1,59 @@ +****************************************************************************** +* +* EXAM.COMMON.B - Routine to display the UV$open$files named common. +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description........................................ +* 10/14/98 23801 SAP Change copyrights. +* 10/12/92 10327 WLC Initial Release. +******************************************************************************* +* +* This program displays the contents of named common +* /UV$open$files/. +* +$OPTIONS PICK +$INCLUDE UNIVERSE.INCLUDE OPEN.TOOLS.H +* +* Equates +* + EQU SUCCESS TO 1 + EQU FAILURE TO 0 + + EQU FILES.NOW.OPENED TO FILE$TABLE(1) ;* list of file names + EQU TABLE.POINTER TO FILE$TABLE(2) ;* list of pointers to FILE$VARS + EQU TABLE.COUNTER TO FILE$TABLE(3) ;* next available FILE$VAR entry + EQU OPEN.REQUESTS TO FILE$TABLE(4) ;* list of # opens requested + EQU VARIABLE.LIST TO FILE$TABLE(5) ;* list of variable stamps +* +* Declare named common +* + COMMON /UV$open$files/ FILE$VARS(TABLE.MAX),FILE$TABLE(5),curr$UV$ACCOUNT +* +* FILE$VARS : contains actual filevars that are returned +* FILE$TABLE : 5 elements +* element 1 : list of opened file names ascending left (multi valued) +* element 2 : pointer into file$vars array (multi valued) +* element 3 : current number of open files (single value) +* element 4 : file open requests (multi valued) +* element 5 : variable stamp - unique identifier for the variable name +* used in open call. (multi valued) +* +* curr$UV$ACCOUNT : the name of the account in which these files +* were opened. +* + NUM.ENTRIES = count(FILES.NOW.OPENED, @VM)+1 + HEADING "Current UniVerse Account: ":curr$UV$ACCOUNT:"'LL'CNT File Name Requests Variable Stamp'L'--- ------------------------------ -------- -------------------------" + FOR I = 1 TO NUM.ENTRIES + PRINT FMT("000":I,"R#3"):") ":FMT(FILES.NOW.OPENED,"L#30"):" ":FMT("00000000":OPEN.REQUESTS,"R#8"):" ":FMT(VARIABLE.LIST, "L#25") + NEXT I + END diff --git a/Ardent/UV/APP.PROGS/EXIST b/Ardent/UV/APP.PROGS/EXIST new file mode 100755 index 00000000..11504559 --- /dev/null +++ b/Ardent/UV/APP.PROGS/EXIST @@ -0,0 +1,43 @@ +******************************************************************************** +* +* Support of PR1ME INFORMATION subroutine '!EXIST' +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description......................................... +* 10/13/98 23801 RGA Change copyright info. +* 03/22/94 13287 LPC Change OPENSEQ TO OPEN & READV to avoid locks +* 07/25/88 - - Maintenence log purged at 5.2.1, see release 5.1.10. +* +******************************************************************************* +* !EXIST subroutine returns success=1 if subroutine.name exists in catalog +* spcae otherwise it returns success=0. Also refer to newacc which defines +* GLOBAL.CATDIR . Prime information implimentation also returns status function +* code to indicate the number of arguments to subroutine.Since currently there +* is no way of setting status function in a basic program this subroutine call +* does not return number of arguments to the catalog program -GPS +****************************************************************************** +$OPTIONS DEFAULT +subroutine EXIST(subroutine.name,success) +OPEN "", "GLOBAL.CATDIR" TO fd.prog ELSE + success = 0 + return + END + +READV foobar FROM fd.prog, subroutine.name, 0 THEN + success = 1 + END +ELSE + success = 0 + END +return +END diff --git a/Ardent/UV/APP.PROGS/EXPAND.B b/Ardent/UV/APP.PROGS/EXPAND.B new file mode 100755 index 00000000..e967fed1 --- /dev/null +++ b/Ardent/UV/APP.PROGS/EXPAND.B @@ -0,0 +1,311 @@ +******************************************************************************* +* +* uniVerse port of PI/open EXPAND subroutine +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenance log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description......................................... +* 10/14/98 23801 SAP Change copyrights. +* 07/13/95 16907 EAP Use UNISEQ() for NLS support +* 11/07/94 15265 WLG Put back the () for PICK style COPY. +* 11/02/94 13261 WLG Removed DELIMITIERS except for space because there +* isn't any reason why a record-id can't contain: +* "+^~=<>()" in either PI or the old UV copy +* 07/19/94 13949 WLG Don't throw away id's which are in VOC as "K 38" +* to allow the caller to process them as valid ids. +* 08/04/93 10871 WLG Fix to handle COPY commandline allowing use +* of "-", and "#" in record-id and retaining the +* support for -OPTIONs on commandline. +* 01/29/93 10957 PVW allow dictionary names the same as filesname in +* revise +* 11/12/92 10213 PVW Port PI/open ENTRO to uniVerse. +* +******************************************************************************* + +$OPTIONS INFORMATION + + SUBROUTINE EXPAND (SENTENCE, OUTLINE, SYMBOLS, ERROR.CODE) + +$INCLUDE UNIVERSE.INCLUDE UV.COM +$INCLUDE UNIVERSE.INCLUDE VERBINSERT.H +$INCLUDE UNIVERSE.INCLUDE SYMBOL.TBL.H +$INCLUDE UNIVERSE.INCLUDE KEYWORD.H + + EQU ITEM.TYPES TO 'PKDFVIRQAS' + + STRIPSTRINGS = '-STRIPSTRINGS' + EXPAND = '-EXPAND' + FINDFILE = '-FINDFILE' + +* Watch out for SYMBOLINS.H below!!! + + EQU TYPE.DEF LIT 'INDEX(ITEM.TYPES, WORD.DEF [1, 1], 1) + 1' + +*---- Constants: + + * --- Moved the comma from DELIMITERS to ALTDELIM to support multi-level + * files and qpointers to multi-level files. + + EQU DELIMITERS TO '() ' + EQU ALTDELIM TO ',,' + MAX.TOKENS = 100 + DIM TABLE (MAX.TOKENS, 2) + ALTSIZE = 20 + DIM ALTTABLE (ALTSIZE, 2) + POS = 0 + ERROR.CODE = 0 ;*004 + + +MATPARSE: + MATPARSE TABLE FROM SENTENCE, DELIMITERS + IF INMAT() = 0 THEN + MAX.TOKENS = INT(MAX.TOKENS * 1.5) + DIM TABLE (MAX.TOKENS, 2) + GOTO MATPARSE + END + NUM.TOKENS = INT((INMAT() + 1) / 2) + +*---- Perform expansion and lexical analysis. + FOR I = 1 TO NUM.TOKENS + +DO.TOKEN: + TOKEN = TABLE (I, 1) + SYMBOL.ORIGIN = 0 ;* 0 = Neither ;*006 + IF TOKEN = '' THEN GOTO NEXT.TOKEN + IF UNISEQ(TOKEN [1, 1]) <= MAX.TYPE THEN + OUTLINE := ' ':TOKEN + GOTO NEXT.TOKEN + END + IF (NUM(TOKEN)) THEN GOTO IS.VAL + +MATCH.DONE: + IF NOT(DEVSYS.FILE.FOUND) THEN GOTO SKIP.DICT + SYMBOL.ORIGIN = 1 ;* = DICT of data file ;*006 + READ WORD.DEF FROM DEVSYS.DICT.FILE, TOKEN THEN + TOKEN.COUNT = DCOUNT(OUTLINE," ") + TOKEN.CHECK = FIELD(OUTLINE," ",TOKEN.COUNT) + SNO = TOKEN.CHECK[2,99] + + IF UNISEQ(TOKEN.CHECK[1,1]) = KEYWORD THEN + OP.CODE = SYMBOLS(SNO)<1> + + IF OP.CODE = KW$VERIFILE THEN + READ CHECK.DEF FROM DEVSYS.VOC.FILE, TOKEN THEN + SYMBOL.ORIGIN = 2 + WORD.DEF = CHECK.DEF + END ELSE + IF INDEX(TOKEN,",",1) THEN + MAINFILE = FIELD(TOKEN,",",1) + READ CHECK.DEF FROM DEVSYS.VOC.FILE,MAINFILE THEN + SYMBOL.ORIGIN = 2 + WORD.DEF = CHECK.DEF + END + END + END + END + END + GOTO DISPATCH + END ELSE +SKIP.DICT: + SYMBOL.ORIGIN = 2 ;* 2 = VOC ;*006 + READ WORD.DEF FROM DEVSYS.VOC.FILE, TOKEN ELSE + + * --- Could be a filename with a comma in it (mainfile,mainfile + * or qpointer to a multi-level file), in which case it won't + * have a VOC entry for the filename. Use the part before the + * comma to read the VOC. If this exists in the VOC then this + * can be set as a file type. + IF INDEX(TOKEN, "," ,1) THEN + MAINFILE = FIELD(TOKEN, "," ,1) + READ WORD.DEF FROM DEVSYS.VOC.FILE, MAINFILE THEN GOTO DISPATCH + END + SYMBOL.ORIGIN = 0 ;* failed ;*006 + IF TOKEN[1,1] = "-" OR INDEX(TOKEN, ',', 1) THEN + + DELIM.TO.CHECK = ALTDELIM + IF TOKEN[1,1] = "-" AND NOT(INDEX(TOKEN, ',', 1)) THEN + READ OPT.REC FROM DEVSYS.VOC.FILE, TOKEN[2,999] THEN + IF OPT.REC[1,1] # "K" THEN GOTO IS.VAL + * We have an -OPTION which needs to be parsed + DELIM.TO.CHECK = "--" + END ELSE GOTO IS.VAL + END +ALTPARSE: + MATPARSE ALTTABLE FROM TOKEN, DELIM.TO.CHECK + IF INMAT() = 0 THEN + ALTSIZE = INT(ALTSIZE * 1.5) + DIM ALTTABLE (ALTSIZE, 2) + GOTO ALTPARSE + END + NUM.NEW = INT((INMAT() + 1) / 2) + +*---- Check for table overflow. + IF NUM.NEW + NUM.TOKENS > MAX.TOKENS THEN + MAX.TOKENS = NUM.NEW * 2 + MAX.TOKENS + DIM TABLE (MAX.TOKENS, 2) + END + IF I < NUM.TOKENS THEN +* +* Move the rest of the existing tokens across to make space for the new ones +* + FOR J = NUM.TOKENS TO I + 1 STEP -1 + J1 = J + NUM.NEW + TABLE (J1, 1) = TABLE (J, 1) + TABLE (J1, 2) = TABLE (J, 2) + NEXT J + END +* +* Now move the last delimiter entry to the end of the new block +* + TABLE (I+NUM.NEW, 1) = '' + TABLE (I+NUM.NEW, 2) = TABLE (I, 2) +* +* Now move all the new tokens elements in +* + FOR J = 1 TO NUM.NEW + J1 = I + J - 1 + TABLE (J1, 1) = ALTTABLE (J, 1) + TABLE (J1, 2) = ALTTABLE (J, 2) + NEXT J + NUM.TOKENS += NUM.NEW + GOTO DO.TOKEN + END + +IS.VAL: + SYMBOL.VALUE = VALUE + GOSUB LSYMBOL + OUTLINE := ' ':CHAR(VALUE):POS + GOTO NEXT.TOKEN + END + END + +*---- Dispatch on symbol type. +DISPATCH: + ON TYPE.DEF GOTO DOBAD.TYPE, DOMACRO, DOKEYWORD, + D.TYPE.DICTIONARY, DOFILE, DOVERB, I.TYPE.DICTIONARY, DOREMOTE, DOQPTR, A.TYPE.DICTIONARY, S.TYPE.DICTIONARY + +DOBAD.TYPE: + SYMBOL.VALUE = BAD.TYPE + GOSUB LSYMBOL + OUTLINE := ' ':CHAR(BAD.TYPE):POS + GOTO NEXT.TOKEN + +DOREMOTE: + REMOTE.FILE = EXTRACT(WORD.DEF, 2, 0, 0) + REMOTE.ITEM = EXTRACT(WORD.DEF, 3, 0, 0) + IF DEVSYS.R.FILE.NAME # REMOTE.FILE THEN + DEVSYS.R.FILE.NAME = '' + OPEN '', REMOTE.FILE TO DEVSYS.R.FILE ELSE + PRINT 'Cannot open remote file "': + PRINT REMOTE.FILE:'" defined by "': + PRINT TOKEN:'".' + GOTO DOBAD.TYPE + END + DEVSYS.R.FILE.NAME = REMOTE.FILE + END + READ BODY FROM DEVSYS.R.FILE, REMOTE.ITEM ELSE + PRINT 'Cannot open remote record "': + PRINT REMOTE.ITEM:'" defined by "': + PRINT TOKEN:'".' + GOTO DOBAD.TYPE + END + WORD.DEF = BODY + GOTO DISPATCH + +DOMACRO: + IF WORD.DEF[2,1] <> 'H' + THEN GOTO DOBAD.TYPE ;* Make sure it IS a PHrase (002). + BODY = EXTRACT(WORD.DEF, 2, 0, 0) + FMC = 2 + +MORE.M: + IF BODY [LEN(BODY), 1] = '_' THEN + FMC += 1 + BODY = BODY [1, LEN(BODY)-1]:' ':EXTRACT(WORD.DEF, FMC, 0, 0) + GOTO MORE.M + END + BODY = ILPROMPT(BODY) + CALL @STRIPSTRINGS (BODY, MAT SYMBOLS) + IF NOT(DEVSYS.FILE.FOUND) THEN + CALL @FINDFILE ('VERB ':BODY, MAT SYMBOLS, ERROR.CODE) ;*004 + END + + IF NOT(ERROR.CODE) + THEN + * --- Only recurse if no error has occurred (SPAR 4034265). + CALL @EXPAND (BODY, OUTLINE, MAT SYMBOLS, ERROR.CODE) + END + + GOTO NEXT.TOKEN + +DOKEYWORD: + SYMBOL.VALUE = KEYWORD + GOSUB LSYMBOL + OUTLINE := ' ':CHAR(KEYWORD):POS + SYMBOLS (POS) = EXTRACT(WORD.DEF, 2, 0, 0) + GOTO NEXT.TOKEN + +A.TYPE.DICTIONARY: +S.TYPE.DICTIONARY: +D.TYPE.DICTIONARY: + SYMBOL.VALUE = NOUN + GOSUB LSYMBOL + OUTLINE := ' ':CHAR(NOUN):POS +* include dictionary type in SYMBOLS table + SYMBOLS (POS) = WORD.DEF[1,1]:@FM:FIELD(WORD.DEF, @FM, 2, 999) + GOTO NEXT.TOKEN + +I.TYPE.DICTIONARY: + SYMBOL.VALUE = I.TYPE + GOSUB LSYMBOL + OUTLINE := ' ':CHAR(I.TYPE):POS + SYMBOLS (POS) = FIELD(WORD.DEF, @FM, 2, 999) + GOTO NEXT.TOKEN + +* --- If the voc type was a qpointer then set this up as a file type. It will +* get resolved as a file when the file is opened within the verb. +DOQPTR: +DOFILE: + SYMBOL.VALUE = FILE + GOSUB LSYMBOL + SYMBOLS (POS) = FIELD(WORD.DEF, @FM, 2, 4) + OUTLINE := ' ':CHAR(FILE):POS + GOTO NEXT.TOKEN + +DOVERB: + SYMBOL.VALUE = VERB + GOSUB LSYMBOL + SYMBOLS (POS) = FIELD(WORD.DEF, @FM, 2, 20) + OUTLINE := ' ':CHAR(VERB):POS + GOTO NEXT.TOKEN + +NEXT.TOKEN: + TABLE (I, 2) = TRIM(TABLE (I, 2)) + IF LEN(TABLE (I, 2)) = 1 THEN + OUTLINE := ' ':TABLE (I, 2) + END ELSE + J = 1 + LOOP + UNTIL TABLE (I, 2) [J, 1] = '' DO + OUTLINE := ' ':TABLE (I, 2) [J, 1] + J += 1 + REPEAT + END + NEXT I + CONVERT CHAR(9) TO @VM IN OUTLINE + OUTLINE = TRIM(OUTLINE) + CONVERT @VM TO CHAR(9) IN OUTLINE + RETURN + +$INCLUDE UNIVERSE.INCLUDE SYMBOLINS.H + + END diff --git a/Ardent/UV/APP.PROGS/EXTERNALG.B b/Ardent/UV/APP.PROGS/EXTERNALG.B new file mode 100755 index 00000000..821bb979 --- /dev/null +++ b/Ardent/UV/APP.PROGS/EXTERNALG.B @@ -0,0 +1,41 @@ +******************************************************************************* +* +* Interlude to handle external algorithms for Partitioned files. +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description......................................... +* 10/14/98 23801 SAP Change copyrights. +* 05/23/94 14165 ALC Implement the EXTERNAL partitioning algorithm. +* +******************************************************************************* + +SUBROUTINE EXTERNALG(RESULT, ROUTINE, ID, IDLEN, NUMVOLS) + +DECLARE GCI DBmvhash + + * If the NUMVOLS arg is zero then we have an EXTERNAL algorithm, + * otherwise we have a MULTIVOLUME algorithm, so adjust call accordingly + * + IF NUMVOLS = 0 THEN + PART.NUM = 0 + CALL @ROUTINE(ID, IDLEN, PART.NUM) + RESULT = PART.NUM + END ELSE + PART.NUM = NUMVOLS + RESULT = DBmvhash(ID, IDLEN, PART.NUM) + END + + + RETURN + +END diff --git a/Ardent/UV/APP.PROGS/FADD.B b/Ardent/UV/APP.PROGS/FADD.B new file mode 100755 index 00000000..79118841 --- /dev/null +++ b/Ardent/UV/APP.PROGS/FADD.B @@ -0,0 +1,28 @@ +******************************************************************************** +* +* Support of PR1ME INFORMATION subroutine '!FADD' +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description......................................... +* 10/14/98 23801 SAP Change copyrights. +* 07/15/93 12299 LA Initial implementation. +* +******************************************************************************* + +$OPTIONS DEFAULT + +subroutine PR1ME(ANSWER, A, B) + ANSWER = FADD(A,B) +return + + diff --git a/Ardent/UV/APP.PROGS/FCMP.B b/Ardent/UV/APP.PROGS/FCMP.B new file mode 100755 index 00000000..3f0d6757 --- /dev/null +++ b/Ardent/UV/APP.PROGS/FCMP.B @@ -0,0 +1,37 @@ +******************************************************************************** +* +* Support of PR1ME INFORMATION subroutine '!FCMP' +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description......................................... +* 10/14/98 23801 SAP Change copyrights. +* 07/28/93 12299 LA Initial implementation. +* +******************************************************************************* + +$OPTIONS DEFAULT + +subroutine PR1ME(ANSWER, A, B) + IF A < B THEN + ANSWER = -1 + END ELSE + IF A = B THEN + ANSWER = 0 + END ELSE + ANSWER = 1 + END + END + +return + + diff --git a/Ardent/UV/APP.PROGS/FDIV.B b/Ardent/UV/APP.PROGS/FDIV.B new file mode 100755 index 00000000..c4ed28c1 --- /dev/null +++ b/Ardent/UV/APP.PROGS/FDIV.B @@ -0,0 +1,28 @@ +******************************************************************************** +* +* Support of PR1ME INFORMATION subroutine '!FDIV' +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description......................................... +* 10/14/98 23801 SAP Change copyrights. +* 07/15/93 12299 LA Initial implementation. +* +******************************************************************************* + +$OPTIONS DEFAULT + +subroutine PR1ME(ANSWER, A, B) + ANSWER = FDIV(A, B) +return + + diff --git a/Ardent/UV/APP.PROGS/FIELDS b/Ardent/UV/APP.PROGS/FIELDS new file mode 100755 index 00000000..81e222fc --- /dev/null +++ b/Ardent/UV/APP.PROGS/FIELDS @@ -0,0 +1,26 @@ +******************************************************************************** +* +* Support of PR1ME INFORMATION subroutine '-FIELDS' +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description......................................... +* 10/14/98 23801 SAP Change copyrights. +* 07/25/88 - - Maintenence log purged at 5.2.1, see release 5.1.10. +* +******************************************************************************* + +$OPTIONS DEFAULT + +subroutine PR1ME(ans,m1,p1,p2,p3) + ans = FIELDS(m1,p1,p2,p3) +return diff --git a/Ardent/UV/APP.PROGS/FINDFILE.B b/Ardent/UV/APP.PROGS/FINDFILE.B new file mode 100755 index 00000000..6bce0256 --- /dev/null +++ b/Ardent/UV/APP.PROGS/FINDFILE.B @@ -0,0 +1,154 @@ +******************************************************************************* +* +* uniVerse PI/open -FINDFILE subroutine +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenance log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description......................................... +* 10/14/98 23801 SAP Change copyrights. +* 02/24/93 11108 PVW Put in support for Multipart files. +* 12/07/92 10213 PVW Put in support for Q-pointers. +* 12/02/92 10213 PVW change to *UVPRINTMSG +* 11/12/92 10213 PVW Port PI/open ENTRO to uniVerse. +* +******************************************************************************* + +$OPTIONS INFORMATION + + SUBROUTINE FINDFILE (SENTENCE, SYMBOLS, ERROR.CODE) + +$INCLUDE UNIVERSE.INCLUDE UV.COM +$INCLUDE UNIVERSE.INCLUDE VERBINSERT.H +$INCLUDE UNIVERSE.INCLUDE SYMBOL.TBL.H +$INCLUDE UNIVERSE.INCLUDE KEYWORD.H +$INCLUDE UNIVERSE.INCLUDE VOC.TYPE.H + +*---- Constants: + EQU DELIMITERS TO '+-*/^~=<>#(), ' + POS = 0 + ERROR.CODE = 0 ;*003 + +*---- Look for file name. + NUM.TOKENS = COUNT(SENTENCE, ' ') + 1 + FOR I = 2 TO NUM.TOKENS ;* First token is VERB name. + TOKEN = FIELD(SENTENCE, ' ', I) + CC1 = COL1() + CC2 = COL2() + IF TOKEN = '' THEN GOTO NEXT.FILE.TOKEN + READ WORD.DEF FROM DEVSYS.VOC.FILE, TOKEN ELSE + IF INDEX(TOKEN,",",1) THEN + MAIN.FILE = FIELD(TOKEN,",",1) + READ WORD.DEF FROM DEVSYS.VOC.FILE, MAIN.FILE ELSE + TOKEN = UPCASE(TOKEN) + READ WORD.DEF FROM DEVSYS.VOC.FILE, TOKEN ELSE + IF INDEX(TOKEN,",",1) THEN + MAIN.FILE = FIELD(TOKEN,",",1) + READ WORD.DEF FROM DEVSYS.VOC.FILE, MAIN.FILE ELSE + GOTO NEXT.FILE.TOKEN + END + END ELSE + GOTO NEXT.FILE.TOKEN + END + END + END + END ELSE + TOKEN = UPCASE(TOKEN) + READ WORD.DEF FROM DEVSYS.VOC.FILE, TOKEN ELSE + GOTO NEXT.FILE.TOKEN + END + END + END + + TOKEN.TYPE = EXTRACT(WORD.DEF, 1, 0, 0) [1,1] + + IF TOKEN.TYPE = VOC$KEYWORD AND EXTRACT(WORD.DEF, 2, 0, 0) = KW$DICT THEN + DEVSYS.DICT.SWITCH = 1 + SYMBOL.VALUE = KEYWORD + SYMBOL.ORIGIN = 0 ;*007 + GOSUB LSYMBOL + SYMBOLS(POS) = EXTRACT(WORD.DEF, 2, 0, 0) + SENTENCE = SENTENCE [1, CC1]:CHAR(KEYWORD):POS:SENTENCE [CC2, 999] + GOTO NEXT.FILE.TOKEN + END + + IF TOKEN.TYPE = VOC$QPTR.FILE THEN + TOKEN.TYPE = VOC$FILE + WORD.DEF = 'F' + OPENCHECK '',TOKEN TO QPTR.DATA THEN + STATUS FILE.INFO FROM QPTR.DATA THEN + WORD.DEF<2> = FILE.INFO<20> + END ELSE + WORD.DEF<2> = '' + END + OPENCHECK 'DICT',TOKEN TO QPTR.DICT THEN + STATUS FILE.INFO FROM QPTR.DICT THEN + WORD.DEF<3> = FILE.INFO<20> + END ELSE + WORD.DEF<3> = '' + END + CLOSE QPTR.DICT + END ELSE + WORD.DEF<3> = '' + END + CLOSE QPTR.DATA + END ELSE + WORD.DEF<2> = '' + END + END + + IF TOKEN.TYPE = VOC$FILE THEN + + DEVSYS.FILE.FOUND = 1 + +*---- Found first file definition record. + SYMBOL.VALUE = FILE + SYMBOL.ORIGIN = 0 ;*007 + GOSUB LSYMBOL + SYMBOLS(POS) = FIELD(WORD.DEF, @FM, 2, 4) + SENTENCE = SENTENCE [1, CC1]:CHAR(FILE):POS:SENTENCE [CC2, 999] + IF DEVSYS.DICT.SWITCH THEN + IF DEVSYS.DICT.FILE.NAME # 'DICT.DICT' THEN + DEVSYS.DICT.FILE.NAME = '' + OPENCHECK '', 'DICT.DICT' TO DEVSYS.DICT.FILE ELSE + CALL *UVPRINTMSG(001601,"DICT.DICT") + ERROR.CODE = 1 + RETURN + END + DEVSYS.DICT.FILE.NAME = 'DICT.DICT' + END + END ELSE + IF DEVSYS.DICT.FILE.NAME # WORD.DEF<3> THEN + DEVSYS.DICT.FILE.NAME = '' + OPENCHECK 'DICT', TOKEN TO DEVSYS.DICT.FILE ELSE + CALL *UVPRINTMSG(001601,"DICT ":TOKEN) + ERROR.CODE = 2 + RETURN + END + DEVSYS.DICT.FILE.NAME = WORD.DEF<3> + END ELSE + IF WORD.DEF<3> = '' THEN + CALL *UVPRINTMSG(001601,"DICT ":TOKEN) + ERROR.CODE = 2 + RETURN + END + END + END + RETURN + END + +NEXT.FILE.TOKEN: + NEXT I + RETURN + +$INCLUDE UNIVERSE.INCLUDE SYMBOLINS.H + + END diff --git a/Ardent/UV/APP.PROGS/FIX.FIL.RPTR b/Ardent/UV/APP.PROGS/FIX.FIL.RPTR new file mode 100755 index 00000000..b4455787 --- /dev/null +++ b/Ardent/UV/APP.PROGS/FIX.FIL.RPTR @@ -0,0 +1,88 @@ +******************************************************************************** +* +* Fix Remote pointers having filename more than 12 characters +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description......................................... +* 10/14/98 23801 SAP Change copyrights. +* 07/25/88 - - Maintenence log purged at 5.2.1, see release 5.1.10. +* +******************************************************************************* + +$OPTIONS DEFAULT +* +* max number of characters of a dict file = sys5 limitation =14 +* max number of characters for a file name = (sys5 limitation - 2) =12 +* +equate SYS5.LIMITATION TO 14 +equate MAX.FILE.CHAR TO SYS5.LIMITATION - 2 + +* +* Get only records from voc which are of type remote file pointers. +* +print "FIXING FILE NAMES OF REMOTE POINTERS EXCEEDING 14 CHARACTERS" +execute "SELECT VOC WITH TYPE LIKE f... OR TYPE LIKE F... AND F2 LIKE .../..." capturing dev.null +open 'VOC' to orig.voc.file else stop "Can't open VOC" + +READ.NEXT.VOCF : + readnext id.f else + close orig.voc.file + stop "DONE" + end + read orig.voc.record from orig.voc.file, id.f else + print "Can not read record id ":id.f:" from VOC ; Skipping this record " + goto READ.NEXT.VOCF + end +* +* Parse 2 nd field and put path name in path and file name in filename +* + i=index(orig.voc.record<2>,'/',1) + j=i + loop + while i do + path = orig.voc.record<2>[1,j] + filename = orig.voc.record<2>[j+1,9999] + i=index(filename,'/',1) + j=j+i + repeat +* +* If file name is long to fix,get truncated filename from correct VOC file +* + if len(filename) > MAX.FILE.CHAR + then + gosub REPLACE.FILENAME + end + + goto READ.NEXT.VOCF + +REPLACE.FILENAME : + new.voc.filename=path:"VOC" + openpath new.voc.filename to new.voc.file else + print "Can't open VOC= ":new.voc.filename + return + end + read new.voc.record from new.voc.file, filename + then + orig.voc.record<2>=path:new.voc.record<2> + orig.voc.record<3>=path:new.voc.record<3> + write orig.voc.record to orig.voc.file, id.f + end + else + print "Can not read record id ":filename:" from ":new.voc.filename + print "VOC entry for ":id.f:" not updated" + end + close new.voc.file + return +* +* End of program +* diff --git a/Ardent/UV/APP.PROGS/FMT.BASIC.B b/Ardent/UV/APP.PROGS/FMT.BASIC.B new file mode 100755 index 00000000..dd3d09d1 --- /dev/null +++ b/Ardent/UV/APP.PROGS/FMT.BASIC.B @@ -0,0 +1,887 @@ +******************************************************************************* +* +* uniVerse basic FORMAT.BASIC subroutine (PIopen) +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenance log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description......................................... +* 10/14/98 23801 SAP Change copyrights. +* 06/09/94 13973 RM Add handling of ISOLATION to BEGIN TRANSACTIONS +* 03/11/93 11188 PVW Fixed handling of BEGIN/END TRANSACTIONS +* 03/11/93 11136 PVW Changed assigning of INDEX.CHARS so that it works +* correctly. we do not support '' to escape '. +* 02/01/93 10966 PVW Allow SQL NULL as element in multivalued data. +* 11/12/92 10214 PVW Port PIopen editor to uniVerse. +* +******************************************************************************* +$OPTIONS INFORMATION + + SUBROUTINE FORMAT.BASIC(PROGRAM,NO.OF.LINES,MAT FORMAT.OPTIONS) + +$INCLUDE UNIVERSE.INCLUDE FORMAT.OPTS.H +$INCLUDE UNIVERSE.INCLUDE VERBINSERT.H + + X = 0 ;* Display length returned from DISLEN + + *************************************************************************** + ** Initialize the formatter. ** + *************************************************************************** + EQUATE TAB TO CHAR(9) ;* Tab character (treated as space) + DYN.REF = TRUE ;* Assume < is a dynamic array reference + END.OF.PROGRAM = FALSE ;* End of source program reached + INDENT.LEVEL = 0 ;* Level indentation for current line. + LINE.NO = 0 ;* Line number in original source + LIST.CONTINUED = FALSE ;* Comma separated list continues + NEXT.INDENT.LEVEL = 0 ;* Level of indentation for next line. + NO.OF.LINES = 0 ;* Number of lines in formatted program. + LAST.LINE = '' ;* The previous line output + UNFORMATTED.PROGRAM = PROGRAM ;* The original program + PROGRAM = '' ;* The formatted program + IDENTIFIER.CHARACTERS = '' ;* Valid identifier characters + IDENTIFIER.CHARACTERS := 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' + IDENTIFIER.CHARACTERS := 'abcdefghijklmnopqrstuvwxyz' + IDENTIFIER.CHARACTERS := '0123456789' + IDENTIFIER.CHARACTERS := '.$%' + NUMERIC.LABEL.CHARACTERS = '0123456789.' ;* Valid numeric label characters + STRING.DELIMITERS = '''"\' ;* Recognised string delimiters + VAR.IND = '=+-:(<[' ;* Check of FOR and LOOP as variables + + *************************************************************************** + ** Format the program. ** + *************************************************************************** + + *************************************************************************** + ** Leave the first line unchanged if it is a comment. ** + *************************************************************************** + GOSUB GET.LINE: + IF LINE[1,1] = '*' THEN + FORMATTED.LINE = LINE + GOSUB ADD.FORMATTED.LINE: + GOSUB GET.LINE: + END + + LOOP + UNTIL(END.OF.PROGRAM) DO + ************************************************************************* + ** Display an asterisk every 10 lines processed. ** + ************************************************************************* + IF NOT(FORMAT.BRIEF) AND (MOD(LINE.NO,10) = 0) THEN + CRT '*': + END + + ************************************************************************* + ** Process the line. ** + ************************************************************************* + GOSUB PROCESS.LINE: + + ************************************************************************* + ** Format the line. ** + ************************************************************************* +FORMAT.THE.LINE: + + IDENTATION = FORMAT.MARGIN + (FORMAT.INDENT * INDENT.LEVEL) + IF (LABEL = '') THEN + FORMATTED.LINE = STR(' ',IDENTATION):LINE + END ELSE + FORMATTED.LINE = LABEL:STR(' ',IDENTATION - LEN(LABEL)):LINE + END + IF COMMENT THEN + X = LEN(FORMATTED.LINE) + IF X < 40 + THEN FORMATTED.LINE := SPACE(40-X): COMMENT + ELSE FORMATTED.LINE := SPACE(INT((X+10)/10)*10-X): COMMENT + END + INDENT.LEVEL = NEXT.INDENT.LEVEL + + ************************************************************************* + ** Add the formatted line to the formatted program. ** + ************************************************************************* + GOSUB ADD.FORMATTED.LINE: + +NEXT.LINE: + GOSUB GET.LINE: + REPEAT + + *************************************************************************** + ** Move the cursor to the beginning of the next line. ** + *************************************************************************** + IF NOT(FORMAT.BRIEF) THEN CRT + + GO EXIT.FORMAT.BASIC: + +******************************************************************************* +** Get a line of the program. ** +******************************************************************************* +GET.LINE: + + LINE = '' + LOOP + REMOVE LINE.SEGMENT FROM UNFORMATTED.PROGRAM SETTING LINE.SEGMENT.MARK + UNTIL(LINE.SEGMENT.MARK = 2 OR LINE.SEGMENT.MARK = 0) DO + IF ISNULL(LINE.SEGMENT) THEN LINE.SEGMENT = @NULL.STR + LINE := LINE.SEGMENT:CHAR(256 - LINE.SEGMENT.MARK) + REPEAT + IF ISNULL(LINE.SEGMENT) THEN LINE.SEGMENT = @NULL.STR + LINE := LINE.SEGMENT + IF (LINE.SEGMENT.MARK = 0 AND LINE = '') THEN + END.OF.PROGRAM = TRUE + END ELSE + LINE.NO += 1 + END + + RETURN + +******************************************************************************* +** Process a source line checking whitespace, labels, and control keywords. ** +******************************************************************************* +PROCESS.LINE: + + *************************************************************************** + ** Initialize the line trim routine. ** + *************************************************************************** + CHARACTER.POS = 1 ;* Character position being processed in line. + LABEL = '' ;* Statement label. + COMMENT = '' ;* Trailing comment. + LEADING.SPACES = FALSE ;* Were there leading spaces in this line. + *************************************************************************** + ** Remove trailing spaces ** + *************************************************************************** + POS = LEN(LINE) + LOOP + UNTIL POS <= 0 OR LINE[POS,1] # ' ' DO + POS -= 1 + REPEAT + LINE = LINE[1,POS] + LINE.LENGTH = LEN(LINE) ;* Length of original line. + *************************************************************************** + ** Remove leading spaces ** + *************************************************************************** + POS = 1 + LOOP + UNTIL LINE[POS,1] # ' ' + POS += 1 + REPEAT + ORIGINAL.LINE = LINE[POS,99999] + LINE = '' ;* Null the original, we'll build it as we go. + IF NOT(LIST.CONTINUED) THEN + INSIDE.EXPR = FALSE ;* Is the character inside a nested expression. + + ************************************************************************* + ** Remove statement label if one is present. ** + ************************************************************************* + LABEL.POS = 1 + BEGIN CASE + *********************************************************************** + ** Line begins with a numeric label. ** + *********************************************************************** + CASE (ORIGINAL.LINE MATCHES '1N0X') + LABEL.POS = 1 + LOOP + CHARACTER = ORIGINAL.LINE[LABEL.POS,1] + WHILE(CHARACTER # '' AND INDEX(NUMERIC.LABEL.CHARACTERS,CHARACTER,1)) DO + LABEL.POS += 1 + LABEL := CHARACTER + REPEAT + LOOP + CHARACTER = ORIGINAL.LINE[LABEL.POS,1] + WHILE (CHARACTER = ' ' OR CHARACTER = TAB) DO + LABEL.POS += 1 + REPEAT + IF CHARACTER = ':' THEN + LABEL.POS += 1 + END + LABEL := ':' + ORIGINAL.LINE = ORIGINAL.LINE[LABEL.POS,999999] + ********************************************************************* + ** Remove leading spaces ** + ********************************************************************* + POS = 1 + LOOP + UNTIL ORIGINAL.LINE[POS,1] # ' ' + POS += 1 + REPEAT + ORIGINAL.LINE = ORIGINAL.LINE[POS,99999] + + *********************************************************************** + ** Line may begin with an Alphanumeric label. ** + *********************************************************************** + CASE (ORIGINAL.LINE MATCHES '1A0X') + LABEL.POS = 1 + LOOP + CHARACTER = ORIGINAL.LINE[LABEL.POS,1] + WHILE(CHARACTER # '' AND INDEX(IDENTIFIER.CHARACTERS,CHARACTER,1)) DO + LABEL.POS += 1 + LABEL := CHARACTER + REPEAT + LOOP + CHARACTER = ORIGINAL.LINE[LABEL.POS,1] + WHILE (CHARACTER = ' ' OR CHARACTER = TAB) DO + LABEL.POS += 1 + REPEAT + IF (CHARACTER = ':' AND ORIGINAL.LINE[LABEL.POS + 1,1] # '=') THEN + LABEL.POS += 1 + LABEL := ':' + END ELSE + LABEL.POS = 1 + LABEL = '' + END + ORIGINAL.LINE = ORIGINAL.LINE[LABEL.POS,999999] + ********************************************************************* + ** Remove leading spaces ** + ********************************************************************* + POS = 1 + LOOP + UNTIL ORIGINAL.LINE[POS,1] # ' ' + POS += 1 + REPEAT + ORIGINAL.LINE = ORIGINAL.LINE[POS,99999] + + END CASE + + ************************************************************************* + ** If the labels option is set, put label on line by itself. ** + ************************************************************************* + IF (LABEL # '' AND FORMAT.LABELS) THEN + IF (LAST.LINE[1,1] # '*' AND LAST.LINE # '') THEN + FORMATTED.LINE = '' ;* Insert null line before label + GOSUB ADD.FORMATTED.LINE: + END + FORMATTED.LINE = LABEL + GOSUB ADD.FORMATTED.LINE: + LABEL = '' + IF ORIGINAL.LINE = '' THEN + RETURN TO NEXT.LINE: + END + END + END + + *************************************************************************** + ** Were there leading spaces? ** + *************************************************************************** + IF (LINE.LENGTH # LEN(ORIGINAL.LINE) + LABEL.POS - 1) THEN + LEADING.SPACES = TRUE + END + + *************************************************************************** + ** Check for special cases. ** + *************************************************************************** + BEGIN CASE + ************************************************************************* + ** Blank lines in the program. ** + ************************************************************************* + CASE ORIGINAL.LINE = '' + FORMATTED.LINE = LABEL + GOSUB ADD.FORMATTED.LINE: + RETURN TO NEXT.LINE: + + ************************************************************************* + ** Line is a comment beginning with '*' ** + ** These comments are treated specially when FORMAT.COMMENT is TRUE ** + ************************************************************************* + CASE ORIGINAL.LINE[1,1] = '*' + IF FORMAT.COMMENT THEN + IF (LEADING.SPACES) THEN + FORMATTED.LINE = LABEL:ORIGINAL.LINE + GOSUB ADD.FORMATTED.LINE + RETURN TO NEXT.LINE: + END + IF ORIGINAL.LINE = '*' THEN + FORMATTED.LINE = LABEL + GOSUB ADD.FORMATTED.LINE: + RETURN TO NEXT.LINE: + END + L = 2 + LOOP WHILE ORIGINAL.LINE[L,1] # '' AND INDEX('*- ',ORIGINAL.LINE[L,1],1) DO L+= 1 REPEAT + IF LAST.LINE[1,1] = '*' THEN + FORMATTED.LINE = LABEL:'* ':ORIGINAL.LINE[L,9999] + GOSUB ADD.FORMATTED.LINE: + RETURN TO NEXT.LINE: + END + IF LAST.LINE[1,1] = ' ' THEN + FORMATTED.LINE = '' + GOSUB ADD.FORMATTED.LINE: + END + IF L = LEN(ORIGINAL.LINE) THEN + FORMATTED.LINE = LABEL:'!' + GOSUB ADD.FORMATTED.LINE: + RETURN TO NEXT.LINE + END + FORMATTED.LINE = LABEL:'*---- ':ORIGINAL.LINE[L,9999] + GOSUB ADD.FORMATTED.LINE: + RETURN TO NEXT.LINE: + END ELSE + IF (LEADING.SPACES) THEN + LINE = ORIGINAL.LINE + RETURN TO FORMAT.THE.LINE: + END ELSE + FORMATTED.LINE = LABEL:ORIGINAL.LINE + GOSUB ADD.FORMATTED.LINE: + RETURN TO NEXT.LINE: + END + END + + ************************************************************************* + ** Line is a comment beginning with ! ** + ************************************************************************* + CASE ORIGINAL.LINE[1,1] = '!' + IF (LEADING.SPACES) THEN + LINE = ORIGINAL.LINE + RETURN TO FORMAT.THE.LINE: + END ELSE + FORMATTED.LINE = LABEL:ORIGINAL.LINE + GOSUB ADD.FORMATTED.LINE: + RETURN TO NEXT.LINE: + END + + ************************************************************************* + ** Line is a comment of the form REM comment text... ** + ** There should be a check here for the use of REM as a variable ** + ************************************************************************* + CASE (OCONV(ORIGINAL.LINE[1,4],FORMAT.CASE) = 'REM ' OR OCONV(ORIGINAL.LINE,FORMAT.CASE) = 'REM') + IF (LEADING.SPACES) THEN + LINE = ORIGINAL.LINE + RETURN TO FORMAT.THE.LINE: + END ELSE + FORMATTED.LINE = LABEL:ORIGINAL.LINE + GOSUB ADD.FORMATTED.LINE: + RETURN TO NEXT.LINE: + END + + ************************************************************************* + ** Line is a $ directive (don't trim embedded or trailing blanks) ** + ************************************************************************* + CASE ORIGINAL.LINE[1,1] = '$' + FORMATTED.LINE = LABEL:ORIGINAL.LINE + GOSUB ADD.FORMATTED.LINE: + RETURN TO NEXT.LINE: + + END CASE + + *************************************************************************** + ** Trim the embedded spaces. ** + *************************************************************************** + WHITESPACE.FLAG = FALSE + STATEMENT = '' + CHARACTER = '' + PREVIOUS.CHARACTER = '' + CHARACTER.POS = 0 + FIRST.STATEMENT.ON.LINE = TRUE + *************************************************************************** + ** Check if special characters are to be surrounded with spaces. ** + *************************************************************************** + IF FORMAT.SURROUND THEN + INDEX.CHARS = TAB:" ;()[]'":'"\=:+-#><' + END ELSE + INDEX.CHARS = TAB:" ;()[]'":'"\' + END +NEXT.CHARACTER: + CHARACTER.POS += 1 + CHARACTER = ORIGINAL.LINE[CHARACTER.POS,1] + IF CHARACTER = '' THEN + GOTO END.OF.LINE: + END + *************************************************************************** + ** Check for special cases. ** + *************************************************************************** + ON INDEX(INDEX.CHARS,CHARACTER,1) + 1 GOTO OTHER.LABEL:, + WHITESPACE.LABEL:, + WHITESPACE.LABEL:, + SEMI.LABEL:, + OPEN.LABEL:, + CLOSE.LABEL:, + OPEN.LABEL:, + CLOSE.LABEL:, + QUOTE.LABEL:, + QUOTE.LABEL:, + QUOTE.LABEL:, + EQ.LABEL:, + COLON.LABEL:, + PLUS.LABEL:, + MINUS.LABEL:, + NE.LABEL:, + GT.LABEL:, + LT.LABEL: + + *************************************************************************** + ** Add CHARACTER to the current statement. ** + *************************************************************************** +OTHER.LABEL: +ADD.CHARACTER: + IF WHITESPACE.FLAG THEN + STATEMENT := ' ' + WHITESPACE.FLAG = FALSE + END + STATEMENT := CHARACTER + PREVIOUS.CHARACTER = CHARACTER + GOTO NEXT.CHARACTER: + + *************************************************************************** + ** Compress all contiguous blanks to a single blank. ** + *************************************************************************** +WHITESPACE.LABEL: + IF PREVIOUS.CHARACTER # '' THEN + WHITESPACE.FLAG = TRUE + END + GOTO NEXT.CHARACTER + + *************************************************************************** + ** Handle the nesting of expressions. ** + *************************************************************************** +OPEN.LABEL: + INSIDE.EXPR += 1 + GOTO ADD.CHARACTER: +CLOSE.LABEL: + INSIDE.EXPR -= 1 + GOTO ADD.CHARACTER: + + *************************************************************************** + ** Handle end of statement. ** + *************************************************************************** +SEMI.LABEL: + IF NOT(INSIDE.EXPR) OR PREVIOUS.CHARACTER = ',' THEN + COMMENT = ORIGINAL.LINE[CHARACTER.POS+1,999999] + ********************************************************************* + ** Remove leading spaces ** + ********************************************************************* + POS = 1 + LOOP + UNTIL COMMENT[POS,1] # ' ' + POS += 1 + REPEAT + COMMENT = COMMENT[POS,99999] + ***************************************************************** + ** Don't worry about check if the statement is a comment. ** + ***************************************************************** + IF COMMENT[1,1] = '*' THEN + IF FORMAT.COMMENT THEN + COMMENT = COMMENT[2,999999] + ********************************************************************* + ** Remove leading spaces ** + ********************************************************************* + POS = 1 + LOOP + UNTIL COMMENT[POS,1] # ' ' + POS += 1 + REPEAT + COMMENT = ' ;* ':COMMENT[POS,99999] + END ELSE + COMMENT = ' ; ':COMMENT + END + GOTO END.OF.LINE: + END + IF COMMENT[1,1] = '!' OR OCONV(COMMENT,FORMAT.CASE) = 'REM' OR OCONV(COMMENT[1,4],FORMAT.CASE) = 'REM ' THEN + COMMENT = ' ; ':COMMENT + GOTO END.OF.LINE: + END ELSE + *********************************************************************** + ** End of statement. Check control keywords, add to line. ** + *********************************************************************** + COMMENT = '' + GOSUB CHECK.CONTROL.KEYWORDS: + LINE := STATEMENT:' ; ' + STATEMENT = '' + CHARACTER = '' + PREVIOUS.CHARACTER = '' + WHITESPACE.FLAG = FALSE + FIRST.STATEMENT.ON.LINE = FALSE + GOTO NEXT.CHARACTER: + END + END ELSE + GOTO ADD.CHARACTER: + END + + ************************************************************************** + ** Handle quoted strings. ** + ************************************************************************** +QUOTE.LABEL: + STRING = ORIGINAL.LINE[CHARACTER.POS,9999] + STR.LEN = INDEX(STRING[2,9999],CHARACTER,1) + 1 + STRING = STRING[1,STR.LEN] + IF WHITESPACE.FLAG THEN + STATEMENT := ' ' + WHITESPACE.FLAG = FALSE + END + STATEMENT := STRING + PREVIOUS.CHARACTER = CHARACTER + CHARACTER.POS += STR.LEN - 1 + GOTO NEXT.CHARACTER: + + *************************************************************************** + ** Handle '+=','-=',':='. ** + *************************************************************************** +COLON.LABEL: +PLUS.LABEL: +MINUS.LABEL: + CHAR.NEXT = ORIGINAL.LINE[CHARACTER.POS+1,1] + IF CHAR.NEXT = '=' THEN + GOTO SURROUND.2 + END ELSE + GOTO ADD.CHARACTER: + END + + *************************************************************************** + ** Handle '=','=>','=<','#','#>','#<'. ** + *************************************************************************** +EQ.LABEL: + CHAR.NEXT = ORIGINAL.LINE[CHARACTER.POS+1,1] + IF CHAR.NEXT = '<' OR CHAR.NEXT = '>' THEN + GOTO SURROUND.2 + END ELSE + GOTO SURROUND.1 + END + +NE.LABEL: + IF ORIGINAL.LINE[CHARACTER.POS,5] = '####(' THEN + IF WHITESPACE.FLAG THEN + STATEMENT := ' ' + WHITESPACE.FLAG = FALSE + END + STATEMENT := '####(' + PREVIOUS.CHARACTER = '(' + CHARACTER.POS += 4 + GOTO NEXT.CHARACTER: + END ELSE + CHAR.NEXT = ORIGINAL.LINE[CHARACTER.POS+1,1] + IF CHAR.NEXT = '<' OR CHAR.NEXT = '>' THEN + GOTO SURROUND.2 + END ELSE + GOTO SURROUND.1 + END + END + + *************************************************************************** + ** Handle '<','<=','<>','>','>=','><'. ** + *************************************************************************** +GT.LABEL: + CHAR.NEXT = ORIGINAL.LINE[CHARACTER.POS+1,1] + IF CHAR.NEXT = '<' OR CHAR.NEXT = '=' THEN + GOTO SURROUND.2 + END ELSE + ************************************************************************* + ** Possible check for dynamic array reference or GT ** + ** Always assumes dynamic array reference at present ** + ************************************************************************* + IF DYN.REF THEN + GOTO ADD.CHARACTER: + END ELSE + GOTO SURROUND.1 + END + END +LT.LABEL: + CHAR.NEXT = ORIGINAL.LINE[CHARACTER.POS+1,1] + IF CHAR.NEXT = '=' OR CHAR.NEXT = '>' THEN + GOTO SURROUND.2 + END ELSE + ************************************************************************* + ** Possible check for dynamic array reference or LT ** + ** Always assumes dynamic array reference at present ** + ************************************************************************* + IF DYN.REF THEN + GOTO ADD.CHARACTER: + END ELSE + GOTO SURROUND.1 + END + END + + *************************************************************************** + ** Surround single character with spaces. ** + *************************************************************************** +SURROUND.1: + STATEMENT := ' ':CHARACTER + WHITESPACE.FLAG = TRUE + PREVIOUS.CHARACTER = CHARACTER + GOTO NEXT.CHARACTER: + + *************************************************************************** + ** Surround double characters with spaces. ** + *************************************************************************** +SURROUND.2: + STATEMENT := ' ':CHARACTER:CHAR.NEXT + WHITESPACE.FLAG = TRUE + PREVIOUS.CHARACTER = CHAR.NEXT + CHARACTER.POS += 1 + GOTO NEXT.CHARACTER: + +END.OF.LINE: + *************************************************************************** + ** Add the last statement to the line. ** + *************************************************************************** + GOSUB CHECK.CONTROL.KEYWORDS: + LINE := STATEMENT + + *************************************************************************** + ** Check if this line is continued. ** + *************************************************************************** + IF LINE[1] = ',' THEN + IF NOT(LIST.CONTINUED) THEN + LIST.CONTINUED = TRUE + NEXT.INDENT.LEVEL += 1 + END + END ELSE + IF LIST.CONTINUED THEN + LIST.CONTINUED = FALSE + NEXT.INDENT.LEVEL -= 1 + END + END + +EXIT.PROCESS.LINE: + RETURN + +******************************************************************************* +** Add a line to the formatted program. ** +******************************************************************************* +ADD.FORMATTED.LINE: + NO.OF.LINES += 1 +* PROGRAM<-1> = FORMATTED.LINE + IF PROGRAM THEN + PROGRAM := @FM : FORMATTED.LINE + END ELSE + PROGRAM = FORMATTED.LINE + END + LAST.LINE = FORMATTED.LINE + RETURN + +******************************************************************************* +** Check for the beginning and/or end of a control block. ** +******************************************************************************* +CHECK.CONTROL.KEYWORDS: + + *************************************************************************** + ** Check for leading keywords. ** + *************************************************************************** + STATEMENT.CASE = OCONV(STATEMENT,FORMAT.CASE) + ON INDEX('BCEFLNORTUW',STATEMENT.CASE[1,1],1) + 1 GOTO CLAUSE.LABEL, ;* clauses + B.LABEL, ;* BEGIN CASE keyword + C.LABEL, ;* CASE keyword + E.LABEL, ;* END and ELSE keywords + F.LABEL, ;* FOR keyword + L.LABEL, ;* LOOP and LOCKED keywords + N.LABEL, ;* NEXT keyword + O.LABEL, ;* ON ERROR keyword + R.LABEL, ;* REPEAT keyword + T.LABEL, ;* THEN keyword + U.LABEL, ;* UNTIL keyword + W.LABEL ;* WHILE keyword + +CLAUSE.LABEL: + *************************************************************************** + ** Indent the next line if this line ends in a clause. ** + *************************************************************************** + IF STATEMENT.CASE[9] = ' ON ERROR' OR STATEMENT.CASE[7] = ' LOCKED' OR STATEMENT.CASE[5] = ' THEN' OR STATEMENT.CASE[5] = ' ELSE' THEN + NEXT.INDENT.LEVEL += 1 + END + RETURN + +REPEAT.LABEL: + **************************************************************************** + ** Stop indenting for LOOP on the next line if this line ends in a repeat.** + **************************************************************************** + IF STATEMENT.CASE[7] = ' REPEAT' THEN + NEXT.INDENT.LEVEL -= 1 + END + RETURN + +B.LABEL: + *************************************************************************** + ** Indent the next line by 2 if this line starts a CASE statement. ** + ** This is so CASE clauses can be indented form the BEGIN CASE. ** + *************************************************************************** + IF STATEMENT.CASE = 'BEGIN CASE' THEN + NEXT.INDENT.LEVEL += 2 + RETURN + END + IF STATEMENT.CASE = 'BEGIN TRANSACTION' OR FIELD(STATEMENT.CASE," ",3) = 'ISOLATION' THEN + NEXT.INDENT.LEVEL += 1 + RETURN + END + GOTO CLAUSE.LABEL: + +C.LABEL: + *************************************************************************** + ** Outdent this line if it is a CASE clause. ** + *************************************************************************** + IF STATEMENT.CASE[1,5] = 'CASE ' THEN + INDENT.LEVEL -= 1 + RETURN + END + GOTO CLAUSE.LABEL: + +E.LABEL: + *************************************************************************** + ** Stop the indenting for the clause if this is an END ** + *************************************************************************** + IF STATEMENT.CASE = 'END' THEN + IF FIRST.STATEMENT.ON.LINE THEN + INDENT.LEVEL -= 1 + END + NEXT.INDENT.LEVEL -= 1 + RETURN + END + *************************************************************************** + ** Stop the indenting for the CASE statement if this is an END CASE ** + *************************************************************************** + IF STATEMENT.CASE = 'END CASE' THEN + NEXT.INDENT.LEVEL -= 2 + INDENT.LEVEL -= 2 + RETURN + END + IF STATEMENT.CASE = 'END TRANSACTION' THEN + NEXT.INDENT.LEVEL -= 1 + INDENT.LEVEL -= 1 + RETURN + END + *************************************************************************** + ** Stop the indenting for the clause and check for the start of more ** + ** clauses ** + *************************************************************************** + IF STATEMENT.CASE[1,4] = 'END ' THEN + NEXT.INDENT.LEVEL -= 1 + INDENT.LEVEL -= 1 + GOTO CLAUSE.LABEL: + END + *************************************************************************** + ** Handle ELSE clauses ** + *************************************************************************** + IF STATEMENT.CASE = 'ELSE' THEN + NEXT.INDENT.LEVEL += 1 + RETURN + END + IF STATEMENT.CASE[1,5] = 'ELSE ' THEN + INDENT.LEVEL += 1 + GOTO CLAUSE.LABEL: + END + GOTO CLAUSE.LABEL: + +F.LABEL: + *************************************************************************** + ** Handle FOR statements. ** + *************************************************************************** + IF STATEMENT.CASE[1,4] = 'FOR ' THEN + ************************************************************************* + ** Check for FOR = type of constructs ** + ************************************************************************* + IF NOT(INDEX(VAR.IND,STATEMENT.CASE[5,1],1)) THEN + NEXT.INDENT.LEVEL += 1 + RETURN + END + END + GOTO CLAUSE.LABEL: + +L.LABEL: + *************************************************************************** + ** Handle LOOP statements. ** + *************************************************************************** + IF STATEMENT.CASE = 'LOOP' THEN + NEXT.INDENT.LEVEL += 1 + RETURN + END + IF STATEMENT.CASE[1,5] = 'LOOP ' THEN + ************************************************************************* + ** Check for LOOP = type of constructs ** + ************************************************************************* + IF NOT(INDEX(VAR.IND,STATEMENT.CASE[6,1],1)) THEN + NEXT.INDENT.LEVEL += 1 + GOTO REPEAT.LABEL: + END + END + *************************************************************************** + ** Handle LOCKED clauses ** + *************************************************************************** + IF STATEMENT.CASE = 'LOCKED' THEN + NEXT.INDENT.LEVEL += 1 + RETURN + END + IF STATEMENT.CASE[1,7] = 'LOCKED ' THEN + INDENT.LEVEL += 1 + GOTO CLAUSE.LABEL: + END + GOTO CLAUSE.LABEL: + +N.LABEL: + *************************************************************************** + ** Handle NEXT statements. ** + *************************************************************************** + IF STATEMENT.CASE = 'NEXT' OR STATEMENT.CASE[1,5] = 'NEXT ' THEN + NEXT.INDENT.LEVEL -= 1 + IF FIRST.STATEMENT.ON.LINE THEN + INDENT.LEVEL -= 1 + END + RETURN + END + GOTO CLAUSE.LABEL: + +O.LABEL: + *************************************************************************** + ** Handle ON ERROR clauses ** + *************************************************************************** + IF STATEMENT.CASE = 'ON ERROR' THEN + NEXT.INDENT.LEVEL += 1 + RETURN + END + IF STATEMENT.CASE[1,9] = 'ON ERROR ' THEN + INDENT.LEVEL += 1 + GOTO CLAUSE.LABEL: + END + GOTO CLAUSE.LABEL: + +R.LABEL: + *************************************************************************** + ** Handle REPEAT statements. ** + *************************************************************************** + IF STATEMENT.CASE = 'REPEAT' THEN + NEXT.INDENT.LEVEL -= 1 + INDENT.LEVEL -= 1 + RETURN + END + GOTO CLAUSE.LABEL: + +T.LABEL: + *************************************************************************** + ** Handle THEN clauses ** + *************************************************************************** + IF STATEMENT.CASE = 'THEN' THEN + NEXT.INDENT.LEVEL += 1 + RETURN + END + IF STATEMENT.CASE[1,5] = 'THEN ' THEN + INDENT.LEVEL += 1 + GOTO CLAUSE.LABEL: + END + GOTO CLAUSE.LABEL: + +U.LABEL: + *************************************************************************** + ** Handle an UNTIL clause. ** + *************************************************************************** + IF STATEMENT.CASE[1,6] = 'UNTIL ' THEN + INDENT.LEVEL -= 1 + GOTO REPEAT.LABEL: + END + GOTO CLAUSE.LABEL: + +W.LABEL: + *************************************************************************** + ** Handle a WHILE clause. ** + *************************************************************************** + IF STATEMENT.CASE[1,6] = 'WHILE ' THEN + INDENT.LEVEL -= 1 + GOTO REPEAT.LABEL: + END + GOTO CLAUSE.LABEL: + +******************************************************************************* +** Exit the INFO/BASIC source formatting routine. ** +******************************************************************************* +EXIT.FORMAT.BASIC: + RETURN + END +* END-CODE diff --git a/Ardent/UV/APP.PROGS/FMTS b/Ardent/UV/APP.PROGS/FMTS new file mode 100755 index 00000000..78d86e47 --- /dev/null +++ b/Ardent/UV/APP.PROGS/FMTS @@ -0,0 +1,26 @@ +******************************************************************************** +* +* Support of PR1ME INFORMATION subroutine '-FMTS' +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description......................................... +* 10/14/98 23801 SAP Change copyrights. +* 07/25/88 - - Maintenence log purged at 5.2.1, see release 5.1.10. +* +******************************************************************************* + +$OPTIONS DEFAULT + +subroutine PR1ME(ans,m1,p1) + ans = FMTS(m1,p1) +return diff --git a/Ardent/UV/APP.PROGS/FMUL.B b/Ardent/UV/APP.PROGS/FMUL.B new file mode 100755 index 00000000..f1fb02f8 --- /dev/null +++ b/Ardent/UV/APP.PROGS/FMUL.B @@ -0,0 +1,28 @@ +******************************************************************************** +* +* Support of PR1ME INFORMATION subroutine '!FMUL' +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description......................................... +* 10/14/98 23801 SAP Change copyrights. +* 07/15/93 12299 LA Initial implementation. +* +******************************************************************************* + +$OPTIONS DEFAULT + +subroutine PR1ME(ANSWER, A, B) + ANSWER = FMUL(A, B) +return + + diff --git a/Ardent/UV/APP.PROGS/FOLD.B b/Ardent/UV/APP.PROGS/FOLD.B new file mode 100755 index 00000000..0b737d14 --- /dev/null +++ b/Ardent/UV/APP.PROGS/FOLD.B @@ -0,0 +1,28 @@ +******************************************************************************** +* +* Support of PR1ME INFORMATION subroutine '!FOLD' +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description......................................... +* 10/14/98 23801 SAP Change copyrights. +* 07/15/93 12299 LA Initial implementation. +* +******************************************************************************* + +$OPTIONS DEFAULT + +subroutine PR1ME(ANSWER, STR, LEN) + ANSWER = FOLD(STR, LEN) +return + + diff --git a/Ardent/UV/APP.PROGS/FSUB.B b/Ardent/UV/APP.PROGS/FSUB.B new file mode 100755 index 00000000..1f139537 --- /dev/null +++ b/Ardent/UV/APP.PROGS/FSUB.B @@ -0,0 +1,28 @@ +******************************************************************************** +* +* Support of PR1ME INFORMATION subroutine '!FSUB' +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description......................................... +* 10/14/98 23801 SAP Change copyrights. +* 07/15/93 12299 LA Initial implementation. +* +******************************************************************************* + +$OPTIONS DEFAULT + +subroutine PR1ME(ANSWER, A, B) + ANSWER = FSUB(A, B) +return + + diff --git a/Ardent/UV/APP.PROGS/GCI.CONVPI.B b/Ardent/UV/APP.PROGS/GCI.CONVPI.B new file mode 100755 index 00000000..1ef17eed --- /dev/null +++ b/Ardent/UV/APP.PROGS/GCI.CONVPI.B @@ -0,0 +1,269 @@ +******************************************************************************** +* +* Program to convert PI/open GCI definition file to uniVerse format +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description......................................... +* 10/14/98 23801 SAP Change copyrights. +* 09/06/96 19192 ALC Corrected use of OS.TYPE +* 04/03/96 18026 PGW For Windows NT, allow GCI file name on command line +* 03/25/94 12300 LA Changed to handle all PI/open variable types. +* 02/17/94 12300 LA Initial implementation. +* +******************************************************************************* +* +* Program Description: +* +* Called from the GCI administration menu to take a PI/open GCI +* definition file and put the subroutine definitions contained therein +* into the (or a) uniVerse GCI definition file. +* +* NOTE: The PI/open GCI definition file must have been converted to +* a uniVerse format file by the account conversion tools before +* it can be read by this program. +* +* Calling Sequence: +* +* Unix: RUN APP.PROGS GCI.CONVPI.B +* +* NT: RUN APP.PROGS GCI.CONVPI.B file.name +* +* where file.name is the name of the GCI Definition File into which +* the converted definitions will be written. +* +* The program prompts for the pathname of the PI/open GCI definition file. +* +******************************************************************************* + +PROGRAM GCI.CONVPI.B + + ID = "@(#)%M% %I%" + +$INCLUDE UNIVERSE.INCLUDE MACHINE.NAME + +EQUATE PI.EXT TO 1 +EQUATE PI.LANG TO 2 +EQUATE PI.TYPE TO 4 +EQUATE PI.DIRECTION TO 5 +EQUATE PI.LENGTH TO 6 +EQUATE PI.ROWS TO 7 +EQUATE PI.COLS TO 8 +EQUATE PI.ARG.DESC TO 9 +EQUATE PI.SUB.DESC TO 10 +EQUATE PI.RET.VAL TO 12 + +EQUATE UV.LANG TO 1 +EQUATE UV.EXT TO 2 +EQUATE UV.RET.VAL TO 3 +EQUATE UV.NO.ARGS TO 4 +EQUATE UV.TYPE TO 5 +EQUATE UV.DIRECTION TO 6 +EQUATE UV.MODULE TO 7 +EQUATE UV.SUB.DESC TO 8 +EQUATE UV.LENGTH TO 9 +EQUATE UV.ROWS TO 10 +EQUATE UV.COLS TO 11 +EQUATE UV.ARG.DESC TO 12 + +pi.fvar = '' ;* File variable for PI/open GCI defn. file +voc.fvar = '' +gci.fvar = '' +eof = 0 +vocrec.id = 'PIOPEN.GCI' +pi.mark.chars = char(26):char(28):char(29):char(30):char(31) +verify.mark = char(26) +verify.chars = str(verify.mark, len(pi.mark.chars)) + +* Open GCI file +if OS.TYPE = "UNIX" then + def.file.name = 'GCI' +end else + * Windows NT: + * You can specify the definition file by putting its name on the + * command line, otherwise it defaults to 'GCI' + cmd = convert(" ", @fm, trim(@sentence)) + def.file.name = cmd<4> + if def.file.name = "" then def.file.name = 'GCI' +end + +open def.file.name TO gci.fvar else + print 'Failed to open uniVerse file "':def.file.name:'"' + stop +end + +prompt "" +print "Enter pathname of PI/open definition file: ": +input pathname + +* Create a VOC entry for the PI/open file so that we can access it + +open "VOC" to voc.fvar +else stop "Cannot open voc" +vocrec = 'F':@FM:pathname + +write vocrec to voc.fvar, vocrec.id +else stop "Cannot write record to VOC" + +* Now open the file and do a select on it so we have a list of the record +* id's to access + +open vocrec.id to pi.fvar +else stop "Cannot open PI/open definition file" +ftype = status() + +select pi.fvar +loop + readnext recid + then + +* Check subroutine with same name doesn't already exist + + read tmp from gci.fvar, recid + then + print "Subroutine '":recid:"' already exists." + continue + end + + read pi.defn from pi.fvar, recid + then + print "Processing subroutine '":recid:"'" + +* Check for PI/open mark characters if this is a type 1/19 file + + if ftype = 1 or ftype = 19 then + mark.found = 0 + tmp.rec = pi.defn + convert pi.mark.chars to verify.chars in tmp.rec + mark.found = index(tmp.rec, verify.mark, 1) + if mark.found then + no.fields = dcount(pi.defn, @FM) + tmp.rec = '' + for i = 1 to no.fields + tmp.rec = iconv(pi.defn, 'ECS') + next i + pi.defn = tmp.rec + end + end + + uv.defn = "" + begin case + case pi.defn[1,1] = "C" + uv.defn = "c" + case pi.defn = "F77" + uv.defn = "f77" + case 1 + print "Unsupported language: ":pi.defn + stop + end case + uv.defn = pi.defn + uv.defn = downcase(pi.defn) + if uv.defn = "" then + uv.defn = "void" + end + +* Map PI/open definition data to its corresponding uniVerse values. + + uv.defn = pi.defn + uv.defn = dcount(pi.defn, @VM) + for i = 1 to uv.defn + dir = uv.defn + +* Map "IO" to "B" for direction + + if dir = "IO" then + dir = "B" + end + type = pi.defn + +* Now convert data types by language + + begin case + case uv.defn = "f77" + begin case + case type = "INTEGER*2" + type = "integer2" + case type = "INTEGER*4" + type = "integer4" + case type = "REAL*4" + type = "real4" + case type = "REAL*8" + type = "real8" + case type = "LOGICAL" + type = "logical" + case type = "CHARACTER" + type = "character" + case 1 + print "Invalid data type found: ":type + end case + case uv.defn = "c" + begin case + case type = "CHAR[N]" + if dir = "I" then type = "char*" + else type = "lchar*" + case type = "CHAR*" + if dir ne "I" then type = "lchar*" else type = "char*" + case type = "CHAR-VAR*" + type = "charvar*" + case type[1,3] = "INT" + pos = index(type, "*", 1) ;* check for input pointer + if pos and dir = "I" then dir = "B" + type = "int" + case type[1,9] = "SHORT-INT" + pos = index(type, "*", 1) ;* check for input pointer + if pos and dir = "I" then dir = "B" + type = "short" + case type[1,8] = "LONG-INT" + pos = index(type, "*", 1) ;* check for input pointer + if pos and dir = "I" then dir = "B" + type = "long" + case type[1,5] = "FLOAT" + pos = index(type, "*", 1) ;* check for input pointer + if pos and dir = "I" then dir = "B" + type = "float" + case type[1,6] = "DOUBLE" + pos = index(type, "*", 1) ;* check for input pointer + if pos and dir = "I" then dir = "B" + type = "double" + case 1 + print "Invalid data type found: "type + end case + end case + + uv.defn = type + uv.defn = dir + next i + + uv.defn = pi.defn + uv.defn = pi.defn + uv.defn = pi.defn + uv.defn = pi.defn + uv.defn = pi.defn + uv.defn = pi.defn + + uv.recid = "$":recid + + write uv.defn to gci.fvar, uv.recid + else print "Failed to write '":uv.recid:"' to GCI file" + + end else + print "Failed to read record: ":recid + end + end else eof = 1 +until eof + +repeat + +close pi.fvar +delete voc.fvar, vocrec.id + +END diff --git a/Ardent/UV/APP.PROGS/GCI.CREAT.B b/Ardent/UV/APP.PROGS/GCI.CREAT.B new file mode 100755 index 00000000..09518a94 --- /dev/null +++ b/Ardent/UV/APP.PROGS/GCI.CREAT.B @@ -0,0 +1,108 @@ +******************************************************************************** +* +* GCI.CREAT.B Program to create a new GCI definition file +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description......................................... +* 10/14/98 23801 SAP Change copyrights. +* 03/25/96 18026 PGW Initial implementation. +* +******************************************************************************* +* +* Program Description: +* +* This program, run from the GCI administration menu, creates a data file +* to hold GCI definitions. The data file is created with standard parameters, +* which ought to match the parameters used in port.mak to create the file +* "GCI" as shipped with uniVerse. The new file does not have its own +* dictionary; its dictionary is the dictionary of "GCI". +* +* Calling sequence: +* +* RUN APP.PROGS GCI.CREAT.B file.name +* +******************************************************************************* +* +$OPTIONS DEFAULT + +PROGRAM GCI.CREAT.B + + ID = "@(#)%M% %I%" + +$INCLUDE UNIVERSE.INCLUDE FILENAMES.H +$INCLUDE UNIVERSE.INCLUDE MACHINE.NAME + + EQUATE bell TO CHAR(7) + + * This string defines the CREATE.FILE parameters used. They should + * match the parameters used in port.smp to create to file "GCI". + EQUATE gci.parms TO " 2 17 1" + + PROMPT "" + cl = @(-4) + cl.err = @(0,23):cl + err = cl.err:bell + msg10 = err:PROD.NAMEU:' General Calling Interface is not installed.' + failure.message = "GCI Definition File not created." + + OPENPATH UV.ROOT : UV.FSEP : 'DATA.TYPES' TO file.data.types ELSE + PRINT msg10: + INPUT q: ; PRINT cl.err: ; STOP + END + + * Extract the file name from the command line + cmd = CONVERT(" ", @FM, TRIM(@SENTENCE)) + new.file.name = cmd<4> + IF new.file.name = "" THEN + PRINT "You must enter a file name." + STOP + END + + * Open the VOC, to check and update the file's VOC entry + OPEN "","VOC" TO voc.file ELSE + PRINT "Cannot open VOC file." + PRINT failure.message + STOP + END + + PRINT @( -1 ) + PRINT @( 0, 0 ):"General Calling Interface Administration" : @( 67, 0 ) : "GCI.CREAT.B": + PRINT @( 17, 1): 'Create a GCI Definition File "':new.file.name:'"': + PRINT @( 0, 2 ): STR( "-", 79 ): + PRINT @( 0, 4 ): + PRINTER RESET + + * Create the data portion of the file, and its VOC entry + EXECUTE "CREATE.FILE DATA " : new.file.name : gci.parms + + * Get the new VOC entry + READ voc.record FROM voc.file, new.file.name ELSE + * No VOC record - presumably CREATE.FILE failed, and will have + * already reported the error, so just exit + PRINT failure.message + STOP + END + + * Set the dictionary pointer + voc.record<3> = UV.ROOT : UV.FSEP : "D_GCI" + WRITE voc.record ON voc.file, new.file.name ELSE + PRINT "Could not write VOC entry for the new GCI file!" + PRINT failure.message + STOP + END + + * Done + PRINT 'GCI Definition File "' : new.file.name : '" created.' + STOP + END + diff --git a/Ardent/UV/APP.PROGS/GCI.MAINT b/Ardent/UV/APP.PROGS/GCI.MAINT new file mode 100755 index 00000000..c6924259 --- /dev/null +++ b/Ardent/UV/APP.PROGS/GCI.MAINT @@ -0,0 +1,961 @@ +***************************************************************************** +* +* Maintain GGI File +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description......................................... +* 10/14/98 23801 SAP Change copyrights. +* 03/25/96 18026 PGW For MS Win, allow GCI file name on command line +* 03/21/96 17935 JC Added new wchar_t varients. +* 04/22/94 12300 LA Added new fields for PI/open data types + extra +* validation. +* 02/18/90 6841 DTW comment out prompts to update DATA.TYPES file +* 10/15/89 6314 DTW add module prompt +* 07/25/88 - - Maintenence log purged at 5.2.1, see release 5.1.10. +* +******************************************************************************* +* +* This program was produced in part by SCREENGEN, a proprietary program of +* Infocel, Inc., P.O. Box 18305, Raleigh, N.C. 27609 +* +***************************************************************************** +* +* +* +* +$OPTIONS A + CLEAR COMMON + COMMON CLR, CL, CL.ERR, PROMPT, ERR, HELP, HELP3, STD.HELP, MV.HELP, + ERR.MSG, MSG1, MSG2, MSG3, MSG4, MSG5, MSG6, + ID, Q, NEW.ITEM, REC(12) +* +$INCLUDE UNIVERSE.INCLUDE MACHINE.NAME +* + CLR = @(-1) + CL = @(-4) + CL.ERR = @(0,23):CL + EQU BELL TO CHAR(7) + PROMPT=@(0,22):CL:@(0,21):CL ; PROMPT "" +* + EQU TRUE TO 1, FALSE TO 0 +* + ERR = CL.ERR:BELL + HELP = CL.ERR + HELP3 = CL.ERR:PROMPT +* + STD.HELP=HELP3 + STD.HELP=STD.HELP:'Enter "?" for help, "^" to back up to previous prompt, "XX" to cancel input,' + STD.HELP=STD.HELP:@(0,22):' or data value requested by prompt. Data will be edited and an error' + STD.HELP=STD.HELP:@(0,23):' will appear if data are invalid. --- Enter ' + MV.HELP=HELP3 + MV.HELP=MV.HELP:'Enter "?" for help, "^" to back up to previous prompt, "XX" to cancel input,' + MV.HELP=MV.HELP:@(0,22):' "+" to display next value group, "DE" to delete value, "I" to insert value,' + MV.HELP=MV.HELP:@(0,23):' "/" to end value input, or data value requested. --- Enter ' + SUB.HELP=HELP3:'Name used in BASIC program to call C/F77 subroutine. ' + SUB.HELP=SUB.HELP:@(0,22):'If it is called as a BASIC subroutine or is defined using a "DEFFUN" statement, the' + SUB.HELP=SUB.HELP:@(0,23):'the first character of this name must one of the characters *,-,$, or !.' + LANG.HELP=HELP3:'Languages supported are "c" (default) and "f77".' + EXT.HELP=HELP3:'Name of the c/f77 routine defined in the source file.' + EXT.HELP=EXT.HELP:@(0,22):'By default, this is the same as the subroutine name.' + MOD.HELP=HELP3:'Name of the module containing the c/f77 subroutine, without the ".c" or ".f"' + MOD.HELP=MOD.HELP:@(0,22):'suffix. By default, this is the same as the subroutine name.' + DESC.HELP=HELP3:'A short description of the subroutine (optional).' + ARGS.HELP=HELP3:'The number of arguments to the c/f77 routine.' + RET.HELP=HELP3:'Return value of the c/f77 routine.' + RET.HELP=RET.HELP:@(0,22):'For "c" routines, this can be a valid data type or "void".' + RET.HELP=RET.HELP:@(0,23):'For "f77" routines, it can only be "void".' + DIR.HELP=HELP3:'Argument direction: Input (I), Ouput (O) or Input/Output (I/O or B).' + TYP.HELP=HELP3:'Data type of argument.' + TYP.HELP=TYP.HELP:@(0,22):'For supported data types see the DATA.TYPES file or the GCI manual.' + LEN.HELP=HELP3:'Length of character string.' + LEN.HELP=LEN.HELP:@(0,22):'This is only used for character types which require the GCI to allocate space' + LEN.HELP=LEN.HELP:@(0,23):'("c" types "lchar*" and "charvar*", "f77" type "character").' + ROW.HELP=HELP3:'Enter number of rows for numeric array, or if this is not an array' + ROW.HELP=ROW.HELP:@(0,22):'argument.' + COL.HELP=HELP3:'Enter number of columns for a two-dimensional array, or if this is only' + COL.HELP=COL.HELP:@(0,22):'a single-dimensional array.' + ARGDESC.HELP=HELP3:'A short description of the argument (optional).' + ERR.MSG=ERR:"Your response does not pass the edits. Enter a new response." + MSG1=ERR:'Unable to open the file - ' + MSG2=ERR:'A response is required.' + MSG3=ERR:'Response is too long.' + MSG4=ERR:'Numeric input required.' + MSG5=ERR:'Invalid data type specified.' + MSG6=ERR:'Number of arguments does not match the number of data types' + MSG7=ERR:'This data type does not have an input conversion' + MSG8=ERR:'This data type does not have an output conversion' + MSG9=ERR:'Number of arguments does no match the number of argument types' + MSG10=ERR:PROD.NAMEU:' General Calling Interface is not installed.' + MSG11=ERR:'Invalid language specified.' + MSG12=ERR:'Negative values are invalid' +* +* + EQU AM TO CHAR(254) + EQU VM TO CHAR(253) + EQU SVM TO CHAR(252) + EQU NO.DATA TO CHAR(0) +* +* + MV5=1 ;* IO.ARGS + COL5=2:AM:2:AM:2:AM:2:AM:2 + LIN5=13:AM:14:AM:15:AM:16:AM:17 +* + COL6=18:AM:18:AM:18:AM:18:AM:18 + LIN6=13:AM:14:AM:15:AM:16:AM:17 +* + COL9=30:AM:30:AM:30:AM:30:AM:30 + LIN9=13:AM:14:AM:15:AM:16:AM:17 +* + COL10=39:AM:39:AM:39:AM:39:AM:39 + LIN10=13:AM:14:AM:15:AM:16:AM:17 +* + COL11=46:AM:46:AM:46:AM:46:AM:46 + LIN11=13:AM:14:AM:15:AM:16:AM:17 +* + COL12=53:AM:53:AM:53:AM:53:AM:53 + LIN12=13:AM:14:AM:15:AM:16:AM:17 +* +* +* + dim SAVE.REC( 12 ) +* + EQU LANGUAGE TO REC(1) + EQU EXT.NAME TO REC(2), SAVE.EXT.NAME to SAVE.REC( 2 ) + EQU MOD.NAME TO REC(7), SAVE.MOD.NAME to SAVE.REC( 7 ) + EQU RET.VAL TO REC(3) + EQU NO.ARGS TO REC(4), SAVE.NO.ARGS to SAVE.REC( 4 ) + EQU DATA.TYPES TO REC(5) + EQU IO.ARGS TO REC(6) + EQU SUB.DESC TO REC(8) + EQU LENGTHS TO REC(9) + EQU ROWS TO REC(10) + EQU COLS TO REC(11) + EQU ARG.DESCS TO REC(12) +* + IF OS.TYPE = "UNIX" THEN + DEF.FILE.NAME = 'GCI' + END ELSE + * Windows NT: + * You can specify the definition file by putting its name on the + * command line, otherwise it defaults to 'GCI' + CMD = CONVERT(" ", @FM, TRIM(@SENTENCE)) + DEF.FILE.NAME = CMD<4> + IF DEF.FILE.NAME = "" THEN DEF.FILE.NAME = 'GCI' + END + + SSA11=CLR ;* Maintain GCI + SSA11=SSA11:@(0,0):"General Calling Interface Administration":SPACE(28):" GCI.MAINT" + IF OS.TYPE = "UNIX" THEN + SSA11=SSA11:@(22,1):"Maintain ":PROD.NAMEU:" GCI File" + END ELSE + SSA11=SSA11:@(12,1):"Maintain GCI Definition File ":DEF.FILE.NAME + END + SSA11=SSA11:@(0,2):STR("-",79) + SSA11=SSA11:@(7,4):"Subroutine name:" + SSA11=SSA11:@(0,6):"1. Language:" + SSA11=SSA11:@(0,7):"2. External Name:" + SSA11=SSA11:@(0,8):"3. Module Name:" + SSA11=SSA11:@(0,9):"4. Description:" + SSA11=SSA11:@(0,10):"5. Number of Arguments:" + SSA11=SSA11:@(39,10):"6. Return Value:" + SSA11=SSA11:@(0,12):"7. Direction" + SSA11=SSA11:@(18,12):"Data Type" + SSA11=SSA11:@(30,12):"Length" + SSA11=SSA11:@(39,12):"Rows" + SSA11=SSA11:@(46,12):"Cols" + SSA11=SSA11:@(53,12):"Description" + SSA11=SSA11:@(0,13):"7.1" + SSA11=SSA11:@(0,14):"7.2" + SSA11=SSA11:@(0,15):"7.3" + SSA11=SSA11:@(0,16):"7.4" + SSA11=SSA11:@(0,17):"7.5" + SSA11=SSA11:@(0,19):STR("-",79) +* + CLR.SSA11=@(0,0):@(25,6):CL:@(25,7):CL:@(25,8):CL:@(25,9):CL:@(25,10):SPACE(5):@(57,10):CL + CLR.SSA11=CLR.SSA11:@(2,13):1:CL:@(2,14):2"L#70":@(2,15):3"L#70":@(2,16):4"L#70":@(1,17):".":5"L#70":@(25,4):CL +* + H.ROWS = "" + H.COLS = "" +1 OPEN '','DATA.TYPES' TO FVDATA.TYPES ELSE + PRINT MSG10: + INPUT Q: ; PRINT CL.ERR: ; STOP + END +2 OPEN '',DEF.FILE.NAME TO FVGCI ELSE + PRINT MSG1:DEF.FILE.NAME: + INPUT Q: ; PRINT CL.ERR: ; STOP + END +* +************* ENTER RECORD KEY *************** +* +30 PRINT SSA11: ;* Maintain GCI + LOOP + EXECUTE "PTERM CASE NOINVERT" +40 PRINT PROMPT:"Enter subroutine name: ": + INPUT ID,32: ; PRINT CL.ERR:PROMPT: + EXECUTE "PTERM CASE INVERT" + IF ID = "?" THEN + PRINT SUB.HELP: ; INPUT Q: ; PRINT HELP3 + GOTO 40 + END + IF LEN(ID)>32 THEN + PRINT MSG3: + GOTO 40 + END + UNTIL ID='' OR ID='^' OR ID='XX' or ID="xx" DO + NEW.ITEM=FALSE + MATREAD REC FROM FVGCI,ID ELSE +* +* + MAT REC=''; NEW.ITEM=TRUE + END + mat SAVE.REC = mat REC + PRINT @(25,4):CL:ID: + GOSUB 50 ;*** UPDATE RECORD + REPEAT + STOP +50***** UPDATE SUBROUTINE ***** + IF NEW.ITEM THEN ;***** PROMPT FOR INPUT OF NEW REC + MV=0 + FOR Z = 1 TO 7 + Q=NO.DATA + ON Z GOSUB 100,200,700,800,300,400,500 + IF Q="^" THEN IF MV>1 THEN MV=MV-2 ; Z=Z-1 ELSE IF Z<=1 THEN GOTO 9999 ELSE Z=Z-2 + IF Q="XX" or Q="xx" THEN GOTO 9999 + NEXT Z + NEW.ITEM=FALSE + END ELSE + MV=0 ; Q=""; GOSUB 88 ;*** PRINT SCREEN AND DATA + END +* +*######################### PRIMARY CONTROL LOOP ######################### +60* + LOOP +* PRINT PROMPT:"Enter save(S), cancel(XX), delete(DE), or field # to change: ": + PRINT PROMPT:"Enter save(S), cancel(XX), delete(DE), or field # to change: ": + INPUT Q ; PRINT CL.ERR:PROMPT: + Q = upcase( Q ) + UNTIL Q="S" OR Q="s" OR Q="." DO + if Q = "+" then Q = "7,+" + Z=FIELD(Q,",",1) + BEGIN CASE + CASE Z>=1 AND Z<8 AND NUM(Z) + Q=Q[COL2()+1,999] + IF Q="" THEN Q=NO.DATA + ON Z GOSUB 100,200,700,800,300,400,500 + MV=0 + CASE Q="XX" + GOTO 9999 + CASE Q="xx" + GOTO 9999 + CASE Q="DE"OR Q="de" + PRINT PROMPT:"Are you sure you want to delete this record (Y/N)? ": + INPUT Z ; IF Z="Y" OR Z="y" THEN DELETE FVGCI,ID + print SSA11: + RETURN + CASE Q="R" OR Q="^^"; PRINT SSA11: ; GOSUB 88 ;* REFRESH SCREEN + CASE 1 ; PRINT ERR:'Enter one of the requested commands.': + END CASE + REPEAT +* + IF NO.ARGS#DCOUNT(DATA.TYPES,@VM) THEN + PRINT MSG6: + GOTO 60 + END + IF NO.ARGS#DCOUNT(IO.ARGS,@VM) THEN + PRINT MSG9: + GOTO 60 + END + MATWRITE REC ON FVGCI,ID +* +* +* +* +* + line.no = 0 + eof = FALSE + found = 0 +* +9999 PRINT CLR.SSA11:PROMPT: + RETURN ;********** EXIT UPDATE ROUTINE +* +88*** REFRESH DATA + PRINT @(25,4):CL:ID: + PRINT @(25,6):LANGUAGE "L#30" + PRINT @(25,7):EXT.NAME "L#32" + PRINT @(25,8):MOD.NAME "L#55" + PRINT @(25,9):SUB.DESC "L#50" + PRINT @(25,10):NO.ARGS "L#2" + PRINT @(57,10):RET.VAL "L#30" + GOSUB 560 ; MV=0 ;* DISPLAY IO.ARGS + Q=NO.DATA + RETURN +* +*########################################################################## +* +100*** ########## LANGUAGE + EXECUTE "PTERM CASE NOINVERT" + IF Q=NO.DATA THEN +110 PRINT PROMPT:"Enter subroutine language: ":STR(".",30):@(27,21): + INPUT Q,30: ; PRINT CL.ERR:PROMPT: + END + Q = DOWNCASE(Q) + IF Q="" THEN + Q="c" + END + IF Q="?" THEN + PRINT LANG.HELP: ; INPUT Q: ; PRINT HELP3: + GOTO 110 + END + IF Q="^" OR Q="XX" or Q="xx" THEN + PRINT @(25,6):"" "L#30" + RETURN + END +130*** EDITS FOR LANGUAGE + + IF Q # "c" THEN + PRINT MSG11: + GOTO 110 + END +140*** DISPLAY LANGUAGE + LANGUAGE=Q + PRINT @(25,6):Q "L#30" + EXECUTE "PTERM CASE INVERT" + RETURN +* +200*** ########## EXT.NAME + EXECUTE "PTERM CASE NOINVERT" + IF Q=NO.DATA THEN +210 PRINT PROMPT:"Enter subroutine external name: ":STR(".",32):@(32,21): + INPUT Q,32: ; PRINT CL.ERR:PROMPT: + END + IF Q="" THEN + Q=ID + END + IF Q="?" THEN + PRINT EXT.HELP: ; INPUT Q: ; PRINT HELP3: + GOTO 210 + END + IF Q="^" OR Q="XX" or Q="xx" THEN + PRINT @(25,7):"" "L#32" + RETURN + END +230*** EDITS FOR EXT.NAME + IF LEN(Q)>32 THEN + PRINT MSG3: + GOTO 210 + END +240*** DISPLAY EXT.NAME + EXT.NAME=Q + PRINT @(25,7):Q "L#32" + EXECUTE "PTERM CASE INVERT" + RETURN +* +300*** ########## NO.ARGS + IF Q=NO.DATA THEN +310 PRINT PROMPT:"Enter the number of arguments: ":STR(".",2):@(31,21): + INPUT Q,2: ; PRINT CL.ERR:PROMPT: + END + IF Q="" THEN + PRINT MSG2: + GOTO 310 + END + IF Q="?" THEN + PRINT ARGS.HELP: ; INPUT Q: ; PRINT HELP3: + GOTO 310 + END + IF Q="^" OR Q="XX" or Q="xx" THEN + PRINT @(25,10):"" "L#2" + RETURN + END +330*** EDITS FOR NO.ARGS + ICONV.TEMP=ICONV(Q,"MD0") + IF STATUS()#0 THEN + PRINT MSG4: + GOTO 310 + END + IF LEN(Q)>2 THEN + PRINT MSG3: + GOTO 310 + END + IF Q < 0 THEN + PRINT MSG12: + GOTO 310 + END + +340*** DISPLAY NO.ARGS + NO.ARGS=Q + PRINT @(25,10):Q "L#2" + RETURN +* +400*** ########## RET.VAL + EXECUTE "PTERM CASE NOINVERT" + IF Q=NO.DATA THEN +410 PRINT PROMPT:"Enter the return value: ":str(".",30):@(24,21): + INPUT Q,30: ; PRINT CL.ERR:PROMPT: + END + Q = DOWNCASE(Q) + IF Q="" THEN + PRINT MSG2: + GOTO 410 + END + IF Q="?" THEN + PRINT RET.HELP: ; INPUT Q: ; PRINT HELP3: + GOTO 410 + END + IF Q="^" OR Q="xx" THEN + PRINT @(57,10):"" "L#30" + RETURN + END +*** EDITS FOR RET.VAL + IF LEN(Q)>30 THEN + PRINT MSG3: + GOTO 410 + END + IF LANGUAGE = "f77" THEN + IF Q#'void' THEN + PRINT MSG5: + GOTO 410 + END + END ELSE ;* 'c' - any valid data type + IF Q#'void' THEN + TYPES.ID = LANGUAGE:".":Q + READ DUMMY FROM FVDATA.TYPES,TYPES.ID ELSE + PRINT MSG5: + GOTO 410 + END + IF DUMMY<2> = "" THEN + PRINT MSG8: + GOTO 410 + END + END + END + +440*** DISPLAY RET.VAL + RET.VAL = Q + PRINT @(57,10):Q "L#30" + EXECUTE "PTERM CASE INVERT" + RETURN +* +500*** ########## IO.ARGS +* MULTIVALUE + H.IO.ARGS=IO.ARGS +* EXECUTE "PTERM CASE NOINVERT" + VALUE.INSERTED=FALSE + IF NEW.ITEM THEN MV=MV+1 ELSE + MV=FIELD(Z,".",2) ; Z=INT(Z) + IF MV<1 THEN + IF Q="DE" OR Q="de" THEN + DATA.TYPES=""; IO.ARGS=""; MV=1 ; GOSUB 560 ;* DELETE FIELD + END ELSE IF Q="+" THEN MV=1 ELSE + FOR MV=1 TO 99 UNTIL IO.ARGS<1,MV>=""; NEXT MV + IF MV>MV5+5 THEN GOSUB 560 ;* DISPLAY FIELD + END + END ELSE IF IO.ARGS<1,MV>='' AND (Q#'DE' AND Q#'de') THEN GOTO 500 + END + IF NO.ARGS<=0 THEN RETURN + IF Q=NO.DATA THEN +510 PRINT PROMPT:"Enter argument " : MV"R#2" : " direction (I/O/B): ":STR(".",4):@(37,21): + INPUT Q,4: ; PRINT CL.ERR:PROMPT: + IF ( Q="" or Q="/" ) AND NOT(VALUE.INSERTED) THEN + PRINT @(COL5,LIN5):MV:CL + MV=0 ; +* EXECUTE "PTERM CASE INVERT" + RETURN + END + END + IF Q="" AND NOT(NEW.ITEM) AND IO.ARGS<1,MV>#"" THEN GOTO 550 ;*DO NOT CHANGE VALUE + IF Q="" THEN + PRINT MSG2: + GOTO 510 + END + IF Q="INS" OR Q="INSERT" THEN + VALUE.INSERTED=TRUE ; DATA.TYPES=INSERT(DATA.TYPES,1,MV,0,"") + IO.ARGS=INSERT(IO.ARGS,1,MV,0,"") + GOSUB 560 ; Q=NO.DATA ; GOTO 510 ;* INSERT MV + END + IF Q="+" THEN ;* DISPLAY ONLY + MV=MV5+5 + GOSUB 560 +* EXECUTE "PTERM CASE INVERT" + RETURN + END + IF Q="DE" OR Q="de" THEN ;* DELETE MV + DATA.TYPES=DELETE(DATA.TYPES,1,MV,0) + IO.ARGS=DELETE(IO.ARGS,1,MV,0) + GOSUB 560 +* EXECUTE "PTERM CASE INVERT" + RETURN + END + IF Q="?" THEN + PRINT DIR.HELP: ; INPUT Q: ; PRINT HELP3: + GOTO 510 + END + IF Q="^" OR Q="XX" or Q="xx" OR Q="/" THEN +* if Q="^" then Z -= 1 +* EXECUTE "PTERM CASE INVERT" + IF NOT(VALUE.INSERTED) THEN + MV=0 + return + END ELSE + DATA.TYPES=DELETE(DATA.TYPES,1,MV,0) + IO.ARGS=DELETE(IO.ARGS,1,MV,0) + GOSUB 560 ; MV=0 + RETURN + END + END +530*** EDITS FOR IO.ARGS + Q=UPCASE(Q) + IF Q="I/O" THEN Q="B" + IF Q#"I" AND Q#"O" AND Q#"B" THEN + PRINT ERR:"Response must be Input(I), Output(O) or Both(B).": + GOTO 510 + END +540*** DISPLAY IO.ARGS + H.IO.ARGS<1,MV>=Q + IF MVMV5+4 THEN GOSUB 560 + PRINT @(COL5,LIN5):MV"L#3":Q "L#4" +550 FOR J = 1 TO 5 + Q=NO.DATA ; ON J GOSUB 600, 900, 1000, 1100, 1200 + IF (Q="XX" OR Q="xx") AND NEW.ITEM THEN RETURN + IF Q="^" OR Q="XX" or Q="xx" THEN IF J<=1 THEN GOTO 510 ELSE J=J-2 ; Q.PREV = Q + NEXT J + DATA.TYPES<1,MV>=H.DATA.TYPES<1,MV> + IO.ARGS<1,MV>=H.IO.ARGS<1,MV> + LENGTHS<1,MV>=H.LENGTHS<1,MV> + ROWS<1,MV>=H.ROWS<1,MV> + COLS<1,MV>=H.COLS<1,MV> + ARG.DESCS<1,MV>=H.ARG.DESCS<1,MV> + + IF NEW.ITEM THEN MV=MV+1 ; GOTO 510 ELSE MV=0 + RETURN +560 MV5=5*INT((MV-1)/5)+1 ;* DISPLAY FIELD + IF IO.ARGS<1,MV5>="" AND Q="+" THEN MV5=1 + FOR K=MV5 TO MV5+4 + PRINT @(COL5,LIN5):K"L#3": + IF IO.ARGS<1,K>="" THEN PRINT CL: ELSE + PRINT IO.ARGS<1,K> "L#4": + GOSUB 660 ;*DISPLAY ASSOCIATED VALUES + GOSUB 960 + GOSUB 1060 + GOSUB 1160 + GOSUB 1260 + END + NEXT K + PRINT @(COL5<5>-1,LIN5<5>): + IF IO.ARGS<1,K>#"" THEN PRINT "+" ELSE PRINT "." + RETURN +* +* +600*** ######### DATA.TYPES +* ASSOCIATED MULTIVALUE + Q.PREV = NO.DATA + EXECUTE "PTERM CASE NOINVERT" + H.DATA.TYPES=DATA.TYPES + IF Q=NO.DATA THEN +610 PRINT PROMPT:"Enter data type " : MV"R#2" :": ":STR(".",30):@(20,21): + INPUT Q,30: ; PRINT CL.ERR:PROMPT: + END + IF Q="" AND NOT(NEW.ITEM) AND DATA.TYPES<1,MV>#"" THEN + EXECUTE "PTERM CASE INVERT" + RETURN ;* DO NOT CHANGE VALUE + END + IF Q="" THEN + PRINT MSG2: + GOTO 610 + END + IF Q="?" THEN + PRINT TYP.HELP: ; INPUT Q: ; PRINT HELP3: + GOTO 610 + END + IF Q="^" OR Q="XX" OR Q="xx" THEN +* PRINT @(COL6,LIN6):"" "L#30" + PRINT @(COL6,LIN6):CL + EXECUTE "PTERM CASE INVERT" + RETURN + END +630*** EDITS FOR DATA.TYPES + IF LEN(Q)>30 THEN + PRINT MSG3: + GOTO 610 + END + TYPES.ID=LANGUAGE:".":Q + READ DUMMY FROM FVDATA.TYPES,TYPES.ID ELSE + PRINT MSG5: +*** +*** Can't modify DATA.TYPES file +*** +* PRINT PROMPT:"Do you wish to add new data types (Y/N) ": +* INPUT ANS +* IF ANS="Y" OR ANS ="y" THEN +* PA='' +* PA<1>='RUN APP.PROGS TYPES.MAINT' +* PA<2>='DATA ':LANGUAGE +* PA<3>='DATA ':Q +* EXECUTE PA +* SAVE.Q=Q ; SAVE.MV=MV +* PRINT SSA11 +* GOSUB 88 +* Q=SAVE.Q ; MV=SAVE.MV +* PRINT @(COL5,LIN5):MV"L#3":H.IO.ARGS<1,MV> "L#3" +* EXECUTE "PTERM CASE NOINVERT" +* GOTO 630 +* END ELSE + GOTO 610 +* END + END + IF H.IO.ARGS<1,MV>="I" OR H.IO.ARGS<1,MV>="B" THEN + IF DUMMY<1>="" THEN + PRINT MSG7: +* PRINT PROMPT:"Do you wish to update the data types file (Y/N) ": +* INPUT ANS +* IF ANS="Y" OR ANS ="y" THEN +* PA='' +* PA<1>='RUN APP.PROGS TYPES.MAINT' +* PA<2>='DATA ':LANGUAGE +* PA<3>='DATA ':Q +* PA<4>='DATA 2' +* EXECUTE PA +* SAVE.Q=Q ; SAVE.MV=MV +* PRINT SSA11 +* GOSUB 88 +* Q=SAVE.Q ; MV=SAVE.MV +* PRINT @(COL5,LIN5):MV"L#3":H.IO.ARGS<1,MV> "L#3" +* EXECUTE "PTERM CASE NOINVERT" +* GOTO 630 +* END ELSE + GOTO 610 +* END + END + END + IF H.IO.ARGS<1,MV>="O" OR H.IO.ARGS<1,MV>="B" THEN + IF DUMMY<2>="" THEN + PRINT MSG8: +* PRINT PROMPT:"Do you wish to update the DATA.TYPES file (Y/N) ": +* INPUT ANS +* IF ANS="Y" OR ANS ="y" THEN +* PA='' +* PA<1>='RUN APP.PROGS TYPES.MAINT' +* PA<2>='DATA ':LANGUAGE +* PA<3>='DATA ':Q +* PA<4>='DATA 3' +* EXECUTE PA +* SAVE.Q=Q ; SAVE.MV=MV +* PRINT SSA11 +* GOSUB 88 +* Q=SAVE.Q ; MV=SAVE.MV +* PRINT @(COL5,LIN5):MV"L#3":H.IO.ARGS<1,MV> "L#3" +* EXECUTE "PTERM CASE NOINVERT" +* GOTO 630 +* END ELSE + GOTO 610 +* END + END + END +640*** DISPLAY DATA.TYPES + H.DATA.TYPES<1,MV>=Q + PRINT @(COL6,LIN6):Q "L#30" + RETURN +660*** DISPLAY MULTIVALUE + PRINT @(COL6,LIN6):DATA.TYPES<1,K> "L#30": + RETURN +* +700*** ########## MOD.NAME + EXECUTE "PTERM CASE NOINVERT" + IF Q=NO.DATA THEN +710 PRINT PROMPT:"Enter file name (without the '.c'): ":STR(".",55):@(36,21): + INPUT Q,55: ; PRINT CL.ERR:PROMPT: + END + IF Q="" THEN + Q=ID + END + IF Q="?" THEN + PRINT MOD.HELP: ; INPUT Q: ; PRINT HELP3: + GOTO 710 + END + IF Q="^" OR Q="XX" or Q="xx" THEN + PRINT @(25,8):"" "L#55" + RETURN + END +730*** EDITS FOR MOD.NAME + IF LEN(Q)>55 THEN + PRINT MSG3: + GOTO 710 + END +740*** DISPLAY MOD.NAME + MOD.NAME=Q + PRINT @(25,8):Q "L#55" + EXECUTE "PTERM CASE INVERT" + RETURN +* +800*** ########## SUB.DESC + EXECUTE "PTERM CASE NOINVERT" + IF Q=NO.DATA THEN +810 PRINT PROMPT:"Enter subroutine description: ":STR(".",50):@(30,21): + INPUT Q,50: ; PRINT CL.ERR:PROMPT: + END + IF Q="?" THEN + PRINT DESC.HELP: ; INPUT Q: ; PRINT HELP3: + GOTO 810 + END + IF Q="^" OR Q="XX" or Q="xx" THEN + PRINT @(25,9):"" "L#50" + RETURN + END +830*** EDITS FOR SUB.DESC + IF LEN(Q)>50 THEN + PRINT MSG3: + GOTO 810 + END +840*** DISPLAY SUB.DESC + SUB.DESC=Q + PRINT @(25,9):Q "L#50" + EXECUTE "PTERM CASE INVERT" + RETURN +* +900*** ######### LENGTHS +* ASSOCIATED MULTIVALUE + H.LENGTHS=LENGTHS + IF H.DATA.TYPES<1,MV> # "lchar*" AND H.DATA.TYPES<1,MV> # "charvar*" AND H.DATA.TYPES<1,MV> # "character" AND H.DATA.TYPES<1,MV> # "lwchar_t*" AND H.DATA.TYPES<1,MV> # "wchar_tvar*" THEN + IF Q.PREV = "^" THEN Q = Q.PREV + RETURN + END + Q.PREV = NO.DATA + IF Q=NO.DATA THEN +910 PRINT PROMPT:"Enter string length " : MV"R#2" :": ":STR(".",6):@(24,21): + INPUT Q,6: ; PRINT CL.ERR:PROMPT: + END + IF Q="" AND NOT(NEW.ITEM) AND LENGTHS<1,MV>#"" THEN + RETURN ;* DO NOT CHANGE VALUE + END + IF Q="" THEN + PRINT MSG2: + GOTO 910 + END + IF Q="?" THEN + PRINT LEN.HELP: ; INPUT Q: ; PRINT HELP3: + GOTO 910 + END + IF Q="^" OR Q="XX" OR Q="xx" THEN +* PRINT @(COL9,LIN9):"" "L#6" + PRINT @(COL9,LIN9):CL + RETURN + END +930*** EDITS FOR LENGTHS + IF Q THEN + ICONV.TEMP=ICONV(Q,"MD0") + IF STATUS()#0 THEN + PRINT MSG4: + GOTO 910 + END + IF LEN(Q)>6 THEN + PRINT MSG3: + GOTO 910 + END + IF Q < 0 THEN + PRINT MSG12: + GOTO 910 + END + IF H.IO.ARGS<1,MV>="I" OR H.IO.ARGS<1,MV>="B" THEN + IF DUMMY<1>="" THEN + PRINT MSG7: + GOTO 910 + END + END + IF H.IO.ARGS<1,MV>="O" OR H.IO.ARGS<1,MV>="B" THEN + IF DUMMY<2>="" THEN + PRINT MSG8: + GOTO 910 + END + END + END +940*** DISPLAY LENGTHS + H.LENGTHS<1,MV>=Q + PRINT @(COL9,LIN9):Q "L#6" + RETURN +960*** DISPLAY MULTIVALUE + PRINT @(COL9,LIN9):LENGTHS<1,K> "L#6": + RETURN +* + +1000*** ######### ROWS +* ASSOCIATED MULTIVALUE + POS = INDEX(H.DATA.TYPES<1,MV>, "char", 1) + IF POS THEN + IF Q.PREV = "^" THEN Q = Q.PREV + RETURN + END + Q.PREV = NO.DATA + H.ROWS=ROWS + IF Q=NO.DATA THEN +1010 PRINT PROMPT:"Enter number of rows " : MV"R#2" :": ":STR(".",5):@(25,21): + INPUT Q,5: ; PRINT CL.ERR:PROMPT: + END + IF Q="" AND NOT(NEW.ITEM) AND ROWS<1,MV>#"" THEN + RETURN ;* DO NOT CHANGE VALUE + END + IF Q="?" THEN + PRINT ROW.HELP: ; INPUT Q: ; PRINT HELP3: + GOTO 1010 + END + IF Q="^" OR Q="XX" OR Q="xx" THEN +* PRINT @(COL10,LIN10):"" "L#5" + PRINT @(COL10,LIN10):CL + RETURN + END +1030*** EDITS FOR ROWS + IF Q THEN + ICONV.TEMP=ICONV(Q,"MD0") + IF STATUS()#0 THEN + PRINT MSG4: + GOTO 1010 + END + IF LEN(Q)>5 THEN + PRINT MSG3: + GOTO 1010 + END + IF Q < 0 THEN + PRINT MSG12: + GOTO 1010 + END + IF H.IO.ARGS<1,MV>="I" OR H.IO.ARGS<1,MV>="B" THEN + IF DUMMY<1>="" THEN + PRINT MSG7: + GOTO 1010 + END + END + IF H.IO.ARGS<1,MV>="O" OR H.IO.ARGS<1,MV>="B" THEN + IF DUMMY<2>="" THEN + PRINT MSG8: + GOTO 1010 + END + END + END +1040*** DISPLAY ROWS + H.ROWS<1,MV>=Q + PRINT @(COL10,LIN10):Q "L#5" + RETURN +1060*** DISPLAY MULTIVALUE + PRINT @(COL10,LIN10):ROWS<1,K> "L#5": + RETURN +* + +1100*** ######### COLS +* ASSOCIATED MULTIVALUE + POS = INDEX(H.DATA.TYPES<1,MV>, "char", 1) + IF POS OR NOT(H.ROWS<1,MV>) THEN + IF Q.PREV = "^" THEN Q = Q.PREV + RETURN + END + Q.PREV = NO.DATA + H.COLS=COLS + IF Q=NO.DATA THEN +1110 PRINT PROMPT:"Enter number of columns " : MV"R#2" :": ":STR(".",6):@(28,21): + INPUT Q,6: ; PRINT CL.ERR:PROMPT: + END + IF Q="" AND NOT(NEW.ITEM) AND COLS<1,MV>#"" THEN + RETURN ;* DO NOT CHANGE VALUE + END + IF Q="?" THEN + PRINT COL.HELP: ; INPUT Q: ; PRINT HELP3: + GOTO 1110 + END + IF Q="^" OR Q="XX" OR Q="xx" THEN +* PRINT @(COL11,LIN11):"" "L#6" + PRINT @(COL11,LIN11):CL + RETURN + END +1130*** EDITS FOR COLS + IF Q THEN + ICONV.TEMP=ICONV(Q,"MD0") + IF STATUS()#0 THEN + PRINT MSG4: + GOTO 1110 + END + IF LEN(Q)>6 THEN + PRINT MSG3: + GOTO 1110 + END + IF Q < 0 THEN + PRINT MSG12: + GOTO 1110 + END + IF H.IO.ARGS<1,MV>="I" OR H.IO.ARGS<1,MV>="B" THEN + IF DUMMY<1>="" THEN + PRINT MSG7: + GOTO 1110 + END + END + IF H.IO.ARGS<1,MV>="O" OR H.IO.ARGS<1,MV>="B" THEN + IF DUMMY<2>="" THEN + PRINT MSG8: + GOTO 1110 + END + END + END +1140*** DISPLAY COLS + H.COLS<1,MV>=Q + PRINT @(COL11,LIN11):Q "L#6" + RETURN +1160*** DISPLAY MULTIVALUE + PRINT @(COL11,LIN11):COLS<1,K> "L#6": + RETURN +* + +1200*** ######### ARG.DESC +* ASSOCIATED MULTIVALUE + H.ARG.DESCS=ARG.DESCS + Q.PREV = NO.DATA + IF Q=NO.DATA THEN +1210 PRINT PROMPT:"Enter argument description " : MV"R#2" :": ":STR(".",15):@(31,21): + INPUT Q,15: ; PRINT CL.ERR:PROMPT: + END + IF Q="" AND NOT(NEW.ITEM) AND ARG.DESCS<1,MV>#"" THEN + RETURN ;* DO NOT CHANGE VALUE + END + IF Q="?" THEN + PRINT ARGDESC.HELP: ; INPUT Q: ; PRINT HELP3: + GOTO 1210 + END + IF Q="^" OR Q="XX" OR Q="xx" THEN +* PRINT @(COL12,LIN12):"" "L#15" + PRINT @(COL12,LIN12):CL + RETURN + END +1230*** EDITS FOR COLS + IF LEN(Q)>15 THEN + PRINT MSG3: + GOTO 1210 + END + IF H.IO.ARGS<1,MV>="I" OR H.IO.ARGS<1,MV>="B" THEN + IF DUMMY<1>="" THEN + PRINT MSG7: + GOTO 1210 + END + END + IF H.IO.ARGS<1,MV>="O" OR H.IO.ARGS<1,MV>="B" THEN + IF DUMMY<2>="" THEN + PRINT MSG8: + GOTO 1210 + END + END +1240*** DISPLAY ARG.DESCS + H.ARG.DESCS<1,MV>=Q + PRINT @(COL12,LIN12):Q "L#15" + RETURN +1260*** DISPLAY MULTIVALUE + PRINT @(COL12,LIN12):ARG.DESCS<1,K> "L#15": + RETURN +* + + END + diff --git a/Ardent/UV/APP.PROGS/GCI.MAKEFILE b/Ardent/UV/APP.PROGS/GCI.MAKEFILE new file mode 100755 index 00000000..e540a250 --- /dev/null +++ b/Ardent/UV/APP.PROGS/GCI.MAKEFILE @@ -0,0 +1,183 @@ +***************************************************************************** +* +* Add the names of the object modules to the Makefile +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description......................................... +* 10/14/98 23801 SAP Change copyrights. +* 07/14/93 11822 PVW Onsite linking +* 09/22/89 6314 DTW New file +* +******************************************************************************* +* +$OPTIONS DEFAULT +* +$INCLUDE UNIVERSE.INCLUDE FILENAMES.H +$INCLUDE UNIVERSE.INCLUDE MACHINE.NAME +* + prompt "" + CL = @(-4) + CL.ERR = @(0,23):CL + EQU BELL TO CHAR(7) + ERR = CL.ERR:BELL + MSG10=ERR:PROD.NAMEU:' General Calling Interface is not installed.' + OPEN '','DATA.TYPES' TO FILE.DATA.TYPES ELSE + PRINT MSG10: + INPUT Q: ; PRINT CL.ERR: ; STOP + END + print @( -1 ) + print @( 0, 0 ):"General Calling Interface Administration" : @( 67, 0 ) : "GCI.MAKEFILE": + print @( 17, 1): 'Update the GCI Makefile "':UV.GCI:'/Makefile"': + print @( 0, 2 ): str( "-", 79 ): + print @( 0, 4 ): + PRINTER RESET +************************************************************************** +* +* This program adds the names of the required GCI object modules +* to the Makefile in the GCI directory. It peruses the DATA.TYPES +* file and GCI file to find the file names and replaces the +* "GCILIB =" line in the Makefile. If the Make.gci has been modified +* so that "GCILIB =" does not exist or if Make.gci does not exist, +* this program displays error messages and gives up. +* +************************************************************************** +* +* + EQU TAB1 TO CHAR(9) + EQU TAB2 TO CHAR(9):CHAR(9) + EQU TAB3 TO CHAR(9):CHAR(9):CHAR(9) +* +* open the makefile model. if the open fails print out messages +* and quit. +* + PATH=UV.GCI:'/Make.gci' + OPENSEQ PATH TO GCI.MODEL ELSE +* +* opening the makefile model failed +* + PRINT "Failed to open the file '":PATH:"'." + PRINT "This file must exist and be 'readable' to complete the Makefile Update." + PRINT "If the file does not exist, it may be necessary to re-install it from" + PRINT "the original installation tape." + STOP + END +* +* open the Makefile and truncate. if open fails, print out messages +* and quit +* + PATH=UV.GCI:'/Makefile' + OPENSEQ PATH TO GCIMAKE THEN + WEOFSEQ GCIMAKE + END ELSE + WRITESEQ '' ON GCIMAKE ELSE GOTO 910 + END +100 READSEQ line FROM GCI.MODEL ELSE + PRINT "Cannot find the GCILIB definition in the file ":UV.GCI:"/Make.gci." + PRINT "The Makefile Update process has failed." + STOP + END + IF SUBSTRINGS(line, 0, 6) <> "GCILIB" THEN + WRITESEQ line ON GCIMAKE ELSE GOTO 910 + GOTO 100 + END + line = "GCILIB = " + SELECT FILE.DATA.TYPES + len = 0 + totlen = 8 + parts = 1 +200 READNEXT id ELSE GOTO 210 + READ rec FROM FILE.DATA.TYPES,id ELSE + PRINT "Cannot read '" : id : "'from the file DATA.TYPES." + PRINT "Makefile Update has failed." + STOP + END + module = rec<6,1> + module = TRIM(module) : ".o " + len = LEN(module) + IF len <= 3 THEN GOTO 200 +* +* if there is a module name, check to see if we have already +* included it in line. If line is too long, break it into +* pieces (marked by value marks), end each piece with a backslash. +* + FINDSTR " " : module IN line SETTING fmc THEN GOTO 200 ELSE + IF totlen + len > 60 THEN + line = line : "\" : @VM : module : " " + totlen = 1 + parts += 1 + END ELSE + totlen += len + line = line : module : " " + END + END + GOTO 200 + +210 CLOSE FILE.DATA.TYPES + OPEN '','GCI' TO FILE.GCI ELSE + PRINT "Cannot open file GCI. Update will continue, but" + PRINT "no user functions will be included in the Makefile." + GOTO 310 + END + SELECT FILE.GCI +300 READNEXT id ELSE GOTO 305 + READ rec FROM FILE.GCI,id ELSE + PRINT "Cannot read '" : id : "'from the file GCI." + PRINT "Makefile Update has failed." + STOP + END + module = rec<7,1> + module = TRIM(module) : ".o " + len = LEN(module) + IF len <= 3 THEN GOTO 300 +* +* if there is a module name, check to see if we have already +* included it in line. If line is too long, break it into +* pieces (marked by value marks), end each piece with a backslash. +* + FINDSTR " " : module IN line SETTING fmc THEN GOTO 300 ELSE + IF totlen + len > 60 THEN + line = line : "\" : @VM : module : " " + totlen = 1 + parts += 1 + END ELSE + totlen += len + line = line : module : " " + END + END + GOTO 300 + +* +* write the list of modules into the makefile, each vm marks one +* part of the line +* +305 CLOSE FILE.GCI +310 FOR x = 1 TO parts + WRITESEQ line<1, x> ON GCIMAKE ELSE GOTO 910 + next x + +400 READSEQ line FROM GCI.MODEL ELSE + PRINT "Makefile Update Completed." + STOP + END + WRITESEQ line ON GCIMAKE ELSE GOTO 910 + GOTO 400 + + +* +* unable to write to the new makefile +* +910 PRINT 'Unable to write to ':UV.GCI :"/Makefile." + PRINT "This file and directory must be 'writable' to complete the Makefile Update." + STOP + +END diff --git a/Ardent/UV/APP.PROGS/GCI.NTADDL.B b/Ardent/UV/APP.PROGS/GCI.NTADDL.B new file mode 100755 index 00000000..ec53418b --- /dev/null +++ b/Ardent/UV/APP.PROGS/GCI.NTADDL.B @@ -0,0 +1,114 @@ +***************************************************************************** +* +* GCI.NTADDL.B - add a new entry to the standard GCI library list +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenance log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description......................................... +* 10/14/98 23801 SAP Change copyrights. +* 04/04/96 18026 PGW Module created. +* +******************************************************************************* +* +* This program adds a new entry to the standard list of GCI libraries held +* in the Windows NT Registry. It is invoked like this: +* +* RUN APP.PROGS GCI.NTADDL.B dll.path +* +* where 'dll.path' is the name of a GCI library. +* +* GCI.NTADDL.B can be run whether or not the GCI is installed, so that a +* software vendor whose software uses GCI routines can build a GCI library +* on his own system, and then install his software on an end-user's system +* without needing to install the GCI there. +* +* This program does not print any output unless an error occurs. It sets +* @SYSTEM.RETURN.CODE as follows: +* +* 0 the DLL path was added successfully. +* +* 1 the DLL path supplied already exists in the standard library list. +* The list is not updated, and no message is generated. +* +* -1 some other error has occured, and an error message is printed. +* +******************************************************************************* +* +$OPTIONS DEFAULT + +PROGRAM GCI.NTADDL.B + + ID = "@(#)%M% %I%" + + DECLARE GCI UVREGgetstring + DECLARE GCI UVREGputstring + DECLARE GCI NTerrtext + + EQUATE system.lib.list TO "UvGCILibraries" + * Win32 error code + EQUATE error.file.not.found TO 2 + + * Get the library name from the command line + cmd = CONVERT(" ", @FM, TRIM(@SENTENCE)) + dll.path = cmd<4> + IF dll.path = "" THEN + PRINT "You must specify a GCI library pathname." + @SYSTEM.SET = -1 + STOP + END + + * Get the system library list from the registry, to be updated + lib.list = "" + lib.type = 0 + rslt = UVREGgetstring(system.lib.list, lib.list, lib.type) + IF rslt # 0 THEN + IF rslt = error.file.not.found THEN + lib.list = "" + END ELSE + PRINT "Error ":rslt:" reading the system registry:" + dummy = NTerrtext(rslt, err.text) + IF LEN(err.text) > 0 THEN + PRINT err.text + END + @SYSTEM.SET = -1 + STOP + END + END + + * Add the new path to the list, first checking that it is not + * already there + CONVERT ";" TO @FM IN lib.list + LOCATE dll.path IN lib.list<1> SETTING lib.pos THEN + * The DLL path given is already in the list + @SYSTEM.SET = 1 + END ELSE + * Not there, so go ahead and update + INS dll.path BEFORE lib.list<1> + CONVERT @FM TO ";" IN lib.list + rslt = UVREGputstring(system.lib.list, lib.list) + IF rslt # 0 THEN + PRINT "Error ":rslt:" updating the system registry:" + dummy = NTerrtext(rslt, err.text) + IF LEN(err.text) > 0 THEN + PRINT err.text + END + @SYSTEM.SET = -1 + STOP + END + @SYSTEM.SET = 0 + END + + * Done + STOP + + END + diff --git a/Ardent/UV/APP.PROGS/GCI.NTEDL.B b/Ardent/UV/APP.PROGS/GCI.NTEDL.B new file mode 100755 index 00000000..b788ec3a --- /dev/null +++ b/Ardent/UV/APP.PROGS/GCI.NTEDL.B @@ -0,0 +1,132 @@ +***************************************************************************** +* +* GCI.NTEDL.B - edit the GCI library list for uniVerse on Windows NT +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenance log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description......................................... +* 10/14/98 23801 SAP Change copyrights. +* 04/03/96 18026 PGW Module created. +* +******************************************************************************* +* +* This program allows the administrator to edit the list of standard DLLs +* that uniVerse keeps in the Windows NT Registry. It is normally run +* from the GCI.ADMIN menu, but you can run it by hand as follows: +* +* RUN APP.PROGS GCI.NTEDL.B +* +* The program copies the library list from the registry to a temporary file, +* invokes ED, and when ED has finished, copies the library list back to +* the registry. +* +******************************************************************************* +* +$OPTIONS DEFAULT + +PROGRAM GCI.NTEDL.B + + ID = "@(#)%M% %I%" + +$INCLUDE UNIVERSE.INCLUDE FILENAMES.H +$INCLUDE UNIVERSE.INCLUDE MACHINE.NAME +* + DECLARE GCI UVREGgetstring + DECLARE GCI UVREGputstring + DECLARE GCI NTerrtext + + EQUATE bell TO CHAR(7) + EQUATE system.lib.list TO "UvGCILibraries" + * Win32 error code + EQUATE error.file.not.found TO 2 + + EQUATE edit.temp.file TO "&UFD&" + EQUATE edit.temp.record TO "gci.library.list" + + PROMPT "" + cl = @(-4) + cl.err = @(0,23):cl + err = cl.err:bell + msg10 = err:PROD.NAMEU:' General Calling Interface is not installed.' + failure.message = "GCI Library List not updated." + + OPEN '','DATA.TYPES' TO file.data.types ELSE + PRINT msg10: + INPUT q: ; PRINT cl.err: ; STOP + END + + OPEN '', edit.temp.file TO temp.file ELSE + PRINT 'Cannot open the file "' : edit.temp.file : '".' + PRINT failure.message + STOP + END + + PRINT @( -1 ) + PRINT @( 0, 0 ):"General Calling Interface Administration" : @( 67, 0 ) : "GCI.NTEDL.B": + PRINT @( 17, 1): 'Edit the Standard GCI Library List': + PRINT @( 0, 2 ): STR( "-", 79 ): + PRINT @( 0, 4 ): + + * Get the system library list from the registry, to be updated + lib.list = "" + lib.type = 0 + rslt = UVREGgetstring(system.lib.list, lib.list, lib.type) + IF rslt # 0 THEN + IF rslt = error.file.not.found THEN + lib.list = "" + END ELSE + PRINT "Error ":rslt:" reading the system registry:" + dummy = NTerrtext(rslt, err.text) + IF LEN(err.text) > 0 THEN + PRINT err.text + END + PRINT failure.message + STOP + END + END + + * Write it out, and edit it + CONVERT ";" TO @FM IN lib.list + WRITE lib.list ON temp.file, edit.temp.record ELSE + PRINT 'Cannot write to "' : edit.temp.file : '".' + PRINT failure.message + STOP + END + + EXECUTE "ED " : edit.temp.file : " " : edit.temp.record + * +++ Error checking? + + * Read it back in, and update the registry + READ lib.list FROM temp.file, edit.temp.record ELSE + PRINT 'Cannot read "':edit.temp.record:'" from "':edit.temp.file:'".' + PRINT failure.message + STOP + END + + CONVERT @FM TO ";" IN lib.list + rslt = UVREGputstring(system.lib.list, lib.list) + IF rslt # 0 THEN + PRINT "Error ":rslt:" updating the system registry:" + dummy = NTerrtext(rslt, err.text) + IF LEN(err.text) > 0 THEN + PRINT err.text + END + PRINT failure.message + STOP + END + + * Done + PRINT "Standard GCI Library List successfully updated." + STOP + + END + diff --git a/Ardent/UV/APP.PROGS/GCI.NTINST.B b/Ardent/UV/APP.PROGS/GCI.NTINST.B new file mode 100755 index 00000000..576e6ffa --- /dev/null +++ b/Ardent/UV/APP.PROGS/GCI.NTINST.B @@ -0,0 +1,112 @@ +***************************************************************************** +* +* GCI.NTINST.B - install a GCI library, Windows NT version +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenance log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description......................................... +* 10/14/98 23801 SAP Change copyrights. +* 04/01/96 18026 PGW Module created. +* +******************************************************************************* +* +* This program installs a new GCI library automatically. It is normally run +* from the GCI.ADMIN menu, but you can run it by hand as follows: +* +* RUN APP.PROGS GCI.NTINST.B file.name +* +* where 'file.name' is the name of a GCI Definition file. +* +* The program simply copies the built library into the UVHOME/bin directory, +* and adds its name to the list of libraries in the Windows NT Registry. +* +******************************************************************************* +* +$OPTIONS DEFAULT + +PROGRAM GCI.NTINST.B + + ID = "@(#)%M% %I%" + +$INCLUDE UNIVERSE.INCLUDE FILENAMES.H +$INCLUDE UNIVERSE.INCLUDE MACHINE.NAME +* + EQUATE bell TO CHAR(7) + + PROMPT "" + cl = @(-4) + cl.err = @(0,23):cl + err = cl.err:bell + msg10 = err:PROD.NAMEU:' General Calling Interface is not installed.' + failure.message = "GCI Library installation failed." + + OPEN '','DATA.TYPES' TO file.data.types ELSE + PRINT msg10: + INPUT q: ; PRINT cl.err: ; STOP + END + + * You *must* specify the definition file by putting its name on the + * command line. This program does not default to 'GCI', since + * bin/gci.dll is installed when uniVerse is installed. + cmd = CONVERT(" ", @FM, TRIM(@SENTENCE)) + def.file.name = cmd<4> + IF def.file.name = "" THEN + PRINT "You must specify a GCI Definition File name." + STOP + END + sccsid = DOWNCASE(def.file.name) + dll.name = sccsid : ".dll" + dll.path = "bin\" : dll.name + + PRINT @( -1 ) + PRINT @( 0, 0 ):"General Calling Interface Administration" : @( 67, 0 ) : "GCI.NTINST.B": + PRINT @( 17, 1): 'Install a GCI Library from GCI Definition File "':def.file.name:'"': + PRINT @( 0, 2 ): STR( "-", 79 ): + PRINT @( 0, 4 ): + PRINT 'This procedure will copy the ':PROD.NAMEU:' GCI library ':dll.name + PRINT 'to the ':UV.BIN:' directory,' + PRINT 'and add it to the list of GCI libraries loaded for all users.' + PRINT + PRINT 'Are you sure you want to continue? (Y/N)': + INPUT ans + ans = UPCASE(ans) + IF ans <> "Y" THEN STOP + + * Copy the built dll into the UVHOME/bin directory + xcmd = OS.EXEC : ' "copy ' : UV.GCI : '\' : dll.name : ' ' : UV.BIN : '"' + PRINT xcmd + EXECUTE xcmd CAPTURING xout + IF INDEX(xout, " 1 file(s)", 1) = 0 THEN + LOOP + REMOVE xfrag FROM xout SETTING xdelim + PRINT xfrag + WHILE xdelim > 0 DO + REPEAT + PRINT failure.message + STOP + END + + * Update the standard GCI library list + @SYSTEM.SET = -1 + xcmd = 'RUN APP.PROGS GCI.NTADDL.B ' : dll.path + PERFORM xcmd + IF @SYSTEM.RETURN.CODE < 0 THEN + PRINT failure.message + END ELSE + PRINT "GCI Library '":dll.name:"' successfully installed." + END + + * Done + STOP + + END + diff --git a/Ardent/UV/APP.PROGS/GCI.NTMAKF.B b/Ardent/UV/APP.PROGS/GCI.NTMAKF.B new file mode 100755 index 00000000..9a77252f --- /dev/null +++ b/Ardent/UV/APP.PROGS/GCI.NTMAKF.B @@ -0,0 +1,280 @@ +***************************************************************************** +* +* GCI.NTMAKF.B - generate GCI makefile, Windows NT version +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenance log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description......................................... +* 10/14/98 23801 SAP Change copyrights. +* 29/03/96 18026 PGW Module created by adapting GCI.MAKEFILE. +* +******************************************************************************* +* +* This program creates a makefile for the GCI Library corresponding to a +* given GCI Definition file. The makefile is called 'xxx.mak', where 'xxx' +* is the GCI definition file name converted to lower case. +* +* To run this program, use the following command in the uvhome account: +* +* RUN APP.PROGS GCI.NTMAKF.B file.name +* +* where 'file.name' is the name of a GCI Definition file. +* +* The new makefile is created by modifying the model makefile 'Make.gci'. +* This program reads in the model, searches for certain lines, and replaces +* them. Each line is a macro defintion for a particular symbol. The symbols +* required are: +* +* GCIFILE the name of the GCI definition file. +* +* GCILIB a list of the libraries needed to link the DLL. This +* information comes from GCI definition file itself. Unlike +* the Unix version, we do not need to check the DATA.TYPES +* file, since all the conversion routines are available from +* universe.lib. +* +* GCIDLL the root filename used for the new GCI library, that is the +* GCI definition file name converted to lower case. +* +* If any of these lines is missing from Make.gci, or if Make.gci itself +* cannot be opened, the program displays error messages and gives up. +* @SYSTEM.RETURN.CODE is set to 0 if OK, -1 if an error occurs. +* +******************************************************************************* +* +$OPTIONS DEFAULT + +PROGRAM GCI.NTMAKF.B + + ID = "@(#)%M% %I%" + +$INCLUDE UNIVERSE.INCLUDE FILENAMES.H +$INCLUDE UNIVERSE.INCLUDE MACHINE.NAME +* + EQUATE bell TO CHAR(7) + EQUATE sym.gcilib TO 1 + EQUATE sym.gcifile TO 2 + EQUATE sym.gcidll TO 3 + EQUATE num.symbols TO 3 + DIM symbol.name(num.symbols) + DIM symbol.value(num.symbols) + DIM symbol.found(num.symbols) + + * Set up the initial variables + symbol.name(sym.gcilib) = "GCILIB" + symbol.name(sym.gcifile) = "GCIFILE" + symbol.name(sym.gcidll) = "GCIDLL" + MAT symbol.value = "" + MAT symbol.found = 0 + + PROMPT "" + cl = @(-4) + cl.err = @(0,23):cl + err = cl.err:bell + msg10 = err:PROD.NAMEU:' General Calling Interface is not installed.' + failure.message = "The Makefile generation process has failed." + + OPENPATH UV.ROOT:'\DATA.TYPES' TO fvdata.types ELSE + PRINT msg10: + INPUT q: ; PRINT cl.err: + @SYSTEM.SET = -1 + STOP + END + + * You can specify the definition file by putting its name on the + * command line, otherwise it defaults to "GCI" + cmd = CONVERT(" ", @FM, TRIM(@SENTENCE)) + def.file.name = cmd<4> + IF def.file.name = "" THEN def.file.name = "GCI" + sccsid = DOWNCASE(def.file.name) + model.path = UV.GCI : "\Make.gci" + output.path = UV.GCI : "\" : sccsid : ".mak" + + PRINT @( -1 ) + PRINT @( 0, 0 ):"General Calling Interface Administration" : @( 67, 0 ) : "GCI.NTMAKF.B": + PRINT @( 17, 1): 'Generate a Makefile for GCI Definition File "':def.file.name:'"': + PRINT @( 0, 2 ): STR( "-", 79 ): + PRINT @( 0, 4 ): + PRINTER RESET + + GOSUB open.files + GOSUB set.symbol.values + + end.of.input = 0 + LOOP + READSEQ line FROM gci.model ELSE end.of.input = 1 + UNTIL end.of.input DO + GOSUB check.line.for.symbols + IF line.type > 0 THEN + GOSUB output.symbol + END ELSE + WRITESEQ line ON gcimake ELSE GOTO writeseq.error + END + REPEAT + + * Reached end of file - make sure that the necessary lines were present + failed = 0 + FOR symbol.no = 1 TO num.symbols + IF NOT(symbol.found(symbol.no)) THEN + PRINT "The ":symbol.name(symbol.no):" definition is missing from ": + PRINT model.path:"." + failed = 1 + END + NEXT + IF failed THEN + PRINT failure.message + @SYSTEM.SET = -1 + STOP + END + + PRINT "Makefile generation complete." + @SYSTEM.SET = 0 + STOP + +******************************************************************************* +* +* open.files: Opens the input and output files needed by the program. +* +* Arguments: +* model.path (Input) Name of template for GCI makefile +* gci.model (Output) Open file variable for template +* output.path (Input) Name of output file +* gcimake (Output) Sequential file variable for output +* +* Description: +* +******************************************************************************* +open.files: + OPENSEQ model.path TO gci.model ELSE + PRINT "Failed to open the file '":model.path:"'." + PRINT "This file must exist and be 'readable' to complete the Makefile generation." + PRINT "If the file does not exist, it may be necessary to re-install it." + @SYSTEM.SET = -1 + STOP + END + + OPENSEQ output.path TO gcimake THEN + WEOFSEQ gcimake + END ELSE + WRITESEQ '' ON gcimake ELSE GOTO writeseq.error + END + RETURN + +******************************************************************************* +* +* set.symbol.values: set up the values to be substituted for each symbol. +* +* Arguments: +* def.file.name (Input) Name of GCI Definition file being processed +* sccsid (Input) Base name of GCI library +* symbol.value (Output) Array giving the value to be substituted +* for each symbol. +* +* Description: +* The only complicated part is setting up the list of moduldes used +* in the GCI definition file. +* +******************************************************************************* +set.symbol.values: + symbol.value(sym.gcilib) = "" + symbol.value(sym.gcifile) = def.file.name + symbol.value(sym.gcidll) = sccsid + + xcmd = "SELECT " : def.file.name : " SAVING UNIQUE S.MODULE" + EXECUTE xcmd CAPTURING xout + IF @SELECTED < 0 THEN + PRINT "Error selecting records from " : def.file.name : " file." + PRINT xcmd + PRINT xout + PRINT failure.message + @SYSTEM.SET = -1 + STOP + END + + end.of.modules = 0 + LOOP + READNEXT mod.name ELSE end.of.modules = 1 + UNTIL end.of.modules DO + IF mod.name # "" AND mod.name # "Win32" THEN + symbol.value(sym.gcilib)<-1> = mod.name : ".lib" + END + REPEAT + RETURN + +******************************************************************************* +* +* check.line.for.symbols: examine the current line for a substitution symbol. +* +* Arguments: +* line (Input) Line read from the template file +* line.type (Output) Either 0, if the line does not start with one of +* the substitution symbols, or an index into the symbol.xxx +* arrays. +* +* Description: +* +******************************************************************************* +check.line.for.symbols: + line2 = trimf(CONVERT(CHAR(9), " ", line)) + tok = field(line2, " ", 1) + line.type = 0 + FOR symbol.no = 1 TO num.symbols + IF tok = symbol.name(symbol.no) THEN + line.type = symbol.no + END + NEXT + RETURN + +******************************************************************************* +* +* output.symbol: write out the definition line for one symbol. +* +* Arguments: +* line.type (Input) Index of the symbol to be output +* symbol.name (Input) Array giving the symbol itself +* symbol.value (Input) Array giving the value to be substituted +* for each symbol. +* symbol.found (Output) Array indicating symbols found so far. +* +* Description: +* +******************************************************************************* +output.symbol: + line = symbol.name(line.type) : " = " + line.count = DCOUNT(symbol.value(line.type), @FM) + FOR line.no = 1 TO line.count + line := symbol.value(line.type) + IF line.no < line.count THEN line := " \" + WRITESEQ line ON gcimake ELSE GOTO writeseq.error + line = SPACE(9) + NEXT + symbol.found(line.type) = 1 + return + +******************************************************************************* +* +* writeseq.error: abort the program if we can't write output for any reason. +* +* Arguments: none +* +* Description: +* +******************************************************************************* +writeseq.error: + * unable to write to the new makefile + PRINT "Unable to write to ":output.path:"." + PRINT "This file and directory must be writable to complete the Makefile generation." + PRINT failure.message + @SYSTEM.SET = -1 + STOP + +END diff --git a/Ardent/UV/APP.PROGS/GCI.NTMAKL.B b/Ardent/UV/APP.PROGS/GCI.NTMAKL.B new file mode 100755 index 00000000..1832c3a6 --- /dev/null +++ b/Ardent/UV/APP.PROGS/GCI.NTMAKL.B @@ -0,0 +1,113 @@ +***************************************************************************** +* +* GCI.NTMAKL.B - create a GCI library, Windows NT version +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenance log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description......................................... +* 10/14/98 23801 SAP Change copyrights. +* 04/01/96 18026 PGW Module created by adapting MAKE.NEW.UV. +* +******************************************************************************* +* +* This program builds a new GCI library automatically. It is normally run +* from the GCI.ADMIN menu, but you can run it by hand as follows: +* +* RUN APP.PROGS GCI.NTMAKL.B file.name +* +* where 'file.name' is the name of a GCI Definition file. +* +* The steps required are: +* +* 1. Catalog the GCI subroutines as required (CATLG.GCI) +* +* 2. Create a makefile (GCI.NTMAKF.B) +* +* 3. Generate the conversion module (GEN.GCI) +* +* 4. Run the makefile to build the new library. +* +******************************************************************************* +* +$OPTIONS DEFAULT + +PROGRAM GCI.NTMAKL.B + + ID = "@(#)%M% %I%" + +$INCLUDE UNIVERSE.INCLUDE FILENAMES.H +$INCLUDE UNIVERSE.INCLUDE MACHINE.NAME +* + EQUATE bell TO CHAR(7) + + PROMPT "" + cl = @(-4) + cl.err = @(0,23):cl + err = cl.err:bell + msg10 = err:PROD.NAMEU:' General Calling Interface is not installed.' + + OPEN '','DATA.TYPES' TO file.data.types ELSE + PRINT msg10: + INPUT q: ; PRINT cl.err: ; STOP + END + + * You can specify the definition file by putting its name on the + * command line, otherwise it defaults to "GCI" + cmd = CONVERT(" ", @FM, TRIM(@SENTENCE)) + def.file.name = cmd<4> + IF def.file.name = "" THEN def.file.name = "GCI" + sccsid = DOWNCASE(def.file.name) + conv.module = sccsid : ".c" + dll.name = sccsid : ".dll" + makefile.name = sccsid : ".mak" + + PRINT @( -1 ) + PRINT @( 0, 0 ):"General Calling Interface Administration" : @( 67, 0 ) : "GCI.NTMAKL.B": + PRINT @( 17, 1): 'Generate a GCI Library from GCI Definition File "':def.file.name:'"': + PRINT @( 0, 2 ): STR( "-", 79 ): + PRINT @( 0, 4 ): + PRINT 'This procedure will generate a conversion module in ':conv.module + PRINT 'and generate a ':PROD.NAMEU:' GCI library called ':dll.name:'.' + PRINT 'It will also catalog any subroutines which require cataloging.' + PRINT + PRINT 'Are you sure you want to continue? (Y/N)': + INPUT ans + ans = UPCASE(ans) + IF ans <> "Y" THEN STOP + + * 1. Catalog the GCI subroutines as required (CATLG.GCI) + PERFORM 'RUN APP.PROGS CATLG.GCI ' : def.file.name + IF @SYSTEM.RETURN.CODE < 0 THEN STOP + + * 2. Create a makefile (GCI.NTMAKF.B) + PERFORM 'RUN APP.PROGS GCI.NTMAKF.B ' : def.file.name + IF @SYSTEM.RETURN.CODE < 0 THEN STOP + + * 3. Generate the conversion module (GEN.GCI) + PERFORM 'RUN APP.PROGS GEN.GCI ' : def.file.name + IF @SYSTEM.RETURN.CODE < 0 THEN STOP + + * 4. Run the makefile to build the new library. + PRINT @( -1 ) + PRINT @( 0, 0 ):"General Calling Interface Administration" : @( 68, 0 ) : "GCI.NTMAKL.B": + PRINT @( 17, 1): 'Build a new "':dll.name:'" in ':UV.GCI:"." + PRINT @( 0, 2 ): STR( "-", 79 ): + PRINT @( 0, 4 ): + xcmd = OS.EXEC:' "':UV.GCI:"\gcimake ":makefile.name:" ":dll.name:'"' + * PRINT "xcmd = '":xcmd:"'" + EXECUTE xcmd + + * Done + STOP + + END + diff --git a/Ardent/UV/APP.PROGS/GCI.NTMAP.B b/Ardent/UV/APP.PROGS/GCI.NTMAP.B new file mode 100755 index 00000000..ac8a09fa --- /dev/null +++ b/Ardent/UV/APP.PROGS/GCI.NTMAP.B @@ -0,0 +1,119 @@ +******************************************************************************* +* +* GCI.NTMAP.B - list available GCI libraries/functions +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description......................................... +* 10/14/98 23801 SAP Change copyrights. +* 04/04/96 18026 PGW Module created. +* +******************************************************************************* +* +* This program is run from the uniVerse TCL prompt, and will list the GCI +* libraries loaded into the current uniVerse session. If the optional +* DETAIL keyword is given, it will list the subroutines defined in each +* library as well. +* +* The program is written so that you can catalog it or not, as you wish. +* If you don't catalog it, run it like this: +* +* RUN APP.PROGS GCI.NTMAP.B [DETAIL] +* +* If you would rather catalog it, then use this command to do so: +* +* CATALOG APP.PROGS MAP.GCI GCI.NTMAP.B LOCAL +* +* You can then run the program with the command: +* +* MAP.GCI [DETAIL] +* +******************************************************************************* + +PROGRAM GCI.NTMAP.B + + ID = "@(#)%M% %I%" + + DECLARE GCI GCIlibcount + DECLARE GCI GCIlibinfo + DECLARE GCI GCIsubinfo + + * Examine the command line for the word DETAIL. + cmd = CONVERT(" ", @FM, TRIM(@SENTENCE)) + IF cmd<1> = "RUN" THEN + * If 'RUN APP.PROGS' is present, just remove it + DEL cmd<1> + DEL cmd<1> + END + num.words = DCOUNT(cmd, @FM) + BEGIN CASE + CASE num.words = 1 + show.detail = 0 + + CASE num.words = 2 AND cmd<2> = "DETAIL" + show.detail = 1 + + CASE 1 + PRINT "Usage: RUN APP.PROGS GCI.NTMAP.B [DETAIL]" + STOP + END CASE + + lib.count = GCIlibcount() + + IF lib.count = 0 THEN + PRINT "There are no GCI libraries currently loaded." + STOP + END + + HEADING "GCI libraries currently loaded'G'Page 'PL'" + + subr.no = 0 + total.subr.count = 0 + FOR lib.no = 1 TO lib.count + subr.count = 0 + lib.name = "" + rslt = GCIlibinfo(lib.no, subr.count, lib.name) + IF rslt THEN + PRINT "Cannot get data for library ":lib.no + STOP + END + + IF lib.name = "" THEN lib.name = "[Internal table]" + PRINT lib.name : " (" : subr.count : " subroutines)" + total.subr.count += subr.count + + IF show.detail THEN + PRINT + FOR subr.index = 1 TO subr.count + subr.no += 1 + which.lib = 0 + subr.name = "" + rslt = GCIsubinfo(subr.no, which.lib, subr.name) + IF rslt THEN + PRINT "Cannot get data for subroutine ":subr.no + STOP + END + PRINT SPACE(6) : subr.name + NEXT + PRINT + END + + NEXT + + PRINT + PRINT lib.count : " GCI libraries loaded" + PRINT total.subr.count : " GCI subroutines." + STOP + + END + + diff --git a/Ardent/UV/APP.PROGS/GEN.GCI b/Ardent/UV/APP.PROGS/GEN.GCI new file mode 100755 index 00000000..0a981a18 --- /dev/null +++ b/Ardent/UV/APP.PROGS/GEN.GCI @@ -0,0 +1,930 @@ +***************************************************************************** +* +* Generate gci.c program +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description......................................... +* 10/14/98 23801 SAP Change copyrights. +* 03/27/96 18026 PGW Added MS Windows changes, & file name on cmd line +* 03/17/94 12300 LA Added support for missing PI/open types. +* 02/25/94 12300 LA Changes for PI/open GCI support +* 09/09/93 12299 LA Added setting of gcierrno variable. +* 06/17/91 7938 MAA Prevented redefinition of getpid() on ptx. +* 05/09/91 8254 GMH add section to check return value +* 03/21/91 8134 JWT fix type cast errors in gci.c +* 12/13/90 7784 JWT define NONETCALLS in gci.c +* 06/19/90 6417 JWT add message for subr called as function +* 05/23/90 6933 DTW move include stuff +* 01/30/90 6842 DTW use tmp variables to store pointers +* 01/26/90 6832 DTW move include file stuff, clean up comments +* 10/20/89 6315 DTW add gci.h +* 04/04/89 5895 JSM Add sccs identifiers +* 07/25/88 - - Maintenence log purged at 5.2.1, see release 5.1.10. +* +******************************************************************************* +* +$OPTIONS DEFAULT + +PROGRAM GEN.GCI + + ID = "@(#)%M% %I%" + +$INCLUDE UNIVERSE.INCLUDE FILENAMES.H +* +$INCLUDE UNIVERSE.INCLUDE MACHINE.NAME +* +* Set up equate tokens for those fields in DATA.TYPES which are used in this +* program +* +EQUATE INCONV TO 1 +EQUATE OUTCONV TO 2 +EQUATE CLEANUP TO 3 +EQUATE INC.EXT TO 4 +EQUATE DECL TO 5 +EQUATE INIT TO 7 +* +* ...and the same for the fields in GCI +* +EQUATE LANG TO 1 +EQUATE EXTNAME TO 2 +EQUATE RETVAL TO 3 +EQUATE NUMARGS TO 4 +EQUATE TYPE TO 5 +EQUATE DIR TO 6 +EQUATE MODNAME TO 7 +EQUATE LENGTH TO 9 +EQUATE ROWS TO 10 +EQUATE COLS TO 11 + + prompt "" + CL = @(-4) + CL.ERR = @(0,23):CL + EQU BELL TO CHAR(7) + ERR = CL.ERR:BELL + MSG10=ERR:PROD.NAMEU:' General Calling Interface is not installed.' + @SYSTEM.SET = -1 + + IF OS.TYPE = "UNIX" THEN + * Unix: this program can only be run in uvhome + OPEN '','DATA.TYPES' TO FILE.DATA.TYPES ELSE + PRINT MSG10: + INPUT Q: ; PRINT CL.ERR: ; STOP + END + DEF.FILE.NAME = 'GCI' + SCCSID = 'gci' + MODULE.NAME = 'gci.c' + GCIPATH = UV.GCI : '/gci.c' + END ELSE + * Windows NT: this program can be run in any account + OPENPATH UV.ROOT:'\DATA.TYPES' TO FILE.DATA.TYPES ELSE + PRINT MSG10: + INPUT Q: ; PRINT CL.ERR: ; STOP + END + * You can specify the definition file by putting its name on the + * command line, otherwise it defaults to 'GCI' + CMD = CONVERT(" ", @FM, TRIM(@SENTENCE)) + DEF.FILE.NAME = CMD<4> + IF DEF.FILE.NAME = "" THEN DEF.FILE.NAME = 'GCI' + SCCSID = DOWNCASE(DEF.FILE.NAME) + MODULE.NAME = SCCSID : '.c' + GCIPATH = UV.GCI : '\' : MODULE.NAME + END + + print @( -1 ) + print @( 0, 0 ):"General Calling Interface Administration" : @( 72, 0 ) : "GEN.GCI": + print @( 23, 1): 'Generate a new "':GCIPATH:'"': + print @( 0, 2 ): str( "-", 79 ): + print @( 0, 4 ): + PRINTER RESET +************************************************************************** +* +* This program generates an interface module: gci.c on Unix, .c +* on Windows NT. The interface module is the interface between the BASIC +* run machine and a user's C or F77 subroutines. It is based on +* information contained in the GCI definition file ('GCI' on Unix, user's +* choice of name on Windows NT). The definition file contains information +* for each of the user's subroutines, such as the number of arguments, +* the input and output data types for each argument and the return value +* of the subroutine. Based on this information, the interface between the +* BASIC run machine and the user's routines can be set up to convert data +* to and from a data type recognized by the run machine to the data type +* required by the subroutine. +* +************************************************************************** +* + EQU TAB1 TO CHAR(9) + EQU TAB2 TO CHAR(9):CHAR(9) + EQU TAB3 TO CHAR(9):CHAR(9):CHAR(9) + EQU TAB4 TO CHAR(9):CHAR(9):CHAR(9):CHAR(9) +* + OPEN '',DEF.FILE.NAME TO FILE.GCI ELSE + PRINT 'Cannot open file "':DEF.FILE.NAME:'".' + @SYSTEM.SET = -1 + STOP + END + OPENSEQ GCIPATH TO FILE.GCIPATH THEN + WEOFSEQ FILE.GCIPATH + END ELSE + WRITESEQ '' ON FILE.GCIPATH ELSE PRINT 'Unable to write to ':GCIPATH ; STOP + END +************************************************************************** +* +* Set up interface module header +* +************************************************************************* + LINE='/':STR('*',79) + WRITESEQ LINE ON FILE.GCIPATH ELSE PRINT 'Unable to write to ':GCIPATH ; STOP + LINE='*' + WRITESEQ LINE ON FILE.GCIPATH ELSE PRINT 'Unable to write to ':GCIPATH ; STOP + LINE='*':TAB1:'General Calling Interface' + WRITESEQ LINE ON FILE.GCIPATH ELSE PRINT 'Unable to write to ':GCIPATH ; STOP + LINE='*' + WRITESEQ LINE ON FILE.GCIPATH ELSE PRINT 'Unable to write to ':GCIPATH ; STOP + LINE='*':TAB1:'Module':TAB1:'%M%' + WRITESEQ LINE ON FILE.GCIPATH ELSE PRINT 'Unable to write to ':GCIPATH ; STOP + LINE='*':TAB1:'Version':TAB1:'%I%' + WRITESEQ LINE ON FILE.GCIPATH ELSE PRINT 'Unable to write to ':GCIPATH ; STOP + LINE='*':TAB1:'Date':TAB1:'%H%' + WRITESEQ LINE ON FILE.GCIPATH ELSE PRINT 'Unable to write to ':GCIPATH ; STOP + LINE='*' + WRITESEQ LINE ON FILE.GCIPATH ELSE PRINT 'Unable to write to ':GCIPATH ; STOP + LINE='*':TAB1:'(c) Copyright 1998 Ardent Software, Inc.' + WRITESEQ LINE ON FILE.GCIPATH ELSE PRINT 'Unable to write to ':GCIPATH ; STOP + LINE='*':TAB1:'All rights reserved.' + WRITESEQ LINE ON FILE.GCIPATH ELSE PRINT 'Unable to write to ':GCIPATH ; STOP + LINE='*' + WRITESEQ LINE ON FILE.GCIPATH ELSE PRINT 'Unable to write to ':GCIPATH ; STOP + LINE=STR('*',79):'/' + WRITESEQ LINE ON FILE.GCIPATH ELSE PRINT 'Unable to write to ':GCIPATH ; STOP +************************************************************************** +* +* Setup include files and external definitions +* +************************************************************************* + LINE='#define __MODULE__ "' : MODULE.NAME : '"' + WRITESEQ LINE ON FILE.GCIPATH ELSE PRINT 'Unable to write to ':GCIPATH ; STOP + LINE='#define __SCCSID__ "' : SCCSID : '"' + WRITESEQ LINE ON FILE.GCIPATH ELSE PRINT 'Unable to write to ':GCIPATH ; STOP + LINE='' + WRITESEQ LINE ON FILE.GCIPATH ELSE PRINT 'Unable to write to ':GCIPATH ; STOP + LINE='#define':TAB1:'NONETCALLS' + WRITESEQ LINE ON FILE.GCIPATH ELSE PRINT 'Unable to write to ':GCIPATH ; STOP + IF OS.TYPE # "UNIX" THEN + * Windows NT or 95: UV globals are exported as pointers + LINE='#define':TAB1:'gcierrno':TAB1:'(*gcierrno)' + WRITESEQ LINE ON FILE.GCIPATH ELSE PRINT 'Unable to write to ':GCIPATH ; STOP + LINE='#define':TAB1:'ATvar':TAB2:'(*ATvar)' + WRITESEQ LINE ON FILE.GCIPATH ELSE PRINT 'Unable to write to ':GCIPATH ; STOP + END + LINE='#include':TAB1:'' + WRITESEQ LINE ON FILE.GCIPATH ELSE PRINT 'Unable to write to ':GCIPATH ; STOP + IF PTX THEN + LINE='#define':TAB1:'INKERNEL' + WRITESEQ LINE ON FILE.GCIPATH ELSE PRINT 'Unable to write to ':GCIPATH ; STOP + LINE='#include':TAB1:'' + WRITESEQ LINE ON FILE.GCIPATH ELSE PRINT 'Unable to write to ':GCIPATH ; STOP + LINE='#undef':TAB1:'INKERNEL' + WRITESEQ LINE ON FILE.GCIPATH ELSE PRINT 'Unable to write to ':GCIPATH ; STOP + END + LINE='#include':TAB1:'' + WRITESEQ LINE ON FILE.GCIPATH ELSE PRINT 'Unable to write to ':GCIPATH ; STOP + LINE='#include':TAB1:'ERRNO_H' + WRITESEQ LINE ON FILE.GCIPATH ELSE PRINT 'Unable to write to ':GCIPATH ; STOP + LINE='#include':TAB1:'' + WRITESEQ LINE ON FILE.GCIPATH ELSE PRINT 'Unable to write to ':GCIPATH ; STOP + LINE='' + WRITESEQ LINE ON FILE.GCIPATH ELSE PRINT 'Unable to write to ':GCIPATH ; STOP + LINE='extern int gcierrno;' + WRITESEQ LINE ON FILE.GCIPATH ELSE PRINT 'Unable to write to ':GCIPATH ; STOP + LINE='' + WRITESEQ LINE ON FILE.GCIPATH ELSE PRINT 'Unable to write to ':GCIPATH ; STOP +* + SSELECT FILE.GCI TO 1 + NO.GCIS=@SELECTED + GCI.FUNCTS='' + EXT.DEFS='' + INC.FILES='' + I=1 +************************************************************************* +* +* Must make a preliminary pass thru the GCI file, to eliminate duplicate +* definitions of function definitions and include files. +* +************************************************************************* +10* + READNEXT FUNCT FROM 1 ELSE GOTO 90 + READ REC FROM FILE.GCI,FUNCT ELSE + PRINT 'Unable to read ':FUNCT:' from GCI definition file.' + STOP + END +* check field 3 for includes/defines/externs + TYPES.KEY=REC:'.':REC + READ TYPES.REC FROM FILE.DATA.TYPES,TYPES.KEY ELSE + PRINT 'Unable to read ':TYPES.KEY:' from DATA.TYPES file.' + STOP + END +* +* add specific #include file, #define statements for each routine +* + Y=1 + LOOP + WHILE TYPES.REC#'' DO + TYPES.REC=TRIM(TYPES.REC) + EXT.VAL=''; INC.VAL='' + IF INDEX(TYPES.REC,' ',1)=0 THEN +* include file values does not have a space - assume its an include file pathname only + INC.VAL='#include "':TYPES.REC:'"' + END ELSE + IF TYPES.REC[1,6]='extern' THEN +* check for include file name or an external definition + EXT.VAL=TYPES.REC + END ELSE +* assume its an include file or define statement + INC.VAL=TYPES.REC + END + END + IF INC.VAL#'' THEN + LOCATE INC.VAL IN INC.FILES<1> SETTING VAL ELSE + INC.FILES<-1>=INC.VAL + END + END + IF EXT.VAL#'' THEN + LOCATE EXT.VAL IN EXT.DEFS<1> SETTING VAL ELSE + EXT.DEFS<-1>=EXT.VAL + END + END + Y+=1 + REPEAT +* input arguments to subroutine must be defined as externs + NUM.ARGS=REC + FOR X = 1 TO NUM.ARGS + TYPES.KEY=REC:'.':REC + READ TYPES.REC FROM FILE.DATA.TYPES,TYPES.KEY ELSE PRINT 'Unable to read ':TYPES.KEY:' from DATA.TYPES file.'; STOP + IF REC='I' OR REC='B' THEN + IF TYPES.REC='' THEN PRINT 'Data type ':TYPES.KEY:' does not have an input conversion in the DATA.TYPES file.'; STOP + TYPES.REC=TRIM(TYPES.REC) + IF INDEX(TYPES.REC,' ',1)=0 AND TYPES.REC#'num_load' THEN +* input conversion value does not have a space - assume its not a simple function name +* also - don't duplicate num_load + EXT.VAL = 'extern ':REC:' ':TYPES.REC:'();' + LOCATE EXT.VAL IN EXT.DEFS SETTING VAL ELSE + EXT.DEFS<-1>=EXT.VAL + END + END + END +* +* add specific #include file, #define statements for each routine +* + Y=1 + LOOP + WHILE TYPES.REC#'' DO + TYPES.REC=TRIM(TYPES.REC) + EXT.VAL=''; INC.VAL='' + IF INDEX(TYPES.REC,' ',1)=0 THEN +* include file values does not have a space - assume its an include file pathname only + INC.VAL='#include "':TYPES.REC:'"' + END ELSE + IF TYPES.REC[1,6]='extern' THEN +* check for include file name or an external definition + EXT.VAL=TYPES.REC + END ELSE +* assume its an include file or define statement + INC.VAL=TYPES.REC + END + END + IF INC.VAL#'' THEN + LOCATE INC.VAL IN INC.FILES<1> SETTING VAL ELSE + INC.FILES<-1>=INC.VAL + END + END + IF EXT.VAL#'' THEN + LOCATE EXT.VAL IN EXT.DEFS<1> SETTING VAL ELSE + EXT.DEFS<-1>=EXT.VAL + END + END + Y+=1 + REPEAT + NEXT X +* save function name for gcinames table + LOCATE FUNCT IN GCI.FUNCTS<1> SETTING VAL ELSE + GCI.FUNCTS<-1>=FUNCT + END +* actual unix name of function must be defined as an extern + REC=TRIM(REC) + REC=TRIM(REC) + * For Windows NT, suppress the 'extern' if it's a Win32 API + IF OS.TYPE = "UNIX" OR REC # "Win32" THEN + EXT.VAL='extern ':REC:' ':REC:'();' + LOCATE EXT.VAL IN EXT.DEFS<1> SETTING VAL ELSE + EXT.DEFS<-1>=EXT.VAL + END + END + GOTO 10 +90* +************************************************************************** +* +* Setup user's include files +* +************************************************************************* + X=1 + LOOP + WHILE INC.FILES#'' DO + LINE=INC.FILES + WRITESEQ LINE ON FILE.GCIPATH ELSE PRINT 'Unable to write to ':GCIPATH;STOP + X+=1 + REPEAT +************************************************************************* +* +* Setup external function definitions +* +************************************************************************* + IF EXT.DEFS#'' THEN + LINE='' + WRITESEQ LINE ON FILE.GCIPATH ELSE PRINT 'Unable to write to ':GCIPATH ; STOP + END + X=1 + LOOP + WHILE EXT.DEFS#'' DO + LINE=EXT.DEFS + WRITESEQ LINE ON FILE.GCIPATH ELSE PRINT 'Unable to write to ':GCIPATH ; STOP + X+=1 + REPEAT +************************************************************************** +* +* Setup gcinames table and maxgcis +* +************************************************************************** + LINE='' + WRITESEQ LINE ON FILE.GCIPATH ELSE PRINT 'Unable to write to ':GCIPATH ; STOP + LINE='STRING':TAB1:'gcinames[] = {' + WRITESEQ LINE ON FILE.GCIPATH ELSE PRINT 'Unable to write to ':GCIPATH ; STOP + X=1 + LOOP + WHILE GCI.FUNCTS#'' DO + FUNCT.NAME=GCI.FUNCTS + LINE=TAB3:' { ':LEN(FUNCT.NAME):', (uchar*) "':FUNCT.NAME:'"}, ' + WRITESEQ LINE ON FILE.GCIPATH ELSE PRINT 'Unable to write to ':GCIPATH ; STOP + X+=1 + REPEAT + LINE=TAB2:' };' + WRITESEQ LINE ON FILE.GCIPATH ELSE PRINT 'Unable to write to ':GCIPATH ; STOP +* + LINE='' + WRITESEQ LINE ON FILE.GCIPATH ELSE PRINT 'Unable to write to ':GCIPATH ; STOP + LINE='int':TAB1:'maxgcis = ':NO.GCIS:';' + WRITESEQ LINE ON FILE.GCIPATH ELSE PRINT 'Unable to write to ':GCIPATH ; STOP + LINE='' + WRITESEQ LINE ON FILE.GCIPATH ELSE PRINT 'Unable to write to ':GCIPATH ; STOP + LINE='#undef':TAB1:'G_DATUM' + WRITESEQ LINE ON FILE.GCIPATH ELSE PRINT 'Unable to write to ':GCIPATH ; STOP + LINE='#define':TAB1:'G_DATUM(dest, addres) dest = indata[addres]' + WRITESEQ LINE ON FILE.GCIPATH ELSE PRINT 'Unable to write to ':GCIPATH ; STOP + LINE='' + WRITESEQ LINE ON FILE.GCIPATH ELSE PRINT 'Unable to write to ':GCIPATH ; STOP +************************************************************************* +* +* Setup beginning of the actual interface functions +* +************************************************************************* + IF OS.TYPE # "UNIX" THEN + * Windows NT uses an extra function + LINE='void':TAB1:'InitGCI(max_ptr, names_ptr)' + WRITESEQ LINE ON FILE.GCIPATH ELSE PRINT 'Unable to write to ':GCIPATH ; STOP + LINE='int':TAB1:'*max_ptr;' + WRITESEQ LINE ON FILE.GCIPATH ELSE PRINT 'Unable to write to ':GCIPATH ; STOP + LINE='STRING':TAB1:'**names_ptr;' + WRITESEQ LINE ON FILE.GCIPATH ELSE PRINT 'Unable to write to ':GCIPATH ; STOP + LINE='{' + WRITESEQ LINE ON FILE.GCIPATH ELSE PRINT 'Unable to write to ':GCIPATH ; STOP + LINE=TAB1:'*max_ptr = maxgcis;' + WRITESEQ LINE ON FILE.GCIPATH ELSE PRINT 'Unable to write to ':GCIPATH ; STOP + LINE=TAB1:'*names_ptr = gcinames;' + WRITESEQ LINE ON FILE.GCIPATH ELSE PRINT 'Unable to write to ':GCIPATH ; STOP + LINE='}' + WRITESEQ LINE ON FILE.GCIPATH ELSE PRINT 'Unable to write to ':GCIPATH ; STOP + LINE='' + WRITESEQ LINE ON FILE.GCIPATH ELSE PRINT 'Unable to write to ':GCIPATH ; STOP + END + + * Each OS uses a slightly different function header + IF OS.TYPE = "UNIX" THEN + LINE = 'gci' + END ELSE + LINE = 'void':TAB1:'CallGCI' + END + LINE := '(functnum,flag,indata,no_args)' + WRITESEQ LINE ON FILE.GCIPATH ELSE PRINT 'Unable to write to ':GCIPATH ; STOP + LINE='int':TAB1:'functnum;' + WRITESEQ LINE ON FILE.GCIPATH ELSE PRINT 'Unable to write to ':GCIPATH ; STOP + LINE='int':TAB1:'flag;' + WRITESEQ LINE ON FILE.GCIPATH ELSE PRINT 'Unable to write to ':GCIPATH ; STOP + LINE='DATUM':TAB1:'**indata;' + WRITESEQ LINE ON FILE.GCIPATH ELSE PRINT 'Unable to write to ':GCIPATH ; STOP + LINE='int':TAB1:'no_args;' + WRITESEQ LINE ON FILE.GCIPATH ELSE PRINT 'Unable to write to ':GCIPATH ; STOP + LINE='{' + WRITESEQ LINE ON FILE.GCIPATH ELSE PRINT 'Unable to write to ':GCIPATH ; STOP + LINE=TAB1:'int':TAB1:'p = 0;' + WRITESEQ LINE ON FILE.GCIPATH ELSE PRINT 'Unable to write to ':GCIPATH ; STOP + LINE='' + WRITESEQ LINE ON FILE.GCIPATH ELSE PRINT 'Unable to write to ':GCIPATH ; STOP + LINE=TAB1:'/* Set @SYSTEM.RETURN.CODE to 0 */' + WRITESEQ LINE ON FILE.GCIPATH ELSE PRINT 'Unable to write to ':GCIPATH ; STOP + LINE='' + WRITESEQ LINE ON FILE.GCIPATH ELSE PRINT 'Unable to write to ':GCIPATH ; STOP + LINE=TAB1:'rel_var(&at_SYSTEM_RETURN_CODE);' + WRITESEQ LINE ON FILE.GCIPATH ELSE PRINT 'Unable to write to ':GCIPATH ; STOP + LINE=TAB1:'num_store(0.0, &at_SYSTEM_RETURN_CODE);' + WRITESEQ LINE ON FILE.GCIPATH ELSE PRINT 'Unable to write to ':GCIPATH ; STOP + LINE='' + WRITESEQ LINE ON FILE.GCIPATH ELSE PRINT 'Unable to write to ':GCIPATH ; STOP + LINE=TAB1:'switch(functnum)' + WRITESEQ LINE ON FILE.GCIPATH ELSE PRINT 'Unable to write to ':GCIPATH ; STOP + LINE=TAB1:'{' + WRITESEQ LINE ON FILE.GCIPATH ELSE PRINT 'Unable to write to ':GCIPATH ; STOP +* + SSELECT FILE.GCI TO 1 + NO.GCIS=@SELECTED +100* + READNEXT FUNCT FROM 1 ELSE GOTO 9000 + READ REC FROM FILE.GCI,FUNCT ELSE PRINT 'Unable to read ':FUNCT:' from GCI file.'; STOP +************************************************************************** +* +* Setup beginning of each function interface +* +************************************************************************** + LINE=TAB2:'case ':I:':':TAB2:'/*':TAB1:FUNCT:' */' + WRITESEQ LINE ON FILE.GCIPATH ELSE PRINT 'Unable to write to ':GCIPATH ; STOP + LINE=TAB2:'{' + WRITESEQ LINE ON FILE.GCIPATH ELSE PRINT 'Unable to write to ':GCIPATH ; STOP +************************************************************************** +* +* Setup variable definitions +* +************************************************************************** + NUM.ARGS=REC + +* Now process arguments + + FOR X=1 TO NUM.ARGS + + LINE=TAB3:'DATUM':TAB1:'*var':X:';' + WRITESEQ LINE ON FILE.GCIPATH ELSE PRINT 'Unable to write to ':GCIPATH ; STOP + TYPES.KEY=REC:'.':REC + READ TYPES.REC FROM FILE.DATA.TYPES,TYPES.KEY ELSE PRINT 'Unable to read ':TYPES.KEY:' from DATA.TYPES file.'; STOP +* data type has a declaration - must perform substitution for this argument + IF TYPES.REC#'' THEN + ARG.VAL=CHANGE(TYPES.REC,'$','arg':X) + ARG.VAL=CHANGE(ARG.VAL, '@',REC) + LINE=TAB3:ARG.VAL + END ELSE +* check for array - if it is an array, we only need to declare a pointer as +* the memory for the array is allocated by the load routine + IF REC THEN + LINE = TAB3:REC:TAB1:'*arg':X:';' + END ELSE + LINE=TAB3:REC:TAB1:'arg':X:';' + END + END + WRITESEQ LINE ON FILE.GCIPATH ELSE PRINT 'Unable to write to ':GCIPATH ; STOP +* declare variables to hold rows & cols if appropriate and also a type variable +* for the array + IF REC THEN + LINE = TAB3:'int arg':X:'rows = ':REC:';' + WRITESEQ LINE ON FILE.GCIPATH ELSE PRINT 'Unable to write to ':GCIPATH ; STOP + IF REC THEN + LINE = TAB3:'int arg':X:'cols = ':REC:';' + END ELSE + LINE = TAB3:'int arg':X:'cols = 1;' + END + WRITESEQ LINE ON FILE.GCIPATH ELSE PRINT 'Unable to write to ':GCIPATH ; STOP + LINE = TAB3:'int arg':X:'type = ' + BEGIN CASE + CASE REC = "short" or REC = "integer2" or REC = "logical" + LINE := '1;':TAB2:'/* array type is short */' + CASE REC = "long" or REC = "integer4" + LINE := '2;':TAB2:'/* array type is long */' + CASE REC = "int" + LINE := '3;':TAB2:'/* array type is int */' + CASE REC = "float" or REC = "real4" + LINE := '4;':TAB2:'/* array type is float */' + CASE REC = "double" or REC = "real8" + LINE := '5;':TAB2:'/* array type is double */' + END CASE + WRITESEQ LINE ON FILE.GCIPATH ELSE PRINT 'Unable to write to ':GCIPATH ; STOP + END + + IF REC NE 'I' AND TYPES.REC = '' AND NOT(REC) THEN +* set up temporary variable to hold input pointer for cleanup after output + IF TYPES.REC#'' THEN + ARG.VAL=CHANGE(TYPES.REC,'$','tmparg':X) + ARG.VAL=CHANGE(ARG.VAL, '@',REC) + LINE=TAB3:ARG.VAL + END ELSE + LINE=TAB3:REC:TAB1:'tmparg':X:';' + END + WRITESEQ LINE ON FILE.GCIPATH ELSE PRINT 'Unable to write to ':GCIPATH ; STOP + END + NEXT X + RET.VAL=TRIM(UPCASE(REC)) + IF RET.VAL='VOID' THEN + +* If defined as a subroutine in the GCI (ie. return value of 'void'), then +* can either be called as a subroutine eg. +* +* CALL @FRED(ARG1, ARG2, ARG3) +* +* or, for PI/open compatibility, it can also be called as a function eg. +* +* DEFFUN FRED.FUNC(A,B) CALLING "$FRED" +* ARG1 = FRED(ARG2, ARG3) +* +* To do this, check if flag is set (ie. called as a function) and treat the +* return value as the first argument to the subroutine call + + LINE='' + WRITESEQ LINE ON FILE.GCIPATH ELSE PRINT 'Unable to write to ':GCIPATH ; STOP + IF NUM.ARGS > 0 THEN + LINE=TAB3:'if(flag)':TAB1:'/* Subroutine called as a function */' + WRITESEQ LINE ON FILE.GCIPATH ELSE PRINT 'Unable to write to ':GCIPATH ; STOP + LINE=TAB3:'{':TAB1:'if(no_args != ':NUM.ARGS-1:') fatal(46018);' + WRITESEQ LINE ON FILE.GCIPATH ELSE PRINT 'Unable to write to ':GCIPATH ; STOP + +* Note: For the case where it is being called as a function, the return value +* (ie. argument #1) will be last on the stack, not first + + FOR X=2 TO NUM.ARGS + LINE=TAB4:'DATUM_GET(var':X:',p++);' + WRITESEQ LINE ON FILE.GCIPATH ELSE PRINT 'Unable to write to ':GCIPATH ; STOP + NEXT X + LINE=TAB4:'DATUM_GET(var1,p++);' + WRITESEQ LINE ON FILE.GCIPATH ELSE PRINT 'Unable to write to ':GCIPATH ; STOP + LINE=TAB3:'} else':TAB2:'/* Subroutine called as a subroutine */' + WRITESEQ LINE ON FILE.GCIPATH ELSE PRINT 'Unable to write to ':GCIPATH ; STOP + LINE=TAB3:'{':TAB1:'if(no_args != ':NUM.ARGS:') fatal(46018);' + WRITESEQ LINE ON FILE.GCIPATH ELSE PRINT 'Unable to write to ':GCIPATH ; STOP + +* For the case where it is being called as a subroutine, order of arguments +* is as expected. + + FOR X=1 TO NUM.ARGS + LINE=TAB4:'DATUM_GET(var':X:',p++);' + WRITESEQ LINE ON FILE.GCIPATH ELSE PRINT 'Unable to write to ':GCIPATH ; STOP + NEXT X + LINE=TAB3:'}' + WRITESEQ LINE ON FILE.GCIPATH ELSE PRINT 'Unable to write to ':GCIPATH ; STOP + END ELSE + LINE=TAB3:'if(no_args != ':NUM.ARGS:') fatal(46018);' + WRITESEQ LINE ON FILE.GCIPATH ELSE PRINT 'Unable to write to ':GCIPATH ; STOP + END + END ELSE + +* Function + + LINE=TAB3:'DATUM':TAB1:'*res_var;' + WRITESEQ LINE ON FILE.GCIPATH ELSE PRINT 'Unable to write to ':GCIPATH ; STOP + LINE=TAB3:REC:TAB1:'result;' + WRITESEQ LINE ON FILE.GCIPATH ELSE PRINT 'Unable to write to ':GCIPATH ; STOP + +* If defined as a CATALOGED function in the GCI (ie. return value not 'void'), +* then can either be called as a function eg. +* +* DEFFUN FRED.FUNC(A,B) CALLING "$FRED" +* RET.VAL = FRED(ARG1, ARG2) +* +* or, for PI/open compatibility, it can also be called as a subroutine eg. +* +* CALL @FRED(RET.VAL, ARG2, ARG3) +* +* To do this, check if flag is not set (ie. called as a subroutine) and +* treat first argument of the subroutine as the return value. +* +* NOTE: This does not apply to non-cataloged functions (those which must +* be called using DECLARE GCI) + + PREFIX = FUNCT[1,1] + IF PREFIX = "$" OR PREFIX = "!" OR PREFIX = "*" OR PREFIX = "-" THEN + LINE='' + WRITESEQ LINE ON FILE.GCIPATH ELSE PRINT 'Unable to write to ':GCIPATH ; STOP + LINE = TAB3:'if (flag)':TAB1:'/* Function called as a function */' + WRITESEQ LINE ON FILE.GCIPATH ELSE PRINT 'Unable to write to ':GCIPATH ; STOP + LINE = TAB3:'{':TAB1:'if(no_args != ':NUM.ARGS:') fatal(46018);' + WRITESEQ LINE ON FILE.GCIPATH ELSE PRINT 'Unable to write to ':GCIPATH ; STOP + FOR X=1 TO NUM.ARGS + LINE=TAB4:'DATUM_GET(var':X:',p++);' + WRITESEQ LINE ON FILE.GCIPATH ELSE PRINT 'Unable to write to ':GCIPATH ; STOP + NEXT X + LINE=TAB4:'DATUM_GET(res_var,p++);' + WRITESEQ LINE ON FILE.GCIPATH ELSE PRINT 'Unable to write to ':GCIPATH ; STOP + LINE=TAB3:'} else':TAB2:'/* Function called as a subroutine */' + WRITESEQ LINE ON FILE.GCIPATH ELSE PRINT 'Unable to write to ':GCIPATH ; STOP + LINE=TAB3:'{':TAB1:'if(no_args != ':NUM.ARGS + 1:') fatal(46018);' + WRITESEQ LINE ON FILE.GCIPATH ELSE PRINT 'Unable to write to ':GCIPATH ; STOP + LINE=TAB4:'DATUM_GET(res_var,p++);' + WRITESEQ LINE ON FILE.GCIPATH ELSE PRINT 'Unable to write to ':GCIPATH ; STOP + FOR X=1 TO NUM.ARGS + LINE=TAB4:'DATUM_GET(var':X:',p++);' + WRITESEQ LINE ON FILE.GCIPATH ELSE PRINT 'Unable to write to ':GCIPATH ; STOP + NEXT X + LINE=TAB3:'}' + WRITESEQ LINE ON FILE.GCIPATH ELSE PRINT 'Unable to write to ':GCIPATH ; STOP + END ELSE + +* Not cataloged + + LINE='' + WRITESEQ LINE ON FILE.GCIPATH ELSE PRINT 'Unable to write to ':GCIPATH ; STOP + LINE=TAB3:'if(no_args != ':NUM.ARGS:')' + WRITESEQ LINE ON FILE.GCIPATH ELSE PRINT 'Unable to write to ':GCIPATH ; STOP + LINE=TAB3:'{':TAB1:'fatal(46018);' + WRITESEQ LINE ON FILE.GCIPATH ELSE PRINT 'Unable to write to ':GCIPATH ; STOP + LINE=TAB3:'}' + WRITESEQ LINE ON FILE.GCIPATH ELSE PRINT 'Unable to write to ':GCIPATH ; STOP +************************************************************************** +* +* Setup DATUM_GETS for each argument +* +************************************************************************** + IF NUM.ARGS THEN + LINE='' + WRITESEQ LINE ON FILE.GCIPATH ELSE PRINT 'Unable to write to ':GCIPATH ; STOP + END + FOR X=1 TO NUM.ARGS + LINE=TAB3:'DATUM_GET(var':X:',p++);' + WRITESEQ LINE ON FILE.GCIPATH ELSE PRINT 'Unable to write to ':GCIPATH ; STOP + NEXT X + LINE=TAB3:'DATUM_GET(res_var,p++);' + WRITESEQ LINE ON FILE.GCIPATH ELSE PRINT 'Unable to write to ':GCIPATH ; STOP + END + END +************************************************************************** +* +* Setup input conversions (ie - convert from DATUM to proper data type) +* +************************************************************************** + IF NUM.ARGS THEN + LINE='' + WRITESEQ LINE ON FILE.GCIPATH ELSE PRINT 'Unable to write to ':GCIPATH ; STOP + END + FOR X = 1 TO NUM.ARGS + TYPES.KEY=REC:'.':REC + READ TYPES.REC FROM FILE.DATA.TYPES,TYPES.KEY ELSE PRINT 'Unable to read ':TYPES.KEY:' from DATA.TYPES file.'; STOP + + IF REC='I' OR REC='B' THEN + IF REC THEN ;* Processing an array + LINE=TAB3:'arg':X:' = (':REC:' *)array_load(var':X:', arg':X:'rows, arg':X:'cols, arg':X:'type);' + END ELSE + IF TYPES.REC='' THEN PRINT 'Data type ':TYPES.KEY:' does not have an input conversion in the DATA.TYPES file.'; STOP + IF INDEX(TYPES.REC,'$',1) THEN +* input conversion value has a $ - must perform substitutions + NEW.VAL=CHANGE(TYPES.REC,'$','arg':X) + NEW.VAL=CHANGE(NEW.VAL,'@','var':X) + LINE=TAB3:NEW.VAL + END ELSE + IF OS.TYPE = "UNIX" THEN + LINE=TAB3:'arg':X:' = ':TYPES.REC:'(var':X:');' + END ELSE + * Windows NT - num_load needs a cast + LINE = TAB3:'arg':X:' = ' + IF TYPES.REC = "num_load" THEN + LINE := '(':REC:')' + END + LINE := TYPES.REC:'(var':X:');' + END + END + END + WRITESEQ LINE ON FILE.GCIPATH ELSE PRINT 'Unable to write to ':GCIPATH ; STOP + END ELSE + +* Some types need memory allocating by the gci, so call the initialisation +* routine to do this if they are output only (if they have an init routine) + + IF REC THEN ;* Processing an array + LINE=TAB3:'arg':X:' = (':REC:' *)array_init(var':X:', arg':X:'rows, arg':X:'cols, arg':X:'type);' + WRITESEQ LINE ON FILE.GCIPATH ELSE PRINT 'Unable to write to ':GCIPATH ; STOP + END ELSE + IF TYPES.REC NE '' THEN + IF INDEX(TYPES.REC,'$',1) THEN +* initialisation value has a $ - must perform substitutions + NEW.VAL=CHANGE(TYPES.REC,'$','arg':X) + NEW.VAL=CHANGE(NEW.VAL,'@','var':X) + LINE=TAB3:NEW.VAL + END ELSE + LINE=TAB3:'arg':X:' = ':TYPES.REC:'(var':X:');' + END + WRITESEQ LINE ON FILE.GCIPATH ELSE PRINT 'Unable to write to ':GCIPATH ; STOP + END + END + END + IF REC NE 'I' AND TYPES.REC = '' AND NOT(REC) THEN + LINE=TAB3:'tmparg':X:' = ':'arg':X:';' + WRITESEQ LINE ON FILE.GCIPATH ELSE PRINT 'Unable to write to ':GCIPATH ; STOP + END + NEXT X +************************************************************************** +* +* Setup call to user function +* +************************************************************************** + LINE='' + WRITESEQ LINE ON FILE.GCIPATH ELSE PRINT 'Unable to write to ':GCIPATH ; STOP + IF RET.VAL='VOID' THEN + LINE=TAB3:'(void)' + END ELSE + LINE=TAB3:'result = ' + END + LINE=LINE:REC:'(' + FOR X=1 TO NUM.ARGS + TYPES.KEY=REC:'.':REC + READ TYPES.REC FROM FILE.DATA.TYPES,TYPES.KEY ELSE PRINT 'Unable to read ':TYPES.KEY:' from DATA.TYPES file.'; STOP + IF REC THEN +* If array, don't pass the address of it as it is already a pointer + ARGVAL='arg':X + END ELSE + IF REC = "f77" THEN + IF REC = "character" THEN + ARGVAL='arg':X + END ELSE + ARGVAL='&arg':X + END + END ELSE + IF (REC='O' OR REC='B') AND TYPES.REC = '' THEN + ARGVAL='&arg':X + END ELSE + ARGVAL='arg':X + END + END + END + LINE=LINE:ARGVAL + IF X = "f77" THEN + FOR X = 1 TO NUM.ARGS + IF REC THEN + ARGVAL='arg':X:'rows * arg':X:'cols' + LINE=LINE:',':ARGVAL + END ELSE + IF REC = "character" THEN + ARGVAL='len_arg':X + LINE=LINE:',':ARGVAL + END + END + NEXT X + END + LINE=LINE:');' + WRITESEQ LINE ON FILE.GCIPATH ELSE PRINT 'Unable to write to ':GCIPATH ; STOP +************************************************************************** +* +* Setup storing gcierrno +* +************************************************************************** + LINE='' + WRITESEQ LINE ON FILE.GCIPATH ELSE PRINT 'Unable to write to ':GCIPATH ; STOP + LINE=TAB3:'gcierrno = errno;' + WRITESEQ LINE ON FILE.GCIPATH ELSE PRINT 'Unable to write to ':GCIPATH ; STOP +************************************************************************** +* +* Setup output conversions (ie - convert from other data type to DATUM) +* +************************************************************************** + IF NUM.ARGS THEN + LINE='' + WRITESEQ LINE ON FILE.GCIPATH ELSE PRINT 'Unable to write to ':GCIPATH ; STOP + END + FOR X=1 TO NUM.ARGS + TYPES.KEY=REC:'.':REC + READ TYPES.REC FROM FILE.DATA.TYPES,TYPES.KEY ELSE PRINT 'Unable to read ':TYPES.KEY:' from DATA.TYPES file.'; STOP + IF REC='O' OR REC='B' THEN + IF REC THEN ;* Array - don't release DATUMs + LINE=TAB3:'array_store(arg':X:',var':X:',arg':X:'rows,arg':X:'cols, arg':X:'type);' + END ELSE + IF TYPES.REC='' THEN PRINT 'Data type ':TYPES.KEY:' does not have an output conversion in the DATA.TYPES file.'; STOP + LINE=TAB3:'rel_var(var':X:');' + WRITESEQ LINE ON FILE.GCIPATH ELSE PRINT 'Unable to write to ':GCIPATH ; STOP + IF INDEX(TYPES.REC,'$',1) THEN +* output conversion value has a $ - must perform substitutions + NEW.VAL=CHANGE(TYPES.REC,'$','arg':X) + NEW.VAL=CHANGE(NEW.VAL,'@','var':X) + LINE=TAB3:NEW.VAL + END ELSE + LINE=TAB3:TYPES.REC:'(arg':X:',var':X:');' + END + END + WRITESEQ LINE ON FILE.GCIPATH ELSE PRINT 'Unable to write to ':GCIPATH ; STOP + IF TYPES.REC = '' AND NOT(REC) THEN + LINE=TAB3:'arg':X:' = ':'tmparg':X:';' + WRITESEQ LINE ON FILE.GCIPATH ELSE PRINT 'Unable to write to ':GCIPATH ; STOP + END + END +************************************************************************** +* +* Setup return value +* +************************************************************************** + NEXT X + IF RET.VAL#'VOID' THEN + LINE='' + WRITESEQ LINE ON FILE.GCIPATH ELSE PRINT 'Unable to write to ':GCIPATH ; STOP + TYPES.KEY=REC:'.':REC + READ TYPES.REC FROM FILE.DATA.TYPES,TYPES.KEY ELSE PRINT 'Unable to read ':TYPES.KEY:' from DATA.TYPES file.'; STOP + IF TYPES.REC='' THEN PRINT 'Data type ':TYPES.KEY:' does not have an output conversion in the DATA.TYPES file.'; STOP + LINE=TAB3:'rel_var(res_var);' + WRITESEQ LINE ON FILE.GCIPATH ELSE PRINT 'Unable to write to ':GCIPATH ; STOP + IF INDEX(TYPES.REC,'$',1) THEN +* output conversion value has a $ - must perform substitutions + NEW.VAL=CHANGE(TYPES.REC,'$','result') + NEW.VAL=CHANGE(NEW.VAL,'@','res_var') + LINE=TAB3:NEW.VAL + END ELSE + LINE=TAB3:TYPES.REC:'(result,res_var);' + END + WRITESEQ LINE ON FILE.GCIPATH ELSE PRINT 'Unable to write to ':GCIPATH ; STOP + END +************************************************************************** +* +* Setup cleanup routines +* +************************************************************************** + IF NUM.ARGS THEN + LINE='' + WRITESEQ LINE ON FILE.GCIPATH ELSE PRINT 'Unable to write to ':GCIPATH ; STOP + END + FOR X = 1 TO NUM.ARGS + TYPES.KEY=REC:'.':REC + READ TYPES.REC FROM FILE.DATA.TYPES,TYPES.KEY ELSE PRINT 'Unable to read ':TYPES.KEY:' from DATA.TYPES file.'; STOP + IF REC THEN ;* Free array memory + LINE=TAB3:'free(arg':X:');' + WRITESEQ LINE ON FILE.GCIPATH ELSE PRINT 'Unable to write to ':GCIPATH ; STOP + END ELSE + IF REC = 'I' OR REC='B' OR TYPES.REC THEN + IF TYPES.REC#'' THEN + IF INDEX(TYPES.REC,'$',1) THEN +* cleanup routine value has a $ - must perform substitutions + NEW.VAL=CHANGE(TYPES.REC,'$','arg':X) + NEW.VAL=CHANGE(NEW.VAL,'@','var':X) + LINE=TAB3:NEW.VAL + END ELSE + LINE=TAB3:TYPES.REC:'(arg':X:');' + END + WRITESEQ LINE ON FILE.GCIPATH ELSE PRINT 'Unable to write to ':GCIPATH ; STOP + END + END + END + NEXT X +************************************************************************** +* +* Setup end of function interface +* +************************************************************************** + LINE='' + WRITESEQ LINE ON FILE.GCIPATH ELSE PRINT 'Unable to write to ':GCIPATH ; STOP + LINE=TAB3:'break;' + WRITESEQ LINE ON FILE.GCIPATH ELSE PRINT 'Unable to write to ':GCIPATH ; STOP + LINE=TAB2:'}' + WRITESEQ LINE ON FILE.GCIPATH ELSE PRINT 'Unable to write to ':GCIPATH ; STOP +************************************************************************** +* +* End of each function interface +* +************************************************************************** + I+=1 + GOTO 100 +9000* +************************************************************************** +* +* Setup default case +* +************************************************************************** + LINE=TAB2:'default:':TAB1:'/* error condition */' + WRITESEQ LINE ON FILE.GCIPATH ELSE PRINT 'Unable to write to ':GCIPATH ; STOP + LINE=TAB2:'fatal(46019);' + WRITESEQ LINE ON FILE.GCIPATH ELSE PRINT 'Unable to write to ':GCIPATH ; STOP + LINE=TAB1:'}' + WRITESEQ LINE ON FILE.GCIPATH ELSE PRINT 'Unable to write to ':GCIPATH ; STOP + LINE='}' + WRITESEQ LINE ON FILE.GCIPATH ELSE PRINT 'Unable to write to ':GCIPATH ; STOP + CLOSESEQ FILE.GCIPATH + PRINT + PRINT "New ":MODULE.NAME:" has been generated" + PRINT +************************************************************************** +* +* End of gci function +* +************************************************************************** + @SYSTEM.SET = 0 + STOP + END diff --git a/Ardent/UV/APP.PROGS/GES b/Ardent/UV/APP.PROGS/GES new file mode 100755 index 00000000..ddb6f91b --- /dev/null +++ b/Ardent/UV/APP.PROGS/GES @@ -0,0 +1,26 @@ +******************************************************************************** +* +* Support of PR1ME INFORMATION subroutine '-GES' +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description......................................... +* 10/14/98 23801 SAP Change copyrights. +* 07/25/88 - - Maintenence log purged at 5.2.1, see release 5.1.10. +* +******************************************************************************* + +$OPTIONS DEFAULT + +subroutine PR1ME(ans,m1,m2) + ans = GES(m1,m2) +return diff --git a/Ardent/UV/APP.PROGS/GET b/Ardent/UV/APP.PROGS/GET new file mode 100755 index 00000000..a1fc7a02 --- /dev/null +++ b/Ardent/UV/APP.PROGS/GET @@ -0,0 +1,236 @@ +******************************************************************************* +* +* Support the Ultimate get statement. This routine is called by +* calls inserted into user's code by the basic compiler. +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description......................................... +* 10/14/98 23801 SAP Change copyrights. +* 01/24/96 17671 LAG Remove \ as quoted argument on Win9X and WINNT +* 08/11/92 9308 PVW Add check mode 1, if i=argnum-1 and userval#"" +* 10/16/91 8698 DTM Correct \ as quoted argument +* 08/10/88 6710 JWT recognize quoted args +* 07/25/88 - - Maintenence log purged at 5.2.1, see release 5.1.10. +* +******************************************************************************* + +$OPTIONS DEFAULT + + SUBROUTINE GET(rtncode, argnum, userval, mode ) + +$INCLUDE UNIVERSE.INCLUDE MACHINE.NAME + +* +* This routine will be called by code generated by the BASIC +* compiler. The variable 'rtncode' will be set to success ('1') +* or failure ('0'). The variable 'mode' tells the routine whether +* to +* 1) set up the initial argumnet string +* 2) return the next argument +* 3) set the remove pointer to a specific argument + + EQU SUCCESS TO 1 + EQU FAILURE TO 0 + EQU INITTED TO @RECUR0 + EQU UEOF TO @RECUR1 + EQU UARGS TO @RECUR2 + + + OPEN "","VOC" TO fv ELSE + PRINT "subroutine *GET is unable to OPEN your VOC" + STOP + END + + BEGIN CASE + CASE mode = 0 +* called to find the arguments and initialize uarg + IF INITTED = 0 THEN + INITTED = 1 + tempsen = TRIMF(@SENTENCE) + temp = "" + LOOP + UNTIL tempsen = "" do + + ****************** + ** Windows NT port + ** + IF OS.TYPE = "UNIX" + THEN + + BEGIN CASE + + CASE tempsen[1,1] = "'" + qpos = index(tempsen[2,999],"'",1) + if qpos = 0 then qpos = len(tempsen)+1 + temp := tempsen[2,qpos-1] + tempsen = TRIMF(tempsen[qpos+2,999]) + + CASE tempsen[1,1] = "\" + qpos = index(tempsen[2,999],"\",1) + if qpos = 0 then qpos = len(tempsen)+1 + temp := tempsen[2,qpos-1] + tempsen = TRIMF(tempsen[qpos+2,999]) + + CASE tempsen[1,1] = '"' + qpos = index(tempsen[2,999],'"',1) + if qpos = 0 then qpos = len(tempsen)+1 + temp := tempsen[2,qpos-1] + tempsen = TRIMF(tempsen[qpos+2,999]) + + CASE 1 + qpos = 1000 + tpos = index(tempsen[1,999],"'",1) + if tpos and tpos < qpos then qpos = tpos + tpos = index(tempsen[1,999],'"',1) + if tpos and tpos < qpos then qpos = tpos + tpos = index(tempsen[1,999],"\",1) + if tpos and tpos < qpos then qpos = tpos + tpos = index(tempsen[1,999]," ",1) + if tpos and tpos < qpos then qpos = tpos + tpos = index(tempsen[1,999]," ",1) + if tpos and tpos < qpos then qpos = tpos + temp := tempsen[1,qpos-1] + tempsen = TRIMF(tempsen[qpos,999]) + END CASE + + END + ELSE + + BEGIN CASE + + CASE tempsen[1,1] = "'" + qpos = index(tempsen[2,999],"'",1) + if qpos = 0 then qpos = len(tempsen)+1 + temp := tempsen[2,qpos-1] + tempsen = TRIMF(tempsen[qpos+2,999]) + + CASE tempsen[1,1] = '"' + qpos = index(tempsen[2,999],'"',1) + if qpos = 0 then qpos = len(tempsen)+1 + temp := tempsen[2,qpos-1] + tempsen = TRIMF(tempsen[qpos+2,999]) + + CASE 1 + qpos = 1000 + tpos = index(tempsen[1,999],"'",1) + if tpos and tpos < qpos then qpos = tpos + tpos = index(tempsen[1,999],'"',1) + if tpos and tpos < qpos then qpos = tpos + tpos = index(tempsen[1,999]," ",1) + if tpos and tpos < qpos then qpos = tpos + tpos = index(tempsen[1,999]," ",1) + if tpos and tpos < qpos then qpos = tpos + temp := tempsen[1,qpos-1] + tempsen = TRIMF(tempsen[qpos,999]) + END CASE + + END + ** + ****************** + + if tempsen # "" then temp := @FM + REPEAT + + READV verbtype FROM fv,temp<1>,3 ELSE + verbtype = "B" + END + verbtype = UPCASE(verbtype[1,1]) + argc = DCOUNT(temp,@FM) + IF verbtype = "I" THEN +* RUN command or synonym + IF argc < 4 THEN +* no arguments + UARGS = "" + UEOF = 1 + rtncode = FAILURE + END ELSE + UARGS = FIELD(temp,@FM,4,999) + UEOF = 0 + rtncode = SUCCESS + END + END ELSE +* CATALOGed program + UARGS = FIELD(temp,@FM,2,999) + UEOF = DCOUNT(UARGS,@FM) # 0 + rtncode = SUCCESS + END + END ELSE + RETURN + END + + + CASE mode = 1 +* called to get next or specific argument + save = userval + IF argnum THEN + UARGS = UARGS ;* reset REMOVE pointer + UEOF = 0; + i = 0 + LOOP + WHILE i < argnum + REMOVE userval FROM UARGS SETTING delim + if delim = 0 THEN UEOF = 1 + UNTIL UEOF DO + i+=1 + REPEAT + + IF UEOF THEN + BEGIN CASE + CASE (i=argnum-1 AND userval#"") + rtncode = SUCCESS + CASE 1 + rtncode = FAILURE + userval = save + END CASE + END ELSE + rtncode = SUCCESS + END + END ELSE + REMOVE userval FROM UARGS SETTING delim + if delim = 0 THEN UEOF = 1 + IF userval # "" THEN + rtncode = SUCCESS + END ELSE + rtncode = FAILURE + userval = save + END + END + CASE mode = 2 +* called to set the remove pointer to some value + IF argnum THEN + UARGS = UARGS ;* reset REMOVE pointer + UEOF = 0; + FOR i = 1 TO argnum-1 UNTIL UEOF + REMOVE dummy FROM UARGS SETTING delim + if delim = 0 THEN UEOF = 1 + NEXT i + rtncode = NOT(UEOF) + END ELSE + IF UEOF THEN + rtncode = 0 + END ELSE + REMOVE dummy FROM UARGS SETTING delim + if delim = 0 THEN UEOF = 1 + rtncode = NOT(UEOF) + END + END + + CASE mode = 3 + rtncode = UEOF + + CASE 1 + rtncode = FAILURE + + END CASE + + RETURN diff --git a/Ardent/UV/APP.PROGS/GET.BASENAME b/Ardent/UV/APP.PROGS/GET.BASENAME new file mode 100755 index 00000000..c02a297f --- /dev/null +++ b/Ardent/UV/APP.PROGS/GET.BASENAME @@ -0,0 +1,46 @@ +******************************************************************************* +* +* Function to return the basename of a specified pathname. +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description......................................... +* 10/14/98 23801 SAP Change copyrights. +* 01/24/96 17671 LAG Initial creation and sccs. +* +******************************************************************************* + +** For Windows NT and Windows 95 this function normalizes +** all delimiters. + +FUNCTION GET.BASENAME(FILESPEC) + +INCLUDE UNIVERSE.INCLUDE MACHINE.NAME + +BASENAME = FILESPEC + +****************** +** Windows NT port +** +IF OS.TYPE NE "UNIX" +THEN + BASENAME = CONVERT("\", "/", BASENAME) +END +** +****************** + +BASENAME = CONVERT("/", @FM, BASENAME) +BASENAME = BASENAME + +RETURN(BASENAME) + +END diff --git a/Ardent/UV/APP.PROGS/GET.DEVS.B b/Ardent/UV/APP.PROGS/GET.DEVS.B new file mode 100755 index 00000000..1f50fd9e --- /dev/null +++ b/Ardent/UV/APP.PROGS/GET.DEVS.B @@ -0,0 +1,31 @@ +******************************************************************************** +* +* Support of PR1ME INFORMATION subroutine '!GET.DEVICES' +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description......................................... +* 10/14/98 23801 SAP Change copyrights. +* 10/08/93 12299 LA Initial implementation. +* +******************************************************************************* + +$OPTIONS DEFAULT + +subroutine PR1ME(ASSIGNED.COUNT, ASSIGNED.LIST) + + PRINT 'Subroutine not supported' + ASSIGNED.COUNT = 0 + ASSIGNED.LIST = '' + +RETURN + diff --git a/Ardent/UV/APP.PROGS/GET.DIRNAME b/Ardent/UV/APP.PROGS/GET.DIRNAME new file mode 100755 index 00000000..9a1e1839 --- /dev/null +++ b/Ardent/UV/APP.PROGS/GET.DIRNAME @@ -0,0 +1,44 @@ +******************************************************************************* +* +* Function to return the directory name of a specified pathname. +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description......................................... +* 10/14/98 23801 SAP Change copyrights. +* 01/24/96 17671 LAG Initial creation and sccs. +* +******************************************************************************* + +** For Windows NT and Windows 95 this function normalizes +** all delimiters. + +FUNCTION GET.DIRNAME(FILESPEC) + +INCLUDE UNIVERSE.INCLUDE MACHINE.NAME + +PATHNAME = FILESPEC + +****************** +** Windows NT port +** +IF OS.TYPE NE "UNIX" +THEN + PATHNAME = CONVERT("\", "/", PATHNAME) +END +** +****************** + +DIRNAME = FILESPEC[1, INDEX(PATHNAME, "/", COUNT(PATHNAME, "/")) - 1] + +RETURN(DIRNAME) + diff --git a/Ardent/UV/APP.PROGS/GET.FNAME.B b/Ardent/UV/APP.PROGS/GET.FNAME.B new file mode 100755 index 00000000..40d4d582 --- /dev/null +++ b/Ardent/UV/APP.PROGS/GET.FNAME.B @@ -0,0 +1,68 @@ +******************************************************************************* +* +* uniVerse port of PI/open GET.FILE.NAME +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenance log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description......................................... +* 10/14/98 23801 SAP Change copyrights. +* 01/13/94 11809 FTW Chg to support 'K' & 'Keyword' in VOC items' attr1 +* 01/20/93 10908 PVW Fix problem with DICT filename. +* 12/03/92 10214 PVW Fix for DATA stck problem +* 12/03/92 10214 PVW Change message to 001018 +* 12/02/92 10214 PVW Change UVPRINTMSG to *UVPRINTMSG +* 11/12/92 10214 PVW Port PI/open EDITOR to replace uniVerse EDITOR. +* +******************************************************************************* + + SUBROUTINE GET.FILE.NAME (NO.SELECT.LIST, SENT, FILE.DICT, FILE.NAME, PROMPT.FOR.FILE, SINGLE.FILE.ONLY) + +$INCLUDE UNIVERSE.INCLUDE UV.COM +$INCLUDE UNIVERSE.INCLUDE KEYWORD.H + + IF SENT THEN + POS = 2 + TOKEN.SENT = SENT + GOSUB SCAN.TOKENS + SENT = FIELD(SENT," ",POS,9999) + END ELSE + IF FILE.NAME = "" THEN + IF PROMPT.FOR.FILE THEN + CALL *UVPRINTMSG(001018,"") + INPUT TOKEN.SENT + GOSUB SCAN.TOKENS + END + END + END + RETURN + +SCAN.TOKENS: + FILE.NAME = FIELD(TOKEN.SENT," ",1) + READ TOKEN.RECORD FROM DEVSYS.VOC.FILE,FILE.NAME THEN + IF TOKEN.RECORD<1>[1,1] = "K" THEN + IF TOKEN.RECORD<2> = KW$DICT THEN + FILE.DICT = FILE.NAME + FILE.NAME = FIELD(TRIM(TOKEN.SENT)," ",2) + POS = 3 + IF FILE.NAME = "" THEN + IF PROMPT.FOR.FILE THEN + CALL *UVPRINTMSG(001018,"") + INPUT FILE.NAME + END + POS = 2 + END + END + END + END + RETURN + + END diff --git a/Ardent/UV/APP.PROGS/GET.KEY.B b/Ardent/UV/APP.PROGS/GET.KEY.B new file mode 100755 index 00000000..fec8bf67 --- /dev/null +++ b/Ardent/UV/APP.PROGS/GET.KEY.B @@ -0,0 +1,28 @@ +******************************************************************************** +* +* Support of PI/Open Subroutine '!GET.KEY' +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description......................................... +* 10/14/98 23801 SAP Change copyrights. +* 07/17/97 21135 LPC Added to sccs +* +******************************************************************************* + +subroutine PIO.GETKEY(xstring, xcode) + +call !GET.KEY(xstring, xcode) + +return + +end diff --git a/Ardent/UV/APP.PROGS/GET.OSNAME.B b/Ardent/UV/APP.PROGS/GET.OSNAME.B new file mode 100755 index 00000000..9aee4c12 --- /dev/null +++ b/Ardent/UV/APP.PROGS/GET.OSNAME.B @@ -0,0 +1,32 @@ +******************************************************************************** +* +* Support of PR1ME INFORMATION subroutine '!GET.OSNAME' +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description......................................... +* 10/14/98 23801 SAP Change copyrights. +* 07/28/93 12299 LA Initial implementation. +* +******************************************************************************* + +$OPTIONS DEFAULT + +subroutine PR1ME(OS) + +$INCLUDE UNIVERSE.INCLUDE INFO_KEYS.H + + OS = IK$SYSV + +return + + diff --git a/Ardent/UV/APP.PROGS/GET.PATH.B b/Ardent/UV/APP.PROGS/GET.PATH.B new file mode 100755 index 00000000..5400e69a --- /dev/null +++ b/Ardent/UV/APP.PROGS/GET.PATH.B @@ -0,0 +1,62 @@ +******************************************************************************** +* +* Support of PR1ME INFORMATION subroutine '!GET.PATHNAME' +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description......................................... +* 10/14/98 23801 SAP Change copyrights. +* 09/23/93 12299 LA Initial implementation. +* +******************************************************************************* +* START-DESCRIPTION +* +* This routine forms a convenient way for users to extract the directory +* and entry name parts of pathnames. It provides similar functionality +* to the shell 'dirname' and 'basename' functions. +* +* CALL !GET.PATHNAME(PATHNAME, DIRECTORYNAME, ENTRYNAME, STATUS) +* +* where PATHNAME (I) the pathname to be broken down +* DIRECTORYNAME (O) the direcoty name portion of PATHNAME +* ENTRYNAME (O) the entryname portion of PATHNAME +* STATUS (O) status of the operation: +* 0 = Success +* IE$PAR = Bad parameters given (PATHNAME) +* +* END-DESCRIPTION +* + +SUBROUTINE PR1ME(PATHNAME, DIRECTORY, ENTRYNAME, STATUS) + +$OPTIONS DEFAULT + +$INCLUDE UNIVERSE.INCLUDE UVKEYS.H +$INCLUDE UNIVERSE.INCLUDE INFO_ERRS.H + + L.PATH = PATHNAME + DIRECTORY = '' + ENTRYNAME = '' + STATUS = 0 + UVPATH = "*UVPATHNAME" + + IF L.PATH THEN + CALL @UVPATH(UVK$EXTRACTDIR, L.PATH, '', DIRECTORY, STATUS) + IF STATUS = 0 THEN + CALL @UVPATH(UVK$EXTRACTENTRY, L.PATH, '', ENTRYNAME, STATUS) + END + END ELSE + STATUS = IE$PAR + END + RETURN + +END diff --git a/Ardent/UV/APP.PROGS/GET.PGMS b/Ardent/UV/APP.PROGS/GET.PGMS new file mode 100755 index 00000000..5a7ec3ec --- /dev/null +++ b/Ardent/UV/APP.PROGS/GET.PGMS @@ -0,0 +1,336 @@ +SUBROUTINE GET.PGMS(ID,Q,fvsavedlists,fvvoc,REC,SOURCE.MACHINE) +$INCLUDE UNIVERSE.INCLUDE MTF.INCL.H +****************************************************************************** +* +* Enter names of BASIC program files; save into &SAVEDLISTS& +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description........................................ +* 10/14/98 23801 SAP Change copyrights. +* 08/05/92 9887 PVW Make valid machines same as CONVERT.VOC +* 05/13/91 8345 DTM changed print to tprints +* 05/09/91 8331 DTM Fixed Enter.box.b to handle F.4 +* 03/19/91 8064 DTM Changed the way it asked for input +* 02/26/91 7673 DTM Changed parameter for ENTER.BOX.B for case conversion +* 01/13/91 7673 DTM Final changes +* 12/27/90 7403 DTM Initial programming +* +******************************************************************************* +* This subroutine will accept as an argument the value of the operation +* to perform. It can perform the following functions on spooler jobs: +****************************************************************************** +id = "%W%" +****************************************************************************** +* Various Prompts and Help string values +****************************************************************************** +equ PRMPT.LOC to 2 +equ SHRT.HELP to 4 +equ LONG.HELP to 5 +****************************************************************************** +* Various other variables +****************************************************************************** +equ Default to 1 +equ PAINT to 1 ;* flag to paint forms +equ Yes to 1 +equ No to 0 +equ AM to char(254) +equ VM to char(253) +equ SVM to char(252) +****************************************************************************** +CALL *DRAW.SCRN.B(UVREADMSG(073730,ID),1) +GOSUB init.files ;* Initialize /usr/spool/uv/sp.config +GOSUB init.form ;* Initialize forms to be used +GOSUB init.vars ;* initialize local variables +****************************************************************************** +* In this section, we draw the first screen, print the menu bar and help +* areas, and put up the first title and form to fill out. +****************************************************************************** +CALL *HELP.PRINT.B(UVREADMSG(073009,""),2) +CALL *PUT.FORM.B(form.size,form,temp.form,PRMPT,PAINT) +MV=0 +Q=NULL +GOSUB refresh.data +FOR Z=1 TO LAST.FIELD + Q=NULL + ON Z GOSUB file.names,sourcem + IF Q="XX" THEN GOTO exit.routine +NEXT Z +NEW.ITEM=No +LOOP + +CALL *HELP.PRINT.B(NULL,3) +70 temp=NULL +CALL *ENTER.BOX.B(17,5,5,UVREADMSG(073737,""),temp,1) +IF temp="*" THEN GOTO 70 +Q=temp +UNTIL UPCASE(Q)="S" OR Q="." OR Q=-1 DO + IF Q="+" THEN Q="1,+" + Z=FIELD(Q,",",1) + BEGIN CASE + CASE Z>=1 AND Z<=2.99 AND NUM(Z) + Q=Q[COL2()+1,999] + ON Z GOSUB file.names,sourcem + MV=0 + CASE UPCASE(Q)="XX" + GOTO exit.routine + CASE UPCASE(Q)="R" + GOSUB refresh.data + CASE Default + CALL *HELP.PRINT.B(UVREADMSG(073732,""),2) + END CASE +REPEAT +REC=RAISE(REC) +WRITE REC ON fvsavedlists,ID +IF LAST.FIELD=2 AND SYSTEM(1001)#1 THEN WRITEV format ON fvvoc,"RELLEVEL",4 +RETURN + +****************************************************************************** +* Init.form +* This routine initializes all the positional parameters, help strings, +* text strings, and default values for the two forms used in this subroutine +****************************************************************************** + +init.form: + form.size=2 + form.line=1 + form=NULL + temp.form=NULL + form<1,1>=@(5,14) + form<1,2>=@(35,14) + form<1,3>=UVREADMSG(073735,"") + form<1,4>=UVREADMSG(073738,"") + form<1,5>=form<1,4> + form<1,6>=40 + form<1,7>=1 + form<2,1>=@(5,15) + form<2,2>=@(35,15) + form<2,3>=UVREADMSG(073736,"") + form<2,4>=UVREADMSG(073739,"") + form<2,5>=form<2,4>:UVREADMSG(073734,"") + form<2,6>=40 + form<2,7>=1 + RETURN + +****************************************************************************** +* Init.files +* It also opens up the &DEVICE& File so they can both be used to modify +* entries, existing or not, for printers on system. +****************************************************************************** +init.files: + OPEN '','&SAVEDLISTS&' TO fvsavedlists ELSE + retry=0 + m1="Press to attempt to open file again" + CALL *ERROR.BOX.B(10,3,0,UVREADMSG(073005,'&SAVEDLISTS&'),retry,m1) + IF retry=0 THEN GOTO init.files + SLEEP 3 + STOP @(-1) + END +init.files2: + OPEN '','VOC' TO fvvoc ELSE + retry=0 + m1="Press to attempt to open file again" + CALL *ERROR.BOX.B(10,3,0,UVREADMSG(073005,'VOC'),retry,m1) + IF retry=0 THEN GOTO init.files2 + SLEEP 3 + STOP @(-1) + END + RETURN + +****************************************************************************** +* Init.vars - +* Routine which initializes various global variables +****************************************************************************** +init.vars: + MV1=1 + COL1=24:AM:24:AM:24:AM:24:AM:24:AM:24:AM:24:AM:24:AM:24:AM:24 + LIN1=4:AM:5:AM:6:AM:7:AM:8:AM:9:AM:10:AM:11:AM:12:AM:13 + TPRINT @(24,3):" ":UVREADMSG(073731,""): + READV format FROM fvvoc, "RELLEVEL", 4 ELSE format=NULL + BEGIN CASE + CASE format = "INFORMATION.FORMAT" + SOURCE.MACHINE = "PRIME" + CASE format = "REALITY.FORMAT" + SOURCE.MACHINE = "MICRODATA" + CASE format = "IN2.FORMAT" + SOURCE.MACHINE = "IN2" + CASE 1 + SOURCE.MACHINE = NULL + END CASE + IF SOURCE.MACHINE = "" THEN + LAST.FIELD=2 + END ELSE + LAST.FIELD=1 + temp.form<2>=SOURCE.MACHINE + END + ID="BASIC.PGM.FILES" + READ REC FROM fvsavedlists,ID THEN + NEW.ITEM=No + REC=LOWER(REC) + END ELSE + NEW.ITEM=Yes + REC=NULL + END + RETURN +****************************************************************************** +* file.names - routine to update basic program file names +****************************************************************************** +file.names: + VALUE.INSERTED=No + IF NEW.ITEM THEN MV=MV+1 ELSE + MV=FIELD(Z,".",2) + Z=INT(Z) + IF MV<1 THEN + IF Q="DE" OR Q="de" THEN + REC=NULL; MV=1; GOSUB display.field + END ELSE IF Q="+" THEN MV=1 ELSE + FOR MV=1 TO 99 UNTIL REC<1,MV>=NULL; NEXT MV + IF MV>MV1+10 THEN GOSUB display.field + END + END ELSE IF REC<1,MV>=NULL AND Q # "DE" THEN GOTO file.names + END + IF Q=NULL THEN +floop1: + form.line=1 + GOSUB get.input + temp.form<1>=NULL + Q=temp + IF (Q="/" OR Q=NULL) AND NOT(VALUE.INSERTED) THEN MV=0; RETURN + END + IF Q="I" OR Q="i" THEN + VALUE.INSERTED=Yes; REC=INSERT(REC,1,MV,0,NULL) + GOSUB display.field; Q=NULL; GOTO floop1 + END + IF Q="+" THEN MV=MV1+10;GOSUB display.field;RETURN + IF Q="DE" OR Q="de" THEN + REC=DELETE(REC,1,MV,0) + GOSUB display.field; RETURN + END + IF Q="^" OR Q="XX" THEN RETURN + OPEN "",Q TO fvjunk ELSE + CALL *HELP.PRINT.B(UVREADMSG(073005,Q),2) + GOTO floop1 + END + REC<1,MV>=Q + IF MVMV1+9 THEN GOSUB display.field + TPRINT @(COL1,LIN1):"1.":MV"L#3":Q "L#25" + IF Q=NULL THEN + MV=0 + RETURN + END + MV=MV+1 + GOTO floop1 + RETURN +****************************************************************************** +* refresh.data - refresh data +****************************************************************************** +refresh.data: + GOSUB display.field + IF LAST.FIELD=2 THEN + temp.form<2>=SOURCE.MACHINE + CALL *PUT.FORM.B(form.size,form,temp.form,PRMPT,PAINT) + END + Q=NULL + RETURN +****************************************************************************** +* exit.routine - exit the menu +****************************************************************************** +exit.routine: + STOP @(-1) + RETURN +****************************************************************************** +* display.field - display file names to choose from +****************************************************************************** +display.field: + MV1=10*INT((MV-1)/10)+1 + IF REC<1,MV1>=NULL AND Q="+" THEN MV1=1 + FOR K=MV1 TO MV1+9 + TPRINT @(COL1,LIN1):STR(SPACE,30) + NEXT K + FOR K=MV1 TO MV1+9 + TPRINT @(COL1,LIN1):"1.":K"L#3":REC<1,K> "L#25" + NEXT K + TPRINT @(COL1<10>-1,LIN1<10>): + IF REC<1,K>#NULL THEN TPRINT "+" ELSE TPRINT "." + RETURN +****************************************************************************** +* get.input - get any input that is needed +****************************************************************************** +get.input: + +help.loop: + +CALL *HELP.PRINT.B(form,1) + +input.loop: + +TPRINT form:STR(" ",form) ;* position cursor +TPRINT form: ;* position cursor +temp=temp.form +CALL *CINPUT.B(SEC.PRMPT,temp,special,form,form) +IF special # 0 THEN ;* if special character encountered + BEGIN CASE + CASE special = F.1 + CALL *HELP.PRINT.B(form,3) + GOTO input.loop ;* get more input + CASE special = ESCAPE ;* escape was pressed + GOTO exit.routine + CASE special = NEXT.PAGE + Q="+" + MV=MV1+10 + GOSUB display.field + GOTO help.loop + CASE Default + GOTO help.loop + END CASE ;* end of case +END ;* end of if statement +RETURN +****************************************************************************** +* sourcem - routine to update source machine data +****************************************************************************** +sourcem: + IF Q=NULL THEN +sloop1: + form.line=2 + GOSUB get.input + Q=temp + END + Q=UPCASE(Q) + IF Q="^" OR Q="XX" THEN RETURN + IF Q=NULL THEN + CALL *HELP.PRINT.B(UVREADMSG(071004,""),2) + GOTO sloop1 + END + BEGIN CASE + CASE Q="PRIME" + format = "INFORMATION.FORMAT" + CASE Q="MICRODATA" + format = "REALITY.FORMAT" + CASE Q="IN2" + format = "IN2.FORMAT" + CASE Q = "ADDS" OR Q = "ULTIMATE" OR Q = "IBM PC-XT" + format = "PICK.FORMAT" + CASE Default + CALL *HELP.PRINT.B(UVREADMSG(073734,""),2) + GOTO sloop1 + END CASE + IF LEN(Q) > 12 THEN + CALL *HELP.PRINT.B(UVREADMSG(073733,""),2) + GOTO sloop1 + END + SOURCE.MACHINE=Q + temp.form<2>=Q + CALL *PUT.FORM.B(form.size,form,temp.form,PRMPT,PAINT) + RETURN + +STOP @(-1) +END diff --git a/Ardent/UV/APP.PROGS/GETPARTNUM.B b/Ardent/UV/APP.PROGS/GETPARTNUM.B new file mode 100755 index 00000000..0ab12de5 --- /dev/null +++ b/Ardent/UV/APP.PROGS/GETPARTNUM.B @@ -0,0 +1,85 @@ +******************************************************************************** +* +* Support of PR1ME INFORMATION subroutine '!GET.PARTNUM' +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description......................................... +* 10/14/98 23801 SAP Change copyrights. +* 10/08/93 12299 LA Initial implementation. +* +******************************************************************************* + +$OPTIONS DEFAULT + +subroutine PR1ME(PF.FVAR, RECORD.ID, PART.NUM, RETURN.STATUS) + +$INCLUDE UNIVERSE.INCLUDE FILEINFO.H +$INCLUDE UNIVERSE.INCLUDE INFO_ERRS.H + +* To do this simply in basic, we need the filename rather than the file +* variable as the partitioning algorithm is stored in the dictionary of +* the file. When we have the algorithm, set @ID temporarily and run the +* algorithm through the itype code. + + file.open = 0 + RETURN.STATUS = 0 + algorithm = '' + +* First check its a partitioned file (NOTE: file types returned are PI/open +* file type numbers) + + if fileinfo(PF.FVAR, FINFO$TYPE) ne 7 THEN + RETURN.STATUS = IE$NOT.DISTFILE + goto exit.get.partnum + end + filename = fileinfo(PF.FVAR, FINFO$VOCNAME) + open 'DICT', filename to dict.fvar on error + RETURN.STATUS = IE$DIST.DICT.OPEN.FAIL + goto exit.get.partnum + end else + RETURN.STATUS = IE$DIST.DICT.OPEN.FAIL + goto exit.get.partnum + end + + file.open = 1 + read algorithm from dict.fvar, "@PART.ALGORITHM" on error + RETURN.STATUS = IE$DIST.ALG.READ.FAIL + goto exit.get.partnum + end else + RETURN.STATUS = IE$DIST.ALG.READ.FAIL + goto exit.get.partnum + end + + stored.id = @ID + @ID = RECORD.ID + PART.NUM = itype(algorithm) + + if not(num(PART.NUM)) then + RETURN.STATUS = IE$NO.MAP.TO.PARTNUM + goto exit.get.partnum + end + + if PART.NUM < 1 then + RETURN.STATUS = IE$NO.MAP.TO.PARTNUM + goto exit.get.partnum + end + +exit.get.partnum: + + if file.open then close dict.fvar + if RETURN.STATUS ne 0 then + PART.NUM = 0 + end + return + +end diff --git a/Ardent/UV/APP.PROGS/GETPU.B b/Ardent/UV/APP.PROGS/GETPU.B new file mode 100755 index 00000000..d5bf6aeb --- /dev/null +++ b/Ardent/UV/APP.PROGS/GETPU.B @@ -0,0 +1,54 @@ +******************************************************************************* +* +* uniVerse port of PI/open !GETPU subroutine +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenance log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description......................................... +* 10/14/98 23801 SAP Change copyrights. +* 10/05/95 16881 PGW Added check for PU$FONTNAME for Windows NT. +* 10/27/93 12299 LA Changed to use printerio opcode +* 11/12/92 9705 PVW Port PI/open GETPU subroutine to uniVerse. +* +******************************************************************************* + +$OPTIONS INFORMATION + + SUBROUTINE GETPU (KEY, UNIT, VALUE, CODE) + +$INCLUDE UNIVERSE.INCLUDE GETPU.H +$INCLUDE UNIVERSE.INCLUDE PRINTERIO.H + + CODE = 0 + UNUSED = '' + VALUE = '' + + PRINTERIO PK$GETPU, KEY, VALUE, UNIT, CODE, UNUSED, UNUSED, UNUSED + + IF (KEY = PU$FORM) OR (KEY = PU$BANNER) OR (KEY = PU$LOCATION) OR (KEY = PU$FONTNAME) THEN + IF CODE THEN VALUE = '' + ELSE VALUE = TRIMB(VALUE) + END ELSE IF (KEY = PU$SPOOLFLAGS) THEN + +* 4294967296 is 2**32. The calculations using these numbers are +* necessary because SPOOLFLAGS is handled in the underlying code as +* and unsigned 32 bit quantity. Therefore if bit 1 is set, the +* number returned will be negative. + + IF VALUE LT 0 THEN VALUE += 4294967296 + END ELSE + IF (KEY = PU$CONNECT) AND (VALUE = PU$DISCONNECT) THEN VALUE = '' + END + + RETURN + + END diff --git a/Ardent/UV/APP.PROGS/GETUCOUNTS.B b/Ardent/UV/APP.PROGS/GETUCOUNTS.B new file mode 100755 index 00000000..9e62c417 --- /dev/null +++ b/Ardent/UV/APP.PROGS/GETUCOUNTS.B @@ -0,0 +1,41 @@ +******************************************************************************** +* +* Support of subroutine '!GET.USER.COUNTS' +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description......................................... +* 10/14/98 23801 SAP Change copyrights. +* 01/18/94 12299 LA Initial implementation. +* +******************************************************************************* +* +* This subroutine is a partial implementation of the PI/open !GET.USERS +* subroutine. It returns three pieces of information. These are: +* +* Current number of uniVerse users +* Maximum number of uniVerse users +* Current number of system (unix) users +* +******************************************************************************* + + +$OPTIONS DEFAULT + +subroutine GET.USER.COUNTS(UV.USERS, MAX.UV.USERS, OS.USERS) + + UV.USERS = SYSTEM(35) + MAX.UV.USERS = SYSTEM(36) + OS.USERS = SYSTEM(37) + +RETURN + diff --git a/Ardent/UV/APP.PROGS/GTS b/Ardent/UV/APP.PROGS/GTS new file mode 100755 index 00000000..373a53b5 --- /dev/null +++ b/Ardent/UV/APP.PROGS/GTS @@ -0,0 +1,26 @@ +******************************************************************************* +* +* Support of PR1ME INFORMATION subroutine '-GTS' +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description......................................... +* 10/14/98 23801 SAP Change copyrights. +* 07/25/88 - - Maintenence log purged at 5.2.1, see release 5.1.10. +* +******************************************************************************* + +$OPTIONS DEFAULT + +subroutine PR1ME(ans,m1,m2) + ans = GTS(m1,m2) +return diff --git a/Ardent/UV/APP.PROGS/HELP.BOX.B b/Ardent/UV/APP.PROGS/HELP.BOX.B new file mode 100755 index 00000000..f4dee315 --- /dev/null +++ b/Ardent/UV/APP.PROGS/HELP.BOX.B @@ -0,0 +1,41 @@ +******************************************************************************* +* +* HELP.BOX.B - This widget allows the user to create a help message box +* on the screen with on button. +* +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description......................................... +* 10/14/98 23801 SAP Change copyrights. +* 05/15/96 18330 LDG Changed LEN() function to LENDP() for NLS DBCS. +* 05/05/91 7673 DTM Correctly put in 6.2.1.4 +* 03/14/91 7673 DTM Routine first created and admin'd. +******************************************************************************* + +SUBROUTINE HELP.BOX.B(start.line, max.lines,width,textstr) + +Button.array="" +Button.array<1>=1 +Button.array<2>="Close" +selval=0 +IF start.line=0 THEN start.line=5 +IF width=0 THEN width=50 +IF max.lines=0 THEN + count=LENDP(textstr)/width + IF count > 8 THEN count = 8 + max.lines=count+3 +END +CALL *CHOICE.BOX.B(start.line,max.lines,width,textstr, Button.array,selval,"") +RETURN + +END diff --git a/Ardent/UV/APP.PROGS/HELP.PRINT.B b/Ardent/UV/APP.PROGS/HELP.PRINT.B new file mode 100755 index 00000000..fc1b796e --- /dev/null +++ b/Ardent/UV/APP.PROGS/HELP.PRINT.B @@ -0,0 +1,104 @@ +******************************************************************************* +* +* New System Admin - This routine allows the user to perform various +* manipulations to the help area at the bottom of the GUI screen. +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description......................................... +* 10/14/98 23801 SAP Change copyrights. +* 05/20/96 18330 LDG Changed LEN() function to LENDP() for NLS DBCS. +* 05/13/91 8345 DTM changed print to tprints +* 03/12/91 7673 DTM Changed for consistency sake. +* 11/05/90 7393 DPB Routine first created and admin'd. +******************************************************************************* + +SUBROUTINE HELP.PRINT.B(text, opt) +$INCLUDE UNIVERSE.INCLUDE MTF.INCL.H + +top = 17 +bottom = 21 +start = 1 +length = 77 + +IF help.init = 0 THEN + help.pos = top + help.lock = FALSE + help.init = TRUE + END +store = text + +BEGIN CASE + CASE help.lock = 1 + help.lock = 0 + BEGIN CASE + CASE opt = 2 + help.lock = 1 + CASE opt = 3 + GOSUB clear.area + CASE opt = 4 + help.init = 5 + GOSUB clear.area + CASE opt = 5 + help.pos = bottom + END CASE + CASE help.lock = 0 + GOSUB clear.area + BEGIN CASE + CASE opt = 2 + help.lock = 1 + CASE opt = 4 + help.init = 5 + CASE opt = 5 + help.pos = bottom + END CASE +END CASE + +loop1: + IF LENDP(text) > length THEN + temp = length + LOOP UNTIL text[temp,1] =' ' DO + temp -= 1 + IF temp=0 THEN + GOTO loop2 + END + REPEAT +loop2: + IF temp < 40 THEN temp = length + tstr = text[1,temp] + text = text[temp+1, LENDP(text)] + TPRINT @(start, help.pos):tstr: + help.pos += 1 + IF help.pos > bottom THEN + help.pos=top + END + GOTO loop1 + END + +TPRINT @(start, help.pos):text: +help.init = help.pos - (top - 1) +help.pos += 1 +IF help.pos > bottom THEN + help.pos=top +END +text = store + +RETURN + +clear.area: + FOR I = top TO (top - 1 + help.init) + TPRINT @(start,I):CL: + NEXT I + help.pos = top + RETURN + +END diff --git a/Ardent/UV/APP.PROGS/HUSHIT b/Ardent/UV/APP.PROGS/HUSHIT new file mode 100755 index 00000000..20e3fa75 --- /dev/null +++ b/Ardent/UV/APP.PROGS/HUSHIT @@ -0,0 +1,28 @@ +******************************************************************************** +* +* Support of PR1ME INFORMATION subroutine '!HUSHIT' +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description......................................... +* 10/14/98 23801 SAP Change copyrights. +* 07/25/88 - - Maintenence log purged at 5.2.1, see release 5.1.10. +* +******************************************************************************* + +$OPTIONS DEFAULT + +subroutine PR1ME(zero.one.or.minus.one) + if (zero.one.or.minus.one = 1) then execute "P ON" + if (zero.one.or.minus.one = 0) then execute "P OFF" + if (zero.one.or.minus.one = -1) then execute "P" +return diff --git a/Ardent/UV/APP.PROGS/ICONVS b/Ardent/UV/APP.PROGS/ICONVS new file mode 100755 index 00000000..04bd87f8 --- /dev/null +++ b/Ardent/UV/APP.PROGS/ICONVS @@ -0,0 +1,26 @@ +******************************************************************************* +* +* Support of PR1ME INFORMATION subroutine '-ICONVS' +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description......................................... +* 10/14/98 23801 SAP Change copyrights. +* 07/25/88 - - Maintenence log purged at 5.2.1, see release 5.1.10. +* +******************************************************************************* + +$OPTIONS DEFAULT + +subroutine PR1ME(ans,m1,p1) + ans = ICONVS(m1,p1) +return diff --git a/Ardent/UV/APP.PROGS/IDENT b/Ardent/UV/APP.PROGS/IDENT new file mode 100755 index 00000000..80343e52 --- /dev/null +++ b/Ardent/UV/APP.PROGS/IDENT @@ -0,0 +1,26 @@ +******************************************************************************** +* +* Support of PR1ME INFORMATION subroutine '-IDENT' +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description......................................... +* 10/14/98 23801 SAP Change copyrights. +* 07/25/88 - - Maintenence log purged at 5.2.1, see release 5.1.10. +* +******************************************************************************* + +$OPTIONS DEFAULT + +subroutine PR1ME(ans) + ans = @WHO : @FM : @LOGNAME : @FM : @USERNO +return diff --git a/Ardent/UV/APP.PROGS/IFS b/Ardent/UV/APP.PROGS/IFS new file mode 100755 index 00000000..2499a0e6 --- /dev/null +++ b/Ardent/UV/APP.PROGS/IFS @@ -0,0 +1,26 @@ +******************************************************************************** +* +* Support of PR1ME INFORMATION subroutine '-IFS' +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description......................................... +* 10/14/98 23801 SAP Change copyrights. +* 06/30/90 7101 JWT Initial implementation. +* +******************************************************************************* + +$OPTIONS DEFAULT + +subroutine PR1ME(ans,m1,m2,m3) + ans = IFS(m1,m2,m3) +return diff --git a/Ardent/UV/APP.PROGS/ILPROMPT.B b/Ardent/UV/APP.PROGS/ILPROMPT.B new file mode 100755 index 00000000..db2ecc41 --- /dev/null +++ b/Ardent/UV/APP.PROGS/ILPROMPT.B @@ -0,0 +1,28 @@ +******************************************************************************** +* +* Support of PR1ME INFORMATION subroutine '!INLINEPROMPTS' +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description......................................... +* 10/14/98 23801 SAP Change copyrights. +* 07/15/93 12299 LA Initial implementation. +* +******************************************************************************* + +$OPTIONS DEFAULT + +subroutine PR1ME(ANSWER, STR) + ANSWER = ILPROMPT(STR) +return + + diff --git a/Ardent/UV/APP.PROGS/INDEXS b/Ardent/UV/APP.PROGS/INDEXS new file mode 100755 index 00000000..d36259bd --- /dev/null +++ b/Ardent/UV/APP.PROGS/INDEXS @@ -0,0 +1,26 @@ +******************************************************************************** +* +* Support of PR1ME INFORMATION subroutine '-INDEXS' +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description......................................... +* 10/14/98 23801 SAP Change copyrights. +* 07/25/88 - - Maintenence log purged at 5.2.1, see release 5.1.10. +* +******************************************************************************* + +$OPTIONS DEFAULT + +subroutine PR1ME(ans,m1,p1,p2) + ans = INDEXS(m1,p1,p2) +return diff --git a/Ardent/UV/APP.PROGS/INDIRECT b/Ardent/UV/APP.PROGS/INDIRECT new file mode 100755 index 00000000..9fdfaaff --- /dev/null +++ b/Ardent/UV/APP.PROGS/INDIRECT @@ -0,0 +1,69 @@ +subroutine INDIRECT( result, pib, sib, pob, sob, obn, reference ) +******************************************************************************* +* +* INDIRECT Resolves indirect buffer references (user exit) +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description......................................... +* 10/14/98 23801 SAP Change copyrights. +* 07/25/88 - - Maintenence log purged at 5.2.1, see release 5.1.10. +* +******************************************************************************* +* +* This routine provides the user exits with an indirect reference +* capability. If the reference is not a well-formed indirect reference, +* then it is returned itself as the result. If it is a well-formed +* indirect reference, then the links are chased, and the final value is +* returned as the result. +* +* Arguments to this subroutine are: +* result - the returned value +* pib - the primary input buffer +* sib - the secondary input buffer +* pob - the primary output buffer +* sob - the secondary output buffer +* obn - the current output buffer number (0 = primary; +* 1 = secondary) +* reference - the indirect reference to be resolved +* +*****************************************************************************/ + + result = reference + + BEGIN CASE + CASE reference[ 1, 1 ] = "%" +* +* Reference through primary input buffer +* + CALL $INDIRECT( result, pib, sib, pob, sob, obn, reference[ 2, 99999 ]) + result = pib< result > + + CASE reference[ 1, 1 ] = "#" +* +* Reference through an output buffer +* + CALL $INDIRECT( result, pib, sib, pob, sob, obn, reference[ 2, 99999 ]) + IF obn THEN + result = sob< result > + END ELSE + result = pob< result > + END + + CASE 1 +* +* literal reference +* + result = reference + END CASE + RETURN +END diff --git a/Ardent/UV/APP.PROGS/INTS.B b/Ardent/UV/APP.PROGS/INTS.B new file mode 100755 index 00000000..30310038 --- /dev/null +++ b/Ardent/UV/APP.PROGS/INTS.B @@ -0,0 +1,45 @@ +******************************************************************************** +* +* Support of PR1ME INFORMATION subroutine '!INTS' +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description......................................... +* 10/14/98 23801 SAP Change copyrights. +* 07/28/93 12299 LA Initial implementation. +* +******************************************************************************* + +$OPTIONS DEFAULT + +subroutine PR1ME(ANSWER, ARG1) + + ANSWER = '' + DIM DELIMITERS (5) + DELIMITERS (0) = '' + DELIMITERS (1) = @IM + DELIMITERS (2) = @FM + DELIMITERS (3) = @VM + DELIMITERS (4) = @SM + DELIMITERS (5) = @TM + + ARG1 = ARG1 +*---- Test for value marks or subvalue marks. + LOOP + REMOVE STR FROM ARG1 SETTING DELIM + ANSWER := INT(STR):DELIMITERS (DELIM) + WHILE DELIM DO + REPEAT + +return + + diff --git a/Ardent/UV/APP.PROGS/INVERSE.B b/Ardent/UV/APP.PROGS/INVERSE.B new file mode 100755 index 00000000..8bdb6d22 --- /dev/null +++ b/Ardent/UV/APP.PROGS/INVERSE.B @@ -0,0 +1,42 @@ +******************************************************************************* +* +* New System Admin - This routine turns inverse video on and off, taking +* into account the difference between systems with video spacing +* and the systems without. +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description......................................... +* 10/14/98 23801 SAP Change copyrights. +* 05/13/91 8345 DTM changed print to tprints +* 11/05/90 7393 DPB Routine first created and admin'd. +******************************************************************************* + +SUBROUTINE INVERSE.B(toggle) + +$INCLUDE UNIVERSE.INCLUDE MTF.INCL.H + +BEGIN CASE + CASE toggle = 0 + IF VIDEO.SPACES < 1 AND iv.end # "]" THEN + TPRINT " ": + END + TPRINT iv.end: + CASE toggle = 1 + TPRINT iv.begin: + IF VIDEO.SPACES < 1 AND iv.begin # "[" THEN + TPRINT " ": + END +END CASE + +RETURN + diff --git a/Ardent/UV/APP.PROGS/IS.EQPATHS b/Ardent/UV/APP.PROGS/IS.EQPATHS new file mode 100755 index 00000000..f0f733ec --- /dev/null +++ b/Ardent/UV/APP.PROGS/IS.EQPATHS @@ -0,0 +1,47 @@ +******************************************************************************* +* +* Function to determine if the specified pathnames are equal. +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description......................................... +* 10/14/98 23801 SAP Change copyrights. +* 01/24/96 17671 LAG Initial creation and sccs. +* +******************************************************************************* + +** For Windows NT and Windows 95 this function performs a case +** independent comparison with all delimiters normalized. + +FUNCTION IS.EQPATHS(FILESPEC.A, FILESPEC.B) + +INCLUDE UNIVERSE.INCLUDE MACHINE.NAME + +PATHNAME.A = FILESPEC.A +PATHNAME.B = FILESPEC.B + +****************** +** Windows NT port +** +IF OS.TYPE NE "UNIX" +THEN + PATHNAME.A = DOWNCASE(CONVERT("\", "/", PATHNAME.A)) + PATHNAME.B = DOWNCASE(CONVERT("\", "/", PATHNAME.B)) +END +** +****************** + +IS.EQUAL = (PATHNAME.A = PATHNAME.B) + +RETURN(IS.EQUAL) + +END diff --git a/Ardent/UV/APP.PROGS/IS.FULLPATH b/Ardent/UV/APP.PROGS/IS.FULLPATH new file mode 100755 index 00000000..500f3b80 --- /dev/null +++ b/Ardent/UV/APP.PROGS/IS.FULLPATH @@ -0,0 +1,47 @@ +******************************************************************************* +* +* Function to determine if a specified filename is a an absolute pathname. +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description......................................... +* 10/14/98 23801 SAP Change copyrights. +* 01/24/96 17671 LAG Initial creation and sccs. +* +******************************************************************************* + +** For Windows NT and Windows 95 this function normalizes +** all delimiters. + +FUNCTION IS.FULLPATH(FILESPEC) + +INCLUDE UNIVERSE.INCLUDE MACHINE.NAME + +PATHNAME = FILESPEC + +****************** +** Windows NT port +** +IF OS.TYPE = "UNIX" +THEN + IS.ABSOLUTE = (PATHNAME[1,1] = "/") +END +ELSE + PATHNAME = CONVERT("\", "/", PATHNAME) + IS.ABSOLUTE = (PATHNAME[1,1] = "/") OR (PATHNAME[1,2] = "//") OR (PATHNAME[2,1] = ":") +END +** +****************** + +RETURN(IS.ABSOLUTE) + +END diff --git a/Ardent/UV/APP.PROGS/ISNULLS.B b/Ardent/UV/APP.PROGS/ISNULLS.B new file mode 100755 index 00000000..025b1062 --- /dev/null +++ b/Ardent/UV/APP.PROGS/ISNULLS.B @@ -0,0 +1,25 @@ +****************************************************************************** +* +* Description: Support for -ISNULLS function +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description......................................... +* 10/14/98 23801 SAP Change copyrights. +* 03/22/94 13193 GMH Initial implementation +* +******************************************************************************* +$OPTIONS DEFAULT + +subroutine (ans,m1) + ans = ISNULLS(m1) +return diff --git a/Ardent/UV/APP.PROGS/ISUSER.B b/Ardent/UV/APP.PROGS/ISUSER.B new file mode 100755 index 00000000..8aebf729 --- /dev/null +++ b/Ardent/UV/APP.PROGS/ISUSER.B @@ -0,0 +1,28 @@ +******************************************************************************* +* +* New System Admin - This subroutine is passed a user id number, and then +* checks to see if the user currently running this program has +* the same UID. It returns a 1 if a match else it returns a 0. +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description......................................... +* 10/14/98 23801 SAP Change copyrights. +* 02/12/91 7804 DTM added SYSTEM(27) to allow easier access +* 11/30/90 7798 DTM fixed the way id was called +* 11/05/90 7393 DPB Routine first created and admin'd. +******************************************************************************* +SUBROUTINE ISUSER.B(id, rtn.var) + rtn.var=SYSTEM(27) + IF id = rtn.var THEN rtn.var = 1 ELSE rtn.var = 0 + RETURN +END diff --git a/Ardent/UV/APP.PROGS/LENS b/Ardent/UV/APP.PROGS/LENS new file mode 100755 index 00000000..c8a3f914 --- /dev/null +++ b/Ardent/UV/APP.PROGS/LENS @@ -0,0 +1,26 @@ +******************************************************************************* +* +* Support of PR1ME INFORMATION subroutine '-LENS' +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description......................................... +* 10/14/98 23801 SAP Change copyrights. +* 07/25/88 - - Maintenence log purged at 5.2.1, see release 5.1.10. +* +******************************************************************************* + +$OPTIONS DEFAULT + +subroutine PR1ME(ans,m1) + ans = LENS(m1) +return diff --git a/Ardent/UV/APP.PROGS/LES b/Ardent/UV/APP.PROGS/LES new file mode 100755 index 00000000..f6e219cb --- /dev/null +++ b/Ardent/UV/APP.PROGS/LES @@ -0,0 +1,26 @@ +******************************************************************************* +* +* Support of PR1ME INFORMATION subroutine '-LES' +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description......................................... +* 10/14/98 23801 SAP Change copyrights. +* 07/25/88 - - Maintenence log purged at 5.2.1, see release 5.1.10. +* +******************************************************************************* + +$OPTIONS DEFAULT + +subroutine PR1ME(ans,m1,m2) + ans = LES(m1,m2) +return diff --git a/Ardent/UV/APP.PROGS/LIST.BOX.B b/Ardent/UV/APP.PROGS/LIST.BOX.B new file mode 100755 index 00000000..28a1f330 --- /dev/null +++ b/Ardent/UV/APP.PROGS/LIST.BOX.B @@ -0,0 +1,26 @@ +******************************************************************************* +* +* New System Admin - This routine creates a box on the screen which +* allows the user to page through a large data structure, and +* select an entry. +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description......................................... +* 10/14/98 23801 SAP Change copyrights. +* 12/07/90 7673 DTM Changed routine to call SORT.BOX.B +* 11/05/90 7393 DPB Routine first created and admin'd. +******************************************************************************* + +SUBROUTINE LIST.BOX.B(title,sl,nl,ar,ar.c,v.c,sel.val,option) +CALL *SORT.BOX.B(title,sl,nl,ar,ar.c,v.c,sel.val,option,0) +END diff --git a/Ardent/UV/APP.PROGS/LIST.GCI b/Ardent/UV/APP.PROGS/LIST.GCI new file mode 100755 index 00000000..fedfdd97 --- /dev/null +++ b/Ardent/UV/APP.PROGS/LIST.GCI @@ -0,0 +1,101 @@ +******************************************************************************* +* +* List GCI File +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description......................................... +* 10/14/98 23801 SAP Change copyrights. +* 03/25/96 18026 PGW For MS Win, allow GCI file name on command line +* 10/27/89 5273 DSC Exit when given XX et al +* 08/08/88 5264 JSM Added PRINTER RESET +* 08/08/88 5283 JSM Added check for GCI file. +* 07/25/88 - - Maintenence log purged at 5.2.1, see release 5.1.10. +* +******************************************************************************* + +PROGRAM LIST.GCI + + ID = "@(#)%M% %I%" + +$INCLUDE UNIVERSE.INCLUDE FILENAMES.H +$INCLUDE UNIVERSE.INCLUDE MACHINE.NAME +* + prompt "" + CL = @(-4) + CL.ERR = @(0,23):CL + EQU BELL TO CHAR(7) + ERR = CL.ERR:BELL + MSG1=ERR:'Unable to open the file - ' + MSG10=ERR:PROD.NAMEU:' General Calling Interface is not installed.' + + * You can specify the definition file by putting its name on the + * command line, otherwise it defaults to 'GCI' + CMD = CONVERT(" ", @FM, TRIM(@SENTENCE)) + DEF.FILE.NAME = CMD<4> + IF DEF.FILE.NAME = "" THEN DEF.FILE.NAME = 'GCI' + +1 OPEN '','DATA.TYPES' TO FVDATA.TYPES ELSE + PRINT MSG10: + INPUT Q: ; PRINT CL.ERR: ; STOP + END +2 OPEN '',DEF.FILE.NAME TO FVGCI ELSE + PRINT MSG1:DEF.FILE.NAME: + INPUT Q: ; PRINT CL.ERR: ; STOP + END + print @( -1 ) + print @( 0, 0 ):"General Calling Interface Administration" : @( 71, 0 ) : "LIST.GCI": + IF OS.TYPE = "UNIX" THEN + print @(23, 1): "List the ":PROD.NAMEU:" GCI File": + END ELSE + print @(23, 1): "List GCI Definition File ":DEF.FILE.NAME + END + print @( 0, 2 ): str( "-", 79 ): + print @( 0, 4 ): + PRINT @(0,22):"Enter 'LPTR' for printer or for screen display ": + INPUT ANS + IF ANS='XX' OR ANS='xx' OR ANS='X' OR ANS='x' THEN STOP + IF ANS='LPTR' OR ANS='lptr' THEN + PA='' + PA<-1>='PTERM CASE NOINVERT' + PA<-1>='SORT ':DEF.FILE.NAME:' BY LANG _' + PA<-1>='< for all subroutines>> _' + IF OS.TYPE = "UNIX" THEN + HDR='HEADING "Listing of GCI Subroutines ' + END ELSE + HDR='HEADING "Listing of GCI Definition File ' + HDR:="'F'" + END + HDR:=" 'L' " + HDR:='" _' + PA<-1>=HDR + PA<-1>='LPTR' + PA<-1>='PTERM CASE INVERT' + END ELSE + PA='' + PA<-1>='PTERM CASE NOINVERT' + PA<-1>='SORT ':DEF.FILE.NAME:' BY S.LANG _' + PA<-1>='< for all subroutines>> _' + IF OS.TYPE = "UNIX" THEN + HDR='HEADING "Listing of GCI Subroutines ' + END ELSE + HDR='HEADING "Listing of GCI Definition File ' + HDR:="'F'" + END + HDR:=" 'L' " + HDR:='"' + PA<-1>=HDR + PA<-1>='PTERM CASE INVERT' + END + PRINTER RESET + EXECUTE PA + END diff --git a/Ardent/UV/APP.PROGS/LIST.TYPES b/Ardent/UV/APP.PROGS/LIST.TYPES new file mode 100755 index 00000000..b6b8e89e --- /dev/null +++ b/Ardent/UV/APP.PROGS/LIST.TYPES @@ -0,0 +1,76 @@ +******************************************************************************* +* +* List DATA.TYPES File +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description......................................... +* 10/14/98 23801 SAP Change copyrights. +* 10/27/89 5273 DSC Exit when given XX et al +* 08/08/88 5264 JSM Added PRINTER RESET +* 07/25/88 - - Maintenence log purged at 5.2.1, see release 5.1.10. +* +******************************************************************************* +$INCLUDE UNIVERSE.INCLUDE FILENAMES.H +$INCLUDE UNIVERSE.INCLUDE MACHINE.NAME +* + prompt "" + CL = @(-4) + CL.ERR = @(0,23):CL + EQU BELL TO CHAR(7) + ERR = CL.ERR:BELL + MSG10=ERR:PROD.NAMEU:' General Calling Interface is not installed.' +1 OPEN '','DATA.TYPES' TO FVDATA.TYPES ELSE + PRINT MSG10: + INPUT Q: ; PRINT CL.ERR: ; STOP + END + print @( -1 ) + print @( 0, 0 ):"General Calling Interface Administration" : @( 69, 0 ) : "LIST.TYPES": + print@( 23, 1): "List the ":PROD.NAMEU:" DATA.TYPES File": + print @( 0, 2 ): str( "-", 79 ): + print @( 0, 4 ): + PRINT @(0,22):"Enter 'LPTR' for printer or for screen display ": + INPUT ANS + IF ANS='XX' OR ANS='xx' OR ANS='X' OR ANS='x' THEN STOP + IF ANS='LPTR' OR ANS='lptr' THEN + PA='' + PA<-1>='SORT DATA.TYPES BY L.LANG BY L.DATA.TYPE _' + BS='BREAK.SUP " ' + BS:=" 'BP' " + BS:='" L.LANG _' + PA<-1>=BS + PA<-1>='L.DATA.TYPE L.DECLARATION L.INP.CONV L.OPT.CONV L.CLEANUP L.INC.FILES ID.SUP _' + PA<-1>='DBL.SPC _' + HDR='HEADING "Listing of GCI Data Types ' + HDR:="for the 'B' Language" + HDR:=" 'L' " + HDR:='" _' + PA<-1>=HDR + PA<-1>='LPTR' + END ELSE + PA='' + PA<-1>='SORT DATA.TYPES BY S.LANG BY S.DATA.TYPE _' + BS='BREAK.SUP " ' + BS:=" 'BP' " + BS:='" S.LANG _' + PA<-1>=BS + PA<-1>='S.DATA.TYPE S.DECLARATION S.INP.CONV S.OPT.CONV S.CLEANUP S.INC.FILES ID.SUP _' + PA<-1>='DBL.SPC _' + HDR='HEADING "Listing of GCI Data Types ' + HDR:="for the 'B' Language" + HDR:=" 'L' " + HDR:='"' + PA<-1>=HDR + END + PRINTER RESET + EXECUTE PA + END diff --git a/Ardent/UV/APP.PROGS/LOAD.PIO.B b/Ardent/UV/APP.PROGS/LOAD.PIO.B new file mode 100755 index 00000000..5574c291 --- /dev/null +++ b/Ardent/UV/APP.PROGS/LOAD.PIO.B @@ -0,0 +1,316 @@ +******************************************************************************** +* +* LOAD.PIOPEN.B - Load utility to get PI/open unloaded files. +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description......................................... +* 10/14/98 23801 SAP Change copyrights. +* 02/08/94 14513 JC Changed so that records do not get overwritten. +* 06/27/94 12303 JC Inital code release +* +******************************************************************************* +* +* +* This program will load data into a file from a text file created +* by the UNLOAD.PIOPEN utility. For the format of the text file, +* see the file UNLD.PIOPEN.B. +* +* Command format: +* +* LOAD.PIOPEN [DICT] file.name [[source.dir] text.file.name] +* + EQUATE ASCII.DATA.CODE TO "A" + EQUATE FM.DATA.CODE TO "F" + EQUATE HEX.DATA.CODE TO "H" + EQUATE REC.ID.CODE TO "I" + EQUATE REC.ID.HEX.CODE TO "J" + + line.type.list = ASCII.DATA.CODE + line.type.list := FM.DATA.CODE + line.type.list := HEX.DATA.CODE + line.type.list := REC.ID.CODE + line.type.list := REC.ID.HEX.CODE + + GOSUB parse.command.line + GOSUB open.files + + PRINT "Loading ":target.desc:" from ":source.desc:"." + + * Main processing loop + + end.of.input = 0 + data.error = 0 + lines.read = 0 + records.written = 0 + rec.id = "" + rec.data = "" + + LOOP + READSEQ line FROM text.file ELSE end.of.input = 1 + UNTIL end.of.input DO + lines.read += 1 + line.type = INDEX(line.type.list, line[1,1], 1) + + * This ON ... GOSUB must match the order of line.type.list + ON line.type + 1 GOSUB invalid.line, + ascii.data.line, + fm.data.line, + hex.data.line, + rec.id.line, + rec.id.hex.line + IF data.error THEN STOP + REPEAT + + GOSUB end.of.record + + * All done: close files, etc. + CLOSE target.file + CLOSESEQ text.file + PRINT lines.read:" lines read from ":source.desc:"." + PRINT records.written:" records written to ":target.desc:"." + STOP + +********************************************************************** +* +parse.command.line: +* +* Parse the command line +* + cmd = CONVERT(" ", @FM, TRIM(@SENTENCE)) + field.count = DCOUNT(cmd, @FM) + + IF field.count < 2 THEN + GOSUB print.usage.message + STOP + END + + dict.spec = "" + default.suffix = "_DATA" + target.file.name = cmd<2> + + IF target.file.name = "DICT" THEN + dict.spec = "DICT" + default.suffix = "_DICT" + target.file.name = cmd<3> + target.desc = "the dictionary of " : target.file.name + next.field = 4 + END ELSE + target.desc = target.file.name + next.field = 3 + END + + source.dir = "&UFD&" + BEGIN CASE + CASE next.field > field.count + * Source not specified; assume &UFD&, file.name_[DICT | DATA] + text.file.name = target.file.name : default.suffix + source.desc = text.file.name + + CASE next.field = field.count + * Directory not specified, assume &UFD& + text.file.name = cmd + source.desc = text.file.name + + CASE next.field < field.count + * More to come; extract directory and file name + IF field.count > (next.field + 1) THEN + GOSUB print.usage.message + STOP + END + source.dir = cmd + text.file.name = cmd + source.desc = text.file.name:" in ":source.dir + END CASE + RETURN + +********************************************************************** +* +open.files: +* +* Open the files +* + OPENSEQ source.dir, text.file.name TO text.file ELSE + IF STATUS() = 0 THEN + PRINT "Error: ":source.desc:" does not exist!" + END ELSE + PRINT "Error opening ":source.desc:"!" + PRINT "Status code ":STATUS() + END + STOP + END + OPEN dict.spec, target.file.name TO target.file ELSE + PRINT "Can't open ":target.desc + PRINT "Status code ":STATUS() + STOP + END + RETURN + +********************************************************************** +* +print.usage.message: +* +* In case of error, print a message giving the command syntax. +* + PRINT "Usage: ":cmd<1>:" [DICT] file.name [[source.dir] text.file.name]" + RETURN + +********************************************************************** +* +invalid.line: +* + error.type = "invalid line type ":line[1,1] + GOSUB got.data.error + RETURN + +********************************************************************** +* +got.data.error: +* + PRINT "Error: ":error.type:"." + PRINT "At line ":lines.read:" of ":source.desc:"." + data.error = 1 + RETURN + +********************************************************************** +* +ascii.data.line: +* +* Key A +* What ASCII data +* Format data characters + + rec.data := line[2, LEN(line) - 2] + RETURN + +********************************************************************** +* +fm.data.line: +* +* Key F +* What ASCII data with implied field mark +* Format data characters + + rec.data := @FM : line[2, LEN(line) - 2] + RETURN + +********************************************************************** +* +hex.data.line: +* +* Key H +* What Hexadecimal data +* Format hex codes for data characters + + rec.data := ICONV(line[2, LEN(line)], "MX0C") + RETURN + +********************************************************************** +* +rec.id.line: +* +* Key I +* What Record ID, in plain text +* Format +* + GOSUB end.of.record + IF data.error THEN RETURN + + GOSUB extract.record.length + IF data.error THEN RETURN + + rec.id = line[first.space + 1, (len(line) - first.space - 1)] + RETURN + +********************************************************************** +* +extract.record.length: +* +* Extract the record length field from a record ID line. +* +* Inputs: line +* +* Outputs: first.space Position of delimiting space +* rec.length Record length +* data.error Set if line format is wrong +* + first.space = INDEX(line, " ", 1) + IF first.space = 0 THEN + error.type = "incorrect line format; no spaces" + GOSUB got.data.error + RETURN + END + + rec.length = line[2, first.space - 2] + IF NUM(rec.length) THEN + rec.length += 0 + END ELSE + error.type = "non-numeric record length '":rec.length:"'" + GOSUB got.data.error + RETURN + END + RETURN + +********************************************************************** +* +rec.id.hex.line: +* +* Key J +* What Hex-encoded record ID +* Format +* + GOSUB end.of.record + IF data.error THEN RETURN + + GOSUB extract.record.length + IF data.error THEN RETURN + + rec.id = ICONV(line[first.space + 1, len(line)], "MX0C") + RETURN + +********************************************************************** +* +end.of.record: +* +* This routine is called whenever there may be a record to be written. +* It expects the following variables to be set up: +* +* rec.id record ID, or empty if there is no record +* rec.length expected length of record +* rec.data record data read in so far +* + IF LEN(rec.id) = 0 THEN + * Nothing to do + RETURN + END + + IF rec.length # LEN(rec.data) THEN + error.type = "data length error: expected ":rec.length + error.type := ", found ":LEN(rec.data) + GOSUB got.data.error + RETURN + END + + READ dummy FROM target.file, rec.id + ELSE + WRITE rec.data ON target.file, rec.id + END + + records.written += 1 + + rec.id = "" + rec.length = 0 + rec.data = "" + RETURN + + END + diff --git a/Ardent/UV/APP.PROGS/LOC.BY.FLD.B b/Ardent/UV/APP.PROGS/LOC.BY.FLD.B new file mode 100755 index 00000000..6dcdf9de --- /dev/null +++ b/Ardent/UV/APP.PROGS/LOC.BY.FLD.B @@ -0,0 +1,42 @@ +******************************************************************************* +* +* New System Admin - This routine will search for a particular value in +* a dynamic array, and return the location at which it was found. +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description......................................... +* 10/13/98 23801 RGA Change copyright info. +* 11/05/90 7393 DPB Routine first created and admin'd. +******************************************************************************* + +subroutine loc.by.fld (dyn.array, siz, start.field, val, expr, ret.field) +* Searches through dynamic array dyn.array, of size siz, starting +* at field start.field, +* and returns the ret.field which is the field whose value val +* is equal to expr. +* Starts search at field specified +* Returns 0 if not found. +* This is like an execution of select, find me the field whose third value +* is this expression. +* Weakness - doesn't handle subvalues. +start.from = if start.field <= 1 then 1 else start.field +ret.field = 0 +* print @(0,22):@(-3):@SYS.BELL:"LOC.BY.FLD called." +for i = start.field to siz +while ret.field = 0 ; * For efficiency - return first hit + if dyn.array = expr + then + ret.field = i + end +next i +return diff --git a/Ardent/UV/APP.PROGS/LOG.ACT.B b/Ardent/UV/APP.PROGS/LOG.ACT.B new file mode 100755 index 00000000..a0d23523 --- /dev/null +++ b/Ardent/UV/APP.PROGS/LOG.ACT.B @@ -0,0 +1,438 @@ +***************************************************************************** +* +* Transaction Logger Activation of file STUB +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description......................................... +* 10/14/98 23801 SAP Change copyrights. +* 09/18/96 19269 DJD Added NT file sep. support. +* 03/28/96 18212 LAG Windows NT port +* 11/17/94 15270 EAP Corrected type in file header +* 11/16/94 15270 EAP Moved index file handling into log_main +* 10/25/94 15178 EAP More informative when activating Indexed files +* 09/16/94 15016 DTM Fixed condition where file had been activated before +* 07/22/94 13286 DTM Cleaned up message output... +* 07/13/94 14357 EAP Modified to activate INDEX files +* 04/28/93 10228 DTM Enhanced to use MOTIF style... +* 02/09/93 11033 CSM Process file names containing $ +* 12/19/91 8483 GMH Fixed error message from UV.ACCOUNT check +* 12/16/91 8997 GMH Added uvhome path +* 10/08/91 8439 GMH Added entry for multiple files per account +* 09/13/91 8438 GMH Added UV.ACCOUNT check +* 09/13/91 8436 GMH Removed TLprim/TLsec verification +* 05/14/91 8345 KIS Changed PRINTs to TPRINTs +* 04/25/91 8230 KIS Added null var for CINPUT +* 03/25/91 8169 KIS Added extra arg to CHOICE.box.B +* 03/11/91 7876 KIS Added args = '' +* 02/24/91 7915 KIS Added prompts for acct and filename +* 02/12/91 7911 KIS Changed HELP to CHOICE box for user to acknowl. +* 01/07/91 7896 KIS Changed call of log.activate to "log_main 1" +* 12/29/90 7791 KIS Added call to ISUSER.B +* 04/06/90 - KIS Initial +* +******************************************************************************* +* +$INCLUDE UNIVERSE.INCLUDE MTF.INCL.H +$INCLUDE UNIVERSE.INCLUDE FILENAMES.H +$INCLUDE UNIVERSE.INCLUDE MACHINE.NAME +* +************************************** +* Initializations +************************************** +CLSCR = @(-1) +CLLIN = @(-4) + +************************************************************************* +* The program is a stub in SysAdmin to run the C program log.activate +************************************************************************* + +title = 'Transaction Logging File Activation' +args = "" +temp = "" +temp2 = "" +b.array = "" +b.array<1> = 1 +b.array<2> = UVREADMSG(073029,"") +sel = 1 +dtype = 0 + +hit.return = "" +hit.return = UVREADMSG(001403,"") + +EQU size TO 3 +EQU devtype TO 4 + +* Get uid of user +CALL *ISUSER.B(0,id2) + +* Display +GOSUB init.form +GOSUB init.menu +TPRINT CLSCR +CALL *DRAW.SCRN.B(title,1) +msg = "This program is used to allow the administrator to activate one or " +msg := "more programs for logging" +CALL *PUT.FORM.B(form.size,form,"","?",1) +CALL *MNU.BAR.PR.B(Menu.Bar,1) + +* Do work if superuser + +IF id2 = 1 THEN + + * Make certain devices are configured + * Commented out for gtar 8436 + + * gosub VERIFY.LOG.DEVICES: + + * Prompt for Account name and filename + + * Let's first open the UV.ACCOUNT file + open 'UV.ACCOUNT' to VALID.ACCOUNTS else + temp = UVREADMSG(1322,"UV.ACCOUNT") + CALL *CHOICE.BOX.B(7,7,40,temp<1>:" ":hit.return<1>,b.array,sel,"") + stop + end + + accnam = '' + CALL *HELP.PRINT.B(msg, 3) + +INPUT.LOOP: + + * Enter account name + * PRINT @(10,5):CLLIN: + * CALL *UVPRINTMSG(85122,""); + CALL *HELP.PRINT.B(form,2) + TPRINT form: + inputvalue='' + special = '' + CALL *CINPUT.B(" ",inputvalue,special,form,form) + + * Verify results + IF special # 0 THEN + BEGIN CASE + CASE special = ESCAPE + TPRINT CLSCR + STOP + CASE special = F.1 + CALL *HELP.PRINT.B(form, 3) + GOTO INPUT.LOOP + CASE special = F.4 + BEGIN CASE + CASE form.line = 1 + GOSUB List.Accounts + if (sel.val > 0) THEN + accnam = list.array + end else + CALL *PUT.FORM.B(form.size,form,input.form,"?",1) + GOTO INPUT.LOOP + end + input.form<1> = accnam + form.line = 2 + CASE form.line = 2 + GOSUB List.Files + if (ans > 0) THEN + filnam = list.list + end else + CALL *PUT.FORM.B(form.size,form,input.form,"?",1) + CALL *HELP.PRINT.B("",1) + GOTO INPUT.LOOP + end + input.form<2> = filnam + CALL *PUT.FORM.B(form.size,form,input.form,"?",1) + GOTO DoFileCheck: + END CASE + CALL *PUT.FORM.B(form.size,form,input.form,"?",1) + CASE special = F.10 + action.value=1 + CALL *DO.MNU.BAR.B(Menu.Bar,action.value,form.size,form,input.form) + BEGIN CASE + CASE action.value = 1 + STOP @(-1) + CASE action.value = 2 + STOP @(-1) + CASE action.value = 3 + message=gmsg + CALL *HELP.BOX.B(3,10,60,message) + CASE action.value = 4 + message=UVREADMSG(076001,"") + CONVERT @FM TO " " IN message + CALL *HELP.BOX.B(3,10,60,message) + CASE action.value = 5 + CALL *HELP.BOX.B(3,10,45,UVREADMSG(076000,"")) + END CASE + CALL *PUT.FORM.B(form.size,form,input.form,"?",1) + goto INPUT.LOOP + CASE special = UP.ARROW + if form.line # 2 then GOTO INPUT.LOOP: + form.line = 1 + GOTO INPUT.LOOP: + CASE 1 + sel = 1 + CALL *PUT.FORM.B(form.size,form,input.form,"?",1) + goto INPUT.LOOP: + END CASE + END ELSE + BEGIN CASE + CASE form.line = 1 + IF inputvalue = '' THEN TPRINT CLSCR;STOP + accnam = inputvalue + + * Let's verify accname entered + readv temp from VALID.ACCOUNTS,accnam,0 else + temp = UVREADMSG(85001,accnam) + temp := " ":hit.return<1> + CALL *CHOICE.BOX.B(5,10,40,temp,b.array,sel,"") + CALL *PUT.FORM.B(form.size,form,input.form,"?",1) + goto INPUT.LOOP: + end + filnam = '' + input.form<1> = accnam + form.line = 2 + GOTO INPUT.LOOP: + CASE form.line = 2 + filnam = inputvalue + IF filnam = '' THEN GOTO INPUT.LOOP: + input.form<2> = filnam + + CALL *HELP.PRINT.B(UVREADMSG(073058,""),3) +DoFileCheck: + * Check if DICT or PDICT part of file, then parse out. + numsp = COUNT(filnam,' ') + dname = "" + IF numsp = 1 THEN + dname = FIELD(filnam," ",1) + filnam = FIELD(filnam," ",2) + IF dname = 'DICT' THEN + dtype = 1 + END ELSE IF dname = 'PDICT' THEN + dtype = 2 + END ELSE + temp = UVREADMSG(85130,"") + CALL *CHOICE.BOX.B(7,7,40,temp<1>:" ":hit.return<1>,b.array,sel,"") + CALL *PUT.FORM.B(form.size,form,input.form,"?",1) + goto INPUT.LOOP: + END + END ELSE IF numsp = 0 THEN + IF filnam = 'DICT' OR filnam = 'PDICT' THEN + temp = UVREADMSG(85124,"") + CALL *CHOICE.BOX.B(7,7,40,temp<1>:" ":hit.return<1>,b.array,sel,"") + CALL *PUT.FORM.B(form.size,form,input.form,"?",1) + goto INPUT.LOOP: + END + dtype = 0 + END ELSE + temp = UVREADMSG(85130,"") + CALL *CHOICE.BOX.B(7,7,40,temp<1>:" ":hit.return<1>,b.array,sel,"") + CALL *PUT.FORM.B(form.size,form,input.form,"?",1) + goto INPUT.LOOP: + END + + GOSUB DisplayIt + msg = "Account (":accnam:") - Filename (":filnam:") has been " + msg :="activated. Please enter another, or hit return/ESCAPE to exit" + CALL *HELP.PRINT.B(msg, 2) + CALL *PUT.FORM.B(form.size,form,input.form,"?",1) + END CASE + END + goto INPUT.LOOP: + +END ELSE + *Must be a superuser to execute this program. + temp = UVREADMSG(71000,"") + CALL *CHOICE.BOX.B(7,7,40,temp<1>:" ":hit.return<1>,b.array,sel,"") + TPRINT CLSCR: +END +* End of main +STOP + + +* +*Start of subroutines +* +VERIFY.LOG.DEVICES: + *** Open &DEVICE& file to make sure that devices were configured *** + + OPEN '','&DEVICE&' TO fvdevice ELSE + temp = UVREADMSG(1322,"&DEVICE&") + CALL *CHOICE.BOX.B(7,7,40,temp<1>:" ":hit.return<1>,b.array,sel,"") + stop + END + + READ TLprim FROM fvdevice, 'TLprim' ELSE + args<1> = "TLprim" + args<2> = "&DEVICE&" + temp = UVREADMSG(20052,args) + temp2 = UVREADMSG(85209,"") + CALL *CHOICE.BOX.B(7,7,40,temp<1>:" ":temp2<1>:" ":hit.return<1>,b.array,sel,"") + stop + END + + READ TLsec FROM fvdevice, 'TLsec' ELSE + args<1> = "TLsec" + args<2> = "&DEVICE&" + temp = UVREADMSG(20052,args) + temp2 = UVREADMSG(85209,"") + CALL *CHOICE.BOX.B(7,7,40,temp<1>:" ":temp2<1>:" ":hit.return<1>,b.array,sel,"") + stop + END + + *** Make sure TLprim & sec contain somewhat appropriate config. info + if TLprim[1,1] # 'L' or NOT(NUM(TLprim)) then + temp = UVREADMSG(85214,"TLprim") + CALL *CHOICE.BOX.B(7,7,40,temp<1>:" ":hit.return<1>,b.array,sel,"") + stop + END + + if TLsec[1,1] # 'L' or NOT(NUM(TLsec)) then + temp = UVREADMSG(85214,"TLsec") + CALL *CHOICE.BOX.B(7,7,40,temp<1>:" ":hit.return<1>,b.array,sel,"") + stop + END +END.OF.VERIFY: + RETURN + +init.form: + form= NULL + form.size = 2 + form.line = 1 + form<1,1> = @(3,6) + form<1,2> = @(52,6) + form<1,3> = "Enter account name containing file to activate:" + form<1,4> = "Enter account name containing file or F4 to get a complete " + form<1,4> := "list of uniVerse accounts" + form<1,5> = form<1,4> + form<1,6> = 25 + form<1,7> = 1 + form<2,1> = @(3,8) + form<2,2> = @(52,8) + form<2,3> = "Enter file to activate:" + form<2,4> = "Enter file to be activated for logging" + form<2,5> = form<1,4> + form<2,6> = 25 + form<2,7> = 1 + input.form = "" + input.form<1> = "" + input.form<2> = "" +return +*************************************************************************** +* init.menu - initializes menu bar +*************************************************************************** +init.menu: + scratch=UVREADMSG(073087,"") + Menu.Bar = NULL + Menu.Bar<1,1> = 3 ;* Number of Items in Menu.Bar + Menu.Bar<1,2> = 1 ;* Line # on which to print the Menu Bar +* First Item + Menu.Bar<2,1,1>=scratch<1> ;* SubMenu Title + Menu.Bar<2,1,2>=1 ;* # of items in SubMenu +* SubMenu #1 + Menu.Bar<2,2,1>=scratch<6> ;* SubMenu Item + Menu.Bar<2,2,2>=1 ;* Action Code (Returned to calling process) + Menu.Bar<2,2,3>=scratch<7> +* Second Item + Menu.Bar<3,1,1>=scratch<8> ;* SubMenu Title + Menu.Bar<3,1,2>=1 ;* # of items in SubMenu +* SubMenu #1 + Menu.Bar<3,2,1>=scratch<6> ;* SubMenu Item + Menu.Bar<3,2,2>=2 ;* Action Code + Menu.Bar<3,2,3>=scratch<7> + scratch=UVREADMSG(073089,"") + Menu.Bar<4,1,1>=scratch<1> + Menu.Bar<4,1,2>=3 + Menu.Bar<4,2,1>=scratch<2> + Menu.Bar<4,2,2>=3 + gmsg = "Transaction Logging File Activation - This applications is used " + gmsg :=" to activate files for transaction logging." + Menu.Bar<4,2,3>=gmsg + Menu.Bar<4,3,1>=scratch<4> + Menu.Bar<4,3,2>=4 + Menu.Bar<4,3,3>=scratch<5> + Menu.Bar<4,4,1>=scratch<6> + Menu.Bar<4,4,2>=5 + Menu.Bar<4,4,3>=scratch<7> +RETURN + +List.Accounts: + CALL *HELP.PRINT.B(UVREADMSG(073058,""),2) + SELECT VALID.ACCOUNTS + list.array="" + lping = 1 + uv.acct.cnt = 0 + LOOP + READNEXT temp ELSE lping = 0 + uv.acct.cnt+=1 + list.array = temp + READ invar FROM VALID.ACCOUNTS,temp ELSE NULL + list.array=invar<11> + UNTIL lping = 0 REPEAT + sel.val=1 + title="" + title<1>=0 + title<2>="Account" + title<3>="Directory" + CALL *LIST.BOX.B(title,4,11,list.array,uv.acct.cnt,2,sel.val,0) + CALL *HELP.PRINT.B("",3) + RETURN + +List.Files: + CALL *HELP.PRINT.B(UVREADMSG(073058,""),2) + command = 'SSELECT REMOTE.VOC WITH TYPE = "F" AND WITH F2 UNLIKE ".../..."' + command := ' AND WITH F2 UNLIKE "...\..."' + execute "SSELECT UV.ACCOUNT ":accnam:" SAVING PATH" capturing SCREEN + readlist tmp else return + rvoc = "" + rvoc<1> = "F" + rvoc<2> = tmp:"/VOC" + rvoc<3> = "D_VOC" + OPEN 'VOC' to UV.VOC ELSE RETURN + write rvoc on UV.VOC, "REMOTE.VOC" else + temp = UVREADMSG(085624,"") + RP = "" + RP<1> = 1 + RP<2> = UVREADMSG(073029,"") + sel = 1 + HR = UVREADMSG(001403,"") + call *CHOICE.BOX.B(5,7,40,temp<1>:" ":HR<1>,RP,sel,"") + CALL *PUT.FORM.B(form.size,form,input.form,"?",1) + RETURN + END + execute command capturing SCREEN + readlist list.list else + return + end + list.max = DCOUNT(list.list,@fm) + max.lines = if list.max > 11 then 11 else list.max + ans = 1 + list.list = DELETE(list.list,1) + call *LIST.BOX.B("Files", 4, max.lines, list.list, list.max, 1, ans, 0) + IF ans # -1 THEN + filnam = list.list + END + RETURN + +DisplayIt: + TPRINT CLSCR + command = OS.EXEC:" '":UV.ROOT:"/bin/log_main 1" + command:= " ":'"':accnam:'"':" ":dtype:" ":dname:" ":'"':filnam:'"':"'" + execute command + message = "Press Return to Continue" + CALL *HELP.BOX.B( 9, 10,50,message ) + CALL *DRAW.SCRN.B( title, 1) + CALL *PUT.FORM.B(form.size,form,input.form,"?",1) + CALL *MNU.BAR.PR.B(Menu.Bar, 1) + RETURN +* +* End of program +* +END + diff --git a/Ardent/UV/APP.PROGS/LOG.RESTORE.B b/Ardent/UV/APP.PROGS/LOG.RESTORE.B new file mode 100755 index 00000000..14723e51 --- /dev/null +++ b/Ardent/UV/APP.PROGS/LOG.RESTORE.B @@ -0,0 +1,121 @@ +****************************************************************************** +* +* System Admin Transaction Logging - Restore Files +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description........................................ +* 10/14/98 23801 SAP Change copyrights. +* 06/10/96 18591 EAP No longer uses tlrestore shell script +* 03/25/96 18212 LAG Windows NT port +* 10/14/94 15104 DTM Fixed to verify number of prompts +* 05/15/94 13286 DTM Initial programming +* +******************************************************************************* +$OPTIONS INFORMATION +id = "%W%" +******************************************************************************* +$INCLUDE UNIVERSE.INCLUDE TLOG.H +$INCLUDE UNIVERSE.INCLUDE FILENAMES.H +$INCLUDE UNIVERSE.INCLUDE MACHINE.NAME + +$IFDEF UV.MSWIN +$DEFINE COMMAND.SEPARATOR "&&" +$ELSE +$DEFINE COMMAND.SEPARATOR ";" +$ENDIF + +TMP = TRIM( @SENTENCE ) +@SYSTEM.RETURN.CODE = 0 +CNT = COUNT( TMP, " " ) +IF ( CNT < 2 OR CNT > 4 ) THEN + PRINT "Error: Incorrect number of arguments" + @SYSTEM.RETURN.CODE = -1 +END + +FirstLog = FIELD( TMP, " ", 2 ) +LastLog = FIELD( TMP, " ", 3 ) +PATH = FIELD( TMP, " ", 4 ) + +IF PATH = "" THEN + RECIO( PATH, RECIO$PATH ) +END + +* Check that the specified directory exists + +OPENPATH PATH TO FVAR THEN + IF STATUS() <> 19 AND STATUS() <> 1 THEN + PRINT "Error: ":PATH:" is not a directory." + @SYSTEM.RETURN.CODE = -1 + END +END +ELSE + PRINT "Error: Unable to open ":PATH + @SYSTEM.RETURN.CODE = -1 +END +CLOSE FVAR + +Device = FIELD( TMP, " ", 5 ) +IF Device = "" THEN + * use MT0 + Device = "MT0" +END + +* If Device is the id of a record in the &DEVICE& file then it is a +* Universe device name otherwise its is an OS file name which on UNIX +* could be an OS tape device name. + +OPEN "","&DEVICE&" TO FVAR ELSE + PRINT "Error: Unable to open &DEVICE& file." + @SYSTEM.RETURN.CODE = -1 +END + +READV REC FROM FVAR,Device,0 ELSE + Filename = Device + Device = "" +END + +CLOSE FVAR + +* Generate a list of log file names to restore. +list = "" +FOR i = FirstLog TO LastLog + list := " -F lg":i +NEXT i + +IF @SYSTEM.RETURN.CODE = 0 AND list <> "" THEN + * Get settings for terminal so that we can restore them after + * uvrestore has completed. + + TTYGET tty.settings ELSE NULL + + * cd to specified directory and restore using file name list. + + * Blocksize of 512 is temporary workaround for Gtar 18540 + + Exec.Sentence = OS.EXEC: " 'cd ":PATH:COMMAND.SEPARATOR:UV.ROOT:"/bin/uvrestore -v -l -b 512":list + IF Device <> "" THEN + Exec.Sentence := " -t ":Device + END + ELSE + Exec.Sentence := " ":Filename + END + Exec.Sentence := "'" + + EXECUTE Exec.Sentence + + TTYSET tty.settings ELSE NULL +END + +RETURN + +END diff --git a/Ardent/UV/APP.PROGS/LOG.SAVE.B b/Ardent/UV/APP.PROGS/LOG.SAVE.B new file mode 100755 index 00000000..ff5aaa93 --- /dev/null +++ b/Ardent/UV/APP.PROGS/LOG.SAVE.B @@ -0,0 +1,121 @@ +****************************************************************************** +* +* System Admin Transaction Logging - Save Files +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description........................................ +* 10/14/98 23801 SAP Change copyrights. +* 06/07/96 18591 EAP Module created +* +******************************************************************************* +$OPTIONS INFORMATION +id = "%W%" +******************************************************************************* +$INCLUDE UNIVERSE.INCLUDE TLOG.H +$INCLUDE UNIVERSE.INCLUDE FILENAMES.H +$INCLUDE UNIVERSE.INCLUDE MACHINE.NAME + +$IFDEF UV.MSWIN +$DEFINE COMMAND.SEPARATOR "&&" +$ELSE +$DEFINE COMMAND.SEPARATOR ";" +$ENDIF + +TMP = TRIM( @SENTENCE ) +@SYSTEM.RETURN.CODE = 0 +CNT = COUNT( TMP, " " ) +IF ( CNT < 2 OR CNT > 4 ) THEN + PRINT "Error: Incorrect number of arguments" + @SYSTEM.RETURN.CODE = -1 +END + +FirstLog = FIELD( TMP, " ", 2 ) +LastLog = FIELD( TMP, " ", 3 ) +PATH = FIELD( TMP, " ", 4 ) + +IF PATH = "" THEN + * Use current logging directory + RECIO( PATH, RECIO$PATH ) +END + +* Check that the specified directory exists + +OPENPATH PATH TO FVAR THEN + IF STATUS() <> 19 AND STATUS() <> 1 THEN + PRINT "Error: ":PATH:" is not a directory." + @SYSTEM.RETURN.CODE = -1 + END +END +ELSE + PRINT "Error: Unable to open ":PATH + @SYSTEM.RETURN.CODE = -1 +END +CLOSE FVAR + +Device = FIELD( TMP, " ", 5 ) + +IF Device = "" THEN + * use MT0 + Device = "MT0" +END + +* If Device is the id of a record in the &DEVICE& file then it is a +* Universe device name otherwise its is an OS file name which on UNIX +* could be an OS tape device name. + +OPEN "","&DEVICE&" TO FVAR ELSE + PRINT "Error: Unable to open &DEVICE& file." + @SYSTEM.RETURN.CODE = -1 +END + +READV REC FROM FVAR,Device,0 ELSE + Filename = Device + Device = "" +END + +CLOSE FVAR + +* Generate a list of log file names to save. +list = "" +FOR i = FirstLog TO LastLog + list := " lg":i +NEXT i + +IF @SYSTEM.RETURN.CODE = 0 AND list <> "" THEN + * Get settings for terminal so that we can restore them after + * uvbackup has completed. + + TTYGET tty.settings ELSE NULL + + * cd to logging directory and save using file name list so that the log files + * can be easily restored somewhere else. + + * Blocksize of 512 is temporary workaround for Gtar 18540 + + Exec.Sentence = OS.EXEC:" 'cd ":PATH:COMMAND.SEPARATOR:UV.ROOT:"/bin/uvbackup -v -b 512 -f":list + IF Device <> "" THEN + Exec.Sentence := " -t ":Device + END + ELSE + Exec.Sentence := " >":Filename + END + Exec.Sentence := "'" + + EXECUTE Exec.Sentence + + TTYSET tty.settings ELSE NULL +END + +RETURN + +END diff --git a/Ardent/UV/APP.PROGS/LOG.UVTRNS.B b/Ardent/UV/APP.PROGS/LOG.UVTRNS.B new file mode 100755 index 00000000..bc4d8c39 --- /dev/null +++ b/Ardent/UV/APP.PROGS/LOG.UVTRNS.B @@ -0,0 +1,59 @@ +***************************************************************************** +* +* Transaction Logger Acitvated File Status +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description......................................... +* 10/14/98 23801 SAP Change copyrights. +* 05/14/91 8345 KIS Changed PRINTs to TPRINTs +* 03/25/91 8169 KIS Added extra arg to CHOICE.box.B +* 02/15/91 7910 KIS Initial +* +******************************************************************************* +* +$INCLUDE UNIVERSE.INCLUDE MTF.INCL.H +* +CLSCR = @(-1) +PROMPT "" + +title = 'Transaction Logging Activated File Status' + +temp = "" +b.array = "" +b.array<1> = 1 +b.array<2> = UVREADMSG(073029,"") +sel = 1 + +hit.return = "" +hit.return = UVREADMSG(001403,"") + +args = "" +CALL *ISUSER.B(0,id2) + +IF id2 = 1 THEN + + ******************************************* + **** Display File Activation Status + ******************************************* + + EXECUTE "LIST UV.TRANS" + TPRINT + CALL *UVPRINTMSG(1142,"") + + INPUT inp,1 + STOP + +END ELSE + temp = UVREADMSG(71000,"") + CALL *CHOICE.BOX.B(17,7,40,temp<1>:" ":hit.return<1>,b.array,sel,"") +END diff --git a/Ardent/UV/APP.PROGS/LOGRAW.SAVE.B b/Ardent/UV/APP.PROGS/LOGRAW.SAVE.B new file mode 100755 index 00000000..7530159e --- /dev/null +++ b/Ardent/UV/APP.PROGS/LOGRAW.SAVE.B @@ -0,0 +1,400 @@ +****************************************************************************** +* +* System Admin Transaction Logging - Save Files from Raw device +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description........................................ +* 10/14/98 23801 SAP Change copyrights. +* 06/26/98 23161 RGA Module created +* +******************************************************************************* +$OPTIONS INFORMATION +id = "%W%" +******************************************************************************* +$INCLUDE UNIVERSE.INCLUDE TLOG.H +$INCLUDE UNIVERSE.INCLUDE FILENAMES.H +$INCLUDE UNIVERSE.INCLUDE MACHINE.NAME +$INCLUDE UNIVERSE.INCLUDE VMADMCMN.H + + +$IFDEF UV.MSWIN +$DEFINE COMMAND.SEPARATOR "&&" +$ELSE +$DEFINE COMMAND.SEPARATOR ";" +$ENDIF + +EQU FULLSTATE TO 'F' +SKIPREC = 0 + + * Initialize + + OPENED.FLAG = @FALSE + DICT.OPENED.FLAG = @FALSE + DICT.LOCKED.FLAG = @FALSE + + + Open 'VOC' To VOC Else + @SYSTEM.RETURN.CODE = -1 + Return + End + +* Look for VMADMDBG record in VOC. If it's present, switch DEBUGGING on + + Read Rec From VOC, "VMADMDBG" Then + DEBUGGING = True + End Else + DEBUGGING = False + End + If DEBUGGING Then + DebugFile = "./Debug_":@UserNo + OpenSeq DebugFile To DEBUGFL Else + Create DEBUGFL Else + DEBUGGING = False + End + Seek DEBUGFL, -1, 2 Else Null + LogText = Oconv(Date(), "D2/"):" ":Oconv(Time(), "MTS") + GoSub WriteDbg + End + End + + If DEBUGGING Then + LogText = "Initialising in LOGRAW.SAVE.B" + GoSub WriteDbg + End + +TMP = TRIM( @SENTENCE ) +@SYSTEM.RETURN.CODE = 0 +CNT = COUNT( TMP, " " ) +IF ( CNT < 2 OR CNT > 6 ) THEN + PRINT "Error: Incorrect number of arguments" + @SYSTEM.RETURN.CODE = -1 +END + +FirstLog = FIELD( TMP, " ", 2 ) +LastLog = FIELD( TMP, " ", 3 ) +PATH = FIELD( TMP, " ", 4 ) +RAWPATH = FIELD( TMP, " ", 5 ) +DELDSKLOGS = FIELD( TMP, " ",7) + + If DEBUGGING Then + LogText = "Fl = ":FirstLog:" Ll = ":LastLog:" Path = ":PATH:" RAWP = ":RAWPATH:" DELDSKLOGS = ":DELDSKLOGS + GoSub WriteDbg + End + + * First, open UV_LOGS to check for any logs which have status + * other than released. If so, then we disallow this operation + * and return to user + + * Do some initialization + + GOSUB INIT + + * process list of log file numbers - we have at least one + * If we drop out because SEQUENCE.NUMBER is zero an error + * is sent back + FOR I = 1 TO SEQUENCE.NUMBER + GOSUB CHECK.LOGFILE + IF SKIPREC <> 0 Then + CONTINUE + END + IF EOF <> 0 THEN + IF I < INT(SEQUENCE.NUMBER) THEN + CONTINUE + END + END + * + * This will create normal log files in the PATH directory + * + Exec.uvfile = OS.EXEC:" '":UV.BIN:"/UVtlconvert ":RAWPATH:" ":FILE.OFFSET:" ":PATH:"'" + + If DEBUGGING Then + LogText = "Exec.uvfile = ":Exec.uvfile + GoSub WriteDbg + End + EXECUTE Exec.uvfile CAPTURING trashcan + If DEBUGGING Then + LogText = "trashcan = ":trashcan + GoSub WriteDbg + End + * + * Only if all files are converted will + * the rest proceed + * + IF NOT(INDEX(trashcan, "1", 1)) THEN + @SYSTEM.RETURN.CODE = -1 + GOTO EXIT + END + NEXT I + + +IF PATH = "" THEN + * Use current logging directory + RECIO( PATH, RECIO$PATH ) +END + +* Check that the specified directory exists + +OPENPATH PATH TO FVAR THEN + IF STATUS() <> 19 AND STATUS() <> 1 THEN + PRINT "Error: ":PATH:" is not a directory." + @SYSTEM.RETURN.CODE = -1 + END +END +ELSE + PRINT "Error: Unable to open ":PATH + @SYSTEM.RETURN.CODE = -1 +END +CLOSE FVAR + +Device = FIELD( TMP, " ", 6 ) + +IF Device = "" THEN + * use MT0 + Device = "MT0" +END + +* If Device is the id of a record in the &DEVICE& file then it is a +* Universe device name otherwise its is an OS file name which on UNIX +* could be an OS tape device name. + +OPEN "","&DEVICE&" TO FVAR ELSE + PRINT "Error: Unable to open &DEVICE& file." + @SYSTEM.RETURN.CODE = -1 +END + +READV REC FROM FVAR,Device,0 ELSE + Filename = Device + Device = "" +END + +CLOSE FVAR + +* Generate a list of log file names to save. +list = "" +FOR i = FirstLog TO LastLog + list := " lg":i +NEXT i + +IF @SYSTEM.RETURN.CODE = 0 AND list <> "" THEN + * Get settings for terminal so that we can restore them after + * uvbackup has completed. + + TTYGET tty.settings ELSE NULL + + * cd to logging directory and save using file name list so that the log files + * can be easily restored somewhere else. + + * Blocksize of 512 is temporary workaround for Gtar 18540 + + Exec.Sentence = OS.EXEC:" 'cd ":PATH:COMMAND.SEPARATOR:UV.ROOT:"/bin/uvbackup -v -b 512 -f":list + IF Device <> "" THEN + Exec.Sentence := " -t ":Device + END + ELSE + Exec.Sentence := " >":Filename + END + Exec.Sentence := "'" + + EXECUTE Exec.Sentence + + TTYSET tty.settings ELSE NULL +END + + IF DELDSKLOGS <> "" THEN + Exec.Sentence = "" + Exec.Sentence = OS.EXEC:" 'rm ":PATH:"lg* " + Exec.Sentence := "'" + EXECUTE Exec.Sentence CAPTURING trashcan + If DEBUGGING Then + LogText = "trashcan = ":trashcan + GoSub WriteDbg + End + END + +RETURN + +********************************************************************** +* WriteDbg - log debug text to file +* Expects debug text in LogText variable +********************************************************************** +WriteDbg: + + WriteSeq Change(LogText, @fm, Char(10)) On DEBUGFL Else Null + Seek DEBUGFL, 0, 2 Else Null + Return + + +*==== +INIT: +*==== + + * Open UV.LOGS + OPEN '', UV.LOGS.FILE.NAME TO UV.LOGS.FVAR ELSE + ERROR = CANNOT.OPEN.UV.LOGS.ERROR + GOSUB ERROR.SUB + GOTO EXIT + END + + OPENED.FLAG = @TRUE + + * Open DICT UV.LOGS + + OPEN 'DICT', UV.LOGS.FILE.NAME TO UV.LOGS.DICT.FVAR ELSE + ERROR = CANNOT.OPEN.UV.LOGS.DICT.ERROR + GOSUB ERROR.SUB + GOTO EXIT + END + + DICT.OPENED.FLAG = @TRUE + + * Lock UV.LOGS to protect us from other users + + READU LOG.NEXT FROM UV.LOGS.DICT.FVAR, "LOG.NEXT" ELSE + ERROR = UV.LOGS.DICT.IS.LOCKED.ERROR + GOSUB ERROR.SUB + GOTO EXIT + END + + SEQUENCE.NUMBER = LOG.NEXT<2> - 1 + + DICT.LOCKED.FLAG = @TRUE + + RETURN + +*============= +CHECK.LOGFILE: +*============= + + * Open the After-Image logfile + + FILENAME = AL.PREFIX : SEQUENCE.NUMBER + + * Determine state of the file + + AI.REC = "" + EOF = 0 + FILE.STATE = "" + FILE.OFFSET = "" + FILE.SIZE = "" + + * + * The subscript I is the key to fetching + * the records from the UV_LOGS file + * + READ AI.REC FROM UV.LOGS.FVAR, I ELSE + EOF = 1 + END + IF (EOF = 1) THEN + RETURN + END + FILE.STATE = AI.REC< AIF.STATUS > + If DEBUGGING Then + LogText = "FILE.STATE = ":FILE.STATE + GoSub WriteDbg + End + + * If file state not EMPTY, error + SKIPREC = 0 + IF FILE.STATE # FULLSTATE THEN + * only process FULL logs + * go on to the next record + SKIPREC = 1 + RETURN + END + + FILE.OFFSET = AI.REC< AIF.OFFSET > + FILE.SIZE = AI.REC< AIF.SIZE > + If DEBUGGING Then + LogText = "FILE.SIZE = ":FILE.SIZE + GoSub WriteDbg + LogText = "FILE.OFFSET = ":FILE.OFFSET + GoSub WriteDbg + End + RETURN + + +*========= +ERROR.SUB: +*========= + + * Error handling routine + + PRINT @SYS.BELL + + * Set return code and report the error + + BEGIN CASE + + CASE ERROR = NOT.ADMINISTRATOR.ERROR + PRINT 'Error: Only the UniVerse Administrator can DELETE log files.' + CASE ERROR = CANNOT.OPEN.UV.LOGS.ERROR + PRINT 'Error: Cannot open UV.LOGS file, Status = ' : STATUS() + CASE ERROR = UV.LOGS.IS.LOCKED.ERROR + PRINT 'Error: The UV.LOGS file is currently locked by another user.' + CASE ERROR = UV.LOGS.DICT.IS.LOCKED.ERROR + PRINT 'Error: The DICT UV.LOGS file is currently locked by another user.' + CASE ERROR = CANNOT.READ.UV.LOGS.ERROR + PRINT 'Error: Reading from UV.LOGS file, Status = ' : STATUS() + CASE ERROR = CANNOT.WRITE.UV.LOGS.ERROR + PRINT 'Error: Writing to UV.LOGS file, Status = ' : STATUS() + CASE ERROR = CANNOT.WRITE.UV.LOGS.DICT.ERROR + PRINT 'Error: Writing to DICT UV.LOGS file, Status = ' : STATUS() + CASE ERROR = CANNOT.DELETE.CURR.LOGFILE.ERROR + PRINT 'Error: Cannot DELETE CURRENT log file "' : FILENAME : '".' + CASE ERROR = FILE.STATE.NOT.EMPTY.ERROR + PRINT 'Error: Log file "' : FILENAME : '" is not empty."' + CASE ERROR = LOGFILE.NOT.FULL.ERROR + PRINT 'Error: Log file "' : FILENAME : '" is not full."' + CASE ERROR = INVALID.UV.LOGS.DIR.ERROR + PRINT 'Error: No Logging Directory Exists.' + CASE ERROR = INCORRECT.NUM.ARGS + PRINT 'Error: Incorrect number of arguments' + + END CASE + + RETURN + + +*--------------- +EXIT: +*--------------- + + * RELEASE the lock and close UV.LOGS + + IF DICT.LOCKED.FLAG THEN + RELEASE UV.LOGS.DICT.FVAR + END + + IF OPENED.FLAG THEN + CLOSE UV.LOGS.FVAR + END + + IF DICT.OPENED.FLAG THEN + CLOSE UV.LOGS.DICT.FVAR + END + + STOP + END + +* END-CODE + + + + + + + + + + + diff --git a/Ardent/UV/APP.PROGS/LTS b/Ardent/UV/APP.PROGS/LTS new file mode 100755 index 00000000..ebbb416a --- /dev/null +++ b/Ardent/UV/APP.PROGS/LTS @@ -0,0 +1,26 @@ +******************************************************************************** +* +* Support of PR1ME INFORMATION subroutine '-LTS' +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description......................................... +* 10/14/98 23801 SAP Change copyrights. +* 07/25/88 - - Maintenence log purged at 5.2.1, see release 5.1.10. +* +******************************************************************************* + +$OPTIONS DEFAULT + +subroutine PR1ME(ans,m1,m2) + ans = LTS(m1,m2) +return diff --git a/Ardent/UV/APP.PROGS/MAKE.NEW.UV b/Ardent/UV/APP.PROGS/MAKE.NEW.UV new file mode 100755 index 00000000..fa4ab51e --- /dev/null +++ b/Ardent/UV/APP.PROGS/MAKE.NEW.UV @@ -0,0 +1,87 @@ +******************************************************************************* +* +* Make a new uv +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description......................................... +* 10/14/98 23801 SAP Change copyrights. +* 02/22/94 12300 LA Added call to CATLG.GCI to automatically catalog +* gci routines. +* 07/14/93 11822 PVW Onsite linking +* 05/10/91 8255 GMH added prompt when make is complete. +* 10/14/89 6314 DTW call to GCI.MAKEFILE +* 08/08/88 5265 JSM Added warning message and prompt to continue. +* 07/25/88 - - Maintenence log purged at 5.2.1, see release 5.1.10. +* +******************************************************************************* +$INCLUDE UNIVERSE.INCLUDE FILENAMES.H +$INCLUDE UNIVERSE.INCLUDE MACHINE.NAME +* + prompt "" + CL = @(-4) + CL.ERR = @(0,23):CL + EQU BELL TO CHAR(7) + ERR = CL.ERR:BELL + MSG10=ERR:PROD.NAMEU:' General Calling Interface is not installed.' +1: OPEN '','DATA.TYPES' TO FVDATA.TYPES ELSE + PRINT MSG10: + INPUT Q: ; PRINT CL.ERR: ; GOTO HOLD.ON.EXIT: + END + * check if uniVerse home/obj directory has been installed + openpath UV.ROOT:"/obj" to obj.directory then + close obj.directory + end else + print CL.ERR: + *UVPRINTMSG(79000) + input Q: + print CL.ERR: + GOTO HOLD.ON.EXIT: + end + prompt "" + print @( -1 ) + print @( 0, 0 ):"General Calling Interface Administration" : @( 68, 0 ) : "MAKE.NEW.UV": + print @( 17, 1): 'Create a new "':PROD.NAMEU:'" in "':UV.ROOT:'/uvsh.new"': + print @( 0, 2 ): str( "-", 79 ): + print @( 0, 4 ): + PRINT 'This procedure will generate a new "gci.c" program and make a new "':PROD.NAME:'" in the file ':UV.ROOT:'/uvsh.new.' + PRINT 'It will also catalog any subroutines which require cataloging.' + PRINT + PRINT 'Are you sure you want to continue? (Y/N)': + INPUT ANS + ANS=UPCASE(ANS) + IF ANS = 'Y' THEN + PRINT + PRINT 'Do you want to update the GCI Makefile? (Y/N)': + INPUT ANS + ANS=UPCASE(ANS) + IF ANS = 'Y' THEN + EXECUTE 'RUN APP.PROGS GCI.MAKEFILE' + PRINT @(0,22):"OK to continue? (Y/N)": + INPUT ANS + ANS=UPCASE(ANS) + IF ANS <> "Y" THEN STOP + END + execute 'RUN APP.PROGS CATLG.GCI' + EXECUTE 'RUN APP.PROGS GEN.GCI' + print @( -1 ) + print @( 0, 0 ):"General Calling Interface Administration" : @( 68, 0 ) : "MAKE.NEW.UV": + print @( 17, 1): 'Create a new "':PROD.NAMEU:'" in "':UV.ROOT:'/uvsh.new"': + print @( 0, 2 ): str( "-", 79 ): + print @( 0, 4 ): + EXECUTE "SH -c 'cd /":UV.GCI:";make'" +HOLD.ON.EXIT: + print CL.ERR:@( 0, 22): CL:"Press any key to continue...": + input WAIT,1: + END + + END diff --git a/Ardent/UV/APP.PROGS/MAKE.PATH.B b/Ardent/UV/APP.PROGS/MAKE.PATH.B new file mode 100755 index 00000000..1469929d --- /dev/null +++ b/Ardent/UV/APP.PROGS/MAKE.PATH.B @@ -0,0 +1,74 @@ +******************************************************************************** +* +* Support of PR1ME INFORMATION subtroutine '!MAKE.PATHNAME' +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description......................................... +* 10/13/98 23801 RGA Change copyright info. +* 09/28/93 12299 LA Initial implementation. +* +******************************************************************************* +* START-DESCRIPTION +* +* This routine allows users to do the following: +* +* - make a pathname from two halves, so long as the second is a +* relative path +* - fully qualify a pathname +* - return the current attach point +* +* CALL !MAKE.PATHNAME(PATH1, PATH2, RESULT, STATUS) +* +* where PATH1 (I) pathname 1 (directoryname or entryname) +* PATH2 (I) pathname 2 (directoryname or entryname) +* (NOTE: if only one of PATH1 or PATH2 is given, +* !MAKE.PATHNAME will return it in its +* fully qualified state, the entryname of +* the pathname does not have to exist. +* If both PATH1 and PATH2 are NULL, then +* !MAKE.PATHNAME will return the current +* attach point) +* RESULT (O) is the resultant pathname +* STATUS (O) returned status of the operation: +* 0 = Success +* IE$NOTRELATIVE = PATH2 was not a relative +* pathname when trying to +* create from two halves +* END-DESCRIPTION +* + +SUBROUTINE PR1ME(PATH1, PATH2, RESULT, STATUS) + +$OPTIONS DEFAULT + +$INCLUDE UNIVERSE.INCLUDE UVKEYS.H +$INCLUDE UNIVERSE.INCLUDE INFO_ERRS.H + + L.PATH1 = PATH1 + L.PATH2 = PATH2 + RESULT = '' + STATUS = 0 + UVPATHNAME = "*UVPATHNAME" + + BEGIN CASE + CASE (LEN(L.PATH1) > 0) AND (LEN(L.PATH2) > 0) + CALL @UVPATHNAME(UVK$CREATEPATH, L.PATH1, L.PATH2, RESULT, STATUS) + CASE (LEN(L.PATH1) > 0) AND (LEN(L.PATH2) = 0) + CALL @UVPATHNAME(UVK$PATHNAME, L.PATH1, '', RESULT, STATUS) + CASE (LEN(L.PATH2) > 0) AND (LEN(L.PATH1) = 0) + CALL @UVPATHNAME(UVK$PATHNAME, L.PATH2, '', RESULT, STATUS) + CASE (LEN(L.PATH1) = 0) AND (LEN(L.PATH2) = 0) + CALL @UVPATHNAME(UVK$CURRENTPATH, '', '', RESULT, STATUS) + END CASE + RETURN +END diff --git a/Ardent/UV/APP.PROGS/MATBLOCK.B b/Ardent/UV/APP.PROGS/MATBLOCK.B new file mode 100755 index 00000000..3b63489e --- /dev/null +++ b/Ardent/UV/APP.PROGS/MATBLOCK.B @@ -0,0 +1,69 @@ +******************************************************************************* +* +* uniVerse port of PI/open MATBLOCK statement +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenance log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description......................................... +* 10/14/98 23801 SAP Change copyrights. +* 02/01/93 10966 PVW Allow SQL NULL as element in multivalued data +* 12/18/92 10757 PVW Change editor special character handling. +* 11/12/92 10214 PVW Port PI/open EDITOR to replace uniVerse EDITOR. +* +******************************************************************************* + + SUBROUTINE MATBLOCK(MAT MEMORY,DYNAMIC.ARRAY,DELIMETER,LINES.PER.CELL) + + MAT MEMORY = "" + CHAR.NUMBER = SEQ(DELIMETER) + CHAR.MAX = 256 + CURRENT.CELL = 1 + LINES.IN.CELL = 0 + TEXT = "" + LAST.DELIMETER = "" + + LOOP + + REMOVE TOKEN FROM DYNAMIC.ARRAY SETTING TEXT.DELIMETER + + IF ISNULL(TOKEN) THEN TOKEN = @NULL.STR + TEXT.DELIMETER = CHAR.MAX - TEXT.DELIMETER + TEXT = TEXT:LAST.DELIMETER:TOKEN + + BEGIN CASE + + CASE TEXT.DELIMETER = 255 AND DELIMETER = @FM + * for segment marks within data keep on the same line + LAST.DELIMETER = CHAR(TEXT.DELIMETER) + + CASE TEXT.DELIMETER >= CHAR.NUMBER + IF LINES.IN.CELL = LINES.PER.CELL + THEN + CURRENT.CELL = CURRENT.CELL + 1 + LINES.IN.CELL = 0 + END + + LINES.IN.CELL = LINES.IN.CELL + 1 + MEMORY(CURRENT.CELL) = TEXT + TEXT = "" + LAST.DELIMETER = "" + + CASE 1 + LAST.DELIMETER = CHAR(TEXT.DELIMETER) + + END CASE + + UNTIL TEXT.DELIMETER = CHAR.MAX DO + REPEAT + + RETURN + END diff --git a/Ardent/UV/APP.PROGS/MATCHES.B b/Ardent/UV/APP.PROGS/MATCHES.B new file mode 100755 index 00000000..995bd6b7 --- /dev/null +++ b/Ardent/UV/APP.PROGS/MATCHES.B @@ -0,0 +1,72 @@ +******************************************************************************** +* +* Support of PR1ME INFORMATION subroutine '!MATCHES' +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description......................................... +* 10/14/98 23801 SAP Change copyrights. +* 09/07/93 12299 LA Initial implementation. +* +******************************************************************************* + +$OPTIONS DEFAULT + +subroutine PR1ME(ANSWER, A, B) + + EQU DEFAULTA TO '' + EQU DEFAULTB TO '' +* + ANSWER='' +* CHECK FOR REUSE OF A AND B + A.REP = SYSTEM(1020, A) + B.REP = SYSTEM(1020, B) + +* +* + A=A + B=B +* +* +A: + REMOVE AA FROM A SETTING ALIM +B: + REMOVE BB FROM B SETTING BLIM +MARK: + MARK=IF ALIM >= BLIM THEN ALIM ELSE BLIM + DELIM=CHAR(256-MARK) +ASSIGN: + ANSWER:=(AA MATCHES BB) : DELIM +CHECK: + IF ALIM=BLIM THEN + IF ALIM=0 THEN GOTO DONE + GOTO A + END + IF ALIM>BLIM THEN + IF NOT(B.REP) THEN BB=DEFAULTB + GOTO NEXTB + END + IF ALIM +LineNo = Menu.Bar<1,2> +Offset = int(80/(NumItems+1)) + +FOR I = 1 TO NumItems + TPRINT @((I*Offset)-int(LENDP(Menu.Bar)/2),LineNo): + IF OffOn = 1 THEN + TPRINT Menu.Bar: + END + ELSE + TPRINT STR(" ",LENDP(Menu.Bar)): + END +NEXT I + +RETURN +END diff --git a/Ardent/UV/APP.PROGS/MODS.B b/Ardent/UV/APP.PROGS/MODS.B new file mode 100755 index 00000000..b4289ac2 --- /dev/null +++ b/Ardent/UV/APP.PROGS/MODS.B @@ -0,0 +1,26 @@ +******************************************************************************** +* +* Support of PR1ME INFORMATION subroutine '-MODS' +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description......................................... +* 10/14/98 23801 SAP Change copyrights. +* 08/09/90 7338 JWT Initial implementation. +* +******************************************************************************* + +$OPTIONS DEFAULT + +subroutine PR1ME(ans,m1,m2) + ans = MODS(m1,m2) +return diff --git a/Ardent/UV/APP.PROGS/MULS b/Ardent/UV/APP.PROGS/MULS new file mode 100755 index 00000000..e42f532a --- /dev/null +++ b/Ardent/UV/APP.PROGS/MULS @@ -0,0 +1,26 @@ +******************************************************************************** +* +* Support of PR1ME INFORMATION subroutine '-MULS' +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description......................................... +* 10/14/98 23801 SAP Change copyrights. +* 12/09/88 5287 JSM Initial implementation. +* +******************************************************************************* + +$OPTIONS DEFAULT + +subroutine PR1ME(ans,m1,m2) + ans = MULS(m1,m2) +return diff --git a/Ardent/UV/APP.PROGS/NEGS.B b/Ardent/UV/APP.PROGS/NEGS.B new file mode 100755 index 00000000..a6661d3e --- /dev/null +++ b/Ardent/UV/APP.PROGS/NEGS.B @@ -0,0 +1,25 @@ +****************************************************************************** +* +* Description: +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description......................................... +* 10/14/98 23801 SAP Change copyrights. +* GG/MM/HH 13210 GMH Initial implementation +* +******************************************************************************* +$OPTIONS DEFAULT + +subroutine (ans,m1) + ans = NEGS(m1) +return diff --git a/Ardent/UV/APP.PROGS/NES b/Ardent/UV/APP.PROGS/NES new file mode 100755 index 00000000..333ccddd --- /dev/null +++ b/Ardent/UV/APP.PROGS/NES @@ -0,0 +1,26 @@ +******************************************************************************** +* +* Support of PR1ME INFORMATION subroutine '-NES' +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description......................................... +* 10/14/98 23801 SAP Change copyrights. +* 07/25/88 - - Maintenence log purged at 5.2.1, see release 5.1.10. +* +******************************************************************************* + +$OPTIONS DEFAULT + +subroutine PR1ME(ans,m1,m2) + ans = NES(m1,m2) +return diff --git a/Ardent/UV/APP.PROGS/NOTS b/Ardent/UV/APP.PROGS/NOTS new file mode 100755 index 00000000..c097e5dc --- /dev/null +++ b/Ardent/UV/APP.PROGS/NOTS @@ -0,0 +1,26 @@ +******************************************************************************** +* +* Support of PR1ME INFORMATION subroutine '-NOTS' +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description......................................... +* 10/14/98 23801 SAP Change copyrights. +* 07/25/88 - - Maintenence log purged at 5.2.1, see release 5.1.10. +* +******************************************************************************* + +$OPTIONS DEFAULT + +subroutine PR1ME(ans,m1) + ans = NOTS(m1) +return diff --git a/Ardent/UV/APP.PROGS/NUMS b/Ardent/UV/APP.PROGS/NUMS new file mode 100755 index 00000000..18957658 --- /dev/null +++ b/Ardent/UV/APP.PROGS/NUMS @@ -0,0 +1,26 @@ +******************************************************************************* +* +* Support of PR1ME INFORMATION subroutine '-NUMS' +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description......................................... +* 10/13/98 23801 RGA Change copyright info. +* 07/25/88 - - Maintenence log purged at 5.2.1, see release 5.1.10. +* +******************************************************************************* + +$OPTIONS DEFAULT + +subroutine PR1ME(ans,m1) + ans = NUMS(m1) +return diff --git a/Ardent/UV/APP.PROGS/OCONVS b/Ardent/UV/APP.PROGS/OCONVS new file mode 100755 index 00000000..e7ca1508 --- /dev/null +++ b/Ardent/UV/APP.PROGS/OCONVS @@ -0,0 +1,26 @@ +******************************************************************************* +* +* Support of PR1ME INFORMATION subroutine '-OCONVS' +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description......................................... +* 10/14/98 23801 SAP Change copyrights. +* 07/25/88 - - Maintenence log purged at 5.2.1, see release 5.1.10. +* +******************************************************************************* + +$OPTIONS DEFAULT + +subroutine PR1ME(ans,m1,p1) + ans = OCONVS(m1,p1) +return diff --git a/Ardent/UV/APP.PROGS/OPEN.FILE.B b/Ardent/UV/APP.PROGS/OPEN.FILE.B new file mode 100755 index 00000000..067334ed --- /dev/null +++ b/Ardent/UV/APP.PROGS/OPEN.FILE.B @@ -0,0 +1,204 @@ +****************************************************************************** +* +* OPEN.FILE.B - Used to open file to named common variable. +* (catalog name OPEN$UV$FILE) +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description........................................ +* 10/14/98 23801 SAP Change copyrights. +* 11/04/92 10327 WLC Updated comments. +* 10/12/92 10327 WLC Initial Release. +******************************************************************************* +* +* This subroutine replaces a standard UniVerse BASIC OPEN +* statement. It checks a table to see if the given file +* has previously been opened. If not, the file is opened. +* If it was, no open is done. In both instances, the file +* status is returned. +* + SUBROUTINE OPEN$UV$FILE(DICT.VAL,DATA.VAL,FILE.VAL,VAR.STAMP) +* +* DICT.VAL : 'DICT' if dict is opened, otherwise null +* DATA.VAL : data file name. if null, then default open +* FILE.VAL : what this file is opened to (returned) +* VAR.STAMP : string containing the variable name file is opened +* to, with _# appended. The # uniquely identifies this +* variable from variables in other source files. The +* numbers used are stored in OPEN.UNIQUE file in the +* uniVerse home account. +* +* A status code is set prior to exiting this subroutine. The +* UniVerse internal '@' (at) value @USER.RETURN.CODE is set +* to the following: +* +* 0: if the file could not be opened. +* 1: if the file was opened. +* 2: if the file was previously opened. +* +* +* +* +* Equates +* +* TABLE.MAX: This is the MAXIMUM number of entries that ONE +* user can make. Basically, the maximum number +* of files that can be "held" open. +* This equate is defined in OPEN.TOOLS.H. +* +* RESET.ON.LOGTO: This is used to CLEAR the file table when a user +* performs a LOGTO and then calls this subroutine. +* This equate is defined in OPEN.TOOLS.H. +* +* The following values can be given for RESET.ON.LOGTO: +* +* 0 (zero) or NO: DO NOT reset tables. This is the default. +* +* 1 (non-zero) : When the user LOGTO's another account and +* or YES calls this subroutine the first time, the +* tables are cleared. +* +$INCLUDE UNIVERSE.INCLUDE OPEN.TOOLS.H +* +$OPTIONS PICK +* +* Declare named common +* + COMMON /UV$open$files/ FILE$VARS(TABLE.MAX),FILE$TABLE(5),curr$UV$ACCOUNT +* +* FILE$VARS : contains actual filevars that are returned +* FILE$TABLE : 5 elements +* element 1 : list of opened file names ascending left (multi valued) +* element 2 : pointer into file$vars array (multi valued) +* element 3 : current number of open files (single value) +* element 4 : file open requests (multi valued) +* element 5 : variable stamp - unique identifier for the file variable +* +* curr$UV$ACCOUNT : the name of the account in which these files +* were opened. +* +* +* Equates +* + EQU FAILURE TO 0 ;* if open fails + EQU SUCCESS TO 1 ;* if request for new open + EQU ALREADY.OPENED TO 2 ;* if file was already opened + EQU FILES.NOW.OPENED TO FILE$TABLE(1) + EQU TABLE.POINTER TO FILE$TABLE(2) + EQU TABLE.COUNTER TO FILE$TABLE(3) + EQU OPEN.REQUESTS TO FILE$TABLE(4) + EQU VARIABLE.LIST TO FILE$TABLE(5) + EQU NO TO 0 + EQU YES TO 1 +* +* +* Declare variables +* + whole.file.name="" + field.loc=0 +* +* Find out if user is in a NEW account. If YES, nuke the tables. +* + if (curr$UV$ACCOUNT # @who) AND (RESET.ON.LOGTO = YES) then + RESET.TABLES = YES + end else + RESET.TABLES = NO + end +* +* If common has not been used, clean it all up +* + if not(TABLE.COUNTER) or RESET.TABLES then + mat FILE$VARS="" + FILES.NOW.OPENED="" + TABLE.POINTER="" + TABLE.COUNTER=0 + curr$UV$ACCOUNT=@who + end +* +* Assume we will be successful opening file +* + @user.return.code=SUCCESS +* +* Clean up input data +* + DICT.VAL=upcase(trim(DICT.VAL)) + DATA.VAL=trim(DATA.VAL) +* +* Build whole file +* + if DICT.VAL = "DICT" then whole.file.name="D_" + if DATA.VAL # "" then whole.file.name:=DATA.VAL +* +* Extend Name further by PREpending with account name +* + if RESET.ON.LOGTO then + whole.file.name=curr$UV$ACCOUNT:"*":whole.file.name + end +* +* See if TABLE.MAX has been exceeded +* + + if TABLE.COUNTER < TABLE.MAX then +* +* Check to see if file has been previously opened +* + locate(whole.file.name,FILES.NOW.OPENED ; field.loc ; 'al') then +* +* File was previously opened. See if it's the same file variable name +* + if VARIABLE.LIST = VAR.STAMP then + FILE.VAL=FILE$VARS(TABLE.POINTER) + OPEN.REQUESTS=OPEN.REQUESTS+1 + @user.return.code=ALREADY.OPENED + return + end + end +* +* Check to see if this variable was previously used as file var and close first +* + locate VAR.STAMP in VARIABLE.LIST setting var.loc else var.loc=0 + if var.loc and whole.file.name # FILES.NOW.OPENED then + CLOSE FILE$VARS(TABLE.POINTER) + TABLE.POINTER=delete(TABLE.POINTER, var.loc) + FILES.NOW.OPENED=delete(FILES.NOW.OPENED, var.loc) + OPEN.REQUESTS=delete(OPEN.REQUESTS, var.loc) + VARIABLE.LIST=delete(VARIABLE.LIST, var.loc) + end +* +* File was NOT previously opened or it's a new variable name. Do it now. +* + open DICT.VAL,DATA.VAL to FILE$VARS(TABLE.COUNTER+1) then + ins whole.file.name before FILES.NOW.OPENED + ins TABLE.COUNTER+1 before TABLE.POINTER + ins "1" before OPEN.REQUESTS + ins VAR.STAMP before VARIABLE.LIST + FILE.VAL=FILE$VARS(TABLE.COUNTER+1) + TABLE.COUNTER+=1 ;* open succeeded + end else + @user.return.code=FAILURE ;* open failed + end + end else +* +* TABLE.MAX value was exceeded. Just open the file normally +* + open DICT.VAL,DATA.VAL to FILE.VAL else + @user.return.code=FAILURE ;* open failed + end + end +* +* Return to calling program +* + return +* +* End of subroutine +* + END diff --git a/Ardent/UV/APP.PROGS/OPEN.INIT.B b/Ardent/UV/APP.PROGS/OPEN.INIT.B new file mode 100755 index 00000000..891d9c71 --- /dev/null +++ b/Ardent/UV/APP.PROGS/OPEN.INIT.B @@ -0,0 +1,66 @@ +****************************************************************************** +* +* OPEN.INIT.B - Initializes the OPEN.UNIQUE file for the open tools. +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description........................................ +* 10/14/98 23801 SAP Change copyrights. +* 05/30/96 18438 JC Port to NT +* 10/12/92 10327 WLC Initial Release. +******************************************************************************* +$INCLUDE UNIVERSE.INCLUDE FILENAMES.H +$INCLUDE UNIVERSE.INCLUDE MACHINE.NAME +$INCLUDE UNIVERSE.INCLUDE OSDEF.H + +******************************************************************************* +* DEFFUN for UVREADMSG +******************************************************************************* + DEFFUN UVREADMSG(num, args) CALLING '*UVREADMSG' + +******************************************************************************* +* Check to see if you are a superuser +******************************************************************************* + temp = 0 + CALL *ISUSER.B(0,temp) + IF temp = 0 THEN +* You must be super-user to run this program + crt UVREADMSG(71000,"") + STOP + END + +open "OPEN.UNIQUE" to test.open then stop +cmd = "CREATE.FILE OPEN.UNIQUE 18 1 1" +execute cmd + +$IFDEF UV.UNIX + +* This section is not required on NT + +cmd = "SH -c '":CHMOD:" 666 ":UV.ROOT:"/OPEN.UNIQUE'" +execute cmd capturing output +if output # '' then + crt "Error setting permissions to rw on ":UV.ROOT:"/OPEN.UNIQUE" + crt "Message was ":output + stop +end + +$ENDIF + +openpath UV.ROOT:"/OPEN.UNIQUE" to UNIQUE.FV else + crt "Error opening OPEN.UNIQUE from ":UV.ROOT:" account." + stop +end + +write 1 on UNIQUE.FV,"NEXT.VALUE" + +end diff --git a/Ardent/UV/APP.PROGS/ORS.B b/Ardent/UV/APP.PROGS/ORS.B new file mode 100755 index 00000000..4d70381b --- /dev/null +++ b/Ardent/UV/APP.PROGS/ORS.B @@ -0,0 +1,26 @@ +******************************************************************************** +* +* Support of PR1ME INFORMATION subroutine '-ORS' +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description......................................... +* 10/14/98 23801 SAP Change copyrights. +* 08/09/90 7338 JWT Initial implementation. +* +******************************************************************************* + +$OPTIONS DEFAULT + +subroutine PR1ME(ans,m1,m2) + ans = ORS(m1,m2) +return diff --git a/Ardent/UV/APP.PROGS/OpenError.B b/Ardent/UV/APP.PROGS/OpenError.B new file mode 100755 index 00000000..2868b9ef --- /dev/null +++ b/Ardent/UV/APP.PROGS/OpenError.B @@ -0,0 +1,63 @@ +****************************************************************************** +* +* Permissions handling subroutine for UniVerse Files +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description......................................... +* 10/14/98 23801 SAP Change copyrights. +* 08/30/96 19155 DJD Fixed runtime error message. +* 06/05/96 18438 JC Port to NT +* 12/07/94 15371 PVW Created subroutine. +* +******************************************************************************* + + SUBROUTINE OpenError (ErrorCode, FileName, PathName) + + BEGIN CASE + CASE ErrorCode = -1 + CALL *UVPRINTMSG(970020, FileName) + CASE ErrorCode = -2 + IF PathName MATCHES "...!/..." or PathName MATCHES "...!\..." THEN + CALL *UVPRINTMSG(970021, FileName) + END ELSE + CALL *UVPRINTMSG(970022, FileName) + END + CASE ErrorCode = -3 + CALL *UVPRINTMSG(970023, FileName) + CASE ErrorCode = -4 + CALL *UVPRINTMSG(970024, FileName) + CASE ErrorCode = -5 + CALL *UVPRINTMSG(970025, FileName) + CASE ErrorCode = -6 + CALL *UVPRINTMSG(970026, FileName) + CASE ErrorCode = -7 + CALL *UVPRINTMSG(970027, FileName) + CASE ErrorCode = -8 + CALL *UVPRINTMSG(970028, FileName) + CASE ErrorCode = -9 + CALL *UVPRINTMSG(970029, FileName) + CASE ErrorCode = -10 + CALL *UVPRINTMSG(970030, FileName) + CASE ErrorCode = -11 + CALL *UVPRINTMSG(970031, FileName) + CASE ErrorCode = -12 + CALL *UVPRINTMSG(970032, FileName) + CASE ErrorCode = -13 + CALL *UVPRINTMSG(970033, FileName) + CASE ErrorCode = -14 + CALL *UVPRINTMSG(970034, FileName) + CASE 1 + CALL *UVPRINTMSG(970035, FileName, ErrorCode) + END CASE + RETURN +END diff --git a/Ardent/UV/APP.PROGS/PACK.FNKEYS.B b/Ardent/UV/APP.PROGS/PACK.FNKEYS.B new file mode 100755 index 00000000..2fa10cd6 --- /dev/null +++ b/Ardent/UV/APP.PROGS/PACK.FNKEYS.B @@ -0,0 +1,28 @@ +******************************************************************************** +* +* Support of PI/Open Subroutine '!PACK.FNKEYS' +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description......................................... +* 10/14/98 23801 SAP Change copyrights. +* 07/17/97 21135 LPC Add to sccs +* +******************************************************************************* + +subroutine PIO.PACKFN(xtrap, xtable) + +call !PACK.FNKEYS(xtrap, xcode) + +return + +end diff --git a/Ardent/UV/APP.PROGS/PACT b/Ardent/UV/APP.PROGS/PACT new file mode 100755 index 00000000..d15e9676 --- /dev/null +++ b/Ardent/UV/APP.PROGS/PACT @@ -0,0 +1,2072 @@ +******************************************************************************* +* +* Server subroutine for PICK Account Conversion Toolkit +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description........................................ +* 07/19/99 25437 DJD Added new enchancements. +* 10/14/98 23801 SAP Change copyrights. +* 01/06/98 22758 DJD Subroutine created +************************************************************************ +* +* DESCRIPTION: +* +* This subroutine contains all the server code for the graphical +* uniVerse administration tool. +* +* Input arguments: Action - key for action to be taken +* Params - parameters required by the +* particular function being +* performed, field mark separated +* +* Output arguments: OutData - any output from the requested +* function, field mark separated +* Error - error code or 0 if no error +* +* +************************************************************************ + + SUBROUTINE (AdminCode, Params, OutData, Error) + PRINT AdminCode: " ": Params + +$INCLUDE UNIVERSE.INCLUDE MACHINE.NAME +$INCLUDE UNIVERSE.INCLUDE PACTERR.H +$INCLUDE UNIVERSE.INCLUDE PACTCMN.H + + DEFFUN UVREADMSG(num, args) CALLING '*UVREADMSG' + DEFFUN IsFullPath(a) CALLING '*IS.FULLPATH' + DECLARE GCI access + + EQU Text To Out ; * Horrible hack + EQU CRLF To Char(13):Char(10) + EQU CR To Char(13) + EQU TAB To Char(9) + EQU DEFPERMS To 777 ; * Default permissions + EQU SHM.TO.LOAD To "SHM.TO.LOAD" + EQU UVCONFIG To "uvconfig" + EQU GROUPLOCK To 1 ; * Used by lock admin. + EQU RECORDLOCK To 2 ; * Used by lock admin. + EQU FILELOCK To 3 ; * Used by lock admin. + EQU TEMPREC To "VMUVADTMP" ; * Temporary record name + + * Layout of config files: + EQU INITIAL$PATTERN TO '"####"0X' ; * end of copyright section + EQU COMMENT$PATTERN TO '"#"0X' ; * general comment introducer + EQU COMMENT$CHAR TO '#' + + * Set up array containing paths which MUST NOT be deleted + + EQU DONOTDELETE To '/':@FM:'/bin':@FM:'/usr/bin':@FM:'/usr/sbin':@FM:'/etc':@FM:'/dev':@FM:'/usr' + + EQU MASTER.ACCOUNTS To "UV" : @FM : "uv" : @FM : "HS.ADMIN" : @FM : "HS.SALES" : @FM : "HS.SERVICE" + + + EQU F$OK To 0 ; * File exists + EQU X$OK To 1 ; * Execute access + EQU W$OK To 2 ; * Write access + EQU R$OK To 4 ; * Read access + * List of &DEVICE& codes which specify tape devices: + EQU TAPE.DEVICE.PATTERN To "'DT'":@VM:"'DC'":@VM:"'T'":@VM:"'C'" + + +************************ +* OS specific code end * +************************ + + * Set up pathname and command separators for this operating system. If + * this becomes available in MACHINE.NAME, remove this code + +************************** +* OS specific code start * +************************** + + OS.SEP = "\" + OS.CMDSEP = " && " + OS.CD = "cd /d " + +************************ +* OS specific code end * +************************ + + OutData = "" + Error = 0 + AdminCode += 1 + KeepFileOpen = False + UnixFileOpen = False + +* Set NLS mapping for reading os files + + If System(100) Then + Execute "SET.SEQ.MAP OS" Capturing Out + End + + If DEBUGGING Then + LogText = "AdminCode = ":AdminCode + Gosub WriteDbg + LogText = "Params = ":Change(Params, @fm, "^]") + Gosub WriteDbg + End + +********************************************************************** +* Gosub based on AdminCode +* +* Grouping is: +* +* 1 - 20 Miscellaneous +* 21 - 30 Device Maintenance +* 31 - 40 Account Maintenance +* 41 - 50 Catalog shared memory +* 51 - 70 Spooler +* 71 - 80 Config Editor +* 81 - 90 User administration +* 91 - 100 Lock administration +* 101 - 110 UniVerse Command +* 111 - 120 Network Services +* 121 - 140 Transaction logging +* 141 - 150 Backup/Restore +* 151 - 160 Import account +* +********************************************************************* + + On AdminCode Gosub Initialise, + OSBrowse, ; * 1 + UniVerseBrowse, + GetDrives, + GetUVHome, + GetAccountPath, + GetFilePath, + DeviceList, + AccountList, + GetDevice, + CheckDirectoryPath, + GetAccountFiles, ; * 11 + AcctrstCommand, + ConvertDict, + ConvertVoc, + ConvertPgms, + GetRestoreInfo, + CheckAccountDetails, + AddAccount + + If DEBUGGING Then + LogText = "OutData = ":Change(OutData, @fm, "^]") + Gosub WriteDbg + LogText = "Error = ":Error + Gosub WriteDbg + End + + RETURN + +********************************************************************** +* AccountList - Returns list of accounts on the server +* +* Input: NONE +* Output: Field mark separated list of account +* names +********************************************************************** +AccountList: + Id = "" + Pos = 0 + OutData = "" + + SSelect UVACCOUNT + Done = False + Loop + ReadNext Id Else Done = True + Until Done Do + Locate Id in MASTER.ACCOUNTS Setting Pos Else + OutData<-1> = Id + End + Repeat + + Return + +********************************************************************** +* AcctrstCommand - Set up command line for account.restore +* +* Input: Restore directory +* Device name +* Block size +* Use Type19 flag +* Flavour (P = PICK, M = Reality, +* I = IN800, J = IN500) +* Multi save flag (only used for Reality) +* Number of volumes (only used for IN500 +* with tape type DC) +* Output: Command line +********************************************************************** +AcctrstCommand: + + TapeType = "" + OutData = "" + RstPath = Params<1> + DevName = Params<2> + BlockSize = Params<3> + Flavour = Params<4> + MultiSave = Params<5> + NumVols = Params<6> + FilterName = Params<7> + NumToSkip = Params<8> + CreateDir = Params<9> + + + * Get device pathname from &DEVICE& file and check that the + * rewind device can be read from + + Read DevRec From DEVICES, DevName Else + Error = EADM.CANTREAD + Goto ExitAcctrstCommand + End + + EXECUTE "ASSIGN ":DevName:" TO MTU 0" CAPTURING OUTPUT + IF OUTPUT[1,5] = "Error" Then + Error = EADM.UNABLEOPENDEV + Goto ExitAcctrstCommand + End + EXECUTE "UNASSIGN ":DevName + DevPath = DevRec<2> + DevRewind = DevRec<6> + DevType = DevRec<4> + + If DevType = "C" Or DevType = "DC" Then + TapeType = " -c" + End + + * Change to directory + If CreateDir Then + Command = "mkdir ":RstPath + Command := OS.CMDSEP : OS.CD + End Else + Command = OS.CD + End + + * Validation finished, set up the command line + + Command := RstPath : OS.CMDSEP + + If DevType = "F" Then + If FilterName <> "" Then + Command := " " : UVHOMEBIN : "uvmt -d" : DevPath : " -b" : BlockSize : TapeType : " -fread" : " | " : UVHOME:OS.SEP:"UVTapeFilters": OS.SEP : FilterName : " | " : UVHOMEBIN : "acct.restore.exe -" + End Else + * Use standard restore feature + Command := " " : UVHOMEBIN : "acct.restore" + Command := " -t " : DevName + End + End Else + * Add one uvmt fwd for each file to skip + If NumToSkip > 0 Then + Command:= " " : UVHOMEBIN : "uvmt -d" : DevPath : " -b" : BlockSize : TapeType : " rew" : OS.CMDSEP + For lp = 1 To NumToSkip + Command := " " : UVHOMEBIN : "uvmt -d" : DevPath : " -b" : BlockSize : TapeType : " fskip" : OS.CMDSEP + Next lp + End + + If FilterName <> "" Then + Command := " " : UVHOMEBIN : "uvmt -d" : DevPath : " -b" : BlockSize : TapeType : " fread" : " | " : UVHOME:OS.SEP:"UVTapeFilters": OS.SEP : FilterName : " | " : UVHOMEBIN : "acct.restore.exe -" : OS.CMDSEP + End Else + * Use standard restore feature + Command := " " : UVHOMEBIN : "tapein -ice " + Command := TapeType + Command := " -p" : UVHOMEBIN : "acct.restore" + Command := " -f" : DevPath + Command := " -b" : BlockSize + End + End + + +ExitAcctrstCommand: + + If Error = 0 Then + OutData = OS.EXEC : " " : Quote(Command) + End + + Return + + +********************************************************************** +* AddAccount - Add account entry to uv.accounts +* +* Input: Account Details +* Output: Nothing - only an error code +********************************************************************** +AddAccount: + + AccountName = Params<1> + AccountPath = Params<2> + + Read Temp From UVACCOUNT, AccountName Then + OutData = 0 + End Else + Temp<11> = AccountPath + Write Temp To UVACCOUNT, AccountName Else + Error = EADM.CANTWRITE + End + OutData = 1 + End + + Return + +************************************************************************ +* CheckAccountDir - Checks the state of an account with respect to +* the directory being deleted: finds out if there +* are any distributed files in the account; finds +* out if the account directory is a home directory +* for any users. +* +* If the account cannot be accessed (or does not +* exist), then an error will be returned together +* with the pathname of the account. +* +* Input: Account Name +* Output: Account Path +* PartFilesFlag (true if distributed files +* in the account) +* HomeDirFlag (true if directory is the +* home directory for any +* users) (unix only) +* Synonym accounts +* (list of UV.ACCOUNT entries +* which use the same directory, +* or null) +* User list (list of users for whom +* the directory is their +* home directory - only +* present if HomeDirFlag is +* true) (unix only) +************************************************************************ +CheckAccountDir: + + AccName = Params<1> + PartFlag = 0 + HomeDirFlag = 0 + UserList = "" + + Readv AccPath From UVACCOUNT, AccName, 11 Else + Error = EADM.CANTREAD + Return + End + + If Trim(AccPath) = "" Then + Error = EADM.BADPATH + Return + End + + * First check that there is an accessible account in this directory + * - if there isn't, then the other things are irrelevant + + AccVoc = AccPath : OS.SEP : "VOC" + If access(AccVoc, R$OK + W$OK) Then + + * We don't have access, check if the VOC actually exists + + Error = EADM.NOACCESS + If access(AccVoc, F$OK) Then + + * VOC doesn't exist - check the directory + + Error = EADM.BADACCOUNT + If access(AccPath, R$OK + W$OK) Then + + * No access to directory, check if it exists + + Error = EADM.NOACCESS + If access(AccPath, F$OK) Then + + * No directory + + Error = EADM.NODIRECTORY + End + End + End + OutData = AccPath + Return + End + + * We can only get here if the account is accessible. + * Check if this account contains distributed files + +************************** +* OS specific code start * +************************** + + If OS.TYPE = "MSWIN" Then + Open "&PARTFILES&" TO Partfiles Else + Error = EADM.CANTOPEN + Return + End + + UAccPath = Upcase(AccPath) + UAccPathLen = Len(UAccPath) + Select Partfiles To 1 + Done = False + Loop + ReadNext Id From 1 Then + If Upcase(Id[1, UAccPathLen]) = UAccPath Then + Done = True + PartFlag = 1 + End + End + Else + Done = True + End + Until Done + Repeat + ClearSelect 1 + End + +************************ +* OS specific code end * +************************ + + * Check if there are other accounts using this directory + + SynonymAccs = "" + SSelect UVACCOUNT + Done = False + Loop + ReadNext Id Else Done = True + Until Done Do + If Id # AccName Then + ReadV Path From UVACCOUNT,Id,11 Else Path = "" + +************************** +* OS specific code start * +************************** + + + * On NT the synonym check is case insensitive + + If Upcase(Path) = Upcase(AccPath) Then + SynonymAccs<-1> = Id + End + +************************ +* OS specific code end * +************************ + + End + Repeat + SynonymAccs = Lower(SynonymAccs) + +************************** +* OS specific code start * +************************** + + +************************ +* OS specific code end * +************************ + + OutData<1> = AccPath + OutData<2> = PartFlag + OutData<3> = HomeDirFlag + OutData<4> = SynonymAccs + OutData<5> = UserList + + Return + + +********************************************************************** +* CheckAccountDetails - Check Account details in UV.ACCOUNTS +* +* Input: Account Name +* Output: Nothing - only an error code +********************************************************************** +CheckAccountDetails: + + AccountName = Params<1> + + + Read Temp From UVACCOUNT, AccountName Then + OutData = 0 + End Else + OutData = 1 + End + + Return + +********************************************************************** +* CheckDirectoryPath - Verify that a given path represents an +* existing directory. +* +* Input: pathname +* Output: Nothing - only an error code +********************************************************************** +CheckDirectoryPath: + + FilePath = Params<1> + OpenPath FilePath To Temp.File Then + Status Stats From Temp.File Else Stats = "" + Close Temp.File + If Stats<21> = 1 Or Stats<21> = 19 Then + * It's a directory + End Else + * Some other kind of file + Error = EADM.BADDIRECTORY + End + End Else + * Could not open it at all + Error = EADM.NODIRECTORY + End + + Return + +********************************************************************** +* Convert Dict - Convet a dictionary to UniVerse +* +* Input: Filename +* Output: Code +********************************************************************** +ConvertDict: + + FILE = Params<1> + OutData ="" + + Open "DICT", FILE To DFV Else + Error = EADM.CANTOPEN + Return + End + + OutData<-1> = "Converting DICT " : FILE + + * Select all the records in the Dict. + sselect DFV ; * Use SELECT list 2 for item list + + * Select all dict records, convert to universe format and write back. + + loop + readnext ITEM.NAME else null + While ITEM.NAME Do + read dict.item from DFV, ITEM.NAME else + OutData<-1> = "SELECTed item '": ITEM.NAME : "' cannot be read from DICT " : FILE : "." + Error = EADM.CANTREAD + return + end + + If ITEM.NAME[ 1, 6 ] <> "&PICK." and ITEM.NAME <> "@ID" then + + * Convert items with A or S D/TYPES. Copy any others as they are. >> + skip.item = False ; * Convert or not? + + dict.item< 1 > = trim( dict.item< 1 >) + dict.item< 2 > = trim( dict.item< 2 >) + begin case + case ITEM.NAME = FILE or ITEM.NAME = "DL/ID" + delete DFV, ITEM.NAME ; * Will change to "@ID" + dict.item< 1 > = "A" ; * In Pick, is "D" + dict.item< 2 > = 0 ; * In Pick, is the base frame + dict.item< 3 > = ITEM.NAME ; * In Pick, is the modulo + + case dict.item< 1 >[ 1, 1 ] = "A" or dict.item< 1 >[ 1, 1 ] = "S" + if Not(num(dict.item<2>)) and count( dict.item<2>, @VM ) then + OutData<-1> = "Non-numeric A/AMC: " : ITEM.NAME : "not processed." + skip.item = True + end + + case 1 + OutData<-1> = "Unconvertible D/TYPE: " : ITEM.NAME : "not processed." + skip.item = True + end case + + if not(skip.item) then + + * convert it, then write it. + + assoc.item = "" + assoc.name = "" + result = "" + + call *DC.ITEM( dict.item, assoc.name, assoc.item, result ) + dict.item = Lower(dict.item) + if result then + OutData<-1> = dict.item: " Converted." + end else + OutData<-1> = dict.item: "Not Converted." + end + + dict.item = RAISE(dict.item) + + write dict.item on DFV, ITEM.NAME else + Error = EADM.CANTWRITE + end + end else + OutData<-1> = "Item ":ITEM.NAME:" Skipped" + end + end else + OutData<-1> = "Item ":ITEM.NAME:" Skipped" + end + repeat + + * Create the "@" dictionary entry to control listings. >> + at.phrase = "" + quit.loop = False + for i = 1 to 100 until quit.loop + read xx from DFV, i then + if xx<1>[1,1] # 'X' then at.phrase := " " : i + end else + quit.loop = True + end + next i + + at.phrase = trim( at.phrase ) + if at.phrase then + at.rec = "" + at.rec< 1 > = "PH" + at.rec< 2 > = at.phrase + write at.rec on DFV, "@" + end else + delete DFV, "@" + end + + + * Put in an @ID record if one does already exist. + read dict.item from DFV, "@ID" else + dict.item = "" + dict.item< 1 > = "D" + dict.item< 2 > = 0 + dict.item< 4 > = FILE + dict.item< 5 > = "10R" + dict.item< 6 > = "S" + write dict.item on DFV, "@ID" + end + + Close DFV + + Return + +********************************************************************** +* Convert pgms - Convert a program file and records +* +* Input: Filename +* Output: Output & Code +********************************************************************** +ConvertPgms: + + file.type = 1 + Dummy = "" + ProgramKey = "" + OutData = "" + ReturnCode = -1 + + * Get the params from the client + PgmsFilename = Params<1> + Type19 = Params<2> + + Open "", PgmsFilename To PgmsFile Else + Error = EADM.CANTOPEN + Return + End + + Open "DICT", PgmsFilename To DictPgmsFile Else + Error = EADM.CANTOPEN + Return + End + + OutData<-1> = "Processing program file ":PgmsFilename:"." + OutData<-1> = "Deleting object code" + + * Delete the old object code. + SELECT DictPgmsFile + Loop + Readnext ProgramKey else Null + while ProgramKey Do + Readv Dummy From PgmsFile, ProgramKey, 0 Then + DELETE DictPgmsFile, ProgramKey Else + Error = EADM.CANTWRITE + End + End + Repeat + + Print "After DICT" + SELECT PgmsFile + Loop + Readnext ProgramKey else Null + while ProgramKey Do + * Run precompiler on the records. + Print "Before Precomp" : ProgramKey + PreComp.Filename = UVHOME:OS.SEP:"CONVERT.PRECOMP" + Call *PRECOMP.SUB(PreComp.Filename, PgmsFilename, PgmsFilename, ProgramKey, ReturnCode) + Print "After Precomp" + If ReturnCode Then + Error = ReturnCode + * Close the files now, NT will not let us resize an open file. + Close PgmsFile + Close DictPgmsFile + Return + End Else + OutData<-1> = ProgramKey:" has been precompiled" + End + Repeat + + Print "After Pgms" + * Close the files now, NT will not let us resize an open file. + Close PgmsFile + Close DictPgmsFile + + + * Resize file + If Type19 Then + file.type = 19 + End Else + file.type = 1 + End + + OutData<-1> = "Resizing program file to type ":file.type + + PERFORM "RESIZE " : PgmsFilename :" ": file.type + + OutData<-1> = "File resized" + + Return + +********************************************************************** +* Convert Voc - Convert a the MD to a UniVerse VOC +* +* Input: +* Output: Output & Code +********************************************************************** +ConvertVoc: + + sub = 0 + code = 0 + ccode = 0 + Type = 0 + + nosupport = "" + noconvert = "" + convertok = "" + vocexists = "" + + * Get the pick type from client + PickType = Params<1> + RemoveLogin = Params<2> + + If PickType[1,5] = "Mentor" Then + PickType = "ADDS" + End Else + PickType = "IBM" + End + + Open "", "PICK.VOC" To PVOC Else + Error = EADM.CANTOPEN + Return + End + + Open "", "VOC" To UVOC Else + Error = EADM.NOVOC + Return + End + + Open "", "BASE_FILE" To BASEFILE Else + Error = EADM.CANTOPEN + Return + End + + Open "", "NEWACC" To NEWACCFILE Else + Error = EADM.CANTOPEN + Return + End + + MapFilename = UVHOME: OS.SEP: "CVI": OS.SEP: PickType + OpenPath MapFilename To MAPFILE Else + Error = EADM.CANTOPEN + Return + End + + Select PVOC + Loop + ReadNext ID Else Null + While ID DO + Read item From PVOC, ID ELSE + Error = EADM.CANTREAD + Return + End + + type = item[1,1] ; + if type='P' and item[2,1]='Q' then + type="PQ" + end + + if type='M' and item[2,1]='E' then + type='ME' + end + + begin case + case type='P' + sub = 1 + code = 1 + case type='C' + sub = 2 + code = 3 + case type='D' + sub = 3 + code = 4 + case type='A' + sub = 4 + code = 7 + case type='S' + sub = 4 + code = 7 + case type='X' + sub = 5 + code = 7 + case type='Q' + sub = 5 + code = 5 + case type='PQ' + sub = 5 + code = 6 + case type='M' + sub = 6 + code = 6 + case type='N' + sub = 6 + code = 6 + case type='ME' + sub = 6 + code = 6 + case 1 + sub = 5 + code = 8 + type = "?" + end case + + on sub gosub PICK.VERB, CONNECTIVE, PICK.FILE, PICK.DICT, STUFF, PICK.MACRO + + Repeat + +* Check and remove the login command if one exists. + If RemoveLogin then + Execute "WHO" Capturing Output + AccountName = UpCase( Field(Output, " ", 2)) + Gosub CheckRemoveLogin: + + If Error = 0 Then + AccountName = DownCase(AccountName) + Gosub CheckRemoveLogin: + End + + If Error = 0 Then + AccountName = "LOGIN" + Gosub CheckRemoveLogin: + End + End + + + Close PVOC + Close UVOC + + OutData = "Items Converted to the VOC File": @FM : convertok + OutData:= @FM : @FM: "Items that already exist in the VOC File": @FM : vocexists + OutData:= @FM : @FM: "Items that are not supported": @FM : nosupport + OutData:= @FM : @FM: "Items that have not been converted": @FM : noconvert + + Return + +PICK.VERB: + + + n = dcount(item,@fm) + cvt = item<1> + for i=2 to n + cvt := "*":item + next + + loop + while cvt[1]='*' do + cvt = cvt[1,len(cvt)-1] + repeat + +GENERAL.VERB: + is.cat = ( item<2> = "E6" ) + + if is.cat then + code+=1 + end + + gosub MAP + + if not( is.cat ) then + convert "-" to "." in ID + end + + begin case + case ccode = 0 + gosub CHECK.VOC + case ccode = 1 + nosupport<-1> = ID + case ccode = 2 + if is.cat then + If PickType = "ADDS" Then + cat.para := @AM : "CATALOG " : item< 5 > : " " : ID + End Else + cat.para := @AM : "CATALOG " : item< 6 > : " " : ID + End + end else + noconvert<-1> = ID + end + end case + + Return + +KEYWORD: + + n = dcount(item,@fm) + cvt = "K" + for i=2 to n + cvt := "*":item + next + + loop + while cvt[1]='*' do + cvt = cvt[1,len(cvt)-1] + repeat + + gosub MAP + gosub CHECK.MAP + return + +CONNECTIVE: + cvt = item<1> + gosub MAP + gosub CHECK.MAP + return + +PICK.FILE: + + + read bitem from BASEFILE,item<2> then + fnam = bitem<2> + end else + fnam = ID + end + + gosub EFTOIF + citem = "F":@FM:pnam:@FM:"D_":pnam + gosub CHECK.VOC + return + +PICK.DICT: + + citem = item + assoc.item = "" + assoc.name = "" + flag = "" + + call *DC.ITEM(citem , assoc.name , assoc.item , flag ) + gosub CHECK.VOC + return + +PICK.MACRO: + + begin case + case type = "M" or type = "N" + citem = "PQ" + no.atts = dcount(item,@AM) + for i.att = 2 to no.atts + citem<-1> = 'H':item + citem<-1> = 'P' + next i.att + item = citem + case type = "ME" + options = "" + helps = "" + commands = "" + no.prompts = dcount(item,@AM) + for i.prompt = 3 to no.prompts + options<-1> = item + helps<-1> = item + commands<-1> = item + next i.prompt + citem = 'PQ' + citem<-1> = 'C' + citem<-1> = '97 C Print menu screen' + citem<-1> = 'T C' + citem<-1> = 'T (':40-(len(item<2>)/2):',1), "':item<2>:'"' + no.options = dcount(options,@AM) + if no.options > 30 then no.options = 30 + ypos = 3 + xpos = 5 + if no.options <= 15 then xpos = 20 + for i.option = 1 to no.options + if i.option = 16 then + xpos = 40 + ypos = 3 + end + text.prompt = oconv(options,'T26') + text.prompt = oconv(i.option:".", 'L#4'):' ':text.prompt + citem<-1> = 'T (':xpos:',':ypos:'), "':text.prompt:'"' + ypos = ypos + 1 + next i.option + citem<-1> = 'C' + citem<-1> = '98 C Print prompt and handle selection entry' + citem<-1> = 'RI' + citem<-1> = 'RO' + citem<-1> = 'T (0,20), (-4), (20,20), "Selection", +' + citem<-1> = 'S1' + citem<-1> = 'IP:' + citem<-1> = 'IF A1 = "" GO 99' + citem<-1> = 'IF A1 < 1 GO 98' + citem<-1> = 'IF A1 > ':no.options:' GO 98' + citem<-1> = 'GO A1' + citem<-1> = 'C' + for i.option = 1 to no.options + citem<-1> = i.option:' C Menu Selection #':i.option + citem<-1> = 'IF A1 = (0N) GO ':i.option:i.option + citem<-1> = 'C Display the help message' + no.helps = dcount(helps,@VM) + for i.help = 1 to no.helps + citem<-1> = 'O ':helps + next i.help + citem<-1> = 'O' + citem<-1> = 'O Return to continue...' + citem<-1> = 'IP ' + citem<-1> = 'G 97' + citem<-1> = i.option:i.option:' C Execute command' + no.commands = dcount(commands, @VM) + citem<-1> = 'H':commands + if no.commands > 1 then + citem<-1> = 'STON' + for i.command = 2 to no.commands + citem<-1> = 'H':commands + citem<-1> = 'H<' + next i.command + end + citem<-1> = 'P' + citem<-1> = 'G 97' + citem<-1> = '99 X' + next i.option + item = citem + end case + +STUFF: + + cvt = type : "*" : ID + gosub MAP + begin case + case ccode = 0 + gosub CHECK.VOC + case ccode = 1 + nosupport<-1> = ID + case ccode = 2 + citem = item + gosub CHECK.VOC + end case + return + +MAP: + + read mitem from MAPFILE, cvt then + mtype = mitem<2> + cid = mitem<3> + begin case + case mtype = "C" + ccode = 0 + read citem from NEWACCFILE, cid else citem = "" + case mtype = "S" + ccode = 0 + citem = "S":@fm:cid + case mtype = "P" + ccode = 0 + citem = "PH":@fm:cid + case 1 + ccode = 1 + citem = "" + end case + end else + ccode = 2 + citem = "" + end + citem<1> = citem<1>[1,if citem<1>[1,1] = "P" then 2 else 1] + return + +CHECK.MAP: + + begin case + case ccode = 0 + gosub CHECK.VOC + case ccode = 1 + nosupport<-1> = ID + case ccode = 2 + noconvert<-1> = ID + end case + return + +CHECK.VOC: + + loop + while citem[1]=@fm do + citem = citem[1,len(citem)-1] + repeat + + read xitem from UVOC,ID then + xitem<1> = Upcase(xitem[1,1]) + loop + while xitem[1]=@AM do + xitem=xitem[1,len(xitem)-1] + repeat + + if upcase(xitem[1,1]) = "F" and (citem<1>[2,9999] # "") then + xitem<1> = xitem<1>:citem<1>[2,9999] + write xitem on UVOC,ID + end + + if xitem = citem then + convertok<-1> = ID + end else + vocexists<-1> = ID + end + + end else + xitem = citem + convertok<-1> = ID + write citem on UVOC,ID + end + return + +EFTOIF: + + if fnam = '' then + pnam = '?' + end else + if fnam[1,1] = '.' then + pnam='?.' ; m=2 + end else + pnam='' ; m=1 + end + + l = len(fnam) + for j=m to l + c = fnam[j,1] + begin case + case c='?' ; pnam:='??' + case c='/' ; pnam:='?\' + case c='\' ; pnam:='?\' + case c=char(0) ; pnam:='?0' + case 1 ; pnam:=c + end case + next j + end + return + +CheckRemoveLogin: + Error = 0 + AccountRec = "" + Read AccountRec from UVOC, AccountName Then + Write AccountRec to UVOC, AccountName:".TEMP" Then + Delete UVOC, AccountName Else + Error = EADM.CANTWRITE + End + End Else + Error = EADM.CANTWRITE + End + End + Return +*********************************************************************** +* DeviceList - Get list of tapes, printers or "other" devices. +* Tapes and 'other' devices are taken from the +* &DEVICE& file, printers are taken from &DEVICE& +* and (if on unix) the sp.config file. +* +* Input: Key: 0 - list tapes +* 1 - list printers +* 2 - list other devices +* 3 - list default tapes (DT or DC) +* Output: Dynamic array of device names +*********************************************************************** +DeviceList: + + Key = Params<1> + + * First, run through &DEVICE& building up a list of the devices + * of the type requested + + MatchString = "DT":@VM:"DC":@VM:"T":@VM:"C":@VM:"F" + SSelect DEVICES + Done = False + Loop + ReadNext Id Else Done = True + Until Done Do + Readv DevType From DEVICES, Id, 4 Else DevType = '' + Convert " " To @fm In DevType + DevType = DevType<1> + Begin Case + Case DevType = "P" + * This is a printer, if that's what the user requested, + * add it to the list + + If Key = 1 Then + OutData<-1> = Id + End + Case DevType ="O" + * This is a not a tape or printer, if the user requested 'other + * devices', add it to the list + + If Key = 2 Then + OutData<-1> = Id + End + Case DevType Matches MatchString + * This is a tape device, if that's what the user requested, + * add it to the list + + If Key = 0 Then + OutData<-1> = Id + End Else + + * Also check for request to list default tapes + + If Key = 3 And (DevType = "DC" Or DevType = "DT") Then + OutData<-1> = Id + End + End + End Case + Repeat + +************************** +* OS specific code start * +************************** + + * If the caller asked for a list of printers and we're on a unix + * system, go through the sp.config file and check that there aren't + * any printers in there that aren't in the &DEVICE& file + + If OS.TYPE = "UNIX" And Key = 1 Then + SpConfigPath = SPOOL.DIR : "/sp.config" + OpenSeq SpConfigPath To FL Then + Fin = False + Loop + ReadSeq Line From FL Else Fin = True + Until Fin Do + PName = Line[" ", 1, 1] + Find PName In OutData Setting Fmc Else OutData<-1> = PName + Repeat + CloseSeq FL + End + End + +************************ +* OS specific code end * +************************ + + Return + + + +********************************************************************** +* GetAccountFiles - Returns a list of files local to an account +* +* Input: Account name or pathname +* Output: Sorted list of file names, separated +* by field marks. +********************************************************************** +GetAccountFiles: + + AccountName = Params<1> + If IsFullPath(AccountName) Then + AccountPath = AccountName + End Else + * Specific account name + ReadV AccountPath From UVACCOUNT, AccountName, 11 Else + Error = EADM.CANTREADPATH + Return + End + End + + ExLine = \SSELECT VOC WITH F1 LIKE "'F'..."\ + ExLine := \ AND F2 UNLIKE "...\:OS.SEP:\..."\ + + +************************** +* OS specific code start * +************************** + +* Checking for / on NT as this is still a valid separator in UniVerse files. + + If OS.TYPE # "UNIX" Then + ExLine := \ AND F2 UNLIKE ".../..."\ + End + +************************ +* OS specific code end * +************************ + + Gosub TCLCommand + + Done = False + Loop + ReadNext Id From SList Else Done = True + Until Done Do + OutData<-1> = Id + Repeat + + Return + +********************************************************************** +* GetAccountPath - Returns the pathname of an account +* +* Input: Account name or pathname +* Output: Account path, or empty if the path +* is not a valid account. +********************************************************************** +GetAccountPath: + + AccountName = Params<1> + If IsFullPath(AccountName) Then + AccountPath = AccountName + End Else + * Specific account name + ReadV AccountPath From UVACCOUNT, AccountName, 11 Else + Error = EADM.CANTREADPATH + Return + End + End + + * Open the VOC file for the specified account + OpenPath AccountPath : OS.SEP : "VOC" To Remote.Voc Then + Close Remote.Voc + OutData = AccountPath + End Else + Error = EADM.BADACCOUNT + End + + Return + +********************************************************************** +* GetDevice - Returns a device record. For tapes and +* 'other' devices, this comes from the &DEVICE& +* file. For printers, on a unix system, the +* device definition held in sp.config takes +* precedence over the one held in the &DEVICE& +* file. For non-unix, or if there isn't a +* definition for the requested printer in the +* sp.config file, it is read from the &DEVICE& +* file. +* +* Input: Device name +* Device type key: 0 - tape +* 1 - printer +* 2 - other +* Output: Device record +********************************************************************** +GetDevice: + + DevName = Params<1> + Key = Params<2> + DevRec = "" + +************************** +* OS specific code start * +************************** + + * If this is a unix system, and a printer device definition has + * been requested, look for it in the sp.config file first. Even + * if we get a definition from the sp.config file, we still have + * to get the description from the &DEVICE& record + + +************************ +* OS specific code end * +************************ + + * If we haven't already read the record (ie. its not a printer or + * we're not on a unix system or we are on a unix system but the + * printer wasn't defined in sp.config), read from the &DEVICE& file + + If DevRec = "" Then + Read DevRec From DEVICES, DevName Else + Error = EADM.NOTDEVICE + End + End + + If Error = 0 Then + OutData = DevRec + End + + Return + +********************************************************************** +* GetDrives - Returns a list of available drives for use +* with Browse (NT only) +* +* Input: NONE +* Output: List of drives +********************************************************************** +GetDrives: + + DECLARE GCI AdmListDrives + + num.drives = AdmListDrives(OutData) + + Return + +********************************************************************** +* GetFilePath - Returns the OS pathname of a given uniVerse +* file, having validated that it exists and +* can be opened. +* +* Input: Account Name or Pathname +* File Name +* Output: Absolute pathname of file +********************************************************************** +GetFilePath: + + AccountName = Params<1> + FileName = Params<2> + + * Check if the input is an account or path name. + If IsFullPath(AccountName) Then + AccountPath = AccountName + End Else + * If it's not a path name, read the path from UV.ACCOUNT + ReadV AccountPath From UVACCOUNT, AccountName, 11 Else + Error = EADM.CANTREADPATH + GoTo Exit.GetFilePath + End + End + + * Open the VOC file for the specified account + OpenPath AccountPath : OS.SEP : "VOC" To Remote.Voc Else + Error = EADM.BADACCOUNT + GoTo Exit.GetFilePath + End + + * Check the VOC entry for the specified file + * Do we have a dict? + If Index(FileName, "DICT", 1) Then + FileDict = Field(FileName," ",1) + FileData = field(FileName," ",2) + End Else + FileDict = "" + FileData = FileName + End + + * Read from VOC. If item doesn't exist, assume that the name + * given is an OS name relative to the account + Read FileItem From Remote.Voc, FileData Then + If UpCase(FileItem[1,1]) # "F" Then + Error = EADM.BADVOCITEM + GoTo Exit.GetFilePath + End + If Len(FileDict) > 0 Then + FilePath = FileItem<3> + If Len(FilePath) = 0 Then + Error = EADM.BADDICTPATH + GoTo Exit.GetFilePath + End + End Else + FilePath = FileItem<2> + If Len(FilePath) = 0 Then + Error = EADM.BADDATAPATH + GoTo Exit.GetFilePath + End + End + End Else + * No VOC record + FilePath = FileName + End + + * Check that the file itself can be opened + If IsFullPath(FilePath) Then + OutData = FilePath + End Else + OutData = AccountPath : OS.SEP : FilePath + End + OpenPath OutData To Temp.File Then + Close Temp.File + End Else + OpenSeq OutData To Temp.File Then + CloseSeq Temp.File + End Else + * Could not open the file either way + Error = EADM.BADFILE + End + End + +Exit.GetFilePath: + Close Remote.Voc + + Return + + +********************************************************************** +* GetRestoreInfo - Get the account restore informaton +* +* Input: Account Path +* Output: Restored account details +********************************************************************** +GetRestoreInfo: + + Error = 0 + OutData = "" + AccountPath = Trim(Params<1>) + + AccountPath = AccountPath : "\VOC" + OpenPath AccountPath To Temp.File Then + Read AccountDetails From Temp.File, "RESTORE.ACCOUNT" Then + OutData = AccountDetails + End Else + Error = EADM.CANTREAD + End + Close Temp.File + End Else + Error = EADM.CANTOPEN + End + + Return + +********************************************************************** +* GetMachineType - Temporary fix until this can be got from +* session properties +* +* Input: NONE +* Output: Machine type: 0 = NT, 1 - unix +********************************************************************** +GetMachineType: + + If OS.TYPE = "UNIX" Then + OutData = "1" + end else + OutData = "0" + End + + Return + + +************************************************************************ +* GetUVHome - Returns pathname of uv home account +* +* Input: NONE +* Output: uvhome pathname +************************************************************************ +GetUVHome: + + OutData = UVHOME + Return + +*********************************************************************** +* Initialise - Opens files and sets up debugging if required +* +* Input: NONE +* Output: UVHome path +* OSExec command +*********************************************************************** +Initialise: + + UVHOME = System(32) + UVHOMEBIN = UVHOME:OS.SEP:"bin":OS.SEP + + Openpath UVHOME:OS.SEP:'VOC' To VOC Else + Error = EADM.NOVOC + Return + End + +* Look for VMADMDBG record in VOC. If it's present, switch DEBUGGING on + + Read Rec From VOC, "VMADMDBG" Then + DEBUGGING = True + End Else + DEBUGGING = False + End + If DEBUGGING Then + DebugFile = "./Debug_":@UserNo + OpenSeq DebugFile To DEBUGFL Else + Create DEBUGFL Else + DEBUGGING = False + End + Seek DEBUGFL, -1, 2 Else Null + LogText = Oconv(Date(), "D2/"):" ":Oconv(Time(), "MTS") + GoSub WriteDbg + End + End + + If DEBUGGING Then + LogText = "Initialising" + GoSub WriteDbg + End + +* Before doing anything else, check that user is an administrator + + Temp = "" + call *ISUSER.B(0, Temp) + If Temp = 0 Then + Error = EADM.NOTADMIN + Return + End + + Openpath UVHOME:OS.SEP:'UV.ACCOUNT' To UVACCOUNT Else + Error = EADM.NOUVACCOUNT + Return + End + + Openpath UVHOME:OS.SEP:'&DEVICE&' To DEVICES Else + Error = EADM.NODEVICE + Return + End + +************************** +* OS specific code start * +************************** + +************************ +* OS specific code end * +************************ + + UVRC.OPEN = False + + OutData = UVHOME : @fm : OS.EXEC + + Return + + +********************************************************************** +* OSBrowse - Returns a list of the directories and files +* contained in a specified directory. +* +* The directory to list is determined by +* combining the two input arguments, start +* directory and directory modifier. +* +* Example 1: +* +* Start directory = "/u1/uv" +* Modifier = ".." +* +* Directory listed will be "/u1" +* +* Example 2: +* +* Start directory = "/u1/uv" +* Modifier = "catdir" +* +* Directory listed will be "/u1/uv/catdir" +* +* If the start directory is not specified, then +* the UVHOME directory is used as a default +* +* If the start directory turns out to be a file, +* or if it doesn't exist, then the last component +* of the pathname is removed, and the parent +* directory is listed. If that doesn't exist, +* an error is returned. +* +* Input: Start directory +* Directory modifier +* Output: Modified directory +* List of directories (prefixed by "D") and +* files (prefixed by "F") +********************************************************************** +OSBrowse: + + BrowsePath = Trim(Params<1>) + Modifier = Trim(Params<2>) + BrowsePath = Change(BrowsePath, OS.SEP:OS.SEP, OS.SEP) + If BrowsePath <> "" then + Begin Case + Case Modifier = ".." ; * going up a level + BrowsePath = BrowsePath[OS.SEP, 1, Count(BrowsePath, OS.SEP)] + +************************** +* OS specific code start * +************************** + + If OS.TYPE = "UNIX" Then + + * If we've gone back so far that there's nothing left, set + * path to root + + If BrowsePath = "" Then + BrowsePath = OS.SEP + End + End Else + + * If we've gone so far back we've stripped the separator from + * the drive, put it back + + If Len(BrowsePath) = 2 And BrowsePath[2, 1] = ":" Then + BrowsePath := OS.SEP + End + End + +************************ +* OS specific code end * +************************ + + Case Modifier = "" ; * no modifier, do nothing + + Case 1 + * Going down a level. If we're at the top (eg. "/" or "d:\") + * then we don't need to put the separator in + + If BrowsePath[Len(BrowsePath), 1] <> OS.SEP Then + BrowsePath := OS.SEP:Params<2> + End Else + BrowsePath := Params<2> + End + End Case + End Else + BrowsePath = UVHOME + End + +************************** +* OS specific code start * +************************** + + If OS.TYPE = "UNIX" Then + + * Request a single column listing with directories suffixed with "/". + * If the pathname does not specify a directory, the result + * will start with the input pathname exactly + + ExLine = "ls -p ":BrowsePath + GoSub ShellCommand + If Out[1, Len(BrowsePath)] = BrowsePath Then + + * Modify the path and try again + + BrowsePath = BrowsePath[OS.SEP, 1, Count(BrowsePath, OS.SEP)] + + * If we've gone back so far that there's nothing left, set + * path to root + If BrowsePath = "" Then + BrowsePath = OS.SEP + End + ExLine = "ls -p ":BrowsePath + GoSub ShellCommand + If Out[1, Len(BrowsePath)] = BrowsePath Then + * Failed again - return an error + Error = EADM.NODIRECTORY + Return + End + End + + End Else ; * NT + + * First try to get the list of directories. This will return + * an error message: + * - "File Not Found" if the parent directory exists but + * the file either doesn't exist or is not a directory + * - "The system cannot find the file specified." or + * "The system cannot find the path specified." if the + * parent directory doesn't exist. + * - "The filename, directory name, or volume label syntax is incorrect" if + * any part of the pathname is incorrect. + * These tests only work if the language is English. For the + * future, we should devise a language-indpendent way of doing + * the browse function. + + ExLine = "dir /B/AD ":BrowsePath + GoSub ShellCommand + + CheckString = "The filename, directory name, or volume label syntax is incorrect" + If Out[1, Len(CheckString)] = CheckString Then + * Invalid pathname, so give up + Error = EADM.NODIRECTORY + Return + End + + CheckString = "The system cannot find the " + If Out[1, Len(CheckString)] = CheckString Then + * The parent directory doesn't exist, so give up + Error = EADM.NODIRECTORY + Return + End + + CheckString = "File Not Found" + If Out[1, Len(CheckString)] = CheckString Then + + * Modify the path and try again + BrowsePath = BrowsePath[OS.SEP, 1, Count(BrowsePath, OS.SEP)] + + * If we've gone so far back we've stripped the separator from + * the drive, put it back + If Len(BrowsePath) = 2 And BrowsePath[2, 1] = ":" Then + BrowsePath := OS.SEP + End + ExLine = "dir /B/AD ":BrowsePath + GoSub ShellCommand + If Out[1, Len(CheckString)] = CheckString Then + + If Len(BrowsePath) = 3 And BrowsePath[2, 2] = ":":OS.SEP Then + * No files in root directory - return an empty directory listing + OutData = BrowsePath:@fm:"D.." + Return + End Else + * Failed again - return an error + Error = EADM.NODIRECTORY + Return + End + + End + End + End + +************************ +* OS specific code end * +************************ + +* Because we don't get the parent directory returned by "ls" or +* "dir", put it in by hand + + OutData = BrowsePath:@fm:"D.." + +************************** +* OS specific code start * +************************** + + If OS.TYPE = "UNIX" Then + + * Use a single column listing with directories suffixed with "/". + * The listing we need is already in the variable "Out" + + Dc = Dcount(Out,@fm) + + For I = 1 To Dc + If Out <> "" then + File = Trim(Out) + If File[Len(File), 1] = "/" Then + OutData<-1> = "D":File[1, Len(File) - 1] + End Else + OutData<-1> = "F":File + End + End + Next + + End Else ; * NT + + * First use the list of directories. This is already in the + * variable "Out". + + Dc = Dcount(Out,@fm) + For I = 1 To Dc + If Out <> "" Then + OutData<-1> = "D":Trim(Out) + End + Next + + * Now get the list of files, excluding hidden files + + ExLine = "dir /B/A-D-H ":BrowsePath + GoSub ShellCommand + CheckString = "File Not Found" + If Out[1, Len(CheckString)] # CheckString Then + Dc = Dcount(Out, @fm) + For I = 1 To Dc + If Out <> "" Then + OutData<-1> = "F":Trim(Out) + End + Next + End + End + +************************ +* OS specific code end * +************************ + + Return + +****************************************************************************** +* UniVerseBrowse - Like a normal Browse, but instead of browsing the +* OS file system, it browses the uniVerse account/file +* system. The first argument indicates what kind of +* browse (account or file): +* 1 means return all the local files in the account; +* 2 means return all the records in the file. +* +* Input: Key +* Account name to browse +* File name to browse (only if Key = 2) +* Output: List of files or records +****************************************************************************** + +UniVerseBrowse: + + Done = False + BrowseType = Params<1> + AccountName = Params<2> + If BrowseType = 1 then + Write "Q" : @FM : AccountName : @FM : "VOC" : @FM : "D_VOC" On VOC, "BROWSEPTR" + ExLine = "SSELECT BROWSEPTR WITH F1 LIKE F..." + ExLine := " AND F2 UNLIKE ...":OS.SEP:"..." + +************************** +* OS specific code start * +************************** + +* Checking for / on NT as this is still a valid separator in UniVerse files. + + If OS.TYPE # "UNIX" Then + ExLine := " AND F2 UNLIKE .../..." + End + +************************ +* OS specific code end * +************************ + + Gosub TCLCommand + Loop + ReadNext Id From SList Else Done = True + Until Done Do + OutData<-1> = Id + Repeat + End Else + FileName = Params<3> + Write "Q" : @FM : AccountName : @FM : FileName : @FM : "D_VOC" On VOC, "BROWSEPTR" + Open "BROWSEPTR" Then + SSelect + ReadList OutData Then Error = False + Close + End + End + Delete VOC, "BROWSEPTR" + Return + + +*********************************************************************** +* Unused - Returns a "Bad Call" error +* +* Input: NONE +* Output: NONE +*********************************************************************** +Unused: + Error = EADM.BADCALL + Return + + +*********************************************************************** +* U T I L I T Y R O U T I N E S +* ============= =============== +*********************************************************************** + +************************************************************************ +** CheckPathName +************************************************************************ +*CheckPathName: +* +* PathOk = True +* If Not(Convert("; *&[]`$^","",PathName) = PathName ) Then +* PathOk = False +* End +* Return + + +************************************************************************ +* FindAccountName - Tries to match an account path to an account +* name. +* +* Before calling, the Accounts array and AccountNum +* variable need to have been set up and the +* pathname to be matched must be in the variable +* "AccountPath" +* +* If a match is found, the account name will be +* put into the "AccountName" variable. If no match +* is found this will be empty. +************************************************************************ +*FindAccountName: +* +* AccountName = "" +* +* For I = 1 To NumAccounts +* If AccountPath = Accounts(I, 2) Then +* AccountName = Accounts(I, 1) +* Goto ExitFindAccountName +* End +* Next I +* +*ExitFindAccountName: +* +* Return +* + + + +*********************************************************************** +* ShellCommand +*********************************************************************** +ShellCommand: + +* Only add the quotes around the line on UNIX. On NT when using DOS /C +* there is no need for them. Also need to escape the & characters using +* ^& on NT and \& on UNIX. + +************************** +* OS specific code start * +************************** + + If OS.TYPE = "UNIX" Then + Command = OS.EXEC:" '" + For x = 1 to Len(ExLine) + if ExLine[x,1] = "&" Then + Command := "\&" + End Else + Command := ExLine[x,1] + End + Next + Command := "'" + End Else + Command = OS.EXEC:" " + For x = 1 to Len(ExLine) + if ExLine[x,1] = "&" Then +* If we have a '&&' this is the NT Command separator so +* don't convert. + if ExLine[x-1,4] = " && " then + Command := "&" + x += 1 + End Else + Command := "^&" + End + End Else + Command := ExLine[x,1] + End + Next + End + +************************ +* OS specific code end * +************************ + + Execute Command, Out. > Out + + Return + + +*********************************************************************** +* TCLCommand +*********************************************************************** +TCLCommand: + + Execute ExLine, Out. > Out, Select. > SList + + Return + +*********************************************************************** +* UvCommand +*********************************************************************** + +UvCommand: + + ExLine = UVHOMEBIN:ExLine + Gosub ShellCommand + + Return + + +********************************************************************** +* WriteDbg - log debug text to file +* Expects debug text in LogText variable +********************************************************************** +WriteDbg: + + WriteSeq Change(LogText, @fm, Char(10)) On DEBUGFL Else Null + Seek DEBUGFL, 0, 2 Else Null + Return diff --git a/Ardent/UV/APP.PROGS/PARSE.PERM.B b/Ardent/UV/APP.PROGS/PARSE.PERM.B new file mode 100755 index 00000000..e6741f0e --- /dev/null +++ b/Ardent/UV/APP.PROGS/PARSE.PERM.B @@ -0,0 +1,77 @@ +******************************************************************************* +* +* New System Admin - This routine will take a string, and decide if it is +* valid as a permissions string, and will parse it into a numeric +* value such as 777. +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description......................................... +* 10/14/98 23801 SAP Change copyrights. +* 11/05/90 7393 DPB Routine first created and admin'd. +******************************************************************************* + +SUBROUTINE PARSE.PERM.B(permstr, rtnvalue) +EQU DEFAULT TO 1 +BEGIN CASE + +CASE permstr = "" OR permstr = -1 + rtnvalue = -1 + +CASE (NUM(permstr) = 1 AND LEN(permstr) = 3) + IF permstr[1,1] < 8 and permstr[2,1] < 8 and permstr[3,1] < 8 THEN + rtnvalue = permstr + END + ELSE + rtnvalue = -1 + END + + +CASE DEFAULT + IF LEN(permstr) = 9 THEN + ok = 1 + perms = 0 + permstr = UPCASE(permstr) + FOR I = 1 to 9 + t = 1 + for J = 0 to (3 - int((I-1)/3)) -2 + t = t * 10 + next j + BEGIN CASE + + CASE ((permstr[I,1] = 'R' OR permstr[I,1] ='-') AND (MOD(I,3) = 1)) + IF permstr[I,1] = 'R' THEN perms += 4*t + CASE ((permstr[I,1] = 'W' OR permstr[I,1] ='-') AND (MOD(I,3) = 2)) + IF permstr[I,1] = 'W' THEN perms += 2*t + CASE ((permstr[I,1] = 'X' OR permstr[I,1] ='-') AND (MOD(I,3) = 0)) + IF permstr[I,1] = 'X' THEN perms += 1*t + + CASE DEFAULT + ok = 0 + END CASE + NEXT I + + IF ok = 1 THEN + rtnvalue = perms + END + ELSE + rtnvalue = -1 + END + END + ELSE + rtnvalue = -1 + END +END CASE +RETURN + +END + diff --git a/Ardent/UV/APP.PROGS/PERMS.B b/Ardent/UV/APP.PROGS/PERMS.B new file mode 100755 index 00000000..852079c1 --- /dev/null +++ b/Ardent/UV/APP.PROGS/PERMS.B @@ -0,0 +1,79 @@ +****************************************************************************** +* +* Permissions handling subroutine for UniVerse Files +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description......................................... +* 10/14/98 23801 SAP Change copyrights. +* 01/31/94 12895 DMK Check supplementary groups via SYSTEM(1017). +* 01/06/93 10825 PVW Root has valid permissions regardless. +* 12/21/92 10696 PVW Created subroutine. +* +******************************************************************************* + + SUBROUTINE PERMISSIONS (FILE, MODE, IN, OUT) + + * FILE - contains the file variable + * MODE - contains the mode of operation + * 0 - return the permission and file type + * 1 - return TRUE or FALSE flag for requested permissions + * 99 - subroutine failed + * IN - contains data passed into the subroutine + * if MODE = 0 then null + * MODE = 1 then requested permissions + * OUT - contains data passed out of the subroutine + * if MODE = 0 then attribute 1 is the permissions + * attribute 2 is the file type + * if MODE = 1 then attribute 1 contains TRUE or FALSE + * flag requested permissions okay + * + + OUT = '' + + STATUS FILE.INFO FROM FILE THEN + FILE.PERM = OCONV(FILE.INFO<5>,"MO") "R%7" + I = LEN(FILE.PERM) + FILE.TYPE = FILE.PERM[I-6,I-4] + FILE.PERM = FILE.PERM[I-2,I] + BEGIN CASE + CASE MODE = 0 + OUT<1> = FILE.PERM + OUT<2> = FILE.TYPE + CASE MODE = 1 + REQUESTED.PERM = IN<1> + EFFECTIVE.USER.ID = SYSTEM(28) + GROUP.LIST = SYSTEM(30) ;* primary group + GROUP.LIST<-1> = SYSTEM(1017) ;* supplementary groups + FILE.USER.ID = FILE.INFO<8> + FILE.GROUP.ID = FILE.INFO<9> + IF EFFECTIVE.USER.ID = FILE.USER.ID THEN + FILE.PERM = FILE.PERM[1,1] + END ELSE + LOCATE FILE.GROUP.ID IN GROUP.LIST SETTING POS THEN + FILE.PERM = FILE.PERM[2,1] + END ELSE + FILE.PERM = FILE.PERM[3,1] + END + END + IF REQUESTED.PERM = BITAND(REQUESTED.PERM,FILE.PERM) THEN + OUT<1> = 1 + END + IF EFFECTIVE.USER.ID = 0 THEN + OUT<1> = 1 + END + END CASE + END ELSE + MODE = 99 + END + RETURN + END diff --git a/Ardent/UV/APP.PROGS/PR.RECORD.B b/Ardent/UV/APP.PROGS/PR.RECORD.B new file mode 100755 index 00000000..01825aea --- /dev/null +++ b/Ardent/UV/APP.PROGS/PR.RECORD.B @@ -0,0 +1,189 @@ +****************************************************************************** +* +* PRINT.RECORD subroutine for PI/open COPY verb +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenance log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description......................................... +* 10/14/98 23801 SAP Change copyrights. +* 10/17/95 15321 SHJ Fix output when field number is greater than 10000 +* 04/28/95 16448 LDG Added UNICODE version of HEX.SW for NLS. +* 03/28/95 13618 SHK Fix spacing problems with CRT +* 07/30/93 10871 WLG Fix CRT for null fields not to print space. +* 07/16/93 10871 EAP Minor changes for Universe compatibility +* 06/25/93 10871 EAP Ported PI/open COPY verb to Universe +******************************************************************************* +* +* START-DESCRIPTION : +* +* This subroutine prints one record on the terminal or printer, in the +* format required by the COPY and LIST.ITEM verbs. It is called as +* follows: +* +* CALL -PRINT.RECORD( RECORD.ID, RECORD, LPTR.NO, LPTR.WIDTH, +* NUM.SUPPRESS.FLAG, ID.SUPPRESS.FLAG, HEX.SW) +* +* Arguments (all input): +* +* RECORD.ID The ID of the record to be printed. +* +* RECORD The text of the record to be printed. +* +* LPTR.NO The printunit on which to print. If terminal +* output is required, LPTR.NO should be set to +* zero, and PRINTER OFF should be in effect. +* +* LPTR.WIDTH The effective line width of the output device, +* i.e. the actual device width LESS any margin +* that may be in effect. +* +* NUM.SUPPRESS.FLAG If true, the line numbers which normally appear +* on the output will be suppressed. +* +* ID.SUPPRESS.FLAG If true, the record ID, which is otherwise +* output before the text of the record, will be +* suppressed. +* +* HEX.SW If >0, the text of the record will be output +* in hexadecimal (using MX0C conversion). +* If -1, the text will be output in Unicode 4-digit +* hexadecimal format (using MU0C conversion). +* +* END-DESCRIPTION +* +* START-DESIGN: +* +* END-DESIGN +* +* START-FUTURES: +* +* 1. The OCONV for the HEX option will only convert input strings up to +* 93 characters. LOOP required to feed OCONV substrings and conactenate +* the output. +* +* END-FUTURES +* +* START-CODE: +* +* START-LOCALIZATION +* +* END-LOCALIZATION +* + SUBROUTINE PRINT.RECORD (RECORD.ID, RECORD, LPTR.NO, LPTR.WIDTH, + NUM.SUP.SW, ID.SUP.SW, HEX.SW) +* +* + INDENT = 5 ;* EG. '0001 ' + IF LPTR.WIDTH <= INDENT THEN LINE.SPLIT = 80 + ELSE LINE.SPLIT = LPTR.WIDTH + IF NOT(NUM.SUP.SW) THEN + LINE.SPLIT -= INDENT + END + IF NOT(ID.SUP.SW) THEN + PRINT ON LPTR.NO ' ' :RECORD.ID + END + + DISPLAY.LINE.LENGTH = 0 + MAX.FIELD.COUNT = DCOUNT(RECORD,@FM) +* + * Process all fields in record. + FOR FIELD.COUNT = 1 TO MAX.FIELD.COUNT + + BEGIN CASE + CASE HEX.SW > 0 + RECORD.FIELD = OCONV(RECORD,"MX0C") + * Ensure also that line split is multiple of 2, so that a + * hex character is not displayed split across a line: + LINE.SPLIT -= MOD(LINE.SPLIT, 2) + CASE HEX.SW = -1 ;* (don't use < 0, as HEX.SW can be '') + * Unicode form wanted - caller should have checked NLS is on: + RECORD.FIELD = OCONV(RECORD,"MU0C") + * Ensure also that line split is multiple of 4, so that a + * Unicode character is not displayed split across a line: + LINE.SPLIT -= MOD(LINE.SPLIT, 4) + CASE 1 + RECORD.FIELD = RECORD + END CASE + + IF NOT(NUM.SUP.SW) + THEN + IF FIELD.COUNT < 10000 THEN + LINE.NO.DISPLAY = FMT(FIELD.COUNT, "4'0'R"):' ' + END ELSE + LINE.NO.DISPLAY = FMT(FIELD.COUNT, "5'0'R"):' ' + END + END ELSE + LINE.NO.DISPLAY = '' + END + + * + * Split field if required. FMT will split the line up by inserting + * text marks into the string ... + * + + ORIGINAL.TEXT.MARKS = COUNT(RECORD.FIELD, @TM) + IF RECORD.FIELD # "" THEN + RECORD.TEMP = FMT(RECORD.FIELD, LINE.SPLIT : "L") + END ELSE + RECORD.TEMP = "" + END + TEXT.MARK.SEPARATED.FIELDS = DCOUNT(RECORD.TEMP, @TM) + + * + * Now process string, we are ONLY interested in text marks, all + * other marks should be ignored and left in the string. Also we + * are only interested in text marks which have been put there by + * FMT, others should be ignored and left. Use DISLEN to check the + * text marks. + * + + DISPLAY.LINE = FIELD(RECORD.TEMP, @TM, 1) + IF ORIGINAL.TEXT.MARKS EQ 0 + THEN + PRINT ON LPTR.NO LINE.NO.DISPLAY : TRIMB(DISPLAY.LINE) + IF NOT(NUM.SUP.SW) THEN LINE.NO.DISPLAY = ' ' + END + + FOR LOOP.COUNTER = 2 TO TEXT.MARK.SEPARATED.FIELDS + LINE.CHUNK = FIELD(RECORD.TEMP, @TM, LOOP.COUNTER) + IF ORIGINAL.TEXT.MARKS EQ 0 + THEN + PRINT ON LPTR.NO LINE.NO.DISPLAY : TRIMB(LINE.CHUNK) + IF NOT(NUM.SUP.SW) THEN LINE.NO.DISPLAY = ' ' + END ELSE + DISPLAY.LINE.LENGTH= LEN(DISPLAY.LINE:@TM:LINE.CHUNK) + IF DISPLAY.LINE.LENGTH GT LINE.SPLIT + THEN + PRINT ON LPTR.NO LINE.NO.DISPLAY : TRIMB(DISPLAY.LINE) + IF NOT(NUM.SUP.SW) THEN LINE.NO.DISPLAY = ' ' + DISPLAY.LINE = LINE.CHUNK + END ELSE + DISPLAY.LINE := @TM:LINE.CHUNK + END + END + NEXT LOOP.COUNTER + + IF ORIGINAL.TEXT.MARKS NE 0 + THEN + PRINT ON LPTR.NO LINE.NO.DISPLAY : TRIMB(DISPLAY.LINE) + IF NOT(NUM.SUP.SW) THEN LINE.NO.DISPLAY = ' ' + END + + NEXT FIELD.COUNT + +* PRINT ON LPTR.NO + + RETURN + + END +* +* END-CODE diff --git a/Ardent/UV/APP.PROGS/PRECOMP.SUB b/Ardent/UV/APP.PROGS/PRECOMP.SUB new file mode 100755 index 00000000..a9e200ab --- /dev/null +++ b/Ardent/UV/APP.PROGS/PRECOMP.SUB @@ -0,0 +1,371 @@ + SUBROUTINE PRECOMP.SUB(PRECOMP.FILENAME, SRC.FILENAME, DEST.FILENAME, ITEMNAME, RESULTS) +******************************************************************************* +* +* +* Server subroutine for PICK Account Conversion Toolkit +* +* +* Module %M% Version %I% Date %H% +* +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +* +******************************************************************************* +* +* +* Maintenence log - insert most recent change descriptions at top +* +* +* Date.... GTAR# WHO Description........................................ +* 06/10/99 25437 TGS Added line to retain orginial line and add +* comment lines to show begining and end of +* changed code. +* 06/17/99 25437 TGS Added line to prevent FUNCTION translation from +* going past the end of the program. +* 05/01/99 24567 DJD Added fixes from monolith +* 10/14/98 23801 SAP Change copyrights. +* 01/01/98 22758 CJA Initial release +* 03/16/98 22758 CJA Fixed problem replacing tokens within quotes. +************************************************************************ + +* +* DESCRIPTION: + +* +************************************************************************ + +$INCLUDE UNIVERSE.INCLUDE PACTERR.H + + EQU AM TO CHAR(254) + EQU VM TO CHAR(253) + EQU TRUE TO 1 + EQU FALSE TO 0 + +* + OPENPATH PRECOMP.FILENAME TO F.PRECOMP ELSE + RESULTS = EADM.CANTOPENPRECOMP + RETURN + END + +* + OPEN SRC.FILENAME TO F.SOURCE ELSE + RESULTS = EADM.CANTOPENSRC + RETURN + END + OPEN DEST.FILENAME TO F.DEST ELSE + RESULTS = EADM.CANTOPENDEST + RETURN + END + READ PROGRAM FROM F.SOURCE,ITEMNAME ELSE + RESULTS = EADM.CANTREAD + RETURN + END + +* + COMMENT.LINE = "* The following line was converted by PACT." + CONVERT.COMMENT.START = "* Begin PACT converted line(s)." + CONVERT.COMMENT.END = "* End PACT converted line(s)." + NEWPROGRAM = "" + NO.LINES = DCOUNT(PROGRAM,AM) + FOR I.LINE = 1 TO NO.LINES + LINE = PROGRAM + ORIG.LINE = LINE + IF TRIM(LINE)[1,1] = "*" THEN + NEWLINE = LINE + END ELSE + DELIMS = "()=+-\, ;:" + DONE = 0 + I.CHAR = 0 + L.COUNT = 0 + MULTI.LINE = FALSE + LOOP UNTIL DONE OR L.COUNT > 6 DO + L.COUNT = L.COUNT + 1 + DONE = 1 + NEWLINE = "" + PAREN.COUNT = 0 + QUOTE = FALSE + LOOP UNTIL LINE = "" OR (I.CHAR > LEN(LINE)) DO + I.CHAR = I.CHAR + 1 + TEST = LINE[I.CHAR,1] + IF TEST = '(' THEN + PAREN.COUNT = PAREN.COUNT + 1 + END + IF TEST = '"' OR TEST = "'" THEN + IF QUOTE = FALSE THEN + IF TEST = "'" THEN + QUOTE = TRUE + END ELSE QUOTE = 2 + END ELSE + IF QUOTE = TRUE AND TEST = "'" THEN + QUOTE = FALSE + END + IF QUOTE = 2 AND TEST = '"' THEN + QUOTE = FALSE + END + END + END + IF INDEX(DELIMS,TEST,1) AND QUOTE = FALSE THEN + TOKEN = LINE[1,I.CHAR-1] + LINE = LINE[I.CHAR+1,LEN(LINE)] + ID.PRECOMP = TRIM(TOKEN) + IF TOKEN[1,1] = " " THEN B.SPC = " " ELSE B.SPC = "" + IF TOKEN[1,LEN(TOKEN)] = " " THEN A.SPC = " " ELSE A.SPC = "" + READ PRECOMP FROM F.PRECOMP,ID.PRECOMP THEN + DONE = 0 + GOSUB 100 + IF MULTI.LINE = FALSE THEN + TOKEN = B.SPC:TOKEN:A.SPC + END ELSE + NEWLINE = TOKEN:AM:NEWLINE + TOKEN = B.SPC:PRECOMP<2>:A.SPC + END + END ELSE + TOKEN = TOKEN:TEST + END + NEWLINE = NEWLINE:TOKEN + I.CHAR = 0 + * + * Need to check and omitt comments + * Once an '*' is found UV Compiler + * ignores the rest of the line. + * By Wadah Sayyed + * + IF TEST = ";" THEN + GOT.COMMENT = FALSE + DONE.COMMENT = FALSE + COMMENT.LEN = 0 + FOR I = 1 TO LEN(LINE) UNTIL (GOT.COMMENT OR DONE.COMMENT) + BEGIN CASE + CASE LINE[I,1] = '*' + GOT.COMMENT = TRUE + CASE ( LINE[I,1] # ' ' ) + DONE.COMMENT = TRUE + CASE 1 + END CASE + NEXT I + IF GOT.COMMENT THEN I.CHAR = I.CHAR + LEN(LINE) + END + END + REPEAT + LINE = NEWLINE + REPEAT + END + * If what I have is not the same as what I started out with + * then there was a change. + * Add comments to the orginial line. + * Place comments in the program that PACT has changed the line + * Also add code which shows the begining and end of + * the replacement lines. + IF NEWLINE # ORIG.LINE THEN + NEWPROGRAM<-1> = COMMENT.LINE + NEWPROGRAM<-1> = "*":ORIG.LINE + NEWPROGRAM<-1> = CONVERT.COMMENT.START:AM:NEWLINE:AM:CONVERT.COMMENT.END + END ELSE + NEWPROGRAM<-1> = NEWLINE + END + CRT '.': + NEXT I.LINE + CRT + +* + RESULTS = 0 + WRITE NEWPROGRAM ON F.DEST,ITEMNAME + +* + RETURN + +* +* Extract Token +* Routine to extract syntax for token + +* +100: NO.PARENS = DCOUNT(LINE,"(") + END.PAREN = NO.PARENS - (PAREN.COUNT - 1) + STRING = LINE + END.POS = 0 + PARAMS = "" + NO.PARENS = 0 + I.CHR = 0 + LOOP UNTIL STRING = "" OR NO.PARENS < 0 DO + END.POS = END.POS + 1 + I.CHR = I.CHR + 1 + TEST.CHR = STRING[I.CHR,1] + BEGIN CASE + CASE TEST.CHR = '(' + NO.PARENS = NO.PARENS + 1 + CASE TEST.CHR = ')' + NO.PARENS = NO.PARENS - 1 + IF NO.PARENS = -1 THEN + PARAMS<-1> = STRING[1,I.CHR-1] + STRING = "" + END + CASE TEST.CHR = ',' AND NO.PARENS = 0 + PARAMS<-1> = STRING[1,I.CHR - 1] + STRING = STRING[I.CHR+1,LEN(STRING)] + I.CHR = 0 + CASE TEST.CHR = "" + PARAMS<-1> = STRING + STRING = "" + END CASE + REPEAT + +* + NO.CONDITIONS = DCOUNT(PRECOMP<1>,VM) + FOUND = FALSE + S.ATTR = 3 + CNT = 0 + LOOP + CNT = CNT + 1 + CONDITION = PRECOMP<1,CNT> + UNTIL CNT > NO.CONDITIONS OR FOUND = TRUE DO + BEGIN CASE + CASE CONDITION = "" + S.ATTR = CNT + 2 + FOUND = TRUE + CASE NUM(CONDITION) + IF CONDITION = DCOUNT(PARAMS,AM) THEN + S.ATTR = CNT + 2 + FOUND = TRUE + END + * + * Added to handle functions from Mentor Pro + * By Wadah Sayyed + * + CASE CONDITION[1,1] = "F" + FUNCTION.ID = TRIM( FIELD(LINE, '(', 1) ) + * + * How many arguments? + * + COMMENT.ONLY = ( PRECOMP<3>[1,1] = "*" ) + ARG.LIST = '' + ARG.CNT = 0 + START.POS = INDEX(LINE, "(", 1) + IF START.POS THEN + START.POS = START.POS + 1 + LAST.ARG = FALSE + CHR.CNT = START.POS - 1 + NO.PARENS = 0 + LAST.ARG = FALSE + LOOP + CHR.CNT = CHR.CNT + 1 + TEST.CHR = LINE[CHR.CNT,1] + BEGIN CASE + CASE TEST.CHR = "(" + NO.PARENS = NO.PARENS + 1 + ARG.LIST = ARG.LIST:TEST.CHR + CASE TEST.CHR = "," + ARG.LIST = ARG.LIST:TEST.CHR + ARG.CNT = ARG.CNT + 1 + CASE TEST.CHR = ")" + NO.PARENS = NO.PARENS - 1 + IF NO.PARENS = "-1" THEN + LAST.ARG = TRUE + ARG.CNT = ARG.CNT + 1 + END ELSE + ARG.LIST = ARG.LIST:TEST.CHR + END + CASE 1 + ARG.LIST = ARG.LIST:TEST.CHR + END CASE + UNTIL (( LAST.ARG ) OR ( CHR.CNT = LEN(LINE) )) DO REPEAT + END ELSE CHR.CNT = LEN(FUNCTION.ID) + LEN.PROCESSED = CHR.CNT + 1 + * + * 1. Comment out the function and leave it in the code + * for reference. + * 2. Structure the UV function + * + END.OF.FUNC = FALSE + FUNC.ITEM = "FUNCTION ":FUNCTION.ID:"(":TRIM(ARG.LIST):")" +* We are now commenting the lines out so this line is not needed +* NEWPROGRAM<-1> = "* ":TOKEN:" ":LINE + GOT.FUNC = FALSE + LOOP + I.LINE = I.LINE + 1 +* Since we now comment lines out there is no need for this line +* If left in this will cause double lines. +* NEWPROGRAM<-1> = "* ":PROGRAM + FUNC.LINE = TRIM(PROGRAM) + IF FUNC.LINE[1,10] = "RETURNING " THEN + GOT.FUNC = TRUE + FUNC.LINE = "RETURN (":FUNC.LINE[11,999]:")" + END + FUNC.ITEM = FUNC.ITEM:AM:FUNC.LINE +* UNTIL GOT.FUNC DO REPEAT + * Changed by Tim Stokes. + * If the FUNCTION has been coded incorrectly then the + * Program will go into an infinte loop + UNTIL GOT.FUNC OR I.LINE > NO.LINES DO REPEAT + IF NOT(COMMENT.ONLY) THEN + WRITE FUNC.ITEM ON F.DEST,FUNCTION.ID + END + * This should trigger new definitions to handle + * using the function in the rest of the code, + * so, let's create it + NEW.PRECOMP.ID = "@":FUNCTION.ID + NEW.PRECOMP.ITEM = '' + NEW.PRECOMP.ITEM<1> = "@" + IF COMMENT.ONLY THEN + NEW.PRECOMP.ITEM<3> = "*" + END ELSE + NEW.PRECOMP.ITEM<3> = FUNCTION.ID:"(" + FOR I = 1 TO ARG.CNT + NEW.PRECOMP.ITEM<3> = NEW.PRECOMP.ITEM<3> : "%%":I + IF I < ARG.CNT THEN NEW.PRECOMP.ITEM<3> = NEW.PRECOMP.ITEM<3> : "," + NEXT I + NEW.PRECOMP.ITEM<3> = NEW.PRECOMP.ITEM<3> : ")" + END + WRITE NEW.PRECOMP.ITEM ON F.PRECOMP, NEW.PRECOMP.ID + IF COMMENT.ONLY THEN + TOKEN = '' + END ELSE + PRECOMP = DELETE(PRECOMP,3) + TOKEN = "DEFFUN " : FUNCTION.ID + IF TRIM(ARG.LIST) # '' THEN TOKEN = TOKEN : "(" : TRIM(ARG.LIST) : ")" + END + LINE = LINE[LEN.PROCESSED,99] + CASE CONDITION[1,1] = "@" + CASE 1 + ATTR = FIELD(CONDITION,',',1) + VALUE = FIELD(CONDITION,',',2) + IF TRIM(PARAMS) = VALUE THEN + S.ATTR = CNT + 2 + FOUND = TRUE + END + END CASE + REPEAT + IF PRECOMP = "" THEN + TOKEN = TOKEN:TEST + RETURN + END + IF PRECOMP = "*" THEN + TOKEN = "* ":TOKEN:TEST + RETURN + END + LINE = LINE[END.POS+1,LEN(LINE)] + +* + TOKEN = "" + AM.STRING = "" + MULTI.LINE = FALSE + NO.PRECOMP = DCOUNT(PRECOMP,VM) + FOR I.PRECOMP = 1 TO NO.PRECOMP + IF I.PRECOMP > 1 THEN + MULTI.LINE = TRUE + AM.STRING = AM + END + TOKEN = TOKEN:AM.STRING:PRECOMP + NEXT I.PRECOMP + +* + LOOP + POS = INDEX(TOKEN,"%%",1) + UNTIL POS = 0 DO + FIELD.NO = TOKEN[POS+2,1] + TOKEN = TOKEN[1,POS-1]:PARAMS:TOKEN[POS+3,LEN(TOKEN)] + REPEAT + RETURN diff --git a/Ardent/UV/APP.PROGS/PTBCODE b/Ardent/UV/APP.PROGS/PTBCODE new file mode 100755 index 00000000..9721794e --- /dev/null +++ b/Ardent/UV/APP.PROGS/PTBCODE @@ -0,0 +1,75 @@ +SUBROUTINE PTBCODE(FVAR,FIELD.NO,sel.val) +$INCLUDE UNIVERSE.INCLUDE MTF.INCL.H +******************************************************************************* +* +* Catalog all BASIC programs +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description......................................... +* 10/14/98 23801 SAP Change copyrights. +* 1/16/91 7673 DTM Corrected errors, put in motif changes, and finalized +* 12/06/88 5086 GPS Correct error due to undefined LINE +* 07/25/88 - Maintenence log purged at 5.2.1, see release 5.1.10. +* +******************************************************************************* +* +* This program was produced in part by SCREENGEN, a proprietary program of +* Infocel, Inc., P.O. Box 18305, Raleigh, N.C. 27609 SSA05 +* +***************************************************************************** +$OPTIONS A +* + EQU AM TO CHAR(254) ;* ATTRIBUTE MARK CHARACTER +*************************************************************************** + CODE.REF='' + LINE=2 + heading="" + heading=UVREADMSG(073090,"") + SELECT FVAR +* +*** DO AN INSERTION SORT TO GET LOCAL DYNAMIC ARRAY OF CODE FILE KEYS *** +* + EOI=0 + LOOP + READNEXT ID ELSE EOI=1 + UNTIL EOI DO + IF NUM(ID) THEN + LOCATE ID IN CODE.REF<1> BY "AR" SETTING PTR ELSE CODE.REF=INSERT(CODE.REF,PTR,0,0,ID) + END ELSE + LOCATE ID IN CODE.REF<1> BY "AL" SETTING PTR ELSE CODE.REF=INSERT(CODE.REF,PTR,0,0,ID) + END + REPEAT +* +* +*** DISPLAY CODE REFERENCE AND DESCRIPTIONS *** +* + ID=COUNT(CODE.REF,AM)+1 + IF CODE.REF='' THEN ID=0 + print.array="" + print.count=0 + FOR I=1 TO ID + READV DESC FROM FVAR,CODE.REF,FIELD.NO ELSE DESC='' + LINE=MOD(I-1,16)+3 + print.array=CODE.REF + print.array=DESC + print.count += 1 + NEXT I + IF ID = 0 THEN + print.array<1>=UVREADMSG(073091,"") + print.count=1 + END + CALL *LIST.BOX.B(heading,4,10,print.array,print.count,2,sel.val,0) + IF sel.val=-1 THEN RETURN + sel.val=print.array + RETURN + END diff --git a/Ardent/UV/APP.PROGS/PTERM b/Ardent/UV/APP.PROGS/PTERM new file mode 100755 index 00000000..244b246b --- /dev/null +++ b/Ardent/UV/APP.PROGS/PTERM @@ -0,0 +1,131 @@ +******************************************************************************* +* +* Support of PR1ME INFORMATION subroutine '!PTERM' +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description......................................... +* 10/13/98 23801 RGA Change copyright info. +* 07/25/88 - - Maintenence log purged at 5.2.1, see release 5.1.10. +* +******************************************************************************* + +$OPTIONS DEFAULT + +SUBROUTINE PR1ME( OPTIONS ) + +************************************************************************* +* +* Emulate the PTERM command by performing an "EXECUTE PTERM { options }" +* +* Valid options include: +* +* BREAK ON - enable terminal BREAK key +* BREAK OFF - disable terminal BREAK key +* ERASE char - sets "char" as the backspace key +* KILL char - sets "char" as the delete-line key +* HALF LF - sets terminal to half-duplex; +* carriage return automatically generates +* linefeed +* HALF NOLF - sets terminal to half-duplex; +* carriage return does not generate linefeed +* FULL LF - sets terminal to full-duplex; +* carriage return automatically generates +* linefeed +* FULL NOLF - sets terminal to full-duplex; +* carriage return does not generate linefeed +* NOXOFF - disables flow control (XON/XOFF) +* XOFF - enables flow control (XON/XOFF) +* XON - enables flow control (XON/XOFF) +* +************************************************************************* +* + EQU TRUE TO 1, FALSE TO 0 + NEW.OPTIONS = "" + OPTIONS = TRIM( OPTIONS ) + OPTIONS := " " +* + GOSUB 100 ;* Parse "OPTIONS"; build "NEW.OPTIONS" + SENTENCE = "PTERM ":TRIM( NEW.OPTIONS ) + EXECUTE SENTENCE + RETURN + STOP +* +* +* +* +100 +* Parse the "OPTIONS" string, yielding "NEW.OPTIONS" +* + ERASE.KILL.FLAG = FALSE ;* Was last token "ERASE" or "KILL" ? + I = 1 + LOOP + TOKEN = FIELD( OPTIONS, " ", I ) + WHILE TOKEN DO + IF TOKEN[ 1, 1 ] = "-" THEN TOKEN = TOKEN[ 2, LEN( TOKEN )] + IF ERASE.KILL.FLAG THEN + NEW.OPTIONS := " ":TOKEN + ERASE.KILL.FLAG = FALSE + END ELSE + BEGIN CASE + CASE TOKEN[ 1, 1 ] = "B" + NEW.OPTIONS := " BREAK" + ERASE.KILL.FLAG = FALSE + CASE TOKEN[ 1, 1 ] = "D" + NEW.OPTIONS := " DELAY" + ERASE.KILL.FLAG = FALSE + CASE TOKEN[ 1, 2 ] = "EC" + NEW.OPTIONS := " ECHO" + ERASE.KILL.FLAG = FALSE + CASE TOKEN[ 1, 2 ] = "ER" + NEW.OPTIONS := " ERASE" + ERASE.KILL.FLAG = TRUE + CASE TOKEN[ 1, 1 ] = "F" + NEW.OPTIONS := " FULL" + ERASE.KILL.FLAG = FALSE + CASE TOKEN[ 1, 1 ] = "H" + NEW.OPTIONS := " HALF" + ERASE.KILL.FLAG = FALSE + CASE TOKEN[ 1, 1 ] = "K" + NEW.OPTIONS := " KILL" + ERASE.KILL.FLAG = TRUE + CASE TOKEN[ 1, 1 ] = "L" + NEW.OPTIONS := " LF" + ERASE.KILL.FLAG = FALSE + CASE TOKEN[ 1, 3 ] = "NOD" + NEW.OPTIONS := " NODELAY" + ERASE.KILL.FLAG = FALSE + CASE TOKEN[ 1, 3 ] = "NOL" + NEW.OPTIONS := " NOLF" + ERASE.KILL.FLAG = FALSE + CASE TOKEN[ 1, 3 ] = "NOX" + NEW.OPTIONS := " NOXOFF" + ERASE.KILL.FLAG = FALSE + CASE TOKEN[ 1, 2 ] = "OF" + NEW.OPTIONS := " OFF" + ERASE.KILL.FLAG = FALSE + CASE TOKEN[ 1, 3 ] = "XOF" + NEW.OPTIONS := " XOFF" + ERASE.KILL.FLAG = FALSE + CASE TOKEN[ 1, 3 ] = "XON" + NEW.OPTIONS := " XOFF" + ERASE.KILL.FLAG = FALSE + CASE 1 + NEW.OPTIONS := " ":TOKEN + ERASE.KILL.FLAG = FALSE + END CASE + END + I += 1 + REPEAT + RETURN + + END diff --git a/Ardent/UV/APP.PROGS/PUT.FORM.B b/Ardent/UV/APP.PROGS/PUT.FORM.B new file mode 100755 index 00000000..40c03efc --- /dev/null +++ b/Ardent/UV/APP.PROGS/PUT.FORM.B @@ -0,0 +1,42 @@ +******************************************************************************* +* +* New System Admin - This routine takes the data structure for an input +* form, and prints it on the screen. +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description......................................... +* 10/14/98 23801 SAP Change copyrights. +* 07/23/92 9064 WLC Added ",1" for printing of defaults so that UVEXPORT +* can use the defaults record for multiple values. +* 10/18/91 8834 DPB Addded code to paint wrapped data properly. +* 05/13/91 8345 DTM changed print to tprints +* 03/13/91 7673 DTM Modified for performance sake +* 11/05/90 7393 DPB Routine first created and admin'd. +******************************************************************************* + +SUBROUTINE PUT.FORM.B(size, form, defaults, prompt, flag) + +blank=STR(" ",LEN(prompt)) +FOR I = 1 TO size + IF form = "" THEN CONTINUE + IF flag = 1 THEN + TPRINT form:form:form:prompt: + TPRINT defaults[1,form]:STR(" ",form-LEN(defaults)): + END + ELSE + TPRINT form:STR(" ",LEN(form)):form:blank: + TPRINT STR(" ",form): + END +NEXT I + +RETURN diff --git a/Ardent/UV/APP.PROGS/RD.UNX.FIL.B b/Ardent/UV/APP.PROGS/RD.UNX.FIL.B new file mode 100755 index 00000000..7605b941 --- /dev/null +++ b/Ardent/UV/APP.PROGS/RD.UNX.FIL.B @@ -0,0 +1,29 @@ +******************************************************************************* +* +* New System Admin - This routine will read a unix file into a dynamic +* array. +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description......................................... +* 10/14/98 23801 SAP Change copyrights. +* 11/05/90 7393 DPB Routine first created and admin'd. +******************************************************************************* + +subroutine rd.unx.fil.b (unix.directory.file.variable,unix.file.name,out.array,out.count) +* Reads a Unix file as a record of its parent directory, and coverts +* Eg, opens the /etc/passwd record of the /etc file, and converts to a +* standard dynamic array. +read out.array from unix.directory.file.variable,unix.file.name else out.array = "" +convert char(10):":" to @AM:@VM in out.array +out.count = count(out.array,@AM) + 1 +return diff --git a/Ardent/UV/APP.PROGS/REC.CHKPT.B b/Ardent/UV/APP.PROGS/REC.CHKPT.B new file mode 100755 index 00000000..39aef709 --- /dev/null +++ b/Ardent/UV/APP.PROGS/REC.CHKPT.B @@ -0,0 +1,226 @@ +****************************************************************************** +* +* System Admin Transaction Logging - Routine to get the CHECKPOINT data +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description........................................ +* 10/14/98 23801 SAP Change copyrights. +* 08/29/96 19074 JC Fix previous fix. +* 08/16/96 19074 JC Fix to setup correct first and last log numbers. +* 05/28/96 17839 LA Allow special call from UniVerse Admin subroutine +* 03/26/96 18212 LAG Windows NT port +* 11/04/94 15261 DTM Fixed by setting low mark to 999999999 +* 10/14/94 15104 DTM Fixed to verify number of prompts +* 05/15/94 13286 DTM Initial programming +* +******************************************************************************* +id = "%W%" +******************************************************************************* +$INCLUDE UNIVERSE.INCLUDE TLOG.H + +****************** +** Windows NT port +** +DEFFUN IS.FULLPATH(FILESPEC) CALLING "*IS.FULLPATH" +** +****************** + +ADMINOPT = 0 ;* Assume not called from UVAdmin +TMP = TRIM( @SENTENCE ) +CNT = COUNT( TMP, " " ) +IF ( CNT NE 1 ) THEN + If ( CNT EQ 2 ) AND ( FIELD(TMP, " ", 3) = "1" ) Then + ADMINOPT = 1 ;* Called from UVAdmin + END ELSE + PRINT "Error: Incorrect number of arguments" + STOP + END +END + +File = UPCASE( FIELD( TMP, " ", 2 ) ) + +Use.All = 0 +IF File = "ALL" THEN + EXECUTE "SSELECT UV.TRANS WITH STATUS TO 0" CAPTURING junk + Use.All = 1 +END +ELSE + GETLIST File TO 0 ELSE + IF ADMINOPT = 1 THEN + Print "-1" + END ELSE + PRINT "Cannot get select list" + END + STOP + END +END + +lping = 1 +LowMark = 999999999 +HighMark = 0 +open.acct = 1 +FileRec = "" +File = "" + +OPEN "", "UV.ACCOUNT" TO file.var ELSE + open.acct = 0 +END + +OPEN "", "UV.TRANS" TO trans.var ELSE + IF ADMINOPT = 1 THEN + PRINT "-2" + END ELSE + PRINT "Cannot open UV.TRANS file" + END + STOP +END + +LOOP + READNEXT transRec THEN + + If Use.All Then + + * At this point, we have the UV.TRANS file rec. We need to get the + * ACCOUNT and FILE to find the pathname in there. If that doesn't + * exist, we should use the pathname supplied in the UV.TRANS file + * Ok, let's get the ACCOUNT + + READ FileRec FROM trans.var, transRec THEN + IF open.acct THEN + Acct = FileRec<1> + READ AcctRec FROM file.var, Acct THEN + AcctFile = AcctRec<11> ;* Ok, now we got the unix path + OPENPATH AcctFile:"/VOC" TO xfile.var THEN + * We got the open path to the account, let's find + * out path to the file... + READ xFileRec from xfile.var, FileRec<2> THEN + * Now we have the open remote acct, and the file + tmpFile = xFileRec<2> + + IF IS.FULLPATH(tmpFile) THEN + File = tmpFile + END + ELSE + File = AcctFile:"/":tmpFile + END + END + ELSE + File = FileRec<4> + END + END + ELSE + File = FileRec<4> + END + END + ELSE + File = FileRec<4> + END + END + ELSE + File = FileRec<4> + END + END + ELSE + If ADMINOPT = 1 Then + Print "-3" + End Else + Print "Unable to read item from UV.TRANS file" + End + Stop + END + END + ELSE + File = transRec + END + + id = 0 + @SYSTEM.RETURN.CODE = 0 + RECIO( File, id, RECIO$CHECKPOINT ) + + IF @SYSTEM.RETURN.CODE = 0 THEN + + * Set up the First Log file number. + IF id < LowMark And id > 0 THEN + LowMark = id + END + END + END + ELSE + lping = 0 + END + +UNTIL lping = 0 REPEAT + +* Find the Last used log number + +@SYSTEM.RETURN.CODE = 0 +id = 0 +RECIO (id, FINFO$AI.FIRSTSEQ, RECIO$FINFO) + +If @SYSTEM.RETURN.CODE = 0 Then + HighMark = id - 1 +End Else + + * Unable to last log number from RECIO, so the log file + * must be full or none available, so get the last log number + * from the DICT UV_LOGS + + Open "DICT", "UV_LOGS" to logfile Else + If ADMINOPT = 1 Then + Print "-4" + End Else + Print "Unable to open D_UV_LOGS" + End + Stop + End + + Readv id from logfile,"LOG.NEXT",2 Else + If ADMINOPT = 1 Then + Print "-5" + End Else + Print "Unable to read LOG.NEXT record from D_UV_LOGS" + End + Stop + End + + HighMark = id - 1 +End + +If HighMark = 0 Then + * No checkpointed logfiles so set both to zero + LowMark = 0 +End + +If LowMark = 999999999 Then + LowMark = 0 +End + +* If the first log is less than the last log then the first +* log is the one that has been used and synced, therefore +* add one the the first log. + +If LowMark < HighMark Then + LowMark += 1 +End + +CLOSE xfile.var +CLOSE file.var + +IF ADMINOPT = 1 THEN + PRINT LowMark : @VM : HighMark +END ELSE + PRINT "First log is ":LowMark + PRINT "Last log is ":HighMark +END + +END diff --git a/Ardent/UV/APP.PROGS/REC.CONSIST.B b/Ardent/UV/APP.PROGS/REC.CONSIST.B new file mode 100755 index 00000000..a7130663 --- /dev/null +++ b/Ardent/UV/APP.PROGS/REC.CONSIST.B @@ -0,0 +1,37 @@ +****************************************************************************** +* +* System Admin Transaction Logging - Routine to set the Consistency flag +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description........................................ +* 10/14/98 23801 SAP Change copyrights. +* 10/14/94 15104 DTM Fixed to verify number of prompts +* 05/15/94 13286 DTM Initial programming +* +******************************************************************************* +id = "%W%" +******************************************************************************* +$INCLUDE UNIVERSE.INCLUDE TLOG.H + +TMP = TRIM( @SENTENCE ) +CNT = COUNT( TMP, " " ) +IF ( CNT NE 1 ) THEN + PRINT "Error: Incorrect number of arguments" + STOP +END +File = FIELD( TMP, " ", 2 ) +RECIO( File, RECIO$CONSISTENT ) + +IF @SYSTEM.RETURN.CODE THEN + PRINT "Unable to set consistent flag on file ":File +END diff --git a/Ardent/UV/APP.PROGS/REL.LFILE.B b/Ardent/UV/APP.PROGS/REL.LFILE.B new file mode 100755 index 00000000..9a1b70b9 --- /dev/null +++ b/Ardent/UV/APP.PROGS/REL.LFILE.B @@ -0,0 +1,117 @@ +****************************************************************************** +* +* System Admin Transaction Logging - Release Log File +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description........................................ +* 10/14/98 23801 SAP Change copyrights. +* 10/14/94 15104 DTM Fixed to verify number of prompts +* 05/15/94 13286 DTM Initial programming +* +******************************************************************************* +id = "%W%" +******************************************************************************* + * Inserts + +$INCLUDE UNIVERSE.INCLUDE TLOG.H + + * Check that this user is a system administrator + + ALLOWED = 0 + CALL *ISUSER.B(0, ALLOWED) + + IF NOT(ALLOWED) THEN + ERROR = NOT.ADMINISTRATOR.ERROR + GOSUB ERROR.SUB + GOTO EXIT + END + + * Do some initialization + + GOSUB INIT + + * release log file + + GOSUB RELEASE.LOGFILE + + * Finished + + GOTO EXIT + +*==== +INIT: +*==== + + * Parse command line + TMP = TRIM( @SENTENCE ) + CNT = COUNT( TMP, " " ) + IF ( CNT NE 1 ) THEN + ERROR = INCORRECT.NUM.ARGS + GOSUB ERROR.SUB + GOTO EXIT + STOP + END + + SEQUENCE.NUMBER = FIELD( TMP, " ", 2 ) + + Sel.Stmt = "SELECT UV_LOGS WITH STATUS = 'Full' BY @ID SAVING @ID" + EXECUTE Sel.Stmt RTNLIST tmpl CAPTURING junk + + READNEXT FIRST.NUMBER FROM tmpl THEN + IF FIRST.NUMBER # SEQUENCE.NUMBER THEN + ERROR = NOT.LOWEST.SEQ.NUM.ERROR + GOSUB ERROR.SUB + GOTO EXIT + END + END + + RETURN + +*============= +RELEASE.LOGFILE: +*============= + RECIO( SEQUENCE.NUMBER, RECIO$CLEAR ) + + RETURN + +*========= +ERROR.SUB: +*========= + + * Error handling routine + + PRINT @SYS.BELL + + * Set return code and report the error + + BEGIN CASE + + CASE ERROR = NOT.ADMINISTRATOR.ERROR + PRINT 'Error: Only the UniVerse Administrator can DELETE log files.' + CASE ERROR = NOT.LOWEST.SEQ.NUM.ERROR + PRINT 'Error: Log Sequence Number must be the lowest available' + CASE ERROR = INCORRECT.NUM.ARGS + PRINT 'Error: Incorrect number of arguments' + + END CASE + + RETURN + +*--------------- +EXIT: +*--------------- + + STOP + END + +* END-CODE diff --git a/Ardent/UV/APP.PROGS/REMOTE.B b/Ardent/UV/APP.PROGS/REMOTE.B new file mode 100755 index 00000000..5619feb9 --- /dev/null +++ b/Ardent/UV/APP.PROGS/REMOTE.B @@ -0,0 +1,92 @@ +****************************************************************************** +* +* Remotely execute a command using the uVnet engine +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description......................................... +* 10/14/98 23801 SAP Change copyrights. +* 06/09/95 16668 TMC if there is not any connection, try to make one +* 05/15/95 15974 TMC fix error message when no connection +* 05/15/95 15974 TMC change REMOTE.B to use same Uv/Net connection +* 09/01/93 11392 TMC add user name to remote executes +* 08/23/93 11392 TMC New file +******************************************************************************* + +SUBROUTINE REMOTE.B(HNAME, COMMAND, DIRECTORY, RESULT) +$INCLUDE UNIVERSE.INCLUDE MTF.INCL.H +$INCLUDE UNIVERSE.INCLUDE MACHINE.NAME + +EQU UVRPC.INT TO 0 +EQU UVRPC.DOUBLE TO 1 +EQU UVRPC.CHAR TO 2 +EQU UVRPC.STRING TO 3 +EQU UVRPC.INT.PTR TO 4 +EQU UVRPC.DOUBLE.PTR TO 5 +EQU UVRPC.FUNCNAME TO 6 + +DIM CALL.ARGS(20, 2), RES.ARGS(20,2) + +* get old connection number +CONNUM = SYSTEM(1201, HNAME) +IF CONNUM <= 0 THEN + * try to connect + PATHNAME = HNAME:"!":DIRECTORY:"/VOC" + OPENPATH PATHNAME TO FV.VOC ELSE + PRINT "The RPC is not connected" + PRINT "RPCERROR=":SYSTEM(1203):" CONNUM=":CONNUM + PRINT UVREADMSG(SYSTEM(1203), "The RPC is not connected") + RETURN + END + CLOSE FV.VOC + CONNUM = SYSTEM(1201, HNAME) + IF CONNUM <= 0 THEN + * if the connection is STILL not open return + PRINT "The RPC is not connected" + PRINT "RPCERROR=":SYSTEM(1203):" CONNUM=":CONNUM + PRINT UVREADMSG(SYSTEM(1203), "The RPC is not connected") + RETURN + END +END + +CALL.ARGS(1,1) = COMMAND +CALL.ARGS(1,2) = UVRPC.STRING +CALL.ARGS(2,1) = "" +CALL.ARGS(2,2) = UVRPC.STRING +CALL.ARGS(3,1) = DIRECTORY +CALL.ARGS(3,2) = UVRPC.STRING +CALL.ARGS(4,1) = 51 ;* NETexecute +CALL.ARGS(4,2) = UVRPC.INT + +* make execute call +IF RPC.CALL(CONNUM, " ", 4, MAT CALL.ARGS, RES.COUNT, MAT RES.ARGS) +ELSE + PRINT STATUS() + PRINT UVREADMSG(STATUS(), "RPC.CALL PROBLEM") +END + +IF RES.COUNT > 4 AND RES.ARGS(4,2) = UVRPC.STRING +THEN + IF RES.ARGS(1,2) = UVRPC.INT AND RES.ARGS(1,1) <> 0 + THEN + PRINT UVREADMSG(RES.ARGS(1,1), "Remote EXECUTE Problem") + END + ELSE + RESULT = RES.ARGS(4,1) + END +END +ELSE + PRINT UVREADMSG(80001, "RPC.CALL ARGUMENT PROBLEM") +END + +RETURN + diff --git a/Ardent/UV/APP.PROGS/RLS.FILE.B b/Ardent/UV/APP.PROGS/RLS.FILE.B new file mode 100755 index 00000000..9fc95f3f --- /dev/null +++ b/Ardent/UV/APP.PROGS/RLS.FILE.B @@ -0,0 +1,96 @@ +****************************************************************************** +* +* RLS.FILE.B - Release a file opened in named common by OPEN.FILE.B +* (catalog name RELASE$UV$FILE) +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description........................................ +* 10/14/98 23801 SAP Change copyrights. +* 11/04/92 10327 WLC Updated comments. +* 10/12/92 10327 WLC Initial Release. +******************************************************************************* +* +* This subroutine preceeds a standard UniVerse BASIC RETURN +* statement. It checks a table to see if any files +* were opened by this routine, and if so issues a RELEASE on them. +* It determines which files were opened by locating variable stamps +* with the unique id setting associated with this source file. +* + SUBROUTINE RELEASE$UV$FILE(UNIQUE.ID) +* +* UNIQUE.ID : string containing the unique id used for the calling source. +* # is unique for each source program. +* (See OPEN.UNIQUE file in /.uvhome) +* +* +* Equates +* +* TABLE.MAX: This is the MAXIMUM number of entries that ONE +* user can make. Basically, the maximum number +* of files that can be "held" open. +* +$INCLUDE UNIVERSE.INCLUDE OPEN.TOOLS.H + +* +$OPTIONS PICK +* Declare named common +* + COMMON /UV$open$files/ FILE$VARS(TABLE.MAX),FILE$TABLE(5),curr$UV$ACCOUNT +* +* FILE$VARS : contains actual filevars that are returned +* FILE$TABLE : 5 elements +* element 1 : list of opened file names ascending left (multi valued) +* element 2 : pointer into file$vars array (multi valued) +* element 3 : current number of open files (single value) +* element 4 : file open requests (multi valued) +* element 5 : variable stamp - unique identifier for the variable name +* used in open call. (multi valued) +* +* curr$UV$ACCOUNT : the name of the account in which these files +* were opened. +* +* +* Equates +* + EQU FILES.NOW.OPENED TO FILE$TABLE(1) ;* list of file names + EQU TABLE.POINTER TO FILE$TABLE(2) ;* list of pointers to FILE$VARS + EQU TABLE.COUNTER TO FILE$TABLE(3) ;* next available FILE$VAR entry + EQU OPEN.REQUESTS TO FILE$TABLE(4) ;* list of # of open requests + EQU VARIABLE.LIST TO FILE$TABLE(5) ;* list of variable stamps + EQU NO TO 0 + EQU YES TO 1 +* +* Find the unique id in the list of variable stamps to determine which files +* to release. +* + NUM.ENTRIES = count(VARIABLE.LIST,@VM)+1 + if VARIABLE.LIST # 0 then + for i = 1 to NUM.ENTRIES + loc.id = len(VARIABLE.LIST) - len(UNIQUE.ID) + cnt=1 +next.cnt: + loc.ix = index(VARIABLE.LIST, "_":UNIQUE.ID,cnt) + if loc.ix and loc.ix = loc.id then + RELEASE FILE$VARS(TABLE.POINTER) + end else cnt+=1; goto next.cnt + next i + end + +* +* Return to calling program +* + return +* +* End of subroutine +* + END diff --git a/Ardent/UV/APP.PROGS/RND b/Ardent/UV/APP.PROGS/RND new file mode 100755 index 00000000..815cf8f0 --- /dev/null +++ b/Ardent/UV/APP.PROGS/RND @@ -0,0 +1,26 @@ +******************************************************************************* +* +* Support of PR1ME INFORMATION subroutine '!RND' +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description......................................... +* 10/14/98 23801 SAP Change copyrights. +* 07/25/88 - - Maintenence log purged at 5.2.1, see release 5.1.10. +* +******************************************************************************* + +$OPTIONS DEFAULT + +subroutine RND(expression) + RANDOMIZE (expression) +return diff --git a/Ardent/UV/APP.PROGS/RPT.ERR.B b/Ardent/UV/APP.PROGS/RPT.ERR.B new file mode 100755 index 00000000..d340bd9e --- /dev/null +++ b/Ardent/UV/APP.PROGS/RPT.ERR.B @@ -0,0 +1,68 @@ +******************************************************************************** +* +* Support of PR1ME INFORMATION subroutine '!REPORT.ERROR' +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description......................................... +* 10/14/98 23801 SAP Change copyrights. +* 09/20/93 12299 LA Initial implementation. +* +******************************************************************************* +* START-DESCRIPTION: +* +* This subroutine can be used to report Operating system or uniVerse errors +* returned to a basic program. It retrieves the text, based on error number, +* from the SYS.MESSAGE file. +* +* The subroutine only exists for compatibility with PI/open. It will produce +* messages of the following format: +* +* Error: Calling "routine name" from "program name". OS error 1: [ENOENT] +* +* The ERROR.NO argument may be either an error number or a dynamic array +* consisting of the error number followed by one or more error message +* parameters which will be inserted into the error message. +* +* END-DESCRIPTION +* + +$OPTIONS DEFAULT + +subroutine PR1ME(PROGRAM.NAME, ROUTINE.NAME, ERROR.NO) + +* Check if error parameters have been supplied + + POS = INDEX(ERROR.NO, @FM, 1) + IF POS = 0 THEN + ERRNUM = ERROR.NO + PARAMS = "" + END ELSE + ERRNUM = ERROR.NO<1> + PARAMS = FIELD(ERROR.NO, @FM, 2, 99) + END + +* If error number < 1000, it is an OS error, otherwise it is a uniVerse +* error: + + IF ERRNUM < 1000 THEN + OSNAME = "OS" + END ELSE + OSNAME = "uniVerse" + END + + PRINT 'Error: Calling "':ROUTINE.NAME:'" from "':PROGRAM.NAME:'". ':OSNAME:' error ':ERRNUM:': ': + CALL *UVPRINTMSG(ERRNUM, PARAMS) + + RETURN + +END diff --git a/Ardent/UV/APP.PROGS/SEQS b/Ardent/UV/APP.PROGS/SEQS new file mode 100755 index 00000000..de434b5c --- /dev/null +++ b/Ardent/UV/APP.PROGS/SEQS @@ -0,0 +1,26 @@ +******************************************************************************* +* +* Support of PR1ME INFORMATION subroutine '-SEQS' +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description......................................... +* 10/14/98 23801 SAP Change copyrights. +* 07/25/88 - - Maintenence log purged at 5.2.1, see release 5.1.10. +* +******************************************************************************* + +$OPTIONS DEFAULT + +subroutine PR1ME(ans,m1) + ans = SEQS(m1) +return diff --git a/Ardent/UV/APP.PROGS/SET.PTR.B b/Ardent/UV/APP.PROGS/SET.PTR.B new file mode 100755 index 00000000..b51c3829 --- /dev/null +++ b/Ardent/UV/APP.PROGS/SET.PTR.B @@ -0,0 +1,273 @@ +******************************************************************************** +* +* uniVerse port of PI/open !SETPTR subroutine +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description......................................... +* 10/14/98 23801 SAP Change copyrights. +* 10/23/95 16881 PGW Further MSWIN mods, & removed quotes from banner +* 10/05/95 16881 PGW Added support for new keys for Windows. +* 10/29/93 12299 LA Initial implementation. +* +******************************************************************************* + +$OPTIONS INFORMATION + + SUBROUTINE SET.PTR (UNIT, WIDTH, LENGTH, TOP, BOTTOM, MODE, OPTIONS) + +$INCLUDE UNIVERSE.INCLUDE VERBINSERT.H + + IF UNIT < 0 THEN + + * Negative unit number means get current values, -1 means unit 0, + * -2 means unit 1 and so on + + UNIT = -UNIT - 1 + EXECUTE "SETPTR ":UNIT CAPTURING SETPTR.IO + + * Need to extract values from result. Do this by getting the text + * for each value from the message file and searching the output for + * it. + + TEXT = UVREADMSG(001031, "") ;* WIDTH + GOSUB GET.VALUE + WIDTH = VALUE + + TEXT = UVREADMSG(001032, "") ;* LENGTH + GOSUB GET.VALUE + LENGTH = VALUE + + TEXT = UVREADMSG(001033, "") ;* TOP MARGIN + GOSUB GET.VALUE + TOP = VALUE + + TEXT = UVREADMSG(001034, "") ;* BOTTOM MARGIN + GOSUB GET.VALUE + BOTTOM = VALUE + + TEXT = UVREADMSG(001035, "") ;* MODE + GOSUB GET.VALUE + MODE = FIELD(VALUE, " ", 1) + + * Now the options - slightly more complicated as we have to set up + * text for them + + OPTIONS = "" + SEP = "" + TEXT = UVREADMSG(001044, "") ;* FORM + GOSUB GET.VALUE + IF VALUE NE "" THEN + OPTIONS := SEP:"FORM ":VALUE + SEP = ", " + END + TEXT = UVREADMSG(001042, "") ;* BANNER + name + GOSUB GET.VALUE + IF VALUE NE "" THEN + * Remove quotes from banner string + IF VALUE[1,1] = '"' THEN + VALUE = VALUE[2, LEN(VALUE) - 2] + END + OPTIONS := SEP:"BANNER ":VALUE + SEP = ", " + END + TEXT = UVREADMSG(001043, "") ;* BANNER alone + GOSUB GET.VALUE + IF VALUE NE "" THEN + OPTIONS := SEP:"BANNER" + SEP = ", " + END + TEXT = UVREADMSG(015174, "") ;* BANNER as MS Windows job name + GOSUB GET.VALUE + IF VALUE NE "" THEN + * Remove quotes from banner string + IF VALUE[1,1] = '"' THEN + VALUE = VALUE[2, LEN(VALUE) - 2] + END + OPTIONS := SEP:"BANNER ":VALUE:",NOHEAD" + SEP = ", " + END + TEXT = UVREADMSG(001040, "") ;* LOCATION + GOSUB GET.VALUE + IF VALUE NE "" THEN + OPTIONS := SEP:"AT ":VALUE + SEP = ", " + END + TEXT = UVREADMSG(001045, "") ;* COPIES + GOSUB GET.VALUE + IF VALUE NE "" THEN + OPTIONS := SEP:"COPIES ":VALUE + SEP = ", " + END + TEXT = UVREADMSG(001041, "") ;* Suppress banner (NOHEAD) + GOSUB GET.VALUE + IF VALUE = "On" THEN + OPTIONS := SEP:"NOHEAD" + SEP = ", " + END + TEXT = UVREADMSG(001456, "") + GOSUB GET.VALUE + IF VALUE = "On" THEN + OPTIONS := SEP:"INFORM" + SEP = ", " + END + TEXT = UVREADMSG(001452, "") ;* RETAIN + GOSUB GET.VALUE + IF VALUE = "On" THEN + OPTIONS := SEP:"RETAIN" + SEP = ", " + END + TEXT = UVREADMSG(001455, "") ;* HOLD + GOSUB GET.VALUE + IF VALUE NE "" THEN + OPTIONS := SEP:VALUE + SEP = ", " + END + TEXT = UVREADMSG(001449, "") + GOSUB GET.VALUE + IF VALUE NE "" THEN + OPTIONS := SEP:"PRIORITY ":VALUE + SEP = ", " + END + TEXT = UVREADMSG(001300, "") ;* DEFER + GOSUB GET.VALUE + IF VALUE NE "" THEN + OPTIONS := SEP:"DEFER ":VALUE + SEP = ", " + END + TEXT = UVREADMSG(001297, "") ;* NOEJECT + GOSUB GET.VALUE + IF VALUE = "Off" THEN + OPTIONS := SEP:"NOEJECT" + SEP = ", " + END + TEXT = UVREADMSG(001298, "") ;* FTN + GOSUB GET.VALUE + IF VALUE = "On" THEN + OPTIONS := SEP:"FTN" + SEP = ", " + END + TEXT = UVREADMSG(001299, "") ;* LNUM + GOSUB GET.VALUE + IF VALUE = "On" THEN + OPTIONS := SEP:"LNUM" + SEP = ", " + END + TEXT = UVREADMSG(001453, "") ;* START PAGE + GOSUB GET.VALUE + IF VALUE NE "" THEN + VALUE = FIELD(VALUE, " ", 4) + VALUE = FIELD(VALUE, ",", 1) + OPTIONS := SEP:"STARTPAGE ":VALUE + SEP = ", " + END + TEXT = UVREADMSG(001454, "") ;* END PAGE + TEXT = FIELD(TEXT, " ", 2, 3) + FINDSTR TEXT IN SETPTR.IO, 1 SETTING FOUND THEN + VALUE = SETPTR.IO + FCOUNT = DCOUNT(VALUE, " ") + VALUE = FIELD(VALUE, " ", FCOUNT) + VALUE = TRIM(FIELD(VALUE, ".", 1), " ", "B") + OPTIONS := SEP:"ENDPAGE ":VALUE + SEP = ", " + END + TEXT = UVREADMSG(001341, "") ;* BANNER NEXT + GOSUB GET.VALUE + IF VALUE NE "" THEN + OPTIONS := SEP:"BANNER NEXT ":VALUE + SEP = ", " + END +* TEXT = UVREADMSG(001448, + TEXT = UVREADMSG(001296, "") ;* NOFMT + GOSUB GET.VALUE + IF VALUE = "Off" THEN + OPTIONS := SEP:"NOFMT" + SEP = ", " + END + TEXT = UVREADMSG(001342, "") ;* KEEP + GOSUB GET.VALUE + IF VALUE = "On" THEN + OPTIONS := SEP:"KEEP" + SEP = ", " + END + TEXT = UVREADMSG(015118, "") ;* FONTBOLD + GOSUB GET.VALUE + IF VALUE = "On" THEN + OPTIONS := SEP:"FONTBOLD" + SEP = ", " + END + TEXT = UVREADMSG(015119, "") ;* FONTITALIC + GOSUB GET.VALUE + IF VALUE = "On" THEN + OPTIONS := SEP:"FONTITALIC" + SEP = ", " + END + TEXT = UVREADMSG(015120, "") ;* FONTNAME + GOSUB GET.VALUE + IF VALUE NE "" THEN + OPTIONS := SEP:"FONTNAME ":VALUE + SEP = ", " + END + TEXT = UVREADMSG(015121, "") ;* FONTSIZE + GOSUB GET.VALUE + IF VALUE NE "" THEN + OPTIONS := SEP:"FONTSIZE ":VALUE + SEP = ", " + END + TEXT = UVREADMSG(015124, "") ;* GDI + GOSUB GET.VALUE + IF VALUE = "On" THEN + OPTIONS := SEP:"GDI" + SEP = ", " + END + TEXT = UVREADMSG(015122, "") ;* LINESPACE + GOSUB GET.VALUE + IF VALUE NE "" THEN + OPTIONS := SEP:"LINESPACE ":VALUE + SEP = ", " + END + TEXT = UVREADMSG(015125, "") ;* RAW + GOSUB GET.VALUE + IF VALUE = "On" THEN + OPTIONS := SEP:"RAW" + SEP = ", " + END + TEXT = UVREADMSG(015123, "") ;* TABSIZE + GOSUB GET.VALUE + IF VALUE NE "" THEN + OPTIONS := SEP:"TABSIZE ":VALUE + SEP = ", " + END + END ELSE + * Setting parameters, make sure we add BRIEF so that SETPTR doesn't + * query user + + CMD = "SETPTR ":UNIT:",":WIDTH:",":LENGTH:",":TOP:",":BOTTOM:",":MODE + CMD := ",":OPTIONS:",BRIEF" + EXECUTE CMD CAPTURING SETPTR.IO + END + RETURN + +***************************************************************************** + +GET.VALUE: + TEXT = FIELD(TEXT, ":", 1) + TEXT = TRIM(TEXT, " ", "B") + FINDSTR TEXT IN SETPTR.IO, 1 SETTING FOUND THEN + VALUE = SETPTR.IO + VALUE = FIELD(VALUE, ":", 2) + VALUE = TRIM(VALUE, " ", "B") + END ELSE + VALUE = "" + END + RETURN +END diff --git a/Ardent/UV/APP.PROGS/SETDIR.B b/Ardent/UV/APP.PROGS/SETDIR.B new file mode 100755 index 00000000..876be5b2 --- /dev/null +++ b/Ardent/UV/APP.PROGS/SETDIR.B @@ -0,0 +1,65 @@ +******************************************************************************* +* +* New System Admin - given an owner, group, permissions, or any possible +* permutation of the three, this routine will set the ownership +* group ownership, or permissions on particular file or +* directory. +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description......................................... +* 10/14/98 23801 SAP Change copyrights. +* 11/05/90 7393 DPB Routine first created and admin'd. +******************************************************************************* + +SUBROUTINE SETDIR.B(owner, group, perms, dir, result) + +CALL *ISUSER.B(0,invar) +IF invar = 0 THEN + STOP "You must be super-user TO run this routine." + END + + IF dir = "" THEN + result = -1 + END + ELSE + IF owner # "" THEN + GOSUB chown + END + IF group # "" THEN + GOSUB grp + END + IF perms # "" THEN + GOSUB chmod + END + END +RETURN + +chown: + command = "SH -c 'cd ":dir:" ; find . -exec chown ":owner:" {} \;'" + EXECUTE command +RETURN + +grp: + command = "SH -c 'cd ":dir:" ; find . -exec chgrp ":group:" {} \;'" + EXECUTE command +RETURN + +chmod: + command = "SH -c 'cd ":dir:" ; find . -exec chmod ":perms:" {} \;'" + EXECUTE command +RETURN + +END + + + diff --git a/Ardent/UV/APP.PROGS/SETPU.B b/Ardent/UV/APP.PROGS/SETPU.B new file mode 100755 index 00000000..5c8dd0a3 --- /dev/null +++ b/Ardent/UV/APP.PROGS/SETPU.B @@ -0,0 +1,60 @@ +******************************************************************************* +* +* uniVerse port of PI/open !SETPU subroutine +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenance log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description......................................... +* 10/14/98 23801 SAP Change copyrights. +* 10/05/95 16881 PGW Added check for PU$FONTNAME for Windows NT. +* 10/27/93 12299 LA Changed to use printerio opcode. +* 11/12/92 10638 PVW Port PI/open SETPU subroutine to uniVerse. +* +******************************************************************************* + +$OPTIONS INFORMATION + + SUBROUTINE SETPU (KEY, UNIT, VALUE, CODE) + +$INCLUDE UNIVERSE.INCLUDE GETPU.H +$INCLUDE UNIVERSE.INCLUDE PRINTERIO.H + + CODE = 0 + UNUSED = '' + + IF (KEY = PU$FORM) OR (KEY = PU$BANNER) OR (KEY = PU$LOCATION) THEN + VALUE2 = TRIMB(VALUE) + VALUE2 = VALUE2[1,33] + END ELSE IF (KEY = PU$FONTNAME) THEN + VALUE2 = TRIMB(VALUE) + END ELSE IF (KEY = PU$SPOOLFLAGS) THEN + +* 2147483648 is 2**31 and 4294967296 is 2**32. The calculations using +* these numbers are necessary because SPOOLFLAGS is handled in the +* underlying code as an unsigned 32 bit quantity. Therefore if bit 1 +* needs to be set, the number passed over must be negative. + + IF VALUE GE 2147483648 THEN VALUE2 = VALUE - 4294967296 + ELSE VALUE2 = VALUE + END ELSE + IF (KEY = PU$CONNECT) AND (VALUE = '') THEN + VALUE2 = PU$DISCONNECT + END ELSE + VALUE2 = VALUE + END + END + + PRINTERIO PK$SETPU, KEY, VALUE2, UNIT, CODE, UNUSED, UNUSED, UNUSED + + RETURN + + END diff --git a/Ardent/UV/APP.PROGS/SHUTDOWN.B b/Ardent/UV/APP.PROGS/SHUTDOWN.B new file mode 100755 index 00000000..9083b651 --- /dev/null +++ b/Ardent/UV/APP.PROGS/SHUTDOWN.B @@ -0,0 +1,97 @@ +****************************************************************************** +* +* System Admin Transaction Logging - Shutdown Logging +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description........................................ +* 10/14/98 23801 SAP Change copyrights. +* 03/25/96 18212 LAG Windows NT port +* 10/21/94 15120 DTM Added code to support new states (SUSP/SHUT in progress) +* 10/14/94 15101 DTM Corrected message displayed +* 05/15/94 13286 DTM Initial programming +* +******************************************************************************* +id = "%W%" +******************************************************************************* + +$INCLUDE UNIVERSE.INCLUDE TLOG.H +$INCLUDE UNIVERSE.INCLUDE FILENAMES.H +$INCLUDE UNIVERSE.INCLUDE MACHINE.NAME + +ALLOWED = 0 +CALL *ISUSER.B( 0, ALLOWED ) + +;* Do superuser verification +IF NOT(ALLOWED) THEN + PRINT SHUT.MSG3 + STOP +END + +State = "" +RECIO( State, FINFO$AI.STATE, RECIO$FINFO ) +IF State NE AI$LOGGING AND State NE AI$FULL AND State NE AI$SUSPENDED THEN + IF State = AI$WARM.START OR State = AI$INITIAL THEN + msg = "System is just now coming up, please be patient as the " + msg := "SHUTDOWN procedure may take some time to complete." + END + ELSE IF State = AI$SHUT.PROG THEN + msg = "System is currently in the process of being SHUTDOWN." + stop = 1 + END + ELSE + msg = "System is not in a state that can be SHUTDOWN at this moment." + stop = 1 + END + PRINT msg + IF stop THEN + STOP + END +END + + +;* Enable Logging +@SYSTEM.RETURN.CODE = 0 +RECIO( AI$DISABLED, RECIO$STATE ) + +IF @SYSTEM.RETURN.CODE THEN + PRINT SHUT.MSG4 + STOP +END +ELSE + + State = "" + RECIO( State, FINFO$AI.STATE, RECIO$FINFO) + IF State = AI$FULL OR State = AI$SUSPENDED THEN + ****************** + ** Windows NT port + ** + IF OS.TYPE = "UNIX" THEN + Exec.Sentence = OS.EXEC:" '":UV.BIN:"/uvlogd":"'" + END ELSE + Exec.Sentence = OS.EXEC:" '":UV.BIN:"/uvbootd ":UV.BIN:"/uvlogd.exe":"'" + END + ** + ****************** + EXECUTE Exec.Sentence CAPTURING junk + END + LOOP + CURR.DATE = DATE() + CURR.TIME = TIME() + UNTIL CURR.DATE = DATE() DO REPEAT + + CURR.TIME = OCONV( CURR.TIME, 'MTS' ) + CURR.DATE = OCONV( CURR.DATE, 'D' ) + + PRINT SHUT.MSG5: CURR.TIME : SUSP.MSG7 :CURR.DATE: STATE.MSG +END +END diff --git a/Ardent/UV/APP.PROGS/SLEEP b/Ardent/UV/APP.PROGS/SLEEP new file mode 100755 index 00000000..906fe410 --- /dev/null +++ b/Ardent/UV/APP.PROGS/SLEEP @@ -0,0 +1,33 @@ +******************************************************************************* +* +* Support of PR1ME INFORMATION subroutine '!SLEEP$' +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description......................................... +* 10/13/98 23801 RGA Change copyright info. +* 07/25/88 - - Maintenence log purged at 5.2.1, see release 5.1.10. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* 07/25/88 - MR history purged at 5.2.1, see 5.1.10 for delta history +* +******************************************************************************* + +$OPTIONS DEFAULT + +subroutine PR1ME(time.in.milliseconds) + if time.in.milliseconds < 1000 then sleep 1 + else sleep (time.in.milliseconds / 1000) +return diff --git a/Ardent/UV/APP.PROGS/SORT.BOX.B b/Ardent/UV/APP.PROGS/SORT.BOX.B new file mode 100755 index 00000000..3cc275ae --- /dev/null +++ b/Ardent/UV/APP.PROGS/SORT.BOX.B @@ -0,0 +1,547 @@ +******************************************************************************* +* +* New System Admin - This routine creates a box on the screen which +* allows the user to page through a large data structure, and +* select an entry. +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description......................................... +* 10/14/98 23801 SAP Change copyrights. +* 05/15/96 18330 LDG Changed LEN() function to LENDP() for NLS DBCS. +* 02/28/94 12710 WLG Fix to initialize num.lines to 1 if less than 1. +* 06/07/91 8408 DTM Made changes for the HELP routines. +* 05/31/91 8408 DPB Made changes for the HELP routines. +* 05/16/91 7673 DTM Changed More to Page Up/Page Down for boxes +* 05/13/91 8345 DTM changed print to tprints +* 04/08/91 8043 DTM Fixed TTY parts... +* 12/07/90 7673 DTM Routine first created and admin'd. +******************************************************************************* + +SUBROUTINE SORT.BOX.B(title, start.line, num.lines, narray, array.count,val.count,select.val,option,sort.crit) + +$INCLUDE UNIVERSE.INCLUDE MTF.INCL.H +EQU KEYNUM TO 7 +DIM str.array(KEYNUM) +DIM str.codes(KEYNUM) +IF select.val < 1 THEN select.val = 1 +IF num.lines < 1 THEN num.lines = 1 +mnemos.string="" +array=narray +num.sort=array.count +GOSUB back.init + +IF sort.crit >= 1 THEN GOSUB sort.array +If sort.crit < 0 THEN + sort.crit = -sort.crit + sort.sel = 1 +END +GOSUB screen.init + +loop1: + GOSUB draw.page +loop2: + GOSUB highlight.item +loop3: + temp = "" + mnemos = 0 + left.over = "" + input.code = 0 + TPRINT CURSOR.INVISIBLE: + + CALL *GET.TOKEN.B(25, 75, 100, KEYNUM, mat str.array, mat str.codes, ESC.KEY, MNEMONIC, 0, 0, temp, left.over, input.code, mnemos) + TPRINT CURSOR.VISIBLE: + + IF input.code = 0 and mnemos = 0 THEN GOTO loop3 + BEGIN CASE + CASE input.code = SEL.ACTION + GOSUB blank.screen + GOSUB figure.select + GOTO End.stuff + CASE input.code = ESCAPE + select.val = -1 + GOSUB blank.screen + GOTO End.stuff + CASE input.code = DOWN.ARROW + GOSUB unlight.item + select.val += 1 + IF select.val > array.count THEN select.val = array.count + GOSUB set.cur.line + IF MOD((select.val-1), num.lines) = 0 THEN +* +* If sorting and go to new page, clear input data +* + IF sort.crit # 0 THEN + sort.sel=1 + Enter.col-=LENDP(mnemos.string) + TPRINT @(Enter.col,Enter.start):STR(" ",LENDP(mnemos.string)): + mnemos.string="" + END + GOSUB set.cur.screen + GOTO loop1 + END + GOTO loop2 + CASE input.code = UP.ARROW + GOSUB unlight.item + select.val -= 1 + IF select.val < 1 THEN select.val = 1 + GOSUB set.cur.line + IF MOD(select.val, num.lines) = 0 THEN +* +* If sorting and go to new page, clear input data +* + IF sort.crit # 0 THEN + sort.sel=1 + Enter.col-=LENDP(mnemos.string) + TPRINT @(Enter.col,Enter.start):STR(" ",LENDP(mnemos.string)): + mnemos.string="" + END + GOSUB set.cur.screen + GOTO loop1 + END + GOTO loop2 + CASE input.code = PREV.PAGE + IF select.val = 1 THEN GOTO loop3 + GOSUB unlight.item + select.val -= num.lines + IF select.val < 1 THEN select.val = 1 + IF sort.crit # 0 THEN + sort.sel=1 + Enter.col-=LENDP(mnemos.string) + TPRINT @(Enter.col,Enter.start):STR(" ",LENDP(mnemos.string)): + mnemos.string="" + END + GOSUB set.cur.line + GOSUB set.cur.screen + GOTO loop1 + CASE input.code = NEXT.PAGE + IF select.val = array.count THEN GOTO loop3 + GOSUB unlight.item + select.val += num.lines + IF select.val > array.count THEN select.val = array.count + IF sort.crit # 0 THEN + sort.sel=1 + Enter.col-=LENDP(mnemos.string) + TPRINT @(Enter.col,Enter.start):STR(" ",LENDP(mnemos.string)): + mnemos.string="" + END + GOSUB set.cur.line + GOSUB set.cur.screen + GOTO loop1 + CASE input.code = 0 + IF sort.crit = 0 THEN GOTO loop3 + IF invert THEN + tmp.char=UPCASE(mnemos) + IF tmp.char=mnemos THEN tmp.char=DOWNCASE(mnemos) + mnemos=tmp.char + END + temp.len=LENDP(mnemos.string) + tmp.sel=select.val + IF mnemos=BKSP.KEY THEN + IF temp.len > 0 THEN + TPRINT @(Enter.col-1,Enter.start):" ": + Enter.col -=1 + sort.sel -= 2 + mnemos.string=mnemos.string[1,temp.len-1] + temp.len -=1 + IF temp.len<1 OR mnemos.string="" THEN + sort.sel=1 + GOSUB unlight.item + select.val=1 + GOSUB set.cur.line + IF cur.screen # int((select.val-1)/num.lines) THEN + GOSUB set.cur.screen + GOTO loop1 + END + GOTO loop2 + END + select.val-=10 + IF select.val < 1 THEN select.val = 1 + GOSUB find.value + select.val=tmp.sel + IF new.select.val # tmp.sel THEN + GOSUB unlight.item + select.val=new.select.val + GOSUB set.cur.line + IF cur.screen # int((select.val-1)/num.lines) THEN + GOSUB set.cur.screen + GOTO loop1 + END + GOTO loop2 + END + ELSE + GOTO loop3 + END + END + ELSE + TPRINT @(Enter.col,Enter.start):char(7): + GOTO loop3 + END + END + ELSE + mnemos.string:=mnemos + GOSUB find.value + IF find.error = 1 THEN + TPRINT @(Enter.col,Enter.start):char(7): + mnemos.string=mnemos.string[1,temp.len] + GOTO loop3 + END + ELSE + TPRINT @(Enter.col,Enter.start):mnemos: + Enter.col += 1 + IF tmp.sel # new.select.val THEN + GOSUB unlight.item + select.val=new.select.val + GOSUB set.cur.line + IF cur.screen # int((select.val-1)/num.lines) THEN + GOSUB set.cur.screen + GOTO loop1 + END + GOTO loop2 + END + ELSE + GOTO loop3 + END + END + END + GOTO loop1 + END CASE + GOTO End.stuff + RETURN + +hilight.titles: + TPRINT@(start.col+width+1,start.line-1): + CALL *INVERSE.B(0) + TPRINT@(start.col-2,start.line-1): + CALL *INVERSE.B(1) + TPRINT@(start.col-1,start.line-1):STR(" ",width+2): + FOR J = 1 to val.count + TPRINT@(start.col+val.widths+((J-1)*tab), start.line-1): + TPRINT title: + NEXT J + TPRINT@(start.col+width+1,start.line-1): + CALL *INVERSE.B(0) + RETURN + +highlight.item: + IF option # 1 THEN +* +* Print inverse off bit +* + TPRINT@(start.col+width+1,start.line+(cur.line-1)): + CALL *INVERSE.B(0) +* +* Print inverse on bit +* + TPRINT@(start.col-2,start.line+(cur.line-1)): + CALL *INVERSE.B(1) + TPRINT @(start.col-1,start.line+ (cur.line-1)):STR(" ",width+2): +* +* Print data +* + FOR J = 1 to val.count + TPRINT @(start.col+val.widths+((J-1)*tab),start.line+(cur.line-1)): + TPRINT array: + NEXT J + TPRINT@(start.col+width+1,start.line+(cur.line-1)): + CALL *INVERSE.B(0) + END + RETURN + +unlight.item: + IF option # 1 THEN + TPRINT@(start.col-2,start.line+(cur.line-1)):" ": + TPRINT @(start.col-1,start.line+ (cur.line-1)):STR(" ",width+2): + FOR J = 1 to val.count + TPRINT @(start.col+val.widths+((J-1)*tab),start.line+(cur.line-1)): + TPRINT array: + NEXT J + TPRINT@(start.col+width+1,start.line+(cur.line-1)):" ": + END + RETURN + +* +* Draw data within box, including the PageUp/PageDown logic +* +draw.page: + FOR I = 1 TO num.lines + TPRINT @(start.col-1,start.line+ (I-1)):STR(" ",width+2): + FOR J = 1 TO val.count + TPRINT @(start.col+val.widths+((J-1)*tab), start.line + ( I - 1)): + TPRINT array: + NEXT J + NEXT I + IF cur.screen < max.screen THEN + IF cur.screen < 1 THEN + IF r.tee = "+" THEN + TPRINT @(28,start.line+num.lines):r.tee: + TPRINT " Page Down ":l.tee: + END + ELSE + TPRINT @(28,start.line+num.lines):LINEDRAW.BEGIN: + TPRINT r.tee:" Page Down ":l.tee:LINEDRAW.END: + END + RETURN + END + IF r.tee = "+" THEN + TPRINT @(28,start.line+num.lines):r.tee: + TPRINT " Page Up/Page Down ":l.tee: + END + ELSE + TPRINT @(28,start.line+num.lines):LINEDRAW.BEGIN: + TPRINT r.tee:" Page Up/Page Down ":l.tee:LINEDRAW.END: + END + END + ELSE + IF cur.screen < 1 AND max.screen < 1 THEN + IF h.line = '-' THEN + TPRINT @(28,start.line+num.lines):STR(h.line,9): + END + ELSE + TPRINT @(28,start.line+num.lines):LINEDRAW.BEGIN: + TPRINT STR(h.line,9):LINEDRAW.END: + END + RETURN + END + IF r.tee = '+' THEN + TPRINT @(28,start.line+num.lines):r.tee: + TPRINT " Page Up ":l.tee: + END + ELSE + TPRINT @(28,start.line+num.lines):LINEDRAW.BEGIN: + TPRINT r.tee:" Page Up ":l.tee:LINEDRAW.END: + END + END + RETURN + +screen.init: + IF select.val > array.count THEN + select.val = array.count + END + max.screen = int((array.count-1)/num.lines) + GOSUB set.cur.screen + GOSUB set.cur.line + GOSUB set.key.array + +* +* Set initial widths based on width of title headings +* + val.widths = "" + IF title<1>=0 THEN + FOR I = 1 to val.count + val.widths = LENDP(title) + NEXT I + END + ELSE + FOR I = 1 to val.count + val.widths = 0 + NEXT I + END + +* +* Set final field widths based on max values for any indivual field +* + FOR I = 1 to array.count + FOR J = 1 to val.count + IF LENDP(array) > val.widths THEN + val.widths = LENDP(array) + END + NEXT J + NEXT I + +* +* Determine actual minimum width +* + width = SUM(val.widths) + + IF width < 50 AND val.count < 3 THEN + width = width + (8*(val.count-1)) + tab = 8 + END + ELSE + width = width + (4*(val.count-1)) + tab = 4 + END + + IF title<1> # 0 THEN + IF width < LENDP(title) THEN + width = LENDP(title) + END + END + + IF width < 19 THEN width = 19 + +* +* Determine starting location of box +* + start.col = 40 - int((width/2)+ 2) + + + FOR I = val.count to 2 STEP -1 + val.widths = val.widths + NEXT I + + val.widths<1> = 0 + + FOR I = 2 to val.count + val.widths = val.widths+val.widths + NEXT I + + TPRINT @(start.col-3,start.line-1):lu.corner: +* +* Print box +* + TPRINT STR(h.line,width+4):ru.corner: + TPRINT @(start.col-3,start.line+num.lines):ll.corner: + TPRINT STR(h.line,width+4):rl.corner: + + FOR I = 0 to num.lines-1 + TPRINT @(start.col-3,start.line +I):v.line:STR(" ",width+4):v.line: + NEXT I + + IF title # "" THEN + IF title<1> # 0 THEN + TPRINT @(start.col-2+(int(width/2)-int(LENDP(title)/2))+LENDP(title)+3,start.line-1): + CALL *INVERSE.B(0) + TPRINT @(start.col-2+(int(width/2)-int(LENDP(title)/2)),start.line-1): + CALL *INVERSE.B(1) + TPRINT " ":title:" ": + CALL *INVERSE.B(0) + END + ELSE + gosub hilight.titles: + END + END +* +* If using selection box, then draw box and determine starting locations +* + IF sort.crit # 0 THEN + CALL *DRAW.BOX.B(start.line+num.lines,start.col-3,1,width+4,1) + TPRINT @(start.col-3,start.line+num.lines):l.tee: + TPRINT @(start.col+width+2,start.line+num.lines):r.tee: + TPRINT @(start.col-3+1,start.line+num.lines+1):"?": + Enter.start=start.line+num.lines+1 + Enter.col=start.col-1 + END + RETURN + +blank.screen: + FOR I = 0 to num.lines+1 + TPRINT @(start.col-3,start.line-1+I):STR(" ",width+6): + NEXT I + IF sort.crit # 0 THEN + CALL *DRAW.BOX.B(start.line+num.lines,start.col-3,1,width+4,0) + END + RETURN + +set.cur.screen: + cur.screen = int((select.val-1)/num.lines) + RETURN + +set.cur.line: + cur.line = mod(select.val,num.lines) + IF cur.line = 0 THEN + cur.line = num.lines + END + RETURN + +set.key.array: + str.array(1) = CHAR(27) + str.array(2) = KEY.MOVE.CURSOR.UP + str.array(3) = " " + str.array(4) = KEY.MOVE.CURSOR.DOWN + str.array(5) = KEY.PREVIOUS.PAGE + str.array(6) = KEY.NEXT.PAGE + str.array(7) = CARRIAGE.RETURN + str.codes(1) = ESCAPE + str.codes(2) = UP.ARROW + str.codes(3) = SEL.ACTION + str.codes(4) = DOWN.ARROW + str.codes(5) = PREV.PAGE + str.codes(6) = NEXT.PAGE + str.codes(7) = SEL.ACTION + + CALL *TOKEN.SORT.B(KEYNUM,mat str.array, mat str.codes) + + FOR I = 1 to KEYNUM + IF str.codes(I) = ESCAPE then ESC.KEY = I + NEXT I + +RETURN + +find.value: + find.error=0 + FOR i=select.val TO num.sort + IF array[1,sort.sel]=mnemos.string THEN + sort.sel +=1 + new.select.val=i + RETURN + END + NEXT i + find.error=1 + RETURN + +sort.array: + sort.sel=1 + tmp.array="" + FLAG=num.sort + LOOP + UNTIL FLAG=0 DO + num.sort = FLAG - 1 + FLAG=0 + FOR j=1 TO num.sort + IF array > array THEN + tmp.array=array + array=array + array=tmp.array + FLAG=j + END + NEXT j + REPEAT + num.sort=array.count + RETURN + +back.init: + TTYGET tty$ ELSE NULL +* Set things up so that CR can also select + tmptty=tty$ + CRMODE.ICRNL=0 + CRMODE.ONLCR=0 + invert=CASE.INVERT + IF CC.ERASE # "" THEN + BKSP.KEY = CHAR(CC.ERASE) + IF ECHO.ERASE # ECHOE$BSB THEN + ECHO.ERASE = ECHOE$BSB + END + IF BACKSPACE = "" THEN + BACKSPACE = CHAR(8) + END + END + TTYSET tty$ ELSE NULL + RETURN + +figure.select: + IF sort.crit=0 THEN RETURN + FOR i=1 to num.sort + IF array=narray THEN + select.val=i + RETURN + END + NEXT i + RETURN + +End.stuff: + TTYGET tty$ ELSE NULL + tty$=tmptty + TTYSET tty$ ELSE NULL + RETURN +END diff --git a/Ardent/UV/APP.PROGS/SPACES b/Ardent/UV/APP.PROGS/SPACES new file mode 100755 index 00000000..d26d6113 --- /dev/null +++ b/Ardent/UV/APP.PROGS/SPACES @@ -0,0 +1,26 @@ +******************************************************************************* +* +* Support of PR1ME INFORMATION subroutine '-SPACES' +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description......................................... +* 10/14/98 23801 SAP Change copyrights. +* 07/25/88 - - Maintenence log purged at 5.2.1, see release 5.1.10. +* +******************************************************************************* + +$OPTIONS DEFAULT + +subroutine PR1ME(ans,m1) + ans = SPACES(m1) +return diff --git a/Ardent/UV/APP.PROGS/SPLICE b/Ardent/UV/APP.PROGS/SPLICE new file mode 100755 index 00000000..a4c8f76d --- /dev/null +++ b/Ardent/UV/APP.PROGS/SPLICE @@ -0,0 +1,26 @@ +******************************************************************************* +* +* Support of PR1ME INFORMATION subroutine '-SPLICE' +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description......................................... +* 10/14/98 23801 SAP Change copyrights. +* 07/25/88 - - Maintenence log purged at 5.2.1, see release 5.1.10. +* +******************************************************************************* + +$OPTIONS DEFAULT + +subroutine PR1ME(ans,m1,p1,m2) + ans = SPLICE(m1,p1,m2) +return diff --git a/Ardent/UV/APP.PROGS/SQLINTCHK.B b/Ardent/UV/APP.PROGS/SQLINTCHK.B new file mode 100755 index 00000000..63ce82f9 --- /dev/null +++ b/Ardent/UV/APP.PROGS/SQLINTCHK.B @@ -0,0 +1,116 @@ +****************************************************************************** +* +* SQL Integrity Check Subroutine +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description......................................... +* 10/14/98 23801 SAP Change copyrights. +* 08/07/96 18144 CSM Generate error message if referential problem +* 07/02/93 11741 PVW Changed messages and call for error code 8 +* 06/30/93 11741 PVW Made a few enhancements and comments +* 06/23/93 11741 PVW Handle SQL Integrity Constraint Checking. +* +******************************************************************************* + + SUBROUTINE SqlIntegrityCheck(dynamic.array,file.var,key,file.name,io.var) + +* io.var contains information passed to this subroutine by the calling +* routine. The value of io.var<1> determines what error messages are +* to be printed. A value of: +* 0 means do not print any error messages. +* 1 means print error messages (before write attempted) +* 2 means print error messages (after write attempted) + + PrintStatus = io.var<1> + + io.var = ICHECK(dynamic.array,file.var,key) + error.code = io.var<1> + IF error.code THEN + column = io.var<2> + IF column = -1 THEN + column = "(multi)" + END ELSE + IF column = 0 THEN column = "primary_key" + END + constraint = io.var<3> + BEGIN CASE + CASE error.code = 1 ;* SINGLEVALUED + IF PrintStatus THEN + * 'Integrity Constraint Violation, column %s, not SINGLEVALUED' + CALL *UVPRINTMSG(923001,column) + END + CASE error.code = 2 ;* NOT NULL failure + IF PrintStatus THEN + * 'Integrity Constraint Violation, column %s, NULL' + CALL *UVPRINTMSG(923002,column) + END + CASE error.code = 3 ;* NOT EMPTY failure + IF PrintStatus THEN + * 'Integrity Constraint Violation, column %s, EMPTY' + CALL *UVPRINTMSG(923003,column) + END + CASE error.code = 4 ;* ROWUNIQUE failure + IF PrintStatus THEN + * 'Integrity Constraint Violation, column %s, not ROWUNIQUE' + CALL *UVPRINTMSG(923005,column) + END + CASE error.code = 5 OR error.code = 6 ;* UNIQUE failure + IF PrintStatus THEN + * 'Integrity Constraint Violation, column %s, not UNIQUE' + CALL *UVPRINTMSG(923004,column) + END + CASE error.code = 7 ;* KEY ROWUNIQUE + IF PrintStatus THEN + * 'integrity constraint violation' + CALL *UVPRINTMSG(923000,"") + END + CASE error.code = 8 ;* CHECK CONSTRAINT + IF PrintStatus THEN + * 'Integrity Constraint Violation, constraint %s' + CALL *UVPRINTMSG(923007,constraint) + END + CASE error.code = 9 ;* PRIMARY KEY FAILURE + IF PrintStatus THEN + * 'Integrity Constraint Violation, key has too many fields' + CALL *UVPRINTMSG(923009,"") + END + CASE error.code = 10 ;* REFERENTIAL FAILURE + IF PrintStatus THEN + * 'Integrity Constraint Violation, column %s, REFERENTIAL' + CALL *UVPRINTMSG(923006,column) + END + CASE error.code = 11 ;* INVALID REFERENCED COLUMN VALUE + IF PrintStatus THEN + * 'Referenced column %s has invalid value, must be numeric' + CALL *UVPRINTMSG(923019,column) + END + CASE 1 + IF PrintStatus THEN + * 'integrity constraint violation' + CALL *UVPRINTMSG(923000,"") + END + END CASE + IF PrintStatus THEN + IF PrintStatus = 2 THEN + * 'Write Aborted. ' + CALL *UVPRINTMSG(923017,"") + END + file.name = trim(file.name) + * 'Filename : %s Key : %s' + CALL *UVPRINTMSG(923018,file.name:@fm:key) + END + END ELSE + io.var = "" + END + RETURN + END diff --git a/Ardent/UV/APP.PROGS/SQUOTE.B b/Ardent/UV/APP.PROGS/SQUOTE.B new file mode 100755 index 00000000..35d7265a --- /dev/null +++ b/Ardent/UV/APP.PROGS/SQUOTE.B @@ -0,0 +1,28 @@ +******************************************************************************** +* +* Support of PR1ME INFORMATION subroutine '!SQUOTE' +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description......................................... +* 10/14/98 23801 SAP Change copyrights. +* 07/15/93 12299 LA Initial implementation. +* +******************************************************************************* + +$OPTIONS DEFAULT + +subroutine PR1ME(ANSWER, EXPR) + ANSWER = SQUOTE(EXPR) +return + + diff --git a/Ardent/UV/APP.PROGS/ST.LOG.ATTR.B b/Ardent/UV/APP.PROGS/ST.LOG.ATTR.B new file mode 100755 index 00000000..28884a61 --- /dev/null +++ b/Ardent/UV/APP.PROGS/ST.LOG.ATTR.B @@ -0,0 +1,164 @@ +****************************************************************************** +* +* System Admin Transaction Logging - Routine to set the Logging State +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description........................................ +* 10/14/98 23801 SAP Change copyrights. +* 05/24/95 16198 GMH Allow reconfigure of tape devices on FULL TAPE +* 05/19/95 16198 GMH Correct chkpoint off +* 05/04/95 16198 GMH Set CHKPOINT OFF if DEVICELIST given +* 04/26/95 16198 GMH Add archive tape support +* 10/27/94 15220 DTM Added descriptive messages +* 10/14/94 15104 DTM Fixed to verify number of prompts +* 05/15/94 13286 DTM Initial programming +* +******************************************************************************* +id = "%W%" +******************************************************************************* +$INCLUDE UNIVERSE.INCLUDE TLOG.H +$INCLUDE UNIVERSE.INCLUDE MTF.INCL.H + +EQU CP TO "CHECKPOINT" +EQU AR TO "ARCHIVE" +EQU DV TO "DEVICELIST" + +* Open &DEVICES& file +open '&DEVICE&' to DEVICE.FILE else + * Unable to open x file, aborting + print UVREADMSG(001520,"&DEVICE&") + stop +end + +* Get current state +State = "" +RECIO( State, FINFO$AI.STATE, RECIO$FINFO ) + +proceed = 0 +* Check if full +ARX='' +if State = AI$FULL then + RECIO( ARX, FINFO$AI.ARCHIVE.TAPE, RECIO$FINFO ) + if ARX = 4 then proceed = 1 +end + +* go +IF State = AI$UNINIT OR State = AI$DISABLED OR State = AI$SUSPENDED OR State = AI$INACTIVE OR proceed THEN + counter = 2 + CPToken = -1 + ARToken = -1 + DVToken = -1 +END +ELSE + PRINT SFILE.MSG2 + STOP +END + +DEVICELIST="" +TMP = TRIM( @SENTENCE ) +ARGC = DCOUNT( TMP, " " ) +IF ( ARGC < 2 ) THEN + *PRINT "Error: Incorrect number of arguments" + print UVREADMSG(001748,"") + STOP +END + +LOOP + Token = UPCASE( FIELD( @SENTENCE, " ", counter ) ) + counter += 1 + BEGIN CASE +* Checkpoint keyword + CASE Token = CP + Tmp = UPCASE( FIELD( @SENTENCE, " ", counter ) ) + CPToken = IF Tmp = "ON" THEN 1 ELSE 0 + counter += 1 +* Archive keyword + CASE Token = AR + Tmp = UPCASE( FIELD( @SENTENCE, " ", counter ) ) + ARToken = IF Tmp = "ON" THEN 1 ELSE 0 + counter += 1 +* Devicelist keyword + CASE Token = DV + DVtoken = 1 + * Assume archive on + ARtoken = 1 + CASE 1 + * If set, collect devices to end of loop or until + * another keyword is seen + IF DVtoken > 0 THEN + * Check for valid device + read devrec from DEVICE.FILE, Token THEN + * Check for tape type + if devrec<4> = "DT" or devrec<4> = "DC" then + * Now check existing device list + locate(Token,DEVICELIST,1;POS) then + * Duplicate device %s removed from list. + print UVREADMSG(087268,Token) + end else + * Looks good, add to list + DEVICELIST<1,-1> = Token + end + end else + * x is an invalid device type + print UVREADMSG(073603,Token:" (":devrec<4>:")") + end + end + END ELSE + * Junk + PRINT "Invalid Argument '":Token:"'." + STOP + END + END CASE +WHILE counter <= ARGC +REPEAT + +* If DEVICES, make certain Checkpoint is OFF +if DVToken > 0 AND CPToken THEN CPToken = 0 + +* Set Checkpoint +IF CPToken # -1 THEN + RECIO( RECIO$CPVAL, CPToken, RECIO$ATTR ) + str= "Checkpoint mode has been set to " + str := IF CPToken = 1 THEN "ON" ELSE "OFF" + PRINT str +END + +* Set Archive +IF ARToken # -1 THEN + RECIO( RECIO$ARVAL, ARToken, RECIO$ATTR ) + str= "Archive mode has been set to " + str := IF ARToken = 1 THEN "ON" ELSE "OFF" + * Set devices + if ARToken = 1 then + if DVToken and DEVICELIST # "" then + RECIO( DEVICELIST, DVToken, RECIO$DEVICELIST ) + * indicate logging to tape + str := " with logging to tape device(s):" + print str + max=dcount(DEVICELIST,@vm) + for i = 1 to max + print "",i:") ":DEVICELIST<1,i> + next i + end else + * Set to null + RECIO( "", DVToken, RECIO$DEVICELIST ) + * indicate logging to disk + str := " with logging to disk." + print str + end + end else + print str:"." + end +END + +END diff --git a/Ardent/UV/APP.PROGS/STKMATH b/Ardent/UV/APP.PROGS/STKMATH new file mode 100755 index 00000000..1a826715 --- /dev/null +++ b/Ardent/UV/APP.PROGS/STKMATH @@ -0,0 +1,98 @@ +******************************************************************************* +* +* STKMTH +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description......................................... +* 10/14/98 23801 SAP Change copyrights. +* 07/25/88 - - Maintenence log purged at 5.2.1, see release 5.1.10. +* +******************************************************************************* +subroutine STKMATH( answer, stack) + +* This routine perform arithmetic and logical operations on a +* postfix stack. Used by some of the Pro*verb user exits. + + + IF stack = "" THEN RETURN + IF NUM(stack<1>) THEN + IF answer THEN answer:= @FM:stack<1> ELSE answer = stack<1> + DEL stack<1> + CALL $STKMATH(answer, stack) + END ELSE + op = stack<1> + DEL stack<1> + c = DCOUNT(answer,@FM)-1 + + BEGIN CASE + + CASE op = "+" + t = answer+answer + + CASE op = "-" + t = answer-answer + + CASE op = "*" + t = answer*answer + + CASE op = "/" + t = answer/answer + + CASE op = "&" + IF answer and answer THEN t = 1 ELSE t = 0 + + CASE op = "!" + IF answer or answer THEN t = 1 ELSE t = 0 + + CASE op = "#" +* THE ONLY UNARY OPERATOR + IF answer THEN t = 0 ELSE t = 1 + IF c THEN answer:= @FM + + CASE op = "<" + IF answer < answer THEN t = 1 ELSE t = 0 + + CASE op = "<=" + IF answer <= answer THEN t = 1 ELSE t = 0 + + CASE op = ">" + IF answer > answer THEN t = 1 ELSE t = 0 + + CASE op = ">=" + IF answer >= answer THEN t = 1 ELSE t = 0 + + CASE op = "#<" + IF answer >= answer THEN t = 1 ELSE t = 0 + + CASE op = "#>" + IF answer <= answer THEN t = 1 ELSE t = 0 + + + CASE op = "?" +* terminator symbol + stack = "" + RETURN + CASE 1 + PRINT "ill formed string" + stack = "" + answer = "" + RETURN + END CASE + + DEL answer + DEL answer + IF answer THEN answer:= @FM:t ELSE answer = t + IF stack THEN CALL $STKMATH( answer, stack) + RETURN + END + END diff --git a/Ardent/UV/APP.PROGS/STRIPSTRS.B b/Ardent/UV/APP.PROGS/STRIPSTRS.B new file mode 100755 index 00000000..362de35c --- /dev/null +++ b/Ardent/UV/APP.PROGS/STRIPSTRS.B @@ -0,0 +1,84 @@ +******************************************************************************* +* +* uniVerse port of PI/open STRIPSTRINGS subroutine +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenance log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description......................................... +* 10/14/98 23801 SAP Change copyrights. +* 07/20/94 13952 WLG Fix syntax for COPY where ID,"ID" is used to insert +* TOKEN instead of TYPE and POS. +* 06/01/93 11645 PVW Backout 10793 changes +* 12/31/92 10793 PVW Check if matching literal delimiters. +* 11/12/92 10214 PVW Port PI/open EDITOR to replace uniVerse EDITOR. +* +******************************************************************************* +* +* Remove literals from sentence for lexical analysis. +* +******************************************************************************* + +$OPTIONS INFORMATION + + SUBROUTINE STRIPSTRINGS(SENTENCE,SYMBOLS) + +$INCLUDE UNIVERSE.INCLUDE UV.COM +$INCLUDE UNIVERSE.INCLUDE VERBINSERT.H +$INCLUDE UNIVERSE.INCLUDE SYMBOL.TBL.H + + POS=0 + +NEXT.LITERAL: + + A=INDEX(SENTENCE,"'",1) + Q=INDEX(SENTENCE,'"',1) + + +* If we find quotes, replace the quoted string in sentence with +* the index into the SYMBOLS array of where the literal is placed. +* However, if TOKEN has the syntax ID1,"ID2" we should insert the +* token ID2 because the caller will know to handle the token +* as a literal becuase of the comma + + IF A AND (A,1) + +input.loop: + +TPRINT form: +temp=temp.form +CALL *CINPUT.B(SEC.PRMPT,temp,special,form,0) + +IF special # 0 THEN + BEGIN CASE + CASE special = UP.ARROW + TPRINT form:PRMPT: + IF temp.form # NULL THEN + TPRINT temp.form: + TPRINT STR(SPACE,27-len(temp.form)): + END + ELSE + TPRINT group.defaults: + TPRINT STR(SPACE,27-len(group.defaults)): + END + form.line -=1 + IF form.line < 1 THEN + form.line = form.size + END + GOTO help.loop + CASE special = DOWN.ARROW + TPRINT form:PRMPT: + IF temp.form # NULL THEN + TPRINT temp.form: + TPRINT STR(SPACE,27-LEN(temp.form)): + END + ELSE + TPRINT group.defaults: + TPRINT STR(SPACE,27-LEN(group.defaults)): + END + form.line +=1 + IF form.line > form.size THEN + form.line = 1 + END + GOTO help.loop + CASE special = F.1 + CALL *HELP.PRINT.B(form<1,5>,3) + GOTO input.loop + CASE special = ESCAPE + STOP @(-1) + CASE special = F.10 + action.value=1 + CALL *DO.MNU.BAR.B(Menu.Bar,action.value,form.size,form,temp.form) + BEGIN CASE + CASE action.value = 1 + STOP @(-1) + CASE action.value = 2 + STOP @(-1) + CASE action.value = 3 + message=AFILE.MSG6 + CONVERT @FM TO " " IN message + CALL *HELP.BOX.B(3,10,60,message) + CASE action.value = 4 + message=UVREADMSG(076001,"") + CONVERT @FM TO " " IN message + CALL *HELP.BOX.B(3,10,60,message) + CASE action.value = 5 + CALL *HELP.BOX.B(3,10,45,UVREADMSG(076000,"")) + END CASE + CALL *PUT.FORM.B(form.size,form,temp.form,PRMPT,1) + GOTO help.loop + CASE 1 + GOTO input.loop + END CASE +END +ELSE + BEGIN CASE + CASE form.line = 1 + NumBytes = temp + IF NumBytes < 100000 THEN + mess = "Minimum File size is 100k bytes" + CALL *HELP.BOX.B(3, 10, 50, mess ) + temp.form< form.line > = 100000 + TPRINT form:PRMPT:temp.form: + TPRINT STR(SPACE,16-LEN(temp.form)): + GOTO help.loop + END + temp.form< form.line > = temp + CASE form.line = 2 + NumFiles = temp + IF NumFiles < 1 THEN + mess = "Minimum Number of Files is 1" + CALL *HELP.BOX.B(3, 10, 50, mess ) + temp.form< form.line > = 1 + TPRINT form:PRMPT:temp.form: + TPRINT STR(SPACE,16-LEN(temp.form)): + GOTO help.loop + END + temp.form< form.line > = temp + END CASE + TPRINT form:PRMPT:temp.form: + TPRINT STR(SPACE,16-LEN(temp.form)): + form.line+=1 + + IF form.line <= form.size THEN + GOTO help.loop + END + ELSE + GOSUB add.log.file + END +END +STOP @(-1) + +************************************************************************* +* add.log.file +************************************************************************* +add.log.file: + Exec.Sentence = "CREATE.LFILE ":NumBytes:" ":NumFiles + TPRINT @(-1) + EXECUTE Exec.Sentence + SLEEP 10 +RETURN + +************************************************************************* +* Init.form +* This routine is used TO initialize the form TO be printed on the +* screen for data input. It also sets up the default answers, if +* any +* +************************************************************************* +init.form: + MINIMUM.FILE.SIZE = ( BKSIZE * 1000 ) + MINIMUM.NUM.FILES = 3 + form = NULL + temp.form = NULL + temp.form<1> = MINIMUM.FILE.SIZE + temp.form<2> = MINIMUM.NUM.FILES + form.size = 2 + form.line = 1 + form<1,1> = @(5,9) + form<1,2> = @(40,9) + form<1,3> = AFILE.MSG2 + form<1,4> = AFILE.MSG3 + form<1,5> = form<1,4> + form<1,6> = 10 + form<2,1> = @(5,11) + form<2,2> = @(40,11) + form<2,3> = AFILE.MSG4 + form<2,4> = AFILE.MSG5 + form<2,5> = form<1,4> + form<2,6> = 36 + group.defaults = NULL + group.defaults<1> = NULL + group.defaults<2> = NULL +RETURN + +*************************************************************************** +* init.menu - initializes menu bar +*************************************************************************** +init.menu: + scratch=UVREADMSG(073087,"") + Menu.Bar = NULL + Menu.Bar<1,1> = 3 ;* Number of Items in Menu.Bar + Menu.Bar<1,2> = 1 ;* Line # on which to print the Menu Bar +* First Item + Menu.Bar<2,1,1>=scratch<1> ;* SubMenu Title + Menu.Bar<2,1,2>=1 ;* # of items in SubMenu +* SubMenu #1 + Menu.Bar<2,2,1>=scratch<6> ;* SubMenu Item + Menu.Bar<2,2,2>=1 ;* Action Code (Returned to calling process) + Menu.Bar<2,2,3>=scratch<7> +* Second Item + Menu.Bar<3,1,1>=scratch<8> ;* SubMenu Title + Menu.Bar<3,1,2>=1 ;* # of items in SubMenu +* SubMenu #1 + Menu.Bar<3,2,1>=scratch<6> ;* SubMenu Item + Menu.Bar<3,2,2>=2 ;* Action Code + Menu.Bar<3,2,3>=scratch<7> + scratch=UVREADMSG(073089,"") + Menu.Bar<4,1,1>=scratch<1> + Menu.Bar<4,1,2>=3 + Menu.Bar<4,2,1>=scratch<2> + Menu.Bar<4,2,2>=3 + Menu.Bar<4,2,3>=scratch<3> + Menu.Bar<4,3,1>=scratch<4> + Menu.Bar<4,3,2>=4 + Menu.Bar<4,3,3>=scratch<5> + Menu.Bar<4,4,1>=scratch<6> + Menu.Bar<4,4,2>=5 + Menu.Bar<4,4,3>=scratch<7> +RETURN +STOP @(-1) +END diff --git a/Ardent/UV/APP.PROGS/TL.ALIST.B b/Ardent/UV/APP.PROGS/TL.ALIST.B new file mode 100755 index 00000000..86112f98 --- /dev/null +++ b/Ardent/UV/APP.PROGS/TL.ALIST.B @@ -0,0 +1,179 @@ +$INCLUDE UNIVERSE.INCLUDE MTF.INCL.H +$INCLUDE UNIVERSE.INCLUDE FILENAMES.H +$INCLUDE UNIVERSE.INCLUDE MACHINE.NAME +$INCLUDE UNIVERSE.INCLUDE TLOG.H +****************************************************************************** +* +* System Admin Transaction Logging - Activate Account +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description........................................ +* 10/14/98 23801 SAP Change copyrights. +* 08/22/94 14725 DTM Added appropriate STOP +* 05/15/94 13286 DTM Initial programming +* +******************************************************************************* +id = "%W%" +******************************************************************************* + +******************************************************************************* +* Call initialization routines +******************************************************************************* +TPRINT @(-1) + +temp = NULL +CALL *ISUSER.B(0, temp) +IF temp = 0 THEN + TPRINT UVREADMSG(071000,"") + SLEEP 3 + STOP +END + + +GOSUB init.form +CALL *DRAW.SCRN.B( "Activate Account" ,1 ) +GOSUB init.menu +CALL *MNU.BAR.PR.B( Menu.Bar,1 ) + +******************************************************************************* +* Begin processing +******************************************************************************* + +CALL *HELP.PRINT.B( UVREADMSG( 073009,"" ), 2 ) +CALL *PUT.FORM.B( form.size, form, temp.form, PRMPT, 1 ) + +help.loop: + +CALL *HELP.PRINT.B( form< form.line, 4 >, 1 ) + +input.loop: + +TPRINT form<1,2>: +temp=temp.form +CALL *CINPUT.B(SEC.PRMPT,temp,special,form,1) + +IF special # 0 THEN + BEGIN CASE + CASE special = F.1 + CALL *HELP.PRINT.B(form<1,5>,3) + GOTO input.loop + CASE special = ESCAPE + STOP @(-1) + CASE special = F.10 + action.value=1 + CALL *DO.MNU.BAR.B(Menu.Bar,action.value,form.size,form,temp.form) + BEGIN CASE + CASE action.value = 1 + STOP @(-1) + CASE action.value = 2 + STOP @(-1) + CASE action.value = 3 + message=CDIR.MSG5 + CONVERT @FM TO " " IN message + CALL *HELP.BOX.B(3,10,60,message) + CASE action.value = 4 + message=UVREADMSG(076001,"") + CONVERT @FM TO " " IN message + CALL *HELP.BOX.B(3,10,60,message) + CASE action.value = 5 + CALL *HELP.BOX.B(3,10,45,UVREADMSG(076000,"")) + END CASE + CALL *PUT.FORM.B(form.size,form,temp.form,PRMPT,1) + GOTO help.loop + CASE 1 + GOTO input.loop + END CASE +END +ELSE ;* Valid Data Entered + IF ( temp NE NULL ) THEN + temp.form< 1 > = temp + file.name = temp + GOSUB activate.account + END + ELSE + GOTO input.loop + END +END +STOP @(-1) + +************************************************************************* +* Init.form +* This routine is used TO initialize the form TO be printed on the +* screen for data input. It also sets up the default answers, if +* any +* +************************************************************************* +init.form: + form = NULL + temp.form = NULL + temp.form<1>= NULL + form<1,1> = @(5,9) + form<1,2> = @(40,9) + form<1,3> = "Enter the name of the ACCOUNT list to Activate" + form<1,4> = "Enter the name of the Select list containing the files to be activated." + form<1,5> = form<1,4>:" The format of this file should be 'Account:File'." + form<1,6> = 36 + form.size = 1 + form.line = 1 +RETURN + +*************************************************************************** +* activate.account +*************************************************************************** +activate.account: + CALL *HELP.PRINT.B( "Working...", 2 ) + command.string = "ACTLIST ":file.name + EXECUTE command.string CAPTURING trash + trash = trash[1,LEN(trash)-1] + IF trash # "" THEN + CALL *HELP.BOX.B( 10, 10, 60, trash ) + END +RETURN + +*************************************************************************** +* init.menu - initializes menu bar +*************************************************************************** +init.menu: + scratch=UVREADMSG(073087,"") + Menu.Bar = NULL + Menu.Bar<1,1> = 3 ;* Number of Items in Menu.Bar + Menu.Bar<1,2> = 1 ;* Line # on which to print the Menu Bar +* First Item + Menu.Bar<2,1,1>=scratch<1> ;* SubMenu Title + Menu.Bar<2,1,2>=1 ;* # of items in SubMenu +* SubMenu #1 + Menu.Bar<2,2,1>=scratch<6> ;* SubMenu Item + Menu.Bar<2,2,2>=1 ;* Action Code (Returned to calling process) + Menu.Bar<2,2,3>=scratch<7> +* Second Item + Menu.Bar<3,1,1>=scratch<8> ;* SubMenu Title + Menu.Bar<3,1,2>=1 ;* # of items in SubMenu +* SubMenu #1 + Menu.Bar<3,2,1>=scratch<6> ;* SubMenu Item + Menu.Bar<3,2,2>=2 ;* Action Code + Menu.Bar<3,2,3>=scratch<7> + scratch=UVREADMSG(073089,"") + Menu.Bar<4,1,1>=scratch<1> + Menu.Bar<4,1,2>=3 + Menu.Bar<4,2,1>=scratch<2> + Menu.Bar<4,2,2>=3 + Menu.Bar<4,2,3>=scratch<3> + Menu.Bar<4,3,1>=scratch<4> + Menu.Bar<4,3,2>=4 + Menu.Bar<4,3,3>=scratch<5> + Menu.Bar<4,4,1>=scratch<6> + Menu.Bar<4,4,2>=5 + Menu.Bar<4,4,3>=scratch<7> +RETURN +STOP @(-1) +END diff --git a/Ardent/UV/APP.PROGS/TL.CDIR.B b/Ardent/UV/APP.PROGS/TL.CDIR.B new file mode 100755 index 00000000..b1858f5a --- /dev/null +++ b/Ardent/UV/APP.PROGS/TL.CDIR.B @@ -0,0 +1,245 @@ +$INCLUDE UNIVERSE.INCLUDE MTF.INCL.H +$INCLUDE UNIVERSE.INCLUDE FILENAMES.H +$INCLUDE UNIVERSE.INCLUDE MACHINE.NAME +$INCLUDE UNIVERSE.INCLUDE TLOG.H +****************************************************************************** +* +* System Admin Transaction Logging - Create Log DIrectory +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description........................................ +* 10/14/98 23801 SAP Change copyrights. +* 03/25/96 18212 LAG Windows NT port +* 03/09/95 16118 DTM Forced pathname to be absolute +* 10/21/94 15120 DTM Added checks for Shutdown/Suspend in progress states +* 08/22/94 14725 DTM Added needed STOP(@-1) +* 05/15/94 13286 DTM Initial programming +* +******************************************************************************* +id = "%W%" +******************************************************************************* + +****************** +** Windows NT port +** +DEFFUN IS.FULLPATH(FILESPEC) CALLING "*IS.FULLPATH" +** +****************** + +******************************************************************************* +* Call initialization routines +******************************************************************************* +TPRINT @(-1) + +temp = NULL +CALL *ISUSER.B(0, temp) +IF temp = 0 THEN + TPRINT UVREADMSG(071000,"") + SLEEP 3 + STOP +END + + +State = "" +RECIO( State, FINFO$AI.STATE, RECIO$FINFO ) + +IF State = AI$INITIAL OR State = AI$WARM.START OR State = AI$LOGGING OR State = AI$SUSPENDED OR State = AI$SUSP.PROG OR State = AI$SHUT.PROG THEN + PRINT "Cannot Create Logging Directory... Logging must be SHUTDOWN" + STOP +END + + +IF State = AI$FULL THEN + Cpt = "" + RECIO( Cpt, FINFO$AI.CHECKPOINT, RECIO$FINFO ) + IF Cpt = 1 THEN + PRINT "Cannot Create Logging Directory... Logging must be SHUTDOWN" + STOP + END +END +GOSUB init.form +CALL *DRAW.SCRN.B( CDIR.MSG1 ,1 ) +GOSUB init.menu +CALL *MNU.BAR.PR.B( Menu.Bar,1 ) + +******************************************************************************* +* Begin processing +******************************************************************************* + +CALL *HELP.PRINT.B( UVREADMSG( 073009,"" ), 2 ) +CALL *PUT.FORM.B( form.size, form, temp.form, PRMPT, 1 ) + +help.loop: + +CALL *HELP.PRINT.B( form< form.line, 4 >, 1 ) + +input.loop: + +TPRINT form<1,2>: +temp=temp.form +CALL *CINPUT.B(SEC.PRMPT,temp,special,form,0) + +IF special # 0 THEN + BEGIN CASE + CASE special = F.1 + CALL *HELP.PRINT.B(form<1,5>,3) + GOTO input.loop + CASE special = ESCAPE + STOP @(-1) + CASE special = F.10 + action.value=1 + CALL *DO.MNU.BAR.B(Menu.Bar,action.value,form.size,form,temp.form) + BEGIN CASE + CASE action.value = 1 + STOP @(-1) + CASE action.value = 2 + STOP @(-1) + CASE action.value = 3 + message=CDIR.MSG5 + CONVERT @FM TO " " IN message + CALL *HELP.BOX.B(3,10,60,message) + CASE action.value = 4 + message=UVREADMSG(076001,"") + CONVERT @FM TO " " IN message + CALL *HELP.BOX.B(3,10,60,message) + CASE action.value = 5 + CALL *HELP.BOX.B(3,10,45,UVREADMSG(076000,"")) + END CASE + CALL *PUT.FORM.B(form.size,form,temp.form,PRMPT,1) + GOTO help.loop + CASE 1 + GOTO input.loop + END CASE +END +ELSE ;* Valid Data Entered + IF ( temp NE NULL ) THEN + ****************** + ** Windows NT port + ** + IF NOT(IS.FULLPATH(temp)) THEN + CALL *HELP.BOX.B( 7,10,50, "Must be an absolute pathname!!" ) + temp.form< 1 > = "" + CALL *PUT.FORM.B(form.size,form,temp.form,PRMPT,1) + GOTO input.loop + END + ** + ****************** + temp.form< 1 > = temp + file.name = temp + GOSUB update.uv.logs + END + ELSE + GOTO input.loop + END +END +STOP @(-1) + +************************************************************************* +* Init.form +* This routine is used TO initialize the form TO be printed on the +* screen for data input. It also sets up the default answers, if +* any +* +************************************************************************* +init.form: + form = NULL + temp.form = NULL + temp.form<1>= NULL + form<1,1> = @(5,9) + form<1,2> = @(40,9) + form<1,3> = CDIR.MSG2 + form<1,4> = CDIR.MSG3:" This pathname should be the absolute pathname" + form<1,5> = form<1,4> + form<1,6> = 36 + form.size = 1 + form.line = 1 +RETURN + +*************************************************************************** +* update.uv.logs +*************************************************************************** +update.uv.logs: + command.string = CDIR.EXEC:file.name:" 1" + EXECUTE command.string CAPTURING trash + trash = trash[1,LEN(trash)-1] + retry = 0 + IF trash # NULL THEN + BEGIN CASE + CASE trash = "0" + help.msg = "Directory (":file.name:") already exists! Do you wish to set this directory as your logging directory?" + CALL *YES.NO.BOX.B( 10, help.msg, retry ) + IF retry THEN + OPEN "DICT", LOGS.FILE to Log.File ELSE + CALL *HELP.BOX.B(10,10,60,"Cannot open UV_LOGS files") + STOP @(-1) + END + REC = "" + REC<1> = "X" + REC<2> = file.name + WRITE REC ON Log.File, LOGS.DIR ELSE + CALL *HELP.BOX.B(10,10,60,"Cannot write UV_LOGS files") + STOP @(-1) + END + END + CASE trash = "1" + help.msg = "Illegal pathname, please try again." + CALL *HELP.BOX.B(10,10,60,help.msg) + temp.form<1>="" + CALL *PUT.FORM.B(form.size,form,temp.form,PRMPT,1) + GOTO help.loop + CASE 1 + CALL *HELP.BOX.B( 10,10,60,trash ) + END CASE + END + ELSE + CALL *HELP.BOX.B( 10, 10, 60, CDIR.MSG4:file.name ) + END +RETURN + +*************************************************************************** +* init.menu - initializes menu bar +*************************************************************************** +init.menu: + scratch=UVREADMSG(073087,"") + Menu.Bar = NULL + Menu.Bar<1,1> = 3 ;* Number of Items in Menu.Bar + Menu.Bar<1,2> = 1 ;* Line # on which to print the Menu Bar +* First Item + Menu.Bar<2,1,1>=scratch<1> ;* SubMenu Title + Menu.Bar<2,1,2>=1 ;* # of items in SubMenu +* SubMenu #1 + Menu.Bar<2,2,1>=scratch<6> ;* SubMenu Item + Menu.Bar<2,2,2>=1 ;* Action Code (Returned to calling process) + Menu.Bar<2,2,3>=scratch<7> +* Second Item + Menu.Bar<3,1,1>=scratch<8> ;* SubMenu Title + Menu.Bar<3,1,2>=1 ;* # of items in SubMenu +* SubMenu #1 + Menu.Bar<3,2,1>=scratch<6> ;* SubMenu Item + Menu.Bar<3,2,2>=2 ;* Action Code + Menu.Bar<3,2,3>=scratch<7> + scratch=UVREADMSG(073089,"") + Menu.Bar<4,1,1>=scratch<1> + Menu.Bar<4,1,2>=3 + Menu.Bar<4,2,1>=scratch<2> + Menu.Bar<4,2,2>=3 + Menu.Bar<4,2,3>=scratch<3> + Menu.Bar<4,3,1>=scratch<4> + Menu.Bar<4,3,2>=4 + Menu.Bar<4,3,3>=scratch<5> + Menu.Bar<4,4,1>=scratch<6> + Menu.Bar<4,4,2>=5 + Menu.Bar<4,4,3>=scratch<7> +RETURN +STOP @(-1) +END diff --git a/Ardent/UV/APP.PROGS/TL.CLEAR.B b/Ardent/UV/APP.PROGS/TL.CLEAR.B new file mode 100755 index 00000000..001d44b9 --- /dev/null +++ b/Ardent/UV/APP.PROGS/TL.CLEAR.B @@ -0,0 +1,188 @@ +$INCLUDE UNIVERSE.INCLUDE MTF.INCL.H +$INCLUDE UNIVERSE.INCLUDE FILENAMES.H +$INCLUDE UNIVERSE.INCLUDE MACHINE.NAME +$INCLUDE UNIVERSE.INCLUDE TLOG.H +****************************************************************************** +* +* System Admin Transaction Logging - Clear File Consistency Bit... +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description........................................ +* 10/14/98 23801 SAP Change copyrights. +* 08/22/94 14725 DTM Added needed STOP(@-1) +* 05/15/94 13286 DTM Initial programming +******************************************************************************* +id = "%W%" +******************************************************************************* + +******************************************************************************* +* Call initialization routines +******************************************************************************* +TPRINT @(-1) +temp = NULL +CALL *ISUSER.B(0, temp) +IF temp = 0 THEN + TPRINT UVREADMSG(071000,"") + SLEEP 3 + STOP +END +GOSUB init.form + +******************************************************************************* +* Begin processing +******************************************************************************* +CALL *DRAW.SCRN.B("Clear Consistency Flag",1) +GOSUB init.menu +CALL *MNU.BAR.PR.B(Menu.Bar,1) + +CALL *HELP.PRINT.B(UVREADMSG(073009,""),2) +CALL *PUT.FORM.B(form.size,form,temp.form,PRMPT,1) + +help.loop: + +CALL *HELP.PRINT.B(form,1) + +input.loop: + +TPRINT form<1,2>: +temp=temp.form +CALL *CINPUT.B(SEC.PRMPT,temp,special,form,0) + +IF special # 0 THEN + BEGIN CASE + CASE special = F.1 + CALL *HELP.PRINT.B(form<1,5>,3) + GOTO input.loop + CASE special = ESCAPE + STOP @(-1) + ;* CASE special = F.4 + ;* temp="*" + CASE special = F.10 + action.value=1 + CALL *DO.MNU.BAR.B(Menu.Bar,action.value,form.size,form,temp.form) + BEGIN CASE + CASE action.value = 1 + STOP @(-1) + CASE action.value = 2 + STOP @(-1) + CASE action.value = 3 + message=UVREADMSG(073634,"") + CONVERT @FM TO " " IN message + CALL *HELP.BOX.B(3,10,60,message) + CASE action.value = 4 + message=UVREADMSG(076001,"") + CONVERT @FM TO " " IN message + CALL *HELP.BOX.B(3,10,60,message) + CASE action.value = 5 + CALL *HELP.BOX.B(3,10,45,UVREADMSG(076000,"")) + END CASE + CALL *PUT.FORM.B(form.size,form,temp.form,PRMPT,1) + GOTO help.loop + END CASE +END +ELSE + IF ( temp NE NULL ) THEN + temp.form< 1 > = temp + file.name = temp + GOSUB clear.file + END + ELSE + GOTO input.loop + END +END +STOP @(-1) + + +************************************************************************* +* Init.form +* This routine is used TO initialize the form TO be printed on the +* screen for data input. It also sets up the default answers, if +* any +* +************************************************************************* +init.form: + form=NULL + temp.form=NULL + scratch=UVREADMSG(073302,"") + form<1,1>=@(5,9) + form<1,2>=@(40,9) + form<1,3>=TLC.MSG0 + form<1,4>=TLC.MSG1 + form<1,5>=form<1,4> + form<1,6>=36 + temp.form<1>="" + form.size=1 + form.line=1 +RETURN + +*************************************************************************** +* clear.file +*************************************************************************** +clear.file: + command.string = "RECOVERY.CONSISTENT ":file.name + EXECUTE command.string CAPTURING trash + trash = trash[1,LEN(trash)-1] + retry = 0 + IF trash # "" THEN + CALL *ERROR.BOX.B(7, 8, 0, trash, retry, NO.HELP) + IF retry THEN + STOP @(-1) + END + ELSE + CALL *PUT.FORM.B(form.size,form,temp.form,PRMPT,1) + GOTO input.loop + END + END + ELSE + message = "File ":file.name:" has been cleared." + CALL *HELP.BOX.B(3,10,60,message) + END +RETURN + +*************************************************************************** +* init.menu - initializes menu bar +*************************************************************************** +init.menu: + scratch=UVREADMSG(073087,"") + Menu.Bar = NULL + Menu.Bar<1,1> = 3 ;* Number of Items in Menu.Bar + Menu.Bar<1,2> = 1 ;* Line # on which to print the Menu Bar +* First Item + Menu.Bar<2,1,1>=scratch<1> ;* SubMenu Title + Menu.Bar<2,1,2>=1 ;* # of items in SubMenu +* SubMenu #1 + Menu.Bar<2,2,1>=scratch<6> ;* SubMenu Item + Menu.Bar<2,2,2>=1 ;* Action Code (Returned to calling process) + Menu.Bar<2,2,3>=scratch<7> +* Second Item + Menu.Bar<3,1,1>=scratch<8> ;* SubMenu Title + Menu.Bar<3,1,2>=1 ;* # of items in SubMenu +* SubMenu #1 + Menu.Bar<3,2,1>=scratch<6> ;* SubMenu Item + Menu.Bar<3,2,2>=2 ;* Action Code + Menu.Bar<3,2,3>=scratch<7> + scratch=UVREADMSG(073089,"") + Menu.Bar<4,1,1>=scratch<1> + Menu.Bar<4,1,2>=3 + Menu.Bar<4,2,1>=scratch<2> + Menu.Bar<4,2,2>=3 + Menu.Bar<4,2,3>=scratch<3> + Menu.Bar<4,3,1>=scratch<4> + Menu.Bar<4,3,2>=4 + Menu.Bar<4,3,3>=scratch<5> + Menu.Bar<4,4,1>=scratch<6> + Menu.Bar<4,4,2>=5 + Menu.Bar<4,4,3>=scratch<7> +RETURN +STOP @(-1) +END diff --git a/Ardent/UV/APP.PROGS/TL.DELETE.B b/Ardent/UV/APP.PROGS/TL.DELETE.B new file mode 100755 index 00000000..f43386cf --- /dev/null +++ b/Ardent/UV/APP.PROGS/TL.DELETE.B @@ -0,0 +1,258 @@ +$INCLUDE UNIVERSE.INCLUDE MTF.INCL.H +$INCLUDE UNIVERSE.INCLUDE FILENAMES.H +$INCLUDE UNIVERSE.INCLUDE MACHINE.NAME +$INCLUDE UNIVERSE.INCLUDE TLOG.H +****************************************************************************** +* +* System Admin Transaction Logging - Delete restored logs +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description........................................ +* 10/14/98 23801 SAP Change copyrights. +* 03/09/95 15857 DTM Changed default log # +* 10/21/94 15162 DTM Changed messages +* 10/12/94 15101 DTM Changed length of log number field +* 05/15/94 13286 DTM Initial Programming +* +******************************************************************************* +id = "%W%" +******************************************************************************* + +******************************************************************************* +* Call initialization routines +******************************************************************************* +TPRINT @(-1) +temp = NULL +CALL *ISUSER.B(0, temp) +IF temp = 0 THEN + TPRINT UVREADMSG(071000,"") + SLEEP 3 + STOP +END +GOSUB init.form +CALL *DRAW.SCRN.B( RFM.MSG0, 1 ) +GOSUB init.menu +CALL *MNU.BAR.PR.B(Menu.Bar,1) + +******************************************************************************* +* Begin processing +******************************************************************************* + +CALL *HELP.PRINT.B(UVREADMSG(073009,""),2) +CALL *PUT.FORM.B(form.size,form,temp.form,PRMPT,1) + +help.loop: + +CALL *HELP.PRINT.B(form,1) + +input.loop: + +TPRINT form: +temp=temp.form +CALL *CINPUT.B(SEC.PRMPT,temp,special,form,0) + +IF special # 0 THEN + BEGIN CASE + CASE special = UP.ARROW + TPRINT form:PRMPT: + IF temp.form # NULL THEN + TPRINT temp.form: + TPRINT STR(SPACE,27-len(temp.form)): + END + ELSE + TPRINT group.defaults: + TPRINT STR(SPACE,27-len(group.defaults)): + END + form.line -=1 + IF form.line < 1 THEN + form.line = form.size + END + GOTO help.loop + CASE special = DOWN.ARROW + TPRINT form:PRMPT: + IF temp.form # NULL THEN + TPRINT temp.form: + TPRINT STR(SPACE,27-LEN(temp.form)): + END + ELSE + TPRINT group.defaults: + TPRINT STR(SPACE,27-LEN(group.defaults)): + END + form.line +=1 + IF form.line > form.size THEN + form.line = 1 + END + GOTO help.loop + CASE special = F.1 + CALL *HELP.PRINT.B(form< form.line,5>,3) + GOTO input.loop + CASE special = ESCAPE + STOP @(-1) + CASE special = F.10 + action.value=1 + CALL *DO.MNU.BAR.B(Menu.Bar,action.value,form.size,form,temp.form) + BEGIN CASE + CASE action.value = 1 + STOP @(-1) + CASE action.value = 2 + STOP @(-1) + CASE action.value = 3 + message=UVREADMSG(073634,"") + CONVERT @FM TO " " IN message + CALL *HELP.BOX.B(3,10,60,message) + CASE action.value = 4 + message=UVREADMSG(076001,"") + CONVERT @FM TO " " IN message + CALL *HELP.BOX.B(3,10,60,message) + CASE action.value = 5 + CALL *HELP.BOX.B(3,10,45,UVREADMSG(076000,"")) + END CASE + CALL *PUT.FORM.B(form.size,form,temp.form,PRMPT,1) + GOTO help.loop + CASE 1 + GOTO input.loop + END CASE +END +ELSE + BEGIN CASE + CASE form.line = 1 + IF temp = NULL THEN + CALL *HELP.PRINT.B( NULL, 3 ) + CALL *HELP.BOX.B( 17, 5, 30, "Must Enter First Log" ) + temp.form< form.line > = NULL + TPRINT form:PRMPT:temp.form: + TPRINT STR(SPACE,16-LEN(temp.form)): + GOTO help.loop + END + FirstLog = temp + temp.form< form.line > = temp + CASE form.line = 2 + IF temp = NULL THEN + CALL *HELP.PRINT.B( NULL, 3 ) + CALL *HELP.BOX.B( 17, 5, 30, "Must Enter Last Log" ) + temp.form< form.line > = NULL + TPRINT form:PRMPT:temp.form: + TPRINT STR(SPACE,16-LEN(temp.form)): + GOTO help.loop + END + LastLog = temp + temp.form< form.line > = temp + CASE form.line = 3 + Path = temp + temp.form< form.line > = temp + END CASE + TPRINT form:PRMPT:temp.form: + TPRINT STR(SPACE,16-LEN(temp.form)): + form.line+=1 + + IF form.line <= form.size THEN + GOTO help.loop + END + ELSE + GOSUB delete.file + END +END +STOP @(-1) + +************************************************************************* +* delete.file +************************************************************************* +delete.file: + reply = 1 + CALL *YES.NO.BOX.B( 11 ,"Are you sure you want to delete files", reply ) + IF reply THEN + Exec.Sentence = "DEL.RFILE ":FirstLog:" ":LastLog:" ":Path + TPRINT @(-1) + EXECUTE Exec.Sentence + SLEEP 5 + END +RETURN + +************************************************************************* +* Init.form +* This routine is used TO initialize the form TO be printed on the +* screen for data input. It also sets up the default answers, if +* any +* +************************************************************************* +init.form: + form = NULL + temp.form = NULL + temp.form<1> = "1" + temp.form<2> = "1" + form.size = 3 + form.line = 1 + form<1,1> = @(5,8) + form<1,2> = @(40,8) + form<1,3> = "Number of First Log File to Delete" + form<1,4> = "Enter the number of the First Log File to Delete from Logging Directory" + form<1,5> = form<1,4> + form<1,6> = 9 + form<2,1> = @(5,10) + form<2,2> = @(40,10) + form<2,3> = "Number of Last Log File to Delete" + form<2,4> = "Enter the number of the Last Log File to Delete from Logging Directory" + form<2,5> = form<2,4> + form<2,6> = 9 + form<3,1> = @(5,12) + form<3,2> = @(40,12) + form<3,3> = "Pathname of the logging directory" + form<3,4> = "Enter the path name of the directory which contained the log files" + Path = "" + RECIO( Path, RECIO$PATH ) + form<3,5> = form<2,4> + temp.form<3> = Path + form<3,6> = 35 + group.defaults = NULL + group.defaults<1> = NULL + group.defaults<2> = NULL + group.defaults<3> = NULL +RETURN + +*************************************************************************** +* init.menu - initializes menu bar +*************************************************************************** +init.menu: + scratch=UVREADMSG(073087,"") + Menu.Bar = NULL + Menu.Bar<1,1> = 3 ;* Number of Items in Menu.Bar + Menu.Bar<1,2> = 1 ;* Line # on which to print the Menu Bar +* First Item + Menu.Bar<2,1,1>=scratch<1> ;* SubMenu Title + Menu.Bar<2,1,2>=1 ;* # of items in SubMenu +* SubMenu #1 + Menu.Bar<2,2,1>=scratch<6> ;* SubMenu Item + Menu.Bar<2,2,2>=1 ;* Action Code (Returned to calling process) + Menu.Bar<2,2,3>=scratch<7> +* Second Item + Menu.Bar<3,1,1>=scratch<8> ;* SubMenu Title + Menu.Bar<3,1,2>=1 ;* # of items in SubMenu +* SubMenu #1 + Menu.Bar<3,2,1>=scratch<6> ;* SubMenu Item + Menu.Bar<3,2,2>=2 ;* Action Code + Menu.Bar<3,2,3>=scratch<7> + scratch=UVREADMSG(073089,"") + Menu.Bar<4,1,1>=scratch<1> + Menu.Bar<4,1,2>=3 + Menu.Bar<4,2,1>=scratch<2> + Menu.Bar<4,2,2>=3 + Menu.Bar<4,2,3>=scratch<3> + Menu.Bar<4,3,1>=scratch<4> + Menu.Bar<4,3,2>=4 + Menu.Bar<4,3,3>=scratch<5> + Menu.Bar<4,4,1>=scratch<6> + Menu.Bar<4,4,2>=5 + Menu.Bar<4,4,3>=scratch<7> +RETURN +STOP @(-1) +END diff --git a/Ardent/UV/APP.PROGS/TL.DERROR.B b/Ardent/UV/APP.PROGS/TL.DERROR.B new file mode 100755 index 00000000..99802fc7 --- /dev/null +++ b/Ardent/UV/APP.PROGS/TL.DERROR.B @@ -0,0 +1,74 @@ +$INCLUDE UNIVERSE.INCLUDE MTF.INCL.H +$INCLUDE UNIVERSE.INCLUDE FILENAMES.H +$INCLUDE UNIVERSE.INCLUDE MACHINE.NAME +$INCLUDE UNIVERSE.INCLUDE TLOG.H +****************************************************************************** +* +* System Admin Transaction Logging - Delete Error Logs +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description........................................ +* 10/14/98 23801 SAP Change copyrights. +* 03/29/96 18212 LAG Windows NT port +* 05/15/94 13286 DTM Initial programming +* +******************************************************************************* +id = "%W%" +******************************************************************************* +TPRINT @(-1) +temp = NULL +CALL *ISUSER.B(0, temp) +IF temp = 0 THEN + TPRINT UVREADMSG(071000,"") + SLEEP 3 + STOP +END +******************************************************************************* +LOG = FIELD( @SENTENCE, " ", 4 ) +file = "" +RECIO( file, RECIO$PATH ) +file := "/" + +BEGIN CASE + CASE LOG = "ERROR" + file := "uvlogd.info" + CASE LOG = "CHECKPOINT" + file := "uvchkd.info" + CASE LOG = "ROLLFORWARD" + file := "uvrolf.info" + CASE 1 + file := "uvlogd.info" +END CASE + +msg = "Are you sure you want to delete the ":LOG:" error file?" +retry = 1 +CALL *YES.NO.BOX.B(11, msg, retry ) +IF retry = 0 THEN + STOP @(-1) +END +****************** +** Windows NT port +** +IF OS.TYPE = "UNIX" THEN + command = OS.EXEC:" '":"rm -f ":file:"'" +END ELSE + file = CONVERT("/", "\", file) + command = OS.EXEC:" '":UV.BIN:"/rm -f ":file:"'" +END +** +****************** +EXECUTE command +CALL *HELP.BOX.B(17,5,50,UVREADMSG(001403,"")) +STOP @(-1) + +END diff --git a/Ardent/UV/APP.PROGS/TL.DFILE.B b/Ardent/UV/APP.PROGS/TL.DFILE.B new file mode 100755 index 00000000..02daa7f9 --- /dev/null +++ b/Ardent/UV/APP.PROGS/TL.DFILE.B @@ -0,0 +1,185 @@ +$INCLUDE UNIVERSE.INCLUDE MTF.INCL.H +$INCLUDE UNIVERSE.INCLUDE FILENAMES.H +$INCLUDE UNIVERSE.INCLUDE MACHINE.NAME +$INCLUDE UNIVERSE.INCLUDE TLOG.H +****************************************************************************** +* +* System Admin Transaction Logging - Delete Log File +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description........................................ +* 10/14/98 23801 SAP Change copyrights. +* 08/22/94 14725 DTM Added needed STOP @(-1) +* 05/15/94 13286 DTM Initial programming +* +******************************************************************************* +id = "%W%" +******************************************************************************* + +******************************************************************************* +* Call initialization routines +******************************************************************************* +TPRINT @(-1) +temp = NULL +CALL *ISUSER.B(0, temp) +IF temp = 0 THEN + TPRINT UVREADMSG(071000,"") + SLEEP 3 + STOP +END + +PATH = "" +RECIO( PATH, RECIO$PATH ) +IF PATH = "" THEN + message = "No Logging Directory Exists" + CALL *HELP.BOX.B( 3, 10, 40, message ) + STOP +END + +GOSUB init.form +CALL *DRAW.SCRN.B( DFILE.MSG1, 1 ) +GOSUB init.menu +CALL *MNU.BAR.PR.B(Menu.Bar,1) + +******************************************************************************* +* Begin processing +******************************************************************************* + +CALL *HELP.PRINT.B(UVREADMSG(073009,""),2) +CALL *PUT.FORM.B(form.size,form,temp.form,PRMPT,1) + +help.loop: + +CALL *HELP.PRINT.B(form,1) + + + +input.loop: + +TPRINT form<1,2>: +temp=temp.form +CALL *CINPUT.B(SEC.PRMPT,temp,special,form,0) + +IF special # 0 THEN + BEGIN CASE + CASE special = F.1 + CALL *HELP.PRINT.B(form<1,5>,3) + GOTO input.loop + CASE special = ESCAPE + STOP @(-1) + CASE special = F.10 + action.value=1 + CALL *DO.MNU.BAR.B(Menu.Bar,action.value,form.size,form,temp.form) + BEGIN CASE + CASE action.value = 1 + STOP @(-1) + CASE action.value = 2 + STOP @(-1) + CASE action.value = 3 + message=DFILE.MSG5 + CONVERT @FM TO " " IN message + CALL *HELP.BOX.B(3,10,60,message) + CASE action.value = 4 + message=UVREADMSG(076001,"") + CONVERT @FM TO " " IN message + CALL *HELP.BOX.B(3,10,60,message) + CASE action.value = 5 + CALL *HELP.BOX.B(3,10,45,UVREADMSG(076000,"")) + END CASE + CALL *PUT.FORM.B(form.size,form,temp.form,PRMPT,1) + GOTO help.loop + CASE 1 + goto input.loop + END CASE +END +ELSE + IF ( temp NE NULL ) THEN + temp.form< 1 > = temp + file.number = temp + GOSUB delete.logs + END + ELSE + GOTO input.loop + END +END +STOP @(-1) + + +************************************************************************* +* Init.form +* This routine is used TO initialize the form TO be printed on the +* screen for data input. It also sets up the default answers, if +* any +* +************************************************************************* +init.form: + form=NULL + temp.form=NULL + form<1,1>=@(5,9) + form<1,2>=@(50,9) + form<1,3>=DFILE.MSG2 + form<1,4>=DFILE.MSG2 + form<1,5>=form<1,4> + form<1,6>=15 + temp.form<1>="1" + form.size=1 + form.line=1 +RETURN + +*************************************************************************** +* delete.logs +*************************************************************************** +delete.logs: + command.string = "DELETE.LFILE ":file.number + TPRINT @(-1) + EXECUTE command.string + SLEEP 3 +RETURN + +*************************************************************************** +* init.menu - initializes menu bar +*************************************************************************** +init.menu: + scratch=UVREADMSG(073087,"") + Menu.Bar = NULL + Menu.Bar<1,1> = 3 ;* Number of Items in Menu.Bar + Menu.Bar<1,2> = 1 ;* Line # on which to print the Menu Bar +* First Item + Menu.Bar<2,1,1>=scratch<1> ;* SubMenu Title + Menu.Bar<2,1,2>=1 ;* # of items in SubMenu +* SubMenu #1 + Menu.Bar<2,2,1>=scratch<6> ;* SubMenu Item + Menu.Bar<2,2,2>=1 ;* Action Code (Returned to calling process) + Menu.Bar<2,2,3>=scratch<7> +* Second Item + Menu.Bar<3,1,1>=scratch<8> ;* SubMenu Title + Menu.Bar<3,1,2>=1 ;* # of items in SubMenu +* SubMenu #1 + Menu.Bar<3,2,1>=scratch<6> ;* SubMenu Item + Menu.Bar<3,2,2>=2 ;* Action Code + Menu.Bar<3,2,3>=scratch<7> + scratch=UVREADMSG(073089,"") + Menu.Bar<4,1,1>=scratch<1> + Menu.Bar<4,1,2>=3 + Menu.Bar<4,2,1>=scratch<2> + Menu.Bar<4,2,2>=3 + Menu.Bar<4,2,3>=scratch<3> + Menu.Bar<4,3,1>=scratch<4> + Menu.Bar<4,3,2>=4 + Menu.Bar<4,3,3>=scratch<5> + Menu.Bar<4,4,1>=scratch<6> + Menu.Bar<4,4,2>=5 + Menu.Bar<4,4,3>=scratch<7> +RETURN +STOP @(-1) +END diff --git a/Ardent/UV/APP.PROGS/TL.DISPLAY.B b/Ardent/UV/APP.PROGS/TL.DISPLAY.B new file mode 100755 index 00000000..baac741f --- /dev/null +++ b/Ardent/UV/APP.PROGS/TL.DISPLAY.B @@ -0,0 +1,277 @@ +$INCLUDE UNIVERSE.INCLUDE MTF.INCL.H +$INCLUDE UNIVERSE.INCLUDE FILENAMES.H +$INCLUDE UNIVERSE.INCLUDE MACHINE.NAME +****************************************************************************** +* +* System Admin Transaction Logging - List Logging State Information +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description........................................ +* 10/14/98 23801 SAP Change copyrights. +* 11/10/95 17630 CSM don't include needssync log files in available space +* 04/26/95 16198 GMH Add archive tape support +* 10/21/94 15120 DTM Added two new states +* 10/19/94 15159 DTM Added Checkpoint/Archive status to menu +* 05/15/94 13286 DTM Initial programming +* +******************************************************************************* +id = "%W%" +******************************************************************************* +$INCLUDE UNIVERSE.INCLUDE TLOG.H + +******************************************************************************* +* Call initialization routines +******************************************************************************* +TPRINT @(-1) +GOSUB init.form + +******************************************************************************* +* Begin processing +******************************************************************************* +CALL *DRAW.SCRN.B("Display Logging State", 1) +GOSUB init.menu +CALL *MNU.BAR.PR.B(Menu.Bar,1) + +CALL *PUT.FORM.B(form.size,form,temp.form,PRMPT,1) + +msg1 = "Select Ok to return to main menus" +retry = 1 +B.array="" +B.array<1>=1 +B.array<2>="Ok" +CALL *CHOICE.BOX.B(17,3, 40, msg1, B.array, 1, "" ) + +RETURN +************************************************************************* +* Init.form +* This routine is used TO initialize the form TO be printed on the +* screen for data input. It also sets up the default answers, if +* any +* +************************************************************************* +init.form: + ;* initialize the form + form=NULL + temp.form=NULL + form<1,1>=@(5,3) + form<1,2>=@(25,3) + form<1,3>="Logging State" + form<1,4>="" + form<1,5>=form<1,4> + form<1,6>=36 + form<2,1>=@(5,5) + form<2,2>=@(25,5) + form<2,3>="Logging Directory" + form<2,4>="" + form<2,5>=form<1,4> + form<2,6>=36 + form<3,1>=@(5,6) + form<3,2>=@(25,6) + form<3,3>="Current Log File" + form<3,4>="" + form<3,5>=form<1,4> + form<3,6>=20 + form<4,1>=@(5,8) + form<4,2>=@(25,8) + form<4,3>="Total Log Space" + form<4,4>="" + form<4,5>=form<1,4> + form<4,6>=20 + form<5,1>=@(5,9) + form<5,2>=@(25,9) + form<5,3>="Available Log Space" + form<5,4>="" + form<5,5>=form<1,4> + form<5,6>=20 + form<6,1>=@(5,11) + form<6,2>=@(25,11) + form<6,3>="Checkpoint Mode" + form<6,4>="" + form<6,5>=form<1,4> + form<6,6>=20 + form<7,1>=@(5,13) + form<7,2>=@(25,13) + form<7,3>="Archive Mode" + form<7,4>="" + form<7,5>=form<1,4> + form<7,6>=20 + form<8,1>=@(5,14) + form<8,2>=@(25,14) + form<8,3>="Archive Type" + form<8,4>="" + form<8,5>=form<1,4> + form<8,6>=20 + form<9,1>=@(5,15) + form<9,2>=@(25,15) + form<9,3>="Device List" + form<9,4>="" + form<9,5>=form<1,4> + form<9,6>=20 + + ;* Ok, we have the form displayed, let's put in some information + + ;* First, let's get the state of the Logging Subsystem + State = "" + RECIO( State, FINFO$AI.STATE, RECIO$FINFO ) + BEGIN CASE + CASE State = AI$UNINIT + temp.form<1> = "Logging Uninitialized" + CASE State = AI$INACTIVE + temp.form<1> = "Logging Inactive" + CASE State = AI$INITIAL + temp.form<1> = "Logging In Initial Startup" + CASE State = AI$WARM.START + temp.form<1> = "Logging In Warm Start mode" + CASE State = AI$LOGGING + temp.form<1> = "Logging Enabled" + CASE State = AI$SUSPENDED + temp.form<1> = "Logging Suspended - Administrator" + CASE State = AI$FULL + temp.form<1> = "Logging Suspended - Log Files Full" + CASE State = AI$ERROR + temp.form<1> = "Logging Suspended - Internal Error" + CASE State = AI$DISABLED + temp.form<1> = "Logging Disabled" + CASE State = AI$SUSP.PROG + temp.form<1> = "Logging Suspend in Progress" + CASE State = AI$SHUT.PROG + temp.form<1> = "Logging Shutdown in Progress" + CASE 1 + temp.form<1> = "Unknown Logging State" + END CASE + ;* Ok, now let's get the path of the logging directory + + temp.form<2>="" + Path = "" + RECIO( Path, RECIO$PATH ) + IF ( Path = "" ) THEN + Path = "No Logging Directory" + END + temp.form<2> = Path + + ;* Ok, what's the current log file + + fileno = "" + RECIO ( fileno, FINFO$AI.SEQUENCE, RECIO$FINFO ) + + IF State = AI$LOGGING THEN + temp.form<3> = "lg":fileno + END + ELSE + temp.form<3> = "N/A" + END + + ;* Ok, now we need to calculate the total amounst of space + ;* We do this by summing together the sizes of all existing log files + ;* we also need to determine the total amount of "full" space as well + + sel.stat = "SSELECT UV_LOGS WITH STATUS # Released" + EXECUTE sel.stat CAPTURING junk + lping = 1 + sum = 0 + full = 0 + + OPEN '', "UV_LOGS" TO uv.log.fp ELSE + CALL *HELP.BOX.B(16,10,50,"Can't open UV_LOGS file" ) + STOP @(-1) + END + + LOOP + READNEXT temp2 THEN + READ rec FROM uv.log.fp, temp2 THEN + sum += rec + IF rec = "F" OR rec = "N" THEN + full += rec + END + END + ELSE + CALL *HELP.BOX.B(16,10,50,"Can't read record from UV_LOGS") + STOP @(-1) + END + END + ELSE lping = 0 + UNTIL lping = 0 REPEAT + temp.form<4>=sum:" bytes" + avail = sum -full + temp.form<5>=avail:" bytes" + tmp=0 + RECIO( tmp, FINFO$AI.CHECKPOINT, RECIO$FINFO ) + IF ( tmp = 0 )THEN + temp.form<6> = "OFF" + END + ELSE + temp.form<6> = "ON" + END + tmp = 0 + RECIO( tmp, FINFO$AI.ARCHIVE, RECIO$FINFO ) + IF ( tmp = 0 ) THEN + temp.form<7> = "OFF" + END + ELSE + temp.form<7> = "ON" + END + * Check for tape archive + RECIO( tmp, FINFO$AI.ARCHIVE.TAPE, RECIO$FINFO ) + if tmp = 0 THEN + temp.form<8> = "DISK" + temp.form<9> = "N/A" + end else + temp.form<2> = "N/A" + temp.form<4> = "N/A" + temp.form<5> = "N/A" + temp.form<8> = "TAPE" + DV = "" + RECIO(DV, "", RECIO$DEVICELIST) + temp.form<9> = convert(@vm, " ",DV) + end + form.size=9 + form.line=1 +RETURN + +*************************************************************************** +* init.menu - initializes menu bar +*************************************************************************** +init.menu: + scratch=UVREADMSG(073087,"") + Menu.Bar = NULL + Menu.Bar<1,1> = 3 ;* Number of Items in Menu.Bar + Menu.Bar<1,2> = 1 ;* Line # on which to print the Menu Bar +* First Item + Menu.Bar<2,1,1>=scratch<1> ;* SubMenu Title + Menu.Bar<2,1,2>=1 ;* # of items in SubMenu +* SubMenu #1 + Menu.Bar<2,2,1>=scratch<6> ;* SubMenu Item + Menu.Bar<2,2,2>=1 ;* Action Code (Returned to calling process) + Menu.Bar<2,2,3>=scratch<7> +* Second Item + Menu.Bar<3,1,1>=scratch<8> ;* SubMenu Title + Menu.Bar<3,1,2>=1 ;* # of items in SubMenu +* SubMenu #1 + Menu.Bar<3,2,1>=scratch<6> ;* SubMenu Item + Menu.Bar<3,2,2>=2 ;* Action Code + Menu.Bar<3,2,3>=scratch<7> + scratch=UVREADMSG(073089,"") + Menu.Bar<4,1,1>=scratch<1> + Menu.Bar<4,1,2>=3 + Menu.Bar<4,2,1>=scratch<2> + Menu.Bar<4,2,2>=3 + Menu.Bar<4,2,3>=scratch<3> + Menu.Bar<4,3,1>=scratch<4> + Menu.Bar<4,3,2>=4 + Menu.Bar<4,3,3>=scratch<5> + Menu.Bar<4,4,1>=scratch<6> + Menu.Bar<4,4,2>=5 + Menu.Bar<4,4,3>=scratch<7> +RETURN +STOP @(-1) +END diff --git a/Ardent/UV/APP.PROGS/TL.DLIST.B b/Ardent/UV/APP.PROGS/TL.DLIST.B new file mode 100755 index 00000000..e70c9582 --- /dev/null +++ b/Ardent/UV/APP.PROGS/TL.DLIST.B @@ -0,0 +1,179 @@ +$INCLUDE UNIVERSE.INCLUDE MTF.INCL.H +$INCLUDE UNIVERSE.INCLUDE FILENAMES.H +$INCLUDE UNIVERSE.INCLUDE MACHINE.NAME +$INCLUDE UNIVERSE.INCLUDE TLOG.H +****************************************************************************** +* +* System Admin Transaction Logging - De-Activate Account +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description........................................ +* 10/14/98 23801 SAP Change copyrights. +* 08/22/94 14725 DTM Added needed STOP @(-1) +* 05/15/94 13286 DTM Initial programming +* +******************************************************************************* +id = "%W%" +******************************************************************************* + +******************************************************************************* +* Call initialization routines +******************************************************************************* +TPRINT @(-1) + +temp = NULL +CALL *ISUSER.B(0, temp) +IF temp = 0 THEN + TPRINT UVREADMSG(071000,"") + SLEEP 3 + STOP +END + + +GOSUB init.form +CALL *DRAW.SCRN.B( "Deactivate Account" ,1 ) +GOSUB init.menu +CALL *MNU.BAR.PR.B( Menu.Bar,1 ) + +******************************************************************************* +* Begin processing +******************************************************************************* + +CALL *HELP.PRINT.B( UVREADMSG( 073009,"" ), 2 ) +CALL *PUT.FORM.B( form.size, form, temp.form, PRMPT, 1 ) + +help.loop: + +CALL *HELP.PRINT.B( form< form.line, 4 >, 1 ) + +input.loop: + +TPRINT form<1,2>: +temp=temp.form +CALL *CINPUT.B(SEC.PRMPT,temp,special,form,1) + +IF special # 0 THEN + BEGIN CASE + CASE special = F.1 + CALL *HELP.PRINT.B(form<1,5>,3) + GOTO input.loop + CASE special = ESCAPE + STOP @(-1) + CASE special = F.10 + action.value=1 + CALL *DO.MNU.BAR.B(Menu.Bar,action.value,form.size,form,temp.form) + BEGIN CASE + CASE action.value = 1 + STOP @(-1) + CASE action.value = 2 + STOP @(-1) + CASE action.value = 3 + message=CDIR.MSG5 + CONVERT @FM TO " " IN message + CALL *HELP.BOX.B(3,10,60,message) + CASE action.value = 4 + message=UVREADMSG(076001,"") + CONVERT @FM TO " " IN message + CALL *HELP.BOX.B(3,10,60,message) + CASE action.value = 5 + CALL *HELP.BOX.B(3,10,45,UVREADMSG(076000,"")) + END CASE + CALL *PUT.FORM.B(form.size,form,temp.form,PRMPT,1) + GOTO help.loop + CASE 1 + GOTO input.loop + END CASE +END +ELSE ;* Valid Data Entered + IF ( temp NE NULL ) THEN + temp.form< 1 > = temp + file.name = temp + GOSUB deactivate.account + END + ELSE + GOTO input.loop + END +END +STOP @(-1) + +************************************************************************* +* Init.form +* This routine is used TO initialize the form TO be printed on the +* screen for data input. It also sets up the default answers, if +* any +* +************************************************************************* +init.form: + form = NULL + temp.form = NULL + temp.form<1>= NULL + form<1,1> = @(5,9) + form<1,2> = @(40,9) + form<1,3> = "Enter the name of the ACCOUNT list to De-Activate" + form<1,4> = "Enter the name of the Select list containing the files to be deactivated." + form<1,5> = form<1,4>:" The format of this file should be 'Account:File'." + form<1,6> = 36 + form.size = 1 + form.line = 1 +RETURN + +*************************************************************************** +* deactivate.account +*************************************************************************** +deactivate.account: + CALL *HELP.PRINT.B( "Working...", 2 ) + command.string = "DEACTLIST ":file.name + EXECUTE command.string CAPTURING trash + trash = trash[1,LEN(trash)-1] + IF trash # "" THEN + CALL *HELP.BOX.B( 10, 10, 60, trash ) + END +RETURN + +*************************************************************************** +* init.menu - initializes menu bar +*************************************************************************** +init.menu: + scratch=UVREADMSG(073087,"") + Menu.Bar = NULL + Menu.Bar<1,1> = 3 ;* Number of Items in Menu.Bar + Menu.Bar<1,2> = 1 ;* Line # on which to print the Menu Bar +* First Item + Menu.Bar<2,1,1>=scratch<1> ;* SubMenu Title + Menu.Bar<2,1,2>=1 ;* # of items in SubMenu +* SubMenu #1 + Menu.Bar<2,2,1>=scratch<6> ;* SubMenu Item + Menu.Bar<2,2,2>=1 ;* Action Code (Returned to calling process) + Menu.Bar<2,2,3>=scratch<7> +* Second Item + Menu.Bar<3,1,1>=scratch<8> ;* SubMenu Title + Menu.Bar<3,1,2>=1 ;* # of items in SubMenu +* SubMenu #1 + Menu.Bar<3,2,1>=scratch<6> ;* SubMenu Item + Menu.Bar<3,2,2>=2 ;* Action Code + Menu.Bar<3,2,3>=scratch<7> + scratch=UVREADMSG(073089,"") + Menu.Bar<4,1,1>=scratch<1> + Menu.Bar<4,1,2>=3 + Menu.Bar<4,2,1>=scratch<2> + Menu.Bar<4,2,2>=3 + Menu.Bar<4,2,3>=scratch<3> + Menu.Bar<4,3,1>=scratch<4> + Menu.Bar<4,3,2>=4 + Menu.Bar<4,3,3>=scratch<5> + Menu.Bar<4,4,1>=scratch<6> + Menu.Bar<4,4,2>=5 + Menu.Bar<4,4,3>=scratch<7> +RETURN +STOP @(-1) +END diff --git a/Ardent/UV/APP.PROGS/TL.ENABLE.B b/Ardent/UV/APP.PROGS/TL.ENABLE.B new file mode 100755 index 00000000..084f4772 --- /dev/null +++ b/Ardent/UV/APP.PROGS/TL.ENABLE.B @@ -0,0 +1,181 @@ +$INCLUDE UNIVERSE.INCLUDE MTF.INCL.H +$INCLUDE UNIVERSE.INCLUDE FILENAMES.H +$INCLUDE UNIVERSE.INCLUDE MACHINE.NAME +$INCLUDE UNIVERSE.INCLUDE TLOG.H +****************************************************************************** +* +* System Admin Transaction Logging - Enable Logging +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description........................................ +* 10/14/98 23801 SAP Change copyrights. +* 11/10/95 17631 CSM enhance CP+AR mode to remove "stale" tx on reenable +* 03/03/95 15836 CSM if CP,state FULL & log space avail don't ask for sync +* 01/23/95 15836 CSM if CP,state FULL,non-chkpd log;get more space or sync +* 10/21/94 15120 DTM Added checks for 2 new states (Susp/shut in progress) +* 10/20/94 15147 DTM Fixed message +* 05/15/94 13286 DTM Initial programming +* +******************************************************************************* +id = "%W%" +******************************************************************************* + +******************************************************************************* +* Call initialization routines +******************************************************************************* +TPRINT @(-1) +temp = NULL +CALL *ISUSER.B(0, temp) +IF temp = 0 THEN + TPRINT UVREADMSG(071000,"") + SLEEP 3 + STOP +END +******************************************************************************* +* Begin processing +******************************************************************************* +CALL *DRAW.SCRN.B( ENBL.MSG0, 1 ) +GOSUB init.menu +CALL *MNU.BAR.PR.B( Menu.Bar,1 ) + +State = "" +RECIO( State, FINFO$AI.STATE, RECIO$FINFO ) + +IF State = AI$SHUT.PROG OR State = AI$SUSP.PROG THEN + IF State = AI$SHUT.PROG THEN + msg = "Shutdown " + END + ELSE + msg = "Suspend " + END + + msg:= "in progress. Cannot be Enabled at this point." + CALL *HELP.BOX.B( 3, 10 ,45, msg ) + STOP @(-1) +END + +*IF State = AI$LOGGING OR State = AI$INITIAL OR State = AI$WARM.START THEN +* msg = "Logging State is either already Enabled " +* msg := " or in the process of coming up" +* CALL *HELP.BOX.B( 3, 10, 45, msg ) +* STOP @(-1) +*END +retry = 1 +CALL *HELP.PRINT.B( ENBL.MSG1, 3 ) +CALL *YES.NO.BOX.B( 6, ENBL.MSG2, retry ) +IF retry THEN + + sync = "" + GOSUB check.sync + + retry = 1 + msg = "Do you wish to retain the existing info file?" + CALL *YES.NO.BOX.B( 6, msg, retry ) + IF retry THEN + EXECUTE "ENABLE.RECOVERY YES ":sync CAPTURING Error.Val + END + ELSE + EXECUTE "ENABLE.RECOVERY NO ":sync CAPTURING Error.Val + END + Error.Val = TRIM ( Error.Val ) + CALL *HELP.BOX.B( 6, 10, 60, Error.Val ) +END +GOTO EXIT + +RETURN + +*************************************************************************** +* init.menu - initializes menu bar +*************************************************************************** +init.menu: + scratch=UVREADMSG(073087,"") + Menu.Bar = NULL + Menu.Bar<1,1> = 3 ;* Number of Items in Menu.Bar + Menu.Bar<1,2> = 1 ;* Line # on which to print the Menu Bar +* First Item + Menu.Bar<2,1,1>=scratch<1> ;* SubMenu Title + Menu.Bar<2,1,2>=1 ;* # of items in SubMenu +* SubMenu #1 + Menu.Bar<2,2,1>=scratch<6> ;* SubMenu Item + Menu.Bar<2,2,2>=1 ;* Action Code (Returned to calling process) + Menu.Bar<2,2,3>=scratch<7> +* Second Item + Menu.Bar<3,1,1>=scratch<8> ;* SubMenu Title + Menu.Bar<3,1,2>=1 ;* # of items in SubMenu +* SubMenu #1 + Menu.Bar<3,2,1>=scratch<6> ;* SubMenu Item + Menu.Bar<3,2,2>=2 ;* Action Code + Menu.Bar<3,2,3>=scratch<7> + scratch=UVREADMSG(073089,"") + Menu.Bar<4,1,1>=scratch<1> + Menu.Bar<4,1,2>=3 + Menu.Bar<4,2,1>=scratch<2> + Menu.Bar<4,2,2>=3 + Menu.Bar<4,2,3>=scratch<3> + Menu.Bar<4,3,1>=scratch<4> + Menu.Bar<4,3,2>=4 + Menu.Bar<4,3,3>=scratch<5> + Menu.Bar<4,4,1>=scratch<6> + Menu.Bar<4,4,2>=5 + Menu.Bar<4,4,3>=scratch<7> +RETURN + +*************************************************************************** +* check.sync - if CP is ON and in Full state and at least 1 log file's status +* is NeedsSync & no log Avail, then ask user whether to destroy stale tx. +*************************************************************************** +check.sync: + IF State NE AI$FULL THEN RETURN + sel.stat = "SELECT UV_LOGS WITH STATUS = Available" + EXECUTE sel.stat CAPTURING junk + IF @SELECTED > 0 THEN RETURN + sel.stat = "SELECT UV_LOGS WITH STATUS = Full" + EXECUTE sel.stat CAPTURING junk + IF @SELECTED > 0 THEN RETURN + + OPEN 'DICT', "UV_LOGS" TO uv.log.fp ELSE + CALL *HELP.BOX.B(3,10,45,"Can't open UV_LOGS DICT file" ) + STOP @(-1) + END + READ rec FROM uv.log.fp, "CHECKPOINT" THEN + IF rec<2> = "TRUE" THEN + sel.stat = "SELECT UV_LOGS WITH STATUS = NeedsSync" + EXECUTE sel.stat CAPTURING junk + IF @SELECTED > 0 THEN + retry = 0 +askagain: + CALL *HELP.PRINT.B(ENBL.MSG7, 3) + CALL *YES.NO.BOX.B(6, ENBL.MSG8, retry) + IF retry THEN + sync = "SYNC" + END + ELSE + CALL *HELP.PRINT.B(ENBL.MSG9, 3) + CALL *YES.NO.BOX.B(6, ENBL.MSG10, retry) + IF retry THEN STOP @(-1) + ELSE GOTO askagain + END + END + END + END + ELSE + CALL *HELP.BOX.B(3,10,45,"Can't read CHECKPOINT from UV_LOGS DICT") + STOP @(-1) + END + CLOSE uv.log.fp + CALL *HELP.PRINT.B("",3) +RETURN + +EXIT: + STOP @(-1) +END diff --git a/Ardent/UV/APP.PROGS/TL.IDENT.B b/Ardent/UV/APP.PROGS/TL.IDENT.B new file mode 100755 index 00000000..90a61124 --- /dev/null +++ b/Ardent/UV/APP.PROGS/TL.IDENT.B @@ -0,0 +1,166 @@ +$INCLUDE UNIVERSE.INCLUDE MTF.INCL.H +$INCLUDE UNIVERSE.INCLUDE FILENAMES.H +$INCLUDE UNIVERSE.INCLUDE MACHINE.NAME +$INCLUDE UNIVERSE.INCLUDE TLOG.H +****************************************************************************** +* +* System Admin Transaction Logging - Identify files to recover +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description........................................ +* 10/14/98 23801 SAP Change copyrights. +* 11/04/94 15261 DTM Added more descriptive help message +* 08/22/94 14725 DTM Added STOP @(-1) +* 05/15/94 13286 DTM Initial programming +* +******************************************************************************* +id = "%W%" +******************************************************************************* + +******************************************************************************* +* Call initialization routines +******************************************************************************* +TPRINT @(-1) +GOSUB init.form +CALL *DRAW.SCRN.B( IDT.MSG1 ,1 ) +GOSUB init.menu +CALL *MNU.BAR.PR.B( Menu.Bar,1 ) + +******************************************************************************* +* Begin processing +******************************************************************************* + +CALL *HELP.PRINT.B( UVREADMSG( 073009,"" ), 2 ) +CALL *PUT.FORM.B( form.size, form, temp.form, PRMPT, 1 ) + +help.loop: + +CALL *HELP.PRINT.B( form< form.line, 4 >, 1 ) + +input.loop: + +TPRINT form<1,2>: +temp=temp.form +CALL *CINPUT.B(SEC.PRMPT,temp,special,form,0) + +IF special # 0 THEN + BEGIN CASE + CASE special = F.1 + CALL *HELP.PRINT.B(form<1,5>,3) + GOTO input.loop + CASE special = ESCAPE + STOP @(-1) + CASE special = F.10 + action.value=1 + CALL *DO.MNU.BAR.B(Menu.Bar,action.value,form.size,form,temp.form) + BEGIN CASE + CASE action.value = 1 + STOP @(-1) + CASE action.value = 2 + STOP @(-1) + CASE action.value = 3 + message=UVREADMSG(073634,"") + CONVERT @FM TO " " IN message + CALL *HELP.BOX.B(3,10,60,message) + CASE action.value = 4 + message=UVREADMSG(076001,"") + CONVERT @FM TO " " IN message + CALL *HELP.BOX.B(3,10,60,message) + CASE action.value = 5 + CALL *HELP.BOX.B(3,10,45,UVREADMSG(076000,"")) + END CASE + CALL *PUT.FORM.B(form.size,form,temp.form,PRMPT,1) + GOTO help.loop + CASE 1 + GOTO input.loop + END CASE +END +ELSE ;* Valid Data Entered + IF ( temp NE NULL ) THEN + temp.form< 1 > = temp + file.name = temp + GOSUB display.info + END + ELSE + GOTO input.loop + END +END +STOP @(-1) + +************************************************************************* +* Init.form +* This routine is used TO initialize the form TO be printed on the +* screen for data input. It also sets up the default answers, if +* any +* +************************************************************************* +init.form: + form = NULL + temp.form = NULL + temp.form<1>= NULL + form<1,1> = @(5,6) + form<1,2> = @(40,6) + form<1,3> = IDT.MSG1 + form<1,4> = IDT.MSG2 + form<1,5> = form<1,4>:". The format of the Select list should contain the full unix pathnames to the files that should be checked." + form<1,6> = 36 + form.size = 1 + form.line = 1 +RETURN + +*************************************************************************** +* update.uv.logs +*************************************************************************** +display.info: + command.string = "RECOVERY.CHECKPOINT ":file.name + EXECUTE command.string CAPTURING trash + CALL *HELP.BOX.B(8,10,60,trash) +RETURN + +*************************************************************************** +* init.menu - initializes menu bar +*************************************************************************** +init.menu: + scratch=UVREADMSG(073087,"") + Menu.Bar = NULL + Menu.Bar<1,1> = 3 ;* Number of Items in Menu.Bar + Menu.Bar<1,2> = 1 ;* Line # on which to print the Menu Bar +* First Item + Menu.Bar<2,1,1>=scratch<1> ;* SubMenu Title + Menu.Bar<2,1,2>=1 ;* # of items in SubMenu +* SubMenu #1 + Menu.Bar<2,2,1>=scratch<6> ;* SubMenu Item + Menu.Bar<2,2,2>=1 ;* Action Code (Returned to calling process) + Menu.Bar<2,2,3>=scratch<7> +* Second Item + Menu.Bar<3,1,1>=scratch<8> ;* SubMenu Title + Menu.Bar<3,1,2>=1 ;* # of items in SubMenu +* SubMenu #1 + Menu.Bar<3,2,1>=scratch<6> ;* SubMenu Item + Menu.Bar<3,2,2>=2 ;* Action Code + Menu.Bar<3,2,3>=scratch<7> + scratch=UVREADMSG(073089,"") + Menu.Bar<4,1,1>=scratch<1> + Menu.Bar<4,1,2>=3 + Menu.Bar<4,2,1>=scratch<2> + Menu.Bar<4,2,2>=3 + Menu.Bar<4,2,3>=scratch<3> + Menu.Bar<4,3,1>=scratch<4> + Menu.Bar<4,3,2>=4 + Menu.Bar<4,3,3>=scratch<5> + Menu.Bar<4,4,1>=scratch<6> + Menu.Bar<4,4,2>=5 + Menu.Bar<4,4,3>=scratch<7> +RETURN +STOP @(-1) +END diff --git a/Ardent/UV/APP.PROGS/TL.PURGE.B b/Ardent/UV/APP.PROGS/TL.PURGE.B new file mode 100755 index 00000000..cc997e82 --- /dev/null +++ b/Ardent/UV/APP.PROGS/TL.PURGE.B @@ -0,0 +1,204 @@ +$INCLUDE UNIVERSE.INCLUDE MTF.INCL.H +$INCLUDE UNIVERSE.INCLUDE FILENAMES.H +$INCLUDE UNIVERSE.INCLUDE MACHINE.NAME +$INCLUDE UNIVERSE.INCLUDE TLOG.H +****************************************************************************** +* +* System Admin Transaction Logging - Purge Old Files +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description........................................ +* 10/14/98 23801 SAP Change copyrights. +* 08/22/94 14725 DTM Added STOP @(-1) +* 07/18/94 13286 DTM Made it remove blank FULL.DATE files as well +* 05/15/94 13286 DTM Initial programming +* +******************************************************************************* +id = "%W%" +******************************************************************************* + +******************************************************************************* +* Call initialization routines +******************************************************************************* +TPRINT @(-1) +temp = NULL +CALL *ISUSER.B(0, temp) +IF temp = 0 THEN + TPRINT UVREADMSG(071000,"") + SLEEP 3 + STOP +END +GOSUB init.form +CALL *DRAW.SCRN.B( PRG.MSG0 ,1 ) +GOSUB init.menu +CALL *MNU.BAR.PR.B( Menu.Bar,1 ) + +******************************************************************************* +* Begin processing +******************************************************************************* + +CALL *HELP.PRINT.B( UVREADMSG( 073009,"" ), 2 ) +CALL *PUT.FORM.B( form.size, form, temp.form, PRMPT, 1 ) + +help.loop: + +CALL *HELP.PRINT.B( form< form.line, 4 >, 1 ) + +input.loop: + +TPRINT form<1,2>: +temp=temp.form +CALL *CINPUT.B(SEC.PRMPT,temp,special,form,0) + +IF special # 0 THEN + BEGIN CASE + CASE special = F.1 + CALL *HELP.PRINT.B(form<1,5>,3) + GOTO input.loop + CASE special = ESCAPE + STOP @(-1) + CASE special = F.10 + action.value=1 + CALL *DO.MNU.BAR.B(Menu.Bar,action.value,form.size,form,temp.form) + BEGIN CASE + CASE action.value = 1 + STOP @(-1) + CASE action.value = 2 + STOP @(-1) + CASE action.value = 3 + message=PRG.MSG3 + CONVERT @FM TO " " IN message + CALL *HELP.BOX.B(3,10,60,message) + CASE action.value = 4 + message=UVREADMSG(076001,"") + CONVERT @FM TO " " IN message + CALL *HELP.BOX.B(3,10,60,message) + CASE action.value = 5 + CALL *HELP.BOX.B(3,10,45,UVREADMSG(076000,"")) + END CASE + CALL *PUT.FORM.B(form.size,form,temp.form,PRMPT,1) + GOTO help.loop + CASE 1 + GOTO input.loop + END CASE +END +ELSE ;* Valid Data Entered + IF ( temp NE NULL ) THEN + IF ( temp MATCHES '2n/2n/0n') THEN + temp.form< 1 > = temp + Date = temp + GOSUB Purge.Old.Logs + END + ELSE + msg = "Date must match the MM/DD/YY format" + temp.form<1> = "" + CALL *HELP.BOX.B(11,10,45,msg) + CALL *PUT.FORM.B(form.size,form,temp.form,PRMPT,1) + GOTO help.loop + END + END + ELSE + GOTO input.loop + END +END +STOP @(-1) + +************************************************************************* +* Init.form +* This routine is used TO initialize the form TO be printed on the +* screen for data input. It also sets up the default answers, if +* any +* +************************************************************************* +init.form: + form = NULL + temp.form = NULL + DT = DATE() + temp.form<1>= OCONV(DT, "D2/") + form<1,1> = @(5,9) + form<1,2> = @(35,9) + form<1,3> = PRG.MSG1 + form<1,4> = PRG.MSG2 + form<1,5> = form<1,4> + form<1,6> = 10 + form.size = 1 + form.line = 1 +RETURN + +*************************************************************************** +* Purge Old Logs +*************************************************************************** +Purge.Old.Logs: + +msg2 = "Old Log Files Purged" +retry = 1 +CALL *HELP.PRINT.B( PURG.MSG1, 3 ) +CALL *YES.NO.BOX.B( 11, PURG.MSG2, retry ) +IF retry THEN + CURR.DATE = ICONV( Date, "D" ) + SEL.DATE = OCONV( CURR.DATE, "D2/" ) + SEL.STAT = "SSELECT UV_LOGS WITH STATUS = Released AND FULL.DATE < ":SEL.DATE + EXECUTE SEL.STAT RTNLIST tmpl CAPTURING junk + lping = 1 + counter = 0 + LOOP + READNEXT temp2 FROM tmpl THEN + DEL.STATE = "DELETE UV_LOGS ":temp2 + EXECUTE DEL.STATE CAPTURING junk + counter += 1 + END + ELSE lping = 0 + UNTIL lping = 0 REPEAT + msg = counter:PURG.MSG3 + CALL *HELP.BOX.B(17,5,50, msg) +END + +RETURN + +*************************************************************************** +* init.menu - initializes menu bar +*************************************************************************** +init.menu: + scratch=UVREADMSG(073087,"") + Menu.Bar = NULL + Menu.Bar<1,1> = 3 ;* Number of Items in Menu.Bar + Menu.Bar<1,2> = 1 ;* Line # on which to print the Menu Bar +* First Item + Menu.Bar<2,1,1>=scratch<1> ;* SubMenu Title + Menu.Bar<2,1,2>=1 ;* # of items in SubMenu +* SubMenu #1 + Menu.Bar<2,2,1>=scratch<6> ;* SubMenu Item + Menu.Bar<2,2,2>=1 ;* Action Code (Returned to calling process) + Menu.Bar<2,2,3>=scratch<7> +* Second Item + Menu.Bar<3,1,1>=scratch<8> ;* SubMenu Title + Menu.Bar<3,1,2>=1 ;* # of items in SubMenu +* SubMenu #1 + Menu.Bar<3,2,1>=scratch<6> ;* SubMenu Item + Menu.Bar<3,2,2>=2 ;* Action Code + Menu.Bar<3,2,3>=scratch<7> + scratch=UVREADMSG(073089,"") + Menu.Bar<4,1,1>=scratch<1> + Menu.Bar<4,1,2>=3 + Menu.Bar<4,2,1>=scratch<2> + Menu.Bar<4,2,2>=3 + Menu.Bar<4,2,3>=scratch<3> + Menu.Bar<4,3,1>=scratch<4> + Menu.Bar<4,3,2>=4 + Menu.Bar<4,3,3>=scratch<5> + Menu.Bar<4,4,1>=scratch<6> + Menu.Bar<4,4,2>=5 + Menu.Bar<4,4,3>=scratch<7> +RETURN +STOP @(-1) +END diff --git a/Ardent/UV/APP.PROGS/TL.RELEASE.B b/Ardent/UV/APP.PROGS/TL.RELEASE.B new file mode 100755 index 00000000..6e9ce52b --- /dev/null +++ b/Ardent/UV/APP.PROGS/TL.RELEASE.B @@ -0,0 +1,248 @@ +$INCLUDE UNIVERSE.INCLUDE MTF.INCL.H +$INCLUDE UNIVERSE.INCLUDE FILENAMES.H +$INCLUDE UNIVERSE.INCLUDE MACHINE.NAME +$INCLUDE UNIVERSE.INCLUDE TLOG.H +****************************************************************************** +* +* System Admin Transaction Logging - Release A Single Log +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description........................................ +* 10/14/98 23801 SAP Change copyrights. +* 06/28/95 16790 GMH Add release of tape devices +* 11/02/94 15225 DTM Added 'Working...' message +* 10/12/94 15101 DTM Changed length of log number field +* 08/22/94 14725 DTM Ended program normally, preventing fall through +* 07/19/94 13286 DTM Made it display status message after successful release +* 05/15/94 13286 DTM Initial programming +* +******************************************************************************* +id = "%W%" +******************************************************************************* + +******************************************************************************* +* Call initialization routines +******************************************************************************* +TPRINT @(-1) +temp = NULL +CALL *ISUSER.B(0, temp) +IF temp = 0 THEN + TPRINT UVREADMSG(071000,"") + SLEEP 3 + STOP +END + +* look in command line for TAPE +PARAMS = convert(" ",@FM,@sentence) +if PARAMS = "TAPE" then + TAPE.REL = 1 +end else + TAPE.REL = 0 +end +GOSUB init.form + +******************************************************************************* +* Begin processing +******************************************************************************* +CALL *DRAW.SCRN.B("Release A Single Log",1) +GOSUB init.menu +CALL *MNU.BAR.PR.B(Menu.Bar,1) + +CALL *HELP.PRINT.B(UVREADMSG(073009,""),2) +CALL *PUT.FORM.B(form.size,form,temp.form,PRMPT,1) + +help.loop: + +CALL *HELP.PRINT.B(form,1) + +input.loop: + +TPRINT form<1,2>: +temp=temp.form +CALL *CINPUT.B(SEC.PRMPT,temp,special,form,0) + +IF special # 0 THEN + BEGIN CASE + CASE special = F.1 + CALL *HELP.PRINT.B(form<1,5>,3) + GOTO input.loop + CASE special = ESCAPE + STOP @(-1) + ;* CASE special = F.4 + ;* temp="*" + CASE special = F.10 + action.value=1 + CALL *DO.MNU.BAR.B(Menu.Bar,action.value,form.size,form,temp.form) + BEGIN CASE + CASE action.value = 1 + STOP @(-1) + CASE action.value = 2 + STOP @(-1) + CASE action.value = 3 + message=UVREADMSG(073634,"") + CONVERT @FM TO " " IN message + CALL *HELP.BOX.B(3,10,60,message) + CASE action.value = 4 + message=UVREADMSG(076001,"") + CONVERT @FM TO " " IN message + CALL *HELP.BOX.B(3,10,60,message) + CASE action.value = 5 + CALL *HELP.BOX.B(3,10,45,UVREADMSG(076000,"")) + END CASE + CALL *PUT.FORM.B(form.size,form,temp.form,PRMPT,1) + GOTO help.loop + END CASE +END +ELSE + IF ( temp NE NULL ) THEN + temp.form< 1 > = temp + log.number = temp + GOSUB release.log + END + ELSE + GOTO input.loop + END +END + +STOP @(-1) + +************************************************************************* +* Init.form +* This routine is used TO initialize the form TO be printed on the +* screen for data input. It also sets up the default answers, if +* any +* +************************************************************************* +init.form: + form=NULL + temp.form=NULL + scratch=UVREADMSG(073302,"") + form<1,1>=@(5,9) + form<1,2>=@(40,9) +if not(TAPE.REL) then + form<1,3>="Enter the Log Sequence Number" + form<1,4>="Enter the sequence number of the Log to release." + Sel.Stmt = "SELECT UV_LOGS WITH STATUS = 'Full' BY @ID SAVING @ID" +end else + form<1,3>="Enter Tape Device Name" + form<1,4>="Enter the &DEVICE name of the tape device to release." + Sel.Stmt = "SELECT &DEVICE& WITH OTHER # '' BY @ID SAVING @ID" +end + form<1,5>=form<1,4> + form<1,6>=9 + EXECUTE Sel.Stmt RTNLIST tmpl CAPTURING junk1 + + READNEXT JUNK FROM tmpl THEN + temp.form<1>=JUNK + END + + IF temp.form<1> = "" THEN +if not(TAPE.REL) then + message = "No Files are available to be released" +end else + message = "No tape devices need to be released" +end + CALL *HELP.BOX.B( 11, 10, 60, message ) + STOP + END + form.size=1 + form.line=1 +RETURN + +*************************************************************************** +* release.log +*************************************************************************** +release.log: + CALL *HELP.PRINT.B( "Working...", 3 ) +if not(TAPE.REL) then + command.string = "RELEASE.LFILE ":log.number + EXECUTE command.string CAPTURING trash + trash = trash[1,LEN(trash)-1] +end else + trash = "" + open "&DEVICE&" to dev.file then + readu rec from dev.file,log.number then + if rec<18> = "LG_FULL" then + rec<18> = "" + write rec on dev.file,log.number else + trash = "Unable to release device ":log.number:"." + end + end else + trash = "Tape device ":log.number:" does not need to be released." + end + end else + trash = "Unable to read ":log.number:" from &DEVICE& file." + end + release dev.file,log.number + end else + trash = "Unable to open &DEVICE& file." + end +end + retry = 0 + IF trash # "" THEN + CALL *ERROR.BOX.B(7, 8, 0, trash, retry, "No help") + IF retry THEN + STOP @(-1) + END + ELSE + CALL *PUT.FORM.B(form.size,form,temp.form,PRMPT,1) + GOTO input.loop + END + END + ELSE +if not(TAPE.REL) then + message = "Log File ":log.number:" has been released." +end else + message = "Tape device ":log.number:" has been released." +end + CALL *HELP.BOX.B(11,10,60,message) + END +RETURN + +*************************************************************************** +* init.menu - initializes menu bar +*************************************************************************** +init.menu: + scratch=UVREADMSG(073087,"") + Menu.Bar = NULL + Menu.Bar<1,1> = 3 ;* Number of Items in Menu.Bar + Menu.Bar<1,2> = 1 ;* Line # on which to print the Menu Bar +* First Item + Menu.Bar<2,1,1>=scratch<1> ;* SubMenu Title + Menu.Bar<2,1,2>=1 ;* # of items in SubMenu +* SubMenu #1 + Menu.Bar<2,2,1>=scratch<6> ;* SubMenu Item + Menu.Bar<2,2,2>=1 ;* Action Code (Returned to calling process) + Menu.Bar<2,2,3>=scratch<7> +* Second Item + Menu.Bar<3,1,1>=scratch<8> ;* SubMenu Title + Menu.Bar<3,1,2>=1 ;* # of items in SubMenu +* SubMenu #1 + Menu.Bar<3,2,1>=scratch<6> ;* SubMenu Item + Menu.Bar<3,2,2>=2 ;* Action Code + Menu.Bar<3,2,3>=scratch<7> + scratch=UVREADMSG(073089,"") + Menu.Bar<4,1,1>=scratch<1> + Menu.Bar<4,1,2>=3 + Menu.Bar<4,2,1>=scratch<2> + Menu.Bar<4,2,2>=3 + Menu.Bar<4,2,3>=scratch<3> + Menu.Bar<4,3,1>=scratch<4> + Menu.Bar<4,3,2>=4 + Menu.Bar<4,3,3>=scratch<5> + Menu.Bar<4,4,1>=scratch<6> + Menu.Bar<4,4,2>=5 + Menu.Bar<4,4,3>=scratch<7> +RETURN +STOP @(-1) +END diff --git a/Ardent/UV/APP.PROGS/TL.RESTORE.B b/Ardent/UV/APP.PROGS/TL.RESTORE.B new file mode 100755 index 00000000..c2ade110 --- /dev/null +++ b/Ardent/UV/APP.PROGS/TL.RESTORE.B @@ -0,0 +1,330 @@ +$INCLUDE UNIVERSE.INCLUDE MTF.INCL.H +$INCLUDE UNIVERSE.INCLUDE FILENAMES.H +$INCLUDE UNIVERSE.INCLUDE MACHINE.NAME +$INCLUDE UNIVERSE.INCLUDE TLOG.H +****************************************************************************** +* +* System Admin Transaction Logging - Restored logs +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description........................................ +* 10/14/98 23801 SAP Change copyrights. +* 08/26/96 18966 GMH Correct device field +* 03/25/96 18212 LAG Windows NT port +* 03/09/95 15857 DTM Changed default log # +* 10/21/94 15162 DTM Changed messages +* 10/12/94 15101 DTM Changed length of log number field +* 05/15/94 13286 DTM Initial Programming +* +******************************************************************************* +id = "%W%" +******************************************************************************* + +****************** +** Windows NT port +** +DEFFUN IS.FULLPATH(FILESPEC) CALLING "*IS.FULLPATH" +** +****************** + +******************************************************************************* +* Call initialization routines +******************************************************************************* +TPRINT @(-1) +temp = NULL +CALL *ISUSER.B(0, temp) +IF temp = 0 THEN + TPRINT UVREADMSG(071000,"") + SLEEP 3 + STOP +END +GOSUB init.form +CALL *DRAW.SCRN.B( "Restore Log Files", 1 ) +GOSUB init.menu +CALL *MNU.BAR.PR.B(Menu.Bar,1) + +******************************************************************************* +* Begin processing +******************************************************************************* + +CALL *HELP.PRINT.B(UVREADMSG(073009,""),2) +CALL *PUT.FORM.B(form.size,form,temp.form,PRMPT,1) + +help.loop: + +CALL *HELP.PRINT.B(form,1) + +input.loop: + +TPRINT form: +temp=temp.form +CALL *CINPUT.B(SEC.PRMPT,temp,special,form,0) + +IF special # 0 THEN + BEGIN CASE + CASE special = UP.ARROW + TPRINT form:PRMPT: + IF temp.form # NULL THEN + TPRINT temp.form: + TPRINT STR(SPACE,27-len(temp.form)): + END + ELSE + TPRINT group.defaults: + TPRINT STR(SPACE,27-len(group.defaults)): + END + form.line -=1 + IF form.line < 1 THEN + form.line = form.size + END + GOTO help.loop + CASE special = DOWN.ARROW + TPRINT form:PRMPT: + IF temp.form # NULL THEN + TPRINT temp.form: + TPRINT STR(SPACE,27-LEN(temp.form)): + END + ELSE + TPRINT group.defaults: + TPRINT STR(SPACE,27-LEN(group.defaults)): + END + form.line +=1 + IF form.line > form.size THEN + form.line = 1 + END + GOTO help.loop + CASE special = F.1 + CALL *HELP.PRINT.B(form< form.line,5>,3) + GOTO input.loop + CASE special = ESCAPE + STOP @(-1) + CASE special = F.4 + temp = "*" + GOTO new.enter + CASE special = F.10 + action.value=1 + CALL *DO.MNU.BAR.B(Menu.Bar,action.value,form.size,form,temp.form) + BEGIN CASE + CASE action.value = 1 + STOP @(-1) + CASE action.value = 2 + STOP @(-1) + CASE action.value = 3 + message=UVREADMSG(073634,"") + CONVERT @FM TO " " IN message + CALL *HELP.BOX.B(3,10,60,message) + CASE action.value = 4 + message=UVREADMSG(076001,"") + CONVERT @FM TO " " IN message + CALL *HELP.BOX.B(3,10,60,message) + CASE action.value = 5 + CALL *HELP.BOX.B(3,10,45,UVREADMSG(076000,"")) + END CASE + CALL *PUT.FORM.B(form.size,form,temp.form,PRMPT,1) + GOTO help.loop + CASE 1 + GOTO input.loop + END CASE +END +ELSE + BEGIN CASE + CASE form.line = 1 +new.enter: + IF temp = "*" THEN + CALL *HELP.PRINT.B(UVREADMSG(073058,""),2) + help.message = CONVERT(@FM, " ", UVREADMSG(073644,"")) + CALL *HELP.PRINT.B(help.message, 2) + sel.val = 1 + CALL *PTBCODE(device.file,2,sel.val) + IF sel.val = -1 THEN + temp = NULL + CALL *PUT.FORM.B(form.size, form, temp.form, PRMPT,1) + GOTO help.loop + END + ELSE + temp = sel.val + temp.form=temp + END + CALL *PUT.FORM.B(form.size, form, temp.form, PRMPT, 1) + END + IF temp = NULL THEN + CALL *HELP.PRINT.B( NULL, 3 ) + CALL *HELP.BOX.B( 11, 5, 30, "Must Enter Device" ) + temp.form< form.line > = NULL + TPRINT form:PRMPT:temp.form: + TPRINT STR(SPACE,16-LEN(temp.form)): + GOTO help.loop + END + tmpdev = temp + temp.form< form.line > = temp + CASE form.line = 2 + IF temp = NULL THEN + CALL *HELP.PRINT.B( NULL, 3 ) + CALL *HELP.BOX.B( 17, 5, 30, "Must Enter First Log" ) + temp.form< form.line > = NULL + TPRINT form:PRMPT:temp.form: + TPRINT STR(SPACE,16-LEN(temp.form)): + GOTO help.loop + END + FirstLog = temp + temp.form< form.line > = temp + CASE form.line = 3 + IF temp = NULL THEN + CALL *HELP.PRINT.B( NULL, 3 ) + CALL *HELP.BOX.B( 17, 5, 30, "Must Enter Last Log" ) + temp.form< form.line > = NULL + TPRINT form:PRMPT:temp.form: + TPRINT STR(SPACE,16-LEN(temp.form)): + GOTO help.loop + END + LastLog = temp + temp.form< form.line > = temp + CASE form.line = 4 + PATH = temp + temp.form< form.line > = temp + END CASE + TPRINT form:PRMPT:temp.form: + TPRINT STR(SPACE,16-LEN(temp.form)): + form.line+=1 + + IF form.line <= form.size THEN + GOTO help.loop + END + ELSE + GOSUB restore.file + END +END +STOP @(-1) + +************************************************************************* +* restore.file +************************************************************************* +restore.file: + ****************** + ** Windows NT port + ** + IF IS.FULLPATH(tmpdev) THEN + DeviceName = tmpdev + END + ELSE + READ tmpREC FROM device.file, tmpdev THEN + DeviceName = tmpREC<6> + END + ELSE + DeviceName = tmpdev + END + END + ** + ****************** + reply = 1 + CALL *YES.NO.BOX.B( 11 ,"Are you sure you want to restore files", reply ) + IF reply THEN + PRINT @(-1) + Exec.Sentence = "LOG.RESTORE ":FirstLog:" ":LastLog:" ":PATH:" ":DeviceName + EXECUTE Exec.Sentence + SLEEP 5 + END + CLOSE device.file +RETURN + +************************************************************************* +* Init.form +* This routine is used TO initialize the form TO be printed on the +* screen for data input. It also sets up the default answers, if +* any +* +************************************************************************* +init.form: + form = NULL + temp.form = NULL + path = "" + RECIO( path, RECIO$PATH ) + temp.form<1> = "MT0" + temp.form<2> = "1" + temp.form<3> = "1" + temp.form<4> = path + form.size = 4 + form.line = 1 + form<1,1> = @(5,4) + form<1,2> = @(40,4) + form<1,3> = "Name of Device" + form<1,4> = "Enter the name of the Device to restore from" + form<1,5> = form<1,4> + form<1,6> = 30 + form<2,1> = @(5,6) + form<2,2> = @(40,6) + form<2,3> = "Number of First Log File to Restore" + form<2,4> = "Enter the number of the First Log File to Restore from Logging Directory" + form<2,5> = form<2,4> + form<2,6> = 9 + form<3,1> = @(5,8) + form<3,2> = @(40,8) + form<3,3> = "Number of Last Log File to Restore" + form<3,4> = "Enter the number of the Last Log File to Restore from Logging Directory" + form<3,5> = form<3,4> + form<3,6> = 9 + form<4,1> = @(5,10) + form<4,2> = @(40,10) + form<4,3> = "Name of Directory " + form<4,4> = "Enter the name of directory where you wish to restore the files, or hit return to take the currently defined logging directory" + form<4,5> = form<4,4> + form<4,6> = 35 + group.defaults = NULL + group.defaults<1> = NULL + group.defaults<2> = NULL + group.defaults<3> = NULL + group.defaults<4> = NULL + + + OPEN "", "&DEVICE&" TO device.file ELSE + CALL *HELP.BOX.B( 5, 5, 50, "Cannot open &DEVICE& file!" ) + STOP @(-1) + END +RETURN + +*************************************************************************** +* init.menu - initializes menu bar +*************************************************************************** +init.menu: + scratch=UVREADMSG(073087,"") + Menu.Bar = NULL + Menu.Bar<1,1> = 3 ;* Number of Items in Menu.Bar + Menu.Bar<1,2> = 1 ;* Line # on which to print the Menu Bar +* First Item + Menu.Bar<2,1,1>=scratch<1> ;* SubMenu Title + Menu.Bar<2,1,2>=1 ;* # of items in SubMenu +* SubMenu #1 + Menu.Bar<2,2,1>=scratch<6> ;* SubMenu Item + Menu.Bar<2,2,2>=1 ;* Action Code (Returned to calling process) + Menu.Bar<2,2,3>=scratch<7> +* Second Item + Menu.Bar<3,1,1>=scratch<8> ;* SubMenu Title + Menu.Bar<3,1,2>=1 ;* # of items in SubMenu +* SubMenu #1 + Menu.Bar<3,2,1>=scratch<6> ;* SubMenu Item + Menu.Bar<3,2,2>=2 ;* Action Code + Menu.Bar<3,2,3>=scratch<7> + scratch=UVREADMSG(073089,"") + Menu.Bar<4,1,1>=scratch<1> + Menu.Bar<4,1,2>=3 + Menu.Bar<4,2,1>=scratch<2> + Menu.Bar<4,2,2>=3 + Menu.Bar<4,2,3>=scratch<3> + Menu.Bar<4,3,1>=scratch<4> + Menu.Bar<4,3,2>=4 + Menu.Bar<4,3,3>=scratch<5> + Menu.Bar<4,4,1>=scratch<6> + Menu.Bar<4,4,2>=5 + Menu.Bar<4,4,3>=scratch<7> +RETURN +STOP @(-1) +END diff --git a/Ardent/UV/APP.PROGS/TL.ROLL.B b/Ardent/UV/APP.PROGS/TL.ROLL.B new file mode 100755 index 00000000..310a9862 --- /dev/null +++ b/Ardent/UV/APP.PROGS/TL.ROLL.B @@ -0,0 +1,437 @@ +$INCLUDE UNIVERSE.INCLUDE MTF.INCL.H +$INCLUDE UNIVERSE.INCLUDE FILENAMES.H +$INCLUDE UNIVERSE.INCLUDE MACHINE.NAME +$INCLUDE UNIVERSE.INCLUDE TLOG.H +****************************************************************************** +* +* System Admin Transaction Logging - Rollforward - media recovery +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description........................................ +* 10/14/98 23801 SAP Change copyrights. +* 03/25/96 18212 LAG Windows NT port +* 06/27/95 16790 GMH Allow tape restore of multi logs +* 06/07/95 16198 GMH Add tape support +* 03/09/95 15857 DTM Changed default log # +* 10/12/94 15101 DTM Changed length of log number field +* 05/15/94 13286 DTM Initial Programming +* +******************************************************************************* +id = "%W%" +******************************************************************************* + +******************************************************************************* +* Call initialization routines +******************************************************************************* +TPRINT @(-1) +temp = NULL +CALL *ISUSER.B(0, temp) +IF temp = 0 THEN + TPRINT UVREADMSG(071000,"") + SLEEP 3 + STOP +END +* Check for TAPE keyword +locate("TAPE",convert(" ",@fm,@sentence);FROM.TAPE) else FROM.TAPE = 0 +* open device file +open '&DEVICE&' to DEVICE.FILE else + print UVREADMSG(1520,"&DEVICE") + sleep 2 +end + +GOSUB init.form +CALL *DRAW.SCRN.B( RFM.MSG0, 1 ) +GOSUB init.menu +CALL *MNU.BAR.PR.B(Menu.Bar,1) + +******************************************************************************* +* Begin processing +******************************************************************************* + +CALL *HELP.PRINT.B(UVREADMSG(073009,""),2) +CALL *PUT.FORM.B(form.size,form,temp.form,PRMPT,1) + +help.loop: + +CALL *HELP.PRINT.B(form,1) + +input.loop: + +TPRINT form: +temp=temp.form +CALL *CINPUT.B(SEC.PRMPT,temp,special,form,0) + +IF special # 0 THEN + BEGIN CASE + CASE special = UP.ARROW + TPRINT form:PRMPT: + IF temp.form # NULL THEN + TPRINT temp.form: + TPRINT STR(SPACE,27-len(temp.form)): + END + ELSE + TPRINT group.defaults: + TPRINT STR(SPACE,27-len(group.defaults)): + END + form.line -=1 + IF form.line < 1 THEN + form.line = form.size + END + GOTO help.loop + CASE special = DOWN.ARROW + TPRINT form:PRMPT: + IF temp.form # NULL THEN + TPRINT temp.form: + TPRINT STR(SPACE,27-LEN(temp.form)): + END + ELSE + TPRINT group.defaults: + TPRINT STR(SPACE,27-LEN(group.defaults)): + END + form.line +=1 + IF form.line > form.size THEN + form.line = 1 + END + GOTO help.loop + CASE special = F.1 + CALL *HELP.PRINT.B(form< form.line,5>,3) + GOTO input.loop + CASE special = ESCAPE + STOP @(-1) + CASE special = F.10 + action.value=1 + CALL *DO.MNU.BAR.B(Menu.Bar,action.value,form.size,form,temp.form) + BEGIN CASE + CASE action.value = 1 + STOP @(-1) + CASE action.value = 2 + STOP @(-1) + CASE action.value = 3 + message=UVREADMSG(073634,"") + CONVERT @FM TO " " IN message + CALL *HELP.BOX.B(3,10,60,message) + CASE action.value = 4 + message=UVREADMSG(076001,"") + CONVERT @FM TO " " IN message + CALL *HELP.BOX.B(3,10,60,message) + CASE action.value = 5 + CALL *HELP.BOX.B(3,10,45,UVREADMSG(076000,"")) + END CASE + CALL *PUT.FORM.B(form.size,form,temp.form,PRMPT,1) + GOTO help.loop + CASE 1 + GOTO input.loop + END CASE +END +ELSE + BEGIN CASE + CASE form.line = 1 + IF temp = NULL THEN + CALL *HELP.PRINT.B( NULL, 3 ) + CALL *HELP.BOX.B( 17, 5, 30, "Must Enter File Name" ) + temp.form< form.line > = NULL + TPRINT form:PRMPT:temp.form: + TPRINT STR(SPACE,16-LEN(temp.form)): + GOTO help.loop + END + IF UPCASE( temp ) # "ALL" THEN + GETLIST temp TO 0 ELSE + CALL * HELP.PRINT.B( NULL, 3 ) + CALL * HELP.BOX.B( 17, 5, 30, "Invalid Select List Name" ) + temp.form< form.line > = NULL + TPRINT form:PRMPT:temp.form: + TPRINT STR(SPACE,16-LEN(temp.form)): + GOTO help.loop + END + END + FileName = temp + temp.form< form.line > = temp + CASE form.line = 2 +if not(FROM.TAPE) then + Path = temp + temp.form< form.line > = temp +end else + ArchiveList = convert(" ",@VM,temp) +RESTART: + IF ArchiveList = "" THEN + CALL *HELP.BOX.B( 10, 10, 40, "At least ONE tape device must be defined." ) + * Repaint previous line + TPRINT form:PRMPT:temp.form: + TPRINT STR(SPACE,16-LEN(temp.form)): + * Repaint current line + temp.form< form.line > = "" + TPRINT form:PRMPT:temp.form: + TPRINT STR(SPACE,16-LEN(temp.form)): + GOTO help.loop + END + * Verify Devices List + VAL=0 + LOOP + REMOVE CURDEV FROM ArchiveList SETTING MARK + VAL += 1 + * Check in device file + READ DEVREC FROM DEVICE.FILE,CURDEV ELSE + CALL *HELP.BOX.B( 10, 10, 40, CURDEV:" is not in &DEVICE& file. Removed from list." ) + del ArchiveList<1,VAL> + goto RESTART + END + * Check if tape + IF DEVREC<4> # "DC" AND DEVREC<4> # "DT" THEN + CALL *HELP.BOX.B( 10, 10, 40, CURDEV:" is not a tape device. Removed from list." ) + del ArchiveList<1,VAL> + goto RESTART + END + UNTIL MARK = 0 DO REPEAT + temp.form = convert(@VM," ",ArchiveList) +end + CASE form.line = 3 + BegLog = temp + temp.form< form.line > = temp + CASE form.line = 4 + EndLog = temp + temp.form< form.line > = EndLog + CASE form.line = 5 + Flag = UPCASE( temp ) + IF Flag = "YES" OR Flag = "NO" THEN + IF BegLog = "0" THEN + CALL *HELP.PRINT.B( NULL, 3 ) + CALL *HELP.BOX.B( 17, 5, 45, "Must enter a LogFile number other than 0" ) + form.line = 3 + temp.form< form.line > = NULL + TPRINT form:PRMPT:temp.form: + TPRINT STR(SPACE,16-LEN(temp.form)): + GOTO help.loop + END +* Force to non-checking +if (FROM.TAPE) then + temp = "NO" + Flag = "NO" +end + temp.form< form.line > = temp + END + ELSE + CALL *HELP.PRINT.B( NULL, 3 ) + CALL *HELP.BOX.B( 17, 5, 30, "Please enter either YES or NO" ) + temp.form< form.line > = NULL + TPRINT form:PRMPT:temp.form: + TPRINT STR(SPACE,16-LEN(temp.form)): + GOTO help.loop + END + CASE form.line = 6 + IF temp # "0" AND temp # "1" and temp # "2" and temp # "3" THEN + CALL *HELP.PRINT.B( NULL, 3 ) + CALL *HELP.BOX.B( 17, 5, 45, "Please enter either a number between 0 and 3" ) + temp.form< form.line > = "0" + TPRINT form:PRMPT:temp.form: + TPRINT STR(SPACE,16-LEN(temp.form)): + GOTO help.loop + END + Verbosity = temp + temp.form< form.line > = temp + END CASE + TPRINT form:PRMPT:temp.form: + TPRINT STR(SPACE,16-LEN(temp.form)): + form.line+=1 + + IF form.line <= form.size THEN + GOTO help.loop + END + ELSE + GOSUB roll.forward + END +END +STOP @(-1) + +************************************************************************* +* roll.forward +************************************************************************* +roll.forward: + retry = 1 + msg = "Do you wish output to go to the Screen?" + CALL *YES.NO.BOX.B( 6, msg, retry ) + + Exec.Sentence = OS.EXEC:" '":UV.BIN:"/uvrolf " + if not(FROM.TAPE) then Exec.Sentence := "-l":Path + IF retry THEN + Exec.Sentence := " -s " + END + IF (UPCASE(FileName) = "ALL") THEN + Exec.Sentence := " -m -a " + END ELSE + Exec.Sentence := " -m ":FileName + END + IF Flag = "YES" THEN + Exec.Sentence := " -c ":BegLog:" ":EndLog + END ELSE + Exec.Sentence := " -u ":BegLog:" ":EndLog + END + if FROM.TAPE then + Exec.Sentence := " -t ":change(ArchiveList,@vm," -t ",-1) + end + Exec.Sentence := " -v":Verbosity:"'" + TPRINT @(-1) + + IF retry = 0 THEN + ****************** + ** Windows NT port + ** + IF OS.TYPE = "UNIX" THEN + Exec2 = OS.EXEC:" '":"rm -f ":UV.ROOT:"/uvrolf.res":"'" + END ELSE + Exec2 = OS.EXEC:" '":UV.BIN:"/rm -f ":UV.ROOT:"/uvrolf.res":"'" + END + ** + ****************** + + EXECUTE Exec2 CAPTURING junk + END + TPRINT @(-1) + EXECUTE Exec.Sentence + IF retry = 0 THEN + PRINT + PRINT + PRINT "Results of rollforward :" + ****************** + ** Windows NT port + ** + IF OS.TYPE = "UNIX" THEN + Exec2 = OS.EXEC:" '":"cat ":UV.ROOT:"/uvrolf.res | more":"'" + END ELSE + Exec2 = OS.EXEC:" '":"type ":UV.ROOT:"/uvrolf.res | more":"'" + END + ** + ****************** + EXECUTE Exec2 + CALL *HELP.BOX.B( 17,5,50, UVREADMSG(001403,"")) + END + ELSE + CALL *HELP.BOX.B( 17, 5, 50, "Press return to continue" ) + END +RETURN + +************************************************************************* +* Init.form +* This routine is used TO initialize the form TO be printed on the +* screen for data input. It also sets up the default answers, if +* any +* +************************************************************************* +init.form: + form = NULL + temp.form = NULL + temp.form<1> = "" + temp.form<2> = "" +if not(FROM.TAPE) then + Path="" + RECIO( Path, RECIO$PATH ) + temp.form<2> = Path +end else + Dev="" + RECIO( Dev, 0, RECIO$DEVICELIST ) + temp.form<2> = convert(@vm," ",Dev) +end + temp.form<3> = "1" + temp.form<4> = "1" + temp.form<5> = "NO" + temp.form<6> = "0" + form.size = 6 + form.line = 1 + form<1,1> = @(5,3) + form<1,2> = @(40,3) + form<1,3> = RFM.MSG1 + form<1,4> = RFM.MSG2 + form<1,5> = "This field should contain either 'ALL', to use all the files in the UV.TRANS file, " + form<1,5> := "or the name of an active select list. The format of the select list should contain " + form<1,5> := "the fully qualified pathnames of all the uniVerse files that should be checked." + form<1,6> = 30 + form<2,1> = @(5,5) + form<2,2> = @(40,5) +if not(FROM.TAPE) then + form<2,3> = "Directory to restore from" + form<2,4> = "Directory to restore from" +end else + form<2,3> = "Device list to restore from" + form<2,4> = "Space delimited list of &DEVICE& entries." +end + form<2,5> = form<2,4> + form<2,6> = 36 + form<3,1> = @(5,7) + form<3,2> = @(40,7) + form<3,3> = RFF.MSG3 + form<3,4> = RFF.MSG4 + form<3,5> = form<3,4> + form<3,6> = 9 + form<4,1> = @(5,9) + form<4,2> = @(40,9) + form<4,3> = RFF.MSG5 + form<4,4> = RFF.MSG6 + form<4,5> = form<4,4> + form<4,6> = 9 + form<5,1> = @(5,11) + form<5,2> = @(40,11) + form<5,3> = RFF.MSG7 + form<5,4> = RFF.MSG8 + form<5,5> = form<5,4> + form<5,6> = 36 + form<6,1> = @(5,13) + form<6,2> = @(40,13) + form<6,3> = "Verbosity Level (0, 1, 2, 3)" + form<6,4> = "Verbosity level refers to the amount of data to be displayed/output to the log files/screen." + form<6,5> = "Verbosity level refers to the amount of data to be displayed/output to the log files/screen." + form<6,5> := " 0 = No Output, 1 = Warning Output, 2 = General Output, 3 = All output" + form<6,6> = 36 + group.defaults = NULL + group.defaults<1> = NULL + group.defaults<2> = NULL + group.defaults<3> = NULL + group.defaults<4> = NULL + group.defaults<5> = NULL +RETURN + +*************************************************************************** +* init.menu - initializes menu bar +*************************************************************************** +init.menu: + scratch=UVREADMSG(073087,"") + Menu.Bar = NULL + Menu.Bar<1,1> = 3 ;* Number of Items in Menu.Bar + Menu.Bar<1,2> = 1 ;* Line # on which to print the Menu Bar +* First Item + Menu.Bar<2,1,1>=scratch<1> ;* SubMenu Title + Menu.Bar<2,1,2>=1 ;* # of items in SubMenu +* SubMenu #1 + Menu.Bar<2,2,1>=scratch<6> ;* SubMenu Item + Menu.Bar<2,2,2>=1 ;* Action Code (Returned to calling process) + Menu.Bar<2,2,3>=scratch<7> +* Second Item + Menu.Bar<3,1,1>=scratch<8> ;* SubMenu Title + Menu.Bar<3,1,2>=1 ;* # of items in SubMenu +* SubMenu #1 + Menu.Bar<3,2,1>=scratch<6> ;* SubMenu Item + Menu.Bar<3,2,2>=2 ;* Action Code + Menu.Bar<3,2,3>=scratch<7> + scratch=UVREADMSG(073089,"") + Menu.Bar<4,1,1>=scratch<1> + Menu.Bar<4,1,2>=3 + Menu.Bar<4,2,1>=scratch<2> + Menu.Bar<4,2,2>=3 + Menu.Bar<4,2,3>=scratch<3> + Menu.Bar<4,3,1>=scratch<4> + Menu.Bar<4,3,2>=4 + Menu.Bar<4,3,3>=scratch<5> + Menu.Bar<4,4,1>=scratch<6> + Menu.Bar<4,4,2>=5 + Menu.Bar<4,4,3>=scratch<7> +RETURN +STOP @(-1) +END diff --git a/Ardent/UV/APP.PROGS/TL.ROLLFILE.B b/Ardent/UV/APP.PROGS/TL.ROLLFILE.B new file mode 100755 index 00000000..dce5dda6 --- /dev/null +++ b/Ardent/UV/APP.PROGS/TL.ROLLFILE.B @@ -0,0 +1,409 @@ +$INCLUDE UNIVERSE.INCLUDE MTF.INCL.H +$INCLUDE UNIVERSE.INCLUDE FILENAMES.H +$INCLUDE UNIVERSE.INCLUDE MACHINE.NAME +$INCLUDE UNIVERSE.INCLUDE TLOG.H +****************************************************************************** +* +* System Admin Transaction Logging - Rollforward a file +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description........................................ +* 10/14/98 23801 SAP Change copyrights. +* 03/25/96 18212 LAG Windows NT port +* 06/27/95 16790 GMH Allow multi log restore from tape +* 06/21/95 16719 DTM Fixed display to screen option +* 06/08/95 16198 GMH Fix +* 06/07/95 16198 GMH Add tape rollforward support +* 03/09/95 15857 DTM Changed default log # +* 10/12/94 15101 DTM Changed length of log number field +* 09/29/94 15032 DTM Increased size of field for data entry +* 05/15/94 13286 DTM Initial Programming +* +******************************************************************************* +id = "%W%" +******************************************************************************* + +****************** +** Windows NT port +** +DEFFUN IS.FULLPATH(FILESPEC) CALLING "*IS.FULLPATH" +** +****************** + +******************************************************************************* +* Call initialization routines +******************************************************************************* +TPRINT @(-1) +temp = NULL +CALL *ISUSER.B(0, temp) +IF temp = 0 THEN + TPRINT UVREADMSG(071000,"") + SLEEP 3 + STOP +END +* Check for TAPE keyword +locate("TAPE",convert(" ",@fm,@sentence);FROM.TAPE) else FROM.TAPE = 0 +* open device file +open '&DEVICE&' to DEVICE.FILE else + print UVREADMSG(1520,"&DEVICE") + sleep 2 +end + +GOSUB init.form +CALL *DRAW.SCRN.B( RFF.MSG0, 1 ) +GOSUB init.menu +CALL *MNU.BAR.PR.B(Menu.Bar,1) + +******************************************************************************* +* Begin processing +******************************************************************************* + +CALL *HELP.PRINT.B(UVREADMSG(073009,""),2) +CALL *PUT.FORM.B(form.size,form,temp.form,PRMPT,1) + +help.loop: + +CALL *HELP.PRINT.B(form,1) + +input.loop: + +TPRINT form: +temp=temp.form +CALL *CINPUT.B(SEC.PRMPT,temp,special,form,0) + +IF special # 0 THEN + BEGIN CASE + CASE special = UP.ARROW + TPRINT form:PRMPT: + IF temp.form # NULL THEN + TPRINT temp.form: + TPRINT STR(SPACE,27-len(temp.form)): + END + ELSE + TPRINT group.defaults: + TPRINT STR(SPACE,27-len(group.defaults)): + END + form.line -=1 + IF form.line < 1 THEN + form.line = form.size + END + GOTO help.loop + CASE special = DOWN.ARROW + TPRINT form:PRMPT: + IF temp.form # NULL THEN + TPRINT temp.form: + TPRINT STR(SPACE,27-LEN(temp.form)): + END + ELSE + TPRINT group.defaults: + TPRINT STR(SPACE,27-LEN(group.defaults)): + END + form.line +=1 + IF form.line > form.size THEN + form.line = 1 + END + GOTO help.loop + CASE special = F.1 + CALL *HELP.PRINT.B(form< form.line,5>,3) + GOTO input.loop + CASE special = ESCAPE + STOP @(-1) + CASE special = F.10 + action.value=1 + CALL *DO.MNU.BAR.B(Menu.Bar,action.value,form.size,form,temp.form) + BEGIN CASE + CASE action.value = 1 + STOP @(-1) + CASE action.value = 2 + STOP @(-1) + CASE action.value = 3 + message=UVREADMSG(073634,"") + CONVERT @FM TO " " IN message + CALL *HELP.BOX.B(3,10,60,message) + CASE action.value = 4 + message=UVREADMSG(076001,"") + CONVERT @FM TO " " IN message + CALL *HELP.BOX.B(3,10,60,message) + CASE action.value = 5 + CALL *HELP.BOX.B(3,10,45,UVREADMSG(076000,"")) + END CASE + CALL *PUT.FORM.B(form.size,form,temp.form,PRMPT,1) + GOTO help.loop + CASE 1 + GOTO input.loop + END CASE +END +ELSE + BEGIN CASE + CASE form.line = 1 + IF temp = NULL THEN + CALL *HELP.PRINT.B( NULL, 3 ) + CALL *HELP.BOX.B( 17, 5, 30, RFF.MSG9 ) + temp.form< form.line > = NULL + TPRINT form:PRMPT:temp.form: + TPRINT STR(SPACE,42-LEN(temp.form)): + GOTO help.loop + END + ****************** + ** Windows NT port + ** + IF NOT(IS.FULLPATH(temp)) THEN + CALL *HELP.PRINT.B( NULL, 3 ) + CALL *HELP.BOX.B( 17, 5, 30, "Must be full Pathname" ) + temp.form< form.line > = NULL + TPRINT form:PRMPT:temp.form: + TPRINT STR(SPACE,42-LEN(temp.form)): + GOTO help.loop + END + ** + ****************** + FileName = temp + temp.form< form.line > = temp + CASE form.line = 2 +if not(FROM.TAPE) then + LogDir = temp + temp.form< form.line > = temp +end else + ArchiveList = convert(" ",@VM,temp) +RESTART: + IF ArchiveList = "" THEN + CALL *HELP.BOX.B( 10, 10, 40, "At least ONE tape device must be defined." ) + * Repaint previous line + TPRINT form:PRMPT:temp.form: + TPRINT STR(SPACE,16-LEN(temp.form)): + * Repaint current line + temp.form< form.line > = "" + TPRINT form:PRMPT:temp.form: + TPRINT STR(SPACE,16-LEN(temp.form)): + GOTO help.loop + END + * Verify Devices List + VAL=0 + LOOP + REMOVE CURDEV FROM ArchiveList SETTING MARK + VAL += 1 + * Check in device file + READ DEVREC FROM DEVICE.FILE,CURDEV ELSE + CALL *HELP.BOX.B( 10, 10, 40, CURDEV:" is not in &DEVICE& file. Removed from list." ) + del ArchiveList<1,VAL> + goto RESTART + END + * Check if tape + IF DEVREC<4> # "DC" AND DEVREC<4> # "DT" THEN + CALL *HELP.BOX.B( 10, 10, 40, CURDEV:" is not a tape device. Removed from list." ) + del ArchiveList<1,VAL> + goto RESTART + END + UNTIL MARK = 0 DO REPEAT + temp.form = convert(@VM," ",ArchiveList) +end + CASE form.line = 3 + BegLog = temp + temp.form< form.line > = temp + CASE form.line = 4 + EndLog = temp + temp.form< form.line > = EndLog + CASE form.line = 5 + Flag = UPCASE( temp ) + IF Flag = "YES" OR Flag = "NO" THEN + IF BegLog = "0" AND Flag = "YES" THEN + CALL *HELP.PRINT.B( NULL, 3 ) + CALL *HELP.BOX.B( 17, 5, 45, RFF.MSG10 ) + form.line = 3 + temp.form< form.line > = NULL + TPRINT form:PRMPT:temp.form: + TPRINT STR(SPACE,16-LEN(temp.form)): + GOTO help.loop + END +* Force to non-checking +if (FROM.TAPE) then + temp = "NO" + Flag = "NO" +end + temp.form< form.line > = temp + END + ELSE + CALL *HELP.PRINT.B( NULL, 3 ) + CALL *HELP.BOX.B( 17, 5, 30, RFF.MSG11 ) + temp.form< form.line > = NULL + TPRINT form:PRMPT:temp.form: + TPRINT STR(SPACE,16-LEN(temp.form)): + GOTO help.loop + END + CASE form.line = 6 + IF temp # "0" AND temp # "1" and temp # "2" and temp # "3" THEN + CALL *HELP.PRINT.B( NULL, 3 ) + CALL *HELP.BOX.B( 17, 5, 45, RFF.MSG12 ) + temp.form< form.line > = "0" + TPRINT form:PRMPT:temp.form: + TPRINT STR(SPACE,16-LEN(temp.form)): + GOTO help.loop + END + Verbosity = temp + temp.form< form.line > = temp + END CASE + TPRINT form:PRMPT:temp.form: + TPRINT STR(SPACE,16-LEN(temp.form)): + form.line+=1 + + IF form.line <= form.size THEN + GOTO help.loop + END + ELSE + GOSUB roll.forward + END +END +STOP @(-1) + +************************************************************************* +* roll.forward +************************************************************************* +roll.forward: + retry = 1 + msg = "Do you wish output to go to the Screen?" + CALL *YES.NO.BOX.B(6, msg, retry ) + + Exec.Sentence = OS.EXEC:" '":UV.BIN:"/uvrolf " + if not(FROM.TAPE) then Exec.Sentence := "-l":LogDir + Exec.Sentence := " -f ":FileName + IF retry THEN + Exec.Sentence := " -s " + END + IF Flag = "YES" THEN + Exec.Sentence := " -c ":BegLog:" ":EndLog + END ELSE + Exec.Sentence := " -u ":BegLog:" ":EndLog + END + if FROM.TAPE then + Exec.Sentence := " -t ":change(ArchiveList,@vm," -t ",-1) + end + Exec.Sentence := " -v":Verbosity:"'" + TPRINT @(-1) + EXECUTE Exec.Sentence + SLEEP 4 +RETURN + +************************************************************************* +* Init.form +* This routine is used TO initialize the form TO be printed on the +* screen for data input. It also sets up the default answers, if +* any +* +************************************************************************* +init.form: + form = NULL + temp.form = NULL + temp.form<1> = "" + temp.form<2> = "" +if not(FROM.TAPE) then + Path = "" + RECIO( Path, RECIO$PATH ) + temp.form<2> = Path +end else + Dev="" + RECIO( Dev, 0, RECIO$DEVICELIST ) + temp.form<2> = convert(@vm," ",Dev) +end + temp.form<3> = "1" + temp.form<4> = "1" + temp.form<5> = "NO" + temp.form<6> = "0" + form.size = 6 + form.line = 1 + form<1,1> = @(5,4) + form<1,2> = @(35,4) + form<1,3> = RFF.MSG1 + form<1,4> = RFF.MSG2 + form<1,5> = form<1,4> + form<1,6> = 42 + form<2,1> = @(5,6) + form<2,2> = @(35,6) +if not(FROM.TAPE) then + form<2,3> = "Logging Directory" + form<2,4> = "Enter the location of the logging files to restore from" +end else + form<2,3> = "Device list to restore from" + form<2,4> = "Space delimited list of &DEVICE& entries." +end + form<2,5> = form<2,4> + form<2,6> = 35 + form<3,1> = @(5,8) + form<3,2> = @(35,8) + form<3,3> = RFF.MSG3 + form<3,4> = RFF.MSG4 + form<3,5> = form<3,4> + form<3,6> = 9 + form<4,1> = @(5,10) + form<4,2> = @(35,10) + form<4,3> = RFF.MSG5 + form<4,4> = RFF.MSG6 + form<4,5> = form<4,4> + form<4,6> = 9 + form<5,1> = @(5,12) + form<5,2> = @(35,12) + form<5,3> = RFF.MSG7 + form<5,4> = RFF.MSG8 + form<5,5> = form<5,4> + form<5,6> = 36 + form<6,1> = @(5,14) + form<6,2> = @(35,14) + form<6,3> = RFF.MSG13 + form<6,4> = RFF.MSG14 + form<6,5> = RFF.MSG15 + form<6,6> = 36 + group.defaults = NULL + group.defaults<1> = NULL + group.defaults<2> = NULL + group.defaults<3> = NULL + group.defaults<4> = NULL + group.defaults<5> = NULL + group.defaults<6> = NULL +RETURN + +*************************************************************************** +* init.menu - initializes menu bar +*************************************************************************** +init.menu: + scratch=UVREADMSG(073087,"") + Menu.Bar = NULL + Menu.Bar<1,1> = 3 ;* Number of Items in Menu.Bar + Menu.Bar<1,2> = 1 ;* Line # on which to print the Menu Bar +* First Item + Menu.Bar<2,1,1>=scratch<1> ;* SubMenu Title + Menu.Bar<2,1,2>=1 ;* # of items in SubMenu +* SubMenu #1 + Menu.Bar<2,2,1>=scratch<6> ;* SubMenu Item + Menu.Bar<2,2,2>=1 ;* Action Code (Returned to calling process) + Menu.Bar<2,2,3>=scratch<7> +* Second Item + Menu.Bar<3,1,1>=scratch<8> ;* SubMenu Title + Menu.Bar<3,1,2>=1 ;* # of items in SubMenu +* SubMenu #1 + Menu.Bar<3,2,1>=scratch<6> ;* SubMenu Item + Menu.Bar<3,2,2>=2 ;* Action Code + Menu.Bar<3,2,3>=scratch<7> + scratch=UVREADMSG(073089,"") + Menu.Bar<4,1,1>=scratch<1> + Menu.Bar<4,1,2>=3 + Menu.Bar<4,2,1>=scratch<2> + Menu.Bar<4,2,2>=3 + Menu.Bar<4,2,3>=scratch<3> + Menu.Bar<4,3,1>=scratch<4> + Menu.Bar<4,3,2>=4 + Menu.Bar<4,3,3>=scratch<5> + Menu.Bar<4,4,1>=scratch<6> + Menu.Bar<4,4,2>=5 + Menu.Bar<4,4,3>=scratch<7> +RETURN +STOP @(-1) +END diff --git a/Ardent/UV/APP.PROGS/TL.SFILE.B b/Ardent/UV/APP.PROGS/TL.SFILE.B new file mode 100755 index 00000000..d2dd0e8a --- /dev/null +++ b/Ardent/UV/APP.PROGS/TL.SFILE.B @@ -0,0 +1,440 @@ +$INCLUDE UNIVERSE.INCLUDE MTF.INCL.H +$INCLUDE UNIVERSE.INCLUDE FILENAMES.H +$INCLUDE UNIVERSE.INCLUDE MACHINE.NAME +$INCLUDE UNIVERSE.INCLUDE TLOG.H +****************************************************************************** +* +* System Admin Transaction Logging - Update Attributes +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description........................................ +* 10/14/98 23801 SAP Change copyrights. +* 05/24/95 16198 GMH Allow FULL TAPE to reconfigure +* 05/04/95 16198 GMH Set CHKPOINT OFF if ARCHIVE TAPE +* 04/26/95 16198 GMH Add archive tape support +* 03/09/95 15864 DTM Fixed so it allows initial response to be understood, +* even if arrow keys are used +* 08/22/94 14726 DTM Fixed so it doesn't allow two Off responses +* 05/15/94 13286 DTM Initial programming +* +******************************************************************************* +id = "%W%" +******************************************************************************* +OPEN '&DEVICE&' TO DEVICE.FILE ELSE + PRINT UVREADMSG(1520,"&DEVICE&") + SLEEP 2 + STOP +END +OPEN 'DICT',UV.LOGS.FILE.NAME TO DICT.FILE ELSE + PRINT UVREADMSG(1520,"DICT ":UV.LOGS.FILE.NAME) + SLEEP 2 + STOP +END +******************************************************************************* +* Call initialization routines +******************************************************************************* +TPRINT @(-1) +temp = NULL +CALL *ISUSER.B(0, temp) +IF temp = 0 THEN + TPRINT UVREADMSG(071000,"") + SLEEP 3 + STOP +END +GOSUB init.form +CALL *DRAW.SCRN.B( SFILE.MSG1, 1 ) +GOSUB init.menu +CALL *MNU.BAR.PR.B(Menu.Bar,1) + +******************************************************************************* +* Begin processing +******************************************************************************* + +GOSUB verify.state +CALL *HELP.PRINT.B(UVREADMSG(073009,""),2) +CALL *PUT.FORM.B(form.size,form,temp.form,PRMPT,1) + +help.loop: + +CALL *HELP.PRINT.B(form,1) + +input.loop: + +TPRINT form: +temp=temp.form +CALL *CINPUT.B(SEC.PRMPT,temp,special,form,0) + +IF special # 0 THEN + BEGIN CASE + CASE special = UP.ARROW + TPRINT form:PRMPT: + IF temp.form # NULL THEN + TPRINT temp.form: + TPRINT STR(SPACE,27-len(temp.form)): + END + ELSE + TPRINT group.defaults: + TPRINT STR(SPACE,27-len(group.defaults)): + END + form.line -=1 + IF form.line < 1 THEN + form.line = form.size + END + GOTO help.loop + CASE special = DOWN.ARROW + TPRINT form:PRMPT: + IF temp.form # NULL THEN + TPRINT temp.form: + TPRINT STR(SPACE,27-LEN(temp.form)): + END + ELSE + TPRINT group.defaults: + TPRINT STR(SPACE,27-LEN(group.defaults)): + END + form.line +=1 + IF form.line > form.size THEN + form.line = 1 + END + GOTO help.loop + CASE special = F.1 + CALL *HELP.PRINT.B(form<1,5>,3) + GOTO input.loop + CASE special = ESCAPE + STOP @(-1) + CASE special = F.10 + action.value=1 + CALL *DO.MNU.BAR.B(Menu.Bar,action.value,form.size,form,temp.form) + BEGIN CASE + CASE action.value = 1 + STOP @(-1) + CASE action.value = 2 + STOP @(-1) + CASE action.value = 3 + message=SFILE.MSG8 + CONVERT @FM TO " " IN message + CALL *HELP.BOX.B(3,10,60,message) + CASE action.value = 4 + message=UVREADMSG(076001,"") + CONVERT @FM TO " " IN message + CALL *HELP.BOX.B(3,10,60,message) + CASE action.value = 5 + CALL *HELP.BOX.B(3,10,45,UVREADMSG(076000,"")) + END CASE + CALL *PUT.FORM.B(form.size,form,temp.form,PRMPT,1) + GOTO help.loop + CASE 1 + GOTO input.loop + END CASE +END +ELSE + BEGIN CASE +* Checkpoint prompt + CASE form.line = 1 + * Only allow chkpoint to change if NOT tape + if ArchiveType # "TAPE" then + CheckPointMode = UPCASE( temp ) + IF CheckPointMode # "ON" AND CheckPointMode # "OFF" THEN + CALL *HELP.BOX.B( 10, 10, 40, "Must be either ON or OFF" ) + temp.form< form.line > = "" + TPRINT form:PRMPT:temp.form: + TPRINT STR(SPACE,16-LEN(temp.form)): + GOTO help.loop + END + end + temp.form< form.line > = UPCASE(temp) + TPRINT form:PRMPT:temp.form: + TPRINT STR(SPACE,16-LEN(temp.form)): +* Archive Mode prompt + CASE form.line = 2 + ArchiveMode = UPCASE(temp) + IF ArchiveMode # "ON" AND ArchiveMode # "OFF" THEN + CALL *HELP.BOX.B( 10, 10, 40, "Must be either ON or OFF" ) + temp.form< form.line > = "" + TPRINT form:PRMPT:temp.form: + TPRINT STR(SPACE,16-LEN(temp.form)): + GOTO help.loop + END + temp.form< form.line > = UPCASE(temp) + * Check for value of ArchiveMode + IF ArchiveMode = "OFF" THEN + * Display answer + TPRINT form:PRMPT:temp.form: + TPRINT STR(SPACE,16-LEN(temp.form)): + * Set Achive Type to N/A + ArchiveType="N/A" + form.line = 3 + temp.form="N/A" + TPRINT form:PRMPT:temp.form: + TPRINT STR(SPACE,16-LEN(temp.form)): + * Set DevicesList to N/A + ArchiveList = "" + form.line = 4 + temp.form="N/A" + TPRINT form:PRMPT:temp.form: + TPRINT STR(SPACE,16-LEN(temp.form)): + END +* Archive Type prompt - only if Archive Mode ON + CASE form.line = 3 + ArchiveType = UPCASE( temp ) + IF ArchiveType # "DISK" AND ArchiveType # "TAPE" THEN + CALL *HELP.BOX.B( 10, 10, 40, "Must be either DISK or TAPE" ) + temp.form< form.line > = "" + TPRINT form:PRMPT:temp.form: + TPRINT STR(SPACE,16-LEN(temp.form)): + GOTO help.loop + END + temp.form = UPCASE(temp) + TPRINT form:PRMPT:temp.form: + TPRINT STR(SPACE,16-LEN(temp.form)): + * Check for DISK + IF ArchiveType = "DISK" THEN + * Set DevicesList to N/A + form.line += 1 + temp.form="N/A" + TPRINT form:PRMPT:temp.form: + TPRINT STR(SPACE,16-LEN(temp.form)): + END ELSE + * Set Checkpoint to OFF + CheckPointMode = "OFF" + temp.form< 1 > = CheckPointMode + TPRINT form<1,2>:PRMPT:temp.form<1>: + TPRINT STR(SPACE,16-LEN(temp.form<1>)): + END + +* Archive Devices List - only if Archive Type TAPE + CASE form.line = 4 + ArchiveList = convert(" ",@VM,temp) +RESTART: + IF ArchiveList = "" THEN + CALL *HELP.BOX.B( 10, 10, 40, "At least ONE tape device must be defined." ) + * Repaint previous line + TPRINT form:PRMPT:temp.form: + TPRINT STR(SPACE,16-LEN(temp.form)): + * Repaint current line + temp.form< form.line > = "" + TPRINT form:PRMPT:temp.form: + TPRINT STR(SPACE,16-LEN(temp.form)): + GOTO help.loop + END + * Verify Devices List + VAL=0 + LOOP + REMOVE CURDEV FROM ArchiveList SETTING MARK + VAL += 1 + * Check in device file + READ DEVREC FROM DEVICE.FILE,CURDEV ELSE + CALL *HELP.BOX.B( 10, 10, 40, CURDEV:" is not in &DEVICE& file. Removed from list." ) + del ArchiveList<1,VAL> + goto RESTART + END + * Check if tape + IF DEVREC<4> # "DC" AND DEVREC<4> # "DT" THEN + CALL *HELP.BOX.B( 10, 10, 40, CURDEV:" is not a tape device. Removed from list." ) + del ArchiveList<1,VAL> + goto RESTART + END + UNTIL MARK = 0 DO REPEAT + temp.form = convert(@VM," ",ArchiveList) + TPRINT form:PRMPT:temp.form: + TPRINT STR(SPACE,16-LEN(temp.form)): + END CASE + form.line+=1 + + * more forms to prompt for? + IF form.line <= form.size THEN GOTO help.loop + + * Validation + IF ( CheckPointMode = "OFF" ) AND ( ArchiveMode = "OFF" ) THEN + message = "At least one attribute must be on!" + CALL *HELP.BOX.B( 10, 10, 40, message ) + temp.form< 1 > = "" + temp.form< 2 > = "" + CALL *PUT.FORM.B(form.size,form,temp.form,PRMPT,1) + form.line = 1 + GOTO help.loop + END + + * If TAPE, need to write ArchiveList to DICT UV_LOGS ARCHIVE F3. + IF ArchiveType = "TAPE" THEN + * Check for list + IF ArchiveList = "" THEN + CALL *HELP.BOX.B(10,10,40,"At least ONE tape device must be defined.") + form.line = 4 + temp.form< form.line > = "" + TPRINT form:PRMPT:temp.form: + TPRINT STR(SPACE,16-LEN(temp.form)): + GOTO help.loop + END + END + * Update + GOSUB set.attributes +END +STOP @(-1) + +************************************************************************* +* set.attributes +************************************************************************* +set.attributes: + Exec.Sentence = "SET.LOG.ATTR ARCHIVE ":ArchiveMode + * Check for Type + IF ArchiveType = "TAPE" THEN + Exec.Sentence := " DEVICELIST ":convert(@vm," ",ArchiveList) + END + Exec.Sentence := " CHECKPOINT ":CheckPointMode + EXECUTE Exec.Sentence CAPTURING message + CALL *HELP.BOX.B( 6, 10, 70, message ) +RETURN + +************************************************************************* +* verify.state +************************************************************************* +verify.state: + ;* Return the state of the server + State = "" + Attributes = "" + temp.form<1>="ON" + temp.form<2>="ON" + temp.form<3>="DISK" + temp.form<4>="N/A" + CP = 0 + AR = 0 + proceed = 0 + * Get state of logging system + RECIO( State, FINFO$AI.STATE, RECIO$FINFO ) + * Check if FULL TAPE + if State = AI$FULL then + RECIO( AR, FINFO$AI.ARCHIVE.TAPE, RECIO$FINFO ) + if AR = 4 then proceed = 1 + end + * Only proceed if necessary + IF State = AI$UNINIT OR State = AI$DISABLED OR State = AI$SUSPENDED OR State = AI$INACTIVE OR proceed THEN + RECIO( CP, FINFO$AI.CHECKPOINT, RECIO$FINFO ) + IF CP = 0 THEN + temp.form<1> = "OFF" + END + RECIO( AR, FINFO$AI.ARCHIVE, RECIO$FINFO ) + IF AR = 0 THEN + temp.form<2> = "OFF" + temp.form<3> = "N/A" + END ELSE + * Check for tape + RECIO( AR, FINFO$AI.ARCHIVE.TAPE, RECIO$FINFO ) + IF AR = 4 THEN + temp.form<3> = "TAPE" + * Now get devices + DV = "" + RECIO( DV, 0, RECIO$DEVICELIST ) + temp.form<4> = convert(@vm," ",DV) + END + END + END + ELSE + message = "Logging must be either SUSPENDED or SHUTDOWN" + CALL *HELP.BOX.B( 6, 10, 60, message ) + STOP @(-1) + END + + CheckPointMode = temp.form<1> + ArchiveMode = temp.form<2> + ArchiveType = temp.form<3> + ArchiveList = convert(@vm," ",temp.form<4>) + RETURN +************************************************************************* +* Init.form +* This routine is used TO initialize the form TO be printed on the +* screen for data input. It also sets up the default answers, if +* any +* +************************************************************************* +init.form: + temp.form = NULL + temp.form<1>= "ON" + temp.form<2>= "ON" + temp.form<3>= "DISK" + temp.form<4>= "" + form.size = 4 + form.line = 1 + form = NULL +* setup Checkpoint Mode + form<1,1> = @(5,6) + form<1,2> = @(40,6) + form<1,3> = SFILE.MSG6 + form<1,4> = SFILE.MSG7 + form<1,5> = form<1,4> + form<1,6> = 10 +* setup Archive Mode + form<2,1> = @(5,8) + form<2,2> = @(40,8) + form<2,3> = SFILE.MSG4 + form<2,4> = SFILE.MSG5 + form<2,5> = form<2,4> + form<2,6> = 36 +* setup Archive Type + form<3,1> = @(5,10) + form<3,2> = @(40,10) + form<3,3> = SFILE.MSG9 + form<3,4> = SFILE.MSG10 + form<3,5> = form<3,4> + form<3,6> = 10 +* setup Archive Tape Devices list + form<4,1> = @(5,12) + form<4,2> = @(40,12) + form<4,3> = SFILE.MSG11 + form<4,4> = SFILE.MSG12 + form<4,5> = form<4,4> + form<4,6> = 40 +* setup defaults + group.defaults = NULL + group.defaults<1> = "ON" + group.defaults<2> = "ON" + group.defaults<3> = "DISK" + group.defaults<4> = "N/A" +RETURN + +*************************************************************************** +* init.menu - initializes menu bar +*************************************************************************** +init.menu: + scratch=UVREADMSG(073087,"") + Menu.Bar = NULL + Menu.Bar<1,1> = 3 ;* Number of Items in Menu.Bar + Menu.Bar<1,2> = 1 ;* Line # on which to print the Menu Bar +* First Item + Menu.Bar<2,1,1>=scratch<1> ;* SubMenu Title + Menu.Bar<2,1,2>=1 ;* # of items in SubMenu +* SubMenu #1 + Menu.Bar<2,2,1>=scratch<6> ;* SubMenu Item + Menu.Bar<2,2,2>=1 ;* Action Code (Returned to calling process) + Menu.Bar<2,2,3>=scratch<7> +* Second Item + Menu.Bar<3,1,1>=scratch<8> ;* SubMenu Title + Menu.Bar<3,1,2>=1 ;* # of items in SubMenu +* SubMenu #1 + Menu.Bar<3,2,1>=scratch<6> ;* SubMenu Item + Menu.Bar<3,2,2>=2 ;* Action Code + Menu.Bar<3,2,3>=scratch<7> + scratch=UVREADMSG(073089,"") + Menu.Bar<4,1,1>=scratch<1> + Menu.Bar<4,1,2>=3 + Menu.Bar<4,2,1>=scratch<2> + Menu.Bar<4,2,2>=3 + Menu.Bar<4,2,3>=scratch<3> + Menu.Bar<4,3,1>=scratch<4> + Menu.Bar<4,3,2>=4 + Menu.Bar<4,3,3>=scratch<5> + Menu.Bar<4,4,1>=scratch<6> + Menu.Bar<4,4,2>=5 + Menu.Bar<4,4,3>=scratch<7> +RETURN +STOP @(-1) +END diff --git a/Ardent/UV/APP.PROGS/TL.SHUT.B b/Ardent/UV/APP.PROGS/TL.SHUT.B new file mode 100755 index 00000000..52b67124 --- /dev/null +++ b/Ardent/UV/APP.PROGS/TL.SHUT.B @@ -0,0 +1,119 @@ +$INCLUDE UNIVERSE.INCLUDE MTF.INCL.H +$INCLUDE UNIVERSE.INCLUDE FILENAMES.H +$INCLUDE UNIVERSE.INCLUDE MACHINE.NAME +$INCLUDE UNIVERSE.INCLUDE TLOG.H +****************************************************************************** +* +* System Admin Transaction Logging - Shutdown Logging +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description........................................ +* 10/14/98 23801 SAP Change copyrights. +* 10/21/94 15120 DTM Changes for new states (shut/susp in progress) +* 05/15/94 13286 DTM Initial programming +* +******************************************************************************* +id = "%W%" +******************************************************************************* + +******************************************************************************* +* Call initialization routines +******************************************************************************* +TPRINT @(-1) +temp = NULL +CALL *ISUSER.B(0, temp) +IF temp = 0 THEN + TPRINT UVREADMSG(071000,"") + SLEEP 3 + STOP +END +******************************************************************************* +* Begin processing +******************************************************************************* +CALL *DRAW.SCRN.B( SHUT.MSG0, 1) +GOSUB init.menu +CALL *MNU.BAR.PR.B(Menu.Bar,1) + +State = "" +RECIO( State, FINFO$AI.STATE, RECIO$FINFO ) + +stop = 0 +IF State NE AI$LOGGING AND State NE AI$FULL AND State NE AI$SUSPENDED THEN + IF State = AI$WARM.START OR State = AI$INITIAL THEN + msg = "System is just now coming up, please be patient as the " + msg := "SHUTDOWN procedure may take some time to complete." + END + ELSE IF State = AI$SHUT.PROG THEN + msg = "System is currently in the process of being SHUTDOWN." + stop = 1 + END + ELSE + msg = "System is not in a state that can be SHUTDOWN at this moment." + stop = 1 + END + CALL *HELP.BOX.B( 3, 10, 45, msg ) + IF stop THEN + STOP @(-1) + END +END +retry = 1 +CALL *HELP.PRINT.B( SHUT.MSG1, 3 ) +CALL *YES.NO.BOX.B( 6, SHUT.MSG2, retry ) +IF retry THEN + EXECUTE "SHUTDOWN.RECOVERY" CAPTURING Error.Val + Error.Val = TRIM ( Error.Val ) + CALL *HELP.BOX.B( 3, 10, 60, Error.Val ) +END +GOTO EXIT + +RETURN + +*************************************************************************** +* init.menu - initializes menu bar +*************************************************************************** +init.menu: + scratch=UVREADMSG(073087,"") + Menu.Bar = NULL + Menu.Bar<1,1> = 3 ;* Number of Items in Menu.Bar + Menu.Bar<1,2> = 1 ;* Line # on which to print the Menu Bar +* First Item + Menu.Bar<2,1,1>=scratch<1> ;* SubMenu Title + Menu.Bar<2,1,2>=1 ;* # of items in SubMenu +* SubMenu #1 + Menu.Bar<2,2,1>=scratch<6> ;* SubMenu Item + Menu.Bar<2,2,2>=1 ;* Action Code (Returned to calling process) + Menu.Bar<2,2,3>=scratch<7> +* Second Item + Menu.Bar<3,1,1>=scratch<8> ;* SubMenu Title + Menu.Bar<3,1,2>=1 ;* # of items in SubMenu +* SubMenu #1 + Menu.Bar<3,2,1>=scratch<6> ;* SubMenu Item + Menu.Bar<3,2,2>=2 ;* Action Code + Menu.Bar<3,2,3>=scratch<7> + scratch=UVREADMSG(073089,"") + Menu.Bar<4,1,1>=scratch<1> + Menu.Bar<4,1,2>=3 + Menu.Bar<4,2,1>=scratch<2> + Menu.Bar<4,2,2>=3 + Menu.Bar<4,2,3>=scratch<3> + Menu.Bar<4,3,1>=scratch<4> + Menu.Bar<4,3,2>=4 + Menu.Bar<4,3,3>=scratch<5> + Menu.Bar<4,4,1>=scratch<6> + Menu.Bar<4,4,2>=5 + Menu.Bar<4,4,3>=scratch<7> +RETURN + +EXIT: + STOP @(-1) +END diff --git a/Ardent/UV/APP.PROGS/TL.STAT.B b/Ardent/UV/APP.PROGS/TL.STAT.B new file mode 100755 index 00000000..ad43e990 --- /dev/null +++ b/Ardent/UV/APP.PROGS/TL.STAT.B @@ -0,0 +1,93 @@ +$INCLUDE UNIVERSE.INCLUDE MTF.INCL.H +$INCLUDE UNIVERSE.INCLUDE FILENAMES.H +$INCLUDE UNIVERSE.INCLUDE MACHINE.NAME +****************************************************************************** +* +* System Admin Transaction Logging - Get Status of UV_LOGS files +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description........................................ +* 10/14/98 23801 SAP Change copyrights. +* 07/18/94 13286 DTM Fixed paging problem +* 05/15/94 13286 DTM Initial programming +* +******************************************************************************* +id = "%W%" +******************************************************************************* +TPRINT @(-1) +******************************************************************************* +input.loop: +Wid = SYSTEM( 2 ) +Len = SYSTEM( 3 ) + +OldWid = Wid +OldLen = Len +Stmt = "TERM ":Wid:",9999,0,0" +PERFORM Stmt +List.Command = "LIST UV.TRANS" +EXECUTE List.Command CAPTURING List.Output +GOSUB printit +sel.value=1 +CALL *HELP.BOX.B(17,5,50,UVREADMSG(001403,"")) +GOTO Ending +STOP @(-1) + +********************************************************************** +* printit: +* routine TO output data to screen +********************************************************************** +printit: + +output=List.Output +output.test=output +output.test=CONVERT(@FM," ",output.test) +output.test=TRIM(output.test) +IF output.test=NULL OR output.test=" " THEN + output<1>=STR(" ",30):"No files to list" +END +output.count = COUNT(output,@FM)+1 +line.count=0 +FOR i=3 TO 15 + TPRINT @(0,i):@(-4): +NEXT i +Start: +sel.value=1 +FOR i=2 TO 14 + IF i > output.count THEN + GOTO Ending + END + TPRINT @(0,i+1):output: +NEXT i +line.count+=13 +IF line.count < output.count THEN + scratch=UVREADMSG(073052,"") + B.array=NULL + B.array<1>=2 + B.array<2>="Ok" + B.array<3>="Cancel" + CALL *CHOICE.BOX.B(17,3,35,scratch<1>,B.array,sel.value,"") + IF sel.value = 1 OR sel.value = -1 THEN + RETURN + END + FOR i=3 TO 15 + TPRINT @(0,i):@(-4): + NEXT i + GOTO Start +END + +Ending: +Stmt = "TERM ":Wid:",":Len:",0,0" +PERFORM Stmt +RETURN + +END diff --git a/Ardent/UV/APP.PROGS/TL.SUSPEND.B b/Ardent/UV/APP.PROGS/TL.SUSPEND.B new file mode 100755 index 00000000..f3ef9df0 --- /dev/null +++ b/Ardent/UV/APP.PROGS/TL.SUSPEND.B @@ -0,0 +1,114 @@ +$INCLUDE UNIVERSE.INCLUDE MTF.INCL.H +$INCLUDE UNIVERSE.INCLUDE FILENAMES.H +$INCLUDE UNIVERSE.INCLUDE MACHINE.NAME +$INCLUDE UNIVERSE.INCLUDE TLOG.H + +****************************************************************************** +* +* System Admin Transaction Logging - Suspend Logging +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description........................................ +* 10/14/98 23801 SAP Change copyrights. +* 10/21/94 15120 DTM Added checks for two new states +* 05/15/94 13286 DTM Initial programming +* +******************************************************************************* +id = "%W%" +******************************************************************************* + +******************************************************************************* +* Call initialization routines +******************************************************************************* +TPRINT @(-1) +temp = NULL +CALL *ISUSER.B(0, temp) +IF temp = 0 THEN + TPRINT UVREADMSG(071000,"") + SLEEP 3 + STOP +END +******************************************************************************* +* Begin processing +******************************************************************************* +CALL *DRAW.SCRN.B( SUSP.MSG0, 1 ) +GOSUB init.menu +CALL *MNU.BAR.PR.B( Menu.Bar,1 ) + +State = "" +RECIO( State, FINFO$AI.STATE, RECIO$FINFO ) + +IF State NE AI$LOGGING THEN + IF State = AI$SUSPENDED THEN + msg = "Logging is already SUSPENDED" + END + IF State = AI$SUSP.PROG THEN + msg = "Logging is currently in the process of being Suspended" + END + ELSE + msg = "Logging is not currently ENABLED" + END + CALL *HELP.BOX.B( 6, 10, 35, msg ) + STOP @(-1) +END +retry = 1 +CALL *HELP.PRINT.B( SUSP.MSG1, 3 ) +CALL *YES.NO.BOX.B( 6, SUSP.MSG2, retry ) +IF retry THEN + EXECUTE "SUSPEND.RECOVERY" CAPTURING Error.Val + Error.Val = TRIM ( Error.Val ) + CALL *HELP.BOX.B( 3, 10, 60, Error.Val ) +END +GOTO EXIT + +RETURN + +*************************************************************************** +* init.menu - initializes menu bar +*************************************************************************** +init.menu: + scratch=UVREADMSG(073087,"") + Menu.Bar = NULL + Menu.Bar<1,1> = 3 ;* Number of Items in Menu.Bar + Menu.Bar<1,2> = 1 ;* Line # on which to print the Menu Bar +* First Item + Menu.Bar<2,1,1>=scratch<1> ;* SubMenu Title + Menu.Bar<2,1,2>=1 ;* # of items in SubMenu +* SubMenu #1 + Menu.Bar<2,2,1>=scratch<6> ;* SubMenu Item + Menu.Bar<2,2,2>=1 ;* Action Code (Returned to calling process) + Menu.Bar<2,2,3>=scratch<7> +* Second Item + Menu.Bar<3,1,1>=scratch<8> ;* SubMenu Title + Menu.Bar<3,1,2>=1 ;* # of items in SubMenu +* SubMenu #1 + Menu.Bar<3,2,1>=scratch<6> ;* SubMenu Item + Menu.Bar<3,2,2>=2 ;* Action Code + Menu.Bar<3,2,3>=scratch<7> + scratch=UVREADMSG(073089,"") + Menu.Bar<4,1,1>=scratch<1> + Menu.Bar<4,1,2>=3 + Menu.Bar<4,2,1>=scratch<2> + Menu.Bar<4,2,2>=3 + Menu.Bar<4,2,3>=scratch<3> + Menu.Bar<4,3,1>=scratch<4> + Menu.Bar<4,3,2>=4 + Menu.Bar<4,3,3>=scratch<5> + Menu.Bar<4,4,1>=scratch<6> + Menu.Bar<4,4,2>=5 + Menu.Bar<4,4,3>=scratch<7> +RETURN + +EXIT: + STOP @(-1) +END diff --git a/Ardent/UV/APP.PROGS/TL.TLDET.B b/Ardent/UV/APP.PROGS/TL.TLDET.B new file mode 100755 index 00000000..e36a7411 --- /dev/null +++ b/Ardent/UV/APP.PROGS/TL.TLDET.B @@ -0,0 +1,94 @@ +$INCLUDE UNIVERSE.INCLUDE MTF.INCL.H +$INCLUDE UNIVERSE.INCLUDE FILENAMES.H +$INCLUDE UNIVERSE.INCLUDE MACHINE.NAME +****************************************************************************** +* +* System Admin Transaction Logging - List Details +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description........................................ +* 10/14/98 23801 SAP Change copyrights. +* 07/18/94 13286 DTM Fixed paging problem +* 07/14/94 13286 DTM Made it list BY.DSND order +* 05/15/94 13286 DTM Initial programming +* +******************************************************************************* +id = "%W%" +******************************************************************************* +TPRINT @(-1) +******************************************************************************* +input.loop: +Wid = SYSTEM( 2 ) +Len = SYSTEM( 3 ) + +OldWid = Wid +OldLen = Len +Stmt = "TERM ":Wid:",9999,0,0" +PERFORM Stmt +List.Command = "LIST UV_LOGS BY.DSND @ID" +EXECUTE List.Command CAPTURING List.Output +GOSUB printit +sel.value=1 +CALL *HELP.BOX.B(17,5,50,UVREADMSG(001403,"")) +GOTO Ending +STOP @(-1) + +********************************************************************** +* printit: +* routine TO output data to screen +********************************************************************** +printit: + +output=List.Output +output.test=output +output.test=CONVERT(@FM," ",output.test) +output.test=TRIM(output.test) +IF output.test=NULL OR output.test=" " THEN + output<1>=STR(" ",30):"No files to list" +END +output.count = COUNT(output,@FM)+1 +line.count=0 +FOR i=3 TO 15 + TPRINT @(0,i):@(-4): +NEXT i +Start: +sel.value=1 +FOR i=2 TO 14 + IF i > output.count THEN + GOTO Ending + END + TPRINT @(0,i+1):output: +NEXT i +line.count+=13 +IF line.count < output.count THEN + scratch=UVREADMSG(073052,"") + B.array=NULL + B.array<1>=2 + B.array<2>="Ok" + B.array<3>="Cancel" + CALL *CHOICE.BOX.B(17,3,35,scratch<1>,B.array,sel.value,"") + IF sel.value = 1 OR sel.value = -1 THEN + RETURN + END + FOR i=3 TO 15 + TPRINT @(0,i):@(-4): + NEXT i + GOTO Start +END + +Ending: +Stmt = "TERM ":Wid:",":Len:",0,0" +PERFORM Stmt +RETURN + +END diff --git a/Ardent/UV/APP.PROGS/TL.TRANS.B b/Ardent/UV/APP.PROGS/TL.TRANS.B new file mode 100755 index 00000000..068ee537 --- /dev/null +++ b/Ardent/UV/APP.PROGS/TL.TRANS.B @@ -0,0 +1,358 @@ +$INCLUDE UNIVERSE.INCLUDE MTF.INCL.H +$INCLUDE UNIVERSE.INCLUDE FILENAMES.H +$INCLUDE UNIVERSE.INCLUDE MACHINE.NAME +$INCLUDE UNIVERSE.INCLUDE TLOG.H +****************************************************************************** +* +* System Admin Transaction Logging - Tranfer Logs toMedia +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description........................................ +* 10/14/98 23801 SAP Change copyrights. +* 08/26/96 18966 GMH Correct device field +* 03/25/96 18212 LAG Windows NT port +* 08/04/95 16158 DTM Fixed problem with releasing non-full files +* 03/09/95 15868 DTM Fixed problem where files were released even with error +* in backup +* 11/02/94 15225 DTM Added message of 'Working...' +* 10/12/94 15101 DTM Changed length of log number field +* 05/15/94 13286 DTM Initial programming +* +******************************************************************************* +id = "%W%" + +****************** +** Windows NT port +** +DEFFUN IS.FULLPATH(FILESPEC) CALLING "*IS.FULLPATH" + +UV.TMP = SYSTEM(38) +TLSAVE.OK = UV.TMP:"/tlsave.ok" +** +****************** + +******************************************************************************* +TPRINT @(-1) +temp = NULL +CALL *ISUSER.B(0, temp) +IF temp = 0 THEN + TPRINT UVREADMSG(071000,"") + SLEEP 3 + STOP +END +******************************************************************************* +GOSUB init.form +CALL *DRAW.SCRN.B( "Save Log Files", 1 ) +GOSUB init.menu +CALL *MNU.BAR.PR.B(Menu.Bar,1) + +******************************************************************************* +* Begin processing +******************************************************************************* + +CALL *HELP.PRINT.B(UVREADMSG(073009,""),2) +CALL *PUT.FORM.B(form.size,form,temp.form,PRMPT,1) + +help.loop: + +CALL *HELP.PRINT.B(form,1) + +input.loop: + +TPRINT form: +temp=temp.form +CALL *CINPUT.B(SEC.PRMPT,temp,special,form,0) + +IF special # 0 THEN + BEGIN CASE + CASE special = UP.ARROW + GOTO help.loop + CASE special = DOWN.ARROW + GOTO help.loop + CASE special = F.1 + CALL *HELP.PRINT.B(form< form.line,5>,3) + GOTO input.loop + CASE special = ESCAPE + STOP @(-1) + CASE special = F.4 + temp = "*" + GOTO new.enter + CASE special = F.10 + action.value=1 + CALL *DO.MNU.BAR.B(Menu.Bar,action.value,form.size,form,temp.form) + BEGIN CASE + CASE action.value = 1 + STOP @(-1) + CASE action.value = 2 + STOP @(-1) + CASE action.value = 3 + message=UVREADMSG(073634,"") + CONVERT @FM TO " " IN message + CALL *HELP.BOX.B(3,10,60,message) + CASE action.value = 4 + message=UVREADMSG(076001,"") + CONVERT @FM TO " " IN message + CALL *HELP.BOX.B(3,10,60,message) + CASE action.value = 5 + CALL *HELP.BOX.B(3,10,45,UVREADMSG(076000,"")) + END CASE + CALL *PUT.FORM.B(form.size,form,temp.form,PRMPT,1) + GOTO help.loop + CASE 1 + GOTO input.loop + END CASE +END +ELSE +BEGIN CASE + CASE form.line = 1 +new.enter: + IF temp = "*" THEN + CALL *HELP.PRINT.B(UVREADMSG(073058,""),2) + help.message = CONVERT(@FM, " ", UVREADMSG(073644,"")) + CALL *HELP.PRINT.B(help.message, 2) + sel.val = 1 + CALL *PTBCODE(device.file,2,sel.val) + CALL *HELP.PRINT.B(NULL,3) + IF sel.val = -1 THEN + temp = NULL + CALL *PUT.FORM.B(form.size, form, temp.form, PRMPT,1) + GOTO help.loop + END + ELSE + temp = sel.val + temp.form=temp + END + CALL *PUT.FORM.B(form.size, form, temp.form, PRMPT, 1) + END + IF temp = NULL THEN + Blank.Message = @SYS.BELL:UVREADMSG(071004,"") + CALL *HELP.BOX.B(11,5,50,Blank.Message) + CALL *PUT.FORM.B(form.size, form, temp.form, PRMPT,1) + GOTO help.loop + END + tmpdev = temp + temp.form< form.line > = temp + CASE form.line = 2 + IF temp MATCHES "0N" THEN + FirstLog = temp + temp.form< form.line > = temp + END + ELSE + message = "Answer must be a numeric value" + CALL *HELP.BOX.B(11,5,50,message) + temp.form = "" + CALL *PUT.FORM.B(form.size, form, temp.form, PRMPT,1) + GOTO help.loop + END + CASE form.line = 3 + IF temp > LastLog THEN + message = "Range includes files not ready for transfer. Value must be less than or equal to ":LastLog + CALL *HELP.BOX.B(10,5,50,message) + temp.form = LastLog + CALL *PUT.FORM.B(form.size, form, temp.form, PRMPT,1) + GOTO help.loop + END + IF temp MATCHES "0N" THEN + LastLog = temp + temp.form< form.line > = temp + END + ELSE + message = "Answer must be a numeric value" + CALL *HELP.BOX.B(11,5,50,message) + temp.form = "" + CALL *PUT.FORM.B(form.size, form, temp.form, PRMPT,1) + GOTO help.loop + END +END CASE + TPRINT form:PRMPT:temp.form: + TPRINT STR(SPACE,16-LEN(temp.form)): + form.line+=1 + + IF form.line <= form.size THEN + GOTO help.loop + END +END +GOSUB transfer.release +CALL *HELP.BOX.B(17,5,50,UVREADMSG(001403,"")) +STOP @(-1) + +********************************************************************** +* transfer.release: +********************************************************************** +transfer.release: + ;* Verify device + + ****************** + ** Windows NT port + ** + IF IS.FULLPATH(tmpdev) THEN + DeviceName = tmpdev + END ELSE + READ tmpREC FROM device.file, tmpdev THEN + DeviceName = tmpREC<6> + END + ELSE + DeviceName = tmpdev + END + END + ** + ****************** + + msg = "Please prepare Tape Device and hit to back up files" + CALL *HELP.BOX.B(10,5,50, msg) + + + ;* verify that the log numbers are sequential in number + + FOR i = 1 TO id.number + IF id.array< i > # ( FirstLog - 1 + i ) THEN + msg = "Logs not in sequental order" + CALL *HELP.BOX.B(10,5,50, msg) + GOTO EXIT + END + NEXT i + + ;* Ok, verified that they are sequential in number + ;* First, we should back them up to tape + + PATH = "" + RECIO( PATH, RECIO$PATH ) + + exec.sentence = OS.EXEC:" '":UV.ROOT:"/bin/tlsave ":PATH:" -from " + exec.sentence := FirstLog:" -to ":LastLog:" -mt ":DeviceName:"'" + + TPRINT @(-1) + PRINT "Backing up log file lg":FirstLog:" to lg":LastLog + EXECUTE exec.sentence + + ;* Did it work ? + + ****************** + ** Windows NT port + ** + tl.fvar = "" + OPENSEQ TLSAVE.OK TO tl.fvar THEN + + CLOSESEQ tl.fvar + + PRINT "Finished with file backup" + PRINT "Now Releasing Files" + + ;* Now, files are backed up, need to release them + FOR i = FirstLog TO LastLog + PRINT "Release File lg":i + exec.sentence = "RELEASE.LFILE ":i + EXECUTE exec.sentence + NEXT i + CLOSE device.file + END + ELSE + PRINT "Error occured during back up of files... Files not released" + END + ** + ****************** +RETURN + +************************************************************************* +* Init.form +* This routine is used TO initialize the form TO be printed on the +* screen for data input. It also sets up the default answers, if +* any +* +************************************************************************* +init.form: + ;* Get list of all qualified + EXECUTE "SSELECT UV_LOGS WITH STATUS = Full BY @ID TO 0" CAPTURING junk + + READLIST id.array ELSE + ;* If no logs with STATUS = Full are present... + msg = "No Logs are currently available (None are currently FULL)" + CALL *HELP.BOX.B(10,5,50, msg) + GOTO EXIT + END + + id.number = DCOUNT( id.array, @FM ) + FirstLog = id.array< 1 > + LastLog = id.array< id.number > + form = NULL + temp.form = NULL + temp.form<1> = "MT0" + temp.form<2> = FirstLog + temp.form<3> = LastLog + form.size = 3 + form.line = 1 + form<1,1> = @(5,7) + form<1,2> = @(30, 7) + form<1,3> = "Name of Device" + form<1,4> = "Name of the UniVerse device or Pathname from which to save." + form<1,5> = form<1,4> + form<1,6> = 45 + form<2,1> = @(5,9) + form<2,2> = @(30, 9) + form<2,3> = "First Log to Backup" + form<2,4> = "Enter the number of the first log file to back up" + form<2,5> = form<1,4> + form<2,6> = 9 + form<3,1> = @(5,11) + form<3,2> = @(30, 11) + form<3,3> = "Last Log to Backup" + form<3,4> = "Enter the number of the last log file to back up" + form<3,5> = form<1,4> + form<3,6> = 9 + + OPEN "","&DEVICE&" TO device.file ELSE + CALL *HELP.BOX.B( 5, 5, 50, "Cannot open &DEVICE& file!" ) + STOP @(-1) + END + RETURN + +*************************************************************************** +* init.menu - initializes menu bar +*************************************************************************** +init.menu: + scratch=UVREADMSG(073087,"") + Menu.Bar = NULL + Menu.Bar<1,1> = 3 ;* Number of Items in Menu.Bar + Menu.Bar<1,2> = 1 ;* Line # on which to print the Menu Bar +* First Item + Menu.Bar<2,1,1>=scratch<1> ;* SubMenu Title + Menu.Bar<2,1,2>=1 ;* # of items in SubMenu +* SubMenu #1 + Menu.Bar<2,2,1>=scratch<6> ;* SubMenu Item + Menu.Bar<2,2,2>=1 ;* Action Code (Returned to calling process) + Menu.Bar<2,2,3>=scratch<7> +* Second Item + Menu.Bar<3,1,1>=scratch<8> ;* SubMenu Title + Menu.Bar<3,1,2>=1 ;* # of items in SubMenu +* SubMenu #1 + Menu.Bar<3,2,1>=scratch<6> ;* SubMenu Item + Menu.Bar<3,2,2>=2 ;* Action Code + Menu.Bar<3,2,3>=scratch<7> + scratch=UVREADMSG(073089,"") + Menu.Bar<4,1,1>=scratch<1> + Menu.Bar<4,1,2>=3 + Menu.Bar<4,2,1>=scratch<2> + Menu.Bar<4,2,2>=3 + Menu.Bar<4,2,3>=scratch<3> + Menu.Bar<4,3,1>=scratch<4> + Menu.Bar<4,3,2>=4 + Menu.Bar<4,3,3>=scratch<5> + Menu.Bar<4,4,1>=scratch<6> + Menu.Bar<4,4,2>=5 + Menu.Bar<4,4,3>=scratch<7> +RETURN + +EXIT: + STOP + +END diff --git a/Ardent/UV/APP.PROGS/TL.TREADY.B b/Ardent/UV/APP.PROGS/TL.TREADY.B new file mode 100755 index 00000000..7166b3c3 --- /dev/null +++ b/Ardent/UV/APP.PROGS/TL.TREADY.B @@ -0,0 +1,93 @@ +$INCLUDE UNIVERSE.INCLUDE MTF.INCL.H +$INCLUDE UNIVERSE.INCLUDE FILENAMES.H +$INCLUDE UNIVERSE.INCLUDE MACHINE.NAME +****************************************************************************** +* +* System Admin Transaction Logging - List File Ready for Transfer +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description........................................ +* 10/14/98 23801 SAP Change copyrights. +* 07/18/94 13286 DTM Fixed paging problem +* 05/15/94 13286 DTM Initial programming +* +******************************************************************************* +id = "%W%" +******************************************************************************* +TPRINT @(-1) +******************************************************************************* +input.loop: +Wid = SYSTEM( 2 ) +Len = SYSTEM( 3 ) + +OldWid = Wid +OldLen = Len +Stmt = "TERM ":Wid:",9999,0,0" +PERFORM Stmt +List.Command = "LIST UV_LOGS WITH STATUS = Full BY @ID" +EXECUTE List.Command CAPTURING List.Output +GOSUB printit +sel.value=1 +CALL *HELP.BOX.B(17,5,50,UVREADMSG(001403,"")) +GOTO Ending +STOP @(-1) + +********************************************************************** +* printit: +* routine TO output data to screen +********************************************************************** +printit: + +output=List.Output +output.test=output +output.test=CONVERT(@FM," ",output.test) +output.test=TRIM(output.test) +IF output.test=NULL OR output.test=" " THEN + output<1>=STR(" ",30):"No files to list" +END +output.count = COUNT(output,@FM)+1 +line.count=0 +FOR i=3 TO 15 + TPRINT @(0,i):@(-4): +NEXT i +Start: +sel.value=1 +FOR i=2 TO 14 + IF i > output.count THEN + GOTO Ending + END + TPRINT @(0,i+1):output: +NEXT i +line.count+=13 +IF line.count < output.count THEN + scratch=UVREADMSG(073052,"") + B.array=NULL + B.array<1>=2 + B.array<2>="Ok" + B.array<3>="Cancel" + CALL *CHOICE.BOX.B(17,3,35,scratch<1>,B.array,sel.value,"") + IF sel.value = 1 OR sel.value = -1 THEN + RETURN + END + FOR i=3 TO 15 + TPRINT @(0,i):@(-4): + NEXT i + GOTO Start +END + +Ending: +Stmt = "TERM ":Wid:",":Len:",0,0" +PERFORM Stmt +RETURN + +END diff --git a/Ardent/UV/APP.PROGS/TL.VDELETE.B b/Ardent/UV/APP.PROGS/TL.VDELETE.B new file mode 100755 index 00000000..b97fb58e --- /dev/null +++ b/Ardent/UV/APP.PROGS/TL.VDELETE.B @@ -0,0 +1,58 @@ +$INCLUDE UNIVERSE.INCLUDE MTF.INCL.H +$INCLUDE UNIVERSE.INCLUDE FILENAMES.H +$INCLUDE UNIVERSE.INCLUDE MACHINE.NAME +$INCLUDE UNIVERSE.INCLUDE TLOG.H +****************************************************************************** +* +* System Admin Transaction Logging - Delete Error Logs +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description........................................ +* 10/14/98 23801 SAP Change copyrights. +* 05/22/96 18438 JC Fix execute for NT. +* 03/25/96 18212 LAG Windows NT port +* 05/15/94 13286 DTM Initial programming +* +******************************************************************************* +id = "%W%" +******************************************************************************* +TPRINT @(-1) +******************************************************************************* +LOG = FIELD( @SENTENCE, " ", 4 ) +file = "" +RECIO( file, RECIO$PATH ) +file := "/" + +BEGIN CASE + CASE LOG = "ERROR" + file := "uvlogd.info" + CASE LOG = "CHECKPOINT" + file := "uvchkd.info" + CASE LOG = "ROLLFORWARD" + file := "uvrolf.info" + CASE 1 + file := "uvlogd.info" +END CASE + +message = "Do you wish to DELETE ":file:"?" + +reply = 0 +CALL *YES.NO.BOX.B(9, message, reply ) +IF reply THEN + command = OS.EXEC:" '":RM.CMD:" -f ":file:"'" + EXECUTE command CAPTURING nothing +END + +STOP @(-1) + +END diff --git a/Ardent/UV/APP.PROGS/TL.VERROR.B b/Ardent/UV/APP.PROGS/TL.VERROR.B new file mode 100755 index 00000000..1462d554 --- /dev/null +++ b/Ardent/UV/APP.PROGS/TL.VERROR.B @@ -0,0 +1,69 @@ +$INCLUDE UNIVERSE.INCLUDE MTF.INCL.H +$INCLUDE UNIVERSE.INCLUDE FILENAMES.H +$INCLUDE UNIVERSE.INCLUDE MACHINE.NAME +$INCLUDE UNIVERSE.INCLUDE TLOG.H +****************************************************************************** +* +* System Admin Transaction Logging - View Error Logs +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description........................................ +* 10/14/98 23801 SAP Change copyrights. +* 03/25/96 18212 LAG Windows NT port +* 05/15/94 13286 DTM Initial programming +* +******************************************************************************* +id = "%W%" +******************************************************************************* +TPRINT @(-1) +******************************************************************************* +LOG = FIELD( @SENTENCE, " ", 4 ) +file = "" +RECIO( file, RECIO$PATH ) +file := "/" + +BEGIN CASE + CASE LOG = "ERROR" + file := "uvlogd.info" + CASE LOG = "CHECKPOINT" + file := "uvchkd.info" + CASE LOG = "ROLLFORWARD" + file := "uvrolf.info" + CASE 1 + file := "uvlogd.info" +END CASE + +****************** +** Windows NT port +** +IF OS.TYPE = "UNIX" THEN + List.Command = OS.EXEC:" '":"cat ":file:" | more":"'" +END ELSE + file = CONVERT("/", "\", file) + List.Command = OS.EXEC:" '":"MORE /E ":file:"'" +END +** +****************** + +EXECUTE List.Command +PRINT +PRINT +PRINT +PRINT +PRINT +sel.value=1 +Lines = SYSTEM( 3 ) +CALL *HELP.BOX.B(Lines - 6,5,50,UVREADMSG(001403,"")) +STOP @(-1) + +END diff --git a/Ardent/UV/APP.PROGS/TRIMBS b/Ardent/UV/APP.PROGS/TRIMBS new file mode 100755 index 00000000..070b6dfb --- /dev/null +++ b/Ardent/UV/APP.PROGS/TRIMBS @@ -0,0 +1,26 @@ +******************************************************************************* +* +* Support of PR1ME INFORMATION subroutine '-TRIMBS' +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description......................................... +* 10/14/98 23801 SAP Change copyrights. +* 10/03/88 5465 DTW implement TRIMBS +* +******************************************************************************* + +$OPTIONS DEFAULT + +subroutine PR1ME(ans,m1) + ans = TRIMBS(m1) +return diff --git a/Ardent/UV/APP.PROGS/TRIMFS b/Ardent/UV/APP.PROGS/TRIMFS new file mode 100755 index 00000000..915f89bd --- /dev/null +++ b/Ardent/UV/APP.PROGS/TRIMFS @@ -0,0 +1,26 @@ +******************************************************************************* +* +* Support of PR1ME INFORMATION subroutine '-TRIMFS' +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description......................................... +* 10/14/98 23801 SAP Change copyrights. +* 10/03/88 5465 DTW implement TRIMFS +* +******************************************************************************* + +$OPTIONS DEFAULT + +subroutine PR1ME(ans,m1) + ans = TRIMFS(m1) +return diff --git a/Ardent/UV/APP.PROGS/TRIMS b/Ardent/UV/APP.PROGS/TRIMS new file mode 100755 index 00000000..d1f8f636 --- /dev/null +++ b/Ardent/UV/APP.PROGS/TRIMS @@ -0,0 +1,26 @@ +******************************************************************************* +* +* Support of PR1ME INFORMATION subroutine '-TRIMS' +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description......................................... +* 10/14/98 23801 SAP Change copyrights. +* 07/25/88 - - Maintenence log purged at 5.2.1, see release 5.1.10. +* +******************************************************************************* + +$OPTIONS DEFAULT + +subroutine PR1ME(ans,m1) + ans = TRIMS(m1) +return diff --git a/Ardent/UV/APP.PROGS/UNIMPLEM b/Ardent/UV/APP.PROGS/UNIMPLEM new file mode 100755 index 00000000..3938cae8 --- /dev/null +++ b/Ardent/UV/APP.PROGS/UNIMPLEM @@ -0,0 +1,36 @@ +******************************************************************************* +* +* Display "Function unimplemented" screen +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description......................................... +* 10/14/98 23801 SAP Change copyrights. +* 07/25/88 - - Maintenence log purged at 5.2.1, see release 5.1.10. +* +******************************************************************************* +* +* +* +* + CLR = @(-1) + PROMPT "" +* + SCREEN=CLR + SCREEN=SCREEN:@(0,0):"System Administration" + SCREEN=SCREEN:@(0,2):STR("-",79) + SCREEN=SCREEN:@(20,10):"This function is not yet implemented." + SCREEN=SCREEN:@(0,19):STR("-",79) + PRINT SCREEN:@(0,20): +* +* +END diff --git a/Ardent/UV/APP.PROGS/UNLOAD.FILE.B b/Ardent/UV/APP.PROGS/UNLOAD.FILE.B new file mode 100755 index 00000000..bde0bc6d --- /dev/null +++ b/Ardent/UV/APP.PROGS/UNLOAD.FILE.B @@ -0,0 +1,89 @@ +****************************************************************************** +* +* UNLOAD.FILE.B - Unloads a hashed file to loadfile format. +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description........................................ +* 10/14/98 23801 SAP Change copyrights. +* 01/21/92 WLC Initial Release. +******************************************************************************* +* This BASIC program reads a hashed file and creates a .u format file +* +* +* +* get arguments (We are assuming it is invoked like "UNLOAD FOO" or +* "UNLOAD FOO foo.u" or "UNLOAD DICT FOO foo.u" etc. + sent = trim(@sentence) + convert " " to @AM in sent + dict = "" + infile = sent<2> + if infile = "DICT" then + dict = "DICT" + infile = sent<3> + ofile = sent<4> + end else + ofile = sent<3> + end + if ofile = "" then + ofile=infile + ofile = downcase(ofile) + end + if ofile = infile then + abort "Bad output filename" + end + open dict,infile to ifv else + print "Can't open ":dict:" ":infile + stop + end + openseq ofile to ofv then + print ofile:" already exists." + stop + end + sselect ifv + eof=0 + loop + readnext key else eof = 1 + until eof do + read rec from ifv,key else + abort "Read error, file ":infile:", key ":key + end + item=key:char(9) + loop + remove stuff from rec setting delim + begin case +* end of item + case delim = 0 + item := stuff +* field mark + case delim = 2 + item := stuff:char(10) +* value mark + case delim = 3 + item := stuff:char(10):"/}" +* subvalue mark + case delim = 4 + item := stuff:char(10):"/|" +* text mark + case delim = 5 + item := stuff:char(10):"/{" + end case + while delim do + item := char(9) + repeat + writeseq item on ofv else + print "WRITESEQ failed" + stop + end + repeat + end + diff --git a/Ardent/UV/APP.PROGS/USER.TYPE.B b/Ardent/UV/APP.PROGS/USER.TYPE.B new file mode 100755 index 00000000..944e52ee --- /dev/null +++ b/Ardent/UV/APP.PROGS/USER.TYPE.B @@ -0,0 +1,52 @@ +******************************************************************************** +* +* Support of PR1ME INFORMATION subroutine '!USER.TYPE' +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description......................................... +* 10/14/98 23801 SAP Change copyrights. +* 09/21/93 12299 LA Initial implementation. +* +******************************************************************************* +* START-DESCRIPTION: +* +* This subroutine returns the user type of the caller and whether or not +* the user is a uniVerse administrator. +* +* User type is either terminal or phantom. The caller is defined to be +* an administrator if they are logged in as root, in which case 1 will +* be returned. Otherwise 0 will be returned. +* +* END-DESCRIPTION: +* + +$OPTIONS DEFAULT + +subroutine PR1ME(USER.TYPE, ISADMIN) + +$INCLUDE UNIVERSE.INCLUDE USER_TYPES.H + + IF @TTY = 'phantom' OR @TTY = '' THEN + USER.TYPE = U$PH + END ELSE + USER.TYPE = U$NORM + END + + IF @AUTHORIZATION = 'root' THEN + ISADMIN = 1 + END ELSE + ISADMIN = 0 + END + RETURN + +END diff --git a/Ardent/UV/APP.PROGS/UVORNF.B b/Ardent/UV/APP.PROGS/UVORNF.B new file mode 100755 index 00000000..6923a63a --- /dev/null +++ b/Ardent/UV/APP.PROGS/UVORNF.B @@ -0,0 +1,312 @@ +******************************************************************************* +* +* UniVerse Objects ReadNamedField host subroutine +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description......................................... +* 10/14/98 23801 SAP Change copyrights. +* 08/13/96 16749 DW Return a status of 1 if field was not found in DICT. +* 08/08/96 19021 ALC Initialise the RSLT in case we leave with an error. +* 05/20/96 18472 PGW Added support for Pick-style dictionary entries +* 11/23/95 17679 GMM Module created (copied from the UV/NT version) +******************************************************************************* +* +* This subroutine is designed to be called from the ReadNamedField method +* of uniVerse Objects. It implements all the functions of ReadNamedField, +* because doing all this on the server is faster than having the client make +* repeated calls to get things done. +* +* Calling sequence: +* +* CALL -UVORNF(answer, file.name, lock.type, record.ID, +* field.name, status.value, code) +* +* answer will contain the result +* +* file.name is the name of the file to be read (would be nice to use +* the file descriptor opened by interCALL, but we can't) +* +* lock.type defines the type of lock required +* +* record.ID is the ID of the data record +* +* field.name is the name of the field required +* +* status.value is set to the STATUS() value when a record is locked +* +* code is set to a status code; 0 means success. +* + SUBROUTINE UVORNF(RSLT, FILE.NAME, LOCK.TYPE, RECORD.ID, + FIELD.NAME, STATUS.VALUE, CODE) + + COMMON /UVOCOM/ UVO.FILE.OPEN, + UVO.FILE.NAME, + UVO.DATA.FILE, + UVO.DICT.FILE, + UVO.RECORD.ID, + UVO.DATA.RECORD, + UVO.FIELD.NAME, + UVO.DICT.RECORD + + * Key values used. The values of these tokens *must* agree with the + * corresponding tokens in INTCALL.TXT. + EQU IK$READ TO 0 + EQU IK$READU TO 2 + EQU IK$READUW TO 3 + EQU IK$READL TO 4 + EQU IK$READLW TO 5 + + * Error codes used. The values of these tokens *must* agree with the + * corresponding tokens in UVOAIF.TXT. + EQU UVE$RNF TO 30001 + EQU UVE$LCK TO 30002 + EQU UVE$NVR TO 31000 + EQU UVE$BADPARAM TO 40003 + EQU UVE$INVALID.DATAFIELD TO 40007 + EQU UVE$BAD.DICTIONARY.ENTRY TO 40008 + EQU UVE$BAD.CONVERSION.DATA TO 40009 + EQU UVS$RNF.RNF.DICT TO 1 + + CODE = 0 + STATUS.VALUE = 0 + RSLT = 0 + + * Check to see if this is the same file as last time. If so, don't + * bother to open it again. + IF UVO.FILE.OPEN AND UVO.FILE.NAME = FILE.NAME THEN + * ok, we can use this one + END + ELSE + GOSUB OPEN.FILES + IF CODE THEN RETURN + END + + * Read the data record. Don't cache it, because it may have changed, + * and because the lock type required may be different. + UVO.RECORD.ID = RECORD.ID + GOSUB READ.DATA.RECORD + IF CODE THEN RETURN + + * Check to see if this is the same field as last time. If so, there + * is no need to read the dictionary again. + IF FIELD.NAME # UVO.FIELD.NAME THEN + UVO.FIELD.NAME = FIELD.NAME + READ UVO.DICT.RECORD FROM UVO.DICT.FILE, FIELD.NAME + ELSE + UVO.FIELD.NAME = "" + CODE = UVE$RNF + * indicate the problem is in the DICT + STATUS.VALUE = UVS$RNF.RNF.DICT + RETURN + END + END + + * Now for the actual evaluation. + FIELD.TYPE = UVO.DICT.RECORD[1, 1] + BEGIN CASE + CASE FIELD.TYPE = "D" + FIELD.LOC = UVO.DICT.RECORD<2> + FIELD.CONV = UVO.DICT.RECORD<3> + IF LEN(FIELD.LOC) = 0 OR NOT(NUM(FIELD.LOC)) THEN + UVO.FIELD.NAME = "" + CODE = UVE$BAD.DICTIONARY.ENTRY + RETURN + END + IF FIELD.LOC = 0 THEN + RSLT = UVO.RECORD.ID + END + ELSE + RSLT = UVO.DATA.RECORD + END + + CASE FIELD.TYPE = "I" + FIELD.CONV = UVO.DICT.RECORD<3> + * Check that the I-descriptor has been compiled. + IF INDEX(UVO.DICT.RECORD, @FM, 15) <= 0 THEN + UVO.FIELD.NAME = "" + CODE = UVE$BAD.DICTIONARY.ENTRY + RETURN + END + @ID = UVO.RECORD.ID + @RECORD = UVO.DATA.RECORD + RSLT = ITYPE(UVO.DICT.RECORD) + + CASE FIELD.TYPE = "A" OR FIELD.TYPE = "S" + FIELD.LOC = UVO.DICT.RECORD<2> + FIELD.CONV = UVO.DICT.RECORD<7> + FIELD.CORREL = UVO.DICT.RECORD<8> + IF LEN(FIELD.LOC) = 0 OR NOT(NUM(FIELD.LOC)) THEN + RSLT = UVO.RECORD.ID + END + ELSE IF FIELD.LOC = 0 THEN + RSLT = UVO.RECORD.ID + END + ELSE + RSLT = UVO.DATA.RECORD + END + IF LEN(FIELD.CORREL) > 0 THEN + @ID = UVO.RECORD.ID + @RECORD = UVO.DATA.RECORD + RSLT = OCONVS(RSLT, FIELD.CORREL) + IF STATUS() = 1 THEN + CODE = UVE$BAD.CONVERSION.DATA + RSLT = "" + RETURN + END + IF STATUS() = 2 THEN + UVO.FIELD.NAME = "" + CODE = UVE$BAD.DICTIONARY.ENTRY + RSLT = "" + RETURN + END + END + + CASE 1 + UVO.FIELD.NAME = "" + CODE = UVE$BAD.DICTIONARY.ENTRY + RETURN + END CASE + + IF LEN(FIELD.CONV) > 0 AND LEN(RSLT) > 0 THEN + RSLT = OCONVS(RSLT, FIELD.CONV) + * Check for invalid conversion? + IF STATUS() = 1 THEN + CODE = UVE$BAD.CONVERSION.DATA + RETURN + END + IF STATUS() = 2 THEN + UVO.FIELD.NAME = "" + CODE = UVE$BAD.DICTIONARY.ENTRY + RSLT = "" + RETURN + END + END + + RETURN + +******************************************************************************** +* +OPEN.FILES: +* +* Opening a new file. Both dictionary and data portions are needed. +* + * Clear all the common variables, to force reading + * of both data and dictionary records. + UVO.FILE.OPEN = 0 + UVO.FILE.NAME = "" + UVO.DATA.FILE = "" + UVO.DICT.FILE = "" + UVO.RECORD.ID = "" + UVO.DATA.RECORD = "" + UVO.FIELD.NAME = "" + UVO.DICT.RECORD = "" + RSLT = "" + + IF FILE.NAME[1,5] = "DICT " THEN + DATA.FILE.NAME = FILE.NAME[6, LEN(FILE.NAME)] + DATA.FILE.FLAG = "DICT" + DICT.FILE.NAME = "DICT.DICT" + DICT.FILE.FLAG = "" + END ELSE + DATA.FILE.NAME = FILE.NAME + DATA.FILE.FLAG = "" + DICT.FILE.NAME = FILE.NAME + DICT.FILE.FLAG = "DICT" + END + + OPEN DATA.FILE.FLAG, DATA.FILE.NAME TO UVO.DATA.FILE ELSE + * The client has already opened this file before ReadNamedField + * is called, so there is no way this can fail unless something + * is badly wrong. + CODE = UVE$BADPARAM + RETURN + END + + OPEN DICT.FILE.FLAG, DICT.FILE.NAME TO UVO.DICT.FILE ELSE + * This code cannot tell what the actual error was + CODE = UVE$NVR + UVO.DATA.FILE = "" + RETURN + END + + UVO.FILE.OPEN = 1 + UVO.FILE.NAME = FILE.NAME + RETURN + +******************************************************************************** +* +READ.DATA.RECORD: +* +* Read the data record required, honouring any locking requested by the client. +* + BEGIN CASE + + CASE LOCK.TYPE = IK$READ + * Read without any locking at all + READ UVO.DATA.RECORD FROM UVO.DATA.FILE, UVO.RECORD.ID + ELSE + CODE = UVE$RNF + RETURN + END + + CASE LOCK.TYPE = IK$READU + * Read with READU lock, and don't wait if locked + READU UVO.DATA.RECORD FROM UVO.DATA.FILE, UVO.RECORD.ID + LOCKED + CODE = UVE$LCK + STATUS.VALUE = STATUS() + RETURN + END + ELSE + CODE = UVE$RNF + RETURN + END + + CASE LOCK.TYPE = IK$READUW + * Read with READU lock, and wait if locked + READU UVO.DATA.RECORD FROM UVO.DATA.FILE, UVO.RECORD.ID + ELSE + CODE = UVE$RNF + RETURN + END + + CASE LOCK.TYPE = IK$READL + * Read with READL lock, and don't wait if locked + READL UVO.DATA.RECORD FROM UVO.DATA.FILE, UVO.RECORD.ID + LOCKED + CODE = UVE$LCK + STATUS.VALUE = STATUS() + RETURN + END + ELSE + CODE = UVE$RNF + RETURN + END + + CASE LOCK.TYPE = IK$READLW + * Read with READL lock, and wait if locked + READL UVO.DATA.RECORD FROM UVO.DATA.FILE, UVO.RECORD.ID + ELSE + CODE = UVE$RNF + RETURN + END + + CASE 1 + CODE = UVE$BADPARAM + RETURN + END CASE + + RETURN + + END + diff --git a/Ardent/UV/APP.PROGS/UVPATHNAME.B b/Ardent/UV/APP.PROGS/UVPATHNAME.B new file mode 100755 index 00000000..838667e9 --- /dev/null +++ b/Ardent/UV/APP.PROGS/UVPATHNAME.B @@ -0,0 +1,310 @@ +******************************************************************************** +* +* Subroutine to perform pathname manipulation +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description......................................... +* 10/14/98 23801 SAP Change copyrights. +* 10/03/96 19383 DJD Fix handling of drive letters. +* 07/30/96 18934 RKM Directory separator preserved in do.extractdir when +* pathname is '/' or '\'. +* 06/06/96 18438 JC Port to NT +* 03/13/96 17797 AGM Replace 'SH -c' with OS.EXEC +* 09/23/93 12299 LA Initial implementation. +* +******************************************************************************* +* START-DESCRIPTION: +* +* CALL *UVPATHNAME(KEY, PATHNAME, ENTRYNAME, RETURN_PATH, STATUS) +* +* where: +* +* KEY (I) UVK$CREATEPATH - create the pathname from +* pathname/entryname specified +* UVK$EXTRACTDIR - extract the directory +* portion of a pathname +* UVK$EXTRACTENTRY - extract the entryname +* portion of a pathname +* UVK$CURRENTPATH - return the full pathname +* of the current attach point +* UVK$PATHNAME - return fully qualified +* pathname +* UVK$ISRELATIVEPATH - return indication of whether +* pathname is relative or not +* PATHNAME (I) is the input pathname 1 +* ENTRYNAME (I) is the input pathname 2, if required +* RETURN_PATH (O) is where the resultant pathname is returned +* STATUS (O) is the status of the operation +* +* PLEASE NOTE : As this runs on NT and UNIX, note that you need to check +* for '/' and '\'. +* +* END-DESCRIPTION +* + +$OPTIONS DEFAULT + +subroutine UVPATHNAME(key, path1, path2, return.path, status) + +$INCLUDE UNIVERSE.INCLUDE UVKEYS.H +$INCLUDE UNIVERSE.INCLUDE INFO_ERRS.H +$INCLUDE UNIVERSE.INCLUDE FILENAMES.H +$INCLUDE UNIVERSE.INCLUDE MACHINE.NAME + + status = 0 + return.path = "" + + execute OS.EXEC:" '":PWD.CMD:"'" capturing cwd + cwd = cwd<1> + + BEGIN CASE + CASE key = UVK$CREATEPATH + GOSUB do.createpath + CASE key = UVK$EXTRACTENTRY + GOSUB do.extractentry + CASE key = UVK$EXTRACTDIR + GOSUB do.extractdir + CASE key = UVK$PATHNAME + GOSUB do.pathname + CASE key = UVK$CURRENTPATH + return.path = cwd + CASE 1 + return.path = '' + END CASE + RETURN + +****************************************************************************** +* do.createpath subroutine: +* +* if just pathname supplied, return it +* if just entry name supplied, return error if not relative, otherwise +* return fully qualified path +* if neither supplied, return error +* if both supplied, return error if entryname not relative, otherwise +* catenate & return +* +****************************************************************************** +do.createpath: + IF path1 NE '' THEN + pathname = path1 + IF path2 NE '' THEN + +* Only add delimeter if PATHNAME not root symbol + + IF path1 NE "/" and path1 NE "\" THEN pathname := UV.FSEP + BEGIN CASE + CASE path2[1,1] = "/" or path2[1,1] = "\" or path2[2,2] = ":\" + status = IE$NOTRELATIVE + CASE path2[1,2] = "./" or path2[1,2] = ".\" + temp.len = LEN(path2) + pathname := path2[3, temp.len - 2] + CASE 1 + pathname := path2 + END CASE + END ;* path2 supplied + END ELSE ;* path1 not supplied + IF path2 NE '' THEN + IF path2[1,1] = "/" or path2[1,1] = "\" or path2[2,2] = ":\" THEN + status = IE$NOTRELATIVE + END ELSE + pathname = path2 + END + END ELSE status = IE$PAR + END + IF status = 0 THEN + GOSUB compress.path + return.path = pathname + END + RETURN + +****************************************************************************** +* do.extractentry subroutine: +* +* Returns the entryname part of the path1 argument. +* If no path1 argument supplied, then returns error +* +****************************************************************************** +do.extractentry: + IF path1 = '' THEN status = IE$PAR + ELSE + num.delimeters = COUNT(convert('\','/',path1), "/") + IF num.delimeters = 0 THEN return.path = path1 + ELSE + pathname = path1 + GOSUB compress.path + pos = INDEX(convert('\','/',pathname), "/", num.delimeters) + pathlen = LEN(pathname) + return.path = pathname[pos + 1, pathlen - pos] + END + END + RETURN + +****************************************************************************** +* do.extractdir subroutine: +* +* Returns directory part of path1 argument. +* If no path1 argument supplied, returns error. +* +****************************************************************************** +do.extractdir: + IF path1 = '' THEN status = IE$PAR + ELSE + num.delimeters = COUNT(convert('\','/',path1), "/") + BEGIN CASE + CASE num.delimeters = 0 + return.path = '.' + CASE num.delimeters = 1 and (path1[1,1] = "/" or path1[1,1] = "\") + return.path = path1[1,1] + CASE 1 + pathname = path1 + GOSUB compress.path + pos = INDEX(convert('\','/',pathname), "/", num.delimeters) + pathlen = LEN(pathname) + return.path = pathname[1, pos - 1] + END CASE + END + RETURN + +****************************************************************************** +* do.pathname subroutine: +* +* Returns path1 argument as a fully qualified pathname. +* If no path1 argument supplied, returns error. +* +****************************************************************************** +do.pathname: + IF path1 = '' THEN status = IE$PAR + ELSE + BEGIN CASE + CASE path1[1,1] = "/" or path1[1,1] = "\" + pathname = path1 + CASE path1[1,2] = "./" or path1[1,2] = ".\" + pathname = cwd: path1[2, LEN(path1) - 1] + CASE path1[1,3] = "../" or path1[1,3] = "..\" + cwd.len = LEN(cwd) + LOOP + cwd.len -= 1 + UNTIL (cwd[cwd.len,1] = "/" or cwd[cwd.len,1] = "\") REPEAT + pathname = cwd[1,cwd.len]: path1[4,LEN(path1)-3] + CASE 1 + pathname = cwd:UV.FSEP:path1 + END CASE + gosub compress.path + return.path = pathname + END + + RETURN + +****************************************************************************** +* compress.path subroutine: +* +* Resolves any imbedded ./ or ../ in the pathname +* +****************************************************************************** +compress.path: + +* Handle special case where path just consists of root symbol + + if pathname = "/" or pathname = "\" then return + +* Now handle other cases + + num.parts = dcount(convert('\','/',pathname), "/") + path = convert("/", @FM, pathname) + path = convert("\", @FM, path) + pathname = '' + temp.path = '' + absolute = 0 + +* Handle start of path first + + part = path<1> + pathpart = 1 + partno = 1 + stop.part = 0 + begin case + case part = "." + pathname = part + pathpart += 1 + partno += 1 + stop.part = 1 + case part = "" + pathname = part + pathpart += 1 + partno += 1 + stop.part = 1 + absolute = 1 + case part = ".." + loop + while part = ".." or part = "." + if part = ".." + then + pathname = part + pathpart += 1 + end + partno += 1 + part = path + repeat + stop.part = pathpart - 1 + case 1 + pathname = part + pathpart += 1 + partno += 1 + end case + +* Now do the rest of it + + for partno = partno to num.parts + part = path + begin case + case part = "." + ;* do nothing + case part = ".." + pathpart -= 1 + if pathpart = stop.part then + if absolute then + pathpart = stop.part + 1 + end else + pathname = part + pathpart += 2 + stop.part += 1 + end + end + case part = '' + ;* do nothing + case 1 + if pathpart > stop.part then + pathname = part + pathpart += 1 + end else + print "Error" + end + end case + next partno + +* Get rid of any extraneous bits + + for partno = 1 to pathpart - 1 + temp.path = pathname + next partno + +* Convert from dynamic array back to pathname + + pathname = convert(@FM, "/", temp.path) + pathname = convert(@FM, "\", pathname) + + if pathname = "" then pathname = "." + + RETURN +END + diff --git a/Ardent/UV/APP.PROGS/UVPRINTMSG b/Ardent/UV/APP.PROGS/UVPRINTMSG new file mode 100755 index 00000000..067dad86 --- /dev/null +++ b/Ardent/UV/APP.PROGS/UVPRINTMSG @@ -0,0 +1,125 @@ +****************************************************************************** +* +* Subroutine to print a message from sys.message file +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description......................................... +* 05/05/99 24820 DTM Modified to support 64bit message format +* 10/14/98 23801 SAP Change copyrights. +* 12/14/92 10714 PVW Support of BELL OFF/BELL ON command. +* 11/23/92 10214 PVW Make UV.INTERNAL common block a separate entity +* and include PI/open DEVSYS common block. +* 08/13/92 9584 JWT Set flag once sys message file is opened +* 11/01/91 8871 DTM Made it correctly handle formatted messages +* 04/13/90 6709 JWT Make delete BASIC so indexs get updated +* +******************************************************************************* + +SUBROUTINE UVPRINTMSG( MESSAGE.NO, MESSAGE.PARAM) + + ID = "%W%" + +$INCLUDE UNIVERSE.INCLUDE UV.COM + + MESSAGE.ID = MESSAGE.NO "R%6" + + READ MESSAGE.REC FROM SYS.MESSAGE, MESSAGE.ID + ELSE + PRINT "[":MESSAGE.ID:"]": + RETURN + END + +* if BELL is toggled off then remove bells from message +* + IF NOT(@SYS.BELL) THEN + MESSAGE.REC = CONVERT(CHAR(7),"",MESSAGE.REC) + END + + MESSAGE.LEN = LEN(MESSAGE.REC) + MESSAGE.TEXT = "" + PARAM.COUNT = 0 + + FOR I = 1 TO MESSAGE.LEN + M.CHAR = MESSAGE.REC[I,1] + BEGIN CASE + CASE M.CHAR = @FM + PRINT MESSAGE.TEXT + MESSAGE.TEXT = "" + CASE M.CHAR = "%" + IF I = MESSAGE.LEN THEN MESSAGE.TEXT := M.CHAR + ELSE + I += 1 + M.CHAR2 = MESSAGE.REC[I,1] + IF M.CHAR2 = "%" + THEN MESSAGE.TEXT := "%" + ELSE + PARAM.COUNT += 1 + NEXT.PARAM = MESSAGE.PARAM + PARAM.FORMAT = "" + IF M.CHAR2 = "(" + THEN + LOOP + IF I = MESSAGE.LEN + THEN + PRINT MESSAGE.TEXT:"[MESSAGE ":MESSAGE.ID:", SCAN ERROR]": + RETURN + END + I += 1 + M.CHAR2 = MESSAGE.REC[I,1] + UNTIL M.CHAR2 = ")" DO + PARAM.FORMAT := M.CHAR2 + REPEAT + IF I = MESSAGE.LEN + THEN + PRINT MESSAGE.TEXT:"[MESSAGE ":MESSAGE.ID:", SCAN ERROR]": + RETURN + END + I += 1 + M.CHAR2 = MESSAGE.REC[I,1] + END + BEGIN CASE + CASE M.CHAR2 = "I" OR M.CHAR2 = "i" + NEXT.PARAM = INT(NEXT.PARAM) + CASE M.CHAR2 = "A" OR M.CHAR2 = "a" + NEXT.PARAM = INT(NEXT.PARAM) + CASE M.CHAR2 = "L" OR M.CHAR2 = "l" + NEXT.PARAM = INT(NEXT.PARAM) + CASE M.CHAR2 = "D" OR M.CHAR2 = "d" + NEXT.PARAM = NEXT.PARAM + 0 + CASE M.CHAR2 = "F" OR M.CHAR2 = "f" + NEXT.PARAM = NEXT.PARAM + 0 + CASE M.CHAR2 = "X" OR M.CHAR2 = "x" + NEXT.PARAM = OCONV(INT(NEXT.PARAM),"MX0C") + CASE M.CHAR2 = "B" OR M.CHAR2 = "b" + NEXT.PARAM = OCONV(INT(NEXT.PARAM),"MX0C") + CASE M.CHAR2 = "S" OR M.CHAR2 = "s" + NULL + CASE M.CHAR2 = "N" OR M.CHAR2 = "n" + NULL + CASE M.CHAR2 = "C" OR M.CHAR2 = "c" + NEXT.PARAM = NEXT.PARAM[1,1] + CASE 1 + NEXT.PARAM = "[MESSAGE ":MESSAGE.ID:", BAD FORMAT %":M.CHAR2:" ]" + END CASE + IF PARAM.FORMAT THEN NEXT.PARAM = NEXT.PARAM PARAM.FORMAT + MESSAGE.TEXT := NEXT.PARAM + END + END + CASE 1 + MESSAGE.TEXT := M.CHAR + END CASE + NEXT I + + PRINT MESSAGE.TEXT: + + RETURN diff --git a/Ardent/UV/APP.PROGS/UVREADMSG b/Ardent/UV/APP.PROGS/UVREADMSG new file mode 100755 index 00000000..0a155aea --- /dev/null +++ b/Ardent/UV/APP.PROGS/UVREADMSG @@ -0,0 +1,110 @@ +****************************************************************************** +* +* Function to read a messsage from sys.message file +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description......................................... +* 10/14/98 23801 SAP Change copyrights. +* 11/23/92 10214 PVW Make UV.INTERNAL common block a separate entity +* and include PI/open DEVSYS common block. +* 11/01/91 8871 DTM Made it correctly handle formatted messages +* 09/07/90 7412 DPB Fixed handling of multi line records. +* 09/06/90 7421 DPB Initial put. +* +******************************************************************************* + +FUNCTION UVREADMSG( MESSAGE.NO, MESSAGE.PARAM) + + ID = "%W%" + +$INCLUDE UNIVERSE.INCLUDE UV.COM + + MESSAGE.ID = MESSAGE.NO "R%6" + + READ MESSAGE.REC FROM SYS.MESSAGE, MESSAGE.ID + ELSE + MESSAGE.TEXT = "[":MESSAGE.ID:"]" + RETURN(MESSAGE.TEXT) + END + + MESSAGE.LEN = LEN(MESSAGE.REC) + MESSAGE.TEXT = "" + PARAM.COUNT = 0 + + FOR I = 1 TO MESSAGE.LEN + M.CHAR = MESSAGE.REC[I,1] + BEGIN CASE + CASE M.CHAR = @FM + MESSAGE.TEXT := @FM + CASE M.CHAR = "%" + IF I = MESSAGE.LEN THEN MESSAGE.TEXT := M.CHAR + ELSE + I += 1 + M.CHAR2 = MESSAGE.REC[I,1] + IF M.CHAR2 = "%" + THEN MESSAGE.TEXT := "%" + ELSE + PARAM.COUNT += 1 + NEXT.PARAM = MESSAGE.PARAM + PARAM.FORMAT = "" + IF M.CHAR2 = "(" + THEN + LOOP + IF I = MESSAGE.LEN + THEN + MESSAGE.TEXT := MESSAGE.TEXT:"[MESSAGE ":MESSAGE.ID:", SCAN ERROR]" + RETURN(MESSAGE.TEXT) + END + I += 1 + M.CHAR2 = MESSAGE.REC[I,1] + UNTIL M.CHAR2 = ")" DO + PARAM.FORMAT := M.CHAR2 + REPEAT + IF I = MESSAGE.LEN + THEN + MESSAGE.TEXT := MESSAGE.TEXT:"[MESSAGE ":MESSAGE.ID:", SCAN ERROR]" + RETURN(MESSAGE.TEXT) + END + I += 1 + M.CHAR2 = MESSAGE.REC[I,1] + END + BEGIN CASE + CASE M.CHAR2 = "I" OR M.CHAR2 = "i" + NEXT.PARAM = INT(NEXT.PARAM) + CASE M.CHAR2 = "L" OR M.CHAR2 = "l" + NEXT.PARAM = INT(NEXT.PARAM) + CASE M.CHAR2 = "D" OR M.CHAR2 = "d" + NEXT.PARAM = NEXT.PARAM + 0 + CASE M.CHAR2 = "F" OR M.CHAR2 = "f" + NEXT.PARAM = NEXT.PARAM + 0 + CASE M.CHAR2 = "X" OR M.CHAR2 = "x" + NEXT.PARAM = OCONV(INT(NEXT.PARAM),"MX0C") + CASE M.CHAR2 = "S" OR M.CHAR2 = "s" + NULL + CASE M.CHAR2 = "N" OR M.CHAR2 = "n" + NULL + CASE M.CHAR2 = "C" OR M.CHAR2 = "c" + NEXT.PARAM = NEXT.PARAM[1,1] + CASE 1 + NEXT.PARAM = "[MESSAGE ":MESSAGE.ID:", BAD FORMAT %":M.CHAR2:" ]" + END CASE + IF PARAM.FORMAT THEN NEXT.PARAM = NEXT.PARAM PARAM.FORMAT + MESSAGE.TEXT := NEXT.PARAM + END + END + CASE 1 + MESSAGE.TEXT := M.CHAR + END CASE + NEXT I + + RETURN(MESSAGE.TEXT) diff --git a/Ardent/UV/APP.PROGS/UVSUSPEND.B b/Ardent/UV/APP.PROGS/UVSUSPEND.B new file mode 100755 index 00000000..14328ead --- /dev/null +++ b/Ardent/UV/APP.PROGS/UVSUSPEND.B @@ -0,0 +1,82 @@ +******************************************************************************* +* +* Check, set or unset bit to suspend disk writes. +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description......................................... +* 10/14/98 23801 SAP Change copyrights. +* 05/20/98 21718 LPC/WSM Initial coding. +* +******************************************************************************* + + OP = "" + FF = "" + + GET(ARG., 1) OP + GET(ARG., 2) FF + OP = UPCASE( OP ) + + IF UPCASE( FF ) = "FORCE" THEN FORCE.FLAG = 1 ELSE FORCE.FLAG = 0 + + BEGIN CASE + + CASE OP = "OFF" + * Must be superuser + IF SYSTEM(27) # 0 THEN + PRINT "You must be super-user to run this program" + STOP + END + + * Turn off file suspension + ASSIGN 0 to SYSTEM(43) + + CASE OP = "ON" + * Must be superuser + IF SYSTEM(27) # 0 THEN + PRINT "You must be super-user to run this program" + STOP + END + + * Warning + IF NOT( FORCE.FLAG) THEN + PRINT "This command will suspend file updates, no utility" + PRINT "that can modify the file structure should be running." + PRINT "Do you wish to proceed? ": + INPUT ANS + ANS = UPCASE( ANS ) + IF ANS # "Y" AND ANS # "YES" THEN + STOP + END + END + + * Turn on file suspension + ASSIGN 1 to SYSTEM(43) + + * Warning + IF NOT( FORCE.FLAG) THEN + PRINT + PRINT "Make certain buffers have been flushed to the disk." + END + CASE OP = "" + IF SYSTEM(43) = 1 THEN + PRINT "Suspension of file updates is active" + END ELSE + PRINT "Suspension of file updates is inactive" + END + + CASE 1 + PRINT QUOTE( OP ): " is an invalid argument." + + END CASE + + END diff --git a/Ardent/UV/APP.PROGS/VERF.CAT.B b/Ardent/UV/APP.PROGS/VERF.CAT.B new file mode 100755 index 00000000..8335579e --- /dev/null +++ b/Ardent/UV/APP.PROGS/VERF.CAT.B @@ -0,0 +1,980 @@ +******************************************************************************* +* +* SQL catalog verification tool. +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenance log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description......................................... +* 10/14/98 23801 SAP Change copyrights. +* 03/26/96 17337 JBG UV_VIEWS TABLE is MULTIVALUED in Rel 9 +* 03/13/96 17797 AGM Replace DOS and SH with OS.EXEC +* 01/25/96 17671 LAG Windows NT port +* 09/29/94 14846 MGM Coordinate UVfile output change for views +* 08/19/94 14217 MGM full UV_VIEWS support +* 08/12/94 14217 MGM Add view/association support for Rev. 8 +* 08/03/93 11938 DPB Changed various messages for consistency. +* 07/18/93 10131 DPB Initial creation of catalog verification tool. +* +******************************************************************************* +* +* VERIFY.CATALOG(Fix, Brief) +* +* This subroutine will verify the internal consistency of the SQL catalog. +* +* Fix This boolean variable indicates whether or not any +* discrepencies found should be fixed. +* Brief This boolean variable indicates the amout of output +* expected from the subroutine. When turned on only +* extrememly critical problems are reported. +* +******************************************************************************* +SUBROUTINE VERIFY.CATALOG(Fix, Brief) +INCLUDE UNIVERSE.INCLUDE VERIFY.COM +INCLUDE UNIVERSE.INCLUDE MACHINE.NAME + +****************** +** Windows NT port +** +DEFFUN IS.FULLPATH(FILESPEC) CALLING "*IS.FULLPATH" +DEFFUN IS.EQPATHS(FILESPEC.A, FILESPEC.B) CALLING "*IS.EQPATHS" +DEFFUN GET.DIRNAME(FILESPEC) CALLING "*GET.DIRNAME" +DEFFUN GET.BASENAME(FILESPEC) CALLING "*GET.BASENAME" +** +****************** + +Verbose = NOT(Brief) ;* Opposite of Brief. (Saves opcodes) +IF Verbose THEN CALL *WRAP.PRINT("Verifying the internal consistency of the SQL catalog.",Width,0,0) +IF Verbose THEN CALL *WRAP.PRINT(" ",Width,0,0) +IF Verbose THEN CALL *WRAP.PRINT(" ",Width,0,0) +IF Verbose THEN CALL *WRAP.PRINT("Checking UV_USERS for incorrect table information in the ownership lists.",Width,0,0) +IF Verbose THEN CALL *WRAP.PRINT(" ",Width,0,0) + +SSELECTV uvusers TO listvar + +done = 0 + +LOOP + READNEXT id FROM listvar ELSE done = 1 +WHILE NOT(done) DO + READ userrec FROM uvusers,id ELSE CONTINUE + IF Verbose THEN CALL *WRAP.PRINT(" ",Width,0,0) + IF Verbose THEN CALL *WRAP.PRINT("Verifying ownership list for user '":id:"'.",Width,0,0) + + RecChange = 0 + CNT = DCOUNT(userrec<5>,@VM) + FileList = "" + FOR I = 1 to CNT + File = userrec<4,I>:" ":userrec<5,I> + fid = userrec<4,I>:@TM:userrec<5,I> + LOCATE(File,FileList;tmp;"AL") + THEN + ECount += 1 + IF Fix + THEN + IF Verbose THEN CALL *WRAP.PRINT("* Deleteing duplicate ownership entry for user '":id:"' on table '":userrec<5,I>:"' in schema '":userrec<4,I>:"'.",Width,0,2) + RecChange = 1 + END + ELSE IF Verbose THEN CALL *WRAP.PRINT("* Found a duplicate ownership entry for user '":id:"' on table '":userrec<5,I>:"' in schema '":userrec<4,I>:"'.",Width,0,2) + END + ELSE + READ trec FROM uvtables,fid + THEN + FileList = INSERT(FileList,tmp;File) + END + ELSE + ECount += 1 + IF Fix + THEN + RecChange = 1 + IF Verbose THEN CALL *WRAP.PRINT("* Deleting the ownership entry for user '":id:"' on the table '":userrec<5,I>:"' in schema '":userrec<4,I>:"' which does not have UV_TABLES catalog data.",Width,0,2) + END + ELSE IF Verbose THEN CALL *WRAP.PRINT("* Found an ownership entry for user '":id:"' on the table '":userrec<5,I>:"' in schema '":userrec<4,I>:"' which does not have UV_TABLES catalog data.",Width,0,2) + END + END + NEXT I + + IF Fix AND RecChange + THEN + userrec<4> = "" + userrec<5> = "" + CNT = DCOUNT(FileList,@FM) + FOR I = 1 to CNT + File = FileList + File = CONVERT(" ",@FM,File) + userrec<4,I> = File<1> + userrec<5,I> = File<2> + NEXT I + WRITE userrec ON uvusers,id + END +REPEAT + +IF Verbose THEN CALL *WRAP.PRINT(" ",Width,0,0) +IF Verbose THEN CALL *WRAP.PRINT(" ",Width,0,0) +IF Verbose THEN CALL *WRAP.PRINT("Checking UV_USERS for incorrect table information in the permission lists.",Width,0,0) +IF Verbose THEN CALL *WRAP.PRINT(" ",Width,0,0) + +SSELECTV uvusers TO listvar + +done = 0 + +LOOP + READNEXT id FROM listvar ELSE done = 1 +WHILE NOT(done) DO + READ userrec FROM uvusers,id ELSE CONTINUE + IF Verbose THEN CALL *WRAP.PRINT(" ",Width,0,0) + IF Verbose THEN CALL *WRAP.PRINT("Verifying permission list for user '":id:"'.",Width,0,0) + + RecChange = 0 + CNT = DCOUNT(userrec<7>,@VM) + FileList = "" + FOR I = 1 to CNT + File = userrec<6,I>:" ":userrec<7,I> + fid = userrec<6,I>:@TM:userrec<7,I> + LOCATE(File,FileList;tmp;"AL") + THEN + ECount += 1 + IF Fix + THEN + IF Verbose THEN CALL *WRAP.PRINT("* Deleteing duplicate permission entry for user '":id:"' on table '":userrec<7,I>:"' in schema '":userrec<6,I>:"'.",Width,0,2) + RecChange = 1 + END + ELSE IF Verbose THEN CALL *WRAP.PRINT("* Found a duplicate permission entry for user '":id:"' on table '":userrec<7,I>:"' in schema '":userrec<6,I>:"'.",Width,0,2) + END + ELSE + READ trec FROM uvtables,fid + THEN + FileList = INSERT(FileList,tmp;File) + END + ELSE + ECount += 1 + IF Fix + THEN + RecChange = 1 + IF Verbose THEN CALL *WRAP.PRINT("* Deleting the permission entry for user '":id:"' on the table '":userrec<7,I>:"' in schema '":userrec<6,I>:"' which does not have UV_TABLES catalog data.",Width,0,2) + END + ELSE IF Verbose THEN CALL *WRAP.PRINT("* Found a permission entry for user '":id:"' on the table '":userrec<7,I>:"' in schema '":userrec<6,I>:"' which does not have UV_TABLES catalog data.",Width,0,2) + END + END + NEXT I + + IF Fix AND RecChange + THEN + userrec<6> = "" + userrec<7> = "" + CNT = DCOUNT(FileList,@FM) + FOR I = 1 to CNT + File = FileList + File = CONVERT(" ",@FM,File) + userrec<6,I> = File<1> + userrec<7,I> = File<2> + NEXT I + WRITE userrec ON uvusers,id + END +REPEAT + + +IF Verbose THEN CALL *WRAP.PRINT(" ",Width,0,0) +IF Verbose THEN CALL *WRAP.PRINT(" ",Width,0,0) +IF Verbose THEN CALL *WRAP.PRINT("Checking UV_USERS for invalid users or users with duplicate user ids.",Width,0,0) +IF Verbose THEN CALL *WRAP.PRINT(" ",Width,0,0) +SSELECTV uvusers TO listvar + +done = 0 + +Ulist = "" +UNlist = "" +LOOP + READNEXT id FROM listvar ELSE done = 1 +WHILE NOT(done) DO + CHKNAME = id + UID = "" + GOSUB GETUSER + IF UID = -1 + THEN + ECount += 1 + IF Verbose THEN CALL *WRAP.PRINT(" ",Width,0,0) + IF Verbose THEN CALL *WRAP.PRINT("* '":id:"' is not a valid user.",Width,0,2) + CONTINUE + END + + LOCATE(UID,Ulist;tmp;"AR") + THEN + ECount += 1 + IF Verbose THEN CALL *WRAP.PRINT(" ",Width,0,0) + IF Verbose THEN CALL *WRAP.PRINT("* '":id:"' has the same user id as '":UNlist:"'.",Width,0,2) + END + ELSE + Ulist = INSERT(Ulist,tmp;UID) + UNlist = INSERT(UNlist,tmp;id) + END + +REPEAT + +IF Verbose THEN CALL *WRAP.PRINT(" ",Width,0,0) +IF Verbose THEN CALL *WRAP.PRINT(" ",Width,0,0) +IF Verbose THEN CALL *WRAP.PRINT("Checking UV_TABLES for incorrect table information.",Width,0,0) +IF Verbose THEN CALL *WRAP.PRINT(" ",Width,0,0) + +SSELECTV uvtables TO listvar + +Flist = "" +FPlist = "" +Dlist = "" +done = 0 +LOOP + READNEXT id FROM listvar ELSE done = 1 +WHILE NOT(done) DO + READ trec FROM uvtables,id ELSE CONTINUE + + IsaView = 0 + SQLobject = 'table' + IF trec<2> = "ASSOCIATION" + THEN + key = id[1,INDEX(id,trec<3>,1)+LEN(trec<3>)-1] + assocname = id[INDEX(id,key,1)+LEN(key)+1,LEN(id)] + name = CONVERT(@TM,@FM,key) + READ atrec FROM uvtables,key + ELSE + ECount += 1 + IF Verbose THEN CALL *WRAP.PRINT(" ",Width,0,0) + IF Verbose THEN CALL *WRAP.PRINT("* There is no Base Table which refers to the UV_TABLES association data for the association '":assocname:"' on table '":name<2>:" (":name<1>:")'.",Width,0,2) + END + CONTINUE + END + + IF trec<2> = "VIEW" + THEN + IsaView = 1 + SQLobject = 'view' + END + + name = CONVERT(@TM,@FM,id) + + READ srec FROM uvschema,name<1> + ELSE + IF Verbose THEN CALL *WRAP.PRINT(" ",Width,0,0) + ECount += 1 + IF Fix + THEN + IF Verbose THEN CALL *WRAP.PRINT("* The ":SQLobject:" '":name<2>:" (":name<1>:")' is in a schema which does not have UV_SCHEMA data. Deleting all SQL catalog data for this ":SQLobject:".",Width,0,2) + + tname = name + key = id + catrec = trec + GOSUB DELETE.DATA + INS key BEFORE Dlist<-1> + END + ELSE + IF Verbose THEN CALL *WRAP.PRINT("* The ":SQLobject:" '":name<2>:" (":name<1>:")' is in a schema which does not have UV_SCHEMA data. All SQL catalog data for this ":SQLobject:" should be deleted.",Width,0,2) + INS id BEFORE Dlist<-1> + END + CONTINUE + END + + CHKNAME = trec<6> + GOSUB EXISTS + BEGIN CASE + + CASE EXVAL = 3 + IF Verbose THEN CALL *WRAP.PRINT("** Unable to check ":SQLobject:" '":name<2>:" (":name<1>:")'. Leaving its UV_TABLES record alone.",Width,0,3) + FECount += 1 + + CASE EXVAL = 1 + IF Verbose THEN CALL *WRAP.PRINT(" ",Width,0,0) + ECount += 1 + IF Fix + THEN + IF Verbose THEN CALL *WRAP.PRINT("* '":name<2>:" (":name<1>:")' points to a non-SQL file. Deleting all SQL catalog data for this ":SQLobject:".",Width,0,2) + + tname = name + key = id + catrec = trec + GOSUB DELETE.DATA + INS key BEFORE Dlist<-1> + + END + ELSE + IF Verbose THEN CALL *WRAP.PRINT("* '":name<2>:" (":name<1>:")' points to a non-SQL file. All SQL catalog data for this ":SQLobject:" should be deleted.",Width,0,2) + INS id BEFORE Dlist<-1> + END + CONTINUE + + CASE EXVAL = 0 + IF Verbose THEN CALL *WRAP.PRINT(" ",Width,0,0) + ECount += 1 + IF Fix + THEN + IF Verbose THEN CALL *WRAP.PRINT("* '":name<2>:" (":name<1>:")' points to a non-existent file. Deleting all SQL catalog data for this ":SQLobject:".",Width,0,2) + + tname = name + key = id + catrec = trec + GOSUB DELETE.DATA + INS key BEFORE Dlist<-1> + END + ELSE + IF Verbose THEN CALL *WRAP.PRINT("* '":name<2>:" (":name<1>:")' points to a non-existent file. All SQL catalog data for this ":SQLobject:" should be deleted.",Width,0,2) + INS id BEFORE Dlist<-1> + END + CONTINUE + + END CASE + + LOCATE(trec<6>,FPlist;tmp;"AL") + THEN + ECount += 1 + name2 = CONVERT(@TM,@FM,Flist) + IF Verbose THEN CALL *WRAP.PRINT(" ",Width,0,0) + IF Verbose THEN CALL *WRAP.PRINT("* '":name<2>:" (":name<1>:")' has the same path as '":name2<2>:" (":name2<1>:")'.",Width,0,2) + + CHKNAME = trec<6> + GOSUB GETSICA + + IF Sica=name<2> AND Sica=name<1> + THEN + IF Fix + THEN + IF Verbose THEN CALL *WRAP.PRINT("* '":name<2>:" (":name<1>:")' is correct. Deleting all SQL catalog data for '":name2<2>:" (":name2<1>:")'.",Width,0,2) + + tname = name2 + key = Flist + READ catrec FROM uvtables,key ELSE CONTINUE + GOSUB DELETE.DATA + INS key BEFORE Dlist<-1> + Flist = id + END + ELSE + IF Verbose THEN CALL *WRAP.PRINT("* '":name<2>:" (":name<1>:")' is correct. All SQL catalog data for '":name2<2>:" (":name2<1>:")' should be deleted.",Width,0,2) + INS Flist BEFORE Dlist<-1> + END + END + ELSE IF Sica=name2<2> AND Sica=name2<1> + THEN + IF Fix + THEN + IF Verbose THEN CALL *WRAP.PRINT("* '":name2<2>:" (":name2<1>:")' is correct. Deleting all SQL catalog data for '":name<2>:" (":name<1>:")'.",Width,0,2) + + tname = name + key = id + catrec = trec + GOSUB DELETE.DATA + INS key BEFORE Dlist<-1> + + END + ELSE + IF Verbose THEN CALL *WRAP.PRINT("* '":name2<2>:" (":name2<1>:")' is correct. All SQL catalog data for '":name<2>:" (":name<1>:")' should be deleted.",Width,0,2) + INS id BEFORE Dlist<-1> + END + END + ELSE + IF Fix + THEN + IF Verbose THEN CALL *WRAP.PRINT("* Both UV_TABLES records are incorrect. Deleting all catalog data for both UV_TABLES records and creating new catalog data for the ":SQLobject:".",Width,0,2) + + tname = name + key = id + catrec = trec + GOSUB DELETE.DATA + INS key BEFORE Dlist<-1> + + tname = name2 + key = Flist + READ catrec FROM uvtables,key ELSE CONTINUE + GOSUB DELETE.DATA + INS key BEFORE Dlist<-1> + + CALL *VERIFY.TABLE(trec<6>,Sica,1,Brief,IsaView) + Flist = Sica + END + ELSE + IF Verbose THEN CALL *WRAP.PRINT("* Both UV_TABLES records are incorrect. All catalog data for both of them should be deleted, and new catalog data for the ":SQLobject:" created.",Width,0,2) + INS id BEFORE Dlist<-1> + INS Flist BEFORE Dlist<-1> + END + END + + END + ELSE + FPlist = INSERT(FPlist,tmp;trec<6>) + Flist = INSERT(Flist,tmp;id) + IF trec<5> # "" + THEN + ViewChange = 0 + newViews = trec<5> + FOR I = 1 to DCOUNT(trec<5>,@VM) + ViewN = trec<5,I>[INDEX(trec<5,I>,".",1)+1,LEN(trec<5,I>)] + ViewS = trec<5,I>[1,INDEX(trec<5,I>,".",1)-1] + Vkey = ViewS:@TM:ViewN + READ viewrec2 FROM uvview,Vkey + ELSE + ECount += 1 + IF Verbose THEN CALL *WRAP.PRINT(" ",Width,0,0) + IF Fix + THEN + LOCATE(trec<5,I>,newViews,1;ttmp) + THEN + IF Verbose THEN CALL *WRAP.PRINT("* Deleting '":ViewN:" (":ViewS:")' from (column VIEWS) in UV_TABLES for ":SQLobject:" '":name<2>:" (":name<1>:")'.",Width,0,2) + DEL newViews<1,ttmp> + ViewChange = 1 + END + END + ELSE IF Verbose THEN CALL *WRAP.PRINT("* ":SQLobject:" '":name<2>:" (":name<1>:")' (column VIEWS) does not have a record in UV_VIEWS for '":ViewN:" (":ViewS:")'.",Width,0,2) + END + NEXT I + IF ViewChange AND Fix + THEN + trec<5> = newViews + WRITE trec ON uvtables,id + END + END + END + +REPEAT + +IF Verbose THEN CALL *WRAP.PRINT(" ",Width,0,0) +IF Verbose THEN CALL *WRAP.PRINT(" ",Width,0,0) +IF Verbose THEN CALL *WRAP.PRINT("Checking UV_COLUMNS for incorrect column information.",Width,0,0) +IF Verbose THEN CALL *WRAP.PRINT(" ",Width,0,0) + +SSELECTV uvcolumns TO listvar + +done = 0 +CCount = 0 +LOOP + READNEXT id FROM listvar ELSE done = 1 +WHILE NOT(done) DO + tname = id[1,INDEX(id,@TM,2)-1] + name = CONVERT(@TM,@FM,id) + + SQLobject = 'table' + LOCATE(tname,Flist;tmp) + THEN + SQLobject = 'table' + READ trec FROM uvtables,Flist ELSE CONTINUE + IF trec<2> = "VIEW" THEN SQLobject = 'view' + LOCATE(name<3>,trec,4;tmp) + ELSE + IF Verbose THEN CALL *WRAP.PRINT(" ",Width,0,0) + IF Fix + THEN + IF Verbose THEN CALL *WRAP.PRINT("* Column '":name<3>:"' does not have data in the UV_TABLES record for the ":SQLobject:" '":name<2>:" (":name<1>:")'. Deleting UV_COLUMNS data for this column.",Width,0,2) + DELETE uvcolumns,id + END + ELSE + IF Verbose THEN CALL *WRAP.PRINT("* Column '":name<3>:"' does not have data in the UV_TABLES record for the ":SQLobject:" '":name<2>:" (":name<1>:")'. UV_COLUMNS data for this column should be deleted.",Width,0,2) + END + END + END + ELSE + LOCATE(tname,Dlist;tmp) + ELSE + CCount += 1 + ECount += 1 + IF Verbose THEN CALL *WRAP.PRINT(" ",Width,0,0) + IF Fix + THEN + IF Verbose THEN CALL *WRAP.PRINT("* Column '":name<3>:"' points to ":SQLobject:" '":name<2>:" (":name<1>:")' which does not have UV_TABLES data. Deleting UV_COLUMNS data for this column.",Width,0,2) + DELETE uvcolumns,id + END + ELSE + IF Verbose THEN CALL *WRAP.PRINT("* Column '":name<3>:"' points to ":SQLobject:" '":name<2>:" (":name<1>:")' which does not have UV_TABLES data. UV_COLUMNS data for this column should be deleted.",Width,0,2) + END + END + END + +REPEAT + +IF Verbose THEN CALL *WRAP.PRINT(" ",Width,0,0) +IF Verbose THEN CALL *WRAP.PRINT(" ",Width,0,0) +IF Verbose THEN CALL *WRAP.PRINT("Checking UV_SCHEMA for incorrect schema information.",Width,0,0) +IF Verbose THEN CALL *WRAP.PRINT(" ",Width,0,0) + +SSELECTV uvschema TO listvar + +Slist = "" +SPlist = "" +done = 0 +LOOP + READNEXT id FROM listvar ELSE done = 1 +WHILE NOT(done) DO + READ srec FROM uvschema,id ELSE CONTINUE + + LOCATE(srec<2>,SPlist;tmp;"AL") + THEN + IF Verbose THEN CALL *WRAP.PRINT(" ",Width,0,0) + ECount +=1 + IF Verbose THEN CALL *WRAP.PRINT("* Schema '":id:"' has the same path as schema '":Slist:"'.",Width,0,2) + CHKNAME = srec<2>:"/VOC" + GOSUB GETSCHEMA + + BEGIN CASE + CASE GetName = -3 + ECount += 1 + IF Verbose THEN CALL *WRAP.PRINT("* '":srec<2>:"' is not a schema.",Width,0,2) + IF Fix + THEN + IF Verbose THEN CALL *WRAP.PRINT("* Neither '":id:"' nor '":Slist:"' is a valid schema. Deleting schema data for them both.",Width,0,2) + CALL *VERIFY.SCHEMA(id,Fix,Brief,1) + CALL *VERIFY.SCHEMA(Slist,Fix,Brief,1) + Slist = DELETE(Slist,tmp) + SPlist = DELETE(SPlist,tmp) + END + ELSE IF Verbose THEN CALL *WRAP.PRINT("* Neither '":id:"' nor '":Slist:"' is a valid schema. Schema data for both should be deleted.",Width,0,2) + CONTINUE + CASE GetName = -2 + + ECount += 1 + IF Verbose THEN CALL *WRAP.PRINT("* There is no schema '":srec<2>:"'.",Width,0,2) + IF Fix + THEN + IF Verbose THEN CALL *WRAP.PRINT("* Neither '":id:"' nor '":Slist:"' is a valid schema. Deleting schema data for them both.",Width,0,2) + CALL *VERIFY.SCHEMA(id,Fix,Brief,1) + CALL *VERIFY.SCHEMA(Slist,Fix,Brief,1) + Slist = DELETE(Slist,tmp) + SPlist = DELETE(SPlist,tmp) + END + ELSE IF Verbose THEN CALL *WRAP.PRINT("* Neither '":id:"' nor '":Slist:"' is a valid schema. Schema data for both should be deleted.",Width,0,2) + CONTINUE + CASE GetName = -1 + ECount += 1 + IF Verbose THEN CALL *WRAP.PRINT("* Unable to verify '":srec<2>:"'.",Width,0,2) + IF Verbose THEN CALL *WRAP.PRINT("* Leaving the schemas with duplicate paths alone.",Width,0,2) + CONTINUE + CASE GetName = 0 + ECount += 1 + IF Verbose THEN CALL *WRAP.PRINT("* '":srec<2>:"' is not an SQL table.",Width,0,2) + IF Fix + THEN + IF Verbose THEN CALL *WRAP.PRINT("* Neither '":id:"' nor '":Slist:"' is a valid schema. Deleting schema data for them both.",Width,0,2) + CALL *VERIFY.SCHEMA(id,Fix,Brief,1) + CALL *VERIFY.SCHEMA(Slist,Fix,Brief,1) + Slist = DELETE(Slist,tmp) + SPlist = DELETE(SPlist,tmp) + END + ELSE IF Verbose THEN CALL *WRAP.PRINT("* Neither '":id:"' nor '":Slist:"' is a valid schema. Schema data for both should be deleted.",Width,0,2) + CONTINUE + END CASE + + IF GetName = id + THEN + IF Fix + THEN + IF Verbose THEN CALL *WRAP.PRINT("* Schema '":Slist:"' is not a valid schema. Deleting schema data for it.",Width,0,2) + CALL *VERIFY.SCHEMA(Slist,Fix,Brief,1) + Slist = id + END + ELSE IF Verbose THEN CALL *WRAP.PRINT("* Schema '":Slist:"' is not a valid schema. It's schema data should be deleted.",Width,0,2) + END + ELSE IF GetName = Slist + THEN + IF Fix + THEN + IF Verbose THEN CALL *WRAP.PRINT("* Schema '":id:"' is not a valid schema. Deleting schema data for it.",Width,0,2) + CALL *VERIFY.SCHEMA(id,Fix,Brief,1) + END + ELSE IF Verbose THEN CALL *WRAP.PRINT("* Schema '":id:"' is not a valid schema. It's schema data should be deleted.",Width,0,2) + END + ELSE + IF Fix + THEN + IF Verbose THEN CALL *WRAP.PRINT("* Neither '":id:"' nor '":Slist:"' is the correct name for this schema. Deleting schema data for them both, and verifying data for '":GetName:"'.",Width,0,2) + CALL *VERIFY.SCHEMA(id,Fix,Brief,1) + CALL *VERIFY.SCHEMA(Slist,Fix,Brief,1) + Slist = DELETE(Slist,tmp) + SPlist = DELETE(SPlist,tmp) + CALL *VERIFY.SCHEMA(SPlist,Fix,Brief,1) + END + ELSE IF Verbose THEN CALL *WRAP.PRINT("* Neither '":id:"' nor '":Slist:"' is the correct name for this schema. Schema data for them both should be deleted, and schema data for '":GetName:"' should be verified.",Width,0,2) + END + END + ELSE + SPlist = INSERT(SPlist,tmp;srec<2>) + Slist = INSERT(Slist,tmp;id) + END +REPEAT + +IF Verbose THEN CALL *WRAP.PRINT(" ",Width,0,0) +IF Verbose THEN CALL *WRAP.PRINT(" ",Width,0,0) +IF Verbose THEN CALL *WRAP.PRINT("Checking UV_ASSOC for incorrect association information.",Width,0,0) +IF Verbose THEN CALL *WRAP.PRINT(" ",Width,0,0) + +SSELECTV uvassoc TO listvar +done = 0 + +LOOP + READNEXT id FROM listvar ELSE done = 1 +WHILE NOT(done) DO + READ trec FROM uvtables,id + THEN + key = id[1,INDEX(id,trec<3>,1)+LEN(trec<3>)-1] + assocname = id[INDEX(id,key,1)+LEN(key)+1,LEN(id)] + name = CONVERT(@TM,@FM,key) + READ atrec FROM uvtables,key + ELSE + ECount += 1 + IF Verbose THEN CALL *WRAP.PRINT(" ",Width,0,0) + IF Verbose THEN CALL *WRAP.PRINT("* There is no Base Table which refers to the UV_TABLES association data for the association '":assocname:"' on table '":name<2>:" (":name<1>:")'.",Width,0,2) + IF Fix + THEN + IF Verbose THEN CALL *WRAP.PRINT("* Deleting SQL catalog data for association '":assocname:"'.",Width,0,2) + DELETE uvassoc,id + DELETE uvtables,id + END + ELSE IF Verbose THEN CALL *WRAP.PRINT("* SQL catalog data for association '":assocname:"' should be deleted.",Width,0,2) + END + CONTINUE + END + ELSE + ECount += 1 + name = CONVERT(@TM,@FM,id) + IF Verbose THEN CALL *WRAP.PRINT(" ",Width,0,0) + IF Verbose THEN CALL *WRAP.PRINT("* No SQL catalog data for association '":name<2>:"' in UV_TABLES." ,Width,0,2) + IF Fix + THEN + IF Verbose THEN CALL *WRAP.PRINT("* Deleting SQL catalog data for association '":name<2>:"'.",Width,0,2) + DELETE uvassoc,id + END + ELSE IF Verbose THEN CALL *WRAP.PRINT("* SQL catalog data for association '":name<2>:"' should be deleted.",Width,0,2) + END +REPEAT + +IF Verbose THEN CALL *WRAP.PRINT(" ",Width,0,0) +IF Verbose THEN CALL *WRAP.PRINT(" ",Width,0,0) +IF Verbose THEN CALL *WRAP.PRINT("Checking UV_VIEWS for incorrect view information.",Width,0,0) +IF Verbose THEN CALL *WRAP.PRINT(" ",Width,0,0) + +SSELECTV uvview TO listvar +done = 0 + +LOOP + READNEXT id FROM listvar ELSE done = 1 +WHILE NOT(done) DO + vname1 = CONVERT(@TM,".",id) + vname2 = CONVERT(@TM,@FM,id) + VwChange = 0 + READ trec FROM uvtables,id + THEN + READ viewrec1 FROM uvview,id ELSE CONTINUE + * Rel 8 use " " as seperator * + * 9 use @VM as seperator * + IF COUNT(@VM, viewrec1<2>) >0 OR NOT (viewrec1<2> = "" OR viewrec1<2> = "no") + THEN + newremarks = CONVERT(@VM, @FM, viewrec1<2>) + remarks1 = CONVERT(@VM, @FM, viewrec1<2>) + END + ELSE + newremarks = CONVERT(" ", @FM, viewrec1<2>) + remarks1 = CONVERT(" ",@FM,viewrec1<2>) + END + FOR I = 1 to DCOUNT(remarks1,@FM) + ** ONLY the first period is to be converted JBG 17337 ** + remarks2 = remarks1 + dotsep = INDEX(remarks2, ".", 1) + remarks2[dotsep, 1] = @TM + READ tablerec1 FROM uvtables,remarks2 + THEN + LOCATE(vname1,tablerec1,5;tmp) + THEN NULL + ELSE + ECount += 1 + IF Verbose THEN CALL *WRAP.PRINT(" ",Width,0,0) + IF Fix + THEN + LOCATE(remarks1,newremarks;ttmp) + THEN + IF Verbose THEN CALL *WRAP.PRINT("* Deleting '":remarks1:"' from (column Tables) for view '":vname2<2>:"' in UV_VIEWS." ,Width,0,2) + DEL newremarks + VwChange = 1 + END + END + ELSE IF Verbose THEN CALL *WRAP.PRINT("* '":remarks1:"' (column VIEWS) does not point to view '":vname2<2>:"'.",Width,0,2) + END + END + ELSE + ECount += 1 + IF Verbose THEN CALL *WRAP.PRINT(" ",Width,0,0) + IF Fix + THEN + LOCATE(remarks1,newremarks;ttmp) + THEN + IF Verbose THEN CALL *WRAP.PRINT("* Deleting '":remarks1:"' from (column Tables) for view '":vname2<2>:"' in UV_VIEWS." ,Width,0,2) + DEL newremarks + VwChange = 1 + END + END + ELSE IF Verbose THEN CALL *WRAP.PRINT("* View '":vname2<2>:"' which references '":remarks1:"' has no SQL catalog data in UV_TABLES." ,Width,0,2) + END + NEXT I + END + ELSE + ECount += 1 + IF Verbose THEN CALL *WRAP.PRINT(" ",Width,0,0) + IF Verbose THEN CALL *WRAP.PRINT("* No SQL catalog data for view '":vname2<2>:"' in UV_TABLES." ,Width,0,2) + IF Fix + THEN + IF Verbose THEN CALL *WRAP.PRINT("* Deleting SQL catalog data for view '":vname2<2>:"'.",Width,0,2) + DELETE uvview,id + END + ELSE IF Verbose THEN CALL *WRAP.PRINT("* SQL catalog data for view '":vname2<2>:"' should be deleted.",Width,0,2) + END + IF VwChange AND Fix + THEN + viewrec1<2> = CONVERT(@FM,@VM, newremarks) + WRITE viewrec1 ON uvview,id + END +REPEAT + +* End of main routine * +RETURN + +*************************************************************************** +*BOTTOM +*************************************************************************** +GETUSER: + ****************** + ** Windows NT port + ** + UID = ICONV(CHKNAME, "PW") + IF STATUS() # 0 THEN UID = -1 + ** + ****************** +RETURN + + +******************************************************************************* +* * +* Given a file name, run UVfile on it and return one of the following values: * +* 0 The file doesn't exists, or is not a uniVerse file. * +* 1 This is a normal uniVerse file. * +* 2 This is a uniVerse SQL file. * +* 3 We do not have the correct permissions to access this file. * +* * +******************************************************************************* +EXISTS: + + EXECUTE OS.EXEC:" '":UV.ROOT:"/bin/UVfile ":CHKNAME:"'" CAPTURING junk + + EXVAL = 1 + IF junk[1,8] = "[EACCES]" THEN + IF Verbose THEN CALL *WRAP.PRINT(" ",Width,0,0) + CALL *WRAP.PRINT("** Permission denied on table '":CHKNAME:"'.",Width,0,2) + EXVAL = 3 + END + IF junk[1,18] = "Permission Denied." THEN + IF Verbose THEN CALL *WRAP.PRINT(" ",Width,0,0) + CALL *WRAP.PRINT("** Permission denied on table '":CHKNAME:"'.",Width,0,2) + EXVAL = 3 + END + + IF junk<1> = CHKNAME:": No such file or directory" THEN EXVAL = 0 + IF junk<1> = CHKNAME:": Not a uniVerse file." THEN EXVAL = 0 + IF junk<1>[LEN(CHKNAME)+1,28] = ": Dynamic file (uniVerse SQL" THEN EXVAL = 2 + IF junk<1>[LEN(CHKNAME)+1,27] = ": Hashed file (uniVerse SQL" THEN EXVAL = 2 + IF IsaView THEN + IF junk<1>[LEN(CHKNAME)+9,20] = ": View (UV type 41)." + THEN EXVAL = 2 + END +RETURN + +*************************************************************************** +* This routine gets a SICA from an SQL file. We return the SICA in the * +* variable Sica or 0 if the is no sica in the file. * +*************************************************************************** +GETSICA: + ******************************* + * Get the SICA for the table. * + ******************************* + SicaCMD = "LIST.SICA ":CHKNAME:" DATA" + EXECUTE SicaCMD CAPTURING Sica + + ******************************************************** + * If there is a problem getting the SICA then Sica = 0 * + ******************************************************** + IF ((Sica[1,9] = "Unable to") OR (Sica[1,9] = "Could not") OR (Sica[20,9] = "Could not") OR (Sica[20,9] = "Unable to")) + THEN + Sica = 0 + END +RETURN + +GETSCHEMA: + EXECUTE OS.EXEC:" '":UV.ROOT:"/bin/UVfile -s ":CHKNAME:"'" CAPTURING junk + + IF junk<1>[1,8] = "[EACCES]" + THEN + CALL *WRAP.PRINT("* Permission denied on schema '":CHKNAME[1,LEN(CHKNAME)-4]:"'.",Width,0,2) + GetName = -1 + END + ELSE IF INDEX(junk,"Permission denied",1) + THEN + CALL *WRAP.PRINT("* Permission denied on schema '":CHKNAME[1,LEN(CHKNAME)-4]:"'.",Width,0,2) + GetName = -1 + END + ELSE IF junk<1>[LEN(junk<1>)-24,LEN(junk<1>)] = "No such file or directory" + THEN + GetName = -2 + END + ELSE + IF junk = "" + THEN + GetName = 0 + END + ELSE + junk = CONVERT(" ",@FM,junk<2>) + GetName = junk + IF GetName = "" THEN GetName = -3 + END + END +RETURN + + +******************************************************************** +* This routine is called when a table does not exist, but it still * +* has SQL catalog data. An easy way for this to happen if for * +* someone to create a table and then delete it with DELETE.FILE. * +******************************************************************** +DELETE.DATA: + +* tname = dynamic array of schema name and table name +* key = key for UV_TABLES data +* catrec = UV_TABLES catalog data + + SQLDobject = 'table' + + IF catrec<2> = "VIEW" + THEN + SQLDobject = 'view' + END + + ******************************************** + * Delete the UV_TABLES data for the table. * + ******************************************** + IF Verbose THEN CALL *WRAP.PRINT("* Deleting table data for ":SQLDobject:" '":tname<2>:" (":tname<1>:")'.",Width,0,2) + DELETE uvtables,key + + ********************************************** + * Delete the UV_COLUMNS data for this table. * + ********************************************** + IF Verbose THEN CALL *WRAP.PRINT("* Deleting column data for ":SQLDobject:" '":tname<2>:" (":tname<1>:")'.",Width,0,2) + FOR I = 1 to DCOUNT(catrec<4>, @VM) + DELETE uvcolumns,key:@TM:catrec<4,I> + NEXT I + + ********************************************** + * Delete the association data for this file. * + * This is both UV_TABLES and UV_ASSOC data. * + ********************************************** + IF Verbose THEN CALL *WRAP.PRINT("* Deleting association data for ":SQLDobject:" '":tname<2>:" (":tname<1>:")'.",Width,0,2) + FOR I = 1 to DCOUNT(catrec<8>, @VM) + DELETE uvtables,key:"_":catrec<8,I> + DELETE uvassoc,key:"_":catrec<8,I> + NEXT I + + ********************************************** + * Delete the view data for this file. * + * This is both UV_TABLES column VIEWS * + * and UV_VIEWS * + ********************************************** + IF catrec<2> = "VIEW" + THEN + READ viewrec FROM uvview,key + THEN + IF COUNT(@VM, viewrec<2>) > 0 OR NOT (viewrec<2> = "" OR viewrec<2> = "no") + THEN remarks = CONVERT(@VM,@FM,viewrec<2>) + ELSE remarks = CONVERT(" ",@FM,viewrec<2>) + vname = CONVERT(@TM,".",key) + FOR I = 1 to DCOUNT(remarks,@FM) + ** convert only the FIRST period to @TM ** + remarks = remarks1 + dotsep = INDEX(remarks, ".", 1) + remarks[dotsep, 1] = @TM + READ tablerec FROM uvtables,remarks + THEN + LOCATE(vname,tablerec,5;tmp) + THEN + IF Verbose THEN CALL *WRAP.PRINT("* Deleting table data (column VIEWS) for view '":tname<2>:" (":tname<1>:")'.",Width,0,2) + DEL tablerec<5,tmp> + WRITE tablerec ON uvtables,remarks + END + END + NEXT I + END + + IF Verbose THEN CALL *WRAP.PRINT("* Deleting view data for view '":tname<2>:" (":tname<1>:")'.",Width,0,2) + DELETE uvview,key + END + + ****************************************************** + * Delete all UV_USERS ownership data for this table. * + ****************************************************** + EXECUTE "SELECT UV_USERS WITH SCHEMAS LIKE ...":tname<1>:"..." RTNLIST rlst CAPTURING junk + +SavRec = 0 +loopa: + READNEXT uid FROM rlst ELSE GOTO loopb + READ delrec FROM uvusers,uid ELSE GOTO loopa + CNT = 1 + BOUNDS = DCOUNT(delrec<5>,@VM) + LOOP WHILE CNT <= BOUNDS DO + IF delrec<5,CNT> = tname<2> AND delrec<4,CNT> = tname<1> + THEN + IF Verbose THEN CALL *WRAP.PRINT("* Deleting ownership record for user '":uid:"'.",Width,0,2) + DEL delrec<5,CNT> + DEL delrec<4,CNT> + BOUNDS = BOUNDS - 1 + SavRec = 1 + END + ELSE + CNT = CNT + 1 + END + REPEAT + IF SavRec + THEN + WRITE delrec ON uvusers,uid ELSE CALL *WRAP.PRINT("* Problems with the write. Unable to delete ownership record for user '":uid:"'.",Width,5,0) + SavRec = 0 + END + GOTO loopa +loopb: + + ******************************************************* + * Delete all UV_USERS permission data for this table. * + ******************************************************* + EXECUTE "SELECT UV_USERS WITH PERM_SCHEMAS LIKE ...":tname<1>:"..." RTNLIST rlst CAPTURING junk + +loopc: + READNEXT uid FROM rlst ELSE GOTO loopd + READ delrec FROM uvusers,uid ELSE GOTO loopc + BOUNDS = DCOUNT(delrec<7>,@VM) + CNT = 1 + LOOP WHILE CNT <= BOUNDS DO + IF delrec<7,CNT> = trec<2> AND delrec<6,CNT> = trec<1> + THEN + IF Verbose THEN CALL *WRAP.PRINT("* Deleting permission record for user '":uid:"'.",Width,0,2) + DEL delrec<7,CNT> + DEL delrec<6,CNT> + BOUNDS = BOUNDS - 1 + SavRec = 1 + END + ELSE + CNT = CNT + 1 + END + REPEAT + IF SavRec + THEN + WRITE delrec ON uvusers,uid ELSE CALL *WRAP.PRINT("* Problems with the write. Unable to delete permission record for user '":uid:"'.",Width,0,2) + SavRec = 0 + END + GOTO loopc +loopd: + +RETURN + +END diff --git a/Ardent/UV/APP.PROGS/VERF.SCHEMA.B b/Ardent/UV/APP.PROGS/VERF.SCHEMA.B new file mode 100755 index 00000000..46bbe5ec --- /dev/null +++ b/Ardent/UV/APP.PROGS/VERF.SCHEMA.B @@ -0,0 +1,631 @@ +******************************************************************************* +* +* SQL catalog verification tool. +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenance log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description......................................... +* 10/14/98 23801 SAP Change copyrights. +* 03/13/96 17797 AGM Replace SH and DOS with OS.EXEC +* 01/25/96 17671 LAG Windows NT port +* 11/11/94 15285 MGM fix VOC message +* 09/29/94 14846 MGM Coordinate UVfile output change for views +* 08/18/94 14217 MGM Add view to delete.data, fixed selects +* 08/12/94 14217 MGM Add view/association support for Rev. 8 +* 02/04/93 12995 DPB WRAP.PRINT call changed to *WRAP.PRINT. +* 07/18/93 10131 DPB Initial creation of catalog verification tool. +* +******************************************************************************* +* +* VERIFY.SCHEMA(SchemaOrPath, Fix, Brief, VTables) +* +* This subroutine will verify the SQL catalog contents for a specific table. +* +* SchemaOrPath This variable is either the Name of the Schema to be +* verified, or the Full Path to the VOC of the Schema to +* be verified. +* Fix This boolean variable indicates whether or not any +* discrepencies found should be fixed. +* Brief This boolean variable indicates the amout of output +* expected from the subroutine. When turned on only +* extrememly critical problems are reported. +* VTables This boolean variable indicates whether of not the +* tables associated with the schema should be verified. +* +******************************************************************************* +SUBROUTINE VERIFY.SCHEMA(SchemaOrPath, Fix, Brief, VTables) +INCLUDE UNIVERSE.INCLUDE VERIFY.COM +INCLUDE UNIVERSE.INCLUDE MACHINE.NAME + +****************** +** Windows NT port +** +DEFFUN IS.FULLPATH(FILESPEC) CALLING "*IS.FULLPATH" +DEFFUN IS.EQPATHS(FILESPEC.A, FILESPEC.B) CALLING "*IS.EQPATHS" +DEFFUN GET.DIRNAME(FILESPEC) CALLING "*GET.DIRNAME" +DEFFUN GET.BASENAME(FILESPEC) CALLING "*GET.BASENAME" +** +****************** + +Verbose = NOT(Brief) ;* Opposite of Brief. (Saves opcodes) +SchemaName = "" ;* Name of the schema being verified. +SchemaPath = "" ;* Path of the schema being verified. +FileList = "" +Path = "" + +nodata = 0 +HaveData = 0 +MoveData = 0 +DeleteData = 0 +LocalSchema = 0 +CatChange = 0 + +IF IS.FULLPATH(SchemaOrPath) +THEN + Path = SchemaOrPath + SchemaPath = Path:"/VOC" + + CHKNAME = SchemaPath + IF Verbose THEN CALL *WRAP.PRINT("Checking permission.",Width,0,0) + GOSUB GETSCHEMA + + BEGIN CASE + CASE GetName = -3 + FECount += 1 + IF Verbose THEN CALL *WRAP.PRINT("** Account '":SchemaOrPath:"' is not a schema.",Width,0,3) + RETURN + CASE GetName = -2 + FECount += 1 + IF Verbose THEN CALL *WRAP.PRINT("** '":SchemaOrPath:"' is not a UniVerse account.",Width,0,3) + RETURN + CASE GetName = -1 + FECount += 1 + IF Verbose THEN CALL *WRAP.PRINT("** Unable to verify '":SchemaOrPath:"'.",Width,0,3) + RETURN + CASE GetName = 0 + FECount += 1 + IF Verbose THEN CALL *WRAP.PRINT("** '":SchemaOrPath:"' is not an SQL table.",Width,0,3) + RETURN + END CASE + SchemaName = GetName + + sid = SchemaName + READ srec FROM uvschema,sid + THEN + IF NOT(IS.EQPATHS(Path, srec<2>)) THEN + ECount += 1 + IF Verbose THEN CALL *WRAP.PRINT("* Possible moved or duplicate schema.",Width,0,2) + CHKNAME = srec<2>:"/VOC" + GOSUB GETSCHEMA + + BEGIN CASE + CASE GetName = -3 + FECount += 1 + IF Verbose THEN CALL *WRAP.PRINT("** Account '":SchemaOrPath:"' is not a schema.",Width,0,3) + RETURN + CASE GetName = SchemaName + FECount += 1 + IF Verbose THEN CALL *WRAP.PRINT("** ":SchemaOrPath:" is a duplicate schema. It cannot have data in the SQL catalog.",Width,0,3) + RETURN + CASE GetName = -1 + FECount += 1 + IF Verbose THEN CALL *WRAP.PRINT("** Schema might be a duplicate.",Width,0,3) + IF Verbose THEN CALL *WRAP.PRINT("** Unable to verify '":SchemaOrPath:"'.",Width,0,3) + RETURN + CASE GetName = -2 + IF Verbose THEN CALL *WRAP.PRINT("Moved Schema.",Width,0,0) + MoveData = 1 + CASE GetName = 0 + IF Verbose THEN CALL *WRAP.PRINT("Moved Schema.",Width,0,0) + MoveData = 1 + CASE GetName # SchemaName + IF Verbose THEN CALL *WRAP.PRINT("Moved Schema.",Width,0,0) + MoveData = 1 + END CASE + END + ELSE + HaveData = 1 + END + END + ELSE + CALL *WRAP.PRINT("* No SQL catalog data exists for schema found at '":Path:"'.",Width,0,2) + nodata = 1 + END + +END +ELSE + + IF SchemaOrPath = "" AND @SCHEMA = "" + THEN + FECount += 1 + IF Verbose THEN CALL *WRAP.PRINT("** The current account is not a schema." ,Width,0,3) + RETURN + END + ELSE IF SchemaOrPath = "" THEN + LocalSchema = 1 + SchemaOrPath = @SCHEMA + SchemaName = @SCHEMA + + ************************************** + * Get the current working directory. * + ************************************** + Path = @PATH + SchemaPath = Path:"/VOC" + END + + sid = SchemaOrPath + IF Verbose THEN CALL *WRAP.PRINT("Checking permission.",Width,0,0) + + READ srec FROM uvschema,sid + THEN + HaveData = 1 + + Path = srec<2> + SchemaPath = Path:"/VOC" + IF NOT(LocalSchema) + THEN + SchemaName = SchemaOrPath + CHKNAME = SchemaPath + + GOSUB GETSCHEMA + + BEGIN CASE + CASE GetName = -3 + ECount += 1 + IF Verbose THEN CALL *WRAP.PRINT("* The VOC at '":Path:"' is not a schema VOC.",Width,0,2) + DeleteData = 1 + CASE GetName = -1 + FECount += 1 + IF Verbose THEN CALL *WRAP.PRINT("** Unable to verify '":SchemaOrPath:"'.",Width,0,3) + RETURN + CASE GetName = -2 + ECount += 1 + IF Verbose THEN CALL *WRAP.PRINT("* '":Path:"' is not a UniVerse account.",Width,0,3) + DeleteData = 1 + CASE GetName = 0 + IF Verbose THEN CALL *WRAP.PRINT("* ":Path:"/VOC is not an SQL table.",Width,0,3) + DeleteData = 1 + CASE GetName # SchemaOrPath + ECount += 1 + IF Verbose THEN CALL *WRAP.PRINT("* Cannot find schema '":SchemaOrPath:"'.",Width,0,2) + DeleteData = 1 + CASE 1 + SchemaName = GetName + END CASE + + END + END + ELSE + IF LocalSchema + THEN + nodata = 1 + END + ELSE + FECount += 1 + IF Verbose THEN CALL *WRAP.PRINT("** No SQL catalog data for schema '":SchemaOrPath:"' in UV_SCHEMA.",Width,0,3) + RETURN + END + END +END + +IF nodata = 1 +THEN + ECount += 1 + IF Fix + THEN + IF Verbose THEN CALL *WRAP.PRINT("* Creating catalog data for the schema '":SchemaOrPath:"'.",Width,0,2) + OPENPATH SchemaPath TO tmpfile ELSE + CALL *WRAP.PRINT("** Unable to open '":SchemaPath:"'.",Width,0,3) + RETURN + END + + STATUS statrec FROM tmpfile ELSE + CALL *WRAP.PRINT("** Cannot get status.",Width,0,3) + RETURN + END + CLOSE tmpfile + + srec<1> = statrec<8> + srec<2> = Path + + WRITE srec ON uvschema,sid + + END + ELSE IF Verbose THEN CALL *WRAP.PRINT("* Catalog data for schema '":SchemaOrPath:"' should be created.",Width,0,2) +END +ELSE + IF MoveData = 1 + THEN + ECount += 1 + IF Fix + THEN + GOSUB MOVE.DATA + END + ELSE IF Verbose THEN CALL *WRAP.PRINT("* Data for the schema '":SchemaOrPath:"' should be moved.",Width,0,2) + END + ELSE IF DeleteData = 1 + THEN + ECount += 1 + IF Fix + THEN + GOSUB DELETE.DATA + END + ELSE IF Verbose THEN CALL *WRAP.PRINT("* Data for the schema '":SchemaOrPath:"' should be deleted.",Width,0,2) + RETURN + END + +************************************************************************ +* Open the file and get the status. Use the status to verify the owner * +* of the file against the SICA and the catalog data. * +************************************************************************ + OPENPATH SchemaPath TO tmpfile ELSE + FECount += 1 + CALL *WRAP.PRINT("** You don't have the correct permissions to verify this schema.",Width,0,3) + RETURN + END + + STATUS statrec FROM tmpfile ELSE + FECount += 1 + CALL *WRAP.PRINT("** Cannot get status.",Width,0,3) + RETURN + END + CLOSE tmpfile + + IF srec<1> # statrec<8> + THEN + ECount += 1 + IF Fix + THEN + IF Verbose THEN CALL *WRAP.PRINT("* Changing schema owner to match actual owner.",Width,0,2) + srec<1> = statrec<8> + CatChange = 1 + END + ELSE IF Verbose THEN CALL *WRAP.PRINT("* OS owner (of VOC) does not agree with catalog specified owner.",Width,0,2) + END + + IF CatChange = 1 + THEN + WRITE srec ON uvschema,sid + END + +END + +IF VTables +THEN + GOSUB BUILDLIST + IF DCOUNT(FileList,@FM) = 0 AND DCOUNT(PFileList,@FM) = 0 AND DCOUNT(VFileList,@FM) = 0 + THEN + IF Verbose THEN CALL *WRAP.PRINT("No tables found for the schema '":SchemaName:"'.",Width,0,0) + END + + FOR I = 1 to DCOUNT(FileList,@FM) + IF Verbose THEN CALL *WRAP.PRINT(" ",Width,5,0) + IF Verbose THEN CALL *WRAP.PRINT("Verifying table '":FileList:"'.",Width,0,0) + CALL *VERIFY.TABLE(FileList, Path:@FM:SchemaName, Fix, Brief, 0) + NEXT I + + FOR I = 1 to DCOUNT(VFileList,@FM) + IF Verbose THEN CALL *WRAP.PRINT(" ",Width,5,0) + IF Verbose THEN CALL *WRAP.PRINT("Verifying view '":VFileList:"'.",Width,0,0) + CALL *VERIFY.TABLE(VFileList, Path:@FM:SchemaName, Fix, Brief, 1) + NEXT I + + FOR I = 1 to DCOUNT(PFileList,@FM) + IF I = 1 + THEN + IF Verbose THEN CALL *WRAP.PRINT(" ",Width,5,0) + IF Verbose THEN CALL *WRAP.PRINT("These tables/views could not be verified (due to OS or SQL permissions):.",Width,0,0) + END + FECount += 1 + IF Verbose THEN CALL *WRAP.PRINT("** ":PFileList,Width,0,3) + NEXT I +END + +RETURN + +GETSCHEMA: + EXECUTE OS.EXEC: " '":UV.ROOT:"/bin/UVfile -s ":CHKNAME:"'" CAPTURING junk + + IF junk<1>[1,8] = "[EACCES]" + THEN + CALL *WRAP.PRINT("* Permission denied on Schema '":CHKNAME:"'.",Width,0,2) + GetName = -1 + END + ELSE IF INDEX(junk,"Permission denied",1) + THEN + CALL *WRAP.PRINT("* Permission denied on Schema '":CHKNAME:"'.",Width,0,2) + GetName = -1 + END + ELSE IF junk<1>[LEN(junk<1>)-24,LEN(junk<1>)] = "No such file or directory" + THEN + GetName = -2 + END + ELSE + IF junk = "" + THEN + GetName = 0 + END + ELSE + junk = CONVERT(" ",@FM,junk<2>) + GetName = junk + IF GetName = "" THEN GetName = -3 + END + END +RETURN + +*************************************************************************** +* There needs to be valid data in the variable Path and SchemaName for +* this routine to work. +*************************************************************************** +BUILDLIST: + IF Verbose THEN PRINT ON Pchan "Building table list.": + ****************** + ** Windows NT port + ** + IF OS.TYPE = "UNIX" + THEN + EXECUTE "SH -c 'ls ":Path:"'" CAPTURING dlist + END + ELSE + EXECUTE "DOS /C '":UV.ROOT:"/bin/uvwalk ":Path:"'" CAPTURING dlist + END + ** + ****************** + IF Verbose THEN PRINT ".": + dlist = dlist[1,LEN(dlist)-1] + EXECUTE 'SELECT UV_TABLES WITH TABLE_SCHEMA = "':SchemaName:'" AND TABLE_TYPE = "BASE TABLE"' RTNLIST slist CAPTURING junk + EXECUTE 'SELECT UV_TABLES WITH TABLE_SCHEMA = "':SchemaName:'" AND TABLE_TYPE = "VIEW"' RTNLIST vlist CAPTURING junk + IF Verbose THEN PRINT ".": + + FileList = "" + VFileList = "" + PFileList = "" + + bounds = DCOUNT(dlist,@FM) + FOR i = 1 to bounds + IF dlist[1,2] = "D_" THEN CONTINUE + + CHKNAME = Path:"/":dlist + + GOSUB EXISTS + BEGIN CASE + CASE EXVAL = 2 + LOCATE(dlist,FileList;tmp) + ELSE + IF Verbose THEN PRINT On Pchan ".": + INS Path:"/":dlist BEFORE FileList<-1> + END + CASE EXVAL = 3 + LOCATE(dlist,PFileList;tmp) + ELSE + IF Verbose THEN PRINT On Pchan ".": + INS Path:"/":dlist BEFORE PFileList<-1> + END + CASE EXVAL = 4 + LOCATE(dlist,VFileList;tmp) + ELSE + IF Verbose THEN PRINT On Pchan ".": + INS Path:"/":dlist BEFORE VFileList<-1> + END + END CASE + NEXT i + + done = 0 + LOOP + READNEXT id FROM slist ELSE done = 1 + WHILE NOT(done) DO + name = CONVERT(@TM,@FM,id) + READ trec FROM uvtables,id ELSE CONTINUE + + Tpath = GET.DIRNAME(trec<6>) + + LOCATE(trec<6>,FileList;tmp) + ELSE + LOCATE(trec<6>,PFileList;tmp) + ELSE + IF Verbose THEN PRINT On Pchan ".": + IF Tpath = Path + THEN + INS name<2> BEFORE FileList<-1> + END + ELSE + INS trec<6> BEFORE FileList<-1> + END + END + END + REPEAT + + done = 0 + LOOP + READNEXT id FROM vlist ELSE done = 1 + WHILE NOT(done) DO + name = CONVERT(@TM,@FM,id) + READ trec FROM uvtables,id ELSE CONTINUE + + Tpath = GET.DIRNAME(trec<6>) + + LOCATE(trec<6>,VFileList;tmp) + ELSE + LOCATE(trec<6>,PFileList;tmp) + ELSE + IF Verbose THEN PRINT On Pchan ".": + IF Tpath = Path + THEN + INS name<2> BEFORE VFileList<-1> + END + ELSE + INS trec<6> BEFORE VFileList<-1> + END + END + END + REPEAT + + IF Verbose THEN PRINT On Pchan "Done." +RETURN + + +******************************************************************************* +* * +* Given a file name, run UVfile on it and return one of the following values: * +* 0 The file doesn't exists, or is not a uniVerse file. * +* 1 This is a normal uniVerse file. * +* 2 This is a uniVerse SQL file. * +* 3 We do not have the correct permissions to access this file. * +* * +******************************************************************************* +EXISTS: + EXECUTE OS.EXEC:" '":UV.ROOT:"/bin/UVfile ":CHKNAME:"'" CAPTURING junk + EXVAL = 1 + IF junk[1,8] = "[EACCES]" THEN EXVAL = 3 + IF junk[1,18] = "Permission Denied." THEN EXVAL = 3 + IF junk<1> = CHKNAME:": No such file or directory" THEN EXVAL = 0 + IF junk<1> = CHKNAME:": Not a uniVerse file." THEN EXVAL = 0 + IF junk<1>[LEN(CHKNAME)+1,28] = ": Dynamic file (uniVerse SQL" THEN EXVAL = 2 + IF junk<1>[LEN(CHKNAME)+1,27] = ": Hashed file (uniVerse SQL" THEN EXVAL = 2 + IF junk<1>[LEN(CHKNAME)+9,20] = ": View (UV type 41)." THEN EXVAL = 4 +RETURN + +DELETE.DATA: + IF Verbose THEN CALL *WRAP.PRINT("* Deleting catalog data for schema '":SchemaOrPath:"'.",Width,0,2) + DELETE uvschema,SchemaName + + EXECUTE "SELECT UV_TABLES WITH TABLE_SCHEMA = ":SchemaName:"" RTNLIST tmplist CAPTURING junk + done = 0 + LOOP + READNEXT id FROM tmplist ELSE done = 1 + WHILE NOT(done) DO + name = convert(@TM,@FM,id) + IF Verbose THEN CALL *WRAP.PRINT("* Deleting table data for '":name<2>:"'.",Width,0,2) + DELETE uvtables,id + REPEAT + + EXECUTE "SELECT UV_COLUMNS WITH TABLE_SCHEMA = ":SchemaName:"" RTNLIST tmplist CAPTURING junk + done = 0 + LOOP + READNEXT id FROM tmplist ELSE done = 1 + WHILE NOT(done) DO + name = convert(@TM,@FM,id) + IF Verbose THEN CALL *WRAP.PRINT("* Deleting columns data for '":name<3>:"'.",Width,0,2) + DELETE uvcolumns,id + REPEAT + + EXECUTE "SELECT UV_ASSOC WITH ASSOC_SCHEMA = ":SchemaName:"" RTNLIST tmplist CAPTURING junk + done = 0 + LOOP + READNEXT id FROM tmplist ELSE done = 1 + WHILE NOT(done) DO + name = convert(@TM,@FM,id) + IF Verbose THEN CALL *WRAP.PRINT("* Deleting association data for '":name<2>:"'.",Width,0,2) + DELETE uvassoc,id + REPEAT + + EXECUTE "SELECT UV_VIEWS WITH VIEW_SCHEMA = ":SchemaName:"" RTNLIST tmplist CAPTURING junk + done = 0 + LOOP + READNEXT id FROM tmplist ELSE done = 1 + WHILE NOT(done) DO + name = convert(@TM,@FM,id) + IF Verbose THEN CALL *WRAP.PRINT("* Deleting view data for '":name<2>:"'.",Width,0,2) + DELETE uvview,id + REPEAT + ****************************************************** + * Delete all UV_USERS ownership data for this table. * + ****************************************************** + EXECUTE "SELECT UV_USERS WITH SCHEMAS LIKE ...":SchemaName:"..." RTNLIST rlst CAPTURING junk + + SavRec = 0 + done = 0 + LOOP + READNEXT id FROM rlst ELSE done = 1 + WHILE NOT(done) DO + READ delrec FROM uvusers,id ELSE CONTINUE + + BOUNDS = DCOUNT(delrec<5>,@VM) + CNT = 1 + + LOOP WHILE CNT <= BOUNDS DO + IF delrec<4,CNT> = SchemaName + THEN + IF Verbose THEN CALL *WRAP.PRINT("* Deleting ownership record for user '":id:"' on table '":delrec<5,CNT>:"'.",Width,0,2) + DEL delrec<5,CNT> + DEL delrec<4,CNT> + BOUNDS = BOUNDS - 1 + SavRec = 1 + END + ELSE + CNT = CNT + 1 + END + REPEAT + IF SavRec + THEN + WRITE delrec ON uvusers,id ELSE CALL *WRAP.PRINT("* Problems with the write. Unable to delete ownership record for user '":id:"'.",Width,0,2) + SavRec = 0 + END + REPEAT + + ******************************************************* + * Delete all UV_USERS permission data for this table. * + ******************************************************* + EXECUTE "SELECT UV_USERS WITH PERM_SCHEMAS LIKE ...":SchemaName:"..." RTNLIST rlst CAPTURING junk + + SavRec = 0 + done = 0 + LOOP + READNEXT id FROM rlst ELSE done = 1 + WHILE NOT(done) DO + READ delrec FROM uvusers,id ELSE CONTINUE + BOUNDS = DCOUNT(delrec<7>,@VM) + CNT = 1 + + LOOP WHILE CNT <= BOUNDS DO + IF delrec<6,CNT> = SchemaName + THEN + IF Verbose THEN CALL *WRAP.PRINT("* Deleting permission record for user '":id:"' on table '":delrec<7,CNT>:"'.",Width,0,2) + DEL delrec<7,CNT> + DEL delrec<6,CNT> + BOUNDS = BOUNDS - 1 + SavRec = 1 + END + ELSE + CNT = CNT + 1 + END + REPEAT + IF SavRec + THEN + WRITE delrec ON uvusers,id ELSE CALL *WRAP.PRINT("* Problems with the write. Unable to delete permission record for users '":id:"'.",Width,0,2) + SavRec = 0 + END + REPEAT + +RETURN + +MOVE.DATA: + IF Verbose THEN CALL *WRAP.PRINT("* Moving data for schema '":SchemaName:"'.",Width,0,2) + srec<2> = Path + WRITE srec ON uvschema,sid + + EXECUTE "SELECT UV_TABLES WITH TABLE_SCHEMA = ":SchemaName:"" RTNLIST tlist CAPTURING junk + + done = 0 + LOOP + READNEXT id FROM tlist ELSE done = 1 + WHILE NOT(done) DO + READ trec FROM uvtables,id ELSE CONTINUE + name = convert(@TM,@FM,id) + IF Verbose THEN CALL *WRAP.PRINT("* Moving data for table '":name<2>:"'.",Width,0,2) + + trec<6> = Path:"/":GET.BASENAME(trec<6>) + trec<7> = Path:"/":GET.BASENAME(trec<7>) + + WRITE trec ON uvtables,id + REPEAT +RETURN diff --git a/Ardent/UV/APP.PROGS/VERF.SCHEMS.B b/Ardent/UV/APP.PROGS/VERF.SCHEMS.B new file mode 100755 index 00000000..5e6ce142 --- /dev/null +++ b/Ardent/UV/APP.PROGS/VERF.SCHEMS.B @@ -0,0 +1,189 @@ +******************************************************************************* +* +* SQL catalog verification tool. +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenance log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description......................................... +* 10/14/98 23801 SAP Change copyrights. +* 03/13/96 17797 AGM Replace SH and DOS with OS.EXEC +* 01/25/96 17671 LAG Windows NT port +* 07/18/93 10131 DPB Initial creation of catalog verification tool. +* +******************************************************************************* +* +* VERIFY.SCHEMAS(Fix, Brief, VTables) +* +* This subroutine will verify the SQL catalog contents for all schemas. +* +* Fix This boolean variable indicates whether or not any +* discrepencies found should be fixed. +* Brief This boolean variable indicates the amout of output +* expected from the subroutine. When turned on only +* extrememly critical problems are reported. +* VTables This boolean variable indicates whether of not the +* tables associated with the schema should be verified. +* +******************************************************************************* +SUBROUTINE VERIFY.SCHEMAS(Fix, Brief, VTables) +INCLUDE UNIVERSE.INCLUDE VERIFY.COM +INCLUDE UNIVERSE.INCLUDE MACHINE.NAME + +****************** +** Windows NT port +** +DEFFUN IS.FULLPATH(FILESPEC) CALLING "*IS.FULLPATH" +DEFFUN IS.EQPATHS(FILESPEC.A, FILESPEC.B) CALLING "*IS.EQPATHS" +DEFFUN GET.DIRNAME(FILESPEC) CALLING "*GET.DIRNAME" +DEFFUN GET.BASENAME(FILESPEC) CALLING "*GET.BASENAME" +** +****************** + +Verbose = NOT(Brief) ;* Opposite of Brief. (Saves opcodes) + +GOSUB BUILDLIST: + +FOR I = 1 to SchemaCount + CALL *WRAP.PRINT(" ",Width,0,0) + CALL *WRAP.PRINT("Verifying schema '":SchemaList:"'.",Width,0,0) + CALL *VERIFY.SCHEMA(Schemas, Fix, Brief, VTables) +NEXT I + +FOR I = 1 to DCOUNT(Plist,@FM) + IF I = 1 + THEN + CALL *WRAP.PRINT(" ",Width,0,0) + CALL *WRAP.PRINT("These schemas could not be verified (due to OS or SQL permissions):",Width,0,0) + END + + CALL *WRAP.PRINT("** Schema '":Plist:"' located in '":PPlist:"'.",Width,0,3) + FECount += 1 +NEXT I + +RETURN + +BUILDLIST: + IF LPTR THEN CRT "Searching entire system for schemas. This may take a while." + IF Verbose THEN CALL *WRAP.PRINT("Searching entire system for schemas. This may take a while.",Width,0,0) + ****************** + ** Windows NT port + ** + IF OS.TYPE = "UNIX" + THEN + EXECUTE "SH -c 'find / -name VOC -exec ":UV.ROOT:"/bin/UVfile -s {} \;'" CAPTURING junk + END + ELSE + EXECUTE "DOS /C '":UV.ROOT:"/bin/uvwalk \ -name VOC -recurse -all -ntfs -uvfile'" CAPTURING junk + END + ** + ****************** + IF Verbose THEN PRINT ON Pchan "Building schema list.": + NUMFLDS = COUNT(junk,@FM) + Schemas = "" + SchemaList = "" + SchemaPList = "" + SchemaCount = 0 + Plist = "" + PPlist = "" + + FOR I = 2 to NUMFLDS + IF UPCASE(junk[1,13]) = "UNIVERSE/SQL:" + THEN + IF Verbose THEN PRINT ON Pchan ".": + SchemaCount = SchemaCount + 1 + tmp = CONVERT(" ",@FM,junk) + SchemaList = tmp<8> + ****************** + ** Windows NT port + ** + IF OS.TYPE = "UNIX" + THEN + tmp = CONVERT(":",@FM,junk) + END + ELSE + tmp = CONVERT(": ",@FM,junk) + END + ** + ****************** + SchemaPList = tmp<1> + tmp = SchemaPList[1,LEN(SchemaPList)-4] + SchemaPList = tmp + Schemas = tmp + I = I+1 + END + NEXT I + + + SELECTV uvschema TO schemlist + + done = 0 + LOOP + READNEXT id FROM schemlist ELSE done = 1 + WHILE NOT(done) + READ srec FROM uvschema,id ELSE CONTINUE + LOCATE(srec<2>,SchemaPList;tmp) + THEN + IF SchemaList # id + THEN + INS id BEFORE Plist<-1> + INS srec<2> BEFORE PPlist<-1> + END + END + ELSE + IF Verbose THEN PRINT ON Pchan ".": + CHKNAME = srec<2>:"/VOC" + GOSUB GETSCHEMA + IF GetName = -1 + THEN + INS id BEFORE Plist<-1> + INS srec<2> BEFORE PPlist<-1> + END + ELSE + SchemaCount = SchemaCount + 1 + SchemaPList = srec<2> + SchemaList = id + Schemas = id + END + END + REPEAT + IF Verbose THEN PRINT ON Pchan ".done" + +RETURN + +GETSCHEMA: + EXECUTE OS.EXEC:" '":UV.ROOT:"/bin/UVfile -s ":CHKNAME:"'" CAPTURING junk + + IF junk<1>[1,8] = "[EACCES]" + THEN + GetName = -1 + END + ELSE IF INDEX(junk,"Permission denied",1) + THEN + GetName = -1 + END + ELSE IF junk<1>[LEN(junk<1>)-24,LEN(junk<1>)] = "No such file or directory" + THEN + GetName = -2 + END + ELSE + IF junk = "" + THEN + GetName = 0 + END + ELSE + junk = CONVERT(" ",@FM,junk<2>) + GetName = junk + IF GetName = "" THEN GetName = -3 + END + END +RETURN + diff --git a/Ardent/UV/APP.PROGS/VERF.TAB.B b/Ardent/UV/APP.PROGS/VERF.TAB.B new file mode 100755 index 00000000..94e0020d --- /dev/null +++ b/Ardent/UV/APP.PROGS/VERF.TAB.B @@ -0,0 +1,2674 @@ +******************************************************************************* +* +* SQL catalog verification tool. +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenance log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description......................................... +* 11/03/98 23807 JBG update message for correct account +* 10/29/98 23807 JBG Better output for WRITE errors on UV_COLUMNS +* 10/14/98 23801 SAP Change copyrights. +* 10/14/98 23802 JBG Fix FileName +* 04/17/97 20202 MGM Fix for DATA and DICT keywords +* 11/07/96 19580 AGM Fix execute of UVfile in EXISTS on NT +* 07/11/96 18810 HSB Remove references to old style UV_ASSOC.ORDERING data. +* 04/24/96 15080 JBG PK go into ASSOC when UV_TABLES built. +* 04/24/96 17683 JBG Use SYSTEM(1031,string) to quote tablename). +* 03/26/96 17337 JBG UV_VIEWS table col is multi-valued +* 03/13/96 17797 AGM Replace SH and DOS with OS.EXEC +* 01/25/96 17671 LAG Windows NT port +* 01/05/96 17337 JBG New UV_VIEWS cols, fix ASSOC, multiple primary ketys +* 05/03/95 15080 JBG ASSOC def different then SICA +* 03/06/95 15080 JBG Put Primary keys in assoc UV_TABLES COLUMNS entry +* 09/29/94 14846 MGM Coordinate UVfile output change for views +* 08/12/94 14217 MGM Add view/association support for Rev. 8 +* 08/27/93 11990 DPB VERIFY.SQL changed to run with breaks diabled. +* 07/18/93 10131 DPB Initial creation of catalog verification tool. +* +******************************************************************************* +* +* VERIFY.TABLE(NameOrPath, Schema, Fix, Brief, IsaView) +* +* This subroutine will verify the SQL catalog contents for a specific table. +* +* NameOrPath This variable is either the Name of the table to be +* verified, or the Full Path to the table to be verified. +* Schema This variable tells you what schema we expect the table +* to be located in. +* Fix This boolean variable indicates whether or not any +* discrepencies found should be fixed. +* Brief This boolean variable indicates the amout of output +* expected from the subroutine. When turned on only +* extrememly critical problems are reported. +* IsaView This boolean variable indicates whether or not +* a view is being verified +******************************************************************************* + SUBROUTINE VERIFY.TABLE(NameOrPath, SchemaL, Fix, Brief, IsaView) + INCLUDE UNIVERSE.INCLUDE VERIFY.COM + INCLUDE UNIVERSE.INCLUDE MACHINE.NAME + + ****************** + ** Windows NT port + ** + DEFFUN IS.FULLPATH(FILESPEC) CALLING "*IS.FULLPATH" + DEFFUN IS.EQPATHS(FILESPEC.A, FILESPEC.B) CALLING "*IS.EQPATHS" + DEFFUN GET.DIRNAME(FILESPEC) CALLING "*GET.DIRNAME" + DEFFUN GET.BASENAME(FILESPEC) CALLING "*GET.BASENAME" + ** + ****************** + + Schema = SchemaL ; * Get around writting to @Schema problem. + schemachange = 0 ; * The schema name has changed for this table. + namechange = 0 ; * The table name has changed for this table. + nodata = 0 ; * There is no SQL catalog data for this table. + copydata = 0 ; * The SQL catalog data for this table needs + ; * to be copied. + movedata = 0 ; * The SQL catalog data for this table points + ; * to the wrong place. We must move it. + Verbose = NOT(Brief) ; * Opposite of Brief. (Saves opcodes) + IsaTable = NOT(IsaView) ; * Opposite of IsaView + CatChange = 0 ; * The catalog data for the file has been + ; * changed + HaveData = 0 ; * The catalog data for the table exists. + CrossSchema = 0 ; * For views which span schemas + + IF IsaView THEN SQLobject = 'view' + ELSE SQLobject = 'table' + + IF IS.FULLPATH(NameOrPath) + THEN + + TablePath = NameOrPath + TableName = GET.BASENAME(NameOrPath) + FileName = TableName + path = GET.DIRNAME(NameOrPath) + + IF COUNT(Schema,@FM) + THEN + path = Schema<1> + Schema = Schema<2> + if path # GET.DIRNAME(NameOrPath) THEN + path = GET.DIRNAME(NameOrPath) + END + END + + ******************************************************************** + * Test the pathname, check for permissions, and see if the file is * + * an SQL table. * + ******************************************************************** + IF Verbose THEN CALL *WRAP.PRINT("Checking file permissions.",Width,0,0) + CHKNAME = NameOrPath + GOSUB EXISTS + + ***************************************************************** + * These are all the error conditions. EXVAL = 2 is an SQL file. * + ***************************************************************** + BEGIN CASE + CASE EXVAL = 0 + FECount += 1 + CALL *WRAP.PRINT("** There is no ":SQLobject:" '":NameOrPath:"'.",Width,0,3) + RETURN + + CASE EXVAL = 1 + FECount += 1 + CALL *WRAP.PRINT("** '":NameOrPath:"' is not an SQL ":SQLobject:".",Width,0,3) + RETURN + + CASE EXVAL = 3 + FECount += 1 + CALL *WRAP.PRINT("** Unable to verify '":NameOrPath:"'.",Width,0,3) + RETURN + END CASE + + ****************************** + * Get the SICA for the file. * + ****************************** + GOSUB GETSICA + IF Sica = 0 THEN + FECount += 1 + CALL *WRAP.PRINT("** There are problems with the SICA of the ":SQLobject:" '":NameOrPath:"'.",Width,0,3) + RETURN + END + + ********************************************************************* + * Get the Schema name for the directory in which the table resides. * + ********************************************************************* + IF FileName # Sica THEN + TableName = Sica + END + + VocPath = GET.DIRNAME(NameOrPath):"/VOC" + key = Sica + READ catrec FROM uvschema,key + THEN + IF catrec<2> # path THEN + VocPath = catrec<2>:"/VOC" + END + END + ELSE + FECount += 1 + CALL *WRAP.PRINT("** No SQL catalog data for schema '":key:"' in UV_SCHEMA.",Width,0,3) + RETURN + END + + EXECUTE OS.EXEC:" '":UV.ROOT:"/bin/UVfile -s ":VocPath:"'" CAPTURING junk + IF UPCASE(junk<2>[1,13]) = "UNIVERSE/SQL:" + THEN + junk = CONVERT(" ",@FM,junk<2>) + Schema = junk + END + ELSE + FECount += 1 + CALL *WRAP.PRINT("** The ":SQLobject:" '":catrec<2>:"' is not located in a valid schema.",Width,0,3) + RETURN + END + + ********************************************************* + * Open the VOC file and read a record of the same name. * + ********************************************************* + OPENPATH VocPath TO vocfile + ELSE + FECount += 1 + CALL *WRAP.PRINT("** Unable to open the VOC file.",Width,0,3) + RETURN + END + + NeedVoc = 0 + READ namerec FROM vocfile,TableName + THEN + IF namerec<1>[1,1] # 'F' + THEN + ECount += 1 + CALL *WRAP.PRINT("* Item '":TableName:"' in the VOC file is not an 'F' pointer.",Width,0,2) + END + + IF namerec<2> # NameOrPath[LEN(NameOrPath)-LEN(namerec<2>)+1,LEN(NameOrPath)] + THEN + ECount += 1 + IF Verbose THEN CALL *WRAP.PRINT("* Another file already has a VOC F pointer called '":TableName:"'.",Width,0,2) + END + END + ELSE + IF Fix + THEN + IF Verbose THEN CALL *WRAP.PRINT("* Adding VOC F pointer for the ":SQLobject:" '":TableName:"' in the schema '":Schema:"'.",Width,0,2) + NeedVoc = 1 + END + ELSE + ECount += 1 + IF Verbose THEN CALL *WRAP.PRINT("* There is no VOC F pointer for the ":SQLobject:" '":TableName:"' in the schema '":Schema:"'.",Width,0,2) + END + END + + key = Schema:@TM:TableName + + *************************************** + * Get the catalog data for the table. * + *************************************** + READ catrec FROM uvtables,key + ********************************************** + * we have the SQL catalog data for the table * + ********************************************** + THEN + HaveData = 1 + IF NOT(IS.EQPATHS(NameOrPath, catrec<6>)) THEN + IF Verbose THEN CALL *WRAP.PRINT("Existing catalog data points to another ":SQLobject:".",80,5,0) + END + END + ELSE + key = Sica:@TM:Sica + READ catrec FROM uvtables,key + THEN + IF Verbose THEN CALL *WRAP.PRINT("Possible Moved or Copied ":SQLobject:".",Width,0,0) + END + ELSE + ECount += 1 + CALL *WRAP.PRINT("* No SQL catalog data for the ":SQLobject:" '":TableName:" (":Schema:")' in UV_TABLES.",Width,0,2) + nodata = 1 + END + END + + IF NeedVoc = 1 + THEN + namerec = "F":@FM:catrec<6>:@FM:catrec<7> + WRITE namerec ON vocfile,TableName + END + END +****************************************************************************** +* +* This section is for calling verify.table with a table name. +* +****************************************************************************** + ELSE + + IF COUNT(Schema,@FM) + THEN + path = Schema<1> + Schema = Schema<2> + END + ELSE + ************************************** + * Get the current working directory. * + ************************************** + path = @PATH + END + + IF Schema = "" + THEN + FECount += 1 + CALL *WRAP.PRINT("** The current directory is not a valid schema.",Width,0,3) + RETURN + END + + IF IsaView + THEN + IF (@SCHEMA # Schema) THEN CrossSchema = 1 + END + key = Schema:@TM:NameOrPath + + *************************************** + * Get the catalog data for the table. * + *************************************** + READ catrec FROM uvtables,key + ********************************************** + * we have the SQL catalog data for the table * + ********************************************** + THEN + + HaveData = 1 + + IF (catrec<2> # "BASE TABLE") AND (IsaTable) + THEN + FECount += 1 + CALL *WRAP.PRINT("** '":NameOrPath:"' is not an SQL base table.",Width,0,3) + RETURN + END + + *********************************************** + * Check file existence, type and permissions. * + *********************************************** + IF Verbose THEN CALL *WRAP.PRINT("Checking file permissions.",Width,0,0) + CHKNAME = catrec<6> + GOSUB EXISTS + + BEGIN CASE + CASE EXVAL = 0 + ECount += 1 + IF Verbose THEN CALL *WRAP.PRINT("* There is no ":SQLobject:" '":NameOrPath:"' in the schema '":Schema:"'.",Width,0,2) + + IF NOT(Fix) + THEN + IF Verbose THEN CALL *WRAP.PRINT("* SQL catalog data for ":SQLobject:" '":NameOrPath:" (":Schema:")' should be deleted.",Width,0,2) + END + ELSE + IF Verbose THEN CALL *WRAP.PRINT("* Deleting SQL catalog data for ":SQLobject:" '":NameOrPath:"'.",Width,0,2) + GOSUB DELETE.DATA + END + RETURN + + CASE EXVAL = 1 + ECount += 1 + IF Verbose THEN CALL *WRAP.PRINT("* '":NameOrPath:"' is not an SQL ":SQLobject:".",Width,0,2) + IF NOT(Fix) + THEN + IF Verbose THEN CALL *WRAP.PRINT("* SQL catalog data for ":SQLobject:" '":NameOrPath:" (":Schema:")' should be deleted.",Width,0,2) + END + ELSE + IF Verbose THEN CALL *WRAP.PRINT("* Deleting SQL catalog data for ":SQLobject:" '":NameOrPath:"'.",Width,0,2) + GOSUB DELETE.DATA + END + RETURN + + CASE EXVAL = 3 + FECount += 1 + IF Verbose THEN CALL *WRAP.PRINT("** Unable to verify '":NameOrPath:"'.",Width,0,3) + RETURN + END CASE + + ********************************************************* + * Open the VOC file and read a record of the same name. * + ********************************************************* + OPEN "VOC" TO vocfile + ELSE + FECount += 1 + CALL *WRAP.PRINT("** Unable to open the VOC file.",Width,0,3) + RETURN + END + + IF CrossSchema = 0 + THEN + READ namerec FROM vocfile,NameOrPath + THEN + IF namerec<1>[1,1] # 'F' + THEN + ECount += 1 + CALL *WRAP.PRINT("* Item '":NameOrPath:"' in the VOC file is not an 'F' pointer.",Width,0,2) + END + END + ELSE + IF Fix + THEN + IF Verbose THEN CALL *WRAP.PRINT("* Adding VOC F pointer for the ":SQLobject:" '":NameOrPath:"' in the schema '":Schema:"'.",Width,0,2) + namerec = "F":@FM:catrec<6>:@FM:catrec<7> + WRITE namerec ON vocfile,NameOrPath + END + ELSE + ECount += 1 + CALL *WRAP.PRINT("* There is no VOC F pointer for the ":SQLobject:" '":NameOrPath:"' in the schema '":Schema:"'.",Width,0,2) + END + END + END + + *************************************** + * Get the SICA for the current table. * + *************************************** + GOSUB GETSICA + + IF Sica = 0 THEN + FECount += 1 + CALL *WRAP.PRINT("** There are problems with the SICA of the ":SQLobject:" '":catrec<6>,Width,0,3) + RETURN + END + TablePath = catrec<6> + TableName = NameOrPath + FileName = GET.BASENAME(catrec<6>) + path = GET.DIRNAME(catrec<6>) + END + ********************************************** + * There is NO SQL catalog data for the table * + ********************************************** + ELSE + + ********************************************************* + * Open the VOC file and read a record of the same name. * + ********************************************************* + OPEN "VOC" TO vocfile + ELSE + FECount += 1 + CALL *WRAP.PRINT("** Unable to open the VOC file.",Width,0,3) + RETURN + END + + IF CrossSchema + THEN + FECount += 1 + CALL *WRAP.PRINT("** There is no view '":NameOrPath:"' in the local schema.",Width,0,3) + RETURN + END + + READ namerec FROM vocfile,NameOrPath + THEN + IF namerec<1>[1,1] # 'F' + THEN + FECount += 1 + CALL *WRAP.PRINT("** Item '":NameOrPath:"' in the VOC file is not an 'F' pointer.",Width,0,3) + RETURN + END + END + ELSE + FECount += 1 + CALL *WRAP.PRINT("** There is no ":SQLobject:" '":NameOrPath:"' in the schema '":Schema:"'.",Width,0,3) + RETURN + END + + + ************************************************** + * Make sure that the file found is a local file. * + ************************************************** + IF (IS.FULLPATH(namerec<2>)) OR (namerec<2>[1,1] = ".") OR (COUNT(namerec<2>, "!")) + THEN + FECount += 1 + CALL *WRAP.PRINT("** '":NameOrPath:"' is not a local file.",Width,0,3) + RETURN + END + + *********************************************** + * Check file existence, type and permissions. * + *********************************************** + IF Verbose THEN CALL *WRAP.PRINT("Checking file permissions.",Width,0,0) + CHKNAME = namerec<2> + GOSUB EXISTS + BEGIN CASE + CASE EXVAL = 0 + FECount += 1 + IF Verbose THEN CALL *WRAP.PRINT("** The VOC entry '":NameOrPath:"' points to a non-existent file.",Width,0,3) + RETURN + + CASE EXVAL = 1 + FECount += 1 + IF Verbose THEN CALL *WRAP.PRINT("** '":NameOrPath:"' is not an SQL ":SQLobject:".",Width,0,3) + RETURN + + CASE EXVAL = 3 + FECount += 1 + IF Verbose THEN CALL *WRAP.PRINT("** Unable to verify '":NameOrPath:"'.",Width,0,3) + RETURN + END CASE + + ****************************************************** + * Check for duplicate VOC pointers to the same file. * + ****************************************************** + IF IsaTable + THEN + IF Verbose THEN CALL *WRAP.PRINT("Checking for duplicate VOC F pointers.",Width,0,0) + GOSUB DUPFPOINTER + + IF DFVAL # 0 + THEN + FECount += 1 + CALL *WRAP.PRINT("** There are more than one VOC F pointers to the table '":path:"/":namerec<2>:"'.",Width,0,3) + CALL *WRAP.PRINT("** To verify this table use VERIFY.SQL TABLE .",Width,0,3) + RETURN + END + END + + *************************************** + * Get the SICA for the current table. * + *************************************** + GOSUB GETSICA + IF Sica = 0 THEN + FECount += 1 + CALL *WRAP.PRINT("** There are problems with the SICA of the ":SQLobject:" '":path:"/":namerec<2>:"'.",Width,0,3) + RETURN + END + + *********************************************** + * Get the catalog data for the current table. * + *********************************************** + key = Sica:@TM:Sica + READ catrec FROM uvtables,key + THEN + IF Verbose THEN CALL *WRAP.PRINT("Possible Moved or Copied ":SQLobject:".",Width,0,0) + END + ELSE + ECount += 1 + CALL *WRAP.PRINT("* No SQL catalog data for the ":SQLobject:" '":NameOrPath:" (":Schema:")' in UV_TABLES.",Width,0,2) + nodata = 1 + END + TablePath = namerec<2> + TableName = NameOrPath +* fix 23802 below * + FileName = TableName + END + END + +********************************************************** +* This section is for after we have the SQL catalog data * +* and the SICA information for a file. * +********************************************************** + + IF Verbose THEN CALL *WRAP.PRINT("Doing verify on ":SQLobject:" '":NameOrPath:"'.",Width,0,0) + +********************************************** +* check to see if the table name is the same * +********************************************** + IF Sica # TableName + THEN + IF Verbose + THEN + IECount += 1 + CALL *WRAP.PRINT("! The OS ":SQLobject:" name '":TableName:"' does not match ":SQLobject:" name '":Sica:"' found in the SICA.",Width,0,2) + END + namechange = 1 + IF IsaView THEN RETURN + END + +*********************************************** +* check to see if the schema name is the same * +*********************************************** + IF Sica # Schema + THEN + IF Verbose + THEN + IECount += 1 + CALL *WRAP.PRINT("! The ":SQLobject:" '":NameOrPath:"' is located in the schema '":Schema:"' rather than in the schema '":Sica:"' as specified in the SICA.",Width,0,2) + END + schemachange = 1 + IF IsaView THEN RETURN + END + +******************************************************* +* Check to see if the table has been moved or copied. * +******************************************************* + GOSUB CHKCOPY + + IF nodata + THEN + ******************************************************* + * If no catalog data exists then build the data from * + * the SICA of the file. * + ******************************************************* + + ********************************************* + * If we are not fixing the print a message. * + ********************************************* + ECount += 1 + IF NOT(Fix) + THEN + CALL *WRAP.PRINT("* SQL catalog data for ":SQLobject:" '":TableName:" (":Schema:")' should be created.",Width,0,2) + RETURN + END + + IF Fix THEN GOSUB BUILDDATA + END + ELSE IF movedata + THEN + *************************************************** + * If the catalog data must be moved then move it, * + * and then verify the data. * + *************************************************** + + ********************************************* + * If we are not fixing the print a message. * + ********************************************* + ECount += 1 + IF NOT(Fix) + THEN + CALL *WRAP.PRINT("* SQL catalog data for ":SQLobject:" '":Sica:" (":Sica:")' should be moved.",Width,0,2) + END + + IF Fix THEN GOSUB MOVEDATA + END + ELSE IF copydata + THEN + **************************************************** + * If the catalog data must be copied then copy it, * + * and then verify the data. * + **************************************************** + + ********************************************* + * If we are not fixing the print a message. * + ********************************************* + ECount += 1 + IF NOT(Fix) + THEN + CALL *WRAP.PRINT("* SQL catalog data for ":SQLobject:" '":Sica:" (":Sica:")' should be copied.",Width,0,2) + END + + IF Fix THEN GOSUB COPYDATA + END + +************************************************************************ +* Open the file and get the status. Use the status to verify the owner * +* of the file against the SICA and the catalog data. * +* OPENPATH will fail when it tries to open a view. So make this * +* a conditional test for tables only. * +************************************************************************ + IF IsaTable + THEN + OPENPATH TablePath TO tmpfile ELSE + FECount += 1 + CALL *WRAP.PRINT("** You don't have the correct permissions to verify this file.",Width,0,3) + RETURN + END + + STATUS statrec FROM tmpfile ELSE + FECount += 1 + CALL *WRAP.PRINT("** Cannot get status.",Width,0,3) + RETURN + END + CLOSE tmpfile + +**************************************** +* Check actual owner against the SICA. * +**************************************** + IF statrec<8> # Sica + THEN + IECount += 1 + IF Verbose THEN CALL *WRAP.PRINT("! OS owner does not agree with SICA specified owner.",Width,0,2) + END + END + +***************************************** +* Check catalog against the SICA owner. * +***************************************** + IF catrec<1> # Sica + THEN + ECount += 1 + IF Fix + THEN + IF Verbose THEN CALL *WRAP.PRINT("* Changing the owner in the catalog data to match the owner from the ":SQLobject:"'s SICA.",Width,0,2) + catrec<1> = Sica + CatChange = 1 + END + ELSE IF Verbose THEN CALL *WRAP.PRINT("* Catalog specified owner does not agree with SICA specified owner.",Width,0,2) + END + +*********************************** +* Check that this is a BASE TABLE * +*********************************** + IF IsaTable + THEN + IF catrec<2> # "BASE TABLE" + THEN + ECount += 1 + IF Fix + THEN + IF Verbose THEN CALL *WRAP.PRINT("* Changing the TABLE_TYPE field of the catalog data.",Width,0,2) + catrec<2> = "BASE TABLE" + CatChange = 1 + END + ELSE IF Verbose THEN CALL *WRAP.PRINT("* SQL catalog TABLE_TYPE should be 'BASE TABLE' and is actually '":catrec<2>:"'.",Width,0,2) + END + END + +*********************************** +* Check that this is a VIEW * +*********************************** + IF IsaView + THEN + IF catrec<2> # "VIEW" + THEN + ECount += 1 + IF Fix + THEN + IF Verbose THEN CALL *WRAP.PRINT("* Changing the TABLE_TYPE field of the catalog data.",Width,0,2) + catrec<2> = "VIEW" + CatChange = 1 + END + ELSE IF Verbose THEN CALL *WRAP.PRINT("* SQL catalog TABLE_TYPE should be 'VIEW' and is actually '":catrec<2>:"'.",Width,0,2) + END + + IF Verbose THEN CALL *WRAP.PRINT("Checking VIEW '":NameOrPath:"'.",Width,0,0) + + ********************************************************* + * Read data for the view from the UV_VIEWS table. * + ********************************************************* + READ VWrec FROM uvview,key + ELSE + ECount += 1 + VWrec = -1 + END + + ******************************* + * Verify the view data * + ******************************* + GOSUB VIEWCHECK + END + +******************************************** +* Check that the BASE_TABLE field is blank * +******************************************** + IF catrec<3> # "" + THEN + ECount += 1 + IF Fix + THEN + IF Verbose THEN CALL *WRAP.PRINT("* Changing the BASE_TABLE field of the catalog data.",Width,0,2) + catrec<3> = "" + CatChange = 1 + END + ELSE IF Verbose THEN CALL *WRAP.PRINT("* SQL catalog BASE_TABLE should be '' and is '":catrec<3>:"'.",Width,0,2) + END + +******************************************************************* +* Run through all columns that are in the SICA and make sure that * +* they are in the catalog entry for this table. If they are then * +* verify them, if they aren't then add them. * +******************************************************************* + tmprec = catrec + Alst = "" + Anlst = "" + Anullst = "" + PKlst = "" + MaxCols = (Sica+Sica)-1 + + FOR Colnum = 0 TO MaxCols + + ************************************************************** + * Build two lists. One with associations found in the file, * + * the other containing lists of columns in each association. * + * For example, if there are two associations on the table * + * A1 and A2, the array Aname would be: * + * "A1":@FM:"A2" * + * If A1 contained columns C1 and C2, and A2 contained * + * columns C3 and C4 then the array Alst would contain: * + * "C1":@VM:"C2":@FM:"C3":@VM:"C4" * + * This building is done in a seperate loop, so that we will * + * have decent association information when we need to build * + * catalog information for a specific column. * + ************************************************************** + + ************************************************************** + * Also build a list of Primary Key names in PKlst * + ************************************************************** + + + IF Sica # "" + THEN + Aname = Sica + LOCATE(Aname,Alst;iloc) + THEN + INS Sica BEFORE Anlst + INS Sica BEFORE Anullst + END + ELSE + Alst = INSERT(Alst,iloc;Aname) + INS Sica BEFORE Anlst + INS Sica BEFORE Anullst + END + END + ELSE + + IF Sica = 0 + THEN + PKname = Sica + PKlst = INSERT(PKlst, 1, -1;PKname) + END + END + NEXT Colnum + + For Colnum = 0 to MaxCols + + IF Verbose + THEN + CALL *WRAP.PRINT("Checking Column '":Sica:"'.",Width,0,0) + END + + ************************************************************** + * Check to see if the column has data in the UV_TABLES table * + ************************************************************** + LOCATE(Sica,tmprec,4;tmp) + THEN + + ******************************************************* + * The column had data in the UV_TABLES record, so now * + * read the data from the UV_COLUMNS table. * + ******************************************************* + READ columnrec FROM uvcolumns,key:@TM:Sica + THEN + *************************************************** + * Column data was found in UV_COLUMNS, verify it. * + *************************************************** + GOSUB COLCHECK + END + ELSE + **************************************************** + * Column data was not found in UV_COLUMNs. Fix it. * + **************************************************** + ECount += 1 + IF Fix + THEN + GOSUB COLBUILD + END + ELSE IF Verbose THEN CALL *WRAP.PRINT("* No SQL catalog data for column '":Sica:"' in UV_COLUMNS.",Width,0,2) + END + + ******************************************************* + * Mark the columns as having been found in UV_TABLES. * + ******************************************************* + DEL tmprec<4,tmp> + + END + ELSE + + ECount += 1 + IF Fix + THEN + IF Verbose THEN CALL *WRAP.PRINT("* Adding SQL catalog data for column '":Sica:"' to UV_TABLES.",Width,0,2) + INS Sica BEFORE catrec<4,-1> + CatChange = 1 + END + ************************************************************* + * The column had NO data in the UV_TABLES record. Fix it if * + * wanted. Then Read the data from the UV_COLUMNS table. * + ************************************************************* + ELSE IF Verbose THEN CALL *WRAP.PRINT("* No SQL catalog data for column '":Sica:"' in UV_TABLES.",Width,0,2) + + READ columnrec FROM uvcolumns,key:@TM:Sica + THEN + *************************************************** + * Column data was found in UV_COLUMNS, verify it. * + *************************************************** + GOSUB COLCHECK + END + ELSE + **************************************************** + * Column data was not found in UV_COLUMNs. Fix it. * + **************************************************** + ECount += 1 + IF Fix + THEN + GOSUB COLBUILD + END + ELSE IF Verbose THEN CALL *WRAP.PRINT("* No SQL catalog data for column '":Sica:"' in UV_COLUMNS.",Width,0,2) + END + + END + NEXT Colnum + +***************************************************************** +* Run through the list of all column defined in UV_TABLES for * +* this table that are not defined in the SICA of this table. If * +* catalog data exists in UV_COLUMNS for these columns indicate * +* that it should be deleted. * +***************************************************************** + TmpMax = DCOUNT(tmprec<4>,@VM) + FOR I = 1 to TmpMax + + ****************************************************** + * Delete the column from the UV_TABLES catalog data. * + ****************************************************** + ECount += 1 + IF Fix + THEN + LOCATE(tmprec<4,I>,catrec,4;tmp) + THEN + IF Verbose THEN CALL *WRAP.PRINT("* Deleting column data for '":tmprec<4,I>:"' from UV_TABLES because it does not exist in the SICA.",Width,0,2) + DEL catrec<4,tmp> + CatChange = 1 + END + END + ELSE IF NOT (Brief) THEN CALL *WRAP.PRINT("* Column '":tmprec<4,I>:"' found in UV_TABLES does not exist in the SICA.",Width,0,2) + + ****************************************************************** + * Check for UV_COLUMNS catalog data, and delete it if it exists. * + ****************************************************************** + READ columnrec FROM uvcolumns,key:@TM:tmprec<4,I> + THEN + IF Fix + THEN + IF Verbose THEN CALL *WRAP.PRINT("* Column data for column '":tmprec<4,I>:"' is being deleted from UV_COLUMNS.",Width,0,2) + DELETE uvcolumns,key:@TM:tmprec<4,I> + END + ELSE IF Verbose THEN CALL *WRAP.PRINT("* Column data for column '":tmprec<4,I>:"' needs to be deleted from UV_COLUMNS.",Width,0,2) + END + ELSE NULL + + NEXT I + + IF CrossSchema = 0 + THEN + IF NOT(IS.EQPATHS(catrec<6>, path:"/":FileName)) + THEN + ECount += 1 + IF Fix + THEN + IF Verbose THEN CALL *WRAP.PRINT("* Correcting the path in the UV_TABLES catalog data for the ":SQLobject:" '":TableName:"'.",Width,0,2) + catrec<6> = path:"/":FileName + CatChange = 1 + END + ELSE + IF movedata OR copydata + THEN + IF Verbose THEN CALL *WRAP.PRINT("* The path in the catalog data for '":Sica:" (":Sica:")' doesn't match the path to the ":SQLobject:" '":TableName:"'.",Width,0,2) + END + ELSE + IF Verbose THEN CALL *WRAP.PRINT("* The path in the catalog doesn't match the path to the ":SQLobject:" '":TableName:"'.",Width,0,2) + END + END + END + END + +****************************************************************** +* Run through the associtions defined for the file. For each one * +* try to read a record from the UV_TABLES file and the UV_ASSOC * +* file. After reading the information then check it using the * +* association data compiled while verifying the columns. * +****************************************************************** + TmpMax = DCOUNT(Alst,@FM) + FOR Acount = 1 to TmpMax + IF Verbose THEN CALL *WRAP.PRINT("Checking Association '":Alst:"'.",Width,0,0) + + ********************************************************** + * Read data for the assocition from the UV_TABLES table. * + ********************************************************** + READ Atrec FROM uvtables,key:"_":Alst + ELSE + ECount += 1 + Atrec = -1 + END + + ********************************************************* + * Read data for the assocition from the UV_ASSOC table. * + ********************************************************* + READ Arec FROM uvassoc,key:"_":Alst + ELSE + ECount += 1 + Arec = -1 + END + + ******************************* + * Verify the association data * + ******************************* + GOSUB ASSOCCHECK + + LOCATE(Alst,catrec,8;tmp) + ELSE + INS Alst BEFORE catrec<8,-1> + CatChange = 1 + END + + NEXT Acount + + IF CatChange AND Fix + THEN + WRITE catrec ON uvtables,key + END + +********************************************** +* Check that the table/schema pair is in the * +* UV_USERS table for the file's owner. * +********************************************** + UID = Sica + GOSUB GETUSER + + IF Verbose THEN CALL *WRAP.PRINT("Checking UV_USERS data for owner '":Uname:"'.",Width,0,0) + +********************************** +* Read user record from UV_USERS * +********************************** + READ UserRec FROM uvusers,Uname + THEN + TmpMax = DCOUNT(UserRec<5>,@VM) + + ****************************************************** + * Loop through all tables in TABLE_LIST association * + * If the table is there and the schema matches, then * + * break out of the loop, otherwise continue. * + ****************************************************** + FOR tmp = 1 to TmpMax + IF UserRec<5,tmp> = TableName + THEN + IF UserRec<4,tmp> = Schema + THEN GOTO UserLoop + END + NEXT tmp + +UserLoop: + ************************************************* + * If we made it through the entire list with no * + * matches then it is not in the TABLE_LIST. * + ************************************************* + IF tmp > TmpMax + THEN + ECount += 1 + IF Fix + THEN + IF Verbose + THEN + CALL *WRAP.PRINT("* Adding Catalog data for ":SQLobject:" '":NameOrPath:"' to the UV_USERS record for user '":Uname:"'.",Width,0,2) + END + INS TableName BEFORE UserRec<5,-1> + INS Schema BEFORE UserRec<4,-1> + WRITE UserRec ON uvusers,Uname + END + ELSE IF Verbose + THEN + CALL *WRAP.PRINT("* No SQL catalog data for ":SQLobject:" '":NameOrPath:"' in the UV_USERS record for user '":Uname:"'.",Width,0,2) + END + END + END + ELSE + *********************************************************** + * If there is no USER info for the owner, he is not valid * + *********************************************************** + ECount += 1 + CALL *WRAP.PRINT("* The owner of the ":SQLobject:" '":NameOrPath:"' is not a valid SQL user.",Width,0,2) + END + +******************************************************* +* Check that all users with permission have an entry * +* in the PERM_LIST association in the UV_USERS table. * +******************************************************* + IF Verbose AND Sica + THEN + CALL *WRAP.PRINT("Checking UV_USERS data for users with permissions on ":SQLobject:" '":NameOrPath:"'.",Width,0,0) + END + + Offset = COLUMN+Sica+Sica+Sica+Sica + TmpMax = Sica-1 + +************************************************** +* Loop through all users with perms in the SICA. * +************************************************** + FOR I = 0 to TmpMax + IF Sica = -1 + THEN NULL + ELSE + UID = Sica + GOSUB GETUSER + + ********************************** + * Read user record from UV_USERS * + ********************************** + READ UserRec FROM uvusers,Uname + THEN + ****************************************************** + * Loop through all tables in PERM_LIST association * + * If the table is there and the schema matches, then * + * break out of the loop, otherwise continue. * + ****************************************************** + TmpMax2 = DCOUNT(UserRec<7>,@VM) + FOR tmp = 1 to TmpMax2 + IF UserRec<7,tmp> = TableName + THEN + IF UserRec<6,tmp> = Schema + THEN GOTO UserLoop2 + END + NEXT tmp + +UserLoop2: + ************************************************* + * If we made it through the entire list with no * + * matches then it is not in the TABLE_LIST. * + ************************************************* + IF tmp > TmpMax2 + THEN + ECount += 1 + IF Fix + THEN + IF Verbose + THEN + CALL *WRAP.PRINT("* Adding Catalog data for ":SQLobject:" '":NameOrPath:"' to the UV_USERS record for user '":Uname:"'.",Width,0,2) + END + INS TableName BEFORE UserRec<7,-1> + INS Schema BEFORE UserRec<6,-1> + WRITE UserRec ON uvusers,Uname + END + ELSE IF Verbose + THEN + CALL *WRAP.PRINT("* No SQL catalog data for ":SQLobject:" '":NameOrPath:"' in the UV_USERS record for user '":Uname:"'.",Width,0,2) + END + END + END + ELSE + ********************************************************** + * If there is no USER info for the user, he is not valid * + ********************************************************** + ECount += 1 + CALL *WRAP.PRINT("* The user '":Uname:"' has permissions on ":SQLobject:" '":NameOrPath:"' but is not a valid SQL user.",Width,0,2) + END + END + NEXT I + +****************************************************************** +* Check the UV_TABLES data for any defined Views. * +****************************************************************** + IF catrec<5> # "" + THEN + FOR I = 1 to DCOUNT(catrec<5>,@VM) + View = catrec<5,I>[INDEX(catrec<5,I>,".",1)+1,LEN(catrec<5,I>)] + ViewSchema = catrec<5,I>[1,INDEX(catrec<5,I>,".",1)-1] + IF Verbose THEN CALL *WRAP.PRINT(" ",Width,5,0) + IF Verbose THEN CALL *WRAP.PRINT("Verifying view '":catrec<5,I>:"'.",Width,0,0) + CALL *VERIFY.TABLE(View,ViewSchema,Fix,Brief,1) + IF Verbose THEN CALL *WRAP.PRINT("Verifying view '":catrec<5,I>:"' completed.",Width,0,0) + NEXT I + END + +**************************************** +* Finished. Return to the main program * +**************************************** + RETURN + + +******************************************************************************* +* * +* Given a file name, run UVfile on it and return one of the following values: * +* 0 The file doesn't exists, or is not a uniVerse file. * +* 1 This is a normal uniVerse file. * +* 2 This is a uniVerse SQL file. * +* 3 We do not have the correct permissions to access this file. * +* * +* Note: The table filename needs quoting before passing to the EXECUTE as it * +* may contain quotes itself. We use system(1031) to do the quoting. On * +* UNIX the table name may contain either single or double quotes hence * +* the EXECUTE string must be quoted using backslashes. On NT backslashes* +* canot be used for the EXECUTE quoting as these get confused with * +* pathname seperators, but luckily double quotes are not allowed in * +* tablenames on NT so system(1031) will always use these to quote the * +* filename... but even more luckily we do not need to quote the actual * +* command because if we did the double quotes around the filename would * +* get munged by few_process() !!!! * +******************************************************************************* +EXISTS: + newfull = SYSTEM(1031, CHKNAME) + +$IFDEF UV.MSWIN + EXCMD = OS.EXEC:" ":UV.ROOT:"/bin/UVfile ":newfull +$ELSE + EXCMD = OS.EXEC:' \':UV.ROOT:"/bin/UVfile ":newfull:'\' +$ENDIF + + EXECUTE EXCMD CAPTURING junk + EXVAL = 1 + IF junk[1,8] = "[EACCES]" THEN + CALL *WRAP.PRINT("* Permission denied on table '":CHKNAME:"'.",Width,0,2) + EXVAL = 3 + END + IF junk[1,18] = "Permission Denied." THEN + CALL *WRAP.PRINT("* Permission denied on table '":CHKNAME:"'.",Width,0,2) + EXVAL = 3 + END + IF junk<1> = CHKNAME:": No such file or directory" THEN EXVAL = 0 + IF junk<1> = CHKNAME:": Not a uniVerse file." THEN EXVAL = 0 + IF junk<1>[LEN(CHKNAME)+1,28] = ": Dynamic file (uniVerse SQL" THEN EXVAL = 2 + IF junk<1>[LEN(CHKNAME)+1,27] = ": Hashed file (uniVerse SQL" THEN EXVAL = 2 + IF IsaView THEN + IF junk<1>[LEN(CHKNAME)+9,20] = ": View (UV type 41)." + THEN EXVAL = 2 + END + RETURN + + +*************************************************************************** +* This routine checks to see if there are multiple F pointers for a file. * +* We return: * +* 0 If there is only one F pointer to a file. * +* 1 If there are more than one F pointers for a file. * +*************************************************************************** +DUPFPOINTER: + DFVAL = 0 + EXECUTE "COUNT VOC WITH TYPE = 'F' AND F2 = '":CHKNAME:"'" CAPTURING junk + junk = junk<2> + junk = CONVERT(' ',@FM,junk) + IF junk<1> # 1 THEN DFVAL = 1 + RETURN + +*************************************************************************** +* This routine gets a SICA from an SQL file. We return the SICA in the * +* variable Sica or 0 if the is no sica in the file. * +*************************************************************************** +GETSICA: + ******************************* + * Get the SICA for the table. * + ******************************* + quotedname = SYSTEM(1031, CHKNAME) + SicaCMD = "LIST.SICA ":quotedname:" DATA" + EXECUTE SicaCMD CAPTURING Sica + + ******************************************************** + * If there is a problem getting the SICA then Sica = 0 * + ******************************************************** + IF ((Sica[1,9] = "Unable to") OR (Sica[1,9] = "Could not") OR (Sica[20,9] = "Could not") OR (Sica[20,9] = "Unable to")) + THEN + Sica = 0 + END + RETURN + +*************************************************************************** +* This routine gets a SICA from an SQL file. We return the SICA in the * +* variable Sica or 0 if the is no sica in the file. * +*************************************************************************** +GETUSER: + ****************** + ** Windows NT port + ** + Uname = OCONV(UID, "PW") + IF STATUS() # 0 THEN Uname = -1 + ** + ****************** + RETURN + +CHKCOPY: + + IF HaveData THEN RETURN + + ****************************************************************** + * If the schema name and table name have both been changed then * + * try to read a catalog entry for the old table and schema name. * + * If there is catalog data under the old name then check to see * + * if a file exists where the catalog data says. If a file does * + * exist, then we have a copy, else we have a moved and renamed * + * table. * + ****************************************************************** + IF schemachange AND namechange + THEN + tkey = Sica:@TM:Sica + READ record FROM uvtables,tkey + THEN + CHKNAME = record<6> + GOSUB EXISTS + IF EXVAL > 1 + THEN + IF Verbose THEN CALL *WRAP.PRINT("* ":SQLobject:" has been copied.",Width,0,2) + copydata = 1 + RETURN + END + ELSE + IF Verbose THEN CALL *WRAP.PRINT("* ":SQLobject:" has been both moved and renamed.",Width,0,2) + movedata = 1 + RETURN + END + END + ELSE + nodata = 1 + IF Verbose + THEN + CALL *WRAP.PRINT("* SQL catalog data does not exist for this ":SQLobject:", even under another name.",Width,0,2) + END + RETURN + END + END + + ******************************************************************* + * If only the schema name has changed then try to read a catalog * + * entry for the table in the old schema. If there is catalog data * + * under the old name, then check to see if a file exists where * + * the catalog data says. If a file does exist, then we have copy, * + * else we have a moved table. * + ******************************************************************* + ELSE IF schemachange + THEN + tkey = Sica:@TM:TableName + READ record FROM uvtables,tkey + THEN + CHKNAME = record<6> + GOSUB EXISTS + IF EXVAL > 1 + THEN + IF Verbose THEN CALL *WRAP.PRINT("* ":SQLobject:" has been copied.",Width,0,2) + copydata = 1 + RETURN + END + ELSE + IF Verbose THEN CALL *WRAP.PRINT("* ":SQLobject:" has been moved.",Width,0,2) + movedata = 1 + RETURN + END + END + ELSE + nodata = 1 + IF Verbose + THEN + CALL *WRAP.PRINT("* SQL catalog data does not exist for this ":SQLobject:", even under another name.",Width,0,2) + END + RETURN + END + END + ******************************************************************* + * If only the table name has changed then try to read a catalog * + * entry for the old table in the schema. If there is catalog data * + * under the old name, then check to see if a file exists where * + * the catalog data says. If a file does exist, then we have copy, * + * else we have a renamed table. * + ******************************************************************* + ELSE IF namechange + THEN + tkey = Schema:@TM:Sica + READ record FROM uvtables,tkey + THEN + CHKNAME = record<6> + GOSUB EXISTS + IF EXVAL > 1 + THEN + IF Verbose THEN CALL *WRAP.PRINT("* ":SQLobject:" has been copied.",Width,0,2) + copydata = 1 + RETURN + END + ELSE + IF Verbose THEN CALL *WRAP.PRINT("* ":SQLobject:" has been renamed.",Width,0,2) + movedata = 1 + RETURN + END + END + ELSE + nodata = 1 + IF Verbose + THEN + CALL *WRAP.PRINT("* SQL catalog data does not exist for this ":SQLobject:", even under another name.",Width,0,2) + END + RETURN + END + END + RETURN + +***************************************************************************** +* When give the data for a columns from a SICA, and the data for the same * +* column from the UV_COLUMNS file, compare the values of the two and report * +* any discrepencies. (FIX still needs to be implimented) * +***************************************************************************** +COLCHECK: + ColName = Sica + CrecChange = 0 + ********************************** + * Check the column's association * + ********************************** + IF columnrec<1> # Sica + THEN + ECount += 1 + IF Fix + THEN + columnrec<1> = Sica + CrecChange = 1 + IF Verbose THEN CALL *WRAP.PRINT("* Changing association name for column '":ColName:"' to '":Sica:"'.",Width,0,2) + END + ELSE IF Verbose + THEN + CALL *WRAP.PRINT("* Incorrect association name for column '":ColName:"'. It should be '":Sica:"' and it is '":columnrec<1>:"'.",Width,0,2) + END + END + + ************************** + * Check the column's AMC * + ************************** + sicamc = Sica:@VM:Sica + IF columnrec<2> # sicamc + THEN + ECount += 1 + IF Fix + THEN + columnrec<2> = sicamc + CrecChange = 1 + IF Verbose THEN CALL *WRAP.PRINT("* Changing AMC values for column '":ColName:"'.",Width,0,2) + END + ELSE IF Verbose THEN CALL *WRAP.PRINT("* Incorrect AMC values for column '":ColName:"'.",Width,0,2) + END + + *************************************************************************** + * Check the column's association numbering. * columnrec<3> + * + * Unfortunaltely we can't check this at the current release of uniVerse. + *************************************************************************** + + *************************************** + * Check if the column is MultiValued. * + *************************************** + IF columnrec<4> = 'S' THEN tempval = 0 ELSE tempval = 1 + IF tempval # Sica + THEN + ECount += 1 + IF Fix + THEN + IF Verbose THEN CALL *WRAP.PRINT("* Changing 'Multivalued' value for column '":ColName:"'.",Width,0,2) + CrecChange = 1 + IF Sica THEN columnrec<4> = "M" ELSE columnrec<4> = "S" + END + ELSE IF Verbose THEN CALL *WRAP.PRINT("* Incorrect 'Multivalued' value for column '":ColName:"'.",Width,0,2) + END + + ********************************* + * Check the column's data type. * + ********************************* + IF columnrec<5> # DATATYPES+1> + THEN + ECount += 1 + IF Fix + THEN + IF Verbose THEN CALL *WRAP.PRINT("* Changing Data Type for column '":ColName:"'.",Width,0,2) + CrecChange = 1 + columnrec<5> = DATATYPES+1> + END + ELSE IF Verbose THEN CALL *WRAP.PRINT("* Incorrect Data Type for column '":ColName:"'.",Width,0,2) + END + + *********************************** + * Check the column's data length. * + *********************************** + IF columnrec<6> = "" THEN tmpval = 0 ELSE tmpval = columnrec<6> + IF (tmpval # Sica) AND (Sica = 2 OR Sica = 6) + THEN + ECount += 1 + IF Fix + THEN + IF Verbose THEN CALL *WRAP.PRINT("* Changing Data Length for column '":ColName:"'.",Width,0,2) + CrecChange = 1 + columnrec<6> = Sica + END + ELSE IF Verbose THEN CALL *WRAP.PRINT("* Incorrect Data Length for column '":ColName:"'.",Width,0,2) + END + + ******************************************* + * Check the column's data length. (float) * + ******************************************* + IF columnrec<7> = "" THEN tmpval = 0 ELSE tmpval = columnrec<7> + IF (tmpval # Sica) AND (Sica = 3) AND (Sica # 0) + THEN + ECount += 1 + IF Fix + THEN + IF Verbose THEN CALL *WRAP.PRINT("* Changing Data Precision for column '":ColName:"'.",Width,0,2) + CrecChange = 1 + columnrec<7> = Sica + END + ELSE IF Verbose THEN CALL *WRAP.PRINT("* Incorrect Data Precision for column '":ColName:"'.",Width,0,2) + END + + ***************************************************** + * Check the column's data scale. (decimal,numeric) * + ***************************************************** + IF columnrec<9> = "" THEN tmpval = 0 ELSE tmpval = columnrec<9> + IF (tmpval # Sica) AND (Sica = 7 OR Sica = 8 ) AND Sica # 0 + THEN + ECount += 1 + IF Fix + THEN + IF Verbose THEN CALL *WRAP.PRINT("* Changing Data Scale for column '":ColName:"'.",Width,0,2) + CrecChange = 1 + columnrec<9> = Sica + END + ELSE IF Verbose THEN CALL *WRAP.PRINT("* Incorrect Data Scale for column '":ColName:"'.",Width,0,2) + END + + ************************************ + * Check if the columns is nullable * + ************************************ + IF (columnrec<10> = "YES") THEN tempval = 0 ELSE tempval = 1 + IF tempval # Sica + THEN + ECount += 1 + IF Fix + THEN + IF Verbose THEN CALL *WRAP.PRINT("* Changing NOT NULL flag for column '":ColName:"'.",Width,0,2) + CrecChange = 1 + IF Sica THEN columnrec<10> = "NO" ELSE columnrec<10> = "YES" + END + ELSE IF Verbose THEN CALL *WRAP.PRINT("* Incorrect NOT NULL flag for column '":ColName:"'.",Width,0,2) + END + + ************************************ + * Check the column's default data. * + ************************************ + IF (Sica # 3) AND (columnrec<11> # "") + THEN + ECount += 1 + IF Fix + THEN + IF Verbose THEN CALL *WRAP.PRINT("* Changing Default Data for column '":ColName:"'.",Width,0,2) + CrecChange = 1 + columnrec<11> = "" + END + ELSE IF Verbose THEN CALL *WRAP.PRINT("* Incorrect Default Data for column '":ColName:"'.",Width,0,2) + END + + ************************************ + * Check the column's default data. * + ************************************ + IF (Sica = 3) AND (columnrec<11> # Sica) + THEN + ECount += 1 + IF Fix + THEN + IF Verbose THEN CALL *WRAP.PRINT("* Changing Default Data for column '":ColName:"'.",Width,0,2) + CrecChange = 1 + columnrec<11> = Sica + END + ELSE IF Verbose THEN CALL *WRAP.PRINT("* Incorrect Default Data for column '":ColName:"'.",Width,0,2) + END + + IF Fix AND CrecChange = 1 + THEN + WRITE columnrec ON uvcolumns,key:@TM:Sica +* 23807 Better output for WRITE errors on UV_COLUMNS + ON ERROR + CALL *WRAP.PRINT("* WRITE error to UV_COLUMNS, STATUS = ":STATUS(),Width,0,2) + icheckret = ICHECK(columnrec, uvcolumns,key:@TM:Sica) + IF icheckret<1> = 8 AND icheckret<2> = 5 + THEN + CALL *WRAP.PRINT("* UV_COLUMNS DATA_TYPE CHECK constraint is out of date.",Width,0,2) + CALL *WRAP.PRINT("* Execute UPDATE.UV_COLUMNS in the sql/catalog account before retrying.",Width,0,2) + END + ELSE + CALL *WRAP.PRINT("* ICHECK result = ":icheckret,Width,0,2) + END + END + END + + RETURN + +ASSOCCHECK: + + ************************************************** + * If there is an association record in UV_TABLES * + ************************************************** + IF Atrec # -1 + THEN + + ****************************************************************** + * IF a keyless VIEW, DELETE UV_TABLES entry for ASSOCIATION * + ****************************************************************** + IF Sica = 0 + THEN + IF Fix + THEN + IF Verbose THEN CALL *WRAP.PRINT("* Table data for association '":Alst:"' is being deleted from UV_TABLES.",Width,0,2) + DELETE uvtables,key:"_":Alst + END + ELSE IF Verbose THEN CALL *WRAP.PRINT("* Table data for association '":Alst:"' needs to be deleted from UV_TABLES.",Width,0,2) + END + ELSE + + ArecChange = 0 + + ********************************************* + * Verify that the association owner matches * + * the table's owner. * + ********************************************* + IF Atrec<1> # catrec<1> + THEN + ECount += 1 + IF Fix + THEN + IF Verbose THEN CALL *WRAP.PRINT("* Changing the owner of the association '":Alst:"' to match the ":SQLobject:"'s owner.",Width,0,2) + Atrec<1> = catrec<1> + ArecChange = 1 + END + ELSE IF Verbose THEN CALL *WRAP.PRINT("* The owner of the association '":Alst:"' does not agree with the ":SQLobject:"'s owner.",Width,0,2) + END + + ***************************************** + * Verify that the association record is * + * marked as an association. * + ***************************************** + IF Atrec<2> # "ASSOCIATION" + THEN + ECount += 1 + IF Fix + THEN + IF Verbose THEN CALL *WRAP.PRINT("* Changing the TABLE_TYPE of the association '":Alst:"' to 'ASSOCIATION'.",Width,0,2) + Atrec<2> = "ASSOCIATION" + ArecChange = 1 + END + ELSE IF Verbose THEN CALL *WRAP.PRINT("* The TABLE_TYPE of the association '":Alst:"' is incorrect.",Width,0,2) + END + + ******************************************* + * Verify that the BASE_TABLE field points * + * to the correct table * + ******************************************* + IF Atrec<3> # TableName + THEN + ECount += 1 + IF Fix + THEN + IF Verbose THEN CALL *WRAP.PRINT("* Changing the BASE_TABLE for the association '":Alst:"' to be '":TableName:"'.",Width,0,2) + Atrec<3> = TableName + ArecChange = 1 + END + ELSE IF Verbose THEN CALL *WRAP.PRINT("* The BASE_TABLE for the association '":Alst:"' should be '":TableName:"' and is actually '":Atrec<3>:"'.",Width,0,2) + END + + AsocCols = Anlst + AcCols = Atrec<4> + + ****************************************************************** + * Run through the list of columns marked in the SICA as being in * + * the association, and verify that they are in the UV_TABLES * + * entry for the association. If they are, then delete them from * + * the list. If they aren't, the print a message. * + ****************************************************************** + + ****************************************************************** + * First pass, association columns * + ****************************************************************** + TmpAcols = DCOUNT(AsocCols,@VM) + FOR I = 1 TO TmpAcols + Tname = AsocCols<1,I> + LOCATE(Tname,AcCols,1;tmp) + THEN + DEL AcCols<1,tmp> + END + ELSE + ECount += 1 + IF Fix + THEN + If Verbose THEN CALL *WRAP.PRINT("* Adding column '":Tname:"' to the association '":Alst:"'.",Width,0,2) + INS Tname BEFORE Atrec<4,-1> + ArecChange = 1 + END + ELSE IF Verbose + THEN + CALL *WRAP.PRINT("* SICA data for column '":Tname:"' specifies that it should be in the association '":Alst:"' but it is not in the Catalog data for that association.",Width,0,2) + END + END + NEXT I + + **************************************************************** + * Second, use base table Primary Keys * + **************************************************************** + + TmpPKcols = DCOUNT(PKlst,@VM) + FOR I = 1 TO TmpPKcols + Tname = PKlst<1,I> + LOCATE(Tname,AcCols,1;tmp) + THEN + DEL AcCols<1,tmp> + END + ELSE + ECount += 1 + IF Fix + THEN + If Verbose THEN CALL *WRAP.PRINT("* Adding column '":Tname:"' to the association '":Alst:"'.",Width,0,2) + INS Tname BEFORE Atrec<4,-1> + ArecChange = 1 + END + ELSE IF Verbose + THEN + CALL *WRAP.PRINT("* SICA data for column '":Tname:"' specifies that it should be in the association '":Alst:"' but it is not in the Catalog data for that association.",Width,0,2) + END + END + NEXT I + + **************************************************************** + * Run through the list of all columns marked in the UV_TABLES * + * entry for the association as being in the association, and * + * print a message. The columns in this list are ones that were * + * left after the previous loop was completed. We know that * + * thier presence here is a problem. * + **************************************************************** + + TmpAcols = DCOUNT(AcCols,@VM) + FOR I = 1 TO TmpAcols + ECount += 1 + IF Fix + THEN + LOCATE(AcCols<1,I>, Atrec, 4;tmp) + THEN + IF Verbose THEN CALL *WRAP.PRINT("* Deleting column '":AcCols<1,I>:"' from the association '":Alst:"'.",Width,0,2) + DEL Atrec<4,tmp> + ArecChange = 1 + END + END + ELSE IF Verbose + THEN + CALL *WRAP.PRINT("* The column '":AcCols<1,I>:"' is found in the Catalog data for the association '":Alst:"', however the SICA data for the column does not reflect that.",Width,0,2) + END + NEXT I + + ****************************************************** + * Verify that the path for the BASE TABLE is correct * + ****************************************************** + IF NOT(IS.EQPATHS(Atrec<6>, catrec<6>)) + THEN + ECount += 1 + IF Fix + THEN + IF Verbose THEN CALL *WRAP.PRINT("* Changing the path for the association '":Alst:"' to be the same as the path of the base ":SQLobject:" '":NameOrPath:"'.",Width,0,2) + Atrec<6> = catrec<6> + ArecChange = 1 + END + ELSE IF Verbose THEN CALL *WRAP.PRINT("* The path for the association '":Alst:"' is not the same as the path of the base ":SQLobject:" '":NameOrPath:"'.",Width,0,2) + END + + ************************************************************* + * Verify that the path for the BASE TABLE's DICT is correct * + ************************************************************* + IF Atrec<7> # catrec<7> + THEN + ECount += 1 + IF Fix + THEN + IF Verbose THEN CALL *WRAP.PRINT("* Changing the dictionary path for the association '":Alst:"' to be the same as the dictionary path of the base table '":NameOrPath:"'.",Width,0,2) + Atrec<7> = catrec<7> + ArecChange = 1 + END + ELSE IF Verbose THEN CALL *WRAP.PRINT("* The dictionary path for the association '":Alst:"' is not the same as the dictionary path of the base table '":NameOrPath:"'.",Width,0,2) + END + + IF ArecChange AND Fix + THEN + WRITE Atrec ON uvtables,key:"_":Alst + END + END + END + ELSE IF Fix + THEN + **************************************************************** + * There is not association data in UV_TABLES and * + * Fix has been specified * + ***************************************************************** + GOSUB ATABUILD + END + ELSE IF Verbose AND Sica # 0 THEN CALL *WRAP.PRINT("* No data for association '":Alst:"' in UV_TABLES.",Width,0,2) + + ************************************************* + * If there is an association record in UV_ASSOC * + ************************************************* + IF Arec # -1 + THEN + + AssChange = 0 + + FoundAss = -1 + ************************************ + * find the association in the sica * + ************************************ + AOffset = COLUMN+Sica+Sica+Sica + ATmpMax = Sica-1 + + FOR I = 0 to ATmpMax + IF Sica = Alst THEN FoundAss = I + NEXT I + + IF FoundAss # -1 + THEN + ************************************************ + * Verify that the association ordering matches * + * the sicas association ordering. * + ************************************************ + IF Arec<1> # Sica + THEN + ECount += 1 + IF Fix + THEN + IF Verbose THEN CALL *WRAP.PRINT("* Changing ORDERING in UV_ASSOC to match the ":SQLobject:"'s SICA.",Width,0,2) + Arec<1> = Sica + AssChange = 1 + END + ELSE IF Verbose THEN CALL *WRAP.PRINT("* ORDERING in UV_ASSOC does not agree with ":SQLobject:"'s SICA.",Width,0,2) + END + + **************************************************** + * Verify that the association order column matches * + * the sicas association order column. * + **************************************************** + IF Arec<2> # Sica + THEN + ECount += 1 + IF Fix + THEN + IF Verbose THEN CALL *WRAP.PRINT("* Changing ORDER_COLUMN in UV_ASSOC to match the ":SQLobject:"'s SICA.",Width,0,2) + Arec<2> = Sica + AssChange = 1 + END + ELSE IF Verbose THEN CALL *WRAP.PRINT("* ORDER_COLUMN in UV_ASSOC does not agree with ":SQLobject:"'s SICA.",Width,0,2) + END + + **************************************************** + * Verify that the association order type matches * + * the sicas association order type. * + **************************************************** + IF Arec<3> # Sica + THEN + ECount += 1 + IF Fix + THEN + IF Verbose THEN CALL *WRAP.PRINT("* Changing ORDER_TYPE in UV_ASSOC to match the ":SQLobject:"'s SICA.",Width,0,2) + Arec<3> = Sica + AssChange = 1 + END + ELSE IF Verbose THEN CALL *WRAP.PRINT("* ORDER_TYPE in UV_ASSOC does not agree with ":SQLobject:"'s SICA.",Width,0,2) + END + + **************************************************** + * Verify that the association empty row matches * + * the sicas association empty row. * + **************************************************** + IF Arec<4> # Sica + THEN + ECount += 1 + IF Fix + THEN + IF Verbose THEN CALL *WRAP.PRINT("* Changing EMPTY_ROW in UV_ASSOC to match the ":SQLobject:"'s SICA.",Width,0,2) + Arec<4> = Sica + AssChange = 1 + END + ELSE IF Verbose THEN CALL *WRAP.PRINT("* EMPTY_ROW in UV_ASSOC does not agree with ":SQLobject:"'s SICA.",Width,0,2) + END + END + + IF AssChange AND Fix + THEN + WRITE Arec ON uvassoc,key:"_":Alst +* 23807; UV_ASSOC ORDERING constraint may be wrong + ON ERROR + CALL *WRAP.PRINT("* WRITE error to UV_ASSOC, STATUS = ": STATUS(),Width,0,2) + icheckret = ICHECK(Arec, uvassoc,key:"_":Alst) + IF icheckret<1> = 8 AND icheckret<2> = 1 + THEN + CALL *WRAP.PRINT("* UV_ASSOC ORDERING CHECK constraint is out of date.",Width,0,2) + CALL *WRAP.PRINT("* Execute UPDATE.UV_ASSOC in the sql/catalog account before retrying.",Width,0,2) + END + ELSE + CALL *WRAP.PRINT("* ICHECK result = ":icheckret,Width,0,2) + END + END + END + END + ELSE IF Fix + THEN + ************************************************ + * There is not association data in UV_ASSOC * + * and Fix has been specified * + ************************************************ + GOSUB ATBUILD + END + ELSE IF Verbose AND Sica # 0 THEN CALL *WRAP.PRINT("* No SQL catalog data for association '":Alst:"' in UV_ASSOC.",Width,0,2) + + RETURN + +VIEWCHECK: + + VWOffset = COLUMN+Sica+Sica+Sica+Sica+Sica + + ************************************************* + * If there is a view record in UV_VIEWS * + ************************************************* + IF VWrec # -1 + THEN + + VWChange = 0 + + ************************************************ + * Verify that the view VIEW_TEXT matches * + * the sicas query specification. * + ************************************************ + IF VWrec<1> # Sica + THEN + ECount += 1 + IF Fix + THEN + IF Verbose THEN CALL *WRAP.PRINT("* Changing VIEW_TEXT in UV_VIEWS to match the view's SICA.",Width,0,2) + VWrec<1> = Sica + VWChange = 1 + END + ELSE IF Verbose THEN CALL *WRAP.PRINT("* VIEW_TEXT in UV_VIEWS does not agree with view's SICA.",Width,0,2) + END + + ************************************************ + * Verify that the view TABLES column matches * + * the sicas Reference Tables. * + ************************************************ + ** Rel 9 Sica uses @TM between schema and tablename ** + ** @VM between entries, sent as @SVM ** + ** UV_VIEWS still uses period JBG 17337 ** + uvviewtable = CONVERT(@TM, ".", Sica) + uvviewtable = CONVERT(@SVM,@VM, uvviewtable) + IF VWrec<2> # uvviewtable + THEN + ECount += 1 + IF Fix + THEN + IF Verbose THEN CALL *WRAP.PRINT("* Changing Tables in UV_VIEWS to match the view's SICA.",Width,0,2) + VWrec<2> = uvviewtable + VWChange = 1 + END + ELSE IF Verbose THEN CALL *WRAP.PRINT("* Tables in UV_VIEWS does not agree with view's SICA.",Width,0,2) + END + + IF VWChange AND Fix + THEN + WRITE VWrec ON uvview,key + END + + ************************************************ + * Verify that the view Column Map column * + * matches the sicas Reference Tables. * + ************************************************ + IF VWrec<3> # Sica + THEN + ECount += 1 + IF Fix + THEN + IF Verbose THEN CALL *WRAP.PRINT("* Changing Column Map in UV_VIEWS to match the view's SICA.",Width,0,2) + VWrec<3> = Sica + VWChange = 1 + END + ELSE IF Verbose THEN CALL *WRAP.PRINT("* Column Map in UV_VIEWS does not agree with view's SICA.",Width,0,2) + END + + IF VWChange AND Fix + THEN + WRITE VWrec ON uvview,key + END + + ************************************************ + * Verify that the view Updatable column * + * matches the sicas Reference Tables. * + ************************************************ + IF VWrec<4> # Sica AND NOT (VWrec<4> = "no" OR Sica = "") + THEN + ECount += 1 + IF Fix + THEN + IF Verbose THEN CALL *WRAP.PRINT("* Changing Updatable in UV_VIEWS to match the view's SICA.",Width,0,2) + VWrec<4> = Sica + VWChange = 1 + END + ELSE IF Verbose THEN CALL *WRAP.PRINT("* Updatable in UV_VIEWS does not agree with view's SICA.",Width,0,2) + END + + IF VWChange AND Fix + THEN + WRITE VWrec ON uvview,key + END + + ************************************************ + * Verify that the view CHECK_OPTION column * + * matches the sicas Reference Tables. * + ************************************************ + IF VWrec<5> # Sica AND NOT (VWrec<5> = "no" OR Sica = "") + THEN + ECount += 1 + IF Fix + THEN + IF Verbose THEN CALL *WRAP.PRINT("* Changing Check Option in UV_VIEWS to match the view's SICA.",Width,0,2) + VWrec<5> = Sica + VWChange = 1 + END + ELSE IF Verbose THEN CALL *WRAP.PRINT("* Check Option in UV_VIEWS does not agree with view's SICA.",Width,0,2) + END + + IF VWChange AND Fix + THEN + WRITE VWrec ON uvview,key + END + + ********************************************************** + * Verify that the view TABLES point to a UV_TABLE entry * + * and if so that UV_TABLE entry in VIEWS points back. * + ********************************************************** + vname1 = CONVERT(@TM,".",key) + ** Rel 9 uses @VM as seperator, not space JBG 17337 ** + IF COUNT(VWrec<2>, @VM) > 0 OR VWrec<5> # "no" + THEN remarks1 = CONVERT(@VM,@FM,VWrec<2>) + ELSE remarks1 = CONVERT(" ",@FM,VWrec<2>) + FOR I = 1 to DCOUNT(remarks1,@FM) + ** ONLY convert first period to @TM JBG 17337 ** + remarks2 = remarks1 + dotsep = INDEX(remarks2, ".", 1) + remarks2[dotsep, 1] = @TM + READ tablerec1 FROM uvtables,remarks2 + THEN + LOCATE(vname1,tablerec1,5;tmp) + THEN NULL + ELSE + ECount += 1 + IF Fix + THEN + IF Verbose THEN CALL *WRAP.PRINT("* Adding '":vname1:"' to (column VIEWS) for '":remarks1:"'.",Width,0,2) + INS vname1 BEFORE tablerec1<5,-1> + WRITE tablerec1 ON uvtables,remarks2 + END + ELSE IF Verbose THEN CALL *WRAP.PRINT("* '":remarks1:"' (column VIEWS) does not point to view '":vname1:"'.",Width,0,2) + END + END + NEXT I + END + ELSE IF Fix + THEN + ************************************************************************* + * There is not view data in UV_VIEWS and Fix has been specified * + ************************************************************************* + GOSUB VWBUILD + vname1 = CONVERT(@TM,".",key) + remarks1 = CONVERT(" ",@FM,Sica) + FOR I = 1 to DCOUNT(remarks1,@FM) + *** ONLY first period converts to @TM JBG 17337 ** + remarks2 = remarks1 + dotsep = INDEX(remarks2, ".", 1) + remarks2[dotsep, 1] = @TM + READ tablerec1 FROM uvtables,remarks2 + THEN + LOCATE(vname1,tablerec1,5;tmp) + THEN NULL + ELSE + ECount += 1 + IF Verbose THEN CALL *WRAP.PRINT("* Adding '":vname1:"' to (column VIEWS) for '":remarks1:"'.",Width,0,2) + INS vname1 BEFORE tablerec1<5,-1> + WRITE tablerec1 ON uvtables,remarks2 + END + END + NEXT I + END + ELSE IF Verbose THEN CALL *WRAP.PRINT("* No SQL catalog data for view '":NameOrPath:"' in UV_VIEWS.",Width,0,2) + + RETURN + +******************************************************************** +* This routine is called when a table does not exist, but it still * +* has SQL catalog data. An easy way for this to happen if for * +* someone to create a table and then delete it with DELETE.FILE. * +******************************************************************** +DELETE.DATA: + ******************************************** + * Delete the UV_TABLES data for the table. * + ******************************************** + IF Verbose THEN CALL *WRAP.PRINT("* Deleting table data for ":SQLobject:" '":NameOrPath:"'.",Width,0,2) + DELETE uvtables,key + + ********************************************** + * Delete the UV_COLUMNS data for this table. * + ********************************************** + IF Verbose THEN CALL *WRAP.PRINT("* Deleting column data for ":SQLobject:" '":NameOrPath:"'.",Width,0,2) + FOR I = 1 to DCOUNT(catrec<4>, @VM) + DELETE uvcolumns,key:@TM:catrec<4,I> + NEXT I + + ********************************************** + * Delete the association data for this file. * + * This is both UV_TABLES and UV_ASSOC data. * + ********************************************** + IF Verbose THEN CALL *WRAP.PRINT("* Deleting association data for ":SQLobject:" '":NameOrPath:"'.",Width,0,2) + FOR I = 1 to DCOUNT(catrec<8>, @VM) + DELETE uvtables,key:"_":catrec<8,I> + DELETE uvassoc,key:"_":catrec<8,I> + NEXT I + + ********************************************** + * Delete the view data for this file. * + * This is both UV_TABLES column VIEWS * + * and UV_VIEWS * + * in Rel 8, UV_VIEWS TABLE use " " seperator * + * 9, use @VM " * + ********************************************** + IF IsaView + THEN + READ viewrec FROM uvview,key + THEN + IF COUNT(viewrec<2>, @VM) > 0 OR viewrec<2> # "no" + THEN remarks = CONVERT(@VM,@FM,viewrec<2>) + ELSE remarks = CONVERT(" ",@FM,viewrec<2>) + vname = CONVERT(@TM,".",key) + FOR I = 1 to DCOUNT(remarks,@FM) + remarks2 = remarks + dotsep = INDEX(remarks2, ".", 1) + remarks2[dotsep, 1] = @TM + READ tablerec FROM uvtables,remarks2 + THEN + LOCATE(vname,tablerec,5;tmp) + THEN + IF Verbose THEN CALL *WRAP.PRINT("* Deleting table data (column VIEWS) for view '":NameOrPath:"'.",Width,0,2) + DEL tablerec<5,tmp> + WRITE tablerec ON uvtables,remarks2 + END + END + NEXT I + END + + IF Verbose THEN CALL *WRAP.PRINT("* Deleting view data for view '":NameOrPath:"'.",Width,0,2) + DELETE uvview,key + END + + ****************************************************** + * Delete all UV_USERS ownership data for this table. * + ****************************************************** + EXECUTE "SELECT UV_USERS WITH SCHEMAS LIKE ...":Schema:"..." RTNLIST rlst CAPTURING junk + + SavRec = 0 +loopa: + READNEXT id FROM rlst ELSE GOTO loopb + READ delrec FROM uvusers,id ELSE GOTO loopa + CNT = 1 + BOUNDS = DCOUNT(delrec<5>,@VM) + LOOP WHILE CNT <= BOUNDS DO + IF delrec<5,CNT> = NameOrPath AND delrec<4,CNT> = Schema + THEN + IF Verbose THEN CALL *WRAP.PRINT("* Deleting ownership record for user '":id:"'.",Width,0,2) + DEL delrec<5,CNT> + DEL delrec<4,CNT> + BOUNDS = BOUNDS - 1 + SavRec = 1 + END + ELSE + CNT = CNT + 1 + END + REPEAT + IF SavRec + THEN + WRITE delrec ON uvusers,id ELSE CALL *WRAP.PRINT("* Problems with the write. Unable to delete ownership record for user '":id:"'.",Width,5,0) + SavRec = 0 + END + GOTO loopa +loopb: + + ******************************************************* + * Delete all UV_USERS permission data for this table. * + ******************************************************* + EXECUTE "SELECT UV_USERS WITH PERM_SCHEMAS LIKE ...":Schema:"..." RTNLIST rlst CAPTURING junk + +loopc: + READNEXT id FROM rlst ELSE GOTO loopd + READ delrec FROM uvusers,id ELSE GOTO loopc + BOUNDS = DCOUNT(delrec<7>,@VM) + CNT = 1 + LOOP WHILE CNT <= BOUNDS DO + IF delrec<7,CNT> = NameOrPath AND delrec<6,CNT> = Schema + THEN + IF Verbose THEN CALL *WRAP.PRINT("* Deleting permission record for user '":id:"'.",Width,0,2) + DEL delrec<7,CNT> + DEL delrec<6,CNT> + BOUNDS = BOUNDS - 1 + SavRec = 1 + END + ELSE + CNT = CNT + 1 + END + REPEAT + IF SavRec + THEN + WRITE delrec ON uvusers,id ELSE CALL *WRAP.PRINT("* Problems with the write. Unable to delete permission record for user '":id:"'.",Width,0,2) + SavRec = 0 + END + GOTO loopc +loopd: + + RETURN + + +MOVEDATA: + key2 = Schema:@TM:TableName + Oschema = CONVERT(@TM,@FM,key) + Otable = Oschema<2> + Oschema = Oschema<1> + + ****************************************** + * Move the UV_TABLES data for the table. * + ****************************************** + IF Verbose THEN CALL *WRAP.PRINT("* Moving table data from table '":Sica:" (":Sica:")' to table '":NameOrPath:" (":Schema:")'.",Width,0,2) + READ nrec FROM uvtables,key + THEN + IF IS.FULLPATH(TablePath) + THEN nrec<6> = TablePath + ELSE nrec<6> = path:"/":TablePath + nrec<7> = path:"/D_":TableName + WRITE nrec ON uvtables,key2 + DELETE uvtables,key + END + ELSE NULL + + ******************************************** + * Move the UV_COLUMNS data for this table. * + ******************************************** + IF Verbose THEN CALL *WRAP.PRINT("* Moving column data from table '":Sica:" (":Sica:")' to table '":NameOrPath:" (":Schema:")'.",Width,0,2) + FOR I = 1 to DCOUNT(catrec<4>, @VM) + READ nrec FROM uvcolumns,key:@TM:catrec<4,I> + THEN + WRITE nrec ON uvcolumns,key2:@TM:catrec<4,I> +* 23807; May get UV_COLUMNS constraint error + ON ERROR + CALL *WRAP.PRINT("* WRITE error to UV_COLUMNS, STATUS = ":STATUS(),Width,0,2) + icheckret = ICHECK(nrec, uvcolumns,key2:@TM:catrec<4,I>) + IF icheckret<1> = 8 AND icheckret<2> = 5 + THEN + CALL *WRAP.PRINT("* UV_COLUMNS DATA_TYPE CHECK constraint is out of date.",Width,0,2) + CALL *WRAP.PRINT("* Execute UPDATE.UV_COLUMNS in the sql/catalog account before retrying.",Width,0,2) + END + ELSE + CALL *WRAP.PRINT("* ICHECK result = ":icheckret,Width,0,2) + END + END + END + ELSE NULL + DELETE uvcolumns,key:@TM:catrec<4,I> + NEXT I + + ********************************************* + * Move the association data for this file. * + * This is both UV_TABLES and UV_ASSOC data. * + ********************************************* + IF Verbose THEN CALL *WRAP.PRINT("* Moving association data from table '":Sica:" (":Sica:")' to table '":NameOrPath:" (":Schema:")'.",Width,0,2) + FOR I = 1 to DCOUNT(catrec<8>, @VM) + READ nrec FROM uvtables,key:"_":catrec<8,I> + THEN + nrec<3> = TableName + IF IS.FULLPATH(TablePath) + THEN nrec<6> = TablePath + ELSE nrec<6> = path:"/":TablePath + nrec<7> = path:"/D_":TableName + WRITE nrec ON uvtables,key2:"_":catrec<8,I> + DELETE uvtables,key:"_":catrec<8,I> + END + ELSE NULL + + READ nrec FROM uvassoc,key:"_":catrec<8,I> + THEN + WRITE nrec ON uvassoc,key2:"_":catrec<8,I> + DELETE uvassoc,key:"_":catrec<8,I> + END + ELSE NULL + NEXT I + + **************************************************** + * Move all UV_USERS ownership data for this table. * + **************************************************** + EXECUTE "SELECT UV_USERS WITH SCHEMAS LIKE ...":Oschema:"..." RTNLIST rlst CAPTURING junk + + SavRec = 0 +loope: + READNEXT id FROM rlst ELSE GOTO loopf + READ movrec FROM uvusers,id ELSE GOTO loope + CNT = 1 + BOUNDS = DCOUNT(movrec<5>,@VM) + LOOP WHILE CNT <= BOUNDS DO + IF movrec<5,CNT> = Otable AND movrec<4,CNT> = Oschema + THEN + IF Verbose THEN CALL *WRAP.PRINT("* Moving ownership record for user '":id:"'.",Width,0,2) + movrec<5,CNT> = TableName + movrec<4,CNT> = Schema + SavRec = 1 + END + CNT = CNT + 1 + REPEAT + IF SavRec + THEN + WRITE movrec ON uvusers,id ELSE CALL *WRAP.PRINT("* Problems with the write. Unable to move ownership record for user '":id:"'.",Width,0,2) + SavRec = 0 + END + GOTO loope +loopf: + + ***************************************************** + * Move all UV_USERS permission data for this table. * + ***************************************************** + EXECUTE "SELECT UV_USERS WITH PERM_SCHEMAS LIKE ...":Oschema:"..." RTNLIST rlst CAPTURING junk + +loopg: + READNEXT id FROM rlst ELSE GOTO looph + READ movrec FROM uvusers,id ELSE GOTO loopg + BOUNDS = DCOUNT(movrec<7>,@VM) + CNT = 1 + LOOP WHILE CNT <= BOUNDS DO + IF movrec<7,CNT> = Otable AND movrec<6,CNT> = Oschema + THEN + IF Verbose THEN CALL *WRAP.PRINT("* Moving permission record for user '":id:"'.",Width,0,2) + movrec<7,CNT> = TableName + movrec<6,CNT> = Schema + SavRec = 1 + END + CNT = CNT + 1 + REPEAT + IF SavRec + THEN + WRITE movrec ON uvusers,id ELSE CALL *WRAP.PRINT("* Problems with the write. Unable to move permission record for user '":id:"'.",Width,0,2) + SavRec = 0 + END + GOTO loopg +looph: + + READ catrec FROM uvtables,key2 + ELSE + CRT "Problem with read." + BREAK ON + STOP + END + key = key2 + + RETURN + +COPYDATA: + key2 = Schema:@TM:TableName + Oschema = CONVERT(@TM,@FM,key) + Otable = Oschema<2> + Oschema = Oschema<1> + + ****************************************** + * Copy the UV_TABLES data for the table. * + ****************************************** + IF Verbose THEN CALL *WRAP.PRINT("* Copying table data from table '":Sica:" (":Sica:")' to table '":NameOrPath:" (":Schema:")'.",Width,0,2) + READ nrec FROM uvtables,key + THEN + IF IS.FULLPATH(TablePath) + THEN nrec<6> = TablePath + ELSE nrec<6> = path:"/":TablePath + nrec<7> = path:"/D_":TableName + WRITE nrec ON uvtables,key2 + END + ELSE NULL + + ******************************************** + * Copy the UV_COLUMNS data for this table. * + ******************************************** + IF Verbose THEN CALL *WRAP.PRINT("* Copying column data from table '":Sica:" (":Sica:")' to table '":NameOrPath:" (":Schema:")'.",Width,0,2) + FOR I = 1 to DCOUNT(catrec<4>, @VM) + READ nrec FROM uvcolumns,key:@TM:catrec<4,I> + THEN + WRITE nrec ON uvcolumns,key2:@TM:catrec<4,I> +* 23807; May get UV_COLUMNS constraint error + ON ERROR + CALL *WRAP.PRINT("* WRITE error to UV_COLUMNS, STATUS = ":STATUS(),Width,0,2) + icheckret = ICHECK(nrec, uvcolumns,key2:@TM:catrec<4,I>) + IF icheckret<1> = 8 AND icheckret<2> = 5 + THEN + CALL *WRAP.PRINT("* UV_COLUMNS DATA_TYPE CHECK constraint is out of date.",Width,0,2) + CALL *WRAP.PRINT("* Execute UPDATE.UV_COLUMNS in the sql/catalog account before retrying.",Width,0,2) + END + ELSE + CALL *WRAP.PRINT("* ICHECK result is ":icheckret,Width,0,2) + END + END + END + ELSE NULL + NEXT I + + ********************************************* + * Copy the association data for this file. * + * This is both UV_TABLES and UV_ASSOC data. * + ********************************************* + IF Verbose THEN CALL *WRAP.PRINT("* Copying association data from table '":Sica:" (":Sica:")' to table '":NameOrPath:" (":Schema:")'.",Width,0,2) + FOR I = 1 to DCOUNT(catrec<8>, @VM) + READ nrec FROM uvtables,key:"_":catrec<8,I> + THEN + nrec<3> = TableName + IF IS.FULLPATH(TablePath) + THEN nrec<6> = TablePath + ELSE nrec<6> = path:"/":TablePath + nrec<7> = path:"/D_":TableName + WRITE nrec ON uvtables,key2:"_":catrec<8,I> + END + ELSE NULL + + READ nrec FROM uvassoc,key:"_":catrec<8,I> + THEN + WRITE nrec ON uvassoc,key2:"_":catrec<8,I> +* 23807; UV_ASSOC ORDERING constraint may be wrong + ON ERROR + CALL *WRAP.PRINT("* WRITE error to UV_ASSOC, STATUS = ":STATUS(),Width,0,2) + icheckret = ICHECK(nrec, uvcolumns,key2:"_":catrec<8,I>) + IF icheckret<1> = 8 AND icheckret<2> = 1 + THEN + CALL *WRAP.PRINT("* UV_ASSOC ORDERING CHECK constraint is out of date.",Width,0,2) + CALL *WRAP.PRINT("* Execute UPDATE.UV_ASSOC in the sql/catalog account before retrying.",Width,0,2) + END + ELSE + CALL *WRAP.PRINT("* ICHECK result is ":icheckret,Width,0,2) + END + END + END + ELSE NULL + NEXT I + + **************************************************** + * Move all UV_USERS ownership data for this table. * + **************************************************** + EXECUTE "SELECT UV_USERS WITH SCHEMAS LIKE ...":Oschema:"..." RTNLIST rlst CAPTURING junk + + SavRec = 0 +loopi: + READNEXT id FROM rlst ELSE GOTO loopj + READ movrec FROM uvusers,id ELSE GOTO loopi + CNT = 1 + BOUNDS = DCOUNT(movrec<5>,@VM) + LOOP WHILE CNT <= BOUNDS DO + IF movrec<5,CNT> = Otable AND movrec<4,CNT> = Oschema + THEN + IF Verbose THEN CALL *WRAP.PRINT("* Copying ownership record for user '":id:"'.",Width,0,2) + INS TableName BEFORE movrec<5,-1> + INS Schema BEFORE movrec<4,-1> + SavRec = 1 + END + CNT = CNT + 1 + REPEAT + IF SavRec + THEN + WRITE movrec ON uvusers,id ELSE CALL *WRAP.PRINT("* Problems with the write. Unable to copy ownership record for user '":id:"'.",Width,0,2) + SavRec = 0 + END + GOTO loopi +loopj: + + ***************************************************** + * Move all UV_USERS permission data for this table. * + ***************************************************** + EXECUTE "SELECT UV_USERS WITH PERM_SCHEMAS LIKE ...":Oschema:"..." RTNLIST rlst CAPTURING junk + +loopk: + READNEXT id FROM rlst ELSE GOTO loopl + READ movrec FROM uvusers,id ELSE GOTO loopk + BOUNDS = DCOUNT(movrec<7>,@VM) + CNT = 1 + LOOP WHILE CNT <= BOUNDS DO + IF movrec<7,CNT> = Otable AND movrec<6,CNT> = Oschema + THEN + IF Verbose THEN CALL *WRAP.PRINT("* Copying permission record for user '":id:"'.",Width,0,2) + INS TableName BEFORE movrec<7,-1> + INS Schema BEFORE movrec<6,-1> + SavRec = 1 + END + CNT = CNT + 1 + REPEAT + IF SavRec + THEN + WRITE movrec ON uvusers,id ELSE CALL *WRAP.PRINT("* Problems with the write. Unable to copy permission record for user '":id:"'.",Width,0,2) + SavRec = 0 + END + GOTO loopk +loopl: + + READ catrec FROM uvtables,key2 + ELSE + CRT "Problem with read." + BREAK ON + STOP + END + key = key2 + + RETURN + +COLBUILD: + IF Verbose THEN CALL *WRAP.PRINT("* Building SQL catalog data for column '":Sica:"' in UV_COLUMNS.",Width,0,2) + Cnum = COLUMN+Colnum + columnrec = "" + + columnrec<1> = Sica + + sicamc = Sica:@VM:Sica + columnrec<2> = sicamc + + IF columnrec<1> # "" + THEN + FOR AsocCnt = 1 to Dcount(Alst,@FM) + IF Alst = columnrec<1> + THEN + Keyfound = 0 + FOR J = 1 to Dcount(Anlst,@VM) + IF Anullst = 1 AND NOT(Keyfound) + THEN + IF Anlst = Sica + THEN + columnrec<3,1> = 0 + columnrec<3,2> = Sica+1 + END + ELSE Keyfound = 1 + END + ELSE + IF Anlst = Sica + THEN + IF Keyfound = 1 + THEN columnrec<3,1> = J-1 + ELSE columnrec<3,1> = J + columnrec<3,2> = 0 + END + END + NEXT J + END + NEXT AsocCnt + END + ELSE IF Sica THEN columnrec<3> = sicamc + ELSE columnrec<3> = 0 + + IF Sica THEN columnrec<4> = "M" ELSE columnrec<4> = "S" + + dtype = Sica + columnrec<5> = DATATYPES + + IF dtype = 2 OR dtype = 6 + THEN columnrec<6> = Sica + ELSE columnrec<6> = 0 + + IF dtype = 3 + THEN + IF Sica # "" + THEN columnrec<7> = Sica + ELSE columnrec<7> = 15 + END + ELSE columnrec<7> = 0 + + columnrec<8> = "" + + IF dtype = 7 OR dtype = 8 + THEN columnrec<9> = Sica + ELSE columnrec<9> = 0 + + IF Sica = 0 + THEN columnrec<10> = "YES" + ELSE columnrec<10> = "NO" + + IF Sica = 3 + THEN columnrec<11> = Sica + ELSE columnrec<11> = "" + + WRITE columnrec ON uvcolumns,key:@TM:Sica +* 23807; UV_COLUMNS DATA_TYPE constraint may be wrong + ON ERROR + CALL *WRAP.PRINT("* WRITE error to UV_COLUMNS, STATUS = ":STATUS(),Width,0,2) + icheckret = ICHECK(columnrec, uvcolumns,key:@TM:Sica) + IF icheckret<1> = 8 AND icheckret<2> = 5 + THEN + CALL *WRAP.PRINT("* UV_COLUMNS DATA_TYPE CHECK constraint is out of date.",Width,0,2) + CALL *WRAP.PRINT("* Execute UPDATE.UV_COLUMNS in the sql/catalog account before retrying.",Width,0,2) + END + ELSE + CALL *WRAP.PRINT("* ICHECK result is ":icheckret,Width,0,2) + END + END + RETURN + +* Build the UV_TABLES data for an Association. * + +ATABUILD: + *********************************************************** + * RETURN IF NO Primary Key(s) * + *********************************************************** + IF Sica = 0 THEN RETURN + + IF Verbose THEN CALL *WRAP.PRINT("* Building UV_TABLES data for association '":Alst:"'.",Width,0,2) + ************************************ + * Set the owner of the association * + ************************************ + Atrec<1> = catrec<1> + + ************************************** + * Set the TABLE_TYPE = "ASSOCIATION" * + ************************************** + Atrec<2> = "ASSOCIATION" + + ******************************************* + * Set the BASE_TABLE to the current table * + ******************************************* + Atrec<3> = TableName + + ****************************************15080****** + * Set the COLUMNS field to all PKs + ASSOC column * + *************************************************** + + TmpPKcols = DCOUNT(PKlst,@VM) + FOR I = 1 TO TmpPKcols + Atrec<4,I> = PKlst + NEXT I + + TmpAcols = DCOUNT(Anlst,@VM) + FOR I = 1 TO TmpAcols + Atrec<4,I + TmpPKcols> = Anlst + NEXT I + + ********************** + * Set the table path * + ********************** + Atrec<6> = catrec<6> + + *************************** + * Set the dictionary path * + *************************** + Atrec<7> = catrec<7> + + WRITE Atrec ON uvtables,key:"_":Alst + RETURN + +ATBUILD: + IF Sica = 0 THEN RETURN + + IF Verbose THEN CALL *WRAP.PRINT("* Building UV_ASSOC data for association '":Alst:"'.",Width,0,2) + Arec = "" + FoundAss = -1 + ************************************ + * find the association in the sica * + ************************************ + AOffset = COLUMN+Sica+Sica+Sica + ATmpMax = Sica-1 + + FOR I = 0 to ATmpMax + IF Sica = Alst THEN FoundAss = I + NEXT I + + IF FoundAss # -1 + THEN + Arec<1> = Sica + Arec<2> = Sica + Arec<3> = Sica + Arec<4> = Sica + END + ELSE + Arec<1> = "UNORDERED" + Arec<4> = "NO" + END + + WRITE Arec ON uvassoc,key:"_":Alst +* 23807; UV_ASSOC ORDERING constraint may be wrong + ON ERROR + CALL *WRAP.PRINT("* WRITE error to UV_ASSOC, STATUS = ":STATUS(),Width,0,2) + icheckret = ICHECK(Arec, uvassoc,key:"_":Alst) + IF icheckret<1> = 8 AND icheckret<2> = 1 + THEN + CALL *WRAP.PRINT("* UV_ASSOC ORDERING CHECK constraint is out of date.",Width,0,2) + CALL *WRAP.PRINT("* Execute UPDATE.UV_ASSOC in the sql/catalog account before retrying.",Width,0,2) + END + ELSE + CALL *WRAP.PRINT("* ICHECK result is ":icheckret,Width,0,2) + END + END + RETURN + +VWBUILD: + IF Verbose THEN CALL *WRAP.PRINT("* Building UV_VIEWS data for view '":NameOrPath:"'.",Width,0,2) + VWrec = "" + + VWrec<1> = Sica + IF Sica = "no" + THEN VWrec<2> = Sica + ELSE + ** Rel 9 has more fields, @TM between schema and tablename JBG 17337 *** + ** @SVM sent over for table seperator, not @VM ** + VWrec<2> = CONVERT(@TM, ".", Sica) + VWrec<2> = CONVERT(@SVM,@VM, VWrec<2>) + VWrec<3> = Sica + VWrec<4> = Sica + VWrec<5> = Sica + END + + WRITE VWrec ON uvview,key + RETURN + +BUILDDATA: + + IF Verbose THEN CALL *WRAP.PRINT("* Building table data for ":SQLobject:" '":NameOrPath:"'.",Width,0,2) + + catrec = "" + Alst = "" + Anlst = "" + Anullst = "" + MaxCols = (Sica+Sica)-1 + + ************************* + * Build UV_TABLES data. * + ************************* + catrec<1> = Sica + IF IsaView THEN catrec<2> = "VIEW" + IF IsaTable THEN catrec<2> = "BASE TABLE" + catrec<3> = "" + + FOR Colnum = 0 TO MaxCols + INS Sica BEFORE catrec<4,-1> + NEXT Colnum + + *************************************** + * No view infornmation is in the sica * + * Its lost at this point catrec<5> * + *************************************** + catrec<6> = path:"/":TableName + catrec<7> = path:"/D_":TableName + + WRITE catrec ON uvtables,key + + RETURN + END diff --git a/Ardent/UV/APP.PROGS/VMADMSUB.B b/Ardent/UV/APP.PROGS/VMADMSUB.B new file mode 100755 index 00000000..0ade7690 --- /dev/null +++ b/Ardent/UV/APP.PROGS/VMADMSUB.B @@ -0,0 +1,12884 @@ +******************************************************************************* +* +* Server subroutine for graphical administration client +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description........................................ +* 08/12/99 24446 SAP Port Linux to 9.5.1 +* 05/18/99 24138 OGO Add account based file loading for performance +* 05/10/99 24138 OGO Fix rep ID integer overflow problem +* 04/28/99 24138 OGO Replication admin rewrite +* 04/28/99 23626 OGO Account publish and subscribe support +* 04/28/99 24139 OGO Add new UDR debug config parameter +* 04/28/99 24140 OGO Add new UDR logoldest config parameter +* 04/28/99 23663 OGO return Error for unsupported file revisions +* 04/28/99 23641 OGO Dictionary publish and subscribe support +* 04/28/99 21797 OGO Add Distributed file support +* 01/15/99 21797 OGO Add File type display support to publish and subscribe lists. +* 01/14/99 21797 OGO Add support to Replication for explicite file paths, +* Q-Pointers, and Multi-level files. Add more comments +* 11/23/98 23768 DJD Fixed build for last fix. +* 11/19/98 23768 DJD Check for bad accounts. +* 11/09/98 23768 WSM Assign Error after successful RPC.CALL in Diag routines. +* 11/03/98 23768 DJD Filetool fixes. +* 10/19/98 23768 DJD Added support for file fix tool. +* 10/14/98 23801 SAP Change copyrights. +* 07/15/98 23388 RJE Added code for new Network Services routines to +* maintain user login account information. +* 06/26/98 23161 RGA Add support for 'raw' device trans. logging +* 01/23/98 22499 RJE Fixed OSBrowse when given directories with spaces. +* 12/12/97 22338 OGO Changed RepFailOver,GetRepSystemNames +* 12/12/97 22257 OGO Changed GetRepSystems +* 10/25/97 20606 OGO Fixed number of replication admin problems. +* 10/17/97 20606 OGO Fixed file merge error. +* 10/15/97 20606 DJD Finished replication. +* 07/29/97 20246 DJD Fixed message in DELREMSUB +* 07/29/97 20246 DJD Added various fixes for replication +* 07/10/97 20246 DJD Added replication services. +* 03/12/97 20246 DJD Added DataSource and DeadLock management +* 10/18/96 19474 JC Check and report error for non-existant backup +* target path. +* 09/30/96 19347 LA Don't allow TL to be enabled if it is already +* on its way up +* 09/27/96 19329 LA LISTU output format has changed - change the parsing +* 09/27/96 19338 JC Fix PrintedAt to handle large activity log. +* 09/19/96 19281 RKM Fixed OSBrowse when given empty drives/invalid +* pathnames on NT. +* 09/19/96 19274 JC Get BLKMAX from uvconfig parameters. +* 09/17/96 19252 JC Ensure all 'cd's are 'cd /d' on NT +* 09/06/96 19194 ALC Make handling of &PARTFILE& IDs cas insensitive on NT +* 09/05/96 19186 JC Check id PORT.STATUS is in use by other process. +* 08/16/96 19074 JC Add check for warning from RECOVERY.CHECKPOINT +* 08/16/96 19076 JC Use usd -V to check if the spooler is running. +* 08/14/96 19058 JC Fix use of command line separators on NT. +* 08/08/96 19023 JC Allow transction logging on files with & in them. +* 08/07/96 18952 LA Use access to check for existance of SHM.TO.LOAD +* 08/06/96 18985 JC Remove -a option from Mag/Account Restore on NT +* 07/31/96 18945 JC Re-create sp.config file if it doesn't exist. +* 07/23/96 18890 LA Change the way CheckAccountDir works so that it +* checks both the directory and the VOC file. +* 07/18/96 18873 JC Added return flag for is tranaction logging info +* file has been truncated to 16k. Also extended all +* information file returns to 16k +* 07/12/96 18830 JC Add support for IN2 import on NT. +* 07/11/96 18809 JC Fixed defer times for print jobs. +* 07/03/96 17839 LA Various fixes including removing CheckAndRelease +* and returning UVHome & OSExec from Initialise. +* Removed DeleteSynonymAccs. +* 02/08/96 17839 JC Change UniVerseBrowse to only return local files. +* 07/02/96 17839 LA Changed location of include files +* 07/01/96 17839 LA Add extra transaction logging functions +* 06/28/96 17839 PGW Fixed various problems with OSBrowse +* 06/13/96 17839 LA Add import account functions +* 05/24/96 17839 PGW Add functions for Backup/Restore +* 05/17/96 17839 LA Add user admin. code & use INTERNAL keyword to +* LIST.READU +* 04/22/96 17839 LA Add transaction logging code, change ListLocks +* to use INTERNAL keyword to list_readu and fix +* OSBrowse to work with NT +* 04/02/96 17839 LA Add device admin code. +* 03/18/96 17839 LA Add network services code and check to ensure +* important directories cannot be deleted. Also +* made sure that code which is only relevent to +* unix has os specific markers round it. +* 03/11/96 17839 LA Add account admin. code. Get UVHOME +* using system(32). Use OS.EXEC in ShellCommand +* 02/27/96 17839 LA Add config editor code +* 02/14/96 17839 LA Add uniVerse command execution code +* 02/05/96 17839 LA Add lock administration code +* 01/08/96 17839 LA Add Shared memory code +* 11/07/95 17839 LA Subroutine created +************************************************************************ +* +* DESCRIPTION: +* +* This subroutine contains all the server code for the graphical +* uniVerse administration tool. +* +* Input arguments: Action - key for action to be taken +* Params - parameters required by the +* particular function being +* performed, field mark separated +* +* Output arguments: OutData - any output from the requested +* function, field mark separated +* Error - error code or 0 if no error +* +* NOTE: This module has had all unused subs stripped out of it. Add them +* back in as necessary from vmadmsub.complete +* +* Actions for each admin area should be grouped together (eg. Device +* maintenance uses codes 21 - 30) and subroutines should be added in +* alphabetical order for easier maintenance. +* +************************************************************************ + + SUBROUTINE (AdminCode, Params, OutData, Error) + +$INCLUDE UNIVERSE.INCLUDE MACHINE.NAME +$INCLUDE UNIVERSE.INCLUDE TLOG.H +$INCLUDE UNIVERSE.INCLUDE VMADMERR.H +$INCLUDE UNIVERSE.INCLUDE VMADMCMN.H +$INCLUDE UNIVERSE.INCLUDE UDR.INCLUDE.H +$INCLUDE UNIVERSE.INCLUDE FILEFIX.INCLUDE.H + + DEFFUN UVREADMSG(num, args) CALLING '*UVREADMSG' + DEFFUN IsFullPath(a) CALLING '*IS.FULLPATH' + DECLARE GCI access + DECLARE GCI UDRgetheaderinfo + DECLARE GCI UDRsetheaderinfo + DECLARE GCI UDRsetshmmessage + + EQU Text To Out ; * Horrible hack + EQU CRLF To Char(13):Char(10) + EQU CR To Char(13) + EQU TAB To Char(9) + EQU DEFPERMS To 777 ; * Default permissions + EQU SHM.TO.LOAD To "SHM.TO.LOAD" + EQU UVCONFIG To "uvconfig" + EQU GROUPLOCK To 1 ; * Used by lock admin. + EQU RECORDLOCK To 2 ; * Used by lock admin. + EQU FILELOCK To 3 ; * Used by lock admin. + EQU TEMPREC To "VMUVADTMP" ; * Temporary record name + + * Layout of config files: + EQU INITIAL$PATTERN TO '"####"0X' ; * end of copyright section + EQU COMMENT$PATTERN TO '"#"0X' ; * general comment introducer + EQU COMMENT$CHAR TO '#' + + * Set up array containing paths which MUST NOT be deleted + + EQU DONOTDELETE To '/':@FM:'/bin':@FM:'/usr/bin':@FM:'/usr/sbin':@FM:'/etc':@FM:'/dev':@FM:'/usr' + + * Set up defaults for telnet data (NT only) + + EQU DFLT.TELNETPORT To "23" + EQU DFLT.MAXLOGON To "4" + EQU DFLT.LOGONPAUSE To "4" + EQU DFLT.LOGONTIMEOUT To "30" + EQU DFLT.TERMPAUSE To "4" + EQU DFLT.USERPOLICY To "1" + EQU WINERR.NOREGENTRY To 2 ; * Registry entry not found + + * Equates for access keys + + EQU F$OK To 0 ; * File exists + EQU X$OK To 1 ; * Execute access + EQU W$OK To 2 ; * Write access + EQU R$OK To 4 ; * Read access + + * List of &DEVICE& codes which specify tape devices: + EQU TAPE.DEVICE.PATTERN To "'DT'":@VM:"'DC'":@VM:"'T'":@VM:"'C'" + + * Set up arrays for printer definitions (unix). These are used to + * parse the sp.config printer entries + +************************** +* OS specific code start * +************************** + + If OS.TYPE = "UNIX" Then + scratch = UVREADMSG(073336, "") + baud.array = "" + baud.array<1> = scratch<10> ; * 75 + baud.array<2> = scratch<11> ; * 110 + baud.array<3> = scratch<12> ; * 134.5 + baud.array<4> = scratch<13> ; * 150 + baud.array<5> = scratch<14> ; * 300 + baud.array<6> = scratch<15> ; * 600 + baud.array<7> = scratch<16> ; * 1200 + baud.array<8> = scratch<17> ; * 1800 + baud.array<9> = scratch<18> ; * 2400 + baud.array<10> = scratch<19> ; * 4800 + baud.array<11> = scratch<20> ; * 9600 + baud.array<12> = scratch<21> ; * 19200 + parity.array = "" + parity.array<1> = scratch<23> ; * NONE + parity.array<2> = scratch<24> ; * EVEN + parity.array<3> = scratch<25> ; * ODD + cr.array = "" + cr.array<1> = "" + cr.array<2> = "ONLCR" + cr.array<3> = "ONCRNL" + cr.array<4> = "ONOCR" + End + +************************ +* OS specific code end * +************************ + + * Set up pathname and command separators for this operating system. If + * this becomes available in MACHINE.NAME, remove this code + +************************** +* OS specific code start * +************************** + + If OS.TYPE = "UNIX" Then + OS.SEP = "/" + OS.CMDSEP = ";" + OS.CD = "cd " + End Else + OS.SEP = "\" + OS.CMDSEP = " && " + OS.CD = "cd /d " + End + +************************ +* OS specific code end * +************************ + + OutData = "" + Error = 0 + AdminCode += 1 + KeepFileOpen = False + UnixFileOpen = False + +* Set NLS mapping for reading os files + + If System(100) Then + Execute "SET.SEQ.MAP OS" Capturing Out + End + +* Set Replication version information +* the client version will change when "RepVersionInfo" is called + RepAdminClientVersion = "3" + RepServerVersion = "3" + + If DEBUGGING Then + LogText = "ClientAdminCode = ":AdminCode - 1:" OnGosubIndex = ":AdminCode + Gosub WriteDbg + LogText = "Params = ":Change(Params, @fm, "^]") + Gosub WriteDbg + End + +********************************************************************** +* Gosub based on AdminCode +* +* Grouping is: +* +* 1 - 20 Miscellaneous +* 21 - 30 Device Maintenance +* 31 - 40 Account Maintenance +* 41 - 50 Catalog shared memory +* 51 - 70 Spooler +* 71 - 80 Config Editor +* 81 - 90 User administration +* 91 - 100 Lock administration +* 101 - 110 UniVerse Command +* 111 - 120 Network Services +* 121 - 140 Transaction logging +* 141 - 150 Backup/Restore +* 151 - 160 Import account +* 161 - 170 Deadlock Manager +* 171 - 180 ODBC Data Sources +* 181 - 210 Replication +* 211 - 230 Fix File Tool +* +********************************************************************* + + On AdminCode Gosub Initialise, + OSBrowse, ; * 1 + UniVerseBrowse, + GetMachineType, ; * Temporary + GetDrives, + GetUVHome, + GetAccountPath, + GetFilePath, + Unused, + Unused, + Unused, + Unused, ; * 11 + Unused, + Unused, + Unused, + Unused, + Unused, + Unused, + Unused, + Unused, + Unused, + DeviceList, ; * 21 + GetMaxBlockSize, + GetDevice, + PutDevice, + DeleteDevice, + TapeTest, + GetNLSMaps, + EnumPrinters, + Unused, + Unused, + AccountList, ; * 31 + UserList, + GroupList, + DeleteAccount, + MakeAccount, + AccountDets, + ChangeAccount, + CheckAccountDir, + Unused, + Unused, + ShmLoad, ; * 41 + ShmModify, + ShmRunning, + ShmGetProgSize, + ShmWriteSHMTOLOAD, + ShmListSHMTOLOAD, + ShmReleaseLock, + Unused, + Unused, + Unused, + SpoolPrinterDets, ; * 51 + GetSpoolConfig, + SpoolContinue, + SpoolSuspend, + SpoolJobControl, + SpoolPrintedAt, + SpoolMount, + SpoolErrorLog, + SpoolActivityLog, + ResetSpooler, + StartSpooler, ; * 61 + StopSpooler, + ModSpoolJob, + JobDets, + SetSpoolConfig, + CancelSpoolConfig, + EnablePrinting, + AllowQueueing, + GetPrinterGroups, + SetPrinterGroup, + GetUVConfig, ; * 71 + SetUVConfig, + DBSetup, + Unused, + Unused, + Unused, + Unused, + Unused, + Unused, + Unused, + Users, ; * 81 + Logout, + Message, + MessUsers, + Unused, + Unused, + Unused, + Unused, + Unused, + Unused, + ListLocks, ; * 91 + ReleaseLock, + ReleaseUserLocks, + Unused, + Unused, + Unused, + Unused, + Unused, + Unused, + Unused, + SaveUVCommand, ; * 101 + Unused, + Unused, + Unused, + Unused, + Unused, + Unused, + Unused, + Unused, + Unused, + GetRPCInfo, ; * 111 + SetRPCPort, + SaveNodes, + NetReleaseLocks, + GetTelnetInfo, + SetTelnetInfo, + GetUserInfo, + DeleteUserInfo, + GetUserInfoDetails, + UpdateUserInfoDetails, + GetLoggingState, ; * 121 + LogFileInfo, + LogControl, + ViewInfoFile, + DeleteInfoFile, + SetLoggingConfig, + ListActiveFiles, + SetActiveFiles, + SetLogFiles, + ReleaseLogFiles, + PurgeLogFiles, ; * 131 + GetTransferLogs, + ChangeToFiles, + IdentifyLogs, + ClearFlag, + RollFwdToFile, + Unused, + Unused, + Unused, + Unused, + GetLocalAccountPaths, ; * 141 + CheckDirectoryPath, + CheckBackupTarget, + Unused, + RemoveBackupTarget, + GetAccountFiles, + CheckRestoreSource, + ParseRestoreLabel, + Unused, + Unused, + MagrstCommand, ; * 151 + AcctrstCommand, + Unused, + Unused, + Unused, + Unused, + Unused, + Unused, + Unused, + Unused, + GetDeadLockConfig, ; * 161 + GetDeadLockState, + ListDeadLocks, + StartDeadLocking, + StopDeadLocking, + SaveDeadLockConfig, + PurgeDeadLockLog, + ExamineDeadLockLog, + ResolveDeadLock, + Unused, + GetDataSources, ; * 171 + GetDataSourceEntry, + UpdateDataSourceEntry, + DeleteDataSourceEntry, + CreateDataSourceEntry, + Unused, + Unused, + Unused, + Unused, + Unused, + RepGetState, ; * 181 + RepGetReplicationConfig, + RepSaveReplicationConfig, + RepControl, + RepExamineRepLog, + RepClearRepLog, + RepPublishFile, + RepUnPublish, + RepGetPublishedFiles, + RepGetPublishedFileDetails, + RepUpdatePublishedFile, ; * 191 + RepSubscribeFile, + RepUnSubscribe, + RepGetSubscriptions, + RepGetSubscriptionDetails, + RepUpdateSubscription, + RepGetSystems, + RepGetSystemDetails, + RepAddSystem, + RepUpdateSystem, + RepDeleteSystem, ; * 201 + RepGetSystemNames, + RepGetRemotePubs, + RepRemoveRemoteSub, + RepResumeLogManager, + RepFailOver, + RepAccountList, + RepGetUVFiles, + RepVersionInfo, + RepRepairFile, + GetFilesWithDetails, ; * 211 + GetMultiLevelFiles, + GetMultiLevelFilesWithDetails, + GetFileDetails, + SetupDiagnosicsRun, + ShutdownDiagnosicsRun, + DiagPhysicalStructure, + DiagFileHeader, + DiagFileGroups, + DiagFileData, + DiagFileMisc, ; * 221 + GetFixErrors, + FixTheFile, + Unused, + Unused, + Unused, + Unused, + Unused, + Unused, + Unused, + RepGetMultiLevelFiles, ; * 231 replication continued + RepGetMultiLevelFileParts + + If DEBUGGING Then + LogText = "OutData = ":Change(OutData, @fm, "^]") + Gosub WriteDbg + LogText = "Error = ":Error + Gosub WriteDbg + End + RETURN + +********************************************************************** +* AccountDets - Returns details of an account +* +* Input: Account name +* Output: Account path +* Account flavour +* Owner (null for NT) +* Group (null for NT) +* Permissions (null for NT) +********************************************************************** +AccountDets: + + Path = "" + Flavor = "" + Owner = "" + Group = "" + Perms = "" + + AccountName = Params<1> + Read AccountRec From UVACCOUNT, AccountName Else Return + Path = AccountRec<11> + FStat = '' + OpenSeq Path:OS.SEP:"VOC" To FL2 Then + Status FStat From FL2 Else FStat = '' + End Else + Error = EADM.NOACCOUNT + Return + End + + Write "Q":@fm:AccountName:@fm:"VOC" On VOC, TEMPREC + Open TEMPREC To FL Then + ReadV Flavor From FL, "RELLEVEL",3 Else Flavor = '' + Close FL + End Else + Flavor = "UNKNOWN" + End + Delete VOC, TEMPREC + +************************** +* OS specific code start * +************************** + + If OS.TYPE = "UNIX" Then + + * User name: get directly from STATUS output + + Owner = FStat<30> + + * Group name: get group id from STATUS output and convert to group + * name + + Group = FStat<9> + OpenSeq '/etc/group' To TFl Then + Found = 0 + Loop + ReadSeq Line From TFl Else Line = '' + Until Found Or Status() Do + Found = ( Line[":",3,1] = Group ) + If Found Then Temp = Line[":",1,1] + Repeat + CloseSeq TFl + If Found then Group = Temp + End + + * Permissions: get Mode from STATUS output and convert to permissions + + Mode = FStat<5> + Temp =Oconv(Mode,"MO")[3] + for I = 1 To 3 + Text = Temp[I,1] + Begin Case + Case Text = 0 + Perms := "---" + Case Text = 1 + Perms := '--x' + Case Text = 2 + Perms := '-w-' + Case Text = 3 + Perms := '-wx' + Case Text = 4 + Perms := 'r--' + Case Text = 5 + Perms := 'r-x' + Case Text = 6 + Perms := 'rw-' + Case Text = 7 + Perms := 'rwx' + End Case + Next I + End ; * OS specific code + +************************ +* OS specific code end * +************************ + + OutData = Path:@vm:Flavor:@vm:Owner:@vm:Group:@vm:Perms + Return + +********************************************************************** +* AccountList - Returns list of accounts on the server +* +* Input: NONE +* Output: Field mark separated list of account +* names +********************************************************************** +AccountList: + + SSelect UVACCOUNT + Done = False + Loop + ReadNext Id Else Done = True + Until Done Do + OutData<-1> = Id + Repeat + + Return + +********************************************************************** +* AcctrstCommand - Set up command line for account.restore +* +* Input: Restore directory +* Device name +* Block size +* Use Type19 flag +* Flavour (P = PICK, M = Reality, +* I = IN800, J = IN500) +* Multi save flag (only used for Reality) +* Number of volumes (only used for IN500 +* with tape type DC) +* Output: Command line +********************************************************************** +AcctrstCommand: + + RstPath = Params<1> + DevName = Params<2> + BlockSize = Params<3> + Type19 = Params<4> + Flavour = Params<5> + MultiSave = Params<6> + NumVols = Params<7> + +************************** +* OS specific code start * +************************** + + If OS.TYPE = "UNIX" Then + * Check that restore directory can be written to + + If access(RstPath, W$OK + R$OK) Then + Error = EADM.NOACCESS + Goto ExitAcctrstCommand + End + End + +************************ +* OS specific code end * +************************ + + * Get device pathname from &DEVICE& file and check that the + * rewind device can be read from + + Read DevRec From DEVICES, DevName Else + Error = EADM.CANTREAD + Goto ExitAcctrstCommand + End + DevPath = DevRec<2> + DevRewind = DevRec<6> + DevType = DevRec<4> + +************************** +* OS specific code start * +************************** + + If OS.TYPE = "UNIX" Then + If access(DevRewind, R$OK) Then + Error = EADM.NOREADACCESS + Goto ExitAcctrstCommand + End + End + +************************ +* OS specific code end * +************************ + +************************** +* OS specific code start * +************************** + + If OS.TYPE = "UNIX" Then + ExLine = "ls -l " : DevPath + Gosub ShellCommand + If Out[1, 3] # "crw" Then + Error = EADM.BADDEVICE + Goto ExitAcctrstCommand + End + End + +************************ +* OS specific code end * +************************ + + Command = OS.CD + + * Validation finished, set up the command line + + Command := RstPath : OS.CMDSEP + If Flavour = "I" Or Flavour = "J" Then + + * For IN5000 or IN8000 format tapes, we need to skip the + * headers + + ForwardTape = DevRec<10> + +************************** +* OS specific code start * +************************** + + If OS.TYPE = "UNIX" Then + Command := " tape=" : DevPath : OS.CMDSEP + End + +************************ +* OS specific code end * +************************ + + Command := ForwardTape : OS.CMDSEP : ForwardTape : OS.CMDSEP + + If Flavour = "J" And DevType = "DC" Then + +************************** +* OS specific code start * +************************** + + If OS.TYPE = "UNIX" Then + Command := UVHOMEBIN : "ddm " : NumVols + Command := " if=" : DevPath : " | " + End Else + Command := UVHOMEBIN : "uvmt " + Command := " -d" : DevPath + Command := " fread | " + End + +************************ +* OS specific code end * +************************ + + Command := UVHOMEBIN : "INfilter | " + Command := UVHOMEBIN : "acct.restore -i -" + Goto ExitAcctrstCommand + End + End + + Command := " " : UVHOMEBIN : "tapein -ice" + Command := " -p" : UVHOMEBIN : "acct.restore" + Command := " -f" : DevPath + +************************** +* OS specific code start * +************************** + + If OS.TYPE = "UNIX" Then + Command := " -g" : DevRewind + End + +************************ +* OS specific code end * +************************ + + Command := " -b" : BlockSize + + If Flavour = "I" Then + Command := " -i" + End Else + If Flavour = "M" Then + Command := " -m" + If MultiSave Then + Command := " -mas" + End + End + End + + If Type19 Then + Command := " -t" + End + + If DevType = "C" Or DevType = "DC" Then + Command := " -c" + End + +************************** +* OS specific code start * +************************** + + If OS.TYPE = "UNIX" Then + Command := " -a" + End + +************************ +* OS specific code end * +************************ + +ExitAcctrstCommand: + + If Error = 0 Then + OutData = OS.EXEC : " " : Quote(Command) + End + + Return + +********************************************************************** +* AllowQueueing - Allows or disallows queueing on a printer +* Unix only. +* +* Input: Action: 0 - disallow queuing +* 1 - allow queueing +* Printername +* Output: NONE +********************************************************************** +AllowQueueing: + +************************** +* OS specific code start * +************************** + + If OS.TYPE = "UNIX" Then + GoSub CheckSpooler + If Error # 0 Then + Return + End + + Key = Params<1> + PrinterName = Params<2> + If Key = 0 Then + ExLine = USA.PATH : " -q -p " : PrinterName + End Else + ExLine = USA.PATH : " +q -p " : PrinterName + End + GoSub ShellCommand + End +************************ +* OS specific code end * +************************ + + Return + +********************************************************************** +* CancelSpoolConfig - Closes the uv.rc file if it is open +* Unix only +* +* Input: NONE +* Output: NONE +********************************************************************** +CancelSpoolConfig: + +************************** +* OS specific code start * +************************** + + If OS.TYPE = "UNIX" Then + If UVRC.OPEN Then + CloseSeq UVRC + End + End + +************************ +* OS specific code end * +************************ + + Return + +********************************************************************** +* ChangeAccount - Changes one or more attributes of an account +* If this is being used on an NT server, the +* only attribute which can be changed is the +* account name - all other parameters will +* be null. +* +* Input: Account name +* New account name or null +* Owner or null (unix only) +* Group or null (unix only) +* Use Default Perms or null (unix only) +* Permissions or null (unix only) +* Output: NONE +********************************************************************** +ChangeAccount: + + AccountName = Params<1> + NewName = Params<2> + +************************** +* OS specific code start * +************************** + + If OS.TYPE = "UNIX" Then + NewOwner = Params<3> + NewGroup = Params<4> + UseDfltPerms = Params<5> + NewPerms = Params<6> + End Else + NewOwner = "" + NewGroup = "" + UseDfltPerms = "" + NewPerms = "" + End + +************************ +* OS specific code end * +************************ + + If NewOwner <> "" or NewGroup <> "" Then + Params<1> = AccountName + Params<2> = NewOwner + Params<3> = NewGroup + Gosub ChownAcc + End + + If UseDfltPerms <> "" Then + If UseDfltPerms = 1 Then + NewPerms = DEFPERMS + End + End + If NewPerms <> "" Then + Params<1> = AccountName + Params<2> = NewPerms + Gosub AccPerms + End + + If NewName <> "" Then + Read AccRec From UVACCOUNT, AccountName Then + Delete UVACCOUNT, AccountName + Write AccRec To UVACCOUNT, NewName + End + End + + Return + +************************************************************************ +* CheckAccountDir - Checks the state of an account with respect to +* the directory being deleted: finds out if there +* are any distributed files in the account; finds +* out if the account directory is a home directory +* for any users. +* +* If the account cannot be accessed (or does not +* exist), then an error will be returned together +* with the pathname of the account. +* +* Input: Account Name +* Output: Account Path +* PartFilesFlag (true if distributed files +* in the account) +* HomeDirFlag (true if directory is the +* home directory for any +* users) (unix only) +* Synonym accounts +* (list of UV.ACCOUNT entries +* which use the same directory, +* or null) +* User list (list of users for whom +* the directory is their +* home directory - only +* present if HomeDirFlag is +* true) (unix only) +************************************************************************ +CheckAccountDir: + + AccName = Params<1> + PartFlag = 0 + HomeDirFlag = 0 + UserList = "" + + Readv AccPath From UVACCOUNT, AccName, 11 Else + Error = EADM.CANTREAD + Return + End + + If Trim(AccPath) = "" Then + Error = EADM.BADPATH + Return + End + + * First check that there is an accessible account in this directory + * - if there isn't, then the other things are irrelevant + + AccVoc = AccPath : OS.SEP : "VOC" + If access(AccVoc, R$OK + W$OK) Then + + * We don't have access, check if the VOC actually exists + + Error = EADM.NOACCESS + If access(AccVoc, F$OK) Then + + * VOC doesn't exist - check the directory + + Error = EADM.BADACCOUNT + If access(AccPath, R$OK + W$OK) Then + + * No access to directory, check if it exists + + Error = EADM.NOACCESS + If access(AccPath, F$OK) Then + + * No directory + + Error = EADM.NODIRECTORY + End + End + End + OutData = AccPath + Return + End + + * We can only get here if the account is accessible. + * Check if this account contains distributed files + +************************** +* OS specific code start * +************************** + + If OS.TYPE = "MSWIN" Then + Open "&PARTFILES&" TO Partfiles Else + Error = EADM.CANTOPEN + Return + End + + UAccPath = Upcase(AccPath) + UAccPathLen = Len(UAccPath) + Select Partfiles To 1 + Done = False + Loop + ReadNext Id From 1 Then + If Upcase(Id[1, UAccPathLen]) = UAccPath Then + Done = True + PartFlag = 1 + End + End + Else + Done = True + End + Until Done + Repeat + ClearSelect 1 + End + Else + ExLine = \SELECT &PARTFILES& WITH @ID LIKE "\:AccPath:\..."\ + Gosub TCLCommand + NumIds = Field(Out, " ", 1)[2,1] + If NumIds > 0 Then + PartFlag = 1 + End + End + +************************ +* OS specific code end * +************************ + + * Check if there are other accounts using this directory + + SynonymAccs = "" + SSelect UVACCOUNT + Done = False + Loop + ReadNext Id Else Done = True + Until Done Do + If Id # AccName Then + ReadV Path From UVACCOUNT,Id,11 Else Path = "" + +************************** +* OS specific code start * +************************** + + If OS.TYPE = "UNIX" Then + If Path = AccPath Then + SynonymAccs<-1> = Id + End + + End Else + + * On NT the synonym check is case insensitive + + If Upcase(Path) = Upcase(AccPath) Then + SynonymAccs<-1> = Id + End + End + +************************ +* OS specific code end * +************************ + + End + Repeat + SynonymAccs = Lower(SynonymAccs) + +************************** +* OS specific code start * +************************** + + If OS.TYPE = "UNIX" Then + + * Check if this directory is the home directory for any users + + FileName = "/etc/passwd" + Gosub ReadSeqFile + If Error <> 0 Then + HomeDirFlag = 1 ; * to be on the safe side + End Else + Dc = Dcount(NewText,@Fm) + For I = 1 To Dc + If NewText[1,1] <> "+" Then + If NewText[":",6,1] = AccPath Then + HomeDirFlag = 1 + UserList<-1> = NewText[":",1,1] + End + End + Next + End + UserList = Lower(UserList) + End ; * Unix code + +************************ +* OS specific code end * +************************ + + OutData<1> = AccPath + OutData<2> = PartFlag + OutData<3> = HomeDirFlag + OutData<4> = SynonymAccs + OutData<5> = UserList + + Return + +********************************************************************** +* CheckBackupTarget - Validate that a path/device name supplied +* is a valid place to backup to, and return +* a code to indicate what type it is. +* +* Input: Path/device name entered or selected +* by the user +* Output: If the path/device name is not valid +* at all, an error is returned, otherwise +* a code, as follows: +* 1 tape device +* 2 disk file, does not exist yet +* 3 disk file, already exists +********************************************************************** +CheckBackupTarget: + + DevName = Params<1> + + * Test for a pathname. + If IsFullPath(DevName) Then + FilePath = DevName + End Else + * Input does not appear to be a pathname, so get a path from + * &DEVICE& + Read DevRec From DEVICES, DevName Else + Error = EADM.NOTDEVICE + GoTo Exit.CheckBackupTarget + End + If DevRec<4> Matches TAPE.DEVICE.PATTERN Then + * If it's marked as a tape device, uvbackup will accept it + OutData = 1 + GoTo Exit.CheckBackupTarget + End + * For any other device, go on to check the pathname + FilePath = DevRec<6> + End + + * Open the file so that we can tell if it's a real file, + * or a char/block special device + OpenSeq FilePath To Temp.File Then + Status Stats From Temp.File Else Stats = "" + CloseSeq Temp.File + * To find out what kind of file this is, examine the MODE value. + * This contains a bitfield (mask 0170000) which holds a value + * for the file type: 2 = char special, 6 = block special + FileMode = OConv(Stats<5>, "MO") + FileMode = FileMode[1, Len(FileMode) - 4] + FileMode = FileMode[2] + If FileMode = 2 Or FileMode = 6 Then + * It's a valid device + OutData = 1 + End Else + * It's a disk file that already exists + OutData = 3 + End + End Else + * If OpenSeq cannot open it, then either it does not exist + * or it's a directory. We use OpenPath to check that + * it is not a directory. + OutData = 2 + OpenPath FilePath To Temp.File Then + Status Stats From Temp.File Else Stats = "" + Close Temp.File + If Stats<21> = 1 Or Stats<21> = 19 Then + * It's a directory + Error = EADM.CANNOTUSEDIR + OutData = "" + End + End Else + call !GET.PATHNAME(FilePath, dir, file,status) + OpenPath dir to Temp.File Else + Error = EADM.NODIRECTORY + OutData = "" + End + End + End ; * OpenSeq + +Exit.CheckBackupTarget: + + Return + +********************************************************************** +* CheckDirectoryPath - Verify that a given path represents an +* existing directory. +* +* Input: pathname +* Output: Nothing - only an error code +********************************************************************** +CheckDirectoryPath: + + FilePath = Params<1> + OpenPath FilePath To Temp.File Then + Status Stats From Temp.File Else Stats = "" + Close Temp.File + If Stats<21> = 1 Or Stats<21> = 19 Then + * It's a directory + End Else + * Some other kind of file + Error = EADM.BADDIRECTORY + End + End Else + * Could not open it at all + Error = EADM.NODIRECTORY + End + + Return + +********************************************************************** +* CheckRestoreSource - Check that a device or pathname given for +* the source of a UVRestore is a usable tape +* or file created by UVBackup. +* +* Input: Device name in &DEVICE&, or pathname +* Output: Output from uvrestore -L +* +********************************************************************** +CheckRestoreSource: + + DevName = Params<1> + FilePath = "" + RestoreName = "" + + * Test for a pathname. + If IsFullPath(DevName) Then + * If a pathname was supplied, then simply use that + FilePath = DevName + End Else + * Input does not appear to be a pathname, so get a path from + * &DEVICE& + Read DevRec From DEVICES, DevName Else + Error = EADM.NOTDEVICE + GoTo Exit.CheckRestoreSource + End + If DevRec<4> Matches TAPE.DEVICE.PATTERN Then + * If it's marked as a tape device, uvrestore will accept + * the name directly + RestoreName = DevName + End Else + * For any other device, go on to check the pathname + FilePath = DevRec<6> + End + End + + If Len(RestoreName) = 0 And Len(FilePath) > 0 Then + * If it's a pathname, check that it exists + OpenSeq FilePath To Temp.File Then + Close Temp.File + RestoreName = FilePath + End Else + Error = EADM.CANTOPEN + GoTo Exit.CheckRestoreSource + End + End + + * Should have a name to use with uvrestore by now... + If Len(RestoreName) = 0 Then + Error = EADM.NODEVICE + GoTo Exit.CheckRestoreSource + End + + * Device or path name apparently OK - try to read the label + ExLine = OS.EXEC:" '":UV.ROOT:"/bin/uvrestore -L -t ":RestoreName:"'" + GoSub TCLCommand + Del Out<1> + OutData = Out + + * Check to see whether uvrestore complained or not + Check.String = UVREADMSG(085400, "") + Loop + While Check.String<1> = "" Do + Del Check.String<1> + Repeat + If OutData<1>[1, Len(Check.String<1>)] = Check.String<1> Then + Error = 0 + End Else + Error = EADM.NOTBACKUPTAPE + End + +Exit.CheckRestoreSource: + + Return + +********************************************************************** +* ClearFlag - Clear file inconsistency flag on a recoverable +* file +* +* Input: Pathname +* Output: NONE +********************************************************************** +ClearFlag: + + Pathname = Params<1> + ExLine = "RECOVERY.CONSISTENT " : Pathname + Gosub TCLCommand + Out = Trim(Out[1, Len(Out) - 1]) + If Out # "" Then + Error = EADM.CLEARFAILED + End + + Return + +********************************************************************** +* CreateDataSourceEntry - Creates a data source entry +* +* Input: Data Source Name and Details +* Output: None +********************************************************************** +CreateDataSourceEntry: + + pos =0 + + * Add the new entry onto the end of the current details + pos = DCount(DataSourceArray, @FM) +1 + DataSourceArray = Params<1> + DataSourceDetails = Params<2> + DataSourceDetails = Params<3> + DataSourceDetails = Params<4> + DataSourceDetails = Params<5> + + * Write the details to the file. The Global Error will be set + * by this function and then sent back by this subroutine, with + * any errors on the write + Error = 0 + Gosub WriteDataSources + + Return + +********************************************************************** +* DeleteDataSourceEntry - Deletes a data source entry +* +* Input: Data Source Name +* Output: None +********************************************************************** +DeleteDataSourceEntry: + + ReturnCode = 0 + pos =0 + DataSource = Params + + * Find the data source name in the current list and remove the details + Locate DataSource In DataSourceArray Setting pos Then + Del DataSourceArray + Del DataSourceDetails + End Else + ReturnCode = EADM.NOENTRY + End + + * Write the details to the file. The Global Error will be set + * by this function and then sent back by this subroutine, with + * any errors on the write + Error = 0 + Gosub WriteDataSources + + Error = ReturnCode + Return + +********************************************************************** +* DBSetup - Runs DBsetup - unix only (for the moment!) +* +* Input: NONE +* Output: NONE +********************************************************************** +DBSetup: + +************************** +* OS specific code start * +************************** + + If OS.TYPE = "UNIX" Then + ExLine = "DBsetup" + GoSub UvCommand + End + +************************ +* OS specific code end * +************************ + + Return + +*********************************************************************** +* DeleteAccount - Deletes an account from UV.ACCOUNT and +* optionally deletes the directory containing +* it. +* +* If this is being used on an NT server, +* transferring the directory is not an +* option. +* +* Input: Key: 1 - leave directory +* 2 - delete directory +* 3 - transfer directory (unix only) +* Account Name +* User Name (only if Key = 3, else null) +* @vm separated list of synonym accounts +* Output: NONE +*********************************************************************** +DeleteAccount: + + Key = Params<1> + AccName = Params<2> + NewOwner = Params<3> + SynonymAccs = Params<4> + + Begin Case + Case Key = 3 ; * Transfer ownership (unix only) + +************************** +* OS specific code start * +************************** + + If OS.TYPE = "UNIX" Then + Params<1> = AccName + Params<2> = NewOwner + Params<3> = "" ; * null group so it won't be changed + GoSub ChownAcc + End + +************************ +* OS specific code end * +************************ + + Case Key = 2 + +* Read pathname from UV.ACCOUNT file. Check that pathname is +* valid by checking if there is a VOC file there. Also check +* that we're not deleting the UVHOME account! If it is ok to +* delete it, delete the directory + + PathOk = False + Readv PathName From UVACCOUNT, AccName, 11 Then + OpenSeq PathName:OS.SEP:"VOC" To Temp Then + PathOk = True + CloseSeq Temp + End + + * Check that PathName isn't one of the forbidden directories + + Find PathName In DONOTDELETE Setting Fmc Then PathOk = False + + If PathOk = True Then + If PathName <> UVHOME Then + ExLine = RM.CMD: " -rf ":PathName + GoSub ShellCommand + End + End + End + End Case + + Delete UVACCOUNT, AccName + + * Now delete synonym accounts if required + + If SynonymAccs <> "" Then + SynonymAccs = Raise(SynonymAccs) + NumAccs = DCount(SynonymAccs, @fm) + For I = 1 To NumAccs + Delete UVACCOUNT, SynonymAccs + Next I + End + + Return + +*********************************************************************** +* DeleteDevice - Deletes device record from &DEVICE&. For unix +* systems, if the device is a printer, also +* removes its entry from sp.config. +* +* Input: Device name +* Device type key: 0 - tape +* 1 - printer +* 2 - other +* Output: NONE +*********************************************************************** +DeleteDevice: + + DevName = Params<1> + Key = Params<2> + + Delete DEVICES, DevName + +************************** +* OS specific code start * +************************** + + * If this is a unix system and the device definition being deleted + * is a printer, remove it from the sp.config file as well + + If OS.TYPE = "UNIX" And Key = 1 Then + SpConfigPath = SPOOL.DIR : "/sp.config" + OpenSeq SpConfigPath To FL Then + Temp = "" + Fin = False + Loop + ReadSeq Line From FL Else Fin = True + Until Fin Do + If Not(Line[" ", 1, 1] = DevName) Then + Temp<-1> = Line + End + Repeat + Seek FL, 0 Else Null ; * Go to start of file + Dc = Dcount(Temp, @fm) + For I = 1 To Dc + WriteSeq Temp On FL Else Null + Next + WEOFSeq FL + CloseSeq FL + ExLine = USA.PATH : " -r" ; * Reset spooler + GoSub ShellCommand + End Else + Error = EADM.NOSPCONFIG + End + End + +************************ +* OS specific code end * +************************ + + Return + +********************************************************************** +* DeleteInfoFile - Deletes a transaction logging information +* file +* +* Input: Key 0 - logging info +* 1 - checkpoint info +* 2 - rollforward info +* Output: NONE +********************************************************************** +DeleteInfoFile: + + Key = Params<1> + + * Get log directory and add the name of the info file to the path + + InfoFile = "" + RECIO(InfoFile, RECIO$PATH) + InfoFile := OS.SEP + + Begin Case + Case Key = 0 + InfoFile := "uvlogd.info" + Case Key = 1 + InfoFile := "uvchkd.info" + Case Key = 2 + InfoFile := "uvrolf.info" + Case 1 + InfoFile := "uvlogd.info" + End Case + + * Doesn't matter if the file exists or not as the outcome is the same + + ExLine = RM.CMD : " -f " : InfoFile + Gosub ShellCommand + + Return + +*********************************************************************** +* DeleteUserInfo - Delete the specified user from the UV.LOGINS +* file. +* +* Input: ID of user to be deleted +* Output: None +*********************************************************************** + +DeleteUserInfo: + + Error = 0 + Id = Params<1> + OutData = "" + + * Open the subscription file + Open '', "UV.LOGINS" To UvLoginsFvar Then + + Delete UvLoginsFvar, Id + + Close UvLoginsFvar + End Else + Error = EADM.CANTOPEN + End + + Return + +*********************************************************************** +* DeviceList - Get list of tapes, printers or "other" devices. +* Tapes and 'other' devices are taken from the +* &DEVICE& file, printers are taken from &DEVICE& +* and (if on unix) the sp.config file. +* +* Input: Key: 0 - list tapes +* 1 - list printers +* 2 - list other devices +* 3 - list default tapes (DT or DC) +* Output: Dynamic array of device names +*********************************************************************** +DeviceList: + + Key = Params<1> + + * First, run through &DEVICE& building up a list of the devices + * of the type requested + + MatchString = "DT":@VM:"DC":@VM:"T":@VM:"C":@VM:"F" + SSelect DEVICES + Done = False + Loop + ReadNext Id Else Done = True + Until Done Do + Readv DevType From DEVICES, Id, 4 Else DevType = '' + Convert " " To @fm In DevType + DevType = DevType<1> + Begin Case + Case DevType = "P" + * This is a printer, if that's what the user requested, + * add it to the list + + If Key = 1 Then + OutData<-1> = Id + End + Case DevType ="O" + * This is a not a tape or printer, if the user requested 'other + * devices', add it to the list + + If Key = 2 Then + OutData<-1> = Id + End + Case DevType Matches MatchString + * This is a tape device, if that's what the user requested, + * add it to the list + + If Key = 0 Then + OutData<-1> = Id + End Else + + * Also check for request to list default tapes + + If Key = 3 And (DevType = "DC" Or DevType = "DT") Then + OutData<-1> = Id + End + End + End Case + Repeat + +************************** +* OS specific code start * +************************** + + * If the caller asked for a list of printers and we're on a unix + * system, go through the sp.config file and check that there aren't + * any printers in there that aren't in the &DEVICE& file + + If OS.TYPE = "UNIX" And Key = 1 Then + SpConfigPath = SPOOL.DIR : "/sp.config" + OpenSeq SpConfigPath To FL Then + Fin = False + Loop + ReadSeq Line From FL Else Fin = True + Until Fin Do + PName = Line[" ", 1, 1] + Find PName In OutData Setting Fmc Else OutData<-1> = PName + Repeat + CloseSeq FL + End + End + +************************ +* OS specific code end * +************************ + + Return + +********************************************************************** +* DiagFileData - Runs the File data diags +* +* Input: +* Output: NONE +********************************************************************** +DiagFileData: + Output = "" + Dim CALL.ARGS(10,2) + Dim RES.ARGS(20,2) + + If FileFixOpen = 0 Then + Gosub StartFileFixServer + End + + If Not(Error) Then + * We are ok, start the call + + CALL.ARGS(1,1) = FILEFIX.DIAGDATA ; * Diag Data + CALL.ARGS(1,2) = UVRPC.INT + + If RPC.CALL(FileFixConId, " ", 1, MAT CALL.ARGS, RES.COUNT, MAT RES.ARGS) Then + If RES.ARGS(1,1) Then + Error = RES.ARGS(1,1) + End + OutData = RES.ARGS(2,1) + End Else + Error = STATUS() - 80000 + End + + End + Return + +********************************************************************** +* DiagFileGroups - Runs the file groups diags +* +* Input: +* Output: NONE +********************************************************************** +DiagFileGroups: + Output = "" + Dim CALL.ARGS(10,2) + Dim RES.ARGS(20,2) + + If FileFixOpen = 0 Then + Gosub StartFileFixServer + End + + If Not(Error) Then + * We are ok, start the call + + CALL.ARGS(1,1) = FILEFIX.DIAGGROUPS ; * Diag Groups + CALL.ARGS(1,2) = UVRPC.INT + + If RPC.CALL(FileFixConId, " ", 1, MAT CALL.ARGS, RES.COUNT, MAT RES.ARGS) Then + If RES.ARGS(1,1) Then + Error = RES.ARGS(1,1) + End + OutData = RES.ARGS(2,1) + End Else + Error = STATUS() - 80000 + End + + End + Return + +********************************************************************** +* DiagFileHeader - Runs the file header diags +* +* Input: +* Output: NONE +********************************************************************** +DiagFileHeader: + Output = "" + Dim CALL.ARGS(10,2) + Dim RES.ARGS(20,2) + + If FileFixOpen = 0 Then + Gosub StartFileFixServer + End + + If Not(Error) Then + Gosub LoadHeaderFileFixFile + If Not(Error) Then + * We are ok, start the call + + CALL.ARGS(1,1) = FILEFIX.DIAGHEADER ; * Diag Header + CALL.ARGS(1,2) = UVRPC.INT + + If RPC.CALL(FileFixConId, " ", 1, MAT CALL.ARGS, RES.COUNT, MAT RES.ARGS) Then + If RES.ARGS(1,1) Then + Error = RES.ARGS(1,1) + End + OutData = RES.ARGS(2,1) + End Else + Error = STATUS() - 80000 + End + + End + End + Return + +********************************************************************** +* DiagFileMisc - Runs the file misc diags +* +* Input: +* Output: NONE +********************************************************************** +DiagFileMisc: + Output = "" + Dim CALL.ARGS(10,2) + Dim RES.ARGS(20,2) + + If FileFixOpen = 0 Then + Gosub StartFileFixServer + End + + If Not(Error) Then + * We are ok, start the call + + CALL.ARGS(1,1) = FILEFIX.DIAGMISC ; * Diag Misc + CALL.ARGS(1,2) = UVRPC.INT + + If RPC.CALL(FileFixConId, " ", 1, MAT CALL.ARGS, RES.COUNT, MAT RES.ARGS) Then + If RES.ARGS(1,1) Then + Error = RES.ARGS(1,1) + End + OutData = RES.ARGS(2,1) + End Else + Error = STATUS() - 80000 + End + + End + Return + +********************************************************************** +* DiagPhysicalStructure - Runs the +* +* Input: +* Output: NONE +********************************************************************** +DiagPhysicalStructure: + Output = "" + Dim CALL.ARGS(10,2) + Dim RES.ARGS(20,2) + + If FileFixOpen = 0 Then + Gosub StartFileFixServer + End + + If Not(Error) Then + * We are ok, start the call + + CALL.ARGS(1,1) = FILEFIX.DIAGPHYSICALSTRUCT ; * Diag Phys Struct + CALL.ARGS(1,2) = UVRPC.INT + + If RPC.CALL(FileFixConId, " ", 1, MAT CALL.ARGS, RES.COUNT, MAT RES.ARGS) Then + If RES.ARGS(1,1) Then + Error = RES.ARGS(1,1) + End + OutData = RES.ARGS(2,1) + End Else + Error = STATUS() - 80000 + End + + End + Return + +********************************************************************** +* EnablePrinting - Enables or disables printing on a printer +* Unix only +* +* Input: Action: 0 - disallow printing +* 1 - allow printing +* Printername +* Output: NONE +********************************************************************** +EnablePrinting: + +************************** +* OS specific code start * +************************** + + If OS.TYPE = "UNIX" Then + GoSub CheckSpooler + If Error # 0 Then + Return + End + + Key = Params<1> + PrinterName = Params<2> + If Key = 0 Then + ExLine = USA.PATH : " -o -p " : PrinterName + End Else + ExLine = USA.PATH : " +o -p " : PrinterName + End + GoSub ShellCommand + End + +************************ +* OS specific code end * +************************ + + Return + +********************************************************************** +* EnumPrinters - Returns a list of the printers defined in +* the print manager on the server machine. +* NT only. +* +* Input: NONE +* Output: Dynamic array of printers +********************************************************************** +EnumPrinters: + +************************** +* OS specific code start * +************************** + + If OS.TYPE # "UNIX" Then + + DECLARE GCI AdmListPrinters + + NumPrinters = 0 + NumPrinters = AdmListPrinters(Printers) + If NumPrinters > 0 Then + OutData = Printers + End + End + +************************ +* OS specific code end * +************************ + + Return + +********************************************************************** +* ExamineDeadLockLog - Returns the Lock Log to examine +* +* Input: Log Path +* Output: Log data +********************************************************************** +ExamineDeadLockLog: + + ReturnCode = 0 + NewText = "" + Line = "" + + LogFile = Trim(Params):OS.SEP:"uvdlockd.log" + OpenSeq LogFile To LogFvar Locked + ReturnCode = EADM.RECLOCKED + End + Then + * In case the file is huge, seek to the end and go back 16k + * bytes. Ignore the outcome of this - if it fails, it means + * the file isn't that long, so just read the whole file. + * NB. Can't return more data than this at the moment due to + * RPC package size limitations + + Seek LogFvar, -16384, 2 Then + End + + Done = False + Loop + ReadSeq Line From LogFvar Else Done = True + Until Done or Status() Do + NewText<-1> = Line + Repeat + + CloseSeq LogFvar + OutData = Change(NewText, @FM, CRLF) + End + Else + ReturnCode = EADM.NOFILE + End + + Error = ReturnCode + Return + +********************************************************************** +* FixTheFile - Runs the File data fixing +* +* Input: +* Output: NONE +********************************************************************** +FixTheFile: + Output = "" + Dim CALL.ARGS(10,2) + Dim RES.ARGS(20,2) + + FixFilename = Params<1> + FixFilePath = Params<2> + If FileFixOpen = 0 Then + Gosub StartFileFixServer + End + + If Not(Error) Then + * We are ok, start the call + + CALL.ARGS(1,1) = FILEFIX.FIXFILE ; * Fix the file + CALL.ARGS(1,2) = UVRPC.INT + CALL.ARGS(2,1) = FixFilename + CALL.ARGS(2,2) = UVRPC.STRING + CALL.ARGS(3,1) = FixFilePath + CALL.ARGS(3,2) = UVRPC.STRING + + If RPC.CALL(FileFixConId, " ", 3, MAT CALL.ARGS, RES.COUNT, MAT RES.ARGS) Then + + OutData = RES.ARGS(2,1) + End Else + Error = STATUS() - 80000 + End + + End + Return + +********************************************************************** +* GetAccountFiles - Returns a list of files local to an account +* +* Input: Account name or pathname +* Output: Sorted list of file names, separated +* by field marks. +********************************************************************** +GetAccountFiles: + + AccountName = Params<1> + If IsFullPath(AccountName) Then + AccountPath = AccountName + End Else + * Specific account name + ReadV AccountPath From UVACCOUNT, AccountName, 11 Else + Error = EADM.CANTREADPATH + Return + End + End + + * We need a temporary file pointer to be able to do SSELECT + TempRec = "F" : @FM : AccountPath : OS.SEP : "VOC" : @FM : "D_VOC" + Write TempRec On VOC, "BROWSEPTR" + ExLine = \SSELECT BROWSEPTR WITH F1 LIKE "'F'..."\ + ExLine := " AND F2 UNLIKE ...":OS.SEP:"..." + +************************** +* OS specific code start * +************************** + +* Checking for / on NT as this is still a valid separator in UniVerse files. + + If OS.TYPE # "UNIX" Then + ExLine := " AND F2 UNLIKE .../..." + End + +************************ +* OS specific code end * +************************ + + Gosub TCLCommand + Done = False + Loop + ReadNext Id From SList Else Done = True + Until Done Do + OutData<-1> = Id + Repeat + + Return + +********************************************************************** +* GetAccountPath - Returns the pathname of an account +* +* Input: Account name or pathname +* Output: Account path, or empty if the path +* is not a valid account. +********************************************************************** +GetAccountPath: + + AccountName = Params<1> + If IsFullPath(AccountName) Then + AccountPath = AccountName + End Else + * Specific account name + ReadV AccountPath From UVACCOUNT, AccountName, 11 Else + Error = EADM.CANTREADPATH + Return + End + End + + * Open the VOC file for the specified account + OpenPath AccountPath : OS.SEP : "VOC" To Remote.Voc Then + Close Remote.Voc + OutData = AccountPath + End Else + Error = EADM.BADACCOUNT + End + + Return + +********************************************************************** +* GetDataSources - Returns the data sources +* +* Input: None +* Output: Data sources in the config file +********************************************************************** +GetDataSources: + + ReturnCode = 0 + pos =0 + datasourcecount = 0 + lp = 1 + line="" + Templine = "" + DataSourceDetails = "" + DataSourceArray = "" + PreDataSources = "" + PostDataSources = "" + eof = 0 + + config.file = UVHOME : OS.SEP : "uvodbc.config" + OpenSeq config.file To FConfig.file Then + + * Find the ODBC START SOURCES marker, anything before this are not adat sources + Loop + ReadSeq line From FConfig.file Then + Templine=Trim(line) + If Templine = "[ODBC DATA SOURCES]" Then + eof = 1 + End + + PreDataSources = line + lp +=1 + End Else + eof = 1 + End + Until eof Do + Repeat + + * Load the data sources into the control arrays. If we run out of data + * sources before the end of the file set eod (end of data) otherwise + * set eof. This is used by the post data source handler to defermine + * whether to load the last line read into the post data array. + eof = 0 + eod = 0 + Loop + ReadSeq line From FConfig.file Then + line=Trim(line) + If line[1,1] = "[" Then + eod = 1 + End + End Else + eof = 1 + End + Until eof or eod Do + If line[1,1] = "<" Then + datasourcecount +=1 + DataSourceArray = Field(line[2,999],">",1) + End + + Begin Case + Case line[1,8] = "DBMSTYPE" + DataSourceDetails = Trim(Field(line,"=",2)) + Case line[1,7] = "network" + DataSourceDetails = Trim(Field(line,"=",2)) + Case line[1,7] = "service" + DataSourceDetails = Trim(Field(line,"=",2)) + Case line[1,4] = "host" + DataSourceDetails = Trim(Field(line,"=",2)) + End Case + Repeat + + * If eod (end of data) load the last line read into the post data array + If eod Then + PostDataSources<1> = line + lp = 2 + End Else + lp = 1 + End + + eof = 0 + Loop + ReadSeq line From FConfig.file Then + PostDataSources = line + lp +=1 + End Else + eof = 1 + End + Until eof Do + Repeat + + CloseSeq FConfig.file + End + OutData = DataSourceArray + Error = ReturnCode + Return + +********************************************************************** +* GetDataSourceEntry - Returns a data source entry +* +* Input: Data Source Name +* Output: Data source details +********************************************************************** +GetDataSourceEntry: + + ReturnCode = 0 + pos =0 + DataSource = Params + OutData = "" + + * Find the specified entry and return the details for it. + Locate DataSource In DataSourceArray Setting pos Then + OutData<1> = DataSourceDetails + OutData<2> = DataSourceDetails + OutData<3> = DataSourceDetails + OutData<4> = DataSourceDetails + End Else + ReturnCode = EADM.NOENTRY + End + + Error = ReturnCode + Return + +********************************************************************** +* GetDeadLockConfig - Returns the dead locking config information +* +* Input: None +* Output: DeadLock config information. +********************************************************************** +GetDeadLockConfig: + + ReturnCode = 0 + line='' + pos =0 + eof = 0 + OutData = "" + + * Open the uvdlockd config file in the UniVerse home account + config.file = UVHOME : OS.SEP : "uvdlockd.config" + OpenSeq config.file To FConfig.file Then + + * Parse out the deadlock configuration details. + loop + ReadSeq line From FConfig.file Else eof = 1 + until eof do + line=Trim(line) + Begin Case + Case line[1,3]='tim' + pos = INDEX(line, "=",1) + If pos THEN + OutData<1> = line[pos+1,99] + End + Case line[1,3]='sta' + pos = INDEX(line, "=",1) + If pos THEN + OutData<2> = line[pos+1,99] + End + Case line[1,3]='res' + pos = INDEX(line, "=",1) + If pos THEN + OutData<3> = line[pos+1,99] + End + Case line[1,3]='log' + pos = INDEX(line, "=",1) + If pos THEN + LogFilePath = line[pos+1,99] + If LogFilePath = "" THEN + LogFilePath = UV.ROOT + End + OutData<4> = LogFilePath + End + End Case + Repeat + + CloseSeq FConfig.file + End + Else + ReturnCode = EADM.NOFILE + End + + Error = ReturnCode + Return + +********************************************************************** +* GetDeadLockState - Returns the state of the dead lock process +* +* Input: None +* Output: 0 for down or 1 for up. +********************************************************************** +GetDeadLockState: + + LogState = 0 + OutData = "" + + * Get Log State + RECIO(LogState, DLINFO$AI.STATE, RECIO$DLINFO) + + OutData = LogState + Error = @SYSTEM.RETURN.CODE + + Return + +********************************************************************** +* GetDevice - Returns a device record. For tapes and +* 'other' devices, this comes from the &DEVICE& +* file. For printers, on a unix system, the +* device definition held in sp.config takes +* precedence over the one held in the &DEVICE& +* file. For non-unix, or if there isn't a +* definition for the requested printer in the +* sp.config file, it is read from the &DEVICE& +* file. +* +* Input: Device name +* Device type key: 0 - tape +* 1 - printer +* 2 - other +* Output: Device record +********************************************************************** +GetDevice: + + DevName = Params<1> + Key = Params<2> + DevRec = "" + +************************** +* OS specific code start * +************************** + + * If this is a unix system, and a printer device definition has + * been requested, look for it in the sp.config file first. Even + * if we get a definition from the sp.config file, we still have + * to get the description from the &DEVICE& record + + If OS.TYPE = "UNIX" And Key = 1 Then + Gosub GetPrinter + If DevRec <> "" Then ; * printer found in sp.config + Readv Descr From DEVICES, DevName, 1 Then + DevRec<1> = Descr + End + End + End + +************************ +* OS specific code end * +************************ + + * If we haven't already read the record (ie. its not a printer or + * we're not on a unix system or we are on a unix system but the + * printer wasn't defined in sp.config), read from the &DEVICE& file + + If DevRec = "" Then + Read DevRec From DEVICES, DevName Else + Error = EADM.NOTDEVICE + End + End + + If Error = 0 Then + OutData = DevRec + End + + Return + +********************************************************************** +* GetDrives - Returns a list of available drives for use +* with Browse (NT only) +* +* Input: NONE +* Output: List of drives +********************************************************************** +GetDrives: + + DECLARE GCI AdmListDrives + + num.drives = AdmListDrives(OutData) + + Return +********************************************************************** +* GetFileDetails - Returns all the file details on a file +* +* Input: Filename +* Output: All file details +********************************************************************** + +GetFileDetails: + Output = "" + Dim CALL.ARGS(10,2) + Dim RES.ARGS(20,2) + + FixFilename = Params<1> + FixFilePath = Params<2> + If FileFixOpen = 0 Then + Gosub StartFileFixServer + End + + If Not(Error) Then + * We are ok, start the call + + * First Open the File + Gosub OpenFileFixFile + If Not(Error) Then + Gosub LoadHeaderFileFixFile + If Not(Error) Then + CALL.ARGS(1,1) = FILEFIX.GETFILEINFO ; * Get File Info + CALL.ARGS(1,2) = UVRPC.INT + + If RPC.CALL(FileFixConId, " ", 1, MAT CALL.ARGS, RES.COUNT, MAT RES.ARGS) Then + OutData = RES.ARGS(2,1) + End Else + Error = STATUS() - 80000 + End + + * Unload the File Header + Gosub UnloadHeaderFileFixFile + End + + * Close The file + Gosub CloseFileFixFile + End Else + * Test for the error for type 1 or type 19 + If Error = FILEFIX.TYPE1FILE Then + OutData = STR(@AM,3):"1" + Error = 0 + End Else + If Error = FILEFIX.TYPE19FILE Then + OutData = STR(@AM,3):"19" + Error = 0 + End + End + End + End + Return + +********************************************************************** +* GetFixErrors - Returns all the file errors after a run +* +* Input: +* Output: All file Errors +********************************************************************** + +GetFixErrors: + Output = "" + ErrorList = "" + Dim CALL.ARGS(10,2) + Dim RES.ARGS(20,2) + + If FileFixOpen = 0 Then + Gosub StartFileFixServer + End + + If Not(Error) Then + * We are ok, start the call + + CALL.ARGS(1,1) = FILEFIX.GETERRORS ; * Get Errors + CALL.ARGS(1,2) = UVRPC.INT + + If RPC.CALL(FileFixConId, " ", 1, MAT CALL.ARGS, RES.COUNT, MAT RES.ARGS) Then + OutData = RES.ARGS(2,1) + ErrorList = RES.ARGS(3,1) + Convert @VM To @SM In ErrorList + Convert @FM To @VM In ErrorList + OutData:= @FM: ErrorList + End Else + Error = STATUS() - 80000 + End + + End + Return +********************************************************************** +* GetFilePath - Returns the OS pathname of a given uniVerse +* file, having validated that it exists and +* can be opened. +* +* Input: Account Name or Pathname +* File Name +* Output: Absolute pathname of file +********************************************************************** +GetFilePath: + + PathOnly = 0 + Count = 0 + AccountName = Params<1,1> + FileName = Params<2> + PathOnly = Params<1,2> + + * Check if the input is an account or path name. + If IsFullPath(AccountName) Then + AccountPath = AccountName + End Else + * If it's not a path name, read the path from UV.ACCOUNT + ReadV AccountPath From UVACCOUNT, AccountName, 11 Else + Error = EADM.CANTREADPATH + GoTo Exit.GetFilePath + End + End + + * Open the VOC file for the specified account + OpenPath AccountPath : OS.SEP : "VOC" To Remote.Voc Else + Error = EADM.BADACCOUNT + GoTo Exit.GetFilePath + End + + * Check the VOC entry for the specified file + * Do we have a dict? + If Index(FileName, "DICT", 1) Then + FileDict = Field(FileName," ",1) + FileData = field(FileName," ",2) + End Else + FileDict = "" + FileData = FileName + End + + * Read from VOC. If item doesn't exist, assume that the name + * given is an OS name relative to the account + Read FileItem From Remote.Voc, FileData Then + If UpCase(FileItem[1,1]) # "F" Then + Error = EADM.BADVOCITEM + GoTo Exit.GetFilePath + End + If Len(FileDict) > 0 Then + FilePath = FileItem<3> + If Len(FilePath) = 0 Then + Error = EADM.BADDICTPATH + GoTo Exit.GetFilePath + End + End Else + FilePath = FileItem<2> + If Len(FilePath) = 0 Then + Error = EADM.BADDATAPATH + GoTo Exit.GetFilePath + End + End + End Else + * No VOC record + FilePath = FileName + End + + * Check that the file itself can be opened + If IsFullPath(FilePath) Then + OutData = FilePath + End Else + OutData = AccountPath : OS.SEP : FilePath + End + OpenPath OutData To Temp.File Then + Close Temp.File + End Else + OpenSeq OutData To Temp.File Then + CloseSeq Temp.File + End Else + * Could not open the file either way + Error = EADM.BADFILE + End + End + + If PathOnly Then + Convert "\" To @FM In OutData + Convert "/" To @FM In OutData + Count = DCount(OutData, @FM) + If Count GT 1 Then + Temp = OutData + Del OutData + End + Convert @FM To OS.SEP In OutData + OutData=OutData: @VM: Temp + End + +Exit.GetFilePath: + Close Remote.Voc + + Return + +********************************************************************** +* GetFilesWithDetails - Returns all the files and there details +* from an account +* +* Input: Account +* Output: List offiles and their details +********************************************************************** +GetFilesWithDetails: + + OutData = "" + AccountName = Params<1> + DataDict = Params<2> + If IsFullPath(AccountName) Then + AccountPath = AccountName + End Else + * Specific account name + ReadV AccountPath From UVACCOUNT, AccountName, 11 Else + Error = EADM.CANTREADPATH + Return + End + End + + * Open the VOC file for the specified account + OpenPath AccountPath : OS.SEP : "VOC" To Remote.Voc Else + Error = EADM.BADACCOUNT + Goto Exit.GetFilesWithDetails + End + Close Remote.Voc + + * We need a temporary file pointer to be able to do SSELECT + TempRec = "F" : @FM : AccountPath : OS.SEP : "VOC" : @FM : "D_VOC" + Write TempRec On VOC, "BROWSEPTR" + ExLine = \SSELECT BROWSEPTR WITH F1 LIKE "'F'..." AND WITH F4 UNLIKE "M..."\ + ExLine := " AND F2 UNLIKE ...":OS.SEP:"... AND WITH @ID NE '&UFD&'" + +************************** +* OS specific code start * +************************** + +* Checking for / on NT as this is still a valid separator in UniVerse files. + + If OS.TYPE # "UNIX" Then + ExLine := " AND F2 UNLIKE .../..." + End + +************************ +* OS specific code end * +************************ + + Open "BROWSEPTR" To F$Remote Then + Gosub TCLCommand + Done = False + Loop + ReadNext Id From SList Else Done = True + While Id Do + Read A$Rec From F$Remote, Id Then + If DataDict Then + FilePath = A$Rec<3> + End Else + FilePath = A$Rec<2> + End + FilePath=AccountPath:OS.SEP:FilePath + OpenPath FilePath To F$RemoteFile Then + If DataDict Then + Convert "\":"/" To @FM:@FM In FilePath + Id = FilePath + End + OutData<-1> = Id: @VM : STATUS() : @VM : INMAT() + Close F$RemoteFile + End Else + End + End Else + End + Repeat + + End + +Exit.GetFilesWithDetails: + + Return + +********************************************************************** +* GetLocalAccountPaths - Returns a list, space-separated, of the +* pathnames of all the local accounts on the +* system, without duplicates. This +* information is used when asked to back up +* all accounts on the system. +* +* Input: None +* Output: List of pathnames, separated by +* spaces +********************************************************************** +GetLocalAccountPaths: + + * This code is taken from UVBACKUP.B + * To exclude remote accounts, we need to do a separate + * step, since UNIQUE hates having selection criteria + Execute \SELECT UV.ACCOUNT WITH UNIQUE.PATH UNLIKE "...'!'..." \ Rtnlist Gpaths Capturing Screen + Execute "SELECT UV.ACCOUNT SAVING UNIQUE UNIQUE.PATH" Passlist Gpaths Capturing Screen + + * convert to dynamic array + ReadList OutData Then + Convert @FM To " " In OutData + End Else + Error = EADM.CANTREADPATHLIST + End + + Return + +********************************************************************** +* GetLoggingState - Returns the current status of transaction +* logging +* +* Input: NONE +* Output: Logging state +* Archive flag +* Archive type +* Checkpoint flag +* Logging directory +* Device list (if archiving to tape) +* Device name +* Device state +********************************************************************** +GetLoggingState: + + DevInfo = "" + + * First get the logging state + + LogState = "" + RECIO(LogState, FINFO$AI.STATE, RECIO$FINFO) + + * Is archiving switched on + + Temp = 0 + RECIO(Temp, FINFO$AI.ARCHIVE, RECIO$FINFO) + If Temp = 0 Then + ArchiveFlag = 0 + End Else + ArchiveFlag = 1 + End + + * Now find out what we are archiving to: disk or tape + + Temp = 0 + DevList = "" + RECIO(Temp, FINFO$AI.ARCHIVE.TAPE, RECIO$FINFO) + If Temp = 0 Then + ArchiveType = 0 ; * archiving to disk + End Else + ArchiveType = 1 ; * archiving to tape + RECIO(DevList, "", RECIO$DEVICELIST) + + * For each logging device, get its state from its &DEVICE& record + + DevList = Raise(DevList) + NumDevs = DCount(DevList, @fm) + For Index = 1 To NumDevs + Readv State From DEVICES, DevList, 18 Then + State = Trim(State) + Begin Case + Case State = "LG_INUSE" + State = "In Use" + Case State = "LG_FULL" + State = "Full" + Case State = "" + State = "" + Case 1 + State = "Unknown" + End Case + End Else + State = "Unknown" + End + DevInfo<-1> = DevList : @vm : State + Next Index + End + + * Checkpoint flag + + Temp = 0 + RECIO(Temp, FINFO$AI.CHECKPOINT, RECIO$FINFO) + If Temp = 0 Then + CheckPointFlag = 0 + End Else + CheckPointFlag = 1 + End + + * Get logging directory + + LogDir = "" + RECIO(LogDir, RECIO$PATH) + LogRaw = "" + RECIO(LogRaw, RECIO$RAWPATH ) + + + OutData = LogState + OutData<-1> = ArchiveFlag + OutData<-1> = ArchiveType + OutData<-1> = CheckPointFlag + OutData<-1> = LogDir + OutData<-1> = Lower(DevInfo) + OutData<-1> = @fm:LogRaw + + Return + +********************************************************************** +* GetMachineType - Temporary fix until this can be got from +* session properties +* +* Input: NONE +* Output: Machine type: 0 = NT, 1 - unix +********************************************************************** +GetMachineType: + + If OS.TYPE = "UNIX" Then + OutData = "1" + end else + OutData = "0" + End + + Return + +********************************************************************** +* GetMaxBlockSize - Returns the maximum tape block size in bytes +* NOTE: this will be ignored by the client if +* this is an NT system +* +* Input: NONE +* Output: Max block size +********************************************************************** +GetMaxBlockSize: + + * Sytem 63 returns the value of BLKMAX from the uvconfig + * parameters. + + OutData = System(63) + + Return +********************************************************************** +* GetMultiLevelFiles - Returns all the multi level files in an account +* +* Input: Account +* Output: List of multi level files +********************************************************************** +GetMultiLevelFiles: + + OutData = "" + AccountName = Params<1> + If IsFullPath(AccountName) Then + AccountPath = AccountName + End Else + * Specific account name + ReadV AccountPath From UVACCOUNT, AccountName, 11 Else + Error = EADM.CANTREADPATH + Return + End + End + + * We need a temporary file pointer to be able to do SSELECT + TempRec = "F" : @FM : AccountPath : OS.SEP : "VOC" : @FM : "D_VOC" + Write TempRec On VOC, "BROWSEPTR" + ExLine = \SSELECT BROWSEPTR WITH F1 LIKE "'F'..." AND WITH F4 LIKE "M..."\ + ExLine := " AND F2 UNLIKE ...":OS.SEP:"..." + +************************** +* OS specific code start * +************************** + +* Checking for / on NT as this is still a valid separator in UniVerse files. + + If OS.TYPE # "UNIX" Then + ExLine := " AND F2 UNLIKE .../..." + End + +************************ +* OS specific code end * +************************ + + Open "BROWSEPTR" To F$Remote Then + Gosub TCLCommand + Done = False + Loop + ReadNext Id From SList Else Done = True + While Id Do + OutData<-1> = Id + Repeat + + Close F$Remote + + End + Return + +********************************************************************** +* GetMultiLevelFilesWithDetails - Returns all the multi level files +* in an account with their details +* +* Input: Account +* Output: List of multi level files and their +* details +********************************************************************** +GetMultiLevelFilesWithDetails: + + OutData = "" + Finish = 0 + Ct = 0 + AccountName = Params<1> + MultiLevelFile = Params<2> + DataDict = Params<3> + + + If IsFullPath(AccountName) Then + AccountPath = AccountName + End Else + * Specific account name + ReadV AccountPath From UVACCOUNT, AccountName, 11 Else + Error = EADM.CANTREADPATH + Return + End + End + + * We need a temporary file pointer to be able to do SSELECT + TempRec = "F" : @FM : AccountPath : OS.SEP : "VOC" : @FM : "D_VOC" + Write TempRec On VOC, "BROWSEPTR" + Open "BROWSEPTR" To F$Remote Then + + Read MLRec From F$Remote, MultiLevelFile Then + Ok = True + If Not(DataDict) Then + Finish = DCount(MLRec<7>, @VM) + For Ct = 1 To Finish + Id = MLRec<7,Ct> + FilePath = MLRec<2> + FilePath=AccountPath:OS.SEP:FilePath:OS.SEP:Id + OpenPath FilePath To F$RemoteFile Then + OutData<-1> = Id: @VM : STATUS() : @VM : INMAT() + Close F$RemoteFile + End Else + End + Next Ct + End Else + FilePath = MLRec<3> + FilePath=AccountPath:OS.SEP:FilePath + OpenPath FilePath To F$RemoteFile Then + Convert "\":"/" To @FM:@FM In FilePath + Id = FilePath + OutData<-1> = Id: @VM : STATUS() : @VM : INMAT() + Close F$RemoteFile + End Else + End + End + End Else + Error = EADM.CANTREAD + End + Close F$Remote + + End + Return + +********************************************************************** +* GetNLSMaps - Returns a list of the installed NLS maps. If +* NLS is not in use, this will be an empty list. +* +* Input: NONE +* Output: Dynamic array of NLS map names +********************************************************************** +GetNLSMaps: + + * First check if *NLS.LISTMAPS is cataloged - if it isn't, then + * NLS is not in use and we can't get the maps. If it is cataloged, + * call it to get the maps. If we can't get the maps, just return + * nothing - the client will handle it + + MapData = "" + Call !EXIST("*NLS.LISTMAPS", Code) + If Code Then + Call *NLS.LISTMAPS(MapData, 'AL', Code) + If Code = 0 Then + Dc = Dcount(MapData, @fm) + For I = 1 To Dc + OutData<-1> = MapData + Next I + End + End + + Return + +********************************************************************** +* GetPrinterGroups - Returns printer group information +* Unix only +* +* Input: NONE +* Output: Array of printer group information: +* printer group name +* user name +* user name +* ..... +* printer name +* printer name +* ..... +********************************************************************** +GetPrinterGroups: + +************************** +* OS specific code start * +************************** + + If OS.TYPE = "UNIX" Then + PGroupFile = SPOOL.DIR:"/print_group" + OpenSeq PGroupFile To PGroupFvar Then + Status FileStats From PGroupFvar Then + PGroupPerms = Oconv(FileStats<5>, "MO")[4,3] + End Else + PGroupPerms = 0 + End + Done = False + Loop + ReadSeq Line From PGroupFvar Else Done = True + Until Done Or Status() + Convert ":":"," To @VM:@SM In Line + OutData<-1> = Line + Repeat + CloseSeq PGroupFvar + End Else + OutData = "" ; * File doesn't exist - no pgroups + End + End + +************************ +* OS specific code end * +************************ + + Return + +********************************************************************** +* GetRPCInfo - Returns RPC port number and list of hosts +* for unix only +* +* Input: NONE +* Output: RPC port number +* List of node name & address +********************************************************************** +GetRPCInfo: + +************************** +* OS specific code start * +************************** + + If OS.TYPE = "UNIX" Then + + * Open /etc and keep it open to retain locks. It will be closed + * when the user exits from network services + + OpenPath "/etc" To ETC.FVAR Else + Error = EADM.CANTOPEN + End + + * First get RPC port number. There has to be one, or the system + * administration tool can't be running as it uses the uvrpc! + + If Error = 0 Then + Readu Services From ETC.FVAR, "services" Locked + Error = EADM.RECLOCKED + End Else + Error = EADM.CANTREAD + End + End + + If Error = 0 Then + Convert Char(10) To @fm In Services + FindStr "uvrpc" In Services Setting LineNo Then + PortLine = Services + PortLineLen = Len(PortLine) + Pos = 1 + Loop + Until PortLine[Pos,1] = " " Or PortLine[Pos,1] = Char(9) Or Pos > PortLineLen + Pos += 1 + Repeat + Loop + While (PortLine[Pos,1] = " " Or PortLine[Pos,1] = Char(9)) And Pos < PortLineLen + Pos += 1 + Repeat + NumLen = Index(PortLine[Pos, PortLineLen - Pos], '/', 1) - 1 + OutData = PortLine[Pos, NumLen] + End Else + * cater for there not being a port number, even though this is + * very unlikely + + OutData<1> = "" + End + + Gosub ReadAndConvertHosts + If Error = 0 Then + * Now go through the converted host data and set up an + * IPAddress/MachineName pair for each Machine name, whether + * it is a synonym or not + + For Index = 1 To Dcount(HostData,@fm) + For Index2 = 1 To Dcount(HostData, @sm) + If HostData # "" Then + OutData<-1> = HostData : @vm : HostData + End + Next Index2 + Next Index + End + End + End + +************************ +* OS specific code end * +************************ + + Return + +********************************************************************** +* GetSpoolConfig - Returns spooler configuration data +* Unix only +* +* Input: NONE +* Output: Spool directory +* Error log path +* Activity log path +* Logging enabled flag +* Chronological order flag +* Timer value +********************************************************************** +GetSpoolConfig: + +************************** +* OS specific code start * +************************** + + If OS.TYPE = "UNIX" Then + DefaultInput = "" + + * Open the UVRC file - this locks it so the parameters cannot be + * changed by anyone else. It is closed, either by the SetSpoolConfig + * command, or the CloseUVRC command. UVRC and UVRC.OPEN are both + * held in common + + OpenSeq UVRCFILE To UVRC Locked + Error = EADM.UVRCLOCKED + UVRC.OPEN = False + Return + End Else + Error = EADM.CANTOPENUVRC + UVRC.OPEN = False + Return + End + UVRC.OPEN = True + + * Get parameter information. USD.SCRIPT is held in common. Use + * this opportunity to check that SPOOL.DIR hasn't changed since + * we initialised + + Call *SP.GET.UVRC.B(DefaultInput, USD.SCRIPT) + If DefaultInput<1> <> SPOOL.DIR Then + SPOOL.DIR = DefaultInput<1> + End + OutData<1> = DefaultInput<1> ; * Spool dir + OutData<2> = DefaultInput<2> ; * Error log + OutData<3> = DefaultInput<3> ; * Activity log + + Temp = Convert(" ",@FM,Trim(USD.SCRIPT<4>)) + Locate "-L" In Temp Setting Loc Then + OutData<4> = "1" ; * Logging enabled + End Else + OutData<4> = "0" ; * Logging disabled + End + Locate "-t" In Temp Setting Loc Then + OutData<5> = "1" ; * Chronlogical order + End Else + OutData<5> = "0" ; * Not chronological + End + Locate "-w" In Temp Setting Loc Then + OutData<6> = Temp ; * Timer value + End Else + OutData<6> = "10" ; * Default timer value + End + End + +************************ +* OS specific code end * +************************ + + Return + +************************************************************************ +* GetTelnetInfo - Returns telnet data for NT only +* +* Input: NONE +* Output: Telnet port number +* User policy (0 - attach to home account +* 1 - attach to home directory +* 2 - attach to any account +* 3 - attach to any directory) +* Max. logon attempts +* Logon pause (seconds) +* Logon timeout (seconds) +* Termination pause (seconds) +************************************************************************ +GetTelnetInfo: + +************************** +* OS specific code start * +************************** + + If OS.TYPE <> "UNIX" Then + + DECLARE GCI UVREGgetint + + * First, get the telnet port number out of the services file + + ExLine = "echo %SystemRoot%" + Gosub ShellCommand + Root = Out<1> + EtcPath = Root : "\SYSTEM32\DRIVERS\ETC" + + * Open etc file and keep it open to retain locks. It will be closed + * when the user exits from network services + + OpenPath EtcPath To ETC.FVAR Else + Error = EADM.CANTOPEN + End + + * First look for the 'uvtelnet' entry. If there isn't one, then + * look for the 'telnet' entry. If there isn't one of those + * either, use the default value + + If Error = 0 Then + Readu Services From ETC.FVAR, "services" Locked + Error = EADM.RECLOCKED + End Else + Error = EADM.CANTREAD + End + End + + Found = False + If Error = 0 Then + Convert Char(10) To @fm In Services + FindStr "uvtelnet" In Services Setting LineNo Then + Found = True + End + If Found = False Then + FindStr "telnet" In Services Setting LineNo Then + Found = True + End + End + If Found Then + PortLine = Services + PortLineLen = Len(PortLine) + Pos = 1 + Loop + Until PortLine[Pos,1] = " " Or PortLine[Pos,1] = Char(9) Or Pos > PortLineLen + Pos += 1 + Repeat + Loop + While (PortLine[Pos,1] = " " Or PortLine[Pos,1] = Char(9)) And Pos < PortLineLen + Pos += 1 + Repeat + NumLen = Index(PortLine[Pos, PortLineLen - Pos], '/', 1) - 1 + PortNo = PortLine[Pos, NumLen] + End Else + * No 'uvtelnet' or 'telnet' entry, use default value + + PortNo = DFLT.TELNETPORT + End + End + + * Now use GCI routine to read the other values from the + * registry - again, if any of them aren't present, use the + * default value + + If Error = 0 Then + Result = UVREGgetint("UserPolicy", UserPolicy) + If Result # 0 Then + If Result = WINERR.NOREGENTRY Then ; * use default + UserPolicy = DFLT.USERPOLICY + End Else + Error = EADM.CANTREAD + End + End + End + + If Error = 0 Then + Result = UVREGgetint("MaxLogonAttempts", MaxLogon) + If Result # 0 Then + If Result = WINERR.NOREGENTRY Then ; * use default + MaxLogon = DFLT.MAXLOGON + End Else + Error = EADM.CANTREAD + End + End + End + + If Error = 0 Then + Result = UVREGgetint("LogonPause", LogonPause) + If Result # 0 Then + If Result = WINERR.NOREGENTRY Then ; * use default + LogonPause = DFLT.LOGONPAUSE + End Else + Error = EADM.CANTREAD + End + End + End + + If Error = 0 Then + Result = UVREGgetint("LogonTimeout", LogonTimeout) + If Result # 0 Then + If Result = WINERR.NOREGENTRY Then ; * use default + LogonTimeout = DFLT.LOGONTIMEOUT + End Else + Error = EADM.CANTREAD + End + End + End + + If Error = 0 Then + Result = UVREGgetint("TerminationPause", TermPause) + If Result # 0 Then + If Result = WINERR.NOREGENTRY Then ; * use default + TermPause = DFLT.TERMPAUSE + End Else + Error = EADM.CANTREAD + End + End + End + + If Error = 0 Then + OutData = PortNo : @fm : UserPolicy : @fm : MaxLogon : @fm + OutData := LogonPause : @fm : LogonTimeout : @fm :TermPause + End + End + +************************ +* OS specific code end * +************************ + + Return + +********************************************************************** +* GetTransferLogs - Finds out which logs are ready for transfer, +* checks that they are sequential and returns +* the lowest and highest log file numbers +* If there are no logs ready for transfer, no +* data is returned. +* +* Input: NONE +* Output: First log +* Last log +* Log path +********************************************************************** +GetTransferLogs: + +* Get list of logs which are ready for transfer + + Execute "SSELECT UV_LOGS WITH STATUS = Full BY @ID TO 0" Capturing Out + ReadList IdArray Then + IdNum = DCount(IdArray, @fm) + FirstLog = IdArray<1> + LastLog = IdArray + For I = 1 To IdNum + If IdArray # (FirstLog - 1 + I) Then + Error = EADM.BADLOGORDER + Return + End + Next I + Path = "" + RECIO(Path, RECIO$PATH) + OutData<1> = FirstLog + OutData<2> = LastLog + OutData<3> = Path + End + + Return + +************************************************************************ +* GetUserInfo: +* +* +* Input: NONE +* Output: An array with the user login account +* information in it. +********************************************************************** +GetUserInfo: + + Error = 0 + Id = "" + OutData = "" + Line = "" + Rec = "" + + * Open the subscription file + Open '', "UV.LOGINS" To UvLoginsFvar Then + + SSelect UvLoginsFvar + Fin = False + Loop + Readnext Id Then + Read Rec From UvLoginsFvar, Id Then + Desc = Rec<5> + + * Build the return line + Line = Id : @vm : Desc + OutData<-1> = Line + End + End Else + Fin = True + End + Until Fin + Repeat + Close UvLoginsFvar + End Else + Error = EADM.CANTOPEN + End + + Return + +********************************************************************** +* GetUserInfoDetails - Returns the login account details for +* a specified user +* +* Input: user name +* Output: An array of details for the user +********************************************************************** +GetUserInfoDetails: + + Ok = 0 + Error = 0 + Domains = "" + Domain = "" + LocalMachines = "" + LocalMachine = "" + DomainAccount = "" + LocalAccount = "" + Rec = "" + UserInfo = "" + UserId = Params<1> + Lp = 1 + + * Open the publications files + If DEBUGGING Then + LogText = "UserId :" : UserId + GoSub WriteDbg + End + Open '', "UV.LOGINS" To UvLoginsFvar Then + + Read Rec From UvLoginsFvar, UserId Then + * fill in the user description, if any + UserInfo<1> = Rec<5> + + * loop pairing up all the domains and their corresponding accounts + Domains = Rec<1> + UserInfo<2> = "" + + Loop + Remove Domain From Domains Setting Ok + If Domain Then + DomainAccount = Rec<3,Lp> + * Build the return data array + UserInfo<2,-1> = Domain : @SM : DomainAccount + Lp +=1 + + End + While Ok Do + Repeat + + * reset the Lp counter as we'll reuse it + Lp = 1 + * loop pairing up all the local machines and their corresponding accounts + LocalMachines = Rec<2> + UserInfo<3> = "" + + Loop + Remove LocalMachine From LocalMachines Setting Ok + If LocalMachine Then + LocalAccount = Rec<4,Lp> + * Build the return data array + UserInfo<3,-1> = LocalMachine : @SM : LocalAccount + Lp +=1 + + End + While Ok Do + Repeat + + + * Load the return data with the output + OutData = UserInfo + + End Else + Error = EADM.CANTREAD + End + Close UvLoginsFvar + End Else + Error = EADM.CANTOPEN + End + + Return + + +************************************************************************ +* GetUVConfig - Returns contents of uvconfig file +* +* Input: NONE +* Output: Parameter info: Param Name +* Param Value +* Param Description +************************************************************************ +GetUVConfig: + + Open "&UFD&" To UFDFvar Then + Read ConfigData From UFDFvar, UVCONFIG Else + Error = EADM.CANTREAD + End + Close UFDFvar + End Else + Error = EADM.CANTOPEN + End + + NumLines = Dcount(ConfigData, @fm) + If NumLines = 0 Then + OutData = "" + Goto ExitGetUVConfig + End + +* Ignore header lines - the first line is all '#' characters +* and so is the last line of the header + + StartLine = 3 + For LineNo = 3 To NumLines + If Trimf(ConfigData) Matches INITIAL$PATTERN Then + StartLine = LineNo + 1 + End + Next LineNo + + If StartLine = 0 Or StartLine = NumLines Then + Goto ExitGetUVConfig + End + +* Now look for all parameters that match the pattern or patterns: + + PossStart = 0 + PossEnd = 0 + For LineNo = StartLine To NumLines + RecLine = ConfigData + IF Trim(RecLine) = '' Then ; * ignore blank lines + Continue + End + If Trimf(RecLine) Matches COMMENT$PATTERN Then + If PossStart = 0 Then + PossStart = LineNo + End + PossEnd = LineNo + Continue + End + + * Here, the line must be a parameter + + ParamName = Trim(RecLine) + ParamValue = Field(ParamName, ' ', 2) + ParamName= Field(ParamName, ' ', 1) + + * Convert all comment text into one big string: + + If PossEnd = 0 Then + PossEnd = PossStart + End + ParamDesc = '' + If PossStart > 0 Then + For N = PossStart To PossEnd + ParamDesc := ' ':Trim(ConfigData[2,9999]) + Next N + ParamDesc = ParamDesc[2,9999] ; * remove leading space + End + + * Save the comment text, the parameter line, etc: + + ParamData = ParamName : @vm : ParamValue : @vm : ParamDesc + OutData<-1> = ParamData + PossStart = 0 + + Next Line + +ExitGetUVConfig: + + Return + +************************************************************************ +* GetUVHome - Returns pathname of uv home account +* +* Input: NONE +* Output: uvhome pathname +************************************************************************ +GetUVHome: + + OutData = UVHOME + Return + +********************************************************************** +* GroupList - Returns a list of groups (unix only) +* +* Input: Show group id flag +* Output: Dynamic array of +* if input flag is true, or +* if it is false +********************************************************************** +GroupList: + +************************** +* OS specific code start * +************************** + + If OS.TYPE = "UNIX" Then + ShowGID = Params<1> + FileName = "/etc/group" + Gosub ReadSeqFile + If Error <> False Then + Error = EADM.NOGROUP + Return + End + + Dc = Dcount(NewText,@fm) + For I =1 to Dc + If NewText[1,1] <> "+" Then + If ShowGID = True Then + OutData<-1> =NewText[":",3,1]:" ":NewText[":",1,1] + End Else + OutData<-1> = NewText[":",1,1] + End + End + Next + End + +************************ +* OS specific code end * +************************ + + Return + +********************************************************************** +* ChangeToFiles - +* +* +* +* +* Input: +* Output: +* +********************************************************************** +ChangeToFiles: + + chgtype = Params<1> + + ExLine = "CHG.RAWOVER ":chgtype + Gosub TCLCommand + If Out # "" Then + Begin Case + Case Out[1,2] = "37" ; * Change to files failed + Error = EADM.CHANGEFAILED + Case Out[1,2] = "38" + Error = EADM.CHANGEFLFAILED ; * Change to Raw failed + Case 1 + * success + End Case + If DEBUGGING Then + LogText = "Error = ":Error + Gosub WriteDbg + End + End + If DEBUGGING Then + LogText = "Error inside ChangeToFiles = ":Error + Gosub WriteDbg + End + + Return +********************************************************************** +* IdentifyLogs - Gets highest and lowest checkpointed logs +* required to recover the selected files. Return +* an error if the select list name is invalid, +* or return null if we can't get the information +* +* Input: File selection: ALL or select list name +* Output: Lowest log number +* Highest log number +********************************************************************** +IdentifyLogs: + + Selection = Trim(Params<1>) + ExLine = "RECOVERY.CHECKPOINT " : Selection : " 1" + Gosub TCLCommand + +* RECOVERY.CHECKPOINT can return the following: +* -1 to indicate select list name was invalid +* -2 to indicate UV.TRANS file open failed +* -3 to indicate unable to read from UV.TRANS +* -4 to indicate unable to open DICT UV_LOGS +* -5 to indicate unable to read from DICT UV_LOGS +* or LowMark : @fm : HighMark +* if both the first log and last log are zero, then no +* checkpoint information is available. + + Temp = Trim(Out<1>) + +retry.rec.chkpt: + + If Count(Temp, @vm) = 1 Then ; * it worked + If Temp<1,1> = 0 And Temp<1,2> = 0 Then + Error = EADM.NOCPINFO + End Else + OutData = Temp<1,1> : @fm : Temp<1,2> + End + End Else + + * It maybe that the log files are full and a warning was on the + * first line + + If Temp = "Error getting first empty log." then + Temp = Trim(Out<2>) + Goto retry.rec.chkpt + End + + * It failed - return an error if the select list was bad, otherwise + * return null + + If Temp = -1 Then + Error = EADM.BADSELECTNAME + End Else + Error = EADM.NOCPINFO + End + End + + Return + +*********************************************************************** +* Initialise - Opens files and sets up debugging if required +* +* Input: NONE +* Output: UVHome path +* OSExec command +*********************************************************************** +Initialise: + + Open 'VOC' To VOC Else + Error = EADM.NOVOC + Return + End + +* Look for VMADMDBG record in VOC. If it's present, switch DEBUGGING on + + Read Rec From VOC, "VMADMDBG" Then + DEBUGGING = True + End Else + DEBUGGING = False + End + If DEBUGGING Then + DebugFile = "./Debug_":@UserNo + OpenSeq DebugFile To DEBUGFL Else + Create DEBUGFL Else + DEBUGGING = False + End + Seek DEBUGFL, -1, 2 Else Null + LogText = Oconv(Date(), "D2/"):" ":Oconv(Time(), "MTS") + GoSub WriteDbg + End + End + + If DEBUGGING Then + LogText = "Initialising" + GoSub WriteDbg + End + +* Before doing anything else, check that user is an administrator + + Temp = "" + call *ISUSER.B(0, Temp) + If Temp = 0 Then + Error = EADM.NOTADMIN + Return + End + + Open 'UV.ACCOUNT' To UVACCOUNT Else + Error = EADM.NOUVACCOUNT + Return + End + UVHOME = System(32) + UVHOMEBIN = UVHOME:OS.SEP:"bin":OS.SEP + + Open '&DEVICE&' To DEVICES Else + Error = EADM.NODEVICE + Return + End + +************************** +* OS specific code start * +************************** + + If OS.TYPE = "UNIX" Then + + * Initialise spooler variables eg. spool directory + + GoSub InitSpooler + End + +************************ +* OS specific code end * +************************ + + UVRC.OPEN = False + + OutData = UVHOME : @fm : OS.EXEC + + Return + +********************************************************************** +* JobDets - Returns modifiable information about a job +* on a printer queue. NOTE: doesn't return +* printer because the client already knows this +* Unix only +* +* Input: Job number +* Output: Copies +* Retain flag +* Form +* Priority +* Start page +* End page +* Start line +* End line +* Delay (hours) +* Delay (minutes) +********************************************************************** +JobDets: + +************************** +* OS specific code start * +************************** + + If OS.TYPE = "UNIX" Then + GoSub SpStatuses + JobNo = Params + GoSub GetSpoolDetails + If Error <> False Then + Return + End + + * Check job still exists + + Locate Params<1> In JobIndex Setting Pos Else + Error = EADM.NOPRINTJOB + Return + End + Line = Raise(JobList) + OutData = Line + OutData<2> = Line + OutData<3> = Line + OutData<4> = Line + OutData<5> = Line + OutData<6> = Line + OutData<7> = Line + OutData<8> = Line + UspDelay = Line + GoSub GetDelayTime + OutData<9> = Hours + OutData<10> = Mins + End + +************************ +* OS specific code end * +************************ + + Return + +********************************************************************** +* ListActiveFiles - Returns status information for files which +* have been activated for transaction logging +* +* Input: NONE +* Output: Dynamic array of Active file info: +* TLnum +* Account +* File +* Status +* Pathname +********************************************************************** +ListActiveFiles: + + Open '', "UV.TRANS" To UvTransFvar Then + SSelect UvTransFvar + Fin = False + Loop + Readnext Id Then + Read Rec From UvTransFvar, Id Then + Account = Rec<1> + File = Rec<2> + If Rec<3> = 0 Then + FileStatus = "" + End Else + FileStatus = "Active" + End + Path = Rec<4> + Line = Id : @vm : Account : @vm : File : @vm : FileStatus + Line := @vm : Path + OutData<-1> = Line + End + End Else Fin = True + Until Fin + Repeat + Close UvTransFvar + End Else + Error = EADM.CANTOPEN + End + + Return + +********************************************************************** +* ListDeadLocks - Returns the Lock information +* +* Input: None +* Output: Current Dead Locks +********************************************************************** +ListDeadLocks: + + + NumLines = 0 + Error = 0 + Index = 0 + Line = "" + OutData = "" + +* Use the -query option to return the current deadlocks + ExLine = UVHOMEBIN:"uvdlockd -query" + Gosub ShellCommand + NumLines = DCount(Out, @fm) + For Index = 1 To NumLines + Line = Out + Line = Trim(Line) + If Line[1,7] = "No dead" Then + OutData = "" + End + Else + If Line[1,4] = "User" Then + Line = Field(Line, " ", 2):@VM:Field(Line," ", 3, 99) + OutData<-1> = Line + End + End + Next Index + + Return + +*********************************************************************** +* ListLocks - Returns file, group and record lock +* information +* +* Input: NONE +* Output: File lock data +* Record lock data +* Group lock data +*********************************************************************** +ListLocks: + + ExLine = "list_readu EVERY INTERNAL" + GoSub UvCommand + FileData = "" + RecData = "" + GroupData = "" + +* The INTERNAL keyword to list_readu causes it to return output +* separated by mark characters (ie. almost in the format that we want it) +* all we have to do is figure out what type of lock each line is +* detailing. Do this by the number of values contained in the line - +* NOTE that the last value is usually null (bad lock) +* Then create the Lmode value by combining the lock semaphore +* number with the type. + + NumLines = Dcount(Out, @fm) + For Index = 1 To NumLines + Line = Out + If Trim(Line) <> "" Then + NumValues = Dcount(Line, @vm) + + * Replace 5th value mark with a space - this gives us the + * correct format for Lmode + + Line = Change(Line, @vm, " ", 1, 5) + Begin Case + Case NumValues = 9 ; * File lock + FileData<-1> = Line + Case NumValues = 10 ; * Record lock + RecData<-1> = Line + Case NumValues = 12 ; * Group lock + GroupData<-1> = Line + End Case + End + Next Index + + OutData = Lower(FileData):@fm:Lower(RecData):@fm:Lower(GroupData) + + Return + +********************************************************************** +* LogControl - Changes the state of transaction logging +* If transaction logging is to be enabled, +* a check will be done to see if synchronisation +* is required. If it is required, an error will +* be returned so that the client can prompt the +* user. If the user wishes to synchronise, then +* this function will be called a second time, with +* an extra parameter. The Synchronise parameter +* will not be present on the first call. +* +* Input: Key: 1 - enable logging +* 2 - suspend logging +* 3 - shutdown logging +* RetainInfoFile (if Key = 1) +* Synchronise (if Key = 1) +* Output: NONE +********************************************************************** +LogControl: + + ControlKey = Params<1> + State = "" + RECIO(State, FINFO$AI.STATE, RECIO$FINFO) + Begin Case + Case ControlKey = 1 ; * Enable logging + + * Don't allow enable if a) it is already enabled, or b) it is in + * the process of being enabled or c) it is being shutdown or + * suspended + + Retain = Params<2> + Synchronise = Params<3> ; * Will be set to 1 if this is the 2nd call + If State # AI$SHUT.PROG and State # AI$SUSP.PROG And State # AI$LOGGING And State # AI$INITIAL And State # AI$WARM.START Then + + * Check if we need to synchronise. Do this even if this is + * the second call and Synchronise is set as the situation + * may have changed inbetween the calls. + * If checkpointing is on and in Full state and at least one + * log file state is NeedsSync and no log Avail, then return + * error so that the client can ask whether to destroy stale + * transactions + + If State = AI$FULL Then + NeedsSync = False + ExLine = "SELECT UV_LOGS WITH STATUS = Available" + Gosub TCLCommand + If @SELECTED > 0 Then Goto EndSyncCheck + ExLine = "SELECT UV_LOGS With STATUS = Full" + Gosub TCLCommand + If @SELECTED > 0 Then Goto EndSyncCheck + Open 'DICT', "UV_LOGS" To UvLogFvar Then + Read Rec From UvLogFvar, "CHECKPOINT" Then + If Rec<2> = "TRUE" Then + ExLine = "SELECT UV_LOGS With STATUS = NeedsSync" + Gosub TCLCommand + If @SELECTED > 0 Then + NeedsSync = True + End + End + End + End + + * If synchronisation is required and this is the first call + * (ie. Synchronise is not set), return an error. If Synchronise + * is set but we no longer need it, clear it. + + If NeedsSync Then + If Synchronise # 1 Then + Error = EADM.NEEDSYNC + Return + End + End Else + Synchronise = "" + End + End + +EndSyncCheck: + + If Retain = 1 Then + ExLine = "ENABLE.RECOVERY YES" + End Else + ExLine = "ENABLE.RECOVERY NO" + End + If Synchronise = 1 Then + ExLine := " SYNC" + End + Gosub TCLCommand + End + Case ControlKey = 2 ; * Suspend logging + If State = AI$LOGGING Then + ExLine = "SUSPEND.RECOVERY" + Gosub TCLCommand + End + Case ControlKey = 3 ; * Shutdown logging + If State = AI$INITIAL Or State = AI$WARM.START Or State = AI$LOGGING Or State = AI$SUSPENDED Or State = AI$FULL Then + ExLine = "SHUTDOWN.RECOVERY" + Gosub TCLCommand + End + End Case + + Return + +********************************************************************** +* LogFileInfo - Returns current log file information +* +* Input: NONE +* Output: Total space +* Available space +* Current log file +* Dynamic array of log info: +* Logfile name +* Start date +* Start time +* Full date +* Full time +* Size +* State +********************************************************************** +LogFileInfo: + +* Get current log number + + FileNo = "" + RECIO(FileNo, FINFO$AI.SEQUENCE, RECIO$FINFO) + CurrLogFile = FileNo + +* Go through the UV_LOGS file getting logfile data and calculating +* space available - don't include released log files in the space +* calculations + + Fin = False + Sum = 0 + Full = 0 + LogFileData = "" + Offset = 0 + Open '', "UV_LOGS" To UvLogFvar Then + ExLine = "SELECT UV_LOGS BY.DSND @ID" + Gosub TCLCommand + Loop + Readnext Id From SList Then + Read Rec From UvLogFvar, Id Then + StartDate = Oconv(Rec, "D2") + StartTime = Oconv(Rec, "MTS") + FullDate = Oconv(Rec, "D2") + FullTime = Oconv(Rec, "MTS") + Size = Rec + LogStatus = Rec + Offset = Rec + If LogStatus # "R" Then + Sum += Size + If LogStatus = "F" Or LogStatus = "N" Then + Full += Size + End + End + Begin Case + Case LogStatus = "R" + LogStatus = "Released" + Case LogStatus = "A" + LogStatus = "Available" + Case LogStatus = "C" + LogStatus = "Current" + Case LogStatus = "N" + LogStatus = "NeedsSync" + Case LogStatus = "F" + LogStatus = "Full" + Case LogStatus = "E" + LogStatus = "Error" + Case 1 + LogStatus = "Unknown" + End Case + Line = Id : @vm : StartDate : @vm : StartTime : @vm : FullDate + Line := @vm : FullTime : @vm : Size : @vm : LogStatus : @vm : Offset + LogFileData<-1> = Line + End + End Else Fin = True + Until Fin + Repeat + Avail = Sum - Full + Close UvLogFvar + End Else + Error = EADM.CANTOPEN + End + + OutData = Sum + OutData<-1> = Avail + OutData<-1> = CurrLogFile + OutData := @fm : LogFileData + + Return + +********************************************************************** +* Logout - Logout a UniVerse user and clean up shared +* memory for that user. This is done using +* "master OFF" for both unix and NT. On unix, +* if this fails, then a kill -15 is attempted. +* On unix, phantoms have to be logged out using +* kill -15 because they don't have a UniVerse +* user number. +* +* Input: UniVerse user number (null if phantom) +* PID +* Output: NONE +********************************************************************** +Logout: + + UserId = Trim(Params<1>) + Pid = Trim(Params<2>) + +************************** +* OS specific code start * +************************** + + If OS.TYPE = "UNIX" Then + + * Can't user MASTER OFF if we're logging out a phantom process as + * we don't have its UniVerse user number + + If UserId = "" Then + Goto Kill15 + End + End + +************************ +* OS specific code end * +************************ + + ExLine = "master OFF " : UserId + Gosub UvCommand + Gosub CheckUserGone + If Found = False Then + Out = '' + Return ; * termination successful + End + +Kill15: + +************************** +* OS specific code start * +************************** + + If OS.TYPE = "UNIX" Then + + * On unix, users can also be logged out using "kill -15". To get here, + * either we are logging out a phantom, or the MASTER OFF command + * failed to log the user out + + If Pid = '' Then + Out = '' + Return + End + ExLine = "kill -15 ":Pid + GoSub ShellCommand + Gosub CheckUserGone + If Found = False Then + Out = '' + Return + End + GoSub CleanUser ; * Belt and braces + End + +************************ +* OS specific code end * +************************ + + Return + +********************************************************************** +* MagrstCommand - Set up command line for magrst +* +* Input: Restore directory +* Device name +* Block size +* Use Type19 flag +* Output: Command line +********************************************************************** +MagrstCommand: + + RstPath = Params<1> + DevName = Params<2> + BlockSize = Params<3> + Type19 = Params<4> + +* Check that restore directory can be written to + +************************** +* OS specific code start * +************************** + + If OS.TYPE = "UNIX" Then + If access(RstPath, W$OK + R$OK) Then + Error = EADM.NOACCESS + Goto ExitMagrstCommand + End + End + +************************ +* OS specific code end * +************************ + +* Get device pathname from &DEVICE& file + + Read DevRec From DEVICES, DevName Else + Error = EADM.CANTREAD + Goto ExitMagrstCommand + End + DevPath = DevRec<2> + DevType = DevRec<4> + +************************** +* OS specific code start * +************************** + + If OS.TYPE = "UNIX" Then + ExLine = "ls -l " : DevPath + Gosub ShellCommand + If Out[1, 3] # "crw" Then + Error = EADM.BADDEVICE + Goto ExitMagrstCommand + End + End + +************************ +* OS specific code end * +************************ + +* Validation finished, set up the command line + + Command = OS.CD : RstPath : OS.CMDSEP + Command := " " : UVHOMEBIN : "tapein -ice" + Command := " -p" : UVHOMEBIN : "magrst" + Command := " -f" : DevPath + Command := " -b" : BlockSize + If Type19 Then + Command := " -t" + End + If DevType = "C" Or DevType = "DC" Then + Command := " -c" + End + +************************** +* OS specific code start * +************************** + + If OS.TYPE = "UNIX" Then + Command := " -a" + End + +************************ +* OS specific code end * +************************ + +ExitMagrstCommand: + + If Error = 0 Then + OutData = OS.EXEC : " " : Quote(Command) + End + + Return + +********************************************************************** +* MakeAccount - Adds the account to the UV.ACCOUNT file and +* creates a new account if one doesn't already +* exist in the directory. +* +* Input: Account Name +* Parent directory +* Flavor +* Use default LOGIN paragraph flag +* Owner (unix only) +* Group (unix only) +* Use default permissions flag (unix only) +* Permissions (null if using default) (unix only) +* Output: Status value: 0 - Account created +* 1 - Account already exists +* in the directory +* 2 - Directory already exists +********************************************************************** +MakeAccount: + + Name = Params<1> + PathName = Params<2> + Flavor = Params<3> + UseDfltLogin = Params<4> + PathOwner = "" + PathGroup = "" + +************************** +* OS specific code start * +************************** + + If OS.TYPE = "UNIX" Then + Owner = Params<5> + Group = Params<6> + UseDfltPerms = Params<7> + Perms = Params<8> + + * Set up umask: if using default permissions, set them up, + * otherwise use what was passed in (after converting it into a number) + + If UseDfltPerms Then + PermissionNum = DEFPERMS + End Else + If Num(Perms) = 1 Then + PermissionNum = Perms + End Else + GoSub ConvertPermissions + End + End + Umask = 777 - PermissionNum + End + +************************ +* OS specific code end * +************************ + + GoSub CheckPathName ; * Checks validity of pathname + If PathOk = False Then + Error = EADM.BADPATH + Return + End + +* Check if pathname already exists & if so, whether there is already an +* account there + + PathExists = False + VocExists = False + ReturnStatus = 0 ; * Assume creating the account + + OpenPath PathName To PathVar Then + Status PathStatus From PathVar Then + PathOwner = PathStatus<8> ; * used by unix code only + PathGroup = PathStatus<9> ; * used by unix code only + End + Close PathVar + PathExists = True + ReturnStatus = 2 ; * Directory exists + OpenPath PathName:OS.SEP:"VOC" Then + Close + VocExists = True + ReturnStatus = 1 ; * Account exists + End + End + + If PathExists = False Then ; * create path + ExLine = "mkdir ":PathName + GoSub ShellCommand + ExLine = OS.CD:PathName + GoSub ShellCommand + If Trim(Out) <> "" Then + Error = EADM.NOCREATEDIR + Return + End + End + + If VocExists = False Then ; * create account + ExLine = OS.CD:PathName:OS.CMDSEP + +************************** +* OS specific code start * +************************** + + If OS.TYPE = "UNIX" Then + ExLine := "umask ":Umask:OS.CMDSEP + End + +************************ +* OS specific code end * +************************ + + ExLine := UVHOMEBIN:"mkaccount ":Flavor + GoSub ShellCommand + OpenPath PathName:OS.SEP:"VOC" To VocFvar Then + If UseDfltLogin Then + OpenPath UVHOME:OS.SEP:"sample" To Temp Then + Read LoginPara From Temp, "LOGIN" Then + +************************** +* OS specific code start * +************************** + + If OS.TYPE = "UNIX" Then + LoginPara<-1> = "UMASK ":Umask + End + +************************ +* OS specific code end * +************************ + + If Flavor = "PICK" Then + Write LoginPara To VocFvar, Name + End + Else + Write LoginPara To VocFvar, "LOGIN" + End + End + Close Temp + End + End + Close VocFvar + End + Else + Error = EADM.NOMAKEACCOUNT + Return + End + End + +************************** +* OS specific code start * +************************** + + If OS.TYPE = "UNIX" Then + + * If we have created the whole directory, set th permissions & + * ownership of everything in that directory. If we just created + * the account in an existing directory, make the account files + * have the same owner & group as the directory + + If PathExists = False Then + Params = PathName:@fm:Owner:@fm:Group + Gosub Chown + ExLine = 'find ':PathName:' -exec chmod ':PermissionNum:' {} \;' + GoSub ShellCommand + End + Else + If PathOwner <> "" And PathGroup <> "" Then + Params = PathName:@fm:PathOwner:@fm:PathGroup + Gosub Chown + End + End + End + +************************ +* OS specific code end * +************************ + + WriteV PathName On UVACCOUNT,Name,11 ; * Write to UV.ACCOUNT file + + OutData = ReturnStatus + + Return + +********************************************************************** +* Message - Send a message to a user or users. The user(s) +* can be specified in several ways: +* User name - sends to that user (Unix & NT) +* Tty - sends to user on that port (Unix only) +* User no - sends to that user number (NT only) +* Domain - sends to all users on that domain +* (NT only) +* * - sends to all users (Unix & NT) +* null - sends to system console (Unix only) +* On unix, the message goes to all logged in users +* who match the specified selection. On NT, the +* message goes to all UniVerse users who match the +* specification. +* +* Input: User specification +* Message +* Output: NONE +********************************************************************** +Message: + + User = Params<1> + Msg = Params<2> + If Msg <> "" Then + ExLine = "MESSAGE " : User : " -MSG '" : Msg : "'" + Gosub TCLCommand + End + Return + +********************************************************************** +* MessUsers - Returns list of user names of interactive +* UniVerse users (ie. those who can be sent a +* message +* +* Input: NONE +* Output: List of user names +********************************************************************** +MessUsers: + +* Use the INTERNAL keyword to PORT.STATUS which produces us +* value mark separated data + + ExLine = "PORT.STATUS INTERNAL" + Gosub TCLCommand + +* PORT.STATUS can only be used by one person at a time + + if index(Out,"PORT.STATUS is currently being run",1) Then + Error = EADM.INUSE + End + +* First line of data returned contains counts of users + + NumInteractive = Trim(Out<1,2>) + If NumInteractive > 0 Then + For Index = 2 To NumInteractive + 1 ; * skip summary line + + * Only add this user to the list if they're not already there + + User = Trim(Out) + FindStr User In OutData Setting Fmc Else + OutData<-1> = User + End + Next Index + End + + Return + +********************************************************************** +* ModSpoolJob - Changes job details using usm. Fields in input +* parameter will only contain data if that job +* characteristic has been changed +* Unix only +* +* Input: Job ID +* Copies +* Retain flag +* Printer +* Form +* Priority +* Page range +* Line range +* Defer - +hours:minutes (relative) +* +minutes (relative) +* hours:minutes (absolute) +* minutes (absolute) +* Output: NONE +********************************************************************** +ModSpoolJob: + +************************** +* OS specific code start * +************************** + + If OS.TYPE = "UNIX" Then + JobNo = Params<1> + Copies = Params<2> + Retain = Params<3> + Printer = Params<4> + Form = Params<5> + Priority = Params<6> + PageRange = Params<7> + LineRange = Params<8> + DeferTime = Params<9> + + GoSub CheckSpooler + If Error # 0 Then + Return + End + + If Copies <> "" Then + ExLine = USM.PATH:" -n ":Copies:" ":JobNo + GoSub ShellCommand + End + If Retain <> "" Then ; * cannot cancel retain + ExLine = USM.PATH : " -q ":JobNo + GoSub ShellCommand + End + If Printer <> "" Then + ExLine = USM.PATH:" -p ":Printer:" ":JobNo + GoSub ShellCommand + End + If Form <> "" Then + ExLine = USM.PATH + If Upcase(Form) = "[NULL]" Then + Form = '""' + End + ExLine := " -F ":Form:" ":JobNo + GoSub ShellCommand + End + If Priority <> "" Then + ExLine = USM.PATH:" -P ":Priority:" ":JobNo + GoSub ShellCommand + End + If PageRange <> "" Then + ExLine = USM.PATH:" -x ":PageRange:" ":JobNo + GoSub ShellCommand + End + If LineRange <> "" Then + ExLine = USM.PATH:" -y ":LineRange:" ":JobNo + GoSub ShellCommand + End + If DeferTime <> "" Then + ExLine = USM.PATH:" -t ":DeferTime:" ":JobNo + GoSub ShellCommand + End + End + +************************ +* OS specific code end * +************************ + + Return + +********************************************************************** +* NetReleaseLocks - Releases locks held on network services files +* +* Input: NONE +* Output: NONE +********************************************************************** +NetReleaseLocks: + + Close ETC.FVAR + + Return + +********************************************************************** +* OSBrowse - Returns a list of the directories and files +* contained in a specified directory. +* +* The directory to list is determined by +* combining the two input arguments, start +* directory and directory modifier. +* +* Example 1: +* +* Start directory = "/u1/uv" +* Modifier = ".." +* +* Directory listed will be "/u1" +* +* Example 2: +* +* Start directory = "/u1/uv" +* Modifier = "catdir" +* +* Directory listed will be "/u1/uv/catdir" +* +* If the start directory is not specified, then +* the UVHOME directory is used as a default +* +* If the start directory turns out to be a file, +* or if it doesn't exist, then the last component +* of the pathname is removed, and the parent +* directory is listed. If that doesn't exist, +* an error is returned. +* +* Input: Start directory +* Directory modifier +* Output: Modified directory +* List of directories (prefixed by "D") and +* files (prefixed by "F") +********************************************************************** +OSBrowse: + + BrowsePath = Trim(Params<1>) + Modifier = Trim(Params<2>) + BrowsePath = Change(BrowsePath, OS.SEP:OS.SEP, OS.SEP) + If BrowsePath <> "" then + Begin Case + Case Modifier = ".." ; * going up a level + BrowsePath = BrowsePath[OS.SEP, 1, Count(BrowsePath, OS.SEP)] + +************************** +* OS specific code start * +************************** + + If OS.TYPE = "UNIX" Then + + * If we've gone back so far that there's nothing left, set + * path to root + + If BrowsePath = "" Then + BrowsePath = OS.SEP + End + End Else + + * If we've gone so far back we've stripped the separator from + * the drive, put it back + + If Len(BrowsePath) = 2 And BrowsePath[2, 1] = ":" Then + BrowsePath := OS.SEP + End + End + +************************ +* OS specific code end * +************************ + + Case Modifier = "" ; * no modifier, do nothing + + Case 1 + * Going down a level. If we're at the top (eg. "/" or "d:\") + * then we don't need to put the separator in + + If BrowsePath[Len(BrowsePath), 1] <> OS.SEP Then + BrowsePath := OS.SEP:Params<2> + End Else + BrowsePath := Params<2> + End + End Case + End Else + BrowsePath = UVHOME + End + +************************** +* OS specific code start * +************************** + + If OS.TYPE = "UNIX" Then + + * Request a single column listing with directories suffixed with "/". + * If the pathname does not specify a directory, the result + * will start with the input pathname exactly + + ExLine = 'ls -p "':BrowsePath:'"' + GoSub ShellCommand + If Out[1, Len(BrowsePath)] = BrowsePath Then + + * Modify the path and try again + + BrowsePath = BrowsePath[OS.SEP, 1, Count(BrowsePath, OS.SEP)] + + * If we've gone back so far that there's nothing left, set + * path to root + If BrowsePath = "" Then + BrowsePath = OS.SEP + End + ExLine = 'ls -p "':BrowsePath:'"' + GoSub ShellCommand + If Out[1, Len(BrowsePath)] = BrowsePath Then + * Failed again - return an error + Error = EADM.NODIRECTORY + Return + End + End + + End Else ; * NT + + * First try to get the list of directories. This will return + * an error message: + * - "File Not Found" if the parent directory exists but + * the file either doesn't exist or is not a directory + * - "The system cannot find the file specified." or + * "The system cannot find the path specified." if the + * parent directory doesn't exist. + * - "The filename, directory name, or volume label syntax is incorrect" if + * any part of the pathname is incorrect. + * These tests only work if the language is English. For the + * future, we should devise a language-indpendent way of doing + * the browse function. + + ExLine = 'dir /B/AD "':BrowsePath:'"' + GoSub ShellCommand + + CheckString = "The filename, directory name, or volume label syntax is incorrect" + If Out[1, Len(CheckString)] = CheckString Then + * Invalid pathname, so give up + Error = EADM.NODIRECTORY + Return + End + + CheckString = "The system cannot find the " + If Out[1, Len(CheckString)] = CheckString Then + * The parent directory doesn't exist, so give up + Error = EADM.NODIRECTORY + Return + End + + CheckString = "File Not Found" + If Out[1, Len(CheckString)] = CheckString Then + + * Modify the path and try again + BrowsePath = BrowsePath[OS.SEP, 1, Count(BrowsePath, OS.SEP)] + + * If we've gone so far back we've stripped the separator from + * the drive, put it back + If Len(BrowsePath) = 2 And BrowsePath[2, 1] = ":" Then + BrowsePath := OS.SEP + End + ExLine = 'dir /B/AD "':BrowsePath:'"' + GoSub ShellCommand + If Out[1, Len(CheckString)] = CheckString Then + + If Len(BrowsePath) = 3 And BrowsePath[2, 2] = ":":OS.SEP Then + * No files in root directory - return an empty directory listing + OutData = BrowsePath:@fm:"D.." + Return + End Else + * Failed again - return an error + Error = EADM.NODIRECTORY + Return + End + + End + End + End + +************************ +* OS specific code end * +************************ + +* Because we don't get the parent directory returned by "ls" or +* "dir", put it in by hand + + OutData = BrowsePath:@fm:"D.." + +************************** +* OS specific code start * +************************** + + If OS.TYPE = "UNIX" Then + + * Use a single column listing with directories suffixed with "/". + * The listing we need is already in the variable "Out" + + Dc = Dcount(Out,@fm) + + For I = 1 To Dc + If Out <> "" then + File = Trim(Out) + If File[Len(File), 1] = "/" Then + OutData<-1> = "D":File[1, Len(File) - 1] + End Else + OutData<-1> = "F":File + End + End + Next + + End Else ; * NT + + * First use the list of directories. This is already in the + * variable "Out". + + Dc = Dcount(Out,@fm) + For I = 1 To Dc + If Out <> "" Then + OutData<-1> = "D":Trim(Out) + End + Next + + * Now get the list of files, excluding hidden files + + ExLine = 'dir /B/A-D-H "':BrowsePath:'"' + GoSub ShellCommand + CheckString = "File Not Found" + If Out[1, Len(CheckString)] # CheckString Then + Dc = Dcount(Out, @fm) + For I = 1 To Dc + If Out <> "" Then + OutData<-1> = "F":Trim(Out) + End + Next + End + End + +************************ +* OS specific code end * +************************ + + Return + +********************************************************************** +* ParseRestoreLabel - Parse uvrestore output, obtained from +* CheckRestoreSource function, to extract +* data about the backup tape +* +* Input: uvrestore output from earlier call +* to CheckRestoreSource +* Output: Dynamic array of backup info, as +* follows: +* 1 Backup Date +* 2 Reel number +* 3 Compression flag +* 4 Image Type +* 5 Block Size +* 6 Image Label +* 7 NLS enabled flag +* 8 NLS OS map name +********************************************************************** +ParseRestoreLabel: + + OutField = 1 ; * Backup Date + Msg = 85400 + GoSub ExtractRestoreLabelField + + OutField = 2 ; * Reel Number + Msg = 85401 + GoSub ExtractRestoreLabelField + + OutField = 3 ; * Compression flag + Msg = 85402 + GoSub ExtractRestoreLabelField + + OutField = 4 ; * Image Type + Msg = 85403 + GoSub ExtractRestoreLabelField + + OutField = 5 ; * Block Size + Msg = 85459 + GoSub ExtractRestoreLabelField + + OutField = 6 ; * Image Label + Msg = 85404 + GoSub ExtractRestoreLabelField +* The label may extend over 2 lines + If Params[1, 1] = " " Then + OutData<6> = OutData<6> : TrimB(TrimF(Params)) + End + + OutField = 7 ; * NLS enabled flag + Msg = 85503 + GoSub ExtractRestoreLabelField + + OutField = 8 ; * NLS OS map + Msg = 85504 + GoSub ExtractRestoreLabelField + + Return + + +********************************************************************** +* PurgeDeadLock - Purges the Lock Log specified +* +* Input: Log Path +* Output: Log data +********************************************************************** +PurgeDeadLockLog: + + ReturnCode = 0 + +* Pathname from client + LogFile = Trim(Params):OS.SEP:"uvdlockd.log" + OpenSeq LogFile To Flog Locked + ReturnCode = EADM.RECLOCKED + End + Then + * Use writeeof to put an end of file at the begining of the file + * to truncate the rest of the data. + WeofSeq Flog + + CloseSeq Flog + End + Else + + ReturnCode = EADM.NOFILE + End + + Error = ReturnCode + + Return + +********************************************************************** +* PurgeLogFiles - Purges released log files whose +* "full" date is earlier than the date given +* +* Input: Date string (MM/DD/YY) +* Output: Number of files purged +********************************************************************** +PurgeLogFiles: + + InDate = Params<1> + If Not(InDate Matches '2n/2n/0n') Then + Error = EADM.INVALIDDATE + Return + End + + CurrDate = Iconv(InDate, "D") + SelDate = Oconv(CurrDate, "D2/") + ExLine = "SSELECT UV_LOGS WITH STATUS = Released AND FULL.DATE < " : SelDate + Gosub TCLCommand + Fin = False + Counter = 0 + +* Need to make a list of the lognumbers to purge, then go through +* and delete them, rather than delete each one as we find it. This +* stops SList being overwritten by the execution of the delete + + PurgeList = "" + Loop + ReadNext Id From SList Then + PurgeList<-1> = Id + Counter += 1 + End Else + Fin = True + End + Until Fin + Repeat + For Index = 1 To Counter + ExLine = "DELETE UV_LOGS " : PurgeList + Gosub TCLCommand + Next Index + + OutData = Counter + + Return + +********************************************************************* +* PutDevice - Writes a device record to &DEVICE&. For +* unix systems, if the device is a printer +* definition, also updates the sp.config file +* +* Input: Device name +* Device data +* Output: NONE +********************************************************************* +PutDevice: + + DevName = Params<1> + DevRec = Params[@fm, 2, 9999] + +************************** +* OS specific code start * +************************** + + If OS.TYPE = "UNIX" Then + DevType = DevRec<4> + If DevType[1,1] = "P" Then + Gosub PutPrinter + End + End + +************************ +* OS specific code end * +************************ + + If Error = 0 Then + Write DevRec On DEVICES, DevName Else + Error = EADM.CANTWRITE + End + End + + Return + +******************************************************************** +* ReleaseLock - Releases a lock +* +* Input: Type of lock: 1 - group lock +* 2 - record lock +* 3 - file lock +* Device +* Inode +* Netnode +* User +* Type +* RecId or Group Address or null +* Output: NONE +******************************************************************** +ReleaseLock: + + LockType = Params<1> + Device = Params<2> + Inode = Params<3> + Netnode = Params<4> + User = Params<5> + Type = Params<6> + If LockType = GROUPLOCK Then + GroupAddr = Params<7> + End Else + * File or record lock, to determine which, see if we have a + * record id. If there is no record id, it must be a file lock + + RecId = Params<7> + If RecId = "" Then + LockType = FILELOCK + End + End + +* Set up the UNLOCK command - all three types of unlock start the +* same: + + ExLine = "UNLOCK DEVICE ":Device:" INODE ":Inode:" NODE ":Netnode + Begin Case + Case LockType = GROUPLOCK ; * convert group address from hex + + ExLine := " GROUP ":OConv(GroupAddr,"MCX"):" GROUPLOCK" + + Case LockType = RECORDLOCK ; * specify id and type of read lock + + ExLine := " RECORD ":RecId + If index(Type,"RU",1) Then + ExLine := " READULOCK" + End Else + ExLine := " READLLOCK" + End + + Case LockType = FILELOCK ; * add "FILELOCK" keyword + + ExLine := " FILELOCK" + + End Case + + Gosub TCLCommand + + Return + +********************************************************************** +* ReleaseLogFiles - Releases one or more full log files or a +* single tape log +* +* Input: Key: 1 - Disk log file +* 2 - Tape log +* First log file number/Device +* Last log file number (optional) +* Output: NONE +********************************************************************** +ReleaseLogFiles: + + Key = Params<1> + If Key = 1 Then + FirstLog = Params<2> + If Trim(Params<3>) = "" Then + LastLog = FirstLog + End Else + LastLog = Params<3> + End + For Index = FirstLog To LastLog + ExLine = "RELEASE.LFILE " : Index + Gosub TCLCommand + If Out <> "" Then + Error = EADM.NORELEASE + OutData = Trim(Out) + End + Next Index + End Else + DevName = Params<2> + Readu Rec From DEVICES, DevName Then + If Rec<18> = "LG_FULL" Then + Rec<18> = "" + Write Rec To DEVICES, DevName Else + Error = EADM.CANTWRITE + End + End + End Else + Error = EADM.CANTREAD + End + End + + Return + +******************************************************************** +* ReleaseUserLocks - Release all locks owned by a specified +* user +* +* Input: User No +* Output: NONE +******************************************************************** +ReleaseUserLocks: + + ExLine = "UNLOCK USER " :Params<1>:" ALL" + Gosub TCLCommand + + Return + +******************************************************************** +* RemoveBackupTarget - Remove a disk file before starting a backup +* to that pathname +* +* Input: File pathname +* Output: Any error message generated +******************************************************************** +RemoveBackupTarget: + + ExLine = OS.EXEC : " '" : RM.CMD : " " : Params<1> : "'" + Gosub TCLCommand + OutData = Out + + Return + +********************************************************************** +* RepAccountList - Returns list of accounts on the server +* +* Input: NONE +* Output: Field mark separated list of accounts +* Account Name +* Pub State +* Sub State +********************************************************************** +RepAccountList: + + PubState = 0 + SubState = 0 + + SSelect UVACCOUNT + Done = False + Loop + ReadNext Id Else Done = True + Until Done Do + * we remove the duplicate UniVerse account entry in UVACCOUNTS + If Id <> "uv" Then + OutData<-1> = Id : @VM : PubState : @VM : SubState + PubState = 0 + SubState = 0 + End + Repeat + + NumAccounts = Dcount(OutData,@FM) + For i = 1 To NumAccounts + * check for pub state + EXECUTE "SELECT UV_UDRPUB WITH ACCOUNT EQ " : OutData : " SAVING UNIQUE ACCOUNT" + ReadNext Id Then OutData = 1 Else OutData = 0 + * check for sub state + EXECUTE "SELECT UV_UDRSUB WITH ACCOUNT EQ " : OutData : " SAVING UNIQUE ACCOUNT" + ReadNext Id Then OutData = 1 Else OutData = 0 + Next + + Return + +********************************************************************** +* RepAddRepSystem - Adds a new subscriber systems definition +* +* Input: Details Details +* Output: Rep System Key +********************************************************************** +RepAddSystem: + + SysKey = "" + Error = 0 + SystemArray = "" + Key = "" + SystemName = "" + ConId = "" + MachineName = "" + Dim CALL.ARGS(10,2) + Dim RES.ARGS(20,2) + + SystemName = Trim(Params<1>) + + Open "","UV_UDRSYS" To UvSysFvar Then + EXECUTE "SELECT UV_UDRSYS WITH STATE_TYPE EQ '' AND WITH @ID NE 'HOTBACKUP'" + Loop + Readnext Key Else NULL + While Key Do + Read SystemArray From UvSysFvar, Key Then + If Trim(Upcase(SystemArray<1>)) = Upcase(SystemName) Then + Error = EADM.ALREADYEXISTS + Exit + End + End + Repeat + + * See if we can open the system and see if the udr service is on it. + If Not(Error) Then + ConId = RPC.CONNECT(SystemName, UDR.SERVICE) + If ConId Then + + * Make call to add the system as hotbackup to the remote + If Params<5> Then + + * Get the Hostname + ExLine = HOSTNAME + Gosub ShellCommand + MachineName = Trim(Out<1>) + + CALL.ARGS(1,1) = UDR.SRV.ADDHOTBACKUPSYS ; * Add hot backup sys + CALL.ARGS(1,2) = UVRPC.INT + CALL.ARGS(2,1) = MachineName + CALL.ARGS(2,2) = UVRPC.STRING + + * make execute call + If RPC.CALL(ConId, " ", 2, MAT CALL.ARGS, RES.COUNT, MAT RES.ARGS) Then + * Remapp error codes to match admin codes. + If Error Then + Begin Case + Case Error = UDR.FILEOPENFAILED + Error = EADM.CANTOPEN + Case Error = UDR.RECEXISTS + Error = EADM.UDRHOTRECEXISTS + Case Error = UDR.WRITEFAILED + Error = EADM.CANTWRITE + Case Error = UDR.READFAILED + Error = EADM.CANTREAD + Case 1 + Error = EADM.UDRERROR + End Case + End + End Else + Error = STATUS() - 80000 + End + + End + + If Not(Error) Then + Gosub RepGetNextRepSystemKey + Write Params on UvSysFvar, SysKey Else + Error = EADM.CANTWRITE + End + End + ConId = RPC.DISCONNECT(ConId) + End Else + Error = Status() - 80000 + End + End + Close UvSysFvar + End Else + Error = EADM.CANTOPEN + End + OutData = SysKey + Return + +********************************************************************** +* RepClearRepLog - Clears the Rep Log specified +* +* Input: Control, Rep log Path +* Output: +********************************************************************** +RepClearRepLog: + + ReturnCode = 0 + Control = Params<1> + InfoFilePath = "" + InfoFileDir = Trim(Params<2>) + InfoFile = Trim(Params<3>) + +* Pathname from client + If Control = 1 Then + InfoFilePath = InfoFileDir:OS.SEP:"uvdrlogd.info" + End Else If Control = 2 Then + InfoFilePath = InfoFileDir:OS.SEP:"uvdrrepd.info" + End Else If Control = 3 Then + InfoFilePath = InfoFileDir:OS.SEP:InfoFile + End Else + ReturnCode = EADM.NOFILE + End + + OpenSeq InfoFilePath To Flog Locked + ReturnCode = EADM.RECLOCKED + End + Then + * Use writeeof to put an end of file at the begining of the file + * to truncate the rest of the data. + WeofSeq Flog + + CloseSeq Flog + End Else + ReturnCode = EADM.NOFILE + End + + Error = ReturnCode + + Return + +********************************************************************** +* RepControl - Controls the replication system +* +* Input: Action required +* Output: Return Code +********************************************************************** +RepControl: + + Error = 0 + OutData = "" + +* Get the control flag from the client + Action = Params<1> + + ExLine = "" + + Begin Case + Case Action = 1 + if OS.TYPE = "MSWIN" then + ExLine = UVHOMEBIN:"uvdrlogd.exe" + ExLine = UVHOMEBIN:"uvbootd ":ExLine + + end else + ExLine = UVHOMEBIN:"uvdrlogd &&" + end + Case Action = 2 + if OS.TYPE = "MSWIN" then + ExLine = UVHOMEBIN:"uvdrlogd.exe -shutdown" + ExLine = UVHOMEBIN:"uvbootd ":ExLine + + end else + ExLine = UVHOMEBIN:"uvdrlogd -shutdown" + end + Case Action = 3 + if OS.TYPE = "MSWIN" then + ExLine = UVHOMEBIN:"uvdrrepd.exe" + ExLine = UVHOMEBIN:"uvbootd ":ExLine + + end else + ExLine = UVHOMEBIN:"uvdrrepd &&" + end + Case Action = 4 + if OS.TYPE = "MSWIN" then + ExLine = UVHOMEBIN:"uvdrrepd.exe -shutdown" + ExLine = UVHOMEBIN:"uvbootd ":ExLine + + end else + ExLine = UVHOMEBIN:"uvdrrepd -shutdown" + end + Case 1 + Error = EADM.BADCALL + End Case + + If Not(Error) Then + Gosub ShellCommand + End + Return + +*********************************************************************** +* RepDeleteRepSystem - Delete a replication system +* +* Input: System ID +* Output: NONE +*********************************************************************** +RepDeleteSystem: + + Error = 0 + Rec = "" + Key = Params<1> + MachineName = "" + Dim CALL.ARGS(10,2) + Dim RES.ARGS(20,2) + + Open "","UV_UDRSYS" To Udrsys.Fvar Then + Read Rec From Udrsys.Fvar, Key Then + If Not(Trim(Rec<4>)) Then + If Trim(Rec<5>) Then + SystemName = Trim(Rec<1>) + * Get the Hostname + ExLine = HOSTNAME + Gosub ShellCommand + MachineName = Trim(Out<1>) + + ConId = RPC.CONNECT(SystemName, UDR.SERVICE) + If ConId Then + CALL.ARGS(1,1) = UDR.SRV.REMHOTBACKUPSYS ; * Remove hot backup sys + CALL.ARGS(1,2) = UVRPC.INT + CALL.ARGS(2,1) = MachineName + CALL.ARGS(2,2) = UVRPC.STRING + + * make execute call + If RPC.CALL(ConId, " ", 2, MAT CALL.ARGS, RES.COUNT, MAT RES.ARGS) Then + Error = RES.ARGS(2,1) + * Remapp error codes to match admin codes. + If Error Then + Begin Case + Case Error = UDR.FILEOPENFAILED + Error = EADM.CANTOPEN + Case Error = UDR.RECNOTEXISTS + Error = EADM.UDRHOTRECNOTEXISTS + Case Error = UDR.WRITEFAILED + Error = EADM.CANTWRITE + Case Error = UDR.READFAILED + Error = EADM.CANTREAD + Case Error = UDR.MACHINENOTHOTBACKUP + Error = EADM.MACHINENOTHOTBACKUP + Case 1 + Error = EADM.UDRERROR + End Case + End + End Else + Error = STATUS() - 80000 + End + ConId = RPC.DISCONNECT(ConId) + End Else + Error = STATUS() - 80000 + End + End + If Not(Error) Then + Delete Udrsys.Fvar, Key + End + End Else + Error = EADM.ACTIVESUBS + End + End Else + Error = EADM.CANTREAD + End + Close Udrsys.Fvar + End Else + Error = EADM.CANTOPEN + End + + Return + +********************************************************************** +* RepExamineRepLog - Returns the Rep Log to examine +* +* Input: Control, Rep Log Path +* Output: Rep Log data +********************************************************************** +RepExamineRepLog: + + ReturnCode = 0 + NewText = "" + Line = "" + Control = Params<1> + InfoFilePath = "" + InfoFileDir = Trim(Params<2>) + InfoFile = Trim(Params<3>) + + If Control = 1 Then + InfoFilePath = InfoFileDir:OS.SEP:"uvdrlogd.info" + End Else If Control = 2 Then + InfoFilePath = InfoFileDir:OS.SEP:"uvdrrepd.info" + End Else If Control = 3 Then + InfoFilePath = InfoFileDir:OS.SEP:InfoFile + End Else + ReturnCode = EADM.NOFILE + End + + OpenSeq InfoFilePath To LogFvar Locked + ReturnCode = EADM.RECLOCKED + End + Then + * In case the file is huge, seek to the end and go back 16k + * bytes. Ignore the outcome of this - if it fails, it means + * the file isn't that long, so just read the whole file. + * NB. Can't return more data than this at the moment due to + * RPC package size limitations + + Seek LogFvar, -16384, 2 Then + End + + Done = False + Loop + ReadSeq Line From LogFvar Else Done = True + Until Done or Status() Do + NewText<-1> = Line + Repeat + + CloseSeq LogFvar + OutData = Change(NewText, @FM, CRLF) + End + Else + ReturnCode = EADM.NOFILE + End + + Error = ReturnCode + Return + +******************************************************************** +* RepFailOver - +* +* Input: Sys No +* Output: NONE +******************************************************************** +RepFailOver: + + SysKey = Params<1> + Error = 0 + FileName = "" + AccountName = "" + AccountPath = "" + Id = 0 + SubKey = "" + SubType = "" + MDName = "" + FileSubType = "" + SubRecord = "" + Flag = 0 + FilePath = "" + OSFileName = "" + VOCFileName = "" + Tmp = "" + + EXECUTE "SELECT UV_UDRSUB WITH PUB_SYS = ":SysKey:" AND WITH HOTBACKUP EQ '1'" + + Open '', "UV_UDRSUB" To UvSubsFvar Then + Loop + ReadNext SubKey Else SubKey = "" + While SubKey Do + Read SubRecord From UvSubsFvar, SubKey Then + FileName = SubRecord<1> + AccountName = SubRecord<2> + SubType = SubRecord<6,1> + FileSubType = SubRecord<6,2> + DictFileKey = SubRecord<9> + MDName = SubRecord<15> + + Readv AccountPath From UVACCOUNT, AccountName, 11 Then + Openpath AccountPath:OS.SEP:"VOC" To UvVocFvar Then + If SubType = "M" Then + VOCFileName = MDName + End Else If SubType = "D" And MDName <> "" Then +*ogo Readv FileSubType From UvSubFvar, DictFileKey, 6 Then + If FileSubType = "M" Then + VOCFileName = MDName + End Else + VOCFileName = FileName + End +* End Else ; * FAILED - Readv DictPubKey +* Error = EADM.BADFILE +* End ; * END - Readv DictPubKey + End Else + VOCFileName = FileName + End + Read VocRecord From UvVocFvar, VOCFileName Then + If SubType EQ "M" Then + Find FileName in VocRecord<7> Setting Fmc, Vmc, Smc Then + Tmp = VocRecord<8,Vmc> + If IsFullPath(Tmp) Then + FilePath = Tmp ; * use multi-part full os file name + End Else + FilePath = AccountPath:OS.SEP:MDName:OS.SEP:Tmp ; * add multi-part os file name + End + End Else + Error = EADM.BADFILE + End ; * END - Find multi-part file name + End Else If SubType = "D" Then + If IsFullPath(VocRecord<3>) Then + FilePath = VocRecord<3> + End Else + FilePath = AccountPath:OS.SEP:VocRecord<3> + End + End Else + If IsFullPath(VocRecord<2>) Then + FilePath = VocRecord<2> + End Else + FilePath = AccountPath:OS.SEP:VocRecord<2> + End + End + End Else ; * FAILED - Read VocRecord + Error = EADM.BADFILE + End ; * END - Read VocRecord + Close UvVocFvar + End Else ; * FAILED - Open account VOC + Error = EADM.BADFILE + End ; * END - Open account VOC + + Error = UDRgetheaderinfo(FilePath, Flag, Id) + If Not(Error) Then + If Flag = UDRSUB Then + Error = UDRsetheaderinfo(FilePath, UDRFAILOVER, Id) + If Error Then + Begin Case + Case Error = -1 + Error = EADM.BADFUNCCALL + Case Error = -2 + Error = EADM.BADFILE + Case Error = -3 + Error = EADM.BADFILETYPE + Case Error = -5 + Error = EADM.BADFILEREV + End Case + End + End Else + Error = EADM.UDRNOTINUSE + End + End Else + Begin Case + Case Error = -1 + Error = EADM.BADFUNCCALL + Case Error = -2 + Error = EADM.BADFILE + Case Error = -3 + Error = EADM.BADFILETYPE + Case Error = -5 + Error = EADM.BADFILEREV + End Case + End + + End Else + Error = EADM.CANTREADPATH + End + End Else + Error = EADM.CANTREAD + End + Repeat + + Open '', "UV_UDRSYS" To UvSysFvar Then + Writev "F" On UvSysFvar, SysKey, 6 Then + Error = UDRsetshmmessage(UDR.REPDELSYS, SysKey, 0, 0, UDRREP) + End Else + Error = EADM.CANTWRITE + End + Close UvSysFvar + End Else + Error = EADM.CANTOPEN + End + + Close UvSubsFvar + End Else + Error = EADM.CANTOPEN + End + Return + +********************************************************************** +* RepGetMultiLevelFiles - Returns all the multi level and +* distributed files in an account +* +* Input: Account +* Output: List of multi level files and type +********************************************************************** +RepGetMultiLevelFiles: + + OutData = "" + AccountName = Params<1> + If IsFullPath(AccountName) Then + AccountPath = AccountName + End Else + * Specific account name + ReadV AccountPath From UVACCOUNT, AccountName, 11 Else + Error = EADM.CANTREADPATH + Return + End + End + +************************************** +*** List all the Multi Level files *** +************************************** + * We need a temporary file pointer to be able to do SSELECT + TempRec = "F" : @FM : AccountPath : OS.SEP : "VOC" : @FM : "D_VOC" + Write TempRec On VOC, "BROWSEPTR" + ExLine = \SSELECT BROWSEPTR WITH F1 LIKE "'F'..." AND WITH F4 LIKE "M..."\ + ExLine := " AND F2 UNLIKE ...":OS.SEP:"..." + +************************** +* OS specific code start * +************************** +* Checking for / on NT as this is still a valid separator in UniVerse files. + If OS.TYPE # "UNIX" Then + ExLine := " AND F2 UNLIKE .../..." + End +************************ +* OS specific code end * +************************ + + Open "BROWSEPTR" To F$Remote Then + Gosub TCLCommand + Done = False + Loop + ReadNext Id From SList Else Done = True + While Id Do + OutData<-1> = Id : @VM : "M" + Repeat + + Close F$Remote + + End + +************************************** +*** List all the distributed files *** +************************************** + OSAccountName = AccountPath + Convert OS.SEP TO @FM IN OSAccountName +************************** +* OS specific code start * +************************** +* Checking for / on NT as this is still a valid separator in UniVerse files. + If OS.TYPE # "UNIX" Then + Convert "/" TO @FM IN OSAccountName + End +************************ +* OS specific code end * +************************ + OSAccountName = OSAccountName + + Open "","&PARTFILES&" To UvPartFvar Then + EXECUTE "SELECT &PARTFILES& WITH ACCOUNT = ":OSAccountName: " AND WITH PARTNUM EQ 'Distributed'" + Fin = False + Loop + Readnext Id Then + Read Rec From UvPartFvar, Id Then + DistFile = Rec<1> + + Line = DistFile : @VM : "MD" + OutData<-1> = Line + End + End Else Fin = True + Until Fin + Repeat + Close UvPartFvar + End Else + Error = EADM.CANTOPEN + End + + Return + +********************************************************************** +* RepGetMultiLevelFileParts - Returns all the multi level parts +* for the specified multi level file +* +* Input: Account, Multi Level File name +* Output: List of multi level part files, +* their types and their dicts +* details +********************************************************************** +RepGetMultiLevelFileParts: + + OutData = "" + Finish = 0 + Ct = 0 + File = "" + Dict = "" + OSAccountName = "" + AccountName = Params<1> + MultiLevelFile = Params<2> + FileType = Params<3> + + If IsFullPath(AccountName) Then + AccountPath = AccountName + End Else + * Specific account name + ReadV AccountPath From UVACCOUNT, AccountName, 11 Else + Error = EADM.CANTREADPATH + Return + End + End + + * We need a temporary file pointer to be able to do SSELECT + TempRec = "F" : @FM : AccountPath : OS.SEP : "VOC" : @FM : "D_VOC" + Write TempRec On VOC, "BROWSEPTR" + + If FileType = "M" Then +******************************************* +*** List all the Multi Level part files *** +******************************************* + Open "BROWSEPTR" To F$Remote Then + Read MLRec From F$Remote, MultiLevelFile Then + Ok = True + Finish = DCount(MLRec<7>, @VM) + For Ct = 1 To Finish + File = MLRec<7,Ct> + Dict = MLRec<3> + OutData<-1> = File : @VM : Dict : @VM : FileType + Next Ct + End Else + Error = EADM.CANTREAD + End + Close F$Remote + End + End Else If FileType = "MD" Then +******************************************* +*** List all the distributed part files *** +******************************************* + OSAccountName = AccountPath + Convert OS.SEP TO @FM IN OSAccountName +************************** +* OS specific code start * +************************** +* Checking for / on NT as this is still a valid separator in UniVerse files. + If OS.TYPE # "UNIX" Then + Convert "/" TO @FM IN OSAccountName + End +************************ +* OS specific code end * +************************ + OSAccountName = OSAccountName + + Open "","&PARTFILES&" To UvPartFvar Then + EXECUTE "SELECT &PARTFILES& WITH ACCOUNT EQ ":OSAccountName:" AND WITH DISTFILE EQ ":MultiLevelFile:" AND WITH PARTNUM NE 'Distributed'" + Fin = False + Loop + Readnext Id Then + Read Rec From UvPartFvar, Id Then + PartFile = Id + Convert OS.SEP TO @FM IN PartFile +************************** +* OS specific code start * +************************** +* Checking for / on NT as this is still a valid separator in UniVerse files. + If OS.TYPE # "UNIX" Then + Convert "/" TO @FM IN PartFile + End +************************ +* OS specific code end * +************************ + PartFile = PartFile + + Open "BROWSEPTR" To F$Remote Then + Read MLRec From F$Remote, PartFile Then + Dict = MLRec<3> + End Else + Error = EADM.CANTREAD + End + Close F$Remote + End + + Line = PartFile : @VM : Dict : @VM : FileType + OutData<-1> = Line + End + End Else Fin = True + Until Fin + Repeat + Close UvPartFvar + End Else + Error = EADM.CANTOPEN + End + End + + Return + +********************************************************************** +* RepGetPublishedFiles - Returns a list of published files and their +* details +* +* Input: Account +* Output:An array of published filenames and details +********************************************************************** +RepGetPublishedFiles: + + Error = 0 + OutData = "" + PubRecord = "" + Id = "" + File = "" + Account = Params<1> + AccountName = "" + Type = "" + DictFileId = "" + PntFiles = "" + PntAccounts = "" + PntTypes = "" + PntDictFileId = "" + + Open '', "UV_UDRPUB" To UvPubFvar Then + EXECUTE "SELECT UV_UDRPUB WITH ACCOUNT EQ " : Account + + Fin = False + Loop + Readnext Id Then + Read PubRecord From UvPubFvar, Id Then + AccountName = PubRecord<2> + File = PubRecord<1> + Type = PubRecord<5,1> + DictFileId = PubRecord<11> + MDName = PubRecord<17> + Line = Id : @vm : File : @vm : Type : @vm : AccountName : @vm : MDName + OutData<-1> = Line + * Add published file links to pub list + PntFiles = PubRecord<12> + PntAccounts = PubRecord<13> + PntTypes = PubRecord<15> + PntDictFileId = PubRecord<16> + If PntFiles NE "" Then + Loop + Remove File From PntFiles Setting Status + Remove AccountName From PntAccounts Setting Status + Remove Type From PntTypes Setting Status + Remove DictFileId From PntDictFileId Setting Status + Line = Id : @VM : File : @VM : Type : @VM : AccountName : @vm : MDName + OutData<-1> = Line + Until Status = 0 Do + Repeat + End + End + End Else Fin = True + Until Fin + Repeat + Close UvPubFvar + End Else + Error = EADM.CANTOPEN + End + + Return + +********************************************************************** +* RepGetPublishedFileDetails - Returns the details of a published file +* +* Input: Publication Key +* Output:An array of details for the published file +********************************************************************** +RepGetPublishedFileDetails: + + Ok = 0 + Error = 0 + SystemName = "" + SubName = "" + SystemDetails = "" + SubDetails = "" + Rec = "" + SysKey = "" + SubKey = "" + SubAccount = "" + PubKey = Params<1> + Lp = 1 + + * Open the publications files + Open '', "UV_UDRPUB" To UvPubFvar Then + + * Open the systems file + Open '', "UV_UDRSYS" To UvSysFvar Then + + Read Rec From UvPubFvar, PubKey Then + * loop reading all the subscription filenames from the pubs file + SubList = Rec<8> + Rec<8> = "" + + Loop + Remove SubKey From SubList Setting Ok + If SubKey Then + SubName = Rec<9,Lp> + AccountName = Rec<10,Lp> + SysKey = Rec<7,Lp> + * Get the system record from the systems file + Read SystemDetails From UvSysFvar, SysKey Then + + SystemName = SystemDetails<1> + + * Build the return data array + Rec<8,-1> = SubKey : @SM : SysKey : @SM : SubName : @SM : AccountName : @SM : SystemName + End Else + Error = EADM.CANTREAD + End + Lp +=1 + + End + While Ok Do + Repeat + + * Load the return data with the output + OutData = Rec + + End Else + Error = EADM.CANTREAD + End + Close UvSysFvar + End Else + Error = EADM.CANTOPEN + End + Close UvPubFvar + End Else + Error = EADM.CANTOPEN + End + + Return + +********************************************************************** +* RepGetRemotePubs - Returns the Remote systems publications +* +* Input: System Id +* Output: Remote Publication List +********************************************************************** +RepGetRemotePubs: + + Error = 0 + lp =0 + Ct = 0 + OutData = "" + MachineName = "" + Dim CALL.ARGS(10,2) + Dim RES.ARGS(20,2) + RES.COUNT = 0 + + * Get system name we are looking for. + SystemName = Params<1> + + * Get the Hostname + ExLine = HOSTNAME + + Gosub ShellCommand + MachineName = Trim(Out<1>) + * Open Connection and process any error codes that are returned + ConId = RPC.CONNECT(SystemName, UDR.SERVICE) + If ConId Then + * We are ok, start the call + CALL.ARGS(1,1) = UDR.SRV.GETPUBS ; * GetPubs + CALL.ARGS(1,2) = UVRPC.INT + CALL.ARGS(2,1) = MachineName + CALL.ARGS(2,2) = UVRPC.STRING + If SYSTEM(100) Then + CALL.ARGS(3,1) = 1 + End Else + CALL.ARGS(3,1) = 0 + End + CALL.ARGS(3,2) = UVRPC.INT + + * make execute call + If RPC.CALL(ConId, " ", 3, MAT CALL.ARGS, RES.COUNT, MAT RES.ARGS) Then + OutData = RES.ARGS(3,1) + End Else + Error = STATUS() - 80000 + End + + * Make call to get publications + If RPC.DISCONNECT(ConId) Else + Error = STATUS() - 80000 + End + End Else + * Process Error Message + Error = STATUS() - 80000 + End + + * Package and return to client + * Close connection + Return + +********************************************************************** +* RepGetReplicationConfig - Returns the config information for the +* replication system +* +* Input: None +* Output: Replication config information. +********************************************************************** +RepGetReplicationConfig: + + pos =0 + Error = 0 + line='' + eof = 0 + OutData = "" + LogFilePath = "" + + * Open the uvreplication config file in the UniVerse home account + config.file = UVHOME : OS.SEP : "uvdr.config" + OpenSeq config.file To FConfig.file Then + + * Parse out the replication configuration details. + Loop + ReadSeq line From FConfig.file Else eof = 1 + Until eof Do + line=Trim(line) + + Begin Case + * Log directory + Case line[1,6]='logdir' + pos = INDEX(line, "=",1) + If pos THEN + OutData<1> = line[pos+1,99] + End + + Case line[1,7]='logsize' + * Log size in blocks + pos = INDEX(line, "=",1) + If pos THEN + OutData<2> = line[pos+1,99] + End + + Case line[1,10]='logcurrent' + * Current Log directory + pos = INDEX(line, "=",1) + If pos THEN + OutData<3> = line[pos+1,99] + End + + Case line[1,7]='logboot' + * Log boot up flag + pos = INDEX(line, "=",1) + If pos THEN + OutData<4> = line[pos+1,99] + End + + Case line[1,6]='repdir' + * replication log directory + pos = INDEX(line, "=",1) + If pos THEN + OutData<5> = line[pos+1,99] + End + + Case line[1,7]='repboot' + * Replication boot flag + pos = INDEX(line, "=",1) + If pos THEN + OutData<6> = line[pos+1,99] + End + + Case line[1,5]='debug' + * Replication debug flag + pos = INDEX(line, "=",1) + If pos THEN + OutData<7> = line[pos+1,99] + End + + Case line[1,9]='logoldest' + * oldest log directory to be polled for data + pos = INDEX(line, "=",1) + If pos THEN + OutData<8> = line[pos+1,99] + End + End Case + Repeat + + CloseSeq FConfig.file + End + Else + Error = EADM.NOFILE + End + + Return + +********************************************************************** +* RepGetRepState - Returns the state of the replication daemons +* +* Input: NONE +* Output: Status of the replcation +* Status of subsciption daemons +********************************************************************** +RepGetState: + + LogState = 0 + Error = 0 + OutData = "" + + * Get Log State for the replication system + RECIO(LogState, RPINFO$LOG.STATE, RECIO$RPINFO) + + OutData = LogState + Error = @SYSTEM.RETURN.CODE + + LogState = 0 + * Get Log State for the subscription system + RECIO(LogState, RPINFO$REP.STATE, RECIO$RPINFO) + + OutData<2> = LogState + If Not(Error) Then + Error = @SYSTEM.RETURN.CODE + End + + Return + +********************************************************************** +* RepGetSystems - Returns the replication system information +* +* +* Input: A Flag : 1 = List of all publishing systems that provide this +* subscribing system with services. +* 2 = List of all publishing systems that this subscribing +* system provides Hot-Backup services for. +* 3 = List of all subscribing systems that provide this +* publishing system with Hot-Backup services. +* 4 = List of all publishing systems that this subscribing +* system is currently providing Fail Over support for. +* Output: An array with the system information in it. +********************************************************************** +RepGetSystems: + + Error = 0 + OutData = "" + Id = "" + Rec = "" + Line = "" + SysSched = "" + System = "" + + Open "","UV_UDRSYS" To UvSysFvar Then + Begin Case + Case Params = 1 + EXECUTE "SELECT UV_UDRSYS WITH STATE_TYPE EQ '' OR STATE_TYPE EQ 'F' AND WITH @ID NE 'HOTBACKUP'" + Case Params = 2 + EXECUTE "SELECT UV_UDRSYS WITH HOTBACKUP EQ 1 AND WITH STATE_TYPE EQ ''" + Case Params = 3 + EXECUTE "SELECT UV_UDRSYS WITH @ID EQ 'HOTBACKUP'" + Case Params = 4 + EXECUTE "SELECT UV_UDRSYS WITH HOTBACKUP EQ 1 AND WITH STATE_TYPE EQ 'F'" + End Case + Fin = False + Loop + Readnext Id Then + Read Rec From UvSysFvar, Id Then + System = Rec<1> + SysSched = Rec<3> + If SysSched = 0 AND Rec<5> = 1 Then + SysSched = "Hot Standby" + End + If Params NE 2 Then + Line = Id : @vm : System : @vm : SysSched + End Else + Line = Id : @vm : System + End + OutData<-1> = Line + End + End Else Fin = True + Until Fin + Repeat + Close UvSysFvar + End Else + Error = EADM.CANTOPEN + End + Return + +********************************************************************** +* RepGetSystemNames - Returns the replication system names +* +* +* Input: NONE +* Output: An array with the system names +* in it. +********************************************************************** +RepGetSystemNames: + + SystemDetails = "" + Ct = 0 + OutData = "" + Key = "" + + Open "","UV_UDRSYS" To UvSysFvar Then + EXECUTE "SELECT UV_UDRSYS WITH STATE_TYPE EQ '' AND WITH @ID NE 'HOTBACKUP'" + Loop + Readnext Key Else Null + While Key Do + Read SystemDetails From UvSysFvar, Key Then + Ct+=1 + + OutData<1,Ct>= Trim(Key) + OutData<2,Ct>= Trim(SystemDetails<1>) + If SystemDetails<5> = 1 Then + OutData<3,Ct> = "1" + End Else + OutData<3,Ct> = "0" + End + End + Repeat + Close UvSubsFvar + End Else + Error = EADM.CANTOPEN + End + Return + +********************************************************************** +* RepGetRepSystemDetails - Returns the details of a Rep system +* +* Input: System Key +* Output:An array of details for the rep system +********************************************************************** +RepGetSystemDetails: + + SysKey = Params<1> + Error = 0 + Rec = "" + OutData = "" + Open '', "UV_UDRSYS" To UvSysFvar Then + Read Rec From UvSysFvar, SysKey Then + OutData = Rec + End Else + Error = EADM.CANTREAD + End + Close UvPubFvar + End Else + Error = EADM.CANTOPEN + End + + Return + +********************************************************************** +* RepGetSubscriptions - Returns the subscription information +* +* +* Input: Account +* Output: An array with the subscription information +* in it. +********************************************************************** +RepGetSubscriptions: + + Error = 0 + Id = "" + OutData = "" + SystemName = "" + Line = "" + SubRecord = "" + File = "" + Account = Params<1> + AccountName = "" + Type = "" + MDName = "" + PntFiles = "" + PntAccounts = "" + PntTypes = "" + + * Open the subscription file + Open '', "UV_UDRSUB" To UvSubsFvar Then + + * Open the Systems file + Open "","UV_UDRSYS" To UvSysFvar Then + + EXECUTE "SELECT UV_UDRSUB WITH ACCOUNT EQ " : Account + + Fin = False + Loop + Readnext Id Then + Read SubRecord From UvSubsFvar, Id Then + File = SubRecord<1> + AccountName = SubRecord<2> + Type = SubRecord<6,1> + MDName = SubRecord<15> + + Readv SystemName From UvSysFvar, SubRecord<5>, 1 Else + SystemName = "Invalid System" + End + + * Build the return line + Line = Id : @vm : File : @vm : Type : @vm : AccountName : @vm : MDName : @vm : SystemName + OutData<-1> = Line + + * Add subscribed file links to sub list + PntFiles = SubRecord<10> + PntAccounts = SubRecord<11> + PntTypes = SubRecord<13> + If PntFiles NE "" Then + Loop + Remove File From PntFiles Setting Status + Remove AccountName From PntAccounts Setting Status + Remove Type From PntTypes Setting Status + Line = Id : @VM : File : @VM : Type : @VM : AccountName : @vm : MDName : @VM : SystemName + OutData<-1> = Line + Until Status = 0 Do + Repeat + End + End + End Else + Fin = True + End + Until Fin + Repeat + Close UvSysFvar + End Else + Error = EADM.CANTOPEN + End + Close UvSubsFvar + End Else + Error = EADM.CANTOPEN + End + + Return + +********************************************************************** +* RepGetSubscriptionDetails - Returns the details of a subscription file +* +* Input: Subscription Key +* Output:An array of details for the subscription file +********************************************************************** +RepGetSubscriptionDetails: + + Id = Params<1> + SystemName = "" + Rec = "" + OutData = "" + + Open '', "UV_UDRSUB" To UvSubsFvar Then + Open "","UV_UDRSYS" To UvSysFvar Then + Read Rec From UvSubsFvar, Id Then + Readv SystemName From UvSysFvar, Rec<5>, 1 Else + + SystemName = "Invalid System" + End +* Rec<5> = SystemName + OutData = Rec : @FM : SystemName + End + Close UvSysFvar + End Else + Error = EADM.CANTOPEN + End + Close UvSubsFvar + End Else + Error = EADM.CANTOPEN + End + + Return + +****************************************************************************** +* RepGetUVFiles - Like a normal Browse, but instead of browsing the +* OS file system, it browses the UniVerse account/file +* system. +* +* Input: Account name to browse +* File types to include +* Output: List of files +****************************************************************************** +RepGetUVFiles: + + Done = False + Status = 0 + FileInfo = "" + DictName = "" + AccountName = Params<1> + AccountPath = "" + VOCRecord = "" + +* prepare list of exceptions +* then before including files in the list, check against exceptions + Gosub RepBuildUVFileExceptionList + +* Add all standard File pointers to the list minus Multi-level files + Write "Q" : @FM : AccountName : @FM : "VOC" : @FM : "D_VOC" On VOC, "BROWSEPTR" + ExLine = "SSELECT BROWSEPTR WITH F1 LIKE F... AND F4 UNLIKE M..." + Gosub TCLCommand + Readv AccountPath From UVACCOUNT, AccountName, 11 Then + Openpath AccountPath:OS.SEP:"VOC" To UvVocFvar Then + Loop + ReadNext Id From SList Else Done = True + Until Done Do + Find Id IN ExceptionList Setting Fmc + Else + Read VOCRecord From UvVocFvar, Id Then + DictName = VOCRecord<3> + + FileInfo<1> = Id : @VM : DictName : @VM : "F" + OutData<-1> = FileInfo + End ; * END - Readv VOCRecord + End + Repeat + Close UvVocFvar + End Else ; * FAILED - Open account VOC + Error = EADM.BADFILE + End ; * END - Open account VOC + End Else ; * FAILED - Readv AccountPath + Error = EADM.BADFILE + End ; * END - Readv AccountPath + +* add all q-pointers to the file list + Done = False + ExLine = "SSELECT BROWSEPTR WITH F1 LIKE Q..." + Gosub TCLCommand + Loop + ReadNext Id From SList Else Done = True + Until Done Do + If Id <> "BROWSEPTR" Then + FileInfo<1> = Id : @VM : "" : @VM : "Q" + OutData<-1> = FileInfo + End + Repeat + + Delete VOC, "BROWSEPTR" + Return + +********************************************************************** +* RepPublishFile - Publishes a file for replication +* +* Input: Publication Details +* Output: Publication Key +********************************************************************** +RepPublishFile: + + Error = 0 + FileName = Params<1> + Account = Params<2> + Description = Params<3> + PubType = Params<4> ; * F=regular, D=dictionary, M=multi-part, MD=distributed, Q=Q-pointers + AccessList = Params<5> + FileKeyForDictPub = Params<6> + MDName = Params<7> + DictName = Params<8> + ResultPubKey = "" + MFileName = "" + MPartName = "" + AccountPath = "" + VOCRecord = "" + + Readv AccountPath From UVACCOUNT, Account, 11 Then +* process the type of publication requested + If Not(Error) Then + If PubType = "F" Or PubType = "MD" Then ; * publish standard UniVerse file + Gosub RepPublishFileFType + End Else If PubType = "D" Then ; * publish UniVerse file dictionary + Gosub RepPublishFileDType + End Else If PubType = "Q" Then ; * publish UniVerse Q-pointer + Gosub RepPublishFileQType + End Else If PubType = "M" Then ; * publish UniVerse Multi-Level file + MFileName = MDName + MPartName = FileName + Gosub RepPublishFileMType + End Else ; * No valid PubType provided + Error = EADM.BADFILE + End ; * Finished publishing file + End + End Else ; * FAILED - Readv AccountPath + Error = EADM.BADFILE + End ; * END - Readv AccountPath + + OutData = ResultingPubKey + Return + +******************************************************************** +* RepRemoveRemoteSub - Remove a subscription on a remote subscriber +* of a publication on this system +* +* Input: Key to published file record in UV_UDRPUB +* Output: Any error message generated +******************************************************************** +RepRemoveRemoteSub: + + Error = 0 + PubRecord = "" + Pos = 0 + PubKey = Params<1> + SubKey = Params<2> + SysKey = Params<3> + + Open '', "UV_UDRPUB" To UvPubFvar Then + Read PubRecord From UvPubFvar, PubKey Then + Find SubKey In PubRecord<8> Setting Pos Then + Del PubRecord<10,Pos> ; * these are deleted in reverse order because array shrinks with delete + Del PubRecord<9,Pos> + Del PubRecord<8,Pos> + Del PubRecord<7,Pos> + Error = UDRsetshmmessage(UDR.LOGDELREMSUB, PubKey, SysKey, SubKey, UDRLOG) + + Write PubRecord To UvPubFvar, PubKey Else + Error = EADM.CANTWRITE + End + End Else + Error = EADM.BADFILE + End + End Else + Error = EADM.CANTREAD + End + End Else + Error = EADM.CANTOPEN + End + + Return + +********************************************************************** +* RepRepairFile - Repairs the replication configuration for a file. +* +* ogo - we still need to add support for many broken states +* Supports - Clearing the replication id and flag from a file marked +* for replication.(Does not fix the replication config) +* Does not Support - Anything other than the above. +* Input: File Rep ID +* File Dict Rep ID +* Account +* FileName +* Rep FileType +* Multi level/Distributed Name +* Output: None +********************************************************************** +RepRepairFile: + Error = 0 + FileID = Params<1> + DictID = Params<2> + Account = Params<3> + FileName = Params<4> + FileType = Params<5> ; * F=regular, M=multi-part, MD=distributed, Q=Q-pointers, D=dictionary + MDName = Params<6> + AccountPath = "" + FilePath = "" + VOCFileName = "" + VOCRecord = "" + OldFileType = "" + Tmp = "" + +RepRepairFile.GetFilePath: +* figure out filepath for the file in question + If FileType = "F" Or FileType = "M" Or FileType = "MD" Or FileType = "D" Then + Readv AccountPath From UVACCOUNT, Account, 11 Then + Openpath AccountPath:OS.SEP:"VOC" To UvVocFvar Then + If FileType = "M" Then + VOCFileName = MDName + End Else If FileType = "D" And OldFileType = "M" Then + VOCFileName = MDName + End Else + VOCFileName = FileName + End + Read VocRecord From UvVocFvar, VOCFileName Then + If FileType EQ "M" Then + Find FileName in VocRecord<7> Setting Fmc, Vmc, Smc Then + Tmp = VocRecord<8,Vmc> + If IsFullPath(Tmp) Then + FilePath = Tmp ; * use multi-part full os file name + End Else + FilePath = AccountPath:OS.SEP:MDName:OS.SEP:Tmp ; * add multi-part os file name + End + End Else + Error = EADM.BADFILE + End ; * END - Find multi-part file name + End Else If FileType = "D" Then + If IsFullPath(VocRecord<3>) Then + FilePath = VocRecord<3> + End Else + FilePath = AccountPath:OS.SEP:VocRecord<3> + End + End Else + If IsFullPath(VocRecord<2>) Then + FilePath = VocRecord<2> + End Else + FilePath = AccountPath:OS.SEP:VocRecord<2> + End + End + End Else ; * FAILED - Read VocRecord + Error = EADM.BADFILE + End ; * END - Read VocRecord + Close UvVocFvar + End Else ; * FAILED - Open account VOC + Error = EADM.BADFILE + End ; * END - Open account VOC + End Else ; * FAILED - read account path + Error = EADM.CANTREAD + End ; * END - read account path + End + + Error = UDRsetheaderinfo(FilePath, UDRNONE, 0) + If Error Then + Begin Case + Case Error = -1 + Error = EADM.BADFUNCCALL + Case Error = -2 + Error = EADM.BADFILE + Case Error = -3 + Error = EADM.BADFILETYPE + Case Error = -5 + Error = EADM.BADFILEREV + End Case + Goto Exit.RepRepairFile + End + * now repair the files dictionary in case that has problems as well + If FileType <> "D" And Error = 0 Then + OldFileType = FileType + FileType = "D" + Goto RepRepairFile.GetFilePath + End + +Exit.RepRepairFile: + + OutData = "" + Return + +******************************************************************** +* RepResumeLogManager - Try ro make the log manager ressume after a FULL +* +* Input: None +* Output: Any error message generated +******************************************************************** +RepResumeLogManager: + + Error = 0 +* Send the resume message to the log manager + Flag = 0 + Error = UDRsetshmmessage(UDR.LOGRESUME, Flag, 0, 0, UDRLOG) + + Return + +********************************************************************** +* RepSaveReplicationConfig - Saves the replication config +* information +* +* Input: Replication config information +* Output: None +********************************************************************** +RepSaveReplicationConfig: + + rec="" + line = "" + line.no = 0 + eof = 0 + Error = 0 + found.replogdir = 0 + found.replogsize = 0 + found.repcurrentlog = 0 + found.repoldestlog = 0 + found.repboot = 0 + found.sublogdir = 0 + found.subboot = 0 + found.repsubdebug = 0 + + * Load client values. + switch = Params<1> + replogdir = Params<2> + replogsize = Params<3> + repcurrentlog = Params<4> + repboot = Params<5> + sublogdir = Params<6> + subboot = Params<7> + repsubdebug = Params<8> + repoldestlog = Params<9> + + * Open the replication config file. + config.file = UVHOME : OS.SEP : "uvdr.config" + OpenSeq config.file To FConfig.file Then + + * Parse the current values from the file and replace with the new values + Loop + ReadSeq line From FConfig.file else eof = 1 + Until eof Do + + * If we are doing the log manager settings. + If switch = "REP" Then + Begin Case + Case line[1,6]='logdir' + line="logdir=":replogdir + found.replogdir = 1 + Case line[1,7]='logsize' + line="logsize=":replogsize + found.replogsize = 1 + Case line[1,10]='logcurrent' + line="logcurrent=":repcurrentlog + found.repcurrentlog = 1 + Case line[1,9]='logoldest' + line="logoldest=":repoldestlog + found.repoldestlog = 1 + Case line[1,7]='logboot' + line="logboot=":repboot + found.repboot = 1 + Case line[1,5]='debug' + line="debug=":repsubdebug + found.repsubdebug = 1 + Case 1 + line=line + End Case + + End Else + + * Replication settings + Begin Case + Case line[1,6]='repdir' + line="repdir=":sublogdir + found.sublogdir = 1 + Case line[1,7]='repboot' + line="repboot=":subboot + found.subboot = 1 + Case line[1,5]='debug' + line="debug=":repsubdebug + found.repsubdebug = 1 + Case 1 + line=line + End Case + End + + line.no += 1 + rec< line.no > = line + repeat + + CloseSeq FConfig.file + + * If the entry was not found add it. + If switch = "REP" Then + If found.replogdir = 0 Then + line.no +=1 + rec="logdir=":replogdir + End + If found.replogsize = 0 Then + line.no += 1 + rec = "logsize=":replogsize + End + If found.repcurrentlog = 0 Then + line.no += 1 + rec = "logcurrent=":repcurrentlog + End + If found.repoldestlog = 0 Then + line.no += 1 + rec = "logoldest=":repoldestlog + End + If found.repboot = 0 Then + line.no += 1 + rec = "logboot=":repboot + End + If found.repsubdebug = 0 Then + line.no += 1 + rec = "debug=":repsubdebug + End + End Else + If found.sublogdir = 0 Then + line.no += 1 + rec = "repdir=":sublogdir + End + If found.subboot = 0 Then + line.no += 1 + rec = "repboot=":subboot + End + If found.repsubdebug = 0 Then + line.no += 1 + rec = "debug=":repsubdebug + End + End + OpenSeq config.file TO FConfig.file Else + Error = EADM.NOFILE + End + + FOR i = 1 TO line.no + WriteSeq rec< i > TO FConfig.file else + Error = EADM.CANTWRITE + End + Next i + WeofSeq FConfig.file + + End + Else + * We could not open the file, we assume that it is + * not there and create it + Create FConfig.file Then + rec="" + If switch = "REP" Then + rec<1>="logdir=":replogdir + rec<2>="logsize=":replogsize + rec<3>="logcurrent=":repcurrentlog + rec<4>="logoldest=":repoldestlog + rec<5>="logboot=":repboot + rec<6>="repdir=" + rec<7>="repboot=" + rec<8>="debug=":repsubdebug + End Else + rec<1>="logdir=" + rec<2>="logsize=" + rec<3>="logcurrent=" + rec<4>="logoldest=" + rec<5>="logboot=" + rec<6>="repdir=":sublogdir + rec<7>="repboot=":subboot + rec<8>="debug=":repsubdebug + End + Convert @FM To Char(10) in rec + WriteSeq rec To FConfig.file Else + Error =EADM.CANTWRITE + End + CloseSeq FConfig.file + End Else + Error = EADM.CANTCREATE + End + End + + Return + +********************************************************************** +* RepSubscribeFile - Subscribes a file for replication +* +* Input: Subscription Details +* Output: Subscription Key +********************************************************************** +RepSubscribeFile: + + Error = 0 + Dim CALL.ARGS(10,2) + Dim RES.ARGS(20,2) + RES.COUNT = 0 + FileName = Params<1> + Account = Params<2> + Description = Params<3> + SubType = Params<4> ; * F=regular, D=dictionary, M=multi-part, MD=distributed, Q=Q-pointers + HotStandby = Params<5> + MDName = Params<6> + SubIDForDict = Params<7> + DictName = Params<8> + SysKey = Params<10> + PubKey = Params<11> + PubFileAndAccount = Params<12> + VOCRecord = "" + SubRecord = "" + AccountPath = "" + FilePath = "" + SystemName = "" + OSFileName = "" + MPartNames = "" + MOSPartNames = "" + QAccountName = "" + QAccountPath = "" + QFileName = "" + DTypeFileName = "" + DictSubKey = "" + Flag = 0 + Id = 0 + LogState = 0 + SubKey = "" + QSubKey = "" + SysArray = "" + ConId = 0 + Tmp = "" + + Readv AccountPath From UVACCOUNT, Account, 11 Then + + ExLine = HOSTNAME + Gosub ShellCommand + MachineName = Trim(Out<1>) + + * Check to see if the subscription is a hot standby one if + * it is, check to see if there is already a hot standby for the + * publication file specified. + If HotStandby Then + EXECUTE "SELECT UV_UDRSUB WITH PUB_KEY = ":PubKey:" AND WITH HOTBACKUP NE '' AND WITH PUB_SYS = ":SysKey + IF @SELECTED Then + Error = EADM.PUBHASHOTBACKUP + Goto Exit.Subscribefile + End + End + + If SubType = "D" Then + * determine if this is a dictionary for a Multi-level file or regular file + Open '', "UV_UDRSUB" To UvSubFvar Then + Readv DTypeSubType From UvSubFvar, SubIDForDict, 6 Then + If DTypeSubType = "M" Then + DTypeFileName = MDName + End Else + DTypeFileName = FileName + End + End Else ; * FAILED - Readv DictPubKey + Error = EADM.BADFILE + End ; * END - Readv DictPubKey + Close UvSubFvar + End Else + Error = EADM.CANTOPEN + End + End + +* figure out filepath for the file in question + Openpath AccountPath:OS.SEP:"VOC" To UvVocFvar Then + If SubType = "F" Or SubType = "MD" Then ; * Get filepath for normal File type + Readv OSFileName From UvVocFvar, FileName, 2 Then + If IsFullPath(OSFileName) Then + FilePath = OSFileName + End Else + FilePath = AccountPath:OS.SEP:OSFileName + End + End Else ; * FAILED - Readv OSFileName + Error = EADM.BADFILE + End ; * END - Readv OSFileName + End Else If SubType = "D" Then ; * Get filepath for dictionary + Readv OSFileName From UvVocFvar, DTypeFileName, 3 Then + If IsFullPath(OSFileName) Then + FilePath = OSFileName + End Else + FilePath = AccountPath:OS.SEP:OSFileName + End + End Else ; * FAILED - Readv OSFileName + Error = EADM.BADFILE + End ; * END - Readv OSFileName + End Else If SubType = "M" Then ; * Get filepath for Multi-level File type + Readv MPartNames From UvVocFvar, MDName, 7 Then + Find FileName in MPartNames Setting Fmc, Vmc, Smc Then + Readv MOSPartNames From UvVocFvar, MDName, 8 Then + Tmp = MOSPartNames + If IsFullPath(Tmp) Then + FilePath = Tmp ; * use multi-part full os file name + End Else + FilePath = AccountPath:OS.SEP:MDName:OS.SEP:Tmp ; * add multi-part os file name + End + End Else ; * FAILED - Readv MOSPartNames + Error = EADM.BADFILE + End + End Else + Error = EADM.BADFILE + End ; * END - Find multi-part file name + End Else ; * FAILED - Readv MPartNames + Error = EADM.BADFILE + End ; * END - Readv MPartNames + End Else If SubType = "Q" Then ; * Get filepath for Q-pointer File type + Readv QAccountName From UvVocFvar, FileName, 2 Then + Readv QFileName From UvVocFvar, FileName, 3 Then + Readv QAccountPath From UVACCOUNT, QAccountName, 11 Then + Openpath QAccountPath:OS.SEP:"VOC" To UvVocFvar2 Then + Readv OSFileName From UvVocFvar2, QFileName, 2 Then + If IsFullPath(OSFileName) Then + FilePath = OSFileName + End Else + FilePath = QAccountPath:OS.SEP:OSFileName + End + End Else ; * FAILED - Readv OSFileName + Error = EADM.BADFILE + End ; * END - Readv OSFileName + Close UvVocFvar2 + End Else ; * FAILED - Open Q-pointer account VOC + Error = EADM.BADFILE + End ; * END - Open Q-pointer account VOC + End Else ; * FAILED - Readv QAccountPath + Error = EADM.BADFILE + End ; * END - Readv QAccountPath + End Else ; * FAILED - Readv QFileName + Error = EADM.BADFILE + End ; * END - Readv QFileName + End Else ; * FAILED - Readv QAccountName + Error = EADM.BADFILE + End ; * END - Readv QAccountName + End Else ; * No valid file type specified + Error = EADM.BADFILETYPE + End + Close UvVocFvar + End Else ; * FAILED - Open account VOC + Error = EADM.BADFILE + End ; * END - Open account VOC + If Error NE 0 Then + Goto Exit.Subscribefile + End + +* check if file already subscribed + Error = UDRgetheaderinfo(FilePath, Flag, Id) + If Not(Error) Then + If Flag = UDRNONE Then + Gosub RepGetNextSubscriptionKey + If Not(Error) Then + Open '', "UV_UDRSUB" To UvSubFvar Then + If SubType = "Q" Then + SubRecord<1> = QFileName + SubRecord<2> = QAccountName + SubRecord<3> = "Subscribed via a Q-Pointer" + SubRecord<6> = "F" + End Else If SubType = "D" Then + SubRecord<1> = FileName + SubRecord<2> = Account + SubRecord<3> = Description + SubRecord<6> = SubType : @VM : DTypeSubType + End Else ; * default case used for standard file types + SubRecord<1> = FileName + SubRecord<2> = Account + SubRecord<3> = Description + SubRecord<6> = SubType + End + SubRecord<4> = PubKey + SubRecord<5> = SysKey + SubRecord<7> = HotStandby + SubRecord<8> = PubFileAndAccount + SubRecord<9> = SubIDForDict + SubRecord<15> = MDName + SubRecord<16> = DictName + Write SubRecord To UvSubFvar, SubKey Then + If SubType = "D" Then + * now we need to set the parent file flag. + Readv DictSubKey From UvSubFvar, SubIDForDict, 9 Then + If DictSubKey <> 0 Then + Error = EADM.UDRINUSE + End + Writev SubKey To UvSubFvar, SubIDForDict, 9 Else + Error = EADM.CANTWRITE + End + End Else ; * FAILED - Readv DictSubKey + Error = EADM.BADFILE + End ; * END - Readv DictSubKey + End + If SubType = "MD" Then + Gosub RepDistFileAdminSet + End + If Not(Error) Then + Error = UDRsetheaderinfo(FilePath, UDRSUB, SubKey) + End + If Not(Error) Then + Open '', "UV_UDRSYS" To UvSysFvar Then + Read SysArray From UvSysFvar, SysKey Then + SysArray<4,-1> = SubKey + SystemName = SysArray<1> + Write SysArray To UvSysFvar, SysKey Else + Error = EADM.CANTWRITE + End + If DCount(SysArray, @VM) = 1 Then + * First Subscription signal schedular to add + * Get Log State for the subscription system + RECIO(LogState, RPINFO$REP.STATE, RECIO$RPINFO) + + If LogState Then + Error = UDRsetshmmessage(UDR.REPADDSYS, SysKey, 0, 0, UDRREP) + If Error Then + Error = EADM.BADCALL + End + End + End + End Else + Error = EADM.CANTREAD + End + Close UvSysFvar + End Else + Error = EADM.CANTOPEN + End + ConId = RPC.CONNECT(SystemName, UDR.SERVICE) + If ConId Then +* Update the remote with the subscription details + * We are ok, start the call + CALL.ARGS(1,1) = UDR.SRV.SETSUB ; * Register subscription + CALL.ARGS(1,2) = UVRPC.INT + CALL.ARGS(2,1) = PubKey + CALL.ARGS(2,2) = UVRPC.STRING + CALL.ARGS(3,1) = MachineName + CALL.ARGS(3,2) = UVRPC.STRING + CALL.ARGS(4,1) = SubKey + CALL.ARGS(4,2) = UVRPC.STRING + If SubType = "Q" Then + CALL.ARGS(5,1) = QFileName + CALL.ARGS(5,2) = UVRPC.STRING + CALL.ARGS(6,1) = QAccountName + CALL.ARGS(6,2) = UVRPC.STRING + End Else ; * default case used for standard file types + CALL.ARGS(5,1) = FileName + CALL.ARGS(5,2) = UVRPC.STRING + CALL.ARGS(6,1) = Account + CALL.ARGS(6,2) = UVRPC.STRING + End + + * make execute call + If RPC.CALL(ConId, " ", 6, MAT CALL.ARGS, RES.COUNT, MAT RES.ARGS) Then + OutData = RES.ARGS(3,1) + End Else + Error = STATUS() - 80000 + End + + ConId = RPC.DISCONNECT(ConId) + End Else + Error = Status() - 80000 + End + End Else + Begin Case + Case Error = -1 + Error = EADM.BADFUNCCALL + Case Error = -2 + Error = EADM.BADFILE + Case Error = -3 + Error = EADM.UDRINVALIDFILE + Case Error = -5 + Error = EADM.BADFILEREV + End Case + End + End Else + Error = EADM.CANTWRITE + End + Close UvSubFvar + End Else + Error = EADM.CANTOPEN + End + End + End + If Flag NE UDRPUB AND SubType = "Q" Then + Open '', "UV_UDRSUB" To UvSubFvar Then + If Flag = UDRNONE Then + QSubKey = SubKey + End Else If Flag = UDRSUB Then + QSubKey = Id + End + Readu SubRecord From UvSubFvar, QSubKey Then + SubRecord<10,-1> = FileName + SubRecord<11,-1> = Account + SubRecord<12,-1> = Description + SubRecord<13,-1> = SubType + SubRecord<14,-1> = "0" + Write SubRecord To UvSubFvar, QSubKey Else + Error = EADM.CANTWRITE + End + End Else + Error = EADM.CANTREAD + End + Close UvSubFvar + End Else + Error = EADM.CANTOPEN + End + End + If (Flag NE UDRNONE AND SubType NE "Q") OR Flag = UDRPUB Then + Error = EADM.UDRINUSE + End + End Else + Begin Case + Case Error = -1 + Error = EADM.BADFUNCCALL + Case Error = -2 + Error = EADM.BADFILE + Case Error = -3 + Error = EADM.UDRINVALIDFILE + Case Error = -5 + Error = EADM.BADFILEREV + End Case + End + End Else + Error = EADM.BADFILE + End + +Exit.Subscribefile: + If SubType = "Q" Then + OutData = QSubKey + End Else + OutData = SubKey + End + Return + +*********************************************************************** +* RepUnPublish - Unpublishs a replication publication +* +* Input: Params<1> = Publication ID +* Params<2> = File VOC Name +* Params<3> = Account Name +* Output: NONE +*********************************************************************** +RepUnPublish: + + Error = 0 + LogState = 0 + Key = Params<1> + File = Params<2> + Account = Params<3> + AccountPath = "" + FilePath = "" + FileName = "" + AccountName = "" + Id = 0 + PubRecord = "" + Tmp = "" + LogState = 0 + PubType = "" + DictFileKey = 0 + EmptyKey = "0" + MDName = "" + VOCReadName = "" + + Open "","UV_UDRPUB" To UvPubFvar Then + Readu PubRecord From UvPubFvar, Key Then + FileName = PubRecord<1> + AccountName = PubRecord<2> + PubType = PubRecord<5,1> + DictFileKey = PubRecord<11> + MDName = PubRecord<17> + If File EQ FileName AND Account EQ AccountName Then ; * this is a published file + Readv AccountPath From UVACCOUNT, AccountName, 11 Then + Openpath AccountPath:OS.SEP:"VOC" To UvVocFvar Then + If PubType EQ "M" Then + VOCReadName = MDName + End Else If PubType EQ "D" Then + Readv FilePubType From UvPubFvar, DictFileKey, 5 Then + If FilePubType = "M" Then + VOCReadName = MDName + End Else + VOCReadName = File + End + End Else ; * FAILED - Readv DictPubKey + Error = EADM.BADFILE + End ; * END - Readv DictPubKey + End Else + VOCReadName = File + End + Read VocRecord From UvVocFvar, VOCReadName Then + If PubType EQ "M" Then + Find File in VocRecord<7> Setting Fmc, Vmc, Smc Then + Tmp = VocRecord<8,Vmc> + If IsFullPath(Tmp) Then + FilePath = Tmp ; * use multi-part full os file name + End Else + FilePath = AccountPath:OS.SEP:MDName:OS.SEP:Tmp ; * add multi-part os file name + End + End Else + Error = EADM.BADFILE + End ; * END - Find multi-part file name + End Else If PubType EQ "D" Then + If IsFullPath(VocRecord<3>) Then + FilePath = VocRecord<3> + End Else + FilePath = AccountPath:OS.SEP:VocRecord<3> + End + End Else + If IsFullPath(VocRecord<2>) Then + FilePath = VocRecord<2> + End Else + FilePath = AccountPath:OS.SEP:VocRecord<2> + End + End + If Not(Error) Then + Error = UDRgetheaderinfo(FilePath, Flag, Id) + End + If Not(Error) Then + If Flag = UDRPUB Then + If Key = Id Then + Error = UDRsetheaderinfo(FilePath, UDRNONE, 0) + If Error Then + Begin Case + Case Error = -1 + Error = EADM.BADFUNCCALL + Case Error = -2 + Error = EADM.BADFILE + Case Error = -3 + Error = EADM.BADFILETYPE + Case Error = -5 + Error = EADM.BADFILEREV + End Case + End + Delete UvPubFvar, Key Else + Error = EADM.CANTWRITE + End + If PubType = "D" Then + * remove reference from file publication for dictionary unpublish + Readvu Tmp From UvPubFvar, DictFileKey, 11 Else + Error = EADM.CANTREAD + End + Writev EmptyKey On UvPubFvar, DictFileKey, 11 Then + End Else + Error = EADM.CANTWRITE + End + End + If PubType = "MD" Then + Gosub RepDistFileAdminClear + End + + * Tell the log manager we are out of here + * Get Log State for the subscription system + RECIO(LogState, RPINFO$LOG.STATE, RECIO$RPINFO) + + * Test to see if the daemon is running + If LogState Then + Error = UDRsetshmmessage(UDR.LOGDELPUB, Key, 0, 0, UDRLOG) + If Error Then + Error = EADM.BADFUNCCALL + End + End + End Else + Error = EADM.UDRINVALIDFILE + End + End Else + Error = EADM.UDRNOTINUSE + End + End Else + Begin Case + Case Error = -1 + Error = EADM.BADFUNCCALL + Case Error = -2 + Error = EADM.BADFILE + Case Error = -3 + Error = EADM.BADFILETYPE + Case Error = -5 + Error = EADM.BADFILEREV + End Case + End + End Else ; * FAILED - Read VocRecord + Error = EADM.BADFILE + End ; * END - Read VocRecord + Close UvVocFvar + End Else ; * FAILED - Open account VOC + Error = EADM.BADFILE + End ; * END - Open account VOC + End Else ; * FAILED - read account path + Error = EADM.CANTREAD + End ; * END - read account path + End Else ; * This is a file pointer not a published file + Find File In PubRecord<12> Setting Pos Then + If PubRecord<13,Pos> EQ Account Then + Del PubRecord<16, Pos> ; * these are deleted in reverse order because array shrinks with delete + Del PubRecord<15, Pos> + Del PubRecord<14, Pos> + Del PubRecord<13, Pos> + Del PubRecord<12, Pos> + Write PubRecord To UvPubFvar, Key Else + Error = EADM.CANTWRITE + End + End Else + Error = EADM.BADFILE + End + End Else + Error = EADM.BADFILE + End + End + End Else + Error = EADM.CANTREAD + End + Close UvPubFvar + End Else + Error = EADM.CANTOPEN + End + + Return + +*********************************************************************** +* RepUnSubscribe - Unsubscribes a replication subscription +* +* Input: Subscription ID +* File Name +* Account Name +* Output: NONE +*********************************************************************** +RepUnSubscribe: + + Dim CALL.ARGS(10,2) + Dim RES.ARGS(20,2) + + RES.COUNT = 0 + ConId = 0 + MachineName = "" + Error = 0 + SubKey = Params<1> + File = Params<2> + Account = Params<3> + FileName = "" + AccountName = "" + AccountPath = "" + FilePath = "" + PubKey = "" + SystemName = "" + SysRecord = "" + Pos = 0 + SubRecord = "" + SysKey = "" + VOCFileName = "" + MDName = "" + UnSubType = "" + SubType = "" + FileSubType = "" + DictFileKey = 0 + EmptyKey = "0" + Flag = 0 + Id = 0 + LogState = 0 + Tmp = "" + +* get our local machine name + ExLine = HOSTNAME + Gosub ShellCommand + MachineName = Trim(Out<1>) + +* get the details of the subscription we are to remove + Open "","UV_UDRSUB" To UvSubFvar Then + Read SubRecord From UvSubFvar, SubKey Then + FileName = SubRecord<1> + AccountName = SubRecord<2> + PubKey = SubRecord<4> + SysKey = SubRecord<5> + SubType = SubRecord<6,1> + DictFileKey = SubRecord<9> + MDName = SubRecord<15> + End Else + Error = EADM.CANTREAD + Goto Exit.RepUnSubscribe + End + End Else + Error = EADM.CANTOPEN + Goto Exit.RepUnSubscribe + End + +* figure out filepath for the file in question + If SubType = "F" Or SubType = "M" Or SubType = "MD" Or SubType = "D" Then ; * this is a subscribed file + UnSubType = "F" + Readv AccountPath From UVACCOUNT, AccountName, 11 Then + Openpath AccountPath:OS.SEP:"VOC" To UvVocFvar Then + If SubType = "M" Then + VOCFileName = MDName + End Else If SubType = "D" And MDName <> "" Then + Readv FileSubType From UvSubFvar, DictFileKey, 6 Then + If FileSubType = "M" Then + VOCFileName = MDName + End Else + VOCFileName = FileName + End + End Else ; * FAILED - Readv DictPubKey + Error = EADM.BADFILE + End ; * END - Readv DictPubKey + End Else + VOCFileName = FileName + End + Read VocRecord From UvVocFvar, VOCFileName Then + If SubType EQ "M" Then + Find FileName in VocRecord<7> Setting Fmc, Vmc, Smc Then + Tmp = VocRecord<8,Vmc> + If IsFullPath(Tmp) Then + FilePath = Tmp ; * use multi-part full os file name + End Else + FilePath = AccountPath:OS.SEP:MDName:OS.SEP:Tmp ; * add multi-part os file name + End + End Else + Error = EADM.BADFILE + End ; * END - Find multi-part file name + End Else If SubType = "D" Then + If IsFullPath(VocRecord<3>) Then + FilePath = VocRecord<3> + End Else + FilePath = AccountPath:OS.SEP:VocRecord<3> + End + End Else + If IsFullPath(VocRecord<2>) Then + FilePath = VocRecord<2> + End Else + FilePath = AccountPath:OS.SEP:VocRecord<2> + End + End + End Else ; * FAILED - Read VocRecord + Error = EADM.BADFILE + End ; * END - Read VocRecord + Close UvVocFvar + End Else ; * FAILED - Open account VOC + Error = EADM.BADFILE + End ; * END - Open account VOC + End Else ; * FAILED - read account path + Error = EADM.CANTREAD + End ; * END - read account path + End Else ; * This is a file pointer not a published file + UnSubType = "Q" + End + + If UnSubType = "F" Then + Error = UDRgetheaderinfo(FilePath, Flag, Id) + If Error Then + If Error Then + Begin Case + Case Error = -1 + Error = EADM.BADFUNCCALL + Case Error = -2 + Error = EADM.BADFILE + Case Error = -3 + Error = EADM.BADFILETYPE + Case Error = -5 + Error = EADM.BADFILEREV + End Case + End + Goto Exit.RepUnSubscribe + End + If Flag = UDRSUB Else + Error = EADM.UDRNOTINUSE + Goto Exit.RepUnSubscribe + End + End + + + If UnSubType = "F" AND SubKey = Id Then + Error = UDRsetheaderinfo(FilePath, UDRNONE, 0) + If Error Then + Begin Case + Case Error = -1 + Error = EADM.BADFUNCCALL + Case Error = -2 + Error = EADM.BADFILE + Case Error = -3 + Error = EADM.BADFILETYPE + Case Error = -5 + Error = EADM.BADFILEREV + End Case + Goto Exit.RepUnSubscribe + End + + Delete UvSubFvar, SubKey Else + Error = EADM.CANTWRITE + Goto Exit.RepUnSubscribe + End + If SubType = "D" Then + * remove reference from file subscription for dictionary unsubscribe + Readvu Tmp From UvSubFvar, DictFileKey, 9 Else + Error = EADM.CANTREAD + Goto Exit.RepUnSubscribe + End + Writev EmptyKey On UvSubFvar, DictFileKey, 9 Then + End Else + Error = EADM.CANTWRITE + Goto Exit.RepUnSubscribe + End + End + If SubType = "MD" Then + Gosub RepDistFileAdminClear + End + + Open '', "UV_UDRSYS" To UvSysFvar Else + Error = EADM.CANTOPEN + Goto Exit.RepUnSubscribe + End + + Read SysRecord From UvSysFvar, SysKey Else + Error = EADM.CANTREAD + Goto Exit.RepUnSubscribe + End + + SystemName = SysRecord<1> + Locate SubKey In SysRecord<4> Setting Pos Then + Del SysRecord<4, Pos> + If SysRecord<4> = "" Then + * Send a message to the subscription system not to schedule + + * Get Log State for the subscription system + RECIO(LogState, RPINFO$REP.STATE, RECIO$RPINFO) + + If LogState Then + Error = UDRsetshmmessage(UDR.REPDELSYS, SysKey, 0, 0, UDRREP) + If Error Then + Error = EADM.BADCALL + End + End + End + End + + Write SysRecord To UvSysFvar, SysKey Else + Error = EADM.CANTWRITE + Goto Exit.RepUnSubscribe + End + + ConId = RPC.CONNECT(SystemName, UDR.SERVICE) + If ConId Then + * Send the remove call to the publisher + CALL.ARGS(1,1) = UDR.SRV.REMSUB ; * RemPubs + CALL.ARGS(1,2) = UVRPC.INT + CALL.ARGS(2,1) = PubKey + CALL.ARGS(2,2) = UVRPC.STRING + CALL.ARGS(3,1) = MachineName + CALL.ARGS(3,2) = UVRPC.STRING + CALL.ARGS(4,1) = SubKey + CALL.ARGS(4,2) = UVRPC.STRING + * make execute call + If RPC.CALL(ConId, " ", 4, MAT CALL.ARGS, RES.COUNT, MAT RES.ARGS) Then + OutData = RES.ARGS(3,1) + End Else + Error = STATUS() - 80000 + End + ConId = RPC.DISCONNECT(ConId) + End Else + Error = Status() - 80000 + End + End Else If UnSubType = "Q" Then + Find File In SubRecord<10> Setting Pos Then + If SubRecord<11,Pos> EQ Account Then + Del SubRecord<14, Pos> ; * these are deleted in reverse order because array shrinks with delete + Del SubRecord<13, Pos> + Del SubRecord<12, Pos> + Del SubRecord<11, Pos> + Del SubRecord<10, Pos> + Write SubRecord To UvSubFvar, SubKey Else + Error = EADM.CANTWRITE + End + End Else + Error = EADM.BADFILE + End + End Else + Error = EADM.BADFILE + End + End Else + Error = EADM.UDRINVALIDFILE + End + + Close UvSubFvar + +Exit.RepUnSubscribe: + + Return + +*********************************************************************** +* RepUpdatePublishedFile - Updates the published file information +* +* Input: New publications details +* Params<1> = publication ID +* Params<2> = publication description +* Params<3> = system access list +* Params<4> = dictionary pub ID or 0 +* Output: NONE +* Note: This function doesn't support changing the description for a +* Q-pointer publication at this time. +*********************************************************************** +RepUpdatePublishedFile: + + Error = 0 + PubKey = Params<1> + Description = Params<2> + AccessList = Params<3> + PubRecord = "" + + Open '', "UV_UDRPUB" To UvPubFvar Then + Readu PubRecord From UvPubFvar, PubKey Then + PubRecord<3> = Description + PubRecord<6> = AccessList + + Write PubRecord On UvPubFvar, PubKey Else + Error = EADM.CANTWRITE + End + End Else + Error = EADM.CANTREAD + End + Close UvPubFvar + End Else + Error = EADM.CANTOPEN + End + + Return + +*********************************************************************** +* RepUpdateRepSystem - Updates the Rep system information +* +* Input: New Rep system details +* Output: NONE +*********************************************************************** +RepUpdateSystem: + + Error = 0 + SysKey = Params<1> + HotStandby = Params<5> + Rec = "" + LogState = 0 + + * Check the hot standby state must sure that is the hot standby state + * is changing to not being hot standby that there are no hot standby + * subscribers. + Open '', "UV_UDRSYS" To UvSysFvar Then + Readu Rec From UvSysFvar, SysKey Then + + If Trim(Rec<4>) NE "" Then + If Rec<5> Then + * Check the hotstandby state make sure that if the hotstandby state + * is changing to not being hot standby that there are no hot standby + * subscribers. + + If Not(HotStandby) Then + EXECUTE "SELECT UV_UDRSUB WITH HOTBACKUP NE 0 AND PUB_SYS EQ ":SysKey + If @SELECTED Then + Error = EADM.ACTIVESUBS + Goto Exit.UpdateRepSys + End + End + End + If Rec<3> NE Params<3> Then + * Send upate message to daemon + * Get Log State for the subscription system + RECIO(LogState, RPINFO$REP.STATE, RECIO$RPINFO) + + * Test to see if the daemon is running + If LogState Then + Error = UDRsetshmmessage(UDR.REPUPDSYS, SysKey, 0, 0, UDRREP) + If Error Then + Error = EADM.BADCALL + End + End + End + End + Rec<2> = Params<2> + Rec<3> = Params<3> + Rec<5> = HotStandby + Write Rec On UvSysFvar, SysKey Else + Error = EADM.CANTWRITE + End + End Else + Error = EADM.CANTREAD + End + Close UvSysFvar + End Else + Error = EADM.CANTOPEN + End + +Exit.UpdateRepSys: + Return + +*********************************************************************** +* RepUpdateSubscription - Updates the subscription information +* +* Input: New Subscription details +* Output: NONE +* Note: This function doesn't support changing the description for a +* Q-pointer subscription at this time. +*********************************************************************** +RepUpdateSubscription: + + Error = 0 + SubKey = Params<1> + Description = Params<2> + HotStandby = Params<3> + PubKey = "" + SysKey = "" + Rec = "" + Open '', "UV_UDRSUB" To UvSubFvar Then + Readu Rec From UvSubFvar, SubKey Then + + PubKey = Rec<4> + SysKey = Rec<5> + + * Check to see if the subscription is a hot standby one if + * it is, check to see if there is already a hot standby for the + * publication file specified. + If HotStandby Then + EXECUTE "SELECT UV_UDRSUB WITH PUB_KEY = ":PubKey:" AND WITH HOTBACKUP NE '' AND WITH PUB_SYS = ":SysKey:" AND WITH @ID NE ":SubKey + IF @SELECTED Then + Error = EADM.PUBHASHOTBACKUP + Goto Exit.UpdateSubscription + End + End + Rec<3> = Description + Rec<7> = HotStandby + Write Rec On UvSubFvar, SubKey Else + Error = EADM.CANTWRITE + End + End Else + Error = EADM.CANTREAD + End + Close UvSubFvar + End Else + Error = EADM.CANTOPEN + End + +Exit.UpdateSubscription: + Return + +****************************************************************************** +* RepVersionInfo - Receives the replication Admin client version info and +* returns the replication server version info. +* +* Input: Replication version that the client supports. +* Output: Replication version that the server supports. +****************************************************************************** +RepVersionInfo: + + RepAdminClientVersion = Params<1> + OutData<-1> = RepServerVersion + + Return + +******************************************************************** +* ResetSpooler - Resets the spooler daemon +* Unix only +* Input: NONE +* Output: NONE +******************************************************************** +ResetSpooler: + +************************** +* OS specific code start * +************************** + + If OS.TYPE = "UNIX" Then + GoSub CheckSpooler + If Error # 0 Then + Return + End + ExLine = USA.PATH : " -R" + GoSub ShellCommand + End + +************************ +* OS specific code end * +************************ + + Return + +******************************************************************** +* ResolveDeadLock - Resolve a current deadlock +* +* Input: User No +* Output: NONE +******************************************************************** +ResolveDeadLock: + + Error = 0 + Userno = 0 + +* Using the -victim option from and the pid from the client +* remove the problem process. + Userno = Params<1> + ExLine:= UVHOMEBIN:"uvdlockd -victim ":Userno + GoSub ShellCommand + + Return + +********************************************************************** +* RollFwdToFile - Perform rollforward updates, redirecting +* output to uvrolf.info file +* +* Input: Command line arguments for uvrolf +* Output: Contents of uvrolf.res file +********************************************************************** +RollFwdToFile: + + RollfParams = Trim(Params) + ResFile = UV.ROOT : OS.SEP : "uvrolf.res" + +* First delete the uvrolf.res file + + ExLine = RM.CMD : " -f " : ResFile + Gosub ShellCommand + +* Now do the rollforward. This could take some time + + ExLine = "uvrolf " : RollfParams + Gosub UvCommand + +* Now return the contents of the uvrolf.res file + +************************** +* OS specific code start * +************************** + + If OS.TYPE = "UNIX" Then + ExLine = "cat " + End Else + ExLine = "type " + End + +************************ +* OS specific code end * +************************ + + ExLine := ResFile + Gosub ShellCommand + OutData = Out + + Return + +********************************************************************** +* SaveDeadLockConfig - Saves the dead locking config information +* +* Input: Deadlock config information +* Output: None +********************************************************************** +SaveDeadLockConfig: + + rec="" + line = "" + ReturnCode = 0 + line.no = 0 + eof = 0 + found.start = 0 + found.timer = 0 + found.resolve = 0 + found.logdir = 0 + +* Load client values. + timer = Params<1> + startval = Params<2> + res.strategy = Params<3> + log.directory = Params<4> + + +* Open the uvdlockd config file. + config.file = UVHOME : OS.SEP : "uvdlockd.config" + OpenSeq config.file To FConfig.file Then + + * Parse the current values from the file and replace with the new values + Loop + ReadSeq line From FConfig.file else eof = 1 + Until eof Do + Begin Case + Case line[1,3]='sta' + line="start=":startval + found.start = 1 + Case line[1,3]='tim' + line="timer=":timer + found.timer = 1 + Case line[1,3]='res' + line="res=":res.strategy + found.resolve = 1 + Case line[1,3]='log' + line="log=":log.directory + found.logdir = 1 + Case 1 + line=line + End Case + line.no += 1 + rec< line.no > = line + repeat + + CloseSeq FConfig.file + + * If the entry was not found add it. + If found.start = 0 Then + line.no +=1 + rec="start=":startval + End + If found.timer = 0 Then + line.no += 1 + rec = "timer=":timer + End + If found.resolve = 0 Then + line.no += 1 + rec = "res=":res.strategy + End + If found.logdir = 0 Then + line.no += 1 + rec = "log=":log.directory + End + OpenSeq config.file TO FConfig.file Else + ReturnCode = EADM.NOFILE + End + + FOR i = 1 TO line.no + WriteSeq rec< i > TO FConfig.file else + ReturnCode = EADM.CANTWRITE + End + Next i + + End + Else + * We could not open the file, we assume that it is + * not there and create it + Create FConfig.file Then + rec="" + rec<1>="start=":startval + rec<2>="timer=":timer + rec<3>="res=":res.strategy + rec<4>="log=":log.directory + Convert @FM To Char(10) in rec + WriteSeq rec To FConfig.file Else + ReturnCode =EADM.CANTWRITE + End + CloseSeq FConfig.file + End Else + ReturnCode = EADM.CANTCREATE + End + End + + Error = ReturnCode + Return + +************************************************************************ +* SaveNodes - Save nodes to /etc/hosts (unix only) +* If the node is a new node, the client will +* already have checked for duplicates +* +* Input: Key - 1 Add node +* 2 Delete +* 3 Modify +* Node name +* IP address +* New node name (Modify only) +* New IP address (Modify only) +* Output: NONE +************************************************************************ +SaveNodes: + +************************** +* OS specific code start * +************************** + + If OS.TYPE = "UNIX" Then + Key = Params<1> + NodeName = Params<2> + IPAddr = Params<3> + If Key = 3 Then + NewNodeName = Params<4> + NewIPAddr = Params<5> + End + + Gosub ReadAndConvertHosts + If Error = 0 Then + Begin Case + Case Key = 1 + * Add a node - this can either be a synonym for an existing + * IP address, or a completely new node + + Find IPAddr In HostData Setting i, j, k Then + HostData = NodeName + End Else + HostData<-1> = IPAddr : @vm : NodeName + End + + Case Key = 2 + * Delete a node - this may just mean deleting a synonym + * or may mean deleting the whole node + + Find NodeName In HostData Setting i, j, k Then + Del HostData + If HostData = "" Then + Del HostData + Del OrigHosts + End + End + + Case Key = 3 + * Modify node: + * + * If the IP address has changed, remove the node + * name from the old IP address (removing the whole node if + * this was the only name there), check if the new IP address + * already exists - if it does, add the new node name to it, + * if it doesn't, create a new node. + * + * If the IP address hasn't changed, then the node name has, + * just find the node name and replace it with the new one + + If IPAddr <> NewIPAddr Then + Find NodeName In HostData Setting i, j, k Then + Del HostData + If HostData = "" Then + Del HostData + Del OrigHosts + End + End + Find NewIPAddr In HostData Setting i, j, k Then + HostData = NewNodeName + End Else + HostData<-1> = NewIPAddr : @vm : NewNodeName + End + End Else ; * Nodename change only + Find NodeName In HostData Setting i, j, k Then + HostData = NewNodeName + End + End + End Case + + * Convert the data back into the hosts file format and put + * back comments, then write the data back to the hosts file + + WriteHosts = HostData + For Index = 1 To Dcount(HostData, @fm) + If OrigHosts[1, 1] = "#" Then + WriteHosts = OrigHosts + End Else + Pos = Index(OrigHosts, '#', 1) + If Pos Then + WriteHosts := OrigHosts[Pos, Len(OrigHosts)] + End + End + Next Index + Convert @sm:@vm:@fm To ' ':Char(9):Char(10) In WriteHosts + WriteU WriteHosts To ETC.FVAR, "hosts" Locked + Error = EADM.RECLOCKED + End Else + Error = EADM.CANTWRITE + End + End + End + +************************ +* OS specific code end * +************************ + + Return + +************************************************************************ +* SaveUVCommand - Saves one or more universe commands to the +* VOC as either a Sentence (one command) or a +* Paragraph (multiple commands) +* +* Input: Record name +* Record data: S or PA +* UniVerse command +* UniVerse command +* ..... +* Output: NONE +************************************************************************ +SaveUVCommand: + + RecName = Params<1> + Pos = Index(Params, @fm, 1) + RecData = Params[Pos + 1, 9999] + + Write RecData To VOC, RecName On Error + Error = EADM.CANTWRITE + End Locked + Error = EADM.RECLOCKED + End Else + Error = EADM.CANTWRITE + End + + Return + +********************************************************************** +* SetActiveFiles - Activates or deactivates a single file for +* transaction logging. If the file is a type 1 +* or type 19 file, an error will be returned. +* +* Input: Key 1 - Activate +* 2 - De-activate +* File info: +* Account +* File +* Output: NONE +********************************************************************** +SetActiveFiles: + + Key = Params<1> + If Key = 1 Then Key = 10 Else Key = 11 ; * don't prompt from log_main + + Account = Params<2, 1> + FileName = Params<2, 2> + +* Look at file name to find out if it is a file, a dictionary (D_) +* or a PICK dictionary (P_) + + DictPart = "" + If FileName[1,2] = "D_" Then + DictPart = "DICT" + FileName = FileName[3, Len(FileName)] + FileType = 1 + End Else If FileName[1,2] = "P_" Then + DictPart = "PDICT" + FileName = FileName[3, Len(FileName)] + FileType = 2 + End Else + FileType = 0 + End + + ExLine = 'log_main ':Key:' ':Account:' ':FileType:' ' + ExLine := DictPart:' ':FileName:'' + Gosub UvCommand + +* Check for error returned because file was type 1 or type 19 + + If Index(Out, "A type 1 or 19 file", 1) # 0 Then + Error = EADM.TYPE1OR19 + End Else + + * Now check for success, otherwise return error and error text + + If Index(Out, "Activating File ", 1) = 0 Then + Error = EADM.ACTIVATEFAILED + OutData = Trim(Out) + End + End + + Return + +********************************************************************** +* SetLogFiles - Add or drop logs +* +* Input: Key: 1 - Add logs +* 2 - Drop logs +* Number of logs to add/drop +* Log file size (if Key = 1) +* Output: NONE +********************************************************************** +SetLogFiles: + + Key = Params<1> + NumFiles = Params<2> + If (Key = "1") Then + Startoff = Params<4> + End Else + Startoff = Params<3> + End + If DEBUGGING Then + LogText = "Key = ":Key + Gosub WriteDbg + LogText = "Startoff = ":Startoff + Gosub WriteDbg + LogText = "Params<3> = ":Params<3> + Gosub WriteDbg + LogText = "Params<4> = ":Params<4> + Gosub WriteDbg + End + + If Startoff NE "" Then + If Key = "1" Then + FileSize = Params<3> + ExLine = "CREATE.LFILERAW " : FileSize : " " : NumFiles : " " : Startoff + End Else + * First get the logging state + LogState = "" + RECIO(LogState, FINFO$AI.STATE, RECIO$FINFO) + If DEBUGGING Then + LogText = "LogState = ":LogState + Gosub WriteDbg + End + * If the LogState is SHUTDOWN, then we use one type of + * algorithm to drop and reorder the logs. This state + * or UNINITAILIZED. + If LogState = AI$DISABLED OR LogState = AI$UNINIT OR LogState = AI$INACTIVE THEN + ExLine = "DELETE.LFILERAW " : NumFiles + End + Else If LogState = AI$LOGGING THEN + * If the LogState is ENABLED, then we only allow drop logs + * to logfiles when the offsets are sequenced from smallest + * to highest. + ExLine = "DELETE.LFILERAW2 " : NumFiles + End + Else + * Just report the error and return + Error = EADM.WRONGSTATE + Return + End + End + End + Else + If Key = "1" Then + FileSize = Params<3> + ExLine = "CREATE.LFILE " : FileSize : " " : NumFiles + End Else + ExLine = "DELETE.LFILE " : NumFiles + End + End + If DEBUGGING Then + LogText = "Key = ":Key + Gosub WriteDbg + LogText = "Startoff = ":Startoff + Gosub WriteDbg + LogText = "Params<3> = ":Params<3> + Gosub WriteDbg + LogText = "Params<4> = ":Params<3> + Gosub WriteDbg + End + If DEBUGGING Then + LogText = "ExLine before TCLCommand = ":ExLine + Gosub WriteDbg + LogText = "Out = ":Out + Gosub WriteDbg + End + * + * Execute the program choosen: + * VOC Actual Program + * ---------------------------------- + * CREATE.LFILE -> CR.LFILE.B + * DELETE.LFILE -> DL.LFILE.B + * CREATE.LFILERAW -> CR.LFILERAW.B + * DELETE.LFILERAW -> DL.LFILERAW.B + * DELETE.LFILERAW2 -> DL.LFILER2.B + Gosub TCLCommand + If DEBUGGING Then + LogText = "ExLine = ":ExLine + Gosub WriteDbg + LogText = "Out = ":Out + Gosub WriteDbg + End + If Out # "" Then + Begin Case + Case Out[1,2] = "10" ; * Create file failed + Error = EADM.CANTCREATELOG + Case Out[1,2] = "36" ; * Bad RawOffset specified + Error = EADM.BADOFFSET + Case Out[1,2] = "39" ; * Logging in wrong state + Error = EADM.WRONGSTATE + Case Out[1,2] = "40" + Error = EADM.DROPRAWLOG ; * Drop log failed + Case Out[1,2] = "41" + Error = EADM.DROPRAWLOG2 ; * Drop log failed + Case 1 + * success + End Case + If DEBUGGING Then + LogText = "Error = ":Error + Gosub WriteDbg + End + End + + Return + +********************************************************************** +* SetLoggingConfig - Makes changes to transaction logging config +* If logdir hasn't changed it will be null. If +* the log directory is being changed and the +* directory it is being changed to already exists, +* an error will be returned so that the client +* can ask the user if they want to use this dir. +* If they do want to use it, SetLoggingConfig will +* be called a second time with the "Use existing +* directory" flag set to true +* +* Input: Log directory (or null) +* Use existing directory (or null) +* Checkpoint flag +* Archive flag +* Archive type (only if Archive flag = 1) +* 0 - disk +* 1 - tape +* Device list (only if Archive type = 1) +* Output: NONE +********************************************************************** +SetLoggingConfig: + + LogDir = Params<1> + UseExistingDir = Params<2> + If Params<3> = "1" Then + CheckpointMode = "ON" + End Else + CheckpointMode = "OFF" + End + If Params<4> = "1" Then + ArchiveMode = "ON" + End Else + ArchiveMode = "OFF" + End + ArchiveType = Params<5> + DevList = Params<6> + * + * This field is simply filled in when a raw device is used + * LogDir will still be used for Unix logs directory + * + RawDir = Params<7> + If DEBUGGING Then + LogText = "RawDir = ":RawDir + Gosub WriteDbg + End + + If RawDir NE "" Then + ExLine = CDIR.EXECRAW : RawDir : " 1" + Gosub TCLCommand + Out = Trim(Out[1, Len(Out) - 1]) + If Out # "" Then + Begin Case + Case Out = "0" ; * Directory already exists + If UseExistingDir = 0 Then + + * This is the first time in here - set an error so the client + * can ask the user if they want to use this directory + + Error = EADM.DIREXISTS + End Else + + * Second time in, the user wants to use existing dir + + Open 'DICT', "UV_LOGS" To LogFvar Then + Rec = "X" : @fm : RawDir + Write Rec On LogFvar, LOGS.RAWDIR Else + Error = EADM.CANTWRITE + End + End Else + Error = EADM.CANTOPEN + End + End + Case Out = "1" + Error = EADM.BADPATH + Case Out = "2" + Error = EADM.BADRAWDEV + Case 1 + + * Create log directory worked + + End Case + End + End + If LogDir # "" Then + ExLine = CDIR.EXEC : LogDir : " 1" ; * "1" says we are sysadmin + Gosub TCLCommand + Out = Trim(Out[1, Len(Out) - 1]) + If Out # "" Then + Begin Case + Case Out = "0" ; * Directory already exists + If UseExistingDir = 0 Then + + * This is the first time in here - set an error so the client + * can ask the user if they want to use this directory + + Error = EADM.DIREXISTS + End Else + + * Second time in, the user wants to use existing dir + + Open 'DICT', "UV_LOGS" To LogFvar Then + Rec = "X" : @fm : LogDir + Write Rec On LogFvar, LOGS.DIR Else + Error = EADM.CANTWRITE + End + End Else + Error = EADM.CANTOPEN + End + End + Case Out = "1" + Error = EADM.BADPATH + Case 1 + + * Create log directory worked + + End Case + End + End + + If Error = 0 Then + ExLine = "SET.LOG.ATTR CHECKPOINT " : CheckpointMode + ExLine := " ARCHIVE ": ArchiveMode + If ArchiveType = 1 Then ; * Tape + ExLine := " DEVICELIST " : Convert(@vm, " ", DevList) + End + Gosub TCLCommand + End + + Return + +************************************************************************ +* SetRPCPort - Sets RPC port number unix only +* +* Input: Port number +* Output: NONE +************************************************************************ +SetRPCPort: + +************************** +* OS specific code start * +************************** + + If OS.TYPE = "UNIX" Then + PortNo = Params<1> + PortString = "uvrpc" + PortComment = "# uvNet rpc port" + Gosub SetPort + + End + +************************ +* OS specific code end * +************************ + + Return + +********************************************************************* +* SetPrinterGroup - Creates, modifies or deletes a printer group +* Unix only +* +* Input: Printer group data +* Output: NONE +********************************************************************** +SetPrinterGroup: + +************************** +* OS specific code start * +************************** + + If OS.TYPE = "UNIX" Then + PGroups = Params + PGroupFile = SPOOL.DIR:"/print_group" + OpenSeq PGroupFile To PGroupFvar Else + Create PGroupFvar Else + Error = EADM.CANTOPEN + Return + End + End + Status FileStats From PGroupFvar Then + PGroupPerms = Oconv(FileStats<5>, "MO")[4,3] + End Else + PGroupPerms = 0 + End + Convert @VM:@SM To ":":"," In PGroups + NumPGroups = DCount(PGroups, @FM) + For I = 1 To NumPGroups + WriteSeq PGroups On PGroupFvar Else + Error = EADM.CANTWRITE + CloseSeq PGroupFvar + Return + End + Next I + WEOFSeq PGroupFvar + CloseSeq PGroupFvar + If PGroupPerms # 644 Then + ExLine = "/bin/chmod 644 ":PGroupFile + GoSub ShellCommand + End + End + +************************ +* OS specific code end * +************************ + + Return + +******************************************************************************* +* SetSpoolConfig - Sets spooler configuration parameters. +* There is also a flag to say whether the administrator +* wishes to restart the spooler +* Unix only +* +* Input: Spooler directory +* Error log path +* Activity log path +* Logging flag +* Chronological order flag +* Timer value +* Restart spooler flag +* Output: Result code: (only codes 0 & 1 will be +* returned if no restart was +* requested) +* 0 Changes succeeded +* 1 Failed to copy changes into place, +* restarted spooler with old settings +* (if restart specified) +* 2 Failed to copy changes into place, +* failed to restart spooler with old +* settings +* 3 Failed to restart with new settings, +* restarted with old settings, changes +* not saved +* 4 Failed to restart with new or old +* settings, changes not saved +* +* Other params are dependent on result: +* +* Result Extra params +* +* 0 path of saved uv.rc file +* 1 error from copy +* 2 error from copy +* error from restart +* erroneous usd command line +* 3 error from restart +* erroneous usd command line +* 4 error from first restart +* erroneous usd command line +* +******************************************************************************* +SetSpoolConfig: + +************************** +* OS specific code start * +************************** + + If OS.TYPE = "UNIX" Then + NewSpoolDir = Params<1> + NewErrLog = Params<2> + NewActLog = Params<3> + NewLogFlag = Params<4> + NewOrderFlag = Params<5> + NewTimerVal = Params<6> + RestartFlag = Params<7> + + NewUSDScript = USD.SCRIPT + + * First validate the parameters + + OpenPath NewSpoolDir To TFile Else + Error = EADM.BADSPOOLDIR + Goto ExitSetSpoolConfig + End + Close TFile + + * Error log and Activity log can either be directory paths or + * file names - if the path given cannot be opened, assume its + * a non-existant file name and try to open the directory above it + + OpenPath NewErrLog To TFile Else + If NewErrLog[Len(NewErrLog)] = "/" Then + NewErrLog = NewErrLog[1, Len(NewErrLog) - 1] + End + Levels = Count(NewErrLog, "/") + TempPath = NewErrLog[1, Index(NewErrLog, "/", Levels)] + OpenPath TempPath To TFile Else + Error = EADM.BADERRLOG + Goto ExitSetSpoolConfig + End + End + Close TFile + + OpenPath NewActLog To TFile Else + If NewActLog[Len(NewActLog)] = "/" Then + NewActLog = NewActLog[1, Len(NewActLog) - 1] + End + Levels = Count(NewActLog, "/") + TempPath = NewActLog[1, Index(NewActLog, "/", Levels)] + OpenPath TempPath To TFile Else + Error = EADM.BADACTLOG + Goto ExitSetSpoolConfig + End + End + Close TFile + + * Validation over, get down to work If the administrator wanted + * to restart the spooler, stop it before writing to the uvrc + * file and start it again when we've finished. + + If UVRC.OPEN = False Then + OpenSeq UVRCFILE To UVRC Else + Error = EADM.CANTOPENUVRC + Goto ExitSetSpoolConfig + End + UVRC.OPEN = True + End + + If RestartFlag = 1 Then + ExLine = USA.PATH:" -z" + GoSub ShellCommand + End + + * Open a temporary file to create a new uvrc file into + +OpenNewfile: + NewUvrc = "/tmp/sp":Date():".":Time() + OpenSeq NewUvrc To OutFile Else + Create OutFile Else + Error = EADM.CANTOPENTMPFL + Goto ExitSetSpoolConfig + End + Goto OpenNewfile + End + + * Go through the uvrc file searching for the 4 lines which + * contain spooler configuration info - the logic for this + * section of code is taken from the SP.PARAMS.B module + + EOF = False + Loop + ReadSeq Line From UVRC Else EOF = True + Until EOF + SplLine = (Index(Line, "spoolDIR", 1) And Index(Line, "=", 1)) + ErrLine = (Index(Line, "errlogDIR", 1) And Index(Line, "=", 1)) + ActLine = (Index(Line, "actlogDIR", 1) And Index(Line, "=", 1)) + UsdLine = (Index(Line, "bin/usd", 1)) + NewLine = Line + Begin Case + + * NOTE: the ordering of the cases is important - ErrLine and + * ActLine MUST come before SplLine as SplLine will also be + * set for those lines + + Case ErrLine + + * Check to see if error log path is the same as spool dir + + EqIndex = Index(Line, "=", 1) + If NewErrLog = NewSpoolDir Then + NewLine = Line[1, EqIndex]:"$spoolDIR" + End Else + NewLine = Line[1, EqIndex]:NewErrLog + End + NewUSDScript<2> = Trim(NewLine) + + Case ActLine + + * Check to see if activity log path is the same as spool dir + + EqIndex = Index(Line, "=", 1) + If NewActLog = NewSpoolDir Then + NewLine = Line[1, EqIndex]:"$spoolDIR" + End Else + NewLine = Line[1, EqIndex]:NewActLog + End + NewUSDScript<3> = Trim(NewLine) + + Case SplLine + + * This code is taken directly from SP.PARAMS.B. What it + * appears to be doing is checking whether the new value + * of Spool Dir is the same as that held in the .uvconfig + * file - if it is, then the spoolDIR variable is got by + * extracting the value from the .uvconfig file, if it is + * different, then it is just set to the value given by the user + + Tunable = "`bin/analyze.shm -t0 | grep UVSPOOL | cut -d= -f2`" + ExLine = "bin/analyze.shm -t0 | grep UVSPOOL | cut -d= -f2" + GoSub ShellCommand + EqIndex = Index(Line, "=", 1) + If Out<1> = NewSpoolDir Then + NewLine = Line[1, EqIndex]:Tunable + End Else + NewLine = Line[1, EqIndex]:NewSpoolDir + End + NewUSDScript<1> = Trim(NewLine) + + Case UsdLine + + * Set up the usd command line. If error log or activity + * log are different to spooldir, specify them on the + * command line + + NewLine = Line[1, UsdLine-1]:"bin/usd $spoolDIR" + If NewErrLog # NewSpoolDir Then + NewLine := " -e $errlogDIR" + End + If NewActLog # NewSpoolDir Then + NewLine := " -a $actlogDIR" + End + If NewLogFlag = 1 Then + NewLine := " -L" + End + If NewOrderFlag = 1 Then + NewLine := " -t" + End + If NewTimerVal # "10" Then + NewLine := " -w ":NewTimerVal + End + NewUSDScript<4> = Trim(NewLine) + + End Case + + WriteSeq NewLine To OutFile Else + Error = EADM.CANTWRITEUVRC + CloseSeq OutFile + Goto ExitSetSpoolConfig + End + Repeat + CloseSeq UVRC + UVRC.OPEN = False + CloseSeq OutFile + + * Now copy the new file over the original uvrc file, making + * a copy of the original in /tmp/uvrcDATE.TIME + + TmpFile = "/tmp/uvrc":Date():".":Time() + ExLine = "cp ":UVRCFILE:" ":TmpFile:OS.CMDSEP:" cp ":NewUvrc:" ":UVRCFILE + ExLine := OS.CMDSEP:" rm ":NewUvrc + GoSub ShellCommand + If Out # "" Then + CopyErr = Out + If RestartFlag Then + + * Copy failed, restart using original usd script + + ExLine = Convert(@FM, ";", USD.SCRIPT) : " sleep 3" + GoSub ShellCommand + If Out # "" Then + OutData<1> = 2 ; * copy and restart failed + OutData<2> = CopyErr ; * error from copy + OutData<3> = Out ; * error from restart + OutData<4> = ExLine ; * erroneous usd script + Goto ExitSetSpoolConfig + End + End + OutData<1> = 1 ; * copy failed + OutData<2> = CopyErr ; * error from copy + Goto ExitSetSpoolConfig + End Else + If RestartFlag Then + + * Copy worked, restart using new usd script + + ExLine = Convert(@FM, ";", NewUSDScript) : " sleep 3" + GoSub ShellCommand + If Out # "" Then + + * Restart with new script failed, restore uvrc and + * restart with original usd script + + RestartErr = Out + RestartScript = ExLine + ExLine = "mv ":TmpFile:" ":UVRCFILE + GoSub ShellCommand + ExLine = Convert(@FM, ";", USD.SCRIPT) :" sleep 3" + GoSub ShellCommand + If Out # "" Then + OutData<1> = 4 ; * Failed to restart + OutData<2> = Out ; * error from restart + OutData<3> = ExLine ; * erroneous usd script + End Else + OutData<1> = 3 ; * Restarted original + OutData<2> = RestartErr ; * error from new restart + OutData<3> = RestartScript ; * erroneous usd script + End + Goto ExitSetSpoolConfig + End + End ; * If RestartFlag + End + + OutData<1> = 0 ; * everything worked + OutData<2> = TmpFile ; * path of saved uv.rc file + +ExitSetSpoolConfig: + + GoSub InitSpooler ; * Re-initialize spooler variables in named common + + End + +************************ +* OS specific code end * +************************ + + Return + +************************************************************************ +* SetTelnetInfo - Sets telnet data - only the items which have +* been changed will have values. NT only +* +* Input: Telnet port number (or null) +* User policy (or null) +* (0 - attach to home account +* 1 - attach to home directory +* 2 - attach to any account +* 3 - attach to any directory) +* Max. logon attempts (or null) +* Logon pause (seconds) (or null) +* Logon timeout (seconds) (or null) +* Termination pause (seconds) (or null) +* Output: NONE +************************************************************************ +SetTelnetInfo: + +************************** +* OS specific code start * +************************** + + If OS.TYPE <> "UNIX" Then + + DECLARE GCI UVREGputint + + PortNo = Params<1> + UserPolicy = Params<2> + MaxLogon = Params<3> + LogonPause = Params<4> + LogonTimeout = Params<5> + TermPause = Params<6> + + If PortNo # "" Then + PortString = "uvtelnet" + PortComment = "# uniVerse telnet port" + Gosub SetPort + End + + If Error = 0 And UserPolicy # "" Then + Result = UVREGputint("UserPolicy", UserPolicy) + If Result # 0 Then + Error = EADM.CANTWRITE + End + End + + If Error = 0 And MaxLogon # "" Then + Result = UVREGputint("MaxLogonAttempts", MaxLogon) + If Result # 0 Then + Error = EADM.CANTWRITE + End + End + + If Error = 0 And LogonPause # "" Then + Result = UVREGputint("LogonPause", LogonPause) + If Result # 0 Then + Error = EADM.CANTWRITE + End + End + + If Error = 0 And LogonTimeout # "" Then + Result = UVREGputint("LogonTimeout", LogonTimeout) + If Result # 0 Then + Error = EADM.CANTWRITE + End + End + + If Error = 0 And TermPause # "" Then + Result = UVREGputint("TerminationPause", TermPause) + If Result # 0 Then + Error = EADM.CANTWRITE + End + End + End + +************************ +* OS specific code end * +************************ + + Return + +********************************************************************** +* SetupDiagnosicsRun - Setup the file fix diagnosics system +* +* Input: Diag details +* Output: +********************************************************************** + +SetupDiagnosicsRun: + + Dim CALL.ARGS(10,2) + Dim RES.ARGS(20,2) + Output = "" + FixFilename = Params<1> + FixFilePath = Params<2> + FileFixLevel = Params<3> + FileFixFix = Params<4> + FileFixErrorLevel = Params<5> + FileFixOutput = Params<6> + FileFixOutputPath = Params<7> + FileFixLogging = Params<8> + FileFixLoggingPath = Params<9> + + If FileFixOpen = 0 Then + Gosub StartFileFixServer + End + + If Not(Error) Then + * We are ok, start the call + + * First Open the File + Gosub OpenFileFixFile + If Not(Error) Then + * Setp the subsystem + Gosub SetupFileFix + If Not(Error) Then + * Setup the logging + Gosub SetupLoggingFileFix + End + End + End + Return + +************************************************************************ +* SetUVConfig - Write new configuration parameters back to +* the uvconfig file +* +* Input: Array of Param name, Param value pairs +* Output: NONE or Validation error +************************************************************************ +SetUVConfig: + + FileName = UVHOME:OS.SEP:"uvconfig" + KeepFileOpen = True + Gosub ReadSeqFile + Dc = Dcount(Params, @fm) + For I = 1 to Dc + ParamName = Params + ParamValue = Params + Occur = 1 + Loop + FindStr ParamName In NewText,Occur Setting Pos Else + Pos = -1 + End + Until Pos < 0 Or NewText[1,1] # COMMENT$CHAR Do + Occur += 1 + Repeat + If Pos < 0 Then + NewText<-1> = ParamName:" ":ParamValue + End Else + NewText = ParamName:" ":ParamValue + End + Next I + UnixFileOpen = True + Gosub WriteSeqFile + ExLine = "uvregen" + Gosub UvCommand + +* If result of uvregen command starts with "uvregen:" then it worked, +* otherwise pass the error message back as its probably a validation +* error + + If Out[1, 8] = "uvregen:" Then + OutData = "" + End Else + OutData = Out + Error = EADM.UVREGENFAILED + End + + Return + +******************************************************************************* +* ShmGetProgSize: - returns the size in bytes of a program +* +* Input: Account @FM File @FM Program name +* Output: Prog size +******************************************************************************* + +ShmGetProgSize: + + Account = Params<1> + File = Params<2> + Prog = Params<3> + ExLine = "get_prog_size ":Account:" ":File:" ":Prog + GoSub UvCommand + +* Extract size from the output. If the size couldn't be worked out, +* then it will be set to -1, we should return "?" + + If Field(Out, " ", 1) = "0" Then + Size = Field(Out, " ", 3) + If Size = -1 Then Size = "?" + End Else + Size = "?" + End + OutData = Size + Return + +****************************************************************************** +* ShmListSHMTOLOAD: - Gets data pertaining to the SHM.TO.LOAD file. +* First works out the maximum size of the shared +* memory segment, then, for each entry in the +* SHM.TO.LOAD file, works out the size of the program +* +* Input: NONE +* Output: Max size of shmseg +* Dynamic array of Account, File, Prog, Size +****************************************************************************** + +ShmListSHMTOLOAD: + +* Check if we have access to the SHM.TO.LOAD file - if it exists +* but we don't have access, return an error. If it doesn't exist, +* this isn't a problem as it will be created in ShmWriteSHMTOLOAD + + ShmPath = UVHOME : OS.SEP : SHM.TO.LOAD + If access(ShmPath, R$OK + W$OK) Then ; * Can't access, check why + If Not(access(ShmPath, F$OK)) Then + Error = EADM.NOACCESS + Return + End + End + +* Lock SHM.TO.LOAD file - this lock will be released either when +* we write new details or when the user presses CANCEL. Don't worry +* if the read fails, it means the file doesn't exist yet + + Open "&UFD&" To UFDFvar Then + ReadU ShmData From UFDFvar, SHM.TO.LOAD Then + End + End Else + Error = EADM.CANTOPEN + Return + End + +* Get maximum size for shared memory + + ExLine = "get_shm_size" + GoSub UvCommand + OutData = Out + +* Process each line in SHM.TO.LOAD - extract Account, File, Prog, +* then find the size of the program. If the size cannot be +* calculated, set size to "?" + + + NumProgs = DCount(ShmData, @FM) + For i = 1 To NumProgs + Acc = Field(ShmData, @VM, 1) + Fil = Field(ShmData, @VM, 2) + Prog = Field(ShmData, @VM, 3) + ExLine = "get_prog_size ":Acc:" ":Fil:" ":Prog + GoSub UvCommand + If Field(Out, " ", 1) = "0" Then + Size = Field(Out, " ", 3) + If Size = -1 Then Size = "?" + End Else + Size = "?" + End + OutData<-1> = Acc :@VM: Fil :@VM: Prog :@VM: Size + Next i + Return + +******************************************************************************* +* ShmLoad: - Load shared memory with the programs specified in SHM.TO.LOAD +* +* Input: Modification size +* Output: Results of calling load_shm_cat +******************************************************************************* + +ShmLoad: + + ModSize = Params + ExLine = "load_shm_cat ":ModSize + GoSub UvCommand + OutData = Change(Out,@fm,CRLF) + Error = False + Return + +***************************************************************************** +* ShmModify: - Modifies programs running in shared memory +* +* Input: Depends on first argument: +* +* 1 - Delete item from shared +* memory +* 2 - Add item to shared memory +* 3 - Update item +* 4 - Remove shm program segment +* Output: NONE +***************************************************************************** + +ShmModify: + + Key = Params<1> + If Key = 4 Then ; * Remove shm segment + ExLine = "modify_shm ":Key + End Else + Account = Params<2> + File = Params<3> + Program = Params<4> + ExLine = "modify_shm ":Key:" ":Account:" ":File:" ":Program + End + Gosub UvCommand + If Out # "" Then + Error = EADM.SHMMODFAILED + End + Return + +************************************************************************ +* ShmReleaseLock - Releases lock on SHM.TO.LOAD file if user has +* not modified anything +* +* Input: NONE +* Output: NONE +************************************************************************ +ShmReleaseLock: + + Release UFDFvar, SHM.TO.LOAD + Close UFDFvar + + Return + +************************************************************************ +* ShmRunning - returns list of programs running in shared mem +* +* Input: NONE +* Output: Total bytes +* Bytes used +* Dynamic array of Account, File, Prog +************************************************************************ +ShmRunning: + + ExLine = "smat -b" + Gosub UvCommand + +* Check if shared memory is loaded - if not, the 'smat -b' command will +* have returned a null string + + If Out = "" Then + OutData = "" + Return + End + +* Shared memory IS loaded - dissect the output from smat -b. Format eg: +* +* State of shared memory: 4 +* Number of programs loaded into shared memory: 3 +* Size References Users Pathname +* 505 0 0 +* 505 0 0 /pitest/uv831/catdir/!CATS +* 505 0 0 /pitest/uv831/catdir/!EQS +* Overhead for filenames: 346 +* Shared basic memory total bytes: 2059; bytes used: 1861; remaining: 198 +* +* But watch out for items that have been deleted (like the 1st one in +* the example above) + +* First extract TotalBytes. Use ":" and ";" to find positions of +* the data we require, then we're not so language dependent + + NumLines = DCount(Out, @FM) + ByteLine = Out + Pos = Index(ByteLine, ":", 1) + ByteLine = ByteLine[Pos + 1, Len(ByteLine) - Pos] ; * strip unwanted data + Pos = Index(ByteLine, ";", 1) + TotalBytes = Trim(ByteLine[1, Pos - 1]) + +* Then BytesUsed + + Pos = Index(ByteLine, ":", 1) + ByteLine = ByteLine[Pos + 1, Len(ByteLine) - Pos] ; * strip used data + Pos = Index(ByteLine, ";", 1) + BytesUsed = Trim(ByteLine[1, Pos - 1]) + +* Load Account details (name & path) into array so we can use it +* to map pathnames to accounts + + Done = False + I = 1 + Select UVACCOUNT + NumAccounts = @SELECTED + Dim Accounts(NumAccounts, 2) ; * account name, account path + Loop + ReadNext RecId Else Done = True + Until Done + Readv AccPath From UVACCOUNT, RecId, 11 Then + +************************** +* OS specific code start * +************************** + + If OS.TYPE # "UNIX" Then + AccPath = Convert("\ABCDEFGHIJKLMNOPQRSTUVWXYZ", "/abcdefghijklmnopqrstuvwxyz", AccPath) + End + +************************ +* OS specific code end * +************************ + + Accounts(I, 1) = RecId + Accounts(I, 2) = AccPath + I = I + 1 + End + Repeat + +* Now dissect each program line in turn, discarding the deleted ones + + ProgLines = Out[@FM, 5, NumLines - 7] + NumProgs = DCount(ProgLines, @FM) + OutData = TotalBytes :@FM: BytesUsed + For i = 1 To NumProgs + NumSpaces = Count(ProgLines, " ") + Pos = Index(ProgLines, " ", NumSpaces) + Path = ProgLines[Pos + 1, Len(ProgLines) - Pos] + + If Path # "" Then + TempPath = Path + +************************** +* OS specific code start * +************************** + + If OS.TYPE # "UNIX" Then + * Change to unix style pathname + + TempPath = Convert("\ABCDEFGHIJKLMNOPQRSTUVWXYZ", "/abcdefghijklmnopqrstuvwxyz", TempPath) + End + +************************ +* OS specific code end * +************************ + + * Split the pathname into account, file & program - not as + * straightforward as it could be - need to take into account + * type 1 files and account paths that don't have an entry + * in UV.ACCOUNTS. + + * Start by assuming the simple case - this will be correct in + * 99% of cases. Last part of path is the program, second to + * last is the file, everything else is the account path - + * try to match it to an entry in UV.ACCOUNTS + + NumFields = Count(TempPath, "/") + PathIndex = NumFields - 1 + Pos = Index(TempPath, "/", PathIndex) + AccountPath = TempPath[1, Pos - 1] + GoSub FindAccountName + If AccountName <> "" Then ; * found it + Pos2 = Index(TempPath, "/", PathIndex + 1) + FileName = Path[Pos + 1, Pos2 - Pos - 1] + ProgName = Path[Pos2 + 1, 9999] + End Else + * Assume a type1 file is involved here, try to find the type1 + * file in the path, then try to match the account from there + + Type1Found = False + PathIndex = NumFields - 2 + Loop + +************************** +* OS specific code start * +************************** + + If OS.TYPE = "UNIX" Then + Type1Path = AccountPath + ExLine = "ls -a ":Type1Path + End Else + Type1Path = Convert("/", "\", AccountPath) + ExLine = "dir /A ":Type1Path + End + +************************ +* OS specific code end * +************************ + + GoSub ShellCommand + If Index(Out, ".Type1", 1) Then ; * Type1 file found + Type1Found = True + Pos = Index(TempPath, "/", PathIndex) + AccountPath = TempPath[1, Pos - 1] + GoSub FindAccountName + End Else PathIndex = PathIndex - 1 + Until Type1Found Or PathIndex <= 1 ; * always starts with "/" + Repeat + If Not(Type1Found) Then + Pos = Index(TempPath, "/", NumFields - 1) + Pos2 = Index(TempPath, "/", NumFields) + AccountName = Path[1, Pos - 1] + FileName = Path[Pos + 1, Pos2 - Pos - 1] + ProgName = Path[Pos2 + 1, 9999] + End Else ; * type1 found, may or may not have an account match + If AccountName = "" Then ; * no account match + AccountName = AccountPath + End + Pos2 = Index(TempPath, "/", PathIndex + 1) + FileName = Path[Pos + 1, Pos2 - Pos - 1] + ProgName = Path[Pos2 + 1, 9999] + +************************** +* OS specific code start * +************************** + + If OS.TYPE # "UNIX" Then + ProgName = Convert("\", "/", ProgName) + End + +************************ +* OS specific code end * +************************ + + ProgName = Change(ProgName, "/", "") + If ProgName[Len(ProgName), 1] = "?" Then + ProgName = ProgName[1, Len(ProgName) - 1] + End + End + End + + OutData = OutData :@FM: AccountName :@VM: FileName :@VM: ProgName + End + Next i + + Error = False + Return + +***************************************************************************** +* ShmWriteSHMTOLOAD: - Clears the SHM.TO.LOAD file and writes the new +* Data to it +* +* Input: New contents of file +* Output: NONE +***************************************************************************** + +ShmWriteSHMTOLOAD: + + Write Params To UFDFvar, SHM.TO.LOAD Else + Error = EADM.CANTWRITE + End + Close UFDFvar + + Return + +********************************************************************** +* ShutdownDiagnosicsRun - Shutdown the file fix diagnosics system +* +* Input: Diag details +* Output: +********************************************************************** + +ShutdownDiagnosicsRun: + + Dim CALL.ARGS(10,2) + Dim RES.ARGS(20,2) + Output = "" + + If FileFixOpen = 0 Then + Gosub StartFileFixServer + End + + If Not(Error) Then + * We are ok, start the call + + * Shutdown the subsystem + Gosub ShutdownFileFix + End + Return + +************************************************************************ +* SpoolActivityLog - Reads the last 4096 bytes from the activity log +* file +* Unix only. +* +* Input: NONE +* Output: Data from activity log +************************************************************************ +SpoolActivityLog: + +************************** +* OS specific code start * +************************** + + If OS.TYPE = "UNIX" Then + GoSub GetActLogPath + If Error # 0 Then + Return + End + OpenSeq ActLogFile To ActFvar Else + Error = EADM.NOFILE + Return + End + NewText = "" + + * In case the file is huge, seek to the end and go back 16k + * bytes. Ignore the outcome of this - if it fails, it means + * the file isn't that long, so just read the whole file. + * NB. Can't return more data than this at the moment due to + * RPC package size limitations + + Seek ActFvar, -16384, 2 Then + End + Done = False + Loop + ReadSeq Line From ActFvar Else Done = True + Until Done or Status() Do + NewText<-1> = Line + Repeat + CloseSeq ActFvar + OutData = Change(NewText, @FM, CRLF) + End + +************************ +* OS specific code end * +************************ + + Return + +********************************************************************** +* SpoolContinue - Continues a held printer +* Unix only +* +* Input: Printer name +* Output: NONE +********************************************************************** +SpoolContinue: + +************************** +* OS specific code start * +************************** + + If OS.TYPE = "UNIX" Then + GoSub CheckSpooler + If Error # 0 Then + Return + End + ExLine = USA.PATH:" -c -p ":Params + Gosub ShellCommand + End + +************************ +* OS specific code end * +************************ + + Return + +************************************************************************ +* SpoolErrorLog - Reads the last 4096 bytes of the error log +* file +* Unix only +* +* Input: NONE +* Output: Data from error log +************************************************************************ +SpoolErrorLog: + +************************** +* OS specific code start * +************************** + + If OS.TYPE = "UNIX" Then + GoSub GetErrLogPath + If Error # 0 Then + Return + End + OpenSeq ErrLogFile To ErrFvar Else + Error = EADM.NOFILE + Return + End + NewText = "" + + * In case the file is huge, seek to the end and go back 16k + * bytes. Ignore the outcome of this - if it fails, it means + * the file isn't that long, so just read the whole file. + * NB. Can't return more data than this at the moment due to + * limitations in RPC packet size + + Seek ErrFvar, -16384, 2 Then + End + Done = False + Loop + ReadSeq Line From ErrFvar Else Done = True + Until Done or Status() Do + NewText<-1> = Line + Repeat + CloseSeq ErrFvar + OutData = Change(NewText, @FM, CRLF) + End + +************************ +* OS specific code end * +************************ + + Return + +********************************************************************** +* SpoolJobControl - Performs job control functions to: +* put a job on hold +* release a held job +* remove a job from the print queue +* reprint a job +* Unix only +* +* Input: Action key: 1 - Hold +* 2 - Cancel +* 3 - Release +* 4 - Reprint +* JobNo +* Output: NONE +********************************************************************** +SpoolJobControl: + +************************** +* OS specific code start * +************************** + + If OS.TYPE = "UNIX" Then + ControlKey = Params<1> + JobNo = Params<2> + + GoSub CheckSpooler + If Error # 0 Then + Return + End + + ** Check the job exists + + GoSub GetSpoolDetails + Locate JobNo In JobIndex Setting Pos Else + Error = EADM.NOPRINTJOB + Return + End + + Begin Case + Case ControlKey = 1 ; * Hold + ExLine = USM.PATH:" -h ":JobNo + Gosub ShellCommand + + Case ControlKey = 2 ; * Cancel + ExLine = USM.PATH: " -k ":JobNo + Gosub ShellCommand + + Case ControlKey = 3 ; * Release + ExLine = USM.PATH:" -r ":JobNo + Gosub ShellCommand + + Case ControlKey = 4 ; * Reprint + ExLine = USM.PATH:" -q ":JobNo + GoSub ShellCommand + ExLine = USM.PATH:" -r ":JobNo + GoSub ShellCommand + + End Case + End + +************************ +* OS specific code end * +************************ + + Return + +********************************************************************** +* SpoolMount - Mounts a form on a printer +* Unix only +* +* Input: Printer name +* Form name +* Output: NONE +********************************************************************** +SpoolMount: + +************************** +* OS specific code start * +************************** + + If OS.TYPE = "UNIX" Then + GoSub CheckSpooler + If Error # 0 Then + Return + End + PrinterName = Params<1> + FormName = Params<2> + If Upcase(FormName) = "[NULL]" Then + FormName = '""' + End + ExLine = USA.PATH:" -F ":FormName: " -p ":PrinterName + Gosub ShellCommand + End + +************************ +* OS specific code end * +************************ + + Return + +********************************************************************** +* SpoolPrintedAt - Searches the activity log file information +* about jobs printed, using the supplied search +* parameters +* Unix only +* +* Input: Filename +* JobID +* User +* Output: Array of data from activity log: +* JobId +* UID +* File +* Time +* Printer +********************************************************************** +SpoolPrintedAt: + +************************** +* OS specific code start * +************************** + + If OS.TYPE = "UNIX" Then + SearchFile = Params<1> + SearchJobid = Params<2> + SearchUser = Params<3> + + * If a user name has been given as one of the search criteria, then + * try to convert it to a user id + + If SearchUser <> "" Then + ExLine = \grep "^\:SearchUser:\:" /etc/passwd | cut -d":" -f3\ + GoSub ShellCommand + If Out <> "" Then + SearchUser = Out<1> + End + End + + * Now open the activity log and for each line starting with "P" + * (printer information), check search criteria. If it matches + * all the search criteria, add it to the output array + + GoSub GetActLogPath + If Error # 0 Then + Return + End + OpenSeq ActLogFile To ActFvar Then + Done = False + Loop + ReadSeq Line From ActFvar Else Done = True + If Status() Then Done = True + Until Done Do + Convert " " To @FM In Line + If Line[1,1] = "P" Then + Found = True + If SearchFile # "" And SearchFile # Line<6> Then Found = False + If SearchJobid # "" And SearchJobid # Line<4> Then Found = False + If SearchUser # "" And SearchUser # Line<5> Then Found = False + If Found Then + NewLine<1> = Line<4> + NewLine<2> = Line<5> + NewLine<3> = Line<6> + NewLine<4> = Line<9> + NewLine<5> = Line<3> + OutData<-1> = Lower(NewLine) + End + End + Repeat + + * Ensure that the resultant output does not exceed 16K. This + * is due to an RPC restriction on 16 bit client apps. + + If Len(OutData) > 16384 Then + Temp = Right(OutData,16384) + Num = Len(Temp) - index(Temp,@FM,1) + OutData = Right(Temp,Num) + End + + End Else + Error = EADM.CANTOPEN + End + End + +************************ +* OS specific code end * +************************ + + Return + +********************************************************************** +* SpoolPrinterDets - Returns information about jobs on a specific +* printer from the usplog file +* Unix only +* +* Input: Printer name +* Output: Form name +* Status byte +* Job details: Job Id +* Job description +* Owner +* Priority +* Form +* Size +* Copies +* Status +* Delay +* Default form flag +********************************************************************** +SpoolPrinterDets: + +************************** +* OS specific code start * +************************** + + If OS.TYPE = "UNIX" Then + PrinterName = Params<1> + + * First check that the spooler is running + + GoSub CheckSpooler + If Error # 0 Then + Return + End + + GoSub SpStatuses + GoSub GetSpoolDetails + If Error <> False Then + Return + End + + * Get printer details (form and status byte) + + Dc = Dcount(PrinterList,@fm) + For I = 1 To Dc + If PrinterList = PrinterName Then + Temp = Raise(PrinterList) + OutData<1> = Temp<2> ; * Form name + OutData<2> = Temp<5> ; * Status byte + End + Next + + * Now get job details + + For I = 1 To NoJobs + Line = Raise(JobList) + PrinterNo = PrintJobIndex + If PrinterIndex = PrinterName Then + NewLine = Line + NewLine<2> = Line + UserNo = Line + GoSub GetUserName + If UserName <> "" Then + NewLine<3> = UserName + End Else + NewLine<3> = Line + End + NewLine<4> = Line + NewLine<5> = Line + NewLine<6> = Line + NewLine<7> = Line + NewLine<8> = SpStatuses> + If Line = 1 Then + If Line = 1 Then + NewLine<8> := "&" + End Else + NewLine<8> := "*" + End + End + UspDelay = Line + GoSub GetDelayTime + If Hours > 0 Or Mins > 0 Then + NewLine<9> = Hours : ":" : Mins + End Else + NewLine<9> = "" + End + NewLine<10> = ( Line <> PrinterList ) + OutData<-1> = Lower(NewLine) + End + Next + End + +************************ +* OS specific code end * +************************ + + Return + +********************************************************************** +* SpoolSuspend - Suspend a printer +* Unix only +* +* Input: Printer name +* Output: NONE +********************************************************************** +SpoolSuspend: + +************************** +* OS specific code start * +************************** + + If OS.TYPE = "UNIX" Then + GoSub CheckSpooler + If Error # 0 Then + Return + End + ExLine = USA.PATH:" -b -p ":Params + Gosub ShellCommand + End + +************************ +* OS specific code end * +************************ + + Return + +********************************************************************** +* StartDeadLocking - Starts the dead lock process +* +* Input: Deadlock process start settings +* Output: Return Code +********************************************************************** +StartDeadLocking: + + ReturnCode = 0 + Error = ReturnCode + OutData = "" + +* Load client values. + timer = Params<1> + res.strategy = Params<3> + log.directory = Trim(Params<5>) + + ExLine = "" + LockOptions = "-t " : timer : " -r " : res.strategy : " -l " : log.directory:OS.SEP:"uvdlockd.log" + + if OS.TYPE = "MSWIN" then + ExLine = UVHOMEBIN:"uvdlockd.exe ":LockOptions + ExLine = UVHOMEBIN:"uvbootd ":ExLine + + end else + ExLine = UVHOMEBIN:"uvdlockd ":LockOptions + end + + Gosub ShellCommand + Return + +************************************************************************ +* StartSpooler - Starts the spooler daemon using the script +* held in the uv.rc file +* Unix only +* +* Input: NONE +* Output: Output from usd script +************************************************************************ +StartSpooler: + +************************** +* OS specific code start * +************************** + + If OS.TYPE = "UNIX" Then + If SPOOL.DIR = "" Then + Error = EADM.NOSPOOLDIR + Return + End + ExLine = Convert(@FM, ";", USD.SCRIPT) + Gosub ShellCommand + OutData = Out + End + +************************ +* OS specific code end * +************************ + + Return + +********************************************************************** +* StopDeadlocking - Stops the dead lock process +* +* Input: None +* Output: Return Code +********************************************************************** +StopDeadLocking: + + Error = 0 + OutData = "" + ExLine = "" + +* Issue the stop command + ExLine:= UVHOMEBIN:"uvdlockd -stop" + Gosub ShellCommand + + Return + +************************************************************************ +* StopSpooler - Stops the spooler daemon +* Unix only +* +* Input: NONE +* Output: NONE +************************************************************************ +StopSpooler: + +************************** +* OS specific code start * +************************** + + If OS.TYPE = "UNIX" Then + ExLine = USA.PATH : " -z" + GoSub ShellCommand + End + +************************ +* OS specific code end * +************************ + + Return + +********************************************************************** +* TapeTest - Run the tape test program on a DT or DC +* device type +* NOTE: for NT, Rewind path & no-rewind path +* will be the same +* +* Input: Rewind path, no-rewind path, +* block size, device type +* Output: Block size, backup command, restore +* command, RW mode pos, Close on Read, +* Multiple read, account transfer block +* size +********************************************************************** +TapeTest: + RewindPath = Params<1> + NoRewindPath = Params<2> + TestSize = Params<3> + TapeType = Params<4> + +************************** +* OS specific code start * +************************** + + If OS.TYPE = "UNIX" Then + + * Check the device paths are valid (can't do this on NT as tape + * devices aren't files + + OpenSeq RewindPath To TempFvar Then + CloseSeq TempFvar + End + Else + Error = EADM.BADREWIND + Return + End + OpenSeq NoRewindPath To TempFvar Then + CloseSeq TempFvar + End + Else + Error = EADM.BADNOREWIND + Return + End + End + +************************ +* OS specific code end * +************************ + + If BULL Then TestSize = 1024 + If (TestSize = "" Or TestSize = 0) Then TestSize = 512 + ExLine = "tapetest " : RewindPath : " " : NoRewindPath : " " : TestSize + GoSub UvCommand + Flds = Count(Out, @FM) + Success = Out[1,10] + If Success = "SUCCESSFUL" Then + If TapeType = "DC" Then + If BULL Then + OutData<1> = 1024 + OutData<7> = 1024 + End + Else + OutData<1> = 512 + OutData<7> = 512 + End + End + Else + OutData<7> = 16384 + End + +************************** +* OS specific code start * +************************** + + If OS.TYPE = "UNIX" Then + OutData<2> = "find $file -print | cpio -ocvB > $tape" + OutData<3> = "cpio -icvBdum $file < $tape" + End Else + OutData<2> = "" + OutData<3> = "" + End + +************************ +* OS specific code end * +************************ + + OutData<4> = Field(Out, "^", 2) + OutData<5> = Field(Out, "^", 4) + OutData<6> = Field(Out, "^", 6) + End + Else + Error = EADM.TAPETESTFAILED + OutData = Out + End + Return + +****************************************************************************** +* UniVerseBrowse - Like a normal Browse, but instead of browsing the +* OS file system, it browses the uniVerse account/file +* system. The first argument indicates what kind of +* browse (account or file): +* 1 means return all the local files in the account; +* 2 means return all the records in the file. +* +* Input: Key +* Account name to browse +* File name to browse (only if Key = 2) +* Output: List of files or records +****************************************************************************** + +UniVerseBrowse: + + Done = False + BrowseType = Params<1> + AccountName = Params<2> + If BrowseType = 1 then + Write "Q" : @FM : AccountName : @FM : "VOC" : @FM : "D_VOC" On VOC, "BROWSEPTR" + ExLine = "SSELECT BROWSEPTR WITH F1 LIKE F..." + ExLine := " AND F2 UNLIKE ...":OS.SEP:"..." + +************************** +* OS specific code start * +************************** + +* Checking for / on NT as this is still a valid separator in UniVerse files. + + If OS.TYPE # "UNIX" Then + ExLine := " AND F2 UNLIKE .../..." + End + +************************ +* OS specific code end * +************************ + + Gosub TCLCommand + Loop + ReadNext Id From SList Else Done = True + Until Done Do + OutData<-1> = Id + Repeat + End Else + FileName = Params<3> + Write "Q" : @FM : AccountName : @FM : FileName : @FM : "D_VOC" On VOC, "BROWSEPTR" + Open "BROWSEPTR" Then + SSelect + ReadList OutData Then Error = False + Close + End + End + Delete VOC, "BROWSEPTR" + Return + +*********************************************************************** +* Unused - Returns a "Bad Call" error +* +* Input: NONE +* Output: NONE +*********************************************************************** +Unused: + Error = EADM.BADCALL + Return + +********************************************************************** +* UpdateDataSourceEntry - Updates a data source entry +* +* Input: Data Source Name +* Output: None +********************************************************************** +UpdateDataSourceEntry: + + ReturnCode = 0 + pos =0 + DataSource = Params<1> + +* Find the specified entry and update the details. + Locate DataSource In DataSourceArray Setting pos Then + DataSourceDetails = Params<2> + DataSourceDetails = Params<3> + DataSourceDetails = Params<4> + DataSourceDetails = Params<5> + +* Write the details to the file. The Global Error will be set +* by this function and then sent back by this subroutine, with +* any errors on the write + Error = 0 + Gosub WriteDataSources + + End Else + ReturnCode = EADM.NOENTRY + End + + Error = ReturnCode + Return + +********************************************************************** +* UpdateUserInfoDetails - Writes the login account details for +* a specified user +* +* Input: An array of details for a user +* Output: NONE +********************************************************************** +UpdateUserInfoDetails: + + Ok = 0 + Error = 0 + New = Params<1> + Domains = Params<4> + Domain = "" + DomainAccount = "" + LocalMachines = Params<5> + LocalMachine = "" + LocalAccount = "" + Rec = "" + UserInfo = "" + UserId = Params<2> + UserDesc = Params<3> + Lp = 1 + OutData = "" + + If DEBUGGING Then + LogText = "UserId :" : UserId + GoSub WriteDbg + End + * Open the UV.LOGINS file + Open '', "UV.LOGINS" To UvLoginsFvar Then + + If New Then + + Readv Rec From UvLoginsFvar, UserId, 0 Then + Error = EADM.ALREADYEXISTS + Close UvLoginsFvar + Goto Exit.UpdateUserInfoDetails + End + End + + * fill in the user description, if any + Rec<5> = UserDesc + + * loop pairing up all the domains and their corresponding accounts + Rec<1> = "" + Rec<3> = "" + + If DEBUGGING Then + LogText = "Domains :" : Domains + GoSub WriteDbg + End + Loop + Remove Domain From Domains Setting Ok + If DEBUGGING Then + LogText = "Domain :" : Domain + GoSub WriteDbg + End + If Domain Then + If Ok = 4 Then + Remove DomainAccount From Domains Setting Ok + End Else + DomainAccount = "" + End + * Build the return data array + Rec<1, Lp> = Domain + Rec<3, Lp> = DomainAccount + Lp +=1 + End + While Ok Do + Repeat + + * reset the Lp counter as we'll reuse it + Lp = 1 + + Rec<2> = "" + Rec<4> = "" + + Loop + Remove LocalMachine From LocalMachines Setting Ok + If LocalMachine Then + If Ok = 4 Then + Remove LocalAccount From LocalMachines Setting Ok + End Else + LocalAccount = "" + End + * Build the return data array + Rec<2, Lp> = LocalMachine + Rec<4, Lp> = LocalAccount + Lp +=1 + End + While Ok Do + Repeat + + * Write the user details back to the UV.LOGINS file + Write Rec on UvLoginsFvar, UserId Else + Error = EADM.CANTWRITE + End + + Close UvLoginsFvar + End Else + Error = EADM.CANTOPEN + End +Exit.UpdateUserInfoDetails: + Return + +********************************************************************** +* UserList - Returns a list of users (unix only) +* +* Input: NONE +* Output: List of users +********************************************************************** +UserList: + +************************** +* OS specific code start * +************************** + + If OS.TYPE = "UNIX" Then + FileName = "/etc/passwd" + Gosub ReadSeqFile + If Error <> False Then + Error = EADM.NOPASSWD + Return + End + Dc = Dcount(NewText,@Fm) + For I = 1 To Dc + If NewText[1,1] <> "+" Then + OutData<-1> = NewText[":",1,1] + End + Next + End + +************************ +* OS specific code end * +************************ + + Return + +************************************************************************ +* Users - Returns user data for interactive and +* background UniVerse users +* +* Input: NONE +* Output: Interactive user data +* Pid, User name, Who, Port, +* Login time, Last command +* Background process data +* Pid, User name, Printer segment, +* Last command (unix) +* Or +* Pid, User name, Port, Printer +* segment, Last command (NT) +************************************************************************ +Users: + + Interactive = "" + Background = "" + + ExLine = "PORT.STATUS INTERNAL" + Gosub TCLCommand + +* PORT.STATUS can only be used by one person at a time + + if index(Out,"PORT.STATUS is currently being run",1) Then + Error = EADM.INUSE + End + +* First line of output contains user counts + + NumInteractive = Out<1,2> + NumBackground = Out<1,3> + IntStart = 2 ; * Start line for interactive users + BckStart = IntStart + NumInteractive + +* Interactive users first + + If NumInteractive > 0 Then + For IntIndex = IntStart To IntStart + NumInteractive - 1 + Line = Trim(Out) + +************************** +* OS specific code start * +************************** + + If OS.TYPE # "UNIX" Then + +* PORT.STATUS does not display 'Who' (ie. user number) on +* NT. It is the same as the Pid, so insert it in the line + + Ins Trim(Out) Before Line<1, 3> + + End + +************************ +* OS specific code end * +************************ + +* Insert a blank value into the line for Last Logged In time. +* This will be filled in by cross-referencing to LISTU output + + Ins "" Before Line<1,5> + Interactive<-1> = Line + Next IntIndex + End + +* Now do background users + + If NumBackground > 0 Then + For BckIndex = BckStart To BckStart + NumBackground - 1 + Line = Trim(Out) + +************************** +* OS specific code start * +************************** + + If OS.TYPE # "UNIX" Then + +* We can show the user number for phantoms on NT, do this +* so that background processes can be logged off using MASTER + + Ins Trim(Out) Before Line<1, 3> + + End + +************************ +* OS specific code end * +************************ + + Background<-1> = Line + Next BckIndex + End + + ExLine = "LISTU" + Gosub TCLCommand + Text = Out + Dc = Dcount(Text,@fm) + Dc2 = Dcount(Interactive,@fm) + +************************** +* OS specific code start * +************************** + + If OS.TYPE = "UNIX" Then + +* Use tty to cross-reference output from LISTU to get login times +* for interactive users. Extract login date/time by trimming to +* get rid of excess spaces and extracting the 3rd, 4th & 5th items +* to try and avoid problems with different formats of this output +* (eg. IBM outputs extra data after the date time) + + For I = 1 To Dc2 + Tty = Trim(Interactive) + For J = 1 to Dc + Line = Trim(Text) + UnixTTY = Line[" ",2,1] + TTYPaths = Count(UnixTTY,"/") + If Tty["/",Dcount(Tty,"/") - TTYPaths,TTYPaths+1] = UnixTTY Then + Line = Trim(Line) + Interactive = Trim(Line[" ", 3, 3]) + End + Next J + Next I + End Else + +* Use Pid to cross-reference output from LISTU to get login times +* and portname for interactive users - this is more +* reliable for portname than PORT.STATUS as the latter gives +* "Unavailable" for the current process. Because user names +* can have spaces in them, access the portname and date/time +* from the end of the line + + For I = 1 To Dc2 + Pid = Trim(Interactive) + For J = 1 To Dc + Line = Text + UserNo = Trim(Line[14,7]) + If UserNo = Pid Then + Line = Trim(Line) + NumSp = Count(Line, " ") + Interactive = Trim(Line[" ", NumSp - 2, 1]) + Interactive = Trim(Line[" ", NumSp - 1, 3]) + End + Next J + Next I + End + +************************ +* OS specific code end * +************************ + + OutData = Lower(Interactive) : @fm : Lower(Background) + + Return + +********************************************************************** +* ViewInfoFile - Read one of the transaction logging info files +* +* If the file is larger than 16K then the last 16K is returned and an +* error of EADM.FILETOLARGE is set. +* +* Input: Key 0 - logging info +* 1 - checkpoint info +* 2 - rollforward info +* Output: Contents of file +* +********************************************************************** +ViewInfoFile: + + Key = Params<1> + +* Get log directory and add the name of the info file to the path + + InfoFile = "" + RECIO(InfoFile, RECIO$PATH) + InfoFile := OS.SEP + + Begin Case + Case Key = 0 + InfoFile := "uvlogd.info" + Case Key = 1 + InfoFile := "uvchkd.info" + Case Key = 2 + InfoFile := "uvrolf.info" + Case 1 + InfoFile := "uvlogd.info" + End Case + +* Open file and read contents. If file does not exist, don't do anything +* as the client expects an empty buffer if there is no file + + OpenSeq InfoFile To InfoFvar Then + NewText = "" + +* In case the file is huge, seek to the end and go back 16k +* bytes. + + Seek InfoFvar, -16384, 2 + Then +* Seek has succeded, therefore return a flag to indicate that +* the file has been truncated. + Error = EADM.FILETOLARGE + End + Else +* Seek failed has file will not be truncated. + Error = 0 + End + + Done = False + Loop + ReadSeq Line From InfoFvar Else Done = True + Until Done or Status() Do + NewText<-1> = Line + Repeat + CloseSeq InfoFvar + OutData = Change(NewText, @FM, CRLF) + End + + Return + +********************************************************************** +* WriteDataSources - Writes the data sources to the config file +* +* Input: None +* Output: None +********************************************************************** +WriteDataSources: + + OutLine = "" + config.file = "" + Element = 0 + Finish = 0 + Total = 0 + Ct = 0 + + ElementsArray = @FM:"DBMSTYPE = ":@FM:"network = ":@FM:"service = ":@FM:"host = " + +* Open the uvodbc config file in the UniVerse home account + config.file = UVHOME : OS.SEP : "uvodbc.config" + OpenSeq config.file To FConfig.file Then + +* Write the pre data to the file. + Total = Dcount(PreDataSources, @FM) + For Ct = 1 to Total + WriteSeq PreDataSources On FConfig.file Else + Error = EADM.CANTWRITE + End + Next Ct + +* Put a blank line in + WriteSeq "" On FConfig.file Else + Error = EADM.CANTWRITE + End + +* Write the data source data to the config file + Total = DCount(DataSourceArray,@FM) + For Ct = 1 to Total + OutLine = "<":DataSourceArray:">" + WriteSeq OutLine On FConfig.file Then + + Element = 2 + Finish = 0 + loop + + * If the database type is ODBC we do not write out any other data + If DataSourceDetails = "ODBC" Then + Finish = 1 + End + WriteSeq ElementsArray: DataSourceDetails On FConfig.file Else + Error = EADM.CANTWRITE + End + Element +=1 + Until Element > 5 Or Finish + Repeat + +* Put a blank between each entry + WriteSeq "" On FConfig.file Else + Error = EADM.CANTWRITE + End + End Else + Error = EADM.CANTWRITE + End + Next Ct + +* Write the post data to the config file + Total = DCount(PostDataSources, @FM) + If Total Then + For Ct = 1 to Total + WriteSeq PostDataSources On FConfig.file Else + Error = EADM.CANTWRITE + End + Next Ct + End + +* Truncate the rest of the file. + WeofSeq FConfig.file + CloseSeq FConfig.file + End Else + Error = EADM.NOFILE + End + Return + +*********************************************************************** +* U T I L I T Y R O U T I N E S +* ============= =============== +*********************************************************************** +********************************************************************** +* AccPerms - Unix only +********************************************************************** +AccPerms: + +************************** +* OS specific code start * +************************** + + If OS.TYPE = "UNIX" Then + Read AccRec From UVACCOUNT, Params<1> Else + Error = EADM.NOACCOUNT + Return + End + ThePath = AccRec<11> + Permissions = Params<2> + If Num(Permissions) Then + SetPerms = Permissions + End + Else + SetPerms = '000' + For I = 1 to 3 + Temp = Permissions[(I*3)-2,3] + if Temp[1,1] = "r" Then SetPerms[I,1] = SetPerms[I,1] + 4 + if Temp[2,1] = "w" Then SetPerms[I,1] = SetPerms[I,1] + 2 + if Temp[3,1] = "x" Then SetPerms[I,1] = SetPerms[I,1] + 1 + Next I + End + ExLine = 'find ':ThePath:' -exec chmod ':SetPerms:' {} \;' + GoSub ShellCommand + End + +************************ +* OS specific code end * +************************ + + Return + +*********************************************************************** +* CheckPathName +*********************************************************************** +CheckPathName: + + PathOk = True + If Not(Convert("; *&[]`$^","",PathName) = PathName ) Then + PathOk = False + End + Return + +************************************************************************ +* CheckSpooler - check to see if the spooler daemon is running +* Do this using usd -V. +* Unix only +************************************************************************ +CheckSpooler: + +************************** +* OS specific code start * +************************** + + If OS.TYPE = "UNIX" Then + ExLine = USD.PATH:" -V" + GoSub ShellCommand + If Not (Index(Out, "active!", 1)) Then + Error = EADM.NOSPOOLER + End + End Else + Error = EADM.NOSPOOLER + End + +************************ +* OS specific code end * +************************ + + Return + +************************************************************************ +* CheckUserGone +************************************************************************ +CheckUserGone: + sleep 1 + CallSub = True + Gosub Users + CallSub = False + Found = False + For I = 1 To Dc + If Params = Out Then + Found = I + End + Next + If Found = False Then + Out = '' + Return + End + If Out = "Unavailable" Then + Found = False + End + Return + +********************************************************************** +* Chown !C! - Unix only +********************************************************************** +Chown: + +************************** +* OS specific code start * +************************** + + If OS.TYPE = "UNIX" Then + Path = Params<1> + Owner = Params<2> + Group = Params<3> + PathName= Path + GoSub CheckPathName + If PathOk = True Then + ExLine = "find ":Path:" -exec chown ":Owner:" {} \;" + GoSub ShellCommand + If Group <> "" Then + ExLine = "find ":Path:" -exec chgrp ":Group:" {} \;" + GoSub ShellCommand + End + End + End + +************************ +* OS specific code end * +************************ + + Return + +********************************************************************** +* ChownAcc !C! - Unix only +********************************************************************** +ChownAcc: + +************************** +* OS specific code start * +************************** + + If OS.TYPE = "UNIX" Then + AccountName = Params<1> + Read AccRec From UVACCOUNT, AccountName Else + Error = EADM.NOACCOUNT + Return + End + Params<1> = AccRec<11> + PathName = Params<1> + GoSub CheckPathName + If PathOk = True Then + GoSub Chown + End + End + +************************ +* OS specific code end * +************************ + + Return + +********************************************************************** +* CleanUser +********************************************************************** +CleanUser: + + Params<1> = UserId + Gosub KillUserLock + GoSub IPCRMAll + Return + +*********************************************************************** +* CloseFileFixFile +*********************************************************************** +CloseFileFixFile: + * Close the file + CALL.ARGS(1,1) = FILEFIX.CLOSE ; * Close the File + CALL.ARGS(1,2) = UVRPC.INT + + If RPC.CALL(FileFixConId, " ", 1, MAT CALL.ARGS, RES.COUNT, MAT RES.ARGS) Then + Error = RES.ARGS(1,1) + * Remapp error codes to match admin codes. + End Else + Error = Status() - 80000 + End + Return + +********************************************************************** +* ConvertPermissions - Expects: Perms to contain a "rwx---r-x" +* format string +* Unix only +********************************************************************** +ConvertPermissions: + +************************** +* OS specific code start * +************************** + + If OS.TYPE = "UNIX" Then + PermissionNum = '000' + For I = 1 to 3 + Temp = Perms[(I*3)-2,3] + if Temp[1,1] = "r" Then PermissionNum[I,1] = PermissionNum[I,1] + 4 + if Temp[2,1] = "w" Then PermissionNum[I,1] = PermissionNum[I,1] + 2 + if Temp[3,1] = "x" Then PermissionNum[I,1] = PermissionNum[I,1] + 1 + Next I + End + +************************ +* OS specific code end * +************************ + + Return + +*********************************************************************** +* EndFileFixServer +*********************************************************************** +EndFileFixServer: + * Check to see if the connet is already running + If FileFixOpen NE 0 Then + + * Close the connection to the service + FileFixConId = RPC.DISCONNECT(FileFixConId) + FileFixOpen = 0 + End + Return + +************************************************************************ +* ExtractRestoreLabelField - Tries to match a line of output from +* uvrestore with the message text that produced +* it, and extract the value into the OutData +* dynamic array +* +* Inputs: Params Input data containing uvrestore output +* OutField Field number in Outdata for the result +* Msg Message number of text to be searched for +* Output: LineNo Line number in uvrestore output +************************************************************************ +ExtractRestoreLabelField: + + MsgText = UVREADMSG(Msg, "") + If Len(MsgText) = 0 Then + Return + End + Loop + While MsgText[1, 1] = @FM Do + Del MsgText<1> + Repeat + Check.String = TrimB(Field(MsgText, ":", 1)) + + Num.Fields = DCount(Params, @FM) + LineNo = 0 + I = 1 + Loop + While (LineNo = 0) And (I <= Num.Fields) Do + If Params[1, Len(Check.String)] = Check.String Then + LineNo = I + OutData = TrimF(Field(Params, ":", 2, 999)) + End + I += 1 + Repeat + + Return + +************************************************************************ +* FindAccountName - Tries to match an account path to an account +* name. +* +* Before calling, the Accounts array and AccountNum +* variable need to have been set up and the +* pathname to be matched must be in the variable +* "AccountPath" +* +* If a match is found, the account name will be +* put into the "AccountName" variable. If no match +* is found this will be empty. +************************************************************************ +FindAccountName: + + AccountName = "" + + For I = 1 To NumAccounts + If AccountPath = Accounts(I, 2) Then + AccountName = Accounts(I, 1) + Goto ExitFindAccountName + End + Next I + +ExitFindAccountName: + + Return + +************************************************************************ +* GetActLogPath - Finds the full path of the activity log file +* and puts it in ActLogFile +* Unix only +************************************************************************ +GetActLogPath: + +************************** +* OS specific code start * +************************** + + If OS.TYPE = "UNIX" Then + Temp1 = "" + Temp2 = "" + ActLogName = "act.log" + Call *SP.GET.UVRC.B(Temp1, Temp2) + ActLogDir = Temp1<3> + If ActLogDir = SPOOL.DIR Then + ActLogFile = ActLogDir : "/" : ActLogName + End Else + OpenPath ActLogDir To TmpFvar Then + ActLogFile = ActLogDir : "/" : ActLogName + End Else ; * check prev dir + If ActLogDir[Len(ActLogDir)] = "/" Then + ActLogDir = ActLogDir[1, Len(ActLogDir) - 1] + End + Levels = Count(ActLogDir, "/") + TmpPath = ActLogDir[1, Index(ActLogDir, "/", Levels)] + OpenPath TmpPath To TmpFvar Else + Error = EADM.CANTOPEN + Return + End + ActLogFile = ActLogDir[Index(ActLogDir, "/", Levels), 99] + End + Close TmpFvar + End + End + +************************ +* OS specific code end * +************************ + + Return + +********************************************************************* +* GetDelayTime - Returns the defer time of a print job in +* hours & minutes relative to the current time +* If there is no defer time set, or we have +* gone past the defer time, hours and minutes +* will be set to 0 +* Unix only +* +* Input: UspDelay (delay from usplog file) +* Output: Hours +* Mins +* +* If there is a time delay on a print job, it is held in the usplog +* in internal time and we have to convert it. The value held in +* usplog is the delay time as an absolute value which is: number of +* seconds from 00:00:00 GMT Jan 1st, 1970. +* To work out the actual delay, system(99) is used to get the time +* in the same format as the usplog file. Note, system(99) returns the +* value from the 'C' time() function. Using this actual time a delay +* time can be calculated. +* +*********************************************************************** +GetDelayTime: + +************************** +* OS specific code start * +************************** + + If OS.TYPE = "UNIX" Then + Hours = 0 + Mins = 0 + If UspDelay > 0 Then + CurrentTime = system(99) + Delay = UspDelay - CurrentTime + If Delay > 0 Then + Hours = Int(Delay/3600) + Tmp = Mod(Delay, 3600) + Mins = Int(Tmp/60) + End + End + End + +************************ +* OS specific code end * +************************ + + Return + +************************************************************************ +* GetErrLogPath - Finds the full path of the Error log file +* and puts it in ErrLogFile +* Unix only +************************************************************************ +GetErrLogPath: + +************************** +* OS specific code start * +************************** + + If OS.TYPE = "UNIX" Then + Temp1 = "" + Temp2 = "" + ErrLogName = "err.log" + Call *SP.GET.UVRC.B(Temp1, Temp2) + ErrLogDir = Temp1<2> + If ErrLogDir = SPOOL.DIR Then + ErrLogFile = ErrLogDir : "/" : ErrLogName + End Else + OpenPath ErrLogDir To TmpFvar Then + ErrLogFile = ErrLogDir : "/" : ErrLogName + End Else ; * check prev dir + If ErrLogDir[Len(ErrLogDir)] = "/" Then + ErrLogDir = ErrLogDir[1, Len(ErrLogDir) - 1] + End + Levels = Count(ErrLogDir, "/") + TmpPath = ErrLogDir[1, Index(ErrLogDir, "/", Levels)] + OpenPath TmpPath To TmpFvar Else + Error = EADM.CANTOPEN + Return + End + ErrLogFile = ErrLogDir[Index(ErrLogDir, "/", Levels), 99] + End + Close TmpFvar + End + End + +************************ +* OS specific code end * +************************ + + Return + +******************************************************************** +* GetPrinter - Read device details from sp.config file +* (unix only). DevRec will be empty if device +* definition is not found in sp.config +* +* Input: DevName +* Output: DevRec +******************************************************************** +GetPrinter: + +************************** +* OS specific code start * +************************** + + If OS.TYPE = "UNIX" Then + Found = False + Fin = False + SpConfigPath = SPOOL.DIR : "/sp.config" + OpenSeq SpConfigPath To FL Then + Loop + Until Fin Or Found Do + ReadSeq Line From FL Else Fin = True + If Line[" ", 1, 1] = DevName Then + Found = True + End + Repeat + CloseSeq FL + End + + If Found Then + + Convert " " To @fm In Line + +* NOTES: Field 1 is description, which we will have to get +* from the &DEVICE& entry +* Field 3 is not used for printers +* Field 4 is device type and will always be "P" + + DevRec<2> = Line<2> ; * Printer path + DevRec<4> = "P" ; * Device type + +* First, do some initialisation for those fields which have +* a default if they're not mentioned in the sp.config line + + DevRec<8> = 1 ; * No flow control + DevRec<9> = 1 ; * Printer enabled + DevRec<10> = 1 ; * Queueing enabled + DevRec<11> = 11 ; * Baud rate of 9600 + DevRec<12> = 1 ; * Parity None + DevRec<13> = 1 ; * CR mode None + DevRec<14> = 2 ; * Tab expansion off + DevRec<15> = 1 ; * No formfeed delay + DevRec<16> = 1 ; * No linefeed delay + DevRec<17> = 8 ; * Wordlength 8 + +* Now parse the sp.config line + + NumValues = Count(Line, @fm) + 1 + For I = 3 To NumValues + Begin Case + Case Upcase(Line) = "LOCKFILE" ; * LOCKFILE + + * LockFiles - can have up to 2 lockfiles in the + * lockfiles field, any more go in the options field + + If DevRec<5> = "" Then + DevRec<5> = Line + End Else + If DevRec<5,2> = "" Then + DevRec<5,2> = Line + End Else + DevRec<18> := "LOCKFILE " : Line : " " + End + End + I += 1 ; * skip next value, already used + Case Upcase(Line) = "DRIVER" ; * DRIVER + DevRec<6> = Line + I += 1 ; * skip next value, already used + Case Upcase(Line) = "FORMS" ; * FORMS + DevRec<7> = Line + I += 1 ; * skip next value, already used + Case Upcase(Line) = "DTR" + + * Can be one of two things, "DTR OFF XON OFF" or "DTR ON" + * These represent the first two possibilities for flow + * control (field 8). Make sure we skip the appropriate + * number of values after processing it + + If Upcase(Line) = "OFF" Then + DevRec<8> = 1 + I += 3 ; * skip next 3 values: "OFF XON OFF" + End Else + DevRec<8> = 2 + I += 1 ; * skip next value: "ON" + End + Case Upcase(Line) = "XOFF" + + * Can be either "XOFF STARTANY ON" or "XOFF STARTANY OFF" + * These represent the final two possibilities for flow + * control (field 8). Again, make sure we skip the correct + * number of values + + If Upcase(Line) = "ON" Then + DevRec<8> = 3 + End Else + DevRec<8> = 4 + End + I += 2 + Case Upcase(Line) = "NOPRINT" ; * disable printing + DevRec<9> = 2 + Case Upcase(Line) = "NOQUEUE" ; * disable queueing + DevRec<10> = 2 + Case Upcase(Line) = "BAUD" ; * BAUD + + * We require an index into the baud rates array, rather + * than the baud rate itself + + Find Line In baud.array Setting Fm Then + DevRec<11> = Fm + End + I += 1 ; * skip next value, already used + Case Upcase(Line) = "PARITY" ; * PARITY NONE/EVEN/ODD + + * We require an number representing the parity, rather + * than the text string + + Find Line In parity.array Setting Fm Then + DevRec<12> = Fm + End + I += 1 ; * skip next value, already used + Case Upcase(Line) = "CRMODE" + + * CRMODE is only present if CR conversion is required + * We need a number representing the conversion required, + * rather than the text string + + Find Line In cr.array Setting Fm Then + DevRec<13> = Fm + End + I += 1 ; * skip next value, already used + Case Upcase(Line) = "TABS" ; * TABS ON/OFF + If Upcase(Line) = "ON" Then + DevRec<14> = 1 + End Else + DevRec<14> = 2 + End + I += 1 ; * skip next value, already used + Case Upcase(Line) = "FFDELAY" ; * FFDELAY + DevRec<15> = Line + I += 1 ; * skip next value, already used + Case Upcase(Line) = "LFDELAY" ; * LFDELAY + + * Index used for LF delay is one less than the index we + * need, so add one to it + + DevRec<16> = Line + 1 + I += 1 ; * skip next value, already used + Case Upcase(Line) = "DATABITS" ; * DATABITS + DevRec<17> = Line + I += 1 ; * skip next value, already used + Case Upcase(Line) = "MAPNAME" Or Upcase(Line) = "MAP" + DevRec<19> = Line + I += 1 + Case 1 ; * anything else goes into "Options" + DevRec<18> := Line : " " + End Case + Next I + End ; * of processing printer definition in sp.config file + End + +************************ +* OS specific code end * +************************ + + Return + +******************************************************************** +* GetSpoolDetails - Unix only +******************************************************************** +* Get the spooler details from the usplog file +* This builds two arrays; the first holds printer details +* and the second the details for each job +* The indexing allows other spooler commands to locate things +* a little more quickly; these are +* PrinterList = Array of printer details +* PrinterIndex = list of printer names +* JobList = Array of job details +* JobIndex = list of job numbers +* JobPrintIndex= 2-d index of printers and the job entry numbers +* in the job list associated with them +* PrintJobIndex= List of printer numbers associated with each job +* +* A mask is used to tell ProcessUspLine which fields in the line +* are delimeted by char(255) (mask = 1) and which are delimeted by +* a space (mask = 0) +******************************************************************** +GetSpoolDetails: + +************************** +* OS specific code start * +************************** + + If OS.TYPE = "UNIX" Then + If USPLOG.PATH = "" Then + Error = EADM.NOUSPLOGPATH + Return + End + OpenSeq USPLOG.PATH To USPFL Else + Error = EADM.NOUSPLOG + Return + End + PrinterList = "" + JobList = "" + PrinterIndex = '' + JobIndex = '' + JobPrintIndex = '' + PrintJobIndex = '' + NoPrinters = 0 + NoJobs = 0 + + Done = False + Loop + ReadSeq Line From USPFL Else Done = True + If Line[1,1] = "z" Then Done = True + If Status() Then Done = True + Until Done Do + First = Line[1,1] + Begin Case + Case First = "P" + Mask = "11110" + GoSub ProcessUspLine + NoPrinters += 1 + PrinterList= Lower(NewLine) + PrinterIndex = NewLine<1> + CurrentPrinter = NewLine<1> + Case First = "p" ; * hangover from ADG code + Mask = "11110" + GoSub ProcessUspLine + PrinterList<-1>= Lower(NewLine) + PrinterIndex<-1> = NewLine<1> + Case (First = "J") Or (First = "M") ; * print job or mapped print job + Mask = "000000000000111100000110" + GoSub ProcessUspLine + ReadSeq Line From USPFL Else Done = True + If Line[1,1] <> "F" Then + Error = EADM.BADUSPLOG + Return + End + NewLine = Line[Char(255),1,1][2,HUGE] + NoJobs += 1 + JobList = Lower(NewLine) + JobIndex = NewLine<2> + JobPrintIndex = NoJobs + PrintJobIndex = NoPrinters + End Case + Repeat + CloseSeq USPFL + End + +************************ +* OS specific code end * +************************ + + Return + +*********************************************************************** +* GetUserName - Unix only +*********************************************************************** +GetUserName: + +************************** +* OS specific code start * +************************** + + If OS.TYPE = "UNIX" Then + UserName = "" + UserFound = False + + OpenSeq '/etc/passwd' To FL Then + Loop + ReadSeq UserLine From FL Then + If UserLine[":",3,1] = UserNo Then + UserFound = True + UserName = UserLine[":",1,1] + End + End Else UserFound = True + Until UserFound = True + Repeat + CloseSeq FL + End + End + +************************ +* OS specific code end * +************************ + + Return + +************************************************************************ +* InitSpooler - initialises the spooler variables held in +* named common +* Unix only +************************************************************************ +InitSpooler: + +************************** +* OS specific code start * +************************** + + If OS.TYPE = "UNIX" Then + SpoolData = "" + Call *SP.GET.UVRC.B(SpoolData, USD.SCRIPT) + + SPOOL.DIR = SpoolData<1> + USPLOG.PATH = SPOOL.DIR : "/usplog" + USA.PATH = UVHOMEBIN: "usa" + USM.PATH = UVHOMEBIN: "usm" + USD.PATH = UVHOMEBIN: "usd" + End + +************************ +* OS specific code end * +************************ + + Return + +*********************************************************************** +* IPCRMALL !C! +*********************************************************************** +IPCRMAll: +If LINUX then + ExLine = "ipcs -m" +End Else + ExLine = "ipcs -mo" +End + GoSub ShellCommand + Keys = "" + Dc = Dcount(Out,@fm) + for I =1 To Dc + If Out[" ",Dcount(Out," "),1] = "0" Then + Line= Change(Trim(Out)," ",@fm) + FindStr "0xaceb" In Line Setting Pos Then + Keys<-1> = Line<2> + End + + End + Next + Dc = Dcount(Keys,@fm) + For I =1 To Dc +If LINUX then + ExLine = "ipcrm shm ":Keys +End Else + ExLine = "ipcrm -m ":Keys +End + Gosub ShellCommand + Next + Return + +*********************************************************************** +* KillUserLock +*********************************************************************** +KillUserLock: + + Read Rec From VOC, "UNLOCK" Else + Write Rec On VOC, "UNLOCK" ; * Not in all accounts + Return + End + ExLine = "unlock USER " :Params<1>:" ALL" + Gosub TCLCommand + Return + +*********************************************************************** +* LoadHeaderFileFixFile +*********************************************************************** +LoadHeaderFileFixFile: + * Load the file header + CALL.ARGS(1,1) = FILEFIX.LOADUVHEADER ; * Load the header for the File + CALL.ARGS(1,2) = UVRPC.INT + + If RPC.CALL(FileFixConId, " ", 1, MAT CALL.ARGS, RES.COUNT, MAT RES.ARGS) Then + Error = RES.ARGS(1,1) + * Remapp error codes to match admin codes. + End Else + Error = Status() - 80000 + End + Return + +*********************************************************************** +* OpenFileFixFile +*********************************************************************** +OpenFileFixFile: + * First Open the File + CALL.ARGS(1,1) = FILEFIX.OPEN ; * Open the File + CALL.ARGS(1,2) = UVRPC.INT + CALL.ARGS(2,1) = FixFilename + CALL.ARGS(2,2) = UVRPC.STRING + CALL.ARGS(3,1) = FixFilePath + CALL.ARGS(3,2) = UVRPC.STRING + + If RPC.CALL(FileFixConId, " ", 3, MAT CALL.ARGS, RES.COUNT, MAT RES.ARGS) Then + Error = RES.ARGS(1,1) + End Else + Error = Status() - 80000 + End + Return + +******************************************************************** +* RepBuildUVFileExceptionList - Builds list of file names +* that are to be excluded from the list of +* UniVerse files that can be published. +* Excluded files are, distributed files and +* their part files +* +* Input: None +* Output: File exception list +******************************************************************** +RepBuildUVFileExceptionList: + OSAccountName = "" + AccountPath = "" + ExceptionList = "" + +************************************** +*** Add special UniVerse files to *** +*** exception list. *** +************************************** + ExceptionList<-1> = "&COMO&" + ExceptionList<-1> = "&DEVICE&" + ExceptionList<-1> = "&ED&" + ExceptionList<-1> = "&HOLD&" + ExceptionList<-1> = "&MAP&" + ExceptionList<-1> = "&PARTFILES&" + ExceptionList<-1> = "&PH&" + ExceptionList<-1> = "&SAVEDLISTS&" + ExceptionList<-1> = "&TEMP&" + ExceptionList<-1> = "&UFD&" + ExceptionList<-1> = "&UNICODE.FILE&" + ExceptionList<-1> = "APP.PROGS" + ExceptionList<-1> = "APP.PROGS.O" + ExceptionList<-1> = "BASIC.HELP" + ExceptionList<-1> = "BCI.HELP" + ExceptionList<-1> = "BLTRS" + ExceptionList<-1> = "BP" + ExceptionList<-1> = "BP.O" + ExceptionList<-1> = "DICT.DICT" + ExceptionList<-1> = "DICT.PICK" + ExceptionList<-1> = "ERRMSG" + ExceptionList<-1> = "GLOBAL.CATDIR" + ExceptionList<-1> = "NEWACC" + ExceptionList<-1> = "NLS.BP.O" + ExceptionList<-1> = "NLS.CLIENT.LCS" + ExceptionList<-1> = "NLS.CLIENT.MAPS" + ExceptionList<-1> = "NLS.CS.ALPHAS" + ExceptionList<-1> = "NLS.CS.BLOCKS" + ExceptionList<-1> = "NLS.CS.CASES" + ExceptionList<-1> = "NLS.CS.DESCS" + ExceptionList<-1> = "NLS.CS.INSTALL" + ExceptionList<-1> = "NLS.CS.LISTING" + ExceptionList<-1> = "NLS.CS.TYPES" + ExceptionList<-1> = "NLS.LANG.INFO" + ExceptionList<-1> = "NLS.LC.ALL" + ExceptionList<-1> = "NLS.LC.COLLATE" + ExceptionList<-1> = "NLS.LC.CTYPE" + ExceptionList<-1> = "NLS.LC.INSTALL" + ExceptionList<-1> = "NLS.LC.LISTING" + ExceptionList<-1> = "NLS.LC.MONETARY" + ExceptionList<-1> = "NLS.LC.NUMERIC" + ExceptionList<-1> = "NLS.LC.TIME" + ExceptionList<-1> = "NLS.MAP.DESC" + ExceptionList<-1> = "NLS.MAP.INSTALL" + ExceptionList<-1> = "NLS.MAP.LISTING" + ExceptionList<-1> = "NLS.MAP.TABLES" + ExceptionList<-1> = "NLS.WT.LOOKUP" + ExceptionList<-1> = "NLS.WT.TABLES" + ExceptionList<-1> = "REVISE.DISCUSSIONS" + ExceptionList<-1> = "REVISE.PROCESSES" + ExceptionList<-1> = "SQL.HELP" + ExceptionList<-1> = "STAT.FILE" + ExceptionList<-1> = "SYS.HELP" + ExceptionList<-1> = "SYS.MESSAGE" + ExceptionList<-1> = "UNIVERSE.INCLUDE" + ExceptionList<-1> = "UNIVERSE.MENU.FILE" + ExceptionList<-1> = "UNIVERSE.STAT.FILE" + ExceptionList<-1> = "UNIVERSE.VOCLIB" + ExceptionList<-1> = "USER.HELP" + ExceptionList<-1> = "UV.ACCESS" + ExceptionList<-1> = "UV.ACCOUNT" + ExceptionList<-1> = "UV.FLAVOR" + ExceptionList<-1> = "UV.LOGINS" + ExceptionList<-1> = "UV.SAVEDLISTS" + ExceptionList<-1> = "UV.TRANS" + ExceptionList<-1> = "UV_ASSOC" + ExceptionList<-1> = "UV_COLUMNS" + ExceptionList<-1> = "UV_LOGS" + ExceptionList<-1> = "UV_SCHEMA" + ExceptionList<-1> = "UV_TABLES" + ExceptionList<-1> = "UV_UDRPUB" + ExceptionList<-1> = "UV_UDRSUB" + ExceptionList<-1> = "UV_UDRSYS" + ExceptionList<-1> = "UV_USERS" + ExceptionList<-1> = "UV_VIEWS" + + If IsFullPath(AccountName) Then + AccountPath = AccountName + End Else + * Specific account name + ReadV AccountPath From UVACCOUNT, AccountName, 11 Else + Error = EADM.CANTREADPATH + Return + End + End + +************************************** +*** List all the distributed files *** +************************************** + OSAccountName = AccountPath + Convert OS.SEP TO @FM IN OSAccountName +************************** +* OS specific code start * +************************** +* Checking for / on NT as this is still a valid separator in UniVerse files. + If OS.TYPE # "UNIX" Then + Convert "/" TO @FM IN OSAccountName + End +************************ +* OS specific code end * +************************ + OSAccountName = OSAccountName + + Open "","&PARTFILES&" To UvPartFvar Then + EXECUTE "SELECT &PARTFILES& WITH ACCOUNT = ":OSAccountName + Fin = False + Loop + Readnext Id Then + PartFile = Id + Convert OS.SEP TO @FM IN PartFile +************************** +* OS specific code start * +************************** +* Checking for / on NT as this is still a valid separator in UniVerse files. + If OS.TYPE # "UNIX" Then + Convert "/" TO @FM IN PartFile + End +************************ +* OS specific code end * +************************ + PartFile = PartFile + Line = PartFile + ExceptionList<-1> = Line + End Else Fin = True + Until Fin + Repeat + Close UvPartFvar + End Else + Error = EADM.CANTOPEN + End + + Return + +******************************************************************** +* RepDistFileAdminClear - Clears the flag for a specified file in +* &PARTFILES& so that the command DEFINE.DF +* can again be used on this file. +* +* Input: Account, File name, Dist File name +* Output: None +******************************************************************** +RepDistFileAdminClear: + Open "","&PARTFILES&" To UvPartFvar Then + EXECUTE "SELECT &PARTFILES& WITH @ID LIKE ...":FileName:" AND WITH ACCTPATH EQ ":AccountPath:" AND WITH DISTFILE EQ ":MDName:" AND WITH PARTNUM NE 'Distributed'" + Readnext Id Then + Readu Rec From UvPartFvar, Id Then + Rec<7> = "" + Write Rec On UvPartFvar, Id Then + End Else + Error = EADM.CANTWRITE + End + End Else + Error = EADM.CANTREAD + End + End + Close UvPartFvar + End Else + Error = EADM.CANTOPEN + End + Return + +******************************************************************** +* RepDistFileAdminSet - Sets a flag for a specified file in +* &PARTFILES& so that the command DEFINE.DF +* can NOT be used on files that are marked +* for replication. +* +* Input: Account, File name, Dist File name +* Output: None +******************************************************************** +RepDistFileAdminSet: + Open "","&PARTFILES&" To UvPartFvar Then + EXECUTE "SELECT &PARTFILES& WITH @ID LIKE ...":FileName:" AND WITH ACCTPATH EQ ":AccountPath:" AND WITH DISTFILE EQ ":MDName:" AND WITH PARTNUM NE 'Distributed'" + Readnext Id Then + Readu Rec From UvPartFvar, Id Then + Rec<7> = "R" + Write Rec On UvPartFvar, Id Then + End Else + Error = EADM.CANTWRITE + End + End Else + Error = EADM.CANTREAD + End + End + Close UvPartFvar + End Else + Error = EADM.CANTOPEN + End + Return + +******************************************************************** +* RepGetNextPublicationsKey - Gets the next available publication +* Key +* +* Input: None +* Output: PubKey +******************************************************************** +RepGetNextPublicationsKey: + found = 0 + rec = "" + nextkey = "" + + Open "DICT" ,"UV_UDRPUB" To DictUvUdrPub.Fvar Then + Open "" ,"UV_UDRPUB" To UvUdrPub.Fvar Then + Readvu nextkey from DictUvUdrPub.Fvar, "&NEXT.AVAILABLE&", 2 Then + Loop + Readv rec from UvUdrPub.Fvar, nextkey, 0 Then +* It already exists add one and try again + nextkey +=1 + If nextkey > 2147483646 Then + nextkey = 1 + End + End Else + found = 1 + PubKey = nextkey + nextkey +=1 + If nextkey > 2147483646 Then + nextkey = 1 + End + Writev nextkey On DictUvUdrPub.Fvar, "&NEXT.AVAILABLE&", 2 Else + Error = EADM.CANTWRITE + End + End + Until found Do + Repeat + End Else + Error = EADM.CANTREAD + End + Close UvUdrPub.Fvar + End Else + Error = EADM.CANTOPEN + End + Close DictUvUdrPub.Fvar + End Else + Error = EADM.CANTOPEN + End + Return + +******************************************************************** +* RepGetNextRepSystemKey - Gets the next available System Key +* +* Input: None +* Output: SysKey +******************************************************************** +RepGetNextRepSystemKey: + found = 0 + rec = "" + nextkey = "" + + Open "DICT" ,"UV_UDRSYS" To DictUvUdrSys.Fvar Then + Open "" ,"UV_UDRSYS" To UvUdrSys.Fvar Then + Readvu nextkey from DictUvUdrSys.Fvar, "&NEXT.AVAILABLE&", 2 Then + Loop + Readv rec from UvUdrSys.Fvar, nextkey, 0 Then +* Its already exists add one and try again + nextkey +=1 + If nextkey > 2147483646 Then + nextkey = 1 + End + End Else + found = 1 + SysKey = nextkey + nextkey +=1 + If nextkey > 2147483646 Then + nextkey = 1 + End + Writev nextkey On DictUvUdrSys.Fvar, "&NEXT.AVAILABLE&", 2 Else + Error = EADM.CANTWRITE + End + End + Until found Do + Repeat + End Else + Error = EADM.CANTREAD + End + Close UvUdrSys.Fvar + End Else + Error = EADM.CANTOPEN + End + Close DictUvUdrSys.Fvar + End Else + Error = EADM.CANTOPEN + End + Return + +******************************************************************** +* RepGetNextSubscriptionKey - Gets the next available subscription +* Key +* +* Input: None +* Output: SubKey +******************************************************************** +RepGetNextSubscriptionKey: + found = 0 + nextkey = "" + rec = "" + + Open "DICT" ,"UV_UDRSUB" To DictUvUdrSub.Fvar Then + Open "" ,"UV_UDRSUB" To UvUdrSub.Fvar Then + Readvu nextkey from DictUvUdrSub.Fvar, "&NEXT.AVAILABLE&", 2 Then + Loop + Readv rec from UvUdrSub.Fvar, nextkey, 0 Then +* It already exists add one and try again + nextkey +=1 + If nextkey > 2147483646 Then + nextkey = 1 + End + End Else + found = 1 + SubKey = nextkey + nextkey +=1 + If nextkey > 2147483646 Then + nextkey = 1 + End + Writev nextkey On DictUvUdrSub.Fvar, "&NEXT.AVAILABLE&", 2 Else + Error = EADM.CANTWRITE + End + End + Until found Do + Repeat + End Else + Error = EADM.CANTREAD + End + Close UvUdrSub.Fvar + End Else + Error = EADM.CANTOPEN + End + Close DictUvUdrSub.Fvar + End Else + Error = EADM.CANTOPEN + End + Return + +******************************************************************** +* RepPublishFileDType - Publishs dictionaries for general +* UniVerse file types including +* type 2-18, 25, and 30. +* +* Input: None +* Output: SubKey +******************************************************************** +RepPublishFileDType: + PubRecord = "" ; * record buffer to be written to UV_UDRPUB + OSDictName = "" + FilePath = "" + DictPubKey = "" + DTypeFileName = "" + DTypePubType = "" + + * determine if this is a dictionary for a Multi-level file or regular file + Open '', "UV_UDRPUB" To UvPubFvar Then + Readv DTypePubType From UvPubFvar, FileKeyForDictPub, 5 Then + If DTypePubType = "M" Then + DTypeFileName = MDName + End Else + DTypeFileName = FileName + End + End Else ; * FAILED - Readv DictPubKey + Error = EADM.BADFILE + End ; * END - Readv DictPubKey + Close UvPubFvar + End Else + Error = EADM.CANTOPEN + End + + Openpath AccountPath:OS.SEP:"VOC" To UvVocFvar Then + Readv OSDictName From UvVocFvar, DTypeFileName, 3 Then + OSDictName = Trim(OSDictName) + If IsFullPath(OSDictName) Then + FilePath = OSDictName + End Else + FilePath = AccountPath:OS.SEP:OSDictName + End + End Else ; * FAILED - Readv OSDictName + Error = EADM.BADFILE + End ; * END - Readv OSDictName + Close UvVocFvar + End Else ; * FAILED - Open account VOC + Error = EADM.BADFILE + End ; * END - Open account VOC + + If Not(Error) Then + Error = UDRgetheaderinfo(FilePath, Flag, Id) + + If Not(Error) Then + If Flag = UDRNONE Then + Gosub RepGetNextPublicationsKey + If Not(Error) Then + PubRecord<1> = FileName + PubRecord<2> = Account + PubRecord<3> = Description + PubRecord<5> = PubType : @VM : DTypePubType + PubRecord<6> = AccessList + PubRecord<11> = FileKeyForDictPub + PubRecord<17> = MDName + PubRecord<18> = DictName + Open '', "UV_UDRPUB" To UvPubFvar Then + Write PubRecord To UvPubFvar, PubKey Then + Error = UDRsetheaderinfo(FilePath, UDRPUB, PubKey) + If Error Then + Begin Case + Case Error = -1 + Error = EADM.BADFUNCCALL + Case Error = -2 + Error = EADM.BADFILE + Case Error = -3 + Error = EADM.UDRINVALIDFILE + Case Error = -5 + Error = EADM.BADFILEREV + End Case + End + ResultingPubKey = PubKey + * now we need to set the parent file flag. + Readv DictPubKey From UvPubFvar, FileKeyForDictPub, 11 Then + If DictPubKey <> 0 Then + Error = EADM.UDRINUSE + End + Writev PubKey To UvPubFvar, FileKeyForDictPub, 11 Else + Error = EADM.CANTWRITE + End + End Else ; * FAILED - Readv DictPubKey + Error = EADM.BADFILE + End ; * END - Readv DictPubKey + End Else + Error = EADM.CANTWRITE + End + Close UvPubFvar + End Else + Error = EADM.CANTOPEN + End + End + End Else + Error = EADM.UDRINUSE + End + End Else + Begin Case + Case Error = -1 + Error = EADM.BADFUNCCALL + Case Error = -2 + Error = EADM.BADFILE + Case Error = -3 + Error = EADM.UDRINVALIDFILE + Case Error = -5 + Error = EADM.BADFILEREV + End Case + End + End ; * END of publishing file + Return + +******************************************************************** +* RepPublishFileFType - Publishs general UniVerse file type. +* Including type 2-18, 25, and 30 +* +* Input: None +* Output: PubKey +******************************************************************** +RepPublishFileFType: + PubRecord = "" ; * record buffer to be written to UV_UDRPUB + OSFileName = "" + FilePath = "" + + Openpath AccountPath:OS.SEP:"VOC" To UvVocFvar Then + Readv OSFileName From UvVocFvar, FileName, 2 Then + OSFileName = Trim(OSFileName) + If IsFullPath(OSFileName) Then + FilePath = OSFileName + End Else + FilePath = AccountPath:OS.SEP:OSFileName + End + End Else ; * FAILED - Readv OSFileName + Error = EADM.BADFILE + End ; * END - Readv OSFileName + Close UvVocFvar + End Else ; * FAILED - Open account VOC + Error = EADM.BADFILE + End ; * END - Open account VOC + + If Not(Error) Then + Error = UDRgetheaderinfo(FilePath, Flag, Id) + + If Not(Error) Then + If Flag = UDRNONE Then + Gosub RepGetNextPublicationsKey + If Not(Error) Then + PubRecord<1> = FileName + PubRecord<2> = Account + PubRecord<3> = Description + PubRecord<5> = PubType + PubRecord<6> = AccessList + PubRecord<11> = "0" + PubRecord<17> = MDName + Open '', "UV_UDRPUB" To UvPubFvar Then + Write PubRecord To UvPubFvar, PubKey Then + Error = UDRsetheaderinfo(FilePath, UDRPUB, PubKey) + If Error Then + Begin Case + Case Error = -1 + Error = EADM.BADFUNCCALL + Case Error = -2 + Error = EADM.BADFILE + Case Error = -3 + Error = EADM.UDRINVALIDFILE + Case Error = -5 + Error = EADM.BADFILEREV + End Case + End + If PubType = "MD" Then + Gosub RepDistFileAdminSet + End + ResultingPubKey = PubKey + End Else + Error = EADM.CANTWRITE + End + Close UvPubFvar + End Else + Error = EADM.CANTOPEN + End + End + End Else + Error = EADM.UDRINUSE + End + End Else + Begin Case + Case Error = -1 + Error = EADM.BADFUNCCALL + Case Error = -2 + Error = EADM.BADFILE + Case Error = -3 + Error = EADM.UDRINVALIDFILE + Case Error = -5 + Error = EADM.BADFILEREV + End Case + End + End ; * END of publishing file + Return + +******************************************************************** +* RepPublishFileMType - Publishes Multi-level UniVerse files. +* +* Input: None +* Output: SubKey +******************************************************************** +RepPublishFileMType: + PubRecord = "" ; * record buffer to be written to UV_UDRPUB + MPartNames = "" + MOSPartNames = "" + OSFileName = "" + FilePath = "" + + Openpath AccountPath:OS.SEP:"VOC" To UvVocFvar Then + Readv MPartNames From UvVocFvar, MFileName, 7 Then + Find MPartName in MPartNames Setting Fmc, Vmc, Smc Then + Readv MOSPartNames From UvVocFvar, MFileName, 8 Then + Tmp = MOSPartNames + If IsFullPath(Tmp) Then + FilePath = Tmp ; * use multi-part full os file name + End Else + FilePath = AccountPath:OS.SEP:MFileName:OS.SEP:Tmp ; * add multi-part os file name + End + End Else ; * FAILED - Readv MOSPartNames + Error = EADM.BADFILE + End + End Else + Error = EADM.BADFILE + End ; * END - Find multi-part file name + End Else ; * FAILED - Readv MPartNames + Error = EADM.BADFILE + End ; * END - Readv MPartNames + Close UvVocFvar + End Else ; * FAILED - Open account VOC + Error = EADM.BADFILE + End ; * END - Open account VOC + + If Not(Error) Then + Error = UDRgetheaderinfo(FilePath, Flag, Id) + + If Not(Error) Then + If Flag = UDRNONE Then + Gosub RepGetNextPublicationsKey + If Not(Error) Then + PubRecord<1> = MPartName + PubRecord<2> = Account + PubRecord<3> = Description + PubRecord<5> = PubType + PubRecord<6> = AccessList + PubRecord<11> = "0" + PubRecord<17> = MFileName + Open '', "UV_UDRPUB" To UvPubFvar Then + Write PubRecord To UvPubFvar, PubKey Then + Error = UDRsetheaderinfo(FilePath, UDRPUB, PubKey) + If Error Then + Begin Case + Case Error = -1 + Error = EADM.BADFUNCCALL + Case Error = -2 + Error = EADM.BADFILE + Case Error = -3 + Error = EADM.UDRINVALIDFILE + Case Error = -5 + Error = EADM.BADFILEREV + End Case + End + ResultingPubKey = PubKey + End Else + Error = EADM.CANTWRITE + End + Close UvPubFvar + End Else + Error = EADM.CANTOPEN + End + End + End Else + Error = EADM.UDRINUSE + End + End Else + Begin Case + Case Error = -1 + Error = EADM.BADFUNCCALL + Case Error = -2 + Error = EADM.BADFILE + Case Error = -3 + Error = EADM.UDRINVALIDFILE + Case Error = -5 + Error = EADM.BADFILEREV + End Case + End + End ; * END of publishing file + Return + +******************************************************************** +* RepPublishFileQType - Publishs UniVerse Q-Pointers. +* +* Input: None +* Output: SubKey +******************************************************************** +RepPublishFileQType: + PubRecord = "" ; * record buffer to be written to UV_UDRPUB + QAccountName = "" + QAccountPath = "" + QFileName = "" + OSFileName = "" + FilePath = "" + TmpFlag = 0; + TmpPubKey = ""; + + Openpath AccountPath:OS.SEP:"VOC" To UvVocFvar Then + Readv QAccountName From UvVocFvar, FileName, 2 Then + Readv QFileName From UvVocFvar, FileName, 3 Then + Readv QAccountPath From UVACCOUNT, QAccountName, 11 Then + Openpath QAccountPath:OS.SEP:"VOC" To UvVocFvar2 Then + Readv OSFileName From UvVocFvar2, QFileName, 2 Then + If IsFullPath(OSFileName) Then + FilePath = OSFileName + End Else + FilePath = QAccountPath:OS.SEP:OSFileName + End + End Else ; * FAILED - Readv OSFileName + Error = EADM.BADFILE + End ; * END - Readv OSFileName + Close UvVocFvar2 + End Else ; * FAILED - Open Q-pointer account VOC + Error = EADM.BADFILE + End ; * END - Open Q-pointer account VOC + End Else ; * FAILED - Readv QAccountPath + Error = EADM.BADFILE + End ; * END - Readv QAccountPath + End Else ; * FAILED - Readv QFileName + Error = EADM.BADFILE + End ; * END - Readv QFileName + End Else ; * FAILED - Readv QAccountName + Error = EADM.BADFILE + End ; * END - Readv QAccountName + Close UvVocFvar + End Else ; * FAILED - Open account VOC + Error = EADM.BADFILE + End ; * END - Open account VOC + + If Not(Error) Then + Error = UDRgetheaderinfo(FilePath, Flag, Id) + + If Not(Error) Then + TmpFlag = Flag + TmpPubKey = Id + If Flag = UDRNONE Then + Gosub RepGetNextPublicationsKey + If Not(Error) Then + PubRecord<1> = QFileName + PubRecord<2> = QAccountName + PubRecord<3> = "Published via a Q-Pointer" + PubRecord<5> = "F" + PubRecord<6> = AccessList + PubRecord<11> = "0" + PubRecord<17> = MDName + + Open '', "UV_UDRPUB" To UvPubFvar Then + Write PubRecord To UvPubFvar, PubKey Then + Error = UDRsetheaderinfo(FilePath, UDRPUB, PubKey) + If Error Then + Begin Case + Case Error = -1 + Error = EADM.BADFUNCCALL + Case Error = -2 + Error = EADM.BADFILE + Case Error = -3 + Error = EADM.UDRINVALIDFILE + Case Error = -5 + Error = EADM.BADFILEREV + End Case + End + TmpPubKey = PubKey + End Else + Error = EADM.CANTWRITE + End + Close UvPubFvar + End Else + Error = EADM.CANTOPEN + End + End + End + If (Not(Error) & TmpFlag NE UDRSUB) Then ; * publishing the file succeded, or file exists so now do q-pointer + Open '', "UV_UDRPUB" To UvPubFvar Then + Readu PubRecord From UvPubFvar, TmpPubKey Then + PubRecord<12,-1> = FileName + PubRecord<13,-1> = Account + PubRecord<14,-1> = Description + PubRecord<15,-1> = PubType + PubRecord<16,-1> = "0" + Write PubRecord To UvPubFvar, TmpPubKey Then + ResultingPubKey = TmpPubKey + End Else + Error = EADM.CANTWRITE + End + End Else ; * FAILED - Readu PubRecord + Error = EADM.CANTREAD + End + Close UvPubFvar + End Else + Error = EADM.CANTOPEN + End + End Else + If TmpFlag = UDRSUB Then + Error = EADM.UDRINUSE + End + End + End Else + Begin Case + Case Error = -1 + Error = EADM.BADFUNCCALL + Case Error = -2 + Error = EADM.BADFILE + Case Error = -3 + Error = EADM.UDRINVALIDFILE + Case Error = -5 + Error = EADM.BADFILEREV + End Case + End + End ; * END of publishing file + Return + +*********************************************************************** +* SetupFileFix +*********************************************************************** +SetupFileFix: + * Setup the subsystem + CALL.ARGS(1,1) = FILEFIX.SETUP ; * Setup + CALL.ARGS(1,2) = UVRPC.INT + CALL.ARGS(2,1) = FileFixLevel + CALL.ARGS(2,2) = UVRPC.INT + CALL.ARGS(3,1) = FileFixFix + CALL.ARGS(3,2) = UVRPC.INT + CALL.ARGS(4,1) = FileFixErrorLevel + CALL.ARGS(4,2) = UVRPC.INT + + If RPC.CALL(FileFixConId, " ", 4, MAT CALL.ARGS, RES.COUNT, MAT RES.ARGS) Then + Error = RES.ARGS(1,1) + End Else + Error = Status() - 80000 + End + Return + +*********************************************************************** +* SetupLoggingFileFix +*********************************************************************** +SetupLoggingFileFix: + * Setup the filefix logging subsystem + CALL.ARGS(1,1) = FILEFIX.SETUPLOGGING ; * Setup Logging + CALL.ARGS(1,2) = UVRPC.INT + CALL.ARGS(2,1) = FileFixLogging + CALL.ARGS(2,2) = UVRPC.INT + CALL.ARGS(3,1) = FileFixLoggingPath + CALL.ARGS(3,2) = UVRPC.STRING + CALL.ARGS(4,1) = FileFixOutput + CALL.ARGS(4,2) = UVRPC.INT + CALL.ARGS(5,1) = FileFixOutputPath + CALL.ARGS(5,2) = UVRPC.STRING + + If RPC.CALL(FileFixConId, " ", 5, MAT CALL.ARGS, RES.COUNT, MAT RES.ARGS) Then + Error = RES.ARGS(1,1) + End Else + Error = Status() - 80000 + End + Return + +*********************************************************************** +* ShutdownFileFix +*********************************************************************** +ShutdownFileFix: + * Shutdown the subsystem + CALL.ARGS(1,1) = FILEFIX.SHUTDOWN ; * Shutdown + CALL.ARGS(1,2) = UVRPC.INT + + If RPC.CALL(FileFixConId, " ", 1, MAT CALL.ARGS, RES.COUNT, MAT RES.ARGS) Then + Error = RES.ARGS(1,1) + End Else + Error = Status() - 80000 + End + Return + +*********************************************************************** +* StartFileFixServer +*********************************************************************** +StartFileFixServer: + * Check to see if its already open and do not open if it is. + If FileFixOpen = 0 Then + SystemName = "localhost" + SERVICE = FILEFIX.SERVICE + + * Open the connection to the service + FileFixConId = RPC.CONNECT(SystemName, SERVICE) + If FileFixConId Then + FileFixOpen = 1 + Error = 0 + End Else + Error = Status() - 80000 + End + End + Return + +*********************************************************************** +* Process usp line - Unix only +* Numbers are space delimited +* Strings are delimited with char(255) and a space - which is determined +* by the mask which has been set up for this field: mask value of 1 +* denotes that the delimeter is char(255), mask value of 0 denotes +* that the delimeter is a space +*********************************************************************** +ProcessUspLine: + +************************** +* OS specific code start * +************************** + + If OS.TYPE = "UNIX" Then + NewLine = '' + Line = Line[2,9999] + UspFields = Len(Mask) + For K = 1 To UspFields + If Mask[K,1] Then + Ix = Index(Line,Char(255),1) + NewLine = Line[1,Ix-1] + Line = Line[Ix+2,HUGE] + End Else + NewLine = Line[" ",1,1] + Line = Line[" ",2,HUGE] + End + Next + End + +************************ +* OS specific code end * +************************ + + Return + +************************************************************************ +* PutPrinter - Writes a printer definition to the sp.config +* file (unix only) +* +* Input: DevName +* DevRec +* Output: NONE +************************************************************************ +PutPrinter: + +************************** +* OS specific code start * +************************** + + If OS.TYPE = "UNIX" Then + +* First set up an sp.config format line for this printer + + DevLine = DevName : " " : DevRec<2> ; * printer name & path + DevLine = DevName:" ":DevRec<2> + If DevRec<6> # "" Then + DevLine := " DRIVER ":DevRec<6> + End + If DevRec<7> # "" Then + DevLine := " FORMS ":DevRec<7> + End + Begin Case + Case DevRec<8> = 2 + DevLine := " DTR ON" + Case DevRec<8> = 3 + DevLine := " XOFF STARTANY ON" + Case DevRec<8> = 4 + DevLine := " XOFF STARTANY OFF" + End Case + If DevRec<9> # 1 Then + DevLine := " NOPRINT" + End + If DevRec<10> # 1 Then + DevLine := " NOQUEUE" + End + If DevRec<11> # "" Then + DevLine := " BAUD " : baud.array> + End + If DevRec<12> # "" Then + DevLine := " PARITY " : parity.array> + End + If DevRec<13> > 1 Then ; * Mode 1 is no conversion + DevLine := " CRMODE " : cr.array> + End + If DevRec<14> Then + DevLine := " TABS ON" + End Else + DevLine := " TABS OFF" + End + If DevRec<15> # "" Then + DevLine := " FFDELAY " : DevRec<15> + End + If DevRec<16> # "" Then + DevLine := " LFDELAY " : DevRec<16> - 1 + End + If DevRec<17> # "" Then + DevLine := " DATABITS " : DevRec<17> + End + If DevRec<5, 1> # "" Then + DevLine := " LOCKFILE " : DevRec<5, 1> + If DevRec<5, 2> # "" Then + DevLine := " LOCKFILE " : DevRec<5,2> + End + End + If DevRec<18> # "" Then + DevLine := " ":DevRec<18> + End + If DevRec<19> # "" Then + DevLine := " MAPNAME " : DevRec<19> + End + +* Now write the definition line to the sp.config file + + SpConfigPath = SPOOL.DIR : "/sp.config" + Config = '' + +* Open the sp.config file. If it does not exist then create it. + + OpenSeq SpConfigPath TO FL Else + Create FL Else + Error = EADM.NOSPCONFIG + Return + End + End + + Found = False + Ct = 0 + Loop + Ct += 1 + ReadSeq Line From FL Else Line = '' + Until Status() Do + If Line[" ",1,1] = DevName Then + Found = Ct + End + Config<-1> = Line + Repeat + If Not(Found) Then Found = -1 + + Config = DevLine + +* Write Config file back + + Seek FL,0 Else Null + WeofSeq FL + Dc = Dcount(Config,@fm) + For I = 1 To Dc + WriteSeq Config On FL Else Null + Next I + CloseSeq FL + +* Now reset the spooler to ensure that usplog contains details +* for this new printer + + ExLine = USA.PATH:" -r" + GoSub ShellCommand + End + +************************ +* OS specific code end * +************************ + + Return + +************************************************************************ +* ReadAndConvertHosts - Reads the /etc/hosts file and converts +* the contents into usable data +* Unix only +* +* The ETC.FVAR global must contain the +* open file variable for /etc. +* +* Sets up two arrays: +* +* OrigHosts - contains unmodified +* data from hosts file +* HostData - line feeds converted to +* field marks, comment and +* blank lines left unchanged, +* each host definition line +* contains: +* IPAddr @VM Name @SM Name.... +************************************************************************ +ReadAndConvertHosts: + +************************** +* OS specific code start * +************************** + + If OS.TYPE = "UNIX" Then + +* Read hosts file - take a lock on the file so that no-one else +* can update it - this will be released when the user exits +* network services administration + + Readu OrigHosts From ETC.FVAR, "hosts" Locked + Error = EADM.RECLOCKED + End Else + Error = EADM.CANTREAD + End + If Error = 0 Then + HostData = OrigHosts + Convert Char(10) To @fm In HostData + NumLines = DCount(HostData, @fm) + +* Parse the /etc/hosts file. Any line starting with "#" is a comment +* line and can be ignored. Format of a host definition line is as +* follows: +* +* [...] # + + For Index = 1 To NumLines + If HostData # "" And HostData[1,1] # "#" Then + Line = Trim(HostData) + Pos = Index(Line, '#', 1) + If Pos Then Line = Line[1, Pos - 1] + Pos = Index(Line, ' ', 1) + HostData = Line[1, Pos - 1] : @vm : Convert(' ', @sm, Line[Pos + 1, Len(Line)]) + End + Next I + End + End + +************************ +* OS specific code end * +************************ + + Return + +************************************************************************ +* ReadSeqFile +************************************************************************ +ReadSeqFile: + +$OPTIONS EXTRA.DELIM + + OpenSeq FileName To FL Else + Error = EADM.NOFILE + Return + End + + NewText = '' + Done = False + Loop + ReadSeq Line From FL Else Done = True + Until Done or Status() Do + NewText<-1> = Line + Repeat + If KeepFileOpen = False Then + CloseSeq FL + End + +$OPTIONS -EXTRA.DELIM + + Return + +************************************************************************ +* SetPort - Searches the services file for the +* port which requires changing, changes +* the value, and writes the file back. +* If there is no existing line for this +* port, adds a new line (and comment) +* to the services file. Assumes that the +* 'etc' file has been opened to ETC.FVAR. +* +* Input: PortNo - new port number +* PortString - search string +* PortComment - comment +************************************************************************ +SetPort: + +* Read the services file and search for PortString. + + Readu Services From ETC.FVAR, "services" Locked + Error = EADM.RECLOCKED + End Else + Error = EADM.CANTREAD + End + + If Error = 0 Then + Convert Char(10) To @fm In Services + FindStr PortString In Services Setting LineNo Then + +* Port already has a definition. Find the port number and +* replace it + + PortLine = Services + PortLineLen = Len(PortLine) + Pos = 1 + Loop + Until PortLine[Pos,1] = " " Or PortLine[Pos,1] = Char(9) Or Pos > PortLineLen + Pos += 1 + Repeat + Loop + While (PortLine[Pos,1] = " " Or PortLine[Pos,1] = Char(9)) And Pos < PortLineLen + Pos += 1 + Repeat + NumLen = Index(PortLine[Pos, PortLineLen - Pos], '/', 1) - 1 + +* Now we've found the start position & length of the old port +* number, set up a new line by replacing the old port number +* with the new one + + NewPortLine = PortLine[1, Pos - 1] : PortNo + NewPortLine := PortLine[Pos + NumLen, PortLineLen - Pos - NumLen + 1] + Services = NewPortLine + End Else + +* No exisiting definition for this port, add one to the file + + Services<-1> = PortString : Char(9) : Char(9) : PortNo : "/tcp" + Services<-1> := Char(9) : Char(9) : Char(9) : PortComment + End + +* Write Services back to services file, maintaining lock + + Convert @fm To Char(10) In Services + Writeu Services To ETC.FVAR, "services" Locked + Error = EADM.RECLOCKED + End Else + Error = EADM.CANTWRITE + End + End + + Return + +*********************************************************************** +* ShellCommand +*********************************************************************** +ShellCommand: + +* Only add the quotes around the line on UNIX. On NT when using DOS /C +* there is no need for them. Also need to escape the & characters using +* ^& on NT and \& on UNIX. + + back = 0 +************************** +* OS specific code start * +************************** + + If OS.TYPE = "UNIX" Then + Command = OS.EXEC:" '" + If ExLine[LEN(ExLine)-1, 2] = "&&" Then + back = 1 +ExLine = ExLine[1, Len(ExLine) -2] + End + For x = 1 to Len(ExLine) + if ExLine[x,1] = "&" Then + Command := "\&" + End Else + Command := ExLine[x,1] + End + Next + If back Then + Command := " &" + End + Command := "'" + End Else + Command = OS.EXEC:" " + For x = 1 to Len(ExLine) + if ExLine[x,1] = "&" Then +* If we have a '&&' this is the NT Command separator so +* don't convert. + if ExLine[x-1,4] = " && " then + Command := "&" + x += 1 + End Else + Command := "^&" + End + End Else + Command := ExLine[x,1] + End + Next + End + +************************ +* OS specific code end * +************************ + + Execute Command, Out. > Out + + Return + +*********************************************************************** +* SpStatuses - creates an array containing job statuses +* Unix only +*********************************************************************** +SpStatuses: + +************************** +* OS specific code start * +************************** + + If OS.TYPE = "UNIX" Then + SpStatuses = "Wait" + SpStatuses<2> = "Hold" + SpStatuses<4> = "Active" + SpStatuses<8> = "Suspend" + SpStatuses<16> = "PHold" + End + +************************ +* OS specific code end * +************************ + + Return + +*********************************************************************** +* TCLCommand +*********************************************************************** +TCLCommand: + + Execute ExLine, Out. > Out, Select. > SList + + Return + +*********************************************************************** +* UnloadHeaderFileFixFile +*********************************************************************** +UnloadHeaderFileFixFile: + * Unload the file header + CALL.ARGS(1,1) = FILEFIX.UNLOADUVHEADER ; * Unload the header for the File + CALL.ARGS(1,2) = UVRPC.INT + + If RPC.CALL(FileFixConId, " ", 1, MAT CALL.ARGS, RES.COUNT, MAT RES.ARGS) Then + Error = RES.ARGS(1,1) + * Remapp error codes to match admin codes. + End Else + Error = Status() - 80000 + End + Return + +*********************************************************************** +* UvCommand +*********************************************************************** + +UvCommand: + + ExLine = UVHOMEBIN:ExLine + Gosub ShellCommand + + Return + +********************************************************************** +* WriteSeqFile +********************************************************************** +WriteSeqFile: + + If UnixFileOpen = False Then + OpenSeq FileName To FL Else + Create FL Else + Error = EADM.NOWRITEFILE + Return + End + End + End Else + Seek FL,0 Else + Error = EADM.SEEKERROR + Return + End + End + WEofSeq FL + Dc = Dcount(NewText,@fm) + For I =1 to Dc + WriteSeq NewText On FL Else + Error = EADM.WRITEERROR + I = Dc + End + Next + CloseSeq FL + + Return + +********************************************************************** +* WriteDbg - log debug text to file +* Expects debug text in LogText variable +********************************************************************** +WriteDbg: + + WriteSeq Change(LogText, @fm, Char(10)) On DEBUGFL Else Null + Seek DEBUGFL, 0, 2 Else Null + Return diff --git a/Ardent/UV/APP.PROGS/VOC.PATH.B b/Ardent/UV/APP.PROGS/VOC.PATH.B new file mode 100755 index 00000000..a086c3d9 --- /dev/null +++ b/Ardent/UV/APP.PROGS/VOC.PATH.B @@ -0,0 +1,132 @@ +******************************************************************************** +* +* Support of PR1ME INFORMATION suboutine '!VOC.PATHNAME' +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description......................................... +* 10/14/98 23801 SAP Change copyrights. +* 10/01/93 12299 LA Initial implementation. +* +******************************************************************************* +* START-DESCRIPTION +* +* This subroutine allows the user to get either the DATA or DICT portion of a +* specified VOC entry as a fully qualified pathname. +* +* Multi-file DATA pathnames are returned as dynamic arrays, so dynamic +* array accessing will be needed to extract the separate paths, RESULT<1>, +* RESULT<2> etc. +* +* CALL !VOC.PATHNAME(DICT, VOCENTRYNAME, RESULT, STATUS) +* +* where DICT (I) IK$DICT, or 'DICT' - return the fully qualified +* pathname of the DICT portion +* of the specified VOC entry +* IK$DATA or '' - return the fully qualified +* pathname of the DATA portion +* of the specified VOC entry +* VOCENTRYNAME (I) is the VOC entryname +* RESULT (O) is the resultant pathname(s) +* STATUS (O) status of the operation: +* 0 = Success +* IE$PAR = Bad parameters given, either DICT +* or VOCENTRYNAME +* IE$VOC.OPEN.FAILED +* = Unable to open VOC file +* IE$RNF = VOC entry record not found +* IE$VNF = VOC entry not a file record +* +* END-DESCRIPTION + +SUBROUTINE PR1ME(DICT.DATA, VOCENTRYNAME, VOC.PATH, STATUS) + +$OPTIONS DEFAULT +$INCLUDE UNIVERSE.INCLUDE INFO_ERRS.H +$INCLUDE UNIVERSE.INCLUDE INFO_KEYS.H +$INCLUDE UNIVERSE.INCLUDE UVKEYS.H + + L.VOCNAME = VOCENTRYNAME + VOC.PATH = '' + STATUS = 0 + + PATHNAME = '' + UVPATH = "*UVPATHNAME" + + IF LEN(L.VOCNAME) = 0 THEN + STATUS = IE$PAR + GOTO ERROR.EXIT + END + + BEGIN CASE + CASE DICT.DATA = '' OR DICT.DATA = 'DATA' OR DICT.DATA = IK$DATA + FIELD.NO = 2 + CASE DICT.DATA = 'DICT' OR DICT.DATA = IK$DICT + FIELD.NO = 3 + CASE 1 + STATUS = IE$PAR + GOTO ERROR.EXIT + END CASE + +* Open the VOC file and check that the record requested is a file record + + OPEN 'VOC' TO VOC.FILE ELSE + STATUS = IE$VOC.OPEN.FAILED + GOTO ERROR.EXIT + END + + READ RECORD FROM VOC.FILE, L.VOCNAME ELSE + STATUS = IE$RNF + GOTO ERROR.EXIT + END + + IF RECORD<1>[1,1] = 'F' OR RECORD<1>[1,1] = 'f' THEN + +* Expand path (multiple paths if multi-volumed file) + + VOC.PATH = RECORD + RESULT = '' + CALL @UVPATH(UVK$CREATEPATH, @PATH, VOC.PATH, RESULT, STATUS) + IF STATUS = IE$NOTRELATIVE + THEN + STATUS = 0 + CALL @UVPATH(UVK$PATHNAME, VOC.PATH, '', RESULT, STATUS) + END + + IF STATUS # 0 THEN GOTO ERROR.EXIT + + VOC.PATH = RESULT + + * If key is DATA and this is a multi-file record, then use what we + * have in VOC.PATH as the directory part and set up a multi-valued + * result using the values in field 8 + + IF FIELD.NO = 2 AND (RECORD<4> = 'M' OR RECORD<4> = 'm') THEN + BASE = VOC.PATH + VOC.PATH = '' + FILE.PATHS = RECORD<8> + FOR VALUE.NO = 1 TO DCOUNT(FILE.PATHS, @VM) + CALL @UVPATH(UVK$CREATEPATH, BASE, FILE.PATHS<1, VALUE.NO>, + RESULT, STATUS) + IF STATUS # 0 THEN GOTO ERROR.EXIT + VOC.PATH<1, VALUE.NO> = RESULT + NEXT VALUE.NO + END + END ELSE + STATUS = IE$VNF + END + +ERROR.EXIT: + + RETURN + +END diff --git a/Ardent/UV/APP.PROGS/WK1.EXPORT b/Ardent/UV/APP.PROGS/WK1.EXPORT new file mode 100755 index 00000000..840c1f50 --- /dev/null +++ b/Ardent/UV/APP.PROGS/WK1.EXPORT @@ -0,0 +1,502 @@ +****************************************************************************** +* +* WK1.EXPORT - Generate LOTUS WK1 format file from &SAVEDLISTS& entry. +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description........................................ +* 10/14/98 23801 SAP Change copyrights. +* 07/22/92 9064 WLC Initial Release. +******************************************************************************* +* +* LOTUS WK1 FORMAT SUMMARY: +* +* The LOTUS 1-2-3 WK1 format consists of a series of "records" as +* defined by LOTUS. The records which are required for the +* proper export of UniVerse data are: +* +* BOF - Beginning of File +* WINDOW1 - Part of Worksheet descriptor area +* COLW1 - Part of Worksheet descriptor area +* HIDCOL1 - Part of Worksheet descriptor area +* INTEGER - Used for integers (-32768...32767) +* NUMBER - Used for floating point numbers +* (anything that doesn't fit in INTEGER format) +* LABEL - Used for text fields +* EOF - End of File +* +* All "records" have the following format: +* +* --------------------------------- +* | Record Header | Record Body... +* |-------------------------------- +* | 1 | 2 | 3 | 4 | | | |... +* |---------------|---------------- +* | code | len | data... +* --------------------------------- +* +* Each record consists of a Record Header and a Record Body. +* The Record Header is 4 bytes: 2 byte code, 2 byte length. +* The code designates the type of record being stored. +* The length specifies the length of the Record Body. +* The Record Body varies in length and content depending on +* the type of record being stored. +* +* For more information, please refer to the "Lotus File Formats +* for 1-2-3 Symphony & Jazz" by Lotus Books. +* +******************************************************************************* + +SUBROUTINE WK1.EXPORT(return.code) + +$INCLUDE UNIVERSE.INCLUDE UVEXPORT.H + + return.code = 0 + DONE = 0 + BUFFER='' + + * Write BOF + data = '0000':'0002':'0406' + GOSUB SWAP + + GOSUB Gen.Header + GOSUB Write.Buffer + IF return.code THEN RETURN + + GOSUB Process.Data + IF return.code THEN RETURN + + * Write EOF + data = '0001':'0000' + GOSUB SWAP + + DONE = 1 + GOSUB Write.Buffer +RETURN + +**************************************************************************** +* Write.Buffer: +* As data is added to the BUFFER variable, it is written out by +* Write.Buffer. Care is taken not to write over a swap boundary by +* making sure we write an even number of bytes, and put the remainder +* back in BUFFER for the next write. +***************************************************************************** +Write.Buffer: + IF BUFFER = '' THEN RETURN + sav = '' + IF NOT(DONE) THEN + eod = LEN(BUFFER) + IF MOD(eod,2) = 1 THEN + sav = BUFFER[eod,1] + BUFFER = BUFFER[1,eod-1] + END + END + WRITEBLK BUFFER ON SEQ.result ELSE return.code=WRITE.ERR; RETURN + BUFFER = sav +RETURN + +************************************************************************** +* Process.Data: +* Go through the &SAVEDLISTS& data one field at a time, skipping to +* the next record after reading each field. Re-open the file when +* you reach the end, until you have processed all fields. Keep track +* of the number of values present in each record so that normalization +* can be done if need be. +*************************************************************************** +Process.Data: + this.record = 1 + this.field = 1 + mv.row = 4 + LOOP + WHILE (this.field <= fcount) + num.done += 1 + record.num = INT((num.done / fcount) + .5) + new.bar = INT((num.done / num.records) * 50) + IF new.bar > old.bar AND interactive THEN + PRINT @(15,10): + CALL *INVERSE.B(1) + PRINT SPACE(new.bar): + CALL *INVERSE.B(0) + old.bar = new.bar + END + + mv.count = 1 ;* Keep track of the highest number of values. + * Advance to this.field and set data to it's contents + FOR fld = 1 TO this.field + READSEQ cell FROM SEQ.exp ELSE + this.record = 1 + this.field += 1 + mv.row = 4 + CLOSESEQ SEQ.exp + OPENSEQ "&SAVEDLISTS&",saved.list TO SEQ.exp ELSE return.code = OPEN.ERR; RETURN + GOTO next.field + END + vcount = COUNT(cell,@VM)+1 + IF vcount > mv.count THEN mv.count = vcount + NEXT fld + + * Advance to next record + FOR fld = this.field+1 TO fcount + READSEQ skipit FROM SEQ.exp ELSE return.code = READ.ERR; RETURN + vcount = COUNT(skipit,@VM)+1 + IF vcount > mv.count THEN mv.count = vcount + NEXT fld + + GOSUB Write.Cell + + this.record += 1 + +next.field: + + IF LEN(BUFFER) > 2000 THEN GOSUB Write.Buffer; IF return.code THEN RETURN + REPEAT +RETURN + +**************************************************************************** +* Write.Cell: +* Loop through the values of the data up to the highest number of values +* contained in the current data record. If we are normalizing, replicate +* the single valued data for the total number of values. Otherwise, +* write an empty cell in subsequent rows for the single values. +* Multi-valued data is not replicated when it contains less values than +* the max for this record. +***************************************************************************** +Write.Cell: + vcount = count(cell,@VM) + FOR value = 1 TO mv.count + IF vcount THEN + this.value = value + END ELSE this.value = 1 + IF cell#'' THEN + cell.out = OCONV(cell<1,this.value>, conv.code) + END ELSE + cell.out = cell + END + column = this.field - 1 + rec.ix = this.field + field.start - 1 + IF record = STR.CODE THEN + format = "L" + END ELSE + format = record + END + CODE = record + buff = mv.row:@FM:column:@FM:cell.out:@FM:format + mv.row += 1 + GOSUB FILL.BUFFER + IF NOT(normalize) AND NOT(vcount) THEN cell="" + IF normalize AND (single.multi = "M") AND (value > vcount) THEN cell="" + NEXT value +RETURN + +**************************************************************************** +* FILL.BUFFER: +* Given the CODE value, generate either INTEGER, NUMBER or LABEL cell +* containing the data in buff. +**************************************************************************** +FILL.BUFFER: + + row = ICONV(buff,'MCX') + col = ICONV(buff,'MCX') + row = FMT(row,'R%4') + col = FMT(col,'R%4') + + BEGIN CASE + + CASE CODE = INT.CODE + IF NOT(NUM(buff)) THEN GOTO do.string + IF (buff < -32768) OR (buff > 32767) THEN GOTO do.float + data = '000D':'0007' + GOSUB SWAP + * Integer's don't have decimal palces + data = '00' + GOSUB SWAP + data = col:row:FMT(ICONV(INT(buff),'MCX'),'R%4') + GOSUB SWAP + + CASE CODE = FLOAT.CODE +do.float: + IF NOT(NUM(buff)) THEN GOTO do.string + GOSUB FLOAT + data = col:row + GOSUB SWAP + BUFFER := float.string + + CASE CODE = STR.CODE +do.string: + strlen = LEN(buff) + * Truncate after 240 characters since it is the LOTUS limit. + IF (strlen > 240) THEN + buff = buff[1,240] + strlen = 240 + END + + * Add 7 for 1 format byte + * 2 column bytes, + * 2 row bytes, + * 1 leading format character, + * 1 terminating null + data = strlen+7 + data = FMT(ICONV(data,'MCX'),'R%4') + + * LABEL cell + data = '000F':data + GOSUB SWAP + + * Format Code: + * Protected (bit 7=1), + * Special (bit 654=111), + * Default (bit 3210=1111) + data = 'FF' + GOSUB SWAP + + data = col:row + GOSUB SWAP + + * Generate the leading format character + BEGIN CASE + CASE buff = 'L' + * Single Quote : Left Justification + data = '27' + CASE buff = 'R' + * Double Quote : Right Justification + data = '22' + CASE buff = 'C' + * Carrot : Center text + data = '5E' + CASE buff = 'P' + * Back slash : Repeat character + data = '5C' + CASE 1 + * Default to Left justify + data = '27' + END CASE + GOSUB SWAP + + * Write each byte of data + FOR ix = 1 TO strlen + data = FMT(ICONV(SEQ(buff[ix,1]),'MCX'),'R%2') + GOSUB SWAP + NEXT ix + + * Terminate with NULL + data = '00' + GOSUB SWAP + + END CASE +RETURN + +***************************************************************************** +* SWAP: +* Byte swap output since LOTUS always uses 80386 format +***************************************************************************** +SWAP: + outlen = LEN(data) + FOR byte.num = 1 TO outlen STEP 4 + byte1 = data[byte.num,2] + byte2 = data[byte.num+2,2] + * If we have two bytes, then swap them + IF byte1 # '' AND byte2 # '' THEN + byte1 = OCONV(byte1,'MCX') + byte2 = OCONV(byte2,'MCX') + BUFFER := CHAR(byte2):CHAR(byte1) + END ELSE + IF byte1 # '' AND byte2 = '' THEN + byte1 = OCONV(byte1,'MCX') + BUFFER := CHAR(byte1) + END + END + NEXT byte +RETURN + +****************************************************************************** +* FLOAT: +* Generate an IEEE floating point value from the number stored in buff. +* IEEE specifies a 64 bit representation for floating point which +* consists of: +* +* 1 sign bit (bit 63) 0 = +, 1 = - +* 11 exponent bits (bit 62 - 52) 2^(exponent - 1023) +* 52 fraction bits (bit 51 - 0) With implied leading 1 +* +* The 8 bytes of the floating point result are stored in REVERSE order +* (low-to-high as addresses ascend) This is not to be confused with +* the 80386 byte swapping. Floating point values are not swapped, but +* reversed. +* +****************************************************************************** +FLOAT: + * NUMBER Record + data = '000E':'000D' + GOSUB SWAP + + * write decimal places + data = buff + IF data = '' THEN data = 2 ELSE IF (data < 0) OR (data > 15) THEN data = 0 + data = FMT(data,'R%2') + GOSUB SWAP + + float = buff + IF float < 0 THEN sign = 2048 ELSE sign = 0 + data = ABS(float) + power = 0 + float = '' + IF data # 0 THEN + IF data < 1 THEN + * value is between 0 and 1 + LOOP + power -= 1 + WHILE (2**power > data) DO + REPEAT + END ELSE + LOOP + WHILE (2**power <= data) DO + power += 1 + REPEAT + power -= 1 + END + + * reduce the number to the fractional part remaining + number = (data/2**power)-1 + IF power > 1024 THEN power = 1024 + power += 1023 + + byte = 0 + addon = 16 + nibble = 4 + BIT = 0 + fraction = '' + * Now form 52-bit fraction field... + LOOP + WHILE (BIT <= 51) DO + addon = addon/2 + number += number + int.portion = INT(number) + IF MOD(int.portion,2) THEN + byte += addon + END + IF MOD(BIT+1,nibble)=0 THEN + fraction := ICONV(byte,'MCX') + byte = 0 + addon = 16 + END + BIT += 1 + REPEAT + END ELSE fraction = 0 + + float = ICONV(sign+power,'MCX'):fraction + len.float = LEN(float) + float := STR('0',16-len.float) + float.string = "" + * format float.string in character format, reversing the order of bytes + FOR B = 1 TO 16 STEP 2 + b = CHAR(OCONV(float[B,2], 'MCX')) + float.string = b:float.string + NEXT B +RETURN + +************************************************************************* +* +* Generate the LOTUS 123 header for the .WK1 format as specified +* in the Lotus File Formats for 1-2-3 Symphony & Jazz publication +* distributed by lotus Books. +* +************************************************************************* +Gen.Header: + row = 0 + + ************************************************* + * WINDOW1 Record consist of : + * code, length, cursor column, cursor row, + * format byte, unused, column/row defaults + ************************************************* + + * code, length + data = '0007':'0020' + * cursor column, cursor row (0,0) + data := '0000':'0000' + GOSUB SWAP + + * Format Byte: + * Protected: (bit 7=1) + * Fixed: (bit 654=0) + * Decimal places: (bit 3210=2) + * Resulting in: 1000 0010 (82 hex) + data = '82' + GOSUB SWAP + + * unused byte + data = '00' + GOSUB SWAP + + * Now for the column/row defaults + data = '0009' ;* default column width + data := '0006' ;* # columns on screen + data := '0014' ;* # rows on screen + data := '0000' ;* left column + data := '0000' ;* top row + data := '0000' ;* number of title columns + data := '0000' ;* number of title rows + data := '0000' ;* left title column + data := '0000' ;* left title row + data := '0000' ;* top left column + data := '0000' ;* top left row + data := '00FF' ;* columns in window + data := '0000' ;* unused + GOSUB SWAP + + * Generate a COLW1 Record for each field to be written + * containing the column spacing for that field + column = 0 + FOR fld = 1 TO fcount + IF (LEN(display) > width) THEN + col.width = ICONV(LEN(display)+1, 'MCX') + END ELSE + col.width = ICONV(width+1,'MCX') + END + col.width = FMT(col.width,'R%2') + temp = ICONV(column,'MCX') + temp = FMT(temp,'R%4') + * COLW1 Record: + data = '0008':'0003':temp:col.width + GOSUB SWAP + column += 1 + NEXT fld + + * HIDCOL1 Record: all columns have hidden columns turned off + * each bit of the 32 bytes represents a single column. + data = '0064':'0020':STR('00',32) + GOSUB SWAP + + * Inform FILL.BUFFER that strings are to be generated... + CODE = STR.CODE + + * Write out the title of the spreadsheet centered in center column + column = INT(fcount/2) + buff = row:@FM:column:@FM:record:@FM:'C' + GOSUB FILL.BUFFER + row += 2 + + * Set up the column headings for each field using the DICT display name + FOR f = 0 TO fcount-1 + IF record = STR.CODE THEN format="L" ELSE format="R" + buff = row:@FM:f:@FM:display:@FM:format + GOSUB FILL.BUFFER + NEXT f + row += 1 + + * Underline the headings + FOR f = 0 TO fcount-1 + buff = row:@FM:f:@FM:'-':@FM:'P' + GOSUB FILL.BUFFER + NEXT f + row += 1 +RETURN diff --git a/Ardent/UV/APP.PROGS/WRAP.PRINT b/Ardent/UV/APP.PROGS/WRAP.PRINT new file mode 100755 index 00000000..323c22e0 --- /dev/null +++ b/Ardent/UV/APP.PROGS/WRAP.PRINT @@ -0,0 +1,87 @@ +******************************************************************************* +* +* SQL catalog verification tool. +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenance log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description......................................... +* 10/14/98 23801 SAP Change copyrights. +* 07/18/93 10131 DPB Initial creation of catalog verification tool. +* +******************************************************************************* +* +* WRAP.PRINT( text, length, indent, rindent ) +* +* This subroutine will wrap the input text on word breaks near 'length', and +* will indent the lines by 'indent' number of spaces. +* +* text The text that needs to be wraped. +* length The length of the largest line possible on the screen. +* indent The number of spaces to indent the output lines. +* rindent The number of spaces to indent all but the first line. +* +******************************************************************************* +SUBROUTINE WRAP.PRINT( text, length, indent, rindent) +INCLUDE UNIVERSE.INCLUDE VERIFY.COM + +pline = text +done = 0 +first = 1 + +LOOP + IF first + THEN + IF LEN(pline)+indent < length + THEN + done = 1 + IF LEN(pline) THEN PRINT STR(" ",indent):pline + END + END + ELSE + IF LEN(pline)+indent+rindent < length + THEN + done = 1 + IF LEN(pline) THEN PRINT STR(" ",indent):STR(" ",rindent):pline + END + END +WHILE NOT(done) + + pline = STR(" ",indent):pline + IF first + THEN + first = 0 + END + ELSE + pline = STR(" ",rindent):pline + END + finished = 0 + I = length + + LOOP + IF (I < (length/2)) OR (pline[I,1] = " ") THEN finished = 1 + WHILE NOT(finished) + I = I - 1 + REPEAT + + IF I < (length/2) + THEN + PRINT ON Pchan pline[1,(length-5)] + pline = pline[(length-5)+1,LEN(pline)] + END + ELSE + PRINT ON Pchan pline[1,I] + pline = pline[I+1,LEN(pline)] + END + +REPEAT + +RETURN diff --git a/Ardent/UV/APP.PROGS/YES.NO.BOX.B b/Ardent/UV/APP.PROGS/YES.NO.BOX.B new file mode 100755 index 00000000..502b7067 --- /dev/null +++ b/Ardent/UV/APP.PROGS/YES.NO.BOX.B @@ -0,0 +1,39 @@ +******************************************************************************* +* +* New System Admin - This routine creates a box with a line of text, and +* then prints two buttons. Yes and No. +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenence log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description......................................... +* 10/14/98 23801 SAP Change copyrights. +* 05/15/96 18330 LDG Changed LEN() function to LENDP() for NLS DBCS. +* 03/22/91 7673 DPB Fixed problem with button selection +* 03/14/91 7673 DTM Changed to call CHOICE.BOX.B +* 11/05/90 7393 DPB Routine first created and admin'd. +******************************************************************************* + +SUBROUTINE YES.NO.BOX.B(start.line, text, flag) +$INCLUDE UNIVERSE.INCLUDE MTF.INCL.H +length = LENDP(text)+4 +IF length < 10 THEN length = 10 ELSE IF length > 76 THEN length = 76 +mess=UVREADMSG(073199,"") +B.array="" +B.array<1>=2 +B.array<2>=mess<1> +B.array<3>=mess<2> +if flag = 0 THEN flag =2 +CALL *CHOICE.BOX.B(start.line,3,length,text,B.array,flag,"") +IF flag=1 THEN flag = 0 +ELSE IF flag=0 THEN flag = 1 +RETURN +END diff --git a/Ardent/UV/APP.PROGS/YESNO.B b/Ardent/UV/APP.PROGS/YESNO.B new file mode 100755 index 00000000..d689f4c2 --- /dev/null +++ b/Ardent/UV/APP.PROGS/YESNO.B @@ -0,0 +1,264 @@ +****************************************************************************** +* +* YESNO subroutine for PI/open COPY verb +* +* Module %M% Version %I% Date %H% +* +* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved +* This is unpublished proprietary source code of Ardent Software Inc. +* The copyright notice above does not evidence any actual or intended +* publication of such source code. +* +******************************************************************************* +* +* Maintenance log - insert most recent change descriptions at top +* +* Date.... GTAR# WHO Description......................................... +* 10/14/98 23801 SAP Change copyrights. +* 07/16/93 10871 EAP Minor changes for Universe compatibility +* 06/25/93 10871 EAP Ported PI/open COPY verb to Universe +******************************************************************************** START-HISTORY: +* +* START-DESCRIPTION: +* +* This function is used to ensure that a correct response is typed +* in answer to a question requiring a yes/no/quit style answer. +* +* The function has the following calling sequence: +* +* REPLY = YESNO( PROMPT.MESS, ALLOWED.RESPONSE, DEFAULT.RESPONSE) +* +* Input arguments: +* +* PROMPT.MESS A string which contains the prompt to which an +* answer is required. The string will be printed +* on the users terminal without a terminating +* newline character. If the prompt is held in +* a message file then the caller should extract +* it with any necessary arguments and pass the +* result to the yesno function. +* +* ALLOWED.RESPONSE An integer value which specifies which options +* the yesno function will allow the user to type. +* A number of constants are defined in the file +* "YESNO.INS.IBAS" to aid in specifying the +* permitted responses. Adding these constants +* together selects a set of possible responses. +* The constants provided are: +* +* YN$YES - Permit "YES" type responses +* YN$NO - Permit "NO" type responses +* YN$QUIT - Permit "QUIT" type responses +* YN$DFLT - Permit "" response but return +* a default value to caller. The default +* value may be YN$NULL if the caller +* wishes to identify use of the +* key as a discrete event. +* +* If the value provided as this argument is not +* a combination of the above constants then a default +* value is set. The default is +* YN$YES + YN$NO + YN$QUIT +* +* DEFAULT.RESPONSE If YN$DFLT is selected as an ALLOWED.RESPONSE +* then this is the value returned to the caller. +* No checking is done on this value. +* +* Returned values: +* +* The possible return values are specified in the file "YESNO.INS.IBAS" +* and are as follows: +* +* YN$YES.RES A yes response was typed by the user +* +* YN$NO.RES A no response was typed by the user +* +* YN$QUIT.RES A quit response was typed by the user +* +* YN$NULL.RES The key was typed by the user +* +* N.B. If the YN$DFLT option is enabled and the key is +* typed the default value passed by the caller will be returned +* it need not be one of the values given above. +* +* END-DESCRIPTION +* +* START-DESIGN: +* +* Check call args; +* Get test strings; +* REPEAT +* Print the prompt message; +* Get users response; +* IF response is +* THEN Handle default situation; +* IF Yes enabled THEN Check for legal yes response; +* IF No enabled THEN Check for legal no response; +* IF quit enabled THEN Check for legal quit response; +* IF ambiguous OR illegal response +* THEN Print an error message; +* UNTIL legal response received +* +* END-DESIGN +* +* START-FUTURES: +* +* END-FUTURES +* +* START-CODE: +* +* + FUNCTION YESNO (PROMPT.MESS, ALLOWED.RESPONSE, DEFAULT.RESPONSE) + +$INCLUDE UNIVERSE.INCLUDE YESNO.H + +EQUATE YN$YES.TEXT.ID TO '86011' +EQUATE YN$NO.TEXT.ID TO '86012' +EQUATE YN$QUIT.TEXT.ID TO '86013' +EQUATE YN$RETURN.TEXT.ID TO '86014' +EQUATE YN$YESNO.ERROR.ID TO '86010' +* +EQUATE UNDEF.RES TO -1 +EQUATE AMBIG.RES TO -2 + +DEFFUN UVREADMSG(msg,args) CALLING '*UVREADMSG' + +* +* Validate call - Ensure that the ALLOWED parameter is set to give +* some action if its not set default +* + GOSUB CHECK.ARGS +* +* Set up initial values and test strings +* + @SYSTEM.SET=0 +* + YES.TEXT = UVREADMSG(YN$YES.TEXT.ID,"") + NO.TEXT = UVREADMSG(YN$NO.TEXT.ID,"") + QUIT.TEXT = UVREADMSG(YN$QUIT.TEXT.ID,"") + RETURN.TEXT = UVREADMSG(YN$RETURN.TEXT.ID,"") +* +* Create a string containing the permitted responses for +* inclusion in the error message produced for illegal responses +* + GOSUB MAKE.LEGAL + ISATTY = (@TTY NE 'phantom') +* + LOOP +* +* Print the caller supplied prompt and input the users response +* stripping leading and trailing spaces and converting to upper case +* + TEXT.FRAGMENTS = DCOUNT(PROMPT.MESS, @TM) + FOR FRAGMENT = 1 TO (TEXT.FRAGMENTS - 1) + PRINT FIELD(PROMPT.MESS, @TM, FRAGMENT, 1) + NEXT FRAGMENT + PRINT FIELD(PROMPT.MESS, @TM, TEXT.FRAGMENTS, 1): + INPUT USR.RESPONSE + IF NOT(ISATTY) THEN + PRINT " ":USR.RESPONSE + END + USR.RESPONSE = OCONV(TRIM(USR.RESPONSE), 'MCU') + YN.RESULT = UNDEF.RES +* +* Handle the default situation if use of the key enabled +* + IF USR.RESPONSE = '' AND BITAND(ALLOWED.RESPONSE, YN$DFLT) THEN + RETURN(DEFAULT.RESPONSE) + END +* +* For each possible response check whether it is in the allowed +* set. If it is check the users response against the strings +* for the possble response. +* + IF BITAND(ALLOWED.RESPONSE, YN$YES) THEN + CR.RES.VAL = YN$YES.RES + CR.PERMITTED = YES.TEXT + GOSUB CHECK.REPLY + END + IF BITAND(ALLOWED.RESPONSE, YN$NO) THEN + CR.RES.VAL = YN$NO.RES + CR.PERMITTED = NO.TEXT + GOSUB CHECK.REPLY + END + IF BITAND(ALLOWED.RESPONSE, YN$QUIT) THEN + CR.RES.VAL = YN$QUIT.RES + CR.PERMITTED = QUIT.TEXT + GOSUB CHECK.REPLY + END +* +* If the user has not responded with a legal response then print a message +* to this effect and repeat the loop until a legal response is received +* + IF YN.RESULT = UNDEF.RES OR YN.RESULT = AMBIG.RES THEN + ERR.MESS = UVREADMSG(YN$YESNO.ERROR.ID, LEGAL.STR) + CRT ERR.MESS + END +* + WHILE YN.RESULT = UNDEF.RES OR YN.RESULT = AMBIG.RES + REPEAT +* + RETURN (YN.RESULT) +* +* +CHECK.REPLY: +* +* Subroutine to check users response against a set of strings separated +* by field marks. Users reponse is acceptable provided the typed +* string matches the test string over the length of the typed string. +* If the typed string also matches a string from a different set of +* test strings it will be rejected. +* + FOR J=1 TO 99999 + SUBSTR = FIELD(CR.PERMITTED, @FM, J, 1) + WHILE SUBSTR # "" + IF LEN(USR.RESPONSE) <= LEN(SUBSTR) AND USR.RESPONSE = SUBSTR[1,LEN(USR.RESPONSE)] THEN + IF YN.RESULT = UNDEF.RES THEN + YN.RESULT = CR.RES.VAL + END ELSE + IF YN.RESULT # CR.RES.VAL THEN + YN.RESULT = AMBIG.RES + END ELSE + YN.RESULT = CR.RES.VAL + END + END + END + NEXT J + RETURN(0) +* +* +CHECK.ARGS: +* +* Subroutine to check that the ALLOWED.RESPONSE argument is set +* if it is not then set up a default action +* + IF BITAND(ALLOWED.RESPONSE, BITNOT(YN$YES+YN$NO+YN$QUIT+YN$DFLT)) OR ALLOWED.RESPONSE = 0 THEN + ALLOWED.RESPONSE = YN$YES+YN$NO+YN$QUIT + END + RETURN(0) +* +* +MAKE.LEGAL: +* +* Subroutine to form a string containing the permitted responses +* + LEGAL.STR = '' + IF BITAND(ALLOWED.RESPONSE, YN$YES) THEN + LEGAL.STR = LEGAL.STR : YES.TEXT : @FM + END + IF BITAND(ALLOWED.RESPONSE, YN$NO) THEN + LEGAL.STR = LEGAL.STR : NO.TEXT : @FM + END + IF BITAND(ALLOWED.RESPONSE, YN$QUIT) THEN + LEGAL.STR = LEGAL.STR : QUIT.TEXT : @FM + END + IF BITAND(ALLOWED.RESPONSE, YN$DFLT) THEN + LEGAL.STR = LEGAL.STR : RETURN.TEXT : @FM + END + CONVERT @FM TO ' ' IN LEGAL.STR + LEGAL.STR = TRIM(LEGAL.STR) + RETURN(0) +* + END +* +* END-CODE diff --git a/Ardent/UV/BLTRS b/Ardent/UV/BLTRS new file mode 100755 index 0000000000000000000000000000000000000000..77497e5c698a97466a6070b3deb84e8d9a4df7ba GIT binary patch literal 10240 zcmeI1J(OKl701tgT11Vkrvw=_N+83B0{ZTo_h#N`z#%hY!~sVbAj+tyQAb2YML^aR zDJW7C@3jXWGz!rqEOQkaTeYzNU_&;yVeYz~3SUX{0!oY-q2?Hy8LRc{x zI@$DA+P!=@9j2XOdU=ua#ojO-c87f~xNDC%_PLb~d*z9mx>#~bc$5%2*&T-08}fJg z@C;S|^5HJktXlVmbEB0%^Oh!;oCj;l@$QQHsWUH*?bR%b(UVvGAwW`+Dzp|p7s4gS z>1?GP^*t~%J2JC3#9EovrMaDUIpt4xxuYjKr6pwK(jk221h}$U_V!G_z6|RP2hn6B zN^+)}%$8P0u8bH+MGnck;OwOcXV5SX*0I}JAEBsHF#_nc|MMYahSkmvZJ~&o*Z?qk zrb}dg#w^dz^CzO8cE}tD=d9x_Y;|RI-$s6MekhV>BsxD7!*t)}R0<+HGfd&2a-(ck z5jCv0>0^Z=yO(4)?22l0I2#z)670AtHk42@^@R|GC#)le)hKA4&_&}zy9tM@U|n>q zWycywX1hZ~PBxKUqezdHXp^Ro�?CScEM!1VtC^0G%5s}V!2z;jglsw=P#?ZqD) z>u7}+n}zZRbBlonafX3qSiKLw>M~Qzzs!qei9JtFfP30-+u7PyYI1$K8Z&)dwWwzD z470?V&EiwD?}GIVMfM(x_U_sb4tz0$HyvxeV(-X^UzH!Mfpy-oo_4J5T)@WB{ooX` z$0)MtnP}6F{on%fZO3>vV(i)vmaZcPI@SvnUjAP{kcBJ8QT`^WJColhfq|uV2ur4D zC%buz1v({~Gs9W)iwnOuQss|BYZHuBiv0Z6ieE9`d@-3N$S~oV?zQMLni1I27-P$M z@b)?8w}hF;B*$>Xxfs3bRYPyd{x5}a#_-zN-G(R3ky0$n@%}n8uelCsRfm}v-?{`# zqFp+q`$E53cy>Ty@M*BtDB`GZ9MOlb2*eX##ZXBZK^~|~4NJ$8i^v{u`T3}SEl;D{ zxI7SH2Ig1n5LbNwtbr@Zg`>O9zLF=l;;=E=;+NvzP} zEO=8Caq+_jE@I%fW4SCwx{?o(>$vQXtFpO&)cCL8^wCI`uP3HE#)Dfau1+#4{`!n7 zR~SW(x;V$WG^b}Nx0T0n8k0dgH3=8ADme-6Ylhp-el~85s$4|ym`xivy~Z&oH63;@ zfVZC_o*p$@M}@f-#`voAAb3Brk37Kfe!i8`8T5jH2a}Y?nWS_;e|Vzit}bm|w|0G6 zG40iq9KKp5n_!=F>|dJg?iF6CF__y`Re|I@cvBSF{u{%KX66~nPJM3r2FAwmes5ex zhcXW2{AlOLkNDg=vS(cOPgU8vdo^C=K9_;9L6JRwxrRR1{z?b~!)<4OH=YOpmG`$s z*U)QD;m~!TdlI}?T+e@*t&#U_y{z7(=5y!3Tc*hFe_vyt6YBJhI!^Kqv9O!p!c+(g zCfLqyxzc!#u9sYIB7c;k@x85FPwX|q-k1FyTA@S>E)R-V>E=f)IK-+;U>x`XLxfiEtHcAx|4y7YQg2N0*ke^_y@2dF zm+eN`kIcFFW^ape@h+=%-gLyi42%tmc$*!Aq410dAW_h#S#5rWuQC4(r=5MTu%oJP z-Kx^Uqw8uc!y5LO;i^2W*A z$nSBC`y)mi(nv&PqcKqP2u`QI&idx^4^-uwBXjfy^e9d&YvKUbF|dvsRy%vhuuxe_ z$89BY1Sp6(0+mdVLt45(TBs|ML^ts)SgRCq^Kdga4xUpX!AP+I=?$F|{*tNv>=QZG zW7?D9ekxUL%nP|KUJ0Ag^#@jmhi;QUk%H~XIDP9 z@0)m+VRf>9G;`zNRf?K@Yy+%Qj`iHf=wolv&l*MZ;>D879s8IN7H-mUk_U)|o&1g- zVEs0MPIgdZU~xo#!9-VhkEgzHUEx+Kkh}`+A&SQKcI`n&S8J|#T>gjF`^dFj_Rcb= z;5}8rj6mj9+`*?)ZRF=S^JksVy5r^$-gBJqnr#a3L^?ChUq!Z$V){x!gdHU7V4ZZV znbKD+ZYa*P$w~3d)(;~PhUs=7)5-{Rpob}jwqZ3E8IdHG^}>^eX}c0?K}i& z6zg}!e;HW<>!R!RgQ{L`0YLTv!478VD0*nU0>&~$wk?`IOyRNbATh_NbHo@*0NdUN zXOCn3XgrpI_(JQIl#`p5Sc8Ln4{)rXm~D|2Op}+`ni}1bJD$q;;1!8Y@w|`#13g~? zTXxIlpN`kllq!0yUX_|AZ-KQz5!NFOSjDPF`bL)zsR+(2~k~ZR)|Kd&aL=?_0h?G z*T8ReSmf^R`gv8d%(!oWb=tB1I3DY&{PR7qo~CHr|17M$$7|r9)3<@@*nb`ey^y)%fQ-U@TK)>+>I@f2xP0x9ix_Ve-2I1OEe%O%Qef literal 0 HcmV?d00001 diff --git a/Ardent/UV/BP.O/.Type1 b/Ardent/UV/BP.O/.Type1 new file mode 100755 index 00000000..e69de29b diff --git a/Ardent/UV/BP.O/ACCT.STAT.B b/Ardent/UV/BP.O/ACCT.STAT.B new file mode 100755 index 0000000000000000000000000000000000000000..27c7e2d90384a366f7fae496ef9835b661b1d704 GIT binary patch literal 9636 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 literal 0 HcmV?d00001 diff --git a/Ardent/UV/BP.O/ALTER.IC.B b/Ardent/UV/BP.O/ALTER.IC.B new file mode 100755 index 0000000000000000000000000000000000000000..b69aa07bbd3e2cd5849c008619e4b376b8952157 GIT binary patch literal 472 zcmZutEl&eM5Ph?Idxh(kc8@lxI)xwv4B-znP(A`7kgG(X5oknzLV=*?sTL%uep}Ej&2{tm7{-)Y0Lm=T^6kZ2|V@UWe!F7ciuz_%C)T zK1&@I9tqJvg$)RE6DDT6^bK0{7u7bhDXSW|Cp@?MFoE-Kh%r&{%_%1b`hk8HL-x$l0@_x!l$p65UJ zGCw7i(X@I`QE%!)elx6dxvZ`vr0@H-Z&(|7=^mKL|2^}7PxZPSIaWANL0RYhXX>!4c5tQNHE7Vx`; zY`B(Qqvn0=M;|Z3`w`qCISb@YyL&Kx!Rt5dL(UP;4XR4J`!c^>cR&wW%P!Jgm)Bbw z)qVE=Am@owAjT5D3*K75YIUZ4onx{LKWhvf!4K)vu1l-x?0m7tv5nIgvmFOJO3pm% zU3U!Y1bHX)HokT;^C{2?i~X4D$MBle17tzJBB4s~O8O4o-=Go5q|cJ^tP;60a3XTe z5A`@1b|tO5Vf3P&A%-Nl0qG%e$}aY?3|-`uftFa`A*$WYhIAjor#XKDMt~*3jg}F^Z{v9_;go-{z@_NO0z-A{>mJVcf!rtKRxFXhyO3tAzVy{mX-=_*JDGhJ` zj1_Id%lb1OrYnbGL?9_w(R(^MKu&?2(rLX<6(`Zl^kA7-+2BPF_Pv*x-DSL2;H}axHLARUY{S#)h3ch` zFSf(jzr^A7MzbE)Zq*vi+LdO#6khnKdTDK|)~Q|X);nPwhpl!uyx#t@b*)t0s)t{- zJJ$?td=Ylr?XcNyeO6jqU2k`8*1BQ6(`k3YM(d^E$HGRpeiNTmiW8)$S}Fbt6?nw~ z6>w?=Hv0jy&0zD`i&rk$e+mBOaWm{J4h`ck0tqIH;tS_-7CJKMIn2Ozfen4qs7Xu2 zw9_+tNu!pKq$P6)Q8spN9JP)ly|ckSPt_pHksPG{#CF4`MojrU#t*KV@&-%h=1`aI J#ftbE`46J0&XxcG literal 0 HcmV?d00001 diff --git a/Ardent/UV/BP.O/BUILD.INDEX b/Ardent/UV/BP.O/BUILD.INDEX new file mode 100755 index 0000000000000000000000000000000000000000..22c98c3adc02cf7acbe2b5353a891c54b5f704a1 GIT binary patch literal 16097 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 l!D4%|X)Bi?hYELtX1i-GC0bKrB}80_cNb|jE0 zRH;%otq_Z}QY#j$SfDOZrFKz85lF1sstZ;~ut03fs$zlEo;zqfW*Ymlps}on201vJ1Y7?;WIq(Z*vi|GSOW`;aHXw-a)kcKS zghOf*UZD#CyvAlqg4DmpTYUPQMz`g*V5{Y}VY}se5Vl;eiK@`0`p}PNJYueIxo+U? zf5~1U!Wwodg&oY_gj=dz-BeMua0RgwH`OlkyRaJrXytwYdvHhX!5@tG#&@sv9fxD^ zjH3nb(Eq*)(Ed5sChj8CzTlE7_Q2!n!xBc57M)jMt$n602T|gAm+?cy_7iD{wy(Lw z^WQP{F~&X{!>^&9Wgq6K*-zj7)>kmMn#fBRuLtgN%3(_lW5g<*jH} z9%;nNpHbdy?3YsWgxq^p1Bk9&&Es=EpU@{{HBp|4I;uhTJAgwN#9`C9e^N2nXII?45j zHqz;s?QxuairWd)edF|v)Au-ikJERKKJylzJSC5uo)dOjg0)@UGW`l!G_M2F#}L{W zLuQ@eUhLoin_LijwIQ~6t&B!Z^JD850XE_CC{^5pP`-a%QE6_=Na@!LpB=l z*yfYorg2wg*@0$^k381XOPf3&Qg^uFWI*F;1-Cau>}aNEICVPJGdvbMmWf4&;-iU}_CDu*aSMSygkdZJt^<-Eyg#;ueJ9@9@2s?){XbzSz3 z=-zWXlSGz0kxic%86A&}WumEUhM4Nz)S1k=C@a&Mv21df%{CacTdlE+h3aJ{Hxg!< zF1j^$GO8Qn#N++LiP*8RXyb$?UElJ}B+ApSr^9}c;S49iy6bo&(uCwpv1p`;g6HZp zm4fO1pw29hXpYu%t3C|V2s>&W&LqN>?E`*TZ>E&zz{*p8vp9YZw@M@v1g!^K_)?&S zHzfkX1$cfD2nyi>-xd;CO(e4TM#-%~M$CC~5inxj0er!^6Fpy1@M7W4SV{o-BN`AR zqgyWw7d8qbkqon!OgC5HZ+_Hfa#=3%f+OaRqzbGNPSQ9gdLOx}$R|knR}XyssS__p zB0B=oX(b5=#|sqrO+-s&Ct;ro(@*k@%V`s`Oh~&BDau(v!n*=!qrJ0IL=r~rAkh@@ zHUdryBk>Ai)Ir9P9+-l!h)95|wIrTc3ZgHB5gcC$Bammsu#=3E#NWwIJPhi)VkA(0 z6ov~Agpo`Sg^@syg%NB|g^_OjDGV33uzQXaVRl<(Cv$MRglrJGw09ec`Pw=h2%~yAF~>=nT6bv*@iLO+Rm6r&0TqJ^JcxIdb%J;|SvQDxm-T}9 z_3{dZUjdsvWc?t$r@S(V_mT~QcyHNIR3amd6l|lEy& zU^fN3D|o$vJrwMzU@rxGE7(WD8x-uT;Ef9QQ!rM+{tCt^7_VT0f&&yBsNf(46BQh+ z;1C6q6dbBxvVtiJrYd+7U>}(Vc!Nv_>?^&1H_8maa5+rD;eh>QCSa@_0oX_04A@_e z1dNcQ0K?^Iz&JSuFkapQm>|cBUZ~3fGE2P=l;hODe}6T_t!?~~L!`!gBV!sQgPRA$O>ITi0C@P3JP%6a(Vm?|?i2^zIA%3=i$C4K=9~3#_L0ApP|HeD5396Ng79|!yVu2%( zht_U!8Ty|oC*Xg>WIl45AxFwvF)9V}A#v7tSS*Bx?G0$Z5R~6RS)^z)8fu@9D7%je zOFRlokBSv|_d9*<;h{`GE=DiQVMDK*kBTLTKxadUDYY=3(D9=0nx8G_qg8~FFTy%H zP1%?jw6R4lfquEz)Jupu$n0b2RS~jA*;SBboiuXZ3t*cPv_^@epj%i?i(#V#v6d>U zs42uoJy$-{k*^<&tq3c(N0dQl5_ps4)(d=$aC8QR=xAT_;j2hq%-0IU=IYTmE6L53 z8&9Q}5~Q(WnC}R=RKdqZE!0SOFqh@9K|SLV+M24QZj+A#za3-O(p)5_fyNOP;BS3D*3NQNt)Pl~08U{P&REwX+! zcv0BtW#cxRu~H)OCIfp#v6tC z_Yn4kg%~rpZkC~LmZ5H3y=S3UiAq|gM)zSzFLFllS!M48;;a;p$Yp>L@>x+&J|$e; zTHtMg?ZuLn@u*xZYkFCX=oU*?ZW%1n9;KK3kC?hEpE@Qf9t*~^1^ySH-wSYl)Rxh2 zCHpuy(Xjdi;(QX-Da0&AXT+pG6{Ktb9`W?QRm<(S(m4(vF`?twsy%q%GO@_zG}ZO_rca4zz<;S1Ie7S&z+nz0o$q2D+k{% zKER0XhunU-2sKhwUrQW36V;^8WIUhf)5(XB|4@uzfRiKV(2K}q5_f?I5QuEdZJR$X(azcKI+43cF;}+%V^JNC2%@SB*6#S3~l9Xg7iOYG*xO*pl;X zHMrW>_ABXwx1I{)ZrBJ%J4(EQ*Q=oaAYW7W1Kx+i<&Vz&fVZM>obdGBfv2f(`GeE? zsTyyXYMlYEw(%e=z6P5=!=~Hf-9yXJT9~{?tP(nJV-N@9^dd(U#<$XoHg~dLK>HPA zMLyeS(f$ot{1JVxFjk2fpu4%y+0ttgY1eereO&{InF{|M*=d06j8Lal=B85o*P(fX zG|rc6)O{vgu7N})Bw9dgO-N4tX#L@g`R|B6+73Vjlc%OdR-#|J@-OC2QRJ@epqbcL_80=`ytuL zScIs&vMG8-six4>d1z>?5DgW_?T=SBgH$unyt27b3$Jq7!l*5p8ZC^gkcX>~hr_U| zy|;v1I6P}@>Rbiwt3VwoTOoU`jCw|EXtg$KV+?AJMWtwC{0Egi7h}{3{7PXPn~=>I zg|`J>DZ-4mFi$<=KcWfRP0-pbdKm4{17>Wy7z^26=+$PtdKlqB`jim*C}-B{NH9*| zvG(iZ&Zui&a}I&d+Fyj3>dxB>YyawMweQ;SN^OJfi`i)6)FS7y>$_^sRN2&Xv^8?K z5F>Ss5eB>07!k-}gfUhWqFx8l8=3 zc!)OoG}C(ppO1w0j?Yxsw?XRu#PwCnvt6@qT+!dgXtIaVP7k}FAJIk^BL-e#(2u#w zj~8;f=60j4dmN)Qt~0tKt{A{>Xul!48`q=V4X_6+^e`yTGa~ihM*mNu&2^=xVc~Y? z#d8E^@D0(+kw2&8`FufVwm0a^Y!9Ok?Da8Pq92T#{F-(4Z~0~4tMYq8jr?l6(?aZS zMVzxRPP(2nf73c$nSzg%j4+N+s==CL>W#P`0&jmTRcz<#P7YxGCEA7Gs7 zf1DAI{>K|Ju*22=Nx4iUU@tVq0JR&}%%+yc-4F7V8VIRDAvyoQ=8kb!%Ify=9k~J}XJRcb7U{~fS6OuZ-s;FLxDF3Y^Kl~!`a=bDT-w3C#3sipJ5H};=oGT-ZQK*f0z|pEb#<&IT z(ST!7BV&z0kmnrBs-Zs)JnCl~IglR<=u_?S#ssu|fVt4mHRz8y&#Ms|>F&OuCGi|w z(Qux_or3daxzwCW&~?2(2aozZcd?pVi1T-)$Pd;PYrwVTb!@R+(-!-2s}t`q<@+H~ zU=*T14+*~!Kz|AWi_o7UgM6+*ya9RT7PWGO&RbRreN@$XRXlnP)_qz68OkOhX1z9O z`hL)B#z$KBvD+%VCYu3xiOZ6L#5dU_k8HMNg;qo1v1>eEBO~>_;@=>!Vwd7h+>O?NY z_mHum{ymAjd=Q{_POb6SC z6R)OyfKLE4hR-?`R*6b`Nc>~aZhhlJaUjGd=lChrhboye<0J85h|D?hk>gSCtxask zS|vXTHV;;lKZsi|W6(EVoqc?+)lP_0pfcu=4-rd!BvmD-iig!;n-g3ug zx#G>P#=FUbNyZsK$H9 z;c=`h#ljHYC#Vgb>v4+rFnC<)7vWB`S}>or@g!xk@rZF0H9b;3iuNPMqsC&4&tl_I z=uo;`-9ItMjJ=pgd&Oc%FE$=CmO^T&A;ba5k^VUDP>&gp8&BYKu_uft4eCA#nN>oF z_NZC5pECBN8kfStQX^B6`=s$th#w2wrx9f-*19dwYvJfUqxNpD4?@hu9OsJ2Z@yfD zzU&dp3|EWyV^W?q_CZGD&lw*C@p9vU+K)MhT>f(7AoBK-{1mfl67t~1I_DP?jWJGq z<&dou)5Ianr`5n+sY94q??d`YNWYJ4uD~wzq_M(y9=&=Vd8rdly%&s6u>u_scZlZ= zSMx<^ya@X*A>Yp%FBvPLvC^oeN88HZp_0E8&}wPX%WH_`72`Ey4PwCywpbsZ!PdKgYhY^)Y`v?fYhY!Ku|vEL z+1HKBuGX?U(ECp@CYp-px1g^;9Pf#>kXviSpk1ljr0xRM&Fvewk-vc$)**(q#yVp? zj?y4Y0KVw%&xT^~RgVM%dbDP@lecW9K*|COEsq zr`Qv?R_o`ZtWiF-)K5hB0IMZupkm$r)B&H**8XG6z}bGIL0SF0bR(XC;<=xrf3at% zdm-BkoY2udHrtos?y!gBZ z``A8=)Ku7Cf%olVBl`b3dcGO`-)uCCVE@Bm+ue1AAdPzxchtQKV_pua5q=w1-bS5l z3Fh@3)X6)@>sHv^Vr(_G!R|JrK5Vc~wj1a0(s^awu14G|5XDrX{fFb3tR;3Jx7$!j z`FNtT9q-$W?Z&%|*O)4Hz}^lc7xpy&J*-Sq#e2q1yzfNi?ND^QL+?Gryc6#`z}*G? zUC`eR{oTe3jz0ETrN776i}$^Fa`PVI*#%84w;6JkXz@g{LmYNu+wIuii}&5od>^*o zhwXi^z0b&LkI&W-$5inFeWNe?@xI@9Pke~?58>m0aWi-ajE{`X;v<7r4@2rBaCaf% zgLwbQIB0wfs~^MaC$Rbn)|^qWt0g{FF@I_t!uuig`7lOSh;xchf1kj@PFOmG_fH`8 z87zGUONU|Uut7N;-x2UBe-!UWjh*6iynl}PDiGfh$R0y{$Aa-419vy99>@DJ3bqnu@5$!(o>ja`bVSMgzPdMC@#_yn>G%E1Dlg~v3@Ot<} z@g%B~)MJ>_$B?^&uzfSQpMy#($3Z_1`cBXn$o z13u2-Zoze+Oq|BI*@*qA&ai%ob3gA4I1{rr20@m#e}t7fI6W`K8oUr^dOhoe=y)yf zvUiIOkfXflq~A4tvN#HQ3}&NWOu_1)N1U{Bh|Yj6Kjm=gzksgyaQ)ebTOaiyS1I&o zA59cq{j-msjM*|qhU2!+PeZ)0$o}%?10T4T@pGF8ITzzDa_FnO>$s;l?Q>2) z_*qY1eBOTot57-C8VfIu>3(qnwP2}QIHRiejPWH_fG^?s4C?v}>iQsT&5~b=pK(sH zp#72j**JkLRf10apOxOv#xFP<{bKy8ZrZ;>f@4Z)or_VD-=Wic#x`J;_?{eB^94eG zCia_gQmx#-8#Bd!jjzz#$>`@O#E(y#u)13KtnnngekJ}e%Eh0c{AGNNHon&c8Lso1 zi%%W#?cuL6+Nt6jan3l6-ke4@b#FdV_V9Ea>-)EgF2r8Y#zGd)&(Z7eus(k$ensDZ zMc;RTmlNd80Jc@k2dxh*&q3=O_}OlJBivk_RrbB|PRRYK@NnR~-A)#EWM~a(4bt2i z(zSI4r#tQkzhZ`-K@5K*lE01Fj@-uUn2+lF(+u#qKXF$%f^SgVj-DJ5|KN;j0G`K= zC`2-3^f>S~Jq0tQl*t76{Ximsd)>a}6-eFyMx1nzdos zG%d5ju*`W%?+dIR9<)7XC44c)W5@w*9u-x*u4t3@Jyw+p&}*4X#P@(+%vbVsjQo^Z zhD;Y}Hn_$P2Y~vm?uO%kAgq;u2*K5cX=D zq-z~FQ`Pf43VEtJ2XHsH%oTVY#%I&iKL`CYpkhT9mzvD}rRHVkRuSG=@BNpWixlT_ z(-M~>$~xvkIU2AoWKHPRHOu8GXBGQKdEyOO+a3fPtdk<1IV3(9J9rFAskx`mA{5&Blv4%Hdg)`n@U3YTPHbh z%7byXhaPP(BG*p?_-TN68pBUx_(^s878;N1cOCN1wH=?ptJ(@ZyM@OvUwUV#%BimV zCmfq@PWAk8v->yB$A24cc6UOS`O55~^Hmq|)eVX7bO=9m4B9LC8R*9%%*n=P6Xc|c z*%Tu#MN{CJlDL7sH$|nOpN{>eO1`Pt3^L8k=1RV~k|%B;f6bMAOY|?)-xBE4_6&^b z49L)HbF&31u7#N?uY!fE%$CYp%b-5Tza{$968&j~e78crD`Dph=v+x!EBV%t;F{4I zYru5CHjr#%o^<@N&d)fwZE}tILFJ3_(S92hNgJ~*B58|A!VpQA+0N-pI~7Yla;Rrs zh4BM&(Z}gqf4u8`k#>K?%Kanm1zx$qSqp29`V*jEIOe)%3mlu($9xg2dSxrqKyO=_ zKdFdYna_xy&}xT%wlj}H&%)}8{R@$Yn^&uxT&?1M6#m%9cIewrkhvO}Y6ppHpm_~) z8L#4GM#%Td2$PwOK(^Z}EA26l*`xN5Zx8t%kmndOr+ppV2JZT4k6gCL`q9DsU37qz zj_}(N?K6)3j>ZsSiFQ2sz0&f() z1IUqg`*X0$O%QS=0!DTy11uBYQqS4~e9 zaZmGC(M!qpQlrY2g;%ER4c*>mAI0mVa&iu1`(tPb_TohqwMAbELnrP8f&%Ndj6pjd&%`2U}F!tlqOVs#l29uL> znSE7Uea)r#jY+utP1J**-(Z2?I-_QU%)xh3`AtRrjl90d55K7xhxNIy8E3}BPrSJR zw)aCT0r^Nk{|BJQ)EZz0@L53sxb|63-Yv9-5F4C$2BL}>5583cZ<>41;SF+l?4hf7 z#^Lc)PCZ7M=*a0l#j8HW*XYyNA${T==;{u3bZKWuFc#)edmP)NDu>kBkMEnt<7^Ud zjzIq^i~*R(vm6<>pZtC?zcn<#tc6#(OoChz@nn~t9 zyeFF}n8`_ismS>6_-@Wk$at!GlbNR4>82O$G{6kiJ}8Hwona0$hpYBkBNOf6W~Mm; z^W}GOvpG`Pt!s>e-I3-fb2RuP0LLi#Tg3R%V`=Z*GwJW;wpCQx3oESw5;EA64O%x0+kzjewYF7MuUY zNOL4`X6dWXQ~XXgKO-)|JT0v@#=1B0ieL4;YW8aa`ZWRlnyC6U5k0Df{zagD23+>0 z7%>-PbjuL)M6=ACgqSCpiyU8*&AY@D#~1B^BPSsXQGP{?a=V!TymQ^4VsnW4s*I{PdD$x*h~YQfe2=BY)m~;k3;m}7pM(B$<_1SU zZBTXp<=|8QIdi$vUtvD4+RvLWKz}*li_m}3taSAGTSIqzsrM52d|zp-rXF9uAOyi234A#fw)w zQ@mr&7h6s4!+$87T;p|XEF|^sH8-0>;MM)5%QkbZ+-ClTb?7gAvd5KR8&-mCX0F_h z=(c12EeWyxuH&25^m8eG2c7$imfi^2N^uY?R`s2BJ9^HYb_aUC-P~cm2ixz#_BqIN zuic6DWGB{>UCv&+E4bIP$9hd+U$if+-3j?7*ZuuSXs!l1JU3U&!8tssIfpxg>w5}h z=EEcJ_Pfnp!K~3wij&(NTz4Ti9cN4n+Fn@USS5qT_w9J!j`vL=ZI{mX4gL6>%+36J z$ozZ3%@$E}CJUyLtEod1$TLQhXX5v8waWA<#0_%t?jrTgJzT@nh_JpP@gWp+8%pyG70y zhmnWF=5~1m^dq280iAPhI(pD4PRksD%n@^waTGE~A@hWi2@lFJQwOEyt_6>M?+RVk zB!twb{h|lx5>z;I3}&v0D7wb0u!(v`K4zjLs{*e5w-f!{0O({@(W z_kvG8`TKj0(K+aS@5t3hn-W|zXW^IS-(h|j;s+JObc{T);o8?f_>Idp>v-h9RR7 z$1FJuF|nU#%-_K44jS$Lj!~P2?;p4^dmVZ??oBs4_<8mHiD{~4-FiQRdOu_S*VIwq zH-M1kw~1yz>RaHPHjz6RO zTdlWJ{u8Voe78l+2#y}ToQ0ROh(vp7gmYD;`s@JD5`a_U93;*mj`Q$w9zJ>~nQ}P? zu~LR{2x|picoJ__7$`h39&|=vSgd`_$7&Jizo@|aVV#(kyN=M(pQwUAF%Pu26|h4Y z3o?3+vj^^t=e((JJkqKy&YRNmSo+3O%L2sTKdLQ&!XMB#uczz&$_~@4}M+1E0z2$W&^aZv>I3qmHarfk&@3b z8$-U4)!1qRenY^f$VOAE2xm=3&6ByFHCx3@(Dc1xzGxQgoBsa7Gm2-3=9c~&6|X40 zyVY1UMFdT)9N7YvTOiLnlx_E~SumsYG*fVYo{3xjPR>W1HJ8dsMz}Qb`Jjp2wFRu0 z_-5Tzh_i)tmDN(UTUo8qZVA{1*4tR^p~vq@*odR8Wuc<6=7!M1Kx;28b#4mv#Sw3( zV%H`DI=VKPYj-TD83D}**w&iOaJDA*9@riXoD!WN z(FwLAVLKAG`zRT2P=>anE^50YG&{n!)|}?p=HC}_YvH8hBNCF4@X;AQI>X1Sj*qIp zMdE5;o`c8P(ixT4*~*vE(20f)>0BM}RZ;WrmsHnboLz!(>c7C?kvl~#+y~shzu>`N zUr>K@L5vl|`Rl=ns3H^6UM#(DO!O*4MnZf;y8H+}5qS5adL>6N`1DPCUO`nTB z__Wov9WFg`m?6-{b5PXS635jjV#TcskP=t7^`Y;i#&_0ZUEOSz`52W=9_KTxa zOYMoX#4vG*^y9DDl#5jv9K+sLZQz546Ym3@ni1;TfHzo|%D#y3GCqq{kzpNxKd!f< zmE4V3btz5zm%|D^BUg69CI2=^xU4JBhptl1hmS$lBD}mZ z(W1vpybre4%E49x#A%2j>RpN?WW)FkX@n_Q0mXxb@^ z3eP4f%1?@Q6YSpv`|*%x57H2k8#`^#RxP~a6I9r^9K3XE9xSI@4He!lYTq7h)l;!>WN!63M zQMZ3%VQDP-H!j$}Y*4b%zZ}>eXXRKv*!EdlpwHN<_s@seeAalxHr|?m{!OrQtvtx* zS&fo8{&g_^`Do``wa{jT+9t5v|6&E3_ynOMb<=|6$$~1p;K&;ug(LoUFzt$^VZEtF}xKcCuPB$ zOaf&RaxxkI%dE-P6xf<#orSI1qKRxOr=mU8`W|iO=s0SC@8n;YvnlA`6l*H_H`Tfg zc5kz8x28dVnzi62o`ajn=oG!i++pFf)L=ca7N$dYy44I>;kjcvw3{I-cOt6k)}7W2 zSeb!2GY$I8^<7T?I6oVqvSz`)UyQ-uDbtcKK#n_qbJSilNSp)IGsKl;9%sVpOsf>S zJfqwV@3X8HvQ%6p*}eyOi803*<&%zn%xVdDa7vd%&6xx%t-V5IK%cbE)ZdkUt#@$FZ53=h2|`!Pwl3ezeB# z4VwYFzyBqVwZlH_hn@N8;e4#q55miX7~@p%dx8EOY;hcjHCJQUyxJJj2FJbT2y-oH zf+(uy9&hO3+FWQoY%N0Eix77+*kNrxg4!&Xjf1OR80hDqQME2NRXM62--Gb+AZ%@si>ycC z;Zdxoi(z@Ol>>dowWL~H?9*cCEVdql&STb6=q$w=^*D4Mx0X0MPdGZv75$atoogi9 z$JKssh$m6^jQc6X&AC#QSMI0fqW_30dFqF@^}a>zr{PKa;GU!Z8XiBhz;DjfS>&1E zS%hP{%qkYof8~F_0{ZdQN zcjy_$5YJn{d_Qijz<8~&Ucy{`31hqx5v;WO zdwF)QEf*kj++jJBRziBEwF=U!oZWF8F#H|^@fJf~?|FLHT!sE{*L)c@xypLkS`E3? zkXstG%jlj`>l}0c3Zm0{n3n8{F)BwtLi7JBY`%*8zZTpp)_}4Gd&TSU@|yL!wH991 zS_X8P8y$Zgrw6RhwdlcG>kaha4Qm~A*I_?cZyh(*TlB|oz->Z&)UE3EYUr#E?gOi# z#eHBsJg$cB2DG{JzKNZ0gY~Ah5fN-eKWD<8_D}i$fX??#)?3iq2)G$?n<4iS{F`uVYjA8j{N`Qfj{Lu+v}#&a_&Z#%|uJH~Mz?CG^&7dX4D zy2fsBc3Vq8=UT7_ncU;71uLr2ydi7BZq(XtYY*ykkF^(e_FC^-`(S6EMf>~?3GYsW zqFG&KEMO8cmOfGavveKk1)yy zoq2T-dn{Kcd{&K-_lxb;$Iz*bv)%#gAaoBxcN~0hm92-ro_7!{$3ZJxegfVn;LQNf zjZ544)cV940-pPs(INEn5WM)I9|4T-CLQP|>5$faL~y+Y4JeR@0suScxU(VM#RbE^W{6;>2v^uB@bbmETG z5AAZ~mHWy9xli4Cv?Rs=G{zEtGoSHZqW1p^_^hzftz)oujQzhrW`sNjnPZSS4w>VS zDG!lh?ee?1ygMDY_=Ng6dRFD*dpspP4*kY}UqJs0==Xttp3?)?2~bX0&763?$EO!x zLbf^JNpMa=wmx`_d4cmzU3~}4lqVtE4Dc(+e&yH=m3;|u@=kb4t@vE&bObYDgY>U) zw&(k4tC4#D2B#8yn^kJQ6yJv2+Uq*=mAS*;PV6`^!5f$5_XkSt9ABxgxG>M}v-A8V zrC9|9c1~WgFS|5QJk>7BD$TXW7Y7RM;d%a?z~mA;%{L*hq_lWyRC0%u8gMpNcWN&<8oHvS!v8kz1sc9(#)5qoc%ZhTcva&_BrCCM3PIlOUu*mTRfuf?RNKwhHAjE}5W@i%VUb0}d443dlN~6w!&1T`1EsmX;wbNcxYU%`;vD3{P7jPPot#w+qly0P zsP5gfW4gz5?b5AFkLalAn5gXTAVrPu8P%m*R5U33f9}MI<8O_LDfRa#@pT=VK0Glw zJ|*4moINxpEy3=bFbZ88Rp5{EP4OwTa8eL0nw%5FiwlEjX`n1SH`vMzl$83j3VkHN zcCt4zIU^}4s$)iS;;@9Y^aKp7HzmG*T*`m}9XrLRrw&TLDJiy~AdsElpX8!(0lyz3 z>J0=i(*CI!;X=IU*aa-Etl|k}h3I<8P!6_#LXco*m7+Xy?7;YH3W)^;z6n_c)o4MT zUbfvH2HV*k;x6jLw&~Z-o8S)=`*Je;xB3H<{dRU?4hp=qtfc3}lDx91cwN`ETgmv_ z@93MK+cT#7^)cv3y06sfMoLjBY7!);9d*k!S0`{-?WuvXV!I$PA`UUn}#m{ILCs}z=tN=s7GV&jq$(ns`<<@j)_BxY*k<5AJ2PKZTW z#R!sdGtP(zJHG$WbbF*0Eb(OrI6|s37nST~Ck{+Tjm2vP)nV9CD+7kC*jE@R_1Pua zxxT`z&d$tot>^eku$1JW#^Jg!Z;G9hRhl&pz0!GeVi=K-Zs(0>R_)1Im>Z=5ySU7c z)yPiBj7!Q$M*-S}fgGPbGC2j=gm{pi=9^gND^d9l(rl&@kp+E4M1+X>1O8k7hp6r( zEEESv771cib4(Fggj?+CrG=$^?Mv;nw1l|Wq@=jm%!JH@xD0Os*1ck^r6pMD>=LY^ z=s$GaI!;YZOHB59y(y_T-IS5&O$ua()Hv5htcigM{=D0uhBW79mDrPu1MuxHD;&oH z8y}nmCB1Ki;cKgk1JkTT4RQeUjg{`>go8}N6km3{TGY` zeu?oqYOF{$A}uH@^p^zt;SiuYpxEbQzwJmnBe_3Tpz5@^q?GgokkSH^$}N-8Mvc_mJM9kw&soE8?BDhZB&+KVCvWaSkgKNt>dSI8g=Fw1Xq zdBRFEDG&K#$D?dJalBoci=n{(u>_-}@=EiNZ)c;!L=E^m+2fF`GISi~d{gpDZFd*Y ziwN}m7?j97|D?dJFi{G5R5Qejr#dyE<}QXft{{(Y6JUg#_9bQGiUVc9eRh}V=nfa7 z$AE78ii-oqSkmltwK~~10JSsxz9~g2acU^bO4?EY3lzsyizH{2W^-OZJ`Xc2GT<+m zTFp#sP7Xo|_|awMLy1+B7(FtbQz$9Vf9p_RNlDfOU$4tX+jczWDfXzc;%pzbx*WA> z7yC+zxK^ltsR1nF;|hFsQE>ooh4$n;oD}@NQY>k=vT&XCP_Kd*3I6+^N}Z~!sJ$~7 z8@3RvrhaUq+7iaqb&LhK1k9377^I@Cykd?J7k_8mFb#@J?YNZWIBU=j7rp6P?|)oXTAW~xW)<^@Y@kpo@%VmdX_s&`9=N3L}O>v>lQ3I8-`lHBJ9$MU zcNnv?&>4hR>_d4(+7~9C`OZd#=!Ff-RGHt;B8PQnsG(ME&?$){qo4NN!f;9GcL3XE zK_Dv!3xivM80BoAzXZV*W=+W}EGy(vj%|=@38rSY&j)FGM9(8R|Lg+Hh2lgvgV=&$ zK<_Q^fcc|#p9}0eCdR8(q&G~ZrN&{qz)t2@WtBCqK%Z0HPU@a1+gPE;Bc2?Ln;lU$ zskkVcod&BUBDik+pSzLZL|9W(1(@tiCU^fqa9E*2XC~61`;a&^I{G>kXV2>idb$Y- z?&s}GI#fjsd*kyal<}AXljE_HQYo6C3qed(zPKM{m6hfOin$+k3TD*lAj|jPM(AQy z*%k9E9V=m1F8scd?Bcv}K5Rm00mhc%7(K46)K}sj>9WQJim`8Cd@}qcWkp50#cjQG zY7rN6qzOBHF%AbeNR9b0qpa2q+a1c<_SmC}x-Uv#F7v|-t z+rbS**m??l{u_{%{xP{S63_5A+PEgCTJJ|y|**B^~3}-dVfJaAeR7}KppSmHtG9|;fM&aCm)91e{rYErS zFE);;#lG>lpSm8Zjg{*oq}26H#R^KLpuf0+fO@i_N+%Bcg*PE;Kw?sYZFlJu)9E_E zE}gE6wy%p0nQ44RRikOAUgGUXi73ufk!fUYBi2CL5Bie#FP7ra#~8>Yp9m%5ft(*JDxQLss4Ef=<2Y4Z z5JHt3s&(v$B^RYo^B|(GyI6!rs;eCLH#;5A7vmDrN2`ZO|ElNAF?Ht-Jt39g29-BH z52cH!N|8b}kTWhjN=MbJ4}7`LvD)|TQ0?4R-71%?3%k-c#2L3( z{_EH=gs8V`-tW<2XFXKc#<0F&7ZJoVs@8k3%8GFQ;w7-AwO;m(>K`BQ@L&L0KI-xE zw8X_*A6(U;Pdy$|kLAX5gQ;n$BmNC=j=5NUvT}Mc_@FU2nB)ZS@RYP69Xq;b)eBw4 z@afY3a#T&#HSCQ`?VN~hDY;|Es_ikm3=fR`Ttcf(gQ41kQqoabgYY2JPS+3Ls<(15 zTloM032^;Pz@5>yJL8zqnGZlq(g)d**>>1J?a~v{h9$-!gXzwtg1ZZHP_5}&2~ACn zT%d`^W4-LqsBmoOe#&QpSw%&@EZzY_Vt`e3>?$gl8mU6|<@ClVANLe+th&TpABE@QQC;-1 zgrUv3$TV~Y6pz5e927Ih?i^J%DK}8)3**RNICrbgEY%kUw4y@Rhzk~}x+6P|?5M-x zndTzl;K_2uvG*B-NDo&6h^n0*S*59}4notUxHV zgh*|G$B5JdSVrV>fai(O{u&~e0IVZI)>}j_1>o0p73D)BmjN6lLe?o4`H2YQt0Y31 zzlhKmzwxV(%U$G3B8;c0i?ktvZ@=IRVL;f$G9rzE+(slE$b&@c0^xsxNy%&>LKp86 zVeos1F!%#5@;Q+@pqzFoXNlAU~!XyIm*ZK2i z!*c*>X8@omO!gl?TLg$9fT}Q=0hRK0w8S*1B^9u5qi8%7uN+vIxgA(EdX z!c1-@LQlJhGzGGo2($DB5ypOs2ov}t5hnS(i(C%V_;1Q$h=G{+S(GsOYbjM39f>f= zu0&YoJ&52XZY9EC{XjgF@zA5PbO(8@&{{wQj>OAE7}_gDn2jAkJSr^&d)Z=VRI~@! zV%Q#zoJS2#TVRK&O!{9$!hkS?igGm(8i*tk34~uq_b{#U8h|X4IYsX!0(G&82<^X3 zgfcscFp)nJ=?LT}BJ|T7eN$=cO@uuf2*hj;L}?_FOx3|8pT|EBlkDLn@UVhCYLqE4 z1QMS5Byl`cE|N%UKoZBn(};A6rjgE>J6U8}to+yIO1knJ>{!YqvA&Jx2!*cX+ z^^`WiUNSkrp6&$K6Z9bHNzjV`zcm*g{NP%67>inxm z0>Jm^TF%>(A z(B57m9HNs%xXAoPgyVS$ibJySTN2@lkWQp6kOCr{Fb@#nP;Vi^sq#J%m=GowOEuxjC?|rPi}#3dC_ZqJgFrl^K=F(QP`uAb8bi`8BymPpxZ?HD z2PM=Hh-WN?vM5BG%}5$YQZ`8}nN}2MBF4FTw-I3(-%05l3UWq2z?Kh)XFS0K(mC&+ zq&N*624Yg&DFWh|2%uJmo+K5MR6&HY%pkanU?#!c0IIva=w6}~>mvQ>bQXo~A(%~YFTs5Ta|q@V+)pr%-~od9 z1P>A{Ab5yiA;H50iwGVec$8oBqQT0D0Z6bJ!U^Btn1X~E+A=pZ=jbJ;$ zy97H3-Xqvau!~?f!5)IW1n(26eH#_2zYDrST1umnY?&;YPqC)NxH;s-N#mK3S3HX z83Avwo;n2lTCArY!4&|?-5e^^CyDo4PXmI61dRZc#9TwrBwfvxnqX{QLjhjTJ?#lPxXdre>`2nJ1f597OPnG-k}Xcnui1*CKxcwz z((w{MlHP?aI{JyN7z$iR(3Nzak2vBh|QW2-v_t|!1@N=y9(x>|nDQJ^Pzy$E^} z;1-V)IzeB88wvUWsDrYF#Cu{%>Q4|y5KksvqBfZcY;pa%l&t|27)UUPbS_H`KvxIh z#zYuqdm=4?L{TM?(t|185TwB*4IwFsU?@Q{nVrBKO=b#P)Sg2#eSs_|IhB$(k;f(Q zOOn#q!b|)>$;*NKNW=p22l?sb)9K$Nw*pfCN+7fy3B<#1R(moCh7sUTnF!ej%tSIX zNg6?LvrE5+^pPZuA}JiA?~pW_q%j1y5R4@=3e2y_%pz$VNerN210YR+L=!Q93~-S_ zKs?!$&Y?6Hjlm$9jevN3B%vj8DBc>#BqGfAA|Rged<41k(xb1dwgvryKmJopu-<&LHnDf|&p&Mh<5WHfI5-4Kdr54-jDqP9wtc zzmo{Ze=ZT~&L_fc{3#%wduV7j4KejANxGMmd4K}*2_7V!lRlpG1tdL0Qdf|MfTXUHcM`b~l=Vbd6u%Q;KN?~^R9$RB z1eziYh-V=UJxoLFNIUXa!_h=oOG&QuI7%;~^dkh15-g@3f)?47>HuUCrIwKQ7{O8s zTm|~mq(9CU>uV#$Szm`peu9!u56_T%?5mAvR3X+S!b)fc#Pb&Uc!@S76R}C&49xR3!4`sd2(}VzBiIh0OthsEtF1ki z-X(7b!Fv<{NnB6*PLg(!#6x2;NxMnfL$H^0nz$Kswd>{);W$qx(iO-PM7jgnPlT0L z3+ENp$%a5Y@6*sef)5Dx()E&SapU_X=j3&F1hX8}~;BPsS9Nxu{Pm!Oj14}w1l{vtR>@Hc=O$SKfL T$OA6&tc$EC5{Kya0{MRc-Fq&_Fij!)@5JMK9||C;FRZmb&7gcEA#JF zf1ZEM3D=zPoSx^`u3A}TEmmr8MN1ocwo;8dD|Lu6`5o_HeF|UDFKAa~=<)of>r6dE zXK1Zbl~$SLv-m017QP0QzNjV5H0etT=P&E0b+MYM9p!DeYt zHt9Jgt!2`4O3jNa(q+1bYD~Lau6vr}`?{AoexUC$#}&G_Iew_` zHOG~@4^pf2eITx;KlJ7J5y$DeBEKAZMUHOmD%Hoy)wzbF2|cG+tl!> zexe^D&C>%&Kh*{*wF`q#N*SgHHAoD0B2U zm80sI^Gwd8QDO)-Z_so2wS<<#xbRCkrLs8|2MRqC&~0)0C(wm2DWrcD(%br?Cs$kh zCz|uos*9SWHWJf);7l@QlR5huFE;1`wLw3rl5{{Sd9jvp37qBRGxQWgo1!*RzFtjM zAL(xxNj8vfhIezwTcoC-HJ5y<+N{6TTcB-$Rv8?zvo6OHcqYR&NqOct8Dyc&!KV`N zElsSSY-A$ez6;U%m+>vp|E(d<(;<(o#fhbGw!tH@+^)Z;Znlu_F!>+!kK}id{)E*( z>5T?sf|8b#p%XDiV4LMBGCVsC)!I2cMw7gF@hIBmJc*i}h@UMvkLonZXwC$!7QcyV z7d*R&m+(kbEapT|c45;l-HY`BmT>BrS5qEnI5J;?1LMtzK2K5|+5F>pqjd?EQ9HO8Fh zQl6s@(1)bHi$cjAF}ywC?a{x1_ZxUiV|c0R5o$at-K=Cz!?T?8k zm2iF;^kS8+r>d%q-GAz7Do>qpqO_f2+DL2iQ&pN;qZ&{qZDkr59b)Gm>zKb7?T;Y; zH&*o{2C@cvUO&aW^ptvv`s}VsLVL52>rH8{{)gW1k3OpZ#gc#Zbjl0hRZcpKom{P* zB64zk3T>?AVsif?_b+nVu{e&CsvKvgcAZ+3xsK?#)TGGwu5e4A7^0@p{yS6N)yZJaou;Ovr9;R!&8(Hr zaE4Grr&Ft^Q>$XSvs7h;{p{l``sxp{At2^c3ukO@9a}9hS235ry=D9>Sc8azF&gx4e(vK8aOYTSdNRy)kCfxat(;3a9m3MQet@-v25U6=3EZm z<&N+RUPJI2f_FuTcLjKj-4|oA%!g0%=OY&&mkDPUzcrLgWUOyjB6Wdt6~0{+#&SD! ziKS33bgqDM1(Ym3oHnUWmg`qXHDU~s(M^@bW~t3hwD+L!~8k@h^ga->&U z<26_=wx@!gp|8TSt7yMH;El!&S2ZE-*E&tHpeYvIK(3k79B$!njJ?-6GgSdSd8V30 zoxM~>cBZ;M=2sWSubJvtgceSgLC8|G>7hz(1VebUuy~8X%ha<&i^RWmdOx~T(cKce zvUF2yzPOT%L$etzT2a!E3e;<=BkigqwR02gO89PaUNd_ZuMv|Xcp}Vz zIV%H6k?wVh*g4NwH;=RV=4^hx&r`B*M3$w~O<7I8(n) zq@_<(I#m(hv{-yQIkLCY$&q&ahPe`WLk)(fAMJJlt*kfat@S*$K)q?kq?Y8x&pQ_> z)!lg$T?8awkLR!L+fj?^gx8($`gS6JyVHv~Q=-__L@~=m z(aukKY72PL*l6b(J2r~{)6_8i3jQSe)E2DBr$(H&hGT(RXl$=aKJL>(y0K}B zlVjEbvYy-2#rD~^SQWgj7MnHRhC8KSzZ27VAhcc94^o~HTH-OTiLc2VrIox3#!|H; zv}B3F%DFv`|K4%%E#6&>^S3*9Iovr8z!kavW_DQx5BpA} z4>}()rmy14thckCV-L8?VZ{SZDwwHG)ibQVhm2e*ttr)M=Bze042YGjrqq@t@(l!A zbjJBUg6|{KCVGIIioQXio(ANlzNB2PtK^vIi*I~+*jc3pBhe2WyA~9_Xk|b37#X>K zvMc;ZCb1r@he~}`N=~9zcC|kQjYH5FUmYJprfl6jOPTmktBPGK%Q5alXleCfHwAV+S5qLNP4`uZ{6kb`~?>DRa5ulE6MmjsxNar!zSiL!+-t7O-8|fGZUW6_!Hkzk9)QHb%O*n6j712C>Aha=>r)370YelcRwO!`4 z9?a?XYH=#&OUq4HfpLISqw0zUn)|&Hm=KK@dz{l!2=UHmuW0meaPc1x4`hrtQ zuT>ee!xx+kXF9bp-BD^Bx&r+PZN`>7PG0O^OZ3WNuVBo8TaKB|i(pMBeaT?G4Ax7| z%g#)&W`b1^!?GoxmBA_kL)PdsL7VB!aRD(de-pI$-H7kj;t@p%H%*s!PSL*x~+F`a6A9aqm z4iX!sJ>8_|t5?Ili#+5L$1|%ZM|GuK_z%=n<~m>}d7;gvA4yq66F>79>+{r3JZGN+ znv5>5v6C^+`IOmkC}*EB|9;9E_%qW!YKQXCnr9!_RwiH1cRq*rb9i4jdm)_?c%vA+ z;pD@U56=R_Gx#_>Z#wJHy-qC*kBc~pj>R0`!gtwknXle9@=K197tVKx=o0G8_M`P- zKN8;)`|ljnf9IIB?HAl*C{Pd6M&uqt0d2tEg~`xgn)a}PG*f>?ADXA$WnH_5`1U?C zv5(B5kIXTBWGQ`Qsq-FV`FqYXXE|+Uxsw8~#Qm&u?6H4BUiz8sOUs=l@NPucyUy2U z-27#fw6SlnX1UWvZBomfd}HAzW6x$*&w<{EWmXHQL5S7YQJhRVu|Twi27LmzA~`(U%g^;`9wiEC~0Jvg^x z&vN3r+{ASSab01?p6|kV$=LH9*RgUH{Rx=j#|G}jd~41&am8kP{R(_R+OZZCp}$0} zb~b>r2@7hX&yHIw%~+G}e8gC@k~GJRHM#Wq94FUVLyfK_)*q8!<9zI_B`>4bC*;>U zpE!B=mxq6yxW`_?C|DMM1{`)Q`xN{<=Tql1ga0}5pE;j9`62!~^7+m>XMKqO1^M;P z7fu2A1>i3>_%ll3%h)A;q~pKDAkdq!%t}NxeZF;-7sq30`d zMlP(UVq&^Ej8%@J?Z+^QHI|jI^Kfk4e;vb&Y&UWtrd;{Wqdm#PF?Ez|iKv;(BS7_?uJ{>Ay#DGJekBVXkF<{Sj=An|X4e2JP-3NIRU4}y4*wbt)= zXUE|~lpJCl{sSGqlO6`;urn2mh~qGIb2x^^wF5L6+vJ!|3?vRxFOrwzW{&h(^=F7B z`D5c%q9%rzGUn7H1}WicT*gJ&2`hGfVjlZR{S_XMaI~w3pUmo^?s=ux4u{R!!KQ!H zb_QbEVOs7^tS@o)(K2?L_OZ*PyG^b$%vYr+*=>?EFf)Qx}o0)xVMM*9S=p_3xzl`VeWZ{)6;i=Ww{km8TBi zkHk-1A+cWo$A0We#d_sxH%k*1RjE!GV|dNT#{R2ZBh(Gc<=UYKWplRVTO^x*UAv-1Gz+ zgx`)s<=`*po(TVm?n&UE1b=z>%NtzNF0eVy@4@f6vI3V?oQH(;-SSxEx#is?B$M#> zD7uPO1^8tBmxLWj_)`&TMfa@pxt?dGSiwCRdL{OTD!LUZuLQLcvXh`oTRO#EpiXs9 zb4%1|uAL91v@$Z~ozvXJb%xrU`TGXV1#p4F78E&Hr1+ z&IBEv+C$y#vHgg674!cu6Qc}#vVPU9D>g~%E;fAK$?v9>OUpWqIG#r2tH4_Y``a4c z-SF;4#$t>8yOiY+S<$g8hENHFO71_7rI$cY#exi76~wA;n&FS?qbl`LmHMa#t(v4w3ddE3~oq1&QtUh>|u| zXx5*9oAb)%9!7~d-)YLL(J!i*eo=#dQN#Vm#Ib!ni(`2#j+M1Ib|2>`E%B(Tf#)^c zd|eZyqga%$&m?YVx@Wm($4ZhZNp{b1Ytg39COy|Jr)rYcCR(-e*+XArbsq63VQnZe zt^=ixTZ})&>U?9>QFA`S5evmW=_}TgwZ@Y==&0kK@78rK!UgE4>t5j21F0T5S{fOP zW#t8{Kpmm}Q~70JiCEL$@KtdCMbD0lMb8nXbhf&szl`--H@Hy7B*jRQ3+|)*E_Bzc z3*GweMfhvWFQ)ur_YyZtT>@?cEV;;S;9d&;rEb2#zl=vtbJS+erFE2dl$M{IUrrxw z2ycnHG@*}P0sobhCib68@yhm5i_HB$Y>V29j0TYpsrYbJsJ~o&vHx#sio2e8eyKal zX@q5sKv9(=4W2#viF0@vAu+#J(Ldzw*hYV##&x^-!({wK=rNugx*P zEH%Z@tY1PCzvLMA>w5gU{usZmFJ-%EiTiad&H5GDlP~z;SX!*CU!pVes|dexbs@H= zqPd0Jl9nYUm7P|Uv~pX!ZRklYN!#LKTQ}dd(+aMmo5MHIX$x0ddUZRf?Xax%MRLFV z2%}8)tE z)vb^IZ0cmi0I3sKJCsTJGW14quLDm!rk#mt=VM~pxl~L$mx}4JG#k^-XcEq3!7mfj zHI&&lZ0%`FzL-1p(l3N2buGuZUAJP_t;g7PYbm>KEoIlSG;5dD$TfiAAIGk!uEhpB z&fI3~lJkI(Ei)XCHeVt(mngYU)Wt1*pQtx9vHf=XUsviPZhK>Ohr1F_68o3fUD~$J zBA+;?lNY--aO9aUMqcYhK6$C%mJRH&;-wNhPcNXHr{i@N$6|FSBX5qHYtFAW=W9dy zYEyPstW4@actwx2e>pz`>_nZFLS6fet`oFJzF4Ig-jmFEx0qb9>dv{HoomxVt>xuZ zZS0TQM^htH!N@eZOt3PrTvm=HsvLXNN$BapnO!e-rp0%rpXBSi-PQbhfZD@d=Jces z^>ia%yWZ=?`mL8MSHvYMzAu)gzfjAJPPzLd+P>gwOrA`Y9kE{S9DafmzaHy_js>ch zdk;G9aepzgx!5RAxRShce_21JKk9xW%;t|i{8J|uJed>u% zJx$-g2cPb7??vCe?iQyH`ueyLul4CZe7es)Nsm(}X}eo@AKdr3eck)vzMqyP{Fa)p z`@v~_JBeqo9>BK;3|?IN0pr^PZhxfvyPqK|>weGp=ILXxa#T7z*0&RkZwpi(<6EE5 zx5m_A4;A^=2jBV_-|ok^`_YrC`s3S!=zGu=UeR}gPGKfjs$q(>+w!`rDR1UVEW4ZY z3Y=%FY(uZ0hlTWt&>s)!6`?0}6Zw<%^pIW&`pl3ntM3J-x2BrjI%k~lu2e~v+rIh` zeRY8QAa(U%IL;|mg=hy#`>!D0HZ}dHjY$qPeJFYlu7?Ng;uqIeTIm)fhn)x zo(j*EA1@gyyQjgE#ksv6veW^Fc3Uahj8JlFh!@Gp_$BhP-iXR7=>_;B zk!MZ_X_e8F6UtWB>3Wd+J3I%~VNzx`Q&N;r@-J7^gWO*eN&>_4b3#dyDfum-q@pSL zC86XLQ*tPw!M?C0yl;`U$;dMbSUWuLg`l$0TE5F0)VRtaT z4#w974Q0P!0kPP^Dm_OPlaFwQuudL=r$gZ#DzzJ<73xQ54Ue$;6{*J5(qT1}lA)C3 za;0t&3ptaqc{A5S@-$3`E9L%-R>NGmd(q6?CpcYCSEpl_To<(E+Sy(k4R*zb!S3nk zy_hG+hPuPu992C=A8P1B-9hdnt{{pf(Y=?o)Gl=h@A0%`Q!dzfXnn+BKVq;)$I9cF zVtXIT<(|@`?lv_dL5u91c=%&=>{dHK%mvY&M?h(6k9;tcL+qXQ(f!$$@Fd<>8f)r!EG@v^vlD-d z!4!NTIGb}6JN>(8I-)$r= z{Vd)+>pn-Ep2Np<^rpKd#<$#9-N)NVI(+HG^LhB5cWZMyPxgJHwv^bfqBatF_B?Il zdF*`w$rp%U3bJCK_$2jRJvREkK%000&J1_Ds!p1#g-2R}F#D@b79P8i&whtrxV-hVQkr_pw_KyWn-(Y^SYc%ozI}oXTY0DooAM*^IoA{ z?TKfqD#S~R(-m3qz3sJjUg_V&_N9F2GFHEczQnOwW`vE%9B)2YLiuj)ugZKd-OLBm z&3y1Q<uBC5}02Sd5;D2eJ!26RNLXhC1Axd5nIs@p$?hQodX5Gx{@) zev!{nm0~_+qF?Blpju6{!jf5T7CJpFnu$ynQnUr^vay;;ea&>offL0_+KKHyg{J@H zLwi&|=gg$V%%l#osDmu(K>Ab-+S6W+xm?#tTXY6loF|cyxm;pz<0Cdm%(IU1S$K}; zb6v`#m}eQEvy9JP0;Z*BxwFHV&&In0=;obCH;oxk?uO0A!`bwOz0Jg??J5;{S$}+Q zdW4-3WuBf6U3{;p?acWKa<3rQu&FJt&X`i&+~;MD1BSh4Umf4GiS!Oe)?EE6{V&^n z)t$?g!dzs9PvSb0<9Z`K7u30K9WZ4MtbnFyc1*=!gzFZJe)$7E-N-^%6x+ookE|f_O1YsvT3Dwz0dJ`>gVxQ2g7lnEu zE6jzi)W!~U3x-^0=4y$DTn|aiDiYU7*Rw{}*58|MWA&!n%vs1W4U{yz9!%Z!)^fjP z0ah+B)GV~*At&!yEuvp6B9@C8&xC6+Qu3_KJoT0<>xdojiNDdaI|rLbYqNz|ztC++ zUfSK6w68P6_En!UX&>V2Vr*HA*0+sKZyTGAhL~O8v-STrb+=Q!&HVZfeDA=&#PBbH zKaMUlVz$Ay?P4LdxR9A}36?A&jx%GlLj5lC?}D?`;4C$IQ=r>eEFl(43^hwHbvIHj zv3QSIyhkjSg|S#xCKdvI3KzzjYTU>%np^3 z5lRPVrMt>-tTG&oG1n*R`~aOFpmP;ESGlEWA0fBe{m9KR@;Nb|bB)jPjAayGS--vS zCY!Zv@37q7J4_DOqUY!yDw$p+&++WS=Vb0i%6XwVw?5V~JT?|*n{#`=WSil!_YpUk z^P}b-%va`o5N#@ho+p@V%=wq}*jl`cZ=-xDv`3x|_0&U*N=w}?>ReL$B-pvUsdJ8w z-c4CbY~|gQrEWWC6}@{ET)FyOGp5xh>bt1PRmh)5YVX;er@87;O3i7(UJf3vV*c>d z$F5+m;{N41lxzj3hm%8$bKDo;lhU=c-yY6d_Y-%V{>05gN~=8P7Ol=UU)cDR70zdF z9W;OLo==*g>uNh&SezZLq%WVZFW~vGuhz6AKz)9Kgc?|X zm&}EAk+SO#8JDNGi|X38rR3J7>$(p4sIIqAPdTQpb4*>gg!cbi*Ms4ey511hHSY`R z?-);{AB=7z?KFzt`NXh+ZseR#JF)e=8d+(_Ur_TBr?{W2b&-wN@n-7k3nH-al z;-i!$i^!L=)j#7L(!a9!IBXztZ zGAIhQ_q}fzCE;-WJ+iLe0xs;yfZ|+dvN$^`#tloXTMil+mavcx zk2vzwqI(HmiDx^(lu_ameHp2(_qpIa1isLd+S+}iAKizT`|R`RQjhY?u{>jXss1Sz zqv`M#sY~@bv~6=M@%sUcAKcDix$KTr(ZaEl5$`h7R{JK%M6`TpNqQ^q+;349f&K}f zyoYru<3<|i#p);bQnm_1(DjxJ+dF%o$fC5?{Zf|7rv)yzcTt`>0{5|eo zqQ5tcexVz$m3>h6x%;8+52**3PYc}x?$2QV?3TugkB4$yCVip`t-d~h;9+l{f!9xMtdI|@)ls9M9%X52Jdg~ zL3j_kzq^OvJp^yI(V2^FIqC@K@kqyGCv(Xa;asv2p7{831+AX7{xCak{NY|n|2jM~V9<>wxpLmWr)(v> zjhTlU>uX|Vfo=@NL54@_)YHg#>Ke3PqsQ@cyc-iGpud#AH&uap$F}WKY zH%1FQnHz>E-wV7G;A^5!fKU2G6SG#@LL9{U6Fk|6JOQtguzxom$OwCaC;KMNoD)2r zPr(L>c{$3oIuXl;sk-n=TRLl;^ts1XBl6NVYTqpRQ7VOemL9D-bCkX`3aXR|PxMaE zNuHpV2XC}`8rp6($$V2N&GcTbFig&VM`${9`xOX#1tnjBVn3a+FpZVnzx0(fd`RV& z$+!k|!fs35iNx-Hu{&n!1)A@XIXm zqp7Y+nfP1t4eLYXi(rZFN+4A7W;mySa0)s{!kbPkvr8p&8v)DW#kSd$mQz)maB|h zWp9%{9l6tyt9g_4S@!*-dP}tLbofvA&hVl@bwS* zwi3IDFRG8K)JIjX8WPpK>Rt^bYIv*Rmng|Mylk!Te&S?XFN>jN|3|$_^s6U>_4 zEayxx&-5yzyDVnfbc^Xh`@b;H1oKSqEHKaV&i0bQO!oR72lMF{EoRsMfhqSkrOu^y zokM?%+DKGZ%k;Z*Oyze^k_qnoY zccQ$)0@KA@Th&8}mGHq#n~j zi(@qg>tyE|u&x11-hR!Z<*Y^DA@~#D7c=poOpYCIvG0ntDUE?W3m+P+8swq)vuA6$zkFl<~vCi6XJp0Twg*QYs$G7Xe z>%uP%U1y|{sH5Y_*ceNzx!#j`Q^rnPFU_1+sR6lmva@8enNO0LPkMtTyfU9eyw_m$ ztJKP?M5h7t0+UO}w_JQFA}2>dJW6Y_-=tas-+z7kqN#~_Qxo$Q@Rk0SMN^{I)Jtal zZofm(f_w{aCw!*f7u$Z&l6iB8iuN~Jn0d3U(}L1h|5I=D&5ag}04=;5omL>XqJBDc z7N1^Ityu%K#-}#;^cp_3@m|B5;i@}yiQ;Q~TPymC&0xyJo|)MBzrIW{55B~@X=QwG z$UOPdEK3M-iy4s zlSgc(!y|gdMr+IQ-VjYyeX-NlI@j;W^kE;&euwgD-H|?XD%4rjR<>@(c{}eqx4o(F zR^A5AKHym(@xt!ZC2@~gbV|Hrtdegr$eQW~_&S5pTP3sdlyz7uFIjhYl8t1ZY8lFj zttmQwC$SZ6rInYd+k5e{4wQB9GW3nCS=xIydL3y;9cf2tVDygNr>@|hk$}_DD^MN1 zo4mQ|CR$i0BszH;;g6%<>~(Z*_T)MJTd*>^+kK0722Umxt6ROdh+${%J+83dQ@3&C znLqDs(%ZdvDSKCS4Ucz($2-I0UEwh$Ja!9@-8mMkyS=4IFI7FlW6$u|i(|36hdHP* zYq+lAv3Gd9H$3(UkN1VgzTxry@YpXrcIQ~E9`N1=?S0ihJU$p6Q^R8~j^b;EzTTuQ zOxlu}=6c%0^;}KMh>%I-)>HDnbBk9_b@FcU9wM3#5&wcaW&cFJ0V5+_D_x{oamRv&@ka%K19JWf>uy~n+Xzxn^<-w!5F zui*PAjxD(E8I8}QywTnh=z9WvqyMM;T6j{`6W$naY$!ht`LW(OZ#?qjkzf5E@-oi0 zVyB=5Jv8ENKy0Eq8Bd*z$F2z+rM4!5JHeaiO#*ikxRv1*jLBXKkyol7dCU1E98Y?Z zmvOQM)ajgyCccbnq$MB4YZCaAu>Z+W&lL1L=}qyb!Z{T^BjHWd^DKF*XBr&SJju%) z!?+%?)=DoiG@c>BhWE{R2Iq+_!tNVwyj{j3yLwq1yZV_*M5lTk9IGdZYkgTW=j&^n zG+IWQXWLWFu$*hqSb1~!p7N&Q(KK3V8g{06t>KgRCEmdsS3S)Nqr8(s&ym(9lJqC8 zPNf&Uqbl)B^C}|s46@I7V~#7EqGi05chjEr+Hmfv=e(^2Fhb@W1F~Q!e*i+UmBZ-ZmIKSut9Aen>AyM)V0? z-nnW^y~wkv7M(K6WzMws&5jt`yzaIvdMBxvxAy))HdD7NB|YHoM7|dprC+2UED*>{UXlf7Hl4sT>;ig@~gWuGRWiPTK52pMUu@*dqRuYDMkENEHY zJZOzodp({CU-7corONW`dw2FZd@IR5h~UPa?Tz~-IATM9kD2HYJ(54x zhHPlrUVUhZHZ%kv*FJ6&T(IhmCU1Lo_CfzpWgVIH{W}m z(Kn0q4SadSI~2n!1|g~$OLMTv#$*A!3%sd4ju(?Rp}pxfhn5(Vwqd?>Ocr`?5|cMe z#l*@F6YN+_O4p6pVcUo0mHe@Fvj{sDd3j~*C`howwvRewE^vt5)+z1ceKVA^Nru*~jhcPQ0|hLxiIZTjE1uq=8HFtNwZ3u(4p z+-UHB50&HHus>a5w2-!g2Nc*;87>eqjwIa&)bpTKFc); znv9iu&5rA0uoqJ|Z!uQB@Ogl$c9i2ZUb>SJ{kVuR>fK;FZXT+XePZ+Y)x<-1&2EQMn! z$c^ubc;3U7Ej+*c9@=?w5vf8|!he}>q(q*#TMExIZ;M(AkA0J5sVCQ4OFem$q|v=n zmnVkzm6oysS?Zmn<8NOqrB5$4qwIU^zP;xyXZ5k1{n7Wa<$Y{ffi2>P;P5`Q{=l=8 zoyJDd|33O>VB`Df&x!G^2>FtFi!Tx1+1MH9i@#&?J`s4|>+61q)(<_=6}_MGzH^ef z%IL^SUEaWvw^Tl)Hb2C+sxdy9C2lf&_8BAlT&xG(J~LJJ`LGY!PpJ+D&+%ZNv={q) z*oWBhp?8yBiH4P)(8TxA#s|Sz$=Fz(bQN~4@-~O`5{^=%9T}(Pd8SoFWHp|yA|m$5 zEMkByg4GM&MBij3*_g5{q%VWV#wroP##Cz5zU@SNq7B90cUnaauELXi{Sh_zk(YxH zIo>iS7aMau;f-3%K4WDkYQJ3A9^!94$+tk{y{E<4AbslC_ny`elQrH{@Z#@19UJpu z(2pPUH74e3u(Uor@tCi{-ZjMhWAH!rgeGx1WMUyP|JcO*V{a|~to1sC^Z^__VtyuN zC8`r+z*=t~C7pQD@C{dFWe-`7 zw!h|v{WTX$QsJ!Neu71xcznAk#*+tz^w&Jo7eqGTx$0St<&-f&Mt`|mpGQy3^KLe6 z);@RnDUq?`#yEAe{)}8M9Kv;r?&#d2&CY}A1Gmrz@`zR*x&_nn=j(r*n{_393*{C0 zeU5dXdn3bfXfDUO>K48zX3NtP%00?+;kCAZZfrjTy1Ze%i0Ch3FD3GIC*|41RNkqs zs5Mfeh4C-MyR)B+6Y}n{l~~qS@-jzQ&PwFD?($@1xY*Ec)k&eP^$l%Zj8>#>#V)Zd z6{|Pt_2^oUuFi(5}%^?YuD4q)_b=x65Xb6aMxqmZTd!cBkQ2`AbxG~ zH@ln2f9-AZzCp(~UW5B>%%XQ}E4a42Cgr>vVYJodT5u6B(Hoh7Z+*DU#PdhEeoBHONWEp@MSUL<+uMVt zJ)Y3xb+Xsg$=M+rFf|$-3!AdeRYfC0EA(Fe>CiO{FKFA6iErfv++2Lhnj; zsX8EUtyyg3JLoPtTV2T**jVlJx?qFw?lHX5b}jE#!+T=_@BT8p((Wzq=m(_k=W6*9&$nlgs&R7G4} z9Q1m#hhbN+2g5y)M(_z;_GQY_6LofiPyDeuMU&=f$|LG`Z=D%6kFZ;DL>=;4n5QUh z?ho&9NVD(Rcg4md^u5T&>=3i>L$==j3@Izhlz$PHZ!A-ORoK!Flqqi>mU|CcniZz|J&{5xY~xagApDMz7I zEJKr6w1yU8CxM*=_Q_zL3}$m^#pWQD@Pgsj*#+~T-fcg^_`-lXyod< z!gG1@Fonq6Ma(MlI~iSfF}hX4`;+}j{we4@1)YlxrnDW|JGu+0Q~Z@2PxS+2PxViO z{}j^7@XOz^+L6HT!N=dR^TpRY^cQYr{|Mut)RX0|I6%giBi!o|^h(%M8Cxp*r(;VB zwwwX>>HZmh6|k#--Lw?{R(SX>5Z0vVs#qgwH6*H#R!5?`pIVB4E_`=UDiozAKr6<+ z6rN;EVdpC)(u6xw?j5iC<0ZuIZmitFWbK z;lWvcral{c&h*drlhK;&ml*5{u8UUT+>d-R^2z==$e-iaGV)S-F7oFhUmN*aer^9e zpzR!BPCmdl!RkP%^I;`R5!S|^8#u&Gk;vEFYvE4yTCG& z)brEOFEd5yIRemx@p`?gLF^;_wV{d4HT2zPzNtsP7>>J{&%Xdu-ubG5ujdh+^Zb&~ zI;FZAKE4f(RCjZp!MV%@Jx$t+G*{na&h7eI<{$1q43T}(>R4d?%ntQe*S(GY*A15B zJh=EPCB9sx*Wh>|7F_6O==#K`zVAIOaTAV<;1C-x@-L=EUJS=2j0-(T8^9@lFYah) zYcDh;q2J2Y50UG`m&)IjTkTy6|E2IJ4VLwhczqcqm-*S~63_CuVv*9zefhTT<-YhM zG>dn+!ISca*wGL>uJC2n&DU3klq>zK&~z1)Mp$@--^jlj{Hy($20xd`<*24Hyvstr zE`uvoU5!*@<5y$<8lVj zzAlWz^&#bYzXh6FKxv6b*ZD2|R^Yet=Nfz)ht@H?rePeK!o?jxq*|LewD#K|)doAa zhjLLI4w<}-LkZ{cI9y4)iu*5d7;4(zmCP6PBU4+~hWf4rKL9^Nw?&Wq{leD7Lt3@y z=}EkMnYJV~+?JlP#i_w@FTJ}LM`?j={dP#U^GCy%jjn@3B}TFr)6PVq2FLdJ)ZU-r z+yLhd=vV+R@9$7c)}BI2Z4bD?zY*RW{jq@b* z#PFo4PG)TQ)xEpS*iaLjBo4Bc%c2L@Ctupuj-mdJ{>|vW8C!2b|1Ie63U6s!ZwYyC z@o$CqR&4DIZ)bSN8Q!wC#@E31{ankv1m0q0-_OnCT;9*UjW%=}Ev<`RM|JV5Fy{G6 zypc6=Ntrcq5i*faaxX{5F*_RB=y%3S88JHhU9hqXHGDf(-tO1sg&vWsJj}N9En#il z9`fJrccsN|QC+bk;z=Cal901~plc}6)xQG`clcY>ooKj|IC${b@$W85?((zIDdTT! z{3Bn?xYj%D)2mJ1w&gs-8}(`1maV?K!noh%r=Tx|v8)^D-OyJO$~1}kJ^IDRTPT;~ z#T;$BzcaM?PQM%Nz8g{L4n}vWXJjfes@zTfZt|VTC-$ixU`t;5kgR*IVBI0tfZZ8! zy89A+TP7>R?*07IT%Kl&MSvvBqD??LLGP^u6cQq|pl zZ%P^Wu;*|ncQ11H`h~hrDA&io54rn7x&82_s(bvtlx9(i@58OW`;oif=iQ!AuAlz^ zat|P9TaD~|cEXZ@&VBw?bsv^J;PagxKZ!kb84vq}b=4m{$;912mFCfe=O{m1@(Uvte@0Ke2-uMx5j z**Dxv?2lA`q(zP|I{EFKhd_S_KN~!n$Tz?rrv~`eo`L=i&OkWrUuYU+)?MwKL6qE& z4{b}y4MJ{ED0jc9@B0~};`$$g{t$F|$I2qzkJp3ze$;+H&TM%q7+<*$W7)(0no{_K zkspk_th9#Ea+*0q{GlBC>7igqO+0{2pCKbLet?ofuYZF6hy6xQe^BK;qC9m3K9TLO zt!y9D2CWqj6RC%ZR3XUx-9Eps`v~?t;!8ZG&ZMu1{yKV?ANOxK_{03+A-?6cJfde< zXrr`+KFkdV!OFtQd8O*;5qx|EALTu=VJ6zmz#QldH+~KWL+W*7DVgEO3^#G<=RO+B zJc`T+BQpY-j?R5%cX9+h_&hxV&qgvI^&^$1`la>RtFn=_>XEc++4F7~woltakEdDKh6sJaeovm=u!S?*2|BPK0%*&!k!p@Yj`-j{UwC*RcXpBMOYZJ^!_BoD*$fUxVNm&-Zqo!YtMQ$AXhT~|XA5DpGf({g!0btcZT0;;kn(% z#Lo(DXW~(Z^Nvnu6G!0_eNY z(pDy8!(?n26T`?+XFVQ|(L?BZh&y)U;eUvo*vUk5yg%80(&Q)kQ^-F_I@RRQ_NI}a z>QD32On#GoihP>?l>an!@wER8+Me+RUu<}mh(Aljp9>@Y93DvdbI3l2ZRv2QW1H|7 zt3>}ItDZ4hlDu@ZJmaVP&zt-t{{`~TlV+Iw+1_;W8UA#ChRJWzndE2qnf{Atc+o#( z@E_8*ns)FKR=tE(FNapW99s1cW>dN1|&ac3R(3;LV}Wrg0Q{JLg5{FG9DPMjNblNaq-y8yvxCXP)5fVy@f< zu%9VExjwCrHDY7Hubq>PH`(}m0E}_a?3n#3{o&Qvm_0Wfv*%JWP)`WCs&QW5*qxz& zq;50xAbiNw50hr-Z`2aKk#Ffme`6xjA!j*UkCqMMRx2&R_fvCSo_Rw^fxC4JRx)6cladF zw9co^%|~-S`d0H>gk_8TWzJ$OSnPKSdF?a1Z=wG!|82%FzKr0%!|`GLjxP~pexo*( z>I=V6zg2On{hJ=&7+XrPMXX%nTl}f;i}a6BBif&#?iK$ZSQX{|ps^Gj_@nm@4stGQ z_KR7=%f8RMzPxqtj^7Wvgyl;pkJ{^M5LeUobHld3hW5G!`#+|==K3G|YtgV4yZa&&Z~LFnUOq8x ze_;aFCt!U-+s_Nz{-dWTkox0`tnJAlztc;uT^*{R##d34)v>e~FpozRZMIm?&Z$>U> zk85x!lfgG1*ElQCV%x`R%8S){v+G#I_aViOp}K%G(JF{*IS$p&5lQ}H3o*?{GT$#w zkh6cEJKyj<<$M8OzW;?^K>kDihTxav3;Zwr4ajZq8;loyUm1NeYCeJ=8~tIVU;D#J zH~EjUCX!Xr3aA@c_iXUfCrbN?Yzuf=wS-bZV@v{1>}%(IWAtzKzoo5yL%PM}zt!K7 z-{ODgZ$)COztHF(MifM9CM9wl;ckO#tG~_PZt~yzJIHS*{Q;>T(6hUg+>fzx(O=Bp z#$3sj^iZ)%ZSa4BD!HBhdbQI((ceV`ejwcq)^4yan;VsA5NA9jAIQr!da?eh=#Kg0Jkd})U7myqu$WwsW6h3{wo zSHB3pBKVdXzTZN=gOppo-{C9rfA@Tal|oe}a~M!9_!)_xsR_MQh&wwu3QaXNkQZ({T}w){gR{vkGfL!1b= zQ7A7~3r;sZl4y*Ccdq)!FVIJkJBr*K_=+g!FHFH99@)QMCf^%40L@b?{XBJ)ou8xr zzh=ENl3kyF(QM-;`|1CJ^)FbvjZWS<;}}QU2sY19O%^N_HPST zXHY~gpX0Tx2Cv0xDO=6Y4^ovMJm&=91>kK2N9yd17bJF;Gk`M)PJr`-V6|5c&T>K3 zCq-Ybe$41O5j`iO=cG{2N$BD4${C&vcp{{eKsqTX4^sJ{x|ak}5;}#i09_S8sQ^mF z5Tzn0(q=PX<2?)YI5<}KFoV0sZHlkFPpv1Jd_F$QT6dK3t{ghb1$G5WO#dh>dyKY`GDY^f`8JI@4UE%*hUEFaW*`__DHmxe?_kQUPxgyAPnf=# z9m?+tg!EzYY3)xfM4luVVi#AxCpdnwiMx*Fc+>gvR-dQbzI8bQtA z%)s&pIQ;!s#-zdvKkra!NEr+pL_ree)9?;Jclhc>-;n)IL1 z*j7k>HNRSL)C$fGYQs@G=m5O{`gydW^MXQMhiH!GY2Z4vp(T2>p1?Ji^{ARNp_JdX z@w;}+@Bho!Z1ntJzHWr4tgk!5vg7$$8&7J}JL=#`9eh2M9{05lzSarOhvWR9Zg2q{ z7X*#ctgrR(wI04+82Wl)=<5Z@To6oTgwE8H%s4%nb~uqa%E}KwzF2+WOPd#8YCkLU z3H;s#=$WX$@GhjCUJzUu)JI?aU^@JXe1CfN4c|KNBKYbD7X=ra{O{f+sXoy_HpxjfX^|f{z8osOCE8uGwToGJp z^3C0=$X^*;6*NMwQP8}M++nYg;rqk88ooxs)j?yE&-bn&-#EA?Xo6gmU|51&5&q|L zRnr8{Cc(8qQ#hJZC)x1u9dgtEqgYs8#vXW^2F-)(;Jpssg8$@Q3q4g`7aaAjhxdAT zlb@EloXB}PzqPsrbvcnYJ6i-TgBzTdw98C$Z6@`2)SDQquTVD}sj6j=@3jK26?g+e zyjI|~3MxCT4cgTHGZ{Nc3)uPu11L%g=&wGECs?F`-^w_VU4 zy!NH={x}A2zitm+`{1y519&%pSLqq+?+xJH5bW0-4BlFfH-dL#DZInS;8li$duu^! zw?{@xV&dsEN}yiTR?TD#IG_+Bzmlr|s5uoIY_fE-bXdL=yi0+v8+_e@anH&4 zF`0I1^LYt!;|#7?)eVoku_EZ_KFPe0$vB^-r|3foyj#_ihEFh)z>NGYrhFwyazl_C8p;hVwNAGy-l6D}74IYTwxPiz!7#9ffz@ETUB4G9TXM)? zuQS&GcKvS4lQJX@){n+KK~RtTNOEsAjr-Agw7L3*KHSX5J-BmbpO78K%4b;cD7qgF zW;r9!IRc$s4e!Vpuid{K8?KP0UyQ($5qQM)7YL69kAv_yYwuCv%2_C*8AV64_I`q% zH!64{7z6s4V41yOl9utfW*WSIcJF?{p*3(xQ|MFBhV)VcI zmGq~?zB3hmSu>BpYAo``V%b>y?o4^qcOss#@QmfEa~wS5;2BniN7}sbMr~fsZJW1O zz~iX2rA zDp=FP_Bt(W=ToTBDW;q^-Qgc?FzxlITx0H1(?FUQOgH6~O`i&A)zj#)(}FZ;X~7ah zD>Qb<`=|20_)|eWEpLp=U%eZppN3Q3^iB)faJRY*yNhMt8~2D!;(Oz1f$ZI;1<^a+ zRZZ-68XeLHE)B0a8<_I=HK*+ZX+$+Gc!pR!Lmzk+E1$);6vMmUV91DWd1rAAXRqVr zdyk{xDckPElIH?D@;pl%pCw-DVV$Ixsgu=4hwZa6zN8c1^dLh&j}6ab!wy4_$G1>f zO0g+V90P25r5B}+|9cE*VCZGXfamf5`QQcoe*yn9(48Uv8(upGNWY8xPwaQ2;W?iF z)A3*SsB90&APN~oVMZ8*83{dL2D)bindr`>2fT>x7ty^r#HDHAPvZW~i}1e~yafMC z^njP)e;NL&FWEjY6HPPGG%M6Jt4zEbz*n{pybRXM^nqDm%>t{p!D9CWtSqo*hkamn z*av1&N3%?M7BuESgBh=*U1~N+vxApRdAtwIrVq>x=0KYhEHkwK-3R8FJ}~D$`#`yu zOZR~}rVq@C^?{nu<*)2Ye^2ZK4NZC3J}`&4&Iw*27O&6-vavE7-+CBc+Xw6(PIe$z z*@6ALx}!^BMc)LARW|#M)IYdo+f^JV{%y&`aozT~ zY-%l=+Icl>0k4`C5Y6=sOnWLl*T0I-uVU?7e4Z=y50CW4*Fbs=q65v2h;lVqP#GnfXD1p_OhIua_Ac=bLsh z|3BMB@~qPBV!mk?^JDFzA$0y;a6-GV>w^xayzJO8pLQ`nc!L!xUv(WHT^3SL3#pGq zVT~_J7+n@&(V}267A}U&fU^B-=Ph@!#ok;mz!;EmA)=}hfkBYd%l*VuAwLH`P%a4rrhe0XY${t zt&MQ)?(ci1r@t4-_t5(qzG%#dzTsTDZtVBZ?Ve<1Vr$m}R?j@E->e60UwDtJGWpWU za@L0L1q=6{=nGtfw8Cf|HGbWy~i`Bo_rlQ@!PnK=GZnM zcG|Jges{SOVvJlBj*+W__!oCSg8EUA12re4=2F+IgWO;ZsB6$$5u4*^iFHu= z8_Z&t9TV5k>ekTeJ`P*m$EC)^mf%He25DO#qwizd)>`zfMPF}2PaNMYWuz%jT!Yy1 z^aMQH-`AR&TWe~LXJHIo#+mrnlh+dAwZSJu_!A=$hoE*jeE_?Th?V_*2kH*HR zU3`Wup9T5Yl8-Ixuw@;#OgFsto6j@NxqO>C-a_Jaw=SXH*Aw-1!TR6}P`(JxLVuhu zUdI>nY`C;*`<-oeel`1p@XGg-3mE4eRS?KGl|??WOunhy1Y2a~Kb~2c=Vq|_i=drT zz>b%cd`bRG@*C)n1;K{ktDpeRjr7uuT-Sb0=~uzm!6vNRgpV(PFZ6F{S>Hh4Ov@Ti z``#Rk=Y7fXy1jW0jOQ28H^J!J1pX%QH=|EVz9s)H`7I!C4z>i}p>KlTioUJjZKL$N zU|X;qecRDTG5RLx@6q=?^d0D%fW95U1oTaa>6^eF!UVKNa@CQutDm>rr}P>%oooIc z>M8Wg(>vQi*-pR61!pzCAE<*Lf-TOEX#FwhVr1oxKpM}LJjH)`s_ZFtFDyMD`Z%!c zI!B)1l5=?;f?uKk3jH_e zzXdOqp&tx>gZ>-z-=Y5=tSCc26#NeTcj$jW|0CF%Ko@_b@L(+FS+7g^PC?iPlWTUpJv{QlUlP_I%f$sj52JD)mj7!-f*Y%3uU&->wg1 z#o>TwU*L~_8CW7chxRcUw6$spG#PdN3}(jU4gp~yE!XR7(e zu1c@R?fMJ6vUU}NTMX_IaF2j{v=naq`=Sx{WN_EwZ!d7g#=jG6JOb7cuu8xx0joVc zaUT=0c(O8Pt*kl4cZp_}dIhV~6KsCh&x+X`x8W6I!_v@(KZ7jL_&Z}UOo>1i_ki=% zz67kl;EVj9il)*sli^>hD!&o=m4)qbo($%?NPlFpe7XG}MvSKPqsZsxMqaCNO=iN(q-|JS07X=w zqJkhQh{!6NqHHRQY@z~+B8q^rtB4B-2(;h-ckaE(w3JVu@A>kOU;gKP&pG$(%bk$k z<+yon_I$fm`A#40`fl)iW2<}zc)o`{-)>dD$G!T!==pZ9^6l%T3#iYi`yN%kHC{Q# zd%iuZd_!Kk*`9B&D&GRnm+^didp_Q6GB%h$&VNR{4(deD8R^x+>pzuP63Z+cPHWJseY@Fj&*Ki z-CI?2a$wq+&0>RPqc}IvH0I2}`=d|RH=gOTt<*c7^J_NS6>-Lx^XxkQP36C0)MnW) zvHuRm%rWl%vbhFp^>1stW8h)M=lSOaP7cgcp63S6vuoz7vTy%8**D0xNiq4?i7&0$ zY}2(#yMIx;R)6X0dX?^*nmrnmH@kmZd$WFf`*i7q(rpfW!Jdb@6<#Cl-pJn9o$LM4 z7uH-CRPhrT%;&XYz$|CEM3$y7Q%6SEX1QG6UI4ujwfj`_1xv zp}V-TY*M*(`EsQ+6mDzJBoiym%J$BbNv}+2;;kkUYfZK#)0tEx)1C@vdUM0EO|GCc zrawDmcw}#OL(X&+OFYI5@bq#yUo4cvt75C$;>#n^sLNzqqCM3b$t2s`I+D>Psd%I% znOPZI-MK8BXo)OqPYnx|Alw>Hrz4BwvMGc1&bCY}8O?-A80qK;ccj`Er`P5Sg9F{! zuCC%>q0*JDsHW?>@?tsLKhT#OEaaEvO66Rq_p>%rTi-aXsn%4o1Gzd=o2aet=_?Kl z45^9A>t%@6)^}w~l~TTYUCxixQCmMy$`{nAb*5M{we7X_#Y%6k6wV}~9qo})x7xy_ zi#?T%*^)9%7P`W-W_2~qYMRkFvvGDqxS=WBHA|*&&zx}M%y5G&{MUQRDLw0(nkt3a z<=l+c^zvj|tUYa}b+xvq;$~WWm8!O?uMo~{%30aJVOS1q>>k#o{$W`u4tDhphkA?U zN+H{y!=Sv|GST+7W${!doL<_JiZ7ekn2D>8W68|Ysi>&>A``d$qmYV_a(~1knMks) zFSjn+rw;D#&lb8(A7d+9S~u9Qn$I<+I8ae%n|#?63w=Yzjl40hkw(t6nVWlTaG)=* zPRe!vKV;<G2%a$uG9hp>B zVHvn?S+oBov&HeYMX6*wk#25Zo{lVw(cam9qF##Tz}Ton(og2)}e4Aw^7k+=bE;nA->sI%2#q# zvrMh7+@~#TkIpq!g>WC(SL|A!>#p*Za@lTo1qk`k-3%*56N)p+O~P+Onbdq;#lnVM ziC&wmt~{ocs|=P3^NpNK2lJIF3%rM}%V`#5BAL##DfZZYFrljA&@n1z*ydi<8Y;ZX zsL@p(Dpzv-USr5sSf`@UoXq;Fj0pNUZ~IKw6U%oo9J5-ULLHGzGtHjxMa&m&hTTQu zjdOootj%?02g{UnxVy9ttX0`puU0q2;)#&yF6PSgb#9YZPOScz*gjLn$%is_2eOH; z(88K*TWm6sMJ;ht%a>o6d0TeP*k@{4>+80IM*UFAm9>Ve8`Sby+rVM1$Jp|Pb;hlH z$V?tA6P%Kcx5U*@W_eOgptaphUYLxTmgEvWOGREC4u@+^q%CF=jh=M{rYY4~Qv8sK z<@$0J@^rf}ri?T3a3ZNvGg5}j6)9xFBmMPK{8FSB-WJU~kKDtC#g=uFZipNprlQk}%iYUSQyBRrkk&CLkS}?PL58`E$@d zsj;r9E~G82to?FBwlCjpGD8D7GkJ=wgg0Al%*04BsGnEzoK`vwRYgqHYXdBn=rM)O zQZLx5hIOB=C8@8HukXuk$o09+IoW?E8CE}QiaSo+b~cTMQcgG1rJ6cz58Kf<(k&r( zIF`dERy0G!L9;Pm?xo#}n!I*~FEA&xooH6BjHegp3b|6Ys!u~kMf69Inkm;mP#Fq) zE$PjFTi!^-q|+wmHnCkwG<@uN!lu@8;Z7f|zRJd3d=iahzC~Y6EnCw1F{>f7C7o#M zXx^g4i6)bnZW1$0Vx~#VT9{0@167BFXtN11QX{tc+Ea!BTxE}bgnbG2DJIh#ZzK13 zOIic9X>Q1v(A>my@8=Bf=S=VCtfUIY5OpVBvY`IxR}&QrTV^$>xY`+4L}SMAbK#Qs z%8usY-As+VUW1R(P%!w+KyN9lHAF3tU#Fpv>rPtpNW5Xk+~G|sSzlq)X%s{`NA>C1 zI#aP@Y@Z~LZW zO>M;2-s-TOJ6#*ramD*u7+D`~Xkm@@=A%}vk$TQmfeZBo9SlnOF4Lk(+mp{}1yj>h z%2i>_EhVZHi`thmBuYht>Gv{f9cSdU02HG%9<=Xtqi9PHD;2n z@zzW%9&PJvji-{))>vyxYpTh%v4xkHb~^fIxFA(eoonXIK6=(nuV2({VSPv2TRL0Y z61Gw7+T}H$S9+~MSuLA=gZ%~Lt$#K_S`F5qHLg?~T-R%6&aE@*_qK=*$Z|9eJ7m`& z*JD2H(&52fo9eZ`*{0S;qLJlI`W?;n``>9%zK?;E*eH_GWcx8yUguXd_MN$EFy> zw#N#^F6<~0r6iIL$%{{)Y-kGiJ7df?E&bm@}4Qi3ry>FXwqd-<0{1iW3nsn*j;zpbGjt_piq3hU7R$gna zAW?2bu4_=|9*Xq8rW@`oGAMH+CpCw*P}y{6D_J{Pb>zjo!atXKPhCnP&hvgTMh3(3 z-mKltb*RvpuD6))%IPSPI#Fv)G+LOpY16c!p%bPpR=CR!fU@6Hg*vS{>WePsiQX~T zqv57aA+uIT^PwSa$k8P`Ous%iR6n3=xcMJ)i0m+j>T&l!WD+fyjIsMKCse;0w3)jp z_Y7BwW(r|+OaI@Jjnt$%VJuSMIsR8S2W%|`+Z5WE&S)X)N6}9$EM;Aiw80Mbn@~2S z=w_gl(+b0#U}PL}`|`ICWujC0f5~Lqq}vrDrKYL+(xcqzHPXrM-pOkwJ(z9YE2Cyl zYRN|>u4)&P+O{>S9g8>>64v#Rm;DqbZR-a2t5)>%R?rrd4RJ$Oai zV{tQls!*OO-Q`jJL!LhXch)w;DHjb&PbYJnlO>*E^%ytN3!;)00g) ztJ;ZKUUK&`-X?7y&(iVG6b4$5RM%rm{h1||_?-k3N^+HNdR@2(X48sZv_mq=poUK_~^%cs5I1H)-!|BeBdE2)z zSCfxu;KZCAG+t&Ujn~+)gO*#KjNv=lb!}5!uidx=*@yk#T8;aXja1$6ku+J)c0F^d zJ<;}53g0Z(H@(`YRt_1rS(WRtCKRDThc5}Ch_Nk0VGT-nfdeAe$xrPUK!48cexp*EmfcwMwhK)%#Zu&*dHw z-FE}t^{+bGh`ag@v+X5{>rmC&S8mgLH63I-y`M|wEsLb0&5=~HEyF8xT~j8{scT)- z+TOaNEoE9eTQbRIk(SPQYb0-8R94+p?G>hMyfoG2+S15jJ=v!BrWqci zpUarMo~0$C*T!4g7c8jLe`djg#)iz&mZhm=jA`ojxV!qN+}ADc)tepJzQx}D-P*_z ziyLRTSKEmDenNA=ULX{qq>am70y}hdEq3dSUdig?6VsN_OB~KFU99#x8I-b8rD6YC zolOnzWAq}7yHIy=ke7u^2aDR#hhw#7OY27xPdaA)u&3F-(+*qG1KBQB%X@xWyG`$c z;o#Ci6^0jT{mM}%`tL`xarLj?`L(gqw3>1xBEDi+BbC7y=hnJ?fmZYZ`$>t zl6z6(j@4Z(=n{)4Gcqi6`$wxFYXn3`{do*s#;{^{AHi8gBTw! zhF&2IpNPwT`|P;fyiBcbEM9A=n|KxJ-J89dG}sp=Zu#aJH&?E1{<^#4>_4Jux2x1h zv-#EYi(fq^chr{LI=xk^&c1@Ho>lJt)K%=xjeJl-qie^~i;6bA|FUmpxzSPUfi(MT&XpGNxemcnZUY&t z9jfH&%Nw%;e(kwY)!P_(z1{S!_JT8A{UBR{=|*%XllN-MHMyTgx!b&Ju{C!M ziy}I6q~>ZytND-REtrD(xGf!Rj<-gt9zJYiMYEsG+4dSSPfe!7@uhqm@M+LKh8Y}9`OKz!as_jUcdCk9}v6A@~Urn6S0RZTM>Ip>^@3@haM&od|lND9;6Tj z4+MeDa-ttAOe~@YUnMH}1se&{;KA3hDMlbj4IPw2!vyz2(bNuUZT+W{)4@1vG4ZH* zGC8){sE;)rgNe*+M;)t>t#kxIev1*rUP45=#i0Xip;MS>5QjDh+Kg$#n!|+?ances zQ-sqM3R2RVTHz`}u4E&hbCeXZv>^of1oD1~gq(FhuHUxXqD4oC3dS_H+IiI^p^ zSRzP|IEM%|3;ObH*stna`x2ukrhf^z*s!kH}LFb15d;3&Wv#5FN+AM`9O&!+kMXB1k>#nBm`Us9^-~$LXC0%(U-X%n1HgxE;3L2nNo21X-Vo zpuA^FILxh@Ny4WIH4&n3uO|{2-G`u8??*6#9`Id{`QmX2XS!StE2G1*T0_%4K?E9v zzes0mv$N)i&311Doj49bAr6vo=wF-SILy@V1O#2cUovox#?KVnNN6@8hRxYTqHQja z2--o*G;-#GdEgkqPNW-%N}5~zGO(;V?6UjC?z=j={v15M;~; ziEb;jK=vTx%Fd~ULIjHAt!=~Zdpgnki-Uji||G9(LrCs6vGt9MCV+A zDM5%f`ISPpPoG1m_<>gt6!vulLvNJ&+?H^vgtJ%{TaTj%H7n#K!ExB>sxZ-c_yPnY zAc`RG7=kJuC*drSu>M}mjF3F$773>nw1IZP##-;k>LXSMzNH`q(tfN0&J3nbunaph zu1IRCb&j9SWe8^a*L}+s2-P}pB|_hU>wMR(2v)G~A*j^D2&T;=2>SY6-!e{%ysgh7 z1fwd3piQy}9-2dFPzQQ_SHFa_Toz}AVAG$1X{AEJSCqy%9_I--Y3DM|RfJfP&L$hm z^$pA?N;oHh)nEp>jD-VCLMw6Z$dJm3Lrfpgx7U zAmJ48v3$RVX@C$Vdz;WH5>5$}K?Mv7w%y+$#s*9q!6q;SP8DpkZ6(HOm`(?0fRBNX zgHM1@f-}Kc;B4?I@M&-k_zXA~d{(e)(kLxVc6{uHU}c|xpoR+(49}A!f-F!$CQ?vE zao40ZM4)%`63*u&oX>;v!1>?;uo-*-TnN4hz68DuE)r}r^^?iPeyBj`D}?- zoQC-l%na_&VBSmOas(}ZGyY2@oUek*1Y4IMVgDMYuY+%3r)tk&zg)t(La?T1F?|!$ zmEc?0H3|dIW50?Jo%#ZyZ%a5=gKNOGLXakOt^?PD8^CwKje=c2UsO`Ng1v#D6k8CC zrNCG(&Nu{3d#HqSlZ1Wh1k60X7NJyui3sLyJwo4s83-C>0fNZw2r}zH@W70ObF+l4 z*)l@6DCFFViQHCV`YxvLf!o0M1)F*e&L8-pwS;ab!X4mF-`$-v+=rli=OC!n=MY5xvM(<3#l^n(iZ3pa(4Tb`ehlsb_k#Nb+a#9~<9`$OPi@Q7en?rV4mBk)FF+=rm^#z;7ikplm2gdUf0p1{OZoIp%`3-J9C-><-v;Md?c;3@E1@HF@x z_&s<=u#e1;5zp=A0xy6U!Asy}@QPqJ-DPCtD0Bv5lEj(h_$rZJ z1Ahj85p3nJ#`#xFuY?hPrRs2cB=Naw9-ya`0U*|w@ z5I7hd0>*c>zJ)S9icjBxvDzc- zggOwxQauZyc!5p{{h4v05j276U~Oi#Bm53b`@fw#2{jk#BGSU#M_9YC5};2d!H^Nj+EsF1aW?eSSWFT3T`jo%Mrx+ z5@L$PorwJ56Zpx-)pjFWr)I4}FIfXZuAjYlwGW+5ogT7;1}7oi~%xK_exrxiNDQjh{^!S==N z#K>Uk1k1p3utKmC?rt)p`F}*zmH3Xw=g4#~rV}u&0w?vfnLE@;LnO-$M?HL&10t9#|pLpwFnmR5P~X)eQ~UW{$V6xJ?I1dpa6Gw_&hjI2(DEEo9b_*I$tJR!Z&ybqu}3|FTl)HepjKO-HbPr zSXSKyq?`-E7r~dnmjzqc56FjgJb0idcw6RNM5K#}gl`O{uVA{wH|>JyQcPb3mw~T= zuY+%Z%fS_b?Uu3Rzl$2d)P<2=?(O5#u|UZUi@ho53yMR`6XxFXyDbNANZqROZh2 z3H|`wF4*k4{37&{?;ZH=1b2bE!4JWYz>mQ_;9hVaxF7rkJOCa94}pilBjBgtQSdYH zbMOoB71@MgWrMQgJ-}W zz_Z{v@I3gVV0+;fa{m*i7r=|)CGawM1-uGg1Ahj80e=OrgTH|{z~2SC&fG?x|G@N5 zOibE`{M!5q-@ov^3El$#25*CRz`Ni-;63m@_yBAHTR}h#$*qcHLM-q{H| z)9fkiyvKJ&gE80{dB4NHGp1d@u3#+K4e*(Qvj^A{>;?7)tgmXABV1i(a{wzhQ#WWEd0Vd&8Ed$TvJQ7m~Oa@cHRB#li1NDHVc`MIsCw2!|Dg-&DI`-p{G{FXf z8N8hYr>W(F91Wah*p`D8U?n&noB&n<`#H)&IRI zMKAzP0VPltY?*E*j|!$iOgak(?!&YJ(?;L)xJ>qu&*IyJZwQ~x27%`=or>u+Omx6o znD~InIRktQJL~y-*guZx6X26VaG~tZnW#0Wvv8aZJ_SAv&H0szwis`H1GVnFC-hd*C+keeeUp zj{jYF*zF1h*#Ye3WIs%I5bI8G7q}bz5c~-I7~BKy1^0pb!B4;g;6d;Zco;kaehMB1 zKLbApzW|Sc$H5cem*7|6N$_j%8}JnPEqEII4*VWGBiIf&lEVK1)3e|??3@8YvIn>D z0owD}{|NpBUH~tGm%z*574Rx}4g4AW1^gAfE(CSq&_+b?4T6k(=kEmn0saa81>OX2 zfq#Ry!8_nx@E`CVcprQKwt%gGgPFs4u{V(h)xhp0ajG~9AD_V5SFTA+J7MDEV`nrN zgHzX!Ko;lDn05iXg0WyXushfT> z6dVQ)2L?<4wO}GR0`TFmb0i1}b}jxKc}^z8y#FGhDMXkGjskU{9)!U(&;S}i6PONW zfSF*HU`PC=WOp>C*1tp0%?!|onRSQ4ps`$ z@x>@zlWp=t5!{d$AQ+w9h}jZDh>*lBh=~%v^~HM#j_ZdVDq$qT2z>|I5M2D$Bbb#N z5R~U!iQosC@^-7bj*vbv-)hToH=*|kQI}^4{f7|E@H(M)32DQzAA$zo@qOcU$qT+s zh~{e|^lw5sGXxTZ-Xg?#;v_pu?Tlq#p|0G0#&sE622fGZxVs$M7*R2Rr xJb)mhrx29+RRr7R+Xzy9fZ#YVTHRvX_E3qPXq+YqCrdxmhOKo9bF#*2pSao4pYCo%Xmht24*!k~U^d`JC-v zTZCiaDdvBvO|cTNDy7uAA-~L(*-V>iM`(BEbDMp~%3U>@Q>+@z8Q?6d4c=jC;B319 zywmD{ciDwj;qJD3;1ho-R$W~QJ=3kO^|3j2FW+^E@$Q7rwfGSGMOI-Oe7l5pwUt>t zu*B+nY+#=taW*YQG2e&0#_pz7jI0L6xxTfS*1cZZ5Z?{$yP&@3+5Ohsm4fpb=X`5Q zjso2Uwh)_FoT5sWC<}{h8d=Cjx7r@CZ~2%mwx;N%aCNcI$`Whji9fbBM0ZCCoMreLvM<=Yt^n|W;RXFuJyTX<|~eV8HDM=Ou5!7^*( zv8~5;9@~5D0G3!s-|hq!Q`wSSO=d15vnBjrK_n~eQCma&YlypjOmP>R;>fT}>(2=8 zrMJSZLE6Pm@>#%j8og`mF{|e?Y^|5Bv&WIH1%E)*JqE6ab3L5PJ?9UZ8%2A1F65`H zk0{Icbh9m%kzt-QvQ0}hBD@Bl8~n^>VY89=H}b9cH_^Mvp0FqJxdGga&&~K`V&L5J z4WC=+l8;go=lTTaW;i#8oLlML%A9RuJnO;jaBj!$MmTHiDeQ`w%OFMJA3%*^UU5)+d3_is-i`uEN?pUApqdad9z3hT#J1n~s-k!tT zbD_8A(R$uq;C@U)V~@Rvw-;>>>*SeZe<@-8GS)AL)~{gw3S-}k^-JJBtoIR95%wDU z{-l^R_Vvhvu^&kA9fa>-$oDF}uQK-6;5z^wg6~jhr?DsVC69ewlApTnICat`90~Vv zy~t-UwgYu7;d>vx_l3TD;Jb$%=33RdFX4M=E$OFopB5)%J&{HJtL=4PH{FwJwFV~X z%W5b7O06fge8@8&vPwo(X*1zaP85&61HB&hM%cfce${-l1V;~hGweG_pJIB8{(#Nw z7_xK4B>mGd^)m){|;oEkUkye85Fw%Dz+wzcKIf-O* z&x8NW9QLqdp>^G~AYScg5#O_}*oF z#bG?!Z6n!uWarAC^pp92ign=UJzp#D+0R(1-UUzK>4cpK{rnueKw?&T9)6^s?B^Gu zb;}EaJiedA*9h6U;+B3g-v=Sz?2zxnB)%!zF&rXjp_vP{mS#zawoWpPLhd} zL>A@hY~xXU(og35UC6gM;taHzmviXX*dM%patwbAtylZ~Bi%ku;v0(W-{t7v)!aSUs^-Kef6KW(Tb`pm zqKebK_KL6X9gz>o+q36I@o2rOVrTDe|AmK7SXZjRKlyXgI{TFCKY^c7|DRdjMZuoa zfU|6%Uu=Ko6r67VjqM{TMqYG|`ZGQP4V`WR4V}2p)Hr?SQ9O#{&v1>V1abG`TfSN79AoS(ns-s{SF=PP`D$+_|?Je+wRY;cy?y2BIYLO#F1S1-o? zCBD7@zrxp7=rkgxNH5BjMtbHr0yeD|QC`okQ`f0q=ccNZOdHrxc`V^Xtjg2f_9Ekd zku2+4tIJnJ^%bkx{}R<_U^RBt-cGR$ZY}%2CC;P4^HdW?zt`u#H~Hypy}1|Wa{YI{ zf6Mp(u~+;Ztijin_7ARVz*8`vg7X8$o9R->V{adY_SREqp0a=XYt^5*dd{44X~>*Q zaaAcPF0;O|EA_S*&xSFcQ&W+qI%*7gjeX=tr}J%Ut6v(#SPt^o`wOIIj1V-j@@4^z_*no5t=EcPUlc zjCU|;cB#9}HNm0@`T7K#=x)0ljmzB?32*6Kr@Je$xB_g7MN=pJ8dlw4@7m(;xhT3O zcxpm)O+AC|->YD_%4NXN6l?}VGkl)7IPj_GkLGAJcP;2?;coj@AlEZlOYXv!P8xbP zZ)a_Nlv+1~p8dW@p4DpMJxaSJmD<9!bgjHZ`mKFSoNef9?b^7u+&8Vjc6e<^JQ-m; zVrrjY>OhX#yAH0OfA`S{ovM@!`;-`~t)pwgto_BeJJF8fNVe_;R|lt+SMNktxDI}v zJHk`V+k}2#dkfwkTt~au`hySK0Pfujc(Crr^#Hq$`M=JhI2U`{&gbP%_4^^L={`2q zQafg+ojXocdQwwtidxS$S0m}*u6CK^Ba?g_$4?EX_UN2Fy^*fVcz+{4wSp%iwE`Wr zf>XaZb?%C|T86fg$@YV!sI;PIG8dWDOc#82!S}>aU)7V&8@^&z=>>eZ_HX+tOtDDv z2W#y|ru8_gtL33>aNpkJ+Hfx@9<9-l&hCGqqv#`@EsZrtSz(@4LtPRz)QuYI;<_=f zTkL7S-&~V4AAz3g@SA$wLp|j#7;R7Qr-!eRe!kr^iTB!2Ul|Vcrzh!`enY=ksIOTH z^w%coZ}^6Oi4FAG(JVA$7Ml54P`;G=Zrqg`XK(J$ro0hrPOFdW%PjSEpLnif?6o@# z@+`_yZxyhru!o{=7?7J9h%TWtPJmykc8mgXvjd zLu`#J;7w}|*F$Us86H9JNPLaNS0=u+?myKu_*N{{Hp;W={hjt0)tBZ&Gc*kQVa!kv zInU1M>+Y!LP8jMjm+Z8+_tDUIF{5hk^4xG2cs!1NDeKMqR!Dyb`itlbr&(};bVyOo&p?N&FP@8LGxiN6{hUFGvp?8)}>t=QL~ zQGsnp$6Mme2PPQmvKVxHmV!l8R) zeoKw7gt@M;w%9-JZgVA6L_K%AEA|}P`Ab|WpG8*cC0d`$kdz^r32UjF>Aph^7K5{3 zpGAhm^*K?=`VMsOaI@W=E|T1Z`%|hgp>kKAj7$*WWR#(mD(KlT{jPJ^IS`0 zTHy+PEc=P&{zP8qQycfY`L2l3UTASLD4rs8RfRe=@t!-d4@WEeg$esbZiQRSh-+b0 zj(m|Tx5bP)$WgH8R;6^bd*GOsQi5%;UgyCEAXza_bG*&-VTZ#3x zH?0BJQSKi|%Kf}V?iUixA|H+NKhG^Bnng)-FpoKqv?^sGHIoWo@*HU8xg6OM;?lRC zAcoOiOuL9PV7AYncFth@S|b<1xQGm-AzSR0V6ntWzuLZ+6ybx32$v?R<3YES$Rht^ z{5UIID>z$`kwN%XPIQL-tLIw=pMD8!#mJKPv4@i8WmaNdmUus!lUYP{+K+NB-fCMO z@+nipE!r3TGY)%;=By)nU!Sv5D!(M0p@E*K6%y5WFmut~v4o7s^Miap=w{ebADMFZ zFp{P2VP=Y74W0H=exppvRe2&;E2+(Lx6(%+oZTW{T4z>J<11Ka0)3rjQrpi=tW0**?yi+|_>IR=f4=QW|ST_@-f-|HUcr(;vUu^Yyz^@N2o=M)dM5 z*RT@zBHACiEZ)dv`8RSm5@j#j0IQy6R=ah~#yaee!Bb67&#!seNdHFqpE^%JnwR%H zR~cN&U2ra5M@_7A8~wHBXcO7n#2h_A92?ye?n(SSiJyB~Dh|#(V2O>h0;hHGCVLa! z%w|E~IA;G{+FBp_Ni#C z)XKfpXF@yb4(`C6iIsaR-pg&Li`Ic;zF?2uN+zYH%*uWzQSW3&ewIw`aL>A3M8C@& z!>=^-)bt~I#)7-qhi~G#*q+1YId*o%(G$b#iR3AWIP$&A$Ejzrmtfun-^;}RvU|nH^orXH|6cefw>X`rePmVk z%G3VDI1eON(*5oL`H_b9^ZoEiQk8N5o)PdwYk4pWK|Eu89o2JVZEqr?1H`Zw%Y)b+ z#5T>>UNBd$CdKetB8EfE)#1ckz2*)vSBH~gd5u^k<#%NGPJS&GovT$Bid?I7q?Z!b z{4n-pReRKb5Vm1xrP)C^55s!c&GfnzVRSn2yzZmZtXBFAX&-srRVGFCIy{o_JFvHp z@>4+_&+~jb2L|`*`|v!8erLv&M(c2Bw;MghrF-`c*3dV2S5%eK*8*6F zIXl&{+U$@8cnR!SwrPC`gTD2=t8e{M679D^4BF2tsg_E25x(U0V23J?Xy0~wNc79b+uSd2 zW2-gis2`u^@twpx9`o~fl-hd79rG)}>2>G5q%lT(M|kIV#ECgQoJH{+N$?%zjocA; zlu;eAEySTccCL>zcptaWx1;xQU$^ZA(@~;RS zztLkl=jIpXjLIL7XQ_X)!m)*&hvyU)4j7U%I)A{xyqt`pf{cO@Ir$k$JsE>@^Kv?O zDl8h6J3^2@q_9)YjUxu+XLlNrGirElVPS4TeqpB(^b~a-l{2VdRCcGrk$GGV8anKP zj8UWWM-9l$9#b%={pc}XX?Wp~L1i=NG;i~dQ?+JJpHw=#tRy#oaKWhI1Bzhk9JI1? z2Nh+E@Ypr8Yu6r`9g7NjcF)Ybwo6u4R@-)?at7q(7L5&+rIFPoGc&8Jz_+>;jT)UZ zctBoZj;y*!evP1er?EMO`310a8$3;R-PGSxkR|BWC9CT-e7Z}yizMExXBT7=^%ztz zVr=KaIVF?JiZhBPO)j3AF?H6gvRR!oipp-ETAIZp6%9?LZ)DKmLC3fu zjUQ5I@aGIXZ_}s?=oa@~H>trd!u)X|j53euCh~PLD{9;!@n`spNt2Vb@fV9U6xrQ; z;tC+10>nJjZxd?WhbUE~^VIhNgYY&>x$+(!jv6ay#KjvIr|kx zB+e6^#rmqn^NGbd$XlG#qQx@=%>>N_Er6I35^pJBA+dOC0r|CfTOd}4gvT^SPM^l# zSRrpGxtzsB64TgYp2^#*hTc=qk?w@N@Yw5jQM>2M6H#SO>Bx<|Kwjx8T9rCXvDJw-2~SN zx(j*$F^x0c6X3T><1fRwx>nFjB6Yr|tKNb>0-xu8w0!ARN_3r|zhHo1pkR<7TaY6d zEEpmfD##UFFBm4s1AM4QbTwQ+fmpmiFhVd=FiKD;C=!eYyw%&f8Y8$taHHg!2&F4N zRxnO*lVH5y+ky##n*|dElLV6mw+NKS_*B6(!L5Snf*FF_1h)%{1tmbNJ;{o7B5t3x z4vBJ@nzKbJB|1(!5xCxf;$Cw3H<7D zk6LpC_X_S4%oTiBFi&v5V7_31V4+}`X`OlS^|go0rf3WpTesn(f1^JP_Pt; z{VhgonJym^EEha1SRwenpj@z0@CXpoG8;iC)J38_ z61^yRN$|4Z6~JqBk7#;FG}p;yuax#lsTq*1zDsFLRU?JQTpBUewa^r`ntM~!I zLBXqn*93`WTGhq_BC1s18-h0lZwdT;>~Bkd556PWF~N@o z#|1wTyes%A;0O1R=-!j)XMz)vyj=31OY{rD`;q)n$^DJ?q2#|5{7P_A;BT@jwSFV` JNbp^OCDBEF6u|BYiqoT`-Vp$7oS+i~yzu)iN`(6s!@B0Hj_5JRd)8@>XGjs2q8&7V# zaD~@gXj+KTf1Z3_+^K;+~9UoI+5xP+rd!X-lSGR4ak|DxDZ@e0K&6|YkC zDYjBV>+?G)Q9UZZ%e;&qDGD|S%qs2Hi(NwKqH7salM-4wek-k{h+@kYg- ziZ?0tQoLEQx8f~|w<`8g^eaXwMk~fB#wx}s_Eqes*k3VT@ixT)iUSoB6cZJb6q6MP zDW)iY4syIzK z(}8}uLpd`P?^K)#jF4GM&sLnHI9K_1DbB;H?vEYrGFc<>xZZ~S=rZ5{>~sU9DfZ0W zo<1@UqrBS;MEpa{Jtje~^Y!{2dYBLCf>3LL8EeC#kqB=Q_%})JH5J$|C&5>xNtT7$ z?|r~QGS`%woo$WgH3j{(#P5D+uU6eu)omxWb(7&QP5Q_p=xtZM2+#qu$P9L)Hs*-( z{W2T<-D`#*8fqK!c}V{Z^f_Atqyc_IB^~2Um*x!^2cMaJHWO{_k z{PLio{ey<~+cd6`h%4x&c23GMHuk~!e!!f84ab&&3d@jDG6MaKknhhkW;7(xn3r(0 z1L$eAWI~oH1r3c`2bpdij6oe_${5LlJWG-x57SXC4MmU*5809&!i4|FTwWS@4`Cx$qh=g&5HU#4;8*5j{WM0IsFww zzZm_MxOS6aS0a<86n3SOtab(U*p*UWrpQ$2O_iyt7moE?cRW*}H&v#|bm-v+y>#oB zbMrMFdeh|&nE|~SQlb9**e&Y%n*qHUa;MCM-b|^2Ufnsp>l~Yzu$d{dWHxMOOB&{> zuFY&YV`ih;{4xi+b7ZdEC84>8Y@W*QhU{*+Lhg~)kl!Qo;cvb)g1?~dbkkC%n`OFA zS2t$P7igtSH??bhA#|2QYpd!+$Z}Nma&xa%^+K%Xh3M}-?D9e0{ovg%i)1lo=RV*P z^t=T1TBY_&L)BPwKjLn?47uoEBfce)jJ;`zJb)-GP_ur>D$Rrc>zXXmKKwH6oV?CQ zKIY3ZH<}sh%P%v|(OUw&C9+&rAnFye!PUF-9K99LTOliD74%lgQCDxKt5=4caE-Bc zBCtmVYlzo$w1YdwDme)2)$p}i9>Pu#mcX)DMO|ydkmSM0{(im9|JxP-s3VG`juwG|C+aB&~euO6R^P#?O>f0B6>&8zBWR> zQ7UT4d4F`O->6>AF>|cU1+Px5k0WNr_yl5n9O(FCj)MKsU$m|!V^Y*^GW0j0-%Zl9 zhTdevMS0L}i}W&^Ws7XZb+Xwil(S#P(*b*RZyAohnK!4;wUAYsZL$IwAuG*Fc~Y!d zVOE+=5(#RPJSF>3m*L3uZrJfI0@yjZ`f2_ie|BC4fd2lW_q1R2g zD{RFGwqhMnR()UC4(WF6g*zbKAx+gU_u6WW9njc;U2i8ecDnYJhWl#36d;D6-wd_o zJ*(2JsFo~d`8GMBz)Mn_txcS>X0 zHpMdwJn|0vG-7-jF*X5@nIW(CofZ2TWR+&O`Y)^#C;ijkf0H*rT|~RR9D^QfDqQxU z*F7>G?J{H~UG1Nh)tLFwpnI9;Fh;f@SJ@P_u+!rnvlo_o5$^)<*FtZ#D=Ba#)L(1% zDWA_)t4)#aMHTADd0tvw&lvuIyd~BmwSTRlJEe|pCDy`fvk-a@sbA){(mb!Zsq2@s z-QTUip3rl~#n~%BH8``Eto(f#FY7!4*JAZMRsA~g*3J1s=&XU(+8TY=)fo*9XUE@& zYTT$ZUCrAA-X84ud$CWkrd~i+Uy$$B-~M{*h->Fz6YY7}JOE#Vq?f1Iya<~H_=U>> z_5de+Q*^bLQsddi@2k;v-zWjjC5JYoQ$>kGSi4t$D;8!nziqv#KW} zbF?}H?}tzWYt`19WGl;Z|uy&k-vAbH*W!M zQGXx0nkT{eNRDf~4)0?*X+D-uvd z+An0IIi-D_LSN;k0J2_?)Z_-tG(_!KFID-Mc+#l03Ya@E4oALOq-=JBdu3!iY{u z@6f$qBzD>-F~->!bMJr3{2i7~)W)2Ie?NG0(bqh^`awPA@=k?#r@#x=#VJ%v z7^;PL*;BF|&o|uH9giK*2j^~z`4%&}9k?Cs?=gPP)pp=^@UjiOr_2uc z*a5ENV=R2|%xs5hE>e6-aa(AvIIf-MLCjWy?84QL>(eI8?8F@GL|l_G(r0kzD+2Nz z@ict$jnQcta{}#3^P}z`&(zuHe>S_+58hZ|>#V6$xDTJwjDIV;%}>aYU%r#3_?^K# zoskZg(BD7m-H)o^g>l_unqXz`M&xJkymv;X!e%2RyIday>f>kiv8&E|eG|Odtkjsf zud&khghqK9rw)6-IfEF_XpFz0pI_ux`36GgmB1>*S%oSk2AS*ZX zFqhmroO{D>?!NUK`r*FiaFK-?I{Qqr*@yLh7HiwN`sI0*JI@Sf5$#zKYi$|eR~`R8 z>>2yqGZ2U0GQyzk!CBS|h;*F1Xi{vL74xFmkJJ2p<^X0eLv?t5=Ga7|?P$FKtxDt7 z4D72>IZpjKXKs#7X)T*lIbhad{owfr{7Tc{91pC${?IBjv$Td@QN4!s=9+nHgb{?x zOFI6>N*`3Z54hp-vT1H!Hs@LAx*YjF1HatQt!Hkc~JScbRW;n1%%%{8`JnuTzE7v9{`k(a1^I((Izji9UN zxtXn|FSLGhp`9x&>^##9S3fA8YR)n|GnnO`85~t#7uD#i`g}2XX7IV{)IKw4h7mTy z2wI@W;F-b2;9YDN$tAXtX<;w1mtypnTI|`Eb3FB*8LW|TWcLu{;qnU5FNc8<_6Y6+ zd8p`R=CC<}cd@3BUJCz*pm!PkUurM2m&5<%@V`|3|3$}8_uPYim+8}WICLHT-Kzh* zc@_Dq0_{ALJJRE553tYUEuy6zgqg0XQ{Z}_4R!X(6}5DFnJew9=5pH$IldgZen+nx zL6@1U(Dzk{HTEyeg%7dv$!Zp!sLIZ%bH-eu8F?)U<#UX^ zOe^~u`dN!#Yum<-#T-XV8yjX`gZ68v{MT?tX@fZ0AdXkmu5G>Z&ix}9@-TdT&uG9P>IbT;2%XIm65w$k`jpJ&Gzkiq=uI{PL#q-okmseA5~AkJW9O*rTux zm$$*aM=c$$^Mud=YrF$A{St}w-vu%Hr7LEktIfWG=N^tlH~8shBXp-ZhKf9f%yolS zH_X*Y=;3>eJ%)N+sq_t?Yg;<|RS)F6hmDXMVR@rjjV>+Mz>fUjF^A4JlJdWfwZ z-Y6NJA3Q&JQ^Bh=H{18!-rm>vqU;ADkA8UcyB?!M@kQGYU5gLQhjro$X0s10`(TDR zpRt&^Se>~z%v_9(1Kk%f^hFH&ud1HAzOd}h<}c^j3|AKd;fHy)$vXXEW{ zu)fXiR@?dd{c8ZU2Dp(9gw`=L&?Z1D0ew&}IQB&F62U70k7NJH9mz-T*pG+Co(PYL zuE(U%*puwXuElZlah}WBhuhp7Bp?R~nu9^eL9!hLIt8($AeOeU;hOja zeLGd00?QP4%&DPFq=B2}atC9Ksdlg(0v|)*qa}Oyh?R*m8Y;f@<6vqMM@acxMd3JUbS64^X|E z?Wb)q7~Dg~Ahs+#+ho~n`wiA@G-AnyuQ|H&Wm{v&jjhFf z2J(P;3mVxNOSa8uT|I|6cC^WH$37NgAFE>@r@r~cx7znO_%1g^uw@UmW#ip`c~(JOyv;*pI?@270auz2X+CDRz_yk=TVM+jOCdaMZd09`BJ8|Hw%CT5V)R&| z5jC#WcZnMj??BZfoP%)(*HQ`QDqJSx?pR_c+frL)N)dry79f}H+E(k8BDPX@ZB9YI zQ|wgqI~9JX)zj~^|Fhp|@Hfr%H(g`612Iguci0(-VTK#S2GjR?tZCLq2iDqLL^fBS zZ1@(OiF-sQbAmYWZ46H>PFmMtgG0V?pN1-FFNhM@tnpR&sFlJ`5I5T1EItH^ee==05rds@#?(yI5`NQUGrUO zmOkBl8G42sDbBl66TDM?1^Y7S&y>!V<91@;dza(u`8vMBvEKX3*LbdRzWX1Cyc|A$ zMV^BD0oMVaWwOC{>U|L?)>@`bgk7ec4a}BB*b6dINtvjmLi@9M+7yBc$6rl+4f}6& zY(3g>yy0lkYwaE78+gt3d;{G=OPfMBrU`1pzg;+nzeOm-dldc7zz)K{OhA2U)z;pJ z=Af47!};q6W44EU1pl7Fv8uhd(28=#<;ZLAGC?`}a^$u5o1mOt9eM3tB`Bv?M_zk> zp`20U)DGDiqqWLhwZLz#{T8u(ixEe|cAJ@F@3QldgKv@bXt^7lyTQ4~T8WZ-?0n3_ zJfM^3+B*sJ%wE31NLg>MYd_2{=j7b|r3!j;(C-3WNyZ#RjdVx#X4G5#^HBZsZ0Bog z*Zy~I1%Fqg_WMI8So`;bW-PoqweR?ufOd85N2AvY)xkIKI?wnch41^pHLwA8!8PE- z!ZqOdJW$JLDKfz)zY6mu_`!38nyZU`8`!UP=jS?@XOofJ&GL7xk|8bU1pc7*X6EPR{L^jE_XFosC^@FSAx6J<*tIw3cJd# zR@>FCEo*c&v{t)X582`7AsZ!Y>;bdJ{%AIuACaLo$jln#bMJLdK56wZtR8l))}sD@ z#9x&?f?Z;*eZ)SBJUnXG*>;g^%t4-7!Th^S*gbK#JpFU$LrK;xz+>s=O&nAXD#i< ze#z?i3HQIBFw*rH>3Ta=?Kjl1cWRwG>`$->$6r10x*qSt>+MFn32{6D+>F&}`&kq?m#pOy4%2q>G^X&0wcenT%`^=SymwzR5Ty?6g4xnAVrv%R)&zy5Vt=ZGh zwQMfN{4}z^XePOmwjh&R+)Qr6)7~~4W1rI6r*u1{+g<4nNO#~_a3`JxpRzmcE{t&( z#+cTTb<#(E#Yl%M-PryL|IRzsE_m35HutHg?X&p(hWqVrnDeLM?`ivt-3>px;b%2$ zFE+p63H2A$(F|xflASJp526m3J45^mmw&11&kXTTy8LIMUnMSNO$dz4@m;N$kdoi|gj2|1Y!#3C_}Ofu3K&Ui6E337IT6bI~vJ`4}Q$KGWelc+aVsA?EWu`%kUk z8LD%z-aUY8nKkwjD&!@%#$HDDUPg_Tulnz8HOL6znMm8Fl_*)5&e~&iGIvg1^>03~N>&zZV}tP7d265HMGtBUX#& zkqzK+eh*^|PTmhAioXy~K(~c-K1u%_BAzUlN0}U?B+;&PHGHLenn|plPIG zNW%+GLujziW9lho3jd=);=3t2Rh#%R%}U(Q#bP1NTFA&v8;iCmx>eIVy* ztgfsDnmebi4x_FFW2r!0RfOuQ0^_T&y`je*n!@)Vrdh~$B~G)O!FSEN8V_Bku3po+ zdd)W1xGq%N79rc_a-p<!>S{*ERDekOS7$<8EE;)Hs|o)&EvktcObT zM!j{_9hH}X|2M;2J@o3B%s?Q&#Fw2@l2eqI8_4nH28v5ECr$EY=N9E;mE;#q^A%*4 zjQ5Q#%Fpu+%?)JdPbv1Lbw73LcRBS?gVti^^ zN>o}>N@UvjoRGFJCjc8?Ugk6(yBwccn&ZpLFJd>o0`^{9oSPpgj?9Q1l^8cPDkjFk z_{6?RDG5<&@kxov@i7BZ;-Ut|rwxl8HF!v5-+@s>l2SqhB8W_gOHGaH7Y803Bn?hX zi;a&-i=<&xa&lyHN>abnF}Z=s1=*QdS^1L#C0Usz80omITwrl#UcscC$${JCuOhbx_CxQ{vx?@&mQAts5_PCs&QgZ8# z1x2|5B(;MtzsT1*sddNvlJPl3k!gKnl9Qr}vXKj4YW~=gDVarZ8Xw4t?9n5uYmcto zyWG&FXXnVyT_dx4fE79RrpPWgM0N&;|BWv!96PaV*OEZb;+*aYsYBxvW0O*Sow5>= zQsR7_;xaI_j7fpWoT)iV=9PxXf+^V{x+pJ1mgG;)8Xszn&o3?sWaj0N0pE#f9h2iy z65>-+k^9skNim(O(;9<$NQ;Z?8$U2^U{Yeg#3&}d{}5k?0ZD!PCMG4ub?Q6l>~({O zKrJ>QwV%(Y^FZLwm#paPaQ3XPV~_69@oBz}-MZ=}X<%$>+OUCfzV_|^<932k#-;nZ zq<2nl->Osl&gl-75u)06iE7^qE#KhO_{4s`R=%h-pD!^fGI8+0fvK%Jb&8Eji;C>l zIas0BrNkv9A@=B~*!a|VjjJRsFFCn&Oj1HJ#uKTrB@Rq2&M7I*Da^|(h#i$Ys#E-^ z&M9rW=1t5VGd6cpj?dTSCSS+NK3~Ui_~qf3fG!i`2DX9I1PnYmB|b3?Bae-WNsUPy z)=38unGltnmXO{#CLt!)VWeE$&DZq?$5W~=C3;v|Tv1NJq|B_G1`V+NH3$RXCJVsN z<0IgwE$lZ2&vb0v3Q)~fAfn0X4#*-wyHz9_0alZs-!c;C12&SN=`Iot0eeVLw4X#{ zz^g&dF%tL#TJtFhioOaGKayZ*zmuTOA0*gU7(!6uydcq>1mn3hNL)!G5uA1;IH(d5 z_~>n>k!TBIF^LO6@NXGa=Oq&C;uR7M{&f-z{+%Fkf1K z?^y}T%M^K;9xs#b<-}=3Jh1n2uCxMpEbl2o;2!+_iSaTbFUROPN{Wg1GHc#uUp)iYjvx-wpTA2MEiC^23iz?01w*@d?ip*5im1sXtGHm_zghk6`_XAjcj=}ju0 z(srb7Bh{X84L~zClHFcQ)^&vIgZxqCcOVN-&c+)_z_XC?;>K*exYHU>4`kijmCbGh zEB(6Ffum{2Zlpp_!c73r*O+NmxTHcr->wd6wtuLdE&K?N!2-%oaym&)97KDe>tE@80SWAzA@NoXs z!FFoKq2=uxWbGxZA6fkgoH$*z<>c$+4Irx_;22oy{Ugc-l8p&B$H``~pCCJdY!K!v zfTtM}>*a>yO(MS$;A^Ur_z6T9?S7}`$H=6*=F<7eEjIzO$X?`0*-#e6A%t~_zJt=DeTJz~(c_skDxDcp055kv&%0FOe0L7Yx==QjviB%seBCMIWZgo7Ns0{;{Yh{j13`G+ zhlO_>THf&h?K2I0Z!TJ%460PD}=*@BZOB0o;-x%32;aa(3}|z zdmh8Cpw?@I*8y7N^QpiZUrdEJC_74clkgVdZNf3aI{;11gVcQ&El+cTpJ04|5m@cs z_t5mdPxyfFAwWxc8Ld7d>o~xZ&wPE%<|l+t2`31j5k4pUm2i^qH^LVHPa(|y2M6#e AYybcN literal 0 HcmV?d00001 diff --git a/Ardent/UV/BP.O/DATALOADER.B b/Ardent/UV/BP.O/DATALOADER.B new file mode 100755 index 0000000000000000000000000000000000000000..2f004b51ee4545c4bd7bae3efa335fa635012daf GIT binary patch literal 18901 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 V)Z3w+Y(GuC-zUB4>ivP<{{XZTVUhp< literal 0 HcmV?d00001 diff --git a/Ardent/UV/BP.O/DBMS.MAINT.B b/Ardent/UV/BP.O/DBMS.MAINT.B new file mode 100755 index 0000000000000000000000000000000000000000..5c28f6baef1c4f5cac22e0e80a12bc988f154be6 GIT binary patch literal 15748 zcmai534B$>^*(39Lsk_kMYg=t;TxwfOajm7+rbSw8ZGzEiv{e4zH#7Gwf%ebum+zjLIdjf;&YYQh z-+hmU16>{nNf)_E1^yBA?`;1D zpz~3^M{8B3OjIIzufAvQ)zRo5ioRV+j99!cPQG6w+9D6Akv5uyc}5<@HIN_DHdbzf z{)aRal^@o&QTY))Cn`Ux?W{~Yk7@g;yjwd&<*#VRsQkEgippQr&QW=fo*R|FrsrAt zJlOoYo*(W1hIWa{Pv`|v`I~y7%$9|^SL<}P6#Hw5zb^9E#s0d)UrYUUslVRhugmPU zOy(oAE~6r&LL!%#T3w*Kbf11pw;+SHx)!)!*I9WzFrv$?e5=I`7B^blWbrnOw_Ci! z;%19?>Qs4B59n%Kzm4k}EtAz)rKfORgX?#+59IIY(^%i9wGC>cMZOE|7I_A`^xF+R z5$$fVhs>7+`aQ6(ML*?(R_<=)?_1gF{J_d(N}V5Cx!lUnTDii?KeF-)EC1Nal~(?V zm8-1$oRwEu`FShXSox<`uD0^eth^Etl_8?1ajn4h5F&dT_;a*Zpk0sl&w($XU5@sP zXukk_36Z~qebWj1qeWiUGDQ8dR#;qNu^cn1FvDr~v3kGID)d%Hdqu|B{#UdT{i|$$ znbhF=OZa&S_$#abivAkyUjbi*-&f&xwfDQq`l^A}O3Zo{*J@mU1MOFVhoOB~pYXaX zt!}lp)gD-z!?w=z+hsy3%rLtJS!^4$iLu-+=BL8u7lXF*XKy=z%|S+GG2x!I}N+0y(ThcOpCrZY}bA?P+y;c`H4ommJZsQDBSwL3`WLK7O>f^ns5wIf@hHUJc6= zi1Df3wDU*3+-mmqnwLvoxdJ_P+7JHUh5sw0AKHJ?{#I{**Xu6>;w)Z?u?9`SjQ23( zN=bo-RXu3GP6wg)&*&W}gRI}TFJ=ER9co9f!suUc)(@6c86rc4?e|gjEpoRGv--vT zMdo94xE#km9${yV^qxk@NI%wqu_M~k#y=mHh9h6K%1r)EM|qtS=o#(h4OXM@y;jD{1hiPkgTOhsl4XOp`+fq)kD?p{-QdbO&3?|3c3g*m z=ZE0=A$Wcao*!#I#>g|%VivGTCjn3DWMD+6c%GAGie!79nUW=w&xO+__K#p=0;MfzI14LaO1YPPEvv5X=*9hO+X@iCn6GxsI%DS&3P7J5DfQi%3` zEdqX~Gk_7D>G{l%nKH}sDT36R&u-Xd4i8?&c*(2Yu0QklL6D0M9IM5>o|b0=n{|%& zJzM6WyY&n zo2-ZV-os6(tsBLiP&Yzq!ERpw+^aVOKi7ru&gxzuH_Jkd$LxOL?Y?X6{#%Q!-4buN zSV~&iZPrEB?qX|qiMP8*7R!(Zb2(pfA0NqXxC{4G-7+dTq>;2vbL`7=lL@ysFhBgg0qjO!^b$^46=GmV<+6l zxL-2Qr?C(52d=R(F+2~&xYLuTALZa|RC7es7;_4}#v~a&T_%|}hWC&*=p7EW!{uF^ zqz&G>$d@)3gV9$ntvNS(twRZ%Pg~BX6F8p+=hNWa#=HlAyR3e|Dr7l_;y6QamG8 zNTpq)ZLQYm3qLoEHFGuJ#w>+b)_kyz9l(GrGNIEV9ZfPU@xH>kpw4@yPI+ZJo*UcG zUc@*4h1hxHsoVbUm{ z89X6wmpf#$T-@qZcD@_nu`_aWE;1Hy&qU66?%io^ZLzkt0?#$ufDygRXKkC@C3kxt zcghyoidKw0Pky%I?*qqlJ1o@cj)YjY%Z})J$L1%a##_K{ryb+kb7h--hFv>Z&hxAX zo$uE59?P)SGrUJ?C4!y?y%!!?yAiq9ws-klV1y$Ud_c46{mg@Augh(Hd2mP9t$ykiGw>#NA7oBg)x!VuU-jXgZZ;wJFqL2B!Jt~jMZuB(hS9~UR%U5jsao-Nh<2G-6KHb|LDrAU+axQWt=5x;Opoc;fOYzHSc~nKugTZr_($|2)a*sD?JBrC zTHQ?#o;JnQJ(-d={JFwn7zP=*7<1nN}cS3FXr$Yi0YeY#n#h3 z!5q_XVNRXyPvG<|*`L7aVz9W_Tng`(BId_YvzxJo`|u{DPLs_c{5>ge%9FAkZ9dyx zW)8?JvgZQkaKC;V*r-ndoAf)tp5|%K@M+BXu4njdc}l*6)|m{S!JIn%UIN2sx8A6|-lmu71C2iBa^s?C#zvO z1*-INbA{>W$BtvHKgRlF)&R^JV6KElKVXX2XoSWgC;gI|smR$Wj zFF%!^p>-yQ7ci$zUrgZeg1qQClwpO3A#z@an-R#y5a38;W27NB@^}f@s4oMX^cTRP z<`p2`mv|np$S>trp2th_vit(AGkN?PbL#Zf1RlSZS3M8rpbPH7L5+m{>ai+Dg55~0 z?F!%T$NbYQ0SnrX7E*R1H%<6-a}EYAB$_~w4$ za|@qB-8n{v6U;}N1%_FsYj^kA=f+|2I$6-kGN0%q%g{X)Oh(^i)XNm)e3F@BvN1o~ z%=7by;vM{%zOpeV8~4enadxgl-*vDv4R)rQX(k7Da?Byv;l6nX*r>k;HtA8ncJIjV z<)~e|W;`Ri+KI)J1A95}k!yXp81vAV2mbk}?Oc;@ro+c{Gr_*oai1Ue>mT5wz`P5L z=pTJmzbk)~_u!SEn*RXFeNwE|Ld-9;^Z7Y3Kb2hh8I||HKLP8sA)&_qBn_UYd$yjA zXY1*RxkZZ1U#!Pt-s4~7nEcuH48;B!2uqBhS%Vgl)K*wtBR{cU84$IomufViuZV;e@xq&l~Z2F$>%?u@T;J zViu0W!Ux_0-(#VmXgH$nz63v4y$ac|*Nf?j;IWXiV7-riPvF;6q_{Y1c_8Ci_? z}tCe2N!t8_*-hYF9HDkRR@XdNJM zUp2?!F`ff`o$?mqtA={c!aVG+W*uzvkP4h@{%YmF`JDV!{)U`P#re``Ydh8Nw&^An zz5C;OnG5zN=8yV}o+G>PR|n6vcoPt`7+0*tSoTK8$hZzIdjG(CXO5jUdXM$SdylP3 zD)x2YoxEb}z!5TWjAJcw@LLFU2pyJ9_QXsq84BkZ&ZQv%_qQ!{>yv#ME(VPoy-D5zN=x2^G5W>_s*D+ zFL&ut_<3AD#a*FJ-|fYF?_K(-jdr@>_c=F%!$RD1I^mBto{O{Lbh#d}@psP{=c>fU zPn|K&wTX=H&*a{@auW@A&F4f-mI z>ah+3Tc1a5eGXf1#_7b{dbO3UJ-)pjak?B2!}mpnHphj?@rf{VJPa9kc?)>EK9?)k z_qmiI3i2tF&v7lmb4sBpF^fF9%S&taE{lh^o48{{#|uo7;DyS=&CyovSdU{6TC5$LS1V4W&k=|rH>8C6jWKOM9lUhD8zFJb7F zVI2bh_oGc#^uHT&KE_)6Z?U#nx2&_X`)_Wg^WXgMvHm*3Uzv2Y)|hpXw9Cn389pg8 zkLUT^oeOCxPU|4rrI2{ub+lN88OQZ}$a}Sm?YRJ0s~2L8mt)7AgRw5idPn?5r%En_ z$4*g?TdcnW=y&g77sK;nvlKP3)a=99eCdEO=C8`Gy<6Kd(-j`@F3I!j3W;mJ9bWQ* zN8!uGgx#aynhtF0J`8S?FX#Y{?Xd*i+mTgUV1(6O1D*Ns;?^b@;j@Pu33hNW!s_P;{X1XIO1{)!&#wWO7DNbcQ7(L* zI5TcC<5NA~V84ji!macj_Xa(HxdV`cDXqpMHnw2gwVI**q);2b8S(4oI5M6!IG5Id z<66scEjT_KwaI6fwYZP2wO08V&%Ig4cb%x`Z0xNIa)8(2p3`%ZT}_h<81Y7jbpZ zReS;&puKT+^UPj{dR%8jmSXNaf1U?@pP(-v=f+W8k9T(K!Kf$Jb{OWdj@F}&c&0eH zH%5Xw3Pu>!dg#RJC>UYh-AGVJ!3gV!BSCID+uW=}Zq^|;>uqkxQ7I-xh$I)T=$Xw_rgo@%8ZK|jxZr|(*>u6nC$#b&o4Z!!KZ)_nLW zHXFb{MK^%|eB47F|7K;+X4!x@;M{Fbo~56W3__d{9c(cbId$iGE#~H9Zm}8S@0~3& z1lrFHqJ5{+f^lb`c2cp*gMb_GB(uS6#QJYEA{EeQ+y@ipZN$8dp4VW^dr}7LM$Fr2 zHeuc-%-a_?uZ5>A{)T`fZ4JVho3jb$GJW2LCxlJrHgh{>-)=f3fA zKRtxs?M=sbf39wwe70Jp4ekTSqIInN|+t)#^@PtM{N*cba=lEoRr6-I(ig!CgNc zxu}=@=;L|I*oNS{aQ3ws>T(i)FQ-OOqr9h`h}zHO`wro5@Vgt| zAvj)B;1B158S0;^hJwdcsOJV9h9@QdGT|yn^|I9J-D`$>z2VRsVf99Oy%9PRwGo`D z_(X$>sl~bSS#)h;eV<1w!Lbn8c9lExqM!fauamdNyXY>ko({avG~f^KBrsl&TpYkP zw)Xc~t^3UV$oc(d3T)np*qLA6yG|+JEPM_tiNF4Mz>M-yjlvGR+D0|nM|HK1M)V?^ zV2j_`T!Ya@9RqCAvA_pS8Ze^cyoEGK*J3W;C|m=*v1oDrP<-d~rd=!EabnLWEm4kK zw_%)mfj{!iz-XgR1U6|V@IjLWjOZk9Aq&!E z&o={lnP|CpLbb>x-wEB1I<7@FA3{zaGV>6J%PBvz4)bTAd3T|R_3_@weM;&{kBY#u=zkC+L=$>mW~=zSIEQSnWunSIivGc@FmA^_a_V@Mi1v_^qh>-D|+H6S$M(GQU?`ERUPHe*Rp7=}iey--z}+M8IF9K7u!5 zkKm0M-o1f64p#hLA8+^YC(FyLOBbasEMLC7yiAh5YwpvvU0-dnK{|H*@Z;~=|y=3sYOdlqT1n-GRz4t zU$7=jmrE9`DhV$vucVuB1-(~Qm6n%PrOwN|DK~3Y`oxJ2vvViq738EBW#{GQXHUGY zAS-=ZcF~;7n`X>Roir_dW?n&50E5(=tirHMVZ+Xi&8l;JwHD+zaVdN z;mxIGD=Uf@EL>Q=vaEXHf@(y%cws59YQge~WhLRcHw;`qIAz96c*@KvoSc$fIHNGD zAT{I5l+1$kS*e8+3vyF4Ql?~0qrL3hA~bSxXQXDN7od$s{*0njQclen6Q+&SiFvt` zvL~lZ%+BRd#`thbW?pJAB_qAK*cr>no1L1GS+WdEkyBn=x@b+xoUB5mIMoiMT$Mg_ z_W1C)aQd`yIqCUX1qFEph0~`M&B@P7u??p-H!m||VmLFsC_P+=RhgJocthH?r&6Y2 zMV!Kns*=k8T-Ej*)J9U6fInf`NN@awDCo7mrR=(iJt$P!M1h(IDYOH8p90J5c?ul? zFHmR$I81>~UZ=pJ-&1H0ct7a*Cxs3G{Fgj8#NYHtT2)@mvYi#!VMaSPcj<1tBIgM9Lv1BE*b^m;mc%RN(OHKo|`n#4tikSEv)AGvQpq zd4%%`j3{&g;X*=J0)ChyA#VCMG;j@Ln0FC=>`ZqP*_w@(^*fEN1HCXt2RUq2hS8#@ zIc!ZuD~ZXmU5n7whJ30Z;NeDOL(sE{+6>fs*&dAF&u&JY#Hg*22RX)6e*;1YKjv^I z_fnHdO2U0klGebnUE%MtpXwp}Cc}085M9>P^BgO=3>23V@<}$0vzgtbKMz2YF((Zs zG@u!}7*gmG0{(Z7gpvvP-atb5GDt%B7DPf}LT^GJ!sUP@X2&M%SM+!@oY}hmHCwaD z6oUK~5b8@!(mlc!UI|L5AE7^C0O3kP3Sl5&5Fn`(HbP_>;(2W|`vz@S1h(IzH9WXV z2zMh1;ju?T%u@(AHwke=hDH)b5w0eTCR{@pLl{e7ZbIV-+|)_ynXeUe!F;_97j~1r zM_=QqHGz;$$RJE4WD>FnlL(UuQwZ6Fsf6nY(+D|)TtXfppD>+JKqw>>5oQo(5@r!* z6Xp=EC(I?x10#vgvs?gbtOwx=zG(2W=h@z@K^2PDm=(K6Clz~)>w=g~a5oP!BTi`caU z5W1NfizzLH6e=c^0Br4CK;w(pwU}LGz+cpcmawaou#|8Mzz%lj;4*eCCzKJ&2^EAD zgi1mcp_;&>D8!>E#G@!=kD@h{))Lkc))Q_8B$bhMIk|3N-$ueF4y@w9G7j9vzS{|R SaG;8Po7udR&DGSa0sJ4E@6xLP literal 0 HcmV?d00001 diff --git a/Ardent/UV/BP.O/DEFINE.DF b/Ardent/UV/BP.O/DEFINE.DF new file mode 100755 index 0000000000000000000000000000000000000000..1a13c2f0913ea10e1926aa41038141c36840b5fa GIT binary patch literal 16226 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 byF|51)PeBSu%C?kO0sF=W)fUpHiGycZcc3s literal 0 HcmV?d00001 diff --git a/Ardent/UV/BP.O/DELAY b/Ardent/UV/BP.O/DELAY new file mode 100755 index 0000000000000000000000000000000000000000..ae9193d5f26348bb1283ec820d58df6c6b6b5348 GIT binary patch literal 1140 zcmY+DPfQa*6vn@q?JjiNLR-oot(I-AQYs>X|6)QmCW4q?RN_VAg$M@}wwM?XYK#ZG zbMc_z&_v^@F&;SRwK4H(^dK>s=-I1>-t>FZ1=(%hH}l@_n>VxF-JgxjGaDJ$XkTL( z$65Xyj^%+Ini{yW%Ye^WpwDVYSdI)8X6xucC*p9S!g+#o9nO=STX2*@3SCHZ>_(UB zMw)Aw^DK_iWLYwe9FJ~9QCE3v@;ogZ z;QidjL2Rf7&s1PEc%A~I!Lt+?0c$C)k#P_nd*rD__9)_;=}{sHxFW@>jDt8tSCLw# zt4xnpve#jE}-CPFr2STe#+hHTNWM1-9R*%QO!5q3Icn})gn znR3m&wD??h?&}fXj&nG}yo$$+4F&H~aDQQCdC|L9yR#H{wZOYoTU}iU7QL0_U}-HGm@I+{EA`sNIE04oJg;v zrrX^~_v_2GAHF5q>$!J@r@yal`<9$YPnheAuV1Z+>yvNEk+m$CbU*s~VeZYvUk^U` S`o(j(-tSbld?iOJG5!H#cZ~M{ literal 0 HcmV?d00001 diff --git a/Ardent/UV/BP.O/DELETE b/Ardent/UV/BP.O/DELETE new file mode 100755 index 0000000000000000000000000000000000000000..a0e68f491badb9e7e0036acb50ad4a2b89cb5100 GIT binary patch literal 1845 zcmZ8h&r@4f7(JJl2T7n1AV5fghLi^tQ*5in7O~V)Lt`*Dz2Sz?aGA< zopD&W>bUCC(Q(T-4ht6k0UgIh#~Ei_uyB!uqn`7<7fgk@=YBuW_kH)?mtUWBf9aze zqX_@5;u=2Uf1dkTCXGL1z}J!Q1ovm(10_FPk@>kzF?Ae=!zx-Zh5#8ijtO|!!z<={ z0Wn65!^a3tFeXN+=Du}#wBi}pBy(P*y^aFf4C5A`Fihe*v{MSufv>pQDeXI8oAOCa z;g^;v3{n4$3?1~ngrf6^NARQB4=4p@-=_5xPNQKtLyj|enO)}HY2sOOowb~G=A2|V z1xzz$8n5CU{alJ!FVCrx?D$lr)py^G`*Uy>;QrrlS8cehRc zM%Tb!R^g-79!EQB6dq0lyC1mYwWYOxf(3hZn5le_uUP6VHDx6ETc6B!F^)dGp zzmc&2J;Z5i_&VI~bFtez)$yp`Q%!N}v6 zBb4g+5V=Utu|~};Tde~5_OQ>|tEShh_zd~mDKG{>uQan;37OI|iO^T9-%9YzCT>42bzf3KkR&+8^+`}{ zmdjTw)(-3RKSQfwZH7A;GXCewafa9pknPL+ik7ecHJ(!ZFk*Wx9d_j-3q0y#pPjtzjJRUQ27rQxW9Y8 z^PSgs&iTH3@9^P~QJsDnCEpeI&yVCi*{}Qc9o(l}H&z1Ih%8HR=c;@nop*`s29MX3 z{!9n+pngwcq7uT@BfZk4y)qB{3|0AS!yd!$Uqb(l9MH4!14)oX^+7K|eki^;{jMY$ zoe2KB;*ZlmlB78Oo(zi9e=CEHrkx+lkU0Gl85*a5D#POR-^uVe{l1Kd(|<2l#p$2P zNTWx>=0C{QasCNpuRrF0l+khepJa@jMIOc)USl}U@LI#`46ipFZ#cnlqTvmOlME*t zI)=%HDTX&1PBENnIL$ECaJu15hBFLrHcT^|X&5j}H_R~1G|V!bWteR^+i;HIT*G;W zw;1La-fB4C@HWE*h6@cB8Ri-;Hq0~3H!LtLG+bi1)Ue3#cEe?c#fBw@rG{mO<%V|v ze=ZfkUq~hJmr@1%XIT!6$qK`2;J-)>@B>*1{JE?G{;S*x?2*;Ln0y8JZ*mv#-(?N( zLs=_1=*$0*TD$*B*4h0(rOxgjNxj|wOM-SkDGkv2wXDD5ZV*|Dz4ZTaKYT2W$V*I` z44Vx%0DGjxu+=bR7&dGJek>bNyNLX^^x@v_-J|jwjQgM)1-BzU>X7TSNB&2);H-E# zQK0{cY&BbV%Me)pb8;^{-7Dwi z94w!M&P3Rw^aZRUCOa{^Q!ZlGjrj}2aZbJv(JmE@nf*T0q*um5kFrRO&3)j_HD5B9 z;LV-&<~De9UD{{*_0lRnrQhwKT${`p*T^Unq0hTtlQac%k`BU{xg4y6WsnZmA@Ds! zYaoAVerTUI{?tBstj`XKA+v{(S+_m|wd<7==!5xs%3Hsi|8;|Cf2i&P_Q-CpH+F#< zq5&jeh`tGnF+_G6SDy?+Od)WG>j=a*LeIl5>(ylQSLsM?@$9?vX=eXw-DCFmdiM9A z&ZCsQH%braURZW(K0;aZ5$e|5jcv5v=V{#sxe=x{0$N?##C*bj4p!b0kFXExPr~}o zK-P`94_=aVl>R`*Ah#oQjE;r&Sp5Zbxl3APpY_FmO#=&2&T*UlD zc%n4vvvQ5@_hk29Ci@^{9x$8J22<`@ebAG85OQP9=2+Ow@$Ewd51~sRlIu~~nEaVX zvuD2w&6qqai+vBvc+C1tegYy-!WBboAhhNKzMB*WJYnv9<9V&BS% zAza^$`Ze?QxM$&O^0>4K`=?FZ{^^9rPS}|Oy(!QuHod9(gz0_V(|ba`F4N5OG|RYa zpFPouef)jY`)%kAoB-2M;c3WBpQLI`Q*}C`oUZ5PCLP%KGr*gnsy8F@n}BJEAWdI3 z|9x0fuN*bH)AlLX)2*G7rt@Vcc0d}=KJMEeWA88neK^Iq@;=jf6gsTYlZHERQnq3T zJ|)cZQ*sa*2eIbtaZ$Mcxyn%)>II4L(sH^wyyeaPzr zl8(NjWC&LVD#dE89mbqLAelCorsc>^mVU$5{4^{-E#E+Nuo0Jg8aC3DZ-ldu!Bg@K zo-C*FY-t5I2ctB72D|nd$;N$P#`Qtnx$y0m+0dP%b9ElhgJ%$N-z9NV_97%>=&1R4 zx}3p1P3z;_G=0Egc4gA^L-@P}wz_bAfH-;HJbQ^m4o;yQz14cD>k9k}I5`g?hMeJU zE?m1gu$!Z|=>phYpxK!FQ@aacccCu&lHGp(rFPj#&!QsFvfp5pVsaQ!^~hh~S?`m@+9i29N%A#Ox-fId_zI*< zr{N*Pu6U1(hYjXC!|MN>(Qcp2MW4*o0&o5JXh2n;L(I?Njjs^WZeFH?e^8fT{7qOc z(r-&e!cv?K-DblO0CkzaV^&sI5~^aTPw60JF;49^hIPjCNFu}tVTyyRa*k9p=|%P5|quOYJ6@b(I;^u zlNK{`HCnr6t-g-fUq@sYpnC*Yt*%23UdPHWNIf|9-~=^6>wpdD+I2uT&+9Mq!aUPU zH&)6$Qi}SyxnUkxT_*b)=FdZp)$PDeV!hkE8XmPu9z*SqV)iIzzXf~}eh(uuynBom zIf*YQ&aTswUX2>`ghj>^lh5Hd?0q92vS+1H-}HL*P55y&*)8tVkC9ysIY#+3Y~tr3 zXw!<@haY1dC-L-l{jG%;_e?@AGzojS$@Y7LmTEKhc{4I}3|5ZWs`f%RgjF5`A19SI z!cR7K9oO59vu+deMNiDv0nEAQ&|6-#Z`sb`Ih2&}3Sw~gKr^1;&8U$3*3zFXuIKod za@LHTH6v%;urZ*&7WzlcZ>MqDm(4h9`nen8S#1Hg#glE-ROp24yDOQlDl-bWp5AU zck3R=GjqpqF>~y|ZP3`}Y3#-tJ0RC5lkHdYcF;U>&o5phSyg~ zc%t_}z6(C4;P=h5a-Y6!yYRc-^Y?B1PTD5r=*s>Ma(4mWP(`S-7IS=y!<#2!Y6GA2 z{di{kz&Qn~S3ZH?nuM5)$Ls->yxLGG9Chl0(O{&tDHL>?LhaGomKLYJDH5!Uh9g^@ zw%TZ;(+~-_I@L{~`tasu)(2dhZ@9phP;ZS>Eb^e;tg6iD7JQs^f z3(G1>a;u8UO3RD#mQ@tw78g~m%wMy7MWC=acSTu6oInJDl7h<0+$9Cz!9dya(yIKT zys7{dbIZ#E*~TCp=e!g6f0d{*92^@ZEb4_c7&Q%1S9Ri<=#D| zDrIJ7dRB@Pt!)dYIVpuHGaFjMZEahTqV^47P4(-8{X*p_Gut9fAtW`; z2}hiivXq(OXk#!Es4C1WFUyV8BNt9(xFNc^HUgtXp}N4FIdxfcva&O0XU@wAWMl>E z=71GwxFwJ|JCFem|21yh*svihD;k>D9?UMOtS&0eFROIY>q^Qh3Y_$U)mYlvUA2o*CqoLZ?AQ`Y-S~azL>WZ?w8Ov87>-i;>OPq`8 zX}QY^?_g3Lu*)loN~_3EyLj$(XfMH>pH-S1UGgB+oQpHbX99>ZKyukDQ^kZwg;WfwN24LATXn%pri~DE-o#u zY!61;gBx3G+e*ty3sTbq9h*We?HD@g7Jp!dlV09f8=8^oq()lN8%{}Xc}Y!1UP)fQ zlUfjopr~x3C_{2JAmDIC$w`UWjy{Kg3qRX>fFGgSv$ftOr4M*>e|8Ik~kPREnrDkg*Q;b&ER-DBk20Wf|FSczQS zR1*N-5}b~a5g8!-RIyPeN4UgKn|`L*Pd9$XY!X?NVBj{I#S!yjqil?P)b`qf% zAjC*9F@8KpAj07oQiEuuj?@YQ{rF7IB4o7^$(s-BzBTyZ@C~NwII#TJQg#T3*O3}Z z>UvI$CrltrB-}ulM3@Y~FI^%_07ewiF1`3D@1v$In*W_=ol#7JD_Ti{p{yZ6Kg}Tg z4hXZfhioSEKC+Yh*^gl48<~nZ=Il|yNW{%O=j zs34cjA)~7ST^W6cPJ}%NfgK#szNB=$=^I4y9IFn{+BNO0H;~dWy|4dMRuFRiK z9z*ecuphEmhh$SWgOizrEW#{8Heohl4q+~V|5fV0g^)wIl`x-h8-bnd=b`0aM93v9 iCgc(F2?c~g!VSEDdwejy{1nPDCYQ9w{s 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