310 lines
6 KiB
Text
310 lines
6 KiB
Text
VERSION DVX 1.00
|
|
' helpedit.frm -- DVX Help Editor
|
|
'
|
|
' A .dhs help source editor with syntax highlighting and
|
|
' live preview via the DVX Help Viewer.
|
|
'
|
|
' Add commdlg.bas and help.bas to your project, then click Run.
|
|
|
|
Begin Form HelpEdit
|
|
Caption = "DVX Help Editor"
|
|
Layout = VBox
|
|
AutoSize = False
|
|
Resizable = True
|
|
Centered = True
|
|
Width = 640
|
|
Height = 440
|
|
Begin Menu mnuFile
|
|
Caption = "&File"
|
|
Begin Menu mnuNew
|
|
Caption = "&New"
|
|
End
|
|
Begin Menu mnuOpen
|
|
Caption = "&Open..."
|
|
End
|
|
Begin Menu mnuSep1
|
|
Caption = "-"
|
|
End
|
|
Begin Menu mnuSave
|
|
Caption = "&Save"
|
|
End
|
|
Begin Menu mnuSaveAs
|
|
Caption = "Save &As..."
|
|
End
|
|
Begin Menu mnuSep2
|
|
Caption = "-"
|
|
End
|
|
Begin Menu mnuExit
|
|
Caption = "E&xit"
|
|
End
|
|
End
|
|
Begin Menu mnuBuild
|
|
Caption = "&Build"
|
|
Begin Menu mnuCompile
|
|
Caption = "&Compile"
|
|
End
|
|
Begin Menu mnuPreview
|
|
Caption = "&Preview"
|
|
End
|
|
End
|
|
Begin Menu mnuHelp
|
|
Caption = "&Help"
|
|
Begin Menu mnuHelpTopic
|
|
Caption = "Help &Topics"
|
|
End
|
|
End
|
|
Begin TextArea Editor
|
|
Weight = 1
|
|
End
|
|
Begin Label LblStatus
|
|
Weight = 0
|
|
End
|
|
End
|
|
|
|
DIM currentFile AS STRING
|
|
DIM hlpFile AS STRING
|
|
DIM savedHash AS LONG
|
|
DIM dirty AS INTEGER
|
|
currentFile = ""
|
|
hlpFile = ""
|
|
savedHash = 0
|
|
dirty = 0
|
|
|
|
Load HelpEdit
|
|
HelpEdit.Show
|
|
|
|
' Configure the editor
|
|
Editor.SetSyntaxMode "dhs"
|
|
Editor.SetShowLineNumbers True
|
|
Editor.SetAutoIndent True
|
|
Editor.SetCaptureTabs True
|
|
Editor.SetTabWidth 2
|
|
|
|
' Start with a template
|
|
Editor.Text = ".topic intro" + CHR$(10) + ".title My Help File" + CHR$(10) + ".toc 0 My Help File" + CHR$(10) + ".default" + CHR$(10) + CHR$(10) + ".h1 Welcome" + CHR$(10) + CHR$(10) + "This is your help file. Edit the .dhs source here," + CHR$(10) + "then click Compile and Preview to see the result." + CHR$(10)
|
|
|
|
MarkClean
|
|
LblStatus.Caption = "Ready."
|
|
|
|
|
|
FUNCTION TextHash() AS LONG
|
|
DIM h AS LONG
|
|
DIM t AS STRING
|
|
t = Editor.Text
|
|
h = 0
|
|
DIM i AS INTEGER
|
|
FOR i = 1 TO LEN(t)
|
|
h = h * 31 + ASC(MID$(t, i, 1))
|
|
NEXT i
|
|
TextHash = h
|
|
END FUNCTION
|
|
|
|
|
|
FUNCTION IsDirty() AS INTEGER
|
|
IsDirty = (TextHash() <> savedHash)
|
|
END FUNCTION
|
|
|
|
|
|
FUNCTION AskSave() AS INTEGER
|
|
IF NOT IsDirty() THEN
|
|
AskSave = 0
|
|
EXIT FUNCTION
|
|
END IF
|
|
DIM result AS INTEGER
|
|
result = basPromptSave("Help Editor")
|
|
IF result = DVX_SAVE_YES THEN
|
|
FileSave
|
|
AskSave = 0
|
|
ELSEIF result = DVX_SAVE_NO THEN
|
|
AskSave = 0
|
|
ELSE
|
|
AskSave = 1
|
|
END IF
|
|
END FUNCTION
|
|
|
|
|
|
SUB UpdateTitle
|
|
DIM title AS STRING
|
|
IF currentFile <> "" THEN
|
|
title = currentFile + " - DVX Help Editor"
|
|
ELSE
|
|
title = "DVX Help Editor"
|
|
END IF
|
|
IF dirty THEN
|
|
title = "* " + title
|
|
END IF
|
|
HelpEdit.Caption = title
|
|
END SUB
|
|
|
|
|
|
SUB MarkClean
|
|
dirty = 0
|
|
savedHash = TextHash()
|
|
UpdateTitle
|
|
END SUB
|
|
|
|
|
|
SUB Editor_Change
|
|
IF NOT dirty THEN
|
|
dirty = -1
|
|
UpdateTitle
|
|
END IF
|
|
END SUB
|
|
|
|
|
|
SUB mnuNew_Click
|
|
IF AskSave() THEN
|
|
EXIT SUB
|
|
END IF
|
|
currentFile = ""
|
|
hlpFile = ""
|
|
Editor.Text = ".topic intro" + CHR$(10) + ".title My Help File" + CHR$(10) + ".toc 0 My Help File" + CHR$(10) + ".default" + CHR$(10) + CHR$(10) + ".h1 Welcome" + CHR$(10) + CHR$(10)
|
|
MarkClean
|
|
LblStatus.Caption = "New file."
|
|
UpdateTitle
|
|
END SUB
|
|
|
|
|
|
SUB mnuOpen_Click
|
|
IF AskSave() THEN
|
|
EXIT SUB
|
|
END IF
|
|
|
|
DIM path AS STRING
|
|
path = basFileOpen("Open Help Source", "Help Source (*.dhs)|All Files (*.*)")
|
|
IF path = "" THEN
|
|
EXIT SUB
|
|
END IF
|
|
|
|
DIM text AS STRING
|
|
DIM ln AS STRING
|
|
text = ""
|
|
|
|
OPEN path FOR INPUT AS #1
|
|
DO WHILE NOT EOF(1)
|
|
LINE INPUT #1, ln
|
|
IF text <> "" THEN
|
|
text = text + CHR$(10)
|
|
END IF
|
|
text = text + ln
|
|
LOOP
|
|
CLOSE #1
|
|
|
|
Editor.Text = text
|
|
currentFile = path
|
|
hlpFile = ""
|
|
MarkClean
|
|
LblStatus.Caption = path
|
|
UpdateTitle
|
|
END SUB
|
|
|
|
|
|
SUB FileSave
|
|
IF currentFile = "" THEN
|
|
FileSaveAs
|
|
EXIT SUB
|
|
END IF
|
|
|
|
OPEN currentFile FOR OUTPUT AS #1
|
|
PRINT #1, Editor.Text
|
|
CLOSE #1
|
|
|
|
MarkClean
|
|
LblStatus.Caption = "Saved: " + currentFile
|
|
UpdateTitle
|
|
END SUB
|
|
|
|
|
|
SUB FileSaveAs
|
|
DIM path AS STRING
|
|
path = basFileSave("Save Help Source", "Help Source (*.dhs)|All Files (*.*)")
|
|
IF path = "" THEN
|
|
EXIT SUB
|
|
END IF
|
|
|
|
currentFile = path
|
|
FileSave
|
|
END SUB
|
|
|
|
|
|
SUB mnuSave_Click
|
|
FileSave
|
|
END SUB
|
|
|
|
|
|
SUB mnuSaveAs_Click
|
|
FileSaveAs
|
|
END SUB
|
|
|
|
|
|
SUB mnuExit_Click
|
|
Unload HelpEdit
|
|
END SUB
|
|
|
|
|
|
SUB DoCompile
|
|
' Save first
|
|
IF currentFile = "" THEN
|
|
FileSaveAs
|
|
IF currentFile = "" THEN
|
|
LblStatus.Caption = "Save cancelled."
|
|
EXIT SUB
|
|
END IF
|
|
ELSE
|
|
OPEN currentFile FOR OUTPUT AS #1
|
|
PRINT #1, Editor.Text
|
|
CLOSE #1
|
|
MarkClean
|
|
END IF
|
|
|
|
' Derive .hlp filename from .dhs filename
|
|
DIM baseName AS STRING
|
|
baseName = currentFile
|
|
|
|
IF LEN(baseName) > 4 THEN
|
|
IF UCASE$(RIGHT$(baseName, 4)) = ".DHS" THEN
|
|
baseName = LEFT$(baseName, LEN(baseName) - 4)
|
|
END IF
|
|
END IF
|
|
|
|
hlpFile = baseName + ".hlp"
|
|
|
|
LblStatus.Caption = "Compiling..."
|
|
DoEvents
|
|
|
|
IF HelpCompile(currentFile, hlpFile) THEN
|
|
LblStatus.Caption = "Compiled: " + hlpFile
|
|
ELSE
|
|
LblStatus.Caption = "Compile failed!"
|
|
hlpFile = ""
|
|
END IF
|
|
END SUB
|
|
|
|
|
|
SUB mnuCompile_Click
|
|
DoCompile
|
|
END SUB
|
|
|
|
|
|
SUB mnuPreview_Click
|
|
IF hlpFile = "" THEN
|
|
DoCompile
|
|
END IF
|
|
|
|
IF hlpFile = "" THEN
|
|
EXIT SUB
|
|
END IF
|
|
|
|
LblStatus.Caption = "Opening viewer..."
|
|
HelpView hlpFile
|
|
END SUB
|
|
|
|
|
|
SUB mnuHelpTopic_Click
|
|
HelpView "dvxhelp.hlp"
|
|
END SUB
|
|
|
|
|
|
SUB HelpEdit_QueryUnload(Cancel AS INTEGER)
|
|
Cancel = AskSave()
|
|
END SUB
|