This commit is contained in:
Anatoliy Belyanskiy 2023-10-15 04:06:17 +10:00
commit e8e569fc23
10 changed files with 2576 additions and 0 deletions

5
define.txt Normal file
View File

@ -0,0 +1,5 @@
[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 Normal file
View File

@ -0,0 +1,71 @@
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

61
format.txt Normal file
View File

@ -0,0 +1,61 @@
command format:
MENU.EXE [keys] [menufile] [#section]
keys:
-m <menu definition> title=User Menu; item=Flex Navigator, c:\fn\fn.exe; item=Command prompt, c:\system.exe /s
-h help page
-x autoexit from menu when program are terminated
-k keyboard control disable
-u mouse control disable
-o message output disable
menufile structure:
[MENU]
# main variables
title=<menu title>
item=<item name>, <program> <hot key>
item=Item name, {
cd \somedir\
type somefile.txt
copy somefile.txt \other\other.txt
}
item=Exit, { echo see you soon! ; <exit> }
autoexit=<0/1>
menucolour=<paper>, <ink>
barcolour=<paper>, <ink>
defaultitem=<number>, <time>
# other variables
startmessage=<message>
finishmessage=<message>
startdelay=<time>
finishdelay=<time>
# sound variables
mousesound=<wavefile>
mouseoversound=<wavefile>
keysound=<wavefile>
upsound=<wavefile>
downsound=<wavefile>
startsound=<wavefile>
entersound=<wavefile>
exitsound=<wavefile>
# wallpaper variables
background=<picture>, <style> (center | fill | stretch)
backgroundtext=<text>
backgroundfont=<fontfile>
backgroundfontsize=<fontsize>
build-in script command:
<exit> - close menu
<waitkey> / <pause> - waiting user key-input
<delay=time> - script delay
<type=text> - console message
<message=text> - message menu

6
knownbug.txt Normal file
View File

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

1053
menu.asm Executable file

File diff suppressed because it is too large Load Diff

185
object.asm Executable file
View File

@ -0,0 +1,185 @@
G_OBJECT
RET
; INPUT:
; A - OBJECT ID
GET_OBJECT_PROP
LD IX,OBJECTS_AREA-OBJECT_SIZE
LD BC,OBJECT_SIZE
LD E,A
GOP1 ADD IX,BC
LD A,(IX+0)
OR A
RET Z
CP E
JR NZ,GOP1
LD L,(IX+2)
LD A,(IX+4)
SUB L
LD C,A
LD E,(IX+6)
LD A,(IX+8)
SUB E
LD B,A
XOR A
INC A
RET
; INPUT:
; A - OBJECT ID
; L - X
; E - Y
; B - HEIGHT
; C - WIDTH
ADD_OBJECT
LD IX,OBJECTS_AREA
PUSH BC
LD BC,(OBJECTS_AREA_SIZE)
ADD IX,BC
POP BC
; LD A,ID
LD (IX+0),A
XOR A
LD (IX+1),A
LD (IX+3),A
LD (IX+5),A
LD (IX+7),A
LD (IX+9),A
LD (IX+2),L ;X-MIN
LD A,C
ADD A,L
LD (IX+4),A ;X-MAX
LD (IX+6),E ;Y-MIN
LD A,B
ADD A,E
LD (IX+8),A ;Y-MAX
XOR A
LD (IX+OBJECT_SIZE),A
LD HL,(OBJECTS_AREA_SIZE)
LD BC,OBJECT_SIZE
ADD HL,BC
LD (OBJECTS_AREA_SIZE),HL
RET
REMOVE_OBJECT
RET
P_MX DW 0
P_MY DW 0
M_OBJECT
LD C,3
RST #30 ;GET MOUSE STATE
OR A
JP NZ,MFORCE
LD BC,(P_MX)
;16 BIT CMP
LD A,C
CP L
JR NZ,DMC
LD A,B
CP H
JR NZ,DMC
;
LD BC,(P_MY)
LD A,C
CP E
JR NZ,DMC
LD A,B
CP D
JR NZ,DMC
; ZERO FLAG=1
DMC
LD (P_MX),HL
LD (P_MY),DE
RET Z
MFORCE
;CORRECT FOR TEXT MODE
SRL H
RR L
SRL H
RR L
SRL H
RR L
SRL D
RR E
SRL D
RR E
SRL D
RR E
; E - Y, L - X
CALL GET_OBJECT_ID
RET
;
; INPUT:
; L - X
; E - Y
; OUTPUT:
; Z = 1, A - ID
; Z = 0 - OBJECT NOT FOUND
GET_OBJECT_ID
LD IX,OBJECTS_AREA
OBJECT_LOOP
LD A,(IX+0)
OR A ;INC A
RET Z ;OBJECT NOT FOUND
LD A,(IX+2) ;X-MIN
SUB L
JR Z,OBJ_X_OK
JR NC,OBJ_NEXT
LD A,(IX+4) ;X-MAX
SUB L
JR C,OBJ_NEXT
OBJ_X_OK
LD A,(IX+6) ;Y-MIN
SUB E
JR Z,OBJ_Y_OK
JR NC,OBJ_NEXT
LD A,(IX+8) ;Y-MAX
SUB E
JR Z,OBJ_NEXT
JR C,OBJ_NEXT
OBJ_Y_OK
LD A,(IX+0) ;ID
AND A
RET
OBJ_NEXT
LD BC,OBJECT_SIZE
ADD IX,BC
JR OBJECT_LOOP
OBJECTS_AREA_SIZE
DW 0
OBJECTS_AREA
DB 0 ;+00 OBJECT HANDLE
DB 0 ;+01 RESERVED
DB 0 ;+02 MIN X
DB 0 ;+03 RESERVED
DB 0 ;+04 MAX X
DB 0 ;+05 RESERVED
DB 0 ;+06 MIN Y
DB 0 ;+07 RESERVED
DB 0 ;+08 MAX Y
DB 0 ;+09 RESERVED
OBJECT_SIZE EQU $-OBJECTS_AREA
DS 320

549
parser.asm Executable file
View File

@ -0,0 +1,549 @@
BUILD_TABLE
LD A,(CMD_MENU)
OR A
JR Z,BT0
LD HL,FILE_ARRAY
LD IX,MENU_TABLE
CALL PARSER
AND A
RET
BT0 CALL READ_MENU
RET C
LD HL,(MENU_ADDRESS)
LD IX,MENU_TABLE
CALL PARSER
AND A
RET
MNU_FHND DB #FF
OPEN_MENU_FILE
XOR A ;;;;;;;;
LD C,DSS_OPEN
RST #10
RET C
LD (MNU_FHND),A
RET
CLOSE_MENU_FILE
LD A,(MNU_FHND)
LD C,DSS_CLOSE
RST #10
RET
MENU_ADDRESS
DW 0
READ_MENU
; LD HL,DEFAULT_FILE
; LD A,(EXTMENU)
; OR A
; JR Z,DEFMNU
; LD HL,FST_VAR
LD HL,FST_VAR
LD A,(EXTMENU)
OR A
JR NZ,NOT_DEF_MNU
LD HL,DEFAULT_FILE
NOT_DEF_MNU:
PUSH HL
CALL OPEN_MENU_FILE
POP HL
JR NC,RM_STEP2
CALL PUTVAR
LD A,3
CALL MESSAGE
SCF
RET
RM_STEP2
LD HL,FILE_ARRAY
LD DE,16384
LD C,DSS_READ
LD A,(MNU_FHND)
RST #10
JR C,RF_ERR
LD B,D
LD C,E
LD HL,FILE_ARRAY
FIND_AGAIN
LD A,"["
CPIR
JR NZ,NOMENU
LD A,(ANCHOR)
OR A
LD DE,DEFAULT_MENU
JR Z,CHECK_MNU_NAME
LD DE,LST_VAR
CHECK_MNU_NAME
LD A,(DE)
OR A
JR Z,END_MENU_TAG
CP (HL)
JR NZ,FIND_AGAIN
INC HL
INC DE
DEC BC
LD A,B
OR C
JR NZ,CHECK_MNU_NAME
JR NOMENU
END_MENU_TAG
LD A,"]"
CP (HL)
JR NZ,FIND_AGAIN
INC HL
LD (MENU_ADDRESS),HL
LD A,"["
CPIR
; JR NZ,NOM
DEC HL
XOR A
LD (HL),A
NOM
;;;
CALL CLOSE_MENU_FILE
AND A
RET
NOMENU
LD A,(ANCHOR)
OR A
LD HL,DEFAULT_MENU
JR Z,NM_2
LD HL,LST_VAR
NM_2 CALL PUTVAR
LD A,4
CALL MESSAGE
RF_ERR
CALL CLOSE_MENU_FILE
SCF
RET
;[PARSER]
; HL - MENU CONTENT
; IX - MENU STRUCT
PARSER LD A,(HL)
INC HL
CP " "
JR Z,PARSER
CP 9
JR Z,PARSER
CP 13
JR Z,PARSER
CP 10
JR Z,PARSER
OR A
RET Z
DEC HL
LD BC,0
LD DE,WORKBUF
PARSER1 LD A,(HL)
LD (DE),A
INC HL
INC DE
INC B
JR Z,PARSE_FAILURE
CP "="
JR Z,EQUAL
CP ","
JR Z,FIRST_VAR
CP 13
JR Z,LAST_VAR
CP 10
JR Z,LAST_VAR
OR A
JR NZ,PARSER1
DEC HL
JR LAST_VAR
PARSE_FAILURE
LD A,8
CALL MESSAGE
LD A,1
LD (QUITMODE),A
SCF
RET
LAST_VAR
LD A,B
DEC A
JR Z,PARSER
EXX
LD DE,LST_VAR
LD HL,WORKBUF
CALL COPY_STRING
EXX
PUSH HL
CALL PARSE_WORD
;
XOR A
LD (FST_VAR),A
LD (LST_VAR),A
LD (WORDBUF),A
;
POP HL
JP PARSER
FIRST_VAR
LD A,(FST_VAR)
OR A
JR NZ,PARSER1
LD A,B
DEC A
JR Z,PARSER
EXX
LD DE,FST_VAR
LD HL,WORKBUF
CALL COPY_STRING
EXX
JP PARSER
EQUAL LD A,(WORDBUF)
OR A
JR NZ,PARSER1
LD A,B
EXX
LD DE,WORDBUF
LD HL,WORKBUF
CALL COPY_STRING
EXX
JP PARSER
;HL - SOURCE
;DE - DESTINATION
; A - SIZE
COPY_STRING
LD B,0
LD C,A
LDIR
LD A,B
LD (DE),A
RET
;COPY_IT
; LD HL,WORKBUF
; LD B,0
; LD C,A
; LDIR
; LD A,B
; LD (DE),A
; EXX
; JR PARSER
PARSE_WORD
LD HL,DICT_REF-3
PUSH HL
PARSE_AGAIN
POP HL
INC HL
INC HL
INC HL
LD A,(HL)
INC HL
PUSH HL
LD H,(HL)
LD L,A
LD B,(HL)
INC HL
DJNZ DO_COMPARE
POP HL
SCF
RET
DO_COMPARE
LD DE,WORDBUF
COMPARE
LD A,(DE)
CP "a"
JR C,NOUP
RES 5,A
NOUP CP (HL)
JR NZ,PARSE_AGAIN
INC DE
INC HL
DJNZ COMPARE
POP HL
INC HL
LD A,(HL)
INC HL
LD H,(HL)
LD L,A
JP (HL)
DICT_REF
DW WORD_1,PROG_1,WORD_2,PROG_2,WORD_3,PROG_3,WORD_4,PROG_4
DW WORD_5,PROG_5,WORD_6,PROG_6,WORD_7,PROG_7,WORD_8,PROG_1
DW WORD_N
DICT_WORDS
WORD_1 DB 6,"ITEM=",0
WORD_2 DB 7,"TITLE=",0
WORD_3 DB 9,"OPTIONS=",0
WORD_4 DB 10,"AUTOEXIT=",0
WORD_5 DB 13,"DEFAULTITEM=",0
WORD_6 DB 11,"MENUCOLOR=",0
WORD_7 DB 10,"BARCOLOR=",0
WORD_8 DB 10,"MENUITEM=",0
WORD_N DB 1 ; END
;GET TITLE
PROG_2
LD HL,LST_VAR
LD DE,MENU_TITLE
PROG2L1 LD A,(HL)
LDI
OR A
JR NZ,PROG2L1
RET
;GET ITEM
PROG_1 LD HL,FST_VAR
LD A,(HL)
OR A
JR NZ,PROG1L0
LD HL,LST_VAR
PROG1L0 LD DE,(TEXT_INDEX)
PUSH DE
PROG1L1 LD A,(HL)
LDI
OR A
JR NZ,PROG1L1
LD HL,LST_VAR
PUSH DE
PROG1L2 LD A,(HL)
LDI
OR A
JR NZ,PROG1L2
LD (TEXT_INDEX),DE
POP DE
LD (IX+2),E ;PUT ITEM COMMAND ADDRESS
LD (IX+3),D
POP DE
LD (IX+0),E ;PUT ITEMNAME ADDRESS
LD (IX+1),D
LD DE,ITEMSIZE
ADD IX,DE
XOR A
LD (IX+0),A ;PUT END CODE
LD (IX+1),A
LD HL,ITEMCOUNT
INC (HL)
LD A,(FST_VAR)
OR A
RET NZ
LD A,6
CALL MESSAGE
RET
;GET OPTIONS
PROG_3 LD HL,AE_STR
CALL FIND_VAR
RET
FIND_VAR
LD DE,LST_VAR
CALL FIND_STR
RET
FIND_STR
LD (P3_L1+1),HL
P3_L1 LD HL,#0000
LD B,(HL)
P3_L2 INC HL
P3_L3 LD A,(DE)
OR A
RET Z
INC DE
CP "a"
JR C,P3NOUP
RES 5,A
P3NOUP CP (HL)
JR NZ,P3_L3
P3_L4 INC HL
LD A,(DE)
OR A
RET Z
INC DE
CP "a"
JR C,P3NOUP2
RES 5,A
P3NOUP2 CP (HL)
JR NZ,P3_L1
DJNZ P3_L4
LD A,(DE)
CP "!"
JR NC,P3_L1
INC HL
LD A,(HL)
INC HL
LD H,(HL)
LD L,A
XOR A
DEC A
RET
;OPTIONS
AE_STR DW AEXIT
DB 7,"AUTOEXIT"
AEXIT DB #00
;AUTOEXIT
PROG_4 LD A,(LST_VAR)
CP "1"
LD A,1
JR Z,P4_YES
DEC A
P4_YES LD (AEXIT),A
RET
;GET DEFAULT ITEM
PROG_5 LD HL,FST_VAR
LD A,(HL)
OR A
JR NZ,P5_AUTORUN
LD HL,LST_VAR
JR P5_L0
P5_AUTORUN
CALL P5_L0
LD HL,LST_VAR
LD C,0
P5_LOOP LD A,(HL)
INC HL
OR A
JR Z,P5_END
CALL STR2NUM
JR P5_LOOP
P5_END LD A,(RUN_TIME)
ADD A,C
LD (GO_TIME),A
LD A,60
CP C
RET NC
LD A,1
LD (QUITMODE),A
LD A,5
CALL MESSAGE
RET
; DEFAULT ITEM
P5_L0 XOR A
LD C,A ;VALUE = 0
P5_L1 LD A,(HL)
INC HL
OR A
JR Z,P5_L2
CP "0"
JR C,P5_L1
CP "9"+1
JR NC,P5_L1
SUB "0"
LD B,A ;SAVE DIGIT
LD A,C
ADD A,A
ADD A,A
ADD A,C
ADD A,A ;VALUE x 10
ADD A,B ;VALUE + DIGIT
LD C,A
JR P5_L1
P5_L2 LD A,C
LD (DEFAULT_ITEM),A
RET
; GET MENUCOLOR
PROG_6 LD A,(SCR_ATTR)
CALL PCHANGE_COLOR
LD (SCR_ATTR),A
RET
PCHANGE_COLOR
LD B,A
LD HL,FST_VAR
LD A,(HL)
OR A
JR Z,P6_NO_INK
PUSH BC
CALL MAKE_COLOR
POP BC
CP 16
JR NC,P6_NO_INK
LD C,A
LD A,B
AND #F0
OR C
LD B,A
P6_NO_INK
LD HL,LST_VAR
LD A,(HL)
OR A
JR Z,P6_NO_PAPER
PUSH BC
CALL MAKE_COLOR
POP BC
CP 16
JR NC,P6_NO_PAPER
AND #0F
RRCA
RRCA
RRCA
RRCA
LD C,A
LD A,B
AND #0F
OR C
LD B,A
P6_NO_PAPER
LD A,B
RET
MAKE_COLOR
LD C,0
P6_L1 LD A,(HL)
INC HL
OR A
JR Z,P6_END
CALL STR2NUM
JR P6_L1
P6_END LD A,C
RET
; C - VALUE "0..255"
; A - DIGIT "0".."9"
STR2NUM CP "0"
RET C
CP "9"+1
CCF
RET C
SUB "0"
LD B,A ;SAVE DIGIT
LD A,C
ADD A,A
ADD A,A
ADD A,C
ADD A,A ;VALUE x 10
ADD A,B ;VALUE + DIGIT
LD C,A
AND A
RET
; GET BARCOLOR
PROG_7 LD A,(SEL_ATTR)
CALL PCHANGE_COLOR
LD (SEL_ATTR),A
RET
;[/PARSER]

227
readme.eng Normal file
View File

@ -0,0 +1,227 @@
U S E R M E N U version 1.00
-----------------------------------------
MENU is a standard Estex program which, based on configuration files, displays
a menu to the user and invokes the corresponding action. An action may be to
invoke an Estex program or to display another menu.
You can invoke the user menu by just typing 'menu' at the command prompt. And
you should see a window that looks similar to the one below.
ÉÍÍÍÍÍÍÍÍÍÍÍÍÍ»
º User Menu º
ÇÄÄÄÄÄÄÄÄÄÄÄÄĶ
º±±±Item±1±±±±º
º Item 2 º
º Item 3 º
ÈÍÍÍÍÍÍÍÍÍÍÍÍͼ
Menus may be either static or dynamic, depending on the needs of the
application.
Static menus are stored in the files with a *.mnu extenstion (see below for
the file format). When you start menu, program has read required *.mnu file and
displays it. If you start menu.exe without any parameters then program will
search file default.mnu in the current directory.
Dynamic menus are generated by a program which get menu structure from switch
"-m". The format is the same as for a static menu except ";" used as delimiter
for each line of menu structure. (example: "menu.exe -m title=My menu;menuitem=
Item1, prog1.exe;menuitem=Item2, prog2.exe".)
USAGE
=======
MENU.EXE [-switches] [menufile.mnu] [menusection]
Format of User Menu file
==========================
A single MENUNAME.MNU file can define several different menu definitions. To
define user menu, you use the following special MENU commands:
[MENU]
Title=Menu Title
MenuColor=1
BarColor=3
AutoExit=0
DefaultItem=1
MenuItem=Text, c:\dir\program.exe -key
To define multiple configurations, follow these general steps:
1 Define a startup menu in the DEFAULT.MNU file by using a [MENU] header
followed by one or more <MENUITEM> commands. The <TITLE>, <DEFAULTITEM>,
<MENUCOLOR>, <BARCOLOR> and <AUTOEXIT> commands can be used to define special
characteristics of the startup menu.
2 Create a menu definition block in the DEFAULT.MNU file for each menu you
want. A definition block begins with a block header - a name surrounded by
square brackets.
TITLE
=======
Defines a title of the user menu.
Syntax
TITLE=title_text
Parameter
title_text
Specifies the title you want USERMENU to display for this menu. The menu
title can be up to 78 characters long and can contain any characters you
want. If you don't specify a title value, USERMENU will display 'User Menu'
as default.
-*-
MENUCOLOR
===========
Sets the text and background colors for the user menu.
Syntax
MENUCOLOR=[t,]m
Parameters
t
Specifies the color of the menu text. You can specify a value from 0 to 15;
For a list of values and colors, see "Color Values" later in this topic.
The 't' value is optional; if you do not specify a value, USERMENU displays
a white text color on the specified background color.
m
Specifies the color of the menu background. You can specify a value from 0
to 15; For a list of values and colors, see "Color Values" later in this
topic.
Be sure to specify different values for t and m, or the text will not be
readable.
BARCOLOR
===========
Sets the text and background colors for the cursor bar.
Syntax
BARCOLOR=[t,]m
Parameters
t
Specifies the color of the bar text. You can specify a value from 0 to 15;
For a list of values and colors, see "Color Values" later in this topic.
The 't' value is optional; if you do not specify a value, USERMENU displays
a black text color on the specified background color.
m
Specifies the color of the bar background. You can specify a value from 0
to 15; For a list of values and colors, see "Color Values" later in this
topic.
Be sure to specify different values for t and m, or the text will not be
readable.
Color Values
--------------
Valid color values are from 0 to 15, as follows:
0 Black 8 Gray
1 Blue 9 Bright blue
2 Green 10 Bright green
3 Cyan 11 Bright cyan
4 Red 12 Bright red
5 Magenta 13 Bright magenta
6 Brown 14 Yellow
7 White 15 Bright white
Note: For background, colors 8 through 15 blink.
-*-
AUTOEXIT
==========
Specifies method of the command launcher.
Syntax
AUTOEXIT=[0|1]
Parameters
0
If set to 0, then USERMENU displays menu again, when command are terminated.
1
If set to 1, then USERMENU don not displays menu again, when command are
terminated.
-*-
MENUDEFAULT
=============
Specifies the default menu item on the user menu and sets a timeout value if
desired. If you do not use this command, USERMENU sets the default to item 1.
Syntax
MENUDEFAULT=item[,timeout]
Parameters
item
Specifies the default menu item by its number. The item must be defined
elsewhere in the *.MNU file. When USERMENU displays the startup menu, the
default menu item is highlighted.
timeout
Determines how many seconds USERMENU waits before starting the program with
the default item. If you don't specify a timeout value, USERMENU does not
continue until the ENTER key is pressed or mouse is clicked. You can specify
a timeout value from 0 to 60 seconds.
-*-
MENUITEM
==========
Defines an item on the startup menu. You can have up to twenty four menu items
per menu.
Syntax
MENUITEM=menu_text, command
Parameters
menu_text
Specifies the text you want USERMENU to display for this menu item. The menu
text can be up to 78 characters long and can contain any characters you
want.
command
Specifies the name of the associated program or command. If the menu item is
selected from the startup menu, USERMENU carries out the command.
-*-
Please contact us if you have any problems or have a suggestion!
PETERS PLUS LTD
http://www.petersplus.com
e-mail: sprinter@petersplus.ru

397
screen.asm Executable file
View File

@ -0,0 +1,397 @@
;DEBUG
;////////
FVAR DB "1-ST VAR: ",0
SVAR DB "2-ND VAR: ",0
DEBUG_PRINTZ
LD (HL_D_POINT+1),HL
CALL PUSHALL
HL_D_POINT
LD HL,#0000
LD C,DSS_PCHARS
RST #10
CALL CRLF
CALL POPALL
RET
PUSHALL
EX (SP),HL ;PUSH HL & GET ADDRESS
PUSH DE
PUSH BC
PUSH AF
EXX
PUSH HL
PUSH DE
PUSH BC
EXX
EX AF,AF'
PUSH AF
EX AF,AF'
PUSH IX
PUSH IY
JP (HL) ;JUMP TO ADDRESS (RET)
POPALL
POP HL ;GET ADDRESS
POP IY
POP IX
EX AF,AF'
POP AF
EX AF,AF'
EXX
POP BC
POP DE
POP HL
EXX
POP AF
POP BC
POP DE
EX (SP),HL ;PUT ADDRESS
RET
;////////
;DEBUG
;SHOW WINDOW ARRAY
WIN_SHOW
LD DE,(WIN_XY)
LD A,(WIN_H)
LD H,A
LD A,(WIN_W)
LD L,A
IN A,(#E2)
LD B,A
LD C,DSS_WINREST
LD IX,MYWIN
DI
RST #10
EI
RET
SAVE_POSITION
DW 0
WIN_SAVE
LD C,DSS_CURSOR
RST #10
LD (SAVE_POSITION),DE
; RET
;
LD DE,(WIN_XY)
LD A,(WIN_H)
LD H,A
LD A,(WIN_W)
LD L,A
IN A,(#E2)
LD B,A
LD C,DSS_WINCOPY
LD IX,SCR_BUF
DI
RST #10
EI
RET
WIN_BACK
LD DE,(WIN_XY)
LD A,(WIN_H)
LD H,A
LD A,(WIN_W)
LD L,A
IN A,(#E2)
LD B,A
LD C,DSS_WINREST
LD IX,SCR_BUF
DI
RST #10
EI
LD DE,(SAVE_POSITION)
LD C,DSS_LOCATE
RST #10
RET
WIN_CLS
LD HL,0
LD BC,(WIN_W)
; INC BC
; INC BC
LD A,(WIN_H)
OR A
RET Z
MULHGT ADD HL,BC
DEC A
JR NZ,MULHGT
ADD HL,HL
DEC HL
DEC HL
PUSH HL
LD HL,MYWIN
LD D,H
LD E,L
LD A," "
LD (HL),A
INC HL
LD A,(SCR_ATTR)
LD (HL),A
INC HL
EX DE,HL
POP BC
LDIR
RET
WIN_XY
WIN_X DB #16
WIN_Y DB 10
WIN_H DW 7
WIN_W DW 34
WIN_ADDR
DW MYWIN
WIN_CUR_XY
DW 0
WIN_LOCATE
LD (WIN_CUR_XY),DE
LD HL,0
INC D
DEC D
JR Z,TOP_LN
LD BC,(WIN_W)
SLA C
ADDYC1 ADD HL,BC
DEC D
JR NZ,ADDYC1
TOP_LN SLA E
ADD HL,DE
LD DE,MYWIN
ADD HL,DE
LD (WIN_ADDR),HL
RET
WIN_PCHARS
LD A,(HL)
INC HL
OR A
RET Z
CP 13
JR Z,CR_L
CP 10
JR Z,LF_L
CALL WIN_PUTCHAR
JR WIN_PCHARS
CR_L LD DE,(WIN_CUR_XY)
LD D,0
PUSH HL
CALL WIN_LOCATE
POP HL
JR WIN_PCHARS
LF_L LD DE,(WIN_CUR_XY)
INC E
PUSH HL
CALL WIN_LOCATE
POP HL
JR WIN_PCHARS
WIN_PUTCHAR
LD DE,(WIN_ADDR)
LD (DE),A
INC DE
INC DE
LD (WIN_ADDR),DE
RET
CRLF LD A,#0D
LD C,DSS_PUTCHAR
RST #10
LD A,#0A
LD C,DSS_PUTCHAR
RST #10
RET
MESSAGE LD E,A
LD D,0
CALL MESAGE
CALL PRINTZ
RET
MESAGE INC DE
LD HL,MSG0
LD BC,MSG1-MSG0
LCPIR2 XOR A
CPIR
RET PO
RET NZ
DEC DE
LD A,D
OR E
JP NZ,LCPIR2
RET
PRINTZ LD A,(HL)
INC HL
OR A
RET Z
CP "%"
JR NZ,PRINTZ2
LD A,(HL)
INC HL
SUB "1"
PUSH HL
LD L,A
LD H,0
ADD HL,HL
ADD HL,HL
ADD HL,HL
ADD HL,HL
LD BC,PRM1
ADD HL,BC
LD C,DSS_PCHARS
RST #10
POP HL
JR PRINTZ
PRINTZ2 LD C,DSS_PUTCHAR
RST #10
JP PRINTZ
LOCATE_
LD C,DSS_LOCATE
RST #10
RET
PRINT_A
PRINT_ LD C,DSS_PUTCHAR
RST #10
RET
MOVEBLOCKZ
LD BC,255
JR PUTPRMA
PUTVAR LD DE,PRM1
PUTPRM LD BC,15
PUTPRMA LD A,(HL)
LDI
RET PO
OR A
JR NZ,PUTPRMA
RET
PRM1 DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
PRM2 DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
PRM3 DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
PRM4 DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
PRM5 DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
PRM6 DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
PRM7 DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
PRM8 DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
PRM9 DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
; PRINT MODULE
DUMP LD B,2
DUMPLP1 PUSH BC
PUSH HL
CALL CRLF
POP HL
CALL PHEXSTR
POP BC
DJNZ DUMPLP1
CALL CRLF
RET
PHEX LD E,A
RRCA
RRCA
RRCA
RRCA
AND #0F
ADD A,#30
CP #3A
JR C,PHEX2
ADD A,7
PHEX2 CALL PRINT_
LD A,E
AND #0F
ADD A,#30
CP #3A
JR C,PHEX3
ADD A,7
PHEX3 CALL PRINT_
RET
PHEXSTR LD B,#10
PHS1 PUSH BC
LD A,(HL)
CALL PHEX
LD A,#20
CALL PRINT_
POP BC
INC HL
DJNZ PHS1
RET
PRINTNUM
LD HL,PRM1
NUMC LD C,"0"-1
NUMC1 INC C
SUB 100
JR NC,NUMC1
ADD A,100
LD (HL),C
INC HL
NUMB LD C,"0"-1
NUMB1 INC C
SUB 10
JR NC,NUMB1
ADD A,10
ADD A,"0"
LD (HL),C
INC HL
LD (HL),A
INC HL
LD (HL),0
RET
PRINT99 LD L,A
LD H,0
JR PRL99
PRINTHL
LD DE,10000
CALL DIGIT
LD DE,1000
CALL DIGIT
LD DE,100
CALL DIGIT
PRL99 LD DE,10
CALL DIGIT
LD A,"0"
ADD A,L
JP PRINT_A
DIGIT LD B,#FF
PH1 INC B
AND A
SBC HL,DE
JR NC,PH1
ADD HL,DE
LD A,"0"
ADD A,B
JP PRINT_A

22
usage.txt Normal file
View File

@ -0,0 +1,22 @@
keys:
-k keyboard disabled
-u mouse disabled
-o without message output
-x autoexit from menu when program are terminated
-m <menu defination> item=Flex Navigator, c:\fn\fn.exe; item=Command prompt, c:\system.exe /s
[MENU]
title=<menu title>
item=<item name>, <program> <hot key>
options=autoexit
colours=blue, white
defaultitem=<number>, <time>