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]