// P R E P R E S S M E N U 1 //BCPL.Run/f PrepressMenu1.bcpl //Last modified September 27, 1980 9:53 PM by Lyle Ramshaw: // added verifyFlag for the dictionary commands. //Modified July 31, 1980 11:36 AM by Lyle Ramshaw: // Added check on nboxesOn inside of MenuGetCommand to prevent // a FillBox call with garbage args at startup. //Modified June 13, 1980 10:07 PM by Lyle Ramshaw: // Added explicit reference to dsp in call on ShowDisplayStream, // because Junta makes the OS's version wrong. //Modified: May 15, 1980 1:48 PM by Lyle Ramshaw, PARC // Changed Kerned to Clipped for the MakeStrike command; // Adjusted call on EncodeFace for new faces; Removed // useless argument of "p" from MenuGetCommand() (which // is only called with no arguments!). Also added the // MakeKS and ReadKS commands. Also reset nStripsOn // back to zero after all the strips and boxes are cleared // in MenuGetComand, standard command case, hence fixing // one source of drops into Swat. Added the Compact // command, and added the Fast flag to several other // dictionary commands. //Modified April 7, 1980 12:08 PM by Kerry LaPrade, XEOS // Changed spelling from bSupercede to bSupersede. Also, // "DO IT" with source file missing now treated the same // way for both Merge and Supersede, now requiring a // confirmation if source file is a dictionary or is on // Trident. //Modified: February 26, 1980 2:35 PM by (by LaPrade) // "DO IT" with source file missing now requires tridentNeeded // along with bMerge command. //Modified: February 7, 1980 11:37 AM (by LaPrade) // Made smarter and more protective user interface. Different // mouse buttons do different things. In general, first and // second mouse buttons invoke standard default and third // button reverts to last thing used. // As per Lyle Ramshaw's sugestions and instructions, // fixed Trident drive menu specification to allow access // to multiple directories on T-300's. //Modified: December 18, 1979 12:49 PM by Lyle Ramshaw, PARC // Tridents other than drive zero, the Rename bug, // angleToRotate stuff. //Modified: November 28, 1979 6:07 PM (by LaPrade) // Split PrepressMenu.bcpl into two files: PrepressMenu1.bcpl // and PrepressMenu2.bcpl // //Modified: November 5, 1979 3:02 PM (by LaPrade) // Replaced FlipBox (discontinued in version 1.4, July, 1978, // of Keith Knox's menu package) with FillBox (introduced in // version 1.4) get "AuxiliaryMenuDefs.d" get "GoodFoo.d" //get "ix.dfs" //Removed January 24, 1980 because too many symbols get "PrePressNames.D" //outgoing procedure external MenuGetCommand //outgoing statics external [ @boxesOn @decodeFlag @flipFlag @menuUserPrefersTrident @menu @nboxesOn @nstripsOn @outputFileNeeded @outputFileType @selectedBoxNum @selectedButton @sourceFileMissing @sourceFileType @stripsOn ] static [ @boxesOn @decodeFlag @flipFlag @menu @menuUserPrefersTrident = true @nboxesOn @nstripsOn @outputFileNeeded @outputFileType @selectedBoxNum @selectedButton @sourceFileMissing @sourceFileType @stripsOn ] //incoming procedures external [ //Float FST //FontWidths EncodeFace //PrepressMenu2 MenuSetUpAngle MenuSetUpBackgroundFile MenuSetUpBigFile MenuSetUpBitFactor MenuSetUpDefaults MenuSetUpDotSize MenuSetUpDrive MenuSetUpFactors MenuSetUpFileName MenuSetUpIncline MenuSetUpOutputFile MenuSetUpPercent MenuSetUpResolution MenuSetUpRotation MenuSetUpSize MenuSetUpSourceFile MenuSetUpTrident MenuSetUpTrueFalse //PrePressUtil FSGet FSPut MulDiv //Scan ReadNumber StringToValue PrintNumber TypeIn //StringUtil CopyString ExtractSubstring ] //incoming statics external [ //PrePress @angleToRotate @BackgroundFileName @bigfilename @bitfactor @convertThicken @convertOrbitized @dotsize @fam @face @incline @InputFileName @Clipped @fastFlag @verifyFlag @OutputFileName @params @percent @resolutionx @resolutiony @ReviseWidths @rotation @siz @tridentDriveNumber @tridentNeeded @updateflag @xfp @yfp ] manifest [ //Copied January 24, 1980 from IX.dfs //ReCopied May 9, 1980 2:10 PM from IX.dfs once again!!!! IXTypeName = 1 IXTypeSplines = 2 IXTypeChars = 3 IXTypeWidths = 4 IXTypeOrbitChars = 5 IXTypeMultiChars = 6 IXTypeTexMetrics = 7 fileTypeSF = IXTypeTexMetrics + 1 // fileTypeBig = fileTypeSF + 1 maxFileNames = (fileTypeSF + 1) * 2 ] //********************************************************* let MenuGetCommand()=valof //********************************************************* [ MenuData = 0 //got to call MenuInitHelp again (new overlay) params = -1 //we hand check all commands, no need to look at params let len=MenuSize() let buffer=FSGet(len) let stream=CreateMenuDisplayStream(buffer, len) ShowDisplayStream(stream,DSbelow,dsp) let command = 0 nboxesOn = 0 let v = vec 20;boxesOn = v nstripsOn = 0 let v = vec 20;stripsOn = v menu = MenuData>> DATA.menu FillBox(menu!bDivider1, flip, 1) FillBox(menu!bDivider2, flip, 1) FillBox(menu!bDivider3, flip, 1) [ flipFlag = false //Poll "active" boxes. // ScanMenu(Menu, loopOverMenu [true], returnKey [false], sweep [false]) Wl("") let sel = ScanMenu(menu, true, true) FillBox(menu!bNotify, white, 0) selectedBoxNum = sel<< SELECTION.boxNumber selectedButton = GetMouseButton(sel) switchon selectedBoxNum into [ case bQuit: finish case bDoIt: if command ne 0 then [ // test sourceFileMissing & not (tridentNeeded & (command eq bMerge)) // test sourceFileMissing & not (command eq bMerge) let sourceFileOK = not sourceFileMissing unless sourceFileOK do if command eq bMerge % command eq bSupersede then sourceFileOK = ConfirmMenuSelection("*nIs this the source file you really want?", sel) test sourceFileOK ifso [ let outputFilenameOK, char = true, nil if outputFileNeeded then [ outputFilenameOK = OutputFileName>> STRING.length ne 0 for I = 1 to OutputFileName>> STRING.length do [ char = OutputFileName>> STRING.char↑I unless (char ge $a & char le $z) % (char ge $A & char le $Z) % (char ge $0 & char le $9) % char eq $+ % char eq $- % char eq $. do outputFilenameOK = false ] ] test outputFilenameOK ifso [ ShowDisplayStream(stream,DSdelete) FSPut(buffer) resultis CommandNum(command) ] ifnot WriteBox(menu!bNotify, "Output file name no good.") ] ifnot WriteBox(menu!bNotify, "First enter a valid source file.") ] endcase case bDelete: case bList: case bExtract: case bMerge: case bSupersede: case bCompact: case bWidth: case bRename: case bShow: case bMakeCU: case bMakeAL: case bReadAL: case bMakeKS: case bReadKS: case bMakeStrike: case bReadWidths: case bReadCU: case bRotate: case bGrow: case bShrink: case bCoordinate: case bOrbitFormat: case bDeOrbitFormat: case bScale: case bImposeWidths: case bReadSF: case bConvert: case bEdit: if nboxesOn gr 0 then FillBox(boxesOn!1, flip, 1) for I = 2 to nboxesOn do [ FillBox(boxesOn!I, flip, 1) (boxesOn!I) >>BOX.inactive = true ] for I = 1 to nstripsOn do [ FillBox(stripsOn!I, white, 0) (stripsOn!I) >>BOX.inactive = true ] command = selectedBoxNum boxesOn!1 = menu!command nboxesOn = 1 nstripsOn = 0 //added by Lyle Ramshaw, May 12, 1980 flipFlag = true sourceFileMissing = false tridentNeeded = false outputFileNeeded = false MenuSetUpDefaults(command) flipFlag = false loop case bBackgroundStrip: selectedBoxNum = Flip(selectedBoxNum, bBackground) case bBackground: GetBackgroundFileName() endcase case bNameStrip: selectedBoxNum = Flip(selectedBoxNum, bName) case bName: GetFontFamilyName() endcase case bBitFactorStrip: selectedBoxNum = Flip(selectedBoxNum, bBitFactor) case bBitFactor: GetUnsignedInteger(bBitFactorStrip, "Bit count by which to grow or shrink", lv bitfactor) MenuSetUpBitFactor() endcase case bUpdateStrip: selectedBoxNum = Flip(selectedBoxNum, bUpdate) case bUpdate: updateflag = not updateflag MenuSetUpTrueFalse(bUpdate, bUpdateStrip, updateflag) endcase case bThickenStrip: selectedBoxNum = Flip(selectedBoxNum, bThicken) case bThicken: convertThicken = not convertThicken MenuSetUpTrueFalse(bThicken, bThickenStrip, convertThicken) endcase case bOrbitizeStrip: selectedBoxNum = Flip(selectedBoxNum, bOrbitize) case bOrbitize: convertOrbitized = not convertOrbitized MenuSetUpTrueFalse(bOrbitize, bOrbitizeStrip, convertOrbitized) endcase case bAngleStrip: selectedBoxNum = Flip(selectedBoxNum, bAngle) case bAngle: angleToRotate = angleToRotate + selectedButton * 90 if angleToRotate gr 180 then angleToRotate = angleToRotate - 360 MenuSetUpAngle() endcase case bReviseWidthsStrip: selectedBoxNum = Flip(selectedBoxNum, bReviseWidths) case bReviseWidths: ReviseWidths = not ReviseWidths MenuSetUpTrueFalse(bReviseWidths, bReviseWidthsStrip, ReviseWidths) endcase case bClipStrip: selectedBoxNum = Flip(selectedBoxNum, bClip) case bClip: Clipped = not Clipped MenuSetUpTrueFalse(bClip, bClipStrip, Clipped) endcase case bFastStrip: selectedBoxNum = Flip(selectedBoxNum, bFast) case bFast: fastFlag = not fastFlag MenuSetUpTrueFalse(bFast, bFastStrip, fastFlag) endcase case bVerifyStrip: selectedBoxNum = Flip(selectedBoxNum, bVerify) case bVerify: verifyFlag = not verifyFlag MenuSetUpTrueFalse(bVerify, bVerifyStrip, verifyFlag) endcase case bTridentStrip: selectedBoxNum = Flip(selectedBoxNum, bTrident) case bTrident: menuUserPrefersTrident = not menuUserPrefersTrident MenuSetUpTrident() endcase case bDriveStrip: selectedBoxNum = Flip(selectedBoxNum,bDrive) case bDrive: GetUnsignedInteger(bDriveStrip, "Octal number in range [0,7], [400,407], or [1000,1007]", lv tridentDriveNumber, 8) MenuSetUpDrive() endcase case bFaceStrip: selectedBoxNum = Flip(selectedBoxNum,bFace) case bFace: GetFontFace() endcase case bSourceStrip: selectedBoxNum = Flip(selectedBoxNum,bSource) case bSource: GetSourceFileName() endcase case bBigStrip: selectedBoxNum = Flip(selectedBoxNum, bBig) case bBig: GetBigFileName() endcase case bPointStrip: selectedBoxNum = Flip(selectedBoxNum, bPoint) case bPoint: siz = MulDiv(siz, 72, 2540) siz = MulDiv(GetUnsignedInteger(bPointStrip, "Size in points", lv siz), 2540, 72) MenuSetUpSize() endcase case bOutputStrip: selectedBoxNum = Flip(selectedBoxNum, bOutput) case bOutput: GetOutputFileName() endcase case bPercentStrip: selectedBoxNum = Flip(selectedBoxNum,bPercent) case bPercent: GetUnsignedInteger(bPercentStrip, "Percent of area required to turn sampled dot on", lv percent) MenuSetUpPercent() endcase case bDotSizeStrip: selectedBoxNum = Flip(selectedBoxNum,bDotSize) case bDotSize: GetUnsignedInteger(bDotSizeStrip, "Size of display dots", lv dotsize) MenuSetUpDotSize() endcase case bMicaStrip: selectedBoxNum = Flip(selectedBoxNum,bMica) case bMica: GetUnsignedInteger(bMicaStrip, "Size in micas", lv siz) MenuSetUpSize() endcase case bRotationStrip: selectedBoxNum = Flip(selectedBoxNum,bRotation) case bRotation: GetUnsignedInteger(bRotationStrip, "Rotation in minutes of arc (1 degree = 60 minutes)", lv rotation) MenuSetUpRotation() endcase case bInclineStrip: selectedBoxNum = Flip(selectedBoxNum,bIncline) case bIncline: GetUnsignedInteger(bInclineStrip, "Inclination percentage", lv incline) MenuSetUpIncline() endcase case bXStrip: selectedBoxNum = Flip(selectedBoxNum,bX) case bX: GetNum(bXStrip, "Scaling factor (floating point)") FST(1,xfp) FST(1,yfp) MenuSetUpFactors() endcase case bYStrip: selectedBoxNum = Flip(selectedBoxNum,bY) case bY: GetNum(bYStrip, "Y Scaling factor (floating point)") FST(1,yfp) MenuSetUpFactors() endcase case bXResStrip: selectedBoxNum = Flip(selectedBoxNum,bXRes) case bXRes: resolutionx = resolutionx / 10 resolutionx = GetUnsignedInteger(bXResStrip, "Resolution (pixels per inch)", lv resolutionx)*10 resolutiony = resolutionx MenuSetUpResolution() endcase case bYResStrip: selectedBoxNum = Flip(selectedBoxNum,bYRes) case bYRes: resolutiony = resolutiony / 10 resolutiony = GetUnsignedInteger(bYResStrip, "Y Resolution (pixels per inch)", lv resolutiony)*10 MenuSetUpResolution() endcase default: ] FillBox(menu!selectedBoxNum, flip, 1) ] repeat ] //********************************************************* and GetFontFamilyName() be //********************************************************* [ let defaultString = selecton selectedButton into [ case 1: "TimesRoman" case 2: "Helvetica" case 3: fam ] let stringUserTypedIn = TypeStringInBox(bNameStrip, ExtractSubstring(defaultString)) unless stringUserTypedIn>>STRING.length eq 0 do CopyString(fam, stringUserTypedIn) Free(sysZone, stringUserTypedIn) ] //********************************************************* and GetOutputFileName() be //********************************************************* [ let stringUserTypedIn = TypeStringInBox(bOutputStrip, ExtractSubstring(MenuSetUpFileName(outputFileType))) unless stringUserTypedIn>>STRING.length eq 0 do MenuSetUpOutputFile(stringUserTypedIn) MenuSetUpFileName(outputFileType, stringUserTypedIn) Free(sysZone, stringUserTypedIn) ] //********************************************************* and GetSourceFileName() be //********************************************************* [ let stringUserTypedIn = TypeStringInBox(bSourceStrip, ExtractSubstring(MenuSetUpFileName(sourceFileType))) // unless stringUserTypedIn>>STRING.length eq 0 do MenuSetUpSourceFile(stringUserTypedIn, decodeFlag, true) MenuSetUpFileName(sourceFileType, stringUserTypedIn) Free(sysZone, stringUserTypedIn) ] //********************************************************* and GetBigFileName() be //********************************************************* [ let stringUserTypedIn = // TypeStringInBox(bBigStrip, ExtractSubstring(MenuSetUpFileName(fileTypeBig)), "Big (dictionary) file name", bNotify) TypeStringInBox(bBigStrip, ExtractSubstring(MenuSetUpFileName(IXTypeName)), "Big (dictionary) file name", bNotify) MenuSetUpBigFile(stringUserTypedIn) // MenuSetUpFileName(fileTypeBig, stringUserTypedIn) MenuSetUpFileName(IXTypeName, stringUserTypedIn) Free(sysZone, stringUserTypedIn) ] //********************************************************* and GetBackgroundFileName() be //********************************************************* [ let stringUserTypedIn = TypeStringInBox(bBackgroundStrip, ExtractSubstring(MenuSetUpFileName(IXTypeChars))) MenuSetUpBackgroundFile(stringUserTypedIn) MenuSetUpFileName(IXTypeChars, stringUserTypedIn) Free(sysZone, stringUserTypedIn) ] //********************************************************* and GetFontFace() be //********************************************************* [ let stringUserTypedIn = TypeStringInBox(bFaceStrip, ExtractSubstring("MRR")) face = EncodeFace(stringUserTypedIn) Free(sysZone, stringUserTypedIn) ] //********************************************************* and CommandNum(comm)=selecton comm into //********************************************************* [ case bDelete: 14 case bList: 15 case bExtract: 30 case bMerge: 31 case bSupersede: 32 case bCompact: 24 case bWidth: 33 case bRename: 34 case bShow: 2 case bMakeCU: 3 case bMakeAL: 4 case bReadAL: 9 case bMakeKS: 10 case bReadKS: 11 case bMakeStrike: 6 case bReadWidths: 7 case bReadCU: 8 case bRotate: 21 case bGrow: 22 case bShrink: 23 case bCoordinate: 16 case bOrbitFormat: 17 case bDeOrbitFormat: 20 case bScale: 18 case bImposeWidths: 19 case bReadSF: 1 case bConvert: 13 case bEdit: 12 ] //********************************************************* and Flip(boxNum1, boxNum2) = valof //********************************************************* [ FillBox(menu!boxNum1, flip, 1) FillBox(menu!boxNum2, flip, 1) resultis boxNum2 ] //********************************************************* and GetNum(boxNumber, userPrompt; numargs na) = valof //********************************************************* [ DefaultArgs(lv na, 1, "") let stringUserTypedIn = TypeStringInBox(boxNumber, 0, userPrompt, bNotify) let n = ReadNumber(stringUserTypedIn) Free(sysZone, stringUserTypedIn) resultis n ] //********************************************************* and GetUnsignedInteger(boxNumber, userPrompt, lvUnsignedInteger, radix; numargs na) = valof //********************************************************* [ DefaultArgs(lv na, 1, "", 0, 10) let numberString = vec 10 test lvUnsignedInteger eq 0 ifso numberString = "" ifnot PrintNumber(numberString, @lvUnsignedInteger, radix) let stringUserTypedIn = TypeStringInBox(boxNumber, ExtractSubstring(numberString), userPrompt, bNotify) let unsignedInteger = StringToValue(stringUserTypedIn, radix) Free(sysZone, stringUserTypedIn) unless lvUnsignedInteger eq 0 do @lvUnsignedInteger = unsignedInteger resultis unsignedInteger ]