home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Gold Fish 1
/
GoldFishApril1994_CD1.img
/
d1xx
/
d183
/
pcq
/
runtime
/
pcqstart.asm
< prev
next >
Wrap
Assembly Source File
|
1989-02-25
|
3KB
|
158 lines
SECTION ONE
* PCQStart.asm (of PCQ Pascal runtime library)
* Copyright (c) 1989 Patrick Quaid
* This is the startup and shutdown code for the programs.
* Note that a few changes have got to take place here before PCQ
* programs can be run from the WorkBench.
XREF _CommandLine ; from the main program
XREF _AbsExecBase
XREF _LVOOpenLibrary
XREF _LVOCloseLibrary
XREF _LVOInput
XREF _LVOOutput
XREF _LVOClose
XREF _LVOFreeRemember
XREF newkey
XREF filekey
XDEF _stdin
XDEF _stdout
XDEF stdinbuffed
XDEF stdinbuffer
XDEF _p%DOSBase
XDEF _p%IntuitionBase
XDEF _p%MathBase
; Define entry point
xdef _p%initialize
_p%initialize
; Save stack pointer for exit() routine
move.l sp,StkPtr ; save stack pointer
add.l #4,StkPtr ; account for this jsr to get to original
; copy command line into _CommandLine
move.l #_CommandLine,a1
1$ move.b (a0)+,d1
move.b d1,(a1)+
bne 1$
; Open libraries
lea intuitionname,a1
clr d0
move.l _AbsExecBase,a6
jsr _LVOOpenLibrary(a6)
move.l d0,_p%IntuitionBase
beq _p%wrapitup
lea dosname,a1
clr d0
jsr _LVOOpenLibrary(a6)
move.l d0,_p%DOSBase
beq _p%wrapitup
lea mathname,a1
clr d0
jsr _LVOOpenLibrary(a6)
move.l d0,_p%MathBase
beq _p%wrapitup
; Find standard file handles
; This part will have to be adjusted for WorkBench.
move.l _p%DOSBase,a6
jsr _LVOInput(a6)
move.l d0,_stdin
beq _p%wrapitup
jsr _LVOOutput(a6)
move.l d0,_stdout
beq _p%wrapitup
rts
; The shut-down code
xdef _p%wrapitup
_p%wrapitup:
tst.l filekey ; close all open files
beq.s 2$
move.l _p%DOSBase,a6
move.l filekey,a0
1$ move.l (a0),d1
move.l a0,-(sp)
jsr _LVOClose(a6)
move.l (sp)+,a0
move.l 14(a0),a0
move.l a0,d0
bne.s 1$
2$ tst.l newkey ; return all allocated memory
beq.s 3$
lea newkey,a0
moveq.l #-1,d0
move.l _p%IntuitionBase,a6
jsr _LVOFreeRemember(a6)
3$
move.l _AbsExecBase,a6
move.l _p%IntuitionBase,a1
move.l a1,d0 ; to set flags
beq.s 4$
jsr _LVOCloseLibrary(a6)
4$
move.l _p%DOSBase,a1
move.l a1,d0 ; set flags
beq.s 5$
jsr _LVOCloseLibrary(a6)
5$
move.l _p%MathBase,a1
move.l a1,d0
beq.s 6$
jsr _LVOCloseLibrary(a6)
6$
moveq.l #0,d0
rts
XDEF _exit
XDEF _p%exit
_exit
move.l 4(sp),d0
_p%exit
move.l d0,-(sp)
jsr _p%wrapitup
move.l (sp)+,d0
move.l StkPtr,sp
rts
SECTION TWO,DATA
stdinbuffed dc.b 0
stdinbuffer dc.b 0
dosname dc.b 'dos.library',0
intuitionname dc.b 'intuition.library',0
mathname dc.b 'mathffp.library',0
CNOP 0,2
_p%DOSBase dc.l 0
_p%IntuitionBase dc.l 0
_p%MathBase dc.l 0
SECTION THREE,BSS
StkPtr ds.l 1
_stdin ds.l 1
_stdout ds.l 1
END