Comment ==================================================== Novell to MarxMenu Translator: This program was written to translate Novell menus to MarxMenus. It is not an exact translation, but does the bulk of the work. It is up to you to edit the output file and tune the menu the way you want. I have made no attempt to copy color information. I am not presenting selections in sorted order, but in the order in which they are defined. You may need to change the capitalization of some selections so that they have a unique key to select by. The program creates a MarxMenu file names .TMP where is the name of your Novell menu file. Then it compiles .TMP into .MRX file that should be ready to run. If the menu needs to be altered, you will have to rename the .TMP file to a .MNU file and then you can work with it like any other MarxMenu source file. ==================================================== EndComment Var NovLines Menus Tmp FileName MenuPtr ChoicePtr CommandPtr LinePtr BoxDim X Y Z VarNum PromptLine Out Cap InputAVar ;---- Array Positions Qualifier MenuName YPos XPos MenuColor MenuChoices Qualifier ChoiceName ChoiceCmd ClearScreenOnExit Off StandardIO Writeln FileName[1] = UpperCase(ParamStr(2)) if FileName[1] = '' Writeln('Usage: MarxMenu NovTrans ') Writeln('Converts Novell menus to MarxMens.') Writeln('Be sure to backup your original menus before running!!') ExitMenu endif if pos('.',FileName[1]) > 0 FileName[1] = left(FileName[1],pred(pos('.',FileName[1]))) endif FileName[2] = FileName[1] + '.MNU' FileName[3] = ForceExtension(FileName[2],'TMP') ReadTextFile FileName[2] NovLines Writeln 'Creating ' FileName[3] FileAssign(Out,FileName[3]) FileCreate(Out) FileWriteln(Out,'Comment') FileWriteln(Out,'==========================================================') FileWriteln(Out,'') FileWriteln(Out,'This File was converted from a Novell Menu.') FileWriteln(Out,'It should behave in a similar way to the original menu but') FileWriteln(Out,'not necessarilly exactly the same. It will be close enough') FileWriteln(Out,'for you to fine tune it the way you want.') FileWriteln(Out,'') FileWriteln(Out,'=========================================================') FileWriteln(Out,'EndComment') FileWriteln(Out,'') FileWriteln(Out,';------ Create Variables') FileWriteln(Out,'') FileWriteln(Out,'Var') FileWriteln(Out,' VertLine = "³³³³³³³³³³³³³³³³³³³³³³³³³³³³³³³³³³³³³³³³³³³³³"') FileWriteln(Out,' AnswerLine') FileWriteln(Out,' PromptLine') FileWriteln(Out,' %NovVar1') FileWriteln(Out,' %NovVar2') FileWriteln(Out,' %NovVar3') FileWriteln(Out,' %NovVar4') FileWriteln(Out,' %NovVar5') FileWriteln(Out,' %NovVar6') FileWriteln(Out,' %NovVar7') FileWriteln(Out,' %NovVar8') FileWriteln(Out,' %NovVar9') FileWriteln(Out,' %NovVar10') FileWriteln(Out,'') FileWriteln(Out,';------ Select colors and prepare screen') FileWriteln(Out,'') FileWriteln(Out,'SavePosition On') FileWriteln(Out,'if ColorScreen') FileWriteln(Out,' TextColor Cyan Blue') FileWriteln(Out,' BoxBorderColor Blue Cyan') FileWriteln(Out,' BoxInsideColor Blue Cyan') FileWriteln(Out,' ClearScreen 176') FileWriteln(Out,' ClockColor Blue Cyan') FileWriteln(Out,'else') FileWriteln(Out,' ClearScreen 176') FileWriteln(Out,' TextColor Black Grey') FileWriteln(Out,' BoxBorderColor Black Grey') FileWriteln(Out,' BoxInsideColor Black Grey') FileWriteln(Out,' ClockColor Black Grey') FileWriteln(Out,'endif') FileWriteln(Out,'SingleLineBox') FileWriteln(Out,'Explode Off') FileWriteln(Out,'DrawBox 1 1 80 3') FileWriteln(Out,'Write " MarxMenu System"') FileWriteln(Out,'ClockPos 35 2') FileWriteln(Out,'DoubleLineBox') FileWriteln(Out,'ResetColors') FileWriteln(Out,'BlankMessage "Running ' + FileName[2] + '"') FileWriteln(Out,'UseArrows') FileWriteln(Out,'BlankTime = 5') FileWriteln(Out,'') FileFlush(Out); LinePtr = 1 while LinePtr < NumberOfElements(NovLines) if left(NovLines[LinePtr],1) = '%' ChoicePtr = 0 CommandPtr = 0 MenuPtr = MenuPtr + 1 Tmp = mid(NovLines[LinePtr],2,255) X = pos(',',Tmp) if X = 0 then X = length(Tmp) + 1 Menus[MenuPtr].MenuName = ':' + left(Tmp,X - 1) Tmp = mid(Tmp,X + 1,255) Menus[MenuPtr].YPos = value(NextWord(Tmp)) Menus[MenuPtr].XPos = value(NextWord(Tmp)) Menus[MenuPtr].MenuColor = value(NextWord(Tmp)) if Menus[MenuPtr].YPos = 0 then Menus[MenuPtr].YPos = ScreenHeight / 2 if Menus[MenuPtr].XPos = 0 then Menus[MenuPtr].XPos = ScreenWidth / 2 else if left(NovLines[LinePtr],1) > ' ' CommandPtr = 0 ChoicePtr = ChoicePtr + 1 while pos(' ',NovLines[LinePtr]) > 0 delete(NovLines[LinePtr],pos(' ',NovLines[LinePtr]),1) endwhile Menus[MenuPtr].MenuChoices[ChoicePtr].ChoiceName = NovLines[LinePtr] else if ChoicePtr = 0 Writeln Writeln 'Error in menu line: ' LinePtr ExitMenu endif CommandPtr = CommandPtr + 1 Menus[MenuPtr].MenuChoices[ChoicePtr].ChoiceCmd[CommandPtr] = NovLines[LinePtr] endif endif LinePtr = LinePtr + 1 endwhile Writeln MenuPtr = 1 while MenuPtr <= NumberOfElements(Menus) Writeln('Translating: ' + mid(Menus[MenuPtr].MenuName,2,255)) FileWriteln(Out,';------ Translating: ' + mid(Menus[MenuPtr].MenuName,2,255)) FileWriteln(Out,'') if MenuPtr > 1 Tmp = Menus[MenuPtr].MenuName while pos(' ',Tmp) > 0 delete(Tmp,pos(' ',Tmp),1) endwhile FileWriteln(Out,Tmp) endif FileWriteln(Out,'Explode On') BoxDim[4] = NumberOfElements(Menus[MenuPtr].MenuChoices) ChoicePtr = 1 BoxDim[3] = 0 while ChoicePtr <= BoxDim[4] BoxDim[3] = Max(BoxDim[3],length(Menus[MenuPtr].MenuChoices[ChoicePtr].ChoiceName)) ChoicePtr = ChoicePtr + 1 endwhile BoxDim[3] = Max(BoxDim[3],length(mid(Menus[MenuPtr].MenuName,2,255))) BoxDim[3] = BoxDim[3] + 2 BoxDim[1] = Max(2,Menus[MenuPtr].XPos - ((BoxDim[3] + 3) / 2) + 1) BoxDim[2] = Max(5,Menus[MenuPtr].YPos - ((BoxDim[4] + 3) / 2) + 1) Tmp = 'DrawBox ' + Str(BoxDim[1]) + ' ' + Str(BoxDim[2]) Tmp = Tmp + ' '+ Str(BoxDim[3] + 4) + ' ' + Str(BoxDim[4] + 4) FileWriteln(Out,Tmp) FileWriteln(Out,'TextColor LCyan Blue') FileWriteln(Out,'WriteCenter "' + mid(Menus[MenuPtr].MenuName,2,255) + '"') FileWriteln(Out,'TextColor LGreen Blue') FileWriteln(Out,'Writeln') FileWriteln(Out,'ClearLine 196') FileWriteln(Out,'GotoXY 2 2') FileWriteln(Out,'WriteVertical mid(VertLine,1,' + Str(BoxDim[4] + 1) + ')') FileWriteln(Out,'ResetColors') FileWriteln(Out,'Explode Off') FileWriteln(Out,'NoBoxBorder') Tmp = 'Window ' + Str(BoxDim[1] + 3) + ' ' + Str(BoxDim[2] + 3) Tmp = Tmp + ' '+ Str(BoxDim[3]) + ' ' + Str(BoxDim[4]) FileWriteln(Out,Tmp) FileWriteln(Out,'Explode On') ChoicePtr = 1 while ChoicePtr < BoxDim[4] FileWriteln(Out,'Writeln " ' + Menus[MenuPtr].MenuChoices[ChoicePtr].ChoiceName + '"') ChoicePtr = ChoicePtr + 1 endwhile FileWriteln(Out,'Write " ' + Menus[MenuPtr].MenuChoices[ChoicePtr].ChoiceName + '"') FileWriteln(Out,'DoubleLineBox') ChoicePtr = 1 while ChoicePtr <= NumberOfElements(Menus[MenuPtr].MenuChoices) Tmp = Menus[MenuPtr].MenuChoices[ChoicePtr].ChoiceName X = 1 repeat Cap = (mid(Tmp,X,1) >= 'A') and (mid(Tmp,X,1) <= 'Z') if not Cap then Cap = (mid(Tmp,X,1) >= '0') and (mid(Tmp,X,1) <= '9') if not Cap then X = X + 1 until Cap or (X > length(Tmp)) FileWriteln(Out,'OnKey "' + mid(Tmp,X,1) + '"') CommandPtr = 1 while CommandPtr <= NumberOfElements(Menus[MenuPtr].MenuChoices[ChoicePtr].ChoiceCmd) Tmp = Menus[MenuPtr].MenuChoices[ChoicePtr].ChoiceCmd[CommandPtr] Trim(Tmp) if UpperCase(Tmp) = '!LOGOUT' then Tmp = '|LogOut' if left(Tmp,1) = '%' Tmp = '^' + mid(Tmp,2,255) while pos(' ',Tmp) > 0 delete(Tmp,pos(' ',Tmp),1) endwhile endif if pos('@',Tmp) > 0 X = 1 while X <= length(Tmp) while (X <= length(Tmp)) and (mid(Tmp,X,1) <> '@') X = X + 1 endwhile Z[1] = mid(Tmp,X,1) Z[2] = mid(Tmp,X + 1,1) if (Z[1] = '@') and (((Z[2] > '0') and (Z[3] <= '9')) or (Z[2] = '"')) if Z[2] = '"' insert(' ',Tmp,X + 1) VarNum = 10 else VarNum = ord(Z[2]) - 48 endif InputAVar = mid(Tmp,X + 2,1) = '"' if InputAVar Y = X + 3 while (mid(Tmp,Y,1) <> '"') and (Y <= length(Tmp)) Y = Y + 1 endwhile PromptLine = mid(Tmp,X + 3,Y - (X + 3)) else Y = X + 1 endif delete(Tmp,X,Y - X + 1) insert('%NovVar' + Str(VarNum) + ' ',Tmp,X) if InputAVar FileWriteln(Out,' |PromptLine = "',PromptLine,'"') FileWriteln(Out,' |ReadTextLine') FileWriteln(Out,' |%NovVar',Str(VarNum),' = AnswerLine') endif endif endwhile endif FileWriteln(Out,' ' + Tmp) CommandPtr = CommandPtr + 1 endwhile FileWriteln(Out,'') ChoicePtr = ChoicePtr + 1 endwhile if MenuPtr = 1 FileWriteln(Out,'OnKey ESC') FileWriteln(Out,' ^Leave') FileWriteln(Out,'') endif MenuPtr = MenuPtr + 1 endwhile FileWriteln(Out,'') FileWriteln(Out,';------ Read a Text Line Procedure') FileWriteln(Out,'') FileWriteln(Out,'Procedure ReadTextLine') FileWriteln(Out,' DrawBox(1,21,80,3)') FileWriteln(Out,' TextColor LCyan Blue') FileWriteln(Out,' Write " " PromptLine " "') FileWriteln(Out,' AnswerLine = Readln') FileWriteln(Out,' EraseTopWindow') FileWriteln(Out,'EndProc') FileWriteln(Out,'') FileWriteln(Out,';------ Reset Colors Procedure') FileWriteln(Out,'') FileWriteln(Out,'Procedure ResetColors') FileWriteln(Out,' if ColorScreen') FileWriteln(Out,' BoxBorderColor Yellow Blue') FileWriteln(Out,' BoxInsideColor Yellow Blue') FileWriteln(Out,' CapsColor White Blue') FileWriteln(Out,' InverseColor White Mag') FileWriteln(Out,' else') FileWriteln(Out,' BoxBorderColor Grey Black') FileWriteln(Out,' BoxInsideColor Grey Black') FileWriteln(Out,' CapsColor White Black') FileWriteln(Out,' endif') FileWriteln(Out,'EndProc') FileWriteln(Out,'') FileWriteln(Out,';------ MenuExit Procedure') FileWriteln(Out,'') FileWriteln(Out,':Leave') FileWriteln(Out,' Explode On') FileWriteln(Out,' DrawBox 36 11 13 6') FileWriteln(Out,' TextColor LCyan Blue') FileWriteln(Out,' WriteCenter "Exit Menu"') FileWriteln(Out,' TextColor LGreen Blue') FileWriteln(Out,' Writeln') FileWriteln(Out,' ClearLine 196') FileWriteln(Out,' GotoXY 2 2') FileWriteln(Out,' WriteVertical mid(VertLine,1,3)') FileWriteln(Out,' ResetColors'); FileWriteln(Out,' Explode Off') FileWriteln(Out,' NoBoxBorder') FileWriteln(Out,' DrawBox 39 14 9 2') FileWriteln(Out,' Writeln " Yes"') FileWriteln(Out,' Write " No"') FileWriteln(Out,' DoubleLineBox') FileWriteln(Out,' OnKey "Y"') FileWriteln(Out,' |ExitMenu') FileWriteln(Out,'') FileWriteln(Out,' OnKey "N"') FileWriteln(Out,' |LastKey = Esc') FileWriteln(Out,'') FileWriteln(Out,';------ Logout Procedure') FileWriteln(Out,'') FileWriteln(Out,'Procedure Logout') FileWriteln(Out,' StuffKbd = "Logout" + CR') FileWriteln(Out,' ExitMenu') FileWriteln(Out,'EndProc') FileWriteln(Out,'') FileClose(Out) UseCommand Yes ClearScreenFirst No Execute 'MARXCOMP.EXE ' + FileName[3] Writeln Writeln 'Done!'