курсор в меню теперь может циклично перемещаться

This commit is contained in:
Anatoliy Belyanskiy 2024-03-27 03:29:25 +10:00
parent e8e569fc23
commit 7965e62728
8 changed files with 87 additions and 161 deletions

3
.gitmodules vendored Normal file
View File

@ -0,0 +1,3 @@
[submodule "Shared_Includes"]
path = Shared_Includes
url = https://github.com/Tolik-Trek/Shared_Includes.git

1
Shared_Includes Submodule

@ -0,0 +1 @@
Subproject commit 68681fbc50da463f1debae860e6db64603886d39

View File

@ -1,5 +0,0 @@
[MENU]
title=User Menu
item=Flex Navigator, C:\FN\FN.EXE
item=Command prompt
item=Sub menu, C:\menu.exe submenu.mnu

71
dss.inc
View File

@ -1,71 +0,0 @@
DSS_VERSION EQU #00
DSS_CHDISK EQU #01
DSS_CURDISK EQU #02
DSS_DSKINFO EQU #03
DSS_G_ENTRY EQU #04
DSS_BOOTDSK EQU #09
DSS_CREATE EQU #0A
DSS_CREAT_N EQU #0B
DSS_ERASE EQU #0D
DSS_DELETE EQU #0E
DSS_MOVE EQU #0F
DSS_RENAME EQU #10
DSS_OPEN EQU #11
DSS_CLOSE EQU #12
DSS_READ EQU #13
DSS_WRITE EQU #14
DSS_MOVE_FP EQU #15
DSS_ATTRIB EQU #16
DSS_GET_D_T EQU #17
DSS_PUT_D_T EQU #18
DSS_F_FIRST EQU #19
DSS_F_NEXT EQU #1A
DSS_MKDIR EQU #1B
DSS_RMDIR EQU #1C
DSS_CHDIR EQU #1D
DSS_CURDIR EQU #1E
DSS_SYSTIME EQU #21
DSS_SETTIME EQU #22
DSS_WAITKEY EQU #30
DSS_SCANKEY EQU #31
DSS_ECHOKEY EQU #32
DSS_CTRLKEY EQU #33
DSS_EDIT EQU #34
DSS_K_CLEAR EQU #35
DSS_SETWIN EQU #38
DSS_SETWIN1 EQU #39
DSS_SETWIN2 EQU #3A
DSS_SETWIN3 EQU #3B
DSS_FREEMEM EQU #3C
DSS_GETMEM EQU #3D
DSS_RETMEM EQU #3E
DSS_SETMEM EQU #3F
DSS_EXEC EQU #40
DSS_EXIT EQU #41
DSS_WAIT EQU #42
DSS_GSWITCH EQU #43
DSS_DOSNAME EQU #44
DSS_SETVMOD EQU #50
DSS_GETVMOD EQU #51
DSS_LOCATE EQU #52
DSS_CURSOR EQU #53
DSS_SELPAGE EQU #54
DSS_SCROLL EQU #55
DSS_CLEAR EQU #56
DSS_RDCHAR EQU #57
DSS_WRCHAR EQU #58
DSS_WINCOPY EQU #59
DSS_WINREST EQU #5A
DSS_PUTCHAR EQU #5B
DSS_PCHARS EQU #5C
DSS_RES_PRN EQU #5D
DSS_CTRLPRN EQU #5E
DSS_PRINT EQU #5F

View File

@ -1,6 +0,0 @@
* не выводится сообщение об ошибке в случае неверного написания названия опции.
* если описание Item заканчивается на "," в качестве параметра берется вся следующая строка.
* функции задания цвета не сообщают о некоректных символах.
- делать проверку при старте Item'а на "<" в первой позиции. (<exit> и т.п.)

106
menu.asm
View File

