/*                             *** frame.c ***                       */
/*                                                                   */
/* IBM-PC microsoft "C" under PC-DOS                                 */
/*                                                                   */
/* Function to draw a box given the upper left corner and the lower  */
/* right corner.  Uses the extended character set - graphics board   */
/* not needed.  Uses direct BIOS calls.  Returns a 0 if successful   */
/* or a -1 if invalid parameters.                                    */
/*                                                                   */
/* *** NOTE ***                                                      */
/* The upper left corner of the screen is 0,0 and the bottom right   */
/* corner is 24,79.                                                  */
/*                                                                   */
/* Written by L. Cuthbertson, May 1984.                              */
/*                                                                   */
/*********************************************************************/
/*                                                                   */
int frame(ulrow,ulcol,lrrow,lrcol)
int ulrow,ulcol,lrrow,lrcol;
{
	static int horbar = 0xC4, verbar = 0xB3;
	static int ulcorn = 0xDA, urcorn = 0xBF;
	static int llcorn = 0xC0, lrcorn = 0xD9;
	int count,irow;

	/* error checking */
	if (ulrow < 0 || ulrow > 24) return(-1);
	if (ulcol < 0 || ulcol > 79) return(-1);
	if (lrrow < 0 || lrrow > 24) return(-1);
	if (lrcol < 0 || lrcol > 79) return(-1);
	if (lrrow < ulrow) return(-1);
	if (lrcol < ulcol) return(-1);

	/* do top line first */
	biosset(ulrow,ulcol);
	bioswc(ulcorn,1);
	count = lrcol-ulcol-1;
	if (count > 0) {
		biosset(ulrow,ulcol+1);
		bioswc(horbar,count);
	}
	biosset(ulrow,lrcol);
	bioswc(urcorn,1);

	/* do both sides at once */
	irow = ulrow + 1;
	while (irow < lrrow) {
		biosset(irow,ulcol);
		bioswc(verbar,1);
		biosset(irow,lrcol);
		bioswc(verbar,1);
		irow++;
	}

	/* do bottom line */
	biosset(lrrow,ulcol);
	bioswc(llcorn,1);
	count = lrcol-ulcol-1;
	if (count > 0) {
		biosset(lrrow,ulcol+1);
		bioswc(horbar,count);
	}
	biosset(lrrow,lrcol);
	bioswc(lrcorn,1);

	/* done */
	return(0);
}
