1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149
|
/*
** Compiler I/O benchmarks
** public domain by Dave Knapp & Bob Stout
*/
#include <stdio.h>
#include <conio.h>
#include <dos.h>
typedef unsigned long dword;
#ifdef M_I86 /* Identifier for MSC, QC, Watcom, or ZTC */
#ifndef __ZTC__
#include <graph.h>
#ifndef __WATCOMC__
#ifdef _MSC_VER
#define LOGFILE "dspdtst.msc"
#else
#define LOGFILE "dspdtst.qc"
#endif
// #define MK_FP(seg,off) ((void far *)(((dword)(seg)<<16)|(off)))
#else
#define LOGFILE "dspdtst.wc"
#endif /* not Watcom */
#define cputs(s) _outtext((char _far *)(s))
#define gotoxy(col,row) _settextposition(row,col)
#else /* if ZTC */
#include <disp.h>
#define cputs(s) disp_puts(s "\n")
#define cprintf(s) disp_printf(s "\n")
#ifdef __SC__
#define LOGFILE "dspdtst.sc"
#define gotoxy(col,row) __emit__(0xb2,col-1,0xb6,row-1,0xb7,0,0xb4,2,0xcd,0x10)
#else
#define LOGFILE "dspdtst.ztc"
#define gotoxy(col,row) asm(0xb2,col-1,0xb6,row-1,0xb7,0,0xb4,2,0xcd,0x10)
#endif
#endif /* if ZTC */
#else
#ifdef __BORLANDC__
#define LOGFILE "dspdtst.bc"
#else
#define LOGFILE "dspdtst.tc"
#endif
#endif /* if TC */
dword far *bios_time = (dword far *)(0x0040006c);
dword time1,time2,time3,time4,time5,time6;
void main(void)
{
int i;
FILE *log = stdout, *nulfile;
#ifdef __ZTC__
disp_open();
#endif
nulfile = fopen("NUL", "w");
time1 = *bios_time;
for(i = 1; i < 1000; i++)
{
gotoxy(10,5);
puts("puts test.");
puts("this is the second line.\n");
}
time1 = *bios_time - time1;
time2 = *bios_time;
for(i = 1; i < 1000; i++)
{
gotoxy(10,5);
printf("printf test.\n");
printf("this is the second line.\n");
}
time2 = *bios_time - time2;
time3 = *bios_time;
for(i = 1; i < 1000; i++)
{
#ifdef __ZTC__
disp_move(4,9);
cputs("d_puts test.");
#else
gotoxy(10,5);
#if defined(M_I86) && !defined(__WATCOMC__)
cputs("_outtext test.\r\n");
#else
cputs("cputs test.\r\n");
#endif
#endif
cputs("this is the second line.");
}
time3 = *bios_time - time3;
time4 = *bios_time;
for(i = 1; i < 1000; i++)
{
#ifdef __ZTC__
disp_move(4,9);
cprintf("d_printf test.");
#else
gotoxy(10,5);
cprintf("cprintf test.\r\n");
#endif
cprintf("this is the second line.");
}
time4 = *bios_time - time4;
time5 = *bios_time;
for(i = 1; i < 1000; i++)
{
fputs("fputs test.\n", nulfile);
fputs("this is the second line.\n", nulfile);
}
time5 = *bios_time - time5;
time6 = *bios_time;
for(i = 1; i < 1000; i++)
{
fprintf(nulfile, "fprintf test.\n");
fprintf(nulfile, "this is the second line.\n");
}
time6 = *bios_time - time6;
#ifdef __ZTC__
disp_close();
#endif
log = fopen(LOGFILE, "w");
fputs("Times for 1000 iterations:\n\n", log);
fprintf(log, "puts %10.3f seconds\n", (double)time1 * .054945);
fprintf(log, "printf %10.3f seconds\n", (double)time2 * .054945);
#ifndef __ZTC__
#if defined(M_I86) && !defined(__WATCOMC__)
fprintf(log, "_outtext %10.3f seconds\n", (double)time3 * .054945);
#else
fprintf(log, "cputs %10.3f seconds\n", (double)time3 * .054945);
#endif
fprintf(log, "cprintf %10.3f seconds\n", (double)time4 * .054945);
#else
fprintf(log, "d_puts %10.3f seconds\n", (double)time3 * .054945);
fprintf(log, "d_printf %10.3f seconds\n", (double)time4 * .054945);
#endif
fprintf(log, "fputs %10.3f seconds\n", (double)time5 * .054945);
fprintf(log, "fprintf %10.3f seconds\n", (double)time6 * .054945);
fclose(log);
}
|