home *** CD-ROM | disk | FTP | other *** search
/ rtsi.com / 2014.01.www.rtsi.com.tar / www.rtsi.com / OS9 / OSK / EFFO / forum4.lzh / SPRACHEN / C / LP / prjob.c < prev    next >
C/C++ Source or Header  |  1988-02-09  |  2KB  |  90 lines

  1. /* Druckt einen Job aus */
  2. /* Uebergabe der Jobnummer als Parameter */
  3. /* Uwe Simon   Januar 1988 */
  4.  
  5. #include <module.h>
  6. #include <stdio.h>
  7. #include "lp.h"
  8.  
  9.  
  10.  
  11. int ev;
  12.  
  13. kopf(s,id)   /* gibt Jobheader aus !!! */
  14. char *s;
  15. int id;
  16. {
  17.             /* kann noch beliebig erweitert werden (z.B. mit uid in Grosschrift    */
  18. }
  19.  
  20.  
  21. int pr(t,s,d,id,co)  /* returns -1 wenn job gekillt */
  22. char *t,*s,*d;
  23. int co,id;
  24. {
  25.     char h[300];
  26.     FILE *f,*g;
  27.     
  28.     g=fopen(d,"a");
  29.     kopf(t,id);
  30.     while(co--) {
  31.         if((f=fopen(s,"r"))!=NULL) {
  32.             while(fgets(h,255,f)) {
  33.                 if(_ev_read(ev)==STOP) { /* ein Job muss getstoppt werden */
  34.                     if(queue->parameter==id) { /* ich bin gemeint */
  35.                         _ev_set(ev,1,0);
  36.                         fputs("\n<<<<< CANCEL >>>>>\n\f",g);
  37.                         fclose(g);
  38.                         unlink(s);    
  39.                         return(-1);
  40.                     }
  41.                 }
  42.                 fputs(h,g);
  43.             }
  44.             fputs("\n\f",g);
  45.         }
  46.         fclose(f);
  47.     }
  48.     fclose(g);
  49.     unlink(s);
  50.     return(0);
  51. }
  52.  
  53.  
  54. main(argc,argv)
  55. int argc;
  56. char **argv;
  57. {
  58.     int jo,job,id,copy;
  59.     char s[100],t[100],d[100];
  60.     mod_exec *module;
  61.     
  62.     jo=atoi(argv[1]);
  63.     
  64.     module=(mod_exec *)modlink("spoolqueue",0x400);
  65.     if((int)module==-1) { exit(_errmsg(1,"Spooler not installed\n")); }
  66.     queue=(struct spoolqueue *)((long)module+module->_mexec);
  67.     if(!queue->active) fprintf(stderr,"WARNING: Spooler not active\n");
  68.  
  69.     ev=_ev_link("spoolqueue");
  70.     _ev_wait(ev,0,0);
  71.     queue->command=NICHTS;
  72.     if((job=find_job(jo))>=0) {
  73.         queue->jobs[job].status=BUSY;
  74.         strcpy(s,queue->jobs[job].filename);
  75.         strcpy(t,queue->jobs[job].titel);
  76.         strcpy(d,queue->printer[queue->jobs[job].dev]);
  77.         id=queue->jobs[job].spoolid;
  78.         copy=queue->jobs[job].copy;
  79.         _ev_set(ev,0,0);   /* gibt queue wieder frei ohne lpsched zu informieren */
  80.         pr(t,s,d,id,copy);
  81.         _ev_wait(ev,0,0);
  82.     }
  83.     queue->parameter=jo;
  84.     queue->command=READY;
  85.     _ev_signal(ev,0);    
  86.     _ev_unlink(ev);
  87.     munlink(module);
  88. }
  89.     
  90.