Verifica ed eliminazione dei processi di stampa mediante le funzioni del API di CUPS

Da Gambas-it.org - Wikipedia.

Le funzioni del API di CUPS (Common Unix Printing System) consentono fra l'altro di verificare quanti siano i processi di stampa in atto, pendenti o in coda, nonché quelli arrestati, cancellati, rifiutati o completati.

Consentono inoltre di eliminare il processo di stampa in atto, o anche tutti i processi di stampa indipendentemente dal loro stato.

Per utilizzare le risors di CUPS bisognerà richiamare l'attuale libreria esterna: libcups.so.2


Mostriamo un semplice esempio:

Library "libcups:2"

' CUPS_WHICHJOBS_ALL returns all jobs regardless of state;
' CUPS_WHICHJOBS_ACTIVE returns jobs that are pending, processing, or held;
' CUPS_WHICHJOBS_COMPLETED returns jobs that are stopped, canceled, aborted, or completed:
Private Enum CUPS_WHICHJOBS_ALL = -1, CUPS_WHICHJOBS_ACTIVE, CUPS_WHICHJOBS_COMPLETED
' CUPS_JOBID_ALL to cancel all jobs or CUPS_JOBID_CURRENT to cancel the current job on the named destination:
Private Enum CUPS_JOBID_ALL = -1, CUPS_JOBID_CURRENT

Private Const CUPS_HTTP_DEFAULT As Integer = 0

' int cupsGetJobs (cups_job_t **jobs, const char *name, int myjobs, int whichjobs)
' Get the jobs from the default server.
Private Extern cupsGetJobs(jobs As Pointer, name As String, myjobs As Integer, whichjobs As Integer) As Integer

' int cupsCancelJob (const char *name, int job_id)
' Cancel a print job on the default server.
Private Extern cupsCancelJob(name As String, job_id As Integer) As Integer


Public Sub Main()
  
 Dim p As Pointer
 Dim stampante As String
 Dim stp As Integer
 
' Per individuare il nome di una stampante installata nel sistema, si rinvia a questa pagina della Wiki.
  stampante = "stampante utilizzata"

' Verifica quanti sono i processi di stampa in atto, pendenti o in coda:
  stp = cupsGetJobs(VarPtr(p), Null, 1, CUPS_WHICHJOBS_ACTIVE)
  Print "I processi di stampa in atto, pendenti o in coda sono: "; stp
 
' Elimina i processi di stampa. Inserire la costante:
' - CUPS_JOBID_ALL per eliminare tutti i processi di stampa indipendentemente dal loro stato;
' - CUPS_JOBID_CURRENT per eliminare soltanto il processo di stampa corente:
  cupsCancelJob(stampante, CUPS_JOBID_ALL)

' Dopo l'eliminazione dei processi, verifica quanti sono i processi di stampa completati o bloccati:
  stp = cupsGetJobs(VarPtr(p), Null, 1, CUPS_WHICHJOBS_COMPLETED)
  Print "I processi di stampa arrestati, cancellati, rifiutati o completati sono: "; stp
  
End


Riferimenti