// FtpInit.bcpl -- Initialization for the Run file version // Copyright Xerox Corporation 1979, 1980, 1981, 1982 // Last modified October 10, 1982 10:43 PM by Boggs get "Pup0.decl" get "Pup1.decl" get "Streams.d" get "AltoDefs.d" get "AltoFileSys.d" external [ // outgoing procedure InitFtp // incoming procedures InitFtpPList; InitFtpUtil; InitPupLevel1; SetAllocation InitSysFont; InitComCm; InitDisplay; InitLog MakeBar; MakeTitle; FTPShowDisplayStream MyFrame; Enqueue; Unqueue; CallSwat; SysErr; Closes InitializeZone; Allocate; Free; FunnyAllocate TFSInit; TFSSwatContextProc PupChecksum; UPupChecksum; InitBcplRuntime; LoadRam InitializeContext; CallContextList Overlay // outgoing statics stackSize; savedAllocate ftpDisk; ctxQ; initCode savedSwatContextProc ramFlag; errorFlag; debugFlag; tfsFlag; logFlag userFlag; serverFlag; telnetFlag; cliFlag // incoming statics sysFont; fontHeight; lastShownStream; currentYPos serverDsp; userDsp; telnetDsp; userDspLen; telnetCode sysZone; lvSysZone; sysDisk FtpRamImage; dPSIB; overlayStream lvSwatContextProc; tfsUnit ] static [ stackSize; initDone = false ftpDisk; ctxQ; initCode savedSwatContextProc; savedAllocate ramFlag = true; errorFlag = true; debugFlag = false logFlag = false; cliFlag = false; tfsFlag = false userFlag = true; serverFlag = true; telnetFlag = true ] manifest [ // order of overlay segments after resident code // must match order in load command file ram = 1 server = 2 user = 3 keyboard = 4 commandLine = 5 telnet = 6 tfs = 7 tfsInit = 8 init = 9 stackLimit = 335b numPBIs = 12 servDspSLC = 100 //server window size userDspSLC = 200 //user window size black = true white = false ] //----------------------------------------------------------------------------------------- let InitFtp() be //----------------------------------------------------------------------------------------- [ // cursor @mouseX, @mouseY = 260, 25 for i = 0 to 7 do cursorBitMap!i = 177400b for i = 8 to 15 do cursorBitMap!i = 377b // sysZone let freeBegin = @stackLimit let freeEnd = MyFrame()-200 @stackLimit = freeEnd test freeEnd-freeBegin gr 0 ifso sysZone = InitializeZone(freeBegin, freeEnd-freeBegin, SysErr, (debugFlag? SysErr, 0)) ifnot sysZone = InitializeZone(freeEnd-77777b, 77777b, SysErr, (debugFlag? SysErr, 0)) savedAllocate = sysZone!0; sysZone!0 = FunnyAllocate @lvSysZone = sysZone // contexts ctxQ = Allocate(sysZone, 2); ctxQ!0 = 0 let initCtx = InitializeContext(Allocate(sysZone, 1500), 1500, InitCtx) Enqueue(ctxQ, initCtx) CallContextList(ctxQ!0) repeatuntil initDone Unqueue(ctxQ, initCtx) Free(sysZone, initCtx) ] //----------------------------------------------------------------------------------------- and InitCtx(ctx) be //----------------------------------------------------------------------------------------- [ if ramFlag % tfsFlag then [ let p = Overlay(ram) ramFlag = LoadRam(FtpRamImage, true) ge 0 Free(sysZone, p) if ramFlag then [ PupChecksum = UPupChecksum InitBcplRuntime() ] ] stackSize = tfsFlag? 2400, 1200 // disk ftpDisk = sysDisk // Pup package InitPupLevel1(sysZone, ctxQ, numPBIs) let fakeSoc = dPSIB - offset PupSoc.psib/16 SetAllocation(fakeSoc, numPBIs-4, numPBIs-5, numPBIs-5) // Ftp subsystem InitSysFont() InitDisplay() InitComCm() // server serverFlag = serverFlag & not cliFlag if serverFlag then [ MakeTitle(" FTP Server") serverDsp = MakeBar(white, (servDspSLC/(2*fontHeight))*fontHeight) FTPShowDisplayStream(serverDsp) Overlay(server) ] // user if userFlag then [ MakeTitle(" FTP User") Overlay(user) userDspLen = 3500 let slc = userDspSLC unless serverFlag % tfsFlag do [ userDspLen = userDspLen + 5000; slc = slc + servDspSLC ] unless (telnetFlag & not cliFlag) % tfsFlag do [ userDspLen = userDspLen + 1500; slc = 780-currentYPos ] userDsp = MakeBar(white, (slc/(2*fontHeight))*fontHeight) FTPShowDisplayStream(userDsp) test cliFlag ifso [ Overlay(commandLine); unless logFlag do logFlag = true ] ifnot Overlay(keyboard) InitLog() ] // telnet telnetFlag = telnetFlag & not cliFlag & not tfsFlag if telnetFlag then [ MakeTitle(" Telnet User") telnetDsp = MakeBar(white, ((780-currentYPos)/(2*fontHeight))*fontHeight) FTPShowDisplayStream(telnetDsp) telnetCode = Overlay(telnet) ] FTPShowDisplayStream(MakeBar(black, 1)) // FtpInit (cont'd) // Trident if tfsFlag then [ Overlay(tfs) let p = Overlay(tfsInit) ftpDisk = TFSInit(sysZone, 1, tfsUnit) if ftpDisk eq 0 then CallSwat("TFSInit failed") savedSwatContextProc = @lvSwatContextProc @lvSwatContextProc = TFSSwatContextProc Free(sysZone, p) ] initCode = Overlay(init) InitFtpUtil() InitFtpPList() Closes(overlayStream) initDone = true // returning from a context does an implicit Block() ]