Compare commits

...

23 Commits

Author SHA1 Message Date
burniouf adc09c0812 LIBTUI:bugfix in LBOX for PRESSED event 2024-02-29 07:38:14 +01:00
John LeFebvre 70a1e940ed Updated for build 2666 changes 2024-02-28 21:22:28 +00:00
burniouf 3efa6a91d2 FSE:Added Src & bin 2024-02-16 20:30:56 +01:00
burniouf ac15ee428e FSE source code 2024-02-16 18:51:17 +01:00
burniouf 9190fc0a94 KERNEL:bugfix for ReadDir on directory blocks filled by deleted entries 2024-02-03 08:25:29 +01:00
burniouf f76765cb13 LIBTUI:Better LBOX / RADIO controls 2024-02-02 19:12:51 +01:00
burniouf 65be4815e2 File converters... 2024-01-30 22:34:07 +01:00
burniouf 16e3760c4b CUT:bugfix 2024-01-30 07:51:52 +01:00
burniouf 249e90c102 ASM.md: quick update (Markdown test) 2024-01-28 15:58:15 +01:00
burniouf 02e4c892c8 LIBTUI:Improved LBOX 2024-01-26 15:05:51 +01:00
John LeFebvre f0adfc775d Bugfixes to save etc/network file
Small tidyup
2024-01-25 23:32:16 +00:00
John LeFebvre 491792212b Updated with show/hide manual IP settings 2024-01-25 23:25:59 +00:00
burniouf daa19bfc34 LIBTUI:RADIO event fix 2024-01-25 19:44:59 +01:00
burniouf a197ec297c BBSD:fixes in SKT handling & etc/bbsd.conf 2024-01-22 22:48:00 +01:00
Brian J. Bernstein a246b0d691 updated for build 2666 release notes 2024-01-21 19:55:42 -05:00
Brian J. Bernstein 60b98d2472 build 2666 2024-01-21 19:40:14 -05:00
burniouf 246068c91b LIBTUI: Fixes for MAN 2024-01-21 18:52:41 +01:00
burniouf f50fee89e4 LIBTUI : Added Show/Hide and FindActive API
MAN & NETCONFIG updated
2024-01-20 14:13:22 +01:00
John LeFebvre b07bdce5d3 Merge branch 'master' of https://github.com/A2osX/A2osX 2024-01-17 23:07:01 +00:00
John LeFebvre 463723ce8f Tidied code, standardised naming and added the protocol selection function 2024-01-17 23:05:47 +00:00
burniouf 34f9969c0c LIBTUI: Bugfix in TLINE
BASIC.FX: bugfix in PATH, relocation code, Added Toolbox function "printf"
2024-01-17 22:04:13 +01:00
Brian J. Bernstein d85717509b Updated news for Jan 2024 2024-01-17 08:41:08 -05:00
John LeFebvre c83582a68a TUI based network configuration utility 2024-01-14 21:23:46 +00:00
55 changed files with 5915 additions and 652 deletions

View File

@ -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.

View File

@ -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.

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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"

View File

@ -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"

View File

@ -42,7 +42,7 @@ CP.PRINT ldy #$ff
>LDYA ZPDataPtr
jsr CP.Emit.LDYAI
ldx #SYS.PutS
ldx #_PutS
jsr CP.Emit.SYSCALL
pla

433
BIN/MAC2UNIX.S.txt Normal file
View File

@ -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

View File

@ -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"
*--------------------------------------

1196
BIN/NETCONFIG.S.txt Normal file

File diff suppressed because it is too large Load Diff

View File

@ -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
*--------------------------------------

433
BIN/UNIX2MAC.S.txt Normal file
View File

@ -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

220
FSE/FSE.S.1.txt Normal file
View File

@ -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

522
FSE/FSE.S.2.txt Normal file
View File

@ -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

533
FSE/FSE.S.3.txt Normal file
View File

@ -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

112
FSE/FSE.S.A2.txt Normal file
View File

@ -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

240
FSE/FSE.S.A2E.txt Normal file
View File

@ -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

479
FSE/FSE.S.LINE.txt Normal file
View File

@ -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

151
FSE/FSE.S.STB80.txt Normal file
View File

@ -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

234
FSE/FSE.S.SUBMIT.txt Normal file
View File

@ -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

220
FSE/FSE.S.VIDEX.txt Normal file
View File

@ -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

135
FSE/FSE.S.txt Normal file
View File

@ -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

View File

@ -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
*--------------------------------------

View File

@ -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

View File

@ -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
*--------------------------------------

View File

@ -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
*--------------------------------------

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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.

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -387,7 +387,7 @@ K.Expand ldy #2
lda /K.Buf256
>STYA FORPNT
ldx #SYS.GetEnv
ldx #_GetEnv
jsr K.GetEnv.I
bcs .70

View File

@ -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