home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Simtel MSDOS 1992 September
/
Simtel20_Sept92.cdr
/
msdos
/
turbo_c
/
windowtc.arc
/
QDEMO10.C
< prev
next >
Wrap
Text File
|
1987-06-03
|
12KB
|
339 lines
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include <dos.h>
#include <conio.h>
#include <w1.h>
#include <windprot.h>
#include <color.h>
#define WAIT 15000
/*===============================================================================*/
/* Qdemo.c - Demonstration program for Q screen utilities ver 1.0, 6-1-87 */
/* Demo has been programmed for All Cards and any column mode. If you want to */
/* try 40 column mode, set crtcolumns to 40 in main. This does not set your */
/* machine to 40 column mode. This must be done by the DOS mode command. */
/* */
/* AUTHORS: Turbo Pascal version -- (C) 86,87 Jim H. Lemay */
/* Turbo C version -- (C) 1987 Mike Mlachak */
/* DATE: 6-1-87 */
/* VERSION: 1.0 */
/* COMMENTS: Must be compiled in SMALL model and linked with WIND1x.lib */
/*===============================================================================*/
typedef char str80[80];
int row, rows, col, cols, ctr, step, rstep, colmax, count,
attrib, i, j, crtcols;
int hidecursor, oldcursor, fgrnd, bgrnd;
int brdrattr, wndwattr;
char savedblock[4000], popupblock[4000];
int blkrow, blkcol;
int crtcolumns; /* number of CRT columns */
int tattr;
int coll[3], colr[3];
char strng[75], numstr[75];
double rnum;
extern void qinit(void);
int random(int);
/* These are double lines for qbox */
static str80 data[9] = {
"1",
"22",
"333",
" Q Screen Utilities ",
"Odd Length",
"Even Length",
"18 characters wide",
"19 characters width",
"Margin to Margin width"};
/* qbox is an application of Q screen utilities. It can make fast pop up menus.
Together with qstore/qrestore, you can do several windows at one time. */
void main(void)
{
/* --- Set up data --- */
qinit(); /* << << Required intializing statement !! */
crtcolumns = 80;
crtcols = crtcolumns;
hidecursor = 8192;
/* --- Initial screen --- */
oldcursor = cursorchange(hidecursor);
qfill(1, 1, 25, crtcols, (BLUE << 4) + WHITE, ' '); /* Clear Screen */
qwritecv(11, 1, crtcols, (BLUE << 4) + YELLOW, data[3]);
qwritec(13, 1, crtcols, -1, "Your screen is about to explode.");
qwritec(14, 1, crtcols, -1, "Hold on to your seat ...");
sleep(4);
/* --- Explosion of Boxes --- */
qfill(11, 1, 4, crtcols, -1, ' '); /* Clear Lines */
qattr(1, 1, 25, crtcols, LIGHTGRAY << 4); /* Change screen attribute */
ctr = crtcols / 2;
for (step = 2; step <= ctr - 2; step++) {
if (step > 24)
rstep = 12;
else
rstep = step >> 1;
for (count = 1; count <= 20; count++) {
row = 13 - rstep + random(rstep + 2);
rows = rstep;
cols = rstep + rstep + (rstep >> 2);
if (step <= 24)
col = ctr - cols + random(cols + 1);
else
col = ctr - 1 - step + random(step + step - 22);
fgrnd = random(16);
bgrnd = random(8);
if (bgrnd == fgrnd)
fgrnd = fgrnd + 1;
attrib = (bgrnd << 4) + fgrnd;
qfill(row,col,row,cols,attrib,'▓');
} /* for count = 1*/
} /* for step = 2,..etc */
qfillc(10, 1, crtcols, 6, 34, RED << 4, ' ');
qfillc(11, 1, crtcols, 4, 30, BROWN << 4, ' ');
tattr = (RED << 4) + YELLOW;
qwritecv(12, 1, crtcols, tattr, data[3]);
qwritec(13, 1, crtcols, tattr, "Turbo-C Version 1.0");
/* --- Save Screen for Page Demo --- */
if (maxpage > 0)
{
qstore(1, 1, 25, crtcols, savedblock);
qwritepage(1);
qrestore(1, 1, 25, crtcols, savedblock);
qwritepage(0);
}
/* --- End of Save Screen --- */
sleep(2);
tattr = (BLUE << 4) + WHITE;
qwritec(6, 1, crtcols, tattr, " qwrite will write with new attributes ");
qwritec(7, 1, crtcols, tattr, " that you specify direct to the screen.");
sleep(3);
qwritec(18, 1, crtcols, -1, " qwrite will also use existing attributes ");
qwritec(19, 1, crtcols, -1, " when you do not even know or care. ");
/* highlight the word 'existing' */
qattrc(18, 6, crtcols + 5, 1, 10, (LIGHTRED << 4) + WHITE);
sleep(4);
qwritec(21, 1, crtcols, tattr, " Say Goodbye to this screen. ");
sleep(2);
/* --- Disintigrate Screen --- */
for (i = 1; i <=7500; i++) {
row = random(25) +1;
col = random(crtcols) + 1;
qfill(row,col,1,1,BLACK, ' ');
}
/* --- Qwrite with Reals Demo --- */
qfill(1, 1, 25, crtcols, YELLOW, ' '); /* Clear Screen */
qwritec(2, 1, crtcols, -1, "qwritev with TURBO-C's sprintf will write");
qwritec(3, 1, crtcols, -1, "reals and integers faster:");
sleep(4);
rnum = 1.2345678901;
for (col = 0; col <= (crtcols / 20) - 1; col++) {
for (row = 5; row <= 24; row++) {
rnum = rnum + 1.0;
sprintf(numstr,"%e",rnum);
qwritev(row, col * 20 + 4, -1, numstr);
}
}
sleep(5);
/* --- Centering Demo --- */
qfill(1, 1, 25, crtcols, LIGHTGRAY << 4, ' '); /* Clear Screen */
qwritec(2, 1, crtcols, -1, "qwritec and qwritecv will automatically");
qwritec(3, 1, crtcols, -1, "center your data ...");
qwritec(4, 1, crtcols, -1, "(ODD breaks are shifted to the left.)");
sleep(4);
/* - Set up columns for varying column modes - */
coll[1] = 1;
colr[1] = crtcols;
if (crtcols < 80) {
coll[0] = coll[1];
coll[2] = crtcols / 2;
colr[0] = colr[1];
colr[2] = crtcols / 2;
}
else {
coll[0] = 3;
colr[0] = 26;
coll[2] = crtcols - 14;
colr[2] = crtcols - 14;
}
qwritec(7, coll[0], colr[0], -1, "between margins ...");
qbox(8, (coll[0] + (colr[0] >> 1)) - 14, 15, 26, WHITE, LIGHTGRAY, doublebrdr);
sleep(2);
for (row = 11; row <= 19; row++)
qwritecv(row, coll[0], colr[0], -1, data[row - 11]);
sleep(2);
qwritec(7, coll[1], colr[1], -1, "between two columns ...");
qfillc(9, coll[1], colr[1], 13, 24, YELLOW, ' '); /* Clear window */
for (row = 9; row <= 21; row++)
qwritec(row, coll[1], colr[1], -1, "><"); /* Show two columns */
sleep(2);
for (row = 11; row <= 19; row++)
qwritecv(row, coll[1], colr[1], LIGHTRED, data[row - 11]);
sleep(2);
qwritec(7, coll[2], colr[2], -1, "or on a center line ...");
qfillc(8, coll[2], colr[2], 15, 27, LIGHTGRAY << 4, ' '); /* Clear window */
for (row = 9; row <= 21; row++) /* Show center line */
qwritec(row, coll[2], colr[2], (LIGHTGRAY << 4) + WHITE, "|");
sleep(2);
for (row = 11; row <= 19; row++)
qwritecv(row, coll[2], colr[2], -1, data[row - 11]);
sleep(5);
/* --- Qfill Demo --- */
qfill(1, 1, 25, crtcols, WHITE, ' '); /* Clear Screen */
qwritec(2, 1, crtcols, -1, "qfill as well as qattr can fill");
qwritec(3, 1, crtcols, -1, "your screen in several ways.");
sleep(3);
qwritec(7, 1, crtcols, -1, "by rows ...");
sleep(2);
for (row = 9; row <= 24; row++)
qfill(row, 2, 1, crtcols - 2, 9 + row, (char)(row + 56));
sleep(3);
qfill(7, 1, 19, crtcols, WHITE, ' '); /* Clear Lines */
qwritec(7, 1, crtcols, -1, "by columns ...");
sleep(2);
for (col = 2; col <= crtcols - 2; col++)
qfill(9, col, 16, 1, 16 + col, (char)(col + 63));
sleep(3);
qfill(7, 1, 19, crtcols, WHITE, ' '); /* Clear Lines */
qwritec(7, 1, crtcols, -1, "or by row-by-column blocks ...");
sleep(2);
qfill(9, 2, 16, crtcols - 2, (BLUE << 4) + YELLOW, '!');
sleep(4);
/* --- Qbox demo --- */
qfill(1, 1, 25, crtcols, LIGHTGRAY << 4, ' '); /* Clear Screen */
qwritec(2, 1, crtcols, -1, "qbox is an application procedure made");
qwritec(3, 1, crtcols, -1, "from qwritev and qfill. Together they");
qwritec(4, 1, crtcols, -1, "can make windows with borders easy.");
sleep(3);
qwritec(14, 1, crtcols, -1, "How about 1000 of them? ... ");
sleep(2);
colmax = crtcols - 21;
for (i = 1; i <= 1000; i++) {
row = random(10) + 6;
col = random(colmax) + 2;
brdrattr = random(128);
wndwattr = random(128);
qbox(row, col, 10, 20, brdrattr, wndwattr, doublebrdr);
}
sleep(5);
/* --- Block Transfer and PopUp Demo --- */
qfill(1, 1, 25, crtcols, YELLOW, '?'); /* Clear Screen */
qfillc(10, 1, crtcols, 6, 40, BROWN << 4, ' '); /* Clear Block */
qwritec(11, 1, crtcols, -1, "qstore will save and restore");
qwritec(12, 1, crtcols, -1, "Row-by-Column blocks on your display.");
qwritec(13, 1, crtcols, -1, "It is so fast, I have to slow it down");
qwritec(14, 1, crtcols, -1, "so you can see it.");
sleep(4);
blkrow = 8;
blkcol = (crtcols / 2) - 9;
qstore(blkrow, blkcol, 10, 20, savedblock);
/* --- Make a Pop Up Menu --- */
qbox(blkrow, blkcol, 10, 20, (BLUE << 4) + YELLOW, (BLUE << 4) + BROWN, doublebrdr);
qwritec(blkrow + 4, blkcol, blkcol + 20, -1, "Pop Up");
qwritec(blkrow + 5, blkcol, blkcol + 20, -1, "Menu");
/* --- End of Pop Up Menu --- */
qstore(blkrow, blkcol, 10, 20, popupblock);
sleep(3);
colmax = crtcols - 20;
for (i = 1; i <= 30; i++) {
for (j = 0; j <=WAIT; j++);
qrestore(blkrow, blkcol, 10, 20, savedblock);
blkrow = random(15) + 1;
blkcol = random(colmax) + 1;
qstore(blkrow, blkcol, 10, 20, savedblock);
qrestore(blkrow, blkcol, 10, 20, popupblock);
}
/* --- Page Demo --- */
if (maxpage > 0) {
qpage(1);
qwritepage(1);
tattr = (BLUE << 4) + YELLOW;
qwritec(20, 1, crtcols, tattr, " Remember this page? ");
qwritec(21, 1, crtcols, tattr, " It wasn't destroyed, but saved using ");
qwritec(22, 1, crtcols, tattr, " qstore/qrestore and placed on a new page. ");
sleep(6);
qwritepage(0);
qpage(0);
}
/* --- Attribute Demo --- */
qfill(1, 1, 25, crtcols, (GREEN << 4) + GREEN, ' '); /* Clear Screen */
tattr = (GREEN << 4) + WHITE;
qwritec(2, 1, crtcols, tattr, "Q Screen Utilities is hiding strings on");
qwritec(3, 1, crtcols, tattr, "your screen ...");
cols = crtcols / 20;
if (qwait == 0)
tattr = 0;
else
tattr = (GREEN << 4) + GREEN;
for (col = 0; col <= cols - 1; col++)
for (row = 5; row <= 20; row++)
qwritev(row, 20 * col + 1, tattr, data[3]);
sleep(3);
qfill(2, 1, 2, crtcols, -1, ' '); /* Clear Lines */
tattr = (GREEN << 4) + BLACK;
qwritec(2, 1, crtcols, tattr, "qattr can show them -");
qwritec(3, 1, crtcols, tattr, "by merely changing the attribute!");
sleep(3);
/* --- Try using Turbo's color procedures this time --- */
qattr(5, 1, 16, crtcols, tattr); /* Reveal Data */
sleep(3);
qfill(2, 1, 2, crtcols, -1, ' '); /* Clear Lines */
qwritec(2, 1, crtcols, tattr, "Or even just emphasize what's seen ...");
for (i = 1; i <= 100; i++) {
row = random(16) + 5;
col = random(cols) * 20 + 1;
qattr(row, col, 1, 20, 46);
for (j=0; j<=WAIT-7500; j++);
qattr(row, col, 1, 20, 32);
}
for (i = 1; i <= cols; i++) /* Emphasize Data */
qattr(5 * i, (i - 1) * 20 + 1, 1, 20, (LIGHTGREEN << 4) + YELLOW);
tattr = wiattr(YELLOW,GREEN);
qwritec(24, 1, crtcols, tattr, " Original TEAMWARE concept (C) 86,87 James H. LeMay ");
qwritec(23, 1, crtcols, tattr, " TURBO-C Version (C) 1987 Michael G. Mlachak ");
gotorc(21, 1);
oldcursor = cursorchange(oldcursor);
}
int random(seed)
{
int hold;
hold= rand();
if (hold > 127)
hold = hold % 127;
hold = hold % seed;
return(hold);
}