- плагин доделан, описание/history в cdplayer.txt рядом с плагином. FE 1.09 - исправлено: при выходе из редактора с несохраненным файлом и запросе на сохранение клавиша Enter теперь работает как подтверждение сохранения. FN 1.16 - встроенный editor переехал в плагин откуда и запускается по F4, из FN удален. - встроенный viewer переехал в плагин откуда и запускается по F3, из FN удален. - встроенный help переехал в плагин откуда и запускается при нажатии F1, из FN удален. - загрузка плагина отделена от запуска, теперь можно запускать плагины не только из панели FN. - добавлен макрос формирования заголовка для плагинов. - добавлена поддержка работы плагинов в адреса 0x4000-0x7FFF (окно 1) в дополнение к старым 0xC000-0xBFFF (окно 3), пока используется в плагине cdplayer. - в окнах с ошибкой переделан на 2 типа окон вместо многих под каждую ошибку. - исправлена потеря цвета при печати текста по указанному адресу. - текстовым файлам вернул кодировку CP866, readme.md оставлен в кодировке UTF8.
246 lines
5.9 KiB
Plaintext
246 lines
5.9 KiB
Plaintext
|
|
; LAST UPDATE: 18.07.2025 savelij
|
|
|
|
; !FIXIT ¯¥à¥¤¥« âì ®¤¨ ª®¢ë¥ ®ª á à §ë¬ â¥ªá⮬ ¤«ï ®è¨¡®ª ¯®¤ ¢â®¬ â¨ç¥áªãî ¯à®æ¥¤ãàã
|
|
;[]===========================================================[]
|
|
DOSErrorR ;[x] 30/07/23 -bug ¢ë«¥â § ¯à¥¤¥«ë â ¡«¨æë ®è¨¡®ª
|
|
CP (.UNKerror - .ErrorWins) / 4
|
|
JR C,.calc_addr
|
|
CP 0xF0
|
|
JR NC,.FNerror
|
|
LD HL,.UNKerror
|
|
JR .goto_addr
|
|
|
|
; ¤«ï ¢ãâà¥¨å ®è¨¡®ª FN
|
|
.FNerror SUB FNinternal.PlugNotFound
|
|
LD HL,.PlugNotFound
|
|
JR .INT_ERR
|
|
|
|
.calc_addr: LD HL,.ErrorWins
|
|
.INT_ERR ADD A,A ; *2
|
|
ADD A,A ; *4
|
|
ADD A,L
|
|
LD L,A
|
|
ADC A,H
|
|
SUB L
|
|
LD H,A
|
|
.goto_addr LD E,(HL)
|
|
INC HL
|
|
LD D,(HL) ; ¤à¥á ⥪áâ á • ¯®§¨æ¨¥©
|
|
INC HL
|
|
LD A,(DE)
|
|
INC DE
|
|
LD C,A ; X ¯®§¨æ¨ï ¬« ¤è¨© ¡ ©â
|
|
LD A,(DE)
|
|
INC DE
|
|
LD (.WINTYPE),A
|
|
RES 7,A
|
|
LD B,A ; X ¯®§¨æ¨ï áâ à訩 ¡ ©â
|
|
LD (.XPOSTXT),BC ; X ¯®§¨æ¨ï ¯¥ç â¨
|
|
LD (.XPOSTXT2),BC ; X ¯®§¨æ¨ï ¯¥ç â¨
|
|
LD (.ADRTXT),DE ; ¤à¥á ⥪áâ
|
|
LD (.ADRTXT2),DE ; ¤à¥á ⥪áâ
|
|
LD A,(HL)
|
|
INC HL
|
|
LD H,(HL)
|
|
LD L,A ; ¤à¥á ªã¤ ¯¥à¥å®¤¨âì ¯®á«¥ ®ª
|
|
OR H
|
|
RET Z ; ¥á«¨ ¤à¥á ¯¥à¥å®¤ 0, ¢ë室¨¬
|
|
LD (.ADRJUMP),HL
|
|
LD (.ADRJUMP2),HL
|
|
CALL SetMouse
|
|
LD A,0
|
|
.WINTYPE EQU $-1
|
|
BIT 7,A
|
|
JR NZ,.TYPE2
|
|
; ®ª® á ⥪á⮬ ®è¨¡ª¨
|
|
MAKEWINDOW WINSUBOBJ.STORE
|
|
W_MAIN 224,88,192,48
|
|
W_FILL 4,2,184,10,COLORI.RED
|
|
W_TEXT 86,3,COLORI.WHITE + COLORP.RED,"Error"
|
|
W_ADRTEXT 0,18,COLORP.HIGHGRAY,0
|
|
.XPOSTXT EQU $-7 ; ¯®§¨æ¨ï ¯¥ç â¨
|
|
.ADRTXT EQU $-2 ; ¤à¥á ⥪áâ
|
|
W_BUTTON 60,30,72,14
|
|
W_TEXT 88,33,COLORP.HIGHGRAY,"Ok"
|
|
W_END
|
|
JP 0
|
|
.ADRJUMP EQU $-2
|
|
|
|
; ®ª® á ⥪á⮬ ®è¨¡ª¨ ¨ ¢¢®¤®¬ ¡ãª¢ë ¤¨áª
|
|
.TYPE2
|
|
MAKEWINDOW WINSUBOBJ.STORE
|
|
W_MAIN 224,88,192,48
|
|
W_FILL 4,2,184,10,COLORI.RED
|
|
W_TEXT 86,3,COLORI.WHITE + COLORP.RED,"Error"
|
|
W_ADRTEXT 0,18,COLORP.HIGHGRAY,0
|
|
.XPOSTXT2 EQU $-7 ; ¯®§¨æ¨ï ¯¥ç â¨
|
|
.ADRTXT2 EQU $-2 ; ¤à¥á ⥪áâ
|
|
W_BUTTON 60,30,72,14
|
|
W_TEXT 88,33,COLORP.HIGHGRAY,"Ok"
|
|
W_BORDER 120,15,16,12
|
|
W_FILL 122,16,12,10,COLORI.WHITE
|
|
W_END
|
|
JP 0
|
|
.ADRJUMP2 EQU $-2
|
|
|
|
; ¤à¥á ⥪áâ ¤à¥á ªã¤ ¯¥à¥å®¤¨âì
|
|
.ErrorWins DW 0, 0 ; 00
|
|
DW 0, 0 ; 01
|
|
DW TXTERR.InvDrive, InputDrive ;InvDrive ; 02
|
|
DW TXTERR.FileNFound, ErrorLp ;FileNFound ; 03
|
|
DW TXTERR.InvPath, ErrorLp0 ;InvPath ; 04
|
|
DW 0, 0 ; 05
|
|
DW TXTERR.FileNFound, ErrorLp ;FileNFound ; 06
|
|
DW TXTERR.FILEexists, ErrorLp ;FILEexists ; 07
|
|
DW 0, 0 ; 08
|
|
DW TXTERR.ROOToverflow, ErrorLp ;ROOToverflow ; 09
|
|
DW TXTERR.NoDiskSpace, ErrorLp ;NoDiskSpace ; 0A
|
|
DW TXTERR.DIRnotEmpty, ErrorLp ;DIRnotEmpty ; 0B
|
|
DW 0, 0 ; 0C
|
|
DW TXTERR.InvMedia, InputDrive ;InvMedia ; 0D
|
|
DW 0, 0 ; 0E
|
|
DW TXTERR.DIRexists, ErrorLp ;DIRexists ; 0F
|
|
DW TXTERR.InvName, ErrorLp ;InvName ; 10
|
|
DW TXTERR.InvEXEfile, ErrorLp ;InvEXEfile ; 11
|
|
DW TXTERR.InvEXEver, ErrorLp ;InvEXEver ; 12
|
|
DW 0, 0 ; 13
|
|
DW TXTERR.NotReady, InputDrive ;NotReady ; 14
|
|
DW 0, 0 ; 15
|
|
DW 0, 0 ; 16
|
|
DW 0, 0 ; 17
|
|
DW TXTERR.WriteProtect, ErrorLp ;WriteProtect ; 18 ; [ ] 26/06/2024
|
|
DW 0, 0 ; 19
|
|
DW 0, 0 ; 1A
|
|
DW 0, 0 ; 1B
|
|
DW TXTERR.NotReady, InputDrive ;NotReady ; 1C
|
|
DW 0, 0 ; 1D
|
|
DW TXTERR.NoMemory, ErrorLp ;NoMemory ; 1E
|
|
DW 0, 0 ; 1F
|
|
DW 0, 0 ; 20
|
|
DW 0, 0 ; 21
|
|
DW 0, 0 ; 22
|
|
DW TXTERR.ToManyFilesDir,ErrorLp ;ToManyFilesDir ; 23
|
|
; always last in the table:
|
|
.UNKerror: DW TXTERR.UnknownError, ErrorLp ;UnknownError ; if no ERROR in this table then will show this message
|
|
; ¤ «¥¥ ¢ãâ२¥ ®è¨¡ª¨ FN
|
|
.PlugNotFound DW TXTERR.PlugNotFound, ErrorLp
|
|
|
|
;--------------------------------------------------------------
|
|
SETERRTEXT MACRO X,TEXT
|
|
DW X ; X ¯®§¨æ¨ï ¯¥ç â¨
|
|
DB TEXT,0 ; áâப ¡¥§ 0 ¢ ª®æ¥
|
|
ENDM
|
|
|
|
TXTERR
|
|
.PlugNotFound SETERRTEXT 56,"Plugin not found"
|
|
.InvDrive SETERRTEXT 24 | 0x8000,"Invalid drive letter:"
|
|
.FileNFound SETERRTEXT 60,"File not found"
|
|
.InvPath SETERRTEXT 70,"Invalid path"
|
|
.FILEexists SETERRTEXT 72,"File exists"
|
|
.ROOToverflow SETERRTEXT 64,"ROOT overflow"
|
|
.NoDiskSpace SETERRTEXT 62,"No disk space"
|
|
.DIRnotEmpty SETERRTEXT 40,"Directory is not empty"
|
|
.InvMedia SETERRTEXT 46 | 0x8000,"Invalid media:"
|
|
.DIRexists SETERRTEXT 56,"Directory exists"
|
|
.InvName SETERRTEXT 66,"Invalid name"
|
|
.InvEXEfile SETERRTEXT 60,"Invalid EXE file"
|
|
.InvEXEver SETERRTEXT 40,"Unsupport EXE version"
|
|
.NotReady SETERRTEXT 36 | 0x8000,"Drive not ready:"
|
|
.WriteProtect SETERRTEXT 37,"Drive is write protected"
|
|
.NoMemory SETERRTEXT 52,"No memory space"
|
|
.ToManyFilesDir SETERRTEXT 30,"Too many directory entries"
|
|
.UnknownError SETERRTEXT 60,"Unknown Error"
|
|
|
|
InputDrive PUSH IY
|
|
SPDSS DSSF.CURDISK
|
|
POP IY
|
|
ADD A,'A'
|
|
LD (CurDrv),A
|
|
LD IX,DriveStr
|
|
LD HL,ErrorTab1
|
|
CALL InputLine
|
|
WINDOWCLOSE
|
|
CALL SetClock
|
|
LD A,(CurDrv)
|
|
RES 5,A
|
|
SUB 'A'
|
|
PUSH IY
|
|
SPDSS DSSF.CHDISK
|
|
POP IY
|
|
JP C,DOSErrorR
|
|
LD HL,BegDIR
|
|
PUSH IY
|
|
SPDSS DSSF.CHDIR
|
|
POP IY
|
|
JP C,DOSErrorR
|
|
CALL SetMouse
|
|
LD A,0x01
|
|
RET
|
|
|
|
ErrorTab1 DEFW 284,356,118,132,%0000000000000001,%0000000000000000,InputLine.InpLnExtN,0
|
|
DEFW 0x8000
|
|
|
|
DriveStr DEFB 0x01,0x00,0x00,0x00
|
|
DEFB 0x01
|
|
DEFW 0x015C,0x006A
|
|
DEFW 0x000A
|
|
DEFB 0xF0
|
|
CurDrv DUPL 0x02,0x00
|
|
|
|
;--------------------------------------------------------------
|
|
ErrorLp0 LD IX,ErrorTab2
|
|
CALL TestCoords
|
|
SPDSS DSSF.SCANKEY
|
|
JR Z,ErrorLp0
|
|
LD A,B
|
|
OR A
|
|
JR NZ,ErrorLp0
|
|
LD A,E
|
|
CP 0x1B
|
|
JR Z,ErrorExt0
|
|
CP 0x0D
|
|
JR Z,ErrorExt0
|
|
RES 5,A
|
|
CP "O"
|
|
JR NZ,ErrorLp0
|
|
ErrorExt0
|
|
WINDOWCLOSE
|
|
CALL SetClock
|
|
LD HL,BegDIR
|
|
PUSH IY
|
|
SPDSS DSSF.CHDIR
|
|
POP IY
|
|
JP C,DOSErrorR
|
|
CALL SetMouse
|
|
LD A,0x01
|
|
RET
|
|
|
|
ErrorTab2 DEFW 284,356,118,132,%0000000000100001,%0000000000000000,ErrorExt0,0
|
|
DEFW 0x8000
|
|
|
|
;--------------------------------------------------------------
|
|
|
|
ErrorLp LD IX,ErrorTab3
|
|
CALL TestCoords
|
|
SPDSS DSSF.SCANKEY
|
|
JR Z,ErrorLp
|
|
LD A,B
|
|
OR A
|
|
JR NZ,ErrorLp
|
|
LD A,E
|
|
CP 0x1B
|
|
JR Z,ErrorExt
|
|
CP 0x0D
|
|
JR Z,ErrorExt
|
|
RES 5,A
|
|
CP 'O'
|
|
JR NZ,ErrorLp
|
|
ErrorExt
|
|
WINDOWCLOSE
|
|
SUB A
|
|
RET
|
|
|
|
ErrorTab3 DEFW 284,356,118,132,%0000000000100001,%0000000000000000,ErrorExt,0
|
|
DEFW 0x8000
|