gno/bin/gsh/oldorca.asm

176 lines
2.6 KiB
NASM

*************************************************************************
*
* The GNO Shell Project
*
* Developed by:
* Jawaid Bazyar
* Tim Meekins
*
**************************************************************************
*
* ORCA.ASM
* By Tim Meekins
*
* Builtin commands for Orca compiling/editing, etc.
*
**************************************************************************
keep o/orca
mcopy m/orca.mac
**************************************************************************
*
* EDIT: builtin command
* syntax: edit [pathname]
*
* Invokes an editor and edits a file.
*
**************************************************************************
edit START
waitstatus equ 0
pid equ waitstatus+4
editfile equ pid+2
outpath equ editfile+4
errcode equ outpath+4
space equ errcode+2
subroutine (4:argv,2:argc),space
stz errcode
lda argc
cmp #2
beq ok
bcc toofew
ldx #^err2
lda #err2
jmp error
toofew ldx #^err1
lda #err1
error jsr errputs
lda #2
sta errcode
jmp done
ok lock mutex
ldy #6 ;argv[1] -> ep.inputPath
lda [argv],y
pha
ldy #4
lda [argv],y
pha
jsr c2gsstr ;make it a GS/OS filename
sta ep_inputPath
stx ep_inputPath+2
jsl alloc256
sta outpath
stx outpath+2
sta ep_outputPath
stx ep_outputPath+2
lda #256
sta [outpath]
ExpandPath ep
bcc ok2
ldx #^err3
lda #err3
jsr errputs
lda #-1
sta errcode
ldx outpath+2
lda outpath
jsl free256
ph4 ep_inputpath
jsl nullfree
unlock mutex
jmp done
ok2 ph4 ep_inputpath
jsl nullfree
ldy #2
lda [outpath],y
xba
sta [outpath],y
add4 outpath,#3,gl ;gl.sfile
; convert ':'s to '/'s
lda [outpath],y
xba
tax
ldy #4
short a
conv lda [outpath],y
cmp #':'
bne next
lda #'/'
sta [outpath],y
next iny
dex
bne conv
long a
Set_LInfo gl ;now set up the environment
ph4 #editorvar
jsl getenv
sta editfile
stx editfile+2
ora editfile+2
bne gotedit
ph4 #defedit
jsr p2cstr
sta editfile
stx editfile+2
gotedit unlock mutex
pei (editfile+2)
pei (editfile)
ph2 #0 ;tells execute we're called by system
jsl execute
sta errcode
ldx outpath+2
lda outpath
jsl free256
pei (editfile+2)
pei (editfile)
jsl nullfree
done return 2:errcode
err1 dc c'edit: no filename specified',h'0d00'
err2 dc c'edit: only one filename allowed',h'0d00'
err3 dc c'edit: invalid path name',h'0d00'
mutex key
gl dc i4'0'
dc i4'nullparm'
dc i4'nullparm'
dc i4'nullparm'
dc i1'8'
dc i1'0'
dc i1'0'
dc i1'0'
dc i4'0'
dc i4'$8000000'
dc i4'0'
ep dc i2'2'
ep_inputPath dc i4'0'
ep_outputPath dc i4'0'
nullparm dc i2'0'
editorvar dc c'editor',h'00'
defedit str '4/editor'
END