home *** CD-ROM | disk | FTP | other *** search
/ Frostbyte's 1980s DOS Shareware Collection / floppyshareware.zip / floppyshareware / USCX / CONCUR.ZIP / CONCUR.C next >
Text File  |  1988-10-11  |  5KB  |  219 lines

  1. #include <stdio.h>
  2. #include <conio.h>
  3. #include<bios.h>
  4. #include<concur.h>
  5.  
  6. /************************************************************************/
  7. void taskabort(void)
  8. {
  9.        cprintf("\n\rTASK ERROR: Unexpected End of Task%3d\n\r",taskind);
  10.        exit(133+taskind);
  11. }
  12. void claiminput(void)
  13. {
  14. while(INPUTBUSY) switchta();
  15. INPUTBUSY=1;
  16. }
  17. void releaseinput(void)
  18. {
  19. INPUTBUSY=0;
  20. }
  21.  
  22. /*int getch(void)
  23. {
  24.  int i;
  25.  if (bioskey(1)==0) switchta();
  26.  else i=bioskey(0);
  27.  return(i);
  28.  }
  29. */
  30.  
  31. /************************************************************************/
  32. int getche(void)
  33. {
  34.  int i;
  35.  while (!kbhit()) switchta();
  36.  i=getch();
  37.  cprintf("%c",i);
  38.  return(i);
  39.  }
  40.  
  41.  
  42. /************************************************************************/
  43. void taskwindow(int x3, int y3, int x4, int y4, char attribute)
  44.      {
  45.      int i,j;
  46.  
  47.       windows[taskind].y2=y4-1;
  48.       windows[taskind].x2=x4-1;
  49.       windows[taskind].y1=y3-1;
  50.       windows[taskind].x1=x3-1;
  51.      windows[taskind].row=windows[taskind].y1;
  52.      windows[taskind].col=windows[taskind].x1;
  53.      windows[taskind].attr=attribute;
  54.      textattr(windows[taskind].attr);
  55.      window (x3,y3,x4,y4);
  56.      }
  57.  
  58. /************************************************************************/
  59. void dummy(void)
  60.  
  61. { int x;
  62. for (x=1;x<15;++x)
  63.     {
  64.          cprintf(" Function Dummy(): task%2d, Index Value X=%2d\n\r",taskind,x);
  65.                    switchta();
  66.      }
  67. }
  68.  
  69. /************************************************************************/
  70. void border(char *header)
  71. {
  72.      int i,j;
  73.      cprintf("┌");
  74.      for (i=windows[taskind].x1;
  75.      i<=((windows[taskind].x2-windows[taskind].x1-(strlen(header)))/2
  76.      +windows[taskind].x1-1);i++) cprintf("─");
  77.      cprintf(header);
  78.      for (i=((windows[taskind].x2-windows[taskind].x1+(strlen(header)))/2
  79.      +windows[taskind].x1);
  80.      i<windows[taskind].x2-1;i++) cprintf("─");
  81.      cprintf("┐");
  82.      for (i=windows[taskind].y1+1;i<=windows[taskind].y2-2;i++)
  83.          {cprintf("│");
  84.           for(j=windows[taskind].x1;j<windows[taskind].x2-1;j++) cprintf(" ");
  85.           cprintf("│");}
  86.      cprintf("└");
  87.      for (i=windows[taskind].x1-1;i<=windows[taskind].x2-3;i++) cprintf("─");
  88.      cprintf("┘");
  89.      windows[taskind].x1++;
  90.      windows[taskind].y1++;
  91.      windows[taskind].x2--;
  92.      windows[taskind].y2--;
  93.      windows[taskind].y2--;
  94.      gotoxy(1,1);
  95.      switchta();
  96. }
  97. /************************************************************************/
  98.  
  99. void task1(void)
  100. { int i;
  101.         taskwindow(1,1,38,18,7+128);
  102.  
  103.         border("TASK 1");
  104.         textcolor(07);
  105.  
  106.  do{
  107.        cprintf("\n\rTask1-before switch\n\r");
  108.        for (i=1;i<=10;i++)
  109.        {
  110.        switchta();
  111.        cprintf("   I =%2d\n\r",i);
  112.        }
  113.        dummy();
  114.        cprintf("\n\rTask1-after switch");
  115.     }while (1!=0);
  116. }
  117.  
  118. /************************************************************************/
  119.  
  120. void task2(void)
  121. {       FILE *f;
  122.         int  ch;
  123.  
  124.  
  125.         taskwindow(39,1,80,10,7);
  126.         border("TASK 2");
  127.         textcolor(15);
  128.  do{
  129.      switchta();
  130.      f=fopen("concur.c","r");
  131.      if (f==NULL) cprintf("error%4d cannot open concur.c\n\r",f);
  132.      while ((ch=fgetc(f))!= EOF)
  133.                             { if (ch<=13) switchta();
  134.                              putch(ch);
  135.                             }
  136.  
  137.      fclose(f);
  138.     }while(1!=0);
  139. }
  140. /************************************************************************/
  141.  
  142. void task3(void)
  143. {
  144.   FILE *f;
  145.         int  ch;
  146.  
  147.         textbackground(7);
  148.        taskwindow(40,10,76,18,0+(7<<4));
  149.        textcolor(0);
  150.        border("TASK 3");
  151.  
  152.  
  153.  do{
  154.         cprintf("\n\r     Task 3\n\r");
  155.         switchta();
  156.         dummy();
  157.      f=fopen("concur.doc","r");
  158.      if (f==NULL) cprintf("error%4d cannot open concur.doc\n\r",f);
  159.      while ((ch=fgetc(f))!= EOF)
  160.                             { if (ch<=13) switchta();
  161.                              putch(ch);
  162.                             }
  163.  
  164.      fclose(f);
  165.  
  166.         cprintf("\n\rTask 3-after switch\n\r");
  167.     }while(1!=0);
  168. }
  169.  
  170. /************************************************************************/
  171. void install(int i,int paragraphs,void (*task)(void))
  172. { unsigned  stackarea[14];
  173.   int x;
  174.  
  175. if ((i>=15)||(i<1)){ cprintf("\n\rInstall Error: Illegal task number%3d\n\r",i );
  176.             exit(33+i);}
  177. jpr[i]->j_ss=_SS;
  178. jpr[i]->j_sp=_SP-_stklen -2;
  179. _stklen=_stklen+(paragraphs*16);
  180. poke(jpr[i]->j_ss,jpr[i]->j_sp,task);
  181. poke(jpr[i]->j_ss,jpr[i]->j_sp+2,taskabort);
  182. _ES=_DS;
  183. jpr[i]->j_flag=0x200;
  184. jpr[i]->j_cs=_CS;
  185. /*jpr[i]->j_ip=task;*/
  186. jpr[i]->j_bp=jpr[i]->j_sp;
  187. jpr[i]->j_di=_DI;
  188. jpr[i]->j_es=_ES;
  189. jpr[i]->j_si=_SI;
  190. jpr[i]->j_ds=_DS;
  191. taskwindow(1,1,80,25,7);
  192. if (i!=0) maxtask++;
  193. }
  194.  
  195. /************************************************************************/
  196. void main(void)
  197. {
  198.         int x;
  199.         char name[30];
  200.         directvideo=0;
  201.  
  202.  
  203.         install(1, 200,task1);
  204.     install(2, 200,task2);
  205.     install(3, 200,task3);
  206.         taskwindow(1,18,80,25,15);
  207.         border("Main Program");
  208.         jpr[0]->j_sp=_SP; /* do not move this line*/
  209.  
  210.         cprintf("task%2d            M A I N    P R O G R A M    W I N D O W\n\r",taskind);
  211.         do{
  212.            switchta();
  213.            cprintf("\n\r");
  214.            claiminput();
  215.            cscanf("%s",name);
  216.            releaseinput();
  217.            }while(1!=0);
  218. }
  219.