home *** CD-ROM | disk | FTP | other *** search
-
- 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
-