home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Frostbyte's 1980s DOS Shareware Collection
/
floppyshareware.zip
/
floppyshareware
/
USCX
/
CONCUR.ZIP
/
CONCUR.C
next >
Wrap
Text File
|
1988-10-11
|
5KB
|
219 lines
#include <stdio.h>
#include <conio.h>
#include<bios.h>
#include<concur.h>
/************************************************************************/
void taskabort(void)
{
cprintf("\n\rTASK ERROR: Unexpected End of Task%3d\n\r",taskind);
exit(133+taskind);
}
void claiminput(void)
{
while(INPUTBUSY) switchta();
INPUTBUSY=1;
}
void releaseinput(void)
{
INPUTBUSY=0;
}
/*int getch(void)
{
int i;
if (bioskey(1)==0) switchta();
else i=bioskey(0);
return(i);
}
*/
/************************************************************************/
int getche(void)
{
int i;
while (!kbhit()) switchta();
i=getch();
cprintf("%c",i);
return(i);
}
/************************************************************************/
void taskwindow(int x3, int y3, int x4, int y4, char attribute)
{
int i,j;
windows[taskind].y2=y4-1;
windows[taskind].x2=x4-1;
windows[taskind].y1=y3-1;
windows[taskind].x1=x3-1;
windows[taskind].row=windows[taskind].y1;
windows[taskind].col=windows[taskind].x1;
windows[taskind].attr=attribute;
textattr(windows[taskind].attr);
window (x3,y3,x4,y4);
}
/************************************************************************/
void dummy(void)
{ int x;
for (x=1;x<15;++x)
{
cprintf(" Function Dummy(): task%2d, Index Value X=%2d\n\r",taskind,x);
switchta();
}
}
/************************************************************************/
void border(char *header)
{
int i,j;
cprintf("┌");
for (i=windows[taskind].x1;
i<=((windows[taskind].x2-windows[taskind].x1-(strlen(header)))/2
+windows[taskind].x1-1);i++) cprintf("─");
cprintf(header);
for (i=((windows[taskind].x2-windows[taskind].x1+(strlen(header)))/2
+windows[taskind].x1);
i<windows[taskind].x2-1;i++) cprintf("─");
cprintf("┐");
for (i=windows[taskind].y1+1;i<=windows[taskind].y2-2;i++)
{cprintf("│");
for(j=windows[taskind].x1;j<windows[taskind].x2-1;j++) cprintf(" ");
cprintf("│");}
cprintf("└");
for (i=windows[taskind].x1-1;i<=windows[taskind].x2-3;i++) cprintf("─");
cprintf("┘");
windows[taskind].x1++;
windows[taskind].y1++;
windows[taskind].x2--;
windows[taskind].y2--;
windows[taskind].y2--;
gotoxy(1,1);
switchta();
}
/************************************************************************/
void task1(void)
{ int i;
taskwindow(1,1,38,18,7+128);
border("TASK 1");
textcolor(07);
do{
cprintf("\n\rTask1-before switch\n\r");
for (i=1;i<=10;i++)
{
switchta();
cprintf(" I =%2d\n\r",i);
}
dummy();
cprintf("\n\rTask1-after switch");
}while (1!=0);
}
/************************************************************************/
void task2(void)
{ FILE *f;
int ch;
taskwindow(39,1,80,10,7);
border("TASK 2");
textcolor(15);
do{
switchta();
f=fopen("concur.c","r");
if (f==NULL) cprintf("error%4d cannot open concur.c\n\r",f);
while ((ch=fgetc(f))!= EOF)
{ if (ch<=13) switchta();
putch(ch);
}
fclose(f);
}while(1!=0);
}
/************************************************************************/
void task3(void)
{
FILE *f;
int ch;
textbackground(7);
taskwindow(40,10,76,18,0+(7<<4));
textcolor(0);
border("TASK 3");
do{
cprintf("\n\r Task 3\n\r");
switchta();
dummy();
f=fopen("concur.doc","r");
if (f==NULL) cprintf("error%4d cannot open concur.doc\n\r",f);
while ((ch=fgetc(f))!= EOF)
{ if (ch<=13) switchta();
putch(ch);
}
fclose(f);
cprintf("\n\rTask 3-after switch\n\r");
}while(1!=0);
}
/************************************************************************/
void install(int i,int paragraphs,void (*task)(void))
{ unsigned stackarea[14];
int x;
if ((i>=15)||(i<1)){ cprintf("\n\rInstall Error: Illegal task number%3d\n\r",i );
exit(33+i);}
jpr[i]->j_ss=_SS;
jpr[i]->j_sp=_SP-_stklen -2;
_stklen=_stklen+(paragraphs*16);
poke(jpr[i]->j_ss,jpr[i]->j_sp,task);
poke(jpr[i]->j_ss,jpr[i]->j_sp+2,taskabort);
_ES=_DS;
jpr[i]->j_flag=0x200;
jpr[i]->j_cs=_CS;
/*jpr[i]->j_ip=task;*/
jpr[i]->j_bp=jpr[i]->j_sp;
jpr[i]->j_di=_DI;
jpr[i]->j_es=_ES;
jpr[i]->j_si=_SI;
jpr[i]->j_ds=_DS;
taskwindow(1,1,80,25,7);
if (i!=0) maxtask++;
}
/************************************************************************/
void main(void)
{
int x;
char name[30];
directvideo=0;
install(1, 200,task1);
install(2, 200,task2);
install(3, 200,task3);
taskwindow(1,18,80,25,15);
border("Main Program");
jpr[0]->j_sp=_SP; /* do not move this line*/
cprintf("task%2d M A I N P R O G R A M W I N D O W\n\r",taskind);
do{
switchta();
cprintf("\n\r");
claiminput();
cscanf("%s",name);
releaseinput();
}while(1!=0);
}