home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD2.mdf / c / library / mslang / proclc / pcic.c < prev    next >
Encoding:
C/C++ Source or Header  |  1994-03-22  |  3.6 KB  |  167 lines

  1. /********************************************************************
  2.         PopCALC  -- INITIALIZATION/DISPOSABLE CODE
  3.          (c) Copyright 1992-94 by Omega Pint, Inc.
  4. *********************************************************************/
  5.  
  6. #include "cr.h"
  7.  
  8.  
  9. #ifdef K1        /* For PDK-1 users, moves TSR to LIM */
  10. #include "lm.h"
  11. #endif
  12.  
  13. /** STARTUP DATA are in PCID.C  (discarded in resident mode) **/
  14.  
  15. extern char loaded_msg[];         /* Startup messages */
  16. extern char hello_msg[],first_msg[];
  17. extern char hello_atr[],mono_atr[];
  18.  
  19. extern word init_data_end;          /* Marks end of init-data */
  20.  
  21. word scr_buf[80];
  22.  
  23. /** RESIDENT CODE STACK SPACE **/
  24.  
  25. #define STK_SZ (100)      /* Size in words */
  26. word res_stack[STK_SZ+1]; /* Allow allways extra word ! */
  27.  
  28. extern isr();        /* Interrupt service in CALC.C */
  29. extern tmr_isr();    /* Timer tick service */
  30. extern word hk_list[];  /* This is in CALCID.C for use by isr() function */
  31.  
  32.  
  33. /** Display Signon screen **/
  34.  
  35. one_scr(s,a)
  36. char *s,*a;
  37. {
  38.   int x0,y0,x1,y1;
  39.    x0=crs_x; y0=crs_y;
  40.    vid_atr=7; fil_scr('░');
  41.      dspf(s,a);
  42.    x1=crs_x; y1=crs_y+1;
  43.    vid_atr=0x7;
  44.    crs_y=y0+1; dsp_ver(0x20,y1-y0);
  45.    crs_x++; crs_y=y0+1; dsp_ver(0x20,y1-y0);
  46.    crs_x=x0+3;crs_y=y1; dsp_hor(0x20,x1-x0-1);
  47. }
  48. extern char atr_expr,atr_rslt,atr_rad,sep_let;
  49.  
  50. signon()
  51. { char *s=hello_atr;
  52.    if (vid_mode==7) 
  53.      {
  54.      s=mono_atr;
  55.      atr_expr=atr_rslt=atr_rad=0x70;
  56.      sep_let=0xb3;
  57.      }
  58.    save_crs(); kil_crs();
  59.    crs_x=5; crs_y=1;
  60.    one_scr(first_msg,s); pckey();
  61.    crs_x=11; crs_y=2;
  62.    one_scr(hello_msg,s);
  63.    crs_x=0; crs_y=24; vid_atr=7;
  64.    dsp_hor(0x20,scr_width);
  65.    restore_crs();
  66.    crs_x=0; crs_y=23;
  67.    mv_crs();
  68. }
  69.  
  70. /** Must match PC.C values **/
  71.  
  72. #define RAD2  (0)
  73. #define RAD10 (1)
  74. #define RAD16 (2)
  75. #define WS1   (0)
  76. #define WS2   (1)
  77. #define WS4   (2)
  78.  
  79. extern char sgn,radix,wsz;
  80. extern dword wmask;
  81. extern char cmd_ln_err[];
  82. extern int y0;
  83.  
  84. parse_cmd_line()
  85. { register char *s=cmd_line;
  86.   register c;
  87.   dword tmp;
  88.     up_case(cmd_line);
  89.     while (0 != (c=*s++))
  90.       {
  91.       switch (c)
  92.         {
  93.     case 'D': radix=RAD10; break;
  94.     case 'B': radix=RAD2; break;
  95.     case 'H': radix=RAD16; break;
  96.     case 'C': wsz=WS1; wmask=0xff; break;
  97.     case 'I': wsz=WS2; wmask=0xffff; break;
  98.     case 'L': wsz=WS4; wmask=(dword)-1; break;
  99.  
  100.     case 'U': sgn=0; break;
  101.     case 'S': sgn=1;
  102.     case ',': ;
  103.     case '/': ;
  104.     case '-': ;
  105.     case  32: break;
  106.  
  107.     default:  if ((c<='9') & (c>='0'))
  108.             {
  109.             s--;
  110.             s=dec2ul(s,&tmp);
  111.             if ((tmp!=0) && (tmp<scr_len))
  112.               y0=((word)tmp)-1;
  113.             else s=0;
  114.             }
  115.           else s=0;
  116.  
  117.           if (!s)
  118.             {
  119.             s=cmd_ln_err;
  120.             s[25]=(char)c; dsp(s);
  121.             exit(1);
  122.             }
  123.            
  124.     }
  125.       } 
  126.  
  127. }
  128.  
  129. /*** INITIALIZATION ***/
  130.  
  131. main()
  132.  
  133.   parse_cmd_line();
  134.  
  135. #ifdef DBG
  136.   isr();
  137. #else
  138.  
  139.   signon();
  140.  
  141.   if (second_load()) {        /* Check if program already loaded */
  142.     dsp(loaded_msg);    /* If so, display error message */
  143.     return(1);        /* Exit to DOS with errorlevel 1 */
  144.     }
  145.  
  146.  /* SWITCH TO RESIDENT OPERATION */
  147.  
  148.   idata_end=&init_data_end;    /* This enables init data disposal. */
  149.   icode_beg=one_scr;        /* This enables init code disposal. */
  150.  
  151.   stay_resident(res_stack,STK_SZ*2);     /* Define TSR stack */
  152.   install_hk(hk_list,isr,STK_SZ*2,0x7f); /* Minimal HOT-KEY Support */
  153.   install_tsc(tmr_isr,STK_SZ*2,0x7f);    /* Scheduler for key periodic tick */
  154. #endif
  155.  
  156. #ifdef K1            /* For PDK-1 users, move TSR to LIM */
  157.    if(is_emsnet())        /* Work around Novell EMSNET buggs  */
  158.     move_to_lim(1,1,MOVE_CODE);
  159.    else
  160.     move_to_lim(1,1,MOVE_BOTH);
  161. #endif
  162.  
  163.   return(0);                /* Exit code 0=Ok exit */
  164.  
  165. }
  166.