/ source / tools / src / vgafont.cpp
vgafont.cpp
  1  // VGA Font Grabber
  2  // Copyright (c) 1997 Jonathon Fowler
  3  // This is a DOS program originally written with Borland Turbo C++ for DOS 3.1
  4  
  5  
  6  #include <dos.h>
  7  #include <stdio.h>
  8  
  9  int main(void)
 10  {
 11      int font, width, height, numchars;
 12      struct REGPACK r;
 13      FILE *fp;
 14  
 15      printf("VGA Font Grabber\n"
 16             "Copyright (c) 1997 Jonathon Fowler\n");
 17  
 18      do {
 19          printf("\nSelect which font to grab:\n"
 20                 "  1.   8-by-8 ROM\n"
 21                 "  2.   8-by-14 ROM\n"
 22                 "  3.   8-by-16 ROM\n"
 23                 "  4.   9-by-16 ROM\n"
 24                 "  5.   9-by-14 ROM\n"
 25                 "  6.   Quit\n"
 26                 " > ");
 27          scanf("%d",&font);
 28  
 29          switch (font) {
 30              case 1:
 31                  printf("Getting 8-by-8 ROM font...");
 32  
 33                  if ((fp = fopen("88vga.dat", "wb")) != NULL) {
 34                      width = 8;
 35                      height = 8;
 36                      numchars = 256;
 37  
 38                      r.r_ax = 0x1130;    // locate the font (1st half)
 39                      r.r_bx = 0x0300;
 40                      intr(0x10, &r);
 41  
 42                      fwrite(MK_FP(r.r_es, r.r_bp), 1, (8 * 128), fp);
 43  
 44                      r.r_ax = 0x1130;    // locate the font (2nd half)
 45                      r.r_bx = 0x0400;
 46                      intr(0x10, &r);
 47  
 48                      fwrite(MK_FP(r.r_es, r.r_bp), 1, (8 * 128), fp);
 49  
 50                      fclose(fp);
 51                  }
 52  
 53                  printf("Done\n");
 54                  break;
 55              case 2:
 56                  printf("Getting 8-by-14 ROM font...");
 57  
 58                  if ((fp = fopen("814vga.dat", "wb")) != NULL) {
 59                      width = 8;
 60                      height = 14;
 61                      numchars = 256;
 62  
 63                      r.r_ax = 0x1130;    // locate the font
 64                      r.r_bx = 0x0200;
 65                      intr(0x10, &r);
 66  
 67                      fwrite(MK_FP(r.r_es, r.r_bp), 1, (14 * 256), fp);
 68  
 69                      fclose(fp);
 70                  }
 71  
 72                  printf("Done\n");
 73                  break;
 74              case 3:
 75                  printf("Getting 8-by-16 ROM font...");
 76  
 77                  if ((fp = fopen("816vga.dat", "wb")) != NULL) {
 78                      width = 8;
 79                      height = 16;
 80                      numchars = 256;
 81  
 82                      r.r_ax = 0x1130;    // locate the font
 83                      r.r_bx = 0x0600;
 84                      intr(0x10, &r);
 85  
 86                      fwrite(MK_FP(r.r_es, r.r_bp), 1, (16 * 256), fp);
 87  
 88                      fclose(fp);
 89                  }
 90  
 91                  printf("Done\n");
 92                  break;
 93              case 4:
 94                  printf("Getting 9-by-16 ROM font...");
 95  
 96                  if ((fp = fopen("916vga.dat", "wb")) != NULL) {
 97                      width = 9;
 98                      height = 16;
 99                      numchars = 256;
100  
101                      r.r_ax = 0x1130;    // locate the font
102                      r.r_bx = 0x0700;
103                      intr(0x10, &r);
104  
105                      fwrite(MK_FP(r.r_es, r.r_bp), 1, (16 * 256) *2, fp);
106  
107                      fclose(fp);
108                  }
109  
110                  printf("Done\n");
111                  break;
112              case 5:
113                  printf("Getting 9-by-14 ROM font...");
114  
115                  if ((fp = fopen("914vga.dat", "wb")) != NULL) {
116                      width = 9;
117                      height = 16;
118                      numchars = 256;
119  
120                      r.r_ax = 0x1130;    // locate the font
121                      r.r_bx = 0x0500;
122                      intr(0x10, &r);
123  
124                      fwrite(MK_FP(r.r_es, r.r_bp), 1, (14 * 256)* 2, fp);
125  
126                      fclose(fp);
127                  }
128  
129                  printf("Done\n");
130                  break;
131              case 6:
132                  break;
133              default:
134                  printf("Please try again\n");
135                  break;
136          }
137      } while (font != 6);
138  
139      return 0;
140  }