📄 frame.tpl
字号:
LOCAL dial%
dINIT title$
dFILE gNFile$, "File,Folder,Disk", type% OR KDFileSelectorWithSystem%, 0,0,KUidFrame&
LOCK ON
dial%=DIALOG
LOCK OFF
IF dial%
RETURN KTrue%
ELSE
RETURN KFalse%
ENDIF
ENDP
PROC Revert:
EXTERNAL gFileDeltaF%,gFile$,gNFile$
LOCAL dial%
IF gFileDeltaF% = KFalse%
GIPRINT "File has not changed", KBusyTopRight%
RETURN
ENDIF
REM In case gFile$ does not exist for new files.
IF NOT EXIST(gFile$)
GIPRINT "No file to revert to", KBusyTopRight%
RETURN
ENDIF
dINIT "Revert to saved?"
dTEXT "", "All changes will be lost"
dBUTTONS "No",-(%N OR KDButtonNoLabel% OR KDButtonPlainKey%), "Yes", (%Y OR KDButtonNoLabel% OR KDButtonPlainKey%)
LOCK ON
dial%=DIALOG
LOCK OFF
IF dial%<>%y
RETURN
ENDIF
REM Revert it by pretending there's a system
REM event causing it to open.
gFileDeltaF% = KFalse% REM Prevent current file being saved.
REM (Openfile needs gNFile!)
gNFile$=gFile$
OpenFile:(KCSystemEvent%)
ENDP
PROC Init:
EXTERNAL gWId%,gDebugF%
REM Nice courier, mono-spaced font.
gWId%=0
Read_ini: REM This sets the debug flag.
IF gDebugF%
FONT KFontCourierNormal13&, 16
SCREEN 64,18, 1,1
ELSE
REM switch screen off?
REM !!TODO
ENDIF
DEFAULTWIN 5
initTBar:
initTopTBar:
REM initStat:
REM Main window into background.
REM gORDER 1,255
ENDP
PROC Read_ini:
EXTERNAL gLUFile$,gDebugF%,TBVis%,gTopTBVis%,gStatVis%
GLOBAL glh% REM INI handle
LOCAL check$(10)
ONERR closeit::
glh% = OpenINIFile%:(KUidFrame&,KReadMode%)
PRINT "Read_ini: Opened INI="; glh%
IF glh% :gLUFile$ = readINIrec$:( "" ) :ENDIF
IF glh% :gDebugF% = VAL( readINIrec$:( "0" )) :ENDIF
IF glh% :TBVis% = VAL( readINIrec$:( "-1" )) :ENDIF
IF glh% :gTopTBVis% = VAL( readINIrec$:( "1" )) :ENDIF
IF glh% :gStatVis% = VAL( readINIrec$:( "0" )) :ENDIF
IF glh% :check$ = readINIrec$:( "101" ) :ENDIF
IF gDebugF%
print "read_ini: LastUsedFile="; gLUFile$
PRINT "read_ini: debug="; gDebugF%
ENDIF
closeit::
REM End of INI file.
ONERR OFF
IOCLOSE(glh%)
ENDP
PROC ReadINIrec$:(default$)
EXTERNAL glh%
LOCAL value$(255), ret%
IF glh%
ret% = IOREAD(glh%, ADDR(value$), 256)
IF ret%<>256
PRINT "readInirec: duff read=";ret%
if ret%<0 :print "readinirec: "+ERR$(ret%) :endif
IOCLOSE(glh%)
glh%=0
ELSE
print "readinirec: read=";value$
ENDIF
ELSE
print "readini: no handle, using default"
value$ = default$
ENDIF
RETURN value$
ENDP
PROC Write_ini:
EXTERNAL gFile$,gDebugF%,TBVis%,gTopTBVis%,gStatVis%
GLOBAL glh%
ONERR closeit::
glh% = OpenINIFile%:(KUidFrame&,KWriteMode%)
PRINT "Write_INI: handle="; glh%
IF glh%=0
REM Can't do anything here.
print "write_ini: no handle, abort"
RETURN
ENDIF
REM Last used name is one active when program is closed.
IF glh% :writeINIrec%:( gFile$ ) :ENDIF
IF glh% :writeINIrec%:( NUM$(gDebugF%,5) ) :ENDIF
IF glh% :writeINIrec%:( NUM$(TBVis%,5) ) :ENDIF
IF glh% :writeINIrec%:( NUM$(gTopTBVis%,5) ) :ENDIF
IF glh% :writeINIrec%:( NUM$(gStatVis%,5) ) :ENDIF
REM And the check...
IF glh% :writeINIrec%:( "314" ) :ENDIF
closeit::
ONERR OFF
REM End of INI file.
IOCLOSE(glh%)
glh%=0
ENDP
PROC WriteINIrec%:(aValue$)
EXTERNAL glh%
LOCAL ret%, value$(255)
IF glh%=0
print "writeinirec: no handle"
ELSE
value$ = aValue$
print "WriteINIrec%: writing [";value$;"]"
ret% = IOWRITE (glh%, ADDR(value$), 256)
IF ret%<0
PRINT "WriteINIrec: failed to write ";value$;
PRINT " Error="; ret%; " = "; ERR$(ret%)
IOCLOSE(glh%)
glh%=0
ENDIF
ENDIF
ENDP
PROC OpenIniFile%:(AppUid&,aMode%)
LOCAL IniFile$(255),handle%,ret%,uidType$(16),mode%
mode%=KIoOpenModeOpen% OR KIoOpenFormatBinary%
IniFile$="c:\system\apps\frame\frame.ini"
print "OpenINIfile:",inifile$
IF aMode%=KReadMode%
print "Read mode"
IF NOT EXIST(IniFile$) :print "no exist" :RETURN 0 :ENDIF
ret%=IOOPEN(handle%,IniFile$,mode%)
IF ret%<0 :print ERR$(ret%) :RETURN 0 :ENDIF
ret%=IOREAD(handle%,ADDR(uidType$)+1+KOplAlignment%,16*KUnicodeCharLen%)
if ret%<>16*KUnicodeCharLen% :print "ioread=",ret% :ioclose(handle%) :return 0 :endif
POKEB ADDR(uidType$),16 rem KUnicodeCharLen%
if (uidType$<>CheckUid$:(0,0,AppUid&))
print "bad UIDs"
print "[";uidType$;"][";CheckUid$:(0,0,AppUid&)
ioclose(handle%)
return 0
endif
ELSE
mode%=KIoOpenModeReplace% OR KIoOpenFormatBinary% OR KIoOpenAccessUpdate%
print "opening for write."
ret%=ioopen(handle%,IniFile$,mode%)
if ret%<0 :print ERR$(ret%) :return 0 :endif
uidType$=CheckUid$:(0,0,AppUid&)
print "writing checkuid"
ret%=IOWRITE(handle%,ADDR(uidType$)+1+KOplAlignment%,16*KUnicodeCharLen%)
IF ret%<0 :print err$(ret%) :ioclose(handle%) :RETURN 0 :ENDIF
ENDIF
RETURN handle%
ENDP
PROC GetLang:
PRINT "!!TODO:GetLang:"
ENDP
PROC initTBar:
EXTERNAL gScrWid%, gScrHt%, TBVis%
REM set up the Toolbar buttons and actions
LOCAL mbmTbar$(50), bitmapid1&, bitmapid2&
LOCAL c1&,c2&,c3&,c4&,c5&,c6&
REM Have to deliver this file to end-user.
mbmTbar$="c:"+KAppDir$+"buttons.mbm"
bitmapId1&=gLoadBit(mbmTbar$,0,0)
bitmapId2&=gLoadBit(mbmTbar$,0,1)
rem !!TODO lose this. for visibility (screen too narrow!)
rem c1&=kRgbMagenta&
rem c2&=KRgbYellow&
rem c3&=KRgbDarkRed&
rem c4&=kRgbYellow&
rem c5&=kRgbDarkBlue&
rem c6&=kRgbDarkmagenta&
REM New in 1.02
rem TBarColor:(KColorgCreate256ColorMode%, c1&, c2&, c3&, c4&, c5&, c6&)
REM If that wasn't called, the default toolbar mode/colors are used...
REM Set title above Toolbar.
REM Use appName for the docname for now...
TBarInit:(kAppname$, gScrWid%, gScrHt%)
TBarButt:("c",1,"Color",0,bitmapid1&,bitmapid1&,0)
TBarButt:("a",2,"Rubber",0,bitmapid2&,bitmapid2&,0)
TBarButt:("p",3,"Popup"+chr$(10)+"demo",0,&0,&0,1)
TBarButt:("e",4,"Exit",0,&0,&0,0)
IF TbVis%
TBarShow:
ELSE
TBarHide:
ENDIF
ENDP
PROC initTopTBar:
EXTERNAL gTopTBVis%
gTopTBVis%=KFalse%
ENDP
PROC StatVis:
EXTERNAL gStatVis%
IF gStatVis%=KTrue%
gStatVis%=KFalse%
REM kill stat window
ELSE
gStatVis%=KTrue%
initStat:
ENDIF
ENDP
PROC initStat:
REM Initialise the status window.
GIPRINT "initStat:" + NYI$
ENDP
PROC TopToolVis:
EXTERNAL gTopTBVis%
GIPRINT "TopToolVis" + NYI$
IF gTopTBVis%=KTrue%
gTopTBVis%=KFalse%
ELSE
gTopTBVis%=KTrue%
ENDIF
ENDP
PROC Help:
EXTERNAL gHelpId&,gHStatus&
LOCAL fullpath$(255), previous&, ret&
IF gHelpId& = 0
fullpath$ = WhereIs$:( KAppdir$ + KAppname$ + KApphlp$ )
IF fullpath$ = ""
GIPRINT "Help file not found"
RETURN
ENDIF
gHelpId& = RUNAPP&:("Data", fullpath$, "", 0)
LOGONTOTHREAD:(gHelpId&, gHStatus&)
ELSE
REM Allow status word to update.
IOYIELD
REM If it's still running...
IF gHStatus& = KStatusPending32&
ret&=SETFOREGROUNDBYTHREAD&:(gHelpId&,previous&)
ELSEIF gHStatus& = 0
gHelpId& = 0
REM Recall this proc to start Help.
Help:
ENDIF
ENDIF
RETURN
ENDP
PROC KillHelp:
EXTERNAL gHelpId&
REM On exit, make sure the help thread dies.
REM GIPRINT "!!TODO - KillHelp"
IF gHelpId&<>0
ONERR dieDieDie::
ENDTASK&:(gHelpId&,0)
ENDIF
diediedie::
ONERR OFF
RETURN
ENDP
PROC whereIs$:( path$ ) REM Hunt a file on different disks.
LOCAL fullpath$(255), off%(6), disk$(2)
LOCAL search$(2), search%
REM List of disks to search, in search order.
REM (Remember default disk gets checked first anyway.)
search$="CD"
search%=0
DO
REM Check the default disk first.
IF search%=0
disk$ = ""
ELSE
disk$ = MID$( search$, search%, 1 ) + ":"
ENDIF
fullpath$ = PARSE$( path$, disk$, off%())
IF EXIST(fullpath$)
RETURN fullpath$
ENDIF
search%=search%+1
UNTIL search%>LEN(search$)
RETURN ""
ENDP
PROC UpdateTBarTitle:
local off%(6),file$(255)
file$=GETDOC$
file$=PARSE$(file$,"",off%())
TBarSetTitle:(RIGHT$(file$, LEN(file$)-off%(4)+1))
ENDP
PROC InitScr:
EXTERNAL gWid%,TBVis%
gUSE gWId%
IF TBVis%
TBarShow:
ELSE
TBarHide:
ENDIF
gSETPENWIDTH 10
ENDP
PROC Pref:
EXTERNAL gDebugF%
LOCAL dial%
dINIT "Preferences"
rem No longer supported in Crystal
rem dCHECKBOX gDebugF%, "Use debug mode"
dCHOICE gDebugF%,"Use debug mode","No,Yes"
dBUTTONS "Cancel",-(KDButtonEsc% OR KDButtonNoLabel% OR KDButtonPlainKey%), "OK", (KDButtonEnter% OR KDButtonNoLabel% OR KDButtonPlainKey%)
LOCK ON
dial%=DIALOG
LOCK OFF
IF gDebugF%=2 rem Yes
gDebugF%=KTrue%
DebugPref:
ELSE
gDebugF%=KFalse%
ENDIF
ENDP
PROC DebugPref:
EXTERNAL gPointerFilterF%
LOCAL dial%
dINIT "DEBUG Preferences"
rem No longer supported in Crystal
rem dCHECKBOX gPointerFilterF%, "Use PointerFilter"
dCHOICE gPointerFilterF%, "Use PointerFilter","No,Yes"
dBUTTONS "Cancel",-(KDButtonEsc% OR KDButtonNoLabel% OR KDButtonPlainKey%), "OK", (KDButtonEnter% OR KDButtonNoLabel% OR KDButtonPlainKey%)
LOCK ON
dial%=DIALOG
LOCK OFF
IF gPointerFilterF%=2
gPointerFilterF%=KTrue%
PointerFilterPref:
ELSE
gPointerFilterF%=KFalse%
ENDIF
ENDP
PROC PointerFilterPref:
EXTERNAL gPFFilter%,pPFMask%,gPFMask%
LOCAL dial%,filter&,mask&
filter&=gPFFilter%
mask&=gPFMask%
dINIT "Pointer Filter Preferences"
dLONG filter&, "Filter",0,7
dLONG mask&, "Mask", 0,7
dBUTTONS "Cancel",-(KDButtonEsc% OR KDButtonNoLabel% OR KDButtonPlainKey%), "OK", (KDButtonEnter% OR KDButtonNoLabel% OR KDButtonPlainKey%)
LOCK ON
dial%=DIALOG
LOCK OFF
IF dial%
gPFFilter%=filter&
gPFMask%=mask&
ENDIF
ENDP
PROC Save:
EXTERNAL gDeltaF%,gFileDeltaF%,gFile$
LowSave:( gFile$, KTrue% ) REM Inform user.
REM And reset the delta flag.
gDeltaF%=KFalse%
gFileDeltaF%=KFalse%
ENDP
PROC SaveAs:
EXTERNAL gFile$,gDeltaF%,gFileDeltaF%
LOCAL f$(255), offset%(6)
f$ = GETDOC$
f$ = PARSE$(f$, "" ,offset%())
f$ = LEFT$(f$, offset%(4)-1) rem Just the drive and path
f$ = SaveAsFileDialog$:(f$,#0)
IF LEN(f$)>0
gFile$ = f$
SETDOC gFile$
UpdateTBarTitle:
LowSave:( gFile$, KTrue% ) REM Inform user.
gDeltaF%=KFalse%
gFileDeltaF%=KFalse%
ENDIF
ENDP
PROC LowSave:( fn$, InformUserF% )
EXTERNAL gWId%
REM In fact, I can't think of a single instance
REM where the user /shouldn't/ be told.
IF gWId%
gUSE gWId%
IF InformUserF%
BUSY "Saving file " + CHR$(KEllipsis&), KBusyBottomRight%, 15 REM 0.75 seconds
ENDIF
gSAVEBIT fn$
IF InformUserF%
BUSY OFF
GIPRINT "File saved", KBusyTopRight%
ENDIF
ENDIF
ENDP
PROC LowLoad%:(fn$)
LOCAL bitmap%, width%, height%
LOCAL newMain%
ONERR exit::
IF EXIST(fn$)
bitmap% = gLOADBIT(fn$,0,0)
width% = gWIDTH
height% = gHEIGHT
newMain% = gCREATE(0,0, width%, height%, 1, kColorMode%)
gCOPY bitmap%, 0,0 ,width%,height%,3
gCLOSE bitmap%
RETURN newMain%
ENDIF
exit::
ONERR OFF
RETURN 0
ENDP
PROC CmdE%: REM toolbar Exit
EXTERNAL gExit%
gExit%=KTrue%
ENDP
PROC CmdA%:
SetColor:(255,255,255)
ENDP
PROC CmdC%:
Color:
ENDP
PROC CmdTBDownP%:
EXTERNAL gScrWid%,TBWidth%
LOCAL pop%
REM x , y , corner
pop%=mPOPUP(gScrWid%-TbWidth%,97,KMPopupPosTopRight%,"Item a",%a,"Item b",%b)
IF pop%=0
REM GIPRINT "Popup cancelled"
ELSE
GIPRINT "Item "+chr$(pop%)+" selected"
ENDIF
ENDP
PROC ToolVis:
EXTERNAL TbVis%
REM Toolbar visibility toggle on/off
IF TbVis%
TBarHide:
ELSE
TBarShow:
ENDIF
ENDP
PROC DemoA:
PRINT "!!TODO - demoa"
ENDP
PROC Democ:
PRINT "!!TODO - democ"
ENDP
PROC DoSomething:
GIPRINT "DoSomething:" + NYI$
ENDP
PROC SelectAll:
GIPRINT "SelectAll:" + NYI$
ENDP
PROC About:
GIPRINT "About:" + NYI$
ENDP
PROC Copy:
GIPRINT "Copy:" + NYI$
ENDP
PROC Delete:
GIPRINT "Delete:" + NYI$
ENDP
PROC Export:
GIPRINT "Export:" + NYI$
ENDP
PROC MergeIn:
GIPRiNT "MergeIn:" + NYI$
ENDP
PROC Print:
GIPRINT "Print:" + NYI$
ENDP
PROC PrintSetup:
GIPRINT "PrintSetup:" + NYI$
ENDP
PROC PageSetup:
GIPRINT "PageSetup:" + NYI$
ENDP
PROC Paste:
GIPRINT "Paste:" + NYI$
ENDP
PROC PrintPreview:
GIPRINT "PrintPreview:" + NYI$
ENDP
PROC Cut:
GIPRINT "Cut:" + NYI$
ENDP
PROC Redo:
GIPRINT "Redo:" + NYI$
ENDP
PROC Undo:
GIPRINT "Undo:" + NYI$
ENDP
PROC CutPaste:
LOCAL pop%
pop%=mPOPUP(1,48, KMPopupPosTopLeft%, "Cut",%x, "Copy",%c, "Paste",%v)
IF pop%=0
REM GIPRINT "Popup cancelled"
ELSE
IF pop%=%x: Cut:
ELSEIF pop%=%c: Copy:
ELSE : Paste:
ENDIF
ENDIF
ENDP
PROC Irtrans:
GIPRINT "Irtrans:" + NYI$
ENDP
PROC ZoomIn:
GIPRINT "ZoomIn:" + NYI$
ENDP
PROC ZoomOut:
GIPRINT "ZoomOut:" + NYI$
ENDP
PROC Color:
LOCAL red%,green%,blue%
red%=rnd*256
green%=rnd*256
blue%=rnd*256
SetColor:(red%,green%,blue%)
ENDP
PROC SetColor:(red%,green%,blue%)
EXTERNAL gWId%
gUSE gWId%
gCOLOR red%,green%,blue%
ENDP
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -