diff --git a/.Docs/ASM.md b/.Docs/ASM.md
index dbaebcbc..3f8593a4 100644
--- a/.Docs/ASM.md
+++ b/.Docs/ASM.md
@@ -44,6 +44,7 @@ Table-driven, add your favorite CPU creating a new CPU asm.xxxx file.
| .EQ | EQuate | S-C, A2osX | Working | | |
| .FIN | conditional end| S-C, A2osX | Working | | |
| .HS | Hex String storage | S-C, A2osX | Working | `HS FE1A78` delimiter allowed : `HS 00.11,22` | |
+| .HX | Hex Nibble storage | S-C, A2osX | Working | `HX EFA187` delimiter allowed : `HS 00.11,22` | |
| .IN,.INB,.INBx | INline source | S-C, A2osX | Working | `.INB MYFILE` | `.IN` inlines full text, `.INB` inlines 1 block at a time during assembly |
| .LI,.LIST | | S-C, A2osX | Working | `.LIST ON/OFF CON/COFF MON/MOFF XON/XOFF` | |
| .MA | MAcro deffinition | S-C, A2osX | Working | `.MA >MYMACRO` | |
diff --git a/.Floppies/A2OSX.BOOT.po b/.Floppies/A2OSX.BOOT.po
index a97f5498..0435f02e 100644
Binary files a/.Floppies/A2OSX.BOOT.po and b/.Floppies/A2OSX.BOOT.po differ
diff --git a/.Floppies/A2OSX.BOOTHD.woz b/.Floppies/A2OSX.BOOTHD.woz
index e69de29b..24f6e0f2 100644
Binary files a/.Floppies/A2OSX.BOOTHD.woz and b/.Floppies/A2OSX.BOOTHD.woz differ
diff --git a/.Floppies/A2OSX.BUILD.po b/.Floppies/A2OSX.BUILD.po
index 3381b172..06e57f95 100644
Binary files a/.Floppies/A2OSX.BUILD.po and b/.Floppies/A2OSX.BUILD.po differ
diff --git a/.Floppies/A2OSX.TEST.po b/.Floppies/A2OSX.TEST.po
index e7e36844..ba0feee9 100644
Binary files a/.Floppies/A2OSX.TEST.po and b/.Floppies/A2OSX.TEST.po differ
diff --git a/.Floppies/ProDOSFX.BOOT.po b/.Floppies/ProDOSFX.BOOT.po
index d195693b..c39f3ce7 100644
Binary files a/.Floppies/ProDOSFX.BOOT.po and b/.Floppies/ProDOSFX.BOOT.po differ
diff --git a/.Floppies/ProDOSFX.BOOTHD.woz b/.Floppies/ProDOSFX.BOOTHD.woz
index f9b474e0..2f473a1f 100644
Binary files a/.Floppies/ProDOSFX.BOOTHD.woz and b/.Floppies/ProDOSFX.BOOTHD.woz differ
diff --git a/.Tools/userDefineLang.xml b/.Tools/userDefineLang.xml
index c19fc3b1..cd6bed44 100644
--- a/.Tools/userDefineLang.xml
+++ b/.Tools/userDefineLang.xml
@@ -24,7 +24,7 @@
- .BS
.DA
.AS
.AT
.AZ
.EQ
.MA
.EM
.OR
.TF
.LIST
.HS
.IN
.INB
.OP
.TA
.EM
.PH
.EP
.DUMMY
.ED
.CS
.CZ
.PS
+ .BS
.DA
.AS
.AT
.AZ
.EQ
.MA
.EM
.OR
.TF
.LIST
.HS
.IN
.INB
.OP
.TA
.EM
.PH
.EP
.DUMMY
.ED
.CS
.CZ
.PS
.HX
adc
and
asl
bit
brk
clc
cld
cli
clv
cmp
cpx
cpy
dec
dex
dey
eor
inc
inx
iny
lda
ldx
ldy
lsr
nop
ora
rmb
rol
ror
rti
rts
sbc
sec
sed
sei
smb
sta
stp
stx
sty
stz
tax
tay
trb
tsb
tsx
txa
txs
tya
wai
$
%
/
#
&
^
.1
.2
.3
.4
.5
.6
.7
.8
.9
diff --git a/BIN/ASM.S.DIR.txt b/BIN/ASM.S.DIR.txt
index 064550dd..17cf2ab7 100644
--- a/BIN/ASM.S.DIR.txt
+++ b/BIN/ASM.S.DIR.txt
@@ -478,7 +478,13 @@ DIR.FI >LDA.G ASM.DO.StackPtr
clc
rts
*---------------------------------------
-DIR.HS jsr SRC.GetNextCharNB
+DIR.HS clc
+ .HS B0 BCS
+
+DIR.HX sec
+ ror DIR.Word
+
+ jsr SRC.GetNextCharNB
bcs .99
jsr SRC.IsDigit16
@@ -503,18 +509,24 @@ DIR.HS jsr SRC.GetNextCharNB
jsr OUT.EmitByte
bcc .5
rts
+*---------------------------------------
+.3 bit DIR.Word
+ bmi .30
+
+ asl DIR.Byte
+ asl DIR.Byte
+ asl DIR.Byte
+ asl DIR.Byte
+
+ bra .4
+
+.30 asl
+ asl
+ asl
+ asl
-.3 pha
- lda DIR.Byte
- asl
- asl
- asl
- asl
- sta DIR.Byte
- pla
- ora DIR.Byte
-
-.4 jsr OUT.EmitByte
+.4 ora DIR.Byte
+ jsr OUT.EmitByte
bcs .9
jsr SRC.GetNextChar
diff --git a/BIN/ASM.S.txt b/BIN/ASM.S.txt
index e67c4431..14fb2c8a 100644
--- a/BIN/ASM.S.txt
+++ b/BIN/ASM.S.txt
@@ -172,6 +172,7 @@ DIR.EL.ID .EQ *-J.DIRECTIVES
DIR.FI.ID .EQ *-J.DIRECTIVES
.DA DIR.FI
.DA DIR.HS
+ .DA DIR.HX
.DA DIR.IN
.DA DIR.IN
.DA DIR.IN
@@ -488,6 +489,7 @@ T.DIRECTIVES .PS "AC"
.PS "EQ"
.PS "FIN"
.PS "HS"
+ .PS "HX"
.PS "IN"
.PS "INB"
.PS "INB1"
diff --git a/BIN/CC.S.CODE.txt b/BIN/CC.S.CODE.txt
index 1095a86f..2606c282 100644
--- a/BIN/CC.S.CODE.txt
+++ b/BIN/CC.S.CODE.txt
@@ -12,15 +12,13 @@ CODE.Init stz ZPCCConst
>LDYAI 20 char *ARGV[10]
>STYA ZPCCData
- lda #'_'
- >STA.G CC.CPSPFX+1
-
- lda #'A'
- >STA.G CC.CPSID
-
- iny CC.CPSID+1
+ >STZ.G CC.ScopeID
+ iny
sta (pData),y
+ lda #'_'
+ >STA.G CC.Label
+
clc
.99 rts
*--------------------------------------
diff --git a/BIN/CC.S.CORE.txt b/BIN/CC.S.CORE.txt
index 9f6c3741..d3eec60b 100644
--- a/BIN/CC.S.CORE.txt
+++ b/BIN/CC.S.CORE.txt
@@ -17,7 +17,9 @@ CORE.Init lda #SL._
>SYSCALL SListNew
bcs .9
- >STA.G CC.hScopes
+ >STA.G CC.hSyms
+
+ ldy #CC.ScopeIDs
sty ScopeIdx
>LDYAI 256
@@ -46,21 +48,11 @@ CORE.Init lda #SL._
CORE.Quit jsr FIO.FClose
bne CORE.Quit
- ldy ScopeIdx
+ >LDA.G CC.hSyms
beq .1
-.10 lda (pData),y
-
>SYSCALL SListFree
- ldy ScopeIdx
- cpy #CC.hScopes
- beq .1
-
- dec ScopeIdx
- dey
- bra .10
-
.1 >LDA.G CC.hTags
beq .2
diff --git a/BIN/CC.S.DECL.txt b/BIN/CC.S.DECL.txt
index 76c5631a..55be9af4 100644
--- a/BIN/CC.S.DECL.txt
+++ b/BIN/CC.S.DECL.txt
@@ -105,15 +105,12 @@ DECL.YAC ldx #SYM.SC.STATIC Y,A = Type/Qual
bcs .98
cmp #';'
- beq .28
+ beq .8
cmp #'{'
bne .26
-
- jsr CORE.GetNCharNB skip '{'
- bcs .98
-
- jmp SYM.StoreF
+
+ jmp CORE.GetNCharNBNL Skip '{'
*--------------------------------------
* Initializer
*--------------------------------------
@@ -141,7 +138,7 @@ DECL.YAC ldx #SYM.SC.STATIC Y,A = Type/Qual
cmp #';'
bne .98
- clc
+.8 clc
rts
.98 lda #E.CSYN
diff --git a/BIN/CC.S.F.txt b/BIN/CC.S.F.txt
index 7300505b..75d33827 100644
--- a/BIN/CC.S.F.txt
+++ b/BIN/CC.S.F.txt
@@ -1,19 +1,37 @@
NEW
AUTO 3,1
*--------------------------------------
-F.Decl stz LocalPtr
+F.Decl ldy #SYM.Q
+ lda (ZPSymBufPtr),y
+ ora #SYM.Q.FUNC
+ sta (ZPSymBufPtr),y
+
+ and #$FC
+ sta ZPPtr2+1
- jsr CC.PushTQ push T/Q for RETURN
+ lda (ZPSymBufPtr) #SYM.T
+ sta ZPPtr2 T/Q for _RETURN_
+
+ stz LocalPtr
+
+ jsr SYM.Store Store this f() with no prototype...
bcs .99
- ldx #$80 CPStmt.fDef state
- jsr STMT.CPStmt.NEW
+ jsr SCOPE.New
bcs .99
- jsr SYM.NewScope
+ lda ZPPtr2+1 #SYM.Q
+ and #$F0
+ bne .10
+
+ lda ZPPtr2 #SYM.T
+ cmp #SYM.T.VOID
+ beq .11
+
+.10 jsr F.AddReturnVar
bcs .99
- jsr CORE.GetNCharNBNL Skip (
+.11 jsr CORE.GetNCharNBNL Skip (
bcs .9
cmp #')' func()
@@ -61,12 +79,10 @@ F.Decl stz LocalPtr
cmp #';'
bne .7
- jsr SYM.FreeScope discard local scope
+ jsr SYM.Update
+ bcs .99
- lda CStackPtr
- clc
- adc #CPS
- sta CStackPtr discard this CPStmt + T/Q
+ jsr SCOPE.Close discard local scope
stz LocalPtr reset for DEBUG Message
@@ -75,8 +91,8 @@ F.Decl stz LocalPtr
*--------------------------------------
.7 cmp #'{'
bne .9
-
- bit bInitCode
+*--------------------------------------
+F.Def bit bInitCode
bmi .8
dec bInitCode
@@ -89,12 +105,17 @@ F.Decl stz LocalPtr
.8 >LDYA ZPCCCode f() Code starts HERE
jsr SYM.SetAddrYA
+ jsr SYM.Update
+ bcs .99
+
lda LocalPtr
jsr CODE.LDAI A = f() ARGS size
bcs .99
>LDYA L.PCC.ENTER
jmp CODE.EmitPCC Store f() Declaration / Start Definition
+
+.99 rts
*--------------------------------------
F.DeclGetTQ lda (ZPLineBufPtr)
cmp #'.'
@@ -142,6 +163,23 @@ F.DeclGetTQ lda (ZPLineBufPtr)
sec
rts
*--------------------------------------
+F.AddReturnVar ldx ZPLineBufPtr
+ phx
+ ldx ZPLineBufPtr+1
+ phx
+
+ >LDYA L.CC._RETURN_
+ >STYA ZPLineBufPtr
+
+ jsr F.NewArg
+
+ plx
+ stx ZPLineBufPtr+1
+ plx
+ stx ZPLineBufPtr
+
+ rts
+*--------------------------------------
F.NewArg >LDYA.G CC.SymID
>STYA.G CC.SymIDSave
@@ -151,10 +189,11 @@ F.NewArg >LDYA.G CC.SymID
>LDYA ZPPtr2
ldx #SYM.SC.AUTO
sec Reset Buffer
+* >DEBUG
jsr SYM.New
bcs .9
- jsr SYM.StoreL Store f() Args in Local scope
+ jsr SYM.Store
bcs .9
>LDA.G CC.hSymBuf
@@ -170,10 +209,10 @@ F.Def.END >LDYA L.PCC.LEAVE
jsr CODE.EmitPCC
bcs .9
- jsr SYM.FreeScope
+ jsr SCOPE.Close
stz LocalPtr back to global
-
+ >DEBUG
clv pop context
clc
.9 rts
diff --git a/BIN/CC.S.KW.txt b/BIN/CC.S.KW.txt
index fbdc94dd..6e6906e0 100644
--- a/BIN/CC.S.KW.txt
+++ b/BIN/CC.S.KW.txt
@@ -21,7 +21,7 @@ KW.IF jsr STMT.NewCPS00
jsr KW.TestZero Y,A=T/Q
lda #'E'
- jsr SYM.LookupA
+ jsr SYM.LookupLabelA
bcs .99
lda #$4C emit JMP else
@@ -51,14 +51,14 @@ KW.IF.END jsr CORE.GetCharNBNL
bcc .2
.1 lda #'E' define ELSE Label
- jsr STMT.NewLabelA
+ jsr SYM.NewLabelA
bcs .99
clv pop context
rts
*--------------------------------------
.2 lda #'X'
- jsr SYM.LookupA
+ jsr SYM.LookupLabelA
bcs .99
lda #$4C emit JMP exit
@@ -66,7 +66,7 @@ KW.IF.END jsr CORE.GetCharNBNL
bcs .99
lda #'E' define ELSE Label
- jsr STMT.NewLabelA
+ jsr SYM.NewLabelA
bcs .99
lda #KW.ELSE.ID replace IF by ELSE keyword
@@ -88,7 +88,7 @@ KW.ELSE lda #E.CSYN illegal
rts
*--------------------------------------
KW.ELSE.END lda #'X' define EXIT Label
- jsr STMT.NewLabelA
+ jsr SYM.NewLabelA
bcs .99
clv pop context
@@ -98,7 +98,7 @@ KW.WHILE jsr STMT.NewCPS00
bcs .99
lda #'C' define CONT Label
- jsr SYM.NewA
+ jsr SYM.NewLabelA
bcs .99
jsr CC.GetCharNB
@@ -116,7 +116,7 @@ KW.WHILE jsr STMT.NewCPS00
jsr KW.TestZero
lda #'B'
- jsr SYM.LookupA
+ jsr SYM.LookupLabelA
bcs .99
lda #$4C emit JMP break:
@@ -140,7 +140,7 @@ KW.WHILE.END >LDYA L.PCC.SLEEP
bcs .99
lda #'C'
- jsr STMT.GetLabelA
+ jsr SYM.LookupLabelA
bcs .99
lda #$4C
@@ -148,7 +148,7 @@ KW.WHILE.END >LDYA L.PCC.SLEEP
bcs .99
lda #'B' define BREAK Label
- jsr STMT.NewLabelA
+ jsr SYM.NewLabelA
bcs .99
clv pop context
@@ -159,7 +159,7 @@ KW.DO jsr STMT.NewCPS00
bcs .99
lda #'C' define CONT Label
- jsr SYM.NewA
+ jsr SYM.NewLabelA
bcs .99
jmp STMT.SetCPSType
@@ -185,7 +185,7 @@ KW.DO.END >LDYA L.CC.KW2.DO Check allowed KW for DO....
jsr KW.TestnZero
lda #'C'
- jsr STMT.GetLabelA
+ jsr SYM.LookupLabelA
bcs .99
lda #$4C emit JMP cont
@@ -193,7 +193,7 @@ KW.DO.END >LDYA L.CC.KW2.DO Check allowed KW for DO....
bcs .99
lda #'B' define BREAK Label
- jsr STMT.NewLabelA
+ jsr SYM.NewLabelA
bcs .99
jsr CC.GetCharNB
@@ -265,7 +265,7 @@ KW.FOR jsr CC.GetCharNB
bcs .9
*--------------------------------------
lda #'L' LOOP Label
- jsr SYM.NewA
+ jsr SYM.NewLabelA
bcs .99
jsr EXP.Eval00 get e2
@@ -275,14 +275,14 @@ KW.FOR jsr CC.GetCharNB
bcs .99
lda #'B'
- jsr SYM.LookupA
+ jsr SYM.LookupLabelA
bcs .99
lda #$4C emit JMP break:
jsr CODE.TOABSYX
lda #'S'
- jsr SYM.LookupA
+ jsr SYM.LookupLabelA
bcs .99
lda #$20 emit JSR s:
@@ -298,7 +298,7 @@ KW.FOR jsr CC.GetCharNB
bcs .9
*--------------------------------------
lda #'C' CONT Label
- jsr SYM.NewA
+ jsr SYM.NewLabelA
bcs .99
jsr STMT.Get get s3
@@ -313,14 +313,14 @@ KW.FOR jsr CC.GetCharNB
bne .9
lda #'L'
- jsr SYM.LookupA
+ jsr SYM.LookupLabelA
bcs .99
lda #$4C
jsr CODE.TOABSYX emit JMP loop
lda #'S' S Label
- jsr SYM.NewA
+ jsr SYM.NewLabelA
bcs .99
jmp STMT.SetCPSType
@@ -335,7 +335,7 @@ KW.FOR.END lda #$60
bcs .99
lda #'B' define BREAK Label
- jsr STMT.NewLabelA
+ jsr SYM.NewLabelA
bcs .99
clv pop context
@@ -390,7 +390,7 @@ KW.SWITCH jsr CC.GetCharNB
bne .98
lda #'J'
- jsr STMT.LookupLabelA
+ jsr SYM.LookupLabelA
bcs .99
lda #$4C emit JMP JmpTable
@@ -409,7 +409,7 @@ KW.SWITCH jsr CC.GetCharNB
KW.SWITCH.RTS rts
*--------------------------------------
KW.SWITCH.END lda #'J' define JMP Label
- jsr STMT.NewLabelA
+ jsr SYM.NewLabelA
bcs KW.SWITCH.RTS
lda CStackPtr
@@ -470,7 +470,7 @@ KW.SWITCH.END lda #'J' define JMP Label
bcs .99
lda #'D'
- jsr STMT.LookupLabelA
+ jsr SYM.LookupLabelA
bcs .3
lda #$4C emit JMP Default
@@ -478,7 +478,7 @@ KW.SWITCH.END lda #'J' define JMP Label
bcs .99
.3 lda #'B' define BREAK Label
- jsr STMT.NewLabelA
+ jsr SYM.NewLabelA
bcs .99
lda CStackPtr
@@ -579,7 +579,7 @@ KW.DEFAULT ldy CStackPtr
jsr CORE.GetNCharNB skip ':'
lda #'D' define DEFAULT Label
- jmp STMT.NewLabelA
+ jmp SYM.NewLabelA
.9 lda #E.CSYN
sec
@@ -587,7 +587,7 @@ KW.DEFAULT ldy CStackPtr
*--------------------------------------
KW.BREAK lda #'B'
- jsr STMT.LookupLabelA
+ jsr SYM.LookupLabelA
bcs .9
lda #$4C emit JMP break
@@ -599,7 +599,7 @@ KW.BREAK lda #'B'
*--------------------------------------
KW.CONTINUE lda #'C'
- jsr STMT.LookupLabelA
+ jsr SYM.LookupLabelA
bcs .9
lda #$4C emit JMP cont
@@ -609,34 +609,29 @@ KW.CONTINUE lda #'C'
sec
rts
*--------------------------------------
-KW.RETURN ldy CStackPtr
- beq .9
+KW.RETURN ldx ZPLineBufPtr
+ phx
+ ldx ZPLineBufPtr+1
+ phx
-.1 lda (ZPCCStack),y CPS.KW
- bmi .7 f()
-
- tya
- clc
- adc #CPS skip CPStmt (6 bytes)
- tay
- bcc .1
-
-.9 lda #E.STACKERROR
- sec
-.99 rts
-
-.7 tya
- clc
- adc #CPS.T
- tay
- lda (ZPCCStack),y
+ >LDYA L.CC._RETURN_
+ >STYA ZPLineBufPtr
+
+ jsr SYM.Lookup
+
+ plx
+ stx ZPLineBufPtr+1
+ plx
+ stx ZPLineBufPtr
+ bcs .99
+
+ ldy #SYM.Q
+ lda (ZPLookupSymPtr),y
pha
-
- iny get CPS.Q
- lda (ZPCCStack),y
-
- ply T
+ lda (ZPLookupSymPtr) SYM.T
+ tay
+ pla
jsr EXP.Eval
bcs .99
@@ -648,6 +643,8 @@ KW.RETURN ldy CStackPtr
>LDYA L.PCC.LEAVE
jmp CODE.EmitPCC
+
+.99 rts
*--------------------------------------
KW.SIZEOF
lda #E.CSYN
diff --git a/BIN/CC.S.LINK.txt b/BIN/CC.S.LINK.txt
index 4e82c70a..34809017 100644
--- a/BIN/CC.S.LINK.txt
+++ b/BIN/CC.S.LINK.txt
@@ -8,8 +8,8 @@ CC.Link >LDYA L.MSG.LINKING
lda #1
.1 >STYA ZPPtr1 SymID
-
- >PUSHB.G CC.hScopes
+* >DEBUG
+ >PUSHB.G CC.hSyms
>PUSHW ZPPtr1 SymID
>PUSHW pData
@@ -18,7 +18,7 @@ CC.Link >LDYA L.MSG.LINKING
>STYA ZPPtr2 NextID
- >PUSHB.G CC.hScopes
+ >PUSHB.G CC.hSyms
>PUSHW ZPPtr1 SymID
>PUSHW ZPSymBufPtr
>PUSHWI $ffff All
@@ -26,16 +26,21 @@ CC.Link >LDYA L.MSG.LINKING
>SYSCALL SListGetData
bcs .99
- ldy #SYM.SC
+ >LDA.G bTrace
+ bpl .2
+
+ jsr CC.Link.Dump
+
+.2 ldy #SYM.SC
lda (ZPSymBufPtr),y
cmp #SYM.SC.TYPEDEF
- bcs .6
+ bcs .7
ldy #SYM.Addr+1
lda (ZPSymBufPtr),y
dey
ora (ZPSymBufPtr),y
- bne .6
+ bne .7
jsr CC.Link.Lookup
bcs .9
@@ -43,20 +48,18 @@ CC.Link >LDYA L.MSG.LINKING
jsr CC.Link.Update
bcs .99
-.6 >LDA.G bTrace
- bpl .7
-
- jsr CC.Link.Dump
- bcs .99
-
.7 >LDYA ZPPtr2
jmp .1
.8 clc
rts
-.9 jsr CC.Link.Dump
- lda #E.FUNDEF
+.9 >LDA.G bTrace
+ bmi .2
+
+ jsr CC.Link.Dump
+
+.90 lda #E.FUNDEF
sec
.99 rts
*--------------------------------------
@@ -156,7 +159,7 @@ CC.Link.Update ldy #SYM.Addr
txa
sta (ZPSymBufPtr),y
- >PUSHB.G CC.hScopes
+ >PUSHB.G CC.hSyms
>PUSHW ZPPtr1 SymID
>PUSHW ZPSymBufPtr
>PUSHBI 0
@@ -212,7 +215,7 @@ CC.Link.Dump ldy #$ff
rts
*--------------------------------------
CC.Link.CheckMain
- >PUSHB.G CC.hScopes
+ >PUSHB.G CC.hSyms
>PUSHW L.CC.MAIN
>PUSHWI 0 ScopeID
>SYSCALL SListLookup
@@ -220,7 +223,7 @@ CC.Link.CheckMain
>STYA ZPPtr1 SymID
- >PUSHB.G CC.hScopes
+ >PUSHB.G CC.hSyms
>PUSHW ZPPtr1 SymID
>PUSHW ZPSymBufPtr
>PUSHWI 65535 all
diff --git a/BIN/CC.S.SCOPE.txt b/BIN/CC.S.SCOPE.txt
new file mode 100644
index 00000000..35e1c55d
--- /dev/null
+++ b/BIN/CC.S.SCOPE.txt
@@ -0,0 +1,58 @@
+NEW
+ AUTO 3,1
+*--------------------------------------
+SCOPE.New ldy ScopeIdx
+ cpy #CC.ScopeIDs+SCOPE.MAX*2
+ bcs .9
+
+ iny
+ iny
+ sty ScopeIdx
+
+ >INCW.G CC.ScopeID
+
+ >LDA.G CC.ScopeID
+
+ ldy ScopeIdx
+ sta (pData),y
+
+ >LDA.G CC.ScopeID+1
+
+ ldy ScopeIdx
+ iny
+ sta (pData),y
+
+ dec bLocalScope
+ clc
+ rts
+
+.9 lda #E.OOH
+ sec
+.99 rts
+*--------------------------------------
+SCOPE.Close ldy ScopeIdx
+ cpy #CC.ScopeIDs
+ beq *
+
+ dey
+ dey
+ sty ScopeIdx
+
+ inc bLocalScope
+
+ rts
+*--------------------------------------
+SCOPE.Push ldy ScopeIdx
+
+SCOPE.PushY iny
+ lda (pData),y
+ >PUSHA
+ dey
+ lda (pData),y
+ >PUSHA
+ rts
+*--------------------------------------
+MAN
+SAVE usr/src/bin/cc.s.scope
+LOAD usr/src/bin/cc.s
+ASM
diff --git a/BIN/CC.S.STMT.txt b/BIN/CC.S.STMT.txt
index 43eaf61f..d0dea203 100644
--- a/BIN/CC.S.STMT.txt
+++ b/BIN/CC.S.STMT.txt
@@ -139,15 +139,7 @@ STMT.Stmt.END ldy CStackPtr
*--------------------------------------
* X = KW.ID
*--------------------------------------
-STMT.CPStmt.NEW >LDA.G CC.CPSID+1
- jsr CC.Push
- bcs .99
-
- >LDA.G CC.CPSID
- jsr CC.Push
- bcs .99
-
- lda LocalPtr Locals
+STMT.CPStmt.NEW lda LocalPtr Locals
jsr CC.Push
bcs .99
@@ -216,24 +208,7 @@ STMT.NewCPS00 lda #0
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
+STMT.NewCPS lda LocalPtr Locals
jsr CC.Push
bcs .99
@@ -276,121 +251,6 @@ STMT.SetCPSType jsr CORE.GetNCharNBNL
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 9e37a1fa..41bb8975 100644
--- a/BIN/CC.S.SYM.txt
+++ b/BIN/CC.S.SYM.txt
@@ -12,12 +12,9 @@ SYM.New >STYA ZPPtr2 T/Q
bit bPass2
bpl SYM.New.1
- bit bLocalScope
- bmi SYM.New.1
-
- >PUSHB.G CC.hScopes Global Scope
+ >PUSHB.G CC.hSyms
>PUSHW ZPLineBufPtr
- >PUSHWI 0 ScopeID
+ jsr SCOPE.Push
>SYSCALL SListLookup
bcs SYM.New.9
@@ -25,7 +22,7 @@ SYM.New >STYA ZPPtr2 T/Q
jsr CC.SkipX X = KeyLen
- >PUSHB.G CC.hScopes
+ >PUSHB.G CC.hSyms
>PUSHW.G CC.SymID
>PUSHW ZPSymBufPtr
>PUSHWI 65535 all
@@ -33,18 +30,22 @@ SYM.New >STYA ZPPtr2 T/Q
>SYSCALL SListGetData
bcc SYM.New.2
-SYM.New.9 rts Y,A = SymSize
+SYM.New.9 rts
*--------------------------------------
SYM.New.1 jsr SYM.BufInitYAXC set buf according C
- ldy ScopeIdx
- lda (pData),y
- jsr SYM.NewKey
+ >PUSHB.G CC.hSyms
+ >PUSHW ZPLineBufPtr
+ jsr SCOPE.Push
+ >SYSCALL SListNewKey
bcs SYM.New.9
>STYA.G CC.SymID Y,A = KeyID
jsr CC.SkipX X = KeyLen
+ .DO DBG_SYM=1
+ jsr SYM.DEBUG0
+ .FIN
*--------------------------------------
SYM.New.2 jsr CC.GetCharNB
bcs .98
@@ -62,11 +63,6 @@ SYM.New.2 jsr CC.GetCharNB
.1 cmp #'('
bne SYM.NewV
- ldy #SYM.Q
- lda #SYM.Q.FUNC
- ora (ZPSymBufPtr),y
- sta (ZPSymBufPtr),y
-
jmp F.Decl
.98 lda #E.CSYN
@@ -362,11 +358,7 @@ SYM.NewKey >PUSHA
>PUSHW ZPLineBufPtr
>PUSHWI 0 ScopeID
>SYSCALL SListNewKey
- bcs .9
-
-
-
-.9 rts Y,A = KeyID, X = KeyLen
+ rts Y,A = KeyID, X = KeyLen
*--------------------------------------
SYM.Add0000 >LDYAI 0
*--------------------------------------
@@ -461,14 +453,14 @@ SYM.AddByte pha
sec
rts
*--------------------------------------
-SYM.NewA bit bPass2
+SYM.NewLabelA bit bPass2
bmi .8
- >STA.G CC.CPSPFX A = "B"reak, "C"ontinue...
+ >STA.G CC.Label+1 _A = "B"reak, "C"ontinue...
- >PUSHB.G CC.hScopes Global Scope
- >PUSHEA.G CC.CPSPFX
- >PUSHWI 0 ScopeID
+ >PUSHB.G CC.hSyms
+ >PUSHEA.G CC.Label
+ jsr SCOPE.Push
>SYSCALL SListNewKey
bcs .99
@@ -498,104 +490,114 @@ SYM.NewA bit bPass2
>LDYA ZPCCCode
jsr SYM.SetAddrYA
-
- >LDA.G CC.hScopes Global Scope
- jmp SYM.Store.1
+ .DO DBG_SYM=1
+ jsr SYM.DEBUG0
+ .FIN
+ jmp SYM.Store
.8 clc
.99 rts
*--------------------------------------
-SYM.StoreF >LDA.G CC.hScopes
-
- bit bPass2
- bpl SYM.Store.1
-
- clc
- rts
+SYM.Update sec
+ .HS 90 BCC
*--------------------------------------
-SYM.Store bit bPass2
- bpl SYM.StoreL Store Global & Local at Pass 1
+SYM.Store clc
+ bit bPass2
+ bmi .8
- bit bLocalScope Store Local at Pass 2
- bmi SYM.StoreL
- clc
- rts
+ php
+ .DO DBG_SYM=1
+ bcc .10
-SYM.StoreL ldy ScopeIdx
- lda (pData),y
+ jsr SYM.DEBUG1
-SYM.Store.1 >PUSHA
+ bra .11
+
+.10
+ jsr SYM.DEBUG2
+
+.11 .FIN
+ >PUSHB.G CC.hSyms
>PUSHW.G CC.SymID
>PUSHW ZPSymBufPtr
>PUSHBI 0
+
+ ldy #SYM.Q
+ lda (ZPSymBufPtr),y
+ and #SYM.Q.FUNC
+ bne .1
+
ldy #SYM.DefSize
lda (ZPSymBufPtr),y
- >PUSHA
+ bra .2
+
+.1 lda #SYM.F.MAX
+
+.2 >PUSHA
+
+ plp
+ bcs .3
>SYSCALL SListAddData
-
- rts
-*--------------------------------------
-SYM.NewScope ldy ScopeIdx
- cpy #CC.hScopes+SCOPE.MAX
- bcs .9
-
- lda #SL._
- >SYSCALL SListNew
- bcs .99
-
- inc ScopeIdx
- ldy ScopeIdx
- sta (pData),y
-
- dec bLocalScope
- clc
rts
-.9 lda #E.OOH
- sec
-.99 rts
-*--------------------------------------
-SYM.FreeScope ldy ScopeIdx
- cpy #CC.hScopes
- beq *
-
- lda (pData),y
- >SYSCALL SListFree
-
- dec ScopeIdx
- inc bLocalScope
+.3 >SYSCALL SListSetData
+ rts
+.8 clc
rts
*--------------------------------------
SYM.Lookup >LDA.G CC.LookupIdx
+
cmp #CC.LookupIdx+LOOKUP.MAX
beq .99
- >PUSHB ScopeIdx
+ >PUSHB.G CC.hSyms ...for SListGetData
-.1 tay
- lda (pData),y
- jsr CC.SListLookup
+ lda ScopeIdx
+
+.1 pha
+ >PUSHB.G CC.hSyms
+ >PUSHW ZPLineBufPtr
+ ply
+ phy
+ jsr SCOPE.PushY
+ >SYSCALL SListLookup
bcc .8
- lda (pstack)
- cmp #CC.hScopes
+ pla
+ cmp #CC.ScopeIDs
beq .9
dec
- sta (pstack)
+ dec
bra .1
-.9 inc pStack
+
+.99 lda #E.OOH
+* sec
+ rts
+
+.9 inc pStack discard CC.hSyms
lda #E.NOKEY
sec
rts
-.8 inc pStack
+.8 >PUSHA KeyID.HI
+ tya
+ >PUSHA KeyID.LO
+
+ pla discard ScopeIdx
+
+ jsr CC.SkipX
+
+ >PUSHWZ allocate
+ >PUSHWI 65535 all
+ >PUSHWZ From Start
+ >SYSCALL SListGetData
>STYA.G CC.LookupSymSize
@@ -610,12 +612,9 @@ SYM.Lookup >LDA.G CC.LookupIdx
* clc
rts
-
-.99 lda #E.OOH
-* sec
- rts
*--------------------------------------
-SYM.LookupA bit bPass2
+SYM.LookupLabelA
+ bit bPass2
bmi .1
ldx #0
@@ -623,18 +622,39 @@ SYM.LookupA bit bPass2
clc
rts
-.1 >STA.G CC.CPSPFX A = "B"reak, "C"ontinue...
+.1 >STA.G CC.Label+1 A = "B"reak, "C"ontinue...
- >PUSHB.G CC.hScopes Global Scope
- >PUSHEA.G CC.CPSPFX
- >PUSHWI 0 ScopeID
+ >PUSHB.G CC.hSyms ...for SListGetData
+
+ lda ScopeIdx
+
+.2 pha
+ >PUSHB.G CC.hSyms
+ >PUSHEA.G CC.Label
+ ply
+ phy
+ jsr SCOPE.PushY
>SYSCALL SListLookup
- bcs .99
+ bcc .8
- >STYA.G CC.SymID Y,A = KeyID
+ pla
+ cmp #CC.ScopeIDs
+ beq .9
+
+ dec
+ dec
+ bra .2
+
+.9 inc pStack discard CC.hSyms
+
+ lda #E.NOKEY
+ sec
+ rts
+
+.8 >PUSHA KeyID.HI
+ tya
+ >PUSHA KeyID.LO
- >PUSHB.G CC.hScopes
- >PUSHW.G CC.SymID
>PUSHW ZPSymBufPtr
>PUSHWI 65535 all
>PUSHWZ From Start
@@ -850,6 +870,32 @@ SYM.SetAddrYA phy
sta (ZPSymBufPtr),y
rts
+*--------------------------------------
+ .DO DBG_SYM=1
+SYM.DEBUG0 >PUSHW L.MSG.DEBUG.SYM0
+ >PUSHW.G CC.SymID
+ jsr SCOPE.Push
+ lda (ZPSymBufPtr)
+ >PUSHA
+ ldy #1
+ lda (ZPSymBufPtr),y
+ >PUSHA
+ >PUSHBI 6
+ >SYSCALL Printf
+ rts
+
+SYM.DEBUG1 >PUSHW L.MSG.DEBUG.SYM1
+ >PUSHW.G CC.SymID
+ >PUSHBI 2
+ >SYSCALL Printf
+ rts
+
+SYM.DEBUG2 >PUSHW L.MSG.DEBUG.SYM2
+ >PUSHW.G CC.SymID
+ >PUSHBI 2
+ >SYSCALL Printf
+ rts
+ .FIN
*--------------------------------------
MAN
SAVE usr/src/bin/cc.s.sym
diff --git a/BIN/CC.S.txt b/BIN/CC.S.txt
index 8e5c2309..5719470f 100644
--- a/BIN/CC.S.txt
+++ b/BIN/CC.S.txt
@@ -10,6 +10,8 @@ NEW
.INB inc/mli.i
.INB inc/mli.e.i
*--------------------------------------
+DBG_SYM .EQ 0
+*--------------------------------------
FILES.MAX .EQ 4
LIBS.MAX .EQ 4
SCOPE.MAX .EQ 16
@@ -46,15 +48,17 @@ SYM.SC.EXTERN .EQ 6
SYM.SC.TYPEDEF .EQ 8
SYM.SC.DEFINE .EQ 10
SYM.SC.TAG .EQ 12
-SYM.hSym .EQ 3
+* .EQ 3
SYM.SizeOf .EQ 4
SYM.Addr .EQ 6
SYM.BitO .EQ 8
SYM.BitW .EQ 9
SYM.DefSize .EQ 10
-SYM.Def .EQ 11 Funtions : fTQ,a1TQ,a2TQ....
+*
+SYM.Def .EQ 12 Funtions : fTQ,a1TQ,a2TQ....
*
SYM .EQ 14
+SYM.F.MAX .EQ 64
*--------------------------------------
SU.F.T .EQ 0
SU.F.Q .EQ 1
@@ -63,19 +67,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.hMEM .EQ 5 switch/case
+CPS.Ptr .EQ 4
-CPS.Q .EQ 7 f
-CPS.T .EQ 6
+CPS.Q .EQ 5 f
+CPS.T .EQ 4
-CPS.CPSID .EQ 4
CPS.LOCAL .EQ 3
CPS.STATE .EQ 2
CPS.TERM .EQ 1
CPS.KW .EQ 0
*
-CPS .EQ 8
+CPS .EQ 6
+*--------------------------------------
+
*--------------------------------------
* Zero Page Segment, up to 32 bytes
*--------------------------------------
@@ -141,6 +146,11 @@ L.MSG.LINKING .DA MSG.LINKING
L.MSG.LINKING2 .DA MSG.LINKING2
L.MSG.GENERATING .DA MSG.GENERATING
L.MSG.DEBUG .DA MSG.DEBUG
+ .DO DBG_SYM=1
+L.MSG.DEBUG.SYM0 .DA MSG.DEBUG.SYM0
+L.MSG.DEBUG.SYM1 .DA MSG.DEBUG.SYM1
+L.MSG.DEBUG.SYM2 .DA MSG.DEBUG.SYM2
+ .FIN
L.MSG.TRACE .DA MSG.TRACE
L.MSG.RTSTK .DA MSG.RTSTK
L.MSG.ERROR .DA MSG.ERROR
@@ -233,6 +243,7 @@ J.CC.STYPES .DA TYPE.SCHAR
.DA TYPE.SLONG
*--------------------------------------
L.CC.MAIN .DA CC.MAIN
+L.CC._RETURN_ .DA CC._RETURN_
L.CC.SYSCALL .DA CC.SYSCALL
L.CC.FPUCALL .DA CC.FPUCALL
*--------------------------------------
@@ -364,11 +375,11 @@ CS.RUN.CLOOP jsr CORE.CompileFile
cmp #MLI.E.EOF
bne .9
-
+* bne .1
jsr FIO.FClose
bne CS.RUN.CLOOP
*--------------------------------------
- jsr PrintSummary
+.1 jsr PrintSummary
bcs .99
jsr CC.Link
@@ -570,7 +581,8 @@ PrintDebugMsg >PUSHW L.MSG.DEBUG
lda ScopeIdx
sec
- sbc #CC.hScopes
+ sbc #CC.ScopeIDs
+ lsr
>PUSHA
>PUSHBI 15
@@ -637,16 +649,17 @@ PrintSummary >PUSHW L.MSG.SUMMARY
*--------------------------------------
.INB usr/src/bin/cc.s.code
.INB usr/src/bin/cc.s.core
- .INB usr/src/bin/cc.s.dir
.INB usr/src/bin/cc.s.decl
- .INB usr/src/bin/cc.s.stmt
- .INB usr/src/bin/cc.s.kw
- .INB usr/src/bin/cc.s.type
- .INB usr/src/bin/cc.s.f
+ .INB usr/src/bin/cc.s.dir
.INB usr/src/bin/cc.s.exp
- .INB usr/src/bin/cc.s.sym
- .INB usr/src/bin/cc.s.link
+ .INB usr/src/bin/cc.s.f
.INB usr/src/bin/cc.s.fio
+ .INB usr/src/bin/cc.s.kw
+ .INB usr/src/bin/cc.s.link
+ .INB usr/src/bin/cc.s.scope
+ .INB usr/src/bin/cc.s.stmt
+ .INB usr/src/bin/cc.s.sym
+ .INB usr/src/bin/cc.s.type
*--------------------------------------
CS.END
*--------------------------------------
@@ -663,6 +676,11 @@ MSG.LINKING2 .CZ "*** %H:%H:%18s T/Q=%h/%h, SC=%h, Def=%h, SizeOf=%H, @=%H\r\n"
MSG.GENERATING .CZ "*** Generating: %s\r\n"
MSG.DEBUG .CS "*** pCode=%H, pConst=%H, pData=%H, pStack=%H\r\n"
.CZ " LSP=%h, CSP=%H:%h>%h:%h, ScopeIdx=%h\r\n"
+ .DO DBG_SYM=1
+MSG.DEBUG.SYM0 .CZ "New SymID=%H[%H],T=%h,Q=%h "
+MSG.DEBUG.SYM1 .CZ "Upd SymID=%H\r\n"
+MSG.DEBUG.SYM2 .CZ "Sto SymID=%H\r\n"
+ .FIN
MSG.TRACE .CZ "%5D> %s\r\n"
MSG.RTSTK .CZ "\r\n"
MSG.ERROR .CZ " %s^\r\n"
@@ -808,6 +826,7 @@ CC.TYPESIGN .HS 0000FF00FF00FFFF
CC.MAIN .AZ "main"
CC.MAIN.DEF .DA #SYM.T.SINT,#0,#SYM.T.SINT,#0,#SYM.T.UCHAR,#SYM.Q.PPOINTER,0
CC.MAIN.DEF.LEN .EQ *-CC.MAIN.DEF
+CC._RETURN_ .AZ "_RETURN_;"
*--------------------------------------
CC.SYSCALL .PS "chtyp"
.DA #SYS.ChTyp
@@ -1125,10 +1144,12 @@ CC.SaveDefine .BS 2
CC.hTags .BS 1
CC.hStack .BS 1
-CC.hScopes .BS 1+SCOPE.MAX 1 Global+ MAX locals
+CC.hSyms .BS 1
-CC.CPSID .BS 2 AA
-CC.CPSPFX .BS 5 X_id\0
+CC.ScopeID .BS 2
+CC.ScopeIDs .BS 2+SCOPE.MAX*2 2 bytes Global+ MAX locals
+
+CC.Label .BS 3 _X\0
*--------------------------------------
CC.hSymBuf .BS 1
CC.SymID .BS 2
diff --git a/BIN/FORMAT.S.txt b/BIN/FORMAT.S.txt
index 01639b5a..4c62f8f4 100644
--- a/BIN/FORMAT.S.txt
+++ b/BIN/FORMAT.S.txt
@@ -32,19 +32,17 @@ BlkCnt .BS 2
TrkCnt .BS 1
Stepping .BS 1
VolNum .BS 1
-AltBB .BS 1
+bAltBB .BS 1
HeadCnt .BS 1
-TimeOut .BS 1
-
CatSize .BS 1
CatBlkCnt .BS 1
bLL .BS 1
-bCustomBlkSize .BS 1
-bHighDensity .BS 1
-bExtraTrack .BS 1
-bDS .BS 1
bVerify .BS 1
+bCustomBlkSize .BS 1
+
+TimeOut .BS 1
+
ZS.END
.ED
*--------------------------------------
@@ -81,11 +79,19 @@ L.MSG.LLDISK2 .DA MSG.LLDISK2
L.MSG.VERIFY .DA MSG.VERIFY
L.MSG.WRITECAT .DA MSG.WRITECAT
L.FMT.BLANK .DA FMT.BLANK
+J.Opts .DA CS.RUN.OptA
+ .DA CS.RUN.OptB
+ .DA CS.RUN.OptD
+ .DA CS.RUN.OptL
+ .DA CS.RUN.OptS
+ .DA CS.RUN.OptT
+ .DA CS.RUN.OptV
.DA 0
*--------------------------------------
CS.INIT >LDYA L.LIBBLKDEV
>SYSCALL LoadLib
bcs .9
+
sta hLIBBLKDEV
.9 rts
@@ -94,14 +100,17 @@ CS.RUN ldy #S.PS.ARGC
lda (pPS),y
beq .99
-.1 inc ArgIndex
- lda ArgIndex
- >SYSCALL ArgV
- bcc .11
+ ldx #6
- jmp .8
+.10 lda Disk2.Default,x
+ sta BlkCnt,x
+ dex
+ bpl .10
-.11 >STYA ZPPtr1
+.1 jsr CS.RUN.NextArg
+ bcs .8
+
+ >STYA ZPPtr1
lda (ZPPtr1)
cmp #'-'
bne .4
@@ -112,72 +121,53 @@ CS.RUN ldy #S.PS.ARGC
cmp #'0'
bcc .2
+
cmp #'9'+1
bcs .2
+
and #$0F
sta CatSize
-.10 bra .1
+ bra .1
.2 jsr CS.RUN.CheckOpt
bcs .99
- cpy #bCustomBlkSize
- bne .1
-
- inc ArgIndex
- lda ArgIndex
- >SYSCALL ArgV
- bcs .99
-
- >SYSCALL AToI
- >STYA BlkCnt
bra .1
-.99 >LDYA L.MSG.USAGE1
- >SYSCALL PutS
- >LDYA L.MSG.USAGE2
- >SYSCALL Puts
- lda #E.SYN
- sec
-.9 rts
-
.4 lda hDevID
bne .5 Already have a dev...go get VolName
- >LDYA ZPPtr1
- >SYSCALL GetDevByName
- bcs .9
+ jsr CS.RUN.GetDev
+ bcc .1
+
+ rts
- stx hDevID
- >STYA ZPPtrFD
+.5 jsr CS.RUN.GetVolName
+ bcc .1
+
+ rts
- >LDYA ZPPtr1
- >STYA ZPPtrDevName
- bra .10
+.99 >LDYA L.MSG.USAGE1
+ >SYSCALL PutS
+ >LDYA L.MSG.USAGE2
+ >SYSCALL PutS
-.5 ldy #$ff
-
-.6 iny
- lda (ZPPtr1),y
- sta (pData),y VolName
- beq .10
-
- cpy #16
- bcc .6
- bra .99 VolName too long
+ lda #E.SYN
+ sec
+.9 rts
.8 lda hDevID
beq .99
*--------------------------------------
CS.RUN.Format jsr CS.RUN.GetDevDIB
- bcs .99
+ bcs .9
>PUSHW L.MSG.INIT
>PUSHW ZPPtrDevName
- >PUSHEA.G VolName
+ >PUSHW pData >PUSHEA.G VolName
>PUSHBI 4
>SYSCALL PrintF
- bcs .99
+ bcs .9
jsr CS.RUN.GET.DSSS0000
@@ -194,8 +184,7 @@ CS.RUN.Format jsr CS.RUN.GetDevDIB
bcs .9
jsr CS.RUN.WriteCat
-
-.99 bcs .9
+ bcs .9
>LDYA L.MSG.OK
>SYSCALL PutS
@@ -221,10 +210,158 @@ CS.RUN.Format jsr CS.RUN.GetDevDIB
sec
rts
*--------------------------------------
-CS.RUN.GetDevDIB
- lda bCustomBlkSize
- bmi .8
+CS.RUN.CheckOpt ldy #1
+ lda (ZPPtr1),y
+ ldx #OptionList.Cnt-1
+
+.2 cmp OptionList,x
+ beq .3
+
+ dex
+ bpl .2
+
+ sec
+ rts
+
+.3 txa
+ and #$fe
+ tax
+ jmp (J.Opts,x)
+*--------------------------------------
+CS.RUN.OptA sec
+ ror bAltBB
+
+ clc
+ rts
+*--------------------------------------
+CS.RUN.OptB jsr CS.RUN.NextArg
+ bcs .9
+
+ >SYSCALL AToI
+ >STYA BlkCnt
+
+ sec
+ ror bCustomBlkSize
+
+ clc
+
+.9 rts
+*--------------------------------------
+CS.RUN.OptD lda #2
+ sta HeadCnt
+
+ lda #$80
+ tsb VolNum
+
+ clc
+ rts
+*--------------------------------------
+CS.RUN.OptV sec
+ ror bVerify
+*--------------------------------------
+CS.RUN.OptL sec
+ ror bLL
+
+ clc
+ rts
+*--------------------------------------
+CS.RUN.OptS jsr CS.RUN.NextArg
+ bcs .99
+
+ >SYSCALL AToI
+ tax
+ bne .9
+
+ tya
+ beq .9
+
+ cmp #5
+ bcs .99
+
+ sta Stepping
+ cmp #4
+ beq .8
+
+ tsb VolNum
+
+ sec
+ ror bAltBB
+
+.8 clc
+ rts
+
+.9 sec
+
+.99 rts
+*--------------------------------------
+CS.RUN.OptT jsr CS.RUN.NextArg
+ bcs .99
+
+ >SYSCALL AToI
+ tax
+ bne .9
+
+ tya
+ beq .9
+
+ sta TrkCnt
+
+ clc
+ rts
+
+.9 sec
+
+.99 rts
+*--------------------------------------
+CS.RUN.NextArg inc ArgIndex
+ lda ArgIndex
+ >SYSCALL ArgV
+ rts
+*--------------------------------------
+CS.RUN.GetDev >LDYA ZPPtr1
+ >SYSCALL GetDevByName
+ bcs .9
+
+ stx hDevID
+ >STYA ZPPtrFD
+
+ >LDYA ZPPtr1
+ >STYA ZPPtrDevName
+
+.9 rts
+*--------------------------------------
+CS.RUN.GetVolName
+ lda (pData)
+ bne .9
+
+ lda (ZPPtr1)
+ jsr CS.RUN.IsL
+ bcs .9
+
+ sta (pData) VolName
+
+ ldy #0
+
+.1 iny
+ lda (ZPPtr1),y
+ sta (pData),y
+* clc
+ beq .8 \0
+
+ jsr CS.RUN.IsDOrL
+ bcs .9
+
+ cpy #16
+ bcc .1 VolName too long ?
+
+.9 lda #E.SYN
+
+ sec
+
+.8 rts
+*--------------------------------------
+CS.RUN.GetDevDIB
>LEA.G DIB
>STYA.G IOCTL+S.IOCTL.BUFPTR
@@ -237,6 +374,9 @@ CS.RUN.GetDevDIB
>SYSCALL IOCTL
bcs .9
+ lda bCustomBlkSize
+ bmi .8
+
>LDA.G DIB+S.DIB.SIZE
tax
iny
@@ -277,37 +417,7 @@ CS.RUN.GET.DSSS0000
rts
*--------------------------------------
-CS.RUN.LL >LDA.G DIB+S.DIB.T
- cmp #S.DIB.T.DISKII
- bne .1
-
- lda #0
- bit bExtraTrack
- bpl .10
-
- ora #8
-
-.10 bit bHighDensity
- bpl .11
-
- ora #16
-
-.11 bit bDS
- bpl .12
-
- ora #32
-
-.12 tay
- ldx #0
-
-.13 lda Disk2.Default,y
- sta BlkCnt,x
- iny
- inx
- cpx #7
- bne .13
-
-.1 >PUSHW L.MSG.LL
+CS.RUN.LL >PUSHW L.MSG.LL
>PUSHW BlkCnt
>PUSHBI 2
>SYSCALL PrintF
@@ -596,10 +706,10 @@ CS.RUN.InitCat lda CatSize
lda #4
sta CatSize
-.1 >LDA.G VolName
+.1 lda (pData) >LDA.G VolName
bne .8 Volume name ok
- >PUSHEA.G VolName
+ >PUSHW pData >PUSHEA.G VolName
>PUSHW L.FMT.BLANK
>PUSHW A2osX.TIMER16
>PUSHW A2osX.RANDOM16
@@ -642,18 +752,20 @@ CS.RUN.BuildCat jsr .7
jsr .7
- >PUSHEA.G VolName
+ >PUSHW pData >PUSHEA.G VolName
>PUSHW.G IOCTL+S.IOCTL.BUFPTR
>LIBCALL hLIBBLKDEV,LIBBLKDEV.BuildProDOSCat
.9 rts
.7 >PUSHW BlkCnt
>PUSHB CatSize
- >PUSHB AltBB
+ >PUSHB bAltBB
rts
*--------------------------------------
-CS.RUN.WriteCat >LDYA L.MSG.WRITECAT
- >SYSCALL PutS
+CS.RUN.WriteCat >PUSHW L.MSG.WRITECAT
+ >PUSHBI 0
+ >SYSCALL PrintF
+ bcs .9
>STZ.G IOCTL+S.IOCTL.BLKNUM
iny
@@ -709,26 +821,6 @@ CS.QUIT lda hCatBuf
.8 clc
rts
*--------------------------------------
-CS.RUN.CheckOpt ldy #1
- lda (ZPPtr1),y
-
- ldx #OptionVars-OptionList-1
-
-.2 cmp OptionList,x
- beq .3
-
- dex
- bpl .2
-
- sec
- rts
-
-.3 ldy OptionVars,x
- ldx #$ff
- stx 0,y
- clc
- rts
-*--------------------------------------
CS.RUN.Wait sta TimeOut
.1 jsr CS.RUN.CheckCtrlC
@@ -764,6 +856,36 @@ CS.RUN.CheckCtrlC
plx
rts
*--------------------------------------
+CS.RUN.IsDOrL cmp #'0'
+ bcc CS.RUN.IsL
+
+ cmp #'9'+1
+ bcc CS.RUN.IsL.RTS
+
+CS.RUN.IsL cmp #'_'
+ clc
+ beq CS.RUN.IsL.RTS
+
+ cmp #'.'
+ clc
+ beq CS.RUN.IsL.RTS
+
+ cmp #'A'
+ bcc CS.RUN.IsL.9
+
+ cmp #'Z'+1
+ bcc CS.RUN.IsL.RTS
+
+ cmp #'a'
+ bcc CS.RUN.IsL.9
+
+ cmp #'z'+1
+
+CS.RUN.IsL.RTS rts
+
+CS.RUN.IsL.9 sec
+ rts
+*--------------------------------------
CS.END
*--------------------------------------
LIBBLKDEV .AZ "libblkdev"
@@ -771,15 +893,15 @@ hLIBBLKDEV .BS 1
*--------------------------------------
MSG.USAGE1 .CS "Usage : FORMAT [VOL.NAME]\r\n"
.CS " -L : Low-Level Format\r\n"
- .CS "-L -V : Verify After LLF\r\n"
- .CS " -B xxxx : Smrtprt, Override Device block size\r\n"
- .CZ " -1-9 : Catalog Size (Blocks)\r\n"
+ .CS " -V : Verify After LLF\r\n"
+ .CS " -B xxxx : Volume size (blocks)\r\n"
+ .CZ " -1-9 : Catalog Size (blocks)"
MSG.USAGE2 .CS "------- ProDOS.FX only ------\r\n"
- .CS " -H : 35trk drives, High Density: 48 tracks, 384 Blocks\r\n"
- .CS " -X : 40trk drives, 320 Blocks\r\n"
- .CS "-H -X : 40trk drives, 432 Blocks\r\n"
- .CS " -D : Rana Elite II 640 Blocks, 2 Sides\r\n"
- .CZ "-H -D : Rana Elite III 1280 Blocks, 2 Sides\r\n"
+ .CS " -A : Alternate boot block\r\n"
+ .CS " -D : Dual sided\r\n"
+ .CS " -S x : Quarter track stepping\r\n"
+ .CZ " -T xxx : Track count\r\n"
+*--------------------------------------
MSG.OK .CZ "[OK]"
MSG.ERR .CS "[%h]"
MSG.CRLF .CZ "\r\n"
@@ -791,75 +913,15 @@ MSG.VERIFY .CZ "\rVerifying Head %d/Track %02d/Block %d (%05D)..."
MSG.WRITECAT .CZ "Writing Catalog..."
FMT.BLANK .CZ "BLANK%H%H"
*--------------------------------------
-OptionList .AS "LlBbHhXxDdVv"
-OptionVars .DA #bLL,#bLL,#bCustomBlkSize,#bCustomBlkSize
- .DA #bHighDensity,#bHighDensity,#bExtraTrack,#bExtraTrack
- .DA #bDS,#bDS
- .DA #bVerify,#bVerify
+OptionList .AS "AaBbDdLlSsTtVv"
+OptionList.cnt .EQ *-OptionList
*--------------------------------------
Disk2.Default .DA 280 BlkCnt
.DA #35 TrkCnt
.DA #4 Stepping
.DA #$00 VolNum
- .DA #0 AltBB
+ .DA #0 bAltBB
.DA #1 HeadCnt
- .BS 1
-*--------------------------------------
-Disk2.X .DA 320 BlkCnt
- .DA #40 TrkCnt
- .DA #4 Stepping
- .DA #$00 VolNum
- .DA #0 AltBB
- .DA #1 HeadCnt
- .BS 1
-*--------------------------------------
-Disk2.H .DA 384 BlkCnt
- .DA #48 TrkCnt
- .DA #3 Stepping
- .DA #$03 VolNum
- .DA #$80 AltBB
- .DA #1 HeadCnt
- .BS 1
-*--------------------------------------
-Disk2.HX .DA 432 BlkCnt
- .DA #54 TrkCnt
- .DA #3 Stepping
- .DA #$03 VolNum
- .DA #$80 AltBB
- .DA #1 HeadCnt
- .BS 1
-*-------------------------------------- RANA Elite 2
-Disk2.DefaultD .DA 640 BlkCnt
- .DA #40 TrkCnt
- .DA #4 Stepping
- .DA #$84 VolNum
- .DA #$80 AltBB
- .DA #2 HeadCnt
- .BS 1
-*--------------------------------------
-Disk2.XD .DA 640 BlkCnt
- .DA #40 TrkCnt
- .DA #4 Stepping
- .DA #84 VolNum
- .DA #$80 AltBB
- .DA #2 HeadCnt
- .BS 1
-*-------------------------------------- RANA Elite 3
-Disk2.HD .DA 1280 BlkCnt
- .DA #80 TrkCnt
- .DA #2 Stepping
- .DA #$82 VolNum
- .DA #$80 AltBB
- .DA #2 HeadCnt
- .BS 1
-*--------------------------------------
-Disk2.HXD .DA 1280 BlkCnt
- .DA #80 TrkCnt
- .DA #2 Stepping
- .DA #$82 VolNum
- .DA #$80 AltBB
- .DA #2 HeadCnt
- .BS 1
*--------------------------------------
.DUMMY
.OR 0
diff --git a/BIN/LC.S.txt b/BIN/LC.S.txt
index 8fc562e9..c9b10acf 100644
--- a/BIN/LC.S.txt
+++ b/BIN/LC.S.txt
@@ -196,9 +196,10 @@ CS.RUN.DIR lda (ZPFileName)
>SYSCALL PrintF
bcs .9
- >PUSHW ZPFullPath
jsr CS.RUN.GetNewPath
- >PUSHYA
+
+ >PUSHW ZPFullPath
+ >PUSHW ZPNewPath
>SYSCALL Rename
jsr CS.RUN.CheckErr
bcs .9
diff --git a/BIN/SH.S.CMD.txt b/BIN/SH.S.CMD.txt
index ec62c92a..1eb79863 100644
--- a/BIN/SH.S.CMD.txt
+++ b/BIN/SH.S.CMD.txt
@@ -98,7 +98,7 @@ CMD..EXEC.YAX jsr CORE.Load.YAX Y,A = Args, X = Code
bcs CMD.SHIFTA.RTS
lda #$C0+C..
- jmp CORE.StkPush
+ jmp STK.Push
CMD...9 jmp CMD.E.CSYN
*--------------------------------------
@@ -189,6 +189,7 @@ CMD.CD.YA >PUSHYA
beq .11
lda #MLI.E.INVPATH
+
.19 pha
lda ZPTmpW
>SYSCALL FreeMem
@@ -607,7 +608,7 @@ CMD.REN lda (ZPArgVBufPtr)
*--------------------------------------
CMD.FUNCTION lda (ZPArgVBufPtr)
beq .9
- jsr CORE.StkGetCtx
+ jsr STK.GetCtx
bcc .9 No context allowed
>LDA.G hFunctions
@@ -713,7 +714,7 @@ CMD.CALL jsr CMD.CALL.GETFUNC
bcs CMD.CALL.RTS
lda #$C0+C.CALL
- jmp CORE.StkPush
+ jmp STK.Push
*--------------------------------------
CMD.CALL.GETFUNC
>LDA.G hFunctions
@@ -738,7 +739,7 @@ CMD.EXIT lda (ZPArgVBufPtr)
.1 ldy #S.PS.RC
sta (pPS),y
-.2 jsr CORE.StkPull Pull everything until CALL . CL...
+.2 jsr STK.Pull Pull everything until CALL . CL...
bcs .9
cmp #$C0+C.. in CALL, "." or CL context ?
@@ -750,7 +751,7 @@ CMD.EXIT lda (ZPArgVBufPtr)
cmp #$C0+C.CLEXEC
beq .8
- jsr CORE.StkPopCtxA
+ jsr STK.PopCtxA
bcc .2
rts
@@ -761,25 +762,25 @@ CMD.EXIT lda (ZPArgVBufPtr)
clc
.9 rts
*--------------------------------------
-CMD.EXIT.FILE jsr CORE.StkPullFree Code buffer
+CMD.EXIT.FILE jsr STK.PullFree Code buffer
ldy #S.PS.hARGV
lda (pPS),y
>SYSCALL FreeMem ArgV buffer
- jsr CORE.StkPull
+ jsr STK.Pull
ldy #S.PS.hARGV
sta (pPS),y
- jsr CORE.StkPull
+ jsr STK.Pull
ldy #S.PS.ARGC
sta (pPS),y
- jsr CORE.StkPullInputBufPtr
+ jsr STK.PullInputBufPtr
- jsr CORE.StkPull
+ jsr STK.Pull
sta ZPInputBuf
- jsr CORE.StkPull
+ jsr STK.Pull
sta ZPInputBuf+1
ldy #S.PS.RC
@@ -788,19 +789,44 @@ CMD.EXIT.FILE jsr CORE.StkPullFree Code buffer
clc
rts
*--------------------------------------
-CMD.BREAK jsr CORE.StkGetCtx Get context in CORE.TestResult
+CMD.BREAK jsr STK.GetCtx Get context in CORE.TestResult
bcs .9
+
tax
and #$3F
- cmp #C.CASE
- bne .9
- txa
- bpl .8
- jsr CORE.StkPull remove C.CASE
- jsr CORE.StkGet
- and #$7F
- sta (pData),y
+ cmp #C.CASE
+ bne .1
+
+ txa
+ bpl .8 already FALSE
+
+ jsr STK.Pull remove C.CASE
+ jsr STK.Get get SWITCH
+ bra .7
+*--------------------------------------
+.1 cmp #C.IF
+ bne .2
+
+ sta (pData),y IF=false to skip until FI
+
+ dey get parent context
+ beq .9
+
+ lda (pData),y
+ and #$3F
+
+.2 cmp #C.WHILE
+ beq .6
+
+.3 cmp #C.FOR
+ bne .9
+
+.6 lda (pData),y
+
+.7 and #%01111111
+ sta (pData),y WHILE/FOR=false, Parent=unchanged
+
.8 clc
rts
@@ -809,41 +835,51 @@ CMD.BREAK jsr CORE.StkGetCtx Get context in CORE.TestResult
* stack-1 hVALUE
* stack SWITCH TOKEN
*--------------------------------------
-CMD.SWITCH jsr CORE.StkGetCtx
+CMD.SWITCH jsr STK.GetCtx
lda #2
- jsr CORE.StkCheck
+ jsr STK.Check
bcs .9
+
jsr EXP.GET
bcs .9
+
>SYSCALL StrDup
bcs .9
txa
- jsr CORE.StkPush Push EXP hVALUE
+ jsr STK.Push Push EXP hVALUE
lda CORE.TestResult
beq .1
+
ora #$80
+
.1 ora #C.SWITCH
- jmp CORE.StkPush
+ jmp STK.Push
+
.9 rts
*--------------------------------------
-CMD.CASE jsr CORE.StkGetCtx Get context in CORE.TestResult
-
+CMD.CASE jsr STK.GetCtx Get context in CORE.TestResult
bcs .9
+
tax
and #$3F
cmp #C.SWITCH
beq .1
+
cmp #C.CASE
bne .9
+
txa previous case was true ?
bpl .10
+
jsr EXP.GET skip expression
bcs .9
+
rts keep existing context
-.10 jsr CORE.StkPull remove previous C.CASE
+
+.10 jsr STK.Pull remove previous C.CASE
bra CMD.CASE
.1 jsr EXP.GET
@@ -862,13 +898,13 @@ CMD.CASE jsr CORE.StkGetCtx Get context in CORE.TestResult
eor #$80
ora CORE.TestResult
ora #C.CASE
- jmp CORE.StkPush
+ jmp STK.Push
.9
CMD.E.CSYN lda #E.CSYN
sec
rts
*--------------------------------------
-CMD.DEFAULT jsr CORE.StkGetCtx Get context in CORE.TestResult
+CMD.DEFAULT jsr STK.GetCtx Get context in CORE.TestResult
bcs CMD.E.CSYN
and #$3F
@@ -879,14 +915,14 @@ CMD.DEFAULT jsr CORE.StkGetCtx Get context in CORE.TestResult
cmp #C.CASE
bne CMD.E.CSYN
- jsr CORE.StkPull remove C.CASE
+ jsr STK.Pull remove C.CASE
-.1 jsr CORE.StkGet
+.1 jsr STK.Get
and #$C0
ora #C.DEFAULT
- jmp CORE.StkPush
+ jmp STK.Push
*--------------------------------------
-CMD.END jsr CORE.StkGetCtx Get context in CORE.TestResult
+CMD.END jsr STK.GetCtx Get context in CORE.TestResult
bcs CMD.E.CSYN
and #$3F
@@ -900,9 +936,9 @@ CMD.END jsr CORE.StkGetCtx Get context in CORE.TestResult
cmp #C.DEFAULT
bne CMD.E.CSYN
-.8 jmp CORE.StkPopCtx
+.8 jmp STK.PopCtx
*--------------------------------------
-CMD.FOR jsr CORE.StkGetCtx
+CMD.FOR jsr STK.GetCtx
lda (ZPArgVBufPtr)
beq CMD.E.CSYN
@@ -922,7 +958,7 @@ CMD.FOR jsr CORE.StkGetCtx
beq CMD.E.CSYN
lda #8 Make sure 8 bytes free on stack
- jsr CORE.StkCheck
+ jsr STK.Check
bcs FOR.FILE.9
lda (ZPArgVBufPtr)
@@ -939,19 +975,19 @@ CMD.FOR.LIST >LDYA ZPArgVBufPtr
phy
pha
- jsr CORE.StkPushInputBufPtr Push CmdPtr AFTER FOR
+ jsr STK.PushInputBufPtr Push CmdPtr AFTER FOR
pla
ply
- jsr CORE.StkPushYAX Push listPtr,hList
+ jsr STK.PushYAX Push listPtr,hList
jsr CORE.PushVarName Push hVARNAME
lda #C.FOR.LIST
- jsr CORE.StkPush
+ jsr STK.Push
lda #C.FOR
- jsr CORE.StkPush
+ jsr STK.Push
jsr CMD.NEXT.LIST.TOKEN
bcc CMD.FOR.LOOP
@@ -981,18 +1017,18 @@ CMD.FOR.EXEC jsr CORE.ArgV.NextChar skip "`"
CMD.FOR.PUSH pha save hFILE/hPIPE
- jsr CORE.StkPushInputBufPtr Push CmdPtr AFTER FOR
+ jsr STK.PushInputBufPtr Push CmdPtr AFTER FOR
pla
- jsr CORE.StkPush push hPIPE for read
+ jsr STK.Push push hPIPE for read
jsr CORE.PushVarName Push hVARNAME
* bcs FOR.FILE.9
lda #C.FOR.FILEEXEC
- jsr CORE.StkPush
+ jsr STK.Push
lda #C.FOR
- jsr CORE.StkPush
+ jsr STK.Push
jsr CMD.NEXT.LINE
bcs FOR.FILE.9
@@ -1008,7 +1044,7 @@ CMD.FOR.LOOP ora CORE.TestResult
* clc
rts
*--------------------------------------
-CMD.NEXT jsr CORE.StkGet Y = StkPtr
+CMD.NEXT jsr STK.Get Y = StkPtr
bcs .9
and #$3F
@@ -1204,7 +1240,7 @@ CMD.NEXT.GetVarNamePtr
rts
*--------------------------------------
CMD.WHILE
-CMD.IF jsr CORE.StkGetCtx
+CMD.IF jsr STK.GetCtx
bit #$40 Parent is true ?
beq .3
@@ -1217,35 +1253,36 @@ CMD.IF jsr CORE.StkGetCtx
bne .8
lda #3
- jsr CORE.StkCheck
+ jsr STK.Check
bcs CMD.NEXT.LINE.RTS
>LDYA ZPInputCmdPtr
- jsr CORE.StkPushYA Push BEFORE WHILE/IF
+ jsr STK.PushYA Push BEFORE WHILE/IF
.8 lda CORE.TestResult
ora CORE.IntCmd
- jmp CORE.StkPush
+ jmp STK.Push
*--------------------------------------
-CMD.LOOP jsr CORE.StkPull
+CMD.LOOP jsr STK.Pull
bcs .9
tax
and #$3F
cmp #C.WHILE
bne .9
+
txa
bmi .8 true, loop
- jmp CORE.StkPopCtxA false, Discard loop Ptr
+ jmp STK.PopCtxA false, Discard loop Ptr
-.8 jmp CORE.StkPullInputBufPtr
+.8 jmp STK.PullInputBufPtr
.9 lda #E.NOWHILE
sec
rts
*--------------------------------------
-CMD.ELSE jsr CORE.StkGet
+CMD.ELSE jsr STK.Get
bcs .9
bit #$40 parent is true ?
@@ -1255,9 +1292,11 @@ CMD.ELSE jsr CORE.StkGet
and #$3F
cmp #C.IF
bne .9
+
txa
eor #$80 toggle and store at stack ptr
sta (pData),y
+
.8 clc
rts
.9
@@ -1265,7 +1304,7 @@ CMD.ELSE.NOIF lda #E.NOIF
sec
rts
*--------------------------------------
-CMD.FI jsr CORE.StkPull
+CMD.FI jsr STK.Pull
bcs CMD.ELSE.NOIF
and #$3F
diff --git a/BIN/SH.S.CORE.txt b/BIN/SH.S.CORE.txt
index 00ff7391..84db436f 100644
--- a/BIN/SH.S.CORE.txt
+++ b/BIN/SH.S.CORE.txt
@@ -35,21 +35,21 @@ CORE.Load.YAX stx LOAD.hCode X = Code to Execute
sta LOAD.ArgCnt A = ARGC
lda #8
- jsr CORE.StkCheck
+ jsr STK.Check
bcs .9
>LDYA ZPInputBuf
- jsr CORE.StkPushYA
+ jsr STK.PushYA
- jsr CORE.StkPushInputBufPtr
+ jsr STK.PushInputBufPtr
ldy #S.PS.ARGC
lda (pPS),y
- jsr CORE.StkPush old ARGC
+ jsr STK.Push old ARGC
ldy #S.PS.hARGV
lda (pPS),y
- jsr CORE.StkPush old hARGV
+ jsr STK.Push old hARGV
ldy #S.PS.ARGC
lda LOAD.ArgCnt new ARGC
@@ -61,7 +61,7 @@ CORE.Load.YAX stx LOAD.hCode X = Code to Execute
sta (pPS),y new hARGV
lda LOAD.hCode new code
- jsr CORE.StkPush
+ jsr STK.Push
* lda LOAD.hCode
>SYSCALL GetMemPtr
>STYA ZPInputBuf
@@ -95,7 +95,7 @@ CORE.Load.YAX stx LOAD.hCode X = Code to Execute
* set hStdIn = hStdOut
* set hStdOut = Std
*--------------------------------------
-CORE.Run.EOF jsr CORE.StkPull
+CORE.Run.EOF jsr STK.Pull
bcs *
cmp #$C0+C.. check CALL . CL context
beq .1
@@ -198,7 +198,7 @@ CORE.Run.4 >LDYA L.CMD internal command ?
.41 stx CORE.IntCmd
jsr CORE.SkipCharsA
-.42 jsr CORE.StkGet
+.42 jsr STK.Get
bcs CORE.Run.5 no particular context, exec...
tax
@@ -794,191 +794,6 @@ CORE.SListGetData
>SYSCALL SListGetData X = hMem
rts
*--------------------------------------
-* Stack
-*--------------------------------------
-CORE.StkPopCtx jsr CORE.StkPull
-
-CORE.StkPopCtxA and #$3F
- cmp #C.IF
- beq .8 IF : Nothing
-
- ldx #2
- cmp #C.WHILE WHILE : One Ptr = 2 bytes
- beq CORE.StkPopX
-
- cmp #C.SWITCH SWITCH : hValue
- beq .2
-
- ldx #1
- cmp #C.CASE CASE : C.CASE + hValue
- beq .1
-
- cmp #C.FOR
- beq .3
-
- cmp #C.DEFAULT DEFAULT : C.DEFAULT + hValue
- bne .9
-
-.1 jsr CORE.StkPopX
-
-.2 jsr CORE.StkPullFree
-
-.8 clc
- rts
-
-.3 jsr CORE.StkPull Get FOR sub cmd
- beq .4 FOR List
-
- jsr CORE.StkPullFree hVARNAME
-
- jsr CORE.StkPullFClose hFILE/hPIPE
-
- ldx #2 CmdPtr
- jmp CORE.StkPopX
-
-.4 jsr CORE.StkPullFree hVARNAME
-
- jsr CORE.StkPullFClose hFILE/hPIPE
-
- ldx #4 ListPtr,CmdPtr
- jmp CORE.StkPopX
-
-.9 lda #E.STACKERROR
- sec
- rts
-*--------------------------------------
-CORE.StkPopX lda (pData)
-.1 dec
- dex
- bne .1
-
- sta (pData)
-
- clc
- rts
-*--------------------------------------
-CORE.StkCheck sec
- adc (pData) StackPtr
- cmp #CORE.STACK.MAX
- bcc .8
-
- lda #E.STKOVERFLOW
-* sec
-.8 rts
-*--------------------------------------
-CORE.StkPushYAX phx
- jsr CORE.StkPushYA
- bcc CORE.StkPush.1
-
- plx
- rts
-*--------------------------------------
-CORE.StkPushInputBufPtr
- >LDYA ZPInputBufPtr
-*--------------------------------------
-CORE.StkPushYA phy
- jsr CORE.StkPush
- bcc CORE.StkPush.1
-
- plx
- rts
-*--------------------------------------
-CORE.PushVarName
- >LDYA ZPVarNamePtr
- >SYSCALL StrDup
- bcs CORE.StkPush.RTS
-
- txa
-*--------------------------------------
-CORE.StkPush pha
-
-CORE.StkPush.1 lda (pData) StackPtr
- inc
- cmp #CORE.STACK.MAX
- bcs .9
-
- sta (pData) StackPtr
- tay
- pla
- sta (pData),y
-* clc
- rts
-
-.9 pla
- lda #E.STKOVERFLOW
-* sec
-CORE.StkPush.RTS
- rts
-*--------------------------------------
-CORE.StkGetCtx jsr CORE.StkGet
- tax
- bcs .1 no context...
-
- cmp #$C0+C.. in a call...
- beq .1 CS
-
- cmp #$C0+C.CALL
- beq .1 CS
-
- cmp #$C0+C.CLEXEC
- beq .1 CS
-
- and #$80 get current..
- lsr becomes parent
- bra .8
-
-.1 lda #$40 ...set Parent = true
-
-.8 sta CORE.TestResult
-
- txa
- rts
-*--------------------------------------
-CORE.StkPullInputBufPtr
- jsr CORE.StkPull
- bcs .9
-
- sta ZPInputBufPtr
- jsr CORE.StkPull
- bcs .9
-
- sta ZPInputBufPtr+1
-
-.9 rts
-*--------------------------------------
-CORE.StkPullFClose
- jsr CORE.StkPull
- >SYSCALL FClose
- rts
-*--------------------------------------
-CORE.StkPullFree
- jsr CORE.StkPull
- >SYSCALL FreeMem
- rts
-*--------------------------------------
-CORE.StkPull jsr CORE.StkGet
- bcs .9
-
- dey
- pha
- tya
- sta (pData) StackPtr
- pla
-
-.9 rts
-*--------------------------------------
-CORE.StkGet lda (pData) StackPtr
- beq .9
-
- tay
- lda (pData),y
- clc
- rts
-
-.9 lda #E.STACKERROR
- sec
- rts
-*--------------------------------------
MAN
SAVE usr/src/bin/sh.s.core
LOAD usr/src/bin/sh.s
diff --git a/BIN/SH.S.STK.txt b/BIN/SH.S.STK.txt
new file mode 100644
index 00000000..1887fb3a
--- /dev/null
+++ b/BIN/SH.S.STK.txt
@@ -0,0 +1,188 @@
+NEW
+ AUTO 3,1
+*--------------------------------------
+STK.PopCtx jsr STK.Pull
+
+STK.PopCtxA and #$3F
+ cmp #C.IF
+ beq .8 IF : Nothing
+
+ ldx #2
+ cmp #C.WHILE WHILE : One Ptr = 2 bytes
+ beq STK.PopX
+
+ cmp #C.SWITCH SWITCH : hValue
+ beq .2
+
+ ldx #1
+ cmp #C.CASE CASE : C.CASE + hValue
+ beq .1
+
+ cmp #C.FOR
+ beq .3
+
+ cmp #C.DEFAULT DEFAULT : C.DEFAULT + hValue
+ bne .9
+
+.1 jsr STK.PopX
+
+.2 jsr STK.PullFree
+
+.8 clc
+ rts
+
+.3 jsr STK.Pull Get FOR sub cmd
+ beq .4 FOR List
+
+ jsr STK.PullFree hVARNAME
+
+ jsr STK.PullFClose hFILE/hPIPE
+
+ ldx #2 CmdPtr
+ jmp STK.PopX
+
+.4 jsr STK.PullFree hVARNAME
+
+ jsr STK.PullFClose hFILE/hPIPE
+
+ ldx #4 ListPtr,CmdPtr
+ jmp STK.PopX
+
+.9 lda #E.STACKERROR
+ sec
+ rts
+*--------------------------------------
+STK.PopX lda (pData)
+.1 dec
+ dex
+ bne .1
+
+ sta (pData)
+
+ clc
+ rts
+*--------------------------------------
+STK.Check sec
+ adc (pData) StackPtr
+ cmp #CORE.STACK.MAX
+ bcc .8
+
+ lda #E.STKOVERFLOW
+* sec
+.8 rts
+*--------------------------------------
+STK.PushYAX phx
+ jsr STK.PushYA
+ bcc STK.Push.1
+
+ plx
+ rts
+*--------------------------------------
+STK.PushInputBufPtr
+ >LDYA ZPInputBufPtr
+*--------------------------------------
+STK.PushYA phy
+ jsr STK.Push
+ bcc STK.Push.1
+
+ plx
+ rts
+*--------------------------------------
+CORE.PushVarName
+ >LDYA ZPVarNamePtr
+ >SYSCALL StrDup
+ bcs STK.Push.RTS
+
+ txa
+*--------------------------------------
+STK.Push pha
+
+STK.Push.1 lda (pData) StackPtr
+ inc
+ cmp #CORE.STACK.MAX
+ bcs .9
+
+ sta (pData) StackPtr
+ tay
+ pla
+ sta (pData),y
+* clc
+ rts
+
+.9 pla
+ lda #E.STKOVERFLOW
+* sec
+STK.Push.RTS
+ rts
+*--------------------------------------
+STK.GetCtx jsr STK.Get
+ tax
+ bcs .1 no context...
+
+ cmp #$C0+C.. in a call...
+ beq .1 CS
+
+ cmp #$C0+C.CALL
+ beq .1 CS
+
+ cmp #$C0+C.CLEXEC
+ beq .1 CS
+
+ and #$80 get current..
+ lsr becomes parent
+ bra .8
+
+.1 lda #$40 ...set Parent = true
+
+.8 sta CORE.TestResult
+
+ txa
+ rts
+*--------------------------------------
+STK.PullInputBufPtr
+ jsr STK.Pull
+ bcs .9
+
+ sta ZPInputBufPtr
+ jsr STK.Pull
+ bcs .9
+
+ sta ZPInputBufPtr+1
+
+.9 rts
+*--------------------------------------
+STK.PullFClose jsr STK.Pull
+ >SYSCALL FClose
+ rts
+*--------------------------------------
+STK.PullFree jsr STK.Pull
+ >SYSCALL FreeMem
+ rts
+*--------------------------------------
+STK.Pull jsr STK.Get
+ bcs .9
+
+ dey
+ pha
+ tya
+ sta (pData) StackPtr
+ pla
+
+.9 rts
+*--------------------------------------
+STK.Get lda (pData) StackPtr
+ beq .9
+
+ tay
+ lda (pData),y
+ clc
+ rts
+
+.9 lda #E.STACKERROR
+ sec
+ rts
+*--------------------------------------
+MAN
+SAVE usr/src/bin/sh.s.stk
+LOAD usr/src/bin/sh.s
+ASM
diff --git a/BIN/SH.S.txt b/BIN/SH.S.txt
index f5562f7d..1d118785 100644
--- a/BIN/SH.S.txt
+++ b/BIN/SH.S.txt
@@ -206,9 +206,9 @@ CS.INIT clc
CS.RUN jsr CL.Init
jsr CORE.Init
- lda #0
- jsr GetArgV
- >STYA.G SH
+* lda #0
+* jsr GetArgV
+* >STYA.G SH
ldy #S.PS.ARGC
lda (pPS),y
@@ -397,7 +397,7 @@ CS.RUN.CMDLINE >SYSCALL StrDup
bcs CS.RUN.CMDLINE.9
lda #$C0+C.CLEXEC
- jsr CORE.StkPush
+ jsr STK.Push
bra CS.RUN.LOOP.RUN
@@ -439,7 +439,7 @@ CS.RUN.LOOP.END ldy #S.PS.RC
and #bState.SET.E
bne CS.RUN.LOOP.80
-.1 jsr CORE.StkGet
+.1 jsr STK.Get
cmp #$C0+C.CLEXEC
beq .8
@@ -449,13 +449,13 @@ CS.RUN.LOOP.END ldy #S.PS.RC
cmp #$C0+C.CALL in CALL ?
beq .7
- jsr CORE.StkPopCtx
+ jsr STK.PopCtx
bcc .1
.7 jsr IO.PrintBatchErrMsg
bcs CS.RUN.LOOP.RTS
- jsr CORE.StkPull
+ jsr STK.Pull
jsr CMD.EXIT.FILE
.8 jsr IO.PrintErrMsg
@@ -601,11 +601,12 @@ PrintYANoCR >PUSHYA
rts
*--------------------------------------
.INB usr/src/bin/sh.s.cl
- .INB usr/src/bin/sh.s.his
- .INB usr/src/bin/sh.s.core
- .INB usr/src/bin/sh.s.io
.INB usr/src/bin/sh.s.cmd
+ .INB usr/src/bin/sh.s.core
.INB usr/src/bin/sh.s.exp
+ .INB usr/src/bin/sh.s.his
+ .INB usr/src/bin/sh.s.io
+ .INB usr/src/bin/sh.s.stk
*--------------------------------------
CS.END
*--------------------------------------
@@ -737,7 +738,7 @@ 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
+*SH .BS 2
hAliases .BS 1
hFunctions .BS 1
diff --git a/BIN/UC.S.txt b/BIN/UC.S.txt
index 9f7b666c..9b26a189 100644
--- a/BIN/UC.S.txt
+++ b/BIN/UC.S.txt
@@ -199,9 +199,10 @@ CS.RUN.DIR lda (ZPFileName)
>SYSCALL PrintF
bcs .9
- >PUSHW ZPFullPath
jsr CS.RUN.GetNewPath
- >PUSHYA
+
+ >PUSHW ZPFullPath
+ >PUSHW ZPNewPath
>SYSCALL Rename
jsr CS.RUN.CheckErr
bcs .9
diff --git a/DRV/DHGR.DRV.S.LBUF.txt b/DRV/DHGR.DRV.S.LBUF.txt
index 311caba4..a3f94387 100644
--- a/DRV/DHGR.DRV.S.LBUF.txt
+++ b/DRV/DHGR.DRV.S.LBUF.txt
@@ -1,11 +1,11 @@
NEW
AUTO 3,1
*--------------------------------------
-LBUF.SetBounds1YA
+LBUF.SetBounds1YA
jsr DIVMOD7YA A=DIV, X=MOD
sta LBUF.C1
- lda C1.MASK,x
+ lda C1.MASK,x
sta LBUF.C1.MASK
lda C1.DATA,x
sta LBUF.C1.DATA
@@ -14,21 +14,19 @@ LBUF.SetBounds1YA
LBUF.SetBounds2YA
jsr DIVMOD7YA A=DIV, X=MOD
sta LBUF.C2
- cmp LBUF.C1 C1=C2, go combine in C1
+ cmp LBUF.C1
beq .1
-
+
lda C2.MASK,x
sta LBUF.C2.MASK
lda C2.DATA,x
sta LBUF.C2.DATA
rts
-.1 lda C1.MASK,x
- ora C2.MASK,x
- sta LBUF.C1.MASK
- lda C1.DATA,x
- ora C2.DATA,x
- sta LBUF.C1.DATA
+.1 lda C2.MASK,x C1=C2, go combine in C1
+ tsb LBUF.C1.MASK
+ lda C2.DATA,x
+ tsb LBUF.C1.DATA
rts
*--------------------------------------
LBUF.DrawAtY lda BASEL,y setup line Base Ptr
@@ -70,7 +68,7 @@ LBUF.DrawAtY.AND.SET
inx
cpx LBUF.C2
bcc .1
-
+
.2 >X2PageY
lda (ZPBasePtr),y Get C2
@@ -83,7 +81,7 @@ LBUF.DrawAtY.AND.SET
sta (ZPBasePtr),y update screen
.8 rts
-*--------------------------------------
+*--------------------------------------
LBUF.DrawAtY.XOR
LBUF.DrawAtY.AND.XOR
lda #$51 EOR (Indirect),Y
@@ -92,33 +90,29 @@ LBUF.DrawAtY.AND.XOR
LBUF.DrawAtY.ORA
lda #$11 ORA (Indirect),Y
LBUF.DrawAtY.XXX
- sta .10+1
- sta .20+1
- sta .30+1
+ sta .10
+ sta .20
+ sta .30
ldx LBUF.C1 x C1->C2
>X2PageY
- lda (ZPBasePtr),y Get C1
- and LBUF.C1.MASK clear ONLY bits starting at X1 mod 7
- sta ZPTmpByte
-
lda LBUF.DATA,x get DATA bits
and LBUF.C1.DATA set ONLY bits starting at X1 mod 7
- ora ZPTmpByte
-.10 ora (ZPBasePtr),y
+
+.10 eor (ZPBasePtr),y
sta (ZPBasePtr),y update screen
inx
cpx LBUF.C2
beq .2 C1=C2, go setup C2
- bcs .8 C1+1 > C2, we are done...
+ bcs .8 C1+1 > C2, we are done...
.1 >X2PageY
lda LBUF.DATA,x set all bytes between C1+1 & C2-1
-.20 ora (ZPBasePtr),y
+.20 eor (ZPBasePtr),y
sta (ZPBasePtr),y
inx
@@ -127,15 +121,11 @@ LBUF.DrawAtY.XXX
.2 >X2PageY
- lda (ZPBasePtr),y Get C2
- and LBUF.C2.MASK clear ONLY bits ending at X2 mod 7
- sta ZPTmpByte
-
lda LBUF.DATA,x get DATA bits
and LBUF.C2.DATA set ONLY bits ending at X2 mod 7
- ora ZPTmpByte
-.30 ora (ZPBasePtr),y
- sta (ZPBasePtr),y update screen
+
+.30 eor (ZPBasePtr),y
+ sta (ZPBasePtr),y update screen
.8 rts
*--------------------------------------
@@ -146,51 +136,41 @@ LBUF.DrawAtY.AND.ORA
lda LBUF.MASK,x get MASK bits
ora LBUF.C1.MASK clear ONLY bits starting at X1 mod 7
-
- cpx LBUF.C2
- bne .1
-
- ora LBUF.C2.MASK special case : C1=C2
- and (ZPBasePtr),y
+ and (ZPBasePtr),y
sta ZPTmpByte
-
- lda LBUF.DATA,x
+
+ lda LBUF.DATA,x
and LBUF.C1.DATA
- and LBUF.C2.DATA
- ora ZPTmpByte
+ ora ZPTmpByte
sta (ZPBasePtr),y update screen
- rts
-.1 and (ZPBasePtr),y Clear screen at C1
- sta ZPTmpByte
+ inx
+ cpx LBUF.C2
+ beq .2 C1=C2, go setup C2
- lda LBUF.DATA,x get DATA bits
- and LBUF.C1.DATA set ONLY bits starting at X1 mod 7
- ora ZPTmpByte ora with screen bits
-
- bra .3
+ bcs .8 C1+1 > C2, we are done...
-.2 >X2PageY
+.1 >X2PageY
lda (ZPBasePtr),y
and LBUF.MASK,x
ora LBUF.DATA,x set all bytes between C1+1 & C2-1
-.3 sta (ZPBasePtr),y update screen
+ sta (ZPBasePtr),y update screen
inx
cpx LBUF.C2
- bne .2
+ bne .1
- >X2PageY
+.2 >X2PageY
lda LBUF.MASK,x get MASK bits
ora LBUF.C2.MASK
- and (ZPBasePtr),y
+ and (ZPBasePtr),y
sta ZPTmpByte
lda LBUF.DATA,x get DATA bits
- and LBUF.C2.DATA set ONLY bits ending at X2 mod 7
+ and LBUF.C2.DATA set ONLY bits ending at X2 mod 7
ora ZPTmpByte
sta (ZPBasePtr),y update screen
diff --git a/DRV/DHGR.DRV.S.OSD.txt b/DRV/DHGR.DRV.S.OSD.txt
index adb39486..7bf4d233 100644
--- a/DRV/DHGR.DRV.S.OSD.txt
+++ b/DRV/DHGR.DRV.S.OSD.txt
@@ -478,11 +478,14 @@ OSD.BM.Create lda DstBM.Cache+S.BM.W
ldx DstBM.Cache+S.BM.W+1
bit #7
beq .1
+
and #$F8
clc
adc #8
bcc .1
+
inx
+
.1 sta DstBM.Cache+S.BM.RowBytes
txa
@@ -509,12 +512,16 @@ OSD.BM.Create lda DstBM.Cache+S.BM.W
adc /S.BM
>SYSCALL2 GetMem
bcs .9
+
>STYA ZPDstBMPtr
+
ldy #S.BM-1
+
.2 lda DstBM.Cache,y
sta (ZPDstBMPtr),y
dey
bpl .2
+
lda ZPDstBMPtr
* clc
adc #S.BM
@@ -524,6 +531,7 @@ OSD.BM.Create lda DstBM.Cache+S.BM.W
adc /S.BM
sta ZPDstBMPtr+1
sta .4+2
+
ldy #0
lda CBX.Cache+S.CB.OP
@@ -531,16 +539,22 @@ OSD.BM.Create lda DstBM.Cache+S.BM.W
beq .3
lda #$ff
+
.3 inc ZPTmpPtr
bne .4
+
inc ZPTmpPtr+1
beq .8
+
.4 sta $ffff,y
iny
bne .3
+
inc .4+2
bra .3
+
.8 txa hBM
+
clc
.9 rts
*--------------------------------------
diff --git a/DRV/MOUSE.DRV.S.txt b/DRV/MOUSE.DRV.S.txt
index 467434be..d4ec7ffe 100644
--- a/DRV/MOUSE.DRV.S.txt
+++ b/DRV/MOUSE.DRV.S.txt
@@ -121,6 +121,7 @@ FD.DEV.NAME .AZ "mou1"
*--------------------------------------
ZPIOCTL .EQ ZPDRV
ZPBufPtr .EQ ZPDRV+2
+ZPState .EQ ZPDRV+4
*--------------------------------------
DRV.CS.START cld
jmp (.1,x)
@@ -225,7 +226,7 @@ EXIT1 jsr GOMOUSE
*--------------------------------------
READ >STYA ZPBufPtr NON STANDARD
- stz READ.S+1 Reset Flags
+ stz ZPState Reset Flags
php
sei
@@ -255,7 +256,8 @@ READ >STYA ZPBufPtr NON STANDARD
sta (ZPBufPtr),y
lda #S.XY.S.MOVE
- tsb READ.S+1
+ tsb ZPState
+
stz bDblClick Reset DblClick flag
.1 lda MOUSESTSx,x
@@ -263,32 +265,41 @@ READ >STYA ZPBufPtr NON STANDARD
beq .8 no button state change:up & previously up
cmp #MOUSESTSx.DOWN+MOUSESTSx.LDOWN
- beq .8 no button state change:down & previously down
+ bne .10
- asl if CS, down & previously up
- bcc .2
-
- lda #S.XY.S.DOWN
- tsb READ.S+1 button has been pressed, start drag...
-
- lda MOUSEXLOx,x
- sta SrcDrag
- lda MOUSEXHIx,x
- sta SrcDrag+1
- lda MOUSEYLOx,x
- sta SrcDrag+2
- lda MOUSEYHIx,x
- sta SrcDrag+3
+ lda ZPState no button state change:down & previously down
+ and #S.XY.S.MOVE
+ beq .8
+
+ sec
+ ror bDrag
+
+ lda #S.XY.S.DRAGSTART
+ tsb ZPState
bra .8
-.2 lda READ.S+1
- pha save move state
- ora #S.XY.S.UP
- sta READ.S+1
- pla get back move state
- bne .4 no move...click!
+.10 asl
+ bcc .2 if CC, up & previously down
- lda #S.XY.S.CLK
+ lda #S.XY.S.DOWN if CS, down & previously up
+ tsb ZPState button has been pressed
+
+ ldy #S.XY.X1+3
+
+.11 lda (ZPBufPtr),y record pos if it is a drag start
+ sta SrcDrag-S.XY.X1,y
+ dey
+ bpl .11
+
+ bra .8
+*--------------------------------------
+.2 lda #S.XY.S.UP
+ tsb ZPState
+
+ bit bDrag
+ bmi .4
+
+ lda #S.XY.S.CLK no move since down...click!
bit bDblClick
bpl .3
@@ -299,11 +310,11 @@ READ >STYA ZPBufPtr NON STANDARD
.3 dec bDblClick
- tsb READ.S+1
+ tsb ZPState
bra .8
-
-.4 lda #S.XY.S.DRAGSTART
- tsb READ.S+1
+*--------------------------------------
+.4 lda #S.XY.S.DRAGEND
+ tsb ZPState
ldy #S.XY.X2+3
@@ -311,10 +322,12 @@ READ >STYA ZPBufPtr NON STANDARD
sta (ZPBufPtr),y
dey
bpl .5
-
+
+ stz bDrag
+*--------------------------------------
.8 plp
-READ.S lda #$ff SELF MODIFIED
+ lda ZPState
beq .9
ldy #S.XY.S
@@ -356,6 +369,7 @@ GOMOUSE.JMP jmp $C100 SELF MODIFIED
DRV.CS.END
DEVSLOT0n .BS 1
bDblClick .BS 1
+bDrag .BS 1
SrcDrag .BS 4
*--------------------------------------
DIB .DA #0
diff --git a/INC/LIBGUI.I.txt b/INC/LIBGUI.I.txt
index 5ab55090..6f89357c 100644
--- a/INC/LIBGUI.I.txt
+++ b/INC/LIBGUI.I.txt
@@ -46,6 +46,9 @@ BM.ID.RIGHT .EQ 12
BM.ID.UP .EQ 14
BM.ID.DOWN .EQ 16
BM.ID.INFO .EQ 18
+BM.ID.QMARK .EQ 20
+BM.ID.EMARK .EQ 22
+BM.ID.ERROR .EQ 24
*--------------------------------------
BUT.ID.OK .EQ 1
BUT.ID.CANCEL .EQ 2
@@ -86,14 +89,6 @@ S.MSG.Y1 .EQ 8
S.MSG.X2 .EQ 10
S.MSG.Y2 .EQ 12
S.MSG.S .EQ 14
-S.MSG.S.UP .EQ %00000001
-S.MSG.S.DOWN .EQ %00000010
-S.MSG.S.MOVE .EQ %00000100
-S.MSG.S.DRAGSTART .EQ %00001000
-S.MSG.S.DRAGEND .EQ %00010000
-S.MSG.S.CLK .EQ %00100000
-S.MSG.S.DCLK .EQ %01000000
-*
*
S.MSG .EQ 16
*--------------------------------------
@@ -115,9 +110,12 @@ S.OBJ.T.MBAR .EQ 2
S.OBJ.T.MENU .EQ 4
S.OBJ.T.BUT .EQ 6
S.OBJ.T.TEXT .EQ 8
+S.OBJ.T.BITMAP .EQ 10
+S.OBJ.T.LABEL .EQ 12
S.OBJ.F .EQ 1
S.OBJ.F.BORDER .EQ %10000000
+
S.OBJ.S .EQ 2
S.OBJ.S.VISIBLE .EQ %10000000
@@ -131,8 +129,8 @@ S.OBJ.X2 .EQ 12
S.OBJ.Y2 .EQ 14
S.OBJ.W .EQ 16
S.OBJ.H .EQ 18
-S.OBJ.pNEXT .EQ 20
-*
+S.OBJ.pChilds .EQ 20
+S.OBJ.pNext .EQ 22
*
S.OBJ .EQ 24
*--------------------------------------
@@ -149,7 +147,7 @@ S.WND.S.HASMBAR .EQ %00000010
S.WND.S.HASSBAR .EQ %00000100
S.WND.S.MAXIMIZED .EQ %00001000
S.WND.S.MINIMIZED .EQ %00010000
-S.WND.S.ACTIVE .EQ %01000000
+S.WND.S.ACTIVE .EQ %00100000
*
S.WND.MinW .EQ S.OBJ
S.WND.MinH .EQ S.OBJ+2
@@ -163,24 +161,24 @@ S.WND.hPTR .EQ S.OBJ+16
*
* private
*
-S.WND.TitleX1 .EQ S.OBJ+18
-S.WND.TitleX2 .EQ S.OBJ+20
-* S.WND.TBarY1 .EQ S.OBJ.X1
-S.WND.TBarY2 .EQ S.OBJ+22
-S.WND.MBarY1 .EQ S.OBJ+24
-S.WND.MBarY2 .EQ S.OBJ+26
-S.WND.InnerY1 .EQ S.OBJ+28
-S.WND.InnerY2 .EQ S.OBJ+30
-S.WND.SBarY1 .EQ S.OBJ+32
-S.WND.InnerX2 .EQ S.OBJ+34
+S.WND.TBarY2 .EQ S.OBJ+20
+S.WND.MBarY1 .EQ S.OBJ+22
+S.WND.MBarY2 .EQ S.OBJ+24
+S.WND.SBarY1 .EQ S.OBJ+26
+*
+S.WND.InnerX1 .EQ S.OBJ+28
+S.WND.InnerY1 .EQ S.OBJ+30
+S.WND.InnerX2 .EQ S.OBJ+32
+S.WND.InnerY2 .EQ S.OBJ+34
S.WND.InnerW .EQ S.OBJ+36
S.WND.InnerH .EQ S.OBJ+38
+*
S.WND.DocW .EQ S.OBJ+40
S.WND.DocH .EQ S.OBJ+42
S.WND.DocX .EQ S.OBJ+44
S.WND.DocY .EQ S.OBJ+46
S.WND.fPaint .EQ S.OBJ+48
-S.WND.pChilds .EQ S.OBJ+50
+*
*
S.WND .EQ S.OBJ+52
*--------------------------------------
@@ -221,10 +219,11 @@ S.MITEM.ID .EQ 10
*
S.MITEM .EQ 12
*--------------------------------------
-S.BUT.F.DISABLED .EQ %00000010
+*S.BUT.F.DISABLED .EQ %00000010
+S.BUT.F.NOLEAVE .EQ %00000010
S.BUT.F.NOSPACE .EQ %00000001
*
-S.BUT.S.PUSHED .EQ %10000000
+S.BUT.S.SELECTED .EQ %10000000
*
S.BUT.pICON .EQ S.OBJ
S.BUT.pTEXT .EQ S.OBJ+2
@@ -234,14 +233,23 @@ S.BUT.ID .EQ S.OBJ+6
*
S.BUT .EQ S.OBJ+8
*--------------------------------------
+S.LABEL.pTEXT .EQ S.OBJ
+*
+S.LABEL .EQ S.OBJ+2
+*--------------------------------------
S.TEXT.F.DISABLED .EQ %10000000
*
S.TEXT.hBM .EQ S.OBJ
S.TEXT.TEXTX .EQ S.OBJ+2
S.TEXT.TEXTY .EQ S.OBJ+4
S.TEXT.TEXTLEN .EQ S.OBJ+6
-S.TEXT.TEXT .EQ S.OBJ+8
-* ...
+S.TEXT.pTEXT .EQ S.OBJ+8
+*
+S.TEXT .EQ S.OBJ+10
+*--------------------------------------
+S.BITMAP.pBM .EQ S.OBJ+4
+*
+S.BITMAP .EQ S.OBJ+6
*--------------------------------------
MAN
SAVE inc/libgui.i
diff --git a/INCLUDE/libgui.h.txt b/INCLUDE/libgui.h.txt
index ddde21f7..423188fd 100644
--- a/INCLUDE/libgui.h.txt
+++ b/INCLUDE/libgui.h.txt
@@ -1,9 +1,8 @@
NEW
AUTO 3,1
-#define C_BLACK 0
-#define C_WHITE 255
-#define pC_WHITE ((void *)255)
+#define C_BLACK ((void *)0)
+#define C_WHITE ((void *)255)
#define PTR_T_ARROW 0
#define PTR_T_MOVE 2
@@ -11,7 +10,7 @@ NEW
#define PTR_T_RESIZEY 6
#define PTR_T_RESIZEXY1 8
#define PTR_T_RESIZEXY2 10
-#define PTR_T_CROSS 12
+#define PTR_T_CROSS ((void *)12)
#define PTR_T_TEXT 14
#define PTR_T_WAIT 16
diff --git a/LIB/LIBGUI.G.BM.txt b/LIB/LIBGUI.G.BM.txt
index 86fd0411..c3aa468f 100644
--- a/LIB/LIBGUI.G.BM.txt
+++ b/LIB/LIBGUI.G.BM.txt
@@ -177,41 +177,63 @@ BM.Down.AND .DA #%1111111
.DA #%1110111
.DA #%1111111
*--------------------------------------
+BM.Checked .DA #S.BM.F.BBP1
+ .DA #1 RowBytes
+ .DA 7 W
+ .DA 7 Y
+ .DA BM.Checked.AND-BM.Checked
+
+ .DA #%0000000
+ .DA #%0100000
+ .DA #%0101000
+ .DA #%0010000
+ .DA #%0001000
+ .DA #%0001000
+ .DA #%0000000
+
+BM.Checked.AND .DA #%1111111
+ .DA #%1111111
+ .DA #%1111111
+ .DA #%1111111
+ .DA #%1111111
+ .DA #%1111111
+ .DA #%1111111
+*--------------------------------------
BM.Info .DA #S.BM.F.BBP4
.DA #4 RowBytes
- .DA 28 W
+ .DA 32 W
.DA 14 H
- .DA BM.INFO.AND-BM.INFO
+ .DA BM.Info.AND-BM.Info
- .HS 00000000
- .HS 00000000
- .HS 00000000
- .HS 00000000
- .HS 0BBBBB00
- .HS 0BBBBB00
- .HS 0BBBBB00
- .HS 0BBBBB00
- .HS 0BBBBB00
- .HS 0BBBBB00
- .HS 00000000
- .HS 00000000
- .HS 00000000
- .HS 00000000
+ .HX 00000000
+ .HX 00022000
+ .HX 00222200
+ .HX 002FF200
+ .HX 022FF220
+ .HX 02222220
+ .HX 02FFFF20
+ .HX 022FF220
+ .HX 022FF220
+ .HX 02FFFF20
+ .HX 00222200
+ .HX 00222200
+ .HX 00022000
+ .HX 00000000
-BM.Info.AND .HS FFF0FFF0
- .HS FF000FF0
- .HS FF000FF0
- .HS F00000F0
- .HS F00000F0
- .HS 00000000
- .HS 00000000
- .HS 00000000
- .HS 00000000
- .HS F00000F0
- .HS F00000F0
- .HS FF0000F0
- .HS FF000FF0
- .HS FFF0FFF0
+BM.Info.AND .HX FFF00FFF
+ .HX FF0000FF
+ .HX F000000F
+ .HX F000000F
+ .HX 00000000
+ .HX 00000000
+ .HX 00000000
+ .HX 00000000
+ .HX 00000000
+ .HX 00000000
+ .HX F000000F
+ .HX F000000F
+ .HX FF0000FF
+ .HX FFF00FFF
*--------------------------------------
MAN
SAVE usr/src/lib/libgui.g.bm
diff --git a/LIB/LIBGUI.G.FON.txt b/LIB/LIBGUI.G.FON.txt
index 0d1bc7cc..b6c815d8 100644
--- a/LIB/LIBGUI.G.FON.txt
+++ b/LIB/LIBGUI.G.FON.txt
@@ -3,7 +3,6 @@ NEW
*--------------------------------------
hSYSFON .BS 1
hSYSFONB .BS 1
-SYSFON.Hm1 .BS 1
SYSFON.H .BS 1
SYSFON.Hp1 .BS 1
SYSFON.Hp2 .BS 1
diff --git a/LIB/LIBGUI.G.PTR.txt b/LIB/LIBGUI.G.PTR.txt
index 0fcc0edc..20f05e56 100644
--- a/LIB/LIBGUI.G.PTR.txt
+++ b/LIB/LIBGUI.G.PTR.txt
@@ -4,6 +4,9 @@ NEW
PTR.T .BS 1
PTR.bVisible .BS 1
PTR.Pos .BS S.POINT
+PTR.Rect .BS S.Rect
+PTR.SaveBuf .BS 64
+* .BS 3*14 3 bytes (16pix possibly shifted 0-6) x 14 lines max
*--------------------------------------
PTR.HotPoints .DA #0,#0 PTR.T.ARROW
.DA #6,#6 PTR.T.MOVE
@@ -20,8 +23,6 @@ PTR.HotPoints .DA #0,#0 PTR.T.ARROW
.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
@@ -56,32 +57,32 @@ PTR.Arrow.MASK .DA %111.11111100
*--------------------------------------
PTR.Move .DA #S.BM.F.BBP1
.DA #2 RowBytes
- .DA 11 W
+ .DA 12 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
+ .DA %0000.001000000
+ .DA %0000.010100000
+ .DA %0000.100010000
+ .DA %0001.111111000
+ .DA %0010.100010100
+ .DA %0100.100010010
+ .DA %0010.100010100
+ .DA %0001.111111000
+ .DA %0000.100010000
+ .DA %0000.010100000
+ .DA %0000.001000000
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
+ .DA %1111.100011111
+ .DA %1111.000001111
+ .DA %1110.000000111
+ .DA %1100.000000011
+ .DA %1000.000000001
+ .DA %0000.000000000
+ .DA %1000.000000001
+ .DA %1100.000000011
+ .DA %1110.000000111
+ .DA %1111.000001111
+ .DA %1111.100011111
*--------------------------------------
PTR.ResizeX .DA #S.BM.F.BBP1
.DA #2 RowBytes
diff --git a/LIB/LIBGUI.S.BITMAP.txt b/LIB/LIBGUI.S.BITMAP.txt
new file mode 100644
index 00000000..1cf6ec49
--- /dev/null
+++ b/LIB/LIBGUI.S.BITMAP.txt
@@ -0,0 +1,52 @@
+NEW
+ AUTO 3,1
+*--------------------------------------
+* NewBitmap (hWND, pBM, X, Y)
+*--------------------------------------
+BITMAP.New >PULLW DY
+ >PULLW DX
+ >PULLW ZPBMPtr
+ jsr OBJ.PullHWND
+
+BITMAP.New.I lda #S.OBJ.T.BITMAP
+ jsr OBJ.New
+ bcs .9 ZPObjPtr
+
+ phx hOBJ
+
+ jsr OBJ.SetDXDYX1Y1
+
+ ldy #S.BITMAP.pBM
+ lda ZPBMPtr
+ sta (ZPObjPtr),y
+ iny
+ lda ZPBMPtr+1
+ sta (ZPObjPtr),y
+
+ pla hOBJ
+ jmp WND.AddChild.I
+
+.9 rts
+*--------------------------------------
+BITMAP.Enter
+BITMAP.Leave
+ clc
+ rts
+*--------------------------------------
+* ZPWNDPtr
+* ZPObjPtr
+*--------------------------------------
+BITMAP.fPaint jsr CB.GetObjX1Y1
+
+ ldy #S.BITMAP.pBM
+ jsr OBJ.GetPtr
+
+ jsr BM.YA2CB.cache
+
+ jsr CB.ToGlobal
+ jmp CB.Write
+*--------------------------------------
+MAN
+SAVE usr/src/lib/libgui.s.bitmap
+LOAD usr/src/lib/libgui.s
+ASM
diff --git a/LIB/LIBGUI.S.BM.txt b/LIB/LIBGUI.S.BM.txt
index eadc7e18..57d4d634 100644
--- a/LIB/LIBGUI.S.BM.txt
+++ b/LIB/LIBGUI.S.BM.txt
@@ -1,9 +1,43 @@
NEW
AUTO 3,1
*--------------------------------------
-BM.Get
-*--------------------------------------
-*--------------------------------------
+BM.YA2CB.cache >STYA ZPBMPtr
+ >STYA CB.Cache+S.CB.SrcPtr
+
+ lda #S.CB.CMD.BITBLT
+ sta CB.Cache+S.CB.CMD
+
+ lda #S.CB.OP.MASK+S.CB.OP.ORA
+ sta CB.Cache+S.CB.OP
+
+ ldx #S.CB.M.MONO
+ lda (ZPBMPtr) #S.BM.F
+ cmp #S.BM.F.BBP4
+ bne .1
+
+ lda #S.CB.OP.COLOR
+ tsb CB.Cache+S.CB.OP
+
+ lda CB.Cache+S.CB.X1
+ and PREFS.BestViewedX
+ sta CB.Cache+S.CB.X1
+
+ ldx #S.CB.M.C16
+
+.1 stx CB.Cache+S.CB.M
+
+ jsr CB.ResetSrcXY
+
+ ldy #S.BM.W+3
+ ldx #3
+
+.2 lda (ZPBMPtr),y
+ sta CB.Cache+S.CB.SrcW,x
+ dey
+ dex
+ bpl .2
+
+ rts
*--------------------------------------
MAN
SAVE usr/src/lib/libgui.s.bm
diff --git a/LIB/LIBGUI.S.BUT.txt b/LIB/LIBGUI.S.BUT.txt
index cbf790d2..66dcb33d 100644
--- a/LIB/LIBGUI.S.BUT.txt
+++ b/LIB/LIBGUI.S.BUT.txt
@@ -5,9 +5,9 @@ NEW
*--------------------------------------
BUT.New lda #S.OBJ.T.BUT
jsr OBJ.New
- bcs .9
+* bcs .9
-* >STYA ZPObjPtr
+ phx hOBJ
ldy #S.OBJ.Y1
jsr OBJ.PullWordAtY
@@ -15,6 +15,9 @@ BUT.New lda #S.OBJ.T.BUT
ldy #S.OBJ.X1
jsr OBJ.PullWordAtY
+ ldy #S.BUT.ID
+ jsr OBJ.PullWordAtY
+
ldy #S.BUT.KEYMOD
jsr OBJ.PullWordAtY
@@ -74,7 +77,7 @@ BUT.New lda #S.OBJ.T.BUT
adc DX+1
sta DX+1
-.3 lda #PREFS.XSeparator
+.3 lda PREFS.XSeparator
asl
* clc
adc DX
@@ -85,26 +88,95 @@ BUT.New lda #S.OBJ.T.BUT
iny
sta (ZPObjPtr),y
-.5
+.5 lda SYSFON.Hp2
+ ldy #S.OBJ.H
+ sta (ZPObjPtr),y
+
+ >LDYA ZPObjPtr
+ jsr OBJ.SetX2Y2
-.8 clc
+.8 jsr WND.AddChild.I
+
+ pla hOBJ
+ clc
rts
-.9 >POP 14
+.9 >POP 16
rts
*--------------------------------------
-BUT.Enter
-*--------------------------------------
-BUT.Draw
+BUT.Enter ldy #S.OBJ.S
+ lda (ZPObjPtr),y
+ bpl BUT.Paint
+.8 clc
+ rts
+*--------------------------------------
+BUT.Leave ldy #S.OBJ.S
+ lda (ZPObjPtr),y
+ bpl .8
+
+ bit #S.BUT.F.NOLEAVE
+ beq BUT.Paint
+
+.8 clc
+ rts
*--------------------------------------
BUT.Close
clc
rts
*--------------------------------------
+BUT.Paint eor #S.BUT.S.SELECTED
+ sta (ZPObjPtr),y
+
+ jsr WND.GetInnerInClip
+
+BUT.fPaint jsr CB.GetBuf
+ bcs .9
+
+ ldx #1
+ jsr DRAW.BordersAtX
+
+ ldx #C.WHITE
+
+ ldy #S.OBJ.S
+ lda (ZPObjPtr),y
+ bpl .1
+
+* and #S.BUT.S.SELECTED
+* beq .1
+
+ ldx #C.BLACK
+
+.1 txa
+ jsr CB.FillRectMonoA
+
+ jsr CB.GetObjX1Y1X2Y2
+
+ jsr CB.Cache2CBBufG
+
+ ldy #S.BUT.pTEXT
+ jsr OBJ.GetPropAtY
+ ldx hSYSFON
+ jsr FON.GetTextSize
+
+ jsr CB.SrcWCenterH
+
+ jsr CB.IncY1
+
+ ldy #S.BUT.pTEXT
+ jsr OBJ.GetPropAtY
+ ldx hSYSFON
+ jsr DRAW.YAText
+
+
+
+.8 jmp CB.FlushBuf
+
+.9 rts
+*--------------------------------------
MAN
SAVE usr/src/lib/libgui.s.but
LOAD usr/src/lib/libgui.s
diff --git a/LIB/LIBGUI.S.CB.txt b/LIB/LIBGUI.S.CB.txt
index 7378bc7e..1046092c 100644
--- a/LIB/LIBGUI.S.CB.txt
+++ b/LIB/LIBGUI.S.CB.txt
@@ -1,27 +1,6 @@
NEW
AUTO 3,1
*--------------------------------------
-CB.InitCacheA sta CB.Cache+S.CB.CMD
-
- ldx #S.CB-1
-
-.1 stz CB.Cache,x
- dex
- bne .1
-
- rts
-*--------------------------------------
-CB.GetInCache >STYA .1+1
-
- ldx #S.CB-1
-
-.1 lda $ffff,x SELF MODIFIED
- sta CB.Cache,x
- dex
- bpl .1
-
- rts
-*--------------------------------------
CB.GetWndYCacheX
lda (ZPWNDPtr),y
sta CB.Cache,x
@@ -30,6 +9,32 @@ CB.GetWndYCacheX
sta CB.Cache+1,x
rts
*--------------------------------------
+CB.SwapX1X2 ldx CB.Cache+S.CB.X1
+ ldy CB.Cache+S.CB.X1+1
+
+ lda CB.Cache+S.CB.X2
+ sta CB.Cache+S.CB.X1
+ lda CB.Cache+S.CB.X2+1
+ sta CB.Cache+S.CB.X1+1
+
+ stx CB.Cache+S.CB.X2
+ sty CB.Cache+S.CB.X2+1
+
+ rts
+*--------------------------------------
+CB.SwapY1Y2 ldx CB.Cache+S.CB.Y1
+ ldy CB.Cache+S.CB.Y1+1
+
+ lda CB.Cache+S.CB.Y2
+ sta CB.Cache+S.CB.Y1
+ lda CB.Cache+S.CB.Y2+1
+ sta CB.Cache+S.CB.Y1+1
+
+ stx CB.Cache+S.CB.Y2
+ sty CB.Cache+S.CB.Y2+1
+
+ rts
+*--------------------------------------
CB.BorderLineH lda #S.CB.CMD.HLINE
sta CB.Cache+S.CB.CMD
lda #S.CB.OP.SET
@@ -53,12 +58,115 @@ CB.FillRectMonoA
sta CB.Cache+S.CB.M
rts
*--------------------------------------
+CB.PullY2X2Y1X1 ldx #7
+ bra CB.PullX
+
+CB.PullY1X1 ldx #3
+
+CB.PullX >PULLA
+ sta CB.Cache+S.CB.X1-1,x
+ >PULLA
+ sta CB.Cache+S.CB.X1,x
+ dex
+ dex
+ bpl CB.PullX
+
+ rts
+**--------------------------------------
+CB.X2ToX1 ldy CB.Cache+S.CB.X2
+ lda CB.Cache+S.CB.X2+1
+ sty CB.Cache+S.CB.X1
+ sta CB.Cache+S.CB.X1+1
+ rts
+*--------------------------------------
+CB.AddA2X1 clc
+ adc CB.Cache+S.CB.X1
+ sta CB.Cache+S.CB.X1
+ bcc .1
+
+ inc CB.Cache+S.CB.X1+1
+
+.1 rts
+*--------------------------------------
+CB.IncY1 inc CB.Cache+S.CB.Y1
+ bne .1
+
+ inc CB.Cache+S.CB.Y1+1
+
+.1 rts
+*--------------------------------------
+CB.DecY2 lda CB.Cache+S.CB.Y2
+ bne .1
+
+ dec CB.Cache+S.CB.Y2+1
+
+.1 dec CB.Cache+S.CB.Y2
+
+ rts
+*--------------------------------------
+CB.GetObjX1Y1 ldy #S.OBJ.X1+3
+ ldx #3
+ bra CB.GetObjXY
+*--------------------------------------
+CB.GetObjX1Y1X2Y2
+ ldy #S.OBJ.X1+7
+ ldx #7
+
+CB.GetObjXY lda (ZPObjPtr),y
+ sta CB.Cache+S.CB.X1,x
+ dey
+ dex
+ bpl CB.GetObjXY
+
+ rts
+*--------------------------------------
+CB.GetObjSrcWH ldy #S.OBJ.W+3 W,H
+ ldx #3
+
+.1 lda (ZPObjPtr),y
+ sta CB.Cache+S.CB.SrcW,x
+ dey
+ dex
+ bpl .1
+
+ rts
+*--------------------------------------
+CB.ResetSrcXY ldx #4
+
+.1 stz CB.Cache+S.CB.SrcX-1,x
+ dex
+ bne .1
+
+ rts
+*--------------------------------------
+CB.SrcWCenterH ldy #S.OBJ.W
+ lda (ZPObjPtr),y
+ sec
+ sbc CB.Cache+S.CB.SrcW
+ pha
+ iny
+ lda (ZPObjPtr),y
+ sbc CB.Cache+S.CB.SrcW+1
+ lsr
+ tax
+ pla
+ ror
+ clc
+ adc CB.Cache+S.CB.X1
+ sta CB.Cache+S.CB.X1
+
+ txa
+ adc CB.Cache+S.CB.X1+1
+ sta CB.Cache+S.CB.X1+1
+
+ rts
+*--------------------------------------
CB.GetBuf clc
ldx hCBBuf
bne .9
- >LDYAI 512
+ >LDYAI 1024
>SYSCALL2 GetMem
bcs .9
@@ -67,82 +175,86 @@ CB.GetBuf clc
.9 rts
*--------------------------------------
-CB.Cache2CBBuf
- lda CB.Cache
+CB.Cache2CBBufG jsr CB.ToGlobal
+*--------------------------------------
+CB.Cache2CBBuf lda CB.Cache
lsr
tax
ldy CB.CmdLen-1,x
- ldx #0
-
-.1 lda CB.Cache,x
- sta (ZPCBBufPtr)
- inc ZPCBBufPtr
- bne .2
-
- inc ZPCBBufPtr+1
-
-.2 inx
+.1 lda CB.Cache,y
+ sta (ZPCBBufPtr),y
dey
bpl .1
-
- rts
*--------------------------------------
-* Y,A = Target Object
-*--------------------------------------
-CB.FlushBufToYA jsr CLIP.GetRect
-
- lda hCBBuf
- beq .8
-
- lda #0
- sta (ZPCBBufPtr)
-
- lda hCBBuf
- >SYSCALL2 GetMemPtr
- >STYA ZPCBBufPtr
-
- jsr PTR.Disable
-*--------------------------------------
-.2 lda (ZPCBBufPtr)
- beq .7
-
- >LDYA ZPCBBufPtr
- jsr CB.GetInCache A = CB.CMD
-
- cmp #S.CB.CMD.DRAWTEXT2
- bne .4
-
- lda #S.CB.CMD.DRAWTEXT+S.CB.CMD.OSD
- sta CB.Cache+S.CB.CMD
- jsr CB.GFXWrite
- bcs .9
-
- jsr CLIP.CB.Cache
- bcs .3
-
- jsr CB.GFXWrite
-
-.3 lda CB.Cache+S.CB.SrcPtr
- >SYSCALL2 FreeStkObj
- bra .5
-
-.4 jsr CLIP.CB.Cache
- bcs .5
-
- jsr CB.GFXWrite
-
-.5 lda (ZPCBBufPtr) Get Cmd
+CB.BufNext lda (ZPCBBufPtr) Get Cmd
lsr
tax
lda CB.CmdLen-1,x
sec +1
adc ZPCBBufPtr
sta ZPCBBufPtr
- bcc .2
+ bcc .1
inc ZPCBBufPtr+1
- bra .2
+
+.1 rts
+*--------------------------------------
+* CLIP.Rect = Target Object
+*--------------------------------------
+CB.Write jsr PTR.Disable
+ jsr CB.GFXWriteClip
+.8 jmp PTR.Enable
+*--------------------------------------
+* Y,A = Target Object
+*--------------------------------------
+CB.FlushBufToYA jsr CLIP.GetRect
+
+CB.FlushBuf ldx hCBBuf
+ beq .8
+
+ jsr PTR.Disable
+
+ lda #0
+ sta (ZPCBBufPtr)
+
+ lda hCBBuf
+ >SYSCALL2 GetMemPtr
+ >STYA ZPCBBufPtr
+*--------------------------------------
+.1 lda (ZPCBBufPtr) Get Cmd
+ beq .7
+
+ lsr
+ tax
+ ldy CB.CmdLen-1,x
+
+.2 lda (ZPCBBufPtr),y
+ sta CB.Cache,y
+ dey
+ bpl .2
+
+* lda (ZPCBBufPtr) A = CB.CMD
+
+ cmp #S.CB.CMD.DRAWTEXT2
+ bne .4
+
+ lda #S.CB.CMD.DRAWTEXT+S.CB.CMD.OSD
+ sta CB.Cache+S.CB.CMD
+ ldx #0 Select CB.Cache
+ jsr CB.GFXWriteX Direct Write (no clip)
+ bcs .9
+
+ jsr CB.GFXWriteClip
+
+ lda CB.Cache+S.CB.SrcPtr
+ >SYSCALL2 FreeStkObj
+ bra .5
+*--------------------------------------
+.4 jsr CB.GFXWriteClip
+
+.5 jsr CB.BufNext
+ bra .1
.7 lda hCBBuf
stz hCBBuf
@@ -153,55 +265,13 @@ CB.FlushBufToYA jsr CLIP.GetRect
.8 clc
.9 rts
*--------------------------------------
-CB.GFXWritePtr jsr PTR.Disable
- jsr CB.GFXWrite
- jmp PTR.Enable
-*--------------------------------------
-CB.GFXWrite >PUSHB WND.Screen+S.OBJ.hPARENT
- >PUSHBI IOCTL.WRITE
- >PUSHW L.CB.Cache
- >SYSCALL2 IOCTL
- rts
-*--------------------------------------
-CB.SetX2Y2 lda CB.Cache+S.CB.SrcW
- clc
- adc CB.Cache+S.CB.X1
- pha
+CB.ToGlobal lda ZPWNDPtr
+ ldx ZPWNDPtr+1
- lda CB.Cache+S.CB.SrcW+1
- adc CB.Cache+S.CB.X1+1
- tax
- pla
- bne .2
+.1 sta ZPPtr1
+ stx ZPPtr1+1
- dex
-
-.2 dec
- sta CB.Cache+S.CB.X2
- stx CB.Cache+S.CB.X2+1
-
- lda CB.Cache+S.CB.SrcH
-
- clc
- adc CB.Cache+S.CB.Y1
- pha
-
- lda CB.Cache+S.CB.SrcH+1
- adc CB.Cache+S.CB.Y1+1
- tax
- pla
- bne .3
-
- dex
-
-.3 dec
- sta CB.Cache+S.CB.Y2
- stx CB.Cache+S.CB.Y2+1
- rts
-*--------------------------------------
-CB.ToGlobal >STYA ZPPtr1
-
-.1 ldy #S.OBJ.X1
+ ldy #S.WND.InnerX1
ldx #S.CB.X1
jsr CB.AddPtr1YtoCBX
@@ -209,7 +279,7 @@ CB.ToGlobal >STYA ZPPtr1
ldx #S.CB.Y1
jsr CB.AddPtr1YtoCBX
- ldy #S.OBJ.X1
+ ldy #S.WND.InnerX1
ldx #S.CB.X2
jsr CB.AddPtr1YtoCBX
@@ -224,9 +294,6 @@ CB.ToGlobal >STYA ZPPtr1
tax
dey
lda (ZPPtr1),y
-
- sta ZPPtr1
- stx ZPPtr1+1
bra .1
.8 clc
@@ -243,6 +310,21 @@ CB.AddPtr1YtoCBX
sta CB.Cache+1,x
rts
*--------------------------------------
+* CB.Cache -> CLIP.Cache
+*--------------------------------------
+CB.GFXWriteClip jsr CLIP.CB.Cache
+ bcs CB.GFXWrite.9
+
+CB.GFXWrite ldx #2 Select CLIP.Cache
+*--------------------------------------
+* X=0:CB.Cache, X=2:CLIP.Cache
+*--------------------------------------
+CB.GFXWriteX >PUSHB WND.Screen+S.OBJ.hPARENT
+ >PUSHBI IOCTL.WRITE
+ >PUSHW L.CB.Cache,x
+ >SYSCALL2 IOCTL
+CB.GFXWrite.9 rts
+*--------------------------------------
MAN
SAVE usr/src/lib/libgui.s.cb
LOAD usr/src/lib/libgui.s
diff --git a/LIB/LIBGUI.S.CLIP.txt b/LIB/LIBGUI.S.CLIP.txt
index 2d620cb3..b7a01e11 100644
--- a/LIB/LIBGUI.S.CLIP.txt
+++ b/LIB/LIBGUI.S.CLIP.txt
@@ -1,15 +1,36 @@
NEW
AUTO 3,1
*--------------------------------------
+CLIP.GetRect >STYA .1+1
+
+ ldy #S.OBJ.Y2+1
+ ldx #7
+
+.1 lda $ffff,y
+ sta CLIP.Rect,x
+ dey
+ dex
+ bpl .1
+
+ rts
+*--------------------------------------
* CLIPPING Functions:
* In:
* Target Clipping Region in CLIP.Rect
* YA = Control Block
* Out:
-* CC : CB.Cache clipped & visible
-* CS : CB.Cache invisible
+* CC : CLIP.Cache clipped & visible
+* CS : CLIP.Cache invisible
*--------------------------------------
-CLIP.CB.Cache lda CB.Cache+S.CB.CMD
+CLIP.CB.Cache ldx #S.CB
+
+.1 lda CB.Cache-1,x
+ sta CLIP.Cache-1,x
+ dex
+ bne .1
+
+* lda CB.Cache+S.CB.CMD
+
and #$7F remove S.CB.CMD.OSD
tax
jmp (J.CLIP-2,x)
@@ -18,66 +39,68 @@ CLIP.Point
clc
rts
*--------------------------------------
-CLIP.HLine >LDYA CB.Cache+S.CB.Y1
+CLIP.HLine >LDYA CLIP.Cache+S.CB.Y1
>SCMPYA CLIP.Rect+S.RECT.Y2
bpl .9
- >LDYA CB.Cache+S.CB.Y1
+ >LDYA CLIP.Cache+S.CB.Y1
>SCMPYA CLIP.Rect+S.RECT.Y1
bmi .9
>LDYA CLIP.Rect+S.RECT.X1
- >STYAIFGTR CB.Cache+S.CB.X1
-
+ >STYAIFGTR CLIP.Cache+S.CB.X1
+
>LDYA CLIP.Rect+S.RECT.X2
- >STYAIFLWR CB.Cache+S.CB.X2
+ >STYAIFLWR CLIP.Cache+S.CB.X2
clc
rts
-
+
.9 sec
rts
*--------------------------------------
-CLIP.VLine >LDYA CB.Cache+S.CB.X1
+CLIP.VLine >LDYA CLIP.Cache+S.CB.X1
>SCMPYA CLIP.Rect+S.RECT.X2
bpl .9
- >LDYA CB.Cache+S.CB.X1
+ >LDYA CLIP.Cache+S.CB.X1
>SCMPYA CLIP.Rect+S.RECT.X1
- bmi .9
- >LDYA CLIP.Rect+S.RECT.Y1
- >STYAIFGTR CB.Cache+S.CB.Y1
+ bpl CLIP.Y1Y2
+
+* bmi .9
- >LDYA CLIP.Rect+S.RECT.Y2
- >STYAIFLWR CB.Cache+S.CB.Y2
+* >LDYA CLIP.Rect+S.RECT.Y1
+* >STYAIFGTR CLIP.Cache+S.CB.Y1
- clc
- rts
+* >LDYA CLIP.Rect+S.RECT.Y2
+* >STYAIFLWR CLIP.Cache+S.CB.Y2
+
+* clc
+* rts
.9 sec
- rts
+ rts
*--------------------------------------
CLIP.Rectangle jsr CLIP.Rect.Overlap
- bcs .9
+ bcs CLIP.Text.RTS
>LDYA CLIP.Rect+S.RECT.X1
- >STYAIFGTR CB.Cache+S.CB.X1
+ >STYAIFGTR CLIP.Cache+S.CB.X1
>LDYA CLIP.Rect+S.RECT.X2
- >STYAIFLWR CB.Cache+S.CB.X2
+ >STYAIFLWR CLIP.Cache+S.CB.X2
- >LDYA CLIP.Rect+S.RECT.Y1
- >STYAIFGTR CB.Cache+S.CB.Y1
+CLIP.Y1Y2 >LDYA CLIP.Rect+S.RECT.Y1
+ >STYAIFGTR CLIP.Cache+S.CB.Y1
>LDYA CLIP.Rect+S.RECT.Y2
- >STYAIFLWR CB.Cache+S.CB.Y2
+ >STYAIFLWR CLIP.Cache+S.CB.Y2
- clc
-.9 rts
+* clc
+* rts
*--------------------------------------
-CLIP.Text
- clc
+CLIP.Text clc
rts
CLIP.Text.9 sec
@@ -85,137 +108,146 @@ CLIP.Text.RTS rts
*--------------------------------------
* BitBlt :
*--------------------------------------
-CLIP.BitBlt jsr CB.SetX2Y2 set X2=X1+W-1 Y2=X1+H-1
-
+CLIP.BitBlt jsr CLIP.SetX2Y2
jsr CLIP.Rect.Overlap
bcs CLIP.Text.RTS
- lda CLIP.Rect+S.RECT.X1
- sec
- sbc CB.Cache+S.CB.X1
- sta DX
+ ldx #S.RECT select CLIP.Rect
- lda CLIP.Rect+S.RECT.X1+1
- sbc CB.Cache+S.CB.X1+1
- sta DX+1
+CLIP.BitBltX lda CLIP.Screen+S.RECT.X1,x
+ sec
+ sbc CLIP.Cache+S.CB.X1
+ sta TmpW
+
+ lda CLIP.Screen+S.RECT.X1+1,x
+ sbc CLIP.Cache+S.CB.X1+1
+ sta TmpW+1
bvc .1
+
eor #$80
+
.1 bmi .2
- lda CB.Cache+S.CB.X1
+ lda CLIP.Cache+S.CB.X1
clc
- adc DX
- sta CB.Cache+S.CB.X1
+ adc TmpW
+ sta CLIP.Cache+S.CB.X1
- lda CB.Cache+S.CB.X1+1
- adc DX+1
- sta CB.Cache+S.CB.X1+1
+ lda CLIP.Cache+S.CB.X1+1
+ adc TmpW+1
+ sta CLIP.Cache+S.CB.X1+1
- lda CB.Cache+S.CB.SrcX
+ lda CLIP.Cache+S.CB.SrcX
clc
- adc DX
- sta CB.Cache+S.CB.SrcX
+ adc TmpW
+ sta CLIP.Cache+S.CB.SrcX
- lda CB.Cache+S.CB.SrcX+1
- adc DX+1
- sta CB.Cache+S.CB.SrcX+1
+ lda CLIP.Cache+S.CB.SrcX+1
+ adc TmpW+1
+ sta CLIP.Cache+S.CB.SrcX+1
- lda CB.Cache+S.CB.SrcW
+ lda CLIP.Cache+S.CB.SrcW
sec
- sbc DX
- sta CB.Cache+S.CB.SrcW
+ sbc TmpW
+ sta CLIP.Cache+S.CB.SrcW
- lda CB.Cache+S.CB.SrcW+1
- sbc DX+1
- sta CB.Cache+S.CB.SrcW+1
+ lda CLIP.Cache+S.CB.SrcW+1
+ sbc TmpW+1
+ sta CLIP.Cache+S.CB.SrcW+1
bcc CLIP.Text.9
-
-.2 lda CB.Cache+S.CB.X2
+*--------------------------------------
+.2 lda CLIP.Cache+S.CB.X2
sec
- sbc CLIP.Rect+S.RECT.X2
- sta DX
+ sbc CLIP.Screen+S.RECT.X2,x
+ sta TmpW
- lda CB.Cache+S.CB.X2+1
- sbc CLIP.Rect+S.RECT.X2+1
- sta DX+1
+ lda CLIP.Cache+S.CB.X2+1
+ sbc CLIP.Screen+S.RECT.X2+1,x
+ sta TmpW+1
bvc .3
+
eor #$80
+
.3 bmi .4
- lda CB.Cache+S.CB.SrcW
+ lda CLIP.Cache+S.CB.SrcW
sec
- sbc DX
- sta CB.Cache+S.CB.SrcW
+ sbc TmpW
+ sta CLIP.Cache+S.CB.SrcW
- lda CB.Cache+S.CB.SrcW+1
- sbc DX+1
- sta CB.Cache+S.CB.SrcW+1
+ lda CLIP.Cache+S.CB.SrcW+1
+ sbc TmpW+1
+ sta CLIP.Cache+S.CB.SrcW+1
bcc .9
-
-.4 lda CLIP.Rect+S.RECT.Y1
+*--------------------------------------
+.4 lda CLIP.Screen+S.RECT.Y1,x
sec
- sbc CB.Cache+S.CB.Y1
- sta DX
+ sbc CLIP.Cache+S.CB.Y1
+ sta TmpW
- lda CLIP.Rect+S.RECT.Y1+1
- sbc CB.Cache+S.CB.Y1+1
- sta DX+1
+ lda CLIP.Screen+S.RECT.Y1+1,x
+ sbc CLIP.Cache+S.CB.Y1+1
+ sta TmpW+1
bvc .5
+
eor #$80
+
.5 bmi .6
- lda CB.Cache+S.CB.Y1
+ lda CLIP.Cache+S.CB.Y1
clc
- adc DX
- sta CB.Cache+S.CB.Y1
+ adc TmpW
+ sta CLIP.Cache+S.CB.Y1
- lda CB.Cache+S.CB.Y1+1
- adc DX+1
- sta CB.Cache+S.CB.Y1+1
+ lda CLIP.Cache+S.CB.Y1+1
+ adc TmpW+1
+ sta CLIP.Cache+S.CB.Y1+1
- lda CB.Cache+S.CB.SrcY
+ lda CLIP.Cache+S.CB.SrcY
clc
- adc DX
- sta CB.Cache+S.CB.SrcY
+ adc TmpW
+ sta CLIP.Cache+S.CB.SrcY
- lda CB.Cache+S.CB.SrcY+1
- adc DX+1
- sta CB.Cache+S.CB.SrcY+1
+ lda CLIP.Cache+S.CB.SrcY+1
+ adc TmpW+1
+ sta CLIP.Cache+S.CB.SrcY+1
- lda CB.Cache+S.CB.SrcH
+ lda CLIP.Cache+S.CB.SrcH
sec
- sbc DX
- sta CB.Cache+S.CB.SrcH
+ sbc TmpW
+ sta CLIP.Cache+S.CB.SrcH
- lda CB.Cache+S.CB.SrcH+1
- sbc DX+1
- sta CB.Cache+S.CB.SrcH+1
+ lda CLIP.Cache+S.CB.SrcH+1
+ sbc TmpW+1
+ sta CLIP.Cache+S.CB.SrcH+1
bcc .9
-
-.6 lda CB.Cache+S.CB.Y2
+*--------------------------------------
+.6 lda CLIP.Cache+S.CB.Y2
sec
- sbc CLIP.Rect+S.RECT.Y2
- sta DX
+ sbc CLIP.Screen+S.RECT.Y2,x
+ sta TmpW
- lda CB.Cache+S.CB.Y2+1
- sbc CLIP.Rect+S.RECT.Y2+1
- sta DX+1
+ lda CLIP.Cache+S.CB.Y2+1
+ sbc CLIP.Screen+S.RECT.Y2+1,x
+ sta TmpW+1
bvc .7
+
eor #$80
+
.7 bmi .8
- lda CB.Cache+S.CB.SrcH
+ lda CLIP.Cache+S.CB.SrcH
sec
- sbc DX
- sta CB.Cache+S.CB.SrcH
+ sbc TmpW
+ sta CLIP.Cache+S.CB.SrcH
- lda CB.Cache+S.CB.SrcH+1
- sbc DX+1
- sta CB.Cache+S.CB.SrcH+1
+ lda CLIP.Cache+S.CB.SrcH+1
+ sbc TmpW+1
+ sta CLIP.Cache+S.CB.SrcH+1
bcc .9
.8 clc
-.99 rts
+ rts
.9 sec
rts
@@ -309,12 +341,12 @@ CLIP.Line jsr CLIP.Line.EncodeP1
CLIP.Line.EncodeP1
ldy #0
- lda CB.Cache+S.CB.X1
- ldx CB.Cache+S.CB.X1+1
+ lda CLIP.Cache+S.CB.X1
+ ldx CLIP.Cache+S.CB.X1+1
jsr CLIP.Line.EncodeX.AX
- lda CB.Cache+S.CB.Y1
- ldx CB.Cache+S.CB.Y1+1
+ lda CLIP.Cache+S.CB.Y1
+ ldx CLIP.Cache+S.CB.Y1+1
jsr CLIP.Line.EncodeY.AX
sty CLIP.Line.P1
@@ -323,12 +355,12 @@ CLIP.Line.EncodeP1
CLIP.Line.EncodeP2
ldy #0
- lda CB.Cache+S.CB.X2
- ldx CB.Cache+S.CB.X2+1
+ lda CLIP.Cache+S.CB.X2
+ ldx CLIP.Cache+S.CB.X2+1
jsr CLIP.Line.EncodeX.AX
- lda CB.Cache+S.CB.Y2
- ldx CB.Cache+S.CB.Y2+1
+ lda CLIP.Cache+S.CB.Y2
+ ldx CLIP.Cache+S.CB.Y2+1
jsr CLIP.Line.EncodeY.AX
sty CLIP.Line.P2
@@ -340,11 +372,11 @@ CLIP.Line.EncodeX.AX
bpl .1
pla
-
+
tya
ora #CLIP.Line.LEFT
tay
-
+
rts
.1 pla
@@ -379,20 +411,52 @@ CLIP.Line.EncodeY.AX
.8 rts
*--------------------------------------
+CLIP.SetX2Y2 ldx CLIP.Cache+S.CB.SrcW+1
+ lda CLIP.Cache+S.CB.SrcW
+ bne .3
+
+ dex
+
+.3 dec
+ clc
+ adc CLIP.Cache+S.CB.X1
+ sta CLIP.Cache+S.CB.X2
+
+ txa
+ adc CLIP.Cache+S.CB.X1+1
+ sta CLIP.Cache+S.CB.X2+1
+
+ ldx CLIP.Cache+S.CB.SrcH+1
+ lda CLIP.Cache+S.CB.SrcH
+ bne .4
+
+ dex
+
+.4 dec
+ clc
+ adc CLIP.Cache+S.CB.Y1
+ sta CLIP.Cache+S.CB.Y2
+
+ txa
+ adc CLIP.Cache+S.CB.Y1+1
+ sta CLIP.Cache+S.CB.Y2+1
+
+ rts
+*--------------------------------------
CLIP.Rect.Overlap
- >LDYA CB.Cache+S.CB.X1
+ >LDYA CLIP.Cache+S.CB.X1
>SCMPYA CLIP.Rect+S.RECT.X2
bpl .9
- >LDYA CB.Cache+S.CB.X2
+ >LDYA CLIP.Cache+S.CB.X2
>SCMPYA CLIP.Rect+S.RECT.X1
bmi .9
- >LDYA CB.Cache+S.CB.Y1
+ >LDYA CLIP.Cache+S.CB.Y1
>SCMPYA CLIP.Rect+S.RECT.Y2
bpl .9
- >LDYA CB.Cache+S.CB.Y2
+ >LDYA CLIP.Cache+S.CB.Y2
>SCMPYA CLIP.Rect+S.RECT.Y1
bmi .9
@@ -402,19 +466,6 @@ CLIP.Rect.Overlap
.9 sec
rts
*--------------------------------------
-CLIP.GetRect >STYA .1+1
-
- ldy #S.OBJ.Y2+1
- ldx #7
-
-.1 lda $ffff,y
- sta CLIP.Rect,x
- dey
- dex
- bpl .1
-
- rts
-*--------------------------------------
MAN
SAVE usr/src/lib/libgui.s.clip
LOAD usr/src/lib/libgui.s
diff --git a/LIB/LIBGUI.S.DRAW.txt b/LIB/LIBGUI.S.DRAW.txt
index 4e411e02..f4c21999 100644
--- a/LIB/LIBGUI.S.DRAW.txt
+++ b/LIB/LIBGUI.S.DRAW.txt
@@ -3,13 +3,16 @@ NEW
*--------------------------------------
* drawline(short int hWND, short int OP, short int COLOR, int X1, int Y1, int X2, int X2)
*--------------------------------------
-DRAW.Line jsr DRAW.PullY2X2Y1X1
+DRAW.Line jsr CB.PullY2X2Y1X1
>PULLB CB.Cache+S.CB.COLOR
>PULLB CB.Cache+S.CB.OP
-
- jsr DRAW.PullInnerWND
-
+
+ jsr OBJ.PullHWND get dest window at ZPWNDPtr
+ jsr WND.GetInnerInClip
+
+ jsr CB.ToGlobal
+
lda CB.Cache+S.CB.X2
sec
sbc CB.Cache+S.CB.X1
@@ -23,7 +26,15 @@ DRAW.Line jsr DRAW.PullY2X2Y1X1
ora DX
bne .2 DX > 0...
- lda #S.CB.CMD.VLINE DX=0 : VLINE Y1,Y2 At X1
+ ldx CB.Cache+S.CB.Y2
+ cpx CB.Cache+S.CB.Y1
+ lda CB.Cache+S.CB.Y2+1
+ sbc CB.Cache+S.CB.Y1+1
+ bcs .17
+
+ >SWAP16 CB.Cache+S.CB.Y1,CB.Cache+S.CB.Y2
+
+.17 lda #S.CB.CMD.VLINE DX=0 : VLINE Y1,Y2 At X1
bra .20
*--------------------------------------
.1 >SWAP16 CB.Cache+S.CB.X1,CB.Cache+S.CB.X2
@@ -51,10 +62,7 @@ DRAW.Line jsr DRAW.PullY2X2Y1X1
.20 sta CB.Cache+S.CB.CMD
- jsr CLIP.CB.Cache
- bcs .8
-
- jmp CB.GFXWrite
+ jmp CB.Write
.8 clc
rts
@@ -63,7 +71,7 @@ DRAW.Line jsr DRAW.PullY2X2Y1X1
lda #$ff
sta IY set IY=-1
-.4
+.4
* jsr CLIP.Line
* bcs .8
@@ -71,7 +79,8 @@ DRAW.Line jsr DRAW.PullY2X2Y1X1
lda #S.CB.CMD.SETPIXEL
sta CB.Cache+S.CB.CMD
- jsr CB.GFXWrite
+ ldx #0 Select CB.Cache
+ jsr CB.GFXWriteX
lda DX
sec
sbc DY
@@ -107,7 +116,8 @@ DRAW.Line.IncXY lda DX DX=DY
clc
adc IY
sta CB.Cache+S.CB.Y1
- jsr CB.GFXWrite
+ ldx #0 Select CB.Cache
+ jsr CB.GFXWriteX
bra .1
.8 jmp PTR.Enable
@@ -183,7 +193,8 @@ DRAW.Line.IncY lda DY
clc
adc IY
sta CB.Cache+S.CB.Y1
- jsr CB.GFXWrite
+ ldx #0 Select CB.Cache
+ jsr CB.GFXWriteX
bra .1
.8 jmp PTR.Enable
@@ -261,112 +272,138 @@ DRAW.Line.IncX lda DX
inc CB.Cache+S.CB.X1+1
-.6 jsr CB.GFXWrite
+.6 ldx #0 Select CB.Cache
+ jsr CB.GFXWriteX
bra .1
.8 jmp PTR.Enable
*--------------------------------------
* fill (short int hWND, short int OP, short int COLOR, int X1, int Y1, int X2, int Y2)
*--------------------------------------
-DRAW.Fill jsr DRAW.PullY2X2Y1X1
+DRAW.Fill jsr CB.PullY2X2Y1X1
>PULLB CB.Cache+S.CB.COLOR
>PULLB CB.Cache+S.CB.OP
+
+ jsr OBJ.PullHWND get dest window at ZPWNDPtr
+ jsr WND.GetInnerInClip
- jsr DRAW.PullInnerWND
+ jsr CB.ToGlobal
lda #S.CB.CMD.FILLRECT
sta CB.Cache+S.CB.CMD
- jsr CLIP.CB.Cache
- bcs .8
-
- jmp CB.GFXWritePtr
-
-.8 clc
- rts
+ jmp CB.Write
*--------------------------------------
-* drawbitmap (short int hWND, short int OP, short int M, S.BM *bitmap, int X1, int Y1)
+* drawBitmap (short int hWND, short int OP, short int M, S.BM *bitmap, int X1, int Y1)
*--------------------------------------
-DRAW.BitMap lda #S.CB.CMD.BITBLT
- jsr CB.InitCacheA
-
- jsr DRAW.PullY1X1
-
+DRAW.BitMap jsr CB.PullY1X1
+
>PULLW CB.Cache+S.CB.SrcPtr
-
+
>PULLB CB.Cache+S.CB.M
>PULLB CB.Cache+S.CB.OP
-
- jsr DRAW.PullInnerWND
-
- jsr CLIP.CB.Cache
- bcs .8
- jmp CB.GFXWritePtr
+ jsr OBJ.PullHWND get dest window at ZPWNDPtr
+ jsr WND.GetInnerInClip
+
+ jsr CB.ToGlobal
-.8 clc
- rts
+ lda #S.CB.CMD.BITBLT
+ sta CB.Cache+S.CB.CMD
+
+ jsr CB.ResetSrcXY
+
+ jmp CB.Write
*--------------------------------------
* drawtext (short int hWND, short int OP, short int hFONT, int X1, int Y1, char *str)
*--------------------------------------
-DRAW.Text lda #S.CB.CMD.DRAWTEXT2
- jsr CB.InitCacheA
-
- >PULLW CB.Cache+S.CB.TxtPtr
-
- jsr DRAW.PullY1X1
-
+DRAW.Text >PULLW CB.Cache+S.CB.TxtPtr
+
+ jsr CB.PullY1X1
+
>PULLB CB.Cache+S.CB.hFont
>PULLB CB.Cache+S.CB.OP
-
- jsr DRAW.PullInnerWND
-
- jsr CLIP.CB.Cache
- bcs .8
- jmp CB.GFXWritePtr
-
-.8 clc
- rts
-*--------------------------------------
-DRAW.PullInnerWND
jsr OBJ.PullHWND get dest window at ZPWNDPtr
+ jsr WND.GetInnerInClip
+
+ jsr CB.ToGlobal
- jsr DRAW.GetInnerWND get inners in CLIP.Rect
+ lda #S.CB.CMD.DRAWTEXT2
+ sta CB.Cache+S.CB.CMD
- >LDYA ZPWNDPtr
- jmp CB.ToGlobal set CB.Cache to global coord.
+ jmp CB.Write
*--------------------------------------
* private
*--------------------------------------
-DRAW.xBM >LDYA L.BMs,x
-DRAW.yaBM >STYA ZPBMPtr
+DRAW.BordersAtX stx IY
-DRAW.BM lda #S.CB.CMD.BITBLT
+ jsr CB.BorderLineH
+
+ ldy #S.OBJ.X1
+
+ lda (ZPObjPtr),y
+ sec
+ sbc IY
+ sta CB.Cache+S.CB.X1
+ iny
+ lda (ZPObjPtr),y
+ sbc #0
+ sta CB.Cache+S.CB.X1+1
+
+ iny #S.OBJ.Y1
+
+ lda (ZPObjPtr),y
+ sec
+ sbc IY
+ sta CB.Cache+S.CB.Y1
+ iny
+ lda (ZPObjPtr),y
+ sbc #0
+ sta CB.Cache+S.CB.Y1+1
+
+ iny #S.OBJ.X2
+
+ lda (ZPObjPtr),y
+ clc
+ adc IY
+ sta CB.Cache+S.CB.X2
+ iny
+ lda (ZPObjPtr),y
+ adc #0
+ sta CB.Cache+S.CB.X2+1 top: X1,X2 at Y1
+
+ iny #S.OBJ.Y2
+
+ lda (ZPObjPtr),y
+ clc
+ adc IY
+ sta CB.Cache+S.CB.Y2
+ iny
+ lda (ZPObjPtr),y
+ adc #0
+ sta CB.Cache+S.CB.Y2+1
+
+ jsr CB.Cache2CBBufG
+
+ jsr CB.SwapY1Y2
+
+ jsr CB.Cache2CBBuf bottom X1,X2 at Y2
+
+ lda #S.CB.CMD.VLINE
sta CB.Cache+S.CB.CMD
- lda #S.CB.OP.MASK+S.CB.OP.ORA+S.CB.OP.COLOR
- sta CB.Cache+S.CB.OP
+ jsr CB.SwapY1Y2
+
+ jsr CB.Cache2CBBuf left Y1,Y2 at X1
- lda #S.CB.M.C16
- sta CB.Cache+S.CB.M
-
- ldx #3
-
- ldy #S.BM.W+3
-
-.2 lda (ZPBMPtr),y
- sta CB.Cache+S.CB.SrcW,x
- dey
- dex
- bpl .2
-
- lda ZPBMPtr
- sta CB.Cache+S.CB.SrcPtr
-
- lda ZPBMPtr+1
- sta CB.Cache+S.CB.SrcPtr+1
+ jsr CB.SwapX1X2
+
+ jmp CB.Cache2CBBuf right X2,Y1,X2,Y2
+*--------------------------------------
+DRAW.xBM >LDYA L.BMs,x
+DRAW.yaBM jsr BM.YA2CB.cache
jmp CB.Cache2CBBuf
*--------------------------------------
@@ -376,68 +413,16 @@ DRAW.YAText >STYA CB.Cache+S.CB.TxtPtr
lda #S.CB.CMD.DRAWTEXT2
sta CB.Cache+S.CB.CMD
- lda #0
- ror CS = inverse
- eor #S.CB.OP.INVERSE
- ora #S.CB.OP.SET
-
-* lda #S.CB.OP.XOR
+ lda #S.CB.OP.XOR
sta CB.Cache+S.CB.OP
lda #S.CB.M.MONO
sta CB.Cache+S.CB.M
+ jsr CB.ResetSrcXY
+
jmp CB.Cache2CBBuf
*--------------------------------------
-DRAW.PullY2X2Y1X1
- ldx #7
- bra DRAW.PullX
-
-DRAW.PullY1X1 ldx #3
-
-DRAW.PullX >PULLA
- sta CB.Cache+S.CB.X1-1,x
- >PULLA
- sta CB.Cache+S.CB.X1,x
- dex
- dex
- bpl DRAW.PullX
-
- rts
-*--------------------------------------
-DRAW.GetInnerWND
- ldy #S.OBJ.X1
-
- lda (ZPWNDPtr),y
- sta CLIP.Rect+S.RECT.X1
- iny
- lda (ZPWNDPtr),y
- sta CLIP.Rect+S.RECT.X1+1
-
- ldy #S.WND.InnerY1
-
- lda (ZPWNDPtr),y
- sta CLIP.Rect+S.RECT.Y1
- iny
- lda (ZPWNDPtr),y
- sta CLIP.Rect+S.RECT.Y1+1
-
- ldy #S.WND.InnerX2
-
- lda (ZPWNDPtr),y
- sta CLIP.Rect+S.RECT.X2
- iny
- lda (ZPWNDPtr),y
- sta CLIP.Rect+S.RECT.X2+1
-
- ldy #S.WND.InnerY2
- lda (ZPWNDPtr),y
- sta CLIP.Rect+S.RECT.Y2
- iny
- lda (ZPWNDPtr),y
- sta CLIP.Rect+S.RECT.Y2+1
- rts
-*--------------------------------------
MAN
SAVE usr/src/lib/libgui.s.draw
LOAD usr/src/lib/libgui.s
diff --git a/LIB/LIBGUI.S.FON.txt b/LIB/LIBGUI.S.FON.txt
index 7e2d36ad..3b97efcd 100644
--- a/LIB/LIBGUI.S.FON.txt
+++ b/LIB/LIBGUI.S.FON.txt
@@ -15,10 +15,8 @@ FON.Init >LDYA L.SYSX7
* ldy #S.FON.PixH
* >SYSCALL2 GetStkObjProp
+
lda #7
- dec
- sta SYSFON.Hm1
- inc
sta SYSFON.H
inc
sta SYSFON.Hp1
@@ -34,12 +32,152 @@ FON.Init >LDYA L.SYSX7
>SYSCALL LoadStkObj
rts
*--------------------------------------
-FON.GetTextSize >STYA CB.CACHE+S.CB.TxtPtr
- stx CB.CACHE+S.CB.hFont
-
+FON.GetTextSize >STYA CB.Cache+S.CB.TxtPtr
+ stx CB.Cache+S.CB.hFont
+
lda #S.CB.CMD.GETTEXTSIZE+S.CB.CMD.OSD
- sta CB.CACHE+S.CB.CMD
- jmp CB.GFXWrite
+ sta CB.Cache+S.CB.CMD
+ ldx #0 Select CB.Cache
+ jmp CB.GFXWriteX
+*--------------------------------------
+FON.GetTextSize2
+ >STYA ZPPtr1
+ stx CB.Cache+S.CB.hFont
+
+ lda #S.CB.CMD.GETTEXTSIZE+S.CB.CMD.OSD
+ sta CB.Cache+S.CB.CMD
+
+ jsr FON.GetBuf
+ bcs .9
+
+ stz DX
+ stz DX+1
+ stz DY
+ stz DY+1
+
+.1 jsr FON.GetLine
+ beq .8
+
+ ldx #0 Select CB.Cache
+ jsr CB.GFXWriteX
+
+ ldx CB.Cache+S.CB.SrcW
+ cpx DX
+ lda CB.Cache+S.CB.SrcW+1
+ tay
+ sbc DX+1
+ bcc .2
+
+ stx DX
+ sty DX+1
+
+.2 lda CB.Cache+S.CB.SrcH
+ clc
+ adc DY
+ sta DY
+
+ lda CB.Cache+S.CB.SrcH+1
+ adc DY+1
+ sta DY+1
+
+ lda (ZPPtr1)
+ bne .1
+
+.8 >LDYA ZPPtr2
+ >SYSCALL2 Free
+
+.9 rts
+*--------------------------------------
+FON.DrawText2 >STYA ZPPtr1
+ stx CB.Cache+S.CB.hFont
+
+ lda #S.CB.OP.XOR
+ sta CB.Cache+S.CB.OP
+
+ lda #S.CB.M.MONO
+ sta CB.Cache+S.CB.M
+
+ jsr CB.ResetSrcXY
+
+ jsr FON.GetBuf
+ bcs .9
+
+ jsr PTR.Disable
+* >DEBUG
+.1 jsr FON.GetLine
+ beq .8
+
+ lda #S.CB.CMD.DRAWTEXT+S.CB.CMD.OSD
+ sta CB.Cache+S.CB.CMD
+
+ ldx #0
+ jsr CB.GFXWriteX
+ bcs .9
+
+* ldx #0
+* jsr CB.GFXWriteX Clip
+
+ jsr CB.GFXWriteClip
+
+ lda CB.Cache+S.CB.SrcPtr
+ >SYSCALL2 FreeStkObj
+
+ lda CB.Cache+S.CB.SrcH
+ clc
+ adc CB.Cache+S.CB.Y1
+ sta CB.Cache+S.CB.Y1
+ bcc .1
+
+ inc CB.Cache+S.CB.Y1+1
+
+ bra .1
+
+.8 >LDYA ZPPtr2
+ >SYSCALL2 Free
+
+ jmp PTR.Enable
+
+.9 rts
+*--------------------------------------
+FON.GetBuf >LDYAI 256
+ >SYSCALL2 GetMem
+ bcs .9
+
+ >STYA ZPPtr2
+ >STYA CB.Cache+S.CB.TxtPtr
+
+.9 rts
+*--------------------------------------
+FON.GetLine ldy #0
+
+.1 lda (ZPPtr1)
+ beq .8
+
+.2 cmp #C.SPACE
+ bcs .3
+
+ eor #C.CR
+ beq .7
+ bne .4
+
+.3 sta (ZPPtr2),y
+ iny
+
+.4 inc ZPPtr1
+ bne .1
+
+ inc ZPPtr1+1
+ bra .1
+
+.7 inc ZPPtr1
+ bne .8
+
+ inc ZPPtr1+1
+
+.8 sta (ZPPtr2),y
+ tya set Z flag
+
+ rts
*--------------------------------------
MAN
SAVE usr/src/lib/libgui.s.fon
diff --git a/LIB/LIBGUI.S.LABEL.txt b/LIB/LIBGUI.S.LABEL.txt
new file mode 100644
index 00000000..03a3988d
--- /dev/null
+++ b/LIB/LIBGUI.S.LABEL.txt
@@ -0,0 +1,80 @@
+NEW
+ AUTO 3,1
+*--------------------------------------
+* NewLabel(HWND, pTEXT, wX, wY)
+*--------------------------------------
+LABEL.New >PULLW DY
+ >PULLW DX
+ >PULLW ZPPtr1
+ jsr OBJ.PullHWND
+
+LABEL.New.I lda #S.OBJ.T.LABEL
+
+ jsr OBJ.New
+ bcs .9
+
+ phx hOBJ
+
+ jsr OBJ.SetDXDYX1Y1
+
+ ldy #S.LABEL.pTEXT
+ lda ZPPtr1
+ sta (ZPObjPtr),y
+ pha
+ iny
+ lda ZPPtr1+1
+ sta (ZPObjPtr),y
+ ply
+
+ ldx hSYSFON
+ jsr FON.GetTextSize2
+
+ ldx #3
+ ldy #S.OBJ.W+3
+
+.1 lda DX,x
+ sta (ZPObjPtr),y
+ dey
+ dex
+ bpl .1
+
+ >LDYA ZPObjPtr
+ jsr OBJ.SetX2Y2
+
+ jsr WND.AddChild.I
+
+ pla hOBJ
+
+ clc
+
+.9 rts
+*--------------------------------------
+LABEL.Enter
+LABEL.Leave clc
+ rts
+*--------------------------------------
+LABEL.fPaint jsr CB.GetBuf
+ bcs .9
+
+ lda #C.WHITE
+ jsr CB.FillRectMonoA
+
+ jsr CB.GetObjX1Y1X2Y2
+
+ jsr CB.Cache2CBBufG
+
+ jsr CB.FlushBuf
+
+ ldy #S.LABEL.pTEXT
+ jsr OBJ.GetPropAtY
+ ldx hSYSFON
+ jmp FON.DrawText2
+
+.9 rts
+*--------------------------------------
+
+*--------------------------------------
+MAN
+SAVE usr/src/lib/libgui.s.label
+LOAD usr/src/lib/libgui.s
+ASM
diff --git a/LIB/LIBGUI.S.MBAR.txt b/LIB/LIBGUI.S.MBAR.txt
index 4edb94bf..d414af1b 100644
--- a/LIB/LIBGUI.S.MBAR.txt
+++ b/LIB/LIBGUI.S.MBAR.txt
@@ -4,30 +4,27 @@ NEW
* Y,A = MBAR definition
*--------------------------------------
MBAR.New >STYA ZPPtr1 MBAR definition
- >STYA ZPObjPtr for pass #2
+ >STYA ZPPtr2 for pass #2
jsr MBAR.GetSize
>SYSCALL2 GetMem
bcs .9
- >STYA ZPMENUPtr
+ >STYA ZPObjPtr
phx hMBAR
lda #S.OBJ.T.MBAR
- sta (ZPMENUPtr) S.OBJ.T
+ sta (ZPObjPtr) S.OBJ.T
lda #0
ldy #S.MBAR.Items-1
-.1 sta (ZPMENUPtr),y
+.1 sta (ZPObjPtr),y
dey
bne .1
- >LDYA ZPObjPtr
- >STYA ZPPtr1 MENU definition
-
jsr MBAR.GetData
pla hMBAR
@@ -69,18 +66,13 @@ MBAR.GetSize lda #S.MBAR.Items+1 Ending\0
.8 >LDYA Counter
rts
*--------------------------------------
-* ZPPtr1 = defintion
-* ZPMENUPtr = DstBuf
+* ZPPtr2 = defintion
+* ZPObjPtr = DstMBar
+* ZPPtr1 = DstMBItem
*--------------------------------------
-MBAR.GetData lda ZPMENUPtr
- clc
- adc #S.MBAR.Items
- sta ZPMENUPtr
- bcc .1
+MBAR.GetData jsr MBAR.GetMBItems
- inc ZPMENUPtr+1
-
-.1 lda (ZPPtr1)
+.1 lda (ZPPtr2)
beq .8
lda #S.MBITEM.T.SUBMENU
@@ -89,11 +81,11 @@ MBAR.GetData lda ZPMENUPtr
lda #0 S.MBITEM.S
jsr MBAR.AddByte
- >LDYA ZPPtr1 pTEXT
+ >LDYA ZPPtr2 pTEXT
ldx hSYSFON
jsr FON.GetTextSize
- lda PREFS.MBarXMargin
+ lda PREFS.XMargin
asl x2
clc
adc CB.CACHE+S.CB.SrcW
@@ -103,23 +95,23 @@ MBAR.GetData lda ZPMENUPtr
adc CB.CACHE+S.CB.SrcW+1
jsr MBAR.AddWord S.MBITEM.W
- >LDYA ZPPtr1 pTEXT
+ >LDYA ZPPtr2 pTEXT
jsr MBAR.AddWord
- jsr SkipStrZPtr1 skip "TEXT\0"
+ jsr SkipStrZPtr2 skip "TEXT\0"
- lda (ZPPtr1)
+ lda (ZPPtr2)
jsr MBAR.AddByte pMENU
ldy #1
- lda (ZPPtr1),y
+ lda (ZPPtr2),y
jsr MBAR.AddByte pMENU+1
lda #2
- jsr SkipAPtr1 stkip pMENU
+ jsr SkipAPtr2 stkip pMENU
bra .1
-.8 sta (ZPMENUPtr)
+.8 sta (ZPPtr1)
rts
*--------------------------------------
MBAR.AddWord pha
@@ -128,11 +120,11 @@ MBAR.AddWord pha
jsr MBAR.AddByte
pla
-MBAR.AddByte sta (ZPMENUPtr)
- inc ZPMENUPtr
+MBAR.AddByte sta (ZPPtr1)
+ inc ZPPtr1
bne .8
- inc ZPMENUPtr+1
+ inc ZPPtr1+1
.8 rts
*--------------------------------------
@@ -142,7 +134,7 @@ MBAR.AddByte sta (ZPMENUPtr)
MBAR.Enter ldy #S.WND.pMBAR
lda (ZPWNDPtr),y
>SYSCALL2 GetMemPtr
- >STYA ZPMENUPtr pMBAR
+ >STYA ZPObjPtr pMBAR
stz ZPPtr2
stz ZPPtr2+1
@@ -156,7 +148,7 @@ MBAR.Enter ldy #S.WND.pMBAR
.1 lda (ZPPtr1)
beq .3
- jsr MBAR.SetX2
+ jsr MBAR.SetX2 set X2 = X1 + W - 1
lda MSG+S.MSG.X1
cmp CB.Cache+S.CB.X1
@@ -187,7 +179,11 @@ MBAR.Enter ldy #S.WND.pMBAR
.8 clc
.9 rts
*--------------------------------------
-* ZPMENUPtr = MBAR
+MBAR.Leave clc
+ rts
+*--------------------------------------
+* ZPWNDPtr parent WND
+* ZPObjPtr = MBAR
* ZPPtr2 = Item to activate
*--------------------------------------
MBAR.Reset stz ZPPtr2
@@ -207,8 +203,8 @@ MBAR.Set jsr MENU.DestroyAll
.4 lda (ZPPtr1)
beq .7
- jsr MBAR.SetX2 set X2 = X1 + W
-
+ jsr MBAR.SetX2 set X2 = X1 + W - 1
+
ldy #S.MBITEM.S
lda (ZPPtr1),y
bmi .5
@@ -235,8 +231,7 @@ MBAR.Set jsr MENU.DestroyAll
.6 jsr MBAR.NextMBItem set X1 = X2
bra .4
-.7 >LDYA L.WND.Screen
- jsr CB.FlushBufToYA
+.7 jsr CB.FlushBuf
bcs .9
>LDYA Counter
@@ -266,18 +261,21 @@ MBAR.Set jsr MENU.DestroyAll
* ZPWNDPtr = parent WND
*--------------------------------------
MBAR.Draw >SYSCALL2 GetMemPtr
- >STYA ZPMENUPtr pMBAR
+ >STYA ZPObjPtr pMBAR
ldy #S.OBJ.X1
ldx #S.CB.X1
jsr CB.GetWndYCacheX
+ jsr CB.GetBuf
+ bcs .9
+
jsr MBAR.GetMBItems
.1 lda (ZPPtr1)
beq .8
- jsr MBAR.SetX2 set X2 = X1 + W
+ jsr MBAR.SetX2 set X2 = X1 + W - 1
jsr MBAR.DrawMBItem
bcs .9
@@ -285,10 +283,7 @@ MBAR.Draw >SYSCALL2 GetMemPtr
jsr MBAR.NextMBItem
bra .1
-.8 lda CB.Cache+S.CB.X2
- sta CB.Cache+S.CB.X1
- lda CB.Cache+S.CB.X2+1
- sta CB.Cache+S.CB.X1+1
+.8 jsr CB.X2ToX1
ldy #S.OBJ.X2
ldx #S.CB.X2
@@ -299,7 +294,9 @@ MBAR.Draw >SYSCALL2 GetMemPtr
lda PREFS.MBarColor
jsr CB.FillRectMonoA
- jmp CB.Cache2CBBuf
+ jsr CB.Cache2CBBuf
+
+ jmp CB.FlushBuf
.9 rts
*--------------------------------------
@@ -318,22 +315,10 @@ MBAR.DrawMBItem ldy #S.MBITEM.S
jsr CB.Cache2CBBuf
- lda PREFS.MBarXMargin
- clc
- adc CB.Cache+S.CB.X1
- sta CB.Cache+S.CB.X1
- bcc .10
+ lda PREFS.XMargin
+ jsr CB.AddA2X1
- inc CB.Cache+S.CB.X1+1
-
-.10 inc CB.Cache+S.CB.Y1
- bne .11
-
- inc CB.Cache+S.CB.Y1+1
-
-.11 ldy #S.MBITEM.S
- lda (ZPPtr1),y
- asl
+ jsr CB.IncY1
ldy #S.MBITEM.pTEXT
lda (ZPPtr1),y
@@ -342,56 +327,52 @@ MBAR.DrawMBItem ldy #S.MBITEM.S
lda (ZPPtr1),y
ply
ldx hSYSFON
- jsr DRAW.YAText
-
- jmp CB.Cache2CBBuf
+ jmp DRAW.YAText
*--------------------------------------
-MBAR.GetMBItems lda ZPMENUPtr
+MBAR.GetMBItems lda ZPObjPtr
clc
adc #S.MBAR.Items
sta ZPPtr1
- lda ZPMENUPtr+1
+ lda ZPObjPtr+1
adc /S.MBAR.Items
sta ZPPtr1+1
rts
*--------------------------------------
-MBAR.NextMBItem lda CB.Cache+S.CB.X2
- sta CB.Cache+S.CB.X1
- lda CB.Cache+S.CB.X2+1
- sta CB.Cache+S.CB.X1+1
+MBAR.NextMBItem jsr CB.X2ToX1
lda #S.MBITEM
jmp SkipAPtr1
*--------------------------------------
-MBAR.SetX2 lda CB.Cache+S.CB.X1
+MBAR.SetX2 ldy #S.MBITEM.W
+ lda (ZPPtr1),y
clc
- ldy #S.MBITEM.W
- adc (ZPPtr1),y
- sta CB.Cache+S.CB.X2
-
- lda CB.Cache+S.CB.X1+1
+ adc CB.Cache+S.CB.X1
+ pha
+
iny
- adc (ZPPtr1),y
+ lda (ZPPtr1),y
+ adc CB.Cache+S.CB.X1+1
+
+ ply
+ bne .1
+
+ dec
+
+.1 dey
+
+ sty CB.Cache+S.CB.X2
sta CB.Cache+S.CB.X2+1
rts
*--------------------------------------
MBAR.SetY1Y2 ldy #S.WND.MBarY1
- lda (ZPWNDPtr),y
- sta CB.Cache+S.CB.Y1
- iny
- lda (ZPWNDPtr),y
- sta CB.Cache+S.CB.Y1+1
+ ldx #S.CB.Y1
+ jsr CB.GetWndYCacheX
ldy #S.WND.MBarY2
- lda (ZPWNDPtr),y
- sta CB.Cache+S.CB.Y2
- iny
- lda (ZPWNDPtr),y
- sta CB.Cache+S.CB.Y2+1
-
- rts
+ ldx #S.CB.Y2
+ jmp CB.GetWndYCacheX
*--------------------------------------
MAN
SAVE usr/src/lib/libgui.s.mbar
diff --git a/LIB/LIBGUI.S.MBOX.txt b/LIB/LIBGUI.S.MBOX.txt
index 5a3101f5..9a41851d 100644
--- a/LIB/LIBGUI.S.MBOX.txt
+++ b/LIB/LIBGUI.S.MBOX.txt
@@ -1,23 +1,23 @@
NEW
AUTO 3,1
*--------------------------------------
-* idButton MsgBox(pTITLE, pTEXT, pBM, idButtons)
-
-* guiNewWnd(sFlags, iX1, iY1, iW, iH)
+* MsgBox(pTITLE, pBM, pTEXT, idButtons)
*--------------------------------------
MBOX.MsgBox >LDYAI 360
>STYA IE
-
- >LDYAI 80
+
+ >LDYAI 70
>STYA INE
-
+
lda WND.Desktop+S.OBJ.W
sec
sbc IE
+ and #$F8
sta DX
+
lda WND.Desktop+S.OBJ.W+1
sbc IE+1
- lsr
+ lsr
sta DX+1
ror DX
@@ -27,7 +27,7 @@ MBOX.MsgBox >LDYAI 360
sta DY
lda WND.Desktop+S.OBJ.H+1
sbc INE+1
- lsr
+ lsr
sta DY+1
ror DY
@@ -38,13 +38,14 @@ MBOX.MsgBox >LDYAI 360
>PUSHW INE
jsr WND.New
bcs .9
-
- pha
-
+
+ sta WND.hWND
+ jsr OBJ.GetHWNDA for childs later....
+
ldy #S.WND.BGCOLOR
lda #C.WHITE
sta (ZPObjPtr),y
-
+
ldy #6
lda (pStack),y
tax
@@ -52,51 +53,93 @@ MBOX.MsgBox >LDYAI 360
lda (pStack),y
ldy #S.WND.pTITLE
jsr OBJ.SetAXAtY
-
- pla
- jsr WND.Show
- bcs .9
-
- ldy #2 pBM
+ ldy #4 pBM
lda (pStack),y
- tax
+ sta ZPBMPtr+1
dey
lda (pStack),y
- jsr MBOX.DrawBM
-
+ sta ZPBMPtr
+
+ lda #16
+ sta DX
+ stz DX+1
+ lda #20
+ sta DY
+ stz DY+1
+ jsr BITMAP.New.I
+ bcs .9
+ ldy #2 pTEXT
+ lda (pStack),y
+ sta ZPPtr1+1
+ dey
+ lda (pStack),y
+ sta ZPPtr1
+ lda #60
+ sta DX
+* stz DX+1
+* lda #30
+* sta DY
+* stz DY+1
+ jsr LABEL.New.I
+ bcs .9
+
+ jsr MBOX.AddButtons
+ bcs .9
+
+.8 lda WND.hWND
+ jsr WND.Show
+
.9 >POP 7
rts
*--------------------------------------
-MBOX.DrawBM cpx #0
- bne .1
+MBOX.AddButtons lda #360-5-60
+ sta D
+ lda /360-5-60
+ sta D+1
- tax
- >LDYA L.BMs,x
+ stz IY
+
+.1 lda (pStack)
+ beq .8
-.1 >STYA ZPBMPtr
+ lsr
+ sta (pStack)
+ bcc .7
- jsr CB.GetBuf
+ jsr MBOX.AddButton
bcs .9
- lda #28
- sta CB.Cache+S.CB.X1
- stz CB.Cache+S.CB.X1+1
- sta CB.Cache+S.CB.Y1
- stz CB.Cache+S.CB.Y1+1
-
- jsr DRAW.BM
-* >DEBUG
-* >LDYA ZPWNDPtr
- >LDYA L.WND.Desktop
- jmp CB.FlushBufToYA
+ lda D
+ sec
+ sbc #55
+ sta D
+ bcs .7
-.9 rts
+ dec D+1
+
+.7 inc IY
+ inc IY
+ bra .1
+
+.8 clc
+.9 rts
*--------------------------------------
+MBOX.AddButton >PUSHB WND.hWND
+ >PUSHBI 0 flags
+ >PUSHWI 50 w
+ >PUSHWZ pIcon
+ ldx IY
+ >PUSHW L.BUT.Labels,x pText
+ >PUSHWZ keymod/key
+ >PUSHWZ id
+ >PUSHW D X
+ >PUSHWI 45 Y
+ jmp BUT.New
*--------------------------------------
MAN
SAVE usr/src/lib/libgui.s.mbox
diff --git a/LIB/LIBGUI.S.MENU.txt b/LIB/LIBGUI.S.MENU.txt
index 37eabc5a..c32c2914 100644
--- a/LIB/LIBGUI.S.MENU.txt
+++ b/LIB/LIBGUI.S.MENU.txt
@@ -8,7 +8,7 @@ MENU.New >PULLW DY
>PULLYA
MENU.New.I >STYA ZPPtr1 MENU definition
- >STYA ZPObjPtr for pass #2
+ >STYA ZPPtr2 for pass #2
ldx MENU.Stack.Cnt
cpx #MENU.MAX
@@ -18,42 +18,31 @@ MENU.New.I >STYA ZPPtr1 MENU definition
>SYSCALL2 GetMem
bcs .99
- >STYA ZPMENUPtr
+ >STYA ZPObjPtr
txa hMenu
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.Items-1
-.1 sta (ZPMENUPtr),y
+.1 sta (ZPObjPtr),y
dey
bne .1
- ldx #3
- ldy #S.OBJ.X1+3
+ lda #S.OBJ.F.BORDER
+ ldy #S.OBJ.F
+ sta (ZPObjPtr),y
-.2 lda DX,x
- sta (ZPMENUPtr),y
- dey
- dex
- bpl .2
-
- >LDYA ZPObjPtr
- >STYA ZPPtr1 MENU definition
+ jsr OBJ.SetDXDYX1Y1
jsr MENU.GetData
- ldx MENU.Stack.Cnt
- lda MENU.Stack,x
- >SYSCALL2 GetMemPtr
- >STYA ZPMENUPtr
-
jsr MENU.SetMenuSizePos
ldx MENU.Stack.Cnt
@@ -111,99 +100,88 @@ MENU.GetSize lda #S.MENU.Items+1 Ending\0
.8 >LDYA Counter
rts
*--------------------------------------
-* ZPPtr1 = defintion
-* ZPMENUPtr = DstBuf
+* ZPPtr2 = defintion
+* ZPObjPtr = DstMenu
+* ZPPtr1 = DstMItem
*--------------------------------------
-MENU.GetData lda ZPMENUPtr
- clc
- adc #S.MENU.Items
- sta ZPMENUPtr
- bcc .1
+MENU.GetData jsr MENU.GetMItems
- inc ZPMENUPtr+1
-
-.1 lda (ZPPtr1)
- sta (ZPMENUPtr)
+.1 lda (ZPPtr2)
+ sta (ZPPtr1)
beq .8
cmp #S.MITEM.T.SEP
bne .2
- inc ZPPtr1 skip 1 byte
+ inc ZPPtr2 skip 1 byte
bne .5
- inc ZPPtr1+1
+ inc ZPPtr2+1
bra .5
*--------------------------------------
.2 cmp #S.MITEM.T.ITEM
bne .3
ldy #1 T+ID+KEMOD+KEY+pICON+"text"
- lda (ZPPtr1),y
+ lda (ZPPtr2),y
ldy #S.MITEM.ID
- sta (ZPMENUPtr),y
+ sta (ZPPtr1),y
ldy #2
- lda (ZPPtr1),y
+ lda (ZPPtr2),y
tax
iny
- lda (ZPPtr1),y
+ lda (ZPPtr2),y
ldy #S.MITEM.KEYMOD+1
- sta (ZPMENUPtr),y
+ sta (ZPPtr1),y
dey KEY
txa
- sta (ZPMENUPtr),y
+ sta (ZPPtr1),y
lda #4
bra .4 skip 4 bytes
*--------------------------------------
.3 ldy #1 skip T+pMENU+pICON+"text"
- lda (ZPPtr1),y
+ lda (ZPPtr2),y
tax
iny
- lda (ZPPtr1),y
+ lda (ZPPtr2),y
ldy #S.MITEM.pMENU+1
- sta (ZPMENUPtr),y
+ sta (ZPPtr1),y
dey
txa
- sta (ZPMENUPtr),y
+ sta (ZPPtr1),y
lda #3 skip 3 bytes
-.4 jsr SkipAPtr1
+.4 jsr SkipAPtr2
ldy #1
- lda (ZPPtr1),y
+ lda (ZPPtr2),y
ldy #S.MITEM.pICON+1
- sta (ZPMENUPtr),y
+ sta (ZPPtr1),y
dey
- lda (ZPPtr1)
- sta (ZPMENUPtr),y
+ lda (ZPPtr2)
+ sta (ZPPtr1),y
lda #2 skip pICON
- jsr SkipAPtr1
+ jsr SkipAPtr2
ldy #S.MITEM.pTEXT
- lda ZPPtr1
- sta (ZPMENUPtr),y
+ lda ZPPtr2
+ sta (ZPPtr1),y
iny
- lda ZPPtr1+1
- sta (ZPMENUPtr),y
+ lda ZPPtr2+1
+ sta (ZPPtr1),y
- jsr SkipStrZPtr1 skip "TEXT\0"
+ jsr SkipStrZPtr2 skip "TEXT\0"
ldy #S.MITEM.S
lda #0
- sta (ZPMENUPtr),y
+ sta (ZPPtr1),y
-.5 lda ZPMENUPtr
- clc
- adc #S.MITEM
- sta ZPMENUPtr
- bcc .1
-
- inc ZPMENUPtr+1
+.5 jsr MENU.NextMItem
bra .1
.8 clc
@@ -234,15 +212,15 @@ MENU.SetMenuSizePos
.2 jsr MENU.NextMItemDY
bra .1
-
-.3 lda #2+MENU.LMargin+MENU.RMargin 2px Borders+5 LMARGIN (Checked) +5 RMARGIN (SubMenu)
+*--------------------------------------
+.3 lda #8+8 1px Border+7 (Checked) +7 (SubMenu)+1px Border
clc
adc IY Icon W
sta DX
stz DX+1
lda DX
- sec 1px sep
+ clc
adc IE Max Text W
sta DX
@@ -251,55 +229,56 @@ MENU.SetMenuSizePos
sta DX+1
lda DX
- sec 1px sep
+ clc
adc INE Max Mod-Key W
sta DX
- bcc .4
- inc DX+1
+ lda DX+1
+ adc INE+1
+ sta DX+1
-.4 ldy #S.OBJ.W
-
- sta (ZPMENUPtr),y
+ ldy #S.OBJ.W
+ lda DX
+ sta (ZPObjPtr),y
iny
lda DX+1
- sta (ZPMENUPtr),y
+ sta (ZPObjPtr),y
iny #S.OBJ.H
lda DY
- sta (ZPMENUPtr),y
+ sta (ZPObjPtr),y
iny
lda DY+1
- sta (ZPMENUPtr),y
+ sta (ZPObjPtr),y
ldy #S.MENU.iW
lda IY
- sta (ZPMENUPtr),y
+ sta (ZPObjPtr),y
ldy #S.MENU.tW
lda IE
- sta (ZPMENUPtr),y
+ sta (ZPObjPtr),y
iny
lda IE+1
- sta (ZPMENUPtr),y
+ sta (ZPObjPtr),y
- iny #S.MENU.kW
+ ldy #S.MENU.kW
lda INE
- sta (ZPMENUPtr),y
+ sta (ZPObjPtr),y
iny
lda INE+1
- sta (ZPMENUPtr),y
-
+ sta (ZPObjPtr),y
+*--------------------------------------
ldy #S.OBJ.Y1
lda DY
clc
- adc (ZPMENUPtr),y
+ adc (ZPObjPtr),y
tax
iny
lda DY+1
- adc (ZPMENUPtr),y
+ adc (ZPObjPtr),y
cpx WND.Screen+S.OBJ.H
sbc WND.Screen+S.OBJ.H+1
@@ -307,18 +286,18 @@ MENU.SetMenuSizePos
ldy #S.OBJ.Y1
- lda (ZPMENUPtr),y
+ lda (ZPObjPtr),y
* sec
sbc DY
- sta (ZPMENUPtr),y
+ sta (ZPObjPtr),y
iny
- lda (ZPMENUPtr),y
+ lda (ZPObjPtr),y
sbc DY+1
- sta (ZPMENUPtr),y
+ sta (ZPObjPtr),y
-.5 >LDYA ZPMENUPtr
+.5 >LDYA ZPObjPtr
jmp OBJ.SetX2Y2
*--------------------------------------
MENU.GetMItemW ldy #S.MITEM.pICON
@@ -327,7 +306,7 @@ MENU.GetMItemW ldy #S.MITEM.pICON
ora (ZPPtr1),y
beq .1
- lda #17 Reserve space for Icon W + 1px SEP
+ lda #20 Reserve space for Icon W + 4px SEP
sta IY
.1 jsr MENU.GetText
@@ -351,7 +330,7 @@ MENU.GetMItemW ldy #S.MITEM.pICON
jsr FON.GetTextSize
ldx CB.Cache+S.CB.SrcW
- cmp INE
+ cpx INE
lda CB.Cache+S.CB.SrcW+1
sbc INE+1
bcc .8
@@ -362,38 +341,6 @@ MENU.GetMItemW ldy #S.MITEM.pICON
.8 rts
*--------------------------------------
-* 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
@@ -417,7 +364,12 @@ MENU.FindMItemByID
.9 sec
rts
*--------------------------------------
-MENU.Enter jsr MENU.GetDXDY
+* ZPObjPtr = Menu
+*--------------------------------------
+MENU.Enter >LDYA L.WND.Screen
+ jsr CLIP.GetRect
+
+ jsr MENU.GetDXDY
stz D
stz D+1
@@ -425,12 +377,12 @@ MENU.Enter jsr MENU.GetDXDY
ldy #S.OBJ.X2
lda DX X1
clc
- adc (ZPMENUPtr),y
+ adc (ZPObjPtr),y
sta IE IE = X2
iny
lda DX+1
- adc (ZPMENUPtr),y
+ adc (ZPObjPtr),y
sta IE+1
jsr MENU.GetMItems
@@ -443,7 +395,7 @@ MENU.Enter jsr MENU.GetDXDY
lda DY Y1
clc
- adc SYSFON.Hp2
+ adc SYSFON.Hp1
sta INE INE = Y2
lda DY+1
adc #0
@@ -496,8 +448,11 @@ MENU.Enter jsr MENU.GetDXDY
sta D+1
lda DY
+ sec
+ sbc #1
sta Counter
lda DY+1
+ sbc #0
sta Counter+1
bra .2
@@ -505,23 +460,25 @@ MENU.Enter jsr MENU.GetDXDY
.8 clc
.9 rts
*--------------------------------------
-.4 >LDYA L.WND.Screen
- jsr CB.FlushBufToYA
-
- lda D
+.4 lda D
ora D+1
beq .5
>PUSHW D pMENU
- ldy #S.OBJ.X2+1
- lda (ZPMENUPtr),y
+ ldy #S.OBJ.X2
+ lda (ZPObjPtr),y
+ clc
+ adc #1
+ tax
+ iny
+ lda (ZPObjPtr),y
+ adc #0
>PUSHA
- dey
- lda (ZPMENUPtr),y
+ txa
>PUSHA
- >PUSHW Counter
+ >PUSHW Counter Y1
jsr MENU.New
bcs .9
@@ -529,7 +486,7 @@ MENU.Enter jsr MENU.GetDXDY
jmp MENU.Draw
*--------------------------------------
.5 lda MSG+S.MSG.S
- bit #S.MSG.S.CLK
+ bit #S.XY.S.CLK
beq .8
lda #S.MSG.T.ID
@@ -541,21 +498,52 @@ MENU.Enter jsr MENU.GetDXDY
jmp MENU.DestroyAll
*--------------------------------------
+MENU.Leave clc
+ rts
+*--------------------------------------
* DrawMenu(hMENU)
*--------------------------------------
MENU.Draw >SYSCALL2 GetMemPtr
- >STYA ZPMENUPtr
+ >STYA ZPObjPtr
- jsr MENU.Save
+ >LDYA L.WND.Screen
+ jsr CLIP.GetRect
+
+ lda #S.CB.CMD.GETRECTBUFSIZE
+ sta CB.Cache+S.CB.CMD
+
+ jsr CB.GetObjX1Y1X2Y2
+
+ jsr CB.GFXWriteClip
bcs .9
- jsr CB.GetBuf
+ >SYSCALL2 NewStkObj
bcs .9
- >LDYA ZPMENUPtr
+ stx CB.Cache+S.CB.DstPtr
+ stz CB.Cache+S.CB.DstPtr+1
+
+ txa
+ ldy #S.MENU.hSAVEBUF
+ sta (ZPObjPtr),y
+
+ lda #S.CB.CMD.BITBLT
+ sta CB.Cache+S.CB.CMD
+
+ lda #S.CB.OP.SAVE
+ sta CB.Cache+S.CB.OP
+
+ jsr CB.ResetSrcXY
+
+ jsr CB.GetObjSrcWH
+
+ jsr CB.Write
+
+ >LDYA ZPObjPtr
ldx #0
jsr OBJ.DrawBorders
-
+ bcs .9
+
jsr MENU.GetDXDY
jsr MENU.GetMItems
@@ -563,12 +551,13 @@ MENU.Draw >SYSCALL2 GetMemPtr
.1 lda (ZPPtr1)
beq .8
- jsr MENU.DrawMItem
+ jsr MENU.DrawMItemBuf
+ bcs .9
+
jsr MENU.NextMItemDY
bra .1
-.8 >LDYA L.WND.Screen
- jmp CB.FlushBufToYA
+.8 clc
.9 rts
*--------------------------------------
@@ -578,30 +567,28 @@ MENU.DrawMItemBuf
jsr MENU.DrawMItem
bcs .9
-
- >LDYA L.WND.Screen
- jmp CB.FlushBufToYA
-
+
+ jmp CB.FlushBuf
+
.9 rts
*--------------------------------------
MENU.DrawMItem jsr MENU.ResetX1Y1X2
lda (ZPPtr1)
cmp #S.MITEM.T.SEP
- bne MENU.DrawMItem1
+ bne .1
jsr CB.BorderLineH
-
jmp CB.Cache2CBBuf
*--------------------------------------
-MENU.DrawMItem1 jsr MENU.IsSelected
+.1 jsr MENU.IsSelected
lda PREFS.MenuColor
- bcc .15
+ bcc .2
eor #$ff
-.15 jsr CB.FillRectMonoA
+.2 jsr CB.FillRectMonoA
lda CB.Cache+S.CB.Y1
sec
@@ -613,72 +600,57 @@ MENU.DrawMItem1 jsr MENU.IsSelected
sta CB.Cache+S.CB.Y2+1
jsr CB.Cache2CBBuf
*--------------------------------------
- inc CB.Cache+S.CB.Y1 Y1:1px margin
- bne .12
+ jsr CB.IncY1 Y1:1px margin
- inc CB.Cache+S.CB.Y1+1
+ lda #8 TODO : Checked
+ jsr CB.AddA2X1
-.12 lda CB.Cache+S.CB.X1
- clc
- adc #MENU.LMargin TODO : Checked
- sta CB.Cache+S.CB.X1
- bcc .11
-
- inc CB.Cache+S.CB.X1+1
-
-.11 jsr MENU.GetIcon
- beq .2
+ jsr MENU.GetIcon
+ beq .3
jsr DRAW.yaBM
+*--------------------------------------
+.3 ldy #S.MENU.iW
+ lda (ZPObjPtr),y
+ jsr CB.AddA2X1
-.2 lda CB.Cache+S.CB.X1
- clc
- ldy #S.MENU.iW
- adc (ZPMENUPtr),y
- sta CB.Cache+S.CB.X1
- bcc .21
-
- inc CB.Cache+S.CB.X1+1
-
-.21 jsr MENU.IsSelected
jsr MENU.GetText
ldx hSYSFON
jsr DRAW.YAText
- lda CB.Cache+S.CB.X1
- sec
ldy #S.MENU.tW
- adc (ZPMENUPtr),y
+ lda (ZPObjPtr),y
+ clc
+ adc CB.Cache+S.CB.X1
sta CB.Cache+S.CB.X1
- lda CB.Cache+S.CB.X1+1
- iny
- adc (ZPMENUPtr),y
- sta CB.Cache+S.CB.X1+1
+ iny
+ lda (ZPObjPtr),y
+ adc CB.Cache+S.CB.X1+1
+ sta CB.Cache+S.CB.X1+1
+*--------------------------------------
lda (ZPPtr1)
cmp #S.MITEM.T.ITEM
- bne .3
+ bne .4
- jsr MENU.IsSelected
jsr MENU.GetKeyString C untouched
- beq .3
+ beq .8
ldx hSYSFON
- jsr DRAW.YAText
-
-.3 lda (ZPPtr1)
- cmp #S.MITEM.T.SUBMENU
+ jmp DRAW.YAText
+*--------------------------------------
+.4 cmp #S.MITEM.T.SUBMENU
bne .8
- lda CB.Cache+S.CB.X1
- sec
ldy #S.MENU.kW
- adc (ZPMENUPtr),y
+ lda (ZPObjPtr),y
+ clc
+ adc CB.Cache+S.CB.X1
sta CB.Cache+S.CB.X1
- lda CB.Cache+S.CB.X1+1
iny
- adc (ZPMENUPtr),y
+ lda (ZPObjPtr),y
+ adc CB.Cache+S.CB.X1+1
sta CB.Cache+S.CB.X1+1
ldx #BM.ID.RIGHT
@@ -775,73 +747,25 @@ MENU.GetKeyString
.6 pla
-.9 rts
-*--------------------------------------
-MENU.Save jsr PTR.Disable
-
- lda #S.CB.CMD.GETRECTBUFSIZE
- jsr CB.InitCacheA
-
- ldy #S.OBJ.X1
- ldx #0
-
-.1 lda (ZPMENUPtr),y
- sta CB.Cache+S.CB.X1,x
- iny
- inx
- cpx #8 X1,Y1,X2,Y2
- bne .1
-
- jsr CB.GFXWrite
-
- >SYSCALL2 NewStkObj
- bcs .9
-
- stx CB.Cache+S.CB.DstPtr
-
- txa
- ldy #S.MENU.hSAVEBUF
- sta (ZPMENUPtr),y
-
- lda #S.CB.CMD.BITBLT
- sta CB.Cache+S.CB.CMD
-
- lda #S.CB.OP.SAVE
- sta CB.Cache+S.CB.OP
-
- ldy #S.OBJ.W
- ldx #0
-
-.2 lda (ZPMENUPtr),y
- sta CB.Cache+S.CB.SrcW,x
- iny
- inx
- cpx #4 W,H
- bne .2
-
- jsr CB.GFXWrite
-
- jmp PTR.Enable
-
.9 rts
*--------------------------------------
MENU.GetDXDY ldy #S.OBJ.X1
- lda (ZPMENUPtr),y
+ lda (ZPObjPtr),y
clc
adc #1
sta DX
iny
- lda (ZPMENUPtr),y
+ lda (ZPObjPtr),y
adc #0
sta DX+1
ldy #S.OBJ.Y1
- lda (ZPMENUPtr),y
+ lda (ZPObjPtr),y
clc
adc #1
sta DY
iny
- lda (ZPMENUPtr),y
+ lda (ZPObjPtr),y
adc #0
sta DY+1
@@ -849,12 +773,12 @@ MENU.GetDXDY ldy #S.OBJ.X1
*--------------------------------------
MENU.ResetX1Y1X2
ldy #S.OBJ.X1
- lda (ZPMENUPtr),y
+ lda (ZPObjPtr),y
clc
adc #1
sta CB.Cache+S.CB.X1
iny
- lda (ZPMENUPtr),y
+ lda (ZPObjPtr),y
adc #0
sta CB.Cache+S.CB.X1+1
@@ -864,23 +788,23 @@ MENU.ResetX1Y1X2
sta CB.Cache+S.CB.Y1+1
ldy #S.OBJ.X2
- lda (ZPMENUPtr),y
+ lda (ZPObjPtr),y
sec
sbc #1
sta CB.Cache+S.CB.X2
iny
- lda (ZPMENUPtr),y
+ lda (ZPObjPtr),y
sbc #0
sta CB.Cache+S.CB.X2+1
rts
*--------------------------------------
-MENU.GetMItems lda ZPMENUPtr
+MENU.GetMItems lda ZPObjPtr
clc
adc #S.MENU.Items
sta ZPPtr1
- lda ZPMENUPtr+1
+ lda ZPObjPtr+1
adc /S.MENU.Items
sta ZPPtr1+1
rts
@@ -915,13 +839,18 @@ MENU.Destroy clc
jsr PTR.Disable
lda #S.CB.CMD.BITBLT
- jsr CB.InitCacheA
+ sta CB.Cache+S.CB.CMD
lda #S.CB.OP.RESTORE
sta CB.Cache+S.CB.OP
plp
+ lda ZPObjPtr+1
+ pha
+ lda ZPObjPtr
+ pha
+
.2 php
ldx MENU.Stack.Cnt
@@ -929,33 +858,22 @@ MENU.Destroy clc
>SYSCALL2 GetMemPtr
>STYA ZPObjPtr
- ldy #S.OBJ.X1
- ldx #0
+ jsr CB.GetObjX1Y1X2Y2
-.3 lda (ZPObjPtr),y
- sta CB.Cache+S.CB.X1,x
- iny
- inx
- cpx #8 X1,Y1,X2,Y2
- bne .3
+ jsr CB.ResetSrcXY
- ldy #S.OBJ.W
- ldx #0
-
-.4 lda (ZPObjPtr),y
- sta CB.Cache+S.CB.SrcW,x
- iny
- inx
- cpx #4 W,H
- bne .4
+ jsr CB.GetObjSrcWH
ldy #S.MENU.hSAVEBUF
lda (ZPObjPtr),y
sta CB.Cache+S.CB.DstPtr
+ stz CB.Cache+S.CB.DstPtr+1
- jsr CB.GFXWrite
+ ldx #0 Select CB.Cache
+ jsr CB.GFXWriteX Direct Write (no clip)
- lda CB.Cache+S.CB.DstPtr
+ ldy #S.MENU.hSAVEBUF
+ lda (ZPObjPtr),y
>SYSCALL2 FreeStkObj
ldx MENU.Stack.Cnt
@@ -969,7 +887,12 @@ MENU.Destroy clc
bne .2
-.7 jmp PTR.Enable
+.7 pla
+ sta ZPObjPtr
+ pla
+ sta ZPObjPtr+1
+
+ jmp PTR.Enable
.8 clc
rts
diff --git a/LIB/LIBGUI.S.MOU.txt b/LIB/LIBGUI.S.MOU.txt
index ccd55589..1d4d896a 100644
--- a/LIB/LIBGUI.S.MOU.txt
+++ b/LIB/LIBGUI.S.MOU.txt
@@ -19,19 +19,24 @@ MOU.Init >PUSHW L.DEVNAME.MOUSE
clc
rts
*--------------------------------------
-MOU.Setup lda DCB.GFX+S.DCB.GFX.W+1
+* make sure mouse X,Y always in Screen
+*--------------------------------------
+MOU.Setup lda CLIP.Screen+S.RECT.X2+1
sta MouseClamp+3
lsr
sta PTR.Pos+S.POINT.X+1
- lda DCB.GFX+S.DCB.GFX.W
+
+ lda CLIP.Screen+S.RECT.X2
sta MouseClamp+2
ror
sta PTR.Pos+S.POINT.X
- lda DCB.GFX+S.DCB.GFX.H+1
+
+ lda CLIP.Screen+S.RECT.Y2+1
sta MouseClamp+7
lsr
sta PTR.Pos+S.POINT.Y+1
- lda DCB.GFX+S.DCB.GFX.H
+
+ lda CLIP.Screen+S.RECT.Y2
sta MouseClamp+6
ror
sta PTR.Pos+S.POINT.Y
@@ -68,25 +73,25 @@ MOU.CheckOverMenu
lda MENU.Stack,x
>SYSCALL2 GetMemPtr
- >STYA ZPMENUPtr
- pha
- tya
- clc
- adc #S.OBJ.X1
- tay
- pla
- adc /S.OBJ.X1
- jsr MOU.InRectYA
+ >STYA ZPObjPtr
+
+ jsr MOU.InObj
bcs .3
- jsr MENU.Enter
+ lda #PTR.T.ARROW
+ jsr PTR.Set
- clc
- rts
+ jmp MENU.Enter
.3 ldx MENU.Stack.Idx
bne .2
-
+
+ lda MSG+S.MSG.S
+ bit #S.XY.S.CLK
+ beq .9
+
+ jsr MENU.DestroyAll
+
.9 sec
rts
*--------------------------------------
@@ -111,76 +116,71 @@ MOU.CheckOverWND
lda WND.Stack-1,x
jsr OBJ.GetHWNDA
- ldy #S.OBJ.F
- lda (ZPWNDPtr),y
- and #S.OBJ.F.BORDER
- beq .2
-
jsr MOU.ChkWNDBorders
- bcc .99
+ bcc MOU.CheckOverSysBut.RTS
-.2 lda ZPWNDPtr
+ lda ZPWNDPtr
clc
adc #S.OBJ.X1
tay
lda ZPWNDPtr+1
- adc #0
-
+ adc /S.OBJ.X1
jsr MOU.InRectYA
bcs .7 not over this WND
lda MSG+S.MSG.S
- bit #S.MSG.S.CLK
- beq .22
+ bit #S.XY.S.CLK
+ beq .2
jsr WND.Bring2Front
-.22 ldy #S.WND.TBarY2
+.2 lda ZPWNDPtr
+ clc
+ adc #S.WND.InnerX1
+ tay
+ lda ZPWNDPtr+1
+ adc /S.WND.InnerX1
+ jsr MOU.InRectYA
+ bcc .8 in Inner Space
+
+ ldy #S.OBJ.S
lda (ZPWNDPtr),y
- cmp MSG+S.MSG.Y1
- iny
- lda (ZPWNDPtr),y
- sbc MSG+S.MSG.Y1+1
+ and #S.WND.S.HASTBAR
+ beq .3
+
+ ldy #S.WND.TBarY2
+ jsr MOU.WNDCmpY
bcc .3 not in TBAR
+ jmp MOU.MoveWND
- bra .5
-
-.3 ldy #S.WND.MBarY2
-
+.3 ldy #S.OBJ.S
lda (ZPWNDPtr),y
- cmp MSG+S.MSG.Y1
- iny
- lda (ZPWNDPtr),y
- sbc MSG+S.MSG.Y1+1
+ and #S.WND.S.HASMBAR
+ beq .4
+
+ ldy #S.WND.MBarY2
+ jsr MOU.WNDCmpY
bcc .4 not in MBAR
jsr MBAR.Enter
bra .5
-.4 ldy #S.WND.SBarY1
+.4 ldy #S.OBJ.S
+ lda (ZPWNDPtr),y
+ and #S.WND.S.HASSBAR
+ beq .5
- lda (ZPWNDPtr),y
- cmp MSG+S.MSG.Y1
- iny
- lda (ZPWNDPtr),y
- sbc MSG+S.MSG.Y1+1
- bcs .6 not in SBAR
+ ldy #S.WND.SBarY1
+ jsr MOU.WNDCmpY
+ bcs .5 not in SBAR
.5 lda #PTR.T.ARROW
- jsr PTR.Set
- clc
- rts
-
-.6 lda #PTR.T.WAIT
- jsr PTR.Set
-
- clc
- rts
+.6 jmp PTR.Set
.7 ldx WND.Stack.Idx
@@ -191,9 +191,63 @@ MOU.CheckOverWND
jsr PTR.Set
.9 sec
+ rts
+*--------------------------------------
+.8 ldy #S.WND.hPTR
+ lda (ZPWNDPtr),y
+ jsr PTR.Set
+
+ jsr MOU.ToLocal
+
+ jsr MOU.ChkWNDChilds
+ bcc .99
+
+ clc
.99 rts
*--------------------------------------
+MOU.MoveWND lda MSG+S.MSG.S
+ bit #S.XY.S.DRAGSTART
+ beq .8
+
+ lda ZPWNDPtr
+ clc
+ adc #S.OBJ.X1
+ tay
+ lda ZPWNDPtr+1
+ adc /S.OBJ.X1
+
+ jmp PTR.SetRect
+
+.8 lda #PTR.T.MOVE
+ jmp PTR.Set
+*--------------------------------------
+MOU.ChkWNDChilds
+
+ jsr WND.GetChilds
+ beq .9
+
+.1 jsr MOU.InObj
+ bcs .7 not over this Child
+
+ jsr OBJ.Enter
+ bra .8
+
+.7 jsr OBJ.Leave
+
+.8 jsr OBJ.GetNext
+ bne .1
+
+.9
+MOU.ChkWNDChilds.9
+ sec
+ rts
+*--------------------------------------
MOU.ChkWNDBorders
+ ldy #S.OBJ.F
+ lda (ZPWNDPtr),y
+ and #S.OBJ.F.BORDER
+ beq MOU.ChkWNDChilds.9
+
stz IY
ldy #S.OBJ.X1
@@ -238,13 +292,13 @@ MOU.ChkWNDBorders
lda (ZPWNDPtr),y
clc
adc #1
- eor MSG+S.MSG.X2
+ eor MSG+S.MSG.X1
bne .5
iny
lda (ZPWNDPtr),y
adc #0
- eor MSG+S.MSG.X2+1
+ eor MSG+S.MSG.X1+1
bne .5
lda IY
@@ -260,13 +314,13 @@ MOU.ChkWNDBorders
lda (ZPWNDPtr),y
clc
adc #1
- eor MSG+S.MSG.Y2
+ eor MSG+S.MSG.Y1
bne .7
iny
lda (ZPWNDPtr),y
adc #0
- eor MSG+S.MSG.Y2+1
+ eor MSG+S.MSG.Y1+1
bne .7
lda #PTR.T.RESIZEXY1
@@ -275,9 +329,16 @@ MOU.ChkWNDBorders
.7 lda IY
bne .6
- sec
+.9 sec
rts
*--------------------------------------
+MOU.InObj lda ZPObjPtr
+ clc
+ adc #S.OBJ.X1
+ tay
+ lda ZPObjPtr+1
+ adc /S.OBJ.X1
+*--------------------------------------
MOU.InRectYA >STYA ZPRECTPtr
ldy #S.RECT.X1
@@ -322,6 +383,41 @@ MOU.InRectYA >STYA ZPRECTPtr
.9 sec
.99 rts
*--------------------------------------
+MOU.WNDCmpY lda (ZPWNDPtr),y
+ cmp MSG+S.MSG.Y1
+ iny
+ lda (ZPWNDPtr),y
+ sbc MSG+S.MSG.Y1+1
+ rts
+*--------------------------------------
+MOU.ToLocal ldy #S.WND.InnerX1
+
+ lda MSG+S.MSG.X1
+ sec
+ sbc (ZPWNDPtr),y
+ sta MSG+S.MSG.X1
+
+ iny
+
+ lda MSG+S.MSG.X1+1
+ sbc (ZPWNDPtr),y
+ sta MSG+S.MSG.X1+1
+
+ iny #S.WND.InnerY1
+
+ lda MSG+S.MSG.Y1
+ sec
+ sbc (ZPWNDPtr),y
+ sta MSG+S.MSG.Y1
+
+ iny
+
+ lda MSG+S.MSG.Y1+1
+ sbc (ZPWNDPtr),y
+ sta MSG+S.MSG.Y1+1
+
+ rts
+*--------------------------------------
MAN
SAVE usr/src/lib/libgui.s.mou
LOAD usr/src/lib/libgui.s
diff --git a/LIB/LIBGUI.S.MSG.txt b/LIB/LIBGUI.S.MSG.txt
index 49de1e7a..1b3d7aca 100644
--- a/LIB/LIBGUI.S.MSG.txt
+++ b/LIB/LIBGUI.S.MSG.txt
@@ -22,7 +22,7 @@ MSG.Get stz MSG+S.MSG.T
sta MSG+S.MSG.T
lda MSG+S.MSG.S
- bit #S.MSG.S.MOVE
+ bit #S.XY.S.MOVE
beq .2
>PUSHW L.MSG.XY
@@ -30,7 +30,7 @@ MSG.Get stz MSG+S.MSG.T
lda MSG+S.MSG.S
-.2 bit #S.MSG.S.MOVE+S.MSG.S.CLK
+.2 bit #S.XY.S.MOVE+S.XY.S.CLK
beq .5
jsr MOU.CheckOverMenu
diff --git a/LIB/LIBGUI.S.OBJ.txt b/LIB/LIBGUI.S.OBJ.txt
index e58dbe94..4b85c2b2 100644
--- a/LIB/LIBGUI.S.OBJ.txt
+++ b/LIB/LIBGUI.S.OBJ.txt
@@ -30,6 +30,18 @@ OBJ.New pha
.9 rts
*--------------------------------------
+OBJ.Enter lda (ZPObjPtr)
+ tax
+ jmp (J.OBJ.Enter,x)
+*--------------------------------------
+OBJ.Leave lda (ZPObjPtr)
+ tax
+ jmp (J.OBJ.Leave,x)
+*--------------------------------------
+OBJ.Paint lda (ZPObjPtr)
+ tax
+ jmp (J.OBJ.fPaintX,x)
+*--------------------------------------
* hOBJ, Prop8, Value16
*--------------------------------------
OBJ.SetProp ldy #3
@@ -85,19 +97,29 @@ OBJ.GetPropAtY lda (ZPObjPtr),y
rts
*--------------------------------------
+OBJ.SetDXDYX1Y1 ldx #3
+ ldy #S.OBJ.X1+3
+
+.1 lda DX,x
+ sta (ZPObjPtr),y
+ dey
+ dex
+ bpl .1
+
+ rts
+*--------------------------------------
OBJ.SetX2Y2 >STYA ZPPtr1
- ldy #S.OBJ.W
+ ldy #S.OBJ.W+1
lda (ZPPtr1),y
- clc
- sbc #0
- pha
- iny
- lda (ZPPtr1),y
- sbc #0
tax
-
- pla
+ dey
+ lda (ZPPtr1),y
+ bne .1
+
+ dex
+
+.1 dec
clc
ldy #S.OBJ.X1
adc (ZPPtr1),y
@@ -110,18 +132,18 @@ OBJ.SetX2Y2 >STYA ZPPtr1
dey
pla
sta (ZPPtr1),y
-
- ldy #S.OBJ.H
+*--------------------------------------
+ ldy #S.OBJ.H+1
lda (ZPPtr1),y
- clc
- sbc #0
- pha
- iny
- lda (ZPPtr1),y
- sbc #0
tax
+ dey
+ lda (ZPPtr1),y
+ bne .2
+
+ dex
+
+.2 dec
- pla
clc
ldy #S.OBJ.Y1
adc (ZPPtr1),y
@@ -131,13 +153,25 @@ OBJ.SetX2Y2 >STYA ZPPtr1
adc (ZPPtr1),y
ldy #S.OBJ.Y2+1
sta (ZPPtr1),y
- tax
dey
pla
- sta (ZPPtr1),y A,X = Y2
+ sta (ZPPtr1),y
rts
*--------------------------------------
+OBJ.GetPtr lda (ZPObjPtr),y
+ pha
+ iny
+ lda (ZPObjPtr),y
+ beq .1
+
+ ply
+ rts
+
+.1 plx
+ >LDYA L.BMs,x
+ rts
+*--------------------------------------
OBJ.SetAXAtY sta (ZPObjPtr),y
iny
txa
@@ -162,6 +196,19 @@ OBJ.GetHWNDA >SYSCALL2 GetMemPtr
OBJ.DrawBorders >STYA ZPObjPtr
stx IY
+ ldy #S.OBJ.F
+ lda (ZPObjPtr),y
+* and #S.OBJ.F.BORDER
+* bne .1
+
+ bmi .1
+
+ clc
+.9 rts
+
+.1 jsr CB.GetBuf
+ bcs .9
+
jsr CB.BorderLineH
ldy #S.OBJ.X1
@@ -247,9 +294,19 @@ OBJ.DrawBorders >STYA ZPObjPtr
sta CB.Cache+S.CB.X1+1
sta CB.Cache+S.CB.X2+1 right X2+1,Y1-1,X2+1,Y2+1
- jmp CB.Cache2CBBuf
+ jsr CB.Cache2CBBuf
+
+ jmp CB.FlushBuf
*-------------------------------------
-
+OBJ.GetNext ldy #S.OBJ.pNext
+ lda (ZPObjPtr),y
+ tax
+ iny
+ lda (ZPObjPtr),y
+ stx ZPObjPtr
+ sta ZPObjPtr+1
+ ora ZPObjPtr
+ rts
*--------------------------------------
MAN
SAVE usr/src/lib/libgui.s.obj
diff --git a/LIB/LIBGUI.S.PTR.txt b/LIB/LIBGUI.S.PTR.txt
index 6c74a6c4..a422f836 100644
--- a/LIB/LIBGUI.S.PTR.txt
+++ b/LIB/LIBGUI.S.PTR.txt
@@ -12,7 +12,7 @@ PTR.Update lda PTR.T
lda #PTR.T.WAIT
*--------------------------------------
-* Set X2,Y2,SrcPtr
+* Set SrcPtr, SrcW, SrcH
*--------------------------------------
PTR.Set sta PTR.T
@@ -26,61 +26,37 @@ PTR.Set sta PTR.T
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
+ ldy #S.BM.W+3
+ ldx #3
+.1 lda (ZPPtr1),y
+ sta CB.PTR+S.CB.SrcW,x
+ dey
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
-
- bra PTR.Enable
-
-PTR.Set.RTS rts
-*--------------------------------------
-* Set DestX,DestY
-*--------------------------------------
-PTR.SetPos >PULLW ZPPtr1
- lda PTR.bVisible
bpl .1
- jsr PTR.Hide.I
+ bra PTR.Enable
+
+PTR.Set.RTS rts
+*--------------------------------------
+PTR.SetRect >STYA ZPPtr1
+ jsr PTR.Disable
+ sec
+ ror PTR.T
+
+ ldy #7
+
+.1 lda (ZPPtr1),y
+ sta PTR.Rect,y
+ dey
+ bpl .1
+
+ bra PTR.Enable
+*--------------------------------------
+* SetPos DestX,DestY
+*--------------------------------------
+PTR.SetPos >PULLW ZPPtr1
+ jsr PTR.Disable
.1 ldy #S.POINT-1
@@ -91,13 +67,13 @@ PTR.SetPos >PULLW ZPPtr1
*--------------------------------------
PTR.Enable bit PTR.bVisible
bmi PTR.Show.I
-
+
clc
rts
*--------------------------------------
PTR.Disable bit PTR.bVisible
bmi PTR.Hide.I
-
+
PTR.Disable.8 clc
rts
*--------------------------------------
@@ -106,7 +82,12 @@ PTR.Hide lda PTR.bVisible
stz PTR.bVisible
*--------------------------------------
-PTR.Hide.I lda #S.CB.OP.RESTORE
+PTR.Hide.I bit PTR.T
+ bpl .1
+
+ jmp PTR.ShowRect.I
+
+.1 lda #S.CB.OP.RESTORE
bra PTR.Draw.I
*--------------------------------------
PTR.Show lda PTR.bVisible
@@ -115,7 +96,11 @@ PTR.Show lda PTR.bVisible
dec PTR.bVisible
*--------------------------------------
PTR.Show.I ldx PTR.T
- lda PTR.Pos+S.POINT.X
+ bpl .10
+
+ jmp PTR.ShowRect.I
+
+.10 lda PTR.Pos+S.POINT.X
sec
sbc PTR.HotPoints,x
sta CB.PTR+S.CB.X1
@@ -133,23 +118,83 @@ PTR.Show.I ldx PTR.T
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 CLIP.GetRect
+ ldx CB.PTR+S.CB.SrcW+1
+ lda CB.PTR+S.CB.SrcW
+ bne .1
-* >LDYA L.CB.PTR
-* jsr CB.GetInCache
-
-* jsr CLIP.CB.Cache
+ dex
+
+.1 dec
+ clc
+ adc CB.PTR+S.CB.X1
+ sta CB.PTR+S.CB.X2
+ txa
+ adc CB.PTR+S.CB.X1+1
+ sta CB.PTR+S.CB.X2+1
+
+ ldx CB.PTR+S.CB.SrcH+1
+ lda CB.PTR+S.CB.SrcH
+ bne .2
+
+ dex
+
+.2 dec
+ clc
+ adc CB.PTR+S.CB.Y1
+ sta CB.PTR+S.CB.Y2
+ txa
+ adc CB.PTR+S.CB.Y1+1
+ sta CB.PTR+S.CB.Y2+1
+
+ lda #S.CB.OP.ORA+S.CB.OP.MASK+S.CB.OP.SAVE
+*--------------------------------------
+PTR.Draw.I sta CB.PTR+S.CB.OP
+
+ ldx #S.CB
+
+.1 lda CB.PTR-1,x
+ sta CLIP.Cache-1,x
+ dex
+ bne .1
+
+* ldx #0 select CLIP.Sreen
+ jsr CLIP.BitBltX
+ bcs .8
+
+ jsr CB.GFXWrite
+
+.8 clc
+
+ rts
+*--------------------------------------
+PTR.ShowRect.I lda #S.CB.CMD.HLINE
+ sta CLIP.Cache+S.CB.CMD
+ lda #S.CB.OP.XOR
+ sta CLIP.Cache+S.CB.OP
+ lda #S.CB.M.MONO
+ sta CLIP.Cache+S.CB.M
+ lda #C.WHITE
+ sta CLIP.Cache+S.CB.COLOR
+ >DEBUG
+ ldx #5 X1,Y1,X2
+
+.1 lda PTR.Rect+S.RECT.X1,x
+ sta CLIP.Cache+S.CB.X1,x
+ dex
+ bpl .1
+
+ jsr .7
+
+ >LDYA PTR.Rect+S.RECT.Y2
+ >STYA CLIP.Cache+S.CB.Y1
+
+
+.7
+* ldx #0 select CLIP.Sreen
+* jsr CLIP.HLine
* bcs .8
-
- >PUSHB WND.Screen+S.OBJ.hPARENT
- >PUSHBI IOCTL.WRITE
- >PUSHW L.CB.PTR
- >SYSCALL2 IOCTL
+
+ jsr CB.GFXWrite
.8 clc
diff --git a/LIB/LIBGUI.S.SYSBAR.txt b/LIB/LIBGUI.S.SYSBAR.txt
index 929dd38f..acd35cbd 100644
--- a/LIB/LIBGUI.S.SYSBAR.txt
+++ b/LIB/LIBGUI.S.SYSBAR.txt
@@ -3,10 +3,12 @@ NEW
*--------------------------------------
SYSBUT.Enter bit WND.SYSBAR.bSysBut
bmi .8
-
+
sec
ror WND.SYSBAR.bSysBut
+ jsr MENU.DestroyAll
+
jsr CB.GetBuf
bcs .9
@@ -18,6 +20,7 @@ SYSBUT.Enter bit WND.SYSBAR.bSysBut
>PUSHW L.MENU.Sys
>PUSHW WND.SysBar+S.OBJ.X1
>PUSHW WND.SysBar+S.OBJ.Y1
+
jsr MENU.New
bcs .9
@@ -37,7 +40,6 @@ SYSBUT.Leave bit WND.SYSBAR.bSysBut
jsr SYSBAR.ShowSysBut
>LDYA L.WND.SysBar
-
jmp CB.FlushBufToYA
.8 clc
@@ -53,7 +55,6 @@ SYSBAR.Show jsr CB.GetBuf
jsr SYSBAR.ShowSysClk
>LDYA L.WND.SysBar
-
jmp CB.FlushBufToYA
.9 rts
@@ -76,37 +77,18 @@ SYSBAR.ShowSysBut
jsr CB.Cache2CBBuf
- lda CB.Cache+S.CB.X1
- clc
- adc #4
- sta CB.Cache+S.CB.X1
- lda CB.Cache+S.CB.X1+1
- adc #0
- sta CB.Cache+S.CB.X1+1
+ lda #4
+ jsr CB.AddA2X1
- inc CB.Cache+S.CB.Y1
- bne .30
+ jsr CB.IncY1
- inc CB.Cache+S.CB.Y1+1
-
-.30 ldx #BM.ID.APPLE
+ ldx #BM.ID.APPLE
jsr DRAW.xBM
- lda CB.Cache+S.CB.X1
- clc
- adc #20
- sta CB.Cache+S.CB.X1
- lda CB.Cache+S.CB.X1+1
- adc #0
- sta CB.Cache+S.CB.X1+1
+ lda #16+1
+ jsr CB.AddA2X1
- inc CB.Cache+S.CB.Y1
- bne .31
-
- inc CB.Cache+S.CB.Y1+1
-
-.31 lda WND.SysBar.bSysBut
- asl
+ jsr CB.IncY1
>LDYA L.WND.SysBar.2osX
ldx hSYSFON
@@ -129,14 +111,23 @@ SYSBAR.ShowSysClk
lda PREFS.SysBarColor
jsr CB.FillRectMonoA
- ldx #S.RECT-1
+ ldx #S.RECT
-.1 lda RECT.SysClk,x
- sta CB.Cache+S.CB.X1,x
+.1 lda RECT.SysClk-1,x
+ sta CB.Cache+S.CB.X1-1,x
dex
- bpl .1
+ bne .1
- jmp CB.Cache2CBBuf
+ jsr CB.Cache2CBBuf
+
+ lda #1
+ jsr CB.AddA2X1
+
+ jsr CB.IncY1
+
+ >LDYA L.WND.SysBar.Clk
+ ldx hSYSFON
+ jmp DRAW.YAText
*--------------------------------------
MAN
SAVE usr/src/lib/libgui.s.sysbar
diff --git a/LIB/LIBGUI.S.TEXT.txt b/LIB/LIBGUI.S.TEXT.txt
index 10ef0209..491e12d9 100644
--- a/LIB/LIBGUI.S.TEXT.txt
+++ b/LIB/LIBGUI.S.TEXT.txt
@@ -4,7 +4,10 @@ NEW
TEXT.New
TEXT.Paint
-TEXT.Close
+TEXT.Enter
+TEXT.Leave
+*--------------------------------------
+TEXT.fPaint
clc
rts
*--------------------------------------
diff --git a/LIB/LIBGUI.S.WND.txt b/LIB/LIBGUI.S.WND.txt
index 591f9228..21b8deae 100644
--- a/LIB/LIBGUI.S.WND.txt
+++ b/LIB/LIBGUI.S.WND.txt
@@ -28,15 +28,23 @@ WND.Setup
>STYA WND.Screen+S.OBJ.W
>STYA WND.Desktop+S.OBJ.W
>STYA WND.SysBar+S.OBJ.W
+ cpy #0
+ bne .1
+
+ dec
+
+.1 dey
+ >STYA CLIP.Screen+S.RECT.X2
+*--------------------------------------
+ lda DCB.GFX+S.DCB.GFX.H
+ sta WND.Screen+S.OBJ.H
lda SYSFON.Hp2
sta WND.SysBar+S.OBJ.H
lda DCB.GFX+S.DCB.GFX.H
- sta WND.Screen+S.OBJ.H
-
sec
- sbc WND.SysBar+S.OBJ.H
+ sbc SYSFON.Hp2
sta WND.Desktop+S.OBJ.H
sta WND.SysBar+S.OBJ.Y1
@@ -44,15 +52,19 @@ WND.Setup
sta RECT.SysWNDs+S.RECT.Y1
sta RECT.SysClk+S.RECT.Y1
- lda DCB.GFX+S.DCB.GFX.H
- dec
+ clc
+ adc SYSFON.Hp1
+
sta RECT.SysBut+S.RECT.Y2
sta RECT.SysWNDs+S.RECT.Y2
sta RECT.SysClk+S.RECT.Y2
+ sta CLIP.Screen+S.RECT.Y2
>LDYA L.WND.Screen
>STYA WND.Desktop+S.OBJ.hPARENT
>STYA WND.SysBar+S.OBJ.hPARENT
+
+* >LDYA L.WND.Screen
jsr OBJ.SetX2Y2
>LDYA L.WND.Desktop
@@ -60,31 +72,32 @@ WND.Setup
>LDYA L.WND.SysBar
jsr OBJ.SetX2Y2
-
+*--------------------------------------
>LDYA L.WND.SysBar.2osX
ldx hSYSFON
jsr FON.GetTextSize
lda CB.Cache+S.CB.SrcW
clc
- adc #24 4 + BM width + 4
+ adc #25 4 + BM width(16) + 1 + "2osX" + 4
sta RECT.SysBut+S.RECT.X2
sta RECT.SysWNDs+S.RECT.X1
-
+*--------------------------------------
>LDYA L.WND.SysBar.Clk
ldx hSYSFON
jsr FON.GetTextSize
lda CB.Cache+S.CB.SrcW
- sec for sbc below
- adc #8 4 + 00:00 + 4
- sta RECT.SysWNDs+S.RECT.X2
+ clc
+ adc #2 1 + "00:00" + 1
+ sta CB.Cache+S.CB.SrcW
lda DCB.GFX+S.DCB.GFX.W
sec
- sbc RECT.SysWNDs+S.RECT.X2
+ sbc CB.Cache+S.CB.SrcW
sta RECT.SysWNDs+S.RECT.X2
sta RECT.SysClk+S.RECT.X1
+
lda DCB.GFX+S.DCB.GFX.W+1
sbc #0
sta RECT.SysWNDs+S.RECT.X2+1
@@ -94,7 +107,7 @@ WND.Setup
clc
sbc #0
sta RECT.SysClk+S.RECT.X2
- lda DCB.GFX+S.DCB.GFX.W
+ lda DCB.GFX+S.DCB.GFX.W+1
sbc #0
sta RECT.SysClk+S.RECT.X2+1
@@ -132,7 +145,7 @@ WND.New ldy WND.Stack.Top
ldy #S.OBJ.W
jsr OBJ.PullWordAtY
-
+
ldy #S.OBJ.Y1
jsr OBJ.PullWordAtY
@@ -175,6 +188,75 @@ WND.New ldy WND.Stack.Top
rts
*--------------------------------------
+WND.SetMBar >PULLW ZPPtr1
+
+ jsr OBJ.PullHWND
+
+ >LDYA ZPPtr1
+ jsr MBAR.New
+ bcs .9
+
+ ldy #S.WND.pMBAR
+ sta (ZPWNDPtr),y
+
+* clc
+
+.9 rts
+*--------------------------------------
+WND.ClrStatus ldy #S.OBJ.S
+ eor #$ff
+ and (ZPWNDPtr),y
+ sta (ZPWNDPtr),y
+ rts
+*--------------------------------------
+WND.SetStatus ldy #S.OBJ.S
+ ora (ZPWNDPtr),y
+ sta (ZPWNDPtr),y
+ rts
+*--------------------------------------
+* ZPWNDPtr
+* ZPObjPtr
+*--------------------------------------
+WND.AddChild.I ldy #S.OBJ.pChilds
+ lda (ZPWNDPtr),y
+ sta ZPPtr1
+ iny
+ lda (ZPWNDPtr),y
+ sta ZPPtr1+1
+ ora ZPPtr1
+ bne .1
+
+ lda ZPObjPtr+1
+ sta (ZPWNDPtr),y
+ dey
+ lda ZPObjPtr
+ sta (ZPWNDPtr),y
+ clc
+ rts
+
+.1 ldy #S.OBJ.pNext
+ lda (ZPPtr1),y
+ tax
+ iny
+ ora (ZPPtr1),y
+ beq .2
+
+ lda (ZPPtr1),y
+ stx ZPPtr1
+ sta ZPPtr1+1
+ bra .1
+
+.2 lda ZPObjPtr+1
+ sta (ZPPtr1),y
+ dey
+ lda ZPObjPtr
+ sta (ZPPtr1),y
+ clc
+ rts
+*--------------------------------------
+WND.Enter
+WND.Leave
+*--------------------------------------
WND.Destroy clc
rts
*--------------------------------------
@@ -206,6 +288,9 @@ WND.Bring2Front ldx WND.Stack.Idx
*--------------------------------------
WND.Show sta WND.hWND
+ >LDYA L.WND.Desktop
+ jsr CLIP.GetRect
+
ldx WND.Stack.Top
beq .1
@@ -215,37 +300,23 @@ WND.Show sta WND.hWND
lda #S.WND.S.ACTIVE
jsr WND.ClrStatus
- jsr CB.GetBuf
- bcs WND.Activate.RTS
-
jsr WND.DrawTitleBar
-
- >LDYA L.WND.Desktop
- jsr CB.FlushBufToYA
- lda WND.hWND
+.1 lda WND.hWND
ldx WND.Stack.Top
-.1 sta WND.Stack,x
+ sta WND.Stack,x
inc WND.Stack.Top
*--------------------------------------
WND.Draw jsr OBJ.GetHWNDA Y,A = ZPWNDPtr
- jsr OBJ.SetX2Y2
+ jsr OBJ.SetX2Y2
jsr WND.ResetInnerW
-
- jsr CB.GetBuf
- bcs WND.Activate.RTS
lda #S.WND.S.ACTIVE
jsr WND.SetStatus
- ldy #S.OBJ.F
- lda (ZPWNDPtr),y
- and #S.OBJ.F.BORDER
- beq .1
-
>LDYA ZPWNDPtr
ldx #1
jsr OBJ.DrawBorders
@@ -256,7 +327,7 @@ WND.Draw jsr OBJ.GetHWNDA Y,A = ZPWNDPtr
iny
lda (ZPWNDPtr),y
sta Counter+1
-
+
ldy #S.WND.pTITLE+1
lda (ZPWNDPtr),y
bne .2
@@ -284,7 +355,7 @@ WND.Draw jsr OBJ.GetHWNDA Y,A = ZPWNDPtr
ldy #S.WND.MBarY1
jsr WND.SetCounterAtY
-
+
lda SYSFON.Hp1
jsr WND.Add2Counter
@@ -297,10 +368,14 @@ WND.Draw jsr OBJ.GetHWNDA Y,A = ZPWNDPtr
ldy #S.WND.pMBAR
lda (ZPWNDPtr),y
jsr MBAR.Draw
+ bcs .9
*--------------------------------------
-.4 ldy #S.WND.InnerY1
+.4 jsr CB.GetBuf
+ bcs .9
+
+ ldy #S.WND.InnerY1
jsr WND.SetCounterAtY
-
+
ldy #S.WND.pSTATUS+1
lda (ZPWNDPtr),y
beq .8
@@ -318,12 +393,12 @@ WND.Draw jsr OBJ.GetHWNDA Y,A = ZPWNDPtr
lda (ZPWNDPtr),y
sbc #0
sta (ZPWNDPtr),y
-
+
inx
bne .5
-
+
inc
-
+
.5 ldy #S.WND.SBarY1+1
sta (ZPWNDPtr),y
dey
@@ -346,8 +421,7 @@ WND.Draw jsr OBJ.GetHWNDA Y,A = ZPWNDPtr
sbc Counter+1
sta (ZPWNDPtr),y
- >LDYA L.WND.Desktop
- jsr CB.FlushBufToYA
+ jsr CB.FlushBuf
lda WND.hWND
pha
@@ -355,21 +429,28 @@ WND.Draw jsr OBJ.GetHWNDA Y,A = ZPWNDPtr
.9 rts
*--------------------------------------
-WND.ResetInnerW ldy #S.OBJ.W
- ldx #S.WND.InnerW
+WND.ResetInnerW ldy #S.OBJ.X1
+ ldx #S.WND.InnerX1
jsr .1
- ldy #S.OBJ.H
- ldx #S.WND.InnerH
- jsr .1
-
+ ldy #S.OBJ.Y1
+ ldx #S.WND.InnerY1
+
ldy #S.OBJ.X2
ldx #S.WND.InnerX2
jsr .1
ldy #S.OBJ.Y2
ldx #S.WND.InnerY2
-
+ jsr .1
+
+ ldy #S.OBJ.W
+ ldx #S.WND.InnerW
+ jsr .1
+
+ ldy #S.OBJ.H
+ ldx #S.WND.InnerH
+
.1 lda (ZPWNDPtr),y
pha
iny
@@ -387,11 +468,11 @@ WND.Add2Counter clc
adc Counter
sta Counter
bcc .8
-
+
inc Counter+1
-
+
.8 ldx Counter+1
- rts
+ rts
*--------------------------------------
WND.SetCounterAtY
lda Counter
@@ -401,9 +482,13 @@ WND.SetAXAtY sta (ZPWNDPtr),y
iny
txa
sta (ZPWNDPtr),y
- rts
+
+WND.SetAXAtY.9 rts
*--------------------------------------
WND.DrawTitleBar
+ jsr CB.GetBuf
+ bcs WND.SetAXAtY.9
+
lda #S.CB.CMD.FILLRECT
sta CB.Cache+S.CB.CMD
@@ -448,13 +533,10 @@ WND.DrawTitleBar
jsr CB.Cache2CBBuf
- inc CB.Cache+S.CB.Y1
- bne .12
-
- inc CB.Cache+S.CB.Y1+1
+ jsr CB.IncY1
* TOP LEFT ICON
-.12 ldy #S.WND.ICON+1
+ ldy #S.WND.ICON+1
lda (ZPWNDPtr),y
tax
dey
@@ -526,7 +608,7 @@ WND.DrawTitleBar
ldx #BM.ID.CLOSE
jsr DRAW.xBM
-.8 clc
+.8 jmp CB.FlushBuf
.9 rts
*--------------------------------------
@@ -541,7 +623,16 @@ WND.DrawTitleBarText
ldx hSYSFON
jsr FON.GetTextSize
- ldy #S.OBJ.W
+ lda PREFS.XMargin
+ asl
+* clc
+ adc CB.Cache+S.CB.SrcW
+ sta CB.Cache+S.CB.SrcW
+ bcc .1
+
+ inc CB.Cache+S.CB.SrcW+1
+
+.1 ldy #S.OBJ.W
lda (ZPWNDPtr),y
sec
sbc CB.Cache+S.CB.SrcW
@@ -558,26 +649,53 @@ WND.DrawTitleBarText
lda (ZPWNDPtr),y
clc
adc DX
- and PREFS.BestViewedX
+* and PREFS.BestViewedX
+ and #$f8
sta CB.Cache+S.CB.X1
-
+ tax
+
iny
lda (ZPWNDPtr),y
adc DX+1
sta CB.Cache+S.CB.X1+1
+ pha
+ txa
+
+ clc
+ adc CB.Cache+S.CB.SrcW
+* ora PREFS.nBestViewedX
+ and #$f8
+ sta CB.Cache+S.CB.X2
+
+ pla
+ adc CB.Cache+S.CB.SrcW+1
+ sta CB.Cache+S.CB.X2+1
+
+ jsr CB.DecY2
+
+ lda #C.WHITE
+ jsr CB.FillRectMonoA
+
+ jsr CB.Cache2CBBuf
+
+ lda PREFS.XMargin
+ jsr CB.AddA2X1
+
ldy #S.WND.pTITLE
lda (ZPWNDPtr),y
pha
iny
lda (ZPWNDPtr),y
ply
-
+
ldx hSYSFON
- clc
jmp DRAW.YAText
*--------------------------------------
WND.DrawStatusBar
+ jsr CB.GetBuf
+ bcs .9
+
jsr CB.BorderLineH
ldy #S.OBJ.X1
@@ -594,12 +712,9 @@ WND.DrawStatusBar
jsr CB.Cache2CBBuf
- inc CB.Cache+S.CB.Y1
- bne .1
+ jsr CB.IncY1
- inc CB.Cache+S.CB.Y1+1
-
-.1 lda PREFS.SBarColor
+ lda PREFS.SBarColor
jsr CB.FillRectMonoA
ldy #S.OBJ.Y2
@@ -608,6 +723,9 @@ WND.DrawStatusBar
jsr CB.Cache2CBBuf
+ lda #4
+ jsr CB.AddA2X1
+
ldy #S.WND.pSTATUS
lda (ZPWNDPtr),y
pha
@@ -616,8 +734,11 @@ WND.DrawStatusBar
ply
ldx hSYSFON
- clc
- jmp DRAW.YAText
+ jsr DRAW.YAText
+
+ jmp CB.FlushBuf
+
+.9 rts
*--------------------------------------
WND.Paint pha hWND
@@ -634,12 +755,39 @@ WND.Paint1 ldy #S.WND.fPaint
jmp (ZPPtr1)
*--------------------------------------
-WND.fPaint.RTS rts
-
WND.fPaint jsr OBJ.GetHWNDA
+ jsr WND.GetInnerInClip
- jsr CB.GetBuf
- bcs WND.fPaint.RTS
+ jsr WND.fPaint.BG
+ bcs .9
+
+ jsr WND.GetChilds
+ beq .8
+
+.1 jsr OBJ.Paint
+ bcs .9
+
+ jsr OBJ.GetNext
+ bne .1
+
+.8 clc
+
+.9 rts
+*--------------------------------------
+WND.GetInnerInClip
+ ldy #S.WND.InnerX1+7
+ ldx #7
+
+.1 lda (ZPWNDPtr),y
+ sta CLIP.Rect+S.RECT.X1,x
+ dey
+ dex
+ bpl .1
+
+ rts
+*--------------------------------------
+WND.fPaint.BG jsr CB.GetBuf
+ bcs .9
lda #S.CB.CMD.FILLRECT
sta CB.Cache+S.CB.CMD
@@ -654,34 +802,13 @@ WND.fPaint jsr OBJ.GetHWNDA
lda (ZPWNDPtr),y
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.WND.InnerY1
- lda (ZPWNDPtr),y
- sta CB.Cache+S.CB.Y1
- iny
- lda (ZPWNDPtr),y
- sta CB.Cache+S.CB.Y1+1
-
- ldy #S.WND.InnerX2
- lda (ZPWNDPtr),y
- sta CB.Cache+S.CB.X2
- iny
- lda (ZPWNDPtr),y
- sta CB.Cache+S.CB.X2+1
-
- ldy #S.WND.InnerY2
- lda (ZPWNDPtr),y
- sta CB.Cache+S.CB.Y2
- iny
- lda (ZPWNDPtr),y
- sta CB.Cache+S.CB.Y2+1
+ ldx #7
+.1 lda CLIP.Rect+S.RECT.X1,x
+ sta CB.Cache+S.CB.X1,x
+ dex
+ bpl .1
+
jsr CB.Cache2CBBuf
*--------------------------------------
ldy #S.WND.BGBM
@@ -694,54 +821,33 @@ WND.fPaint jsr OBJ.GetHWNDA
lda (ZPWNDPtr),y
sta CB.Cache+S.CB.SrcPtr+1
- stz S.CB.SrcX
- stz S.CB.SrcX+1
-
- stz S.CB.SrcY
- stz S.CB.SrcY+1
+ jsr CB.ResetSrcXY
ldy #S.WND.InnerW+3
ldx #3
-.1 lda (ZPWNDPtr),y
+.2 lda (ZPWNDPtr),y
sta CB.Cache+S.CB.SrcW,x
dey
dex
- bpl .1
+ bpl .2
lda #S.CB.CMD.BITBLT
sta CB.Cache+S.CB.CMD
jsr CB.Cache2CBBuf
-.8 >LDYA L.WND.Desktop
-
- jmp CB.FlushBufToYA
-*--------------------------------------
-WND.SetMBar >PULLW ZPPtr1
-
- jsr OBJ.PullHWND
-
- >LDYA ZPPtr1
- jsr MBAR.New
- bcs .9
-
- ldy #S.WND.pMBAR
- sta (ZPWNDPtr),y
-
-* clc
+.8 jmp CB.FlushBuf
.9 rts
*--------------------------------------
-WND.ClrStatus ldy #S.OBJ.S
- eor #$ff
- and (ZPWNDPtr),y
- sta (ZPWNDPtr),y
- rts
-*--------------------------------------
-WND.SetStatus ldy #S.OBJ.S
- ora (ZPWNDPtr),y
- sta (ZPWNDPtr),y
+WND.GetChilds ldy #S.OBJ.pChilds
+ lda (ZPWNDPtr),y
+ sta ZPObjPtr
+ iny
+ lda (ZPWNDPtr),y
+ sta ZPObjPtr+1
+ ora ZPObjPtr
rts
*--------------------------------------
MAN
diff --git a/LIB/LIBGUI.S.txt b/LIB/LIBGUI.S.txt
index e195066b..12d8e5f1 100644
--- a/LIB/LIBGUI.S.txt
+++ b/LIB/LIBGUI.S.txt
@@ -15,8 +15,6 @@ NEW
*--------------------------------------
WND.MAX .EQ 64
MENU.MAX .EQ 4
-MENU.LMargin .EQ 7
-MENU.RMargin .EQ 8
*--------------------------------------
.MA SWAP16
lda ]1
@@ -82,12 +80,12 @@ MENU.RMargin .EQ 8
ZPObjPtr .BS 2
ZPRECTPtr .BS 2
ZPWNDPtr .BS 2
-ZPMENUPtr .BS 2
-
ZPBMPtr .BS 2
+
ZPCBBufPtr .BS 2
ZPPtr1 .BS 2
ZPPtr2 .BS 2
+TmpW .BS 2
DX .BS 2
DY .BS 2
@@ -152,8 +150,8 @@ L.MouseClamp .DA MouseClamp
L.MSG .DA MSG
L.MSG.XY .DA MSG+S.MSG.X1
L.CB.PTR .DA CB.PTR
-L.CLIP.Rect .DA CLIP.Rect
-L.CB.Cache .DA CB.Cache
+L.CB.Cache .DA CB.Cache CB.GFXWrite
+ .DA CLIP.Cache CB.GFXWrite
L.WND.Screen .DA WND.Screen
L.WND.Desktop .DA WND.Desktop
L.WND.SysBar .DA WND.SysBar
@@ -178,6 +176,13 @@ L.BM.Up .DA BM.Up
L.BM.Down .DA BM.Down
L.BM.Info .DA BM.Info
*--------------------------------------
+L.BUT.Labels .DA BUT.L.OK
+ .DA BUT.L.CANCEL
+ .DA BUT.L.RETRY
+ .DA BUT.L.IGNORE
+ .DA BUT.L.YES
+ .DA BUT.L.NO
+*--------------------------------------
L.PTR.SaveBuf .DA PTR.SaveBuf
L.Cursors .DA PTR.Arrow
.DA PTR.Move
@@ -205,6 +210,30 @@ J.Clip .DA CLIP.Point SETPIXEL
.DA CLIP.Text GETTEXTSIZE
.DA CLIP.Line DRAWLINE
.DA CLIP.BitBlt DRAWTEXT2
+*--------------------------------------
+J.OBJ.Enter .DA WND.Enter
+ .DA MBAR.Enter
+ .DA MENU.Enter
+ .DA BUT.Enter
+ .DA TEXT.Enter
+ .DA BITMAP.Enter
+ .DA LABEL.Enter
+*--------------------------------------
+J.OBJ.Leave .DA WND.Leave
+ .DA MBAR.Leave
+ .DA MENU.Leave
+ .DA BUT.Leave
+ .DA TEXT.Leave
+ .DA BITMAP.Leave
+ .DA LABEL.Leave
+*--------------------------------------
+J.OBJ.fPaintX .DA WND.fPaint
+ .DA $FFFF MBAR
+ .DA $FFFF MENU
+ .DA BUT.fPaint
+ .DA TEXT.fPaint
+ .DA BITMAP.fPaint
+ .DA LABEL.fPaint
.DA 0
*--------------------------------------
LIB.LOAD lda LibCount
@@ -219,14 +248,14 @@ LIB.LOAD lda LibCount
jsr FON.Init
bcs .9
+ jsr WND.Setup
+
lda hDevMouse
beq .1
jsr MOU.Setup
-.1 jsr WND.Setup
-
- lda #PTR.T.ARROW
+.1 lda #PTR.T.ARROW
jsr PTR.Set
jsr PTR.Show
@@ -273,6 +302,32 @@ SkipStrZPtr1 ldy #$ff
.8 rts
*--------------------------------------
+SkipAPtr2 clc
+ adc ZPPtr2
+ sta ZPPtr2
+ bcc .8
+
+ inc ZPPtr2+1
+
+.8 rts
+*--------------------------------------
+SkipStrZPtr2 ldy #$ff
+
+.1 iny
+ lda (ZPPtr2),y
+ bne .1
+
+ tya
+ sec \0
+ adc ZPPtr2
+ sta ZPPtr2
+ bcc .8
+
+ inc ZPPtr1+2
+
+.8 rts
+*--------------------------------------
+ .INB usr/src/lib/libgui.s.bitmap
.INB usr/src/lib/libgui.s.bm
.INB usr/src/lib/libgui.s.but
.INB usr/src/lib/libgui.s.cb
@@ -280,13 +335,14 @@ SkipStrZPtr1 ldy #$ff
.INB usr/src/lib/libgui.s.cur
.INB usr/src/lib/libgui.s.draw
.INB usr/src/lib/libgui.s.fon
+ .INB usr/src/lib/libgui.s.label
.INB usr/src/lib/libgui.s.mbar
.INB usr/src/lib/libgui.s.mbox
.INB usr/src/lib/libgui.s.menu
.INB usr/src/lib/libgui.s.mou
.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.pat
.INB usr/src/lib/libgui.s.ptr
.INB usr/src/lib/libgui.s.sysbar
.INB usr/src/lib/libgui.s.text
@@ -312,7 +368,16 @@ OBJ.SizeOf .DA S.WND
.DA 0
.DA 0
.DA S.BUT
-* .DA S.TEXT
+ .DA S.TEXT
+ .DA S.BITMAP
+ .DA S.LABEL
+*--------------------------------------
+BUT.L.OK .AZ "Ok"
+BUT.L.CANCEL .AZ "Cancel"
+BUT.L.RETRY .AZ "Retry"
+BUT.L.IGNORE .AZ "Ignore"
+BUT.L.YES .AZ "Yes"
+BUT.L.NO .AZ "No"
*--------------------------------------
CB.CmdLen .DA #S.CB.Y1+1 SETPIXEL
.DA #S.CB.Y1+1 GETPIXEL
@@ -336,7 +401,6 @@ PAT.Buf .BS 1 S.BM.F
IOCTL .BS S.IOCTL
DCB.GFX .BS S.DCB.GFX
*--------------------------------------
-MouseClamp .BS 8
MSG .BS S.MSG
*--------------------------------------
CB.PTR .DA #S.CB.CMD.BITBLT
@@ -345,8 +409,10 @@ CB.PTR .DA #S.CB.CMD.BITBLT
.DA #0
.BS S.CB-4
*--------------------------------------
-CLIP.Rect .BS S.RECT
-CB.Cache .BS S.CB
+CB.Cache .BS S.CB CB.GFXWrite:
+CLIP.Cache .BS S.CB ,x select Cache
+CLIP.Screen .BS S.RECT CLIP.BitBltX:
+CLIP.Rect .BS S.RECT ,x select clipping region
*--------------------------------------
MENU.Stack.Owner .BS 1
MENU.Stack.Idx .BS 1
@@ -448,11 +514,13 @@ KEYMOD.S.OA .EQ *-KEYMOD.S
KEYMOD.S.CA .EQ *-KEYMOD.S
.DA #02,#'-',#0
*--------------------------------------
+MouseClamp .EQ * MOU.Setup
TEXTBUF .BS 16 for composing HotKey strings
*--------------------------------------
PREFS.BestViewedX .DA #$FC
-PREFS.MBarXMargin .DA #5
-PREFS.XSeparator .DA #6
+PREFS.nBestViewedX .DA #$03
+PREFS.XMargin .DA #4
+PREFS.XSeparator .DA #4
*
PREFS.MenuColor .DA #C.WHITE
PREFS.SysBarColor .DA #C.WHITE
diff --git a/ProDOS.203/ProDOS.S.CCLK.txt b/ProDOS.203/ProDOS.S.CCLK.txt
index a2d4fba3..1a4ca9c9 100644
--- a/ProDOS.203/ProDOS.S.CCLK.txt
+++ b/ProDOS.203/ProDOS.S.CCLK.txt
@@ -60,6 +60,6 @@ CCLK.END .EQ * end of obj cclock_0.
.HS 000000 pad to page boundary
*--------------------------------------
MAN
-SAVE USR/SRC/PRODOS.203/PRODOS.S.CCLK
-LOAD USR/SRC/PRODOS.203/PRODOS.S
+SAVE usr/src/prodos.203/prodos.s.cclk
+LOAD usr/src/prodos.203/prodos.s
ASM
diff --git a/ProDOS.203/ProDOS.S.GP.txt b/ProDOS.203/ProDOS.S.GP.txt
index f086f00d..89d632b0 100644
--- a/ProDOS.203/ProDOS.S.GP.txt
+++ b/ProDOS.203/ProDOS.S.GP.txt
@@ -146,6 +146,6 @@ bnkbyt2 .DA #0
kversion .HS 23 represents release 2.0.3
*--------------------------------------
MAN
-SAVE USR/SRC/PRODOS.203/PRODOS.S.GP
-LOAD USR/SRC/PRODOS.203/PRODOS.S
+SAVE usr/src/prodos.203/prodos.s.gp
+LOAD usr/src/prodos.203/prodos.s
ASM
diff --git a/ProDOS.203/ProDOS.S.IRQ.txt b/ProDOS.203/ProDOS.S.IRQ.txt
index ef51a767..b421d01a 100644
--- a/ProDOS.203/ProDOS.S.IRQ.txt
+++ b/ProDOS.203/ProDOS.S.IRQ.txt
@@ -63,6 +63,6 @@ irqv .DA lanirq irq handler
* end of obj mli_3
*--------------------------------------
MAN
-SAVE USR/SRC/PRODOS.203/PRODOS.S.IRQ
-LOAD USR/SRC/PRODOS.203/PRODOS.S
+SAVE usr/src/prodos.203/prodos.s.irq
+LOAD usr/src/prodos.203/prodos.s
ASM
diff --git a/ProDOS.203/ProDOS.S.LDR.A.txt b/ProDOS.203/ProDOS.S.LDR.A.txt
index 9bde84e5..eec39ac6 100644
--- a/ProDOS.203/ProDOS.S.LDR.A.txt
+++ b/ProDOS.203/ProDOS.S.LDR.A.txt
@@ -764,6 +764,6 @@ H2620 clc
LDR.Test128.len .EQ *-LDR.Test128
*--------------------------------------
MAN
-SAVE USR/SRC/PRODOS.203/PRODOS.S.LDR.A
-LOAD USR/SRC/PRODOS.203/PRODOS.S
+SAVE usr/src/prodos.203/prodos.s.ldr.a
+LOAD usr/src/prodos.203/prodos.s
ASM
diff --git a/ProDOS.203/ProDOS.S.LDR.B.txt b/ProDOS.203/ProDOS.S.LDR.B.txt
index a7ed17d2..4a26139d 100644
--- a/ProDOS.203/ProDOS.S.LDR.B.txt
+++ b/ProDOS.203/ProDOS.S.LDR.B.txt
@@ -944,6 +944,6 @@ RAM_1_END .EQ * end of /RAM installer
MAN
-SAVE USR/SRC/PRODOS.203/PRODOS.S.LDR.B
-LOAD USR/SRC/PRODOS.203/PRODOS.S
+SAVE usr/src/prodos.203/prodos.s.ldr.b
+LOAD usr/src/prodos.203/prodos.s
ASM
diff --git a/ProDOS.203/ProDOS.S.RAM.txt b/ProDOS.203/ProDOS.S.RAM.txt
index 5c19e247..4e76a0a8 100644
--- a/ProDOS.203/ProDOS.S.RAM.txt
+++ b/ProDOS.203/ProDOS.S.RAM.txt
@@ -83,6 +83,6 @@ RAMDRV.END .EQ *
.BS $FF9B-* fill to lanirq ($FF9B see note below)
*--------------------------------------
MAN
-SAVE USR/SRC/PRODOS.203/PRODOS.S.RAM
-LOAD USR/SRC/PRODOS.203/PRODOS.S
+SAVE usr/src/prodos.203/prodos.s.ram
+LOAD usr/src/prodos.203/prodos.s
ASM
diff --git a/ProDOS.203/ProDOS.S.RAMX.txt b/ProDOS.203/ProDOS.S.RAMX.txt
index 37ead827..10e17561 100644
--- a/ProDOS.203/ProDOS.S.RAMX.txt
+++ b/ProDOS.203/ProDOS.S.RAMX.txt
@@ -317,6 +317,6 @@ ex1 sta passit+1 also used by blockwrite
* end of obj ram_0
*--------------------------------------
MAN
-SAVE USR/SRC/PRODOS.203/PRODOS.S.RAMX
-LOAD USR/SRC/PRODOS.203/PRODOS.S
+SAVE usr/src/prodos.203/prodos.s.ramx
+LOAD usr/src/prodos.203/prodos.s
ASM
diff --git a/ProDOS.203/ProDOS.S.SEL0.txt b/ProDOS.203/ProDOS.S.SEL0.txt
index 360330ed..2b590996 100644
--- a/ProDOS.203/ProDOS.S.SEL0.txt
+++ b/ProDOS.203/ProDOS.S.SEL0.txt
@@ -292,6 +292,6 @@ dsp1pfx .DA #01 1 parameter
* end of obj sel_0
*--------------------------------------
MAN
-SAVE USR/SRC/PRODOS.203/PRODOS.S.SEL0
-LOAD USR/SRC/PRODOS.203/PRODOS.S
+SAVE usr/src/prodos.203/prodos.s.sel0
+LOAD usr/src/prodos.203/prodos.s
ASM
diff --git a/ProDOS.203/ProDOS.S.SEL1.txt b/ProDOS.203/ProDOS.S.SEL1.txt
index 770d394c..43021ed0 100644
--- a/ProDOS.203/ProDOS.S.SEL1.txt
+++ b/ProDOS.203/ProDOS.S.SEL1.txt
@@ -400,6 +400,6 @@ rd_refn .HS 01 reference number
dhdr_len .HS 00 directory header length (actually uses 2 bytes)
*--------------------------------------
MAN
-SAVE USR/SRC/PRODOS.203/PRODOS.S.SEL1
-LOAD USR/SRC/PRODOS.203/PRODOS.S
+SAVE usr/src/prodos.203/prodos.s.sel1
+LOAD usr/src/prodos.203/prodos.s
ASM
diff --git a/ProDOS.203/ProDOS.S.SEL2.txt b/ProDOS.203/ProDOS.S.SEL2.txt
index 8adcb893..118407e5 100644
--- a/ProDOS.203/ProDOS.S.SEL2.txt
+++ b/ProDOS.203/ProDOS.S.SEL2.txt
@@ -435,6 +435,6 @@ button2 .DA #$0B
.AS "Cancel: Esc"
*--------------------------------------
MAN
-SAVE USR/SRC/PRODOS.203/PRODOS.S.SEL2
-LOAD USR/SRC/PRODOS.203/PRODOS.S
+SAVE usr/src/prodos.203/prodos.s.sel2
+LOAD usr/src/prodos.203/prodos.s
ASM
diff --git a/ProDOS.203/ProDOS.S.TCLK.txt b/ProDOS.203/ProDOS.S.TCLK.txt
index 50014b27..86843ffe 100644
--- a/ProDOS.203/ProDOS.S.TCLK.txt
+++ b/ProDOS.203/ProDOS.S.TCLK.txt
@@ -89,17 +89,17 @@ tdays .DA #$00 January
* is the year which January 1st is Sunday, and so on backwards thru
* the days of the week.
-yradj .DA #$12 Monday
+yradj .DA #$18 Monday
.DA #$17 Sunday
.DA #$16 Saturday
- .DA #$15 Friday
- .DA #$14 Thursday
- .DA #$14 Wednesday
- .DA #$13 Tuesday
+ .DA #$1B Friday
+ .DA #$1A Thursday
+ .DA #$19 Wednesday
+ .DA #$18 Tuesday
TCLK.END .HS 000000 pad
*--------------------------------------
MAN
-SAVE USR/SRC/PRODOS.203/PRODOS.S.TCLK
-LOAD USR/SRC/PRODOS.203/PRODOS.S
+SAVE usr/src/prodos.203/prodos.s.tclk
+LOAD usr/src/prodos.203/prodos.s
ASM
diff --git a/ProDOS.203/ProDOS.S.XDOS.A.txt b/ProDOS.203/ProDOS.S.XDOS.A.txt
index 30c00ef9..941c32dc 100644
--- a/ProDOS.203/ProDOS.S.XDOS.A.txt
+++ b/ProDOS.203/ProDOS.S.XDOS.A.txt
@@ -642,6 +642,6 @@ svdevn ldy namptr index to 1st byte of this entry.
rts end of block file manager
MAN
-SAVE USR/SRC/PRODOS.203/PRODOS.S.XDOS.A
-LOAD USR/SRC/PRODOS.203/PRODOS.S
+SAVE usr/src/prodos.203/prodos.s.xdos.a
+LOAD usr/src/prodos.203/prodos.s
ASM
diff --git a/ProDOS.203/ProDOS.S.XDOS.B.txt b/ProDOS.203/ProDOS.S.XDOS.B.txt
index 1c5c7a49..ee8e5278 100644
--- a/ProDOS.203/ProDOS.S.XDOS.B.txt
+++ b/ProDOS.203/ProDOS.S.XDOS.B.txt
@@ -862,6 +862,6 @@ L3C0B tya
lsr
rts
MAN
-SAVE USR/SRC/PRODOS.203/PRODOS.S.XDOS.B
-LOAD USR/SRC/PRODOS.203/PRODOS.S
+SAVE usr/src/prodos.203/prodos.s.xdos.b
+LOAD usr/src/prodos.203/prodos.s
ASM
diff --git a/ProDOS.203/ProDOS.S.XDOS.C.txt b/ProDOS.203/ProDOS.S.XDOS.C.txt
index 8dec3932..5c40866b 100644
--- a/ProDOS.203/ProDOS.S.XDOS.C.txt
+++ b/ProDOS.203/ProDOS.S.XDOS.C.txt
@@ -723,6 +723,6 @@ L41C1 tya calc position of next fcb.
MAN
-SAVE USR/SRC/PRODOS.203/PRODOS.S.XDOS.C
-LOAD USR/SRC/PRODOS.203/PRODOS.S
+SAVE usr/src/prodos.203/prodos.s.xdos.c
+LOAD usr/src/prodos.203/prodos.s
ASM
diff --git a/ProDOS.203/ProDOS.S.XDOS.D.txt b/ProDOS.203/ProDOS.S.XDOS.D.txt
index c1542c07..225cca27 100644
--- a/ProDOS.203/ProDOS.S.XDOS.D.txt
+++ b/ProDOS.203/ProDOS.S.XDOS.D.txt
@@ -574,6 +574,6 @@ twrprot1 sta unitnum make the device status call
rts carry is indeterminate.
MAN
-SAVE USR/SRC/PRODOS.203/PRODOS.S.XDOS.D
-LOAD USR/SRC/PRODOS.203/PRODOS.S
+SAVE usr/src/prodos.203/prodos.s.xdos.d
+LOAD usr/src/prodos.203/prodos.s
ASM
diff --git a/ProDOS.203/ProDOS.S.XDOS.E.txt b/ProDOS.203/ProDOS.S.XDOS.E.txt
index 3460785f..a281386e 100644
--- a/ProDOS.203/ProDOS.S.XDOS.E.txt
+++ b/ProDOS.203/ProDOS.S.XDOS.E.txt
@@ -602,6 +602,6 @@ L4B1A ldx #$00
rts
MAN
-SAVE USR/SRC/PRODOS.203/PRODOS.S.XDOS.E
-LOAD USR/SRC/PRODOS.203/PRODOS.S
+SAVE usr/src/prodos.203/prodos.s.xdos.e
+LOAD usr/src/prodos.203/prodos.s
ASM
diff --git a/ProDOS.203/ProDOS.S.XDOS.F.txt b/ProDOS.203/ProDOS.S.XDOS.F.txt
index e5472243..fa0312cf 100644
--- a/ProDOS.203/ProDOS.S.XDOS.F.txt
+++ b/ProDOS.203/ProDOS.S.XDOS.F.txt
@@ -759,6 +759,6 @@ delflag .HS 00 used by 'detree' to know if called from delete (destroy).
cortflag .HS 00 cortland flag. 1 = Cortland system (must stay within page boundary)
*--------------------------------------
MAN
-SAVE USR/SRC/PRODOS.203/PRODOS.S.XDOS.F
-LOAD USR/SRC/PRODOS.203/PRODOS.S
+SAVE usr/src/prodos.203/prodos.s.xdos.f
+LOAD usr/src/prodos.203/prodos.s
ASM
diff --git a/ProDOS.203/ProDOS.S.XRW.txt b/ProDOS.203/ProDOS.S.XRW.txt
index 70276766..eb2174c9 100644
--- a/ProDOS.203/ProDOS.S.XRW.txt
+++ b/ProDOS.203/ProDOS.S.XRW.txt
@@ -878,6 +878,6 @@ spunit .HS 0000000000000000 ref pathbuf-$10smartport unit numbers
* pathname buffer starts at this page boundary (pathbuf = $D700)
*--------------------------------------
MAN
-SAVE USR/SRC/PRODOS.203/PRODOS.S.XRW
-LOAD USR/SRC/PRODOS.203/PRODOS.S
+SAVE usr/src/prodos.203/prodos.s.xrw
+LOAD usr/src/prodos.203/prodos.s
ASM
diff --git a/ProDOS.203/ProDOS.S.txt b/ProDOS.203/ProDOS.S.txt
index e778f582..0af859ab 100644
--- a/ProDOS.203/ProDOS.S.txt
+++ b/ProDOS.203/ProDOS.S.txt
@@ -5,11 +5,11 @@ NEW
.OR $2000
.TF PRODOS.203TC,TSYS
*--------------------------------------
- .INB INC/ZP.I
- .INB INC/IO.I
- .INB INC/MONITOR.I
- .INB INC/MLI.I
- .INB INC/MLI.E.I
+ .INB inc/zp.i
+ .INB inc/io.i
+ .INB inc/monitor.i
+ .INB inc/mli.i
+ .INB inc/mli.e.i
*--------------------------------------
MMStartUp .EQ $0202
NewHandle .EQ $0902
@@ -174,58 +174,58 @@ gbuf .EQ $DC00 general purpose 512 byte block buffer
* $5D00 sel_1 enhanced quit code (Bird's Better Bye)
* $6000 sel_2 GQuit dispatcher support
*--------------------------------------
- .INB USR/SRC/PRODOS.203/PRODOS.S.LDR.A
- .INB USR/SRC/PRODOS.203/PRODOS.S.LDR.B
+ .INB usr/src/prodos.203/prodos.s.ldr.a
+ .INB usr/src/prodos.203/prodos.s.ldr.b
RAM .PH $FF00
- .INB USR/SRC/PRODOS.203/PRODOS.S.RAM
+ .INB usr/src/prodos.203/prodos.s.ram
.EP
IRQ .PH $FF9B
- .INB USR/SRC/PRODOS.203/PRODOS.S.IRQ
+ .INB usr/src/prodos.203/prodos.s.irq
.EP
GP .PH $BF00
- .INB USR/SRC/PRODOS.203/PRODOS.S.GP
+ .INB usr/src/prodos.203/prodos.s.gp
.EP
TCLK .PH $D742
- .INB USR/SRC/PRODOS.203/PRODOS.S.TCLK
+ .INB usr/src/prodos.203/prodos.s.tclk
.EP
CCLK .PH $D742
- .INB USR/SRC/PRODOS.203/PRODOS.S.CCLK
+ .INB usr/src/prodos.203/prodos.s.cclk
.EP
XDOS .PH $DE00
- .INB USR/SRC/PRODOS.203/PRODOS.S.XDOS.A
- .INB USR/SRC/PRODOS.203/PRODOS.S.XDOS.B
- .INB USR/SRC/PRODOS.203/PRODOS.S.XDOS.C
- .INB USR/SRC/PRODOS.203/PRODOS.S.XDOS.D
- .INB USR/SRC/PRODOS.203/PRODOS.S.XDOS.E
- .INB USR/SRC/PRODOS.203/PRODOS.S.XDOS.F
+ .INB usr/src/prodos.203/prodos.s.xdos.a
+ .INB usr/src/prodos.203/prodos.s.xdos.b
+ .INB usr/src/prodos.203/prodos.s.xdos.c
+ .INB usr/src/prodos.203/prodos.s.xdos.d
+ .INB usr/src/prodos.203/prodos.s.xdos.e
+ .INB usr/src/prodos.203/prodos.s.xdos.f
.EP
RAMX .PH $200
- .INB USR/SRC/PRODOS.203/PRODOS.S.RAMX
+ .INB usr/src/prodos.203/prodos.s.ramx
.EP
XRW .PH $D000
- .INB USR/SRC/PRODOS.203/PRODOS.S.XRW
+ .INB usr/src/prodos.203/prodos.s.xrw
.EP
SEL0 .PH $1000
- .INB USR/SRC/PRODOS.203/PRODOS.S.SEL0
+ .INB usr/src/prodos.203/prodos.s.sel0
.EP
SEL1 .PH $1000
- .INB USR/SRC/PRODOS.203/PRODOS.S.SEL1
+ .INB usr/src/prodos.203/prodos.s.sel1
.EP
SEL2 .PH $1000
- .INB USR/SRC/PRODOS.203/PRODOS.S.SEL2
+ .INB usr/src/prodos.203/prodos.s.sel2
.EP
*--------------------------------------
MAN
-SAVE USR/SRC/PRODOS.203/PRODOS.S
+SAVE usr/src/prodos.203/prodos.s
ASM
diff --git a/ProDOS.FX/ProDOS.S.CCLK.txt b/ProDOS.FX/ProDOS.S.CCLK.txt
index 034e87e9..16195475 100644
--- a/ProDOS.FX/ProDOS.S.CCLK.txt
+++ b/ProDOS.FX/ProDOS.S.CCLK.txt
@@ -50,7 +50,10 @@ CCLK.START >SHORTMX 8 bit mode.
rts
savestate .HS 00 state of the state register
*--------------------------------------
+ .LIST ON
CCLK.LEN .EQ *-CCLK.START
+ .LIST OFF
+*--------------------------------------
MAN
SAVE usr/src/prodos.fx/prodos.s.cclk
LOAD usr/src/prodos.fx/prodos.s
diff --git a/ProDOS.FX/ProDOS.S.TCLK.txt b/ProDOS.FX/ProDOS.S.TCLK.txt
index d18fcd2a..a92a464b 100644
--- a/ProDOS.FX/ProDOS.S.TCLK.txt
+++ b/ProDOS.FX/ProDOS.S.TCLK.txt
@@ -101,16 +101,19 @@ tdays .DA #$00 January
* to the year in which January 1st falls on a Monday. The 2nd entry
* is the year which January 1st is Sunday, and so on backwards thru
* the days of the week.
-
-yradj .DA #$12 Monday
+* https://calormen.com/tmp/proyear.html
+* For 2022 - 2027: $18, $17, $16, $1B, $1A, $19, $18
+yradj .DA #$18 Monday
.DA #$17 Sunday
.DA #$16 Saturday
- .DA #$15 Friday
- .DA #$14 Thursday
- .DA #$14 Wednesday
- .DA #$13 Tuesday
-
+ .DA #$1B Friday
+ .DA #$1A Thursday
+ .DA #$19 Wednesday
+ .DA #$18 Tuesday
+*--------------------------------------
+ .LIST ON
TCLK.LEN .EQ *-TCLK.START
+ .LIST OFF
*--------------------------------------
MAN
SAVE usr/src/prodos.fx/prodos.s.tclk
diff --git a/ROOT/asmtest/TESTGUI.S.txt b/ROOT/asmtest/TESTGUI.S.txt
index 2b8e521b..bcf8e584 100644
--- a/ROOT/asmtest/TESTGUI.S.txt
+++ b/ROOT/asmtest/TESTGUI.S.txt
@@ -112,6 +112,11 @@ WND.Test >PUSHBI S.WND.F.RESIZE+S.WND.F.MOVE+S.WND.F.CLOSE+S.WND.F.MAX+S.WND.F.
* >PUSHW hLogo
* >LIBCALL hLIBGUI,LIBGUI.OBJ.SetProp
+ >PUSHB hWND
+ >PUSHBI S.WND.hPTR
+ >PUSHWI PTR.T.WAIT
+ >LIBCALL hLIBGUI,LIBGUI.OBJ.SetProp
+
>PUSHB hWND
>PUSHBI S.WND.pTITLE
>PUSHW L.WND.TITLE
@@ -201,7 +206,7 @@ WND.Test.1 >PUSHB hWND
>PUSHBI C.BLACK C16.D.GREEN
rts
-WND.Test.2 >PUSHWI 250
+WND.Test.2 >PUSHWI 240
>PUSHWI 60
>LIBCALL hLIBGUI,LIBGUI.DRAW.Line
rts
diff --git a/ROOT/ctest/testgui.c..txt b/ROOT/ctest/testgui.c..txt
index b5915f87..4fc36c24 100644
--- a/ROOT/ctest/testgui.c..txt
+++ b/ROOT/ctest/testgui.c..txt
@@ -11,8 +11,8 @@ int main(int argc, char *argv[])
20,20,200,100);
guiSetProp(hWND, WND_P_pTITLE, "Libgui C API");
guiSetProp(hWND, WND_P_pSTATUS, "Status bar");
- guiSetProp(hWND, WND_P_BGCOLOR, pC_WHITE);
-
+ guiSetProp(hWND, WND_P_BGCOLOR, C_WHITE);
+ guiSetProp(hWND, WND_P_pPTR, PTR_T_CROSS);
guiShowWnd(hWND);
do {
diff --git a/SBIN/GUI.S.txt b/SBIN/GUI.S.txt
index 47c5358a..14f14f8e 100644
--- a/SBIN/GUI.S.txt
+++ b/SBIN/GUI.S.txt
@@ -92,9 +92,9 @@ CS.RUN >SLEEP
rts
*--------------------------------------
CS.RUN.MsgBox >PUSHW L.ABOUT.T
- >PUSHW L.ABOUT.M
- >PUSHWI BM.ID.INFO
- >PUSHBI BUT.ID.OK
+ >PUSHWI BM.ID.INFO
+ >PUSHW L.ABOUT.M
+ >PUSHBI 63 BUT.ID.OK
>LIBCALL hLIBGUI,LIBGUI.MBOX.MsgBox
rts
*--------------------------------------
@@ -118,7 +118,9 @@ CS.END
LIBGUI .AZ "libgui"
hLIBGUI .BS 1
ABOUT.T .AZ "About GUI"
-ABOUT.M .AZ "MsgBox message."
+ABOUT.M .CS "MsgBox demo with all possible buttons.\r\n"
+ .CS "...Line 2...\r\n"
+ .CZ "...Line 3.\r\n"
GUITEST1 .AZ "${ROOT}root/asmtest/testgui"
GUITEST2 .AZ "${ROOT}root/ctest/testgui"
*--------------------------------------
diff --git a/SCMASM.31/SCMASM.S.DIR1.txt b/SCMASM.31/SCMASM.S.DIR1.txt
index 46ca8427..05ae614f 100644
--- a/SCMASM.31/SCMASM.S.DIR1.txt
+++ b/SCMASM.31/SCMASM.S.DIR1.txt
@@ -85,12 +85,12 @@ PSTA JSR EXPR.DEFINED GET EXPR VALUE
*--------------------------------------
DIR1.PS jsr GNNB
bcs .9
-
+
sta DLIM SAVE DELIMITER
ldx #$ff
ldy CHAR.PNTR
-
+
.1 inx
lda WBUF,Y
and #$7F
@@ -99,19 +99,19 @@ DIR1.PS jsr GNNB
iny
cmp DLIM
bne .1
-
+
txa
jsr EMIT
-
+
.2 jsr GNC
jsr EMIT
dex
bne .2
-
+
clc
rts
-
-.9 jmp ERBA2
+
+.9 jmp ERBA2
*--------------------------------------
DIR1.EscChars .AS "abefnrtv"
.HS 5C27223F25 \'"?%
@@ -132,10 +132,10 @@ DIR1.CS lda #0
*--------------------------------------
PSAZ jsr PSAS
jmp EMIT.ZERO
-
+
PSAT lda #$80 LAST BYTE HAS OPPOSITE BIT 7
.HS 2C ...SKIP OVER 2 BYTES
-
+
PSAS lda #0 ALL BYTES GET SAME BIT 7
clc
@@ -160,47 +160,47 @@ DIR1.String sta AT.HIBIT
.15 sta DLIM SAVE DELIMITER
jsr GNC.UC GET NEXT CHAR
-.9 bcs ERBA2 END OF LINE IS BAD NEWS
-
+ bcs .9 END OF LINE IS BAD NEWS
+
cmp DLIM CHK IF DELIMITER
beq .4 YES, NO STRING IN BETWEEN
-
+
.2 jsr GNC.UC GET NEXT CHAR
- bcs ERBA2 END OF LINE IS BAD NEWS
-
+ bcs .9 END OF LINE IS BAD NEWS
+
cmp DLIM CHK IF DELIMITER
beq .3 YES, FINISH UP AND RETURN
-
+
lda WBUF-2,Y ...NO, GET PREVIOUS CHAR
bit BYTE
bpl .27
-
+
cmp #'\' "\?" ?
bne .27
jsr GNC.UC GET NEXT CHAR
- bcs ERBA2 END OF LINE IS BAD NEWS
+ bcs .9 END OF LINE IS BAD NEWS
lda WBUF-2,Y get "?"
ldx #DIR1.EscChars.L-1
-
+
.20 cmp DIR1.EscChars,x
beq .21
dex
bpl .20
- bmi ERBA2
-
+ bmi .9
+
.21 lda DIR1.EscCodes,x
ldx WBUF-1,Y
cpx DLIM
beq .30
-
+
.27 ora AS.HIBIT MERGE WITH TOP BIT
- jsr EMIT
+ jsr EMIT
jmp .2 GO FOR ANOTHER ONE
-
+
.3 lda WBUF-2,Y GET PREVIOUS CHAR
.30 ora AS.HIBIT MERGE WITH SELECTED BIT 7
@@ -214,37 +214,102 @@ DIR1.String sta AT.HIBIT
beq .1
.5 rts
+
+.9 jmp ERBA2
+*---------------------------------
+* .HX -- HEX DIGIT STRING
+*---------------------------------
+PSHX jsr GNNB GET NEXT NON-BLANK CHAR
+ bcs ERBA2 END OF LINE
+
+ jsr BACKUP.CHAR.PNTR
+
+.1 jsr PSHX.GetNibble
+ bcs .8
+
+.2 sta SYM.VALUE
+
+ jsr PSHX.GetNibble
+ bcs .7
+
+ asl
+ asl
+ asl
+ asl
+ ora SYM.VALUE
+ jsr EMIT
+ jsr PSHX.GetNibble
+ bcc .2
+
+ clc
+ rts
+
+.7 lda SYM.VALUE
+ jsr EMIT
+
+.8 rts
+*---------------------------------
+PSHX.GetNibble
+.1 jsr GNC.UC IGNORE CASE
+ beq .9
+
+ cmp #'.' ALLOW PERIODS
+ beq .1 ...BUT IGNORE THEM
+
+ eor #$30
+ cmp #$0A
+ bcc .3 ...0-9, TEXT VALIDITY
+
+ adc #$88 ...MIGHT BE A...F
+
+.2 cmp #$FA
+ bcc .3 NOT A-F EITHER, RETURN CARRY CLEAR
+
+ and #$0F TRIM HEX A...F
+
+.3 clc
+ rts
+
+.9 sec
+ rts
*---------------------------------
* .HS -- HEX STRING
*---------------------------------
-PSHS JSR GNNB GET NEXT NON-BLANK CHAR
- BCS ERBA2 END OF LINE
- JSR BACKUP.CHAR.PNTR
- JSR TRY.HEX.STRING
- BNE ERBA2 ...ERROR, BAD ADDRESS
- RTS
+PSHS jsr GNNB GET NEXT NON-BLANK CHAR
+ bcs ERBA2 END OF LINE
+
+ jsr BACKUP.CHAR.PNTR
+ jsr TRY.HEX.STRING
+ bne ERBA2 ...ERROR, BAD ADDRESS
+
+ rts
*--------------------------------
-THX1 JSR HEX.DIGIT GET NEXT HEX DIGIT
- BCC ERBA2 ERROR, ODD DIGITS
- LDA SYM.VALUE GET CONVERTED VALUE
- JSR EMIT
-TRY.HEX.STRING
-.1 JSR HEX.DIGIT
- BCS THX1
- LDA CURRENT.CHAR
- BEQ .2 ...END OF LINE
- CMP #',' IF COMMA, GO GET MORE BYTES
- BEQ .1 ...OKAY
- CMP #' ' IF BLANK, VALID END OF STRING
-.2 RTS
+THX1 jsr HEX.DIGIT GET NEXT HEX DIGIT
+ bcc ERBA2 ERROR, ODD DIGITS
+
+ lda SYM.VALUE GET CONVERTED VALUE
+ jsr EMIT
*--------------------------------
-ERBA2 JMP ERBA ERROR: BAD ADDRESS
-GT255ERR LDY #QER8 VALUE > 255 ERROR
- .HS 2C LONG "BIT" TO SKIP NEXT TWO BYTES
-NOLBLERR LDY #QER1 "NO LABEL"
- .HS 2C LONG "BIT" TO SKIP NEXT TWO BYTES
-UNDF LDY #QER6 "UNDEF"
- JMP SOFT.ERROR
+TRY.HEX.STRING jsr HEX.DIGIT
+ bcs THX1
+
+ lda CURRENT.CHAR
+ beq .2 ...END OF LINE
+
+ cmp #',' IF COMMA, GO GET MORE BYTES
+ beq TRY.HEX.STRING ...OKAY
+
+ cmp #' ' IF BLANK, VALID END OF STRING
+
+.2 rts
+*--------------------------------
+ERBA2 jmp ERBA ERROR: BAD ADDRESS
+GT255ERR ldy #QER8 VALUE > 255 ERROR
+ .HS 2C LONG "BIT" TO SKIP NEXT TWO BYTES
+NOLBLERR ldy #QER1 "NO LABEL"
+ .HS 2C LONG "BIT" TO SKIP NEXT TWO BYTES
+UNDF ldy #QER6 "UNDEF"
+ jmp SOFT.ERROR
*---------------------------------
* .EQ -- EQUATE
*---------------------------------
diff --git a/SCMASM.31/SCMASM.S.XTDIR.txt b/SCMASM.31/SCMASM.S.XTDIR.txt
index 03b16a9f..d0ee3015 100644
--- a/SCMASM.31/SCMASM.S.XTDIR.txt
+++ b/SCMASM.31/SCMASM.S.XTDIR.txt
@@ -22,13 +22,14 @@ OPTBL.DIR >DIR A,C,DIR.AC ASCII STRING COMPRESSED
>DIR D,A,PSDA DATA
>DIR D,O,PSDO DO
>DIR D,U,D.DUMMY DUMMY
- >DIR E,D,D.END.DUMMY
+ >DIR E,D,D.END.DUMMY
>DIR E,L,PSEL ELSE
>DIR E,N,PSEN END OF SOURCE
- >DIR E,P,D.END.PHASE
+ >DIR E,P,D.END.PHASE
>DIR E,Q,PSEQ EQUATE
>DIR F,I,PSFI FIN
>DIR H,S,PSHS HEX STRING
+ >DIR H,X,PSHX HEX DIGIT STRING
>DIR I,N,PSIN INCLUDE
>DIR L,I,PSLI LIST ON,/ OFF
>DIR M,A,PSMA MACRO