home *** CD-ROM | disk | FTP | other *** search
/ Programmer 7500 / MAX_PROGRAMMERS.iso / PASCAL / PRMASTR3.ZIP / PRMASTER.PAS < prev    next >
Encoding:
Pascal/Delphi Source File  |  1990-01-23  |  6.3 KB  |  273 lines

  1. {$F+}
  2. Program PRMASTER;
  3.  
  4. Uses dos,crt,spooler,search,io;
  5.  
  6. var
  7.   prevx,prevy:byte;
  8.   global_filename:string;
  9.   print_status: byte;
  10.   res:integer;
  11.   title_attribute,
  12.   foreground_attribute,
  13.   background_attribute:word;
  14.  
  15. procedure get_legal;
  16. begin
  17.   writeln('PRMASTER Print Spooler Utility.');
  18.   writeln('Written by John Gatewood Ham               01/19/90');
  19.   writeln('Created using Turbo Pascal, copyright (c) Borland International 1987, 1988.');
  20. end;
  21.  
  22. procedure show_error(msgtitle,msgtxt:string);
  23. var popscreen:popptr;
  24. begin
  25.   alert:=true;
  26.   new(popscreen,init(2,11,79,11,msgtitle,msgtxt,
  27.                      title_attribute,
  28.                      foreground_attribute,
  29.                      background_attribute));
  30.   popscreen^.showit;
  31.   dispose(popscreen,done);
  32.   alert:=false;
  33. end;
  34.  
  35. procedure spoolit(fname:string);
  36. begin
  37.   if not spool_a_file(fname) then
  38.      show_error('Error','Unable to add "'+fname+'" to queue.');
  39. end;
  40.  
  41. procedure unspoolit(fname:string);
  42. begin
  43.   if not unspool_a_file(fname) then
  44.      show_error('Error','Unable to delete "'+fname+'" from queue.');
  45. end;
  46.  
  47. {This must be a top level procedure to be a procedural parameter}
  48. procedure fetch_file_name;
  49. var fmenu:popfetchptr;
  50.     hold:string;
  51. begin
  52.   new(fmenu,init(2,11,79,11,'Current='+global_filename,'Filename=',
  53.                  title_attribute,
  54.                  foreground_attribute,
  55.                  background_attribute));
  56.   hold:=fmenu^.fetchit;
  57.   if hold <> '' then
  58.      global_filename:=fexpand(hold);
  59.   dispose(fmenu,done);
  60. end;
  61.  
  62. procedure unspoolallfiles;
  63. begin
  64.   if not unspool_all_files then
  65.      show_error('Error','Unable to delete all files from queue.')
  66.   else
  67.      show_error('Warning','All files cancelled by operator.');
  68. end;
  69.  
  70. procedure getchoice;
  71. begin
  72.   up1level:=true;
  73. end;
  74.  
  75. procedure showset(var fileset:string;flag:integer);
  76. {flag = 1, spoolem}
  77. {flag = 0, showem}
  78. var
  79.     tnode:flistptr;
  80.     res:integer;
  81.     submenu:menuptr2;
  82.     maxwidth:integer;
  83.  
  84. begin
  85.    getfilelist(fileset,(readonly+hidden+sysfile+archive));
  86.    if filelist = nil then
  87.      begin
  88.        show_error('Error','No files in fileset "'+fileset+'"');
  89.        exit;
  90.      end;
  91.    tnode:=filelist;
  92.    new(submenu,init(2,2,79,24,'',
  93.                    title_attribute,
  94.                    foreground_attribute,
  95.                    background_attribute));
  96.  
  97.    maxwidth:=0;
  98.    while (tnode <> nil) do
  99.      begin
  100.        submenu^.add2menu(tnode^.fname,getchoice);
  101.        if length(tnode^.fname) > maxwidth then
  102.           maxwidth:=length(tnode^.fname);
  103.        tnode:=tnode^.next;
  104.      end;
  105.    if flag = 1 then
  106.       submenu^.title:='Files to spool'
  107.    else
  108.       submenu^.title:='Disk fileset '+fileset;
  109.    deletefilelist;
  110.    submenu^.pickmenu;
  111.    res:=global_choice;
  112.    if (res > 0) and (flag=1) then
  113.       spoolit(submenu^.current^.itemlabel);
  114.    dispose(submenu,done);
  115. end;
  116.  
  117. {This must be a top level procedure to be a procedural parameter}
  118. procedure spoolem;
  119. begin
  120.   if global_filename = '' then
  121.      exit;
  122.   if not match(global_filename) then
  123.      begin
  124.        show_error('Error','No files in fileset "'+global_filename+'" on disk.');
  125.        exit;
  126.      end;
  127.   showset(global_filename,1);
  128. end;
  129.  
  130. procedure showemdisk;
  131. begin
  132.   if global_filename = '' then
  133.      exit;
  134.   if not match(global_filename) then
  135.      begin
  136.        show_error('Error','No files in fileset "'+global_filename+'" on disk.');
  137.        exit;
  138.      end;
  139.   showset(global_filename,0);
  140. end;
  141.  
  142. procedure showset2(var fileset:string;flag:integer);
  143. {flag = 1, unspoolem}
  144. {flag = 0, showem}
  145. var
  146.     res:integer;
  147.     submenu:menuptr2;
  148.     maxwidth:integer;
  149.     tnode:slistptr;
  150. begin
  151.   getspoolfilelist(global_filename);
  152.   new(submenu,init(2,2,79,24,'',
  153.                    title_attribute,
  154.                    foreground_attribute,
  155.                    background_attribute));
  156.  
  157.   maxwidth:=0;
  158.   submenu^.itemcount:=0;
  159.   tnode:=sfilelist;
  160.   while (tnode <> nil) do
  161.     begin
  162.       submenu^.add2menu(tnode^.fname,getchoice);
  163.       if length(tnode^.fname) > maxwidth then
  164.          maxwidth:=length(tnode^.fname);
  165.       tnode:=tnode^.next;
  166.     end;
  167.   if flag = 1 then
  168.     submenu^.title:='Unspool file list'
  169.   else
  170.     submenu^.title:='Files on spooler';
  171.   deletesfilelist;
  172.   submenu^.pickmenu;
  173.   res:=global_choice;
  174.   if (res > 0) and (flag=1) then
  175.     unspoolit(submenu^.current^.itemlabel);
  176.   dispose(submenu,done);
  177. end;
  178.  
  179. procedure unspoolem;
  180. begin
  181.   if queue_empty then
  182.     begin
  183.       show_error('Error','No files on spooler.');
  184.       exit;
  185.     end;
  186.   showset2(global_filename,1);
  187. end;
  188.  
  189. procedure showem;
  190. begin
  191.   if queue_empty then
  192.     begin
  193.       show_error('Error','No files on spooler.');
  194.       exit;
  195.     end;
  196.   showset2(global_filename,0);
  197. end;
  198.  
  199. procedure unspoolemall;
  200. begin
  201.   if queue_empty then
  202.     begin
  203.       show_error('Error','No files on spooler.');
  204.       exit;
  205.     end;
  206.   unspoolallfiles;
  207. end;
  208.  
  209. procedure changefileset;
  210. begin
  211.    fetch_file_name;
  212. end;
  213.  
  214. procedure main;
  215. var mainmenu:menuptr2;
  216. begin
  217.   new(mainmenu,init(21,5,40,10,'Main Menu',
  218.                     title_attribute,
  219.                     foreground_attribute,
  220.                     background_attribute));
  221.   mainmenu^.add2menu('Spool a file       ',spoolem);
  222.   mainmenu^.add2menu('Unspool a file     ',unspoolem);
  223.   mainmenu^.add2menu('Unspool all files  ',unspoolemall);
  224.   mainmenu^.add2menu('Show spoolfiles    ',showem);
  225.   mainmenu^.add2menu('Show disk files    ',showemdisk);
  226.   mainmenu^.add2menu('Change fileset     ',changefileset);
  227.   mainmenu^.pickmenu;
  228.   dispose(mainmenu,done);
  229. end;
  230.  
  231. Procedure Mypoprtn;
  232. var
  233.     prevx,prevy:byte;
  234. begin
  235.   prevx:=wherex;
  236.   prevy:=wherey;
  237.  
  238.   cursoroff;
  239.   global_filename:=fexpand('*.*');
  240.   main;
  241.   cursoron;
  242.  
  243.   gotoxy(prevx,prevy);
  244. end;
  245.  
  246. begin
  247.   if monochrome then
  248.     begin
  249.       foreground_attribute:=lightgray;
  250.       background_attribute:=black+lightgray*16;
  251.       title_attribute:=white;
  252.     end
  253.   else
  254.     begin
  255.       foreground_attribute:=white+blue*16;
  256.       background_attribute:=blue+lightgray*16;
  257.       title_attribute:=yellow;
  258.     end;
  259. stimulus:=false;
  260. if paramcount > 0 then
  261.    if (paramstr(1) = '/s') or
  262.       (paramstr(1) = '/S') then
  263.        stimulus:=true;
  264. clrscr;
  265. get_legal;
  266. if not print_installed then
  267.   begin
  268.     writeln('PRINT.COM not installed');
  269.     exit;
  270.   end;
  271.   mypoprtn;
  272. end.
  273.