home *** CD-ROM | disk | FTP | other *** search
/ High Voltage Shareware / high1.zip / high1 / DIR2 / DVPG30FS.ZIP / TXT-UTIL.C < prev    next >
C/C++ Source or Header  |  1993-11-07  |  5KB  |  189 lines

  1. /*
  2.  * this file should contain all of the text screen related files
  3.  * for DVPEG
  4.  */
  5.  
  6.  
  7. #include "extern.h"        /* external declerations for viewer plus IJG includes */
  8.  
  9. #include "dv-ver.h"            /* version number of dvpeg */
  10. #include "jversion.h"        /* IJG version number */
  11.  
  12. #include <string.h>
  13. #include <dos.h>
  14. #include <conio.h>
  15. #include <alloc.h>
  16. #include <time.h>*/
  17.  
  18.  
  19.  
  20. /*
  21.  * prepare for an exit.
  22.  *  ie restore screen, cursor, ending message
  23.  * free up an memory used in the viewer interface
  24.  */
  25.  
  26. void prep_for_exit(void)
  27. {
  28. farfree(line_buffer_ptr);        /* free up line buffer storage */
  29.  
  30. if ((defaults & no_text) == 0){
  31.     setup_text_screen();
  32.  
  33.     _setcursortype(_NORMALCURSOR);
  34.  
  35.     rtn_video();        /* return the original video text mode */
  36.  
  37.     if ((defaults & no_file_list) == 0){
  38. #ifdef small_viewer
  39.         printf("Reduced DVPEG Ver. %4s, %s\nCopyright (C) Eric Praetzel\n", dvpeg_version, dvpeg_date);
  40. #else
  41.         printf("Dvpeg version %4s, %s\nCopyright (C) Eric Praetzel\n", dvpeg_version, dvpeg_date);
  42. #endif
  43.         printf("JPEG code version: ");
  44.         printf("%s\r\n%s\r\n",JVERSION, JCOPYRIGHT);
  45.         }
  46.     }
  47.  
  48. if (file_info_head != NULL)
  49.     farfree(file_info_head);
  50. }
  51.  
  52.  
  53.  
  54.  
  55. /*
  56.  * clear + reset the window title on the text screen
  57.  */
  58.  
  59. int init_screen()        /* paint simple stuff if text screen is redrawn */
  60. {
  61. window(1, 1, text_width, text_height);
  62.  
  63. _setcursortype(_NOCURSOR);
  64.  
  65. set_screen_info();    /* calc file list parameters for the current text screen */
  66.  
  67. clrscr();
  68. gotoxy(1,1);
  69. textcolor(WHITE);
  70. cprintf("Select a file                      (F1 = help)                     DVPEG %4s", dvpeg_version);
  71. return 1;
  72. }
  73.  
  74.  
  75.  
  76.  
  77. /*
  78.  * setup the text screen, reset the window to the whole screen
  79.  * set text mode to the indicated on in the file
  80.  * now trust that we have the resolution that was set
  81.  */
  82.  
  83. void setup_text_screen(void)
  84. {
  85. extern unsigned char _video;
  86. unsigned char lines, *ptr;
  87.  
  88. /* now setup the text display parameters */
  89.  
  90. current_graphics_mode = -1;        /* reset since we are exiting the graphics mode */
  91.  
  92. _AH = 0;
  93. _AL = text_mode_number;
  94. geninterrupt(0x10);
  95.  
  96. /* does the user want to force 50 lines ? */
  97. if (view_defaults & fifty_line_text){
  98.     _AX = 0x1112;        /* into 10h fuction number to set 8 * 8 char set*/
  99.     _BL = 0x0;
  100.     geninterrupt(0x10);
  101.     }
  102.  
  103. lines = peekb(0x40, 0x84);
  104. ptr = &_video;
  105. *(ptr+3) = lines;
  106. *(ptr+7) = lines + 1;
  107.  
  108. text_height = lines;
  109.  
  110. /* setup basic info about text screen data */
  111. /* the number of files per column on text screen  - 3 rows deducted at top, bottom */
  112.  
  113. per_column = text_height - 3;
  114. cols_per_page = text_width - 2;
  115. if (defaults & long_file_format){
  116.     max_col_width = 26;
  117.     min_col_width = 13 + 7;        /* min for file name.extension + space + size(ie '[232k]') + space */
  118.     }
  119. else{
  120.     max_col_width = 26;
  121.     min_col_width = 13;        /* min for file name.extension + space */
  122.     }
  123. files_per_page = (cols_per_page / min_col_width) * per_column;
  124. }
  125.  
  126.  
  127.  
  128. /*
  129.  * setup the information about the screen to aid the text writing routines
  130.  *
  131.  * do all of this to find out how many columns to put on a page and their width
  132.  *  we don't want a bunch of tight columns all on the left of the screen so ...
  133.  */
  134.  
  135. void set_screen_info()
  136. {
  137. num_cols = files_per_page / per_column;        /* calc the number of dense columns required - ie overestimate */
  138. if (files_per_page % per_column > 0) num_cols++;
  139. if (num_cols == 0) num_cols = 1;
  140.  
  141. column_width = cols_per_page / num_cols;        /* too small since num_cols is an inflated guess */
  142. if (column_width > max_col_width) column_width = max_col_width;        /* hard limit it to a real world value */
  143.  
  144. /* now given the real column size recalculate just what fits on a page */
  145.  
  146. num_cols = cols_per_page / column_width;
  147. per_page = num_cols * per_column;        /* find the real # per page */
  148. number_pages = number_files / files_per_page;            /* max number of dense 6 col pages */
  149. if (number_files % files_per_page > 0) number_pages++;
  150. if (number_pages == 0) number_pages = 1;
  151.  
  152. }
  153.  
  154.  
  155.  
  156. /* put a window up in the center of the screen
  157.     - ask about panning, video mode ....
  158.     - don't worry what is under it because the image will be drawn
  159.  */
  160.  
  161. void open_window(int width, int height)
  162. {
  163. char char_is;
  164. struct text_info ti;
  165. int i;
  166.  
  167. window(12, 4, 12 + width, 4 + height);
  168. clrscr();
  169.  
  170. gettextinfo(&ti);                 /*  border */
  171.  
  172. textcolor(WHITE);
  173. char_is = 219;            /* solid block */
  174.  
  175. for (i=1; i <= (ti.winright-ti.winleft); i++){        /* should go 1 count more */
  176.     gotoxy(i, 1);
  177.     putch(char_is);
  178.     gotoxy(i, ti.winbottom - ti.wintop + 1);
  179.     putch(char_is);
  180.     }
  181. for (i=2; i <= (ti.winbottom-ti.wintop); i++){
  182.     gotoxy(1, i);
  183.     putch(char_is);
  184.     gotoxy(ti.winright - ti.winleft, i);        /* had to sub +1 */
  185.     putch(char_is);
  186.     }
  187. window(14, 6, 10 + width, 2 + height);
  188. }
  189.