home *** CD-ROM | disk | FTP | other *** search
- *
- * /* KICKDATE - Copyright 1990 Joe Porkka
- * FREELY DISTRIBUTABLE
- *
- * Purpose: Keeps the current date on the Kickstart disk
- * for A1000 owners with autoboot harddrives.
- *
- * Version 1.0
- *
- * */
- *
- pr_CLI equ $00ac
- cli_CommandName equ $0010
-
- * This is a modified ASTARTUP.ASM file
- * it is stripped down to work only from a CLI
-
- ******* Imported *******************************************************
-
- xlib macro
- xref _LVO\1
- endm
-
- xref _AbsExecBase
- xlib Input
- xlib Output
-
- xref _main ; C code entry point
-
- xlib FindTask
- xlib OpenLibrary
- xlib CloseLibrary
-
- ******* Exported *******************************************************
-
- xdef _SysBase
- xdef _DOSBase
-
- xdef _errno
- xdef _stdin
- xdef _stdout
- xdef _stderr
-
- xdef _exit ; standard C exit function
-
- callsys macro
- jsr _LVO\1(a6)
- endm
-
-
- ************************************************************************
- *
- * Standard Program Entry Point
- *
- ************************************************************************
- *
- * main (argc, argv)
- * int argc;
- * char *argv[];
- *
- ************************************************************************
-
- startup: ; reference for Wack users
- move.l sp,initialSP ; initial task stack pointer
- move.l d0,dosCmdLen
- move.l a0,dosCmdBuf
-
- ;------ get Exec's library base pointer:
- move.l _AbsExecBase,a6
- move.l a6,_SysBase
-
- ;------ get the address of our task
- suba.l a1,a1
- callsys FindTask
- move.l d0,a4
-
- fromCLI:
- ;------ attempt to open DOS library:
- bsr openDOS
-
- ;------ find command name:
- move.l pr_CLI(a4),a0
- add.l a0,a0 ; bcpl pointer conversion
- add.l a0,a0
- move.l cli_CommandName(a0),a0
- add.l a0,a0 ; bcpl pointer conversion
- add.l a0,a0
-
- ;------ create buffer and array:
- movem.l d2/a2/a3,-(sp)
- lea argvArray,a3
- moveq.l #1,d2 ; param counter
-
- ;------ fetch command name:
- moveq.l #0,d0
- move.b (a0)+,d0 ; size of command name
- move.l a0,(a3)+ ; ptr to command name
- clr.b 0(a0,d0.w) ; zero byte at end
-
- ;------ collect parameters:
- move.l dosCmdLen,d0
- move.l dosCmdBuf,a0
- ;------ skip control characters and space:
- 3$: move.b (a0)+,d1
- subq.l #1,d0
- ble.s parmExit
- cmp.b #' ',d1
- ble.s 3$
-
- ;------ copy parameter:
- addq.l #1,d2 ; param count
- lea.l -1(a0),a1
- move.l a1,(a3)+
- ; bra.s 5$
- 4$: move.b (a0)+,d1
- subq.l #1,d0
- cmp.b #' ',d1
- bgt 4$
- ; ble.s 6$
- 5$: ;move.b d1,(a2)+
- ; bra.s 4$
- ;6$:
- clr.b -1(a0)
- cmp #32,d2
- blt 3$
- ; bra.s 3$
- parmExit: clr.b (a0)+
- clr.l (a3)+
-
- move.l d2,d0
- movem.l (sp)+,d2/a2/a3
- pea argvArray
- move.l d0,-(sp)
-
-
- *
- * The above code relies on the end of line containing a control
- * character of any type, i.e. a valid character must not be the
- * last. This fact is ensured by DOS.
- *
-
-
- ;------ get standard input handle:
- move.l _DOSBase,a6
- callsys Input
- move.l d0,_stdin
-
- ;------ get standard output handle:
- callsys Output
- move.l d0,_stdout
- move.l d0,_stderr
-
- ;------ call C main entry point
- jsr _main
-
- ;------ return success code:
- moveq.l #0,D0
- move.l initialSP,sp ; restore stack ptr
- rts
-
- _exit:
- move.l 4(SP),d0 ; extract return code
- exit2:
- move.l initialSP,SP ; restore stack pointer
- move.l d0,-(SP) ; save return code
-
- ;------ close DOS library:
- move.l _AbsExecBase,A6
- move.l _DOSBase,d0
- ******************************************
-
- DATA
-
- ************************************************************************
-
- _SysBase dc.l 0
- _DOSBase dc.l 0
-
- _errno dc.l 0
- _stdin dc.l 0
- _stdout dc.l 0
- _stderr dc.l 0
-
- initialSP dc.l 0
-
- dosCmdLen dc.l 0
- dosCmdBuf dc.l 0
-
- argvArray ds.l 32 ; MAX 32 args
-
- DOSName dc.b 'dos.library',0
-
-
- END
-