Commit 9fd2629a authored by Neil Turton's avatar Neil Turton
Browse files

Import from cleaned 360 CD

parents
s/** gitlab-language=armasm linguist-language=armasm linguist-detectable=true
00:*Obey executes a file of *commands, performing argument substitution on each line. Prefixing the filename with -v causes each line to be echoed before execution, -c causes the file to be cached and executed from memory
Syntax: *Obey [[-c] [-v] [<filename> [<parameters>]]]
\ No newline at end of file
Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
1. Definitions.
"License" shall mean the terms and conditions for use, reproduction,
and distribution as defined by Sections 1 through 9 of this document.
"Licensor" shall mean the copyright owner or entity authorized by
the copyright owner that is granting the License.
"Legal Entity" shall mean the union of the acting entity and all
other entities that control, are controlled by, or are under common
control with that entity. For the purposes of this definition,
"control" means (i) the power, direct or indirect, to cause the
direction or management of such entity, whether by contract or
otherwise, or (ii) ownership of fifty percent (50%) or more of the
outstanding shares, or (iii) beneficial ownership of such entity.
"You" (or "Your") shall mean an individual or Legal Entity
exercising permissions granted by this License.
"Source" form shall mean the preferred form for making modifications,
including but not limited to software source code, documentation
source, and configuration files.
"Object" form shall mean any form resulting from mechanical
transformation or translation of a Source form, including but
not limited to compiled object code, generated documentation,
and conversions to other media types.
"Work" shall mean the work of authorship, whether in Source or
Object form, made available under the License, as indicated by a
copyright notice that is included in or attached to the work
(an example is provided in the Appendix below).
"Derivative Works" shall mean any work, whether in Source or Object
form, that is based on (or derived from) the Work and for which the
editorial revisions, annotations, elaborations, or other modifications
represent, as a whole, an original work of authorship. For the purposes
of this License, Derivative Works shall not include works that remain
separable from, or merely link (or bind by name) to the interfaces of,
the Work and Derivative Works thereof.
"Contribution" shall mean any work of authorship, including
the original version of the Work and any modifications or additions
to that Work or Derivative Works thereof, that is intentionally
submitted to Licensor for inclusion in the Work by the copyright owner
or by an individual or Legal Entity authorized to submit on behalf of
the copyright owner. For the purposes of this definition, "submitted"
means any form of electronic, verbal, or written communication sent
to the Licensor or its representatives, including but not limited to
communication on electronic mailing lists, source code control systems,
and issue tracking systems that are managed by, or on behalf of, the
Licensor for the purpose of discussing and improving the Work, but
excluding communication that is conspicuously marked or otherwise
designated in writing by the copyright owner as "Not a Contribution."
"Contributor" shall mean Licensor and any individual or Legal Entity
on behalf of whom a Contribution has been received by Licensor and
subsequently incorporated within the Work.
2. Grant of Copyright License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
copyright license to reproduce, prepare Derivative Works of,
publicly display, publicly perform, sublicense, and distribute the
Work and such Derivative Works in Source or Object form.
3. Grant of Patent License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
(except as stated in this section) patent license to make, have made,
use, offer to sell, sell, import, and otherwise transfer the Work,
where such license applies only to those patent claims licensable
by such Contributor that are necessarily infringed by their
Contribution(s) alone or by combination of their Contribution(s)
with the Work to which such Contribution(s) was submitted. If You
institute patent litigation against any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that the Work
or a Contribution incorporated within the Work constitutes direct
or contributory patent infringement, then any patent licenses
granted to You under this License for that Work shall terminate
as of the date such litigation is filed.
4. Redistribution. You may reproduce and distribute copies of the
Work or Derivative Works thereof in any medium, with or without
modifications, and in Source or Object form, provided that You
meet the following conditions:
(a) You must give any other recipients of the Work or
Derivative Works a copy of this License; and
(b) You must cause any modified files to carry prominent notices
stating that You changed the files; and
(c) You must retain, in the Source form of any Derivative Works
that You distribute, all copyright, patent, trademark, and
attribution notices from the Source form of the Work,
excluding those notices that do not pertain to any part of
the Derivative Works; and
(d) If the Work includes a "NOTICE" text file as part of its
distribution, then any Derivative Works that You distribute must
include a readable copy of the attribution notices contained
within such NOTICE file, excluding those notices that do not
pertain to any part of the Derivative Works, in at least one
of the following places: within a NOTICE text file distributed
as part of the Derivative Works; within the Source form or
documentation, if provided along with the Derivative Works; or,
within a display generated by the Derivative Works, if and
wherever such third-party notices normally appear. The contents
of the NOTICE file are for informational purposes only and
do not modify the License. You may add Your own attribution
notices within Derivative Works that You distribute, alongside
or as an addendum to the NOTICE text from the Work, provided
that such additional attribution notices cannot be construed
as modifying the License.
You may add Your own copyright statement to Your modifications and
may provide additional or different license terms and conditions
for use, reproduction, or distribution of Your modifications, or
for any such Derivative Works as a whole, provided Your use,
reproduction, and distribution of the Work otherwise complies with
the conditions stated in this License.
5. Submission of Contributions. Unless You explicitly state otherwise,
any Contribution intentionally submitted for inclusion in the Work
by You to the Licensor shall be under the terms and conditions of
this License, without any additional terms or conditions.
Notwithstanding the above, nothing herein shall supersede or modify
the terms of any separate license agreement you may have executed
with Licensor regarding such Contributions.
6. Trademarks. This License does not grant permission to use the trade
names, trademarks, service marks, or product names of the Licensor,
except as required for reasonable and customary use in describing the
origin of the Work and reproducing the content of the NOTICE file.
7. Disclaimer of Warranty. Unless required by applicable law or
agreed to in writing, Licensor provides the Work (and each
Contributor provides its Contributions) on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied, including, without limitation, any warranties or conditions
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
PARTICULAR PURPOSE. You are solely responsible for determining the
appropriateness of using or redistributing the Work and assume any
risks associated with Your exercise of permissions under this License.
8. Limitation of Liability. In no event and under no legal theory,
whether in tort (including negligence), contract, or otherwise,
unless required by applicable law (such as deliberate and grossly
negligent acts) or agreed to in writing, shall any Contributor be
liable to You for damages, including any direct, indirect, special,
incidental, or consequential damages of any character arising as a
result of this License or out of the use or inability to use the
Work (including but not limited to damages for loss of goodwill,
work stoppage, computer failure or malfunction, or any and all
other commercial damages or losses), even if such Contributor
has been advised of the possibility of such damages.
9. Accepting Warranty or Additional Liability. While redistributing
the Work or Derivative Works thereof, You may choose to offer,
and charge a fee for, acceptance of support, warranty, indemnity,
or other liability obligations and/or rights consistent with this
License. However, in accepting such obligations, You may act only
on Your own behalf and on Your sole responsibility, not on behalf
of any other Contributor, and only if You agree to indemnify,
defend, and hold each Contributor harmless for any liability
incurred by, or claims asserted against, such Contributor by reason
of your accepting any such warranty or additional liability.
END OF TERMS AND CONDITIONS
APPENDIX: How to apply the Apache License to your work.
To apply the Apache License to your work, attach the following
boilerplate notice, with the fields enclosed by brackets "[]"
replaced with your own identifying information. (Don't include
the brackets!) The text should be enclosed in the appropriate
comment syntax for the file format. We also recommend that a
file or class name and description of purpose be included on the
same "printed page" as the copyright notice for easier
identification within third-party archives.
Copyright [yyyy] [name of copyright owner]
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
# Copyright 1996 Acorn Computers Ltd
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
# Makefile for Obey
#
# ***********************************
# *** C h a n g e L i s t ***
# ***********************************
# Date Name Description
# ---- ---- -----------
# 08-Jun-94 AMcC Created.
#
#
# Generic options:
#
MKDIR = cdir
AS = aasm
CP = copy
RM = remove
CCFLAGS = -c -depend !Depend -IC:
ASFLAGS = -depend !Depend -Stamp -quit -module -To $@ -From
CPFLAGS = ~cfr~v
TOKENISE = tokenise
TOKENS = Hdr:Tokens
#
# Program specific options:
#
COMPONENT = Obey
SOURCE = s.Obey
TARGET = rm.Obey
#
# Generic rules:
#
rom: $(TARGET)
@echo ${COMPONENT}: rom module built
export: ${EXPORTS}
@echo ${COMPONENT}: export complete
install_rom: $(TARGET)
$(CP) $(TARGET) $(INSTDIR).$(COMPONENT) $(CPFLAGS)
@echo ${COMPONENT}: rom module installed
clean:
$(RM) $(TARGET)
@echo ${COMPONENT}: cleaned
resources:
${MKDIR} ${RESDIR}.${COMPONENT}
${CP} Resources.${LOCALE}.Messages ${RESDIR}.${COMPONENT}.Messages ${CPFLAGS}
@echo ${COMPONENT}: resource files copied
$(TARGET): $(SOURCE)
$(AS) $(ASFLAGS) $(SOURCE)
# Dynamic dependencies:
| Copyright 1996 Acorn Computers Ltd
|
| Licensed under the Apache License, Version 2.0 (the "License");
| you may not use this file except in compliance with the License.
| You may obtain a copy of the License at
|
| http://www.apache.org/licenses/LICENSE-2.0
|
| Unless required by applicable law or agreed to in writing, software
| distributed under the License is distributed on an "AS IS" BASIS,
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
| See the License for the specific language governing permissions and
| limitations under the License.
|
Dir <Obey$Dir>
amu_machine clean
| Copyright 1996 Acorn Computers Ltd
|
| Licensed under the Apache License, Version 2.0 (the "License");
| you may not use this file except in compliance with the License.
| You may obtain a copy of the License at
|
| http://www.apache.org/licenses/LICENSE-2.0
|
| Unless required by applicable law or agreed to in writing, software
| distributed under the License is distributed on an "AS IS" BASIS,
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
| See the License for the specific language governing permissions and
| limitations under the License.
|
Dir <Obey$Dir>
amu_machine rom
00:Syntax: *Obey [[-c][-v] [<filename> [<parameters>]]]
\ No newline at end of file
; > Version
GBLA Version
GBLS VString
GBLS Date
Version SETA 033 ; 007
VString SETS "0.33" ; "0.07"
Date SETS "17 Nov 1994" ; "08 Aug 1988"
END
*
!.gitignore
; Copyright 1996 Acorn Computers Ltd
;
; Licensed under the Apache License, Version 2.0 (the "License");
; you may not use this file except in compliance with the License.
; You may obtain a copy of the License at
;
; http://www.apache.org/licenses/LICENSE-2.0
;
; Unless required by applicable law or agreed to in writing, software
; distributed under the License is distributed on an "AS IS" BASIS,
; WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
; See the License for the specific language governing permissions and
; limitations under the License.
;
; > Sources.Obey
;;----------------------------------------------------------------------------
;; Obey module (for *Obeying text files)
;;
;; Change List
;; -----------
;; 31-Mar-88 0.01 File created
;; 5-Apr-88 0.02 Allow recursive use of *Obey
;; 8-Apr-88 0.03 Put tab into title string
;; 9-Apr-88 0.04 Make *Obey shut down automatically on channel errors
;; 7-Jul-88 0.05 Start conversion towards multi-application
;; 13-Jul-88 0.06 Finished conversion towards multi-application
;; 08-Aug-88 0.07 Allow escape inside obey files
;; 14-Sep-88 0.07 Improve debugging information
;; 20-Oct-88 0.08 Change to use new Make procedure
;; 27-Sep-89 0.09 Fix bug: C run-time error handler without exit handler
;; 29-Sep-89 0.10 Fix bug: *Obey from within BASIC goes wrong
;; 5-Oct-89 0.11 Fix bug: OS_Claim doesn't preserve flags
;; 31-Oct-89 0.12 Fix bug: Used R12 to set up error handler as marker
;; 9-May-90 0.13 Fix bug: R1 corrupted in Service_NewApplication
;; 21-May-91 0.20 Added internationalisation and verbose and caching to 0.13.
;; 22-May-91 Fix bug: When the exit handler is called it may not be in SVC mode!
;; 22-May-91 0.21 Fix bug: above fix assumed R12 valid on chance of modes!
;; 22-May-91 0.22 Ooopsy doopsy logging in source I got it wrong.
;; 01-Jun-91 Fix bug: Fixed lack of stack in exit handler to not go to SVC mode, but allocate stack.
;; 01-Jun-91 0.23 Fix bug: Ensure that handle is closed on the file when executed.
;; 03-Jun-91 0.24 Fix bug: Handles restarting cached files after quiting applications.
;; 02-Jul-91 0.25 Fix bug: remove nastystring stripping of appended extra args, use
;; OS_SubstituteArgs flag instead. Fixes ~ on end of filename
;; causes address exception bug.
;; Fix syntax of *Obey command - there *must*not* be
;; any space between the -c and the -v
;; Fix BuffOflow tag to BufOFlo
;;----------------------------------------------------------------------------
Module_BaseAddr
GET hdr:ListOpts
GET hdr:Macros
GET hdr:System
GET hdr:ModHand
GET hdr:Services
GET hdr:UpCall
GET hdr:FSNumbers
GET hdr:HighFSI
GET hdr:NewErrors
GET hdr:EnvNumbers
GET hdr:NdrDebug
GET hdr:MsgTrans
GET Version
GBLL debugxx
GBLL debugcommand
GBLL debugopen
GBLL debugmode
GBLL debugexit
GBLL hostvdu
GBLL internat
debug SETL false ; global switch for debugging
debugxx SETL false ; general stuff
debugcommand SETL false ; command line decoding
debugopen SETL false ; opening and caching of file blocks
debugmode SETL false ; checking for SVC mode on EXIT handler
debugexit SETL false ; checking exit handler
hostvdu SETL true
internat SETL true :LAND: Version >=20 ; should we internationalise
;;----------------------------------------------------------------------------
;; Module header
;;----------------------------------------------------------------------------
ASSERT (.=Module_BaseAddr)
DCD 0 ; Start
DCD 0 ; Init
DCD Die- Module_BaseAddr
DCD Service- Module_BaseAddr
DCD Title- Module_BaseAddr
DCD Helpstr- Module_BaseAddr
DCD Helptable- Module_BaseAddr
DCD 0
DCD 0
DCD 0
DCD 0
[ International_Help=0 :LOR: debug
DCD 0
|
DCD Messages_File- Module_BaseAddr
]
Title DCB "Obey",0
Helpstr DCB "Obey",9,9,"$VString ($Date)"
[ debug
DCB " Development version"
]
DCB 0
ALIGN
Helptable
[ debug
Command Obey,255,0,0 ; *Obey cancels the current obey file
|
Command Obey,255,0,International_Help ; *Obey cancels the current obey file
]
DCB 0
ALIGN
[ International_Help=0 :LOR: debug
Obey_Help DCB "*Obey executes a file of *commands, "
DCB "performing argument substitution on each line"
DCB ". Prefixing the filename with -v causes each line to be "
DCB "echoed before execution, -c causes the file to be cached and executed from memory"
DCB 13, 10
Obey_Syntax DCB "Syntax: *Obey [[-v][-c] [<filename> [<parameters>]]]",0
|
Messages_File DCB "Resources:Resources.Obey.Messages",0
Obey_Help DCB "HOBYOBY", 0
Obey_Syntax DCB "SOBYOBY", 0
]
ALIGN
;;----------------------------------------------------------------------------
;; Workspace
;;----------------------------------------------------------------------------
wk_buflen * 256
^ 0
wk_link # 4
wk_exit # 8 ; Where the exit handler code will live
wk_exitproc # 4 ; Address in module of real code
wk_flags # 4
wk_fl_live * 1:SHL:0 ; Set <=> live, ie there is another line in the file to be processed
wk_fl_useexit * 1:SHL:1 ; Set <=> OS_Exit has been used to finish a command in this obey file
; ie when exiting this obey file, OS_Exit should be used
wk_fl_verbose * 1:SHL:2 ; Set <=> verbose flag specified
wk_fl_cache * 1:SHL:3 ; Set <=> cache flag set
wk_fl_ResFS * 1:SHL:4 ; Set <=> cache block is in resourceFS
wk_private # 4 ; Back pointer to private word
wk_handle # 4
wk_oldquitR1 # 4
wk_oldquitR2 # 4
wk_olderrorR1 # 4
wk_olderrorR2 # 4
wk_olderrorR3 # 4
wk_cacheblock # 4 ; cache block in memory (=0 if none, -1 if pending)
wk_ptr # 4 ; index into cache block
wk_ext # 4 ; extent of cache block
[ :LNOT:debug
wk_stack # 4*8 ; maximum stack of eight registers
|
wk_stack # 4*64 ; 64 register stack if debugging
]
wk_stacktop # 0
wk_parameters # wk_buflen
wk_inputcom # wk_buflen
wk_outputcom # wk_buflen
wk_end # 0
[ internat
! 0, "Internationalised version"
]
;;----------------------------------------------------------------------------
;; Code
;;----------------------------------------------------------------------------
; On Service_Reset, discard all blocks in chain
svc_reset
Push "R0-R2,R11,LR"
LDR R11,[R12]
TEQ R11,#0
01
MOVNE R0,#ModHandReason_Free
MOVNE R2,R11
LDRNE R11,[R2,#wk_link]
SWINE XOS_Module
TEQ R11,#0
BNE %BT01
MOV R14,#0
STR R14,[R12]
Pull "R0-R2,R11,PC",,^
;.............................................................................
Service
TEQ R1,#Service_Reset
BEQ svc_reset
TEQ R1,#Service_NewApplication
MOVNE PC,LR
;
; Here we see if we can find a block for this application
; (identified by quit handler), with its file closed
; (so exhausted), in which case we restore the previous quit handler
; and remove our block.
;
; The following case is nasty:
;
; *BASIC
; *Obey fred
; *run <application program>
; *<more stuff>
;
; When the application starts up inside the obey file, BASIC's UpCall handler
; gets an UpCall_NewApplication and resets the quit handler to its parent.
; The Obey module must get in first (using UpCallV), and remove its handlers
; temporarily. It then puts them back when it gets the Service_NewApplication.
LDR r1, [r12]
TEQ r1, #0
MOV r1, #Service_NewApplication ; NB: MOV not MOVEQ!
MOVEQ pc, lr ; Just return if module inactive
Push "r0-r3,r11,lr"
LDR r11, [r12] ; r11 -> first block
; look for a block with "undone" handlers
01 LDR r14, [r11, #wk_oldquitR1]
CMP r14, #-1
BNE %FT02
Debug xx,"Restoring handlers"
MOV r0,#ExitHandler
ADD r1, r11, #wk_exit ; Where to
MOV r2, r12 ; R12 --> private word
SWI XOS_ChangeEnvironment
STRVC r1, [r11, #wk_oldquitR1]
STRVC r2, [r11, #wk_oldquitR2]
MOVVC r0, #ErrorHandler
MOVVC r1, r11 ;
MOVVC r2, r11 ; R11 --> block
MOVVC r3, r11 ;
SWIVC XOS_ChangeEnvironment
STRVC r1, [r11, #wk_olderrorR1]
STRVC r2, [r11, #wk_olderrorR2]
STRVC r3, [r11, #wk_olderrorR3]
02 LDR r11, [r11, #wk_link]
CMP r11, #0
BNE %BT01
10
; now check for this being the last line of the Obey file
[ debugexit
Debug exit,"EXIT: calling FindExit:"
]
BL FindExit
TEQ r11, #0
Pull "r0-r3,r11,pc", EQ ; block not found
[ debugexit
Debug exit,"EXIT: found exit handler"
]
LDR r0, [r11, #wk_flags]
TST r0, #wk_fl_live
Pull "r0-r3,r11,pc", NE ; block alive - leave it alone
[ debugxx
BNE %FT00
Debug xx,"Starting application on last line of Obey file: "
00
]
BL exit ; Kill block if so
B %BT10 ; go round for the next level up
;.............................................................................
; I assume here that the upcall vector is called BEFORE the upcall handler
upcallhandler
TEQ r0, #UpCall_NewApplication
MOVNES pc, lr
Push "r0-r3,r11,lr"
Debug xx,"UpCall_NewApplication"
BL FindExit ; assume we have error and exit handlers
TEQ r11, #0
Pull "r0-r3,r11,pc", EQ, ^
Debug xx,"Removing handlers temporarily"
MOV r0, #ExitHandler ; temporarily remove my handlers
LDR r1, [r11, #wk_oldquitR1]
LDR r2, [r11, #wk_oldquitR2]
SWI XOS_ChangeEnvironment