// FtpUserInit.bcpl // Copyright Xerox Corporation 1979, 1980, 1981, 1982 // Last modified October 11, 1982 1:03 AM by Boggs get "FtpProt.decl" get "AltoDefs.d" get "Streams.d" external [ // outgoing procedure InitFtpUser; LoadKT // incoming procedures InitFtpCli; InitFtpKbd; FtpCli; FtpKbd; FtpUserFinishProc Allocate; Free; Zero; Enqueue InitPList; ExtractSubstring InitializeContext; InsertKeyword; CreateDisplayStream LsPuts; DlsPuts; DblsPuts; CreateKeyStream; UserKey; LogPuts // outgoing statics userDspLen; userDsp; userKeys; userSoc; userCtx; userUFP; defaultPL // incoming statics debugFlag; tfsFlag; cliFlag; logFlag; stackSize; ctxQ lvUserFinishProc; UserName; UserPassword sysZone; sysFont; fontHeight; lBSPSoc ] static [ userDspLen; userDsp; userKeys; userSoc; userCtx; userUFP; defaultPL ] structure String [ length byte; char^1,1 byte ] //----------------------------------------------------------------------------------------- let InitFtpUser() be //----------------------------------------------------------------------------------------- [ let len = userDspLen; let bitMap = Allocate(sysZone, userDspLen, lv len) if bitMap eq 0 then bitMap = Allocate(sysZone, len) let ds = CreateDisplayStream((userDsp>>DS.fdcb>>DCB.height*2)/fontHeight, bitMap, len, sysFont) let dcb = @displayListHead; while dcb ne 0 do [ if dcb>>DCB.next eq userDsp>>DS.fdcb then [ ds>>DS.ldcb>>DCB.next = userDsp>>DS.ldcb>>DCB.next dcb>>DCB.next = ds>>DS.fdcb Free(sysZone, userDsp); userDsp = ds break ] dcb = dcb>>DCB.next ] userKeys = CreateKeyStream(UserKey, userDsp) userDspLen = userDsp; userDsp = lv LogPuts - offset ST.puts/16 userSoc = Allocate(sysZone, lBSPSoc) userCtx = Allocate(sysZone, stackSize); Zero(userCtx, stackSize) userCtx = InitializeContext(userCtx, stackSize, (cliFlag? FtpCli, FtpKbd), lenExtraCtx) userCtx>>FtpCtx.bspSoc = userSoc userCtx>>FtpCtx.lst = lv LsPuts - offset ST.puts/16 userCtx>>FtpCtx.dls = lv DlsPuts - offset ST.puts/16 userCtx>>FtpCtx.dbls = lv DblsPuts - offset ST.puts/16 userCtx>>FtpCtx.dspStream = userDsp let bufferLength = tfsFlag? 1024, 6*256 userCtx>>FtpCtx.buffer = Allocate(sysZone, bufferLength) userCtx>>FtpCtx.bufferLength = bufferLength userCtx>>FtpCtx.debugFlag = debugFlag Enqueue(ctxQ, userCtx) // User default property list defaultPL = InitPList() if UserName>>String.length ne 0 then defaultPL>>PL.UNAM = ExtractSubstring(UserName) if UserPassword>>String.length ne 0 then defaultPL>>PL.UPSW = ExtractSubstring(UserPassword) userUFP = @lvUserFinishProc @lvUserFinishProc = FtpUserFinishProc test cliFlag ifso InitFtpCli() ifnot InitFtpKbd() ] //----------------------------------------------------------------------------------------- and LoadKT(kt, string, arg1, arg2; numargs na) be //----------------------------------------------------------------------------------------- [ let kte = InsertKeyword(kt, string) for i = 0 to na-3 do kte!i = (lv arg1)!i ]