STD.SETUP
From Pickwiki
HomePage>>SourceCode>>BasicSource>>SvnWrapper>>STD.SETUP
Run this in 'LOGIN' to set up global commons.
subroutine STD.SETUP * SUB: Standard Setup Module for all RMS programs. * ======================================================================================= * 28.Mar.2013 james: Add ALL COMMON'S that have DIM's to assure THIS BREAKS: see below. * 29.Dec.2010 james: Keep RMS$USER.GROUP.S in RMS.COMMON now too * 12.Jan.2010 james: Reset FORM$NUM.PARAMS and FORM$PARAM.VARS now in FORM.COMMON. * 07.Jul.2009 james: Reset the DEBUG.ON flag to @FALSE 'just in case'. * 16.Apr.2009 james: Clear new DC$TEST.FLAGS for HIGH.COST testing * 27.Mar.2009 james: Call LOAD.ENV.COMMON with EC.RELOAD now in case we LOGTO. * 04.Feb.2009 jim: Call OPEN.FILE with RESET to clear Open Files Common 'just in case'. * 15.Aug.2008 jim: Let's try loading ENV.COMMON here now ? It's in SELECT.FORMS anyway. * 25.Jun.2008 jim: Reset 'EC$IS.LOADED' so it get's re-loaded if this is rerun ( LOGTO ). * 11.Mar.2008 manoj: Removed open file PROGRAM since we will not rename PLAN file * 28.Feb.2008 jim: Cache has problems with 'AUTOLOGOUT' ? Just skip it for now for Cache. * 25.Feb.2008 jim: Initialize DC$TEST.DATE just in case. * 16.Jan.2008 jim: Open LAST.ID.FILE for INPUT and other misc programs. * 20.Jun.2007 jim: FKEY.ACTS is obsolete. * 24.Jan.2007 jim: Add RMS$PID; different method for Cache. * 13.Sep.2006 jim: Add PLATFORM 'Cache' or '[[UniVerse]]' for Cache migration. * 29.Mar.2006 precy: Add OPEN and READ new USER file to access USER record. * 30-Nov-2005 jay: Removed uname -n from being run per execution to only if not exising in CONTROL.LOCAL * Implemented CONTROL.LOCAL * 19-Sep-2005 jim: Use SYSTEM(2) and SYSTEM(3) for Screen Width[[/Height]] * 14-Sep-2005 jim: Remove PRINT statements if TERMINAL and/or USER are not * found: who cares anymore ?! Phantoms get junk... * 05-Aug-2005 jay: Removed "uname -s" and hard coded "LINUX" in common var SYSTEM.OS * 01-Jul-2005 jay: Added REPLICATION.INIT temporarily to avoid having to release * war's to all the server at once * 09/12/2002 jay: Added SYSTEM.OS so that we could seperate programs based on os * Also Made the ttyp fix * 05/06/1999 jim: Finally use 'uname -n' for SCO to get the right system name ! * 06/08/1988 jim: TYPE 'T' TOP 1, BOT 23 FOR CULVER PLUMBING * ALSO ADDED 'EJECT' FOR RITEMAN AND ALL PRINTING ! * 09/15/1986 jim: WELL, NOW I KNOW WHY ! RITEMAN GOES INTO GRAPHICS MODE ! * @(-1) CHANGED BACK TO CHAR(12). SHIT * 07/23/1986 jim: CLR changed to @(-1); was CHAR(12) I know there's a reason ? * ======================================================================================= * $Id$ * ======================================================================================= deffun GET.PID ;* Method of getting Process ID differs in Cache deffun OPEN.FILE( FILENAME, FLAGS, FILEVAR, ERR.MSG ) $include RMS.BP INPUT.COMMON ;* LAST.ID.FILE; also includes CURRENT.COMMON $include RMS.BP ENV.COMMON ;* PWD, etc. $include RMS.BP FORM.COMMON ;* Includes EQU.PRINTER, EQU.TERMINAL, EQU.LINE $include DSI.BP DSI.COMMON ;* DSI Standard files and Unused slots $include DSI.BP TIMING.COMMON ;* Timing Configuration * ---------------------------------------------------------------------------- * Add ALL COMMON'S that have DIM's to assure THIS BREAKS if any of the DIM's are * changed! This is so WEBSITE.INIT breaks and does NOT hand over the session to another * user if programs with changes to Global Commons are compiled while the session is open. * (I can't see what it could hurt?: most of these will be loaded anyway...). * (Note that 'DSI' only things like PRICING.COMMON and INVOICE.COMMON are NOT included) $include DSI.BP APR.COMMON $include DSI.BP FORM.LIST.COMMON $include DSI.BP HIGH.COST.COMMON $include DSI.BP WEB.DOCS.COMMON $include RMS.BP FILE.CONFIG.COMMON $include RMS.BP REPLICATION.COMMON $include DA.BP DA.COMMON ;* This shares CUSTOMER() with INVOICE.COMMON !? $include DA.BP PROCESS.COMMON $include WEB.BP WEB.COMMON * ---------------------------------------------------------------------------- $include RMS.BP EQU.USER dim USER( USER.C ) ;* Put this back in RMS.COMMON sometime ! * This is too dangerous; it's used in the middle of things. * BUT call it at all entry points !: *CALL CLEAR.COMMON ;* 01-Dec-2004 jim: Will this fix strange crashes? call DEBUG.MSG( '', 'E' ) * Reset stuff in 'CURRENT.COMMON' in case someone uses it prematurely : CUR.REC = '' ; CUR.ID = '' ; CUR.AMC = 0 ; CUR.CDC = 0 ; CUR.I = '' TIMING.ENABLED = @FALSE ;* By default disable timing EC$IS.LOADED = @FALSE ;* If we don't load this; at least make it re-load (for PWD, etc) * 15.Aug.2008 jim: Let's try loading ENV.COMMON here now ? (it's in SELECT.FORMS anyway * so it needs to be done every request anyway...) * * This used to 'Load only if NOT already loaded'; but now ALWAYS LOAD; since * this is NOT called everywhere anymore; and it IS called when we 'LOGTO' so * this MUST be reloaded then: * call LOAD.ENV.COMMON( EC.RELOAD ) * ---------------------------------------------------------------------------- * THIS PROGRAM SETS ALL 'RMS' STANDARD COMMONS; Call ONCE upon initial Login. * * ---------------------- * COMMON DEFINITIONS * ---------------------- * * CLR : CLEAR SCREEN * EJECT : EJECT A PAGE ON THE PRINTER (DON'T USE 'CLR' !) * ES : ERASE SCREEN FROM CURRENT POSITION TO END * BELL : RING THE BELL * RN : TURN REVERSE VIDEO ON * RF : TURN REVERSE VIDEO OFF * EL : ERASE LINE FROM CURRENT POSITION TO END * TRUE : BOOLEAN TRUE (1) * FALSE : BOOLEAN FALSE (0) * * TERMTYPE : CURRENT TERMINAL TYPE DEFINED IN PICK * EMBED.ATTR : BOOLEAN, DOES THIS TERMINAL HAVE EMBEDDED ATTRIBUTES? * TOP.LINE : 0 OR 1, DEPENDING ON TYPE OF TERMINAL (PC MONITOR IS 0) * Now set from 'TERMINAL' in 'RMS.CONTROL' if it's there * BOT.LINE : 23 OR 24 USUALLY * * HD.CLR : HEADING COLOR (TOP LINE) * BD.CLR : BORDER COLOR (FOR MENUS, ETC) * PR.CLR : PROMPT COLOR (IMMEDIATE PROMPT, ETC) * M1.CLR : MESSAGE COLOR 1 : IMMEDIATE MESSAGES FOR CURRENT INPUT * M2.CLR : MESSAGE COLOR 2 : LESS IMPORTANT MESSAGES * BK.CLR : BACKROUND COLOR * IN.CLR : INPUT COLOR : FOR CURRENT INPUT LINE (USED BY MR.IN) * ER.CLR : ERROR MESSAGE COLOR (USUALLY RED !) * SP.CLR : SPECIAL COLOR FOR ANY PURPOSE * * USER.NO : CURRENT USER # (USED TO MAKE THINGS UNIQUE) * SEC.LVL : CURRENT SECURITY LEVEL OF THIS USER..no longer used !? * * DEBUG.FLAG : If set, lots of programs will show their stuff * * ============================================================================ gosub SET.STANDARD.VARS ;* STANDARD ASSUMPTIONS gosub SET.TERMINAL.INFO ;* TERMINAL DEPENDANT STUFF gosub SET.FORM.COMMON INS.MODE = @FALSE ;* Insert[[/Replace]] mode for INPUT.IN, BOX.ED. *crt "!": ;* Signal that STD.SETUP was run; is this useful anymore ? * 01-Jul-2005 jmp: Implemented for replication update to check rep state * ? Remove when connection pool call this on connection retrieval * 10.May.2006 jim: Do NOT remove this ! It is now expected to be set by * REP.WRITE, etc; why not just do it here ? * [[REP_FLAGS]] = '' call REPLICATION.INIT([[REP_FLAGS]], REP.ERR) * Do something with REP.ERR if it's returned ? What ? * At least PRINT IT !: if REP.ERR # '' then print REP.ERR * (might be 'REP.Q not found', etc ...) return SET.STANDARD.VARS: * NOTE THESE MAY GET RE-SET BELOW AM = char(254) ; VM = char(253) ; SVM = char(252) TRUE = 1 ; FALSE = 0 ;* Some programs still use these ? (should use @'s) ILEN = 32767 * We may be just 'STD.SETUP' for some other reason: if unassigned(DEBUG.FLAG) then DEBUG.FLAG = '' FKEY.LEVEL = 0 ;* HOPE NOONE ELSE SETS IT !! * .. THIS STUFF MAY BE TERMINAL DEPENDENT, BUT SET DEFAULTS ANYWAY CLR = @(-1) ; EJECT = char(12) ;* .. PAGE EJECT FOR RITEMAN ! ES = @(-3) ; EL = @(-4) ; BELL = char(7) TOP.LINE = 1 * 19-Sep-2005 jim: Use a bigger TERM ! * BOT.LINE = 24 BOT.LINE = SYSTEM(3) SCREEN.WIDTH = SYSTEM(2) ;* AND a WIDER Term !? EMBED.ATTR = FALSE * RN = @(-13) ; RF = @(-14) * LEAVE COLOR INFORMATION NULL FOR NORMAL TERMINALS: HD.CLR='' ; BD.CLR='' ; PR.CLR='' ; M1.CLR='' ; M2.CLR='' BK.CLR='' ; IN.CLR='' ; ER.CLR='' ; SP.CLR='' OS.VERSION = "UNIX" dummy = OPEN.FILE( '', "RESET", FILEVAR, ERR.MSG ) ;* RESET flag does not actually 'open' gosub [[ProcessControlLocal]] * --------------------------------------------------------------------------- * These files are used enough to justify always being open: see DSI.COMMON * ONCE 'OPEN.FILE' IS USED EVERYWHERE, THIS ALL BECOMES OBSOLETE ! if not( OPEN.FILE( "WS", '', WS.FILE, Err ) ) then stopm Err if not( OPEN.FILE( "PLAN", '', PLAN.FILE, Err ) ) then stopm Err if not( OPEN.FILE( "LENDER", '', LENDER.FILE, Err ) ) then stopm Err if not( OPEN.FILE( "CONTROL", '', CONTROL.FILE, Err ) ) then stopm Err if not( OPEN.FILE( "LAST.USED", '', LAST.USED.FILE, Err ) ) then stopm Err if not( OPEN.FILE( "LAST.ID", '', LAST.ID.FILE, Err ) ) then stopm Err * --------------------------------------------------------------------------- * Local files: if not( OPEN.FILE( "USER", '', USER.FILE, Err ) ) then stopm Err if not( OPEN.FILE( "RMS.CONTROL",'', RMS.CONTROL.FILE, Err ) ) then stopm Err USER.NO = @TTY ;* .. UNIQUE TTY NAME * 05-Aug-2005 jay: We do not need to get this unless we have different OS Systems * if we change os, we need to uncomment these two lines *EXECUTE \SH -c "uname -s"\ CAPTURING SYSTEM.OS *SYSTEM.OS = UPCASE(SYSTEM.OS<1>) SYSTEM.OS = "LINUX" ;* Hard coded for performance if USER.NO # 'phantom' then if SYSTEM.OS # "LINUX" then USER.NO = field(USER.NO,"/",3) end else USER.NO = "ttyp":field(USER.NO, "/", 4) end end USER.ID = @LOGNAME if trim(USER.ID) = '' then mat USER = '' end else matread USER from USER.FILE, USER.ID else mat USER = '' end end if USER(1) = '' then crt ; crt "User ":USER.ID:" was not found in the USER file." ; crt if USER$TOP.MENU # '' then write USER$TOP.MENU on LAST.ID.FILE, "MENU.":USER.NO end * Cache has problems with this ? Reported to Lee Burstein * on 28.Feb.2008. The issue is not this command; it is when you * 'LIST LENDER' and it crashes at the end of the first page. if USER$OFF.MINUTES # '' and USER$OFF.MINUTES > "0" and PLATFORM # "Cache" then execute "AUTOLOGOUT ":USER$OFF.MINUTES end RMS$USER.GROUP.S = USER$GROUP.S ;* Keep this in RMS.COMMON now too * Security Level will be set by user id (logon id) if it exists : SEC.LVL = USER$SEC.LEVEL if SEC.LVL < 5 then * This does not work since it executes in a different shell: * execute "BREAK OFF" break OFF ;* BUT this works ! crt "#": end if USER.NO = '' then mat LINE.REC = '' end else matread LINE.REC from RMS.CONTROL.FILE, "LINE.":USER.NO else mat LINE.REC = '' end end L.TERM.TYPE = @TERM.TYPE ;* ALWAYS USE UNIVERSE TERM.TYPE if L.LAST.PRT = '' then L.LAST.PRT = 'T' ;* Default 'T'erminal matread TERMINAL from RMS.CONTROL.FILE, "TERM.":L.TERM.TYPE else mat TERMINAL='' end if TERM.TRANS.ON = '' then TERM.TRANS.ON = char(19) ;* CTL-S ?? if TERM.TRANS.OFF = '' then TERM.TRANS.OFF = char(20) ;* CTL-T ?? if TERM.WIDTH = '' then TERM.WIDTH = SCREEN.WIDTH if TERM.TOP # '' then TOP.LINE = TERM.TOP if TERM.BOT # '' then BOT.LINE = TERM.BOT RN = TERM.BOLD.ON ; RF = TERM.BOLD.OFF ;* GENERAL HIGHLIGHT FKEY.LEAD = '' ;* BUILD STRING OF LEAD-IN CHARACTERS for I = 31 to TERMINAL.C if len(TERMINAL(I)) > 1 then LEAD = TERMINAL(I)[1,1] if index(FKEY.LEAD,LEAD,1) = 0 then FKEY.LEAD = FKEY.LEAD:LEAD end next I * This fixes a problem with LINK MC5/6 and WYSE 150 Terminals with parallel * ports: if not printer is plugged in, a TRANS.ON[[/TRANS]].OFF sequence locks * the terminal (even with no data). if L.TERM.PRT = '' then ;* .. No printer..Clear Trans ON[[/OFF]] for PARALLEL's TERM.TRANS.ON = '' TERM.TRANS.OFF = '' end PROMPT "" ;* USUALLY NEEDED ANYWAY * C.R = " Copyright 1986-1990 (c) J.R.Adrig, All Rights Reserved " * DSI took over rights to this program... C.R = '' * obsolete: mat FKEY.ACTS = '' ;* Until otherwise set ! * .. How long to wait to get next char of function key?(loop)(GET.CH): readv FKEY.DELAY from RMS.CONTROL.FILE,"FKEY.DELAY",1 else FKEY.DELAY = 10 * This gets set in DSI.COMMON from APR.TEST to call historical versions of APR; PMTS, etc: DC$TEST.DATE = '' ;* Clear it to make sure it's not floating around. DC$TEST.FLAGS = '' ;* This too return * Initialized Global Common stuff in FORM.COMMON 'just in case' (i.e. in case the * commons don't get reset because of a fatal breakage in a Command / Audit). SET.FORM.COMMON: VAR.NAMES = '' ; mat VARS = '' FORM$SAVE.VARS = @FALSE ;* This is reset at the end of an Audit but not if it fails ! mat FORM$PARAM.VARS = '' FORM$NUM.PARAMS = 0 return SET.TERMINAL.INFO: ;* SET TERMINAL DEPENDANT STUFF TERMTYPE = @TERM.TYPE ;* old: L.TERM.TYPE begin case ;* ... FOR EVERY TYPE OF TERMINAL ! case TERMTYPE = "F" ;* FUJITSU MONITOR !!! * ?? GOSUB SET.COLORS case TERMTYPE = "M" ;* 'GEORGE' USING TVI912 !!! CLR = char(26) EL = SPACE(SCREEN.WIDTH - 2) ;* Was 78 ? case TERMTYPE = "Q" ;* .. QVT102 (RMS) RN = @(-9):@(-13) ; RF = @(-9):@(-14) end case if L.COLOR = "Y" then gosub SET.COLORS return * .. NOW SET UP 'COLORS' ! SET.COLORS: gosub READ.CONTROL.COLORS HD.CLR = @(-HD.CLR<1>) BD.CLR = @(-BD.CLR<1>) PR.CLR = @(-PR.CLR<1>) M1.CLR = @(-M1.CLR<1>) M2.CLR = @(-M2.CLR<1>) BK.CLR = @(-BK.CLR<1>) IN.CLR = @(-IN.CLR<1>) ER.CLR = @(-ER.CLR<1>) SP.CLR = @(-SP.CLR<1>) return * FUJITSU:(ALL MINUSS): 5:BLINK,13 RVSE,14 NORM,17 GREY BACK * 46 BLUE, 47 RED, 48 PURPLE, 49 GREEN, 50 LT.BLUE * 51 LT. GREEN, 52 WHITE * BACK: 54 BLUE, 55 RED, 56 PURP, 57 GREEN, 58 BLUE, 59 GREEN, 60 WHITE READ.CONTROL.COLORS: read HD.CLR from RMS.CONTROL.FILE,"HEAD.COLOR" else HD.CLR = 39 read BD.CLR from RMS.CONTROL.FILE,"BORD.COLOR" else BD.CLR = 47 read PR.CLR from RMS.CONTROL.FILE,"PROMPT.COLOR" else PR.CLR = 48 read M1.CLR from RMS.CONTROL.FILE,"MSG1.COLOR" else M1.CLR = 46 read M2.CLR from RMS.CONTROL.FILE,"MSG2.COLOR" else M2.CLR = 42 read BK.CLR from RMS.CONTROL.FILE,"BACK.COLOR" else BK.CLR = 33 read IN.CLR from RMS.CONTROL.FILE,"INPUT.COLOR" else IN.CLR = 43 read ER.CLR from RMS.CONTROL.FILE,"ERR.COLOR" else ER.CLR = 44 read SP.CLR from RMS.CONTROL.FILE,"SPEC.COLOR" else SP.CLR = 45 return * 13.Sep.2006 jim: * * This file is in '/u/local' ? It could be used to make datest 'act like' dsi; * for example. Or is it just to avoid using 'EXECUTE' often ? * Since most program now do NOT (or SHOULD not !) call STD.SETUP; it's not * really a concern anymore ? [[ProcessControlLocal]]: open "CONTROL.LOCAL" to CONTROL.LOCAL.FILE then [[OpenedControlLocal]] = @TRUE else [[OpenedControlLocal]] = @FALSE gosub [[SetSystemName]] return [[SetSystemName]]: if index( SYSTEM(41), 'Cache', 1) then PLATFORM = 'Cache' end else PLATFORM = '[[UniVerse]]' end SYSTEM.NAME = "" [[SystemNameRecordID]] = "HOSTNAME" if [[OpenedControlLocal]] then readv SYSTEM.NAME from CONTROL.LOCAL.FILE, [[SystemNameRecordID]],1 else * We need to set up the name end end * We do not have a system name yet; generate it: if SYSTEM.NAME = "" then if PLATFORM = 'Cache' then * * 19.Feb.2008 jim: During Cache testing with Lee, we found this to error when * called from Java !? Use Caution ! (Lee is going to check on this). * execute "[ write $zu(110)" capturing SYSTEM.NAME * end else execute \SH -c "uname -n"\ capturing SYSTEM.NAME end SYSTEM.NAME = SYSTEM.NAME<1> if [[OpenedControlLocal]] then writev SYSTEM.NAME to CONTROL.LOCAL.FILE, [[SystemNameRecordID]], 1 end end RMS$PID = GET.PID() ;* Cache version is different ! return