mirror of https://github.com/A2osX/A2osX.git
Compare commits
23 Commits
50386f6c26
...
adc09c0812
Author | SHA1 | Date |
---|---|---|
burniouf | adc09c0812 | |
John LeFebvre | 70a1e940ed | |
burniouf | 3efa6a91d2 | |
burniouf | ac15ee428e | |
burniouf | 9190fc0a94 | |
burniouf | f76765cb13 | |
burniouf | 65be4815e2 | |
burniouf | 16e3760c4b | |
burniouf | 249e90c102 | |
burniouf | 02e4c892c8 | |
John LeFebvre | f0adfc775d | |
John LeFebvre | 491792212b | |
burniouf | daa19bfc34 | |
burniouf | a197ec297c | |
Brian J. Bernstein | a246b0d691 | |
Brian J. Bernstein | 60b98d2472 | |
burniouf | 246068c91b | |
burniouf | f50fee89e4 | |
John LeFebvre | b07bdce5d3 | |
John LeFebvre | 463723ce8f | |
burniouf | 34f9969c0c | |
Brian J. Bernstein | d85717509b | |
John LeFebvre | c83582a68a |
26
.Docs/ASM.md
26
.Docs/ASM.md
|
@ -1,4 +1,4 @@
|
|||
# A2osX Macro Assembler (0.94)
|
||||
# A2osX Macro Assembler (0.95)
|
||||
|
||||
## Description
|
||||
|
||||
|
@ -33,7 +33,7 @@ Table-driven, add your favorite CPU creating a new CPU asm.xxxx file.
|
|||
| .BS | Block (Byte) Storage | S-C, A2osX | Working | `.BS count[,value]` | Reserves `count` bytes in output and sets them to `value` (or zero if omitted) |
|
||||
| .CS | C-string | S-C 3.1, A2osX | Working | `.CS "text\a\b\e\f\n\r\n\r\t\v"` | |
|
||||
| .CZ | C-String Zero terminated| S-C 3.1, A2osX | Working | (same as above) | ZERO-terminated |
|
||||
| .DA | DAta value | S-C, A2osX | Working | `.DA value` | 2-byte address: `.DA $1234` only high byte: `.DA /$1234` only low byte: `.DA #$1234` |
|
||||
| .DA | DAta value | S-C, A2osX | Working | `.DA value` | 2-byte address: `.DA $1234` (see expressions) |
|
||||
| .DO | conditional start | S-C, A2osX | Working | | |
|
||||
| .DU,.DUMMY | begin DUmmy section | S-C, A2osX | Working | | |
|
||||
| .ED | End Dummy section | S-C, A2osX | Working | | |
|
||||
|
@ -59,6 +59,26 @@ Table-driven, add your favorite CPU creating a new CPU asm.xxxx file.
|
|||
| .TI | TItle | S-C, A2osX | IGNORED | | |
|
||||
| .US | USer defined | S-C, A2osX | IGNORED | | |
|
||||
|
||||
## Expressions
|
||||
|
||||
| Code | Description | Scope |
|
||||
|-|-|-|
|
||||
| \- | Negate : `.AS -"String"` output | .AS .AT .AZ .CS .CZ |
|
||||
| \' | Char, MSB=0 `lda #'a | OPCODES |
|
||||
| \" | Char, MSB=1 `lda #"a | OPCODES |
|
||||
| \# | Immediate LO byte : `.DA #$1234` output 34 | .DA |
|
||||
| \/ | Immediate HI byte : `.DA /$1234` output 12 | .DA
|
||||
| \^ | Immediate 3rd byte : `.DA ^$123456` output 12 | .DA |
|
||||
| \< | Force 24 bits output LO : `.DA <$123456` output 56 34 12 | .DA |
|
||||
| \> | Force 32 bits output LO : `.DA >$123456` output 00 56 34 12 | .DA |
|
||||
|-|-|-|
|
||||
| \> | Force 16 bits operand : `ldx >ZP.A1L` output AE 3C 00 | OPCODES |
|
||||
| \>\> | Force 24 bits operand : `lda >>ZP.A1L` output AF 3C 00 00 | OPCODES |
|
||||
|-|-|-|
|
||||
| \#\# | Immediate word LO : `lda ##IMMVAL` | 65816 OPCODES |
|
||||
| \/\/ | Immediate word MID : `lda //IMMVAL` | 65816 OPCODES |
|
||||
| \^\^ | Immediate word HI: `lda ^^IMMVAL` | 65816 OPCODES |
|
||||
|
||||
## License
|
||||
A2osX is licensed under the GNU General Pulic License.
|
||||
|
||||
|
@ -76,4 +96,4 @@ The full A2osX license can be found **[Here](../LICENSE)**.
|
|||
|
||||
## Copyright
|
||||
|
||||
Copyright 2015 - 2022, Remy Gibert and the A2osX contributors.
|
||||
Copyright 2015 - 2024, Remy Gibert and the A2osX contributors.
|
||||
|
|
|
@ -1,10 +1,43 @@
|
|||
# A2osX Multi-Tasking OS for Apple II
|
||||
|
||||
### Updated February 10, 2020
|
||||
## News 2024-01-21
|
||||
|
||||
A2osX 0.95 build 2666 has been released.
|
||||
|
||||
New features:
|
||||
|
||||
* First release of `netconfig` tool, a LIBTUI program for editing network configuration.
|
||||
* First release of LIBTUI-based `man` tool, and a few man pages to go along with it.
|
||||
|
||||
Issues fixed:
|
||||
|
||||
* [#211 - INCLUDE needs to be set in release profiles](https://github.com/A2osX/A2osX/issues/211)
|
||||
* [#210 - FOR loop crashes on LOOP ending](https://github.com/A2osX/A2osX/issues/210)
|
||||
* [#209 - PAKME running out of memory compressing kernel)(https://github.com/A2osX/A2osX/issues/209)
|
||||
* Several non-documented bugfixes and improvements.
|
||||
|
||||
Build 2666 is available as 32MB, 800KB, 140KB, and net update.
|
||||
|
||||
|
||||
|
||||
## News 2024-01-17
|
||||
|
||||
It has been a long time since the news has been updated, but that doesn't mean that development on A2osX has ceased in the last 4 years! We've actually had quite a number of releases over this time. In general, stability has been greatly improved but there have also been additions like BASIC.FX which is a ProDOS BASIC.SYSTEM environment which supports a number of ProDOS FX extensions (RamWorks III and extension commands for starters).
|
||||
|
||||
As far as where things are going now, development is underway on Kernel 1.0 which will finally bring support for breaking past the 128KB barrier of the //e series by supporting RamWorks-type memory cards. In the past, RamWorks boards were supported but would only allow for /RAM type storage. With Kernel 1.0, up to 8MB of RAM can now be used for code and applications! Early builds of the new kernel are expected in 1H 2024.
|
||||
|
||||
With current builds and all going forward, the distributions are only shipped with [ProDOS FX](ProDOS.md) by default. While 2.0.3tc is still available and can be used with A2osX, the recommendation is now to use FX because of the filename case handling in addition to the number of under-the-hood improvements that FX offers. Both FX and 2.0.3tc's clock tables have been updated for 2024.
|
||||
|
||||
We are currently looking for volunteers to help with flushing out the C libraries! A C89-compliant compiler is available, however, the API needs some work to be compliant and can result in changing the kernel's APIs too, so "the sooner, the better" as the saying goes. Want to help? Reach out on the Slack server!
|
||||
|
||||
Finally, we are always looking for people to help! A project as complicated at A2osX requires a lot of testing, but we always need help with creating new applications, libraries, and documentation. If you have some applicable skills, let us know!
|
||||
|
||||
|
||||
## News February 10, 2020
|
||||
|
||||
A2osX Version 0.93 Release Candidate has been finalized. Media for this release, based on Build 193x are now available. Future STABLE and BLEED builds will be based on work to complete 0.94. Work has already started to make the A2osX API fully C compliant. This will allow a new CSH shell and CC compiler to be added to A2osX as well as an enhanced web server (*httpd*) that can serve active server pages formed by user created CSH scripts. In addition, Double High Graphics Resolution (DHGR) and Mouse drivers are being finalized which will allow developers to create games and new user interfaces for their A2osX applications.
|
||||
|
||||
## Latest News 2020-01-27
|
||||
## News 2020-01-27
|
||||
|
||||
Major update to A2osX 0.93
|
||||
|
||||
|
@ -26,45 +59,45 @@ A great new networking utility, *httpget* is now available which can be used to
|
|||
|
||||
Media have been updated based on Build 1784.
|
||||
|
||||
## Latest News 2019-10-31
|
||||
## News 2019-10-31
|
||||
|
||||
Media have been updated based on Build 1694. This version fixes issues with Piping of commands, adds new READ functionality. Please note, KM.NSC is no longer loaded by default on any media. If you have a No Slot Clock in your system, you should move the file KM.NSC from ./SYS/KM into ./SYS which will make it load on boot.
|
||||
|
||||
## Latest News 2019-10-26
|
||||
## News 2019-10-26
|
||||
|
||||
Starting with Build 1675, the SH(ell) command **TIME** has been removed and the **DATE** command will now return both the Date and Time. Additionally, if DATE command has been updated to support options for returning formatted strings with just the portions of the date and time you desire. Consult the Shell Developers Guide for syntax.
|
||||
|
||||
## Latest News 2019-10-24
|
||||
## News 2019-10-24
|
||||
|
||||
Created STABLE images with Build 1669 with improvements to TCP networking. There is also a new DEBUG 140k disk image. See the media guide for more info.
|
||||
|
||||
## Latest News 2019-10-22
|
||||
## News 2019-10-22
|
||||
|
||||
Updated RC images to Build 1664 which fixed RESTART SYSTEM bug on //GS.
|
||||
|
||||
## Latest News 2019-10-19
|
||||
## News 2019-10-19
|
||||
|
||||
Updated RC images to Build 1653 which fixed bugs in CUT and includes a patched version of ProDOS 2.03 to correct year display for ThunderClocks.
|
||||
|
||||
## Latest News 2019-10-18
|
||||
## News 2019-10-18
|
||||
|
||||
Updated A2osX Release Candidate based on Build No 1650 is now available and can be found in our **[Media directory](.Floppies)**. In addition, a new disk image **TDBOOT** has been created that is preconfigured to automatically load Uthernet2 driver, start network services and launch the TelnetD server process (hence name TD for TelnetD Boot).
|
||||
|
||||
## Latest News 2019-10-15
|
||||
## News 2019-10-15
|
||||
|
||||
**The first A2osX Release Candidate is now available and can be found in our [Media directory](.Floppies)**.
|
||||
|
||||
## Latest News 2019-04-19
|
||||
## News 2019-04-19
|
||||
|
||||
Major updates have occurred to the kernel and many of the A2osX API's to support a greatly enhanced shell that boasts significant new scripting capabilities since 0.92. Also added is the the ability to redirect input and output, including errors, and the ability to pipe (|) the output of one command or operation to another (i.e. **ls \* | more** ). A2osX now provides for multiple virtual terminals as well as users/terminals via TCP (through TELNETD) and serial devices (through a SSC driver).
|
||||
|
||||
As great as the changes to A2osX itself, we are also please to report that great strides have been made in terms of documentation. While much of it is in draft form, there is a new **[Users Guide](User%20Guide.md)**, **[Developers Guide](Developers%20Guide.md)**, **[Shell Developers Guide](Shell%20Developers%20Guide.md)**, **[Technical Spec](Technical%20Spec.md)** and **[Command Guide](Command%20Guide.md)**. See the **[Documentation](#documentation)** Section below for more details.
|
||||
|
||||
## Latest News 2019-02-19
|
||||
## News 2019-02-19
|
||||
|
||||
Major updates have occurred to the kernel and many of the APIs to support an enhanced shell with support of many new scripting capabilities, the ability to redirect and eventually piping output. Current kernel also supports multiple virtual terminals as well as TCP (via TELNETD) and serial (SSC driver) terminals.
|
||||
|
||||
## Latest News 2018-11-10
|
||||
## News 2018-11-10
|
||||
|
||||
My loneliness has been cured, new resources have signed onto the project. I welcome Patrick Kloepfer who is helping with product management, recruitment, testing and feedback.
|
||||
|
||||
|
@ -257,4 +290,4 @@ The full A2osX license can be found **[Here](../LICENSE)**.
|
|||
|
||||
## Copyright
|
||||
|
||||
Copyright 2015 - 2020, Remy Gibert and the A2osX contributors.
|
||||
Copyright 2015 - 2024, Remy Gibert and the A2osX contributors.
|
||||
|
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -1523,14 +1523,14 @@ BS.KW.MEM jsr MON.CROUT
|
|||
sta $260+11
|
||||
|
||||
lda #0
|
||||
sta XBC10
|
||||
|
||||
.2 ldx #BSX.Mem.X
|
||||
|
||||
.2 pha
|
||||
ldx #BSX.Mem.X
|
||||
jsr BS.ToAUX
|
||||
|
||||
jsr BS.LINEBUFOUT
|
||||
inc XBC10
|
||||
lda XBC10
|
||||
pla
|
||||
inc
|
||||
cmp #6
|
||||
bne .2
|
||||
|
||||
|
@ -1763,16 +1763,16 @@ BS.KW.PATH lda GP.FoundBITS
|
|||
jsr BS.ToAUX
|
||||
|
||||
jsr MON.CROUT
|
||||
ldx #$00
|
||||
ldx #$ff
|
||||
|
||||
.1 cpx BS.CMDBUF.LEN
|
||||
.1 inx
|
||||
cpx BS.CMDBUF.LEN
|
||||
beq .2
|
||||
|
||||
lda BS.CMDBUF+1,x
|
||||
lda BS.CMDBUF,x
|
||||
ora #$80
|
||||
jsr MON.COUT
|
||||
inx
|
||||
bne .1
|
||||
bra .1
|
||||
|
||||
.2 jsr MON.CROUT
|
||||
jsr MON.CROUT
|
||||
|
|
|
@ -154,7 +154,9 @@ GP.MLIERR2 lda BS.BIERRTBL,x
|
|||
GP.COPYRIGHT .AS -"COPYRIGHT APPLE, 1983"
|
||||
jmp BS.GETBUFR GP.GETBUFR
|
||||
jmp BS.FREEBUFR GP.FREEBUFR
|
||||
.BS 5 GP.RSHIMEM
|
||||
.BS 1 GP.RSHIMEM
|
||||
.BS 1
|
||||
jmp (BS.TBOX,x) GP.TBOX
|
||||
*--------------------------------------
|
||||
MAN
|
||||
SAVE usr/src/basic.fx/basic.s.gp
|
||||
|
|
|
@ -20,11 +20,9 @@ BSX.Rel lda GP.MLIRW.DATAPTR
|
|||
sbc GP.FIAUXTYPE+1
|
||||
sta BSX.RelOfs+1
|
||||
|
||||
ldy #2
|
||||
lda (ZP.A1L),y
|
||||
lda GP.FIAUXTYPE
|
||||
sta BSX.RelStart
|
||||
iny
|
||||
lda (ZP.A1L),y
|
||||
lda GP.FIAUXTYPE+1
|
||||
sta BSX.RelStart+1
|
||||
|
||||
ldy #10
|
||||
|
|
|
@ -18,7 +18,7 @@ NEW
|
|||
.INB inc/as.i
|
||||
.INB inc/mon.i
|
||||
*--------------------------------------
|
||||
HIMEM .EQ $A000
|
||||
HIMEM .EQ $9F00
|
||||
LOWERCASE .EQ 1
|
||||
*--------------------------------------
|
||||
ZPPtr1 .EQ 0
|
||||
|
@ -101,6 +101,10 @@ LDR.MAIN.DST .EQ *
|
|||
.INB usr/src/basic.fx/basic.s.a
|
||||
.INB usr/src/basic.fx/basic.s.b
|
||||
.INB usr/src/basic.fx/basic.s.c
|
||||
|
||||
BS.TBOX .DA PrintFYA
|
||||
.INB usr/src/shared/x.printf.s
|
||||
|
||||
.INB usr/src/basic.fx/basic.s.d
|
||||
MAIN.LEN .EQ *-LDR.MAIN.DST
|
||||
.EP
|
||||
|
|
|
@ -24,30 +24,43 @@ HEADER cld Allows BRUN at ORG=$2000
|
|||
.DA 0
|
||||
.DA 0 spare....16 bytes header
|
||||
*--------------------------------------
|
||||
R.MSG .DA MSG
|
||||
R.MSG.HELLO .DA MSG.HELLO
|
||||
R.MSG.RELOC .DA MSG.RELOC
|
||||
.DA 0
|
||||
*--------------------------------------
|
||||
CODE.START ldx #0
|
||||
|
||||
.1 lda MSG,x ABS relocation required
|
||||
.1 lda MSG.HELLO,x ABS relocation required
|
||||
beq .2
|
||||
|
||||
jsr MON.COUT
|
||||
inx
|
||||
bne .1
|
||||
|
||||
.2
|
||||
|
||||
|
||||
|
||||
.2 lda R.MSG.HELLO
|
||||
pha
|
||||
lda R.MSG.HELLO+1
|
||||
pha
|
||||
|
||||
lda HEADER+2
|
||||
pha
|
||||
lda HEADER+3
|
||||
pha
|
||||
|
||||
ldy R.MSG.RELOC
|
||||
lda R.MSG.RELOC+1
|
||||
ldx #GP.TBOX.PrintF
|
||||
jsr GP.TBOX
|
||||
|
||||
.8 clc
|
||||
rts
|
||||
|
||||
CODE.END .EQ *
|
||||
*--------------------------------------
|
||||
MSG .CZ -"\r\rHello from test EXT command.\r\r"
|
||||
|
||||
MSG.HELLO .CZ -"\r\rHello from test EXT command.\r\r"
|
||||
MSG.RELOC .CS "Code relocated at $%H\r"
|
||||
.CZ "Data relocated at $%H\r"
|
||||
|
||||
DATA.END .EQ *
|
||||
*--------------------------------------
|
||||
MAN
|
||||
|
|
|
@ -110,7 +110,7 @@ CODE.PutChar lda #$A9 LDA #imm
|
|||
jsr CODE.EmitByte
|
||||
txa
|
||||
jsr CODE.EmitByte
|
||||
ldx #SYS.PutChar
|
||||
ldx #_PutChar
|
||||
*--------------------------------------
|
||||
CODE.SYSCALL lda #$A2 LDX #imm
|
||||
jsr CODE.EmitByte
|
||||
|
|
162
BIN/CC.S.txt
162
BIN/CC.S.txt
|
@ -828,85 +828,85 @@ 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.SYSCALL .PS "chtyp"
|
||||
.DA #SYS.ChTyp
|
||||
.DA #_ChTyp
|
||||
.PS "chmod"
|
||||
.DA #SYS.ChMod
|
||||
.DA #_ChMod
|
||||
.PS "fstat"
|
||||
.DA #SYS.FStat
|
||||
.DA #_FStat
|
||||
.PS "stat"
|
||||
.DA #SYS.Stat
|
||||
.DA #_Stat
|
||||
.PS "mkdir"
|
||||
.DA #SYS.MKDir
|
||||
.DA #_MKDir
|
||||
.PS "mknod"
|
||||
.DA #SYS.MKNod
|
||||
.DA #_MKNod
|
||||
.PS "mkfifo"
|
||||
.DA #SYS.MKFIFO
|
||||
.DA #_MKFIFO
|
||||
.PS "pipe"
|
||||
.DA #SYS.Pipe
|
||||
.DA #_Pipe
|
||||
.PS "opendir"
|
||||
.DA #SYS.OpenDir
|
||||
.DA #_OpenDir
|
||||
.PS "readdir"
|
||||
.DA #SYS.ReadDir
|
||||
.DA #_ReadDir
|
||||
.PS "closedir"
|
||||
.DA #SYS.CloseDir
|
||||
.DA #_CloseDir
|
||||
.PS "open"
|
||||
.DA #SYS.Open
|
||||
.DA #_Open
|
||||
.PS "close"
|
||||
.DA #SYS.Close
|
||||
.DA #_Close
|
||||
.PS "read"
|
||||
.DA #SYS.Read
|
||||
.DA #_Read
|
||||
.PS "write"
|
||||
.DA #SYS.Write
|
||||
.DA #_Write
|
||||
.PS "chown"
|
||||
.DA #SYS.ChOwn
|
||||
.DA #_ChOwn
|
||||
.PS "fputc"
|
||||
.DA #SYS.FPutC
|
||||
.DA #_FPutC
|
||||
.PS "putchar"
|
||||
.DA #SYS.PutChar
|
||||
.DA #_PutChar
|
||||
.PS "getc"
|
||||
.DA #SYS.GetC
|
||||
.DA #_GetC
|
||||
.PS "getchar"
|
||||
.DA #SYS.GetChar
|
||||
.DA #_GetChar
|
||||
.PS "fputs"
|
||||
.DA #SYS.FPutS
|
||||
.DA #_FPutS
|
||||
.PS "puts"
|
||||
.DA #SYS.PutS
|
||||
.DA #_PutS
|
||||
.PS "fgets"
|
||||
.DA #SYS.FGetS
|
||||
.DA #_FGetS
|
||||
.PS "ungetc"
|
||||
.DA #SYS.UngetC
|
||||
.DA #_UngetC
|
||||
.PS "fopen"
|
||||
.DA #SYS.FOpen
|
||||
.DA #_FOpen
|
||||
.PS "fclose"
|
||||
.DA #SYS.FClose
|
||||
.DA #_FClose
|
||||
.PS "fread"
|
||||
.DA #SYS.FRead
|
||||
.DA #_FRead
|
||||
.PS "fwrite"
|
||||
.DA #SYS.FWrite
|
||||
.DA #_FWrite
|
||||
.PS "fflush"
|
||||
.DA #SYS.FFlush
|
||||
.DA #_FFlush
|
||||
.PS "fseek"
|
||||
.DA #SYS.FSeek
|
||||
.DA #_FSeek
|
||||
.PS "ftell"
|
||||
.DA #SYS.FTell
|
||||
.DA #_FTell
|
||||
.PS "feof"
|
||||
.DA #SYS.FEOF
|
||||
.DA #_FEOF
|
||||
.PS "remove"
|
||||
.DA #SYS.Remove
|
||||
.DA #_Remove
|
||||
.PS "rename"
|
||||
.DA #SYS.Rename
|
||||
.DA #_Rename
|
||||
.PS "printf"
|
||||
.DA #SYS.PrintF
|
||||
.DA #_PrintF
|
||||
.PS "fprintf"
|
||||
.DA #SYS.FPrintF
|
||||
.DA #_FPrintF
|
||||
.PS "sprintf"
|
||||
.DA #SYS.SPrintF
|
||||
.DA #_SPrintF
|
||||
.PS "scanf"
|
||||
.DA #SYS.ScanF
|
||||
.DA #_ScanF
|
||||
.PS "fscanf"
|
||||
.DA #SYS.FScanF
|
||||
.DA #_FScanF
|
||||
.PS "sscanf"
|
||||
.DA #SYS.SScanF
|
||||
.DA #_SScanF
|
||||
* .PS "$50"
|
||||
* .DA #0
|
||||
* .PS "$52"
|
||||
|
@ -922,7 +922,7 @@ CC.SYSCALL .PS "chtyp"
|
|||
* .PS "$5C"
|
||||
* .DA #0
|
||||
.PS "setattr"
|
||||
.DA #SYS.SetAttr
|
||||
.DA #_SetAttr
|
||||
* .PS "mount"
|
||||
* .DA #0
|
||||
* .PS "umount"
|
||||
|
@ -940,37 +940,37 @@ CC.SYSCALL .PS "chtyp"
|
|||
* .PS "geterrmsg"
|
||||
* .DA #0
|
||||
.PS "atof"
|
||||
.DA #SYS.AToF
|
||||
.DA #_AToF
|
||||
.PS "atoi"
|
||||
.DA #SYS.AToI
|
||||
.DA #_AToI
|
||||
.PS "atol"
|
||||
.DA #SYS.AToL
|
||||
.DA #_AToL
|
||||
.PS "strtof"
|
||||
.DA #SYS.StrToF
|
||||
.DA #_StrToF
|
||||
.PS "strtol"
|
||||
.DA #SYS.StrToL
|
||||
.DA #_StrToL
|
||||
.PS "strtoul"
|
||||
.DA #SYS.StrToUL
|
||||
.DA #_StrToUL
|
||||
.PS "realpath"
|
||||
.DA #SYS.RealPath
|
||||
.DA #_RealPath
|
||||
.PS "expand"
|
||||
.DA #SYS.Expand
|
||||
.DA #_Expand
|
||||
.PS "strlen"
|
||||
.DA #SYS.StrLen
|
||||
.DA #_StrLen
|
||||
.PS "strcpy"
|
||||
.DA #SYS.StrCpy
|
||||
.DA #_StrCpy
|
||||
.PS "strcat"
|
||||
.DA #SYS.StrCat
|
||||
.DA #_StrCat
|
||||
.PS "strdup"
|
||||
.DA #SYS.StrDup
|
||||
.DA #_StrDup
|
||||
.PS "strupr"
|
||||
.DA #SYS.StrUpr
|
||||
.DA #_StrUpr
|
||||
.PS "strlwr"
|
||||
.DA #SYS.StrLwr
|
||||
.DA #_StrLwr
|
||||
.PS "strcmp"
|
||||
.DA #SYS.StrCmp
|
||||
.DA #_StrCmp
|
||||
.PS "strcasecmp"
|
||||
.DA #SYS.StrCaseCmp
|
||||
.DA #_StrCaseCmp
|
||||
* .PS "getdevbyname"
|
||||
* .DA #0
|
||||
* .PS "getdevstatus"
|
||||
|
@ -988,13 +988,13 @@ CC.SYSCALL .PS "chtyp"
|
|||
* .PS "insdrv"
|
||||
* .DA #0
|
||||
.PS "execl"
|
||||
.DA #SYS.ExecL
|
||||
.DA #_ExecL
|
||||
* .PS "execv"
|
||||
* .DA #0
|
||||
.PS "fork"
|
||||
.DA #SYS.Fork
|
||||
.DA #_Fork
|
||||
.PS "kill"
|
||||
.DA #SYS.Kill
|
||||
.DA #_Kill
|
||||
* .PS "loadfile"
|
||||
* .DA #0
|
||||
* .PS "loadtxtfile"
|
||||
|
@ -1012,41 +1012,41 @@ CC.SYSCALL .PS "chtyp"
|
|||
* .PS "strvfree"
|
||||
* .DA #0
|
||||
.PS "putenv"
|
||||
.DA #SYS.PutEnv
|
||||
.DA #_PutEnv
|
||||
.PS "setenv"
|
||||
.DA #SYS.SetEnv
|
||||
.DA #_SetEnv
|
||||
.PS "getenv"
|
||||
.DA #SYS.GetEnv
|
||||
.DA #_GetEnv
|
||||
.PS "unsetenv"
|
||||
.DA #SYS.UnsetEnv
|
||||
.DA #_UnsetEnv
|
||||
.PS "time"
|
||||
.DA #SYS.Time
|
||||
.DA #_Time
|
||||
.PS "strftime"
|
||||
.DA #SYS.StrFTime
|
||||
.DA #_StrFTime
|
||||
* .PS "ptime2time"
|
||||
* .DA #0
|
||||
.PS "ctime2time"
|
||||
.DA #SYS.CTime2Time
|
||||
.DA #_CTime2Time
|
||||
.PS "md5"
|
||||
.DA #SYS.MD5
|
||||
.DA #_MD5
|
||||
.PS "md5init"
|
||||
.DA #SYS.MD5Init
|
||||
.DA #_MD5Init
|
||||
.PS "md5update"
|
||||
.DA #SYS.MD5Update
|
||||
.DA #_MD5Update
|
||||
.PS "md5finalize"
|
||||
.DA #SYS.MD5Finalize
|
||||
.DA #_MD5Finalize
|
||||
.PS "getpwuid"
|
||||
.DA #SYS.GetPWUID
|
||||
.DA #_GetPWUID
|
||||
.PS "getpwname"
|
||||
.DA #SYS.GetPWName
|
||||
.DA #_GetPWName
|
||||
.PS "putpw"
|
||||
.DA #SYS.PutPW
|
||||
.DA #_PutPW
|
||||
.PS "getgrpgid"
|
||||
.DA #SYS.GetGRGID
|
||||
.DA #_GetGRGID
|
||||
.PS "getgrpname"
|
||||
.DA #SYS.GetGRName
|
||||
.DA #_GetGRName
|
||||
.PS "putgr"
|
||||
.DA #SYS.PutGR
|
||||
.DA #_PutGR
|
||||
* .PS "opensession"
|
||||
* .DA #0
|
||||
* .PS "closesession"
|
||||
|
@ -1068,15 +1068,15 @@ CC.SYSCALL .PS "chtyp"
|
|||
* .PS "slistnew"
|
||||
* .DA #0
|
||||
.PS "malloc"
|
||||
.DA #SYS.GetMem
|
||||
.DA #_GetMem
|
||||
.PS "realloc"
|
||||
.DA #SYS.Realloc
|
||||
.DA #_Realloc
|
||||
* .PS "getmemptr"
|
||||
* .DA #0
|
||||
* .PS "freemem"
|
||||
* .DA #SYS.FreeMem
|
||||
* .DA #_FreeMem
|
||||
.PS "free"
|
||||
.DA #SYS.Free
|
||||
.DA #_Free
|
||||
* .PS "newstkobj"
|
||||
* .DA #0
|
||||
* .PS "getstkobjptr"
|
||||
|
|
|
@ -18,7 +18,7 @@ ZPPtr1 .BS 2
|
|||
ZPBuf .BS 2
|
||||
ZPBufPtr .BS 2
|
||||
ArgIndex .BS 1
|
||||
ArgFile .BS 1
|
||||
ArgLine .BS 1
|
||||
OptionIdx .BS 1
|
||||
hBuf .BS 1
|
||||
FieldNum .BS 1
|
||||
|
@ -66,7 +66,7 @@ CS.RUN lda #C.SPACE
|
|||
beq .1
|
||||
|
||||
lda ArgIndex
|
||||
sta ArgFile
|
||||
sta ArgLine
|
||||
bra .10
|
||||
|
||||
.1 ldy #1
|
||||
|
@ -81,6 +81,7 @@ CS.RUN lda #C.SPACE
|
|||
bpl .2
|
||||
|
||||
.97 lda #E.SYN
|
||||
|
||||
.98 pha
|
||||
>LDYA L.MSG.USAGE
|
||||
>SYSCALL PutS
|
||||
|
@ -125,10 +126,11 @@ CS.RUN lda #C.SPACE
|
|||
>STYA ZPBufPtr
|
||||
stx hBuf
|
||||
|
||||
lda ArgFile
|
||||
lda ArgLine
|
||||
beq .80
|
||||
|
||||
>PUSHW ZPBufPtr
|
||||
lda ArgLine
|
||||
>SYSCALL ArgV
|
||||
>PUSHYA
|
||||
>SYSCALL StrCpy
|
||||
|
@ -310,7 +312,7 @@ CS.END
|
|||
OptionList .AS "HhFfMmNnSs"
|
||||
OptionList.Cnt .EQ *-OptionList
|
||||
*--------------------------------------
|
||||
MSG.USAGE .CS "Usage : CUT "line of text"\r\n"
|
||||
MSG.USAGE .CS 'Usage : CUT "line of text"\r\n'
|
||||
.CS " -H : This help screen\r\n"
|
||||
.CS " -F nn : Output field nn\r\n"
|
||||
.CS " -M nn : Output starting at nn\r\n"
|
||||
|
|
|
@ -42,7 +42,7 @@ CP.PRINT ldy #$ff
|
|||
>LDYA ZPDataPtr
|
||||
jsr CP.Emit.LDYAI
|
||||
|
||||
ldx #SYS.PutS
|
||||
ldx #_PutS
|
||||
jsr CP.Emit.SYSCALL
|
||||
|
||||
pla
|
||||
|
|
|
@ -0,0 +1,433 @@
|
|||
NEW
|
||||
AUTO 3,1
|
||||
.LIST OFF
|
||||
.OP 65C02
|
||||
.OR $2000
|
||||
.TF bin/mac2unix
|
||||
*--------------------------------------
|
||||
.INB inc/macros.i
|
||||
.INB inc/a2osx.i
|
||||
.INB inc/kernel.i
|
||||
.INB inc/mli.i
|
||||
.INB inc/mli.e.i
|
||||
*--------------------------------------
|
||||
X.ENTER.SUBDIR .EQ 0
|
||||
X.COPY.TO.DEST .EQ 0
|
||||
X.DELETE.SOURCE .EQ 0
|
||||
X.RESET.SRC.DIR .EQ 0
|
||||
*--------------------------------------
|
||||
.DUMMY
|
||||
.OR ZPBIN
|
||||
ZS.START
|
||||
ZPPtr1 .BS 2
|
||||
ZPPtr2 .BS 2
|
||||
ZPFileName .BS 2
|
||||
ZPFileStat .BS 2
|
||||
|
||||
ZPFullPath .BS 2
|
||||
ZPRelPath .BS 2
|
||||
ZPFileBuf .BS 2
|
||||
|
||||
ArgIndex .BS 1
|
||||
hFile .BS 1
|
||||
|
||||
FilePos .BS 4
|
||||
|
||||
ByteCnt .BS 2
|
||||
|
||||
bPause .BS 1
|
||||
bContinue .BS 1
|
||||
bRecurse .BS 1
|
||||
|
||||
ZS.END .ED
|
||||
*--------------------------------------
|
||||
* File Header (16 Bytes)
|
||||
*--------------------------------------
|
||||
CS.START cld
|
||||
jmp (.1,x)
|
||||
.DA #$61 6502,Level 1 (65c02)
|
||||
.DA #1 BIN Layout Version 1
|
||||
.DA 0
|
||||
.DA CS.END-CS.START Code Size (without Constants)
|
||||
.DA DS.END-DS.START Data SegmentSize
|
||||
.DA #64 Stack Size
|
||||
.DA #ZS.END-ZS.START Zero Page Size
|
||||
.DA 0
|
||||
*--------------------------------------
|
||||
* Relocation Table
|
||||
*--------------------------------------
|
||||
.1 .DA CS.INIT
|
||||
.DA CS.RUN
|
||||
.DA CS.DOEVENT
|
||||
.DA CS.QUIT
|
||||
L.MSG.USAGE .DA MSG.USAGE
|
||||
L.MSG.CRLF .DA MSG.CRLF
|
||||
L.MSG.ERR .DA MSG.ERR
|
||||
.DA 0
|
||||
*--------------------------------------
|
||||
CS.INIT clc
|
||||
rts
|
||||
*--------------------------------------
|
||||
CS.RUN inc ArgIndex
|
||||
lda ArgIndex
|
||||
>SYSCALL ArgV
|
||||
bcs .5
|
||||
|
||||
>STYA ZPPtr1
|
||||
lda (ZPPtr1)
|
||||
cmp #'-'
|
||||
bne .4
|
||||
|
||||
jsr CS.RUN.CheckOpt
|
||||
bcc CS.RUN
|
||||
|
||||
.9 >LDYA L.MSG.USAGE
|
||||
>SYSCALL PutS
|
||||
lda #E.SYN
|
||||
sec
|
||||
rts
|
||||
|
||||
.4 >LDA.G hSrcBasePath
|
||||
bne .9
|
||||
|
||||
>LDYA ZPPtr1
|
||||
jsr X.InitSrcDirYA
|
||||
bcc CS.RUN
|
||||
|
||||
.99 rts
|
||||
*--------------------------------------
|
||||
.5 >LDA.G hSrcBasePath
|
||||
bne .6
|
||||
|
||||
ldy #S.PS.hCWD
|
||||
lda (pPS),y
|
||||
>SYSCALL GetMemPtr
|
||||
>STYA ZPPtr1
|
||||
|
||||
.6 >LDYAI 256
|
||||
>SYSCALL Malloc
|
||||
bcs .99
|
||||
|
||||
>STYA ZPFullPath
|
||||
|
||||
>LDA.G hSrcBasePath
|
||||
>SYSCALL GetMemPtr
|
||||
>STYA ZPPtr1
|
||||
|
||||
ldy #$ff
|
||||
|
||||
.80 iny
|
||||
lda (ZPPtr1),y
|
||||
bne .80
|
||||
|
||||
tya
|
||||
clc
|
||||
adc ZPFullPath
|
||||
sta ZPRelPath
|
||||
lda ZPFullPath+1
|
||||
adc #0
|
||||
sta ZPRelPath+1
|
||||
|
||||
>LDYAI 256
|
||||
>SYSCALL Malloc
|
||||
bcs .99
|
||||
|
||||
>STYA ZPFileBuf
|
||||
*--------------------------------------
|
||||
CS.RUN.LOOP jsr CS.RUN.CheckSTDIN
|
||||
bcs .99
|
||||
|
||||
jsr X.GetEntry
|
||||
bcs .9
|
||||
|
||||
ldy #S.STAT.P.DRIVE
|
||||
lda (ZPFileStat),y ProDOS Device ?
|
||||
beq .5
|
||||
|
||||
jsr CS.RUN.DEV
|
||||
bcc CS.RUN.LOOP
|
||||
|
||||
rts
|
||||
|
||||
.5 ldy #S.STAT.MODE+1
|
||||
lda (ZPFileStat),y
|
||||
and #$F0
|
||||
cmp /S.STAT.MODE.DIR
|
||||
bne .6
|
||||
|
||||
jsr CS.RUN.DIR
|
||||
bcs .99
|
||||
|
||||
bra .8
|
||||
|
||||
.6 jsr CS.RUN.FILE
|
||||
bcs .99
|
||||
|
||||
bra .8
|
||||
|
||||
.9 jsr X.LeaveSubDir
|
||||
bcs .90
|
||||
|
||||
jsr X.BasePath..
|
||||
.8 jsr X.GetNextEntry
|
||||
jmp CS.RUN.LOOP
|
||||
|
||||
.90 lda #0
|
||||
sec
|
||||
.99 rts
|
||||
*--------------------------------------
|
||||
CS.RUN.CheckSTDIN
|
||||
ldy #S.PS.hStdIn
|
||||
lda (pPS),y
|
||||
>SYSCALL FEOF
|
||||
bcs .9
|
||||
|
||||
tay
|
||||
bne .1
|
||||
|
||||
>SYSCALL GetChar
|
||||
bcs .9
|
||||
|
||||
cmp #$03 Ctrl-C
|
||||
beq .9 Abort....
|
||||
|
||||
cmp #$13 Ctrl-S
|
||||
bne .1
|
||||
|
||||
lda bPause
|
||||
eor #$ff
|
||||
sta bPause
|
||||
bne CS.RUN.CheckSTDIN
|
||||
|
||||
clc
|
||||
rts
|
||||
|
||||
.1 lda bPause
|
||||
bne CS.RUN.CheckSTDIN Pause...
|
||||
|
||||
* clc
|
||||
|
||||
.9 rts
|
||||
*--------------------------------------
|
||||
CS.RUN.DIR lda bRecurse
|
||||
bpl .8
|
||||
|
||||
lda (ZPFileName)
|
||||
cmp #'.'
|
||||
beq .8
|
||||
|
||||
>LDYA ZPFileName
|
||||
jsr X.EnterSubDirYA
|
||||
jmp CS.RUN.CheckErr
|
||||
|
||||
.8 clc
|
||||
rts
|
||||
*--------------------------------------
|
||||
CS.RUN.DEV
|
||||
.8 jsr X.GetNextEntry
|
||||
|
||||
CS.RUN.DEV.CLC.RTS
|
||||
clc
|
||||
rts
|
||||
*--------------------------------------
|
||||
CS.RUN.FILE jsr X.IncludeMatch
|
||||
bcs CS.RUN.DEV.CLC.RTS no match, skip....
|
||||
|
||||
jsr CS.RUN.GetFilePath
|
||||
|
||||
jsr CS.RUN.OpenFile
|
||||
bcs .9
|
||||
|
||||
jsr CS.RUN.FILE.LOOP
|
||||
bcs .7
|
||||
|
||||
jmp CS.RUN.CloseFile
|
||||
|
||||
.8 clc
|
||||
rts
|
||||
|
||||
.7 pha
|
||||
jsr CS.RUN.CloseFile
|
||||
pla
|
||||
sec
|
||||
.9 jmp CS.RUN.CheckErr
|
||||
|
||||
.99 rts
|
||||
*--------------------------------------
|
||||
CS.RUN.FILE.LOOP
|
||||
.1 >PUSHB hFile
|
||||
>PUSHW ZPFileBuf
|
||||
>PUSHWI 256
|
||||
>SYSCALL FRead
|
||||
bcs .8
|
||||
|
||||
>STYA ByteCnt
|
||||
|
||||
jsr CS.RUN.FILE.MOD
|
||||
|
||||
jsr CS.RUN.FSeek
|
||||
bcs .99
|
||||
|
||||
>PUSHB hFile
|
||||
>PUSHW ZPFileBuf
|
||||
>PUSHW ByteCnt
|
||||
>SYSCALL FWrite
|
||||
bcs .99
|
||||
|
||||
lda ByteCnt
|
||||
* clc
|
||||
adc FilePos
|
||||
sta FilePos
|
||||
lda ByteCnt+1
|
||||
adc FilePos+1
|
||||
sta FilePos+1
|
||||
bcc .1
|
||||
|
||||
inc FilePos+2
|
||||
bne .1
|
||||
|
||||
inc FilePos+3
|
||||
jmp .1
|
||||
|
||||
.8 cmp #MLI.E.EOF
|
||||
bne .99
|
||||
|
||||
clc
|
||||
|
||||
.99 rts
|
||||
*--------------------------------------
|
||||
CS.RUN.FILE.MOD ldy #0
|
||||
|
||||
.2 lda (ZPFileBuf),y
|
||||
cmp #C.LF
|
||||
bne .3
|
||||
|
||||
lda #C.CR
|
||||
sta (ZPFileBuf),y
|
||||
|
||||
.3 iny
|
||||
cpy ByteCnt
|
||||
bne .2
|
||||
|
||||
rts
|
||||
*--------------------------------------
|
||||
CS.RUN.CheckErr bcc .9
|
||||
|
||||
pha
|
||||
>PUSHW L.MSG.ERR
|
||||
>PUSHA
|
||||
>PUSHBI 1
|
||||
>SYSCALL PrintF
|
||||
lda bContinue
|
||||
eor #$80
|
||||
asl
|
||||
pla
|
||||
|
||||
.9 rts
|
||||
*--------------------------------------
|
||||
CS.RUN.GetFilePath
|
||||
>PUSHW ZPFullPath
|
||||
>LDA.G hSrcBasePath
|
||||
>SYSCALL GetMemPtr
|
||||
>PUSHYA
|
||||
>SYSCALL StrCpy
|
||||
|
||||
>PUSHW ZPFullPath
|
||||
>PUSHW ZPFileName
|
||||
>SYSCALL StrCat
|
||||
rts
|
||||
*--------------------------------------
|
||||
CS.RUN.OpenFile >PUSHW ZPFullPath
|
||||
>PUSHBI O.RDWR+O.APPEND
|
||||
>PUSHBI 0 Type
|
||||
>PUSHWZ Aux type
|
||||
>SYSCALL FOpen
|
||||
bcs CS.RUN.FSeek.9
|
||||
|
||||
sta hFile
|
||||
|
||||
stz FilePos
|
||||
stz FilePos+1
|
||||
stz FilePos+2
|
||||
stz FilePos+3
|
||||
|
||||
CS.RUN.FSeek >PUSHB hFile
|
||||
>PUSHL FilePos
|
||||
>PUSHBI SEEK.SET
|
||||
>SYSCALL fseek
|
||||
|
||||
CS.RUN.FSeek.9 rts
|
||||
*--------------------------------------
|
||||
CS.RUN.CloseFile
|
||||
lda hFile
|
||||
>SYSCALL FClose
|
||||
bcs .9
|
||||
|
||||
stz hFile
|
||||
|
||||
.9 rts
|
||||
*--------------------------------------
|
||||
CS.DOEVENT sec
|
||||
rts
|
||||
*--------------------------------------
|
||||
CS.QUIT jsr X.LeaveSubDir
|
||||
bcc CS.QUIT
|
||||
|
||||
>LDA.G hInclude
|
||||
beq .1
|
||||
|
||||
>SYSCALL FreeMem
|
||||
|
||||
.1 >LDYA ZPFileBuf
|
||||
>SYSCALL Free
|
||||
|
||||
.2 >LDYA ZPFullPath
|
||||
>SYSCALL Free
|
||||
|
||||
.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
|
||||
lda #$ff
|
||||
sta 0,y
|
||||
clc
|
||||
rts
|
||||
*--------------------------------------
|
||||
.INB usr/src/shared/x.fileenum.s
|
||||
*--------------------------------------
|
||||
CS.END
|
||||
*--------------------------------------
|
||||
OptionList .AS "CRcr"
|
||||
OptionVars .DA #bContinue,#bRecurse
|
||||
.DA #bContinue,#bRecurse
|
||||
*--------------------------------------
|
||||
MSG.USAGE .CS "Usage : MAC2UNIX File(s) (*,? wildcards allowed)\r\n"
|
||||
.CS " -C : Continue on error\r\n"
|
||||
.CS " -R : Recurse subdirectories\r\n"
|
||||
MSG.CRLF .CZ "\r\n"
|
||||
MSG.ERR .CZ "[%h]\r\n"
|
||||
*--------------------------------------
|
||||
.DUMMY
|
||||
.OR 0
|
||||
DS.START
|
||||
.INB usr/src/shared/x.fileenum.g
|
||||
|
||||
DS.END .ED
|
||||
*--------------------------------------
|
||||
MAN
|
||||
SAVE usr/src/bin/mac2unix.s
|
||||
ASM
|
|
@ -190,11 +190,11 @@ CS.Scr.Init >LIBCALL hLIBTUI,LIBTUI.Init
|
|||
>PUSHBI 0 Y1
|
||||
>PUSHBI 80 W
|
||||
>PUSHBI 22 H
|
||||
>PUSHBI 0 F
|
||||
lda hFileBuf
|
||||
>SYSCALL GetMemPtr
|
||||
>PUSHYA
|
||||
>PUSHW BufSize
|
||||
>PUSHBI 0 F
|
||||
>LIBCALL hLIBTUI,LIBTUI.NewTBox
|
||||
.99 bcs .9
|
||||
|
||||
|
@ -232,7 +232,7 @@ CS.Scr.SetBuf >PUSHB hTBOX
|
|||
.9 rts
|
||||
*--------------------------------------
|
||||
CS.Scr.SetStatusGoto
|
||||
>PUSHEA.G SCR.StatusBuf skip type
|
||||
>PUSHEA.G SCR.StatusBuf
|
||||
>PUSHW L.MSG.GOTO
|
||||
>PUSHEA.G PathBuf
|
||||
>PUSHEA.G HtagBuf
|
||||
|
@ -281,7 +281,7 @@ CS.GetLink >STYA ZPPtr1
|
|||
|
||||
lda #0
|
||||
sta (ZPPtr2)
|
||||
|
||||
|
||||
>PUSHW L.ENV.MANPATH
|
||||
>PUSHW ZPPtr2
|
||||
>SYSCALL GetEnv
|
||||
|
@ -291,7 +291,7 @@ CS.GetLink >STYA ZPPtr1
|
|||
.1 iny
|
||||
lda (ZPPtr2),y
|
||||
bne .1
|
||||
|
||||
|
||||
.2 jsr CS.GetCharPtr1
|
||||
beq .4
|
||||
|
||||
|
@ -347,12 +347,12 @@ hLIBTUI .BS 1
|
|||
ENV.MANPATH .AZ "MANPATH"
|
||||
FILE.INDEX .AZ "index"
|
||||
*--------------------------------------
|
||||
MSG.ScrTitle .CZ "A2osX-MAN - <Ctrl-Q>uit"
|
||||
MSG.ScrTitle .CZ "A2osX-MAN - UP/DOWN: Scroll, LEFT/RIGHT: Prev/Next link, <Ctrl-Q>uit"
|
||||
*--------------------------------------
|
||||
MSG.USAGE .CS "Usage : MAN <manfile>[#htag]"
|
||||
MSG.CRLF .CS "\r\n"
|
||||
MSG.NULL .HS 00
|
||||
MSG.GOTO .CZ "Goto: %s#%s"
|
||||
MSG.GOTO .CZ "CR: Goto %s#%s"
|
||||
MSG.OK .CZ "Ok"
|
||||
MSG.ERROR .CZ "Error: $%h"
|
||||
*--------------------------------------
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -10,6 +10,11 @@ NEW
|
|||
.INB inc/libtui.i
|
||||
*--------------------------------------
|
||||
EV.SAVE .EQ $C0
|
||||
EV.QUIT .EQ $C1
|
||||
EV.CHECKBOX .EQ $C2
|
||||
EV.RADIO .EQ $C3
|
||||
EV.LBOX1.CHANGED .EQ $C4
|
||||
EV.LBOX1.PRESSED .EQ $C5
|
||||
EV.OK .EQ $CE
|
||||
EV.CANCEL .EQ $CF
|
||||
*--------------------------------------
|
||||
|
@ -20,8 +25,11 @@ ZPPtr1 .BS 2
|
|||
|
||||
hCTX .BS 1
|
||||
hSCRN .BS 1
|
||||
|
||||
hTBOX1 .BS 1
|
||||
hDLGS .BS 1
|
||||
hRADIO1 .BS 1
|
||||
|
||||
hDLGSAVE .BS 1
|
||||
ZS.END .ED
|
||||
*--------------------------------------
|
||||
* File Header (16 Bytes)
|
||||
|
@ -45,18 +53,18 @@ CS.START cld
|
|||
L.LIBTUI .DA LIBTUI
|
||||
*--------------------------------------
|
||||
L.SCRN.Title .DA SCRN.Title
|
||||
L.SCRN.Status .DA SCRN.Status
|
||||
|
||||
L.TBOX1.Title .DA TBOX1.Title
|
||||
L.TBOX1.Status .DA TBOX1.Status
|
||||
|
||||
L.LBOX1.List .DA LBOX1.List
|
||||
L.LABEL.Label .DA LABEL.Label
|
||||
L.RADIO1.List .DA RADIO1.List
|
||||
L.TLINE.Default .DA TLINE.Default
|
||||
L.CBOX1.Label .DA CBOX1.Label
|
||||
L.RADIO1.List .DA RADIO1.List
|
||||
L.BUTQ.Label .DA BUTQ.Label
|
||||
L.BUTS.Label .DA BUTS.Label
|
||||
L.DLGS.Title .DA DLGS.Title
|
||||
L.DLGSAVE.Title .DA DLGSAVE.Title
|
||||
L.BUT.OK .DA BUT.OK
|
||||
L.BUT.Cancel .DA BUT.Cancel
|
||||
.DA 0
|
||||
|
@ -72,30 +80,30 @@ CS.INIT >LDYA L.LIBTUI
|
|||
CS.INIT.RTS rts
|
||||
*--------------------------------------
|
||||
CS.RUN >LIBCALL hLIBTUI,LIBTUI.Init
|
||||
bcs CS.RUN.RTS
|
||||
bcs CS.INIT.RTS
|
||||
|
||||
sta hCTX
|
||||
|
||||
jsr CS.SCRN.Init
|
||||
bcs CS.RUN.RTS
|
||||
bcs CS.INIT.RTS
|
||||
|
||||
jsr CS.TBOX1.Init
|
||||
bcs CS.RUN.RTS
|
||||
bcs CS.INIT.RTS
|
||||
|
||||
jsr CS.LBOX1.Init
|
||||
bcs CS.RUN.RTS
|
||||
bcs CS.INIT.RTS
|
||||
|
||||
jsr CS.TLINE.Init
|
||||
bcs CS.RUN.RTS
|
||||
jsr CS.TLINE1.Init
|
||||
bcs CS.INIT.RTS
|
||||
|
||||
jsr CS.RADIO.Init
|
||||
bcs CS.RUN.RTS
|
||||
jsr CS.CBOX1.Init
|
||||
bcs CS.INIT.RTS
|
||||
|
||||
jsr CS.CBOX.Init
|
||||
bcs CS.RUN.RTS
|
||||
jsr CS.RADIO1.Init
|
||||
bcs CS.INIT.RTS
|
||||
|
||||
jsr CS.BUT.Init
|
||||
bcs CS.RUN.RTS
|
||||
bcs CS.INIT.RTS
|
||||
|
||||
jsr CS.SCRN.Draw Will Call SCRN.Draw
|
||||
|
||||
|
@ -119,8 +127,37 @@ CS.RUN.LOOP lda hSCRN
|
|||
|
||||
jsr CS.RUN.DLGSAVE
|
||||
bcc CS.RUN.LOOP
|
||||
|
||||
rts
|
||||
|
||||
.2 cmp #EV.QUIT
|
||||
.2 cmp #EV.CHECKBOX
|
||||
bne .3
|
||||
|
||||
>LDA.G CBOX1.Var
|
||||
bne .20
|
||||
|
||||
lda hRADIO1
|
||||
>LIBCALL hLIBTUI,LIBTUI.Hide
|
||||
bcc CS.RUN.LOOP
|
||||
|
||||
rts
|
||||
|
||||
.20 lda hRADIO1
|
||||
>LIBCALL hLIBTUI,LIBTUI.Show
|
||||
bcc CS.RUN.LOOP
|
||||
|
||||
rts
|
||||
|
||||
.3 cmp #EV.LBOX1.CHANGED
|
||||
bne .8
|
||||
|
||||
>PUSHB hSCRN
|
||||
>PUSHBI S.OBJ.pSTATUS
|
||||
>PUSHW.G LBOX1.Var
|
||||
>LIBCALL hLIBTUI,LIBTUI.SetProp
|
||||
bra CS.RUN.LOOP
|
||||
|
||||
.8 cmp #EV.QUIT
|
||||
bne CS.RUN.LOOP
|
||||
|
||||
lda hSCRN
|
||||
|
@ -145,7 +182,7 @@ CS.SCRN.Init >PUSHB hCTX hParent
|
|||
|
||||
>PUSHB hSCRN
|
||||
>PUSHBI S.OBJ.pSTATUS
|
||||
>PUSHW L.SCRN.Status
|
||||
>PUSHW L.LBOX1.List
|
||||
>LIBCALL hLIBTUI,LIBTUI.SetProp
|
||||
|
||||
.9 rts
|
||||
|
@ -167,11 +204,11 @@ CS.TBOX1.Init >LDYAI 1024
|
|||
>PUSHBI 1 Y1
|
||||
>PUSHBI 44 W
|
||||
>PUSHBI 20 H
|
||||
>PUSHBI S.OBJ.F.bHBorder+S.OBJ.F.bVBorder+S.OBJ.F.bTitle+S.OBJ.F.bStatus
|
||||
>LDA.G TBOX1.hBuf
|
||||
>SYSCALL GetMemPtr
|
||||
>PUSHYA
|
||||
>PUSHWI 1024
|
||||
>PUSHBI S.OBJ.F.bHBorder+S.OBJ.F.bVBorder+S.OBJ.F.bTitle+S.OBJ.F.bStatus+S.OBJ.F.bEdit
|
||||
>LIBCALL hLIBTUI,LIBTUI.NewTBox
|
||||
bcs .9
|
||||
|
||||
|
@ -194,16 +231,19 @@ CS.LBOX1.Init >PUSHB hSCRN hParent
|
|||
>PUSHBI 1 Y1
|
||||
>PUSHBI 20 W
|
||||
>PUSHBI 9 H
|
||||
>PUSHBI S.OBJ.F.bHBorder+S.OBJ.F.bVBorder
|
||||
>PUSHBI EV.LBOX1.CHANGED
|
||||
>PUSHBI EV.LBOX1.PRESSED
|
||||
>PUSHW L.LBOX1.List
|
||||
>PUSHEA.G LBOX1.Var
|
||||
>PUSHBI S.OBJ.F.bHBorder+S.OBJ.F.bVBorder
|
||||
>LIBCALL hLIBTUI,LIBTUI.NewLBox
|
||||
rts
|
||||
*--------------------------------------
|
||||
CS.TLINE.Init >PUSHB hSCRN hParent
|
||||
CS.TLINE1.Init >PUSHB hSCRN hParent
|
||||
>PUSHBI 50 X1
|
||||
>PUSHBI 11 Y1
|
||||
>PUSHW L.LABEL.Label
|
||||
>PUSHBI 0
|
||||
>LIBCALL hLIBTUI,LIBTUI.NewLabel
|
||||
bcs .9
|
||||
|
||||
|
@ -213,36 +253,50 @@ CS.TLINE.Init >PUSHB hSCRN hParent
|
|||
>PUSHBI 25 W
|
||||
>PUSHEA.G TLINE.Buf
|
||||
>PUSHWI 65 Len
|
||||
>PUSHBI 0
|
||||
>LIBCALL hLIBTUI,LIBTUI.NewTLine
|
||||
|
||||
>PUSHEA.G TLINE.Buf
|
||||
>PUSHW L.TLINE.Default
|
||||
>SYSCALL StrCpy
|
||||
|
||||
.9 rts
|
||||
*--------------------------------------
|
||||
CS.RADIO.Init >PUSHB hSCRN hParent
|
||||
CS.CBOX1.Init >PUSHB hSCRN hParent
|
||||
>PUSHBI 50 X1
|
||||
>PUSHBI 14 Y1
|
||||
>PUSHBI 0
|
||||
>PUSHBI 0
|
||||
>PUSHW L.RADIO1.List
|
||||
>PUSHEA.G RADIO1.Var
|
||||
>LIBCALL hLIBTUI,LIBTUI.NewRadio
|
||||
rts
|
||||
*--------------------------------------
|
||||
CS.CBOX.Init >PUSHB hSCRN hParent
|
||||
>PUSHBI 50 X1
|
||||
>PUSHBI 18 Y1
|
||||
>PUSHBI 0
|
||||
>PUSHBI 0
|
||||
>PUSHBI EV.CHECKBOX
|
||||
>PUSHW L.CBOX1.Label
|
||||
>PUSHEA.G CBOX1.Var
|
||||
>PUSHBI 0
|
||||
>LIBCALL hLIBTUI,LIBTUI.NewCBox
|
||||
rts
|
||||
*--------------------------------------
|
||||
CS.RADIO1.Init >PUSHB hSCRN hParent
|
||||
>PUSHBI 50 X1
|
||||
>PUSHBI 16 Y1
|
||||
>PUSHBI 0
|
||||
>PUSHBI EV.RADIO
|
||||
>PUSHW L.RADIO1.List
|
||||
>PUSHEA.G RADIO1.Var
|
||||
>PUSHBI 0
|
||||
>LIBCALL hLIBTUI,LIBTUI.NewRadio
|
||||
bcs .9
|
||||
|
||||
sta hRADIO1
|
||||
|
||||
>LIBCALL hLIBTUI,LIBTUI.Hide
|
||||
|
||||
.9 rts
|
||||
*--------------------------------------
|
||||
CS.BUT.Init >PUSHB hSCRN hParent
|
||||
>PUSHBI 50 X1
|
||||
>PUSHBI 20 Y1
|
||||
>PUSHBI 19 Ctrl-S
|
||||
>PUSHBI EV.SAVE
|
||||
>PUSHW L.BUTS.Label
|
||||
>PUSHBI 0
|
||||
>LIBCALL hLIBTUI,LIBTUI.NewBut
|
||||
bcs .9
|
||||
|
||||
|
@ -252,6 +306,7 @@ CS.BUT.Init >PUSHB hSCRN hParent
|
|||
>PUSHBI 17 Ctrl-Q
|
||||
>PUSHBI EV.QUIT
|
||||
>PUSHW L.BUTQ.Label
|
||||
>PUSHBI 0
|
||||
>LIBCALL hLIBTUI,LIBTUI.NewBut
|
||||
.9
|
||||
CS.BUT.Init.RTS rts
|
||||
|
@ -259,45 +314,49 @@ CS.BUT.Init.RTS rts
|
|||
CS.RUN.DLGSAVE >PUSHB hCTX hParent
|
||||
>PUSHBI 70 W
|
||||
>PUSHBI 11 H
|
||||
>PUSHW L.DLGS.Title
|
||||
>PUSHW L.DLGSAVE.Title
|
||||
>PUSHBI 0
|
||||
>LIBCALL hLIBTUI,LIBTUI.NewDlg
|
||||
bcs CS.BUT.Init.RTS
|
||||
|
||||
sta hDLGS
|
||||
sta hDLGSAVE
|
||||
|
||||
>PUSHB hDLGS hParent
|
||||
>PUSHA
|
||||
* >PUSHB hDLGSAVE hParent
|
||||
>PUSHBI 50 X1
|
||||
>PUSHBI 7 Y1
|
||||
>PUSHBI C.CR
|
||||
>PUSHBI EV.OK
|
||||
>PUSHW L.BUT.OK
|
||||
>PUSHBI 0
|
||||
>LIBCALL hLIBTUI,LIBTUI.NewBut
|
||||
bcs .9
|
||||
|
||||
sta ZPPtr1
|
||||
|
||||
>PUSHB hDLGS hParent
|
||||
>PUSHB hDLGSAVE hParent
|
||||
>PUSHBI 57 X1
|
||||
>PUSHBI 7 Y1
|
||||
>PUSHBI 3 Ctrl-C
|
||||
>PUSHBI EV.CANCEL
|
||||
>PUSHW L.BUT.Cancel
|
||||
>PUSHBI 0
|
||||
>LIBCALL hLIBTUI,LIBTUI.NewBut
|
||||
bcs .9
|
||||
|
||||
lda hDLGS
|
||||
lda hDLGSAVE
|
||||
>LIBCALL hLIBTUI,LIBTUI.Draw
|
||||
bcs .9
|
||||
|
||||
lda ZPPtr1
|
||||
>LIBCALL hLIBTUI,LIBTUI.Activate
|
||||
|
||||
.1 lda hDLGS
|
||||
.1 lda hDLGSAVE
|
||||
>LIBCALL hLIBTUI,LIBTUI.Exec
|
||||
|
||||
.9 php
|
||||
pha
|
||||
lda hDLGS
|
||||
lda hDLGSAVE
|
||||
>LIBCALL hLIBTUI,LIBTUI.Destroy
|
||||
|
||||
lda hSCRN
|
||||
|
@ -355,57 +414,40 @@ LIBTUI .AZ "libtui"
|
|||
hLIBTUI .BS 1
|
||||
*--------------------------------------
|
||||
SCRN.Title .AZ "Window: X1=%d,Y1=%d, W=%d,H=%d, X2=%d,Y2=%d, iX=%d,iY=%d, iW=%d,iH=%d"
|
||||
SCRN.Status .AZ "Status bar..."
|
||||
*--------------------------------------
|
||||
TBOX1.Title .AZ "Text Box Title"
|
||||
TBOX1.Status .AZ "Text Box Status"
|
||||
*--------------------------------------
|
||||
LBOX1.List .AS "Item 1"
|
||||
.DA #C.CR
|
||||
.AS "Item 2"
|
||||
.DA #C.CR
|
||||
.AS "Item 3"
|
||||
.DA #C.CR
|
||||
.AS "Item 4"
|
||||
.DA #C.CR
|
||||
.AS "Item 5"
|
||||
.DA #C.CR
|
||||
.AS "Item 6 very long line"
|
||||
.DA #C.CR
|
||||
.AS "Item 7"
|
||||
.DA #C.CR
|
||||
.AS "Item 8"
|
||||
.DA #C.CR
|
||||
.AS "Item 9"
|
||||
.DA #C.CR
|
||||
.AS "Item 10"
|
||||
.DA #C.CR
|
||||
.AS "Item 11"
|
||||
.DA #C.CR
|
||||
.AS "Item 12"
|
||||
.DA #C.CR
|
||||
.AS "Item 13"
|
||||
.DA #C.CR
|
||||
.AS "Item 14 last one"
|
||||
.DA #0
|
||||
LBOX1.List .CZ "Item 1"
|
||||
.CZ "Item 2"
|
||||
.CZ "Item 3"
|
||||
.CZ "Item 4"
|
||||
.CZ "Item 5"
|
||||
.CZ "Item 6 very long line"
|
||||
.CZ "Item 7"
|
||||
.CZ "Item 8"
|
||||
.CZ "Item 9"
|
||||
.CZ "Item 10"
|
||||
.CZ "Item 11"
|
||||
.CZ "Item 12"
|
||||
.CZ "Item 13"
|
||||
.CZ "Item 14 last one"
|
||||
.HS 00
|
||||
*--------------------------------------
|
||||
LABEL.Label .AZ "This is a label."
|
||||
*--------------------------------------
|
||||
RADIO1.List .DA #C.ESC
|
||||
.AS "[91mRed"
|
||||
.DA #C.CR
|
||||
.DA #C.ESC
|
||||
.AS "[92mGreen"
|
||||
.DA #C.CR
|
||||
.DA #C.ESC
|
||||
.AS "[96mBlue"
|
||||
.DA #0
|
||||
TLINE.Default .AZ "This is a Line."
|
||||
*--------------------------------------
|
||||
RADIO1.List .CZ "\e[91mRed"
|
||||
.CZ "\e[92mGreen"
|
||||
.CZ "\e[96mBlue"
|
||||
.HS 00
|
||||
*--------------------------------------
|
||||
CBOX1.Label .AZ "Check Me"
|
||||
*--------------------------------------
|
||||
BUTS.Label .AZ "(^S)ave..."
|
||||
BUTQ.Label .AZ "(^Q)uit"
|
||||
DLGS.Title .AZ "Save As..."
|
||||
DLGSAVE.Title .AZ "Save As..."
|
||||
BUT.OK .AZ " OK "
|
||||
BUT.Cancel .AZ "Cancel"
|
||||
*--------------------------------------
|
||||
|
@ -413,10 +455,10 @@ BUT.Cancel .AZ "Cancel"
|
|||
.OR 0
|
||||
DS.START
|
||||
SCRN.TitleBuf .BS 80
|
||||
CBOX1.Var .BS 1
|
||||
TLINE.Buf .BS 65
|
||||
CBOX1.Var .BS 1
|
||||
RADIO1.Var .BS 1
|
||||
LBOX1.Var .BS 1
|
||||
LBOX1.Var .BS 2
|
||||
TBOX1.hBuf .BS 1
|
||||
DS.END .ED
|
||||
*--------------------------------------
|
||||
|
|
|
@ -0,0 +1,433 @@
|
|||
NEW
|
||||
AUTO 3,1
|
||||
.LIST OFF
|
||||
.OP 65C02
|
||||
.OR $2000
|
||||
.TF bin/unix2mac
|
||||
*--------------------------------------
|
||||
.INB inc/macros.i
|
||||
.INB inc/a2osx.i
|
||||
.INB inc/kernel.i
|
||||
.INB inc/mli.i
|
||||
.INB inc/mli.e.i
|
||||
*--------------------------------------
|
||||
X.ENTER.SUBDIR .EQ 0
|
||||
X.COPY.TO.DEST .EQ 0
|
||||
X.DELETE.SOURCE .EQ 0
|
||||
X.RESET.SRC.DIR .EQ 0
|
||||
*--------------------------------------
|
||||
.DUMMY
|
||||
.OR ZPBIN
|
||||
ZS.START
|
||||
ZPPtr1 .BS 2
|
||||
ZPPtr2 .BS 2
|
||||
ZPFileName .BS 2
|
||||
ZPFileStat .BS 2
|
||||
|
||||
ZPFullPath .BS 2
|
||||
ZPRelPath .BS 2
|
||||
ZPFileBuf .BS 2
|
||||
|
||||
ArgIndex .BS 1
|
||||
hFile .BS 1
|
||||
|
||||
FilePos .BS 4
|
||||
|
||||
ByteCnt .BS 2
|
||||
|
||||
bPause .BS 1
|
||||
bContinue .BS 1
|
||||
bRecurse .BS 1
|
||||
|
||||
ZS.END .ED
|
||||
*--------------------------------------
|
||||
* File Header (16 Bytes)
|
||||
*--------------------------------------
|
||||
CS.START cld
|
||||
jmp (.1,x)
|
||||
.DA #$61 6502,Level 1 (65c02)
|
||||
.DA #1 BIN Layout Version 1
|
||||
.DA 0
|
||||
.DA CS.END-CS.START Code Size (without Constants)
|
||||
.DA DS.END-DS.START Data SegmentSize
|
||||
.DA #64 Stack Size
|
||||
.DA #ZS.END-ZS.START Zero Page Size
|
||||
.DA 0
|
||||
*--------------------------------------
|
||||
* Relocation Table
|
||||
*--------------------------------------
|
||||
.1 .DA CS.INIT
|
||||
.DA CS.RUN
|
||||
.DA CS.DOEVENT
|
||||
.DA CS.QUIT
|
||||
L.MSG.USAGE .DA MSG.USAGE
|
||||
L.MSG.CRLF .DA MSG.CRLF
|
||||
L.MSG.ERR .DA MSG.ERR
|
||||
.DA 0
|
||||
*--------------------------------------
|
||||
CS.INIT clc
|
||||
rts
|
||||
*--------------------------------------
|
||||
CS.RUN inc ArgIndex
|
||||
lda ArgIndex
|
||||
>SYSCALL ArgV
|
||||
bcs .5
|
||||
|
||||
>STYA ZPPtr1
|
||||
lda (ZPPtr1)
|
||||
cmp #'-'
|
||||
bne .4
|
||||
|
||||
jsr CS.RUN.CheckOpt
|
||||
bcc CS.RUN
|
||||
|
||||
.9 >LDYA L.MSG.USAGE
|
||||
>SYSCALL PutS
|
||||
lda #E.SYN
|
||||
sec
|
||||
rts
|
||||
|
||||
.4 >LDA.G hSrcBasePath
|
||||
bne .9
|
||||
|
||||
>LDYA ZPPtr1
|
||||
jsr X.InitSrcDirYA
|
||||
bcc CS.RUN
|
||||
|
||||
.99 rts
|
||||
*--------------------------------------
|
||||
.5 >LDA.G hSrcBasePath
|
||||
bne .6
|
||||
|
||||
ldy #S.PS.hCWD
|
||||
lda (pPS),y
|
||||
>SYSCALL GetMemPtr
|
||||
>STYA ZPPtr1
|
||||
|
||||
.6 >LDYAI 256
|
||||
>SYSCALL Malloc
|
||||
bcs .99
|
||||
|
||||
>STYA ZPFullPath
|
||||
|
||||
>LDA.G hSrcBasePath
|
||||
>SYSCALL GetMemPtr
|
||||
>STYA ZPPtr1
|
||||
|
||||
ldy #$ff
|
||||
|
||||
.80 iny
|
||||
lda (ZPPtr1),y
|
||||
bne .80
|
||||
|
||||
tya
|
||||
clc
|
||||
adc ZPFullPath
|
||||
sta ZPRelPath
|
||||
lda ZPFullPath+1
|
||||
adc #0
|
||||
sta ZPRelPath+1
|
||||
|
||||
>LDYAI 256
|
||||
>SYSCALL Malloc
|
||||
bcs .99
|
||||
|
||||
>STYA ZPFileBuf
|
||||
*--------------------------------------
|
||||
CS.RUN.LOOP jsr CS.RUN.CheckSTDIN
|
||||
bcs .99
|
||||
|
||||
jsr X.GetEntry
|
||||
bcs .9
|
||||
|
||||
ldy #S.STAT.P.DRIVE
|
||||
lda (ZPFileStat),y ProDOS Device ?
|
||||
beq .5
|
||||
|
||||
jsr CS.RUN.DEV
|
||||
bcc CS.RUN.LOOP
|
||||
|
||||
rts
|
||||
|
||||
.5 ldy #S.STAT.MODE+1
|
||||
lda (ZPFileStat),y
|
||||
and #$F0
|
||||
cmp /S.STAT.MODE.DIR
|
||||
bne .6
|
||||
|
||||
jsr CS.RUN.DIR
|
||||
bcs .99
|
||||
|
||||
bra .8
|
||||
|
||||
.6 jsr CS.RUN.FILE
|
||||
bcs .99
|
||||
|
||||
bra .8
|
||||
|
||||
.9 jsr X.LeaveSubDir
|
||||
bcs .90
|
||||
|
||||
jsr X.BasePath..
|
||||
.8 jsr X.GetNextEntry
|
||||
jmp CS.RUN.LOOP
|
||||
|
||||
.90 lda #0
|
||||
sec
|
||||
.99 rts
|
||||
*--------------------------------------
|
||||
CS.RUN.CheckSTDIN
|
||||
ldy #S.PS.hStdIn
|
||||
lda (pPS),y
|
||||
>SYSCALL FEOF
|
||||
bcs .9
|
||||
|
||||
tay
|
||||
bne .1
|
||||
|
||||
>SYSCALL GetChar
|
||||
bcs .9
|
||||
|
||||
cmp #$03 Ctrl-C
|
||||
beq .9 Abort....
|
||||
|
||||
cmp #$13 Ctrl-S
|
||||
bne .1
|
||||
|
||||
lda bPause
|
||||
eor #$ff
|
||||
sta bPause
|
||||
bne CS.RUN.CheckSTDIN
|
||||
|
||||
clc
|
||||
rts
|
||||
|
||||
.1 lda bPause
|
||||
bne CS.RUN.CheckSTDIN Pause...
|
||||
|
||||
* clc
|
||||
|
||||
.9 rts
|
||||
*--------------------------------------
|
||||
CS.RUN.DIR lda bRecurse
|
||||
bpl .8
|
||||
|
||||
lda (ZPFileName)
|
||||
cmp #'.'
|
||||
beq .8
|
||||
|
||||
>LDYA ZPFileName
|
||||
jsr X.EnterSubDirYA
|
||||
jmp CS.RUN.CheckErr
|
||||
|
||||
.8 clc
|
||||
rts
|
||||
*--------------------------------------
|
||||
CS.RUN.DEV
|
||||
.8 jsr X.GetNextEntry
|
||||
|
||||
CS.RUN.DEV.CLC.RTS
|
||||
clc
|
||||
rts
|
||||
*--------------------------------------
|
||||
CS.RUN.FILE jsr X.IncludeMatch
|
||||
bcs CS.RUN.DEV.CLC.RTS no match, skip....
|
||||
|
||||
jsr CS.RUN.GetFilePath
|
||||
|
||||
jsr CS.RUN.OpenFile
|
||||
bcs .9
|
||||
|
||||
jsr CS.RUN.FILE.LOOP
|
||||
bcs .7
|
||||
|
||||
jmp CS.RUN.CloseFile
|
||||
|
||||
.8 clc
|
||||
rts
|
||||
|
||||
.7 pha
|
||||
jsr CS.RUN.CloseFile
|
||||
pla
|
||||
sec
|
||||
.9 jmp CS.RUN.CheckErr
|
||||
|
||||
.99 rts
|
||||
*--------------------------------------
|
||||
CS.RUN.FILE.LOOP
|
||||
.1 >PUSHB hFile
|
||||
>PUSHW ZPFileBuf
|
||||
>PUSHWI 256
|
||||
>SYSCALL FRead
|
||||
bcs .8
|
||||
|
||||
>STYA ByteCnt
|
||||
|
||||
jsr CS.RUN.FILE.MOD
|
||||
|
||||
jsr CS.RUN.FSeek
|
||||
bcs .99
|
||||
|
||||
>PUSHB hFile
|
||||
>PUSHW ZPFileBuf
|
||||
>PUSHW ByteCnt
|
||||
>SYSCALL FWrite
|
||||
bcs .99
|
||||
|
||||
lda ByteCnt
|
||||
* clc
|
||||
adc FilePos
|
||||
sta FilePos
|
||||
lda ByteCnt+1
|
||||
adc FilePos+1
|
||||
sta FilePos+1
|
||||
bcc .1
|
||||
|
||||
inc FilePos+2
|
||||
bne .1
|
||||
|
||||
inc FilePos+3
|
||||
jmp .1
|
||||
|
||||
.8 cmp #MLI.E.EOF
|
||||
bne .99
|
||||
|
||||
clc
|
||||
|
||||
.99 rts
|
||||
*--------------------------------------
|
||||
CS.RUN.FILE.MOD ldy #0
|
||||
|
||||
.2 lda (ZPFileBuf),y
|
||||
cmp #C.CR
|
||||
bne .3
|
||||
|
||||
lda #C.LF
|
||||
sta (ZPFileBuf),y
|
||||
|
||||
.3 iny
|
||||
cpy ByteCnt
|
||||
bne .2
|
||||
|
||||
rts
|
||||
*--------------------------------------
|
||||
CS.RUN.CheckErr bcc .9
|
||||
|
||||
pha
|
||||
>PUSHW L.MSG.ERR
|
||||
>PUSHA
|
||||
>PUSHBI 1
|
||||
>SYSCALL PrintF
|
||||
lda bContinue
|
||||
eor #$80
|
||||
asl
|
||||
pla
|
||||
|
||||
.9 rts
|
||||
*--------------------------------------
|
||||
CS.RUN.GetFilePath
|
||||
>PUSHW ZPFullPath
|
||||
>LDA.G hSrcBasePath
|
||||
>SYSCALL GetMemPtr
|
||||
>PUSHYA
|
||||
>SYSCALL StrCpy
|
||||
|
||||
>PUSHW ZPFullPath
|
||||
>PUSHW ZPFileName
|
||||
>SYSCALL StrCat
|
||||
rts
|
||||
*--------------------------------------
|
||||
CS.RUN.OpenFile >PUSHW ZPFullPath
|
||||
>PUSHBI O.RDWR+O.APPEND
|
||||
>PUSHBI 0 Type
|
||||
>PUSHWZ Aux type
|
||||
>SYSCALL FOpen
|
||||
bcs CS.RUN.FSeek.9
|
||||
|
||||
sta hFile
|
||||
|
||||
stz FilePos
|
||||
stz FilePos+1
|
||||
stz FilePos+2
|
||||
stz FilePos+3
|
||||
|
||||
CS.RUN.FSeek >PUSHB hFile
|
||||
>PUSHL FilePos
|
||||
>PUSHBI SEEK.SET
|
||||
>SYSCALL fseek
|
||||
|
||||
CS.RUN.FSeek.9 rts
|
||||
*--------------------------------------
|
||||
CS.RUN.CloseFile
|
||||
lda hFile
|
||||
>SYSCALL FClose
|
||||
bcs .9
|
||||
|
||||
stz hFile
|
||||
|
||||
.9 rts
|
||||
*--------------------------------------
|
||||
CS.DOEVENT sec
|
||||
rts
|
||||
*--------------------------------------
|
||||
CS.QUIT jsr X.LeaveSubDir
|
||||
bcc CS.QUIT
|
||||
|
||||
>LDA.G hInclude
|
||||
beq .1
|
||||
|
||||
>SYSCALL FreeMem
|
||||
|
||||
.1 >LDYA ZPFileBuf
|
||||
>SYSCALL Free
|
||||
|
||||
.2 >LDYA ZPFullPath
|
||||
>SYSCALL Free
|
||||
|
||||
.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
|
||||
lda #$ff
|
||||
sta 0,y
|
||||
clc
|
||||
rts
|
||||
*--------------------------------------
|
||||
.INB usr/src/shared/x.fileenum.s
|
||||
*--------------------------------------
|
||||
CS.END
|
||||
*--------------------------------------
|
||||
OptionList .AS "CRcr"
|
||||
OptionVars .DA #bContinue,#bRecurse
|
||||
.DA #bContinue,#bRecurse
|
||||
*--------------------------------------
|
||||
MSG.USAGE .CS "Usage : UNIX2MAC File(s) (*,? wildcards allowed)\r\n"
|
||||
.CS " -C : Continue on error\r\n"
|
||||
.CS " -R : Recurse subdirectories\r\n"
|
||||
MSG.CRLF .CZ "\r\n"
|
||||
MSG.ERR .CZ "[%h]\r\n"
|
||||
*--------------------------------------
|
||||
.DUMMY
|
||||
.OR 0
|
||||
DS.START
|
||||
.INB usr/src/shared/x.fileenum.g
|
||||
|
||||
DS.END .ED
|
||||
*--------------------------------------
|
||||
MAN
|
||||
SAVE usr/src/bin/unix2mac.s
|
||||
ASM
|
|
@ -0,0 +1,220 @@
|
|||
NEW
|
||||
AUTO 3,1
|
||||
*--------------------------------
|
||||
* BEWARE ZP USE!!!
|
||||
*--------------------------------
|
||||
CH .EQ $24 MONITOR HORIZ POSN
|
||||
CV .EQ $25 MONITOR VERT POSN
|
||||
BASEL .EQ $28 MONITOR BASE ADRS
|
||||
A2L .EQ $3E
|
||||
A2H .EQ $3F
|
||||
A4L .EQ $42
|
||||
A4H .EQ $43
|
||||
*--------------------------------
|
||||
SP.BEG .EQ $52,53 Changed! PROG CODE STACK BEGIN
|
||||
SP.END .EQ $54,55 PROG CODE STACK END+1
|
||||
PP.BEG .EQ $56,57 PROG CODE BEGIN
|
||||
PP.END .EQ $58,59 Changed! PROG CODE END+1
|
||||
*--------------------------------
|
||||
.DUMMY
|
||||
.OR $C0
|
||||
LEFT.MARGIN .BS 1 INIT TO 6
|
||||
RIGHT.MARGIN .BS 1 INIT TO SCR.SIZE-1
|
||||
RM.ADJUST .BS 1 INIT TO 6
|
||||
POSH .BS 1 INIT TO 6
|
||||
POSV .BS 1 INIT TO 0
|
||||
ED.PTR .BS 1 EDIT LINE CHAR PTR
|
||||
ED.KEY .BS 1 FIND CHAR KEY CODE
|
||||
CTR .BS 1 GENERAL CTR FOR SCROLL ROUTINES
|
||||
MAXV .BS 1 MAX POSV OF SCREEN SCROLL
|
||||
LN.FLAG .BS 1 INIT TO 0
|
||||
FILL.TO .BS 1 COLUMN TO BLANK FILL TO
|
||||
FIRST.LINE .BS 1 FIRST LINE OF SCRN (INIT 0)
|
||||
LAST.LINE .BS 1 LAST LINE OF SCRN (INIT 23)
|
||||
BLKSIZ .BS 1
|
||||
RPTCNT .BS 1
|
||||
RPTCHR .BS 1
|
||||
PTR1 .BS 2
|
||||
PTR2 .BS 2
|
||||
CUR.KEY .BS 1 CURRENT KEY
|
||||
LNO .BS 2 LINE NUMBER FOR PRNT ROUTINE
|
||||
SAV.CTR .BS 1 CTR FOR EDIT LINE
|
||||
SAV.PTR1 .BS 2 PTR1 FOR EDIT LINE
|
||||
SAV.LNO .BS 2 LNO FOR EDIT LINE
|
||||
CV.DIGFLG .BS 1 FIRST NON-ZERO DIGIT FLG
|
||||
NO.SHOW.FLAG .BS 1 SET TO PREVENT SHOW SCRN
|
||||
SRCP .BS 2
|
||||
.ED
|
||||
*--------------------------------
|
||||
WBUF .EQ $200
|
||||
M.RESET .EQ $3F2 THRU 3F4
|
||||
*--------------------------------
|
||||
M.BASCALC .EQ $FBC1 CALC BASE ADRS
|
||||
M.BELL .EQ $FBDD RING BELL
|
||||
M.COUT .EQ $FDED APPLE CHAR OUTPUT
|
||||
*--------------------------------
|
||||
HARD JMP HINIT INIT SCREEN EDITOR
|
||||
*--------------------------------
|
||||
START.COL .EQ 6 START OF LINE DATA IN BUFFER
|
||||
*--------------------------------
|
||||
*
|
||||
* STANDARD PARAMETER AREA
|
||||
*
|
||||
* THESE PARAMETERS ALLOW CUSTOMIZATION
|
||||
* OF THE SCREEN EDITOR TO SUIT INDIVIDUAL TASTE.
|
||||
*--------------------------------
|
||||
SCREEN.WIDTH .DA #SCR.SIZE WIDTH OF SCREEN
|
||||
ROLL.VALUE .DA #24 (20 4 WM) SCREEN ROLL UP/DOWN VALUE
|
||||
ROLL.VALUE2 .DA #100 BIG ROLL UP/DOWN VALUE
|
||||
HORT.PAGE .DA #40 HORIZONTAL PAGE
|
||||
RPT.CHAR .DA #'-' REPEAT CHAR FOR COMMENT LINE
|
||||
RPT.LENG .DA #32 REPEAT LENGTH FOR COMMENT LINE
|
||||
SKMOD.FLG .DA #$00 ($FF 4 WM) SHIFT KEY MOD FLAG
|
||||
AUTO.REN .DA #$FF AUTO RENUMBER FLAG
|
||||
AUTO.BASE .DA 1000 AUTO REN START LINE NUM
|
||||
AUTO.INC .DA 10 AUTO REN INCREMENT LINE NUM
|
||||
RT.FENCEL .DA #248-SCR.SIZE+START.COL RIGHTMOST HORTZ PAGE LIMIT
|
||||
RT.FENCER .DA #248+START.COL-1 RIGHTMOST COLUMN ALLOWED
|
||||
L.MARGIN .DA #START.COL LEFT MARGIN FOR CAR RETN POSN
|
||||
* TAB TABLE 21 ENTRIES ZERO ON UNUSED ENTRIES
|
||||
TAB.TBL .DA #1,#8,#12,#21,#26,#35,#50,#0,#0,#0 ENTRIES 1-10
|
||||
.DA #0,#0,#0,#0,#0,#0,#0,#0,#0,#0 ENTRIES 11-20
|
||||
.DA #0 END OF TABLE
|
||||
SZ.TAB.TBL .EQ *-TAB.TBL
|
||||
*--------------------------------
|
||||
* VARIABLE AREA BELOW $3D0
|
||||
*
|
||||
* NOTE THAT WE SUBTRACT THE NEEDED SPACE
|
||||
* FROM THE PREVIOUS DEFINED SYMBOL. I.E.
|
||||
* 'LN.CNT' IS 32 BYTES BEFORE $3D0.
|
||||
*--------------------------------
|
||||
VAR.END .EQ $3D0
|
||||
LN.CNT .EQ VAR.END-32 BACKWARD SCROLL LENGTH TABLE
|
||||
INDEX .EQ LN.CNT-1 INDEX TO LN.CNT
|
||||
COMPOSE.FLG .EQ INDEX-1 INIT TO 0
|
||||
SPECIAL.FLG .EQ COMPOSE.FLG-1 INIT TO 0
|
||||
MDIST .EQ SPECIAL.FLG-2 MOVE DISTANCE
|
||||
ESC.FLAG .EQ MDIST-1 EDIT/SCROLL MODE FLG
|
||||
ONCE.FLG .EQ ESC.FLAG-1 SPECIAL ESCAPE FLAG
|
||||
CHANGE.FLG .EQ ONCE.FLG-1 EDIT LINE CHANGED / MUST SUBMIT
|
||||
FORM.FLG .EQ CHANGE.FLG-1 SHOW FORM GUIDE (INIT 0)
|
||||
ALPHA.FLG .EQ FORM.FLG-1 ALPHA SHIFT LOCK FLAG (INIT 0)
|
||||
SAVE.RSTV .EQ ALPHA.FLG-2 SAVE RESET VECTOR
|
||||
SAVE.3D1 .EQ SAVE.RSTV-2 SAVE OS SOFT VECTOR
|
||||
SAVE.3D4 .EQ SAVE.3D1-2 SAVE OS HARD VECTOR
|
||||
SAVE.36 .EQ SAVE.3D4-2 SAVE OUTPUT HOOK
|
||||
SAVE.38 .EQ SAVE.36-2 SAVE INPUT HOOK
|
||||
VAR.BEG .EQ save.38
|
||||
.DO VAR.BEG<$300
|
||||
*** ERROR VAR.BEG < $300
|
||||
.FIN
|
||||
*--------------------------------
|
||||
*
|
||||
* FUNCTION TABLE FOR SCROLL MODE
|
||||
* KEYBOARD FUNCTIONS.
|
||||
*
|
||||
* BECAUSE OF KEYBOARD VARIATIONS BETWEEN APPLE II PLUS
|
||||
* AND APPLE II E AND FRANKLIN KEYBOARDS SOME KEYS ARE
|
||||
* DEFINED AS DUPLICATE FUNCTIONS TO IMPROVE THE HUMAN
|
||||
* FACTORS OF KEY PLACEMENT.
|
||||
*
|
||||
* THE SHIFT 2 KEY ON AP2+ IS '"' BUT ON OTHER KEYBOARDS
|
||||
* AN '@' IS THE SHIFT 2 KEY CODE. '"' AND '@' PERFORM
|
||||
* THE SAME FUNCTION.
|
||||
*
|
||||
* THE HORIZONTAL SCROLL KEYS ':' AND '-' ON THE AP2+ KEYBOARD
|
||||
* ARE NOT IN EASY REACH ON OTHER KEYBOARDS SO THE KEYS
|
||||
* ',' AND '.' PERFORM THE SAME FUNCTION AND HAVE THE
|
||||
* NICE SUGGESTIVE PROMPT OF THEIR SHIFT CODES '<' AND '>'
|
||||
* TO POINT CORRECT SCROLL DIRECTION.
|
||||
*--------------------------------
|
||||
FTBL .DA #'1,ROLL.UP-1 ROLL UP 24 LINES
|
||||
.DA #'2,ROLL.DN-1 ROLL DOWN 24 LINES
|
||||
.DA #'3,LN.TOGL-1 LINE NUMBER TOGGLE
|
||||
.DA #'4,COMPOSE-1 COMPOSE MODE TOGGLE
|
||||
.DA #'5,FORM.GUIDE-1 FORM GUIDE MODE TOGGLE
|
||||
.DA #'W-$40,SET.LMARGIN-1 SET LEFT MARGIN
|
||||
.DA #'/,GOTO.LINE-1 GOTO LINE#
|
||||
.DA #'Q-$40,EXIT-1 QUIT FROM EDITOR
|
||||
.DA #'B,SHOW.BEGIN-1 BEGINNING OF FILE
|
||||
.DA #'E,SHOW.END-1 END OF FILE
|
||||
.DA #'!,ROLL.U100-1 ROLL UP 100 LINES
|
||||
.DA #'",ROLL.D100-1 AP2+ ROLL DOWN 100 LINES
|
||||
.DA #'@,ROLL.D100-1 AP2E ROLL DOWN 100 LINES
|
||||
.DA #':,LEFT.PAGE-1 AP2+ HORIZONTAL SCROLL LEFT
|
||||
.DA #',,LEFT.PAGE-1 AP2E HORIZONTAL SCROLL LEFT
|
||||
.DA #'-,RIGHT.PAGE-1 AP2+ HORIZONTAL SCROLL RIGHT
|
||||
.DA #'.,RIGHT.PAGE-1 AP2E HORIZONTAL SCROLL RIGHT
|
||||
.DA #'I,MOVE.UP-1 MOVE CRSR UP 1 LINE
|
||||
.DA #'K-$40,MOVE.UP-1 MOVE CRSR UP 1 LINE
|
||||
.DA #'M,MOVE.DN-1 MOVE CRSR DOWN 1 LINE
|
||||
.DA #'J-$40,MOVE.DN-1 MOVE CRSR DOWN 1 LINE
|
||||
.DA #'J,MOVE.LF-1 MOVE CRSR LEFT 1 CHAR
|
||||
.DA #'H-$40,MOVE.LF-1 MOVE CRSR LEFT 1 CHAR
|
||||
.DA #'K,MOVE.RT-1 MOVE CRSR RIGHT 1 CHAR
|
||||
.DA #'U-$40,MOVE.RT-1 MOVE CRSR RIGHT 1 CHAR
|
||||
.DA #'L-$40,INSERT-1 INSERT LINE
|
||||
.DA #'Z-$40,DELETE-1 DELETE LINE
|
||||
.DA #$1B,ESCAPE-1 ENTER EDIT MODE
|
||||
.DA #'M-$40,RETURN-1 RETURN TO NEXT LINE
|
||||
.DA #'P-$40,DINSERT-1 INSERT DASHED LINE COMMENT
|
||||
**** SPECIAL EDIT MODE FORCING KEYS
|
||||
**** THERE MUST BE NO CONFLICT WITH THE ABOVE
|
||||
**** SCROLL MODE FUNCTION KEY CODES.
|
||||
.DA #'@-$40,SPECIAL-1 CLEAR TO EOL
|
||||
.DA #'A-$40,SPECIAL-1 TOGGLE ALPHA SHIFT LOCK
|
||||
.DA #'B-$40,SPECIAL-1 BEGINING OF LINE
|
||||
.DA #'C-$40,SPECIAL-1 COPY TO TAB
|
||||
.DA #'D-$40,SPECIAL-1 DELETE CHAR
|
||||
.DA #'F-$40,SPECIAL-1 FIND CHAR
|
||||
.DA #'I-$40,SPECIAL-1 INSERT CHAR
|
||||
.DA #'N-$40,SPECIAL-1 END OF LINE
|
||||
.DA #'O-$40,SPECIAL-1 INSERT CNTRL CHAR
|
||||
.DA #'S-$40,SPECIAL-1 SET/CLEAR TAB
|
||||
.DA #'T-$40,SPECIAL-1 TAB
|
||||
FTBL.Z .EQ *-FTBL
|
||||
.DO FTBL.Z>256
|
||||
!!! SCROLL MODE FUNCTION TABLE TOO LARGE
|
||||
.FIN
|
||||
*--------------------------------
|
||||
*
|
||||
* FUNCTION TABLE FOR EDIT MODE
|
||||
* KEYBOARD FUNCTIONS.
|
||||
*
|
||||
*--------------------------------
|
||||
E.TBL
|
||||
.DA #'@-$40,E.ZAP-1 CLEAR TO EOL
|
||||
.DA #'A-$40,E.SHIFT-1 TOGGLE ALPHA SHIFT LOCK
|
||||
.DA #'B-$40,E.BEG-1 BEGINNING
|
||||
.DA #'C-$40,E.COPY-1 COPY TO TAB
|
||||
.DA #'D-$40,E.DEL-1 DELETE CHAR
|
||||
.DA #'F-$40,E.FIND-1 FIND CHAR
|
||||
.DA #'H-$40,E.BKSP-1 BACKSPACE
|
||||
.DA #'I-$40,E.INS-1 INSERT CHAR
|
||||
.DA #'N-$40,E.END-1 END OF LINE
|
||||
.DA #'O-$40,E.OVR-1 INSERT CONTROL CHAR
|
||||
.DA #'R-$40,E.RESTORE-1 RESTORE LINE
|
||||
.DA #'S-$40,E.SET.TAB-1 SET/CLEAR TAB
|
||||
.DA #'T-$40,E.TAB-1 TAB TO NEXT POSN
|
||||
.DA #'U-$40,E.RIT-1 RIGHT ARROW
|
||||
.DA #$1B,E.ESC-1 ESCAPE FROM EDIT MODE
|
||||
**** SCROLL MODE FUNCTIONS ****
|
||||
**** THESE KEY CODES MUST NOT CONFLICT
|
||||
**** WITH THE EDIT KEY CODES.
|
||||
.DA #'J-$40,E.CTRL-1 MOVE DOWN
|
||||
.DA #'K-$40,E.CTRL-1 MOVE UP
|
||||
.DA #'L-$40,E.CTRL-1 INSERT LINE
|
||||
.DA #'M-$40,E.CTRL-1 RETURN
|
||||
.DA #'P-$40,E.CTRL-1 INSERT COMMENT LINE
|
||||
.DA #'Q-$40,E.CTRL-1 QUIT
|
||||
.DA #'W-$40,E.CTRL-1 SET LEFT MARGIN
|
||||
.DA #'Z-$40,E.CTRL-1 DELETE LINE
|
||||
E.TBLSZ .EQ *-E.TBL
|
||||
.DO E.TBLSZ>256
|
||||
!!! EDIT MODE FUNCTION TABLE TOO LARGE
|
||||
.FIN
|
||||
*--------------------------------
|
||||
MAN
|
||||
SAVE usr/src/fse/fse.s.1
|
||||
LOAD usr/src/fse/fse.s
|
||||
ASM
|
|
@ -0,0 +1,522 @@
|
|||
NEW
|
||||
AUTO 3,1
|
||||
*--------------------------------
|
||||
HINIT LDA SP.BEG KILL SYMBOL TABLE
|
||||
STA SP.END EDIT USES IT FOR
|
||||
LDA SP.BEG+1 SCROLL LINE STACK
|
||||
STA SP.END+1
|
||||
LDY #VAR.BEG ZERO DATA AREA
|
||||
LDA #0
|
||||
.1 STA $300,Y
|
||||
INY
|
||||
CPY #VAR.END
|
||||
BCC .1
|
||||
LDA #START.COL START IN THIS COLUMN
|
||||
STA LEFT.MARGIN
|
||||
STA POSH CURSOR IN COLUMN 1
|
||||
CLC
|
||||
ADC SCREEN.WIDTH
|
||||
STA RIGHT.MARGIN
|
||||
LDA #23
|
||||
STA LAST.LINE OF SCROLL
|
||||
LDX #0
|
||||
STX NO.SHOW.FLAG
|
||||
STX RM.ADJUST NO LINE NUMBERS
|
||||
STX LN.FLAG
|
||||
STX FIRST.LINE OF SCROLL
|
||||
STX POSV CURSOR ON LINE 0
|
||||
INX X=1
|
||||
.2 LDA M.RESET,X SAVE RESET VECTOR
|
||||
STA SAVE.RSTV,X
|
||||
LDA $3D1,X SAVE 3D1.3D2
|
||||
STA SAVE.3D1,X
|
||||
LDA $3D4,X SAVE 3D4.3D5
|
||||
STA SAVE.3D4,X
|
||||
LDA $36,X SAVE 36.37
|
||||
STA SAVE.36,X
|
||||
LDA $38,X SAVE 38.39
|
||||
STA SAVE.38,X
|
||||
LDA MY.VECTOR,X
|
||||
STA M.RESET,X RESET TO ME
|
||||
STA $3D1,X 3D0G TO ME
|
||||
STA $3D4,X 3D3G TO ME
|
||||
DEX
|
||||
BPL .2
|
||||
TXS
|
||||
JSR FIXRST FIX POWER UP BYTE
|
||||
BCC DO.GOTO.LINE BA, BUT WATCH IT!!! $#*
|
||||
*--------------------------------
|
||||
GOTO.LINE LDX #1
|
||||
.1 STX LNO
|
||||
JSR READ.KEY.CODE
|
||||
LDX LNO
|
||||
STA WBUF,X
|
||||
INX
|
||||
CMP #'0'
|
||||
BCC DO.GOTO.LINE
|
||||
CMP #'9'+1
|
||||
BCC .1
|
||||
|
||||
DO.GOTO.LINE
|
||||
|
||||
LDA #0
|
||||
STA LNO
|
||||
STA LNO+1
|
||||
LDY #1
|
||||
.10 LDA WBUF,Y GET NEXT CHAR
|
||||
INY
|
||||
EOR #'0' MASK ASCII DIGIT
|
||||
CMP #9+1 IS IT GOOD DIGIT
|
||||
BCS .11 NO, USE LNO AS LINE TO GOTO
|
||||
PHA SAVE DIGIT
|
||||
LDA LNO MDIST=LNO
|
||||
STA MDIST LNO=DIGIT
|
||||
PLA
|
||||
STA LNO
|
||||
LDA LNO+1
|
||||
STA MDIST+1
|
||||
LDA #0
|
||||
STA LNO+1
|
||||
LDX #10
|
||||
.12 LDA LNO ADD MDIST TO LNO 10 TIMES
|
||||
CLC
|
||||
ADC MDIST
|
||||
STA LNO
|
||||
LDA LNO+1
|
||||
ADC MDIST+1
|
||||
STA LNO+1
|
||||
DEX
|
||||
BNE .12
|
||||
BEQ .10 ...ALWAYS
|
||||
.11 JSR SHOW.BEGIN
|
||||
.1 JSR P1.INIT START LINE # SEARCH
|
||||
LDA PTR1
|
||||
CMP PP.END
|
||||
BNE .20
|
||||
LDA PTR1+1
|
||||
CMP PP.END+1
|
||||
BEQ .4 STOP AT EOF
|
||||
.20 LDA LNO
|
||||
LDY #1
|
||||
SEC
|
||||
SBC (PTR1),Y COMPARE LINE LO
|
||||
STA ED.KEY
|
||||
LDA LNO+1
|
||||
INY
|
||||
SBC (PTR1),Y COMPARE LINE HI
|
||||
BCC .4 IF LNO<LINE THEN FOUND
|
||||
BEQ .3 IF EQUAL CK LO
|
||||
.2 JSR POP.LINE POP OFF LINE
|
||||
JMP .1 CK THIS LINE
|
||||
.3 LDA ED.KEY WAS LO LINE EQUAL?
|
||||
BNE .2 NO
|
||||
.4
|
||||
*--------------------------------
|
||||
SOFT LDX #$FF INIT STACK PTR
|
||||
TXS
|
||||
LDA NO.SHOW.FLAG DO WE NEED TO SHOW SCRN
|
||||
BNE .1 NO
|
||||
JSR SHOW.SCREEN PLOP UP THE SCRN
|
||||
.1 LDA #0 ZERO FLAG
|
||||
STA NO.SHOW.FLAG
|
||||
.2 JSR EDIT.LINE GET A KEY OR EDIT THE LINE
|
||||
LDY #0 KEY IN A REG
|
||||
|
||||
* allow lowercase too!!!
|
||||
|
||||
CMP #$60
|
||||
BCC .3
|
||||
SBC #$20
|
||||
|
||||
.3 CMP FTBL,Y HUNT FOR KEY CODE
|
||||
BEQ .4 FOUND IT
|
||||
INY NEXT ENTRY
|
||||
INY
|
||||
INY
|
||||
CPY #FTBL.Z
|
||||
BCC .3
|
||||
JSR M.BELL BAD KEY CODE
|
||||
JMP .2
|
||||
.4 JSR TOSUB PROCESS KEY
|
||||
JMP SOFT
|
||||
TOSUB LDA FTBL+2,Y
|
||||
PHA
|
||||
LDA FTBL+1,Y
|
||||
PHA
|
||||
RTS
|
||||
*--------------------------------
|
||||
FIXRST LDA M.RESET+1
|
||||
EOR #$A5 MAKE SURE WE DONE
|
||||
STA M.RESET+2 BOOT DISK UP
|
||||
RTS
|
||||
*--------------------------------
|
||||
ESCAPE LDA #$FF
|
||||
STA ESC.FLAG PUT INTO EDIT MODE
|
||||
BNE SET.NS DONT SHOW SCRN
|
||||
*--------------------------------
|
||||
COMPOSE LDA COMPOSE.FLG TOGGLE COMPOSE MODE FLAG
|
||||
EOR #1
|
||||
STA COMPOSE.FLG
|
||||
SET.NS LDA #1 DONT SHOW SCRN
|
||||
STA NO.SHOW.FLAG
|
||||
RTS ON RETURN TO MAIN LOOP
|
||||
*--------------------------------
|
||||
SPECIAL LDA #1
|
||||
STA SPECIAL.FLG SPECIAL KEY JUST FOR EDIT
|
||||
BNE SET.NS DONT SHOW SCRN
|
||||
*--------------------------------
|
||||
SET.LMARGIN LDA POSH CUR POSH IS LEFT MARGIN
|
||||
PHA
|
||||
LDA RT.FENCEL
|
||||
CLC
|
||||
ADC SCREEN.WIDTH
|
||||
SEC
|
||||
SBC #START.COL
|
||||
STA ED.KEY
|
||||
PLA
|
||||
CMP ED.KEY POSH< (RT.FENCEL+SCREEN.WIDTH-START.COL)
|
||||
BCS .1 NO, SO CANT SET MARGIN
|
||||
STA L.MARGIN
|
||||
|
||||
.1 JMP SET.NS
|
||||
*--------------------------------
|
||||
RETURN JSR SET.NS ASSUME WE DO NOT SHOW SCREEN
|
||||
LDA L.MARGIN BEGINNING OF LINE
|
||||
STA POSH NEW COLUMN POSN
|
||||
PHA
|
||||
LDA SCREEN.WIDTH
|
||||
LSR
|
||||
STA ED.KEY SAVE SW/2
|
||||
PLA
|
||||
SEC
|
||||
SBC ED.KEY LM-(SW/2)
|
||||
BCC .20 TOO FAR
|
||||
CMP #START.COL MUST BE > START.COL
|
||||
BCS .30 YES SO SET NEW MARGIN
|
||||
.20 LDA #START.COL START.COL IS GOOD MARGIN
|
||||
.30 CMP LEFT.MARGIN SEE IF ALREADY THERE
|
||||
BEQ .1 YES
|
||||
CMP RT.FENCEL MARGIN NOT PAST FENCE
|
||||
BCC .0
|
||||
CMP RT.FENCER
|
||||
BEQ .0
|
||||
BCC .0
|
||||
LDA RT.FENCEL
|
||||
.0 JSR SET.MARGIN
|
||||
JSR .4
|
||||
.1 LDA POSV
|
||||
CMP MAXV WAS *EOF* HIT?
|
||||
BCS .3 YES
|
||||
CMP LAST.LINE WAS HE ON LAST LINE?
|
||||
BCC .2 NO
|
||||
JSR POP.LINE YES, MOVE SCREEN DOWN 1 LINE
|
||||
JSR .4 MAKE SURE WE SHOW SCREEN
|
||||
.HS 2C BIT abs opcode skips 2 .3
|
||||
.2 INC POSV
|
||||
.3 LDA COMPOSE.FLG IF COMPOSE TOGGLE ON
|
||||
BEQ .5 NO
|
||||
JSR INSERT YES, INSERT NEW LINE
|
||||
.4 LDA #0 MAKE SURE WE SHOW
|
||||
STA NO.SHOW.FLAG SCREEN IF NEW LINE ADDED
|
||||
.5 RTS
|
||||
*--------------------------------
|
||||
SET.MARGIN STA LEFT.MARGIN
|
||||
CLC
|
||||
ADC SCREEN.WIDTH
|
||||
SEC
|
||||
SBC RM.ADJUST
|
||||
STA RIGHT.MARGIN
|
||||
RTS
|
||||
*--------------------------------
|
||||
* RESET VECTOR IS SAVED SO WE CAN INTERCEPT IT.
|
||||
* 3D0G AND 3D3G VECTORS SAVED FOR SOME PEOPLE
|
||||
* WITH OLD NON AUTO-START ROMS THEY GO TO MONITOR
|
||||
* AND WE CANT STOP IT. BUT WE CAN MODIFY DOS
|
||||
* HARD AND SOFT RESTART VECTORS TO CATCH HIS RETURN.
|
||||
* IN AND OUT HOOKS SAVED BECAUSE RESET CLOBERS
|
||||
* THEM AND VIDEX, STB80 PATCHES SET THEM UP
|
||||
* IT IS CRITICAL TO CATCH RESET BECAUSE THE PROGRAM MAY BE
|
||||
* SPLIT UP IF USER IS NOT AT BEGINING OF FILE AND SCROLLED
|
||||
* OFF SECTION CANT BE RECOVERED IF ASSEMBLER RESTARTS ON
|
||||
* US WITHOUT OUR KNOWLEDGE.
|
||||
*--------------------------------
|
||||
|
||||
MY.VECTOR .DA EXIT ADRS OF EDIT RESET HANDLER
|
||||
|
||||
*--------------------------------
|
||||
EXIT LDX #1
|
||||
.1 LDA SAVE.RSTV,X RESORE RESET VECTOR
|
||||
STA M.RESET,X
|
||||
LDA SAVE.3D1,X 3D1.3D2 ALSO
|
||||
STA $3D1,X
|
||||
LDA SAVE.3D4,X 3D4.3D5 ALSO
|
||||
STA $3D4,X
|
||||
LDA SAVE.36,X 36.37 ALSO
|
||||
STA $36,X
|
||||
LDA SAVE.38,X 38.39 ALSO
|
||||
STA $38,X
|
||||
DEX
|
||||
BPL .1
|
||||
TXS save dem bytes!
|
||||
JSR FIXRST FIX POWER UP BYTE
|
||||
|
||||
* only clear $130 - $16F!!!
|
||||
|
||||
LDX #$130
|
||||
LDA #0 thanxs Bill
|
||||
|
||||
.2 STA $100,X CLEAR HASH TABLE FOR
|
||||
INX ASSEMBLER SYMBOL TABLE
|
||||
CPX #$170
|
||||
BNE .2
|
||||
|
||||
*--------------------------------
|
||||
EXIT2 JSR SHOW.BEGIN GO TO BEGINING OF FILE
|
||||
LDA #23
|
||||
JSR MY.VTAB BOTTOM LINE
|
||||
INC CH MAKE SURE ASM DOES CRLF
|
||||
JSR P1.INIT
|
||||
LDA AUTO.REN CK FOR AUTO RENUMBER
|
||||
BEQ .1 NONE WANTED
|
||||
LDA AUTO.BASE RENUMBER THE PROGRAM
|
||||
STA PTR2
|
||||
LDA AUTO.BASE+1
|
||||
STA PTR2+1
|
||||
.0 JSR P1.ENDCK
|
||||
BEQ EXIT3 END OF PROGRAM
|
||||
LDA PTR2
|
||||
LDY #1
|
||||
STA (PTR1),Y
|
||||
INY
|
||||
LDA PTR2+1
|
||||
STA (PTR1),Y
|
||||
LDA PTR2
|
||||
CLC
|
||||
ADC AUTO.INC
|
||||
STA PTR2
|
||||
LDA PTR2+1
|
||||
ADC AUTO.INC+1
|
||||
STA PTR2+1
|
||||
BCS .3 ERROR IF OVERFLOW
|
||||
JSR P1.ADD
|
||||
JMP .0
|
||||
.1 JSR P1.ENDCK CK PROG LINE NUM=0
|
||||
BEQ EXIT3 END OF PROGRAM
|
||||
LDY #1
|
||||
LDA (PTR1),Y
|
||||
BNE .2
|
||||
INY
|
||||
LDA (PTR1),Y
|
||||
BEQ .3 YES MUST RENUMBER
|
||||
.2 JSR P1.ADD
|
||||
JMP .1
|
||||
.3 LDY #0 GIVE RENUMBER WARNING
|
||||
.4 LDA MESG,Y
|
||||
BEQ EXIT3
|
||||
JSR M.COUT
|
||||
INY
|
||||
BNE .4
|
||||
|
||||
EXIT3 JMP $3D0 NON LANG CARD EXIT
|
||||
|
||||
*--------------------------------
|
||||
|
||||
MESG .HS 8D8D8D87
|
||||
.AS -/*** PLEASE RENUMBER!/
|
||||
.HS 8D8700
|
||||
*--------------------------------
|
||||
FORM.GUIDE LDA FORM.FLG TOGGLE FORM GUIDE
|
||||
EOR #1
|
||||
STA FORM.FLG
|
||||
BEQ .1 OFF NOW
|
||||
|
||||
* suspect that something is wrong here...
|
||||
* Mike's comment adds 2,
|
||||
* but code adds 1
|
||||
|
||||
LDA POSV ON NOW SO ADD 2 TO POSV
|
||||
CLC MAKE SURE POSV
|
||||
ADC #1 STAYS ON SCREEN
|
||||
STA POSV
|
||||
|
||||
LDA #1
|
||||
LDY #22
|
||||
BNE .2
|
||||
.1 LDA POSV
|
||||
SEC
|
||||
SBC #1
|
||||
STA POSV
|
||||
LDA #0
|
||||
LDY #23
|
||||
.2 STA FIRST.LINE
|
||||
STY LAST.LINE
|
||||
CPY POSV
|
||||
BCS .3
|
||||
STY POSV
|
||||
.3 CMP POSV
|
||||
BCC .4
|
||||
STA POSV
|
||||
.4 RTS
|
||||
*--------------------------------
|
||||
SHOW.BEGIN JSR FIND.LAST.PAGE GET LAST 32 LINES
|
||||
LDA #32
|
||||
STA CTR
|
||||
.1 JSR GET.LINE GET THEM BACK FROM
|
||||
JSR CK.SPEND SCROLL LINE STACK
|
||||
BNE .2 GO GET MORE
|
||||
LDA LEFT.MARGIN RESET POSH, POSV
|
||||
STA POSH
|
||||
LDA FIRST.LINE
|
||||
STA POSV
|
||||
RTS
|
||||
.2 DEC CTR MORE LINES IN LN.TBL
|
||||
BNE .1 YES
|
||||
BEQ SHOW.BEGIN NO, FIND 32 MORE LINES
|
||||
*--------------------------------
|
||||
CK.SPEND LDA SP.BEG SEE IF END OF SCROLL
|
||||
CMP SP.END LINE STACK
|
||||
BNE .1
|
||||
LDA SP.BEG+1
|
||||
CMP SP.END+1
|
||||
.1 RTS
|
||||
*--------------------------------
|
||||
SHOW.END JSR POP.LINE POP ALL LINES OFF
|
||||
LDA PP.BEG FROM PROG AREA ONTO
|
||||
CMP PP.END SCROLL LINE STACK
|
||||
BNE SHOW.END
|
||||
LDA PP.BEG+1
|
||||
CMP PP.END+1
|
||||
BNE SHOW.END
|
||||
* AT *EOF* NOW, BACK UP LAST.LINE-FIRST.LINE LINES
|
||||
JSR FIND.LAST.PAGE
|
||||
LDA LAST.LINE
|
||||
STA POSV INSURE THAT POSV IS ON *EOF*
|
||||
SEC
|
||||
SBC FIRST.LINE
|
||||
STA CTR NUM LINES TO BACK UP
|
||||
.1 JSR GET.LINE BACK UP SO *EOF* IS ON
|
||||
JSR CK.SPEND BOTTOM OF PAGE
|
||||
BEQ .2 EXIT IF END SCROLL LINE STACK
|
||||
DEC CTR COUNT LINE PULLED
|
||||
BNE .1 GO PULL MORE LINES
|
||||
.2 JSR SHOW.SCREEN DISPLAY SCREEN
|
||||
INC NO.SHOW.FLAG PREVENT ANOTHER DISPLAY
|
||||
RTS
|
||||
*--------------------------------
|
||||
DELETE JSR LSTRIP STRIP OFF LINES TO CUR LINE
|
||||
LDA PP.BEG AT END OF PROG?
|
||||
CMP PP.END
|
||||
BNE .1
|
||||
LDA PP.BEG+1
|
||||
CMP PP.END+1
|
||||
BNE .1
|
||||
INC NO.SHOW.FLAG YES DONT SHOW SCRN
|
||||
BNE .2 ...ALWAYS
|
||||
.1 LDY #0 DEL CUR LINE
|
||||
LDA (PP.BEG),Y
|
||||
CLC
|
||||
ADC PP.BEG
|
||||
STA PP.BEG
|
||||
BCC .2
|
||||
INC PP.BEG+1
|
||||
.2 JMP LGRAB GRAB BACK PREV LINES
|
||||
*--------------------------------
|
||||
|
||||
; added $81 (1 space) to blank line for EDITing
|
||||
|
||||
INS.TBL
|
||||
|
||||
* better blank line
|
||||
|
||||
BL .DA #BLEN
|
||||
.DA $0000
|
||||
.DA #$81 (see...)
|
||||
.HS 00
|
||||
|
||||
BLEN .EQ *-BL
|
||||
|
||||
* DASHED COMMENT LINE
|
||||
* used RPT symbols! (for assembling)
|
||||
|
||||
DCL .DA #DCLEN
|
||||
.DA $0000
|
||||
.AS ';' $#*
|
||||
.DA #$C0,#RPT.LENG,#RPT.CHAR
|
||||
.HS 00
|
||||
|
||||
DCLEN .EQ *-DCL
|
||||
|
||||
*--------------------------------
|
||||
|
||||
DINSERT LDY #DCL-INS.TBL DASHED commment LINE INSERT
|
||||
.HS 2C BIT abs opcode skips 2 DINS.1
|
||||
|
||||
INSERT LDY #BL-INS.TBL BLANK LINE INSERT
|
||||
|
||||
DINS.1 LDA INS.TBL,Y GET LINE BYTE COUNT
|
||||
STA WBUF
|
||||
LDX #1
|
||||
.1 CPX WBUF
|
||||
BEQ .2
|
||||
INY
|
||||
LDA INS.TBL,Y COPY INTO WBUF
|
||||
STA WBUF,X
|
||||
INX
|
||||
BNE .1
|
||||
.2 LDA PP.BEG CK FOR ENOUGH SPACE
|
||||
SEC
|
||||
SBC SP.END
|
||||
STA PTR1
|
||||
LDA PP.BEG+1
|
||||
SBC SP.END+1
|
||||
BNE .3
|
||||
LDA PTR1
|
||||
CMP WBUF
|
||||
BCS .3
|
||||
JMP M.BELL NOT ENOUGH FREE MEMORY
|
||||
.3 JSR LSTRIP GET DOWN TO CUR LINE
|
||||
LDA PP.BEG
|
||||
SEC
|
||||
SBC WBUF ALLOCATE BYTES BEFORE
|
||||
STA PP.BEG CUR LINE
|
||||
LDA PP.BEG+1
|
||||
SBC #0
|
||||
STA PP.BEG+1
|
||||
LDA RPT.CHAR SET REPEAT CHAR
|
||||
STA WBUF+6
|
||||
LDA RPT.LENG AND LENGTH
|
||||
STA WBUF+5
|
||||
LDY #0
|
||||
LDX WBUF BYTE COUNT
|
||||
.4 LDA WBUF,Y
|
||||
STA (PP.BEG),Y PUT IN LINE DATA
|
||||
INY
|
||||
DEX
|
||||
BNE .4
|
||||
**** FALL INTO LGRAB ****
|
||||
*--------------------------------
|
||||
LGRAB LDA POSV GET BACK POSV-FIRST.LINE LINES
|
||||
SEC
|
||||
SBC FIRST.LINE
|
||||
BEQ .1
|
||||
STA CTR
|
||||
JSR FIND.LAST.PAGE
|
||||
.0 JSR GET.LINE
|
||||
DEC CTR
|
||||
BNE .0
|
||||
.1 RTS
|
||||
*--------------------------------
|
||||
LSTRIP LDA POSV POP DOWN TO POSV-FIRST.LINE LINES
|
||||
SEC
|
||||
SBC FIRST.LINE
|
||||
BEQ .1
|
||||
STA CTR
|
||||
.0 JSR POP.LINE
|
||||
DEC CTR
|
||||
BNE .0
|
||||
.1 RTS
|
||||
*--------------------------------
|
||||
MAN
|
||||
SAVE usr/src/fse/fse.s.2
|
||||
LOAD usr/src/fse/fse.s
|
||||
ASM
|
|
@ -0,0 +1,533 @@
|
|||
NEW
|
||||
AUTO 3,1
|
||||
*--------------------------------
|
||||
MOVE.LF LDA POSV
|
||||
CMP MAXV IS HE ON *EOF*
|
||||
BCS .2 YES, DONT CHANGE POSH
|
||||
LDY POSH
|
||||
CPY #START.COL IF ALREADY ON BEGINNING
|
||||
BEQ .2 DON'T MOVE LEFT
|
||||
CPY LEFT.MARGIN IF NOT ON CURRENT MARGIN
|
||||
BNE .1 GO MOVE LEFT
|
||||
JSR LEFT.PAGE OTHERWISE PAGE LEFT
|
||||
DEC POSH THEN MOVE LEFT
|
||||
RTS SHOW SCREEN SINCE HORIZONTAL PAGE
|
||||
.1 DEC POSH MOVE LEFT
|
||||
.2 INC NO.SHOW.FLAG DON'T SHOW SCREEN
|
||||
RTS UNLESS A HORIZONTAL PAGE DONE
|
||||
*--------------------------------
|
||||
MOVE.RT LDA POSV
|
||||
CMP MAXV IS HE ON *EOF*
|
||||
BCS INC.FLG YES, DONT CHANGE POSH
|
||||
LDA RT.FENCER DON'T MOVE RIGHT IF
|
||||
CMP POSH HE IS ON LAST COLUMN
|
||||
BEQ INC.FLG
|
||||
LDY RIGHT.MARGIN GET RIGHT MARGIN
|
||||
DEY
|
||||
CPY POSH IS HE IS NOT ON IT
|
||||
BNE .1 THEN MOVE RIGHT
|
||||
JSR RIGHT.PAGE ELSE HORIZONTAL PAGE
|
||||
LDY RIGHT.MARGIN
|
||||
DEY
|
||||
CPY POSH SEE IF HE IS
|
||||
BEQ .3 STILL ON RIGHT MARGIN
|
||||
INC POSH MOVE RIGHT IF NOT
|
||||
.3 RTS
|
||||
.1 INC POSH MOVE RIGHT
|
||||
INC.FLG INC NO.SHOW.FLAG DON'T SHOW SCREEN UNLESS
|
||||
RTS HORIZONTAL PAGE DONE
|
||||
*--------------------------------
|
||||
RIGHT.PAGE LDA LEFT.MARGIN HORIZONTAL PAGE RIGHT
|
||||
CLC
|
||||
ADC HORT.PAGE
|
||||
CMP RT.FENCEL UNLESS PAST RIGHTMOST LIMIT
|
||||
BCS .1 YES, PAST LIMIT
|
||||
CMP POSH SEE IF POSH STILL ON SCREEN
|
||||
BCC .2 YES
|
||||
STA POSH NO, MAKE IT FIT ON LEFT MARGIN
|
||||
BCS .2 ...ALWAYS
|
||||
.1 LDA LEFT.MARGIN
|
||||
CMP RT.FENCEL WAS HE ALREADY ON RIGHTMOST LIMIT
|
||||
BEQ INC.FLG YES, LET HIM HANG THERE
|
||||
LDA POSH COMPUTE NEW POSH
|
||||
SEC REMOVE LEFT MARGIN BIAS
|
||||
SBC LEFT.MARGIN
|
||||
CLC
|
||||
ADC RT.FENCEL ADD RIGHTMOST MARGIN LIMIT BIAS
|
||||
STA POSH
|
||||
LDA RT.FENCEL SET NEW LEFT MARGIN
|
||||
.2 JMP SET.MARGIN
|
||||
*--------------------------------
|
||||
LEFT.PAGE LDA #START.COL SEE IF DOING A LEFT PAGE
|
||||
CLC MAKES LEFT MARGIN BEFORE THE
|
||||
ADC HORT.PAGE FIRST COLUMN
|
||||
CMP LEFT.MARGIN
|
||||
BEQ .1 DO THE LEFT PAGE
|
||||
BCC .1 DO THE LEFT PAGE
|
||||
LDA #START.COL SET LEFT MARGIN TO COL 1
|
||||
CMP LEFT.MARGIN UNLESS IT IS ALREADY THERE
|
||||
BNE LIMITM NOT COL 1, SO USE COL 1
|
||||
BEQ INC.FLG YES COL 1, SO STAY THERE
|
||||
.1 LDA LEFT.MARGIN LEFT.MARGIN - HORT.PAGE
|
||||
SEC IS NEW LEFT MARGIN
|
||||
SBC HORT.PAGE
|
||||
LIMITM JSR SET.MARGIN SET NEW LEFT MARGIN
|
||||
**** RIGHT.MARGIN IS IN A REG
|
||||
LIMITR CMP POSH IF RIGHT.MARGIN <= POSH
|
||||
BEQ .1 THEN SET NEW POSH
|
||||
BCS .2 ELSE EXIT
|
||||
.1 SEC SET NEW POSH = RM-1
|
||||
SBC #1 TO KEEP THE CURSOR
|
||||
STA POSH STILL ON SCREEN
|
||||
.2 RTS
|
||||
*--------------------------------
|
||||
LN.TOGL LDA #START.COL TOGGLE LINE NUMBERS ON/OFF
|
||||
EOR LN.FLAG BY EOR WITH COL 1 POSN
|
||||
STA LN.FLAG TOGGLES BETWEEN 0 AND 6
|
||||
STA RM.ADJUST TOGGLES BETWEEN 0 AND 6
|
||||
LDA LEFT.MARGIN SET NEW LEFT MARGIN
|
||||
BNE LIMITM AND LIMIT POSH INSIDE WINDOW
|
||||
*--------------------------------
|
||||
MOVE.UP LDA POSV ARE WE ON TOP LINE
|
||||
CMP FIRST.LINE
|
||||
BNE .1 NO
|
||||
JSR FIND.LAST.PAGE GET LAST 32 LINES LENGTHS
|
||||
JMP GET.LINE AND PULL 1 LINE OFF SCROLL STACK
|
||||
.1 DEC POSV MOVE POSV UP
|
||||
INC NO.SHOW.FLAG
|
||||
RTS
|
||||
*--------------------------------
|
||||
MOVE.DN LDA POSV
|
||||
CMP MAXV ARE WE ON *EOF*
|
||||
BCS .2 YES, STAY THERE!
|
||||
CMP LAST.LINE ARE WE ON BOTTOM LINE
|
||||
BCC .1 NO SO MOVE DOWN
|
||||
JMP POP.LINE ELSE PUT LINE ON SCROLL STACK
|
||||
.1 INC POSV MOVE DOWN
|
||||
LDA POSV
|
||||
CMP MAXV IF MOVED DOWN TO *EOF*
|
||||
BNE .2 NO
|
||||
LDA LEFT.MARGIN YES, CURSOR TO LEFT
|
||||
STA POSH DONT LET IT DANGLE PAST *EOF*
|
||||
.2 INC NO.SHOW.FLAG DONT SHOW NEW SCREEN
|
||||
RTS
|
||||
*--------------------------------
|
||||
ROLL.U100 LDA ROLL.VALUE2 GET LONG SCROLL VALUE
|
||||
BNE ROLL.U
|
||||
ROLL.UP JSR GET.ROLL.VALUE GET SHORT SCROLL VALUE
|
||||
ROLL.U STA CTR PUT IN COUNTER
|
||||
.1 JSR POP.LINE PUT LINES ON SCROLL STACK
|
||||
DEC CTR UNTIL CTR GOES ZERO
|
||||
BNE .1
|
||||
RTS
|
||||
*--------------------------------
|
||||
ROLL.D100 LDA ROLL.VALUE2 GET LONG SCROLL VALUE
|
||||
BNE ROLL.D
|
||||
ROLL.DN JSR GET.ROLL.VALUE GET SHORT SCROLL VALUE
|
||||
ROLL.D SEC
|
||||
SBC #32 IS THERE AT LEAST 32 LINES
|
||||
BCC .1 NO
|
||||
PHA YES, DO BLOCKS OF 32 LINES
|
||||
LDA #32 UNTIL LESS THAN 32 TO DO
|
||||
JSR .90 ROLL DOWN 32 LINES
|
||||
PLA
|
||||
JMP ROLL.D GO TRY FOR NEXT 32 LINES
|
||||
.1 ADC #32 ADD BACK OFFSET
|
||||
BEQ .99 EXIT IF EXACTLY 32 LINES
|
||||
.90 STA CTR ROLL DOWN LINES
|
||||
JSR FIND.LAST.PAGE FIND LAST 32 LINE LENGTHS
|
||||
.91 JSR GET.LINE GET THEM FROM SCROLL STACK
|
||||
DEC CTR
|
||||
BNE .91
|
||||
.99 RTS
|
||||
*--------------------------------
|
||||
GET.ROLL.VALUE
|
||||
LDA LAST.LINE IF L-F+1 < ROLL
|
||||
SEC THEN USE L-F+1
|
||||
SBC FIRST.LINE ELSE USE ROLL
|
||||
CLC
|
||||
ADC #1
|
||||
CMP ROLL.VALUE
|
||||
BCC RTS2
|
||||
LDA ROLL.VALUE
|
||||
RTS2 RTS
|
||||
*--------------------------------
|
||||
POP.LINE LDA PP.BEG
|
||||
STA PTR1 PTR1=PP.BEG
|
||||
CMP PP.END PP.BEG<PP.END?
|
||||
LDA PP.BEG+1
|
||||
STA PTR1+1
|
||||
SBC PP.END+1
|
||||
BCS RTS2 NOT LESS
|
||||
LDA SP.END PTR2=SP.END
|
||||
STA PTR2 SP.END=SP.END+SIZE
|
||||
LDY #0
|
||||
CLC
|
||||
ADC (PTR1),Y
|
||||
STA SP.END
|
||||
LDA SP.END+1
|
||||
STA PTR2+1
|
||||
ADC #0
|
||||
STA SP.END+1
|
||||
CLC PP.BEG=PP.BEG+SIZE
|
||||
LDA (PTR1),Y
|
||||
ADC PP.BEG
|
||||
STA PP.BEG
|
||||
LDA #0
|
||||
ADC PP.BEG+1
|
||||
STA PP.BEG+1
|
||||
JMP MOVE12 MOVE LINE (PTR1) TO (PTR2)
|
||||
*--------------------------------
|
||||
GET.LINE LDY INDEX GET LN.CNT INDEX
|
||||
DEY POSITION TO PREV LINE ENTRY
|
||||
TYA
|
||||
AND #$1F MASK TO MAKE INDEX CIRCULAR
|
||||
TAY
|
||||
STY INDEX
|
||||
LDA LN.CNT,Y GET LENGTH OF LINE
|
||||
STA PTR2
|
||||
BEQ RTS2 NO MORE LINES
|
||||
LDA SP.END PTR1=SP.END-SIZE
|
||||
SEC SP.END=PTR1
|
||||
SBC PTR2
|
||||
STA SP.END
|
||||
STA PTR1
|
||||
LDA SP.END+1
|
||||
SBC #0
|
||||
STA SP.END+1
|
||||
STA PTR1+1
|
||||
LDA PP.BEG PTR2=PP.BEG-SIZE
|
||||
SEC PP.BEG=PTR2
|
||||
SBC PTR2
|
||||
STA PP.BEG
|
||||
STA PTR2
|
||||
LDA PP.BEG+1
|
||||
SBC #0
|
||||
STA PP.BEG+1
|
||||
STA PTR2+1
|
||||
*** FALL INTO MOVE12
|
||||
*--------------------------------
|
||||
MOVE12 LDY #0 GET # BYTES IN LINE
|
||||
LDA (PTR1),Y
|
||||
STA (PTR2),Y MOVE FIRST BYTE
|
||||
TAY
|
||||
DEY -1 FOR INDEXING
|
||||
.1 LDA (PTR1),Y MOVE A BYTE (PTR1) TO (PTR2)
|
||||
STA (PTR2),Y
|
||||
DEY NEXT BYTE
|
||||
BNE .1
|
||||
RTS
|
||||
*--------------------------------
|
||||
FIND.LAST.PAGE
|
||||
LDY #31 INIT INDEX
|
||||
LDA #0
|
||||
STA INDEX
|
||||
.1 STA LN.CNT,Y ZERO LN.CNT TABLE ENTRIES
|
||||
DEY
|
||||
BPL .1
|
||||
LDA SP.BEG SET PTR1=SP.BEG
|
||||
STA PTR1
|
||||
CMP SP.END SEE IF END OF SCROLL STACK
|
||||
BNE .2 NOT END
|
||||
LDA SP.BEG+1
|
||||
CMP SP.END+1
|
||||
BNE .3 NOT END
|
||||
RTS YES, END OF STACK
|
||||
.2 LDA SP.BEG+1
|
||||
.3 STA PTR1+1
|
||||
.4 LDY #0 GET LINE LENGTH
|
||||
LDA (PTR1),Y
|
||||
PHA SAVE IT
|
||||
LDY INDEX
|
||||
STA LN.CNT,Y PUT IT IN TABLE
|
||||
INY NEXT TABLE ENTRY
|
||||
TYA
|
||||
AND #$1F WRAP ARROUND
|
||||
STA INDEX SAVE INDEX
|
||||
PLA RESTORE LENGTH
|
||||
CLC
|
||||
ADC PTR1 PTR1=PTR1+LENGTH
|
||||
STA PTR1
|
||||
LDA #0
|
||||
ADC PTR1+1
|
||||
STA PTR1+1
|
||||
LDA PTR1 IF PTR1=SP.END
|
||||
CMP SP.END THEN END OF SEARCH
|
||||
BNE .4 AND TABLE HAS LAST
|
||||
LDA PTR1+1 32 LINE LENGTHS
|
||||
CMP SP.END+1
|
||||
BNE .4 SEARCH FOR MORE
|
||||
RTS END OF SEARCH
|
||||
*--------------------------------
|
||||
FIX.POSV CMP POSV
|
||||
BEQ .1 IF CURSOR POSV<=LAST LINE SHOWN
|
||||
BCS .2 NO, ITS OK
|
||||
.1 STA POSV SET NEW CURSOR POSN
|
||||
LDA LEFT.MARGIN TO *EOF* LINE
|
||||
STA POSH
|
||||
LDA POSV
|
||||
.2 RTS
|
||||
*--------------------------------
|
||||
SHOW.EOF LDA CTR POSITION VERTICALLY
|
||||
JSR MY.VTAB
|
||||
LDA #0 COLUMN 0
|
||||
JSR MY.HTAB
|
||||
LDA LN.FLAG SEE IF LINE NUMBERS ON SCREEN
|
||||
BEQ .2 NO
|
||||
.0 LDY #0
|
||||
.1 LDA #$A0 OUTPUT BLANKS FOR LINE NUMBER
|
||||
JSR MY.COUT
|
||||
INY
|
||||
CPY RM.ADJUST
|
||||
BCC .1
|
||||
.2 LDY #0
|
||||
.3 LDA Q.EOF,Y PRINT "*EOF*
|
||||
JSR MY.COUT
|
||||
INY
|
||||
CPY #5
|
||||
BCC .3
|
||||
JMP MY.CLREOP CLEAR TO END OF PAGE
|
||||
*
|
||||
Q.EOF .AS -/*EOF*/
|
||||
*--------------------------------
|
||||
SHOW.SCREEN
|
||||
LDA LEFT.MARGIN
|
||||
STA FILL.TO SET BLANK FILL LIMIT
|
||||
JSR P1.INIT
|
||||
LDY #0 SHOW BANNER ON LINE 0
|
||||
JSR BANNER
|
||||
LDA FIRST.LINE INIT FIRST DISPLAY LINE
|
||||
STA CTR
|
||||
.1 JSR P1.ENDCK
|
||||
BEQ .99 END OF PROG LINES
|
||||
.2 LDA ESC.FLAG ARE WE IN EDIT MODE?
|
||||
BEQ .4 NO
|
||||
LDA CTR
|
||||
CMP POSV IS THIS THE EDIT LINE
|
||||
BNE .4 NO
|
||||
JSR REST.WBUF YES SHOW THE SAVED WBUF
|
||||
JMP .5
|
||||
.4 JSR GET.LINE.IN.WBUF GET SOURCE CODE INTO WBUF
|
||||
.5 JSR SHOW.LINE.IN.WBUF SHOW WBUF
|
||||
JSR P1.ADD BUMP TO NEXT LINE
|
||||
INC CTR
|
||||
LDA CTR
|
||||
CMP LAST.LINE END OF SCREEN
|
||||
BCC .1 NO
|
||||
BEQ .1
|
||||
CLC
|
||||
ADC #1
|
||||
STA MAXV SET MAX = LINE 25
|
||||
BNE .7 ...ALWAYS
|
||||
.99 LDA CTR
|
||||
STA MAXV MAX IS WHERE WE ARE
|
||||
CMP LAST.LINE
|
||||
BEQ .6
|
||||
BCS .7
|
||||
.6 JSR FIX.POSV ADJUST POSV AND POSH
|
||||
JSR SHOW.EOF PUT *EOF* ON SCREEN
|
||||
.7 LDY #23 PUT BANNER ON LINE 23
|
||||
*** FALL INTO BANNER
|
||||
*--------------------------------
|
||||
BANNER LDA FORM.FLG IF FORM FLAG NOT ON
|
||||
BNE .1
|
||||
RTS JUST RETURN
|
||||
.1 STY CTR ELSE SAVE LINE
|
||||
LDA #0 PUT EOL AT WBUF END
|
||||
STA WBUF+255
|
||||
LDY #254 FILL WBUF WITH
|
||||
LDA #'. "."
|
||||
.2 STA WBUF,Y
|
||||
DEY
|
||||
CPY #START.COL-1
|
||||
BNE .2
|
||||
LDA #'+
|
||||
STA WBUF+START.COL+5-1
|
||||
LDA #9 INIT N=10-1
|
||||
.3 PHA SAVE N
|
||||
CLC
|
||||
ADC #1 LNO=N+1
|
||||
STA LNO SET NEW LINE NUM
|
||||
LDA #0
|
||||
STA LNO+1
|
||||
JSR CVRT.LNX CVRT TO ASCII DECIMAL
|
||||
PLA GET BACK N
|
||||
TAY
|
||||
LDA #'+
|
||||
STA WBUF+START.COL,Y MARK OFF +00
|
||||
CPY #254-START.COL-5
|
||||
BCS .4
|
||||
STA WBUF+START.COL+5,Y AND +05
|
||||
.4 LDA WBUF+2 MOVE 1ST DIGIT
|
||||
STA WBUF+START.COL+1,Y
|
||||
LDA WBUF+3 MOVE 2ND DIGIT
|
||||
STA WBUF+START.COL+2,Y
|
||||
LDA WBUF+4 MOVE 3RD DIGIT
|
||||
STA WBUF+START.COL+3,Y
|
||||
TYA
|
||||
ADC #10 N=N+10
|
||||
CMP #254-START.COL-5 SEE IF ALL DONE
|
||||
BCC .3 NO, BUILD MORE
|
||||
.5 LDY #START.COL-1 FILL START WITH BLANKS
|
||||
* dcj *BNE FILL.BACK AND SHOW WBUF
|
||||
*--------------------------------
|
||||
FILL.BACK JSR FILL.WBUF BACK FILL WBUF WITH BLANKS
|
||||
BEQ SHOW.LINE.IN.WBUF BA THEN SHOW WBUF
|
||||
*--------------------------------
|
||||
E.SHOW.LINE LDA POSV
|
||||
STA CTR
|
||||
*--------------------------------
|
||||
SHOW.LINE.IN.WBUF
|
||||
LDA CTR SET VERT POSN
|
||||
JSR MY.VTAB
|
||||
LDA #0
|
||||
JSR MY.HTAB START COL 0 ON SCREEN
|
||||
LDA LN.FLAG TEST LINE NUM FLAG
|
||||
BEQ .2 NO LINE NUMBERS
|
||||
LDY #0
|
||||
.1 LDA WBUF,Y SHOW COL 0 THRU START.COL-1
|
||||
BEQ .99 AS LINE NUM
|
||||
ORA #$80
|
||||
JSR MY.COUT
|
||||
INY
|
||||
CPY #START.COL
|
||||
BCC .1
|
||||
*** TYA
|
||||
*** JSR MY.HTAB
|
||||
.2 LDY LEFT.MARGIN START AT LEFT MARGIN
|
||||
.3 LDA WBUF,Y IN WBUF AND PRINT ON SCREEN
|
||||
BEQ .99 END OF WBUF
|
||||
ORA #$80
|
||||
JSR MY.COUT
|
||||
INY
|
||||
CPY RIGHT.MARGIN GO TO RIGHT MARGIN
|
||||
BCC .3
|
||||
.99 JMP MY.CLREOL ZAP TO EOL
|
||||
*--------------------------------
|
||||
FILL.WBUF LDA #$20 SET A BLANK
|
||||
.1 STA WBUF,Y FILL WBUF
|
||||
DEY UNTIL Y GOES 0
|
||||
BNE .1
|
||||
STA WBUF (DOESN'T AFFECT STATUS)
|
||||
RTS RETURN EQ STATUS
|
||||
*--------------------------------
|
||||
GET.LINE.IN.WBUF
|
||||
LDA PTR1 SRCP=PTR1
|
||||
STA SRCP
|
||||
LDA PTR1+1
|
||||
STA SRCP+1
|
||||
LDA #0
|
||||
STA RPTCNT INIT REPEAT COUNT
|
||||
STA RPTCHR
|
||||
JSR GNBI SRCP=SRCP+1
|
||||
JSR GNB GET A BYTE
|
||||
STA LNO SAVE LNO
|
||||
JSR GNB
|
||||
STA LNO+1
|
||||
LDA LN.FLAG TEST FOR LINE NUM SHOW
|
||||
BEQ .1 NO
|
||||
LDA LNO
|
||||
ORA LNO+1
|
||||
BEQ .1 BLANK LINE NUM IF=0
|
||||
JSR CVRT.LNO ELSE CONVERT IT TO ASCII
|
||||
LDX #START.COL
|
||||
BNE .3
|
||||
.1 LDX #0 NO LINE NUM
|
||||
.2 LDA #$20 SHOW BLANKS INSTEAD
|
||||
STA WBUF,X
|
||||
INX
|
||||
CPX #START.COL
|
||||
BCC .2
|
||||
.3 JSR NTKN GET A SOURCE LINE CHAR
|
||||
STA WBUF,X PUT IT IN WBUF
|
||||
INX NEXT POSN
|
||||
TAY TEST FOR END CHAR
|
||||
BNE .3
|
||||
LDA #$20 MAKE SURE WBUF IS FILLED
|
||||
DEX TO LEFT MARGIN
|
||||
.4 CPX FILL.TO WITH BLANKS
|
||||
BCS .5
|
||||
STA WBUF,X
|
||||
INX
|
||||
BNE .4 ...ALWAYS
|
||||
.5 LDA #0 THEN PUT DOWN END CODE
|
||||
STA WBUF,X
|
||||
RTS
|
||||
*--------------------------------
|
||||
CVRT.LNX LDY #0
|
||||
LDA #1
|
||||
STA CV.DIGFLG NO ZERO SUPPRESS
|
||||
BNE CVRT.L
|
||||
CVRT.LNO LDY #0 ALLOW ZERO SUPPRESS
|
||||
STY CV.DIGFLG
|
||||
CVRT.L LDX #4 5 DIGITS
|
||||
.1 LDA #$30
|
||||
.2 PHA
|
||||
SEC
|
||||
LDA LNO
|
||||
SBC DTBL,X
|
||||
PHA
|
||||
LDA LNO+1
|
||||
SBC DTBH,X
|
||||
BCC .3
|
||||
STA LNO+1
|
||||
PLA
|
||||
STA LNO
|
||||
PLA
|
||||
ADC #0
|
||||
BNE .2
|
||||
.3 PLA
|
||||
PLA
|
||||
CPX #0
|
||||
BEQ .6
|
||||
CMP #$30
|
||||
BNE .6 NON ZERO PREVENT ZERO SUPPRESS
|
||||
LDA CV.DIGFLG TEST ZERO SUP
|
||||
BNE .5 NONE
|
||||
LDA #$20 SUP ZERO WITH BLANK
|
||||
BNE .4
|
||||
.5 LDA #$30 PRINT ZERO
|
||||
.6 INC CV.DIGFLG PREVENT ZERO SUP
|
||||
.4 STA WBUF,Y STUFF DIGIT IN WBUF
|
||||
INY
|
||||
DEX
|
||||
BPL .1 GET NEXT DIGIT
|
||||
LDA #$20 PUT BLANK AT END
|
||||
STA WBUF,Y
|
||||
RTS
|
||||
DTBL .DA #1,#10,#100,#1000,#10000
|
||||
DTBH .DA /1,/10,/100,/1000,/10000
|
||||
*--------------------------------
|
||||
NTKN LDY #0
|
||||
LDA RPTCNT GET REPEAT COUNT
|
||||
BNE .3 IF >0 USE REPEAT CHAR
|
||||
LDA (SRCP),Y ELSE GET SOURCE CHAR
|
||||
BPL GNBI BUMP PTR IF NORMAL ASCII
|
||||
AND #$7F MASK HIGH BIT OF TOKEN OFF
|
||||
CMP #$40 $00-$3F IS BLANK COMPRESSION
|
||||
BCC .1 YES BLANK COMPRESSION
|
||||
JSR GNBI POSN TO NEXT BYTE
|
||||
JSR GNB GET BYTE
|
||||
STA RPTCNT USE AS REP COUNT
|
||||
LDA (SRCP),Y NEXT BYTE
|
||||
BNE .2
|
||||
.1 AND #$3F MASK COUNT
|
||||
STA RPTCNT SAVE REP COUNT
|
||||
LDA #$20 BLANK IS REP CHAR
|
||||
.2 STA RPTCHR SET REP CHAR
|
||||
JSR GNBI BUMP TO NEXT BYTE
|
||||
.3 DEC RPTCNT COUNT DOWN REP CHAR
|
||||
LDA RPTCHR RETURN REP CHAR
|
||||
RTS
|
||||
*--------------------------------
|
||||
GNB LDY #0 GET SOURCE BYTE
|
||||
LDA (SRCP),Y
|
||||
GNBI INC SRCP ADD 1 TO SRCP
|
||||
BNE .1
|
||||
INC SRCP+1
|
||||
.1 RTS
|
||||
*--------------------------------
|
||||
MAN
|
||||
SAVE usr/src/fse/fse.s.3
|
||||
LOAD usr/src/fse/fse.s
|
||||
ASM
|
|
@ -0,0 +1,112 @@
|
|||
NEW
|
||||
AUTO 3,1
|
||||
*--------------------------------
|
||||
A.YSAVE .EQ VAR.BEG-1
|
||||
A.CHR.UNDER.CURS .EQ A.YSAVE-1
|
||||
*--------------------------------
|
||||
* STANDARD VIDEO JUMP VECTORS
|
||||
* 1. READ KEYBOARD KEY CODE
|
||||
* TURNS ON CURSOR
|
||||
* GETS KEY CODE
|
||||
* TURNS OFF CURSOR
|
||||
* REG-A HAS KEY CODE SIGN BIT ON.
|
||||
* 2. HORIZONTAL TAB
|
||||
* REG-A HAS TAB 0-39
|
||||
* 3. VERTICAL TAB
|
||||
* REG-A HAS TAB 0-23
|
||||
* 4. CLEAR TO END OF LINE
|
||||
* 5. CLEAR TO END OF SCREEN
|
||||
* 6. CHARACTER OUTPUT ROUTINE
|
||||
* REG-A HAS CHAR TO OUTPUT.
|
||||
* MUST NOT SCROLL SCREEN OR
|
||||
* GO TO NEXT LINE WHEN LAST
|
||||
* CHARACTER IS PRINTED ON A LINE.
|
||||
*--------------------------------
|
||||
JMP A.RD.KBD
|
||||
JMP A.MY.HTAB
|
||||
JMP A.MY.VTAB
|
||||
JMP A.MY.CLREOL
|
||||
JMP A.MY.CLREOP
|
||||
JMP A.MY.COUT
|
||||
*--------------------------------
|
||||
A.MY.CLP LDA CTR
|
||||
JSR A.MY.VTAB
|
||||
A.MY.CLREOP JSR A.MY.CLREOL ZAP REST OF LINE
|
||||
LDA #0
|
||||
JSR A.MY.HTAB NEXT LINE ZAPPED FROM COL 0
|
||||
INC CTR BUMP COUNT TO NEXT LINE
|
||||
LDA CTR
|
||||
CMP LAST.LINE END OF PAGE?
|
||||
BCC A.MY.CLP < END
|
||||
BEQ A.MY.CLP = END
|
||||
RTS > END
|
||||
*--------------------------------
|
||||
A.MY.HTAB STA CH SET TAB VALUE
|
||||
RTS
|
||||
*--------------------------------
|
||||
A.MY.VTAB STA CV SET TAB VALUE
|
||||
JMP M.BASCALC COMPUTE NEW COUT BASE ADRS
|
||||
*--------------------------------
|
||||
A.MY.COUT STY A.YSAVE
|
||||
LDY CH
|
||||
CMP #$A0
|
||||
BCS .1 NOT CONTROL CHAR
|
||||
AND #$7F ELSE MAKE CHAR INVERSE
|
||||
.1 STA (BASEL),Y PUT CHAR ON SCREEN
|
||||
INY NEXT COLUMN
|
||||
STY CH
|
||||
LDY A.YSAVE
|
||||
RTS
|
||||
*--------------------------------
|
||||
A.MY.CLREOL LDY CH
|
||||
.1 LDA #$A0 A-REG = BLANK
|
||||
CPY SCREEN.WIDTH
|
||||
BCS .2
|
||||
JSR A.MY.COUT OUTPUT BLANKS UNTIL SCREEN WIDTH
|
||||
LDY CH
|
||||
BNE .1 ...ALWAYS
|
||||
.2 RTS
|
||||
*--------------------------------
|
||||
A.RD.KBD JSR A.CURSOR.ON TURN ON CURSOR
|
||||
.1 LDA $C000 WAIT FOR KEY
|
||||
BPL .1
|
||||
BIT $C010 KILL FLAG BY STROBE
|
||||
PHA
|
||||
JSR A.CURSOR.OFF TURN OFF CURSOR
|
||||
PLA RETURN REG-A WITH CHAR
|
||||
RTS
|
||||
*--------------------------------
|
||||
A.CURSOR.ON LDA POSV
|
||||
JSR A.MY.VTAB POSITION VERTICALLY
|
||||
LDA POSH
|
||||
SEC
|
||||
SBC LEFT.MARGIN
|
||||
CLC
|
||||
ADC RM.ADJUST
|
||||
JSR A.MY.HTAB POSITION HORIZONTALLY
|
||||
LDY CH
|
||||
LDA (BASEL),Y GET CHAR
|
||||
STA A.CHR.UNDER.CURS
|
||||
LDA ESC.FLAG
|
||||
BNE .1
|
||||
LDA #'+ PLUS CURSOR FOR CURSOR MODE
|
||||
BNE .2
|
||||
.1 LDA (BASEL),Y
|
||||
AND #$7F
|
||||
CMP #$60 IS CHAR ON SCREEN LOWER CASE
|
||||
BCC .2 NO
|
||||
AND #$DF FORCE LOWER CASE TO UPPER CASE
|
||||
.2 AND #$3F MAKE FLASHING CHAR
|
||||
ORA #$40
|
||||
STA (BASEL),Y
|
||||
RTS
|
||||
*--------------------------------
|
||||
A.CURSOR.OFF LDY CH
|
||||
LDA A.CHR.UNDER.CURS
|
||||
STA (BASEL),Y RESTORE SCREEN CHAR
|
||||
RTS
|
||||
*--------------------------------
|
||||
MAN
|
||||
SAVE usr/src/fse/fse.s.a2
|
||||
LOAD usr/src/fse/fse.s
|
||||
ASM
|
|
@ -0,0 +1,240 @@
|
|||
NEW
|
||||
AUTO 3,1
|
||||
*--------------------------------
|
||||
|
||||
D.YSAVE .EQ VAR.BEG-1
|
||||
D.CHR.UNDER.CURS .EQ D.YSAVE-1
|
||||
|
||||
*--------------------------------
|
||||
* APPLE IIE VIDEO JUMP VECTORS
|
||||
* 1. READ KEYBOARD KEY CODE
|
||||
* TURNS ON CURSOR
|
||||
* GETS KEY CODE
|
||||
* TURNS OFF CURSOR
|
||||
* REG-A HAS KEY CODE SIGN BIT ON.
|
||||
* 2. HORIZONTAL TAB
|
||||
* REG-A HAS TAB 0-79
|
||||
* 3. VERTICAL TAB
|
||||
* REG-A HAS TAB 0-23
|
||||
* 4. CLEAR TO END OF LINE
|
||||
* 5. CLEAR TO END OF SCREEN
|
||||
* 6. CHARACTER OUTPUT ROUTINE
|
||||
* REG-A HAS CHAR TO OUTPUT.
|
||||
* MUST NOT SCROLL SCREEN OR
|
||||
* GO TO NEXT LINE WHEN LAST
|
||||
* CHARACTER IS PRINTED ON A LINE.
|
||||
*--------------------------------
|
||||
|
||||
JMP D.RD.KBD
|
||||
* JMP D.MY.HTAB
|
||||
D.MY.HTAB
|
||||
|
||||
STA CH set tab value
|
||||
RTS
|
||||
|
||||
JMP D.MY.VTAB
|
||||
JMP D.MY.CLREOL
|
||||
JMP D.MY.CLREOP
|
||||
* JMP D.MY.COUT
|
||||
|
||||
*--------------------------------
|
||||
|
||||
D.MY.COUT
|
||||
|
||||
STY D.YSAVE
|
||||
PHA SAVE ORIG CHAR
|
||||
CMP #$A0 CONVERT CNTRL CHARS TO INVERSE ALPHA
|
||||
BCS .1 REG CHAR
|
||||
AND #$7F CNTRL CHAR
|
||||
* dcj *ORA #$40 makes mousetext!!!
|
||||
|
||||
.1 PHA store in-line to speed it up some
|
||||
STA D.SET80COL
|
||||
STA D.SET80VID
|
||||
STA D.SETALTCHR
|
||||
LDA CH
|
||||
LSR
|
||||
TAY
|
||||
PLA
|
||||
PHP
|
||||
SEI
|
||||
BIT D.TXTPAGE2
|
||||
BCC .2
|
||||
BIT D.TXTPAGE1
|
||||
|
||||
.2 STA (BASEL),Y
|
||||
BIT D.TXTPAGE1
|
||||
PLP
|
||||
INC CH
|
||||
PLA RESTORE ORIG CHAR
|
||||
LDY D.YSAVE
|
||||
|
||||
D.SEV RTS
|
||||
|
||||
*--------------------------------
|
||||
|
||||
D.MY.CLP
|
||||
|
||||
LDA CTR
|
||||
JSR D.MY.VTAB
|
||||
|
||||
D.MY.CLREOP
|
||||
|
||||
JSR D.MY.CLREOL ZAP REST OF LINE
|
||||
LDA #0
|
||||
JSR D.MY.HTAB NEXT LINE ZAPPED FROM COL 0
|
||||
INC CTR BUMP COUNT TO NEXT LINE
|
||||
LDA CTR
|
||||
CMP LAST.LINE END OF PAGE?
|
||||
BCC D.MY.CLP < END
|
||||
BEQ D.MY.CLP = END
|
||||
RTS > END
|
||||
|
||||
*--------------------------------
|
||||
|
||||
D.MY.VTAB STA CV SET TAB VALUE
|
||||
JMP M.BASCALC COMPUTE NEW COUT BASE ADRS
|
||||
|
||||
*--------------------------------
|
||||
|
||||
D.RD80VID .EQ $C01F
|
||||
D.TXTPAGE2 .EQ $C055
|
||||
D.TXTPAGE1 .EQ $C054
|
||||
D.SET80COL .EQ $C001
|
||||
D.SET80VID .EQ $C00D
|
||||
D.SETALTCHR .EQ $C00F
|
||||
|
||||
D.PICK CLV
|
||||
|
||||
D.SCREENIT
|
||||
|
||||
PHA
|
||||
STA D.SET80COL ENABLE 80 COL STORE
|
||||
STA D.SET80VID ENABLE 80 COL DISPLAY
|
||||
STA D.SETALTCHR ENABLE LOWER CASE
|
||||
LDA CH
|
||||
LSR CH MOD 2 FOR PAGE SELECT
|
||||
TAY CH/2 FOR INDEX
|
||||
BVS .20 GO STORE
|
||||
* 80 COL PICK
|
||||
PHP
|
||||
SEI
|
||||
LDA D.TXTPAGE2
|
||||
BCC .10
|
||||
LDA D.TXTPAGE1
|
||||
|
||||
.10 LDA (BASEL),Y GET 80 COL CHAR
|
||||
TAY
|
||||
LDA D.TXTPAGE1
|
||||
PLP
|
||||
PLA
|
||||
TYA
|
||||
PHA
|
||||
BVC .30 EXIT ALWAYS
|
||||
* 80 COL STORE
|
||||
|
||||
.20 PLA
|
||||
PHA
|
||||
PHP
|
||||
SEI
|
||||
PHA
|
||||
LDA D.TXTPAGE2
|
||||
BCC .21
|
||||
LDA D.TXTPAGE1
|
||||
|
||||
.21 PLA
|
||||
STA (BASEL),Y PUT 80 COL CHAR
|
||||
LDA D.TXTPAGE1
|
||||
PLP
|
||||
|
||||
* COMMON EXIT
|
||||
|
||||
.30 PLA
|
||||
RTS
|
||||
|
||||
*--------------------------------
|
||||
|
||||
D.MY.CLREOL
|
||||
|
||||
LDY CH
|
||||
|
||||
.1 LDA #$A0 A-REG = BLANK
|
||||
CPY SCREEN.WIDTH
|
||||
BCS .2
|
||||
JSR D.MY.COUT OUTPUT BLANKS UNTIL SCREEN WIDTH
|
||||
LDY CH
|
||||
BNE .1 ...ALWAYS
|
||||
|
||||
.2 RTS
|
||||
|
||||
*--------------------------------
|
||||
|
||||
D.RD.KBD
|
||||
|
||||
JSR D.POSN SETUP CURSOR POSN
|
||||
LDA ESC.FLAG SEE IF EDIT MODE
|
||||
BNE .20 YES IT IS
|
||||
* CURSOR MODE - CURSOR IS INVERSE "+"
|
||||
JSR D.PICK
|
||||
STA D.CHR.UNDER.CURS
|
||||
AND #$80 SAVE INV BIT
|
||||
EOR #$80+'+ FLIP IT FOR + CURSOR
|
||||
BIT D.SEV
|
||||
JSR D.SCREENIT
|
||||
|
||||
.10 LDA $C000
|
||||
BPL .10
|
||||
|
||||
.11 BIT $C010
|
||||
PHA
|
||||
LDA D.CHR.UNDER.CURS
|
||||
BIT D.SEV
|
||||
JSR D.SCREENIT
|
||||
PLA
|
||||
RTS
|
||||
|
||||
* EDIT MODE - CURSOR IS BLINKING CURRENT CHAR
|
||||
* BLINKED WITH SOFTWARE TIMING LOOP.
|
||||
|
||||
.20 JSR D.PICK
|
||||
STA D.CHR.UNDER.CURS
|
||||
|
||||
.21 JSR D.PICK TOGGLE INV FLAG
|
||||
EOR #$80
|
||||
cmp #$40
|
||||
bcc .99
|
||||
cmp #$60
|
||||
bcs .99
|
||||
and #$1F
|
||||
|
||||
.99 BIT D.SEV
|
||||
JSR D.SCREENIT
|
||||
LDY #200 LOOP 200 TIMES BEFORE FLIPPING CHAR
|
||||
|
||||
.22 LDA $C000
|
||||
BMI .11
|
||||
LDA #00
|
||||
|
||||
.23 SEC COUNT 7*256 MICRO SECS
|
||||
SBC #1
|
||||
BNE .23
|
||||
DEY
|
||||
BEQ .21 END LOOP - FLIP CHAR
|
||||
BNE .22 BA CK KEY AGAIN
|
||||
|
||||
*--------------------------------
|
||||
|
||||
D.POSN LDA POSV
|
||||
JSR D.MY.VTAB POSITION VERTICALLY
|
||||
LDA POSH
|
||||
SEC
|
||||
SBC LEFT.MARGIN
|
||||
CLC
|
||||
ADC RM.ADJUST
|
||||
JMP D.MY.HTAB POSITION HORIZONTALLY
|
||||
|
||||
*--------------------------------
|
||||
MAN
|
||||
SAVE usr/src/fse/fse.s.a2e
|
||||
LOAD usr/src/fse/fse.s
|
||||
ASM
|
|
@ -0,0 +1,479 @@
|
|||
NEW
|
||||
AUTO 3,1
|
||||
*--------------------------------
|
||||
GET.KEY JSR READ.KEY.CODE
|
||||
COMP.PTR
|
||||
LDX POSH
|
||||
STX ED.PTR
|
||||
RTS
|
||||
*--------------------------------
|
||||
EDIT.LINE LDA ESC.FLAG IS HE IN EDIT MODE
|
||||
BNE EDIT.ONE.LINE YES, GO EDIT
|
||||
LDA SPECIAL.FLG IS HE POPING INTO EDIT MODE?
|
||||
BEQ .1 NO
|
||||
STA ESC.FLAG YES SET EDIT MODE NOW
|
||||
BNE EDIT.ONE.LINE GO EDIT
|
||||
.1 LDA ONCE.FLG ONE TIME SCROLL FUNCTION
|
||||
STA ESC.FLAG
|
||||
BEQ GET.KEY NO, JUST RETURN KEY
|
||||
EDIT.ONE.LINE
|
||||
LDA #0
|
||||
STA ONCE.FLG CLEAR ONE TIME SCROLL FUNCTION
|
||||
LDA FIRST.LINE COMPUTE
|
||||
STA CTR INIT CTR
|
||||
JSR P1.INIT INIT PTR1 FOR EDIT LINE SEARCH
|
||||
.1 JSR P1.ENDCK END OF PROG?
|
||||
BNE .2 NO
|
||||
JSR E.ESC ERROR CANT EDIT *EOF*
|
||||
LDA #0 CLEAR SPECIAL FLAG
|
||||
STA SPECIAL.FLG
|
||||
BEQ GET.KEY GO GET KEY FOR SCROLL MODE
|
||||
.2 LDA CTR SEE IF FOUND EDIT LINE
|
||||
CMP POSV POSV IS THE EDIT LINE WANTED
|
||||
BEQ E.FOUND FOUND LINE TO EDIT
|
||||
JSR P1.ADD BUMP FORWARD TO THE EDIT LINE
|
||||
INC CTR BUMP POSN CTR
|
||||
BNE .1 ...ALWAYS
|
||||
E.FOUND LDA CTR
|
||||
STA SAV.CTR SAVE EDIT LINE POSN
|
||||
LDA PTR1
|
||||
STA SAV.PTR1 SAVE PTR TO IT
|
||||
LDA PTR1+1
|
||||
STA SAV.PTR1+1
|
||||
LDY #1 SAVE LINE NUMBER
|
||||
LDA (PTR1),Y
|
||||
STA SAV.LNO
|
||||
INY
|
||||
LDA (PTR1),Y
|
||||
STA SAV.LNO+1
|
||||
JSR E.GETLN GET THE LINE INTO WBUF
|
||||
* PTR1 IS PTR TO SOURCE LINE
|
||||
* WBUF HAS LINE EXPANDED
|
||||
.1 JSR E.PROCESS.KEY READ AND PROCESS A KEY
|
||||
BCC .1 NON-EXIT TYPE KEY
|
||||
LDA CHANGE.FLG DID LINE CHANGE
|
||||
BEQ .2 NO
|
||||
LDA #0 YES, CLEAR CHANGE FLAG
|
||||
STA CHANGE.FLG
|
||||
JSR E.SUBMIT.LINE SUBMIT THE LINE
|
||||
.2 LDA ESC.FLAG STILL IN EDIT MODE
|
||||
BEQ EDIT.LINE NO GO GET A KEY FOR SCROLL MODE
|
||||
JSR E.ESC CLEAR EDIT FLAG
|
||||
INC ONCE.FLG SET FLAG TO SAY WE ARE DOING
|
||||
LDA CUR.KEY 1 SCROLL MODE FUNCTION
|
||||
RTS RETURN WITH A REG = FUNCTION CODE
|
||||
*--------------------------------
|
||||
|
||||
; if skmod not installed, don't change case
|
||||
|
||||
E.SHIFT BIT SKMOD.FLG
|
||||
BPL .1
|
||||
LDA ALPHA.FLG
|
||||
EOR #$80 FLIP ALPHA LOCK FLAG
|
||||
STA ALPHA.FLG
|
||||
.1 CLC
|
||||
RTS
|
||||
*--------------------------------
|
||||
READ.KEY.CODE
|
||||
JSR MY.RD.KBD GET KEYBOARD CHAR
|
||||
AND #$7F DROP SIGN BIT
|
||||
PHA
|
||||
LDA ESC.FLAG IS HE IN EDIT MODE?
|
||||
BNE .50 YES, SO ALLOW CASE CHANGE
|
||||
PLA NO, SKIP CASE CHANGE
|
||||
bpl .60 BA
|
||||
.50 PLA
|
||||
BIT ALPHA.FLG LOWER CASE
|
||||
BPL .60 NO, UPPER CASE
|
||||
BIT SKMOD.FLG SHFT KEY MOD?
|
||||
BPL .54 NO, SO DONT LOOK AT IT
|
||||
BIT $C063 IS SHIFT KEY DOWN?
|
||||
BMI .54 NO, FORCE LOWER CASE
|
||||
* FIX PROBLEM SHIFT CHARACTERS THAT MUST BE UPPER CASE
|
||||
CMP #'^ ^ -> N
|
||||
BNE .51
|
||||
LDA #'N
|
||||
.51 CMP #'@ @ -> P
|
||||
BNE .52
|
||||
LDA #'P
|
||||
.52 CMP #'] ] -> M
|
||||
BNE .53
|
||||
LDA #'M
|
||||
.53 BNE .60 OTHERWISE USE UPERCASE VALUE
|
||||
* CK AND CHANGE CASE
|
||||
.54 CMP #'A CHANGE UPPER CASE
|
||||
BCC .60 ALPHA CHARS TO LOWER
|
||||
CMP #'Z+1 CASE.
|
||||
BCS .60
|
||||
ORA #$20
|
||||
* PROCESS OTHER SHIFT KEYS
|
||||
.60 BIT SKMOD.FLG
|
||||
BPL .2 NOT ALLOWED
|
||||
BIT $C063 IS SW ON
|
||||
BMI .2 NOPE
|
||||
CMP #'H-$40 CHANGE <- TO ^"K"
|
||||
BNE .10
|
||||
LDA #'K-$40
|
||||
.10 CMP #'U-$40 CHANGE -> TO ^"J"
|
||||
BNE .11
|
||||
LDA #'J-$40
|
||||
.11 PHA
|
||||
LDA ESC.FLAG IF NOT IN EDIT MODE
|
||||
BNE .1 EDIT MODE, NO CAN DO!
|
||||
PLA
|
||||
CMP #'I CHANGE SHIFT I TO "2"
|
||||
BNE .12
|
||||
LDA #'2
|
||||
.12 CMP #'] CHANGE SHIFT M TO "1"
|
||||
BNE .2
|
||||
LDA #'1
|
||||
PHA
|
||||
.1 PLA
|
||||
.2 STA CUR.KEY
|
||||
RTS
|
||||
*--------------------------------
|
||||
P1.INIT LDA PP.BEG SET PTR1 TO PROG START
|
||||
STA PTR1
|
||||
LDA PP.BEG+1
|
||||
STA PTR1+1
|
||||
RTS
|
||||
*--------------------------------
|
||||
P1.ENDCK LDA PTR1 CK FOR PTR1=END OF PROG
|
||||
CMP PP.END
|
||||
BNE .1
|
||||
LDA PTR1+1
|
||||
CMP PP.END+1
|
||||
.1 RTS
|
||||
*--------------------------------
|
||||
P1.ADD LDY #0 BUMP UP TO NEXT PROG LINE
|
||||
LDA (PTR1),Y
|
||||
CLC
|
||||
ADC PTR1
|
||||
STA PTR1
|
||||
BCC .1
|
||||
INC PTR1+1
|
||||
.1 RTS
|
||||
*--------------------------------
|
||||
|
||||
E.SET.TAB
|
||||
|
||||
TXA
|
||||
SEC
|
||||
SBC #START.COL-1 CONVERT POSH TO TAB VALUES
|
||||
TAX
|
||||
LDY #0
|
||||
.1 CMP TAB.TBL,Y SEARCH TAB TABLE
|
||||
BEQ .10 MATCH EXACTLY MEANS DELETE
|
||||
BCC .20 IF POSH<TAB(I) INSERT BEFORE TAB(I)
|
||||
INY
|
||||
CPY #SZ.TAB.TBL-1
|
||||
BCC .1
|
||||
* APPEND TAB ON END
|
||||
LDA TAB.TBL+SZ.TAB.TBL-1
|
||||
BNE .99 FULL TABLE
|
||||
.2 LDA TAB.TBL,Y LOOK BACKWARDS FOR NON-ZERO ENTRY
|
||||
BNE .3 FOUND IT
|
||||
DEY
|
||||
BPL .2
|
||||
TXA FIRST ENTRY IS ZERO
|
||||
STA TAB.TBL PUT NEW TAB THERE
|
||||
BNE .90
|
||||
.3 TXA PUT INTO NEXT ENTRY
|
||||
STA TAB.TBL+1,Y THAT WAS THE LAST ZERO ENTRY
|
||||
BNE .90 ...ALWAYS
|
||||
* DELETE TAB FROM TABLE
|
||||
.10 LDA TAB.TBL+1,Y GET NEXT ENTRY
|
||||
STA TAB.TBL,Y PUT INTO CUR ENTRY
|
||||
INY
|
||||
CPY #SZ.TAB.TBL-1 SEE IF END OF TABLE
|
||||
BCC .10
|
||||
LDA #0 ZAP LAST ENTRY IN TABLE
|
||||
STA TAB.TBL+SZ.TAB.TBL-1
|
||||
BEQ .90 ...ALWAYS
|
||||
* INSERT TAB IN TABLE
|
||||
.20 PHA SAVE TAB
|
||||
LDA TAB.TBL,Y GET CUR ENTRY
|
||||
TAX SAVE IT
|
||||
PLA GET NEW TAB
|
||||
STA TAB.TBL,Y PLUG IT IN
|
||||
TXA RECOVER SAVED TAB
|
||||
INY
|
||||
CPY #SZ.TAB.TBL-1 DO ANOTHER INSERT
|
||||
BCC .20 IF NOT END OF TABLE
|
||||
BCS .90 ...ALWAYS
|
||||
|
||||
.99 JSR M.BELL
|
||||
|
||||
.90 CLC
|
||||
RTS
|
||||
*--------------------------------
|
||||
E.PROCESS.KEY LDA SPECIAL.FLG CK FOR SPECIAL EDIT KEY
|
||||
BEQ E.PK1 NOT SPECIAL
|
||||
LDA #0 CLEAR SPECIAL
|
||||
STA SPECIAL.FLG EDIT FLAG
|
||||
JSR COMP.PTR copy POSH into ED.PTR using X-reg
|
||||
LDA CUR.KEY GET EDIT KEY
|
||||
JMP E.PK2 'JMP' SINCE ^@ = $00
|
||||
E.PK1 JSR GET.KEY
|
||||
E.PK2 CMP #$20 IS IT CONTROL CHAR
|
||||
BCC E.CNTRL YES
|
||||
STA CHANGE.FLG NO, SET CHANGE FLAG AND TYPE OVER
|
||||
STA WBUF,X CURSOR CHAR
|
||||
JSR E.SHOW.LINE DISPLAY LINE TO SHOW CHANGE
|
||||
LDX ED.PTR GET POSITION
|
||||
E.RIT CPX #254 END OF MAX LINE?
|
||||
BCS E.RIT2 YES
|
||||
JSR MOVE.RT NO, MOVE RIGHT 1 COLUMN
|
||||
E.RIT1 JSR SHOW.ND SHOW SCREEN IF NECESSARY
|
||||
E.RIT2 CLC
|
||||
RTS
|
||||
*--------------------------------
|
||||
E.BKSP JSR MOVE.LF MOVE LEFT TO PROCESS A BACKSPACE
|
||||
JMP E.RIT1 GO SHOW SCREEN IF NEEDED
|
||||
*--------------------------------
|
||||
E.CNTRL LDY #0 SEARCH EDIT MODE FUNCTION TABLE
|
||||
|
||||
.1 CMP E.TBL,Y COMPARE KEY TO TABLE
|
||||
BEQ .2 FOUND KEY
|
||||
INY
|
||||
INY
|
||||
INY
|
||||
CPY #E.TBLSZ
|
||||
BCC .1
|
||||
JSR M.BELL NOT IN TABLE ERROR
|
||||
JMP E.PK1
|
||||
.2 LDA E.TBL+2,Y EXECUTE THE FUNCTION
|
||||
PHA
|
||||
LDA E.TBL+1,Y
|
||||
PHA
|
||||
RTS
|
||||
*--------------------------------
|
||||
E.END LDX #254 SEARCH FROM HERE
|
||||
LDA #$20 BLANK CHAR
|
||||
.1 CMP WBUF,X IS IT BLANK
|
||||
BNE .2 NO FOUND END CHAR
|
||||
DEX
|
||||
CPX #START.COL-1 DONT PASS COLUMN 1
|
||||
BNE .1
|
||||
.2 CPX #254 IF FULL LINE DONT PASS EOL
|
||||
BEQ .3 YES ON EOL
|
||||
INX NEXT CHAR IS END
|
||||
.3 TXA THIS IS POSITION, LOCATE IT IN A WINDOW
|
||||
**** FALL INTO LOC.WNDW ****
|
||||
*--------------------------------
|
||||
LOC.WNDW STA POSH IF LM>=POSH<RM
|
||||
CMP LEFT.MARGIN THEN STAY ON CURRENT WINDOW
|
||||
BCC .0 OTHERWISE HUNT FOR WINDOW
|
||||
CMP RIGHT.MARGIN
|
||||
BCS .0
|
||||
RTS STAY ON WINDOW, RTN CRY CLR
|
||||
.0 LDA #START.COL
|
||||
.1 JSR SET.MARGIN
|
||||
LDA LEFT.MARGIN
|
||||
CLC
|
||||
ADC HORT.PAGE
|
||||
CMP POSH
|
||||
BCS .2 FOUND THE WINDOW
|
||||
CMP RT.FENCEL
|
||||
BCC .1 NOT TOO FAR YET
|
||||
LDA RT.FENCEL THIS IS MAX LEFT MARGIN
|
||||
CMP LEFT.MARGIN UNLESS IT WAS BEFORE
|
||||
BNE .1 NO, TRY NEXT LEFT MARGIN
|
||||
LDA RIGHT.MARGIN BACK POSH TO THE
|
||||
JSR LIMITR RIGHT MARGIN
|
||||
.2 JMP E.RIT1
|
||||
*--------------------------------
|
||||
E.TAB TXA
|
||||
SEC
|
||||
SBC #START.COL-1 CONVERT POSH TO TAB VALUES
|
||||
LDY #0
|
||||
.1 CMP TAB.TBL,Y SEARCH TAB TABLE
|
||||
BCC .2 IF POSH<TAB(I) THEN POSITION TO TAB(I)
|
||||
INY
|
||||
CPY #SZ.TAB.TBL-1
|
||||
BCC .1
|
||||
LDA TAB.TBL USE FIRST TAB IF PAST LAST TAB
|
||||
BNE E.TAB.BUMP WRAP ARROUND TABS!
|
||||
CLC IF NO FIRST TAB, DO NOTHING
|
||||
RTS
|
||||
.2 LDA TAB.TBL,Y GET NEW POSH FROM TAB TABLE
|
||||
E.TAB.BUMP CLC
|
||||
ADC #START.COL-1 CONVERT TO REAL POSITION
|
||||
BNE LOC.WNDW LOCATE IT IN A WINDOW
|
||||
*--------------------------------
|
||||
E.COPY1 LDA ED.PTR
|
||||
SEC
|
||||
SBC #START.COL-1 CONVERT POSH TO TAB VALUE
|
||||
TAX
|
||||
LDY #0
|
||||
.1 CMP TAB.TBL,Y SEARCH TAB TABLE
|
||||
BCC .2 AHA, FOUND POSITION TO COPY TO!
|
||||
INY
|
||||
CPY #SZ.TAB.TBL-1
|
||||
BCC .1
|
||||
LDA #248 COPY TO EOL IF PAST LAST TAB
|
||||
BCS .3 ...ALWAYS
|
||||
.2 LDA TAB.TBL,Y END POINT
|
||||
.3 STA ED.KEY NEW CURSOR POSN
|
||||
.4 LDA WBUF+START.COL-1,X COPY FROM WBUF
|
||||
STA $F00+START.COL-1,X INTO SAVED WBUF
|
||||
INX
|
||||
CPX ED.KEY UNTIL WE REACH THE CURRENT
|
||||
BCC .4 POSITION
|
||||
TXA THIS IS NEW POSN
|
||||
PHA SAVE POSN
|
||||
JSR REST.WBUF RESTORE WBUF
|
||||
JSR E.SHOW.LINE DISPLAY IT
|
||||
PLA GET SAVED POSN
|
||||
STA CHANGE.FLG SET CHANGE FLAG
|
||||
BNE E.TAB.BUMP ...ALWAYS
|
||||
*--------------------------------
|
||||
E.COPY JSR SAVE.WBUF SAVE WBUF DATA
|
||||
LDA POSV
|
||||
SEC
|
||||
SBC FIRST.LINE
|
||||
BNE .1
|
||||
LDY #255 IF ON FIRST LINE THEN PREV LINE=BLANKS
|
||||
JSR FILL.WBUF
|
||||
JMP E.COPY1
|
||||
.1 STA CTR LOCATE AND GET PREV LINE IN WBUF
|
||||
JSR P1.INIT
|
||||
.2 DEC CTR
|
||||
BEQ .3
|
||||
JSR P1.ADD
|
||||
JMP .2
|
||||
.3 LDA #255 SET BLANK FILL POINT
|
||||
STA FILL.TO
|
||||
JSR GET.LINE.IN.WBUF
|
||||
JMP E.COPY1
|
||||
*--------------------------------
|
||||
E.RESTORE
|
||||
LDA SAV.PTR1 RESTORE LINE FROM PROG
|
||||
STA PTR1 THROW AWAY EDIT CHANGES
|
||||
LDA SAV.PTR1+1
|
||||
STA PTR1+1
|
||||
JSR E.GETLN GET CUR LINE
|
||||
JSR E.SHOW.LINE DISPLAY NEW LINE
|
||||
*** FALL INTO E.BEG ***
|
||||
*--------------------------------
|
||||
E.BEG LDA #START.COL SET POSN TO BEGINING OF LINE
|
||||
STA POSH
|
||||
CMP LEFT.MARGIN ARE WE ALREADY ON RIGHT WINDOW?
|
||||
BEQ E.SL YES
|
||||
JSR SET.MARGIN NO SET NEW MARGIN
|
||||
JSR SHOW.ND AND SHOW IT
|
||||
E.SL JSR E.SHOW.LINE SHOW CUR EDIT LINE
|
||||
CLC
|
||||
RTS
|
||||
*--------------------------------
|
||||
E.DEL LDX #1 SET CHANGE FLAG
|
||||
STX CHANGE.FLG
|
||||
LDX ED.PTR GET POSN
|
||||
.1 LDA WBUF,X CK END OF LINE
|
||||
BEQ E.SL YES END
|
||||
LDA WBUF+1,X GET NEXT CHAR
|
||||
BEQ .2 END OF LINE
|
||||
STA WBUF,X PUT OVER PREV CHAR
|
||||
INX NEXT COL SHIFT
|
||||
BNE .1 ..ALWAYS
|
||||
.2 LDA #$20 PUT BLANK AT LAST
|
||||
STA WBUF,X CHAR POSN
|
||||
BNE E.SL ...ALWAYS
|
||||
*--------------------------------
|
||||
E.ZAP LDA #$20 BLANK CHAR
|
||||
STA CHANGE.FLG SET CHANGE FLAG
|
||||
.1 STA WBUF,X BLANK OUT FROM CUR POSN
|
||||
INX TO EOL
|
||||
CPX #255
|
||||
BNE .1 NEXT COLUMN
|
||||
BEQ E.SL ...ALWAYS (GO SHOW LINE)
|
||||
*--------------------------------
|
||||
E.FIND JSR GET.KEY GET KEY TO FIND
|
||||
STA ED.KEY SAVE IT
|
||||
.1 INX NEXT COLUMN
|
||||
CPX #255 END OF WBUF?
|
||||
BEQ .2 YES
|
||||
CMP WBUF,X CK FOR KEY
|
||||
BNE .1 NOT THERE
|
||||
TXA
|
||||
JSR LOC.WNDW GET CORRECT WINDOW
|
||||
JSR GET.KEY GET KEY TO FIND
|
||||
CMP ED.KEY IS IT SAME
|
||||
BEQ .1 NO, TREAT AS EDIT KEY
|
||||
JMP E.PK2
|
||||
.2 JSR M.BELL
|
||||
CLC
|
||||
RTS
|
||||
*--------------------------------
|
||||
E.OVR JSR GET.KEY GET KEY CODE
|
||||
CMP #0 CANT INSERT A CNTRL @
|
||||
BNE E.INS1 ...NOT CNTRL @
|
||||
E.INS JSR GET.KEY GET A KEY
|
||||
CMP #$20 EXIT INSRT ON ANY CONTROL CHAR
|
||||
BCS E.INS1 NOT CONTROL
|
||||
JMP E.CNTRL YES CONTROL
|
||||
E.INS1 LDX #1
|
||||
STX CHANGE.FLG SET CHANGE FLAG
|
||||
LDX ED.PTR GET CUR POSN
|
||||
.1 CPX #254 ARE WE ON EOL?
|
||||
BCS .2 YES
|
||||
PHA SAVE NEW KEY
|
||||
LDA WBUF,X GET CUR CHAR
|
||||
TAY SAVE IT
|
||||
PLA RECOVER NEW KEY
|
||||
STA WBUF,X PUT INTO CUR POSN
|
||||
INX NEXT COLUMN
|
||||
TYA NEW KEY = CUR KEY
|
||||
BNE .1 AGAIN IF NOT EOL
|
||||
.2 STA WBUF,X TYPE OVER IF ON EOL
|
||||
LDA #0
|
||||
STA WBUF+255 MAKE SURE EOL ON END
|
||||
JSR E.SHOW.LINE SHOW LINE
|
||||
JSR MOVE.RT MOVE RIGHT 1 COLUMN
|
||||
JSR SHOW.ND SHOW SCREEN IF NECESSARY
|
||||
JMP E.INS GO DO ANOTHER CHAR INSERT
|
||||
*--------------------------------
|
||||
E.ESC LDA #0 SET SCROLL MODE
|
||||
STA ESC.FLAG
|
||||
E.CTRL SEC
|
||||
RTS
|
||||
*--------------------------------
|
||||
E.GETLN LDA LN.FLAG SAVE OLD LN.FLAG
|
||||
PHA
|
||||
LDA #0
|
||||
STA CHANGE.FLG INIT TO FALSE
|
||||
LDA #255
|
||||
STA FILL.TO COL TO FILL TO
|
||||
LDA #START.COL
|
||||
STA LN.FLAG FORCE LINE NUM IN WBUF
|
||||
JSR GET.LINE.IN.WBUF
|
||||
PLA
|
||||
STA LN.FLAG RESTORE LN.FLAG
|
||||
RTS
|
||||
*--------------------------------
|
||||
SAVE.WBUF LDY #0 SAVE 256 BYTE WBUF
|
||||
.1 LDA WBUF,Y
|
||||
STA $F00,Y
|
||||
INY
|
||||
BNE .1
|
||||
RTS
|
||||
*--------------------------------
|
||||
SHOW.ND LDY #0
|
||||
LDA NO.SHOW.FLAG
|
||||
BEQ .1
|
||||
STY NO.SHOW.FLAG
|
||||
RTS
|
||||
.1 JSR SAVE.WBUF SAVE WBUF SINCE
|
||||
* SHOW.SCREEN USES IT
|
||||
JSR SHOW.SCREEN
|
||||
REST.WBUF LDY #0
|
||||
.1 LDA $F00,Y RECOVER SAVED WBUF
|
||||
STA WBUF,Y
|
||||
INY
|
||||
BNE .1
|
||||
RTS
|
||||
*--------------------------------
|
||||
MAN
|
||||
SAVE usr/src/fse/fse.s.line
|
||||
LOAD usr/src/fse/fse.s
|
||||
ASM
|
|
@ -0,0 +1,151 @@
|
|||
NEW
|
||||
AUTO 3,1
|
||||
*--------------------------------
|
||||
C.TMP1 .EQ VAR.BEG-1
|
||||
C.TMP2 .EQ C.TMP1-1
|
||||
C.TMP3 .EQ C.TMP2-1
|
||||
C.TMP4 .EQ C.TMP3-1
|
||||
.DO C.TMP4<$300
|
||||
*** VARS<$300
|
||||
.FIN
|
||||
*--------------------------------
|
||||
* STANDARD VIDEO JUMP VECTORS
|
||||
* 1. READ KEYBOARD KEY CODE
|
||||
* TURNS ON CURSOR
|
||||
* GETS KEY CODE
|
||||
* TURNS OFF CURSOR
|
||||
* REG-A HAS KEY CODE SIGN BIT ON.
|
||||
* 2. HORIZONTAL TAB
|
||||
* REG-A HAS TAB 0-79
|
||||
* 3. VERTICAL TAB
|
||||
* REG-A HAS TAB 0-23
|
||||
* 4. CLEAR TO END OF LINE
|
||||
* 5. CLEAR TO END OF SCREEN
|
||||
* 6. CHARACTER OUTPUT ROUTINE
|
||||
* REG-A HAS CHAR TO OUTPUT.
|
||||
* MUST NOT SCROLL SCREEN OR
|
||||
* GO TO NEXT LINE WHEN LAST
|
||||
* CHARACTER IS PRINTED ON A LINE.
|
||||
*--------------------------------
|
||||
JMP C.RD.KBD
|
||||
JMP C.MY.HTAB
|
||||
JMP C.MY.VTAB
|
||||
JMP C.MY.CLREOL
|
||||
JMP C.MY.CLREOP
|
||||
JMP C.MY.COUT
|
||||
*--------------------------------
|
||||
C.MY.CLP LDA CTR
|
||||
JSR C.MY.VTAB
|
||||
C.MY.CLREOP JSR C.MY.CLREOL CLEAR TO END OF LINE
|
||||
LDA #0 START COL 0 FOR NEXT LINE
|
||||
JSR C.MY.HTAB
|
||||
INC CTR BUMP TO NEXT LINE
|
||||
LDA CTR
|
||||
CMP LAST.LINE CHK FOR END
|
||||
BCC C.MY.CLP < END
|
||||
BEQ C.MY.CLP = END
|
||||
RTS > END
|
||||
*--------------------------------
|
||||
C.MY.HTAB STA C.STB.COL SET HORIZ. POSN
|
||||
LSR
|
||||
STA CH CH = POSN/2
|
||||
RTS
|
||||
*--------------------------------
|
||||
C.MY.VTAB STA CV SET VERT POSN
|
||||
RTS
|
||||
*--------------------------------
|
||||
C.MY.COUT STY C.TMP1 SAVE Y REG
|
||||
AND #$7F MASK OFF HIGH BIT
|
||||
PHA
|
||||
LDA CV GET VERT POSN
|
||||
CLC
|
||||
ADC C.STB.TOPADR
|
||||
LDY #18
|
||||
STY C.CRTC CRTC = REG 18
|
||||
STA C.CRTC+1 SET LINE POSN
|
||||
LDA C.STB.COL
|
||||
INY
|
||||
STY C.CRTC CRTC = REG 19
|
||||
STA C.CRTC+1 SET COL POSN
|
||||
LDA C.STB.TOPADR
|
||||
LDY #12
|
||||
STY C.CRTC CRTC = REG 12
|
||||
STA C.CRTC+1 SET SCROLL POSN
|
||||
LDY #$1F
|
||||
STY C.CRTC POINT TO DUMMY REG
|
||||
PLA
|
||||
CMP #$20
|
||||
BCS .1 NON CONTROL CHAR
|
||||
ORA #$C0 SET INV BIT, MAKE LETR
|
||||
.1 BIT C.CRTC WAIT FOR RIGHT TIME
|
||||
BPL .1
|
||||
STA C.CRTC+3 PUT CHAR IN LATCH
|
||||
INC C.STB.COL NEXT COLUMN
|
||||
LDY C.TMP1 RESTORE Y REG
|
||||
RTS
|
||||
*--------------------------------
|
||||
C.MY.CLREOL STY C.TMP3 SAVE Y REG
|
||||
STX C.TMP4 SAVE X REG
|
||||
.1 LDY C.STB.COL GET COL POSN
|
||||
CPY SCREEN.WIDTH END OF LINE
|
||||
BCS .2 YES
|
||||
LDA #$A0 A REG = BLANK
|
||||
JSR C.MY.COUT PRINT IT
|
||||
JMP .1 NEXT COLUMN
|
||||
.2 LDY C.TMP3 RESTORE Y REG
|
||||
LDX C.TMP4 RESTORE X REG
|
||||
RTS
|
||||
*--------------------------------
|
||||
* STB80 IO ROUTINES
|
||||
*--------------------------------
|
||||
C.CRTC .EQ $C0B0 CRT CONTROLLER CHIP
|
||||
C.STB.TOPADR .EQ $57B SCROLL LINE START
|
||||
C.STB.COL .EQ $5FB COLUMN POSN
|
||||
*--------------------------------
|
||||
C.RD.KBD JSR C.CURSOR.ON TURN ON CURSOR
|
||||
.1 LDA $C000 WAIT FOR KEY
|
||||
BPL .1
|
||||
BIT $C010 STROBE KBD TO KILL FLAG BIT
|
||||
PHA SAVE CHAR
|
||||
JSR C.CURSOR.OFF TURN OFF CURSOR
|
||||
PLA RESTORE CHAR
|
||||
RTS
|
||||
*--------------------------------
|
||||
C.CURSOR.ON LDA POSV POSITION VERTICALLY
|
||||
JSR C.MY.VTAB
|
||||
LDA POSH
|
||||
SEC
|
||||
SBC LEFT.MARGIN
|
||||
CLC
|
||||
ADC RM.ADJUST
|
||||
JSR C.MY.HTAB POSITION HORIZONTALLY
|
||||
LDA ESC.FLAG TEST ESC MODE
|
||||
BEQ .1 IT IS IN SCROLL MODE
|
||||
LDA #$67 EDIT MODE GETS LITTLE CURSOR
|
||||
BNE .2 ...ALWAYS
|
||||
.1 LDA #$C0 SCROLL MODE GETS NORMAL CURSOR
|
||||
.2 PHA
|
||||
LDA #$0A
|
||||
STA C.CRTC CTRC = REG 10
|
||||
PLA
|
||||
STA C.CRTC+1 SET CURSOR START DATA
|
||||
C.WRIT LDA #$0F
|
||||
STA C.CRTC CTRC = REG 15
|
||||
LDA C.STB.COL
|
||||
STA C.CRTC+1 SET CURSOR COLUMN POSN
|
||||
LDA #$0E
|
||||
STA C.CRTC CRTC = REG 14
|
||||
LDA CV
|
||||
CLC
|
||||
ADC C.STB.TOPADR
|
||||
STA C.CRTC+1 SET CURSOR LINE POSN
|
||||
RTS
|
||||
*--------------------------------
|
||||
C.CURSOR.OFF LDA #24 LINE 24 IS NON DISPLAYABLE
|
||||
JSR C.MY.VTAB TAB TO THERE
|
||||
JMP C.WRIT AND POSN CURSOR THERE
|
||||
*--------------------------------
|
||||
MAN
|
||||
SAVE usr/src/fse/fse.s.stb80
|
||||
LOAD usr/src/fse/fse.s
|
||||
ASM
|
|
@ -0,0 +1,234 @@
|
|||
NEW
|
||||
AUTO 3,1
|
||||
*--------------------------------
|
||||
E.SUBMIT.LINE JSR TRUNCATE TRUNCATE BLANKS FROM END
|
||||
JSR PACK.LINE PACK INTO SC FORMAT
|
||||
JMP INSERT.LINE PUT INTO SOURCE PROG
|
||||
*--------------------------------
|
||||
TRUNCATE LDY #254
|
||||
.1 LDA WBUF,Y KILL ANY TRAILING BLANKS
|
||||
CMP #$20
|
||||
BNE .2
|
||||
LDA #0
|
||||
STA WBUF,Y
|
||||
DEY
|
||||
CPY #4
|
||||
BNE .1
|
||||
.2 RTS
|
||||
*--------------------------------
|
||||
PACK.LINE LDA #0
|
||||
STA RPTCNT
|
||||
STA RPTCHR
|
||||
TAX
|
||||
LDY #START.COL START LOOKING AT LINE HERE
|
||||
.1 LDA WBUF,Y GET A CHAR
|
||||
AND #$7F MASK HIGH BIT OFF
|
||||
BEQ .4 END OF LINE CODE
|
||||
CMP RPTCHR SEE IF=REPEAT CHAR
|
||||
BNE .3 NO
|
||||
.2 INC RPTCNT BUMP REPEAT COUNT
|
||||
INY NEXT CHAR
|
||||
BNE .1 ...ALWAYS
|
||||
.3 JSR PROCESS.REPEAT.COUNT
|
||||
LDA WBUF,Y
|
||||
AND #$7F
|
||||
STA RPTCHR
|
||||
BNE .2 ...ALWAYS
|
||||
.4 JSR PROCESS.REPEAT.COUNT
|
||||
LDA #0
|
||||
STA WBUF,X
|
||||
INX
|
||||
TXA
|
||||
TAY
|
||||
.41 LDA WBUF-1,Y
|
||||
STA WBUF+2,Y
|
||||
DEY
|
||||
BNE .41
|
||||
INX
|
||||
INX
|
||||
INX
|
||||
.5 STX WBUF
|
||||
LDA SAV.LNO
|
||||
STA WBUF+1
|
||||
LDA SAV.LNO+1
|
||||
STA WBUF+2
|
||||
RTS
|
||||
*--------------------------------
|
||||
PROCESS.REPEAT.COUNT
|
||||
LDA RPTCNT ANY REPEAT CHARS
|
||||
BEQ .2 NO
|
||||
LDA RPTCHR GET REPEAT CHAR
|
||||
CMP #$20 WAS IT BLANK?
|
||||
BEQ .4 YES, BLANK IS SPECIAL
|
||||
STA WBUF+2,X NO, STORE CHAR
|
||||
LDA RPTCNT GET COUNT
|
||||
CMP #4 MUST BE 4 OR MORE
|
||||
BCC .3 NOT ENOUGH
|
||||
STA WBUF+1,X STORE COUNT
|
||||
LDA #$C0 STORE REPEAT TOKEN
|
||||
STA WBUF,X
|
||||
INX
|
||||
INX COUNT 3 BYTES
|
||||
.1 LDA #0 ZERO REPEAT COUNT
|
||||
STA RPTCNT
|
||||
INX
|
||||
.2 RTS
|
||||
.3 LDA RPTCHR
|
||||
STA WBUF,X
|
||||
INX
|
||||
DEC RPTCNT
|
||||
BNE .3
|
||||
RTS
|
||||
.4 LDA RPTCNT TAKE BLANK COUNT
|
||||
CMP #$40 CK < 64
|
||||
BCC .5 YES
|
||||
SBC #$3F DECREMENT MAX COUNT
|
||||
STA RPTCNT
|
||||
LDA #$BF OUTPUT MAX COUNT
|
||||
STA WBUF,X IN WBUF
|
||||
INX THEN GO BACK FOR MORE
|
||||
BNE .4 ...ALWAYS
|
||||
.5 ORA #$80 SET HIGH BIT
|
||||
STA WBUF,X STORE BLANK COUNT
|
||||
BNE .1 ...ALWAYS
|
||||
*--------------------------------
|
||||
INSERT.LINE LDA SAV.PTR1
|
||||
STA PTR1
|
||||
STA PTR2
|
||||
LDA SAV.PTR1+1
|
||||
STA PTR1+1
|
||||
STA PTR2+1
|
||||
JSR P1.ADD P1=NEXT, P2=CUR
|
||||
LDA PTR1
|
||||
SEC
|
||||
SBC PTR2
|
||||
SEC
|
||||
SBC WBUF
|
||||
BEQ .11 SAME SIZE
|
||||
STA MDIST
|
||||
LDA #0
|
||||
SBC #0
|
||||
STA MDIST+1
|
||||
BCC .6 LINE IS BIGGER
|
||||
*--------------------------------
|
||||
* LINE IS SMALLER
|
||||
*--------------------------------
|
||||
CLC
|
||||
LDA PTR2
|
||||
ADC MDIST
|
||||
STA A4L
|
||||
LDA PTR2+1
|
||||
ADC MDIST+1
|
||||
STA A4H
|
||||
JSR MOVE.TEXT.UP
|
||||
JMP .11
|
||||
*--------------------------------
|
||||
* LINE IS BIGGER
|
||||
*--------------------------------
|
||||
.6 CLC
|
||||
LDA PP.BEG
|
||||
ADC MDIST
|
||||
STA A4L
|
||||
LDA PP.BEG+1
|
||||
ADC MDIST+1
|
||||
STA A4H
|
||||
LDA A4L
|
||||
CMP SP.END
|
||||
LDA A4H
|
||||
SBC SP.END+1
|
||||
BCC .30 ERROR NO ROOM
|
||||
JSR MOVE.TEXT.DOWN
|
||||
*--------------------------------
|
||||
* MOVE LINE INTO HOLE
|
||||
*--------------------------------
|
||||
.11 LDX WBUF
|
||||
LDY #0
|
||||
.12 LDA PTR1
|
||||
BNE .13
|
||||
DEC PTR1+1
|
||||
.13 DEC PTR1
|
||||
DEX
|
||||
LDA WBUF,X
|
||||
STA (PTR1),Y
|
||||
TXA
|
||||
BNE .12
|
||||
.14 RTS
|
||||
*--------------------------------
|
||||
.30 JMP M.BELL NO ROOM
|
||||
*--------------------------------
|
||||
MOVE.TEXT.UP JSR COMPUTE.BLOCK.SIZE
|
||||
CLC
|
||||
LDA PP.BEG
|
||||
ADC MDIST
|
||||
STA PP.BEG
|
||||
LDA PP.BEG+1
|
||||
ADC MDIST+1
|
||||
STA PP.BEG+1
|
||||
LDY #0
|
||||
BEQ .3 ...ALWAYS
|
||||
* MOVE WHOLE BLOCK
|
||||
.1 LDA (PTR2),Y
|
||||
STA (A4L),Y
|
||||
.2 DEY
|
||||
BNE .1
|
||||
LDA (PTR2),Y
|
||||
STA (A4L),Y
|
||||
.3 DEC PTR2+1
|
||||
DEC A4H
|
||||
DEX ANY MORE BLOCKS
|
||||
BNE .2 YES
|
||||
* MOVE SHORT BLOCK IF ANY
|
||||
LDX BLKSIZ PARTIAL BLOCK SIZE
|
||||
BEQ .5 NONE LEFT
|
||||
.4 DEY
|
||||
LDA (PTR2),Y
|
||||
STA (A4L),Y
|
||||
DEX
|
||||
BNE .4
|
||||
.5 RTS
|
||||
*--------------------------------
|
||||
COMPUTE.BLOCK.SIZE
|
||||
SEC
|
||||
LDA PTR2
|
||||
SBC PP.BEG
|
||||
STA BLKSIZ
|
||||
LDA PTR2+1
|
||||
SBC PP.BEG+1
|
||||
TAX # PAGES
|
||||
INX
|
||||
RTS
|
||||
*--------------------------------
|
||||
MOVE.TEXT.DOWN
|
||||
JSR COMPUTE.BLOCK.SIZE
|
||||
LDA PP.BEG
|
||||
STA A2L
|
||||
LDA PP.BEG+1
|
||||
STA A2H
|
||||
LDA A4L
|
||||
STA PP.BEG
|
||||
LDA A4H
|
||||
STA PP.BEG+1
|
||||
LDY #0
|
||||
BEQ .2 ...ALWAYS
|
||||
.1 LDA (A2L),Y YES, MOVE 256 BYTE
|
||||
STA (A4L),Y
|
||||
INY
|
||||
BNE .1
|
||||
INC A2H NEXT BLOCK
|
||||
INC A4H
|
||||
.2 DEX ANY MORE BLOCKS
|
||||
BNE .1
|
||||
* MOVE PARTIAL BLOCK
|
||||
LDX BLKSIZ
|
||||
BEQ .4 NO PARTIAL BLOCK
|
||||
.3 LDA (A2L),Y
|
||||
STA (A4L),Y
|
||||
INY
|
||||
DEX
|
||||
BNE .3
|
||||
.4 RTS
|
||||
*--------------------------------
|
||||
MAN
|
||||
SAVE usr/src/fse/fse.s.submit
|
||||
LOAD usr/src/fse/fse.s
|
||||
ASM
|
|
@ -0,0 +1,220 @@
|
|||
NEW
|
||||
AUTO 3,1
|
||||
*--------------------------------
|
||||
B.TMP1 .EQ VAR.BEG-1
|
||||
B.TMP2 .EQ B.TMP1-1
|
||||
B.TMP3 .EQ B.TMP2-1
|
||||
B.TMP4 .EQ B.TMP3-1
|
||||
.DO B.TMP4<$300
|
||||
*** VARS<$300
|
||||
.FIN
|
||||
*--------------------------------
|
||||
* STANDARD VIDEO JUMP VECTORS
|
||||
* 1. READ KEYBOARD KEY CODE
|
||||
* TURNS ON CURSOR
|
||||
* GETS KEY CODE
|
||||
* TURNS OFF CURSOR
|
||||
* REG-A HAS KEY CODE SIGN BIT ON.
|
||||
* 2. HORIZONTAL TAB
|
||||
* REG-A HAS TAB 0-79
|
||||
* 3. VERTICAL TAB
|
||||
* REG-A HAS TAB 0-23
|
||||
* 4. CLEAR TO END OF LINE
|
||||
* 5. CLEAR TO END OF SCREEN
|
||||
* 6. CHARACTER OUTPUT ROUTINE
|
||||
* REG-A HAS CHAR TO OUTPUT.
|
||||
* MUST NOT SCROLL SCREEN OR
|
||||
* GO TO NEXT LINE WHEN LAST
|
||||
* CHARACTER IS PRINTED ON A LINE.
|
||||
*--------------------------------
|
||||
JMP B.RD.KBD
|
||||
JMP B.MY.HTAB
|
||||
JMP B.MY.VTAB
|
||||
JMP B.MY.CLREOL
|
||||
JMP B.MY.CLREOP
|
||||
JMP B.MY.COUT
|
||||
*--------------------------------
|
||||
B.CN .DA #$C3 SLOT + $C0 OF 80 COL BOARD
|
||||
B.N0 .EQ $30 SLOT * 16 OF 80 COL BOARD
|
||||
*--------------------------------
|
||||
B.MY.CLP LDA CTR
|
||||
JSR B.MY.VTAB
|
||||
B.MY.CLREOP JSR B.MY.CLREOL CLEAR TO END OF LINE
|
||||
LDA #0
|
||||
JSR B.MY.HTAB NEXT LINE BEGINS WITH COL 0
|
||||
INC CTR BUMP CTR TO NEXT LINE
|
||||
LDA CTR
|
||||
CMP LAST.LINE IS IT > LANT LINE
|
||||
BCC B.MY.CLP < END
|
||||
BEQ B.MY.CLP = END
|
||||
RTS > END
|
||||
*--------------------------------
|
||||
B.MY.HTAB STX B.TMP1 SAVE X REG
|
||||
LDX B.CN
|
||||
STA B.CHORZ,X SAVE HORIZONTAL POSN
|
||||
LDX B.TMP1 RESTORE X REG
|
||||
RTS
|
||||
*--------------------------------
|
||||
B.MY.VTAB STY B.TMP1 SAVE Y REG
|
||||
STX B.TMP2 SAVE X REG
|
||||
LDX B.CN
|
||||
STA CV SET NEW VERT POSN
|
||||
STA B.CVERT,X SAVE FOR VIDEX TOO
|
||||
JSR B.VTABZ DO CALCULATION
|
||||
LDY B.TMP1 RESTORE Y REG
|
||||
LDX B.TMP2 RESTORE X REG
|
||||
RTS
|
||||
*--------------------------------
|
||||
B.MY.COUT STY B.TMP1 SAVE Y REG
|
||||
STX B.TMP2 SAVE X REG
|
||||
LDX B.CN
|
||||
LDY B.CHORZ,X GET COLUMN POSN
|
||||
JSR B.CHRPUT PUT CHAR ON SCREEN
|
||||
INC B.CHORZ,X NEXT COLUMN
|
||||
LDY B.TMP1 RESTORE Y REG
|
||||
LDX B.TMP2 RESTORE X REG
|
||||
RTS
|
||||
*--------------------------------
|
||||
B.MY.CLREOL STY B.TMP3 SAVE Y REG
|
||||
STX B.TMP4 SAVE X REG
|
||||
LDX B.CN
|
||||
LDY B.CHORZ,X GET COL POSN
|
||||
.1 LDA #$A0 A REG = BLANK
|
||||
CPY SCREEN.WIDTH END OF LINE YET?
|
||||
BCS .2 YES
|
||||
JSR B.MY.COUT NO, PRINT A BLANK
|
||||
LDY B.CHORZ,X GET COL POSN
|
||||
BNE .1 ...ALWAYS
|
||||
.2 LDY B.TMP3 RESTORE Y REG
|
||||
LDX B.TMP4 RESTORE X REG
|
||||
RTS
|
||||
*--------------------------------
|
||||
* VIDEX IO ROUTINES
|
||||
*--------------------------------
|
||||
B.YSAVE .EQ $35 SAVE Y REG
|
||||
*
|
||||
B.ASAV1 .EQ $4F8 SAVE A REG
|
||||
B.XSAV1 .EQ $578 SAVE X REG
|
||||
B.MSLOT .EQ $7F8 SAVE SLOT NUMBER
|
||||
*--------------------------------
|
||||
B.BASEL .EQ $478-$C0 COMPUTED BASE ADRS LOW
|
||||
B.BASEH .EQ $4F8-$C0 COMPUTED BASE ADRS HIGH
|
||||
B.CHORZ .EQ $578-$C0 TRUE HORIZONTAL POSN
|
||||
B.CVERT .EQ $5F8-$C0 TRUE VERTICAL POSN
|
||||
B.START .EQ $6F8-$C0 SCROLL LINE START
|
||||
*--------------------------------
|
||||
B.FLAGS .EQ $7F8-$C0 FLAG BITS FOR VIDEX
|
||||
*--------------------------------
|
||||
B.DEV0 .EQ $C080 REGISTER SELECT
|
||||
B.DEV1 .EQ $C081 REGISTER DATA
|
||||
B.DISP0 .EQ $CC00 1ST PAGE OF BANK
|
||||
B.DISP1 .EQ $CD00 2ND PAGE OF BANK
|
||||
*--------------------------------
|
||||
B.VTABZ STA B.ASAV1 COMPUTE VIDEX BASE ADRS
|
||||
ASL
|
||||
ASL
|
||||
CLC
|
||||
ADC B.ASAV1 A*5 + START
|
||||
ADC B.START,X
|
||||
PHA
|
||||
LSR * $10
|
||||
LSR
|
||||
LSR
|
||||
LSR
|
||||
STA B.BASEH,X
|
||||
PLA
|
||||
ASL
|
||||
ASL
|
||||
ASL
|
||||
ASL
|
||||
STA B.BASEL,X
|
||||
RTS
|
||||
*--------------------------------
|
||||
B.PSNCALC STX B.MSLOT POSITION CALCULATION
|
||||
TYA
|
||||
CLC
|
||||
ADC B.BASEL,X
|
||||
STA B.XSAV1
|
||||
LDA #0
|
||||
ADC B.BASEH,X
|
||||
LSR BIT 0 TO CARRY
|
||||
PHP SAVE CARRY BIT
|
||||
AND #3 BIT 1,2 SPECIFY WHICH BANK
|
||||
ASL
|
||||
ASL
|
||||
ORA #B.N0
|
||||
STY B.YSAVE
|
||||
TAY
|
||||
LDA B.DEV0,Y FLIP IN RIGHT 512 BANK
|
||||
LDY B.YSAVE
|
||||
PLP CARRY SAYS WHICH 256 BYTE PAGE
|
||||
LDX B.XSAV1 TO USE
|
||||
RTS
|
||||
*--------------------------------
|
||||
B.CHRPUT ASL KILL SIGN BIT
|
||||
PHA SAVE CHAR
|
||||
LDA B.FLAGS,X GET CHAR SET FLAG
|
||||
LSR IN CARRY BIT
|
||||
PLA RECOVER CHAR
|
||||
ROR INSERT CHAR SET BIT
|
||||
PHA SAVE CHAR
|
||||
JSR B.PSNCALC COMPUTE POSN
|
||||
PLA GET CHAR
|
||||
BCS .1 HIGH PAGE
|
||||
STA B.DISP0,X LOW PAGE STORE CHAR
|
||||
BCC .2
|
||||
.1 STA B.DISP1,X HIGH PAGE STORE CHAR
|
||||
.2 LDX B.MSLOT
|
||||
RTS
|
||||
*--------------------------------
|
||||
B.RD.KBD JSR B.CURSOR.ON TURN ON CURSOR
|
||||
.1 LDA $C000 GET CHAR
|
||||
BPL .1
|
||||
BIT $C010 STROBE KBD TO KILL FLAG BIT
|
||||
PHA SAVE CHAR
|
||||
JSR B.CURSOR.OFF TURN OFF CURSOR
|
||||
PLA CHAR IN A REG
|
||||
RTS
|
||||
*--------------------------------
|
||||
B.CURSOR.ON LDA POSV POSITION VERTICVALLY
|
||||
JSR B.MY.VTAB
|
||||
LDA POSH
|
||||
SEC
|
||||
SBC LEFT.MARGIN
|
||||
CLC
|
||||
ADC RM.ADJUST
|
||||
JSR B.MY.HTAB POSITION HORIZONTALLY
|
||||
LDY #B.N0
|
||||
LDA ESC.FLAG CHK FOR EDIT OR SCROLL MODE
|
||||
BEQ .1 MUST BE SCROLL MODE.
|
||||
LDA #$67 EDIT MODE GETS LITTLE CURSOR
|
||||
BNE .2
|
||||
.1 LDA #$C0 SCROLL MODE GETS NORMAL CURSOR
|
||||
.2 PHA
|
||||
LDA #$0A
|
||||
STA B.DEV0,Y SET CTRC = REG 10
|
||||
PLA
|
||||
STA B.DEV1,Y SET CURSOR START DATA
|
||||
B.WRIT LDX B.CN
|
||||
LDY #B.N0
|
||||
LDA #$0F
|
||||
STA B.DEV0,Y CTRC = REG 15
|
||||
LDA B.CHORZ,X
|
||||
CLC
|
||||
ADC B.BASEL,X
|
||||
STA B.DEV1,Y SET CURSOR HOIZONTAL POSN
|
||||
LDA #$0E
|
||||
STA B.DEV0,Y CTRC = REG 14
|
||||
LDA #0
|
||||
ADC B.BASEH,X
|
||||
STA B.DEV1,Y SET CURSOR VERTICAL POSN
|
||||
RTS
|
||||
*--------------------------------
|
||||
B.CURSOR.OFF LDA #24 GO TO LINE 24 (DOES NOT EXIST)
|
||||
JSR B.MY.VTAB
|
||||
JMP B.WRIT PUT CURSOR THERE
|
||||
*--------------------------------
|
||||
MAN
|
||||
SAVE usr/src/fse/fse.s.videx
|
||||
LOAD usr/src/fse/fse.s
|
||||
ASM
|
|
@ -0,0 +1,135 @@
|
|||
NEW
|
||||
AUTO 3,1
|
||||
.LIST OFF
|
||||
.OR $6480
|
||||
.TF fse
|
||||
*--------------------------------
|
||||
* S-C MACRO ASSEMBLER SCREEN EDITOR
|
||||
*
|
||||
* BY MIKE LAUMER
|
||||
* LAUMER RESEARCH
|
||||
* 1832 SCHOOL RD.
|
||||
* CARROLLTON, TEXAS 75006
|
||||
*
|
||||
* (214) 245-3927
|
||||
*
|
||||
* modified 7/10/85 by:
|
||||
* David C. Johnson of
|
||||
* Applied Engineering
|
||||
* 3216 Beltline Rd, Suite 610
|
||||
* Dallas, TX 75234
|
||||
* (214) 241-6060
|
||||
*
|
||||
* changes include:
|
||||
* operates under SCASM 2.0 - ProDOS
|
||||
* fixing blank lines entered w/^L (see INS.TBL),
|
||||
* changing E.SHIFT to test SKMOD.FLG,
|
||||
* allowing lowercase escape mode characters,
|
||||
* eliminating MouseText characters, and
|
||||
* speeding up the //e driver some.
|
||||
* many small changes too...
|
||||
*--------------------------------
|
||||
* DRIVER SELECTION PARAMETER
|
||||
*
|
||||
* DRVR = 0 .... STANDARD 40 COLUMN
|
||||
* = 1 .... VIDEX 80-COLUMN
|
||||
* = 2 .... STB80 80-COLUMN
|
||||
* = 3 .... //e or //c 80-COLUMN
|
||||
|
||||
DRVR .EQ 3
|
||||
|
||||
.DO DRVR
|
||||
SCR.SIZE .EQ 80 SCREEN WIDTH
|
||||
.EL
|
||||
SCR.SIZE .EQ 40 make screen width 40 automatically
|
||||
.FI
|
||||
*--------------------------------
|
||||
FSE.VECTOR .EQ $8028
|
||||
ESC.U.VECTOR .EQ $800C
|
||||
|
||||
INSTALLER
|
||||
|
||||
LDA #$4C JMP opcode
|
||||
STA FSE.VECTOR
|
||||
STA ESC.U.VECTOR
|
||||
LDA #HARD
|
||||
STA FSE.VECTOR+1
|
||||
LDA /HARD
|
||||
STA FSE.VECTOR+2
|
||||
STA $BEFB Global Page HIMEM
|
||||
LDA #REMOVER
|
||||
STA ESC.U.VECTOR+1
|
||||
LDA /REMOVER
|
||||
STA ESC.U.VECTOR+2
|
||||
JMP $8000 coldstart assembler
|
||||
.BS $6500-*
|
||||
*--------------------------------
|
||||
|
||||
.INB usr/src/fse/fse.s.1
|
||||
.INB usr/src/fse/fse.s.2
|
||||
.INB usr/src/fse/fse.s.3
|
||||
.INB usr/src/fse/fse.s.line
|
||||
.INB usr/src/fse/fse.s.submit
|
||||
|
||||
*--------------------------------
|
||||
* EACH DRIVER MODULE LOADS HERE.
|
||||
* DRIVER LINKAGE IS VIA A JUMP TABLE
|
||||
* TO STANDARDIZE THEIR ENTRY POINTS.
|
||||
*--------------------------------
|
||||
*
|
||||
OVERLAY.AREA
|
||||
*
|
||||
MY.RD.KBD .EQ OVERLAY.AREA KEYBOARD READ
|
||||
MY.HTAB .EQ OVERLAY.AREA+3 HOTIZONTAL TAB
|
||||
MY.VTAB .EQ OVERLAY.AREA+6 VERTICAL TAB
|
||||
MY.CLREOL .EQ OVERLAY.AREA+9 CLEAR TO END OF LINE
|
||||
MY.CLREOP .EQ OVERLAY.AREA+12 CLEAR TO END OF SCREEN
|
||||
MY.COUT .EQ OVERLAY.AREA+15 CHARACTER OUTPUT
|
||||
|
||||
.DO DRVR=0
|
||||
*--------------------------------
|
||||
* STANDARD 40 COLUMN APPLE VIDEO DRIVER
|
||||
*--------------------------------
|
||||
.INB usr/src/fse/fse.s.a2
|
||||
.FIN
|
||||
|
||||
.DO DRVR=1
|
||||
*--------------------------------
|
||||
* VIDEX 80 COLUMN VIDEO DRIVER
|
||||
*--------------------------------
|
||||
.INB usr/src/fse/fse.s.videx
|
||||
.FIN
|
||||
|
||||
.DO DRVR=2
|
||||
*--------------------------------
|
||||
* STB80 80 COLUMN VIDEO DRIVER
|
||||
*--------------------------------
|
||||
.INB usr/src/fse/fse.s.stb80
|
||||
.FIN
|
||||
|
||||
.DO DRVR=3
|
||||
*--------------------------------
|
||||
* APPLE IIE 80 COLUMN VIDEO DRIVER
|
||||
*--------------------------------
|
||||
.INB usr/src/fse/fse.s.a2e
|
||||
.FIN
|
||||
|
||||
REMOVER
|
||||
|
||||
LDA #$60 RTS opcode
|
||||
STA FSE.VECTOR
|
||||
LDA #M.BELL
|
||||
STA ESC.U.VECTOR+1
|
||||
LDA /M.BELL
|
||||
STA ESC.U.VECTOR+2
|
||||
LDA /$7400
|
||||
STA $BEFB Global Page HIMEM
|
||||
JMP $8000 coldstart assembler
|
||||
*--------------------------------
|
||||
ZZ.END .DO *>$73FF OR EDITOR WILL BE TOO LARGE
|
||||
!!! EXCEEDS $73FF
|
||||
.FIN
|
||||
*--------------------------------
|
||||
MAN
|
||||
SAVE usr/src/fse/fse.s
|
||||
ASM
|
245
INC/A2osX.I.txt
245
INC/A2osX.I.txt
|
@ -173,160 +173,161 @@ SL.EndDollar .EQ %00000001
|
|||
*--------------------------------------D1
|
||||
* STAT
|
||||
* .EQ $00
|
||||
SYS.ChMod .EQ $02
|
||||
SYS.FStat .EQ $04
|
||||
SYS.Stat .EQ $06
|
||||
SYS.MKDir .EQ $08
|
||||
SYS.MKNod .EQ $0A
|
||||
SYS.MKFIFO .EQ $0C
|
||||
SYS.Pipe .EQ $0E
|
||||
_ChMod .EQ $02
|
||||
_FStat .EQ $04
|
||||
_Stat .EQ $06
|
||||
_MKDir .EQ $08
|
||||
_MKNod .EQ $0A
|
||||
_MKFIFO .EQ $0C
|
||||
_Pipe .EQ $0E
|
||||
* DIRENT
|
||||
SYS.OpenDir .EQ $10
|
||||
SYS.ReadDir .EQ $12
|
||||
SYS.CloseDir .EQ $14
|
||||
_OpenDir .EQ $10
|
||||
_ReadDir .EQ $12
|
||||
_CloseDir .EQ $14
|
||||
* UNISTD
|
||||
SYS.Open .EQ $16
|
||||
SYS.Close .EQ $18
|
||||
SYS.Read .EQ $1A
|
||||
SYS.Write .EQ $1C
|
||||
SYS.ChOwn .EQ $1E
|
||||
_Open .EQ $16
|
||||
_Close .EQ $18
|
||||
_Read .EQ $1A
|
||||
_Write .EQ $1C
|
||||
_ChOwn .EQ $1E
|
||||
* STDIO
|
||||
SYS.FPutC .EQ $20
|
||||
SYS.PutChar .EQ $22
|
||||
SYS.GetC .EQ $24
|
||||
SYS.GetChar .EQ $26
|
||||
SYS.FPutS .EQ $28
|
||||
SYS.PutS .EQ $2A
|
||||
SYS.FGetS .EQ $2C
|
||||
SYS.UngetC .EQ $2E
|
||||
_FPutC .EQ $20
|
||||
_PutChar .EQ $22
|
||||
_GetC .EQ $24
|
||||
_GetChar .EQ $26
|
||||
_FPutS .EQ $28
|
||||
_PutS .EQ $2A
|
||||
_FGetS .EQ $2C
|
||||
_UngetC .EQ $2E
|
||||
|
||||
SYS.FOpen .EQ $30
|
||||
SYS.FClose .EQ $32
|
||||
SYS.FRead .EQ $34
|
||||
SYS.FWrite .EQ $36
|
||||
SYS.FFlush .EQ $38
|
||||
SYS.FSeek .EQ $3A
|
||||
SYS.FTell .EQ $3C
|
||||
SYS.FEOF .EQ $3E
|
||||
_FOpen .EQ $30
|
||||
_FClose .EQ $32
|
||||
_FRead .EQ $34
|
||||
_FWrite .EQ $36
|
||||
_FFlush .EQ $38
|
||||
_FSeek .EQ $3A
|
||||
_FTell .EQ $3C
|
||||
_FEOF .EQ $3E
|
||||
|
||||
SYS.Remove .EQ $40
|
||||
SYS.Rename .EQ $42
|
||||
SYS.PrintF .EQ $44
|
||||
SYS.FPrintF .EQ $46
|
||||
SYS.SPrintF .EQ $48
|
||||
SYS.ScanF .EQ $4A
|
||||
SYS.FScanF .EQ $4C
|
||||
SYS.SScanF .EQ $4E
|
||||
_Remove .EQ $40
|
||||
_Rename .EQ $42
|
||||
_PrintF .EQ $44
|
||||
_FPrintF .EQ $46
|
||||
_SPrintF .EQ $48
|
||||
_ScanF .EQ $4A
|
||||
_FScanF .EQ $4C
|
||||
_SScanF .EQ $4E
|
||||
|
||||
* .EQ $50
|
||||
* .EQ $52
|
||||
* .EQ $54
|
||||
* .EQ $56
|
||||
* PRODOS
|
||||
SYS.Online .EQ $58
|
||||
SYS.ChTyp .EQ $5A
|
||||
SYS.ChAux .EQ $5C
|
||||
SYS.SetAttr .EQ $5E
|
||||
_Online .EQ $58
|
||||
_ChTyp .EQ $5A
|
||||
_ChAux .EQ $5C
|
||||
_SetAttr .EQ $5E
|
||||
*--------------------------------------D2
|
||||
* MOUNT
|
||||
SYS.Mount .EQ $60
|
||||
SYS.UMount .EQ $62
|
||||
_Mount .EQ $60
|
||||
_UMount .EQ $62
|
||||
* STKOBJ
|
||||
SYS.LoadStkObj .EQ $64
|
||||
SYS.GetStkObj .EQ $66
|
||||
_LoadStkObj .EQ $64
|
||||
_GetStkObj .EQ $66
|
||||
* ARG
|
||||
SYS.Shift .EQ $68
|
||||
SYS.ArgV .EQ $6A
|
||||
SYS.ArgVDup .EQ $6C
|
||||
_Shift .EQ $68
|
||||
_ArgV .EQ $6A
|
||||
_ArgVDup .EQ $6C
|
||||
* ERROR
|
||||
SYS.GetErrMsg .EQ $6E
|
||||
_GetErrMsg .EQ $6E
|
||||
* STDLIB
|
||||
SYS.AToF .EQ $70
|
||||
SYS.AToI .EQ $72
|
||||
SYS.AToL .EQ $74
|
||||
SYS.StrToF .EQ $76
|
||||
SYS.StrToL .EQ $78
|
||||
SYS.StrToUL .EQ $7A
|
||||
SYS.RealPath .EQ $7C
|
||||
SYS.Expand .EQ $7E
|
||||
_AToF .EQ $70
|
||||
_AToI .EQ $72
|
||||
_AToL .EQ $74
|
||||
_StrToF .EQ $76
|
||||
_StrToL .EQ $78
|
||||
_StrToUL .EQ $7A
|
||||
_RealPath .EQ $7C
|
||||
_Expand .EQ $7E
|
||||
* STRING
|
||||
SYS.StrLen .EQ $80
|
||||
SYS.StrCpy .EQ $82
|
||||
SYS.StrCat .EQ $84
|
||||
SYS.StrDup .EQ $86
|
||||
SYS.StrUpr .EQ $88
|
||||
SYS.StrLwr .EQ $8A
|
||||
SYS.StrCmp .EQ $8C
|
||||
SYS.StrCaseCmp .EQ $8E
|
||||
_StrLen .EQ $80
|
||||
_StrCpy .EQ $82
|
||||
_StrCat .EQ $84
|
||||
_StrDup .EQ $86
|
||||
_StrUpr .EQ $88
|
||||
_StrLwr .EQ $8A
|
||||
_StrCmp .EQ $8C
|
||||
_StrCaseCmp .EQ $8E
|
||||
* DEV
|
||||
SYS.GetDevByName .EQ $90
|
||||
_GetDevByName .EQ $90
|
||||
* .EQ $92
|
||||
SYS.MKDev .EQ $94
|
||||
SYS.IOCTL .EQ $96
|
||||
_MKDev .EQ $94
|
||||
_IOCTL .EQ $96
|
||||
* BIN
|
||||
SYS.LoadLib .EQ $98
|
||||
SYS.UnloadLib .EQ $9A
|
||||
SYS.LoadDrv .EQ $9C
|
||||
SYS.InsDrv .EQ $9E
|
||||
_LoadLib .EQ $98
|
||||
_UnloadLib .EQ $9A
|
||||
_LoadDrv .EQ $9C
|
||||
_InsDrv .EQ $9E
|
||||
* PS
|
||||
SYS.ExecL .EQ $A0
|
||||
SYS.ExecV .EQ $A2
|
||||
SYS.Fork .EQ $A4
|
||||
SYS.Kill .EQ $A6
|
||||
SYS.LoadFile .EQ $A8
|
||||
SYS.LoadTxtFile .EQ $AA
|
||||
SYS.FileSearch .EQ $AC
|
||||
SYS.GetMemStat .EQ $AE
|
||||
_ExecL .EQ $A0
|
||||
_ExecV .EQ $A2
|
||||
_Fork .EQ $A4
|
||||
_Kill .EQ $A6
|
||||
_LoadFile .EQ $A8
|
||||
_LoadTxtFile .EQ $AA
|
||||
_FileSearch .EQ $AC
|
||||
_GetMemStat .EQ $AE
|
||||
*--------------------------------------E0/AUX
|
||||
* STRV / STRVX
|
||||
SYS.StrVNew .EQ $B0
|
||||
SYS.StrVSet .EQ $B2
|
||||
SYS.StrVGet .EQ $B4
|
||||
SYS.StrVFree .EQ $B6
|
||||
_StrVNew .EQ $B0
|
||||
_StrVSet .EQ $B2
|
||||
_StrVGet .EQ $B4
|
||||
_StrVFree .EQ $B6
|
||||
* ENV / ENVX
|
||||
SYS.PutEnv .EQ $B8
|
||||
SYS.SetEnv .EQ $BA
|
||||
SYS.GetEnv .EQ $BC
|
||||
SYS.UnsetEnv .EQ $BE
|
||||
_PutEnv .EQ $B8
|
||||
_SetEnv .EQ $BA
|
||||
_GetEnv .EQ $BC
|
||||
_UnsetEnv .EQ $BE
|
||||
* TIME / TIMEX
|
||||
SYS.Time .EQ $C0
|
||||
SYS.StrFTime .EQ $C2
|
||||
SYS.PTime2Time .EQ $C4
|
||||
SYS.CTime2Time .EQ $C6
|
||||
_Time .EQ $C0
|
||||
_StrFTime .EQ $C2
|
||||
_PTime2Time .EQ $C4
|
||||
_CTime2Time .EQ $C6
|
||||
* MD5 / MD5X
|
||||
SYS.MD5 .EQ $C8
|
||||
SYS.MD5Init .EQ $CA
|
||||
SYS.MD5Update .EQ $CC
|
||||
SYS.MD5Finalize .EQ $CE
|
||||
_MD5 .EQ $C8
|
||||
_MD5Init .EQ $CA
|
||||
_MD5Update .EQ $CC
|
||||
_MD5Finalize .EQ $CE
|
||||
* PWD / PWDX
|
||||
SYS.GetPWUID .EQ $D0
|
||||
SYS.GetPWName .EQ $D2
|
||||
SYS.PutPW .EQ $D4
|
||||
SYS.GetGRGID .EQ $D6
|
||||
SYS.GetGRName .EQ $D8
|
||||
SYS.PutGR .EQ $DA
|
||||
SYS.OpenSession .EQ $DC
|
||||
SYS.CloseSession .EQ $DE
|
||||
_GetPWUID .EQ $D0
|
||||
_GetPWName .EQ $D2
|
||||
_PutPW .EQ $D4
|
||||
_GetGRGID .EQ $D6
|
||||
_GetGRName .EQ $D8
|
||||
_PutGR .EQ $DA
|
||||
_OpenSession .EQ $DC
|
||||
_CloseSession .EQ $DE
|
||||
* SLIST / SLISTX
|
||||
SYS.SListGetData .EQ $E0
|
||||
SYS.SListAddData .EQ $E2
|
||||
SYS.SListSetData .EQ $E4
|
||||
SYS.SListGetByID .EQ $E6
|
||||
SYS.SListNewKey .EQ $E8
|
||||
SYS.SListLookup .EQ $EA
|
||||
SYS.SListFree .EQ $EC
|
||||
SYS.SListNew .EQ $EE
|
||||
_SListGetData .EQ $E0
|
||||
_SListAddData .EQ $E2
|
||||
_SListSetData .EQ $E4
|
||||
_SListGetByID .EQ $E6
|
||||
_SListNewKey .EQ $E8
|
||||
_SListLookup .EQ $EA
|
||||
_SListFree .EQ $EC
|
||||
_SListNew .EQ $EE
|
||||
*--------------------------------------F0
|
||||
* MEM
|
||||
SYS.GetMem .EQ $F0
|
||||
SYS.Realloc .EQ $F2
|
||||
SYS.GetMemPtr .EQ $F4
|
||||
SYS.FreeMem .EQ $F6
|
||||
SYS.Free .EQ $F8
|
||||
_GetMem .EQ $F0
|
||||
_Malloc .EQ $F0
|
||||
_Realloc .EQ $F2
|
||||
_GetMemPtr .EQ $F4
|
||||
_FreeMem .EQ $F6
|
||||
_Free .EQ $F8
|
||||
|
||||
SYS.NewStkObj .EQ $FA
|
||||
SYS.GetStkObjPtr .EQ $FC
|
||||
SYS.FreeStkObj .EQ $FE
|
||||
_NewStkObj .EQ $FA
|
||||
_GetStkObjPtr .EQ $FC
|
||||
_FreeStkObj .EQ $FE
|
||||
*--------------------------------------
|
||||
* MEM STRUCT
|
||||
*--------------------------------------
|
||||
|
|
|
@ -180,6 +180,8 @@ GP.CCCSPARE .EQ $BEDF
|
|||
GP.GETBUFR .EQ $BEF5
|
||||
GP.FREEBUFR .EQ $BEF8
|
||||
GP.RSHIMEM .EQ $BEFB
|
||||
GP.TBOX .EQ $BEFD
|
||||
GP.TBOX.PrintF .EQ 0
|
||||
*--------------------------------------
|
||||
MAN
|
||||
SAVE inc/bs.i
|
||||
|
|
|
@ -20,6 +20,9 @@ LIBTUI.GetProp .EQ 34
|
|||
LIBTUI.SetProp .EQ 36
|
||||
LIBTUI.Activate .EQ 38
|
||||
LIBTUI.Deactivate .EQ 40
|
||||
LIBTUI.FindActive .EQ 42
|
||||
LIBTUI.Show .EQ 44
|
||||
LIBTUI.Hide .EQ 46
|
||||
*--------------------------------------
|
||||
S.CTX.hSCRN .EQ 0
|
||||
S.CTX.hClipBrd .EQ 1
|
||||
|
@ -58,7 +61,8 @@ S.OBJ.F.bEdit .EQ %00000001
|
|||
S.OBJ.S .EQ 2
|
||||
S.OBJ.S.bActive .EQ %10000000
|
||||
S.OBJ.S.bDisabled .EQ %01000000
|
||||
S.OBJ.S.bHasChilds .EQ %00100000
|
||||
S.OBJ.S.bHidden .EQ %00100000
|
||||
S.OBJ.S.bHasChilds .EQ %00010000
|
||||
S.OBJ.S.bCurOn .EQ %00000001
|
||||
S.OBJ.hParent .EQ 3
|
||||
S.OBJ.X1 .EQ 4
|
||||
|
@ -111,10 +115,12 @@ S.TBOX.BufCnt .EQ S.OBJ+14
|
|||
*
|
||||
S.TBOX .EQ S.OBJ+16
|
||||
*--------------------------------------
|
||||
S.LBOX.Idx .EQ S.OBJ+0
|
||||
S.LBOX.VScroll .EQ S.OBJ+2
|
||||
S.LBOX.EV.CHANGED .EQ S.OBJ+0
|
||||
S.LBOX.EV.PRESSED .EQ S.OBJ+1
|
||||
S.LBOX.Idx .EQ S.OBJ+2
|
||||
S.LBOX.VScroll .EQ S.OBJ+4
|
||||
*
|
||||
S.LBOX .EQ S.OBJ+4
|
||||
S.LBOX .EQ S.OBJ+6
|
||||
*--------------------------------------
|
||||
S.CBOX.HotKey .EQ S.OBJ+0
|
||||
S.CBOX.EV .EQ S.OBJ+1
|
||||
|
@ -135,7 +141,6 @@ S.RADIO.Idx .EQ S.OBJ+2
|
|||
S.RADIO .EQ S.OBJ+4
|
||||
*--------------------------------------
|
||||
EV.RESIZE .EQ $80
|
||||
EV.QUIT .EQ $81
|
||||
EV.HL.SELECTED .EQ $82
|
||||
EV.HL.PRESSED .EQ $83
|
||||
*--------------------------------------
|
||||
|
|
|
@ -17,7 +17,7 @@ NEW
|
|||
* SYSCALLs Macros
|
||||
*--------------------------------------
|
||||
.MA SYSCALL
|
||||
ldx #SYS.]1
|
||||
ldx #_]1
|
||||
jsr A2osX.SYSCALL
|
||||
.EM
|
||||
*--------------------------------------
|
||||
|
@ -32,7 +32,7 @@ NEW
|
|||
.EM
|
||||
*--------------------------------------
|
||||
.MA SYSCALL2
|
||||
ldx #SYS.]1
|
||||
ldx #_]1
|
||||
jsr A2osX.SYSCALL2
|
||||
.EM
|
||||
*--------------------------------------
|
||||
|
|
|
@ -2,11 +2,15 @@ NEW
|
|||
AUTO 3,1
|
||||
.LIST OFF
|
||||
*--------------------------------------
|
||||
* BUT.New hParent,X1,Y1,HK,EV,pLabel 7
|
||||
* BUT.New hParent,X1,Y1,HK,EV,pLabel,F 8
|
||||
*--------------------------------------
|
||||
BUT.New lda #S.OBJ.T.BUT
|
||||
jsr OBJ.Create
|
||||
bcs .9
|
||||
|
||||
>PULLA
|
||||
ldy #S.OBJ.F
|
||||
sta (ZPObjPtr),y
|
||||
|
||||
ldy #S.BUT.pLabel
|
||||
jsr OBJ.PullWordY
|
||||
|
@ -134,9 +138,6 @@ BUT.Draw ldy #S.BUT.pLabel
|
|||
.8 clc
|
||||
rts
|
||||
*--------------------------------------
|
||||
BUT.Activate
|
||||
BUT.Deactivate jmp OBJ.Draw.Body
|
||||
*--------------------------------------
|
||||
MAN
|
||||
SAVE usr/src/lib/libtui.s.but
|
||||
LOAD usr/src/lib/libtui.s
|
||||
|
|
|
@ -2,12 +2,16 @@ NEW
|
|||
AUTO 3,1
|
||||
.LIST OFF
|
||||
*--------------------------------------
|
||||
* CBOX.New hParent,X1,Y1,HK,EV,pLabel,pVar 9
|
||||
* CBOX.New hParent,X1,Y1,HK,EV,pLabel,pVar,F 10
|
||||
*--------------------------------------
|
||||
CBOX.New lda #S.OBJ.T.CBOX
|
||||
jsr OBJ.Create
|
||||
bcs .9
|
||||
|
||||
>PULLA
|
||||
ldy #S.OBJ.F
|
||||
sta (ZPObjPtr),y
|
||||
|
||||
ldy #S.OBJ.pVar
|
||||
jsr OBJ.PullWordY
|
||||
|
||||
|
@ -52,7 +56,7 @@ CBOX.New lda #S.OBJ.T.CBOX
|
|||
* clc
|
||||
rts
|
||||
|
||||
.9 >POP 9
|
||||
.9 >POP 10
|
||||
|
||||
.99 rts
|
||||
*--------------------------------------
|
||||
|
@ -69,30 +73,29 @@ CBOX.Run ldy #S.BUT.HotKey
|
|||
cmp #C.SPACE
|
||||
bne .9
|
||||
|
||||
.8 ldy #S.OBJ.pVar
|
||||
lda (ZPObjPtr),y
|
||||
sta ZPPtr1
|
||||
iny
|
||||
lda (ZPObjPtr),y
|
||||
sta ZPPtr1+1
|
||||
.8 jsr OBJ.GetpVarPtr2
|
||||
|
||||
lda (ZPPtr1)
|
||||
lda (ZPPtr2)
|
||||
eor #$ff
|
||||
sta (ZPPtr1)
|
||||
sta (ZPPtr2)
|
||||
|
||||
ldy #1 hObj
|
||||
lda (pStack),y
|
||||
>PUSHA
|
||||
jsr OBJ.Draw.Body
|
||||
inc pStack
|
||||
|
||||
bcs .99
|
||||
|
||||
ldy #S.CBOX.EV
|
||||
lda (ZPObjPtr),y
|
||||
* clc
|
||||
rts
|
||||
|
||||
.9 lda #0
|
||||
sec
|
||||
rts
|
||||
.99 rts
|
||||
*--------------------------------------
|
||||
CBOX.Draw ldx #'('
|
||||
CBOX.Draw ldx #'<'
|
||||
|
||||
ldy #S.OBJ.S
|
||||
lda (ZPObjPtr),y
|
||||
|
@ -104,16 +107,11 @@ CBOX.Draw ldx #'('
|
|||
.10 txa
|
||||
jsr LB.COut
|
||||
|
||||
ldy #S.OBJ.pVar
|
||||
lda (ZPObjPtr),y
|
||||
sta ZPPtr1
|
||||
iny
|
||||
lda (ZPObjPtr),y
|
||||
sta ZPPtr1+1
|
||||
jsr OBJ.GetpVarPtr2
|
||||
|
||||
ldx #C.SPACE
|
||||
|
||||
lda (ZPPtr1)
|
||||
lda (ZPPtr2)
|
||||
bpl .11
|
||||
|
||||
ldx #'X'
|
||||
|
@ -121,7 +119,7 @@ CBOX.Draw ldx #'('
|
|||
.11 txa
|
||||
jsr LB.COut
|
||||
|
||||
ldx #')'
|
||||
ldx #'>'
|
||||
|
||||
plp
|
||||
bpl .12
|
||||
|
@ -179,10 +177,6 @@ CBOX.Draw ldx #'('
|
|||
.8 clc
|
||||
rts
|
||||
*--------------------------------------
|
||||
CBOX.Activate
|
||||
*--------------------------------------
|
||||
CBOX.Deactivate jmp OBJ.Draw.Body
|
||||
*--------------------------------------
|
||||
MAN
|
||||
SAVE usr/src/lib/libtui.s.cbox
|
||||
LOAD usr/src/lib/libtui.s
|
||||
|
|
|
@ -114,7 +114,7 @@ CONT.Run lda (pStack) Event
|
|||
|
||||
ldy #S.OBJ.S
|
||||
lda (ZPPtr2),y
|
||||
and #S.OBJ.S.bDisabled
|
||||
and #S.OBJ.S.bDisabled+S.OBJ.S.bHidden
|
||||
bne .10
|
||||
|
||||
ply
|
||||
|
|
|
@ -2,12 +2,16 @@ NEW
|
|||
AUTO 3,1
|
||||
.LIST OFF
|
||||
*--------------------------------------
|
||||
* DLG.New hParent,W,H,pTitle 5
|
||||
* DLG.New hParent,W,H,pTitle,F 6
|
||||
*--------------------------------------
|
||||
DLG.New lda #S.OBJ.T.DLG
|
||||
jsr OBJ.Create
|
||||
bcs .9
|
||||
|
||||
>PULLA
|
||||
ldy #S.OBJ.F
|
||||
sta (ZPObjPtr),y
|
||||
|
||||
ldy #S.OBJ.pTitle
|
||||
jsr OBJ.PullWordY
|
||||
|
||||
|
@ -48,7 +52,7 @@ DLG.New lda #S.OBJ.T.DLG
|
|||
* clc
|
||||
rts
|
||||
|
||||
.9 >POP 5
|
||||
.9 >POP 6
|
||||
rts
|
||||
*--------------------------------------
|
||||
MAN
|
||||
|
|
|
@ -2,12 +2,16 @@ NEW
|
|||
AUTO 3,1
|
||||
.LIST OFF
|
||||
*--------------------------------------
|
||||
* LABEL.New hParent,X1,Y1,pLabel 5
|
||||
* LABEL.New hParent,X1,Y1,pLabel,F 6
|
||||
*--------------------------------------
|
||||
LABEL.New lda #S.OBJ.T.LABEL
|
||||
jsr OBJ.Create
|
||||
bcs .9
|
||||
|
||||
>PULLA
|
||||
ldy #S.OBJ.F
|
||||
sta (ZPObjPtr),y
|
||||
|
||||
ldy #S.OBJ.S
|
||||
lda #S.OBJ.S.bDisabled
|
||||
sta (ZPObjPtr),y
|
||||
|
@ -28,7 +32,7 @@ LABEL.New lda #S.OBJ.T.LABEL
|
|||
* clc
|
||||
rts
|
||||
|
||||
.9 >POP 5
|
||||
.9 >POP 6
|
||||
.99 rts
|
||||
*--------------------------------------
|
||||
LABEL.Draw ldy #S.LABEL.pLabel
|
||||
|
|
|
@ -2,22 +2,30 @@ NEW
|
|||
AUTO 3,1
|
||||
.LIST OFF
|
||||
*--------------------------------------
|
||||
* LBOX.New hParent,X1,Y1,W,H,F,pList,pVar 10
|
||||
* LBOX.New hParent,X1,Y1,W,H,EV.CHANGED,EV.PRESSED,pList,pVar,F 12
|
||||
*--------------------------------------
|
||||
LBOX.New lda #S.OBJ.T.LBOX
|
||||
jsr OBJ.Create
|
||||
bcs .9
|
||||
|
||||
>PULLA
|
||||
ldy #S.OBJ.F
|
||||
sta (ZPObjPtr),y
|
||||
|
||||
ldy #S.OBJ.pVar
|
||||
jsr OBJ.PullWordY
|
||||
|
||||
ldy #S.OBJ.pBuf
|
||||
jsr OBJ.PullWordY
|
||||
|
||||
|
||||
>PULLA
|
||||
ldy #S.OBJ.F
|
||||
ldy #S.LBOX.EV.PRESSED
|
||||
sta (ZPObjPtr),y
|
||||
|
||||
>PULLA
|
||||
ldy #S.LBOX.EV.CHANGED
|
||||
sta (ZPObjPtr),y
|
||||
|
||||
jsr OBJ.PullHW
|
||||
|
||||
jsr OBJ.PullY1X1hParent
|
||||
|
@ -29,7 +37,7 @@ LBOX.New lda #S.OBJ.T.LBOX
|
|||
* clc
|
||||
rts
|
||||
|
||||
.9 >POP 10
|
||||
.9 >POP 12
|
||||
|
||||
.99 rts
|
||||
*--------------------------------------
|
||||
|
@ -46,7 +54,6 @@ LBOX.Run ldy #S.OBJ.S
|
|||
inc
|
||||
tax
|
||||
|
||||
ldy #S.OBJ.pBuf
|
||||
jsr OBJ.GetLineXAtY
|
||||
bcs .8
|
||||
|
||||
|
@ -70,7 +77,7 @@ LBOX.Run ldy #S.OBJ.S
|
|||
bra .7
|
||||
|
||||
.2 cmp #C.VT
|
||||
bne .9
|
||||
bne .3
|
||||
|
||||
ldy #S.LBOX.Idx
|
||||
lda (ZPObjPtr),y
|
||||
|
@ -93,15 +100,35 @@ LBOX.Run ldy #S.OBJ.S
|
|||
>PUSHA
|
||||
|
||||
jsr OBJ.Draw.Body
|
||||
|
||||
|
||||
inc pStack
|
||||
|
||||
bcs .99
|
||||
|
||||
jsr LBOX.SetpVar
|
||||
|
||||
ldy #S.LBOX.EV.CHANGED
|
||||
lda (ZPObjPtr),y
|
||||
clc
|
||||
rts
|
||||
|
||||
.8 clc
|
||||
rts
|
||||
|
||||
.9 lda #0
|
||||
sec
|
||||
.99 rts
|
||||
|
||||
.3 cmp #C.SPACE
|
||||
bne .9
|
||||
|
||||
jsr LBOX.SetpVar
|
||||
|
||||
ldy #S.LBOX.EV.PRESSED
|
||||
lda (ZPObjPtr),y
|
||||
clc
|
||||
rts
|
||||
|
||||
.8 lda #0
|
||||
clc
|
||||
rts
|
||||
*--------------------------------------
|
||||
LBOX.Draw ldy #S.LBOX.VScroll
|
||||
|
@ -110,7 +137,6 @@ LBOX.Draw ldy #S.LBOX.VScroll
|
|||
adc (pStack) Relative Y
|
||||
tax
|
||||
|
||||
ldy #S.OBJ.pBuf
|
||||
jsr OBJ.GetLineXAtY
|
||||
bcs .5
|
||||
|
||||
|
@ -132,9 +158,11 @@ LBOX.Draw ldy #S.LBOX.VScroll
|
|||
|
||||
jsr LB.Ptr1OutEscMaxX
|
||||
txa
|
||||
beq .8
|
||||
bne .6
|
||||
|
||||
clc
|
||||
rts
|
||||
|
||||
.5 ldy #S.OBJ.InnerW
|
||||
lda (ZPObjPtr),y
|
||||
tax
|
||||
|
@ -148,9 +176,24 @@ LBOX.Draw ldy #S.LBOX.VScroll
|
|||
.8 clc
|
||||
rts
|
||||
*--------------------------------------
|
||||
LBOX.Activate
|
||||
LBOX.Deactivate
|
||||
jmp OBJ.Draw.Body
|
||||
LBOX.SetpVar ldy #S.LBOX.Idx
|
||||
lda (ZPObjPtr),y
|
||||
tax
|
||||
|
||||
jsr OBJ.GetLineXAtY
|
||||
bcs .8
|
||||
|
||||
jsr OBJ.GetpVarPtr2
|
||||
|
||||
lda ZPPtr1
|
||||
sta (ZPPtr2)
|
||||
lda ZPPtr1+1
|
||||
ldy #1
|
||||
sta (ZPPtr2),y
|
||||
|
||||
.8 clc
|
||||
|
||||
rts
|
||||
*--------------------------------------
|
||||
MAN
|
||||
SAVE usr/src/lib/libtui.s.lbox
|
||||
|
|
|
@ -219,7 +219,7 @@ OBJ.Run ldx ZPObjPtr
|
|||
|
||||
ldy #S.OBJ.S
|
||||
lda (ZPObjPtr),y
|
||||
and #S.OBJ.S.bDisabled
|
||||
and #S.OBJ.S.bDisabled+S.OBJ.S.bHidden
|
||||
bne .9
|
||||
|
||||
ldy #1
|
||||
|
@ -280,7 +280,54 @@ OBJ.Run ldx ZPObjPtr
|
|||
*--------------------------------------
|
||||
OBJ.Draw >PUSHA hObj
|
||||
|
||||
jsr OBJ.Draw.Top
|
||||
lda (pStack)
|
||||
jsr LIB.GetOBJ
|
||||
|
||||
ldy #S.OBJ.S
|
||||
lda (ZPObjPtr),y
|
||||
and #S.OBJ.S.bHidden
|
||||
beq .5
|
||||
|
||||
ldy #S.OBJ.Y1
|
||||
lda (ZPObjPtr),y
|
||||
>PUSHA
|
||||
|
||||
.1 jsr LB.Init
|
||||
|
||||
jsr LB.SetColor
|
||||
|
||||
ldy #S.OBJ.X1
|
||||
lda (ZPObjPtr),y
|
||||
tax
|
||||
lda (pStack)
|
||||
tay
|
||||
jsr LB.GotoXY
|
||||
|
||||
ldy #S.OBJ.W
|
||||
lda (ZPObjPtr),y
|
||||
|
||||
tax
|
||||
|
||||
lda #C.SPACE
|
||||
|
||||
.2 jsr LB.COut
|
||||
iny
|
||||
dex
|
||||
bne .2
|
||||
|
||||
jsr IO.LBWrite
|
||||
bcs .98
|
||||
|
||||
lda (pStack)
|
||||
ldy #S.OBJ.Y2
|
||||
cmp (ZPObjPtr),y
|
||||
inc
|
||||
sta (pStack)
|
||||
bcc .1
|
||||
|
||||
bra .8
|
||||
*--------------------------------------
|
||||
.5 jsr OBJ.Draw.Top
|
||||
bcs .99
|
||||
|
||||
jsr OBJ.Draw.Body
|
||||
|
@ -316,7 +363,7 @@ OBJ.Draw >PUSHA hObj
|
|||
cmp #S.OBJ
|
||||
bne .6
|
||||
|
||||
clc
|
||||
.8 clc
|
||||
|
||||
.98 inc pStack
|
||||
|
||||
|
@ -727,10 +774,40 @@ OBJ.FindActive ldx ZPObjPtr
|
|||
|
||||
rts
|
||||
*--------------------------------------
|
||||
OBJ.Show pha
|
||||
|
||||
jsr LIB.GetOBJ
|
||||
|
||||
jsr OBJ.CurOff
|
||||
|
||||
ldy #S.OBJ.S
|
||||
lda (ZPObjPtr),y
|
||||
and #S.OBJ.S.bHidden^$ff
|
||||
sta (ZPObjPtr),y
|
||||
|
||||
pla
|
||||
|
||||
jmp OBJ.Draw
|
||||
*--------------------------------------
|
||||
OBJ.Hide pha
|
||||
|
||||
jsr LIB.GetOBJ
|
||||
|
||||
jsr OBJ.CurOff
|
||||
|
||||
ldy #S.OBJ.S
|
||||
lda (ZPObjPtr),y
|
||||
ora #S.OBJ.S.bHidden
|
||||
sta (ZPObjPtr),y
|
||||
|
||||
pla
|
||||
|
||||
jmp OBJ.Draw
|
||||
*--------------------------------------
|
||||
OBJ.CurUpdPos ldy #S.OBJ.F
|
||||
lda (ZPObjPtr),y
|
||||
and #S.OBJ.F.bEdit
|
||||
* beq .8
|
||||
beq .8
|
||||
|
||||
ldy #S.OBJ.S
|
||||
lda (ZPObjPtr),y S.OBJ.S.bActive
|
||||
|
@ -856,7 +933,15 @@ OBJ.DecWordAtY clc
|
|||
sta (ZPObjPtr),y
|
||||
rts
|
||||
*--------------------------------------
|
||||
OBJ.GetBuf ldy #S.OBJ.pBuf
|
||||
OBJ.GetpVarPtr2 ldy #S.OBJ.pVar
|
||||
lda (ZPObjPtr),y
|
||||
sta ZPPtr2
|
||||
iny
|
||||
lda (ZPObjPtr),y
|
||||
sta ZPPtr2+1
|
||||
rts
|
||||
*--------------------------------------
|
||||
OBJ.GetpBufPtr1 ldy #S.OBJ.pBuf
|
||||
lda (ZPObjPtr),y
|
||||
sta ZPPtr1
|
||||
iny
|
||||
|
@ -864,11 +949,7 @@ OBJ.GetBuf ldy #S.OBJ.pBuf
|
|||
sta ZPPtr1+1
|
||||
rts
|
||||
*--------------------------------------
|
||||
OBJ.GetLineXAtY lda (ZPObjPtr),y
|
||||
sta ZPPtr1
|
||||
iny
|
||||
lda (ZPObjPtr),y
|
||||
sta ZPPtr1+1
|
||||
OBJ.GetLineXAtY jsr OBJ.GetpBufPtr1
|
||||
|
||||
stz TempI
|
||||
|
||||
|
@ -880,24 +961,7 @@ OBJ.GetLineXAtY lda (ZPObjPtr),y
|
|||
|
||||
.2 inc TempI
|
||||
|
||||
ldy #$ff
|
||||
|
||||
.4 iny
|
||||
lda (ZPPtr1),y
|
||||
clc
|
||||
beq .5
|
||||
|
||||
cmp #C.CR
|
||||
bne .4
|
||||
|
||||
* sec
|
||||
|
||||
.5 tya
|
||||
adc ZPPtr1
|
||||
sta ZPPtr1
|
||||
bcc .1
|
||||
|
||||
inc ZPPtr1+1
|
||||
jsr OBJ.NextLinePtr1
|
||||
bra .1
|
||||
|
||||
.8 clc
|
||||
|
@ -906,6 +970,30 @@ OBJ.GetLineXAtY lda (ZPObjPtr),y
|
|||
.9 sec
|
||||
rts
|
||||
*--------------------------------------
|
||||
OBJ.NextLinePtr1
|
||||
ldy #$ff
|
||||
|
||||
.1 iny
|
||||
lda (ZPPtr1),y
|
||||
bne .1
|
||||
|
||||
tya
|
||||
beq .9 Empty Line
|
||||
|
||||
sec
|
||||
adc ZPPtr1
|
||||
sta ZPPtr1
|
||||
bcc .8
|
||||
|
||||
inc ZPPtr1+1
|
||||
|
||||
clc
|
||||
|
||||
.8 rts
|
||||
|
||||
.9 sec
|
||||
rts
|
||||
*--------------------------------------
|
||||
MAN
|
||||
SAVE usr/src/lib/libtui.s.obj
|
||||
LOAD usr/src/lib/libtui.s
|
||||
|
|
|
@ -2,12 +2,16 @@ NEW
|
|||
AUTO 3,1
|
||||
.LIST OFF
|
||||
*--------------------------------------
|
||||
* RADIO.New hParent,X1,Y1,HK,EV,pList,pVar 9
|
||||
* RADIO.New hParent,X1,Y1,HK,EV,pList,pVar,F 10
|
||||
*--------------------------------------
|
||||
RADIO.New lda #S.OBJ.T.RADIO
|
||||
jsr OBJ.Create
|
||||
bcs .9
|
||||
|
||||
>PULLA
|
||||
ldy #S.OBJ.F
|
||||
sta (ZPObjPtr),y
|
||||
|
||||
ldy #S.OBJ.pVar
|
||||
jsr OBJ.PullWordY
|
||||
|
||||
|
@ -26,29 +30,11 @@ RADIO.New lda #S.OBJ.T.RADIO
|
|||
|
||||
ldx #0
|
||||
|
||||
.1 ldy #$ff
|
||||
|
||||
.2 iny
|
||||
lda (ZPPtr1),y
|
||||
clc
|
||||
beq .20
|
||||
|
||||
cmp #C.CR
|
||||
bne .2
|
||||
.1 jsr OBJ.NextLinePtr1
|
||||
bcs .5 empty line
|
||||
|
||||
* sec
|
||||
|
||||
.20 tya
|
||||
beq .5 empty line
|
||||
|
||||
adc ZPPtr1
|
||||
sta ZPPtr1
|
||||
bcc .3
|
||||
|
||||
inc ZPPtr1+1
|
||||
|
||||
.3 tya
|
||||
clc
|
||||
tya
|
||||
* clc
|
||||
adc #5 room for " ( ) "
|
||||
ldy #S.OBJ.W
|
||||
cmp (ZPObjPtr),y
|
||||
|
@ -74,7 +60,7 @@ RADIO.New lda #S.OBJ.T.RADIO
|
|||
* clc
|
||||
rts
|
||||
|
||||
.9 >POP 9
|
||||
.9 >POP 10
|
||||
|
||||
rts
|
||||
*--------------------------------------
|
||||
|
@ -87,18 +73,18 @@ RADIO.Run ldy #S.OBJ.S
|
|||
cmp #C.SPACE
|
||||
bne .2
|
||||
|
||||
ldy #S.OBJ.pVar
|
||||
lda (ZPObjPtr),y
|
||||
sta ZPPtr1
|
||||
iny
|
||||
lda (ZPObjPtr),y
|
||||
sta ZPPtr1+1
|
||||
jsr OBJ.GetpVarPtr2
|
||||
|
||||
ldy #S.RADIO.Idx
|
||||
lda (ZPObjPtr),y
|
||||
sta (ZPPtr1)
|
||||
sta (ZPPtr2)
|
||||
|
||||
bra .7
|
||||
jsr .7
|
||||
|
||||
ldy #S.BUT.EV
|
||||
lda (ZPObjPtr),y
|
||||
* clc
|
||||
rts
|
||||
|
||||
.2 cmp #C.LF
|
||||
bne .5
|
||||
|
@ -150,16 +136,10 @@ RADIO.Run ldy #S.OBJ.S
|
|||
RADIO.Draw lda (pStack) Relative Y
|
||||
tax
|
||||
|
||||
ldy #S.OBJ.pBuf
|
||||
jsr OBJ.GetLineXAtY
|
||||
bcs .8
|
||||
|
||||
ldy #S.OBJ.pVar
|
||||
lda (ZPObjPtr),y
|
||||
sta ZPPtr2
|
||||
iny
|
||||
lda (ZPObjPtr),y
|
||||
sta ZPPtr2+1
|
||||
jsr OBJ.GetpVarPtr2
|
||||
|
||||
clc
|
||||
ldx #'('
|
||||
|
@ -194,6 +174,7 @@ RADIO.Draw lda (pStack) Relative Y
|
|||
bra .13
|
||||
|
||||
.11 lda #C.SPACE
|
||||
|
||||
.13 jsr LB.COut
|
||||
|
||||
ldx #')'
|
||||
|
@ -232,11 +213,6 @@ RADIO.Draw lda (pStack) Relative Y
|
|||
.8 clc
|
||||
rts
|
||||
*--------------------------------------
|
||||
RADIO.Activate
|
||||
*--------------------------------------
|
||||
RADIO.Deactivate
|
||||
jmp OBJ.Draw.Body
|
||||
*--------------------------------------
|
||||
MAN
|
||||
SAVE usr/src/lib/libtui.s.radio
|
||||
LOAD usr/src/lib/libtui.s
|
||||
|
|
|
@ -2,23 +2,24 @@ NEW
|
|||
AUTO 3,1
|
||||
.LIST OFF
|
||||
*--------------------------------------
|
||||
* TBOX.New hParent,X1,Y1,W,H,F,pBuf,BufSize 10
|
||||
* TBOX.New hParent,X1,Y1,W,H,pBuf,BufSize,F 10
|
||||
*--------------------------------------
|
||||
TBOX.New lda #S.OBJ.T.TBOX
|
||||
jsr OBJ.Create
|
||||
bcs .9
|
||||
|
||||
jsr OBJ.PullBuf
|
||||
|
||||
>PULLA
|
||||
ldy #S.OBJ.F
|
||||
sta (ZPObjPtr),y
|
||||
|
||||
jsr OBJ.PullBuf
|
||||
|
||||
jsr OBJ.PullHW
|
||||
|
||||
jsr OBJ.PullY1X1hParent
|
||||
|
||||
jsr CONT.Insert
|
||||
|
||||
bcs .99
|
||||
|
||||
lda hObj
|
||||
|
@ -50,7 +51,9 @@ TBOX.Run ldy #S.OBJ.S
|
|||
tax
|
||||
jmp (J.TBOX.RUN.RO,x)
|
||||
|
||||
.1 jmp TBOX.RUN.GetLink
|
||||
.1 lda #EV.HL.PRESSED
|
||||
clc
|
||||
rts
|
||||
*--------------------------------------
|
||||
TBOX.Run.RW lda (pStack) Event
|
||||
|
||||
|
@ -93,7 +96,34 @@ TBOX.RUN.Ignore lda #0
|
|||
rts
|
||||
*--------------------------------------
|
||||
TBOX.RUN.PrevLink
|
||||
jsr OBJ.GetpBufPtr1
|
||||
|
||||
ldy #S.TBOX.SelBegin
|
||||
jsr TBOX.RUN.GetSel -> TempC
|
||||
|
||||
.1 ldx #0
|
||||
|
||||
.2 jsr TBOX.GetCharBW
|
||||
beq TBOX.RUN.PrevLink.9
|
||||
|
||||
cmp #'['
|
||||
bne .1
|
||||
|
||||
cpx #'['
|
||||
beq .3
|
||||
|
||||
tax
|
||||
bra .2
|
||||
|
||||
.3 lda ZPPtr1
|
||||
sta TempI
|
||||
lda ZPPtr1+1
|
||||
sta TempI+1
|
||||
|
||||
jsr TBOX.RUN.CheckLink
|
||||
bcs .1
|
||||
|
||||
rts
|
||||
|
||||
TBOX.RUN.PrevLink.9
|
||||
lda #0
|
||||
|
@ -101,113 +131,137 @@ TBOX.RUN.PrevLink.9
|
|||
rts
|
||||
*--------------------------------------
|
||||
TBOX.RUN.NextLink
|
||||
jsr TBOX.GetDocYInAX
|
||||
|
||||
jsr TBOX.GetLineAX will do GetBuf
|
||||
bcs TBOX.RUN.PrevLink.9
|
||||
|
||||
jsr TBOX.SetLineAtDocX
|
||||
|
||||
.1 ldx #$ff
|
||||
|
||||
.2 inx
|
||||
|
||||
jsr TBOX.GetChar
|
||||
beq .9
|
||||
|
||||
cmp #C.CR
|
||||
beq .7
|
||||
jsr OBJ.GetpBufPtr1
|
||||
|
||||
ldy #S.TBOX.SelEnd
|
||||
jsr TBOX.RUN.GetSel -> TempC
|
||||
|
||||
.1 ldx #0
|
||||
|
||||
.2 jsr TBOX.GetCharFW
|
||||
beq TBOX.RUN.PrevLink.9
|
||||
|
||||
cmp #'['
|
||||
bne .2
|
||||
bne .1
|
||||
|
||||
cpx #'['
|
||||
beq .3
|
||||
|
||||
tax
|
||||
bra .2
|
||||
|
||||
cmp (ZPPtr1) "[["
|
||||
bne .2
|
||||
.3 lda ZPPtr1
|
||||
sec
|
||||
sbc #2
|
||||
sta TempI
|
||||
lda ZPPtr1+1
|
||||
sbc #0
|
||||
sta TempI+1
|
||||
|
||||
lda TempC
|
||||
sec
|
||||
sbc #2
|
||||
sta TempC
|
||||
lda TempC+1
|
||||
sbc #0
|
||||
sta TempC+1
|
||||
|
||||
jsr TBOX.RUN.SelectLink
|
||||
|
||||
.3 jsr TBOX.GetChar
|
||||
jsr TBOX.RUN.CheckLink
|
||||
bcc .99
|
||||
|
||||
|
||||
.9 lda #0
|
||||
sec
|
||||
.99 rts
|
||||
*--------------------------------------
|
||||
TBOX.RUN.GetSel lda (ZPObjPtr),y
|
||||
sta TempC
|
||||
clc
|
||||
adc ZPPtr1
|
||||
sta ZPPtr1
|
||||
|
||||
iny
|
||||
lda (ZPObjPtr),y
|
||||
sta TempC+1
|
||||
adc ZPPtr1+1
|
||||
sta ZPPtr1+1
|
||||
|
||||
rts
|
||||
*--------------------------------------
|
||||
TBOX.RUN.CheckLink
|
||||
ldy #S.TBOX.BufPtr
|
||||
jsr TBOX.SetTempCAtY
|
||||
|
||||
ldy #S.TBOX.SelBegin
|
||||
jsr TBOX.SetTempCAtY
|
||||
|
||||
ldx #0
|
||||
|
||||
.1 jsr TBOX.GetCharFW
|
||||
beq .9
|
||||
|
||||
cmp #C.CR
|
||||
beq .7
|
||||
beq .9
|
||||
|
||||
iny
|
||||
|
||||
cmp #']'
|
||||
bne .1
|
||||
|
||||
cpx #']'
|
||||
beq .2
|
||||
|
||||
tax
|
||||
bra .1
|
||||
|
||||
.2 ldy #S.TBOX.SelEnd
|
||||
jsr TBOX.SetTempCAtY
|
||||
|
||||
jsr OBJ.GetpVarPtr2
|
||||
|
||||
ldy #$ff SKIP "[[TEXT]"
|
||||
|
||||
.3 iny
|
||||
lda (TempI),y
|
||||
cmp #']'
|
||||
bne .3
|
||||
|
||||
jsr TBOX.RUN.Link2pVar
|
||||
tya
|
||||
sec
|
||||
adc TempI
|
||||
sta TempI
|
||||
bcc .4
|
||||
|
||||
jsr TBOX.SetViewPort
|
||||
bit bRepaintAll
|
||||
bmi .6
|
||||
inc TempI+1
|
||||
|
||||
jsr OBJ.CurUpdPos
|
||||
.4 ldy #$ff
|
||||
|
||||
jsr TBOX.DrawCurLine
|
||||
bra .60
|
||||
.5 iny
|
||||
lda (TempI),y
|
||||
sta (ZPPtr2),y
|
||||
cmp #']'
|
||||
bne .5
|
||||
|
||||
lda #0
|
||||
sta (ZPPtr2),y
|
||||
|
||||
* jsr TBOX.SetViewPort
|
||||
* bit bRepaintAll
|
||||
* bmi .6
|
||||
|
||||
* jsr OBJ.CurUpdPos
|
||||
|
||||
* jsr TBOX.DrawCurLine
|
||||
* bra .60
|
||||
|
||||
.6 jsr TBOX.DrawAllLines
|
||||
|
||||
.60 lda #EV.HL.SELECTED
|
||||
clc
|
||||
rts
|
||||
|
||||
.7 ldy #S.TBOX.DocX
|
||||
jsr OBJ.ZeroWordAtY
|
||||
|
||||
ldy #S.TBOX.DocY
|
||||
jsr OBJ.IncWordAtY
|
||||
bra .1
|
||||
|
||||
.9 lda #0
|
||||
sec
|
||||
rts
|
||||
*--------------------------------------
|
||||
TBOX.RUN.SelectLink
|
||||
txa
|
||||
sec skip first [
|
||||
ldy #S.TBOX.DocX
|
||||
adc (ZPObjPtr),y
|
||||
sta (ZPObjPtr),y
|
||||
iny
|
||||
lda #0
|
||||
adc (ZPObjPtr),y
|
||||
sta (ZPObjPtr),y
|
||||
|
||||
ldy #S.TBOX.BufPtr
|
||||
jsr TBOX.SetTempCAtY
|
||||
|
||||
ldy #S.TBOX.SelBegin
|
||||
jmp TBOX.SetTempCAtY
|
||||
*--------------------------------------
|
||||
TBOX.RUN.Link2pVar
|
||||
ldy #S.TBOX.SelEnd
|
||||
jsr TBOX.SetTempCAtY
|
||||
|
||||
ldy #S.OBJ.pVar
|
||||
lda (ZPObjPtr),y
|
||||
sta ZPPtr2
|
||||
iny
|
||||
lda (ZPObjPtr),y
|
||||
sta ZPPtr2+1
|
||||
|
||||
ldy #0
|
||||
|
||||
.1 jsr TBOX.GetChar
|
||||
beq .8
|
||||
|
||||
cmp #C.CR
|
||||
beq .8
|
||||
|
||||
cmp #']'
|
||||
beq .8
|
||||
|
||||
sta (ZPPtr2),y
|
||||
iny
|
||||
bra .1
|
||||
|
||||
.8 lda #0
|
||||
sta (ZPPtr2),y
|
||||
|
||||
.9 sec
|
||||
rts
|
||||
*--------------------------------------
|
||||
TBOX.RUN.GetLink
|
||||
|
@ -223,17 +277,16 @@ TBOX.RUN.GetLink
|
|||
TBOX.RUN.ScrollUp
|
||||
jsr TBOX.GetBuf
|
||||
|
||||
ldy #S.TBOX.VScroll
|
||||
ldy #S.OBJ.InnerH
|
||||
lda (ZPObjPtr),y
|
||||
clc
|
||||
ldy #S.OBJ.InnerH
|
||||
ldy #S.TBOX.VScroll
|
||||
adc (ZPObjPtr),y
|
||||
pha
|
||||
|
||||
ldy #S.TBOX.VScroll+1
|
||||
iny #S.TBOX.VScroll+1
|
||||
lda (ZPObjPtr),y
|
||||
ldy #S.OBJ.InnerH+1
|
||||
adc (ZPObjPtr),y
|
||||
adc #0
|
||||
plx
|
||||
|
||||
jsr TBOX.GetLineAX
|
||||
|
@ -588,9 +641,6 @@ TBOX.DrawCurLine
|
|||
|
||||
jmp OBJ.Draw.Lines
|
||||
*--------------------------------------
|
||||
* hyperlinks: [[text]targetUrl]
|
||||
* htags: [#htag]text]
|
||||
*--------------------------------------
|
||||
TBOX.Draw ldy #S.TBOX.VScroll
|
||||
lda (ZPObjPtr),y
|
||||
clc
|
||||
|
@ -678,7 +728,7 @@ TBOX.SetProp jsr OBJ.SetProp
|
|||
cpy #S.TBOX.BufPtr+2
|
||||
bcc .1
|
||||
|
||||
jsr OBJ.GetBuf
|
||||
jsr OBJ.GetpBufPtr1
|
||||
|
||||
ldx #0
|
||||
ldy #0
|
||||
|
@ -705,7 +755,7 @@ TBOX.SetProp jsr OBJ.SetProp
|
|||
.8 clc
|
||||
.9 rts
|
||||
*--------------------------------------
|
||||
TBOX.GetBuf jsr OBJ.GetBuf
|
||||
TBOX.GetBuf jsr OBJ.GetpBufPtr1
|
||||
|
||||
ldy #S.TBOX.BufPtr
|
||||
lda ZPPtr1
|
||||
|
@ -732,7 +782,7 @@ TBOX.GetDocYInAX
|
|||
TBOX.GetLineAX stx TempW
|
||||
sta TempW+1 Req Line Num
|
||||
|
||||
jsr OBJ.GetBuf get pBuf in ZPPtr1
|
||||
jsr OBJ.GetpBufPtr1
|
||||
|
||||
stz TempI Current Line Num
|
||||
stz TempI+1
|
||||
|
@ -843,50 +893,66 @@ TBOX.ResetSel bit bTemp1
|
|||
|
||||
.8 rts
|
||||
*--------------------------------------
|
||||
* hyperlinks: [[text]targetUrl#targetHtag]
|
||||
* htags: [#htag]
|
||||
*--------------------------------------
|
||||
TBOX.GetLineChar
|
||||
ldy #S.OBJ.F
|
||||
lda (ZPObjPtr),y
|
||||
and #S.OBJ.F.bEdit
|
||||
bne TBOX.GetChar
|
||||
bne TBOX.GetCharFW
|
||||
|
||||
bit bTemp2
|
||||
bmi .1
|
||||
bmi .3
|
||||
|
||||
jsr TBOX.GetChar
|
||||
jsr TBOX.GetCharFW
|
||||
beq .8
|
||||
|
||||
cmp #'['
|
||||
bne .8 NZ
|
||||
|
||||
cmp (ZPPtr1) "[["
|
||||
bne .8 NZ
|
||||
bne .1
|
||||
|
||||
dec bTemp2
|
||||
rts NZ
|
||||
dec bTemp2
|
||||
|
||||
bra TBOX.GetCharFW skip "[["
|
||||
|
||||
.1 jsr TBOX.GetChar
|
||||
.1 lda (ZPPtr1) "[#" ?
|
||||
cmp #'#'
|
||||
beq .2
|
||||
|
||||
lda #'[' NZ
|
||||
rts
|
||||
|
||||
.2 jsr TBOX.GetCharFW skip "[#"
|
||||
beq .8
|
||||
|
||||
cmp #']' skip "htag]"
|
||||
bne .2
|
||||
|
||||
bra TBOX.GetCharFW skip "]"
|
||||
|
||||
.3 jsr TBOX.GetCharFW
|
||||
beq .8
|
||||
|
||||
cmp #'['
|
||||
beq .1 skip 2nd [
|
||||
|
||||
cmp #']' "[[display]"
|
||||
cmp #']' "text"
|
||||
bne .8 NZ
|
||||
|
||||
stz bTemp2
|
||||
|
||||
.2 jsr TBOX.GetChar skip "link]"
|
||||
.4 jsr TBOX.GetCharFW skip "link]"
|
||||
beq .8
|
||||
|
||||
cmp #']'
|
||||
bne .2
|
||||
bne .4
|
||||
|
||||
lda #']' NZ
|
||||
|
||||
.8 rts
|
||||
*--------------------------------------
|
||||
TBOX.GetChar lda (ZPPtr1)
|
||||
beq .8
|
||||
TBOX.GetCharFW lda (ZPPtr1)
|
||||
beq .9
|
||||
|
||||
inc ZPPtr1
|
||||
bne .1
|
||||
|
@ -894,11 +960,33 @@ TBOX.GetChar lda (ZPPtr1)
|
|||
inc ZPPtr1+1
|
||||
|
||||
.1 inc TempC
|
||||
bne .8
|
||||
bne .9
|
||||
|
||||
inc TempC+1 NZ
|
||||
|
||||
.8 rts
|
||||
.9 rts
|
||||
*--------------------------------------
|
||||
TBOX.GetCharBW lda TempC
|
||||
ora TempC+1
|
||||
beq .9
|
||||
|
||||
lda ZPPtr1
|
||||
bne .1
|
||||
|
||||
dec ZPPtr1+1
|
||||
|
||||
.1 dec ZPPtr1
|
||||
|
||||
lda TempC
|
||||
bne .2
|
||||
|
||||
dec TempC+1
|
||||
|
||||
.2 dec TempC
|
||||
|
||||
lda (ZPPtr1)
|
||||
|
||||
.9 rts
|
||||
*--------------------------------------
|
||||
TBOX.CmpTempCAtY
|
||||
lda TempC
|
||||
|
|
|
@ -2,18 +2,19 @@ NEW
|
|||
AUTO 3,1
|
||||
.LIST OFF
|
||||
*--------------------------------------
|
||||
* TLINE.New hParent,X1,Y1,W,pBuf,MaxLen 8
|
||||
* TLINE.New hParent,X1,Y1,W,pBuf,MaxLen,F 8
|
||||
*--------------------------------------
|
||||
TLINE.New lda #S.OBJ.T.TLINE
|
||||
jsr OBJ.Create
|
||||
bcs .9
|
||||
|
||||
jsr OBJ.PullBuf
|
||||
|
||||
>PULLA
|
||||
ldy #S.OBJ.F
|
||||
lda #S.OBJ.F.bHScroll+S.OBJ.F.bEdit
|
||||
ora #S.OBJ.F.bHScroll+S.OBJ.F.bEdit
|
||||
sta (ZPObjPtr),y
|
||||
|
||||
jsr OBJ.PullBuf
|
||||
|
||||
>PULLA
|
||||
ldy #S.OBJ.W
|
||||
sta (ZPObjPtr),y
|
||||
|
@ -34,7 +35,7 @@ TLINE.New lda #S.OBJ.T.TLINE
|
|||
* clc
|
||||
rts
|
||||
|
||||
.9 >POP 7
|
||||
.9 >POP 8
|
||||
|
||||
.99 rts
|
||||
*--------------------------------------
|
||||
|
@ -42,7 +43,17 @@ TLINE.Run ldy #S.OBJ.S
|
|||
lda (ZPObjPtr),y
|
||||
bpl .9 S.OBJ.S.bActive
|
||||
|
||||
jsr OBJ.GetBuf
|
||||
jsr OBJ.GetpBufPtr1
|
||||
|
||||
ldy #$ff
|
||||
|
||||
.1 iny
|
||||
lda (ZPPtr1),y
|
||||
bne .1
|
||||
|
||||
tya
|
||||
ldy #S.TLINE.Len
|
||||
sta (ZPObjPtr),y
|
||||
|
||||
lda (pStack) Event
|
||||
cmp #C.DEL
|
||||
|
@ -82,14 +93,14 @@ TLINE.Run ldy #S.OBJ.S
|
|||
|
||||
ply
|
||||
|
||||
.1 dey
|
||||
.3 dey
|
||||
lda (ZPPtr1),y
|
||||
iny
|
||||
sta (ZPPtr1),y
|
||||
|
||||
dey
|
||||
cpy TempW
|
||||
bne .1
|
||||
bne .3
|
||||
|
||||
lda (pStack)
|
||||
ldy TempW
|
||||
|
@ -156,7 +167,7 @@ TLINE.RUN.DEL ldy #S.TLINE.Ptr
|
|||
.8 clc
|
||||
rts
|
||||
*--------------------------------------
|
||||
TLINE.Draw jsr OBJ.GetBuf
|
||||
TLINE.Draw jsr OBJ.GetpBufPtr1
|
||||
|
||||
ldx #C.SPACE
|
||||
|
||||
|
|
|
@ -70,6 +70,9 @@ CS.START cld
|
|||
.DA LIB.SetProp
|
||||
.DA OBJ.Activate
|
||||
.DA OBJ.Deactivate
|
||||
.DA OBJ.FindActive
|
||||
.DA OBJ.Show
|
||||
.DA OBJ.Hide
|
||||
*--------------------------------------
|
||||
J.ObjDestroy .DA OBJ.Destroy
|
||||
.DA OBJ.Destroy
|
||||
|
@ -106,20 +109,20 @@ J.ObjActivate .DA OBJ.Activate
|
|||
.DA LABEL.Activate
|
||||
.DA TLINE.Activate
|
||||
.DA TBOX.Activate
|
||||
.DA LBOX.Activate
|
||||
.DA CBOX.Activate
|
||||
.DA BUT.Activate
|
||||
.DA RADIO.Activate
|
||||
.DA OBJ.Draw.Body LBOX.Activate
|
||||
.DA OBJ.Draw.Body CBOX.Activate
|
||||
.DA OBJ.Draw.Body BUT.Activate
|
||||
.DA OBJ.Draw.Body RADIO.Activate
|
||||
*--------------------------------------
|
||||
J.ObjDeactivate .DA OBJ.Deactivate
|
||||
.DA OBJ.Deactivate
|
||||
.DA LABEL.Deactivate
|
||||
.DA TLINE.Deactivate
|
||||
.DA TBOX.Deactivate
|
||||
.DA LBOX.Deactivate
|
||||
.DA CBOX.Deactivate
|
||||
.DA BUT.Deactivate
|
||||
.DA RADIO.Deactivate
|
||||
.DA OBJ.Draw.Body LBOX.Deactivate
|
||||
.DA OBJ.Draw.Body CBOX.Deactivate
|
||||
.DA OBJ.Draw.Body BUT.Deactivate
|
||||
.DA OBJ.Draw.Body RADIO.Deactivate
|
||||
*--------------------------------------
|
||||
J.ObjSetProp .DA OBJ.SetProp
|
||||
.DA OBJ.SetProp
|
||||
|
@ -308,7 +311,6 @@ LIB.GetCTX >LDYA ZPObjPtr
|
|||
lda (ZPCtxPtr),y
|
||||
beq *
|
||||
>SYSCALL2 GetMemPtr
|
||||
bcs *
|
||||
>STYA ZPCtxPtr
|
||||
|
||||
rts
|
||||
|
|
19
README.md
19
README.md
|
@ -1,8 +1,8 @@
|
|||
# A2osX Multi-Tasking OS for Apple II
|
||||
|
||||
### Updated May 24, 2020
|
||||
### Updated January 17, 2024
|
||||
|
||||
## A2osX 0.94
|
||||
## A2osX 0.95
|
||||
|
||||
![](./.screen-shots/ScreenShot.Logo.png)
|
||||
|
||||
|
@ -22,16 +22,21 @@ Consult the **[documentation](#documentation)** section below to find other reso
|
|||
|
||||
## News
|
||||
|
||||
### KansasFest 2021
|
||||
### Lots of updates for 2024!
|
||||
|
||||
The A2osX team is proud to present "A2osX and the Languages of Development," a virtual KansasFest 2021 presentation by Patrick Kloepfer, which you can find **[here](https://www.youtube.com/watch?v=5OO9vj991vo)**.
|
||||
It has been a long time since the news has been updated, but that doesn't mean that development on A2osX has ceased in the last 4 years! We've actually had quite a number of releases over this time. In general, stability has been greatly improved but there have also been additions like BASIC.FX which is a ProDOS BASIC.SYSTEM environment which supports a number of ProDOS FX extensions (RamWorks III and extension commands for starters).
|
||||
|
||||
### Upcoming Release - 0.94 Stable Alpha
|
||||
As far as where things are going now, development is underway on Kernel 1.0 which will finally bring support for breaking past the 128KB barrier of the //e series by supporting RamWorks-type memory cards. In the past, RamWorks boards were supported but would only allow for /RAM type storage. With Kernel 1.0, up to 8MB of RAM can now be used for code and applications! Early builds of the new kernel are expected in 1H 2024.
|
||||
|
||||
The A2osX Team is preparing to issue the first Stable Alpha of A2osX Version 0.94. This new version will include an updated version of ProDOS FX, further kernel enhancements to improve memory usage and for the first time an included Assembler so developers can edit, assemble and test problems all from with A2osX. We are inviting interested developers and testers to [join us on Slack!](#join-us-on-slack)
|
||||
With current builds and all going forward, the distributions are only shipped with [ProDOS FX](ProDOS.md) by default. While 2.0.3tc is still available and can be used with A2osX, the recommendation is now to use FX because of the filename case handling in addition to the number of under-the-hood improvements that FX offers. Both FX and 2.0.3tc's clock tables have been updated for 2024.
|
||||
|
||||
We are currently looking for volunteers to help with flushing out the C libraries! A C89-compliant compiler is available, however, the API needs some work to be compliant and can result in changing the kernel's APIs too, so "the sooner, the better" as the saying goes. Want to help? Reach out on the Slack server!
|
||||
|
||||
Finally, we are always looking for people to help! A project as complicated at A2osX requires a lot of testing, but we always need help with creating new applications, libraries, and documentation. If you have some applicable skills, let us know!
|
||||
|
||||
If you would like to read all the past news articles for A2osX, you can read the news article found **[here](.Docs/News.md)**.
|
||||
|
||||
|
||||
## **Visit us at [A2osX](http://www.a2osx.com)**
|
||||
|
||||
This is just a place holder and plug for our [A2osX](http://www.a2osx.com) internet site. Stay tuned here for news about this site. We have created a Page to discuss A2osX on **[Facebook](https://www.facebook.com/A2osx-372512896625840/)** and have a new **[Twitter](https://twitter.com/A2Osx)** handle to test new A2osX features which will soon be used as a messaging channel, so please follow. We have created a new forum for discussing A2osX, features, examples, use cases, etc. It can be found on **[Google Groups](https://groups.google.com/forum/#!forum/a2osx)**.
|
||||
|
@ -75,4 +80,4 @@ The full A2osX license can be found **[Here](LICENSE)**.
|
|||
|
||||
## Copyright
|
||||
|
||||
Copyright 2015 - 2020, Remy Gibert and the A2osX contributors.
|
||||
Copyright 2015 - 2024, Remy Gibert and the A2osX contributors.
|
||||
|
|
|
@ -7,6 +7,7 @@ NEW
|
|||
*--------------------------------------
|
||||
.INB inc/macros.i
|
||||
.INB inc/a2osx.i
|
||||
.INB inc/kernel.i
|
||||
.INB inc/mli.i
|
||||
.INB inc/mli.e.i
|
||||
.INB inc/eth.i
|
||||
|
@ -179,7 +180,10 @@ CS.RUN.INIT ldx #3
|
|||
CS.RUN.CLIENT >SLEEP give some time for TCPIP SYN/ACK
|
||||
|
||||
sta hClientSocket
|
||||
>SYSCALL GetMemPtr
|
||||
tax
|
||||
|
||||
lda FDs.pHI-1,x
|
||||
ldy FDs.pLO-1,x
|
||||
>STYA ZPSktPtr
|
||||
|
||||
>PUSHW L.MSG.INCOMING
|
||||
|
@ -203,8 +207,8 @@ CS.RUN.CLIENT >SLEEP give some time for TCPIP SYN/ACK
|
|||
>PUSHBI 1
|
||||
>SYSCALL SPrintF
|
||||
|
||||
CS.RUN.CLIENT1 >PUSHEA.G NodBuf+5
|
||||
>PUSHW 0
|
||||
CS.RUN.CLIENT1 >PUSHEA.G NodBuf
|
||||
>PUSHWZ
|
||||
>PUSHB hClientSocket
|
||||
>SYSCALL MKNod
|
||||
bcs .9
|
||||
|
@ -223,6 +227,10 @@ CS.RUN.CLIENT1 >PUSHEA.G NodBuf+5
|
|||
* clc
|
||||
.9 rts
|
||||
*--------------------------------------
|
||||
_DEBUG >LDYA.G CmdBuf
|
||||
>SYSCALL PutS
|
||||
rts
|
||||
*--------------------------------------
|
||||
CS.DOEVENT lda (pEvent)
|
||||
bpl .9 is it a TIMER event?
|
||||
|
||||
|
@ -252,6 +260,7 @@ CS.RUN.CONF >PUSHW L.ETCBBSDCONF
|
|||
>PUSHBI S.FI.T.TXT
|
||||
>PUSHWZ
|
||||
>SYSCALL FOpen
|
||||
|
||||
bcs CS.QUIT.RTS
|
||||
|
||||
sta hFile
|
||||
|
@ -269,9 +278,9 @@ CS.RUN.CONF >PUSHW L.ETCBBSDCONF
|
|||
>SYSCALL FGetS
|
||||
bcs .8
|
||||
|
||||
tya
|
||||
lda (ZPLinePtr)
|
||||
beq .1
|
||||
|
||||
|
||||
lda (ZPLinePtr)
|
||||
cmp #'#'
|
||||
beq .1
|
||||
|
@ -311,6 +320,7 @@ CS.RUN.CONF >PUSHW L.ETCBBSDCONF
|
|||
adc ZPPtr1
|
||||
sta ZPPtr1
|
||||
bcc .6
|
||||
|
||||
inc ZPPtr1+1
|
||||
|
||||
.6 lda (ZPPtr1)
|
||||
|
@ -346,7 +356,7 @@ CS.RUN.CONF.JMP tya
|
|||
lda #0
|
||||
adc ZPLinePtr+1
|
||||
sta ZPPtr1+1
|
||||
|
||||
|
||||
jmp (J.KEYWORDS.CONF,x)
|
||||
|
||||
CS.RUN.CONF.TCPLISTEN
|
||||
|
@ -358,9 +368,10 @@ CS.RUN.CONF.TCPLISTEN
|
|||
.9 rts
|
||||
|
||||
CS.RUN.CONF.COMLISTEN
|
||||
clc
|
||||
|
||||
.9 clc
|
||||
rts
|
||||
|
||||
.9 rts
|
||||
CS.RUN.CONF.MSGFILE
|
||||
>PUSHYA
|
||||
>PUSHWZ Allocate
|
||||
|
|
|
@ -74,7 +74,7 @@ PrintFYA.92 ldx #$83 RRAMWRAMBNK2
|
|||
lda $C000,x
|
||||
PrintFYA.98 lda #$ff Self modified RTS HI
|
||||
pha
|
||||
PrintFYA.99 lda #$ff Self modified RTS LOPrintFYAPrintFYA
|
||||
PrintFYA.99 lda #$ff Self modified RTS LO
|
||||
pha
|
||||
|
||||
rts
|
||||
|
|
|
@ -43,7 +43,7 @@ K.ReadDir.EL .BS 1
|
|||
K.ReadDir.EPB .BS 1
|
||||
K.ReadDir.EC .BS 2
|
||||
|
||||
K.ReadDir.BufSize .BS 2
|
||||
K.ReadDir.BufS .BS 2
|
||||
K.ReadDir.hBuf .BS 1
|
||||
.ED
|
||||
*--------------------------------------
|
||||
|
@ -94,13 +94,13 @@ K.ReadDir.ROOT ldy #S.FD.DIR.FC did we already returned something ?
|
|||
|
||||
.2 lda (ZPPtr2),y
|
||||
sta K.MLI.PATH+1,y
|
||||
jsr K.ReadDir.AddToBuf
|
||||
jsr K.ReadDir.Add2B
|
||||
iny
|
||||
dex
|
||||
bne .2
|
||||
|
||||
txa Add ending 0 for C String
|
||||
jsr K.ReadDir.AddToBuf
|
||||
jsr K.ReadDir.Add2B
|
||||
|
||||
jsr FS.ClrStat
|
||||
|
||||
|
@ -160,7 +160,7 @@ K.ReadDir.ROOT ldy #S.FD.DIR.FC did we already returned something ?
|
|||
|
||||
.7 iny
|
||||
lda (ZPPtr2),y
|
||||
jsr K.ReadDir.AddToBuf
|
||||
jsr K.ReadDir.Add2B
|
||||
eor #0
|
||||
bne .7
|
||||
|
||||
|
@ -190,7 +190,7 @@ K.ReadDir.DIR sta K.MLI.PARAMS+1 A=#S.DIR.PRODOS.REF
|
|||
lda /512
|
||||
sta K.MLI.PARAMS+5
|
||||
|
||||
>MLICALL MLI.READ Read A block from directory
|
||||
K.ReadDir.DIR0 >MLICALL MLI.READ Read A block from directory
|
||||
bcs .99
|
||||
|
||||
ldy #S.FD.DIR.EL Check if first run....
|
||||
|
@ -245,29 +245,33 @@ K.ReadDir.DIR sta K.MLI.PARAMS+1 A=#S.DIR.PRODOS.REF
|
|||
tay
|
||||
|
||||
inx Any entry remaining ?
|
||||
bne .5
|
||||
bne K.ReadDir.DIR1
|
||||
|
||||
iny
|
||||
bne .5
|
||||
bne K.ReadDir.DIR1
|
||||
|
||||
lda #MLI.E.EOF
|
||||
sec
|
||||
rts
|
||||
*--------------------------------------
|
||||
* pass #1 compute BufSize...
|
||||
* pass #1 compute BufS...
|
||||
*--------------------------------------
|
||||
.5 lda K.ReadDir.EPB
|
||||
K.ReadDir.DIR1 lda K.ReadDir.EPB
|
||||
sta K.ReadDir.ECIB
|
||||
|
||||
lda #1 For Ending 0
|
||||
sta K.ReadDir.BufSize
|
||||
stz K.ReadDir.BufSize+1
|
||||
sta K.ReadDir.BufS
|
||||
stz K.ReadDir.BufS+1
|
||||
|
||||
jsr K.ReadDir.P3Init
|
||||
|
||||
stz .8+1
|
||||
|
||||
K.ReadDir.DIR1 lda (ZPPtr3)
|
||||
.10 lda (ZPPtr3)
|
||||
beq .7 Free slot....goto next
|
||||
|
||||
inc .8+1
|
||||
|
||||
and #$F0 get storage_type
|
||||
cmp #$F0 Volume header ?
|
||||
beq .1
|
||||
|
@ -285,11 +289,11 @@ K.ReadDir.DIR1 lda (ZPPtr3)
|
|||
.2 lda #2+S.STAT+3+S.STAT add "1." + S.STAT + "2.." + S.STAT...
|
||||
|
||||
clc
|
||||
adc K.ReadDir.BufSize
|
||||
sta K.ReadDir.BufSize
|
||||
adc K.ReadDir.BufS
|
||||
sta K.ReadDir.BufS
|
||||
bcc .3
|
||||
|
||||
inc K.ReadDir.BufSize+1
|
||||
inc K.ReadDir.BufS+1
|
||||
|
||||
.3 inx X,Y = !Total entry Count
|
||||
bne .7
|
||||
|
@ -298,14 +302,19 @@ K.ReadDir.DIR1 lda (ZPPtr3)
|
|||
beq K.ReadDir.DIR2 we reached last entry in whole DIR
|
||||
|
||||
.7 jsr K.ReadDir.P3Next
|
||||
bne K.ReadDir.DIR1
|
||||
bne .10
|
||||
|
||||
.8 lda #$FF
|
||||
bne K.ReadDir.DIR2
|
||||
|
||||
jmp K.ReadDir.DIR0
|
||||
*--------------------------------------
|
||||
* pass #2 Fill Buffer...(ZPPtr1 & Ptr2 can now be trashed)
|
||||
*--------------------------------------
|
||||
K.ReadDir.DIR2 lda K.ReadDir.EPB
|
||||
sta K.ReadDir.ECIB
|
||||
|
||||
>LDYA K.ReadDir.BufSize Get a BufSize bytes buffer for storing results
|
||||
>LDYA K.ReadDir.BufS Get a BufS bytes buffer for storing results
|
||||
jsr K.ReadDir.GetBuf
|
||||
bcc .10
|
||||
|
||||
|
@ -327,14 +336,14 @@ K.ReadDir.DIR2 lda K.ReadDir.EPB
|
|||
bne .3
|
||||
|
||||
jsr K.ReadDir.ADD.
|
||||
jsr K.ReadDir.AddStatACL
|
||||
jsr K.ReadDir.SA2B
|
||||
|
||||
jsr K.ReadDir.ADD..
|
||||
bra .4
|
||||
|
||||
.3 jsr K.ReadDir.AddFNToBuf
|
||||
.3 jsr K.ReadDir.FN2B
|
||||
|
||||
.4 jsr K.ReadDir.AddStatACL
|
||||
.4 jsr K.ReadDir.SA2B
|
||||
|
||||
lda K.ReadDir.EC decrease global counter...
|
||||
sec
|
||||
|
@ -398,15 +407,14 @@ K.ReadDir.ADD..
|
|||
ldx #2 filename="2.."
|
||||
lda #'.'
|
||||
|
||||
.1 jsr K.ReadDir.AddToBuf Add X dot(s)
|
||||
.1 jsr K.ReadDir.Add2B Add X dot(s)
|
||||
dex
|
||||
bne .1
|
||||
|
||||
txa
|
||||
jmp K.ReadDir.AddToBuf Add Ending 0
|
||||
jmp K.ReadDir.Add2B Add Ending 0
|
||||
*--------------------------------------
|
||||
K.ReadDir.AddFNToBuf
|
||||
ldy #$1D version/min_version for lowercase bitmap
|
||||
K.ReadDir.FN2B ldy #$1D version/min_version for lowercase bitmap
|
||||
lda (ZPPtr3),y check bxxxxxxx.xxxxxxxx...
|
||||
bpl .7 not set, no lowercase bitmap present
|
||||
|
||||
|
@ -445,18 +453,17 @@ K.ReadDir.AddFNToBuf
|
|||
ldy #1
|
||||
|
||||
.8 lda (ZPPtr3),y
|
||||
jsr K.ReadDir.AddToBuf
|
||||
jsr K.ReadDir.Add2B
|
||||
iny
|
||||
dex
|
||||
bne .8
|
||||
|
||||
txa
|
||||
* jsr K.ReadDir.AddToBuf
|
||||
* jsr K.ReadDir.Add2B
|
||||
|
||||
* rts
|
||||
*--------------------------------------
|
||||
K.ReadDir.AddToBuf
|
||||
sta (ZPPtr4)
|
||||
K.ReadDir.Add2B sta (ZPPtr4)
|
||||
inc ZPPtr4
|
||||
bne .8
|
||||
|
||||
|
@ -464,8 +471,7 @@ K.ReadDir.AddToBuf
|
|||
|
||||
.8 rts
|
||||
*--------------------------------------
|
||||
K.ReadDir.AddStatACL
|
||||
jsr FS.DirEnt2Stat
|
||||
K.ReadDir.SA2B jsr FS.DirEnt2Stat
|
||||
|
||||
ldy #S.FD.DIR.UID
|
||||
ldx #S.STAT.UID
|
||||
|
@ -491,7 +497,7 @@ K.ReadDir.AddStat
|
|||
ldy #0
|
||||
|
||||
.1 lda K.S.STAT,y
|
||||
jsr K.ReadDir.AddToBuf
|
||||
jsr K.ReadDir.Add2B
|
||||
iny
|
||||
cpy #S.STAT
|
||||
bne .1
|
||||
|
|
|
@ -183,7 +183,7 @@ ENVX.GetEnv sta ENVX.hEnv
|
|||
bne .2
|
||||
inc
|
||||
|
||||
.2 ldx #SYS.GetMem
|
||||
.2 ldx #_GetMem
|
||||
jsr JMP.M !!! Get a buffer In MAIN Mem !!!
|
||||
|
||||
bcs .99
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
NEW
|
||||
AUTO 3,1
|
||||
*--------------------------------------
|
||||
JMPX jmp (.1-SYS.StrVNew,x)
|
||||
JMPX jmp (.1-_StrVNew,x)
|
||||
|
||||
.1 .DA STRVX.StrVNew
|
||||
.DA STRVX.StrVSet
|
||||
|
|
|
@ -52,7 +52,7 @@ SLISTX.GetData jsr SLISTX.Select
|
|||
sec
|
||||
ror SLISTX.b0
|
||||
|
||||
.11 ldx #SYS.GetMem
|
||||
.11 ldx #_GetMem
|
||||
jsr JMP.M !!! Get a buffer In MAIN Mem !!!
|
||||
bcs .9
|
||||
|
||||
|
|
|
@ -306,7 +306,7 @@ STDIO.Get1 >PUSHA
|
|||
>PUSHA
|
||||
inc read 1 byte
|
||||
>PUSHA
|
||||
ldx #SYS.FRead
|
||||
ldx #_FRead
|
||||
jmp K.FRead
|
||||
*/--------------------------------------
|
||||
* # ungetc
|
||||
|
@ -465,7 +465,7 @@ K.FRead.RTS rts
|
|||
* ## RETURN VALUE
|
||||
* Y,A = Bytes Written
|
||||
*\--------------------------------------
|
||||
K.FWrite.PFT ldx #SYS.FWrite Needed by PFT
|
||||
K.FWrite.PFT ldx #_FWrite Needed by PFT
|
||||
|
||||
K.FWrite jsr PFT.CheckNode4
|
||||
bcs K.FWrite.RET5
|
||||
|
|
|
@ -387,7 +387,7 @@ K.Expand ldy #2
|
|||
lda /K.Buf256
|
||||
>STYA FORPNT
|
||||
|
||||
ldx #SYS.GetEnv
|
||||
ldx #_GetEnv
|
||||
jsr K.GetEnv.I
|
||||
bcs .70
|
||||
|
||||
|
|
|
@ -15,7 +15,7 @@ K.Time >PULLW FORPNT
|
|||
>MLICALL MLI.GETTIME
|
||||
>LDYAI GP.DATE
|
||||
>STYA TXTPTR
|
||||
ldx #SYS.PTime2Time
|
||||
ldx #_PTime2Time
|
||||
jmp JMP.X
|
||||
*/--------------------------------------
|
||||
* # StrFTime
|
||||
|
|
Loading…
Reference in New Issue