home *** CD-ROM | disk | FTP | other *** search
/ Monster Media 1993 #2 / Image.iso / database / pk4pak.zip / HELPGEN.SC < prev    next >
Text File  |  1993-01-15  |  13KB  |  398 lines

  1. ;============================================================================
  2. ; (c) Copyright Elect Software International Inc., 1992, Toronto. Anyone can
  3. ; use this code for anything as long as it is not resold as a software
  4. ; development resource, as long as the copyright notice isn't removed, as
  5. ; long as changes are clearly marked as to authorship, and as long as users
  6. ; indemnify Elect from any liability.
  7. ; Comments welcome. Henrik Bechmann, CIS:72701,3717; Tel:416-534-8176.
  8. ;============================================================================
  9.  
  10. Proc HelpGen.Constructor()
  11. EndProc ; HelpGen.Constructor
  12.  
  13. Proc HelpGen.Destructor()
  14.    Release Vars
  15.       HelpGen.Directory,
  16.       HelpGen.FileName,
  17.       HelpGen.ScriptName,
  18.       HelpGen.LibName,
  19.       HelpGen.WindowBag,
  20.       HelpGen.HotSpotStartLine,
  21.       HelpGen.HotSpotStartCol,
  22.       HelpGen.HotSpotEndLine,
  23.       HelpGen.HotSpotEndCol,
  24.       HelpGen.HotSpotString,
  25.       HelpGen.HotSpotReference,
  26.       HelpGen.ProcNames,
  27.       HelpGen.Width,
  28.       HelpGen.Height
  29.  
  30. EndProc ; HelpGen.Destructor
  31.  
  32. Proc HelpGen.GetDirName()
  33.    Private
  34.       HelpGen.DirControlVar
  35.    ShowDialog ""
  36.       Proc "HelpGen.GetDirProc" Trigger "Accept"
  37.       @5,20 Height 8 Width 41
  38.       @1,3 ?? "Enter directory path for library:"
  39.       Accept @2,3 Width 33 "A33" Picture "*{?,#,-,_,%,&,;?,\\,.,:}" Required
  40.          Tag "Directory"
  41.          To HelpGen.Directory
  42.       PushButton @4,5 Width 12 "~O~K"
  43.          OK Default
  44.          Value "OK"
  45.          Tag "OK" To
  46.          HelpGen.DirControlVar
  47.       PushButton @4,22 Width 12 "~C~ancel"
  48.          Cancel
  49.          Value "Cancel"
  50.          Tag "Cancel" To
  51.          HelpGen.DirControlVar
  52.    EndDialog
  53.    Return Retval
  54. EndProc ; HelpGen.GetDirName
  55.  
  56. Proc HelpGen.GetDirProc(TriggerType,TagValue,EventValue,ElementValue)
  57.    If Substr(HelpGen.Directory,Len(HelpGen.Directory),1) <> "\\" Then
  58.       HelpGen.Directory = HelpGen.Directory + "\\"
  59.       RefreshControl "Directory"
  60.    Endif
  61.    Switch
  62.       Case DirExists(HelpGen.Directory) = -1:
  63.          Message "Error in directory name"
  64.          SelectControl "Directory"
  65.          Return False
  66.       Case DirExists(HelpGen.Directory) = 0:
  67.          Message "Directory does not exist"
  68.          SelectControl "Directory"
  69.          Return False
  70.       Otherwise:
  71.          If Not HelpGen.GetFileName() Then
  72.             SelectControl "Directory"
  73.             Return False
  74.          Else
  75.             Return True
  76.          Endif
  77.     EndSwitch
  78. EndProc ; HelpGen.GetDirProc
  79.  
  80. Proc HelpGen.GetFileName()
  81.    Private
  82.       HelpGen.FileControlVar
  83.    ShowDialog ""
  84.       Proc "HelpGen.GetFileProc" Trigger "Accept"
  85.       @9,24 Height 8 Width 41
  86.       @1,3 ?? "Enter file name for library:"
  87.       Accept @2,3 Width 33 "A8" Picture "*{?,#,-,_,%,&,;?}" Required
  88.          Tag "File"
  89.          To HelpGen.FileName
  90.       PushButton @4,5 Width 12 "~O~K"
  91.          OK Default
  92.          Value "OK"
  93.          Tag "OK" To
  94.          HelpGen.FileControlVar
  95.       PushButton @4,22 Width 12 "~C~ancel"
  96.          Cancel
  97.          Value "Cancel"
  98.          Tag "Cancel" To
  99.          HelpGen.FileControlVar
  100.    EndDialog
  101.    Return Retval
  102. EndProc ; HelpGen.GetFileName
  103.  
  104. Proc HelpGen.GetFileProc(TriggerType,TagValue,EventValue,ElementValue)
  105.    HelpGen.ScriptName = HelpGen.FileName + ".SC"
  106.    HelpGen.LibName = HelpGen.FileName + ".LIB"
  107.    Switch
  108.       Case DirExists(HelpGen.ScriptName) = -1:
  109.          Message "Error in file name"
  110.          SelectControl "File"
  111.          Return False
  112.       Case DirExists(HelpGen.LibName) = -1:
  113.          Message "Error in file name"
  114.          SelectControl "File"
  115.          Return False
  116.       Case DirExists(HelpGen.Directory + HelpGen.ScriptName) = 1:
  117.          Message "Directory exists for file"
  118.          SelectControl "File"
  119.          Return False
  120.       Case DirExists(HelpGen.Directory + HelpGen.LibName) = 1:
  121.          Message "Directory exists for file"
  122.          SelectControl "File"
  123.          Return False
  124.       Case IsFile(HelpGen.Directory + HelpGen.ScriptName):
  125.          Message HelpGen.Directory + HelpGen.ScriptName," exists"
  126.          If HelpGen.MenuConfirm("Overwrite file?") Then
  127.             Return True
  128.          Else
  129.             SelectControl "File"
  130.             Return False
  131.          Endif
  132.       Case IsFile(HelpGen.Directory + HelpGen.LibName):
  133.          Message HelpGen.Directory + HelpGen.LibName, " exists"
  134.          If HelpGen.MenuConfirm("Overwrite library?") Then
  135.             Return True
  136.          Else
  137.             SelectControl "File"
  138.             Return False
  139.          Endif
  140.       Otherwise:
  141.          Return True
  142.     EndSwitch
  143. EndProc ; HelpGen.GetFileProc
  144.  
  145. Proc HelpGen.MenuConfirm(Question)
  146.    Private
  147.       Command
  148.    ShowPopup Question @13,33
  149.       "No":"Do NOT proceed":"No",
  150.       "Yes":"Proceed":"Yes"
  151.    EndMenu
  152.    To Command
  153.    If Command = "Yes" Then
  154.       Return True
  155.    Else
  156.       Return False
  157.    Endif
  158. EndProc ; HelpGen.MenuConfirm
  159.  
  160. ; ---------------------------- GENERATE SCRIPT ------------------------------
  161.  
  162. Proc HelpGen.GenerateScript()
  163.    Private
  164.       ScriptFileSpec,
  165.       nLines,
  166.       LineNum,
  167.       HelpText,
  168.       Element,
  169.       Value,
  170.       PanelName,
  171.       HotSpotNum,
  172.       nProcs
  173.  
  174.    ScriptFileSpec = HelpGen.Directory + HelpGen.ScriptName
  175.    Dynarray HelpGen.ProcNames[]
  176.    nProcs = 0
  177.    Echo Off
  178.    If IsFile(ScriptFileSpec) Then
  179.       {Tools}{Delete}{Script}
  180.       Select Substr(ScriptFileSpec,1,Len(ScriptFileSpec) -3)
  181.       {OK}
  182.    Endif
  183.    Moveto HelpMan.Directory + HelpMan.HelpListTabName
  184.    Home
  185.    Scan
  186.       PanelName = [Help panel name]
  187.       HelpGen!ShowPanel()
  188.       Message "Collecting data for panel ", PanelName
  189.       HelpGen!CollectPanel()
  190.       HyperMemo.CollectHotSpots()
  191.       HelpGen!GetHotSpotData()
  192.       Do_It!
  193.       HelpGen!GetHotSpotReferences()
  194.       Message "Generating procedure HyperPanel.",PanelName,"()"
  195.       nProcs = nProcs + 1
  196.       HelpGen.ProcNames[nProcs] = "HyperPanel." + PanelName
  197.       HelpGen!GenerateProc()
  198.    EndScan
  199.    Librarian.HasControl = True
  200.    Librarian.LibrarySpec = Substr(HelpGen.Directory + HelpGen.LibName,1,
  201.       Len(HelpGen.Directory + HelpGen.LibName) - 4)
  202.    Librarian.LibSpec = Librarian.LibrarySpec
  203.    ListForm.LibrarySpec = HelpGen.Directory + HelpGen.LibName
  204.    Message "Generating library ",HelpGen.Directory + HelpGen.LibName
  205.    Librarian.LibrarySpec = HelpGen!FixSpecString(Librarian.LibrarySpec)
  206.    HelpGen!GenerateScriptFooter()
  207.    Play Substr(ScriptFileSpec,1,Len(ScriptFileSpec) - 3)
  208.    Librarian.WriteToHelpLib = True
  209.    Message "Adding Hypertext: driver procedures"
  210.    Play HelpMan.CodeDirectory + "Hypertxt"
  211.    Release Vars
  212.       Librarian.HasControl,
  213.       Librarian.LibrarySpec,
  214.       Librarian.WriteToHelpLib,
  215.       Librarian.LibSpec
  216.    Message "Finished generating ",HelpGen.Directory + HelpGen.LibName
  217.    Echo Normal
  218. EndProc ; HelpGen.GenerateScript
  219.  
  220. Proc HelpGen!GenerateProc()
  221.    Print File ScriptFileSpec
  222.       "Proc HyperPanel." + PanelName + "()\n",
  223.       "   Private\n",
  224.       "      WindowBag\n\n",
  225.       "   Dynarray WindowBag[]\n"
  226.    ForEach Element in HelpGen.WindowBag
  227.       Value = HelpGen.WindowBag[Element]
  228.       If Substr(Type(Value),1,1) = "A" Then
  229.          Value = "\"" + Value + "\""
  230.       Else
  231.          Value = StrVal(Value)
  232.       Endif
  233.       Print File ScriptFileSpec
  234.          "   WindowBag[\"" + Element + "\"] = " + Value + "\n"
  235.    EndForEach
  236.    Print File ScriptFileSpec
  237.          "   WindowBag[\"Title\"] = ",
  238.          "StrVal(Hypertext_StackDepth + 1) + ",
  239.          "\">\" + WindowBag[\"Title\"]\n"
  240.    Print File ScriptFileSpec
  241.       "   Window SetAttributes HyperText.WindowHandle From WindowBag\n",
  242.       "\n"
  243.    Print File ScriptFileSpec
  244.       "   Hypertext.Width = " + StrVal(HelpGen.Width) + "\n",
  245.       "   Hypertext.Height = " + StrVal(HelpGen.Height) + "\n\n",
  246.       "   Dynarray Hypertext.HotSpotString[]\n",
  247.       "   Dynarray Hypertext.HotSpotStartLine[]\n",
  248.       "   Dynarray Hypertext.HotSpotStartCol[]\n",
  249.       "   Dynarray Hypertext.HotSpotEndLine[]\n",
  250.       "   Dynarray Hypertext.HotSpotEndCol[]\n",
  251.       "   Dynarray Hypertext.HotSpotReference[]\n"
  252.    For HotSpotNum From 1 to HyperMemo.nHotSpots
  253.       Print File ScriptFileSpec
  254.          "\n",
  255.          "   Hypertext.HotSpotString[" + StrVal(HotSpotNum) + "] = \"" +
  256.             HelpGen.HotSpotString[HotSpotNum] + "\"\n",
  257.          "   Hypertext.HotSpotStartLine[" + StrVal(HotSpotNum) + "] = " +
  258.                StrVal(HelpGen.HotSpotStartLine[HotSpotNum]) + "\n",
  259.          "   Hypertext.HotSpotStartCol[" + StrVal(HotSpotNum) + "] = " +
  260.             StrVal(HelpGen.HotSpotStartCol[HotSpotNum]) + "\n",
  261.          "   Hypertext.HotSpotEndLine[" + StrVal(HotSpotNum) + "] = " +
  262.             StrVal(HelpGen.HotSpotEndLine[HotSpotNum]) + "\n",
  263.          "   Hypertext.HotSpotEndCol[" + StrVal(HotSpotNum) + "] = " +
  264.             StrVal(HelpGen.HotSpotEndCol[HotSpotNum]) + "\n",
  265.          "   Hypertext.HotSpotReference[" + StrVal(HotSpotNum) + "] = \"" +
  266.             HelpGen.HotSpotReference[HotSpotNum] + "\"\n"
  267.    EndFor
  268.    Print File ScriptFileSpec
  269.       "Style Attribute Hypertext.TextColor\n",
  270.       "TEXT\n"
  271.    For LineNum From 1 to nLines
  272.       Print File ScriptFileSpec HelpText[LineNum],"\n"
  273.    EndFor
  274.    Print File ScriptFileSpec
  275.       "ENDTEXT\nStyle\n",
  276.       "EndProc ; HelpPanel." + [Help panel name],"\n\n"
  277. EndProc ; HelpGen!GenerateProc
  278.  
  279. Proc HelpGen!ShowPanel()
  280.    Private
  281.       WindowBag
  282.    Echo off
  283.  
  284.    Moveto [Help text]
  285.    FieldView
  286.    HelpPanel.SetAttributes()
  287.    Window SetColors GetWindow() From HelpPanel.ColorBag
  288.    Window GetAttributes GetWindow() To WindowBag
  289.    Dynarray HelpGen.WindowBag[]
  290.    HelpGen.WindowBag["Title"] = WindowBag["Title"]
  291.    HelpGen.WindowBag["OriginRow"] = WindowBag["OriginRow"]
  292.    HelpGen.WindowBag["OriginCol"] = WindowBag["OriginCol"]
  293.    HelpGen.WindowBag["Height"] = WindowBag["Height"]
  294.    HelpGen.WindowBag["Width"] = WindowBag["Width"]
  295.  
  296.    Echo normal
  297. EndProc ; HelpGen!ShowPanel
  298.  
  299. Proc HelpGen!CollectPanel()
  300.    Private
  301.       EditorBag,
  302.       TextLine
  303.    Dynarray HelpText[]
  304.    CtrlPgDn
  305.    Editor Info Complete To EditorBag
  306.    nLines = EditorBag["CurLine"]
  307.    HelpGen.Height = nLines
  308.    CtrlPgUp
  309.    Home
  310.    HelpGen.Width = 1
  311.    For LineNum from 1 to nLines
  312.       ShiftPress "End"
  313.       Editor Extract To TextLine
  314.       HelpText[LineNum] = TextLine
  315.       HelpGen.Width = Max(HelpGen.Width,Len(TextLine))
  316.       Home
  317.       Down
  318.    EndFor
  319. EndProc ; HelpGen!CollectPanel
  320.  
  321. Proc HelpGen!GetHotSpotData()
  322.    Private
  323.       HotSpotNum,
  324.       EditorBag
  325.    Dynarray HelpGen.HotSpotStartLine[]
  326.    Dynarray HelpGen.HotSpotStartCol[]
  327.    Dynarray HelpGen.HotSpotEndLine[]
  328.    Dynarray HelpGen.HotSpotEndCol[]
  329.    Dynarray HelpGen.HotSpotString[]
  330.    Dynarray HelpGen.HotSpotReference[]
  331.    For HotSpotNum From 1 To HyperMemo.nHotSpots
  332.       Editor Select HyperMemo.HotSpotLeft[HotSpotNum]
  333.          HyperMemo.HotSpotRight[HotSpotNum]
  334.       Editor Goto Position HyperMemo.HotSpotLeft[HotSpotNum]
  335.       Editor Info Complete To EditorBag
  336.       HelpGen.HotSpotStartLine[HotSpotNum] = EditorBag["CurLine"]
  337.       HelpGen.HotSpotStartCol[HotSpotNum] = EditorBag["Col"]
  338.       Editor Goto Position HyperMemo.HotSpotRight[HotSpotNum]
  339.       Editor Info Complete To EditorBag
  340.       HelpGen.HotSpotEndLine[HotSpotNum] = EditorBag["CurLine"]
  341.       HelpGen.HotSpotEndCol[HotSpotNum] = EditorBag["Col"]
  342.       HelpGen.HotSpotString[HotSpotNum] = HyperMemo.HotSpotString[HotSpotNum]
  343.    EndFor
  344. EndProc ; HelpGen!GetHotSpotData
  345.  
  346. Proc HelpGen!GetHotSpotReferences()
  347.    Private
  348.       HotSpotNum
  349.    Moveto HelpMan.Directory + HelpMan.HelpSpecTabName
  350.    For HotSpotNum From 1 To HyperMemo.nHotSpots
  351.       Locate PanelName,HelpGen.HotSpotString[HotSpotNum]
  352.       If RetVal Then
  353.          HelpGen.HotSpotReference[HotSpotNum] = [Referenced help panel]
  354.       Else
  355.          HelpGen.HotSpotReference[HotSpotNum] = ""
  356.       Endif
  357.    EndFor
  358.    Moveto HelpMan.Directory + HelpMan.HelpListTabName
  359. EndProc ; HelpGen!GetHotSpotReferences
  360.  
  361. Proc HelpGen!GenerateScriptFooter()
  362.    Private
  363.       ProcNum
  364.    Print File ScriptFileSpec
  365.       "If IsAssigned(Librarian.HasControl) Then\n",
  366.       "   CreateLib \"" + Librarian.LibrarySpec + "\" Size 640\n",
  367.       "   WriteLib \"" + Librarian.LibrarySpec + "\"\n"
  368.    For ProcNum From 1 to nProcs - 1
  369.       Print File ScriptFileSpec
  370.          "      " + HelpGen.ProcNames[ProcNum] + ",\n"
  371.    EndFor
  372.    Print File ScriptFileSpec
  373.       "      " + HelpGen.ProcNames[nProcs] + "\n\n"
  374.    Print File ScriptFileSpec
  375.       "   Release Procs\n"
  376.    For ProcNum From 1 to nProcs - 1
  377.       Print File ScriptFileSpec
  378.          "      " + HelpGen.ProcNames[ProcNum] + ",\n"
  379.    EndFor
  380.    Print File ScriptFileSpec
  381.       "      " + HelpGen.ProcNames[nProcs] + "\n"
  382.    Print File ScriptFileSpec
  383.       "Endif\n"
  384. EndProc ; HelpGen!GenerateScriptFooter
  385.  
  386. Proc HelpGen!FixSpecString(SpecString)
  387.    Private
  388.       String,
  389.       Head,
  390.       Tail
  391.    String = ""
  392.    Tail = SpecString
  393.    While Match(Tail,"..\\..",Head,Tail)
  394.       String = String + Head + "\\\\"
  395.    EndWhile
  396.    String = String + Tail
  397.    Return String
  398. EndProc ; HelpGen!FixSpecString