home *** CD-ROM | disk | FTP | other *** search
- /*
- * MacMailWatch driver
- * By Aaron Wohl (aw0g+@andrew.cmu.edu)
- * Carnegie-Mellon University
- * Pittsburgh, PA 15213-3890
- * (412)-268-5032
- */
-
-
- #define jIODone 0x8fc
-
- void o_glue(void);
- void c_glue(void);
- void p_glue(void);
- void s_glue(void);
- void cntrl_glue(void);
-
- void header(void);
- void header()
- {
- /* do NOT add or subtract any fields */
- asm {
- DC.W dNeedLock|dCtlEnable|dNeedTime /* drvrFlags */
- DC.W 60*3 /* drvrDelay */
- DC.W updateEvt /* drvrEMask */
- DC.W 0 /* drvrMenu */
- DC.W 42 /* open */
- DC.W 48 /* prime */
- DC.W 54 /* control */
- DC.W 66 /* status */
- DC.W 60 /* close */
- dc.b "\p.MacMailCheck"
- DC.L 0 /* storage for a4 (offset 24) */
- dc.l 0
- }
- }
-
- /* do not modify */
- void open_code(void);
- void open_code()
- {
- asm {
- bra o_glue
- }
- }
-
- /* do not modify */
- void prime_code(void);
- void prime_code()
- {
- asm {
- bra p_glue
- }
- }
-
- /* do not modify */
- void control(void);
- void control() {
- asm {
- bra cntrl_glue
- }
- }
-
- /* do not modify */
- void close_code(void);
- void close_code() {
- asm {
- bra c_glue
- }
- }
-
- /* do not modify */
- void status_code(void);
- void status_code()
- {
- asm {
- bra s_glue
- }
- }
-
-
- #include "mmc_core.h"
- #include "mmc_core_private.h"
- int mmc_control(mmc_io_record_pt pb);
-
- LDEF(void cached_strip_mask(void))
- {
- asm {
- dc.l 0
- dc.b 0
- }
- }
-
- LDEF(void clear_strip(void))
- {
- asm {
- lea cached_strip_mask,a0
- clr.l (a0)
- clr.b 4(a0)
- rts
- }
- }
-
- LDEF(void set_strip_mask(void))
- {
- asm {
- move.l #-1,d0
- _StripAddress
- lea cached_strip_mask,a0
- move.l d0,(a0)
- move.b #255,4(a0)
- rts
- }
- }
-
- LDEF(void strip_all(void))
- {
- asm {
- lea cached_strip_mask,a0
- tst.b 4(a0)
- bne.s @know_strip
- bsr set_strip_mask
- know_strip:
- lea cached_strip_mask,a0
- move.l (a0),d0
- and.l d0,(sp)
- move.l a4,d1
- and.l d0,d1
- move.l d1,a4
- rts
- }
- }
-
- void driver_exit_func(void);
- void driver_exit_func()
- {
- asm {
- move.w d0,OFFSET(CntrlParam,ioResult)(a0)
- btst #1,OFFSET(mmc_io_record,ioTrap)(a0) /*is this a queued call? */
- bne.s @notqueued
- move.l jIODone,-(sp)
- notqueued:
- rts
- }
- }
-
- /* glue for close*/
- void c_glue()
- {
- asm {
- move.l a1,-(sp) /*a1=dce*/
- move.l a4,-(sp)
- lea header,a4
- move.l a0,-(sp)
- jsr strip_all
- jsr mmc_uninit
- jsr clear_strip
- move.l (sp)+,a0
- move.l (sp)+,a4
- move.l (sp)+,a1 /*a1=dce for jiodone*/
- clr.l d0
- bra driver_exit_func
- }
- }
-
- /* glue for open*/
- void o_glue()
- {
- asm {
- move.l a1,-(sp) /*a1=dce*/
- move.l a4,-(sp)
- lea header,a4
- move.l a0,-(sp)
- jsr strip_all
- jsr mmc_init
- move.l (sp)+,a0
- move.l (sp)+,a4
- move.l (sp)+,a1 /*a1=dce for jiodone*/
- bra driver_exit_func
- }
- }
-
- /*prime*/
- void p_glue()
- {
- asm {
- move.l #-19,d0
- bra driver_exit_func
- }
- }
-
- /*status*/
- void s_glue()
- {
- asm {
- move.l #-18,d0
- bra driver_exit_func
- }
- }
-
-
- /* glue for control*/
- void cntrl_glue()
- {
- asm {
- move.l a1,-(sp) /*a1=dce*/
- move.l a4,-(sp)
- lea header,a4
- move.l a0,-(sp)
- move.l a0,-(sp)
- jsr strip_all
- jsr mmc_control
- addq.l #4,sp
- move.l (sp)+,a0
- move.l (sp)+,a4
- move.l (sp)+,a1 /*a1=dce for jiodone*/
- bra driver_exit_func
- }
- }
-
-
- int mmc_control(mmc_io_record_pt pb)
- {
- int err=0;
- int err1;
- switch(pb->csCode) {
- case MMC_setmmuser:
- return mmc_setmmuser(&pb->iostate,(mmc_priv_state_pt *)&pb->private_state);
- case MMC_set_state:
- { err=mmc_set_state(&pb->iostate);
- if(err==MMCE_bad_maj) /*if version are bad can't return state*/
- return err; /*it might trash something*/
- err1=mmc_get_state(&pb->iostate,(mmc_priv_state_pt *)&pb->private_state);
- if(err!=0)
- return err1;
- else
- return err;
- }
- case MMC_get_state:
- return mmc_get_state(&pb->iostate,(mmc_priv_state_pt *)&pb->private_state);
- break;
- case MMC_run:
- mmc_tick();
- break;
- case MMC_goodbye:
- case MMC_killio:
- break;
- default:
- return -17; /*don't like this control call*/
- }
- return noErr;
- }
-
- void main()
- {
- }
-