Metropoli BBS
VIEWER: clockic.c MODE: TEXT (ASCII)
/*****************************************************************
      TINY CLOCK -- INITIALIZATION/DISPOSABLE CODE
       Copyright (c) 1992-94 by Omega Point, Inc.
******************************************************************/
#include "cr.h"

#ifdef K1		/** Use LIM if PDK-1 is available */
#include "lm.h"
#endif

#define STK_SZ (64)		/* TSR Stack: 64 words */
word isr_stk[STK_SZ+1];


extern popclock();	/* Main TSR entry, called by scheduler */

/******** Disposable messages in CLOCKID.C **************/

extern char sms[]; 	     /* Signon screen		         */
extern char attrc[],attrm[]; /* Screen attributes used for signon */
extern char already[];       /* Message when already loaded 	 */
extern char unloaddone[];
extern char unloadnot[];
extern word init_data_end;   /* Marker for end of disposable data */


/********************************************************************
 This main gets called only once on program load, after that it is
 discarded 
*********************************************************************/

main()
{  int i;
   char *a;
   
     if (second_load())	/* Check if TSR already loaded */
       {
       i=str_pos('-',cmd_line);
       if (i && ((cmd_line[i]|0x20)=='r'))
         {
	 if(remove_tsr())		/* Remove TSR from memory */
	   dspf(unloaddone);		/* Inform about unloading */
	 else
	   dspf(unloadnot);
	 }
       else dspf(already);		/* Otherwise show Help message */
       mv_crs();			/* Reposition real cursor */
       return(1);			/* Exit with errorlevel 1 */
       }

 /***** Display Signon Screen *****/

     clr_scr();
     a = color ? attrc:attrm;	/* Select proper screen attributes */
     crs_x=20; crs_y=7;		/* Location to put signon box      */
     dspf(sms,a);		/* Show the screen                 */

     crs_x=0; crs_y=scr_len-2;	/* Move to the bottom of screen    */
     mv_crs();			/* Place real cursor there         */
     crs_y=0;			/* Top line used to display clock  */


#ifdef DBG   /********** Debug mode via -DDBG compiler switch ***********/

     popclock();	/* The TSR can be debugged as a regular program */

#else	     /**********  INIT TSR MODE  ********************************/

     idata_end=&init_data_end;		/* This enables init data disposal. */
     icode_beg=main;			/* This enables init code disposal. */
     stay_resident(isr_stk,STK_SZ*2);	/* Enable resident mode             */
     install_tsc(popclock,2*STK_SZ,1);	/* Install tiny scheduler           */
#ifdef K1				/* Usable only with PDK1            */
     move_to_lim(1,1,MOVE_BOTH);	/* Move TSR to LIM if available     */
#endif
     add_tsc_event(8L);    	/* Add event to timer, 8 ticks from now  */
				/* Popclock will be called by scheduler  */
     return(0);			/* Set errorlevel to 0                   */

#endif
}

[ RETURN TO DIRECTORY ]