|
|
1.1 ! root 1: #include <windows.h> ! 2: #include <string.h> ! 3: ! 4: // These are the functions in this file: ! 5: void DrawAscii (HDC hdc, RECT *pRect, WORD direction); ! 6: ! 7: /* A data structure that DrawAscii will use */ ! 8: ! 9: char ascii[]= ! 10: {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, ! 11: 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, ! 12: ' ', '!', '"', '#', '$', '%', '&', '\'', '(', ')', '*', '+', ',', ! 13: '-', '.', '/', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', ! 14: ':', ';', '<', '=', '>', '?', '@', 'A', 'B', 'C', 'D', 'E', 'F', ! 15: 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', ! 16: 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '[', '\\', ']', '^', '_', '`', ! 17: 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', ! 18: 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', ! 19: '{', '|', '}', '~', '', ! 20: 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, ! 21: 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, ! 22: 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, ! 23: 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, ! 24: 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, ! 25: 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, ! 26: 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, ! 27: 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, ! 28: 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, ! 29: 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 000, 000}; ! 30: ! 31: /* A function that the CharSet window will use to display the text */ ! 32: ! 33: void DrawAscii ( ! 34: HDC hdc, ! 35: RECT *pRect, ! 36: WORD direction) ! 37: { ! 38: char *pch; ! 39: int h, w, incx, incy, width, l; ! 40: int index, wDisplay; ! 41: POINT pt; ! 42: TEXTMETRIC tm; ! 43: BOOL bLineMode = FALSE; ! 44: ! 45: /* for debugging */ ! 46: char szTmp [100]; ! 47: int i, j, result; ! 48: ! 49: i; j; result; szTmp; //unreferenced ! 50: ! 51: GetTextMetrics (hdc, &tm); ! 52: h = tm.tmHeight; ! 53: w = tm.tmMaxCharWidth; ! 54: ! 55: switch (direction) { ! 56: // OS/2 did stuff with character direction... Windows doesn't ! 57: default: ! 58: incx = 0; ! 59: incy = h; ! 60: pt.x = 0; ! 61: pt.y = 0; ! 62: break; ! 63: } ! 64: ! 65: pch = &(ascii[tm.tmFirstChar]); ! 66: wDisplay = pRect->right -pRect->left; ! 67: ! 68: if (bLineMode) { // Calculate how long an entire line can be... ! 69: while (pch) { ! 70: index = 0; ! 71: width = 0; ! 72: while ((index < (int)strlen(pch)) ! 73: && (pt.x + width) < (wDisplay - (w/2)) ) { ! 74: #if defined (NT) ! 75: SIZE size; ! 76: GetTextExtentPoint (hdc, pch, ++index, &size); ! 77: width = size.cx; ! 78: #elif defined (WIN16) ! 79: width = LOWORD (GetTextExtent (hdc, pch, ++index)); ! 80: #endif ! 81: l = strlen(pch); ! 82: ! 83: if ((int)pch[index] > (int)tm.tmLastChar) { ! 84: break; ! 85: } ! 86: } ! 87: index--; ! 88: ! 89: if (index<=0) { ! 90: pch = NULL; ! 91: } else if (index>=(int)strlen(pch)) { ! 92: TextOut (hdc, pt.x, pt.y, pch, strlen(pch)); ! 93: pch = NULL; ! 94: } else { ! 95: TextOut (hdc, pt.x, pt.y, pch, index); ! 96: pt.x += incx; ! 97: pt.y += incy; ! 98: pch += index; ! 99: } ! 100: } ! 101: } else { // One Character at a time... ! 102: while (pch[0] && ((int)pch[0]<=(int)tm.tmLastChar)) { ! 103: #if defined (NT) ! 104: SIZE size; ! 105: GetTextExtentPoint (hdc, pch, 1, &size); ! 106: width = size.cx; ! 107: #elif defined (WIN16) ! 108: width = LOWORD(GetTextExtent (hdc, pch, 1)); ! 109: #endif ! 110: if ((pt.x + width) > wDisplay) { ! 111: pt.x = 0; ! 112: pt.y += incy; ! 113: } ! 114: TextOut (hdc, pt.x, pt.y, pch, 1); ! 115: pt.x += width; ! 116: pch++; ! 117: } ! 118: } ! 119: ! 120: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.