// IFSGetCreate.bcpl -- dialogue to get parameters for IFS creation // Copyright Xerox Corporation 1979, 1980 // Last modified November 14, 1981 10:38 AM by Taft get "Ifs.decl" get "IfsFiles.decl" external [ // Outgoing procedures GetCreateParams; DestroyCreateParams // Incoming procedures Allocate; Free; Zero; FreePointer InitCmd; GetString; GetNumber; Confirm; EnableCatch; EndCatch BeginDefaultPhrase; EndDefaultPhrase; CmdError; BackupPhrase; TelnetAborting Closes; Wss; Wns; PutTemplate; ExtractSubstring // Incoming statics sysZone; driveTab ] //---------------------------------------------------------------------------- let GetCreateParams(ifsType) = valof //---------------------------------------------------------------------------- // Requests the operator to specify parameters for creating an IFS. // ifsType should be either ifsTypePrimary or ifsTypeBackup. // Returns a filled-in CPar structure (see ifs.decl). // Returns zero if the user aborts out. [ let cPar, cs = nil, nil [ // repeat cs = InitCmd(100+30*nDrives, nDrives+5) if cs ne 0 break if TelnetAborting() resultis 0 ] repeat if EnableCatch(cs) then [ DestroyCreateParams(cPar); EndCatch(cs) ] cPar = Allocate(sysZone, lenCPar) Zero(cPar, lenCPar) cPar>>CPar.type = ifsType unless Confirm(cs, "*nDo you really want to create a file system?") do [ Closes(cs); DestroyCreateParams(cPar); resultis 0 ] let errMsg = valof [ Wss(cs, "*nNumber of disk units: ") let numUnits = GetNumber(cs) if numUnits le 0 % numUnits gr nDrives resultis " ?" cPar>>CPar.numUnits = numUnits for u = 0 to numUnits-1 do [ PutTemplate(cs, "*nLogical unit $2O = Disk drive: ", u) let pUnit = GetNumber(cs, 8) if pUnit ls 0 % pUnit ge nDrives resultis " ?" if driveTab>>DriveTab^pUnit.ifs ne 0 resultis " drive already in use" for i = 0 to u-1 do if pUnit eq cPar>>CPar.lpMap^i resultis " drive repeated" cPar>>CPar.lpMap^u = pUnit ] test ifsType eq ifsTypePrimary ifso cPar>>CPar.id = ExtractSubstring("Primary") ifnot [ Wss(cs, "*nFile system ID: ") cPar>>CPar.id = GetString(cs) ] Wss(cs, "*nFile system name: ") let BreakCr(cs, char) = char eq $*n cPar>>CPar.name = GetString(cs, BreakCr) cPar>>CPar.dirSize = numUnits*1000 // default directory size Wss(cs, "*nDirectory size (pages): ") BeginDefaultPhrase(cs) Wns(cs, cPar>>CPar.dirSize) EndDefaultPhrase(cs) cPar>>CPar.dirSize = GetNumber(cs) resultis 0 ] if errMsg ne 0 then [ CmdError(cs, errMsg); BackupPhrase(cs) ] let ok = Confirm(cs, "*nOk?") Closes(cs) if ok resultis cPar DestroyCreateParams(cPar) ] repeat //---------------------------------------------------------------------------- and DestroyCreateParams(cPar) be //---------------------------------------------------------------------------- [ FreePointer(lv cPar>>CPar.id, lv cPar>>CPar.name) Free(sysZone, cPar) ]