@ -2,7 +2,7 @@
; ;
; MENU.EXE ; MENU.EXE
; ;
INCLUDE "dss.inc" INCLUDE 'shared_includes/constants/dss_equ.inc'
CR EQU 13 CR EQU 13
LF EQU 10 LF EQU 10
@ -38,8 +38,8 @@ START: PUSH IX
.skipStartMessage: .skipStartMessage:
CALL INIT CALL INIT
; ;
LD C,DSS_SYSTIME LD C,Dss.SysTime
RST #10 RST ToDSS
LD A,B LD A,B
LD (RUN_TIME),A LD (RUN_TIME),A
; ;
@ -47,8 +47,8 @@ START: PUSH IX
RST #30 RST #30
; LD C,1 ; LD C,1
; RST #30 ; RST #30
LD BC,#0100+DSS_GETMEM LD BC,1*256+Dss.GetMem
RST #10 RST ToDSS
JR NC,M_ALLOK JR NC,M_ALLOK
LD A,9 LD A,9
CALL MESSAGE CALL MESSAGE
@ -56,8 +56,8 @@ START: PUSH IX
JP QUIT JP QUIT
M_ALLOK M_ALLOK
LD (HNDMEM),A LD (HNDMEM),A
LD BC,#0000+DSS_SETWIN3 LD BC,Dss.SetWin3
RST #10 RST ToDSS
; OUT (#E2),A ; OUT (#E2),A
; LD (HNDMEM),A ; LD (HNDMEM),A
@ -154,15 +154,14 @@ QUIT_MENU
CALL WIN_BACK CALL WIN_BACK
QUIT QUIT: LD A,(HNDMEM)
LD A,(HNDMEM) LD C,Dss.FreeMem
LD C,DSS_FREEMEM RST ToDSS
RST #10 ;
.loop: LD BC,Dss.Exit
LD C,DSS_EXIT
XOR A XOR A
RST #10 RST ToDSS
RET JR .loop
MAKE_DEFAULT_ITEM MAKE_DEFAULT_ITEM
LD HL,ITEMCOUNT LD HL,ITEMCOUNT
@ -197,8 +196,8 @@ PRC_CNT LD A,#00
LD A,(HL) LD A,(HL)
CALL PRINT_A CALL PRINT_A
; ;
LD C,DSS_SYSTIME LD C,Dss.SysTime
RST #10 RST ToDSS
LD A,(GO_TIME) LD A,(GO_TIME)
CP 60 ;GO_TIME > 60? CP 60 ;GO_TIME > 60?
JR C,YES_MKSUB JR C,YES_MKSUB
@ -216,8 +215,8 @@ PRC_STR DB "-\\|/"; -\|/
;GET TIMEOUT ;GET TIMEOUT
GETTIMEOUT GETTIMEOUT
LD C,DSS_SYSTIME LD C,Dss.SysTime
RST #10 RST ToDSS
LD A,(RUN_TIME) LD A,(RUN_TIME)
CP B ;RUNTIME > CURTIME CP B ;RUNTIME > CURTIME
JR Z,NO_TO_CORR ;ELSE JR Z,NO_TO_CORR ;ELSE
@ -281,34 +280,34 @@ CLICK2 LD L,(IX+2)
RST #30 RST #30
; ;
; POP HL ; POP HL
; LD C,DSS_PCHARS ; LD C,Dss.PCHARS
; RST #10 ; RST ToDSS
;<Sayman> ;<Sayman>
;push bc ;push bc
ld c,DSS_CURDISK ; ld c,Dss.CurDisk
rst #10 ; rst #10
add a,'A' ; add a,'A'
ld (cwd),a ; ld (cwd),a
ld a,':' ; ld a,':'
ld (cwd+1),a ; ld (cwd+1),a
ld c,DSS_CURDIR ; ld c,Dss.CurDir
ld hl,cwd+2 ; ld hl,cwd+2
rst #10 ; rst #10
;</Sayman> ;</Sayman>
POP HL POP HL
;<Sayman> ;<Sayman>
ld bc,DSS_EXEC ld bc,Dss.Exec
;</Sayman> ;</Sayman>
RST #10 ;Launch the program RST ToDSS ;Launch the program
;<Sayman> ;<Sayman>
push af ; push af
ld hl,cwd ; ld hl,cwd
ld c,DSS_CHDIR ; ld c,Dss.ChDir
rst #10 ; rst #10
pop af ; pop af
;pop bc ;pop bc
;</Sayman> ;</Sayman>
JR NC,OK_EXEC JR NC,OK_EXEC
@ -326,8 +325,8 @@ OK_EXEC
K_OBJECT K_OBJECT
LD C,DSS_SCANKEY LD C,Dss.ScanKey
RST #10 RST ToDSS
RET Z RET Z
CP 13 CP 13
JR Z,ENTER_MENU JR Z,ENTER_MENU
@ -363,7 +362,9 @@ KEY_DOWN
INC A INC A
CP B CP B
RET NZ RET NZ
DEC A ;DEC A
LD A,#11
OR A
RET RET
KEY_UP KEY_UP
@ -371,7 +372,9 @@ KEY_UP
DEC A DEC A
CP #10 CP #10
RET NZ RET NZ
INC A ;INC A
LD A,(ITEMCOUNT)
ADD A,#10
RET RET
@ -525,7 +528,7 @@ BTABLE
PUSH DE PUSH DE
PUSH BC PUSH BC
CALL WIN_LOCATE CALL WIN_LOCATE
; RST #10 ; RST ToDSS
POP BC POP BC
INC C INC C
DJNZ BTABLE DJNZ BTABLE
@ -601,10 +604,10 @@ MK_OBJ PUSH IX
ELINE LD A,#BA ELINE LD A,#BA
CALL DSS_PUTCHAR CALL WIN_PUTCHAR
; LD A,#20 ;" " ; LD A,#20 ;" "
LD BC,(W_SIZE) LD BC,(W_SIZE)
; LD BC,#2000+DSS_PUTCHAR ; LD BC,#2000+Dss.PUTCHAR
TLINE PUSH BC TLINE PUSH BC
LD A,#20 LD A,#20
CALL WIN_PUTCHAR CALL WIN_PUTCHAR
@ -618,7 +621,7 @@ HLINE LD A,#C7 ;
CALL WIN_PUTCHAR CALL WIN_PUTCHAR
; LD A,#C4 ;Ä ; LD A,#C4 ;Ä
LD BC,(W_SIZE) LD BC,(W_SIZE)
; LD BC,#2000+DSS_PUTCHAR ; LD BC,#2000+Dss.PUTCHAR
TLINEH PUSH BC TLINEH PUSH BC
LD A,#C4 LD A,#C4
CALL WIN_PUTCHAR CALL WIN_PUTCHAR
@ -634,7 +637,7 @@ ITEMCOUNT
DB 0 DB 0
W_SIZE W_SIZE
DB DSS_PUTCHAR DB 91
DB 32 DB 32
;HL - STRING ;HL - STRING
@ -751,8 +754,8 @@ NOSPACE_L2
EX_COMMAND_LINE EX_COMMAND_LINE
INC HL INC HL
NEXTPR LD DE,WORKBUF NEXTPR LD DE,WORKBUF
LD BC,#0745 LD BC,Dss.EX_Path.GSWITCH
RST #10 RST ToDSS
PUSH AF PUSH AF
PUSH HL PUSH HL
LD A,(WORKBUF) LD A,(WORKBUF)
@ -929,7 +932,7 @@ CH_L6 LD (WIN_Y),A
RET RET
;<Sayman> ;<Sayman>
cwd: ds 256 ;cwd: ds 256
;</Sayman> ;</Sayman>
OBSOLUTE_CNT_POS OBSOLUTE_CNT_POS
@ -937,8 +940,9 @@ OBSOLUTE_CNT_POS
MSG0 DB 0 MSG0 DB 0
;0 ;0
DB "User Menu v1.00, Copyright " DB "User Menu v1.01, Copyright "
DB "2002 (c) PETERS PLUS LTD",CR,LF,CR,LF,0 DB "2002 (c) Peters Plus LTD",CR,LF
DB "2023 (c) Sprinter Team",CR,LF,CR,LF,0
;1 ;1
DB " Error: Unknown switch: %1",CR,LF,0 DB " Error: Unknown switch: %1",CR,LF,0
;2 ;2

View File

@ -20,16 +20,16 @@ MNU_FHND DB #FF
OPEN_MENU_FILE OPEN_MENU_FILE
XOR A ;;;;;;;; XOR A ;;;;;;;;
LD C,DSS_OPEN LD C,Dss.Open
RST #10 RST ToDSS
RET C RET C
LD (MNU_FHND),A LD (MNU_FHND),A
RET RET
CLOSE_MENU_FILE CLOSE_MENU_FILE
LD A,(MNU_FHND) LD A,(MNU_FHND)
LD C,DSS_CLOSE LD C,Dss.Close
RST #10 RST ToDSS
RET RET
@ -62,9 +62,9 @@ NOT_DEF_MNU:
RM_STEP2 RM_STEP2
LD HL,FILE_ARRAY LD HL,FILE_ARRAY
LD DE,16384 LD DE,16384
LD C,DSS_READ LD C,Dss.Read
LD A,(MNU_FHND) LD A,(MNU_FHND)
RST #10 RST ToDSS
JR C,RF_ERR JR C,RF_ERR
LD B,D LD B,D
LD C,E LD C,E

View File

@ -12,8 +12,8 @@ DEBUG_PRINTZ
HL_D_POINT HL_D_POINT
LD HL,#0000 LD HL,#0000
LD C,DSS_PCHARS LD C,Dss.PChars
RST #10 RST ToDSS
CALL CRLF CALL CRLF
CALL POPALL CALL POPALL
@ -71,10 +71,10 @@ WIN_SHOW
LD L,A LD L,A
IN A,(#E2) IN A,(#E2)
LD B,A LD B,A
LD C,DSS_WINREST LD C,Dss.WinRest
LD IX,MYWIN LD IX,MYWIN
DI DI
RST #10 RST ToDSS
EI EI
RET RET
@ -83,8 +83,8 @@ SAVE_POSITION
DW 0 DW 0
WIN_SAVE WIN_SAVE
LD C,DSS_CURSOR LD C,Dss.Cursor
RST #10 RST ToDSS
LD (SAVE_POSITION),DE LD (SAVE_POSITION),DE
; RET ; RET
; ;
@ -95,10 +95,10 @@ WIN_SAVE
LD L,A LD L,A
IN A,(#E2) IN A,(#E2)
LD B,A LD B,A
LD C,DSS_WINCOPY LD C,Dss.WinCopy
LD IX,SCR_BUF LD IX,SCR_BUF
DI DI
RST #10 RST ToDSS
EI EI
RET RET
@ -110,15 +110,15 @@ WIN_BACK
LD L,A LD L,A
IN A,(#E2) IN A,(#E2)
LD B,A LD B,A
LD C,DSS_WINREST LD C,Dss.WinRest
LD IX,SCR_BUF LD IX,SCR_BUF
DI DI
RST #10 RST ToDSS
EI EI
LD DE,(SAVE_POSITION) LD DE,(SAVE_POSITION)
LD C,DSS_LOCATE LD C,Dss.Locate
RST #10 RST ToDSS
RET RET
WIN_CLS WIN_CLS
@ -215,10 +215,10 @@ WIN_PUTCHAR
RET RET
CRLF LD A,#0D CRLF LD A,#0D
LD C,DSS_PUTCHAR LD C,Dss.PutChar
RST #10 RST #10
LD A,#0A LD A,#0A
LD C,DSS_PUTCHAR LD C,Dss.PutChar
RST #10 RST #10
RET RET
@ -259,22 +259,22 @@ PRINTZ LD A,(HL)
ADD HL,HL ADD HL,HL
LD BC,PRM1 LD BC,PRM1
ADD HL,BC ADD HL,BC
LD C,DSS_PCHARS LD C,Dss.PChars
RST #10 RST ToDSS
POP HL POP HL
JR PRINTZ JR PRINTZ
PRINTZ2 LD C,DSS_PUTCHAR PRINTZ2 LD C,Dss.PutChar
RST #10 RST ToDSS
JP PRINTZ JP PRINTZ
LOCATE_ LOCATE_
LD C,DSS_LOCATE LD C,Dss.Locate
RST #10 RST ToDSS
RET RET
PRINT_A PRINT_A
PRINT_ LD C,DSS_PUTCHAR PRINT_ LD C,Dss.PutChar
RST #10 RST ToDSS
RET RET
MOVEBLOCKZ MOVEBLOCKZ