Comment ======================================================== Copyright 1990 by Marc Perkel * All right reserved. Requires MarxMenu version 2.14 or later to run. MarxMenu now allows you to login to a Novell network without using Novell's login program or messing with nasty login scripts. You can be in MarxMenu all the way in. Logging into Novell is tricky. Especially if you are using boot roms on your network cards. Through much trial and error, I have found some solid tricks that make life easier. You should have the following two BATCH files in your LOGIN directory as follows: LOADNET.BAT ----------- NET4 F: STARTUP STARTUP.BAT ----------- SET BOOTUP=LOGIN MarxMenu Login %BOOTUP% Each workstation should have their own AUTOEXEC.BAT. The last line should be LOADNET. If you are running multiple versions of dos you can have the first line of LOADNET.BAT be %NET%. You will then have to have SET NET=NET4 in your AUTOEXEC.BAT file. Also, if you want automatic login you can add the following lines: SET USERNAME=MARC Your Name Here SET PASSWORD=NERD Your Password Here You should also change the COMSPEC= to the network command.com BEFORE you run NET4. For some unknown reason, this solves a lot of problems. Example: IPX SET COMSPEC=Y:COMMAMD.COM NET4 Another boot rom quirk is that you can't run any program off a boot rom that trashes upper memory. An example is running QEMM on a monochrome monitor. By using this method the boot disk or boot rom hands control over in a clean way. LOADNET.BAT then branches to STARTUP.BAT for the rest of the login sequence. For some strange reason which I can't explain, LOADNET and STARTUP have to be two separate batch files. I think it forces the transient part of COMMAND.COM to load into memory. Anyhow, don't combine these into one batch file The first line of STARTUP.BAT is a message that tells this menu that the user is logging in for the first time. This menu creates a batch file and puts the name of it in the environment variable BOOTUP. STARTUP.BAT then executes this file. This is the example for MY network. You'll have to modify it for yours. One word of caution. After modifing this menu, always run MARXCOMP LOGIN to compile it. Otherwise, if you boot up into it you won't have enough access rights to recompile automatically. ======================================================== EndComment var UserName PassW Logged Station NetAddress SmartDir MyServer Servers HomeDir DosDir BatFile BatName FancyScreen Shell ;----- All environment string access will be the Master Environment MasterEnvironment Shell = CleanFileName(ReadEnv('COMSPEC')) Comment ======================================================== If Environment variables USERNAME and PASSWORD are set, this menu will attempt to log into the network using these values. This allows for automatic login. You can also pass the parameters on the command line as follows. MarxMenu Login The name may contain a referrence to a server: Server/Name ======================================================== EndComment ;------ If CapsLock key is on then override default login Logged = False if not CapsLock UserName = ParamStr(2) if UserName = '' then UserName = ReadEnv('USERNAME') if UserName > '' PassW = ParamStr(3) if PassW = '' then PassW = ReadEnv('PASSWORD') if PassW > '' NovLogin (UserName,PassW) Logged = NovResult = 0 endif endif endif MyServer = NovDefaultServer NovServers(Servers) ;------ Fills station to 3 digits. Example: 004 Station = Str(NovConnection) while length(Station) < 3 Station = '0' + Station endwhile ;------ Read network address NetAddress = NovStationAddress (NovConnection) ;------ Select colors and prepare screen if not Logged FancyScreen = True if ColorScreen TextColor White Red BoxBorderColor Green Brown BoxInsideColor Black Brown ClearScreen 176 ClockColor Black Brown TextColor Black Green BoxHeaderColor Yellow Mag Shadow else TextColor Grey Black ClearScreen 176 TextColor Black Grey BoxBorderColor Black Grey BoxInsideColor Black Grey BoxHeaderColor Black Grey ClockColor Black Grey endif BlankMessage = 'Netware Login' ClockMode = 262 GotoXY 1 25 ClearLine WriteCenter "Computer Tyme Master Network Login Menu" SingleLineBox Explode Off ShadowColor Grey Red if ColorScreen DrawBox 3 2 74 5 ClockPos 42 5 TextColor Blue Brown else DrawBox 3 2 76 5 ClockPos 44 5 endif WriteCenter 'Computer Tyme Software Development Laboratory' Writeln TextColor Black Brown WriteCenter '컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴�' Writeln TextColor Black Brown Write " (C) 1990 by Marc Perkel" DoubleLineBox BlankTime = 10 Explode On BlockBox BoxBorderColor Green Blue BoxInsideColor Yellow Blue BoxHeader = " Station Information " if ColorScreen DrawBox 39 17 38 6 TextColor Yellow Blue else DrawBox 41 17 38 6 TextColor Grey Black endif Writeln ' Server: ' MyServer Writeln ' Network: ' NetAddress Writeln ' Connection: ' Station Write ' DOS Version: ' DosVersionString BoxHeader = ' Logging into Server * ' + MyServer + ' ' DrawBox 3 10 50 4 endif Security while not Logged if UserName = '' ClearScreen Write ' Login Name: ' UserName = UpperCase(Readln) Writeln if UserName = 'EXIT' then ExitMenu endif if not Logged Write ' Password: ' PassW = Readln NovLogin (UserName,PassW) Logged = NovResult = 0 endif if not Logged then UserName = '' endwhile if FancyScreen EraseTopWindow EraseTopWindow EraseTopWindow EraseTopWindow TextColor Grey Black ClearScreen endif UserName = NovMyLoginName Comment ======================================================== Here we set a different directory for a program depending on if we have a color or monochrome monitor. ======================================================== EndComment if VideoMode = Mono SmartDir = 'F:\PUBLIC\MSMART' else SmartDir = 'F:\PUBLIC\CSMART' endif ;----- You can't assume that you have an F: drive unless you map it. NovMapDrive ('F','SYS:\LOGIN') ;----- Here we calculate a home directory for each user. HomeDir = 'F:\HOME\' + UserName if UserName = 'SUPERVISOR' then HomeDir = 'F:\SYSTEM' if not ExistDir(HomeDir) then HomeDir = 'F:\PUBLIC\APPS' Comment ======================================================== Here we calulate the the name of the dos directory that matches the version of dos we are running. ======================================================== EndComment DosDir = 'F:\PUBLIC\DOSV' + DosVersionString Comment ======================================================== Here's where we map our drives. This does not set the search path. You set that explicitly by writing to the PATH environment variable. Drive map commands may contain server and volume referrences: MovMapDrive('I','TYME/VOL1:SERVICE') ======================================================== EndComment NovMapDrive ('Z',HomeDir) NovMapDrive ('Y','F:\PUBLIC\APPS') NovMapDrive ('X',DosDir) NovMapDrive ('W','F:\PUBLIC\UTIL') NovMapDrive ('P','F:\PUBLIC') NovMapDrive ('U','F:\SYSTEM') NovMapDrive ('L','F:\LOGIN') if MyServer = 'TYME' NovMapDrive ('I','VOL1:') endif if (MyServer = 'TYME') or (MyServer = 'MARX') NovMapDrive ('S',SmartDir) endif ;Here's where we set master environment variable strings SetEnv ('PASSWORD=') SetEnv ('NET=') SetEnv ('USERNAME=' + UserName) SetEnv ('STATION=' + Station) if Shell <> 'C:\COMMAND.COM' then SetEnv ('COMSPEC=X:COMMAND.COM') SetEnv ('PROMPT=$e[1;33m$p: $e[0;32m') SetEnv ('PD.EXE=/$Z:PD.PIC') SetEnv ('MXCTL=/C') SetEnv ('MXECHO=OFF') if MyServer = 'MARX2' SetEnv ('PATH=Z:.;Y:.;X:.;W:.;P:.;U:.;M:.;') else SetEnv ('PATH=Z:.;Y:.;X:.;W:.;P:.;U:.;S:.;') endif FixPath ;Verifies all search paths exist ChDir (HomeDir) ;------ Opens a semaphore that XMETER can read. NovOpenSemaphore ('XM-LOGIN',0) ;------ LOGIN is set to BOOTUP if logging in for the first time if UpperCase(ReadEnv('BOOTUP')) <> 'LOGIN' then ExitMenu Comment ======================================================== In order to load TSRs, MarxMenu writes a temporary batch file and exits. The STARTUP.BAT file then jumps to this batch file. ======================================================== EndComment ;------ Create temporary batch file for rest of login sequence BatName = 'Z:$MRX' + Station + '.BAT' SetEnv ('BOOTUP=' + BATNAME) FileAssign(BatFile,BatName) FileCreate(BatFile) if DosVersionString < '3.30' WriteBat('ECHO OFF') else WriteBat('@ECHO OFF') endif WriteBat ('SET BOOTUP=') WriteBat ('MARK > NUL') ;----- Load Lan Assist if NovInGroup ('LANASSIST') WriteBat ('P:LA\LA +N >NUL') endif Comment ================================================================ This next section deals with running special programs bases on the physical station number rather than by user. This deals with special hardware that needs software drivers loaded. ================================================================ EndComment ;----- CD ROM Machine ;if NetAddress = '255:2' ; WriteBat ('CD\PUBLIC\MA') ; WriteBat ('MSCDEX.EXE /D:MSCD003 /M:12') ; WriteBat ('MAR C:\ RW=/ /C') ;endif ;----- Vicki's Printer if NetAddress = '255:65' WriteBat('P:PA\PA P=1 M=200 T=10 Q1=TYME/VICKI') Capture('VICKI',1) endif ;----- Grace's Printer if NetAddress = '255:68' WriteBat('P:PA\PA P=1 M=200 T=10 Q1=TYME/GRACE') Capture('GRACE',1) endif ;----- Nita's Printer if NetAddress = '255:E8' WriteBat('P:PA\PA P=1 M=200 T=10 Q1=TYME/NITA') Capture('NITA',1) endif Comment ================================================================ This next section deals with running special programs bases on the users preferrences. ================================================================ EndComment if UserName = 'MARC' WriteBat('KBD 6 NumOff'); Capture('DOT',1) Capture('LASER',2) ChDir('TURBO5') if MyServer = 'MARX' SetEnv ('PATH=C:\TURBO5;C:\;' + ReadEnv('PATH')) ChDir('C:\TURBO5') endif endif if UserName = 'VICKI' Capture('LASER',2) WriteBat('KBD 6 NumOn CR'); WriteBat('MAP ROOT C:=Z:') WriteBat('MOUSE') endif if UserName = 'KEVIN' WriteBat('KBD 0,0 NumOn'); Capture('LASER',1) Capture('DOT',2) SetEnv('PROMPT=[$p]') ChDir('MARX') endif if UserName = '386' WriteBat('KBD 6 NumOff'); Capture('DOT',1) Capture('LASER',2) endif if UserName = 'TBBS' Capture('DOT',1) Capture('LASER',2) ChDir('I:\BBS\TBBS') NovMapDrive('H','I:') SetEnv('D.EXE=/O/I') WriteBat('CASTOFF') WriteBat('DROPTO ' + BatName + ' R') endif if UserName = 'GRACE' WriteBat('KBD 6 NumOn'); Capture('LASER',2) endif if UserName = 'NITA' WriteBat('KBD 6 NumOn CapsOn'); Capture('LASER',2) endif if UserName = 'WORK' WriteBat('KBD 6 NumOff'); Capture('DOT',1) Capture('LASER',2) endif ;----- Loads SideKick for all users in L:SIDEKICK.LST ReadSideKickList Comment ================================================================ The batch file ends by jumping to personal menu, if there is one, or the default menu if there isn't. DROPTO.BAT is used to erase the temporary batch file that this menu creates. ================================================================ EndComment WriteBat ('DROPTO ' + BatName + ' MARX TYME') FileClose(BatFile) ExitMenu ;----- Procedure Definitions Procedure WriteBat (BatLine) FileWriteln(BatFile,BatLine) EndProc Procedure Pause WriteBat ('PAUSE') EndProc Procedure Capture (Queue, PrinterPort) var PortSt PortSt = Str(PrinterPort) WriteBat ('P:CAPTURE Q=' + Queue + ' C=1 NB NFF TI=5 L=' + PortSt + '>NUL') EndProc Comment ======================================================== A list is created in the \LOGIN directory containing the names of users who want to load sidekick. The name of the file is SIDEKICK.LST and looks like: MARC VICKI GRACE ======================================================== EndComment Procedure ReadSidekickList var SkList X Found ReadTextFile ('L:SIDEKICK.LST',SkList) X = 1 Found = False while not Found and (X <= NumberOfElements (SkList)) if UpperCase(SkList[X]) = UserName WriteBat('KBD CR'); WriteBat ('SWAPSK/N/G/D' + HomeDir + ' >NUL') WriteBat ('SK') WriteBat ('CLS') Found = True Endif X = X + 1 EndWhile EndProc