From dad22dfc3049f6fe7ed8be355b00422b995dbf3b Mon Sep 17 00:00:00 2001 From: burniouf Date: Tue, 18 Oct 2022 07:56:59 +0200 Subject: [PATCH] CC:SWITCH/CASE ASM:added \% KERNEL:BUGFIX in DevMgr LIBGUI:New API --- .Floppies/A2OSX.BUILD.po | Bin 33553920 -> 33553920 bytes .Fonts/SYSx7.fnt | Bin 3472 -> 3472 bytes BIN/ASM.S.txt | 4 +- BIN/CC.S.CORE.txt | 27 +- BIN/CC.S.EXP.txt | 35 +- BIN/CC.S.F.txt | 10 +- BIN/CC.S.KW.txt | 376 ++++++++-------- BIN/CC.S.PCC.txt | 131 +++--- BIN/CC.S.STMT.txt | 258 +++++++++-- BIN/CC.S.SYM.txt | 34 +- BIN/CC.S.txt | 33 +- BIN/FNT2FON.S.txt | 140 +++++- BIN/GUITEST1.S.txt | 177 ++++---- BIN/PS.S.txt | 7 +- BIN/SH.S.CMD.txt | 1 + BIN/SH.S.IO.txt | 40 ++ BIN/SH.S.txt | 18 +- DRV/DHGR.DRV.S.txt | 66 +-- INC/LIBGUI.I.txt | 117 +++-- LIB/LIBGUI.G.CUR.txt | 405 ------------------ LIB/LIBGUI.G.PTR.txt | 413 ++++++++++++++++++ LIB/LIBGUI.S.CUR.txt | 149 ------- LIB/LIBGUI.S.DRAW.txt | 58 +-- LIB/LIBGUI.S.FON.txt | 2 +- LIB/LIBGUI.S.MBAR.txt | 288 +++++++++---- LIB/LIBGUI.S.MENU.txt | 833 ++++++++++++++++++++++-------------- LIB/LIBGUI.S.MOU.txt | 76 ++-- LIB/LIBGUI.S.MSG.txt | 2 +- LIB/LIBGUI.S.OBJ.txt | 136 +++++- LIB/LIBGUI.S.PTR.txt | 161 +++++++ LIB/LIBGUI.S.SYSBAR.txt | 35 +- LIB/LIBGUI.S.WND.txt | 188 ++------ LIB/LIBGUI.S.txt | 243 ++++------- ROOT/make/_files.32MB.txt | 1 + SBIN/GUI.S.txt | 6 +- SCMASM.31/SCMASM.S.DIR1.txt | 4 +- SYS/KERNEL.S.DEV.txt | 12 +- 37 files changed, 2580 insertions(+), 1906 deletions(-) create mode 100644 LIB/LIBGUI.G.PTR.txt create mode 100644 LIB/LIBGUI.S.PTR.txt diff --git a/.Floppies/A2OSX.BUILD.po b/.Floppies/A2OSX.BUILD.po index bc961c9275eea86633ee4e9f911b7f547d5835ff..4ea1c77109305a2fd96f69eb4016a83718b9f42b 100644 GIT binary patch delta 511063 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 C2pXaQ delta 504393 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 zKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_ z009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz z00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_< z0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb z2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$## zAOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;| zfB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U< z00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa z0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV= z5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHaf zKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_ z009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz z00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_< z0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb z2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$## zAOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;| zfB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U< z00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa z0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV= z5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHaf zKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_ z009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz z00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_< z0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb z2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$## zAOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;| zfB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U< z00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa z0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV= z5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHaf zKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_ n009U<00Izz00bZa0SG_<0uX=z1Rwwb2teTf1A*ldcEtY!i5j8SW^B(KdSus z;a(mE?KqB192g;HvZbV~P*wqt|G=wMiE4&iVLzkq+lHW|B}^n+@+<*Mb6MiIe7PU$ CGeQ6W diff --git a/BIN/ASM.S.txt b/BIN/ASM.S.txt index 79bdfd09..e67c4431 100644 --- a/BIN/ASM.S.txt +++ b/BIN/ASM.S.txt @@ -525,10 +525,10 @@ T.LI .PS "ON" .HS 00 *-------------------------------------- DIR.EscChars .AS "abefnrtv" - .HS 5C27223F \'"? + .HS 5C27223F25 \'"?% DIR.EscChars.L .EQ *-DIR.EscChars DIR.EscCodes .HS 07081B0C0A0D090B - .HS 5C27223F + .HS 5C27223F25 *--------------------------------------- SRC.MOD.RESERVED .PS "#/^<>" SRC.EXP.RESERVED .PS "^!|&<=>+-*/" diff --git a/BIN/CC.S.CORE.txt b/BIN/CC.S.CORE.txt index a21aa5ad..d938de4e 100644 --- a/BIN/CC.S.CORE.txt +++ b/BIN/CC.S.CORE.txt @@ -142,7 +142,7 @@ CORE.CompileLine jsr CORE.GetNCharNB Skip '}' - jsr CC.STMT.CPStmt.END + jsr STMT.CPStmt.END bcs .9 bra CORE.CompileLine @@ -152,7 +152,7 @@ CORE.CompileLine jsr CORE.GetNCharNB Skip ';' - jsr CC.STMT.Stmt.END + jsr STMT.Stmt.END bcs .9 bra CORE.CompileLine @@ -181,7 +181,7 @@ CORE.CompileStmt .1 >LDYA L.CC.SCSPEC jsr CC.LookupID bcs .2 - + jmp (J.CC.SCSPEC,x) .2 >LDYA L.CC.TYPEQUAL @@ -513,35 +513,40 @@ CC.CheckCharNB cmp #C.SPACE clc .9 rts *-------------------------------------- +* https://riptutorial.com/c/example/16255/character-literals +* 'c', '\abefnrtv', '\123', '\xFF' +*-------------------------------------- CC.GetNextCharEsc jsr CC.GetNextChar bcs .9 - + cmp #'\' bne .8 - + jsr CC.GetNextChar bcs .8 - + ldx #CC.EscChars.Cnt-1 .1 cmp CC.EscChars,x beq .6 - + dex bpl .1 - + +* TODO : \123, \xFF + sec rts - + .6 lda CC.EscCodes,x bit .9 clc rts - + .8 clc clv -.9 rts +.9 rts *-------------------------------------- CC.GetNextChar inc ZPLineBufPtr bne CC.GetChar diff --git a/BIN/CC.S.EXP.txt b/BIN/CC.S.EXP.txt index ab0c7812..a0bc67fe 100644 --- a/BIN/CC.S.EXP.txt +++ b/BIN/CC.S.EXP.txt @@ -272,6 +272,35 @@ EXP.BOPS bit #SYM.Q.PPPOINTER clc rts *-------------------------------------- +EXP.GetIntegral jsr CC.GetCharNB + cmp #''' + bne .1 + + jsr CC.GetNextCharEsc + bcs .9 + + tay + + jsr CC.GetNextChar + bcs .9 + + cmp #''' + bne .9 + + jsr CORE.GetNCharNB skip ' + + lda #0 Y,A = integral + + clc + rts + +.1 jsr CC.IsDigit10 + bcc EXP.IntConst + +.9 lda #E.CSYN +* sec + rts +*-------------------------------------- EXP.IntConst >PUSHW ZPLineBufPtr >PUSHWI ZPLineBufPtr >PUSHBI 10 @@ -283,7 +312,7 @@ EXP.IntConst >PUSHW ZPLineBufPtr >PULLA inc pStack - inc pStack + inc pStack Y,A = integral rts *-------------------------------------- @@ -346,9 +375,6 @@ EXP.GetNum cpy #SYM.T.FLOAT * clc .99 rts *-------------------------------------- -* https://riptutorial.com/c/example/16255/character-literals -* 'c', '\n', '\123', '\xAB' -*-------------------------------------- EXP.GetChar ldy ZPPtr2+1 bne .9 @@ -373,7 +399,6 @@ EXP.GetChar ldy ZPPtr2+1 jsr CORE.GetNCharNB skip ' - clc rts diff --git a/BIN/CC.S.F.txt b/BIN/CC.S.F.txt index f63872a8..7300505b 100644 --- a/BIN/CC.S.F.txt +++ b/BIN/CC.S.F.txt @@ -7,7 +7,7 @@ F.Decl stz LocalPtr bcs .99 ldx #$80 CPStmt.fDef state - jsr CC.STMT.CPStmt.NEW + jsr STMT.CPStmt.NEW bcs .99 jsr SYM.NewScope @@ -62,10 +62,10 @@ F.Decl stz LocalPtr bne .7 jsr SYM.FreeScope discard local scope - + lda CStackPtr clc - adc #8 + adc #CPS sta CStackPtr discard this CPStmt + T/Q stz LocalPtr reset for DEBUG Message @@ -129,9 +129,9 @@ F.DeclGetTQ lda (ZPLineBufPtr) lda (ZPLookupSymPtr),y cmp #SYM.SC.TYPEDEF bne .9 - + jmp TYPE.GetTQInYA2 - + .6 >LDYA L.CC.TYPEQUAL jsr CC.LookupID bcs .9 diff --git a/BIN/CC.S.KW.txt b/BIN/CC.S.KW.txt index 99d45554..fbdc94dd 100644 --- a/BIN/CC.S.KW.txt +++ b/BIN/CC.S.KW.txt @@ -3,7 +3,7 @@ NEW *-------------------------------------- * Built in Keywords *-------------------------------------- -KW.IF jsr KW.BEGIN00 +KW.IF jsr STMT.NewCPS00 bcs .99 jsr CC.GetCharNB @@ -34,7 +34,7 @@ KW.IF jsr KW.BEGIN00 cmp #')' bne .9 - jmp KW.STMT + jmp STMT.SetCPSType .9 lda #E.CSYN sec @@ -51,7 +51,7 @@ KW.IF.END jsr CORE.GetCharNBNL bcc .2 .1 lda #'E' define ELSE Label - jsr KW.NewLabel + jsr STMT.NewLabelA bcs .99 clv pop context @@ -66,16 +66,14 @@ KW.IF.END jsr CORE.GetCharNBNL bcs .99 lda #'E' define ELSE Label - jsr KW.NewLabel + jsr STMT.NewLabelA bcs .99 - inc CStackPtr pop ; or } - - lda #4 replace IF by ELSE keyword + lda #KW.ELSE.ID replace IF by ELSE keyword ldy CStackPtr sta (ZPCCStack),y - jsr KW.STMT + jsr STMT.SetCPSType bcs .99 bit .99 set V : DONT pop context @@ -90,13 +88,13 @@ KW.ELSE lda #E.CSYN illegal rts *-------------------------------------- KW.ELSE.END lda #'X' define EXIT Label - jsr KW.NewLabel + jsr STMT.NewLabelA bcs .99 clv pop context .99 rts *-------------------------------------- -KW.WHILE jsr KW.BEGIN00 +KW.WHILE jsr STMT.NewCPS00 bcs .99 lda #'C' define CONT Label @@ -131,7 +129,7 @@ KW.WHILE jsr KW.BEGIN00 cmp #')' bne .9 - jmp KW.STMT + jmp STMT.SetCPSType .9 lda #E.CSYN sec @@ -142,7 +140,7 @@ KW.WHILE.END >LDYA L.PCC.SLEEP bcs .99 lda #'C' - jsr KW.GetLabel + jsr STMT.GetLabelA bcs .99 lda #$4C @@ -150,21 +148,21 @@ KW.WHILE.END >LDYA L.PCC.SLEEP bcs .99 lda #'B' define BREAK Label - jsr KW.NewLabel + jsr STMT.NewLabelA bcs .99 clv pop context .99 rts *-------------------------------------- -KW.DO jsr KW.BEGIN00 +KW.DO jsr STMT.NewCPS00 bcs .99 lda #'C' define CONT Label jsr SYM.NewA bcs .99 - jmp KW.STMT + jmp STMT.SetCPSType .99 rts *-------------------------------------- @@ -187,7 +185,7 @@ KW.DO.END >LDYA L.CC.KW2.DO Check allowed KW for DO.... jsr KW.TestnZero lda #'C' - jsr KW.GetLabel + jsr STMT.GetLabelA bcs .99 lda #$4C emit JMP cont @@ -195,7 +193,7 @@ KW.DO.END >LDYA L.CC.KW2.DO Check allowed KW for DO.... bcs .99 lda #'B' define BREAK Label - jsr KW.NewLabel + jsr STMT.NewLabelA bcs .99 jsr CC.GetCharNB @@ -237,7 +235,7 @@ KW.FOR jsr CC.GetCharNB cmp #'(' bne .29 - jsr KW.BEGIN00 + jsr STMT.NewCPS00 bcs .29 jsr CORE.GetNCharNB skip '(' @@ -325,7 +323,7 @@ KW.FOR jsr CC.GetCharNB jsr SYM.NewA bcs .99 - jmp KW.STMT + jmp STMT.SetCPSType .9 lda #E.CSYN sec @@ -337,7 +335,7 @@ KW.FOR.END lda #$60 bcs .99 lda #'B' define BREAK Label - jsr KW.NewLabel + jsr STMT.NewLabelA bcs .99 clv pop context @@ -362,21 +360,27 @@ KW.SWITCH jsr CC.GetCharNB cpy #SYM.T.UCHAR bcc .97 - cpy #SYM.T.FLOAT + cpy #SYM.T.ULONG bcs .97 - phy - tya - jsr CC.Push push integral type - ply + cpy #SYM.T.SINT+1 + bcs .1 + + >LDYA L.PCC.8to16 make char an int + jsr CODE.EmitPCC bcs .99 - lda CC.TYPESIZE-1,y +.1 >LDYAI 256 + >SYSCALL GetMem + bcs .99 + txa + jsr CC.Push push CPS.hMEM - jsr CC.Push push SizeOf(type) + lda #0 + jsr CC.Push push CPS.Ptr bcs .99 - jsr KW.BEGIN + jsr STMT.NewCPS bcs .99 jsr CC.GetCharNB @@ -385,7 +389,15 @@ KW.SWITCH jsr CC.GetCharNB cmp #')' bne .98 - jmp KW.STMT + lda #'J' + jsr STMT.LookupLabelA + bcs .99 + + lda #$4C emit JMP JmpTable + jsr CODE.TOABSYX + bcs .99 + + jmp STMT.SetCPSType .97 lda #E.TMISMATCH sec @@ -393,58 +405,169 @@ KW.SWITCH jsr CC.GetCharNB .98 lda #E.CSYN sec -.99 rts +.99 +KW.SWITCH.RTS rts *-------------------------------------- -KW.SWITCH.END - lda #'B' define BREAK Label - jsr KW.NewLabel +KW.SWITCH.END lda #'J' define JMP Label + jsr STMT.NewLabelA + bcs KW.SWITCH.RTS + + lda CStackPtr + clc + adc #CPS.hMEM + tay + + lda (ZPCCStack),y + >SYSCALL GetMemPtr + >STYA ZPPtr1 + + lda CStackPtr + clc + adc #CPS.Ptr + tay + lda (ZPCCStack),y + sta ZPPtr2+1 + + stz ZPPtr2 + +.1 ldy ZPPtr2 + cpy ZPPtr2+1 + beq .2 + + lda (ZPPtr1),y + pha + iny + lda (ZPPtr1),y + tax + pla + + jsr CODE.LDAXI bcs .99 + >LDYA L.PCC.JmpOnYA + jsr CODE.EmitPCC + bcs .99 + + ldy ZPPtr2 + iny + iny + lda (ZPPtr1),y + tax + iny + lda (ZPPtr1),y + iny + sty ZPPtr2 + tay + + lda #$4C emit JMP Case ... + jsr CODE.TOABSYX + bcs .99 + + bra .1 + +.2 >LDYA L.PCC.Pop16 + jsr CODE.EmitPCC + bcs .99 + + lda #'D' + jsr STMT.LookupLabelA + bcs .3 + + lda #$4C emit JMP Default + jsr CODE.TOABSYX + bcs .99 + +.3 lda #'B' define BREAK Label + jsr STMT.NewLabelA + bcs .99 + + lda CStackPtr + clc + adc #CPS.hMEM + tay + + lda (ZPCCStack),y + >SYSCALL FreeMem + clv pop context .99 rts *-------------------------------------- KW.CASE ldy CStackPtr - beq .9 + beq .98 - iny skip ; or } lda (ZPCCStack),y - cmp #10 SWITCH ?? - bne .9 + cmp #KW.SWITCH.ID SWITCH ?? + bne .98 + + tya + clc + adc #CPS.hMEM + tay + lda (ZPCCStack),y + >SYSCALL GetMemPtr + >STYA ZPPtr1 + + jsr EXP.GetIntegral + bcs .99 + + >STYA ZPPtr2 lda CStackPtr clc - adc #7 + adc #CPS.Ptr + tay + lda (ZPCCStack),y tay - lda (ZPCCStack),y type - tay - lda #0 for integral type + lda ZPPtr2 + sta (ZPPtr1),y + iny + lda ZPPtr2+1 + sta (ZPPtr1),y + iny - jsr EXP.Eval - bcs .99 + lda ZPCCCode + sta (ZPPtr1),y + iny + lda ZPCCCode+1 + sta (ZPPtr1),y + iny + beq .97 + + phy + + lda CStackPtr + clc + adc #CPS.Ptr + tay + pla + sta (ZPCCStack),y jsr CC.GetCharNB - bcs .9 + bcs .98 cmp #':' - bne .9 + bne .98 jsr CORE.GetNCharNB skip ':' clc rts -.9 lda #E.CSYN +.97 lda #E.BUF + sec + rts + +.98 lda #E.CSYN sec .99 rts *-------------------------------------- KW.DEFAULT ldy CStackPtr beq .9 - iny skip ; or } lda (ZPCCStack),y - cmp #10 SWITCH ?? + cmp #KW.SWITCH.ID bne .9 jsr CC.GetCharNB @@ -455,8 +578,8 @@ KW.DEFAULT ldy CStackPtr jsr CORE.GetNCharNB skip ':' - clc - rts + lda #'D' define DEFAULT Label + jmp STMT.NewLabelA .9 lda #E.CSYN sec @@ -464,7 +587,7 @@ KW.DEFAULT ldy CStackPtr *-------------------------------------- KW.BREAK lda #'B' - jsr KW.LookupLabel + jsr STMT.LookupLabelA bcs .9 lda #$4C emit JMP break @@ -476,7 +599,7 @@ KW.BREAK lda #'B' *-------------------------------------- KW.CONTINUE lda #'C' - jsr KW.LookupLabel + jsr STMT.LookupLabelA bcs .9 lda #$4C emit JMP cont @@ -489,13 +612,12 @@ KW.CONTINUE lda #'C' KW.RETURN ldy CStackPtr beq .9 -.1 iny skip ; or } - lda (ZPCCStack),y +.1 lda (ZPCCStack),y CPS.KW bmi .7 f() tya clc - adc #5 skip CPStmt (6 bytes) + adc #CPS skip CPStmt (6 bytes) tay bcc .1 @@ -503,21 +625,18 @@ KW.RETURN ldy CStackPtr sec .99 rts -.7 iny skip bState - iny skip Locals - - iny - iny skip CPSID - - iny get SYM.T +.7 tya + clc + adc #CPS.T + tay lda (ZPCCStack),y pha - iny get SYM.Q + iny get CPS.Q lda (ZPCCStack),y - ply + ply T jsr EXP.Eval bcs .99 @@ -535,135 +654,6 @@ KW.SIZEOF sec rts *-------------------------------------- -KW.BEGIN00 lda #0 - jsr CC.Push no T/Q - bcs KW.BEGIN.RTS - - jsr CC.Push - bcs KW.BEGIN.RTS - -KW.BEGIN jsr SYM.NewCPSID - bcs .99 - - >LDA.G CC.CPSPFX+3 - jsr CC.Push - bcs .99 - - >LDA.G CC.CPSPFX+2 - jsr CC.Push - bcs .99 - - lda LocalPtr Locals - jsr CC.Push - bcs .99 - - lda #0 bState - jsr CC.Push - bcs .99 - - >LDA.G CC.CmdSave - jmp CC.Push - -.99 -KW.BEGIN.RTS rts -*-------------------------------------- -KW.STMT jsr CORE.GetNCharNBNL - bcs .9 - - cmp #'{' - bne .1 - - jsr CORE.GetNCharNB skip '{' - bcs .99 - - lda #'}' - jmp CC.Push - -.1 lda #';' - jmp CC.Push - -.9 lda #E.CSYN - sec -.99 rts -*-------------------------------------- -KW.NewLabel pha - - lda CStackPtr - clc - adc #4 - tay - - lda (ZPCCStack),y - pha - iny - lda (ZPCCStack),y - ply - >STYA.G CC.CPSPFX+2 - - pla - jmp SYM.NewA -*-------------------------------------- -KW.GetLabel pha - - lda CStackPtr - clc - adc #4 - tay - - lda (ZPCCStack),y - pha - iny - lda (ZPCCStack),y - ply - >STYA.G CC.CPSPFX+2 - - pla - jmp SYM.LookupA -*-------------------------------------- -KW.LookupLabel pha - - ldy CStackPtr - sty ArgIndex - -.1 ldy ArgIndex - beq .9 - - iny skip ; or } - - lda (ZPCCStack),y - bmi .9 f() - - iny - iny - iny - - lda (ZPCCStack),y - pha - iny - lda (ZPCCStack),y - iny - - iny - iny - - sty ArgIndex - - ply - >STYA.G CC.CPSPFX+2 - - pla - pha - jsr SYM.LookupA - bcs .1 - - pla -.8 rts - -.9 pla - lda #E.CSYN - sec -.99 rts -*-------------------------------------- * Input : Value on Stack, Y,A = Type/Qual *-------------------------------------- KW.TestZero jsr EXP.GetYASizeOfInAXC diff --git a/BIN/CC.S.PCC.txt b/BIN/CC.S.PCC.txt index 1e997589..2afb5ab1 100644 --- a/BIN/CC.S.PCC.txt +++ b/BIN/CC.S.PCC.txt @@ -33,19 +33,19 @@ PCC.FH.LIBS .EQ *-PCC.FH.ORG PCC.FH.INIT >LDYA PCC.FH.ORG+PCC.FH.LIBS >STYA ZS.RT.Ptr1 - + ldx #0 .1 lda (ZS.RT.Ptr1) beq .8 - + phx - + >LDYA ZS.RT.Ptr1 >SYSCALL LoadLib plx bcs .9 - + sta PCC.PH.hLIBs,x phx >SYSCALL GetMemPtr @@ -57,32 +57,32 @@ PCC.FH.INIT >LDYA PCC.FH.ORG+PCC.FH.LIBS inx ldy #0 - + .2 iny lda (ZS.RT.Ptr1),y bne .2 - + tya sec adc ZS.RT.Ptr1 sta ZS.RT.Ptr1 bcc .1 - + inc ZS.RT.Ptr1+1 bra .1 - + .8 clc .9 rts - + PCC.FH.QUIT ldx #12 .1 lda PCC.PH.hLIBs,x beq .2 - + phx >SYSCALL UnloadLib plx - + .2 dex dex dex @@ -93,7 +93,7 @@ PCC.FH.QUIT ldx #12 rts PCC.PH.hLIBs .DA #0 -PCC.PH.JMPLIBs jmp $FFFF +PCC.PH.JMPLIBs jmp $FFFF .DA #0 jmp $FFFF .DA #0 @@ -139,7 +139,7 @@ PCC.FH.RUN lda #0 >PUSHA >PUSHA int ARGC (hi byte) - + ldy #S.PS.ARGC lda (pPS),y >PUSHA int ARGC (lo byte) @@ -214,6 +214,31 @@ PCC.SetRetValue .DA #PCC.SetRetValue.L PCC.SetRetValue.L .EQ *-PCC.SetRetValue *-------------------------------------- +PCC.8to16 .DA #PCC.8to16.L + lda (pStack) + pha + lda #0 + sta (pStack) + pla + >PUSHA + +PCC.8to16.L .EQ *-PCC.8to16 +*-------------------------------------- +PCC.JmpOnYA .DA #PCC.JmpOnYA.L + cmp (pStack) + bne .2+5 skip JMP abs + txa + ldy #1 + cmp (pStack),y +.2 bne .2+5 skip JMP abs + +PCC.JmpOnYA.L .EQ *-PCC.JmpOnYA +*-------------------------------------- +PCC.Pop16 .DA #PCC.Pop16.L + inc pStack + inc pStack +PCC.Pop16.L .EQ *-PCC.Pop16 +*-------------------------------------- PCC.TestZero1 .DA #PCC.TestZero1.L >PULLA tay @@ -464,14 +489,14 @@ PCC.Inc2 .DA #PCC.Inc2.L inc sta (ZS.RT.Ptr2) bne .1 - + ldy #1 lda (ZS.RT.Ptr2),y inc sta (ZS.RT.Ptr2),y - -.1 - + +.1 + PCC.Inc2.L .EQ *-PCC.Inc2 *-------------------------------------- PCC.Inc4 .DA #PCC.Inc4.L @@ -479,20 +504,20 @@ PCC.Inc4 .DA #PCC.Inc4.L inc sta (ZS.RT.Ptr2) bne .2 - + ldy #1 .1 lda (ZS.RT.Ptr2),y inc sta (ZS.RT.Ptr2),y beq .2 - + iny cpy #4 bne .1 - -.2 - + +.2 + PCC.Inc4.L .EQ *-PCC.Inc4 *-------------------------------------- PCC.Dec1 .DA #PCC.Dec1.L @@ -508,14 +533,14 @@ PCC.Dec2 .DA #PCC.Dec2.L sta (ZS.RT.Ptr2) plp bne .1 - + ldy #1 lda (ZS.RT.Ptr2),y dec sta (ZS.RT.Ptr2),y - -.1 - + +.1 + PCC.Dec2.L .EQ *-PCC.Dec2 *-------------------------------------- PCC.Dec4 .DA #PCC.Dec4.L @@ -524,31 +549,31 @@ PCC.Dec4 .DA #PCC.Dec4.L sbc #0 sta (ZS.RT.Ptr2) bcs .2 - + ldy #1 .1 lda (ZS.RT.Ptr2),y sbc #0 sta (ZS.RT.Ptr2),y bcs .2 - + iny cpy #4 bne .1 - -.2 - + +.2 + PCC.Dec4.L .EQ *-PCC.Dec4 *-------------------------------------- PCC.BOPS.bMUL .DA #PCC.BOPS.bMUL.L ldx #0 result - + >PULLA tay b2 - + .1 tya beq .8 - + lsr tay bcc .2 @@ -557,7 +582,7 @@ PCC.BOPS.bMUL .DA #PCC.BOPS.bMUL.L txa adc (pStack) b1 tax - + .2 lda (pStack) b1*2 asl sta (pStack) @@ -565,7 +590,7 @@ PCC.BOPS.bMUL .DA #PCC.BOPS.bMUL.L .8 txa sta (pStack) - + PCC.BOPS.bMUL.L .EQ *-PCC.BOPS.bMUL *-------------------------------------- PCC.BOPS.cMUL @@ -592,39 +617,39 @@ PCC.BOPS.SUB .DA #PCC.BOPS.SUB.L sbc (pStack) sta (pStack),y inc pStack -PCC.BOPS.SUB.L .EQ *-PCC.BOPS.SUB +PCC.BOPS.SUB.L .EQ *-PCC.BOPS.SUB *-------------------------------------- PCC.BOPS.SHL .DA #PCC.BOPS.SHL.L >PULLA tax beq .8 - + lda (pStack) .1 asl dex bne .1 - + sta (pStack) - + .8 -PCC.BOPS.SHL.L .EQ *-PCC.BOPS.SHL +PCC.BOPS.SHL.L .EQ *-PCC.BOPS.SHL *-------------------------------------- PCC.BOPS.SHR .DA #PCC.BOPS.SHR.L >PULLA tax beq .8 - + lda (pStack) .1 lsr dex bne .1 - + sta (pStack) - + .8 -PCC.BOPS.SHR.L .EQ *-PCC.BOPS.SHR +PCC.BOPS.SHR.L .EQ *-PCC.BOPS.SHR *-------------------------------------- PCC.BOPS.L .DA #PCC.BOPS.L.L >PULLA @@ -634,7 +659,7 @@ PCC.BOPS.L .DA #PCC.BOPS.L.L lda #0 sta (pStack) rts - + .8 lda #1 sta (pStack) PCC.BOPS.L.L .EQ *-PCC.BOPS.L @@ -648,7 +673,7 @@ PCC.BOPS.G .DA #PCC.BOPS.G.L .1 lda #0 sta (pStack) rts - + .8 lda #1 sta (pStack) PCC.BOPS.G.L .EQ *-PCC.BOPS.G @@ -662,7 +687,7 @@ PCC.BOPS.LE .DA #PCC.BOPS.LE.L lda #0 sta (pStack) rts - + .8 lda #1 sta (pStack) PCC.BOPS.LE.L .EQ *-PCC.BOPS.LE @@ -675,7 +700,7 @@ PCC.BOPS.GE .DA #PCC.BOPS.GE.L lda #0 sta (pStack) rts - + .8 lda #1 sta (pStack) PCC.BOPS.GE.L .EQ *-PCC.BOPS.GE @@ -684,10 +709,10 @@ PCC.BOPS.EQ .DA #PCC.BOPS.EQ.L >PULLA cmp (pStack) beq .1 - + lda #0 clc - + .1 ror sta (pStack) @@ -700,7 +725,7 @@ PCC.BOPS.NE .DA #PCC.BOPS.NE.L PCC.BOPS.NE.L .EQ *-PCC.BOPS.NE *-------------------------------------- -PCC.BOPS.LAND +PCC.BOPS.LAND *-------------------------------------- PCC.BOPS.AND .DA #PCC.BOPS.AND.L >PULLA @@ -708,7 +733,7 @@ PCC.BOPS.AND .DA #PCC.BOPS.AND.L sta (pStack) PCC.BOPS.AND.L .EQ *-PCC.BOPS.AND *-------------------------------------- -PCC.BOPS.LOR +PCC.BOPS.LOR *-------------------------------------- PCC.BOPS.OR .DA #PCC.BOPS.OR.L >PULLA diff --git a/BIN/CC.S.STMT.txt b/BIN/CC.S.STMT.txt index 09de95df..43eaf61f 100644 --- a/BIN/CC.S.STMT.txt +++ b/BIN/CC.S.STMT.txt @@ -22,7 +22,7 @@ STMT.Get jsr CC.GetCharNB *-------------------------------------- jsr CORE.GetNCharNB bcs .9 -* >DEBUG + ldy #SYM.Q lda (ZPLookupSymPtr),y pha @@ -121,11 +121,25 @@ STMT.SetVar stz ExpState .99 rts *-------------------------------------- +*-------------------------------------- +STMT.Stmt.END ldy CStackPtr + beq .8 + + iny CPS.TERM + lda (ZPCCStack),y + cmp #'}' + beq .8 + + cmp #';' must be ';' on stack.... + bra STMT.POP + +.8 clc + + rts *-------------------------------------- * X = KW.ID *-------------------------------------- -CC.STMT.CPStmt.NEW - >LDA.G CC.CPSID+1 +STMT.CPStmt.NEW >LDA.G CC.CPSID+1 jsr CC.Push bcs .99 @@ -141,58 +155,50 @@ CC.STMT.CPStmt.NEW jsr CC.Push bcs .99 - txa + lda #'}' jsr CC.Push bcs .99 - lda #'}' + txa jmp CC.Push .99 rts *-------------------------------------- -CC.STMT.Stmt.END - jsr CC.Get - bcs .8 - - cmp #'}' - beq .8 - - cmp #';' must be ';' on stack.... - bra CC.STMT.POP - -.8 clc - -CC.STMT.Stmt.RTS - rts -*-------------------------------------- -CC.STMT.CPStmt.END - jsr CC.Get - bcs CC.STMT.Stmt.RTS - - cmp #'}' must be '}' on stack.... - -CC.STMT.POP bne .98 +STMT.CPStmt.END ldy CStackPtr + beq STMT.POP.9 iny lda (ZPCCStack),y - jsr .7 + cmp #'}' must be '}' on stack.... + +STMT.POP bne .9 + + dey CPS.KW + lda (ZPCCStack),y + jsr STMT.CLOSE bcs .99 bvs .1 DONT POP reused context (ELSE....) - lda CStackPtr -* clc - adc #7 - sta CStackPtr - - jsr CC.Pop Locals + ldy #CPS.LOCAL + lda (ZPCCStack),y sta LocalPtr + lda CStackPtr +* clc + adc #CPS + sta CStackPtr + .1 clc +.99 rts + +.9 +STMT.POP.9 lda #E.STACKERROR + sec rts *-------------------------------------- -.7 tax +STMT.CLOSE tax bmi .8 jmp (J.CC.KW.END,x) @@ -203,6 +209,188 @@ CC.STMT.POP bne .98 sec .99 rts *-------------------------------------- +STMT.NewCPS00 lda #0 + jsr CC.Push no T/Q + bcs STMT.NewCPS.RTS + + jsr CC.Push + bcs STMT.NewCPS.RTS + +STMT.NewCPS jsr STMT.NewCPSID + bcs .99 + + lda #'*' + >SYSCALL putchar + >LEA.G CC.CPSPFX+2 + >SYSCALL puts +* >DEBUG + + >LDA.G CC.CPSPFX+3 + jsr CC.Push + bcs .99 + + >LDA.G CC.CPSPFX+2 + jsr CC.Push + bcs .99 + + lda LocalPtr Locals + jsr CC.Push + bcs .99 + + lda #0 bState + jsr CC.Push + bcs .99 + + lda #';' CPS.TERM + jsr CC.Push + bcs .99 + + >LDA.G CC.CmdSave + jmp CC.Push + +.99 +STMT.NewCPS.RTS rts +*-------------------------------------- +STMT.SetCPSType jsr CORE.GetNCharNBNL + bcs .9 + + ldx #';' + + cmp #'{' + bne .1 + + jsr CORE.GetNCharNB skip '{' + bcs .99 + + ldx #'}' + +.1 txa + ldy CStackPtr + iny CPS.TERM + sta (ZPCCStack),y + +.8 clc + rts + +.9 lda #E.CSYN + sec +.99 rts +*-------------------------------------- +STMT.NewLabelA pha + + lda CStackPtr + jsr STMT.GetCPSIDA + +* lda #'+' +* >SYSCALL putchar +* pla +* pha +* >SYSCALL putchar +* >LEA.G CC.CPSPFX+1 +* >SYSCALL puts +* >DEBUG + + pla + jmp SYM.NewA +*-------------------------------------- +STMT.GetLabelA pha + + lda CStackPtr + jsr STMT.GetCPSIDA + +* lda #'?' +* >SYSCALL putchar +* pla +* pha +* >SYSCALL putchar +* >LEA.G CC.CPSPFX+1 +* >SYSCALL puts +* >DEBUG + + pla + jmp SYM.LookupA +*-------------------------------------- +STMT.LookupLabelA + pha + + ldy CStackPtr + sty ArgIndex + + lda ArgIndex + beq .9 + +.1 jsr STMT.GetCPSIDA + +* lda #'!' +* >SYSCALL putchar +* pla +* pha +* >SYSCALL putchar +* >LEA.G CC.CPSPFX+1 +* >SYSCALL puts +* >DEBUG + + pla + pha + jsr SYM.LookupA + bcc .8 + + lda ArgIndex + clc + adc #CPS + sta ArgIndex + bne .1 + +.9 lda #E.NOKEY + + plx +* sec + rts + +.8 pla +* clc + rts +*-------------------------------------- +STMT.GetCPSIDA clc + adc #CPS.CPSID + tay + + lda (ZPCCStack),y + pha + iny + lda (ZPCCStack),y + ply + >STYA.G CC.CPSPFX+2 + rts +*-------------------------------------- +STMT.NewCPSID >LDYA.G CC.CPSID + >STYA.G CC.CPSPFX+2 + + >LDA.G CC.CPSID+1 + inc + cmp #'Z'+1 + bne .1 + + dey CC.CPSID + lda (pData),y + inc + cmp #'Z'+1 + beq .9 + + sta (pData),y + + lda #'A' + iny CC.CPSID+1 + +.1 sta (pData),y + + clc + rts + +.9 lda #E.OOH +* sec + rts +*-------------------------------------- MAN SAVE usr/src/bin/cc.s.stmt LOAD usr/src/bin/cc.s diff --git a/BIN/CC.S.SYM.txt b/BIN/CC.S.SYM.txt index efe04002..abc79bc9 100644 --- a/BIN/CC.S.SYM.txt +++ b/BIN/CC.S.SYM.txt @@ -144,7 +144,7 @@ SYM.SetAddr ldy #SYM.SizeOf jsr SYM.GetSymSizeOfInAXC jsr SYM.SetSizeOf - + .1 ldy #SYM.Q lda (ZPSymBufPtr),y and #SYM.Q.FUNC @@ -388,7 +388,7 @@ SYM.AddWord phy sta (ZPSymBufPtr),y dey - + pla Y pha sta (ZPSymBufPtr),y @@ -427,7 +427,7 @@ SYM.AddName jsr CC.GetCharNB iny dex bne .1 - + tya jsr CC.SkipA @@ -460,34 +460,6 @@ SYM.AddByte pha sec rts *-------------------------------------- -SYM.NewCPSID >LDYA.G CC.CPSID - >STYA.G CC.CPSPFX+2 - - >LDA.G CC.CPSID+1 - inc - cmp #'Z'+1 - bne .1 - - dey CC.CPSID - lda (pData),y - inc - cmp #'Z'+1 - beq .9 - - sta (pData),y - - lda #'A' - iny CC.CPSID+1 - -.1 sta (pData),y - - clc - rts - -.9 lda #E.OOH -* sec - rts -*-------------------------------------- SYM.NewA bit bPass2 bmi .8 diff --git a/BIN/CC.S.txt b/BIN/CC.S.txt index e3169d37..a61aeefc 100644 --- a/BIN/CC.S.txt +++ b/BIN/CC.S.txt @@ -63,6 +63,20 @@ SU.F.BitO .EQ 4 SU.F.BitW .EQ 5 SU.F.Name .EQ 6 *-------------------------------------- +CPS.hMEM .EQ 7 switch/case +CPS.Ptr .EQ 6 + +CPS.Q .EQ 7 f +CPS.T .EQ 6 + +CPS.CPSID .EQ 4 +CPS.LOCAL .EQ 3 +CPS.STATE .EQ 2 +CPS.TERM .EQ 1 +CPS.KW .EQ 0 +* +CPS .EQ 8 +*-------------------------------------- * Zero Page Segment, up to 32 bytes *-------------------------------------- .DUMMY @@ -173,9 +187,11 @@ J.CC.POSTOPS .DA EXP.postinc *-------------------------------------- J.CC.KW .DA KW.IF .DA KW.WHILE +KW.ELSE.ID .EQ *-J.CC.KW .DA KW.ELSE .DA KW.DO .DA KW.FOR +KW.SWITCH.ID .EQ *-J.CC.KW .DA KW.SWITCH .DA KW.CASE .DA KW.DEFAULT @@ -227,6 +243,9 @@ L.PCC.ENTER .DA PCC.ENTER L.PCC.LEAVE .DA PCC.LEAVE L.PCC.ADDLOCAL .DA PCC.ADDLOCAL L.PCC.SetRetValue .DA PCC.SetRetValue +L.PCC.8to16 .DA PCC.8to16 +L.PCC.JmpOnYA .DA PCC.JmpOnYA +L.PCC.Pop16 .DA PCC.Pop16 L.PCC.TestZero1 .DA PCC.TestZero1 L.PCC.TestZero2 .DA PCC.TestZero2 L.PCC.TestZeroX .DA PCC.TestZeroX @@ -373,7 +392,7 @@ CS.RUN.CLOOP jsr CORE.CompileFile cmp #MLI.E.EOF bne .9 - + jsr CODE.EmitTail bcs .9 @@ -420,13 +439,13 @@ CS.RUN.ARGS inc ArgIndex .2 cpx #4 bcc .3 - + inc ArgIndex lda ArgIndex >SYSCALL ArgV bcs .90 - + jsr FIO.LoadLIB.o bcc CS.RUN.ARGS @@ -473,11 +492,11 @@ CS.DOEVENT sec *-------------------------------------- CS.QUIT jsr CODE.Quit jsr CORE.Quit - + .1 >LDA.G LibCount beq .6 - - dec + + dec sta (pData),y clc @@ -613,7 +632,7 @@ PrintSummary >PUSHW L.MSG.SUMMARY >PUSHW ZPCCData >PUSHBI 6 >SYSCALL PrintF -* >DEBUG + rts *-------------------------------------- .INB usr/src/bin/cc.s.code diff --git a/BIN/FNT2FON.S.txt b/BIN/FNT2FON.S.txt index e226bf64..5f6694cf 100644 --- a/BIN/FNT2FON.S.txt +++ b/BIN/FNT2FON.S.txt @@ -52,42 +52,56 @@ CS.INIT .1 >INC.G Count >SYSCALL ArgV bcs .7 + >STYA ZPPtr1 lda (ZPPtr1) cmp #'-' bne .4 + ldy #1 lda (ZPPtr1),y ldx OptionList .2 cmp OptionList,x beq .3 + dex bne .2 + .99 >LDYA L.MSG.USAGE - >SYSCALL PrintF + >SYSCALL Puts lda #E.SYN sec rts + .3 ldy OptionVars-1,x lda #$80 sta (pData),y bra .1 + .4 >LDA.G hInputBuf bne .5 + jsr CS.INIT.OPENINPUT bcc .1 scan for any other args + rts + .5 >LDA.G hOutputFile bne .99 + jsr CS.INIT.CREATEOUTPUT bcc .1 scan for any other args + rts + .7 >LDA.G hOutputFile beq .99 + >LDYAI 8192 max 256x256 pixels >SYSCALL GetMem bcs CS.INIT.RTS + >STYA ZPCharBufPtr txa >STA.G hCharBuf @@ -95,28 +109,32 @@ CS.INIT CS.INIT.RTS rts *-------------------------------------- CS.INIT.OPENINPUT - >PUSHWZ Aux type - >PUSHBI 0 Type + >PUSHW ZPPtr1 >PUSHBI O.RDONLY - >LDYA ZPPtr1 + >PUSHBI 0 Type + >PUSHWZ Aux type >SYSCALL LoadFile bcs CS.INIT.RTS + >PUSHYA txa >STA.G hInputBuf >SYSCALL GetMemPtr >STYA ZPInputBufPtr >LDYA L.MSG.FILE.OK - >SYSCALL PrintF + >SYSCALL PutS ldy #S.FNT.dfVersion lda (ZPInputBufPtr),y bne .99 + iny lda (ZPInputBufPtr),y cmp #2 beq .1 + cmp #3 bne .99 + .1 asl *2 = Entry Len in Tbl >STA.G FNT.Version pha @@ -141,26 +159,30 @@ CS.INIT.OPENINPUT >SYSCALL PrintF clc rts + .99 >LDYA L.MSG.HEADER.KO - >SYSCALL PrintF + >SYSCALL PutS lda #E.IBIN sec rts *-------------------------------------- CS.INIT.CREATEOUTPUT - >PUSHWZ Aux type - >PUSHBI $CC FON Type + >PUSHW ZPPtr1 >PUSHBI O.WRONLY+O.CREATE - >LDYA ZPPtr1 + >PUSHBI $CC FON Type + >PUSHWZ Aux type >SYSCALL FOpen bcs .9 + >STA.G hOutputFile >LDYAI 256 >SYSCALL GetMem bcs .9 + >STYA ZPOutPutBufPtr txa >STA.G hOutPutBuf + .9 rts *-------------------------------------- CS.RUN ldy #S.FNT.dfBreakChar @@ -185,6 +207,7 @@ CS.RUN ldy #S.FNT.dfBreakChar >PUSHA >LDYA L.MSG.RANGE >SYSCALL PrintF + >LDA.G FON.Header+S.FON.Last sec >SBC.G FON.Header+S.FON.First @@ -201,6 +224,7 @@ CS.RUN ldy #S.FNT.dfBreakChar ply >SYSCALL GetMem bcs .9 + >STYA ZPOutPutTblPtr txa >STA.G hTblBuf @@ -221,12 +245,16 @@ CS.RUN ldy #S.FNT.dfBreakChar >LDA.G hOutputFile >SYSCALL FSeek bcc .1 + .9 rts + .1 >LDA.G FNT.Version ldx #S.FNT.dfCharTable2 cmp #4 beq .2 + ldx #S.FNT.dfCharTable3 + .2 txa clc adc ZPInputBufPtr @@ -234,6 +262,7 @@ CS.RUN ldy #S.FNT.dfBreakChar lda #0 adc ZPInputBufPtr+1 sta ZPInputTblPtr+1 +*-------------------------------------- CS.RUN.LOOP >SLEEP >SYSCALL GetChar @@ -241,8 +270,10 @@ CS.RUN.LOOP >SLEEP cmp #$03 Ctrl-C beq .9 Abort.... + cmp #$13 Ctrl-S bne .3 + >LDA.G bPause eor #$FF sta (pData),y @@ -265,20 +296,26 @@ CS.RUN.LOOP >SLEEP jsr CS.RUN.DumpChar jsr CS.RUN.StoreChar bcs .9 + >INC.G CharIndex >DEC.G CharCount beq .8 + lda ZPInputTblPtr clc >ADC.G FNT.Version sta ZPInputTblPtr bcc CS.RUN.LOOP + inc ZPInputTblPtr+1 bra CS.RUN.LOOP + .8 jsr CS.RUN.FlushOutPutBuf bcs .9 + jsr CS.RUN.WriteBMAndTbl bcs .9 + >LDYA L.MSG.DONE >SYSCALL PrintF lda #0 @@ -300,11 +337,14 @@ CS.RUN.GetChar lda (ZPInputTblPtr) Get Char PixW pla and #7 beq .1 + inx + .1 txa >STA.G CharByteW >STA.G CharOutByteW lda #0 0 -> A -> CharByteW + .2 pha clc adc ZPCharBufPtr @@ -319,7 +359,9 @@ CS.RUN.GetChar lda (ZPInputTblPtr) Get Char PixW inc ZPInputBMPtr bne .4 + inc ZPInputBMPtr+1 + .4 tay lda TWIST,y sta (ZPPTR1) @@ -328,7 +370,9 @@ CS.RUN.GetChar lda (ZPInputTblPtr) Get Char PixW >ADC.G CharByteW sta ZPPTR1 bcc .5 + inc ZPPTR1+1 + .5 dex bne .3 @@ -336,6 +380,7 @@ CS.RUN.GetChar lda (ZPInputTblPtr) Get Char PixW inc >CMP.G CharByteW bne .2 + clc rts *-------------------------------------- @@ -356,6 +401,7 @@ CS.RUN.DumpChar >LDA.G CharOutByteW sta ZPPTR1+1 >LDA.G FON.Header+S.FON.PixH + .1 pha lda #'|' >SYSCALL PutChar @@ -363,25 +409,32 @@ CS.RUN.DumpChar >LDA.G CharOutByteW >STA.G Count ldy #0 + .2 lda (ZPPTR1),y phy ldx #8 + .4 lsr pha lda #' ' bcc .5 + lda #'O' + .5 phx >SYSCALL PutChar plx >DEC.G Count beq .6 + pla Get back BYTE dex bne .4 + ply iny bra .2 + .6 pla pla @@ -396,16 +449,19 @@ CS.RUN.DumpChar >LDA.G CharOutByteW >ADC.G CharByteW sta ZPPTR1 bcc .7 + inc ZPPTR1+1 .7 pla dec bne .1 + rts *-------------------------------------- CS.RUN.ShiftLChar >LDA.G bNoShrink bmi .9 + .1 lda ZPCharBufPtr sta ZPPTR1 lda ZPCharBufPtr+1 @@ -415,6 +471,7 @@ CS.RUN.ShiftLChar lda #0 pha + .2 pla ora (ZPPTR1) pha @@ -423,13 +480,18 @@ CS.RUN.ShiftLChar >ADC.G CharByteW sta ZPPTR1 bcc .3 + inc ZPPTR1+1 + .3 dex bne .2 + pla beq .9 No pixel in first COL, must be SPACE or BREAK + lsr bcs .9 + lda ZPCharBufPtr sta ZPPTR1 lda ZPCharBufPtr+1 @@ -440,29 +502,37 @@ CS.RUN.ShiftLChar .4 >LDA.G CharByteW tay clc + .5 dey lda (ZPPTR1),y ror sta (ZPPTR1),y tya bne .5 + lda ZPPTR1 clc >ADC.G CharByteW sta ZPPTR1 bcc .6 + inc ZPPTR1+1 + .6 dex bne .4 + >DEC.G CharOutPixW and #7 bne .1 + >DEC.G CharOutByteW bra .1 + .9 rts *-------------------------------------- CS.RUN.CutRChar >LDA.G bNoShrink bmi .9 + .1 lda ZPCharBufPtr sta ZPPTR1 lda ZPCharBufPtr+1 @@ -475,6 +545,7 @@ CS.RUN.CutRChar >LDA.G bNoShrink dey lda #0 pha + .2 pla ora (ZPPTR1),y pha @@ -484,14 +555,18 @@ CS.RUN.CutRChar >LDA.G bNoShrink >ADC.G CharByteW sta ZPPTR1 bcc .3 + inc ZPPTR1+1 .3 ply dex bne .2 + pla bmi .9 Bit 7 is colored....exit + bne .4 + tya No bits in this COL beq .9 was COL 0.....SPACE or BREAK @@ -501,6 +576,7 @@ CS.RUN.CutRChar >LDA.G bNoShrink asl >STA.G CharOutPixW bra .1 + .4 pha >LDA.G CharOutByteW asl @@ -508,9 +584,11 @@ CS.RUN.CutRChar >LDA.G bNoShrink asl tax pla + .5 dex asl bpl .5 + txa >STA.G CharOutPixW pha @@ -521,9 +599,12 @@ CS.RUN.CutRChar >LDA.G bNoShrink pla and #7 beq .7 + inx + .7 txa >STA.G CharOutByteW + .9 rts *-------------------------------------- CS.RUN.StoreChar @@ -537,13 +618,17 @@ CS.RUN.StoreChar adc #2 sta ZPOutPutTblPtr bcc .1 + inc ZPOutPutTblPtr+1 + .1 >LDA.G CharOutPixW jsr CS.RUN.WriteByte bcs .99 + >LDA.G CharOutByteW jsr CS.RUN.WriteByte bcs .99 + lda ZPCharBufPtr sta ZPPTR1 lda ZPCharBufPtr+1 @@ -557,23 +642,30 @@ CS.RUN.StoreChar .3 lda (ZPPTR1),y jsr CS.RUN.WriteByte bcs .9 + iny dex bne .3 + pla dec beq .8 + pha lda ZPPTR1 clc >ADC.G CharByteW sta ZPPTR1 bcc .2 + inc ZPPTR1+1 bra .2 + .8 clc rts + .9 plx + .99 rts *-------------------------------------- CS.RUN.WriteByte @@ -590,6 +682,7 @@ CS.RUN.WriteByte tay clc bne .8 + >PUSHWI 256 >PUSHW ZPOutPutBufPtr >LDA.G hOutputFile @@ -598,6 +691,7 @@ CS.RUN.WriteByte .8 inc ZPOutPutCharOfs bne .9 + inc ZPOutPutCharOfs+1 .9 plx @@ -625,17 +719,20 @@ CS.RUN.WriteBMAndTbl iny dex bne .1 + >LEA.G FileOffset >PUSHYA >PUSHBI SYS.FSeek.SET >LDA.G hOutputFile >SYSCALL FSeek bcs .9 + >PUSHWI S.FON >PUSHEA.G FON.Header >LDA.G hOutputFile >SYSCALL FWrite bcs .9 + >LDA.G FON.Header+S.FON.Last sec >SBC.G FON.Header+S.FON.First @@ -661,21 +758,27 @@ CS.DOEVENT sec *-------------------------------------- CS.QUIT >LDA.G hOutPutBuf beq .1 + >SYSCALL FreeMem .1 >LDA.G hOutputFile beq .2 + >SYSCALL FClose + .2 >LDA.G hInputBuf beq .3 + >SYSCALL FreeMem .3 >LDA.G hCharBuf beq .4 + >SYSCALL FreeMem .4 >LDA.G hTblBuf beq .8 + >SYSCALL FreeMem .8 clc @@ -685,15 +788,18 @@ CS.END *-------------------------------------- .INB usr/src/shared/x.twist.g *-------------------------------------- -OptionList >PSTR "NnVv" +OptionList .PS "NnVv" OptionVars .DA #bNoShrink,#bNoShrink,#bVerbose,#bVerbose -MSG.USAGE .AZ "Usage : FNT2FON FNT-File \r\n -V : Verbose Mode\r\n -N : No shrink\r\n" -MSG.FILE.OK .AZ "FNT File Loaded, %D Bytes Read\r\n" -MSG.HEADER.OK .AZ "FNT File Version : %d, Size : %d x %d pixels, Ascent : %d\r\n" -MSG.HEADER.KO .AZ "Invalid Input File Format\r\n" -MSG.RANGE .AZ "First/Last Char : %d/%d, Default : %d, Break : %d\r\n" -MSG.DUMP .AZ "Caracter ID : %d (0x0%2h), Width(P) : %d, Width(B) : %d\r\n" -MSG.DONE .AZ "All Done!!!\r\n" +*-------------------------------------- +MSG.USAGE .CS "Usage : FNT2FON FNT-File \r\n" + .CS " -V : Verbose Mode\r\n" + .CZ -N : No shrink\r\n" +MSG.FILE.OK .CZ "FNT File Loaded, %D Bytes Read\r\n" +MSG.HEADER.OK .CZ "FNT File Version : %d, Size : %d x %d pixels, Ascent : %d\r\n" +MSG.HEADER.KO .CZ "Invalid Input File Format\r\n" +MSG.RANGE .CZ "First/Last Char : %d/%d, Default : %d, Break : %d\r\n" +MSG.DUMP .CZ "Caracter ID : %d (0x0%2h), Width(P) : %d, Width(B) : %d\r\n" +MSG.DONE .CZ "All Done!!!\r\n" *-------------------------------------- .DUMMY .OR 0 diff --git a/BIN/GUITEST1.S.txt b/BIN/GUITEST1.S.txt index c1726f67..5ff45d5a 100644 --- a/BIN/GUITEST1.S.txt +++ b/BIN/GUITEST1.S.txt @@ -1,6 +1,6 @@ NEW AUTO 3,1 - .LIST OFF + .LIST OFF .OP 65C02 .OR $2000 .TF bin/guitest1 @@ -8,14 +8,14 @@ NEW .INB inc/macros.i .INB inc/a2osx.i .INB inc/mli.i - .INB inc/gfx.i - .INB inc/libgui.i + .INB inc/libgui.i *-------------------------------------- .DUMMY .OR ZPBIN ZS.START hLogo .BS 2 00xx hWND .BS 1 +hMBAR .BS 1 ZS.END .ED *-------------------------------------- * File Header (16 Bytes) @@ -37,7 +37,6 @@ CS.START cld .DA CS.DOEVENT .DA CS.QUIT L.LIBGUI .DA LIBGUI -L.MouseData .DA MouseData L.LOGOFILE .DA LOGOFILE L.WND.TITLE .DA WND.TITLE L.WND.MBAR .DA WND.MBAR @@ -63,15 +62,15 @@ CS.RUN >PUSHW L.LOGOFILE bcs .9 stx hLogo - + jsr WND.Test bcs .9 - + .1 >SLEEP bra .1 - + clc .9 rts @@ -88,8 +87,8 @@ CS.QUIT.RTS rts *-------------------------------------- WND.Test >PUSHBI S.WND.F.RESIZE+S.WND.F.MOVE+S.WND.F.CLOSE+S.WND.F.MAX+S.WND.F.MIN - >PUSHW MouseData+S.MOUSE.X1 - >PUSHW MouseData+S.MOUSE.Y1 + >PUSHWI 40 + >PUSHWI 80 >PUSHWI 360 >PUSHWI 96 >LIBCALL hLIBGUI,LIBGUI.WND.New @@ -107,17 +106,21 @@ WND.Test >PUSHBI S.WND.F.RESIZE+S.WND.F.MOVE+S.WND.F.CLOSE+S.WND.F.MAX+S.WND.F. >LIBCALL hLIBGUI,LIBGUI.OBJ.SetProp >PUSHB hWND - >PUSHBI S.WND.TITLE + >PUSHBI S.WND.pTITLE >PUSHW L.WND.TITLE >LIBCALL hLIBGUI,LIBGUI.OBJ.SetProp >PUSHB hWND - >PUSHBI S.WND.MBAR >PUSHW L.WND.MBAR - >LIBCALL hLIBGUI,LIBGUI.OBJ.SetProp + >LIBCALL hLIBGUI,LIBGUI.MBAR.New + sta hMBAR >PUSHB hWND - >PUSHBI S.WND.STATUS + >PUSHB hMBAR + >LIBCALL hLIBGUI,LIBGUI.WND.SetMBar + + >PUSHB hWND + >PUSHBI S.WND.pSTATUS >PUSHW L.WND.STATUS >LIBCALL hLIBGUI,LIBGUI.OBJ.SetProp @@ -152,97 +155,119 @@ CS.END LIBGUI .AZ "libgui" hLIBGUI .BS 1 *-------------------------------------- -MouseData .BS S.MOUSE -*-------------------------------------- LOGOFILE .AZ "${ROOT}A2osX.logo" WND.TITLE .AZ "Window Title" WND.STATUS .AZ "Window status bar message" *-------------------------------------- -WND.MBAR .DA #.1-* next - .DA #0 status - .DA 0 X1 - .DA 0 XT - .DA 0 X2 - .DA 0 MENU - .AZ "File" - -.1 .DA #.2-* next - .DA #0 status - .DA 0 X1 - .DA 0 XT - .DA 0 X2 - .DA 0 MENU +WND.MBAR .AZ "File" + .DA WND.MENU.FILE .AZ "Edit" - -.2 .DA #.3-* next - .DA #0 status - .DA 0 X1 - .DA 0 XT - .DA 0 X2 - .DA 0 MENU + .DA WND.MENU.EDIT .AZ "Options" - -.3 .DA #.4-* next - .DA #0 status - .DA 0 X1 - .DA 0 XT - .DA 0 X2 - .DA 0 MENU + .DA WND.MENU.OPTIONS .AZ "?" - -.4 .DA #0 + .DA WND.MENU.HELP + .DA #0 *-------------------------------------- -WND.MENU.FILE .DA #02 ID - .DA #S.MITEM.KEYMOD.CTRL - .DA #'N' +WND.MENU.FILE .DA #S.MITEM.T.ITEM + .DA #02 ID + .DA #KEYMOD.CTRL,#'N' + .DA 0 pICON .AZ "New" - .DA #04 ID - .DA #S.MITEM.KEYMOD.CTRL - .DA #'O' + + .DA #S.MITEM.T.ITEM + .DA #04 ID + .DA #KEYMOD.CTRL,#'O' + .DA 0 pICON .AZ "Open..." - .DA #06 ID - .DA #S.MITEM.KEYMOD.CTRL - .DA #'S' + + .DA #S.MITEM.T.ITEM + .DA #06 ID + .DA #KEYMOD.CTRL,#'S' + .DA 0 pICON .AZ "Save" - .DA #08 ID - .DA #S.MITEM.KEYMOD.OA+S.MITEM.KEYMOD.CTRL - .DA #'S' + + .DA #S.MITEM.T.ITEM + .DA #08 ID + .DA #KEYMOD.OA+KEYMOD.CTRL,#'S' + .DA 0 pICON .AZ "Save As..." - .DA #10 ID - .DA #S.MITEM.KEYMOD.CTRL - .DA #'Q' + + .DA #S.MITEM.T.ITEM + .DA #10 ID + .DA #KEYMOD.CTRL,#'Q' + .DA 0 pICON .AZ "Quit" + .DA #0 *-------------------------------------- -WND.MENU.EDIT .DA #12 ID - .DA #S.MITEM.KEYMOD.OA - .DA #'X' +WND.MENU.EDIT .DA #S.MITEM.T.ITEM + .DA #12 ID + .DA #KEYMOD.CTRL,#'X' + .DA 0 pICON .AZ "Cut" - .DA #14 ID - .DA #S.MITEM.KEYMOD.OA - .DA #'C' + + .DA #S.MITEM.T.ITEM + .DA #14 ID + .DA #KEYMOD.CTRL,#'C' + .DA 0 pICON .AZ "Copy" - .DA #16 ID - .DA #S.MITEM.KEYMOD.OA - .DA #'V' + + .DA #S.MITEM.T.ITEM + .DA #16 ID + .DA #KEYMOD.CTRL,#'V' + .DA 0 pICON .AZ "Paste" + .DA #0 *-------------------------------------- -WND.MENU.OPTIONS .DA #18 ID - .DA #0 - .DA #0 +WND.MENU.OPTIONS + .DA #S.MITEM.T.ITEM + .DA #18 ID + .DA #0,#0 + .DA 0 pICON .AZ "Check Me" + + .DA #S.MITEM.T.SEP + + .DA #S.MITEM.T.SUBMENU + .DA WND.MENU.SUB + .DA 0 pICON + .AZ "Sub Menu" + .DA #0 *-------------------------------------- -WND.MENU.HELP .DA #20 ID - .DA #0 - .DA #0 +WND.MENU.HELP .DA #S.MITEM.T.ITEM + .DA #20 ID + .DA #0,#0 + .DA 0 pICON .AZ "About..." + + .DA #0 +*-------------------------------------- +WND.MENU.SUB .DA #S.MITEM.T.ITEM + .DA #18 ID + .DA #0,#0 + .DA 0 pICON + .AZ "Sub 1" + + .DA #S.MITEM.T.ITEM + .DA #18 ID + .DA #0,#0 + .DA 0 pICON + .AZ "Sub 2" + + .DA #S.MITEM.T.ITEM + .DA #18 ID + .DA #0,#0 + .DA 0 pICON + .AZ "Sub 3" + .DA #0 *-------------------------------------- .DUMMY .OR 0 -DS.START +DS.START DS.END .ED *-------------------------------------- MAN diff --git a/BIN/PS.S.txt b/BIN/PS.S.txt index 17cb3bfa..4c723d8d 100644 --- a/BIN/PS.S.txt +++ b/BIN/PS.S.txt @@ -223,10 +223,9 @@ CS.QUIT clc rts *-------------------------------------- CS.END -MSG0 .DA #C.ESC - .AZ "[?7lhPS pPID PID cPID CPU% Status Flags UID Args" -MSG1 .AZ "%3d %3d %3d %3d %3d\% %6s %s %3d" -MSG2 .AS " %s" +MSG0 .CZ "\e[?7lhPS pPID PID cPID CPU% Status Flags UID Args" +MSG1 .CZ "%3d %3d %3d %3d %3d\% %6s %s %3d" +MSG2 .CS " %s" MSG3 .DA #0 MSG.FLAGS .AS "HS???XEN" MSG.INIT .AZ "Init" diff --git a/BIN/SH.S.CMD.txt b/BIN/SH.S.CMD.txt index b00e81c9..7fc848d4 100644 --- a/BIN/SH.S.CMD.txt +++ b/BIN/SH.S.CMD.txt @@ -927,6 +927,7 @@ CMD.FOR jsr CORE.StkGetCtx lda (ZPArgVBufPtr) cmp #'(' beq CMD.FOR.FILE + cmp #'`' beq CMD.FOR.EXEC *-------------------------------------- diff --git a/BIN/SH.S.IO.txt b/BIN/SH.S.IO.txt index 8e943bfd..7aa7be37 100644 --- a/BIN/SH.S.IO.txt +++ b/BIN/SH.S.IO.txt @@ -151,10 +151,50 @@ IO.StatYA >PUSHYA .9 rts *-------------------------------------- +* set A = `sh -C ls|grep test` IO.Exec >PUSHW ZPArgVBufPtr >PUSHBI S.PS.F.CLOSEONX >SYSCALL ExecL rts + + +* >LDYAI 256 +* >SYSCALL GetMem +* bcs .99 + +* >STYA ZPPtr1 +* phx +* >PUSHYA +* >PUSHW L.EXECC +* >PUSHW.G SH +* >PUSHW ZPArgVBufPtr +* >PUSHBI 4 +* >SYSCALL sprintf +* bcs .98 + +* ldy #S.PS.hStdErr +* lda (pPS),y +* >PUSHA +* >PUSHW ZPPtr1 +* >SYSCALL fputs +* >DEBUG + +* >PUSHW ZPPtr1 +* >PUSHBI S.PS.F.CLOSEONX +* >SYSCALL ExecL + +*.98 plx + +* php +* pha + +* txa +* >SYSCALL freemem + +* pla +* plp + +*.99 rts *-------------------------------------- IO.PrintBatchErrMsg >LDYA ZPInputBuf diff --git a/BIN/SH.S.txt b/BIN/SH.S.txt index 2813d927..f5562f7d 100644 --- a/BIN/SH.S.txt +++ b/BIN/SH.S.txt @@ -195,8 +195,9 @@ L.EXP.OP.MATH .DA EXP.OP.MATH L.EXP.OP.LOGIC .DA EXP.OP.LOGIC L.HOME.PROFILE .DA HOME.PROFILE L.PtrZero .DA PtrZero -L.HOME .DA HOME L.PS1 .DA PS1 +L.HOME .DA HOME +L.EXECC .DA EXECC .DA 0 *-------------------------------------- CS.INIT clc @@ -205,6 +206,10 @@ CS.INIT clc CS.RUN jsr CL.Init jsr CORE.Init + lda #0 + jsr GetArgV + >STYA.G SH + ldy #S.PS.ARGC lda (pPS),y beq .2 no arg, continue starting interactive @@ -227,17 +232,21 @@ CS.RUN jsr CL.Init jsr ToUpperCase cmp #'C' - bne .1 + bne .19 iny lda (ZPPtr1),y - bne .1 + bne .19 * lda #0 jsr CMD.SHIFTA Remove $0 = -C jsr GetArgV jmp CS.RUN.CMDLINE + +.19 lda #E.CSYN + sec + rts *-------------------------------------- .1 jsr GetArgV Load SH batch file >SYSCALL LoadTxtFile @@ -622,6 +631,7 @@ HOME.PROFILE .AS "${HOME}.profile" PtrZero .HS 00 PS1 .AZ "${PS1}" HOME .AZ "${HOME}" +EXECC .AZ "%s -C %s" *-------------------------------------- EscChars .AS "DABC" EscChars.Cnt .EQ *-EscChars @@ -727,6 +737,8 @@ CORE.STACK .BS CORE.STACK.MAX+1 pData (0 = Stack Ptr) PUSHD.STACK .BS PUSHD.STACK.MAX+1 CODE.STACK .BS CODE.STACK.MAX*7+1 +SH .BS 2 + hAliases .BS 1 hFunctions .BS 1 diff --git a/DRV/DHGR.DRV.S.txt b/DRV/DHGR.DRV.S.txt index 60f3ce28..16cfb981 100644 --- a/DRV/DHGR.DRV.S.txt +++ b/DRV/DHGR.DRV.S.txt @@ -1,6 +1,6 @@ NEW AUTO 3,1 - .LIST OFF + .LIST OFF .OP 65C02 .OR $2000 .TF drv/dhgr.drv @@ -95,7 +95,7 @@ Dev.Detect >LDYA L.MSG.DETECT bmi .3 >LDYA L.MSG.DETECT.80C -.3 >SYSCALL PutS +.3 >SYSCALL PutS >PUSHWI DRV.END >PUSHWI DRV.CS.END-DRV.CS.START @@ -107,7 +107,7 @@ Dev.Detect >LDYA L.MSG.DETECT >STYA FD.DEV+S.FD.DEV.DRVPTR jsr DrvReloc - + >PUSHW L.FD.DEV >PUSHW L.FD.DEV.NAME >SYSCALL MKDev @@ -122,7 +122,7 @@ Dev.Detect >LDYA L.MSG.DETECT sta CLRWRITEAUX jsr ClrScr - + jsr OSD.install plp @@ -162,11 +162,11 @@ DrvReloc lda FD.DEV+S.FD.DEV.DRVPTR clc adc ZPPtr1 sta (ZPPtr2),y - + lda (ZPPtr3),y adc ZPPtr1+1 sta (ZPPtr3),y - + dey bpl .1 @@ -194,11 +194,11 @@ DrvReloc lda FD.DEV+S.FD.DEV.DRVPTR clc adc ZPPtr1 sta (ZPPtr2),y - + lda (ZPPtr3),y adc ZPPtr1+1 sta (ZPPtr3),y - + dey bpl .2 @@ -213,41 +213,41 @@ OSD.install >LDYA L.OSD lda /X.OSD.LEN eor #$ff pha - + lda #X.OSD.LEN eor #$ff tax - + ldy #0 - + sta SETWRITEAUX - + .1 inx bne .2 - + pla inc beq .3 - + pha - + .2 lda (ZPPtr1),y sta (ZPPtr2),y - + iny bne .1 - + inc ZPPtr1+1 inc ZPPtr2+1 bra .1 - + .3 sta CLRWRITEAUX rts *-------------------------------------- ClrScr lda #$55 ldx #0 - + sta SETHIRES sta SET80STORE @@ -260,7 +260,7 @@ ClrScr lda #$55 jsr .2 eor #$7F - + sta CLRPAGE2 jsr .2 @@ -362,7 +362,7 @@ STATUS >STYA ZPIOCTL ldy #S.IOCTL.BUFPTR lda (ZPIOCTL),y sta ZPBasePtr - iny + iny lda (ZPIOCTL),y sta ZPBasePtr+1 @@ -402,14 +402,14 @@ OPEN tax DEV.ID in A lda #S.DIB.S.OPENED bit DIB+S.DIB.S bne CLOSE.IOE - + lda A2osX.SCRNDEVS+9 beq .1 - + lda #E.OOH sec rts - + .1 stx A2osX.SCRNDEVS+9 stx DCB+S.DCB.GFX.DEVID @@ -419,7 +419,7 @@ OPEN tax DEV.ID in A CONTROL lda DCB+S.DCB.GFX.DEVID NON STANDARD cmp A2osX.ASCREEN beq .8 - + sta A2osX.ASCREEN ldy #0 @@ -446,9 +446,9 @@ CLOSE.IOE lda #MLI.E.IO CLOSE lda #S.DIB.S.OPENED bit DIB+S.DIB.S beq CLOSE.IOE - + trb DIB+S.DIB.S - + stz A2osX.SCRNDEVS+9 clc @@ -458,18 +458,18 @@ WRITE >STYA ZPIOCTL NON STANDARD lda (ZPIOCTL) Get Cmd bmi .2 - + pha lsr tax ldy CB.CmdLen-1,x - + .1 lda (ZPIOCTL),y sta CB.Cache,y dey bpl .1 - + plx jmp (J.Cmds-2,x) @@ -533,7 +533,7 @@ YAMultX stx ZPTmpByte ldy #0 Result LO tya Result HI bra .3 - + .1 pha tya clc @@ -541,7 +541,7 @@ YAMultX stx ZPTmpByte tay pla adc ZPTmpWord+1 - + .2 asl ZPTmpWord rol ZPTmpWord+1 @@ -634,7 +634,7 @@ DIB .DA #0 .BS 3 .DA #S.DIB.T.GFX .DA #0 - .DA #94,#00 + .DA #00,#94 *-------------------------------------- DCB .DA #S.DCB.T.GFX .BS 1 DEV.ID diff --git a/INC/LIBGUI.I.txt b/INC/LIBGUI.I.txt index 562d85da..cab50cb9 100644 --- a/INC/LIBGUI.I.txt +++ b/INC/LIBGUI.I.txt @@ -1,20 +1,22 @@ NEW AUTO 3,1 *-------------------------------------- -LIBGUI.SetCursor .EQ 4 -LIBGUI.SetCursorPos .EQ 6 -LIBGUI.HideCursor .EQ 8 -LIBGUI.ShowCursor .EQ 10 -LIBGUI.UpdateCursor .EQ 12 +LIBGUI.PTR.Set .EQ 4 +LIBGUI.PTR.SetPos .EQ 6 +LIBGUI.PTR.Hide .EQ 8 +LIBGUI.PTR.Show .EQ 10 +LIBGUI.PTR.Update .EQ 12 LIBGUI.ReadMouse .EQ 14 -LIBGUI.DrawLine .EQ 16 +LIBGUI.DRAW.Line .EQ 16 LIBGUI.OBJ.SetProp .EQ 18 LIBGUI.OBJ.GetProp .EQ 20 LIBGUI.WND.New .EQ 22 LIBGUI.WND.Destroy .EQ 24 LIBGUI.WND.Show .EQ 26 LIBGUI.WND.Paint .EQ 28 -LIBGUI.MSG.Get .EQ 30 +LIBGUI.WND.SetMBar .EQ 30 +LIBGUI.MSG.Get .EQ 32 +LIBGUI.MBAR.New .EQ 34 *-------------------------------------- C.BLACK .EQ 0 C16.D.BLUE .EQ 1 @@ -33,15 +35,19 @@ C16.PINK .EQ 13 C16.YELLOW .EQ 14 C.WHITE .EQ 255 *-------------------------------------- -CUR.T.ARROW .EQ 0 -CUR.T.MOVE .EQ 2 -CUR.T.RESIZEX .EQ 4 -CUR.T.RESIZEY .EQ 6 -CUR.T.RESIZEXY1 .EQ 8 -CUR.T.RESIZEXY2 .EQ 10 -CUR.T.CROSS .EQ 12 -CUR.T.TEXT .EQ 14 -CUR.T.WAIT .EQ 16 +PTR.T.ARROW .EQ 0 +PTR.T.MOVE .EQ 2 +PTR.T.RESIZEX .EQ 4 +PTR.T.RESIZEY .EQ 6 +PTR.T.RESIZEXY1 .EQ 8 +PTR.T.RESIZEXY2 .EQ 10 +PTR.T.CROSS .EQ 12 +PTR.T.TEXT .EQ 14 +PTR.T.WAIT .EQ 16 +*-------------------------------------- +KEYMOD.CTRL .EQ %10000000 +KEYMOD.OA .EQ %01000000 +KEYMOD.CA .EQ %00100000 *-------------------------------------- S.MSG.T .EQ 0 S.MSG.T.KEY .EQ 0 @@ -126,13 +132,16 @@ S.WND.S.ACTIVE .EQ %01000000 * S.WND.MinW .EQ S.OBJ S.WND.MinH .EQ S.OBJ+2 -S.WND.TITLE .EQ S.OBJ+4 -S.WND.MBAR .EQ S.OBJ+6 -S.WND.STATUS .EQ S.OBJ+8 +S.WND.pTITLE .EQ S.OBJ+4 +S.WND.pMBAR .EQ S.OBJ+6 +S.WND.pSTATUS .EQ S.OBJ+8 S.WND.ICON .EQ S.OBJ+10 S.WND.BGCOLOR .EQ S.OBJ+12 S.WND.BGBM .EQ S.OBJ+14 S.WND.hCUR .EQ S.OBJ+16 +* +* private +* S.WND.TitleX1 .EQ S.OBJ+18 S.WND.TitleX2 .EQ S.OBJ+20 S.WND.TBarY2 .EQ S.OBJ+22 @@ -151,51 +160,41 @@ S.WND.fPaint .EQ S.OBJ+40 * S.WND .EQ S.OBJ+42 *-------------------------------------- -S.MBAR.MBITEMS .EQ S.OBJ -S.MBAR.Selected .EQ S.OBJ+2 +S.MBAR.Selected .EQ S.OBJ +S.MBAR.Items .EQ S.OBJ+2 * -S.MBAR .EQ S.OBJ+4 *-------------------------------------- -S.MBITEM.NEXT .EQ 0 -S.MBITEM.S .EQ 1 -S.MBITEM.X1 .EQ 2 -S.MBITEM.XT .EQ 4 -S.MBITEM.X2 .EQ 6 -S.MBITEM.MENU .EQ 8 -S.MBITEM.TEXT .EQ 10 -*-------------------------------------- -S.MENU.MITEMS .EQ S.OBJ -S.MENU.hSAVEBUF .EQ S.OBJ+2 -S.MENU.pX1 .EQ S.OBJ+4 -S.MENU.pY1 .EQ S.OBJ+6 -S.MENU.pX2 .EQ S.OBJ+8 -S.MENU.pY2 .EQ S.OBJ+10 -S.MENU.Selected .EQ S.OBJ+12 -S.MENU.iW .EQ S.OBJ+13 -S.MENU.tW .EQ S.OBJ+14 -S.MENU.kW .EQ S.OBJ+16 +S.MBITEM.X1 .EQ 0 +S.MBITEM.XT .EQ 2 +S.MBITEM.X2 .EQ 4 +S.MBITEM.pTEXT .EQ 6 +S.MBITEM.pMENU .EQ 8 * -S.MENU .EQ S.OBJ+18 +S.MBITEM .EQ 10 *-------------------------------------- -S.MITEM.NEXT .EQ 0 -S.MITEM.F .EQ 1 -S.MITEM.F.SEP .EQ 2 -S.MITEM.F.ITEM .EQ 4 -S.MITEM.F.SUBMENU .EQ 6 -S.MITEM.S .EQ 2 -S.MITEM.S.CHECKED .EQ %01000000 -S.MITEM.S.DISABLED .EQ %10000000 -S.MITEM.ID .EQ 3 -S.MITEM.pICON .EQ 4 +S.MENU.hSAVEBUF .EQ S.OBJ+0 +S.MENU.iW .EQ S.OBJ+2 +S.MENU.tW .EQ S.OBJ+4 +S.MENU.kW .EQ S.OBJ+6 +S.MENU.Items .EQ S.OBJ+8 +* +*-------------------------------------- +S.MITEM.T .EQ 0 +S.MITEM.T.SEP .EQ 2 +S.MITEM.T.ITEM .EQ 4 +S.MITEM.T.SUBMENU .EQ 6 +S.MITEM.S .EQ 1 +S.MITEM.S.SELECTED .EQ %10000000 +S.MITEM.S.DISABLED .EQ %00000010 +S.MITEM.S.CHECKED .EQ %00000001 +S.MITEM.pICON .EQ 2 +S.MITEM.pTEXT .EQ 4 S.MITEM.pMENU .EQ 6 -S.MITEM.KEYMOD .EQ 6 -S.MITEM.KEYMOD.CA .EQ 2 -S.MITEM.KEYMOD.OA .EQ 4 -S.MITEM.KEYMOD.CTRL .EQ 8 -S.MITEM.KEY .EQ 7 -S.MITEM.KEYSTR .EQ 8 -S.MITEM.TEXT .EQ 9 CSTR -* ... +S.MITEM.KEYMOD .EQ 8 +S.MITEM.KEY .EQ 9 +S.MITEM.ID .EQ 10 +* +S.MITEM .EQ 12 *-------------------------------------- BM.ID.APPLE .EQ 2 BM.ID.CLOSE .EQ 4 diff --git a/LIB/LIBGUI.G.CUR.txt b/LIB/LIBGUI.G.CUR.txt index 086987f7..be8673f8 100644 --- a/LIB/LIBGUI.G.CUR.txt +++ b/LIB/LIBGUI.G.CUR.txt @@ -1,411 +1,6 @@ NEW AUTO 3,1 *-------------------------------------- -CUR.T .BS 1 -CUR.bVisible .BS 1 -CUR.Pos .BS S.POINT -*-------------------------------------- -CUR.HotPoints .DA #0,#0 CUR.T.ARROW - .DA #6,#6 CUR.T.MOVE - .DA #7,#4 CUR.ResizeX - .DA #6,#5 CUR.ResizeY - .DA #5,#5 CUR.ResizeXY1 - .DA #5,#5 CUR.ResizeXY2 - .DA #5,#5 CUR.Cross - .DA #5,#3 CUR.Text - .DA #5,#6 CUR.Wait1 - .DA #5,#6 CUR.Wait2 - .DA #5,#6 CUR.Wait3 - .DA #5,#6 CUR.Wait4 - .DA #8,#7 CUR.Wait5 - .DA #8,#7 CUR.Wait6 -*-------------------------------------- -CUR.SaveBuf .BS 64 16*4 -*-------------------------------------- -CUR.Arrow .DA #S.BM.F.BBP1 - .DA #2 RowBytes - .DA 11 W - .DA 13 H - .DA CUR.Arrow.MASK-CUR.Arrow - .DA %000.00000000 - .DA %000.00000010 - .DA %000.00000110 - .DA %000.00001110 - .DA %000.00011110 - .DA %000.00111110 - .DA %000.01111110 - .DA %000.11111110 - .DA %001.11111110 - .DA %010.01111110 - .DA %000.11110010 - .DA %000.11100000 - .DA %000.00000000 -CUR.Arrow.MASK .DA %111.11111100 - .DA %111.11111000 - .DA %111.11110000 - .DA %111.11100000 - .DA %111.11000000 - .DA %111.10000000 - .DA %111.00000000 - .DA %110.00000000 - .DA %100.00000000 - .DA %000.00000000 - .DA %000.00000000 - .DA %110.00000000 - .DA %110.00001111 -*-------------------------------------- -CUR.Move .DA #S.BM.F.BBP1 - .DA #2 RowBytes - .DA 11 W - .DA 11 H - .DA CUR.Move.MASK-CUR.Move - .DA %000.00100000 - .DA %000.01010000 - .DA %000.10001000 - .DA %001.00000100 - .DA %010.00000010 - .DA %100.00000001 - .DA %010.00000010 - .DA %001.00000100 - .DA %000.10001000 - .DA %000.01010000 - .DA %000.00100000 -CUR.Move.MASK - .DA %111.11111111 - .DA %111.11111111 - .DA %111.11111111 - .DA %111.11111111 - .DA %111.11111111 - .DA %111.11111111 - .DA %111.11111111 - .DA %111.11111111 - .DA %111.11111111 - .DA %111.11111111 - .DA %111.11111111 -*-------------------------------------- -CUR.ResizeX .DA #S.BM.F.BBP1 - .DA #2 RowBytes - .DA 14 W - .DA 7 H - .DA CUR.ResizeX.MASK-CUR.ResizeX - .DA %000000.00000000 - .DA %000100.00001000 - .DA %001100.00001100 - .DA %011111.11111110 - .DA %001100.00001100 - .DA %000100.00001000 - .DA %000000.00000000 -CUR.ResizeX.MASK - .DA %111001.11100111 - .DA %110001.11100011 - .DA %100000.00000001 - .DA %000000.00000000 - .DA %100000.00000001 - .DA %110001.11100011 - .DA %111001.11100111 -*-------------------------------------- -CUR.ResizeY .DA #S.BM.F.BBP1 - .DA #2 RowBytes - .DA 9 W - .DA 11 H - .DA CUR.ResizeY.MASK-CUR.ResizeY - .DA %0.00000000 - .DA %0.00010000 - .DA %0.01111100 - .DA %0.11111110 - .DA %0.00010000 - .DA %0.00010000 - .DA %0.00010000 - .DA %0.11111110 - .DA %0.01111100 - .DA %0.00010000 - .DA %0.00000000 -CUR.ResizeY.MASK - .DA %1.11101111 - .DA %1.11000111 - .DA %1.00000001 - .DA %0.00000000 - .DA %0.00000000 - .DA %1.11000111 - .DA %1.11000111 - .DA %0.00000000 - .DA %1.00000001 - .DA %1.11000111 - .DA %1.11101111 -*-------------------------------------- -CUR.ResizeXY1 .DA #S.BM.F.BBP1 - .DA #2 RowBytes - .DA 11 W - .DA 11 H - .DA CUR.ResizeXY1.MASK-CUR.ResizeXY1 - .DA %000.00000000 - .DA %011.11000000 - .DA %011.10000000 - .DA %011.10000000 - .DA %010.01000000 - .DA %000.00100000 - .DA %000.00010010 - .DA %000.00001110 - .DA %000.00001110 - .DA %000.00011110 - .DA %000.00000000 -CUR.ResizeXY1.MASK - .DA %000.00001111 - .DA %000.00011111 - .DA %000.00111111 - .DA %000.00111111 - .DA %000.00011110 - .DA %001.10001100 - .DA %011.11000000 - .DA %111.11100000 - .DA %111.11100000 - .DA %111.11000000 - .DA %111.10000000 -*-------------------------------------- -CUR.ResizeXY2 .DA #S.BM.F.BBP1 - .DA #2 RowBytes - .DA 11 W - .DA 11 H - .DA CUR.ResizeXY2.MASK-CUR.ResizeXY2 - .DA %000.00000000 - .DA %000.00011110 - .DA %000.00001110 - .DA %000.00001110 - .DA %000.00010010 - .DA %000.00100000 - .DA %010.01000000 - .DA %011.10000000 - .DA %011.10000000 - .DA %011.11000000 - .DA %000.00000000 -CUR.ResizeXY2.MASK - .DA %111.10000000 - .DA %111.11000000 - .DA %111.11100000 - .DA %111.11100000 - .DA %011.11000000 - .DA %001.10001100 - .DA %000.00011110 - .DA %000.00111111 - .DA %000.00111111 - .DA %000.00011111 - .DA %000.00001111 -*-------------------------------------- -CUR.Cross .DA #S.BM.F.BBP1 - .DA #2 RowBytes - .DA 11 W - .DA 11 H - .DA CUR.Cross.MASK-CUR.Cross - .DA %000.00100000 - .DA %000.01010000 - .DA %000.01010000 - .DA %000.01010000 - .DA %011.11011110 - .DA %100.00000001 - .DA %011.11011110 - .DA %000.01010000 - .DA %000.01010000 - .DA %000.01010000 - .DA %000.00100000 -CUR.Cross.MASK - .DA %111.11011111 - .DA %111.10001111 - .DA %111.10001111 - .DA %111.10001111 - .DA %100.00000001 - .DA %000.00100000 - .DA %100.00000001 - .DA %111.10001111 - .DA %111.10001111 - .DA %111.10001111 - .DA %111.11011111 -*-------------------------------------- -CUR.Text .DA #S.BM.F.BBP1 - .DA #1 RowBytes - .DA 7 W - .DA 11 H - .DA CUR.Text.MASK-CUR.Text - - .DA #%0000000 - .DA #%0000000 - .DA #%0000000 - .DA #%0000000 - .DA #%0000000 - .DA #%0000000 - .DA #%0000000 - .DA #%0000000 - .DA #%0000000 - .DA #%0000000 - .DA #%0000000 -CUR.Text.MASK - .DA #%0011100 - .DA #%1101011 - .DA #%1110111 - .DA #%1110111 - .DA #%1110111 - .DA #%1110111 - .DA #%1110111 - .DA #%1110111 - .DA #%1110111 - .DA #%1101011 - .DA #%0011100 -*-------------------------------------- -CUR.Wait1 .DA #S.BM.F.BBP1 - .DA #2 RowBytes - .DA 11 W - .DA 13 H - .DA CUR.Wait4.MASK-CUR.Wait1 - .DA %000.00000000 - .DA %001.11111100 - .DA %001.00000100 - .DA %000.10001000 - .DA %000.01010000 - .DA %000.00100000 - .DA %000.00100000 - .DA %000.00100000 - .DA %000.01110000 - .DA %000.11111000 - .DA %001.11111100 - .DA %001.11111100 - .DA %000.00000000 -*-------------------------------------- -CUR.Wait2 .DA #S.BM.F.BBP1 - .DA #2 RowBytes - .DA 11 W - .DA 13 H - .DA CUR.Wait4.MASK-CUR.Wait2 - .DA %000.00000000 - .DA %001.11111100 - .DA %001.11111100 - .DA %000.10001000 - .DA %000.01010000 - .DA %000.00100000 - .DA %000.00100000 - .DA %000.00100000 - .DA %000.01110000 - .DA %000.11111000 - .DA %001.00000100 - .DA %001.11111100 - .DA %000.00000000 -*-------------------------------------- -CUR.Wait3 .DA #S.BM.F.BBP1 - .DA #2 RowBytes - .DA 11 W - .DA 13 H - .DA CUR.Wait4.MASK-CUR.Wait3 - .DA %000.00000000 - .DA %001.11111100 - .DA %001.11111100 - .DA %000.11111000 - .DA %000.01010000 - .DA %000.00100000 - .DA %000.00100000 - .DA %000.00100000 - .DA %000.01110000 - .DA %000.10001000 - .DA %001.00000100 - .DA %001.11111100 - .DA %000.00000000 -*-------------------------------------- -CUR.Wait4 .DA #S.BM.F.BBP1 - .DA #2 RowBytes - .DA 11 W - .DA 13 H - .DA CUR.Wait4.MASK-CUR.Wait4 - .DA %000.00000000 - .DA %001.11111100 - .DA %001.11111100 - .DA %000.11111000 - .DA %000.01110000 - .DA %000.00100000 - .DA %000.00100000 - .DA %000.00100000 - .DA %000.01010000 - .DA %000.10001000 - .DA %001.00000100 - .DA %001.11111100 - .DA %000.00000000 -CUR.Wait4.MASK .DA %110.00000011 - .DA %100.00000001 - .DA %100.00000001 - .DA %110.00000011 - .DA %111.00000111 - .DA %111.10001111 - .DA %111.10001111 - .DA %111.10001111 - .DA %111.00000111 - .DA %110.00000011 - .DA %100.00000001 - .DA %100.00000001 - .DA %110.00000011 -*-------------------------------------- -CUR.Wait5 .DA #S.BM.F.BBP1 - .DA #2 RowBytes - .DA 16 W - .DA 14 H - .DA CUR.Wait5.MASK-CUR.Wait5 - .DA %00000000.00000000 - .DA %00000010.00000000 - .DA %00000110.00000000 - .DA %00001110.00000000 - .DA %00011110.00000000 - .DA %00111110.00000000 - .DA %00000001.00000000 - .DA %00000000.10000000 - .DA %00000000.01111100 - .DA %00000000.01001000 - .DA %00000000.01010000 - .DA %00000000.01100000 - .DA %00000000.01000000 - .DA %00000000.00000000 -CUR.Wait5.MASK .DA %11111100.11111111 - .DA %11111000.11111111 - .DA %11110000.11111111 - .DA %11100000.11111111 - .DA %11000000.11111111 - .DA %10000000.01111111 - .DA %10000000.00111111 - .DA %11111100.00000001 - .DA %11111110.00000001 - .DA %11111111.00000011 - .DA %11111111.00000111 - .DA %11111111.00001111 - .DA %11111111.00011111 - .DA %11111111.00111111 -*-------------------------------------- -CUR.Wait6 .DA #S.BM.F.BBP1 - .DA #2 RowBytes - .DA 16 W - .DA 14 H - .DA CUR.Wait6.MASK-CUR.Wait6 - .DA %00000000.00000000 - .DA %00000000.01000000 - .DA %00000000.01100000 - .DA %00000000.01010000 - .DA %00000000.01001000 - .DA %00000000.01111100 - .DA %00000000.10000000 - .DA %00000001.00000000 - .DA %00111110.00000000 - .DA %00011110.00000000 - .DA %00001110.00000000 - .DA %00000110.00000000 - .DA %00000010.00000000 - .DA %00000000.00000000 -CUR.Wait6.MASK .DA %11111111.00111111 - .DA %11111111.00011111 - .DA %11111111.00001111 - .DA %11111111.00000111 - .DA %11111111.00000011 - .DA %11111110.00000001 - .DA %11111100.00000001 - .DA %10000000.00111111 - .DA %10000000.01111111 - .DA %11000000.11111111 - .DA %11100000.11111111 - .DA %11110000.11111111 - .DA %11111000.11111111 - .DA %11111100.11111111 *-------------------------------------- MAN SAVE usr/src/lib/libgui.g.cur diff --git a/LIB/LIBGUI.G.PTR.txt b/LIB/LIBGUI.G.PTR.txt new file mode 100644 index 00000000..0fcc0edc --- /dev/null +++ b/LIB/LIBGUI.G.PTR.txt @@ -0,0 +1,413 @@ +NEW + AUTO 3,1 +*-------------------------------------- +PTR.T .BS 1 +PTR.bVisible .BS 1 +PTR.Pos .BS S.POINT +*-------------------------------------- +PTR.HotPoints .DA #0,#0 PTR.T.ARROW + .DA #6,#6 PTR.T.MOVE + .DA #7,#4 PTR.ResizeX + .DA #6,#5 PTR.ResizeY + .DA #5,#5 PTR.ResizeXY1 + .DA #5,#5 PTR.ResizeXY2 + .DA #5,#5 PTR.Cross + .DA #5,#3 PTR.Text + .DA #5,#6 PTR.Wait1 + .DA #5,#6 PTR.Wait2 + .DA #5,#6 PTR.Wait3 + .DA #5,#6 PTR.Wait4 + .DA #8,#7 PTR.Wait5 + .DA #8,#7 PTR.Wait6 +*-------------------------------------- +PTR.SaveBuf .BS 64 16*4 +*-------------------------------------- +PTR.Arrow .DA #S.BM.F.BBP1 + .DA #2 RowBytes + .DA 11 W + .DA 13 H + .DA PTR.Arrow.MASK-PTR.Arrow + .DA %000.00000000 + .DA %000.00000010 + .DA %000.00000110 + .DA %000.00001110 + .DA %000.00011110 + .DA %000.00111110 + .DA %000.01111110 + .DA %000.11111110 + .DA %001.11111110 + .DA %010.01111110 + .DA %000.11110010 + .DA %000.11100000 + .DA %000.00000000 +PTR.Arrow.MASK .DA %111.11111100 + .DA %111.11111000 + .DA %111.11110000 + .DA %111.11100000 + .DA %111.11000000 + .DA %111.10000000 + .DA %111.00000000 + .DA %110.00000000 + .DA %100.00000000 + .DA %000.00000000 + .DA %000.00000000 + .DA %110.00000000 + .DA %110.00001111 +*-------------------------------------- +PTR.Move .DA #S.BM.F.BBP1 + .DA #2 RowBytes + .DA 11 W + .DA 11 H + .DA PTR.Move.MASK-PTR.Move + .DA %000.00100000 + .DA %000.01010000 + .DA %000.10001000 + .DA %001.00000100 + .DA %010.00000010 + .DA %100.00000001 + .DA %010.00000010 + .DA %001.00000100 + .DA %000.10001000 + .DA %000.01010000 + .DA %000.00100000 +PTR.Move.MASK + .DA %111.11111111 + .DA %111.11111111 + .DA %111.11111111 + .DA %111.11111111 + .DA %111.11111111 + .DA %111.11111111 + .DA %111.11111111 + .DA %111.11111111 + .DA %111.11111111 + .DA %111.11111111 + .DA %111.11111111 +*-------------------------------------- +PTR.ResizeX .DA #S.BM.F.BBP1 + .DA #2 RowBytes + .DA 14 W + .DA 7 H + .DA PTR.ResizeX.MASK-PTR.ResizeX + .DA %000000.00000000 + .DA %000100.00001000 + .DA %001100.00001100 + .DA %011111.11111110 + .DA %001100.00001100 + .DA %000100.00001000 + .DA %000000.00000000 +PTR.ResizeX.MASK + .DA %111001.11100111 + .DA %110001.11100011 + .DA %100000.00000001 + .DA %000000.00000000 + .DA %100000.00000001 + .DA %110001.11100011 + .DA %111001.11100111 +*-------------------------------------- +PTR.ResizeY .DA #S.BM.F.BBP1 + .DA #2 RowBytes + .DA 9 W + .DA 11 H + .DA PTR.ResizeY.MASK-PTR.ResizeY + .DA %0.00000000 + .DA %0.00010000 + .DA %0.01111100 + .DA %0.11111110 + .DA %0.00010000 + .DA %0.00010000 + .DA %0.00010000 + .DA %0.11111110 + .DA %0.01111100 + .DA %0.00010000 + .DA %0.00000000 +PTR.ResizeY.MASK + .DA %1.11101111 + .DA %1.11000111 + .DA %1.00000001 + .DA %0.00000000 + .DA %0.00000000 + .DA %1.11000111 + .DA %1.11000111 + .DA %0.00000000 + .DA %1.00000001 + .DA %1.11000111 + .DA %1.11101111 +*-------------------------------------- +PTR.ResizeXY1 .DA #S.BM.F.BBP1 + .DA #2 RowBytes + .DA 11 W + .DA 11 H + .DA PTR.ResizeXY1.MASK-PTR.ResizeXY1 + .DA %000.00000000 + .DA %011.11000000 + .DA %011.10000000 + .DA %011.10000000 + .DA %010.01000000 + .DA %000.00100000 + .DA %000.00010010 + .DA %000.00001110 + .DA %000.00001110 + .DA %000.00011110 + .DA %000.00000000 +PTR.ResizeXY1.MASK + .DA %000.00001111 + .DA %000.00011111 + .DA %000.00111111 + .DA %000.00111111 + .DA %000.00011110 + .DA %001.10001100 + .DA %011.11000000 + .DA %111.11100000 + .DA %111.11100000 + .DA %111.11000000 + .DA %111.10000000 +*-------------------------------------- +PTR.ResizeXY2 .DA #S.BM.F.BBP1 + .DA #2 RowBytes + .DA 11 W + .DA 11 H + .DA PTR.ResizeXY2.MASK-PTR.ResizeXY2 + .DA %000.00000000 + .DA %000.00011110 + .DA %000.00001110 + .DA %000.00001110 + .DA %000.00010010 + .DA %000.00100000 + .DA %010.01000000 + .DA %011.10000000 + .DA %011.10000000 + .DA %011.11000000 + .DA %000.00000000 +PTR.ResizeXY2.MASK + .DA %111.10000000 + .DA %111.11000000 + .DA %111.11100000 + .DA %111.11100000 + .DA %011.11000000 + .DA %001.10001100 + .DA %000.00011110 + .DA %000.00111111 + .DA %000.00111111 + .DA %000.00011111 + .DA %000.00001111 +*-------------------------------------- +PTR.Cross .DA #S.BM.F.BBP1 + .DA #2 RowBytes + .DA 11 W + .DA 11 H + .DA PTR.Cross.MASK-PTR.Cross + .DA %000.00100000 + .DA %000.01010000 + .DA %000.01010000 + .DA %000.01010000 + .DA %011.11011110 + .DA %100.00000001 + .DA %011.11011110 + .DA %000.01010000 + .DA %000.01010000 + .DA %000.01010000 + .DA %000.00100000 +PTR.Cross.MASK + .DA %111.11011111 + .DA %111.10001111 + .DA %111.10001111 + .DA %111.10001111 + .DA %100.00000001 + .DA %000.00100000 + .DA %100.00000001 + .DA %111.10001111 + .DA %111.10001111 + .DA %111.10001111 + .DA %111.11011111 +*-------------------------------------- +PTR.Text .DA #S.BM.F.BBP1 + .DA #1 RowBytes + .DA 7 W + .DA 11 H + .DA PTR.Text.MASK-PTR.Text + + .DA #%0000000 + .DA #%0000000 + .DA #%0000000 + .DA #%0000000 + .DA #%0000000 + .DA #%0000000 + .DA #%0000000 + .DA #%0000000 + .DA #%0000000 + .DA #%0000000 + .DA #%0000000 +PTR.Text.MASK + .DA #%0011100 + .DA #%1101011 + .DA #%1110111 + .DA #%1110111 + .DA #%1110111 + .DA #%1110111 + .DA #%1110111 + .DA #%1110111 + .DA #%1110111 + .DA #%1101011 + .DA #%0011100 +*-------------------------------------- +PTR.Wait1 .DA #S.BM.F.BBP1 + .DA #2 RowBytes + .DA 11 W + .DA 13 H + .DA PTR.Wait4.MASK-PTR.Wait1 + .DA %000.00000000 + .DA %001.11111100 + .DA %001.00000100 + .DA %000.10001000 + .DA %000.01010000 + .DA %000.00100000 + .DA %000.00100000 + .DA %000.00100000 + .DA %000.01110000 + .DA %000.11111000 + .DA %001.11111100 + .DA %001.11111100 + .DA %000.00000000 +*-------------------------------------- +PTR.Wait2 .DA #S.BM.F.BBP1 + .DA #2 RowBytes + .DA 11 W + .DA 13 H + .DA PTR.Wait4.MASK-PTR.Wait2 + .DA %000.00000000 + .DA %001.11111100 + .DA %001.11111100 + .DA %000.10001000 + .DA %000.01010000 + .DA %000.00100000 + .DA %000.00100000 + .DA %000.00100000 + .DA %000.01110000 + .DA %000.11111000 + .DA %001.00000100 + .DA %001.11111100 + .DA %000.00000000 +*-------------------------------------- +PTR.Wait3 .DA #S.BM.F.BBP1 + .DA #2 RowBytes + .DA 11 W + .DA 13 H + .DA PTR.Wait4.MASK-PTR.Wait3 + .DA %000.00000000 + .DA %001.11111100 + .DA %001.11111100 + .DA %000.11111000 + .DA %000.01010000 + .DA %000.00100000 + .DA %000.00100000 + .DA %000.00100000 + .DA %000.01110000 + .DA %000.10001000 + .DA %001.00000100 + .DA %001.11111100 + .DA %000.00000000 +*-------------------------------------- +PTR.Wait4 .DA #S.BM.F.BBP1 + .DA #2 RowBytes + .DA 11 W + .DA 13 H + .DA PTR.Wait4.MASK-PTR.Wait4 + .DA %000.00000000 + .DA %001.11111100 + .DA %001.11111100 + .DA %000.11111000 + .DA %000.01110000 + .DA %000.00100000 + .DA %000.00100000 + .DA %000.00100000 + .DA %000.01010000 + .DA %000.10001000 + .DA %001.00000100 + .DA %001.11111100 + .DA %000.00000000 +PTR.Wait4.MASK .DA %110.00000011 + .DA %100.00000001 + .DA %100.00000001 + .DA %110.00000011 + .DA %111.00000111 + .DA %111.10001111 + .DA %111.10001111 + .DA %111.10001111 + .DA %111.00000111 + .DA %110.00000011 + .DA %100.00000001 + .DA %100.00000001 + .DA %110.00000011 +*-------------------------------------- +PTR.Wait5 .DA #S.BM.F.BBP1 + .DA #2 RowBytes + .DA 16 W + .DA 14 H + .DA PTR.Wait5.MASK-PTR.Wait5 + .DA %00000000.00000000 + .DA %00000010.00000000 + .DA %00000110.00000000 + .DA %00001110.00000000 + .DA %00011110.00000000 + .DA %00111110.00000000 + .DA %00000001.00000000 + .DA %00000000.10000000 + .DA %00000000.01111100 + .DA %00000000.01001000 + .DA %00000000.01010000 + .DA %00000000.01100000 + .DA %00000000.01000000 + .DA %00000000.00000000 +PTR.Wait5.MASK .DA %11111100.11111111 + .DA %11111000.11111111 + .DA %11110000.11111111 + .DA %11100000.11111111 + .DA %11000000.11111111 + .DA %10000000.01111111 + .DA %10000000.00111111 + .DA %11111100.00000001 + .DA %11111110.00000001 + .DA %11111111.00000011 + .DA %11111111.00000111 + .DA %11111111.00001111 + .DA %11111111.00011111 + .DA %11111111.00111111 +*-------------------------------------- +PTR.Wait6 .DA #S.BM.F.BBP1 + .DA #2 RowBytes + .DA 16 W + .DA 14 H + .DA PTR.Wait6.MASK-PTR.Wait6 + .DA %00000000.00000000 + .DA %00000000.01000000 + .DA %00000000.01100000 + .DA %00000000.01010000 + .DA %00000000.01001000 + .DA %00000000.01111100 + .DA %00000000.10000000 + .DA %00000001.00000000 + .DA %00111110.00000000 + .DA %00011110.00000000 + .DA %00001110.00000000 + .DA %00000110.00000000 + .DA %00000010.00000000 + .DA %00000000.00000000 +PTR.Wait6.MASK .DA %11111111.00111111 + .DA %11111111.00011111 + .DA %11111111.00001111 + .DA %11111111.00000111 + .DA %11111111.00000011 + .DA %11111110.00000001 + .DA %11111100.00000001 + .DA %10000000.00111111 + .DA %10000000.01111111 + .DA %11000000.11111111 + .DA %11100000.11111111 + .DA %11110000.11111111 + .DA %11111000.11111111 + .DA %11111100.11111111 +*-------------------------------------- +MAN +SAVE usr/src/lib/libgui.g.ptr +LOAD usr/src/lib/libgui.s +ASM diff --git a/LIB/LIBGUI.S.CUR.txt b/LIB/LIBGUI.S.CUR.txt index f16a906e..65258c06 100644 --- a/LIB/LIBGUI.S.CUR.txt +++ b/LIB/LIBGUI.S.CUR.txt @@ -1,155 +1,6 @@ NEW AUTO 3,1 *-------------------------------------- -UpdateCursor lda CUR.T - cmp #CUR.T.WAIT - bcc SetCursor.RTS - inc - inc - cmp #CUR.T.WAIT+12 - bne SetCursor - - lda #CUR.T.WAIT -*-------------------------------------- -* Set X2,Y2,SrcPtr -*-------------------------------------- -SetCursor sta CUR.T - - lda CUR.bVisible - bpl .1 - - jsr HideCursor.I - -.1 ldx CUR.T - lda L.Cursors,x - sta CB.PTR+S.CB.SrcPtr - sta ZPPtr1 - lda L.Cursors+1,x - sta CB.PTR+S.CB.SrcPtr+1 - sta ZPPtr1+1 - - ldy #S.BM.W - lda (ZPPtr1),y - sta CB.PTR+S.CB.SrcW - - clc - adc CB.PTR+S.CB.X1 - pha - - iny - lda (ZPPtr1),y - sta CB.PTR+S.CB.SrcW+1 - adc CB.PTR+S.CB.X1+1 - tax - pla - bne .2 - - dex - -.2 dec - sta CB.PTR+S.CB.X2 - stx CB.PTR+S.CB.X2+1 - - iny S.BM.H - lda (ZPPtr1),y - sta CB.PTR+S.CB.SrcH - - clc - adc CB.PTR+S.CB.Y1 - pha - - iny - lda (ZPPtr1),y - sta CB.PTR+S.CB.SrcH+1 - adc CB.PTR+S.CB.Y1+1 - tax - pla - bne .3 - - dex - -.3 dec - sta CB.PTR+S.CB.Y2 - stx CB.PTR+S.CB.Y2+1 - - lda CUR.bVisible - bmi ShowCursor.I - -SetCursor.RTS rts -*-------------------------------------- -* Set DestX,DestY -*-------------------------------------- -SetCursorPos >PULLW ZPPtr1 - lda CUR.bVisible - bpl .1 - - jsr HideCursor.I - -.1 ldy #S.POINT-1 - -.2 lda (ZPPtr1),y - sta CUR.Pos,y - dey - bpl .2 - - lda CUR.bVisible - bmi ShowCursor.I - - clc - rts -*-------------------------------------- -HideCursor lda CUR.bVisible - bpl .9 - jsr HideCursor.I - stz CUR.bVisible - -.9 clc - rts -*-------------------------------------- -ShowCursor lda CUR.bVisible - bmi .9 - - jsr ShowCursor.I - dec CUR.bVisible -.9 rts -*-------------------------------------- -HideCursor.I lda #S.CB.OP.RESTORE - bra DrawCursor.I -*-------------------------------------- -ShowCursor.I ldx CUR.T - lda CUR.Pos+S.POINT.X - sec - sbc CUR.HotPoints,x - sta CB.PTR+S.CB.X1 - - lda CUR.Pos+S.POINT.X+1 - sbc #0 - sta CB.PTR+S.CB.X1+1 - - lda CUR.Pos+S.POINT.Y - sec - sbc CUR.HotPoints+1,x - sta CB.PTR+S.CB.Y1 - - lda CUR.Pos+S.POINT.Y+1 - sbc #0 - sta CB.PTR+S.CB.Y1+1 - - lda #S.CB.OP.ORA+S.CB.OP.MASK+S.CB.OP.SAVE - -DrawCursor.I sta CB.PTR+S.CB.OP - - >LDYA L.WND.Screen - jsr OBJ.GetInCache - - >LDYA L.CB.PTR - jsr CLIP.YA - bcs .8 - - jsr GFXWrite.CB -.8 clc - - rts *-------------------------------------- MAN SAVE usr/src/lib/libgui.s.cur diff --git a/LIB/LIBGUI.S.DRAW.txt b/LIB/LIBGUI.S.DRAW.txt index b2b82a92..fd178815 100644 --- a/LIB/LIBGUI.S.DRAW.txt +++ b/LIB/LIBGUI.S.DRAW.txt @@ -3,7 +3,7 @@ NEW *-------------------------------------- * drawline(short int hWND, short int OP, short int COLOR, int X1, int Y1, int X2, int X2) *-------------------------------------- -DrawLine jsr DRAW.PullY2X2Y1X1 +DRAW.Line jsr DRAW.PullY2X2Y1X1 >PULLB CB.Cache+S.CB.COLOR >PULLB CB.Cache+S.CB.OP @@ -53,7 +53,7 @@ DrawLine jsr DRAW.PullY2X2Y1X1 jsr CLIP.CB.Cache bcs .8 - jmp GFXWrite.CB + jmp CB.GFXWrite .8 rts *-------------------------------------- .3 >NOT16 DY set DY=-DY @@ -65,21 +65,21 @@ DrawLine jsr DRAW.PullY2X2Y1X1 lda #S.CB.CMD.SETPIXEL sta CB.Cache+S.CB.CMD - jsr GFXWrite.CB + jsr CB.GFXWrite lda DX sec sbc DY tax lda DX+1 sbc DY+1 - bmi DrawLine.IncY DY is greater than DX, we will increase on Y axis + bmi DRAW.Line.IncY DY is greater than DX, we will increase on Y axis txa - beq DrawLine.IncXY DX=DY, go inc X & Y + beq DRAW.Line.IncXY DX=DY, go inc X & Y - jmp DrawLine.IncX DY is lower than DX, we will increase on X axis + jmp DRAW.Line.IncX DY is lower than DX, we will increase on X axis *-------------------------------------- -DrawLine.IncXY lda DX DX=DY +DRAW.Line.IncXY lda DX DX=DY eor #$ff sta Counter lda DX+1 @@ -100,12 +100,12 @@ DrawLine.IncXY lda DX DX=DY clc adc IY sta CB.Cache+S.CB.Y1 - jsr GFXWrite.CB + jsr CB.GFXWrite bra .1 .8 rts *-------------------------------------- -DrawLine.IncY lda DY +DRAW.Line.IncY lda DY eor #$ff sta Counter lda DY+1 @@ -176,12 +176,12 @@ DrawLine.IncY lda DY clc adc IY sta CB.Cache+S.CB.Y1 - jsr GFXWrite.CB + jsr CB.GFXWrite bra .1 .8 rts *-------------------------------------- -DrawLine.IncX lda DX +DRAW.Line.IncX lda DX eor #$ff sta Counter lda DX+1 @@ -253,7 +253,7 @@ DrawLine.IncX lda DX inc CB.Cache+S.CB.X1+1 -.6 jsr GFXWrite.CB +.6 jsr CB.GFXWrite bra .1 .8 rts @@ -273,7 +273,7 @@ FillRectangle jsr DRAW.PullY2X2Y1X1 jsr CLIP.CB.Cache bcs .8 - jmp GFXWrite.CB + jmp CB.GFXWrite .8 rts *-------------------------------------- @@ -294,7 +294,7 @@ DrawBitMap lda #S.CB.CMD.BITBLT jsr CLIP.CB.Cache bcs .8 - jmp GFXWrite.CB + jmp CB.GFXWrite .8 rts *-------------------------------------- @@ -333,7 +333,7 @@ DRAW.yaBMAtDXDY >STYA ZPBMPtr Src BM lda ZPBMPtr+1 sta CB.Cache+S.CB.SrcPtr+1 - jmp PutCBCache2CBBuf + jmp CB.Cache2CBBuf *-------------------------------------- * drawtext (short int hWND, short int OP, short int hFONT, int X1, int Y1, char *str) *-------------------------------------- @@ -352,7 +352,7 @@ DrawText lda #S.CB.CMD.DRAWTEXT2 jsr CLIP.CB.Cache bcs .8 - jmp GFXWrite.CB + jmp CB.GFXWrite .8 rts *-------------------------------------- @@ -384,7 +384,7 @@ DRAW.YATextAtDXDY dex bpl .1 - jmp PutCBCache2CBBuf + jmp CB.Cache2CBBuf *-------------------------------------- DRAW.PullY2X2Y1X1 ldx #7 @@ -485,13 +485,16 @@ DRAW.AddP1YtoCBX sta CB.Cache+1,x rts *-------------------------------------- -DrawCBBufToYA pha +DrawCBBufToYA ldx hCBBuf + beq .80 + + pha phy - bit CUR.bVisible + bit PTR.bVisible bpl .1 - jsr HideCursor.I + jsr PTR.Hide.I .1 lda #0 sta (ZPCBBufPtr) @@ -512,13 +515,13 @@ DrawCBBufToYA pha lda #S.CB.CMD.DRAWTEXT+S.CB.CMD.OSD sta CB.Cache+S.CB.CMD - jsr GFXWrite.CB + jsr CB.GFXWrite bcs .9 jsr CLIP.CB.Cache bcs .3 - jsr GFXWrite.CB + jsr CB.GFXWrite .3 lda CB.Cache+S.CB.SrcPtr >SYSCALL2 FreeStkObj @@ -527,7 +530,7 @@ DrawCBBufToYA pha .6 jsr CLIP.CB.Cache bcs .7 - jsr GFXWrite.CB + jsr CB.GFXWrite .7 lda (ZPCBPtr) Get Cmd lsr @@ -545,13 +548,12 @@ DrawCBBufToYA pha stz hCBBuf >SYSCALL2 FreeMem - clc + bit PTR.bVisible + bpl .80 - bit CUR.bVisible - bpl .9 - - jmp ShowCursor.I + jmp PTR.Show.I +.80 clc .9 rts *-------------------------------------- MAN diff --git a/LIB/LIBGUI.S.FON.txt b/LIB/LIBGUI.S.FON.txt index 76560792..3018ce7f 100644 --- a/LIB/LIBGUI.S.FON.txt +++ b/LIB/LIBGUI.S.FON.txt @@ -38,7 +38,7 @@ FON.GetTextSize >STYA CB.CACHE+S.CB.TxtPtr lda #S.CB.CMD.GETTEXTSIZE+S.CB.CMD.OSD sta CB.CACHE+S.CB.CMD - jmp GFXWrite.CB + jmp CB.GFXWrite *-------------------------------------- MAN SAVE usr/src/lib/libgui.s.fon diff --git a/LIB/LIBGUI.S.MBAR.txt b/LIB/LIBGUI.S.MBAR.txt index 0056ae22..24fc9d58 100644 --- a/LIB/LIBGUI.S.MBAR.txt +++ b/LIB/LIBGUI.S.MBAR.txt @@ -1,84 +1,91 @@ NEW AUTO 3,1 *-------------------------------------- -* MBAR.New(*S.MBITEM mbitems) +* Y,A = MBAR definition *-------------------------------------- -MBAR.New >LDYAI S.MBAR - >SYSCALL2 getmem - bcs .99 +MBAR.New >STYA ZPMENUPtr MBAR definition + >STYA ZPPtr1 for pass #2 + lda #S.MBAR.Items+1 Ending\0 + sta Counter + stz Counter+1 + +.10 lda (ZPMENUPtr) + beq .3 + + ldy #$ff + +.1 iny + lda (ZPMENUPtr),y + bne .1 + + tya + + sec text Ending\0 + + inc + inc skip pMENU + adc ZPMENUPtr + sta ZPMENUPtr + bcc .2 + + inc ZPMENUPtr+1 + +.2 tya + sec + adc #S.MBITEM + + adc Counter + sta Counter + bcc .10 + + inc Counter+1 + bra .10 + +.3 >LDYA Counter + >SYSCALL2 GetMem + bcs .9 + >STYA ZPObjPtr + phx hMBAR + + ldy #S.OBJ-1 lda #S.OBJ.T.MBAR - sta (ZPObjPtr) S.OBJ.T - - lda #0 - - ldy #S.MBAR-1 - -.1 sta (ZPObjPtr),y - dey - bne .1 - - >PULLA - ldy #S.MBAR.MBITEMS - sta (ZPObjPtr),y - >PULLA - iny - sta (ZPObjPtr),y - + jsr OBJ.Init + lda #S.MBAR.Items clc -.99 rts -*-------------------------------------- -MBAR.Init >STYA ZPMENUPtr - >STYA ZPPtr1 - - ldy #S.MBITEM.S - lda (ZPPtr1),y - bmi .80 + adc ZPObjPtr + sta ZPObjPtr + bcc .4 - stz DX + inc ZPObjPtr+1 + +.4 stz DX stz DX+1 - -.1 lda (ZPPtr1) + +.5 lda (ZPPtr1) beq .8 - - lda #S.MBITEM.TEXT - clc - adc ZPPtr1 - tay - lda ZPPtr1+1 - adc #0 - - ldx hSYSFON - jsr FON.GetTextSize - - ldy #S.MBITEM.X1 - lda DX - sta (ZPPtr1),y + >LDYA DX + jsr OBJ.AddWord S.MBITEM.X1 - iny - - lda DX+1 - sta (ZPPtr1),y - - iny #S.MBITEM.XT - lda DX clc adc PREFS.MBARXMARGIN sta DX - sta (ZPPtr1),y + bcc .6 - iny - - lda DX+1 - adc #0 sta DX+1 - sta (ZPPtr1),y - + +.6 >LDYA DX + jsr OBJ.AddWord S.MBITEM.XT + + >LDYA ZPPtr1 pTEXT + ldx hSYSFON + jsr FON.GetTextSize + lda DX clc adc CB.CACHE+S.CB.SrcW @@ -87,36 +94,153 @@ MBAR.Init >STYA ZPMENUPtr lda DX+1 adc CB.CACHE+S.CB.SrcW+1 sta DX+1 - - iny #S.MBITEM.X2 - - lda DX - clc - adc PREFS.MBARXMARGIN - sta DX - sta (ZPPtr1),y - - iny - lda DX+1 - adc #0 - sta DX+1 - sta (ZPPtr1),y + >LDYA DX + jsr OBJ.AddWord S.MBITEM.X2 + + >LDYA ZPPtr1 pTEXT + jsr OBJ.AddWord + + jsr SkipStrZPtr1 skip "TEXT\0" + + ldy #1 + lda (ZPPtr1),y + jsr OBJ.AddByte pMENU+1 lda (ZPPtr1) + jsr OBJ.AddByte pMENU + + lda ZPPtr1 clc - adc ZPPtr1 + adc #2 sta ZPPtr1 - bcc .1 + bcc .5 + inc ZPPtr1+1 - bra .1 + bra .5 stkip pMENU -.8 lda #$80 +.8 pla hMBAR + clc +.9 rts +*-------------------------------------- +*-------------------------------------- +*-------------------------------------- +* ZPWNDPtr = parent WND +*-------------------------------------- +MBAR.Paint lda #S.CB.CMD.FILLRECT + jsr CB.InitCacheA + + lda #S.CB.OP.SET + sta CB.Cache+S.CB.OP + + lda #S.CB.M.MONO + sta CB.Cache+S.CB.M + + lda PREFS.MBARCOLOR + sta CB.Cache+S.CB.COLOR + + ldy #S.OBJ.X1 + lda (ZPWNDPtr),y + sta CB.Cache+S.CB.X1 + + iny + lda (ZPWNDPtr),y + sta CB.Cache+S.CB.X1+1 + + ldy #S.OBJ.X2 + lda (ZPWNDPtr),y + sta CB.Cache+S.CB.X2 + + iny + lda (ZPWNDPtr),y + sta CB.Cache+S.CB.X2+1 + + ldy #S.WND.MBarY1 + lda (ZPWNDPtr),y + sta CB.Cache+S.CB.Y1 + + iny + lda (ZPWNDPtr),y + sta CB.Cache+S.CB.Y1+1 + + iny #S.WND.MBarY2 + lda (ZPWNDPtr),y + sta CB.Cache+S.CB.Y2 + + iny + lda (ZPWNDPtr),y + sta CB.Cache+S.CB.Y2+1 + + jsr CB.Cache2CBBuf + + ldy #S.WND.pMBAR + lda (ZPWNDPtr),y + sta ZPMENUPtr + iny + lda (ZPWNDPtr),y + sta ZPMENUPtr+1 + +.1 lda (ZPMENUPtr) + beq .8 + + jsr CB.ClearCache + + lda #S.CB.CMD.DRAWTEXT2 + sta CB.CACHE+S.CB.CMD + + lda #S.CB.OP.SET+S.CB.OP.INVERSE + sta CB.Cache+S.CB.OP + + lda #S.CB.M.MONO + sta CB.Cache+S.CB.M + + lda hSYSFON + sta CB.CACHE+S.CB.hFont + + ldy #S.MBITEM.XT + lda (ZPMENUPtr),y + clc + ldy #S.OBJ.X1 + adc (ZPWNDPtr),y + sta CB.CACHE+S.CB.X1 + + ldy #S.MBITEM.XT+1 + lda (ZPMENUPtr),y + ldy #S.OBJ.X1+1 + adc (ZPWNDPtr),y + sta CB.CACHE+S.CB.X1+1 + + ldy #S.WND.MBarY1 + lda (ZPWNDPtr),y + clc + adc #1 + sta CB.CACHE+S.CB.Y1 + iny + lda (ZPWNDPtr),y + adc #0 + sta CB.CACHE+S.CB.Y1+1 + + lda #S.MBITEM.pTEXT + clc + adc ZPMENUPtr + sta CB.CACHE+S.CB.TxtPtr + + lda #0 + adc ZPMENUPtr+1 + sta CB.CACHE+S.CB.TxtPtr+1 + + jsr CB.Cache2CBBuf + + lda (ZPMENUPtr) + clc + adc ZPMENUPtr + sta ZPMENUPtr + bcc .1 + inc ZPMENUPtr+1 + bra .1 + +.8 clc - ldy #S.MBITEM.S - sta (ZPMENUPtr),y - -.80 clc rts *-------------------------------------- * ZPWNDPtr parent WND diff --git a/LIB/LIBGUI.S.MENU.txt b/LIB/LIBGUI.S.MENU.txt index 5fb7a1d8..147f0aeb 100644 --- a/LIB/LIBGUI.S.MENU.txt +++ b/LIB/LIBGUI.S.MENU.txt @@ -1,281 +1,208 @@ NEW AUTO 3,1 *-------------------------------------- -* MENU.New(int X, int Y, *S.RECT parent *S.MITEM mitems) +* NewMenu(pMENU, x, y) *-------------------------------------- -MENU.New ldy MENU.Stack.Top +MENU.New >PULLW DY + >PULLW DX + >PULLYA + >STYA ZPPtr1 MENU definition + >STYA ZPMENUPtr for pass #2 + + ldy MENU.Stack.Cnt cpy #MENU.MAX - bcc .10 - jmp .90 + beq .90 -.10 >LDYAI S.MENU - >SYSCALL2 getmem + jsr MENU.GetSize + >SYSCALL2 GetMem bcs .99 - >STYA ZPMENUPtr + >STYA ZPObjPtr txa hMenu - ldx MENU.Stack.Top + ldx MENU.Stack.Cnt sta MENU.Stack,x lda #S.OBJ.T.MENU - sta (ZPMENUPtr) S.OBJ.T + sta (ZPObjPtr) S.OBJ.T lda #0 - ldy #S.MENU-1 + ldy #S.MENU.Items-1 -.1 sta (ZPMENUPtr),y +.1 sta (ZPObjPtr),y dey bne .1 - >PULLA - ldy #S.MENU.MITEMS - sta (ZPMENUPtr),y - >PULLA - iny - sta (ZPMENUPtr),y + >LDYA ZPMENUPtr + >STYA ZPPtr1 - >PULLW ZPRECTPtr Parent RECT + jsr MENU.GetData - >PULLA - ldy #S.OBJ.Y1 - sta (ZPMENUPtr),y - >PULLA - iny - sta (ZPMENUPtr),y + ldx #3 + ldy #S.OBJ.X1+3 - >PULLA - ldy #S.OBJ.X1 - sta (ZPMENUPtr),y - >PULLA - iny - sta (ZPMENUPtr),y - - lda ZPMENUPtr - clc - adc #S.MENU.pX1 - sta ZPPtr1 - - lda ZPMENUPtr+1 - adc /S.MENU.pX1 - sta ZPPtr1+1 - - ldy #S.RECT-1 - -.3 lda (ZPRECTPtr),y - sta (ZPPtr1),y +.2 lda DX,x + sta (ZPObjPtr),y dey - bpl .3 + dex + bpl .2 jsr MENU.SetMenuSizePos - ldx MENU.Stack.Top + ldx MENU.Stack.Cnt lda MENU.Stack,x - inc MENU.Stack.Top + inc MENU.Stack.Cnt clc rts .90 lda #E.OOH sec -.99 >POP 8 +.99 MENU.New.RTS rts *-------------------------------------- -* hMENU8, ItemID8, Prop8, Value16 +* ZPPtr1 = defintion *-------------------------------------- -MENU.SetMItemProp - ldy #4 hMENU - lda (pStack),y - >SYSCALL2 GetMemPtr - >STYA ZPMENUPtr - - ldy #3 ID8 - lda (pStack),y - tax - - jsr MENU.FindMItemByID - bcs .9 - - ldy #2 Prop8 - lda (pStack),y - - tay - - >PULLA Value16 - sta (ZPPtr1),y - - iny - >PULLA - sta (ZPPtr1),y - -* clc - -.8 >POP 3 -.9 rts -*-------------------------------------- -MENU.Show >SYSCALL2 GetMemPtr - >STYA ZPMENUPtr - - jsr MENU.Save - bcs .9 - - jsr GetCBBuf - bcs .9 - - jsr MENU.ShowBorders - - jsr MENU.GetMItems - jsr MENU.GetDYW - -.6 lda (ZPPtr1) - beq .8 - - jsr MENU.GetDX - - jsr MENU.ShowMItem - jsr MENU.NextMItem - bra .6 - -.8 >LDYA L.WND.Screen - jmp DrawCBBufToYA - -.9 rts -*-------------------------------------- -MENU.Enter jsr MENU.GetDX - jsr MENU.GetDYW - - lda Counter W - clc - adc DX - sta IE IE = X2 - - lda Counter+1 - adc DX+1 - sta IE+1 - - jsr MENU.GetMItems - +MENU.GetSize lda #S.MENU.Items+1 Ending\0 + sta Counter + stz Counter+1 + .1 lda (ZPPtr1) beq .8 - ldy #S.MITEM.F - lda (ZPPtr1),y - cmp #S.MITEM.F.SEP - beq .2 - - lda DY - sec - adc SYSFON.H - sta INE INE = Y2 - lda DY+1 - adc #0 - sta INE+1 - - >LDYAI DX - jsr MOU.InRectYA - bcc .3 - -.2 jsr MENU.NextMItem - bra .1 - -.3 ldy #S.MENU.Selected - lda (ZPMENUPtr),y - - ldy #S.MITEM.ID - cmp (ZPPtr1),y - beq .9 same a s before, nothing to do - - pha old one - - lda (ZPPtr1),y new one - ldy #S.MENU.Selected - sta (ZPMENUPtr),y - - jsr GetCBBuf - - plx - beq .4 no previous selection - - jsr MENU.ShowMItemByID deselect previous... - -.4 ldy #S.MENU.Selected select new one - lda (ZPMENUPtr),y - tax - - jsr MENU.ShowMItemByID - - ldy #S.MITEM.F - lda (ZPPtr1),y - cmp #S.MITEM.F.SUBMENU - bne .80 - - >LDYA L.WND.Screen - jsr DrawCBBufToYA - - jmp MENU.NewSubMenu - -.8 ldy #S.MENU.Selected nothing to select.... - lda (ZPMENUPtr),y - beq .9 ....and nothing to deselect - - pha - lda #0 - sta (ZPMENUPtr),y - - jsr GetCBBuf - - plx - - jsr MENU.ShowMItemByID - -.80 >LDYA L.WND.Screen - jmp DrawCBBufToYA - -.9 lda MSG+S.MSG.S - bit #S.MSG.S.CLK - beq .90 - - lda #S.MSG.T.ID - sta MSG+S.MSG.T - - ldy #S.MITEM.ID - lda (ZPPtr1),y - sta MSG+S.MSG.ID - - jmp MENU.DestroyAll - -.90 clc - rts -*-------------------------------------- -MENU.NewSubMenu ldy #S.MENU.Selected - lda (ZPMENUPtr),y - tax - - jsr MENU.FindMItemByID - jsr MENU.GetDX - - lda DX + lda #S.MITEM clc adc Counter - tay - lda DX+1 - adc Counter+1 + sta Counter + bcc .2 + + inc Counter+1 - >PUSHYA X1 - >PUSHW DY Y1 - >PUSHWI DX Parent RECT +.2 lda (ZPPtr1) + cmp #S.MITEM.T.SEP + bne .3 + + inc ZPPtr1 + bne .1 + + inc ZPPtr1+1 + bra .1 + +.3 cmp #S.MITEM.T.ITEM + bne .4 + + lda #6 T+ID+KEMOD+KEY+pICON+"TEXT" + bra .5 + +.4 lda #5 T+pMENU+pICON+"TEXT" + +.5 jsr SkipAPtr1 + jsr SkipStrZPtr1 skip "TEXT\0" + bra .1 + +.8 >LDYA Counter + rts +*-------------------------------------- +* ZPPtr1 = defintion +* ZPObjPtr = DstBuf +*-------------------------------------- +MENU.GetData lda #S.MENU.Items + clc + adc ZPObjPtr + sta ZPObjPtr + bcc .1 + + inc ZPObjPtr+1 + +.1 lda (ZPPtr1) + sta (ZPObjPtr) + beq .8 + + ldy #S.MITEM.S + lda #0 + sta (ZPObjPtr),y + + lda (ZPPtr1) + cmp #S.MITEM.T.SEP + bne .2 + + inc ZPPtr1 skip 1 byte + bne .1 + + inc ZPPtr1+1 + bra .5 +*-------------------------------------- +.2 cmp #S.MITEM.T.ITEM + bne .3 + + ldy #1 T+ID+KEMOD+KEY+pICON+"text" + lda (ZPPtr1),y + ldy #S.MITEM.ID + sta (ZPObjPtr),y + + ldy #2 + lda (ZPPtr1),y + tax + iny + lda (ZPPtr1),y + + ldy #S.MITEM.KEYMOD+1 + sta (ZPObjPtr),y + dey KEY + txa + sta (ZPObjPtr),y + + lda #4 + bra .4 skip 4 bytes +*-------------------------------------- +.3 ldy #1 skip T+pMENU+pICON+"text" + lda (ZPPtr1),y + tax + iny + lda (ZPPtr1),y ldy #S.MITEM.pMENU+1 - lda (ZPPtr1),y - >PUSHA + sta (ZPObjPtr),y dey - lda (ZPPtr1),y - >PUSHA + txa + sta (ZPObjPtr),y + lda #3 skip 3 bytes + +.4 jsr SkipAPtr1 - jsr MENU.New - jmp MENU.Show + ldy #1 + lda (ZPPtr1),y + ldy #S.MITEM.pICON+1 + sta (ZPObjPtr),y + dey + lda (ZPPtr1) + sta (ZPObjPtr),y + + lda #2 skip pICON + jsr SkipAPtr1 + +.5 ldy #S.MITEM.pTEXT + lda ZPPtr1 + sta (ZPObjPtr),y + iny + lda ZPPtr1+1 + sta (ZPObjPtr),y + + jsr SkipStrZPtr1 skip "TEXT\0" + +.7 lda ZPObjPtr + clc + adc #S.MITEM + sta ZPObjPtr + bcc .1 + + inc ZPObjPtr+1 + bra .1 + +.8 clc + rts *-------------------------------------- MENU.SetMenuSizePos stz IY Icon Margin W @@ -295,7 +222,7 @@ MENU.SetMenuSizePos beq .3 jsr MENU.GetMItemW - jsr MENU.NextMItem + jsr MENU.NextMItemDY bra .1 .3 lda #2+MENU.LMargin+MENU.RMargin 2px Borders+5 LMARGIN (Checked) +5 RMARGIN (SubMenu) @@ -322,6 +249,7 @@ MENU.SetMenuSizePos inc DX+1 .4 ldy #S.OBJ.W + sta (ZPMENUPtr),y iny lda DX+1 @@ -385,9 +313,8 @@ MENU.SetMenuSizePos rts *-------------------------------------- -MENU.GetMItemW ldy #S.MITEM.F - lda (ZPPtr1),y - cmp #S.MITEM.F.SEP +MENU.GetMItemW lda (ZPPtr1) + cmp #S.MITEM.T.SEP beq .8 ldy #S.MITEM.pICON @@ -414,7 +341,7 @@ MENU.GetMItemW ldy #S.MITEM.F sta IE+1 .2 jsr MENU.GetKeyString - beq .8 + bcs .8 ldx hSYSFON jsr FON.GetTextSize @@ -427,7 +354,206 @@ MENU.GetMItemW ldy #S.MITEM.F .8 rts *-------------------------------------- -MENU.ShowBorders +* hMENU8, ItemID8, Prop8, Value16 +*-------------------------------------- +MENU.SetMItemProp + ldy #4 hMENU + lda (pStack),y + >SYSCALL2 GetMemPtr + >STYA ZPMENUPtr + + ldy #3 ID8 + lda (pStack),y + tax + + jsr MENU.FindMItemByID + bcs .9 + + ldy #2 Prop8 + lda (pStack),y + + tay + + >PULLA Value16 + sta (ZPPtr1),y + + iny + >PULLA + sta (ZPPtr1),y + +* clc + +.8 >POP 3 +.9 rts +*-------------------------------------- +MENU.FindMItemByID + jsr MENU.GetMItems + +.1 lda (ZPPtr1) + beq .9 + + cmp #S.MITEM.T.SEP + beq .7 + + txa + ldy #S.MITEM.ID + cmp (ZPPtr1),y + beq .8 + +.7 jsr MENU.NextMItem + bra .1 + +.8 clc + rts + +.9 sec + rts +*-------------------------------------- +MENU.Enter jsr MENU.GetDXWIE X1,W,X2 + jsr MENU.GetDY Y1 + + jsr MENU.GetMItems + +.1 lda (ZPPtr1) + beq .4 + + lda (ZPPtr1) + cmp #S.MITEM.T.SEP + beq .2 + + lda DY Y1 + sec + adc SYSFON.H + sta INE INE = Y2 + lda DY+1 + adc #0 + sta INE+1 + + >LDYAI DX X1,X2,Y1,Y2 + jsr MOU.InRectYA + bcc .3 + + ldy #S.MITEM.S + lda (ZPPtr1),y + bpl .2 + + eor #S.MITEM.S.SELECTED + sta (ZPPtr1),y + + jsr CB.GetBuf + bcs .9 + + jsr MENU.DrawMItem + +.2 jsr MENU.NextMItemDY + bra .1 + +.3 ldy #S.MITEM.S + lda (ZPPtr1),y + bmi .8 already selected, nothing to do + + eor #S.MITEM.S.SELECTED + sta (ZPPtr1),y + + jsr CB.GetBuf + bcs .9 + + jsr MENU.DrawMItem + + lda (ZPPtr1) + cmp #S.MITEM.T.SUBMENU + bne .1 + + >LDYA L.WND.Screen + jsr DrawCBBufToYA + +* jsr MENU.NewSubMenu +* bcs .9 + + bra .1 + +.4 >LDYA L.WND.Screen + jmp DrawCBBufToYA + + lda MSG+S.MSG.S + bit #S.MSG.S.CLK + beq .8 + + lda #S.MSG.T.ID + sta MSG+S.MSG.T + + ldy #S.MITEM.ID + lda (ZPPtr1),y + sta MSG+S.MSG.ID + + jmp MENU.DestroyAll + +.8 clc +.9 rts +*-------------------------------------- +MENU.NewSubMenu lda DX + clc + adc Counter W + sta DX + + lda DX+1 + adc Counter+1 + sta DX+1 + + ldy #S.MITEM.pMENU+1 + lda (ZPPtr1),y + >PUSHA + dey + lda (ZPPtr1),y + >PUSHA + + >PUSHW DX X1 + >PUSHW DY Y1 + + jsr MENU.New + bcs .9 + + pha hMENU + + jsr MENU.Draw + plx + bcs .9 + + txa + +.9 rts +*-------------------------------------- +* DrawMenu(hMENU) +*-------------------------------------- +MENU.Draw >SYSCALL2 GetMemPtr + >STYA ZPMENUPtr + + jsr MENU.Save + bcs .9 + + jsr CB.GetBuf + bcs .9 + + jsr MENU.DrawBorders + + jsr MENU.GetDXWIE + jsr MENU.GetDY + + jsr MENU.GetMItems + +.6 lda (ZPPtr1) + beq .8 + + jsr MENU.DrawMItem + jsr MENU.NextMItemDY + bra .6 + +.8 >LDYA L.WND.Screen + jmp DrawCBBufToYA + +.9 rts +*-------------------------------------- +MENU.DrawBorders lda #S.CB.CMD.HLINE jsr CB.InitCacheA @@ -452,7 +578,7 @@ MENU.ShowBorders lda CB.Cache+S.CB.Y1+1 sta CB.Cache+S.CB.Y2+1 top X1,Y1,X2,Y1 - jsr PutCBCache2CBBuf + jsr CB.Cache2CBBuf ldy #S.OBJ.Y2 lda (ZPMENUPtr),y @@ -463,7 +589,7 @@ MENU.ShowBorders sta CB.Cache+S.CB.Y1+1 sta CB.Cache+S.CB.Y2+1 bottom X1,Y2,X2,Y2 - jsr PutCBCache2CBBuf + jsr CB.Cache2CBBuf lda #S.CB.CMD.VLINE sta CB.Cache+S.CB.CMD @@ -480,7 +606,7 @@ MENU.ShowBorders lda CB.Cache+S.CB.X1+1 sta CB.Cache+S.CB.X2+1 left X1,Y1,X1,Y2 - jsr PutCBCache2CBBuf + jsr CB.Cache2CBBuf ldy #S.OBJ.X2 lda (ZPMENUPtr),y @@ -491,16 +617,11 @@ MENU.ShowBorders sta CB.Cache+S.CB.X1+1 sta CB.Cache+S.CB.X2+1 right X2,Y1,X2,Y2 - jmp PutCBCache2CBBuf + jmp CB.Cache2CBBuf *-------------------------------------- -MENU.ShowMItemByID - jsr MENU.FindMItemByID - jsr MENU.GetDX -*-------------------------------------- -MENU.ShowMItem ldy #S.MITEM.F - lda (ZPPtr1),y - cmp #S.MITEM.F.SEP - bne MENU.ShowMItem1 +MENU.DrawMItem lda (ZPPtr1) + cmp #S.MITEM.T.SEP + bne MENU.DrawMItem1 lda #S.CB.CMD.HLINE jsr CB.InitCacheA @@ -526,9 +647,9 @@ MENU.ShowMItem ldy #S.MITEM.F lda DX+1 adc Counter+1 sta CB.Cache+S.CB.X2+1 - jmp PutCBCache2CBBuf + jmp CB.Cache2CBBuf *-------------------------------------- -MENU.ShowMItem1 lda #S.CB.CMD.FILLRECT +MENU.DrawMItem1 lda #S.CB.CMD.FILLRECT jsr CB.InitCacheA lda #S.CB.OP.SET @@ -568,10 +689,11 @@ MENU.ShowMItem1 lda #S.CB.CMD.FILLRECT lda DY+1 adc #0 sta CB.Cache+S.CB.Y2+1 - jsr PutCBCache2CBBuf + jsr CB.Cache2CBBuf inc DY bne .12 + inc DY+1 .12 lda DX @@ -615,15 +737,14 @@ MENU.ShowMItem1 lda #S.CB.CMD.FILLRECT sta DX+1 jsr MENU.GetKeyString - beq .3 + bcs .3 jsr MENU.IsSelected ldx hSYSFON jsr DRAW.YATextAtDXDY -.3 ldy #S.MITEM.F - lda (ZPPtr1),y - cmp #S.MITEM.F.SUBMENU +.3 lda (ZPPtr1) + cmp #S.MITEM.T.SUBMENU bne .8 lda DX @@ -631,6 +752,7 @@ MENU.ShowMItem1 lda #S.CB.CMD.FILLRECT ldy #S.MENU.kW adc (ZPMENUPtr),y sta DX + lda DX+1 iny adc (ZPMENUPtr),y @@ -641,9 +763,11 @@ MENU.ShowMItem1 lda #S.CB.CMD.FILLRECT .8 lda DY bne .80 + dec DY+1 .80 dec DY + clc rts *-------------------------------------- @@ -671,39 +795,80 @@ MENU.GetIcon ldy #S.MITEM.pICON+1 MENU.IsSelected phy pha - ldy #S.MENU.Selected - lda (ZPMENUPtr),y - - ldy #S.MITEM.ID - cmp (ZPPtr1),y - beq .9 - - clc + ldy #S.MITEM.S + lda (ZPPtr1),y + asl .9 pla ply rts *-------------------------------------- -MENU.GetText lda #S.MITEM.TEXT - clc - adc ZPPtr1 - tay - lda ZPPtr1+1 - adc #0 +MENU.GetText ldy #S.MITEM.pTEXT + + lda (ZPPtr1),y + pha + iny + lda (ZPPtr1),y + ply rts *-------------------------------------- +* ZPPtr1 = pMITEM +*-------------------------------------- MENU.GetKeyString - ldy #S.MITEM.KEYSTR + ldy #S.MITEM.KEY lda (ZPPtr1),y - beq .8 + dey S.MITEM.KEYMOD + ora (ZPPtr1),y + beq .9 + ldx #0 + + lda (ZPPtr1),y + beq .3 + + bit #KEYMOD.CTRL + beq .1 + + ldy #KEYMOD.S.CTRL + jsr .4 + +.1 bit #KEYMOD.OA + beq .2 + + ldy #KEYMOD.S.OA + jsr .4 + +.2 bit #KEYMOD.CA + beq .3 + + ldy #KEYMOD.S.CA + jsr .4 + +.3 ldy #S.MITEM.KEY + lda (ZPPtr1),y + sta TEXTBUF,x + stz TEXTBUF+1,x + + >LDYA L.TEXTBUF clc - adc ZPPtr1 - tay - lda ZPPtr1+1 - adc #0 !0 + rts +*-------------------------------------- +.4 pha -.8 rts +.5 lda KEYMOD.S,y + sta TEXTBUF,x + beq .6 + + inx + iny + bra .5 + +.6 pla + + rts + +.9 sec + rts *-------------------------------------- MENU.Save lda #S.CB.CMD.GETRECTBUFSIZE jsr CB.InitCacheA @@ -718,7 +883,7 @@ MENU.Save lda #S.CB.CMD.GETRECTBUFSIZE cpx #8 X1,Y1,X2,Y2 bne .1 - jsr GFXWrite.CB + jsr CB.GFXWrite >SYSCALL2 NewStkObj bcs .9 @@ -745,7 +910,7 @@ MENU.Save lda #S.CB.CMD.GETRECTBUFSIZE cpx #4 W,H bne .2 - jsr GFXWrite.CB + jsr CB.GFXWrite clc @@ -755,15 +920,15 @@ MENU.DestroyAll sec .HS 90 BCC MENU.Destroy clc - ldx MENU.Stack.Top + ldx MENU.Stack.Cnt beq .8 php - bit CUR.bVisible + bit PTR.bVisible bpl .1 - jsr HideCursor.I + jsr PTR.Hide.I .1 jsr CB.ClearCache @@ -777,7 +942,7 @@ MENU.Destroy clc .2 php - ldx MENU.Stack.Top + ldx MENU.Stack.Cnt lda MENU.Stack-1,x >SYSCALL2 GetMemPtr >STYA ZPMENUPtr @@ -806,30 +971,30 @@ MENU.Destroy clc lda (ZPMENUPtr),y sta CB.Cache+S.CB.DstPtr - jsr GFXWrite.CB + jsr CB.GFXWrite lda CB.Cache+S.CB.DstPtr >SYSCALL2 FreeStkObj - ldx MENU.Stack.Top + ldx MENU.Stack.Cnt lda MENU.Stack-1,x >SYSCALL2 FreeMem plp - dec MENU.Stack.Top + dec MENU.Stack.Cnt bcc .7 bne .2 -.7 bit CUR.bVisible +.7 bit PTR.bVisible bpl .8 - jmp ShowCursor.I + jmp PTR.Show.I .8 clc rts *-------------------------------------- -MENU.GetDX ldy #S.OBJ.X1 +MENU.GetDXWIE ldy #S.OBJ.X1 lda (ZPMENUPtr),y clc adc #1 @@ -838,17 +1003,6 @@ MENU.GetDX ldy #S.OBJ.X1 lda (ZPMENUPtr),y adc #0 sta DX+1 - rts -*-------------------------------------- -MENU.GetDYW ldy #S.OBJ.Y1 - lda (ZPMENUPtr),y - clc - adc #1 - sta DY - iny - lda (ZPMENUPtr),y - adc #0 - sta DY+1 ldy #S.OBJ.W lda (ZPMENUPtr),y @@ -860,46 +1014,71 @@ MENU.GetDYW ldy #S.OBJ.Y1 sbc #0 sta Counter+1 + lda Counter W + clc + adc DX + sta IE IE = X2 + + lda Counter+1 + adc DX+1 + sta IE+1 + rts *-------------------------------------- -MENU.FindMItemByID - jsr MENU.GetMItems - jsr MENU.GetDYW +MENU.GetDY ldy #S.OBJ.Y1 + lda (ZPMENUPtr),y + clc + adc #1 + sta DY + iny + lda (ZPMENUPtr),y + adc #0 + sta DY+1 + rts +*-------------------------------------- +MENU.FindSelected + >LDYA ZPPtr1 + >STYA D + + jsr MENU.GetMItems + .1 lda (ZPPtr1) beq .9 - ldy #S.MITEM.F + cmp #S.MITEM.T.SEP + beq .2 + + ldy #S.MITEM.S lda (ZPPtr1),y - cmp #S.MITEM.F.SEP - beq .7 + bmi .8 - txa - ldy #S.MITEM.ID - cmp (ZPPtr1),y - beq .8 - -.7 jsr MENU.NextMItem +.2 jsr MENU.NextMItem bra .1 .8 clc rts - -.9 sec - rts + +.9 >LDYA D + >STYA ZPPtr1 + + sec + rts *-------------------------------------- -MENU.GetMItems ldy #S.MENU.MITEMS - lda (ZPMENUPtr),y +MENU.GetMItems lda ZPMENUPtr + clc + adc #S.MENU.Items sta ZPPtr1 - iny - lda (ZPMENUPtr),y + + lda ZPMENUPtr+1 + adc /S.MENU.Items sta ZPPtr1+1 rts *-------------------------------------- -MENU.NextMItem ldy #S.MITEM.F - lda (ZPPtr1),y +MENU.NextMItemDY + lda (ZPPtr1) sec - eor #S.MITEM.F.SEP + eor #S.MITEM.T.SEP beq .1 lda SYSFON.Hp2 @@ -907,18 +1086,12 @@ MENU.NextMItem ldy #S.MITEM.F .1 adc DY sta DY - bcc .2 + bcc MENU.NextMItem inc DY+1 -.2 lda (ZPPtr1) - clc - adc ZPPtr1 - sta ZPPtr1 - bcc .8 - inc ZPPtr1+1 - -.8 rts +MENU.NextMItem lda #S.MITEM + jmp SkipAPtr1 *-------------------------------------- MAN SAVE usr/src/lib/libgui.s.menu diff --git a/LIB/LIBGUI.S.MOU.txt b/LIB/LIBGUI.S.MOU.txt index 10357a66..efb2b6d9 100644 --- a/LIB/LIBGUI.S.MOU.txt +++ b/LIB/LIBGUI.S.MOU.txt @@ -22,19 +22,19 @@ MOU.Init >PUSHW L.DEVNAME.MOUSE MOU.Setup lda DCB.GFX+S.DCB.GFX.W+1 sta MouseClamp+3 lsr - sta CUR.Pos+S.POINT.X+1 + sta PTR.Pos+S.POINT.X+1 lda DCB.GFX+S.DCB.GFX.W sta MouseClamp+2 ror - sta CUR.Pos+S.POINT.X + sta PTR.Pos+S.POINT.X lda DCB.GFX+S.DCB.GFX.H+1 sta MouseClamp+7 lsr - sta CUR.Pos+S.POINT.Y+1 + sta PTR.Pos+S.POINT.Y+1 lda DCB.GFX+S.DCB.GFX.H sta MouseClamp+6 ror - sta CUR.Pos+S.POINT.Y + sta PTR.Pos+S.POINT.Y >PUSHB hDevMouse >PUSHBI IOCTL.CONTROL @@ -42,7 +42,7 @@ MOU.Setup lda DCB.GFX+S.DCB.GFX.W+1 >SYSCALL2 IOCTL bcs .9 - >LDYA L.CUR.SaveBuf + >LDYA L.PTR.SaveBuf >STYA CB.PTR+S.CB.DstPtr * clc @@ -88,11 +88,13 @@ MOU.ReadMouse >PULLW ZPPtr1 pS.XY .99 rts *-------------------------------------- MOU.CheckOverMenu -.1 ldx MENU.Stack.Top +.1 ldx MENU.Stack.Cnt beq .9 lda MENU.Stack-1,x +.2 phx + >SYSCALL2 GetMemPtr >STYA ZPMENUPtr pha @@ -103,28 +105,32 @@ MOU.CheckOverMenu pla adc /S.OBJ.X1 jsr MOU.InRectYA - bcs .2 + bcc .3 - jsr MENU.Enter - clc + plx + + dex + bne .2 + +.9 sec rts -.2 lda ZPMENUPtr - clc - adc #S.MENU.pX1 - tay - lda ZPMENUPtr+1 - adc /S.MENU.pX1 +.3 plx + cpx MENU.Stack.Cnt + beq .7 - jsr MOU.InRectYA - bcc .8 +* TODO:destroy from TOP to current, then enter current + inx + phx + jsr MENU.Destroy + bra .3 - bra .1 +.7 jmp MENU.Enter -.9 sec -.8 rts +.8 clc + rts *-------------------------------------- MOU.CheckOverSysBut >LDYA L.RECT.SysBut @@ -208,14 +214,14 @@ MOU.CheckOverWND -.5 lda #CUR.T.ARROW - jsr SetCursor +.5 lda #PTR.T.ARROW + jsr PTR.Set clc rts -.6 lda #CUR.T.WAIT - jsr SetCursor +.6 lda #PTR.T.WAIT + jsr PTR.Set clc rts @@ -225,8 +231,8 @@ MOU.CheckOverWND dex bne .1 - lda #CUR.T.ARROW - jsr SetCursor + lda #PTR.T.ARROW + jsr PTR.Set .9 sec .99 rts @@ -247,7 +253,7 @@ MOU.ChkWNDBorders eor MSG+S.MSG.X1+1 bne .1 - lda #CUR.T.RESIZEX + lda #PTR.T.RESIZEX sta IY .1 ldy #S.OBJ.Y1 @@ -266,10 +272,10 @@ MOU.ChkWNDBorders lda IY beq .2 - lda #CUR.T.RESIZEXY1 - jmp SetCursor + lda #PTR.T.RESIZEXY1 + jmp PTR.Set -.2 lda #CUR.T.RESIZEY +.2 lda #PTR.T.RESIZEY sta IY .3 ldy #S.OBJ.X2 @@ -288,10 +294,10 @@ MOU.ChkWNDBorders lda IY beq .4 - lda #CUR.T.RESIZEXY2 - jmp SetCursor + lda #PTR.T.RESIZEXY2 + jmp PTR.Set -.4 lda #CUR.T.RESIZEX +.4 lda #PTR.T.RESIZEX sta IY .5 ldy #S.OBJ.Y2 @@ -307,8 +313,8 @@ MOU.ChkWNDBorders eor MSG+S.MSG.Y2+1 bne .7 - lda #CUR.T.RESIZEXY1 -.6 jmp SetCursor + lda #PTR.T.RESIZEXY1 +.6 jmp PTR.Set .7 lda IY bne .6 diff --git a/LIB/LIBGUI.S.MSG.txt b/LIB/LIBGUI.S.MSG.txt index 533903f5..a4d1660b 100644 --- a/LIB/LIBGUI.S.MSG.txt +++ b/LIB/LIBGUI.S.MSG.txt @@ -35,7 +35,7 @@ MSG.Get stz MSG+S.MSG.T beq .2 >PUSHW L.XY - jsr SetCursorPos + jsr PTR.SetPos lda XY+S.XY.S diff --git a/LIB/LIBGUI.S.OBJ.txt b/LIB/LIBGUI.S.OBJ.txt index 8407f4f1..0feb6b02 100644 --- a/LIB/LIBGUI.S.OBJ.txt +++ b/LIB/LIBGUI.S.OBJ.txt @@ -1,7 +1,78 @@ NEW AUTO 3,1 *-------------------------------------- -OBJ.New +* A = Object Class +*-------------------------------------- +OBJ.New pha + tax + ldy OBJ.SizeOf,x + lda #0 + + >SYSCALL GetMem + bcs .9 + + >STYA ZPObjPtr + + pla + sta (ZPObjPtr) + + phx hObj + + tax + ldy OBJ.SizeOf,x + dey + lda #0 + +.1 sta (ZPObjPtr),y + dey + bne .1 + + >LDYA ZPObjPtr +* clc + +.9 plx + rts +*-------------------------------------- +OBJ.Init sta (ZPObjPtr) + + lda #0 + +.1 sta (ZPObjPtr),y + dey + bne .1 + + rts +*-------------------------------------- +OBJ.AddWord pha + + tya + jsr OBJ.AddByte + pla + +OBJ.AddByte sta (ZPObjPtr) + inc ZPObjPtr + bne .8 + + inc ZPObjPtr+1 + +.8 rts +*-------------------------------------- +OBJ.PullY1X1.BAD + + >PULLA + ldy #S.OBJ.Y1 + sta (ZPMENUPtr),y + >PULLA + iny + sta (ZPMENUPtr),y + + >PULLA + ldy #S.OBJ.X1 + sta (ZPMENUPtr),y + >PULLA + iny + sta (ZPMENUPtr),y + rts *-------------------------------------- * hOBJ, Prop8, Value16 *-------------------------------------- @@ -52,6 +123,69 @@ OBJ.GetProp >PULLA rts *-------------------------------------- +OBJ.SetX2Y2 >STYA ZPPtr1 + + ldy #S.OBJ.W + lda (ZPPtr1),y + clc + sbc #0 + pha + iny + lda (ZPPtr1),y + sbc #0 + tax + + pla + clc + ldy #S.OBJ.X1 + adc (ZPPtr1),y + pha + txa + iny + adc (ZPPtr1),y + ldy #S.OBJ.X2+1 + sta (ZPPtr1),y + dey + pla + sta (ZPPtr1),y + + ldy #S.OBJ.H + lda (ZPPtr1),y + clc + sbc #0 + pha + iny + lda (ZPPtr1),y + sbc #0 + tax + + pla + clc + ldy #S.OBJ.Y1 + adc (ZPPtr1),y + pha + txa + iny + adc (ZPPtr1),y + ldy #S.OBJ.Y2+1 + sta (ZPPtr1),y + dey + pla + sta (ZPPtr1),y + + rts +*-------------------------------------- +OBJ.GetInCache >STYA .1+1 + + ldx #S.OBJ-1 + +.1 lda $ffff,x SELF MODIFIED + sta OBJ.Cache,x + dex + bpl .1 + + rts +*-------------------------------------- MAN SAVE usr/src/lib/libgui.s.obj LOAD usr/src/lib/libgui.s diff --git a/LIB/LIBGUI.S.PTR.txt b/LIB/LIBGUI.S.PTR.txt new file mode 100644 index 00000000..b7a44c46 --- /dev/null +++ b/LIB/LIBGUI.S.PTR.txt @@ -0,0 +1,161 @@ +NEW + AUTO 3,1 +*-------------------------------------- +PTR.Update lda PTR.T + cmp #PTR.T.WAIT + bcc PTR.Set.RTS + + inc + inc + cmp #PTR.T.WAIT+12 + bne PTR.Set + + lda #PTR.T.WAIT +*-------------------------------------- +* Set X2,Y2,SrcPtr +*-------------------------------------- +PTR.Set sta PTR.T + + lda PTR.bVisible + bpl .1 + + jsr PTR.Hide.I + +.1 ldx PTR.T + lda L.Cursors,x + sta CB.PTR+S.CB.SrcPtr + sta ZPPtr1 + lda L.Cursors+1,x + sta CB.PTR+S.CB.SrcPtr+1 + sta ZPPtr1+1 + + ldy #S.BM.W + lda (ZPPtr1),y + sta CB.PTR+S.CB.SrcW + + clc + adc CB.PTR+S.CB.X1 + pha + + iny + lda (ZPPtr1),y + sta CB.PTR+S.CB.SrcW+1 + adc CB.PTR+S.CB.X1+1 + tax + pla + bne .2 + + dex + +.2 dec + sta CB.PTR+S.CB.X2 + stx CB.PTR+S.CB.X2+1 + + iny S.BM.H + lda (ZPPtr1),y + sta CB.PTR+S.CB.SrcH + + clc + adc CB.PTR+S.CB.Y1 + pha + + iny + lda (ZPPtr1),y + sta CB.PTR+S.CB.SrcH+1 + adc CB.PTR+S.CB.Y1+1 + tax + pla + bne .3 + + dex + +.3 dec + sta CB.PTR+S.CB.Y2 + stx CB.PTR+S.CB.Y2+1 + + lda PTR.bVisible + bmi PTR.Show.I + +PTR.Set.RTS rts +*-------------------------------------- +* Set DestX,DestY +*-------------------------------------- +PTR.SetPos >PULLW ZPPtr1 + lda PTR.bVisible + bpl .1 + + jsr PTR.Hide.I + +.1 ldy #S.POINT-1 + +.2 lda (ZPPtr1),y + sta PTR.Pos,y + dey + bpl .2 + + lda PTR.bVisible + bmi PTR.Show.I + + clc + rts +*-------------------------------------- +PTR.Hide lda PTR.bVisible + bpl .9 + + jsr PTR.Hide.I + stz PTR.bVisible + +.9 clc + rts +*-------------------------------------- +PTR.Show lda PTR.bVisible + bmi .9 + + jsr PTR.Show.I + dec PTR.bVisible + +.9 rts +*-------------------------------------- +PTR.Hide.I lda #S.CB.OP.RESTORE + bra PTR.Draw.I +*-------------------------------------- +PTR.Show.I ldx PTR.T + lda PTR.Pos+S.POINT.X + sec + sbc PTR.HotPoints,x + sta CB.PTR+S.CB.X1 + + lda PTR.Pos+S.POINT.X+1 + sbc #0 + sta CB.PTR+S.CB.X1+1 + + lda PTR.Pos+S.POINT.Y + sec + sbc PTR.HotPoints+1,x + sta CB.PTR+S.CB.Y1 + + lda PTR.Pos+S.POINT.Y+1 + sbc #0 + sta CB.PTR+S.CB.Y1+1 + + lda #S.CB.OP.ORA+S.CB.OP.MASK+S.CB.OP.SAVE + +PTR.Draw.I sta CB.PTR+S.CB.OP + + >LDYA L.WND.Screen + jsr OBJ.GetInCache + + >LDYA L.CB.PTR + jsr CLIP.YA + bcs .8 + + jsr CB.GFXWrite + +.8 clc + + rts +*-------------------------------------- +MAN +SAVE usr/src/lib/libgui.s.ptr +LOAD usr/src/lib/libgui.s +ASM diff --git a/LIB/LIBGUI.S.SYSBAR.txt b/LIB/LIBGUI.S.SYSBAR.txt index e2fe882e..fb01e070 100644 --- a/LIB/LIBGUI.S.SYSBAR.txt +++ b/LIB/LIBGUI.S.SYSBAR.txt @@ -4,39 +4,24 @@ NEW SYSBUT.Enter sec ror WND.SYSBAR.bSysBut - jsr GetCBBuf - bcs .99 + jsr CB.GetBuf + bcs .9 jsr SYSBAR.ShowSysBut >LDYA L.WND.SysBar jsr DrawCBBufToYA + >PUSHW L.MENU.Sys >PUSHW WND.SysBar+S.OBJ.X1 >PUSHW WND.SysBar+S.OBJ.Y1 - >PUSHW L.RECT.SysBut Parent RECT - >PUSHW L.MENU.Sys jsr MENU.New -.99 bcs .9 + bcs .9 sta hSysMenu - >PUSHA hSysMenu - >PUSHBI 4 - >PUSHBI S.MITEM.pMENU - >PUSHW L.MENU.Sys.Programs - jsr MENU.SetMItemProp + jmp MENU.Draw - >PUSHB hSysMenu - >PUSHBI 6 - >PUSHBI S.MITEM.pMENU - >PUSHW L.MENU.Sys.Settings - jsr MENU.SetMItemProp - - lda hSysMenu - jsr MENU.Show - -.8 clc .9 rts *-------------------------------------- SYSBUT.Leave bit WND.SYSBAR.bSysBut @@ -44,7 +29,7 @@ SYSBUT.Leave bit WND.SYSBAR.bSysBut stz WND.SYSBAR.bSysBut - jsr GetCBBuf + jsr CB.GetBuf bcs .9 jsr SYSBAR.ShowSysBut @@ -56,7 +41,7 @@ SYSBUT.Leave bit WND.SYSBAR.bSysBut .8 clc .9 rts *-------------------------------------- -SYSBAR.Show jsr GetCBBuf +SYSBAR.Show jsr CB.GetBuf bcs .9 jsr SYSBAR.ShowSysBut @@ -96,7 +81,7 @@ SYSBAR.ShowSysBut dex bpl .2 - jsr PutCBCache2CBBuf + jsr CB.Cache2CBBuf lda RECT.SysBut+S.RECT.X1 clc @@ -157,7 +142,7 @@ SYSBAR.ShowSysWNDs dex bpl .1 - jmp PutCBCache2CBBuf + jmp CB.Cache2CBBuf *-------------------------------------- SYSBAR.ShowSysClk lda #S.CB.CMD.FILLRECT @@ -179,7 +164,7 @@ SYSBAR.ShowSysClk dex bpl .1 - jmp PutCBCache2CBBuf + jmp CB.Cache2CBBuf *-------------------------------------- MAN SAVE usr/src/lib/libgui.s.sysbar diff --git a/LIB/LIBGUI.S.WND.txt b/LIB/LIBGUI.S.WND.txt index c382f7a4..e639b625 100644 --- a/LIB/LIBGUI.S.WND.txt +++ b/LIB/LIBGUI.S.WND.txt @@ -22,7 +22,7 @@ WND.Init >PUSHW L.DEVNAME.GFX *-------------------------------------- WND.Setup * stz WND.Stack.Top -* stz MENU.Stack.Top +* stz MENU.Stack.Cnt >LDYA DCB.GFX+S.DCB.GFX.W >STYA WND.Screen+S.OBJ.W @@ -116,13 +116,7 @@ WND.Quit.RTS rts *-------------------------------------- * F8, X116, Y116, W16, H16 *-------------------------------------- -WND.New >LDYAI S.WND - >SYSCALL2 getmem - bcs .9 - - >STYA ZPWNDPtr - - ldy WND.Stack.Top +WND.New ldy WND.Stack.Top cpy #WND.MAX bcc .10 @@ -133,14 +127,10 @@ WND.New >LDYAI S.WND rts .10 lda #S.OBJ.T.WND - sta (ZPWNDPtr) S.OBJ.T + jsr OBJ.New + bcs .9 - ldy #S.WND-1 - lda #0 - -.1 sta (ZPWNDPtr),y - dey - bne .1 + >STYA ZPWNDPtr ldy #S.WND.fPaint lda L.WND.fPaint @@ -259,7 +249,7 @@ WND.Show sta WND.hWND lda #S.WND.S.ACTIVE jsr WND.ClrStatus - jsr GetCBBuf + jsr CB.GetBuf bcs WND.Activate.RTS jsr WND.PaintTopBar @@ -274,7 +264,7 @@ WND.Show1 lda WND.hWND jsr OBJ.SetX2Y2 -WND.Show2 jsr GetCBBuf +WND.Show2 jsr CB.GetBuf bcs WND.Activate.RTS lda #S.WND.S.ACTIVE @@ -303,7 +293,7 @@ WND.Show2 jsr GetCBBuf lda #1 jsr WND.ShowBorders -.1 ldy #S.WND.TITLE+1 +.1 ldy #S.WND.pTITLE+1 lda (ZPWNDPtr),y bne .2 @@ -333,7 +323,7 @@ WND.Show2 jsr GetCBBuf jsr WND.PaintTopBar bcs .9 *-------------------------------------- -.3 ldy #S.WND.MBAR+1 +.3 ldy #S.WND.pMBAR+1 lda (ZPWNDPtr),y beq .7 @@ -360,9 +350,9 @@ WND.Show2 jsr GetCBBuf lda #S.WND.S.HASMBAR jsr WND.SetStatus - jsr WND.PaintMBar + jsr MBAR.Paint *-------------------------------------- -.7 ldy #S.WND.STATUS+1 +.7 ldy #S.WND.pSTATUS+1 lda (ZPWNDPtr),y beq .8 @@ -432,7 +422,7 @@ WND.Paint1 ldy #S.WND.fPaint WND.fPaint >SYSCALL2 GetMemPtr >STYA ZPWNDPtr - jsr GetCBBuf + jsr CB.GetBuf bcs WND.Show.RTS lda #S.CB.CMD.FILLRECT @@ -482,7 +472,7 @@ WND.fPaint >SYSCALL2 GetMemPtr sbc #0 sta CB.Cache+S.CB.Y2+1 - jsr PutCBCache2CBBuf + jsr CB.Cache2CBBuf ldy #S.WND.BGBM lda (ZPWNDPtr),y @@ -512,7 +502,7 @@ WND.fPaint >SYSCALL2 GetMemPtr lda #S.CB.CMD.BITBLT sta CB.Cache+S.CB.CMD - jsr PutCBCache2CBBuf + jsr CB.Cache2CBBuf .8 >LDYA L.WND.Desktop jmp DrawCBBufToYA @@ -564,7 +554,7 @@ WND.ShowBorders sta IY adc #0 sta CB.Cache+S.CB.X2+1 - jsr PutCBCache2CBBuf + jsr CB.Cache2CBBuf ldy #S.OBJ.Y2 lda (ZPWNDPtr),y @@ -578,7 +568,7 @@ WND.ShowBorders sta IY sta CB.Cache+S.CB.Y1+1 sta CB.Cache+S.CB.Y2+1 bottom X1-1,Y2+1,X2+1,Y2+1 - jsr PutCBCache2CBBuf + jsr CB.Cache2CBBuf lda #S.CB.CMD.VLINE sta CB.Cache+S.CB.CMD @@ -598,7 +588,7 @@ WND.ShowBorders sta IY lda CB.Cache+S.CB.X1+1 sta CB.Cache+S.CB.X2+1 left X1-1,Y1-1,X1-1,Y2+1 - jsr PutCBCache2CBBuf + jsr CB.Cache2CBBuf ldy #S.OBJ.X2 lda (ZPWNDPtr),y @@ -612,7 +602,7 @@ WND.ShowBorders sta IY sta CB.Cache+S.CB.X1+1 sta CB.Cache+S.CB.X2+1 right X2+1,Y1-1,X2+1,Y2+1 - jmp PutCBCache2CBBuf + jmp CB.Cache2CBBuf *-------------------------------------- WND.PaintTopBar lda #S.CB.CMD.FILLRECT jsr CB.InitCacheA @@ -656,7 +646,7 @@ WND.PaintTopBar lda #S.CB.CMD.FILLRECT sta DY+1 adc #0 sta CB.Cache+S.CB.Y2+1 - jsr PutCBCache2CBBuf + jsr CB.Cache2CBBuf inc DY bne .12 @@ -737,7 +727,7 @@ WND.PaintTopBar lda #S.CB.CMD.FILLRECT .9 rts *-------------------------------------- WND.PaintTopBarTitle - ldy #S.WND.TITLE + ldy #S.WND.pTITLE lda (ZPWNDPtr),y pha iny @@ -774,7 +764,7 @@ WND.PaintTopBarTitle adc DX+1 sta DX+1 - ldy #S.WND.TITLE + ldy #S.WND.pTITLE lda (ZPWNDPtr),y pha iny @@ -785,124 +775,6 @@ WND.PaintTopBarTitle clc jmp DRAW.YATextAtDXDY *-------------------------------------- -WND.PaintMBar lda #S.CB.CMD.FILLRECT - jsr CB.InitCacheA - - lda #S.CB.OP.SET - sta CB.Cache+S.CB.OP - - lda #S.CB.M.MONO - sta CB.Cache+S.CB.M - - lda PREFS.MBARCOLOR - sta CB.Cache+S.CB.COLOR - - ldy #S.OBJ.X1 - lda (ZPWNDPtr),y - sta CB.Cache+S.CB.X1 - - iny - lda (ZPWNDPtr),y - sta CB.Cache+S.CB.X1+1 - - ldy #S.OBJ.X2 - lda (ZPWNDPtr),y - sta CB.Cache+S.CB.X2 - - iny - lda (ZPWNDPtr),y - sta CB.Cache+S.CB.X2+1 - - ldy #S.WND.MBarY1 - lda (ZPWNDPtr),y - sta CB.Cache+S.CB.Y1 - - iny - lda (ZPWNDPtr),y - sta CB.Cache+S.CB.Y1+1 - - iny #S.WND.MBarY2 - lda (ZPWNDPtr),y - sta CB.Cache+S.CB.Y2 - - iny - lda (ZPWNDPtr),y - sta CB.Cache+S.CB.Y2+1 - - jsr PutCBCache2CBBuf - - ldy #S.WND.MBAR - lda (ZPWNDPtr),y - pha - iny - lda (ZPWNDPtr),y - ply - - jsr MBAR.Init - -.1 lda (ZPMENUPtr) - beq .8 - - jsr CB.ClearCache - - lda #S.CB.CMD.DRAWTEXT2 - sta CB.CACHE+S.CB.CMD - - lda #S.CB.OP.SET+S.CB.OP.INVERSE - sta CB.Cache+S.CB.OP - - lda #S.CB.M.MONO - sta CB.Cache+S.CB.M - - lda hSYSFON - sta CB.CACHE+S.CB.hFont - - ldy #S.MBITEM.XT - lda (ZPMENUPtr),y - clc - ldy #S.OBJ.X1 - adc (ZPWNDPtr),y - sta CB.CACHE+S.CB.X1 - - ldy #S.MBITEM.XT+1 - lda (ZPMENUPtr),y - ldy #S.OBJ.X1+1 - adc (ZPWNDPtr),y - sta CB.CACHE+S.CB.X1+1 - - ldy #S.WND.MBarY1 - lda (ZPWNDPtr),y - clc - adc #1 - sta CB.CACHE+S.CB.Y1 - iny - lda (ZPWNDPtr),y - adc #0 - sta CB.CACHE+S.CB.Y1+1 - - lda #S.MBITEM.TEXT - clc - adc ZPMENUPtr - sta CB.CACHE+S.CB.TxtPtr - - lda #0 - adc ZPMENUPtr+1 - sta CB.CACHE+S.CB.TxtPtr+1 - - jsr PutCBCache2CBBuf - - lda (ZPMENUPtr) - clc - adc ZPMENUPtr - sta ZPMENUPtr - bcc .1 - inc ZPMENUPtr+1 - bra .1 - -.8 clc - - rts -*-------------------------------------- WND.PaintSBar lda #S.CB.CMD.HLINE jsr CB.InitCacheA @@ -942,7 +814,7 @@ WND.PaintSBar lda #S.CB.CMD.HLINE lda (ZPWNDPtr),y sta CB.Cache+S.CB.X2+1 - jsr PutCBCache2CBBuf + jsr CB.Cache2CBBuf lda #S.CB.CMD.FILLRECT sta CB.Cache+S.CB.CMD @@ -964,9 +836,9 @@ WND.PaintSBar lda #S.CB.CMD.HLINE lda (ZPWNDPtr),y sta CB.Cache+S.CB.Y2+1 - jsr PutCBCache2CBBuf + jsr CB.Cache2CBBuf - ldy #S.WND.STATUS + ldy #S.WND.pSTATUS lda (ZPWNDPtr),y pha iny @@ -977,6 +849,18 @@ WND.PaintSBar lda #S.CB.CMD.HLINE clc jmp DRAW.YATextAtDXDY *-------------------------------------- +WND.SetMBar >PULLW ZPPtr1 + + >PULLA + >SYSCALL2 GetMemPtr + >STYA ZPWNDPtr + + + + + +.9 rts +*-------------------------------------- WND.ClrStatus ldy #S.OBJ.S eor #$ff and (ZPWNDPtr),y diff --git a/LIB/LIBGUI.S.txt b/LIB/LIBGUI.S.txt index 956744a0..ef686f26 100644 --- a/LIB/LIBGUI.S.txt +++ b/LIB/LIBGUI.S.txt @@ -121,20 +121,22 @@ CS.START cld *-------------------------------------- .1 .DA LIB.LOAD .DA LIB.UNLOAD - .DA SetCursor - .DA SetCursorPos - .DA HideCursor - .DA ShowCursor - .DA UpdateCursor + .DA PTR.Set + .DA PTR.SetPos + .DA PTR.Hide + .DA PTR.Show + .DA PTR.Update .DA MOU.ReadMouse - .DA DrawLine + .DA DRAW.Line .DA OBJ.SetProp .DA OBJ.GetProp .DA WND.New .DA WND.Destroy .DA WND.Show .DA WND.Paint + .DA WND.SetMBar .DA MSG.Get + .DA MBAR.New *-------------------------------------- L.WND.fPaint .DA WND.fPaint *-------------------------------------- @@ -161,6 +163,7 @@ L.RECT.SysClk .DA RECT.SysClk L.MENU.Sys .DA MENU.Sys L.MENU.Sys.Programs .DA MENU.Sys.Programs L.MENU.Sys.Settings .DA MENU.Sys.Settings +L.TEXTBUF .DA TEXTBUF *-------------------------------------- L.BMs .EQ *-2 L.BM.Apple .DA BM.Apple @@ -172,21 +175,22 @@ L.BM.Right .DA BM.Right L.BM.Up .DA BM.Up L.BM.Down .DA BM.Down *-------------------------------------- -L.CUR.SaveBuf .DA CUR.SaveBuf -L.Cursors .DA CUR.Arrow - .DA CUR.Move - .DA CUR.ResizeX - .DA CUR.ResizeY - .DA CUR.ResizeXY1 - .DA CUR.ResizeXY2 - .DA CUR.Cross - .DA CUR.Text - .DA CUR.Wait1 - .DA CUR.Wait2 - .DA CUR.Wait3 - .DA CUR.Wait4 - .DA CUR.Wait5 - .DA CUR.Wait6 +L.PTR.SaveBuf .DA PTR.SaveBuf +L.Cursors .DA PTR.Arrow + .DA PTR.Move + .DA PTR.ResizeX + .DA PTR.ResizeY + .DA PTR.ResizeXY1 + .DA PTR.ResizeXY2 + .DA PTR.Cross + .DA PTR.Text + .DA PTR.Wait1 + .DA PTR.Wait2 + .DA PTR.Wait3 + .DA PTR.Wait4 + .DA PTR.Wait5 + .DA PTR.Wait6 +*-------------------------------------- J.Clip .DA CLIP.Point SETPIXEL .DA CLIP.Point GETPIXEL .DA CLIP.HLine HLINE @@ -219,9 +223,9 @@ LIB.LOAD lda LibCount .1 jsr WND.Setup - lda #CUR.T.ARROW - jsr SetCursor - jsr ShowCursor + lda #PTR.T.ARROW + jsr PTR.Set + jsr PTR.Show inc LibCount @@ -257,7 +261,7 @@ CB.GetInCache >STYA .1+1 rts *-------------------------------------- -GetCBBuf clc +CB.GetBuf clc ldx hCBBuf bne .9 @@ -272,7 +276,7 @@ GetCBBuf clc .9 rts *-------------------------------------- -PutCBCache2CBBuf +CB.Cache2CBBuf lda CB.Cache lsr tax @@ -293,74 +297,36 @@ PutCBCache2CBBuf rts *-------------------------------------- -GFXWrite.CB >PUSHB WND.Screen+S.OBJ.hPARENT +CB.GFXWrite >PUSHB WND.Screen+S.OBJ.hPARENT >PUSHBI IOCTL.WRITE >PUSHW L.CB.Cache >SYSCALL2 IOCTL rts *-------------------------------------- -OBJ.GetInCache >STYA .1+1 - - ldx #S.OBJ-1 - -.1 lda $ffff,x SELF MODIFIED - sta OBJ.Cache,x - dex - bpl .1 - - rts +SkipAPtr1 clc + adc ZPPtr1 + sta ZPPtr1 + bcc .8 + + inc ZPPtr1+1 + +.8 rts *-------------------------------------- -OBJ.SetX2Y2 >STYA ZPPtr1 +SkipStrZPtr1 ldy #$ff - ldy #S.OBJ.W +.1 iny lda (ZPPtr1),y - clc - sbc #0 - pha - iny - lda (ZPPtr1),y - sbc #0 - tax - - pla - clc - ldy #S.OBJ.X1 - adc (ZPPtr1),y - pha - txa - iny - adc (ZPPtr1),y - ldy #S.OBJ.X2+1 - sta (ZPPtr1),y - dey - pla - sta (ZPPtr1),y - - ldy #S.OBJ.H - lda (ZPPtr1),y - clc - sbc #0 - pha - iny - lda (ZPPtr1),y - sbc #0 - tax - - pla - clc - ldy #S.OBJ.Y1 - adc (ZPPtr1),y - pha - txa - iny - adc (ZPPtr1),y - ldy #S.OBJ.Y2+1 - sta (ZPPtr1),y - dey - pla - sta (ZPPtr1),y - - rts + bne .1 + + tya + sec \0 + adc ZPPtr1 + sta ZPPtr1 + bcc .8 + + inc ZPPtr1+1 + +.8 rts *-------------------------------------- .INB usr/src/lib/libgui.s.bm .INB usr/src/lib/libgui.s.but @@ -374,6 +340,7 @@ OBJ.SetX2Y2 >STYA ZPPtr1 .INB usr/src/lib/libgui.s.msg .INB usr/src/lib/libgui.s.obj .INB usr/src/lib/libgui.s.pat + .INB usr/src/lib/libgui.s.ptr .INB usr/src/lib/libgui.s.sysbar .INB usr/src/lib/libgui.s.text .INB usr/src/lib/libgui.s.wnd @@ -383,6 +350,7 @@ CS.END .INB usr/src/lib/libgui.g.bm .INB usr/src/lib/libgui.g.cur .INB usr/src/lib/libgui.g.fon + .INB usr/src/lib/libgui.g.ptr *-------------------------------------- DEVNAME.GFX .AZ "/dev/gfx" DEVNAME.MOUSE .AZ "/dev/mou1" @@ -393,6 +361,8 @@ SYSX7B .AZ "${ROOT}sbin/sysx7b" LibCount .BS 1 hDevMouse .BS 1 *-------------------------------------- +OBJ.SizeOf .DA S.WND +*-------------------------------------- CB.CmdLen .DA #S.CB.Y1+1 SETPIXEL .DA #S.CB.Y1+1 GETPIXEL .DA #S.CB.Y2+1 HLINE @@ -428,7 +398,7 @@ CB.PTR .DA #S.CB.CMD.BITBLT CB.Cache .BS S.CB OBJ.Cache .BS S.OBJ *-------------------------------------- -MENU.Stack.Top .BS 1 +MENU.Stack.Cnt .BS 1 MENU.Stack .BS MENU.MAX *-------------------------------------- WND.hWND .BS 1 @@ -455,110 +425,79 @@ RECT.SysWNDs .BS S.RECT RECT.SysClk .BS S.RECT *-------------------------------------- hSysMenu .BS 1 -MENU.Sys -.1 .DA #.2-* next - .DA #S.MITEM.F.ITEM F - .DA #0 S +*-------------------------------------- +MENU.Sys .DA #S.MITEM.T.ITEM .DA #2 ID + .DA #KEYMOD.CTRL+KEYMOD.OA+KEYMOD.CA,#'A' .DA BM.ID.APPLE pICON - .DA #S.MITEM.KEYMOD.CTRL+S.MITEM.KEYMOD.OA+S.MITEM.KEYMOD.CA - .DA #'A' - .DA #.11-.1 .AZ "About..." -.11 .AS "Ctrl-" - .DA #1,#'-',#2,#'-',#'A',#0 -.2 .DA #.3-* next - .DA #S.MITEM.F.SEP + .DA #S.MITEM.T.SEP -.3 .DA #.4-* next - .DA #S.MITEM.F.SUBMENU F - .DA #0 S - .DA #4 ID + .DA #S.MITEM.T.SUBMENU + .DA MENU.Sys.Programs .DA 0 pICON - .DA 0 pMENU - .DA #0 KEYSTR .AZ "Programs" -.4 .DA #.5-* next - .DA #S.MITEM.F.SUBMENU F - .DA #0 S - .DA #6 ID + .DA #S.MITEM.T.SUBMENU + .DA MENU.Sys.Settings .DA 0 pICON - .DA 0 pMENU - .DA #0 KEYSTR .AZ "Settings" -.5 .DA #.6-* next - .DA #S.MITEM.F.SEP + .DA #S.MITEM.T.SEP -.6 .DA #.7-* next - .DA #S.MITEM.F.ITEM F - .DA #0 S + .DA #S.MITEM.T.ITEM .DA #8 ID + .DA #0,#0 .DA 0 pICON - .DA #0 - .DA #0 - .DA #0 KEYSTR .AZ "Search..." -.7 .DA #.8-* next - .DA #S.MITEM.F.ITEM F - .DA #0 S + .DA #S.MITEM.T.ITEM .DA #10 ID + .DA #KEYMOD.CTRL+KEYMOD.OA,#'R' .DA 0 pICON - .DA #S.MITEM.KEYMOD.CTRL+S.MITEM.KEYMOD.OA - .DA #'R' - .DA #.77-.7 .AZ "Run..." -.77 .AZ "Ctrl-R" -.8 .DA #0 + + .DA #0 *-------------------------------------- MENU.Sys.Programs -.1 .DA #.2-* next - .DA #S.MITEM.F.ITEM F - .DA #0 S + .DA #S.MITEM.T.ITEM .DA #42 ID + .DA #0,#0 .DA BM.ID.APPLE pICON - .DA #0 - .DA #0 - .DA #0 KEYSTR .AZ "Test ASM" -.2 .DA #.3-* next - .DA #S.MITEM.F.ITEM F - .DA #0 S + .DA #S.MITEM.t.ITEM .DA #44 ID + .DA #0,#0 .DA BM.ID.APPLE pICON - .DA #0 - .DA #0 - .DA #0 KEYSTR .AZ "Test C" -.3 .DA #0 + .DA #0 *-------------------------------------- MENU.Sys.Settings -.1 .DA #.2-* next - .DA #S.MITEM.F.ITEM F - .DA #0 S + .DA #S.MITEM.T.ITEM .DA #62 ID + .DA #0,#0 .DA 0 pICON - .DA #0 - .DA #0 - .DA #0 KEYSTR .AZ "Colors..." -.2 .DA #.3-* next - .DA #S.MITEM.F.ITEM F - .DA #0 S + .DA #S.MITEM.T.ITEM .DA #64 ID + .DA #0,#0 .DA 0 pICON - .DA #0 - .DA #0 - .DA #0 KEYSTR .AZ "SubItem2..." -.3 .DA #0 + .DA #0 +*-------------------------------------- +KEYMOD.S.CTRL .EQ 0 +KEYMOD.S .AZ "Ctrl-" +KEYMOD.S.OA .EQ *-KEYMOD.S + .DA #01,#'-',#0 +KEYMOD.S.CA .EQ *-KEYMOD.S + .DA #02,#'-',#0 +*-------------------------------------- +TEXTBUF .BS 16 for composing HotKey strings *-------------------------------------- PREFS.BESTVIEWEDX .DA #$FC PREFS.bSYSBARTOP .DA #0 diff --git a/ROOT/make/_files.32MB.txt b/ROOT/make/_files.32MB.txt index 94e27e18..5b8ae7ab 100644 --- a/ROOT/make/_files.32MB.txt +++ b/ROOT/make/_files.32MB.txt @@ -154,6 +154,7 @@ include/stdio.h include/stdlib.h include/string.h include/unistd.h +include/libgui.h include/libblkdev.h include/libtui.h include/sys/types.h diff --git a/SBIN/GUI.S.txt b/SBIN/GUI.S.txt index 3c80604f..18ed6c46 100644 --- a/SBIN/GUI.S.txt +++ b/SBIN/GUI.S.txt @@ -56,9 +56,9 @@ CS.INIT >LDYA L.LIBGUI CS.INIT.RTS rts *-------------------------------------- CS.RUN >SLEEP - + >PUSHW L.MSG - >LIBCALL hLIBGUI,LIBGUI.GetMsg + >LIBCALL hLIBGUI,LIBGUI.MSG.Get bcs CS.RUN .1 lda MSG+S.MSG.T @@ -87,7 +87,7 @@ CS.RUN >SLEEP CS.DOEVENT lda (pEvent) bpl .9 - >LIBCALL hLIBGUI,LIBGUI.UpdateCursor + >LIBCALL hLIBGUI,LIBGUI.PTR.Update .9 sec rts diff --git a/SCMASM.31/SCMASM.S.DIR1.txt b/SCMASM.31/SCMASM.S.DIR1.txt index ee182844..46ca8427 100644 --- a/SCMASM.31/SCMASM.S.DIR1.txt +++ b/SCMASM.31/SCMASM.S.DIR1.txt @@ -114,10 +114,10 @@ DIR1.PS jsr GNNB .9 jmp ERBA2 *-------------------------------------- DIR1.EscChars .AS "abefnrtv" - .HS 5C27223F \'"? + .HS 5C27223F25 \'"?% DIR1.EscChars.L .EQ *-DIR1.EscChars DIR1.EscCodes .HS 07081B0C0A0D090B - .HS 5C27223F + .HS 5C27223F25 *-------------------------------------- DIR1.CZ jsr DIR1.CS jmp EMIT.ZERO diff --git a/SYS/KERNEL.S.DEV.txt b/SYS/KERNEL.S.DEV.txt index c2a153bc..27c83e1e 100644 --- a/SYS/KERNEL.S.DEV.txt +++ b/SYS/KERNEL.S.DEV.txt @@ -75,11 +75,10 @@ K.GetDev.9 rts * `>SYSCALL MkFD` * ## RETURN VALUE *\-------------------------------------- -K.MkFD - clc - rts +* clc +* rts */-------------------------------------- * # MKDev * Create a hDEV @@ -202,8 +201,8 @@ K.IOCTL ldy #3 hFD jmp (pDrv) *-------------------------------------- DEV.OPEN ldx #IOCTL.OPEN -* lda IO.hFD - jsr DEV.pDrvJmp + lda IO.hFD + jsr DEV.pDrvJmp.1 bcs .9 lda IO.hFD @@ -237,7 +236,7 @@ DEV.GetStatus sta K.S.IOCTL+S.IOCTL.S DEV.CLOSE ldx #IOCTL.CLOSE *-------------------------------------- DEV.pDrvJmp >LDYAI K.S.IOCTL - jmp (pDrv) +DEV.pDrvJmp.1 jmp (pDrv) *-------------------------------------- DEV.GetPFD sta IO.hFD @@ -307,6 +306,7 @@ DEV.GetFD ldx #1 * sec rts +K.MkFD DEV.GetFD.8 clc rts *--------------------------------------