' UDAPLOT Version 1.52.00 By UDA'Software, 1999 ' Ultimo Errore DOS: DOS016 ' Messaggi della subrutine di Setup DECLARE SUB STPMsgBackgroundMode () DECLARE SUB STPMsgCmdPlot () DECLARE SUB STPMsgDeleteExtensionFile () DECLARE SUB STPMsgDeletePathFile () DECLARE SUB STPMsgEstFilesPlot () DECLARE SUB STPMsgInterruzioneMode () DECLARE SUB STPMsgJobDirectory () DECLARE SUB STPMsgNetError () DECLARE SUB STPMsgPCName () DECLARE SUB STPMsgPortaPlot () DECLARE SUB STPMsgTimer () ' Dichiarazione subroutine DECLARE SUB Beeper (NumBeep AS INTEGER) DECLARE SUB Cornice (PrintMsgRigai AS INTEGER, colonnai AS INTEGER, PrintMsgRigaf AS INTEGER, colonnaf AS INTEGER) DECLARE SUB DlgBoxInput (DlgBoxInputMessaggio AS STRING, DlgBoxInputNumeroMassimoCaratteriInput AS INTEGER) DECLARE SUB DlgBoxMessaggioAllaRiga (DlgBoxMessaggioPrintMsgRiga AS STRING, DlgBoxPrintMsgRigaOutput AS INTEGER) DECLARE SUB DrawMenu () DECLARE SUB ErroreFataleMsg (CodiceErrore AS STRING) DECLARE SUB FineProgramma () DECLARE SUB HelpProgramma () DECLARE SUB InterfaceDraw (tipoInterfaceDraw AS INTEGER) DECLARE SUB KillQueue (Mode AS INTEGER) DECLARE SUB NuovaFinestraHelpProgramma () DECLARE SUB Pausa (tipo!) DECLARE SUB PrintMsg (PrintMsgMessaggio AS STRING, PrintMsgRiga AS INTEGER) DECLARE SUB RemoveTempFile () DECLARE SUB Setup (PathSetupStr AS STRING) DECLARE SUB BackgroundDraw () DECLARE SUB Restart () DECLARE SUB VersioneErrata () DECLARE SUB VisualizzaTestoEsterno (TestoEsternoPath AS STRING) DECLARE FUNCTION Cerca (StringaSorgente AS STRING, StringaCampione AS STRING) DECLARE FUNCTION CercaSostituisci! (StringaSorgente AS STRING, StringaCampione AS STRING, StringaSostituzione AS STRING) DECLARE FUNCTION Initializing (TestoEsternoPath AS STRING) DECLARE FUNCTION Looping$ (NumSecLoop AS INTEGER) DECLARE FUNCTION WINDOWS95! () ' Dichiarazione funzioni DECLARE FUNCTION CaptureQueue (CaptureMode AS INTEGER, NumSecAttCaptQueue AS INTEGER, NetLockServerName AS STRING, NetLockServerState AS STRING) DECLARE FUNCTION ExistDir (ExistDirPathToFind AS STRING) DECLARE FUNCTION ExistFile (ExistFilePath AS STRING) DECLARE FUNCTION LoadSetup! (LoadMode AS INTEGER) DECLARE FUNCTION NomeExeFile$ () DECLARE FUNCTION SetEnvironment% (StrComando AS STRING, StrNomeFile AS STRING) ' Dichiarazione delle Variabili Globali dedicate alla Configurazione COMMON SHARED PathSetupStr AS STRING ' Percorso del File di Configurazione COMMON SHARED BackGroundTSR AS STRING ' Flag che determina l'esecuzione del Programma in Modalita' Background TSR COMMON SHARED ComandoPlottaggio AS STRING ' Stringa contenente il COmandi di Plottaggio da Eseguire alla Shell del DOS COMMON SHARED EliminazioneFiles AS STRING ' Flag che determina se i files, dopo l'elaborazione, devono essere eliminati o meno COMMON SHARED ErrCoda AS INTEGER ' Flag che determina se deve essere calcolato il numero massimo di controlli della Coda Catturata COMMON SHARED NumeroSecondiAttesa AS INTEGER ' Numero di Secondi che deve trascorrere tra l'elaborazione di un "pacchetto di files" ed il succesivo COMMON SHARED ModalitaServer AS STRING ' Flag che determina se il Dispositivo di Output e' fisicamente collegato alla macchina che sta esegendo il programma o se si tratta di un Server di Rete COMMON SHARED NumeroBeep AS INTEGER ' Numero di Segnali Acustici da effettuare quando l'elaborazione del "Pacchetto di Files" e' terminata COMMON SHARED ParamPlot AS STRING ' Parametri da accodare, dopo il nome del file da elaborare, al COmando di Plotaggio da eseguire alla Shell del DOS COMMON SHARED StopLoopCounter AS INTEGER ' Numero Files da Elaborare (Pacchetto) prima di effettuare un'attesa ' Dichiarazione delle Variabili Globali dedicate alla Routine CaptureQueue COMMON SHARED NumContrCodaCattMax AS INTEGER COMMON SHARED NumeroControlliCodaCatturata AS INTEGER ' Dichiarazione variabili globali COMMON SHARED ElaborazioneInCorso AS STRING ' Flag che determina se UDAPLOT ha finito di Elaborare COMMON SHARED EliminazioneEstensione AS STRING ' Flag che determina l'Eliminazione dell'estesione quando il file viene passato come Parametri COMMON SHARED EliminazionePercorso AS STRING ' Flag che determina l'Eliminazione del Percorso del file COMMON SHARED ErroreNomeFile AS INTEGER ' Flag che determina se l'errore di accesso al file si e' gia' verificato un'altra volta COMMON SHARED EstFilesPlot AS STRING ' Estensione dei files da elaborare - pu• contenere anche parametri per il comando DIR ms-dos COMMON SHARED LineaInizializzata() AS STRING ' Array contenente l'ultimo files inizializzato; ad ogni record dell'array corrisponde una riga del file caricato COMMON SHARED NetLockNomeTask AS STRING ' Stringa che contiene il Nome del Task che ha Catturato la Coda di Stampa COMMON SHARED NetLockServerPath AS STRING ' Percorso di rete del drive C: del Server al quele Š collegata la perif. di output COMMON SHARED NetLockServerStatePrevious AS STRING COMMON SHARED NomeServerTask AS STRING ' Nome che Identifica il Task in esecuzione a tutti gli altri eventuali Task operativi su altre macchine in rete, ecc.. COMMON SHARED NomePortaPlot AS STRING ' Nome della Periferica di Output - LPT, COM, file, ecc.. COMMON SHARED NumeroIdentificazione AS INTEGER ' Codice che Identifica l'attuale Task di UDAPLOT - Viene calcolato ad ogni avvio del programma COMMON SHARED NumeroFileElaborato AS INTEGER ' Numero del File da elaborato COMMON SHARED NumeroFilesInterruzione AS INTEGER ' Numero di Files da elaborare prima di eseguire una Pausa COMMON SHARED NumeroLineeInizializzate AS INTEGER ' Numero di Files da elaborare COMMON SHARED PathFilesPlot AS STRING ' Directory nella quale si devono cercare i files da elaborare COMMON SHARED PathFileDat AS STRING ' Directory nella quale cercare la Guida in Linea COMMON SHARED UdaplotSetupPath AS STRING ' Percorso della Directory contenente il File di Setup UDAPLOT.SET COMMON SHARED StatoPlottaggio AS INTEGER ' Flag che determina se il programma e' in fase di plottaggio COMMON SHARED StopLoopMode AS STRING * 1 ' Flag che determina la modalit… di Interruzione COMMON SHARED StopLoopStep AS INTEGER ' Numero di files da elaborare prima di eseguire l'Interruzione COMMON SHARED TaskPresente AS INTEGER ' Flag che identifica la presenza di un altro Task gi… presente con la stessa CFG COMMON SHARED Windows95Detected AS INTEGER ' Flag che determina se e' stato rilevato Windows 95 ' Dichiarazione variaili locali DIM FlagFileBatchEnviron AS INTEGER ' Flag che determina l'avvenuta creazione del File Batch UPLOTENV.BAT DIM FlagNetPath AS INTEGER ' Flag che determina quando, in corrispondenza di un percorso di rete e della ricerca /s, un percorso deve essere opportunamente elaborato DIM Iteratore AS INTEGER DIM ListaFilesPlottare AS INTEGER ' Flag che determina la presenza di una Lista di files da plottare UDAPLOT.LST DIM NetLockTaskCode AS STRING ' E' il Codice del Task che, correntemente, ha catturato la Coda di Stampa DIM NetLockServerName AS STRING ' Nome del Server che ha catturato la Coda di Stampa DIM NetLockServerState AS STRING ' Numero di Files in fase di stampa dal task che ha catturato la Codia di Stampa DIM NomeFileProcessato AS STRING ' Nome del File dal Elaborare DIM NumeroFilesEliminati AS INTEGER ' Numero di files eliminati - viene usato per verificare quanti files vengono eliminati quando il flag di eliminazione e' attivo DIM NumSecCaptQueue AS INTEGER ' Numero di Secondi che devono trascorrere per i Controlli di CaptureQueue DIM PercorsoEXE AS STRING ' Il percorso dell'eseguibile di UDAPLOT DIM Parametri AS STRING ' Stringa contenente i parametri passati alla Riga di Comando DIM Passo AS INTEGER ' Fattore di incremento utilizzato durante le elaborazioni per visualizzare lo Stato DIM Risposta AS STRING DIM X2 AS INTEGER DIM X3 AS INTEGER TYPE RegType ax AS INTEGER bx AS INTEGER cx AS INTEGER dx AS INTEGER bp AS INTEGER si AS INTEGER di AS INTEGER flags AS INTEGER ds AS INTEGER es AS INTEGER END TYPE DIM SHARED in AS RegType, ou AS RegType CLEAR , , 16382 ListaFilesPlottare = 0 NumeroFilesEliminati = 0 Parametri = COMMAND$ Risposta = CHR$(97) StopLoopCounter = 0 ' Version 1.4 Begin ' Inizializza il NumeroIdentificazione ad un numero Random compreso tra 1 e 32767 RANDOMIZE TIMER NumeroIdentificazione = INT(RND * 32766) + 1 ' Inizializza la presenza di un altro Task con la stessa CFG a zero TaskPresente = 0 ' Inizializza lo Stato del Plottaggio a zero per evitare errori quando si verificano situazioni anomale (pi— task attivi, ecc..) StatoPlottaggio = 0 ' Version 1.4 End ' Gestione errori ON ERROR GOTO 10 GOTO 20 10 IF ERR = 7 THEN ELSEIF ERR = 0 OR ERR = 5 THEN CALL InterfaceDraw(0) ErroreNomeFile = 1 ELSEIF ERR = 53 THEN ' Nel caso si verifichi qualche conflitto con altri Task di UDAPLOT caricati nel sistema, ' si Resetta quello attuale e si procede al riavvio sperando che vada meglio !! CLOSE IF StatoPlottaggio = 1 THEN IF ExistFile(NetLockServerPath + "UDAPLOT.NET") THEN SHELL "DEL " + NetLockServerPath + "UDAPLOT.NET>NUL" END IF ' Elimina eventuali files temporanei CALL RemoveTempFile RUN ELSEIF ERR = 70 THEN CALL InterfaceDraw(0) CALL DlgBoxMessaggioAllaRiga("Accesso al disco negato!! Impossibile continuare.", 10) END ELSEIF ERR = 75 THEN CALL InterfaceDraw(0) CALL DlgBoxMessaggioAllaRiga("Errore di accesso al percorso file!! Unit… CD-ROM.", 10) CALL Pausa(2) CALL Beeper(2) ElaborazioneInCorso = "N" CALL FineProgramma ELSEIF ERR = 76 THEN CALL InterfaceDraw(0) CALL DlgBoxMessaggioAllaRiga("Directory errata.", 10) CALL Pausa(2) CALL Beeper(2) ElaborazioneInCorso = "N" CALL FineProgramma ELSEIF ERR = 61 THEN CALL InterfaceDraw(0) CALL DlgBoxMessaggioAllaRiga("Spazio su disco insufficiente!!", 10) CALL Pausa(2) CALL Beeper(2) ElaborazioneInCorso = "N" CALL FineProgramma ELSE CALL InterfaceDraw(0) CALL DlgBoxMessaggioAllaRiga("ERRORE FATALE Nø" + STR$(ERR) + "!! Impossibile continuare.", 10) CALL Pausa(2) CALL Beeper(2) ElaborazioneInCorso = "N" CALL FineProgramma END IF RESUME NEXT 20 IF WINDOWS95 THEN Windows95Detected = 1 ELSE Windows95Detected = 0 END IF ' disegna lo sfondo del programma CALL InterfaceDraw(0) ' Calcola il percorso di UDAPLOT ' UdaplotSetupPath = "e:\bas\udaplot\udaplot.exe" PercorsoEXE = NomeExeFile FOR X2 = LEN(PercorsoEXE) TO 1 STEP -1 IF MID$(PercorsoEXE, X2, 1) = "\" THEN PercorsoEXE = LEFT$(PercorsoEXE, X2) X2 = 0 END IF NEXT X2 UdaplotSetupPath = PercorsoEXE PathFileDat = PercorsoEXE IF RIGHT$(UdaplotSetupPath, 1) <> "\" THEN UdaplotSetupPath = UdaplotSetupPath + "\" IF RIGHT$(Parametri, 1) = "?" THEN CALL HelpProgramma CALL FineProgramma ELSEIF UCASE$(LEFT$(Parametri, LEN("SETUP"))) = "SETUP" THEN IF UCASE$(RIGHT$(Parametri, LEN("SETUP"))) <> "SETUP" THEN UdaplotSetupPath = RTRIM$((LTRIM$(RIGHT$(Parametri, LEN(Parametri) - LEN("SETUP"))))) IF RIGHT$(UdaplotSetupPath, 1) <> "\" THEN UdaplotSetupPath = UdaplotSetupPath + "\" END IF CALL Setup(UdaplotSetupPath) ELSEIF UCASE$(LEFT$(Parametri, LEN("PURGE"))) = "PURGE" THEN IF UCASE$(RIGHT$(Parametri, LEN("PURGE"))) <> "PURGE" THEN UdaplotSetupPath = RTRIM$((LTRIM$(RIGHT$(Parametri, LEN(Parametri) - LEN("PURGE"))))) IF RIGHT$(UdaplotSetupPath, 1) <> "\" THEN UdaplotSetupPath = UdaplotSetupPath + "\" END IF NetLockServerPath = UdaplotSetupPath CALL KillQueue(1) CALL FineProgramma ELSEIF Parametri <> "" THEN UdaplotSetupPath = Parametri IF RIGHT$(UdaplotSetupPath, 1) <> "\" THEN UdaplotSetupPath = UdaplotSetupPath + "\" END IF ' Controllo della presenza della directory UdaplotSetupPath CALL DlgBoxMessaggioAllaRiga("Verifica della presenza del percorso: " + RIGHT$(UdaplotSetupPath, 25), 6) CALL DlgBoxMessaggioAllaRiga("Attendere la scansione del disco ......", 10) IF ExistDir(LEFT$(UdaplotSetupPath, LEN(UdaplotSetupPath) - 1)) = 0 THEN CALL ErroreFataleMsg("Errore DOS001") CALL DlgBoxMessaggioAllaRiga("Il Percorso del file di Configurazione risulta inesistente !!", 10) CALL DlgBoxMessaggioAllaRiga("Verificare la presenza del percorso: " + RIGHT$(UdaplotSetupPath, 25), 15) CALL Beeper(2) CALL Pausa(2) COLOR 7, 0 CLS END END IF ' Controllo della presenza di UDAPLOT.SET CALL DlgBoxMessaggioAllaRiga("Verifica della presenza di UDAPLOT.SET.", 6) IF LoadSetup(0) = 0 THEN CALL FineProgramma ' Calcola i Tempi di Attesa per CaptureQueue IF NumeroSecondiAttesa <= 0 THEN NumeroSecondiAttesa = 10 IF NumeroSecondiAttesa > 10 THEN NumSecCaptQueue = 10 ELSE NumSecCaptQueue = NumeroSecondiAttesa END IF ' Verifica la presenza nel sistema di altri UDAPLOT residenti, aventi la stessa configurazione IF ExistFile(UdaplotSetupPath + "UDA_TEMP.LST") THEN CALL DlgBoxMessaggioAllaRiga("ERRORE - CONFIGURAZIONE GIA' ATTIVA NEL SISTEMA!", 6) CALL PrintMsg("Errore DOS002", 7) CALL DlgBoxMessaggioAllaRiga("E' stata rilevata una copia di UDAPLOT con uguale Configurazione !", 15) CALL DlgBoxInput("Vuoi continuare ugualmente l'esecuzione di questa sessione (s/N) ?", 3) CALL Beeper(2) Risposta = INPUT$(1) IF Risposta = CHR$(13) OR Risposta = CHR$(27) OR UCASE$(Risposta) = "N" THEN COLOR 7, 0 CLS END END IF ' Elimina eventuali files temporanei CALL RemoveTempFile TaskPresente = 1 END IF IF ExistFile(UdaplotSetupPath + "UDAPLOT.LOG") THEN KILL UdaplotSetupPath + "UDAPLOT.LOG" ' Se lo spazio per lo Stack e' insufficiente deve Azzerare la memoria. IF FRE(-2) <= 0 THEN CALL Restart CALL RemoveTempFile RUN END IF ' Recupera un eventuale Stato della Routine CaptureQueue IF ExistFile(UdaplotSetupPath + "UDAPLOT.MEM") THEN OPEN UdaplotSetupPath + "UDAPLOT.MEM" FOR INPUT AS #74 LINE INPUT #74, Risposta NumContrCodaCattMax = VAL(RTRIM$(LTRIM$(Risposta))) LINE INPUT #74, Risposta NumeroControlliCodaCatturata = VAL(RTRIM$(LTRIM$(Risposta))) LINE INPUT #74, NetLockServerStatePrevious CLOSE #74 KILL UdaplotSetupPath + "UDAPLOT.MEM" ErrCoda = 1 END IF ' Release 1.32 ' Verifica che la coda di stampa non sia stata danneggiata, anche se non Š ' stata rilevata nessuna copia di UDAPLOT caricata. IF TaskPresente = 1 THEN IF CaptureQueue(0, NumSecCaptQueue, NetLockServerName, NetLockServerState) = 0 THEN CALL RemoveTempFile GOTO 20 END IF END IF ' Controllo della presenza della directory di Spooling IF RIGHT$(PathFilesPlot, 1) = "\" THEN PathFilesPlot = LEFT$(PathFilesPlot, LEN(PathFilesPlot) - 1) CALL InterfaceDraw(2) CALL DlgBoxMessaggioAllaRiga("Verifica della presenza del percorso: " + RIGHT$(PathFilesPlot, 25), 6) CALL DlgBoxMessaggioAllaRiga("Attendere la scansione del disco ......", 10) IF ExistDir(PathFilesPlot) = 0 THEN CALL ErroreFataleMsg("Errore DOS003") CALL DlgBoxMessaggioAllaRiga("Il Percorso della directory di Spooling risulta inesistente !!", 10) CALL DlgBoxMessaggioAllaRiga(" Verificare la presenza del percorso: ", 15) CALL PrintMsg(RIGHT$(PathFilesPlot, LEN(" Verificare la presenza del percorso: ") - 4), 16) CALL Beeper(2) CALL Pausa(2) CALL FineProgramma END IF ' PrintMsgRiga di Inizio nella modalit… Background TSR 1000 CALL InterfaceDraw(1) CALL DlgBoxMessaggioAllaRiga("Verifica dei files " + EstFilesPlot + " contenuti nella directory: ", 6) CALL PrintMsg(RIGHT$(PathFilesPlot, LEN("Verifica dei files " + EstFilesPlot + " contenuti nella directory:") - 4), 7) ListaFilesPlottare = 0 Risposta = Looping(0) ' Se esiste un File Lista (contenente i Nomi dei files da elaborare), lo copia ' dentro il file UDA_TEMP.LST, altrimenti, genera direttamente il file ' UDA_TEMP.LST inserendo i Percorsi assoluti dei files contenuti nella Directory ' di Spooling. IF ExistFile(UdaplotSetupPath + "UDAPLOT.LST") THEN ' Se esiste un file UDAPLOT.LST nella directory di UDAPLOT lo copia nel ' file temporaneo che normalmente serve per immagazzinare la lista dei files ' da stampare. SHELL "COPY " + UdaplotSetupPath + "UDAPLOT.LST " + UdaplotSetupPath + "UDA_TEMP.LST>NULL" ListaFilesPlottare = 1 ELSE IF PathFilesPlot <> "" THEN IF RIGHT$(PathFilesPlot, 1) = "\" THEN PathFilesPlot = LEFT$(PathFilesPlot, LEN(PathFilesPlot) - 1) IF RIGHT$(PathFilesPlot, 2) = "\" + CHR$(34) THEN PathFilesPlot = LEFT$(PathFilesPlot, LEN(PathFilesPlot) - 2) END IF IF LEFT$(PathFilesPlot, 1) <> CHR$(34) THEN PathFilesPlot = CHR$(34) + PathFilesPlot IF RIGHT$(PathFilesPlot, 1) <> CHR$(34) THEN PathFilesPlot = PathFilesPlot + CHR$(34) IF Cerca(PathFilesPlot, "\\") THEN FlagNetPath = CercaSostituisci(EstFilesPlot, "/S", "") IF FlagNetPath = 1 AND Cerca(PathFilesPlot, "\\") THEN CALL DlgBoxMessaggioAllaRiga("ERRORE - OPZIONE NON SUPPORTATA IN RETE", 6) CALL PrintMsg("Errore DOS015", 7) CALL DlgBoxMessaggioAllaRiga("L'opzione /S non e' supportata quando vengono usati percorsi di rete.", 15) CALL DlgBoxInput("Vuoi continuare ugualmente l'esecuzione di questa sessione (s/N) ?", 3) CALL Beeper(2) Risposta = INPUT$(1) IF Risposta = CHR$(13) OR Risposta = CHR$(27) OR UCASE$(Risposta) = "N" THEN COLOR 7, 0 CLS CALL FineProgramma END IF FlagNetPath = FlagNetPath + 1 END IF SHELL "DIR " + PathFilesPlot + "\*." + EstFilesPlot + " /B /A-D>" + UdaplotSetupPath + "UDA_TEMP.LST" ELSE SHELL "DIR *." + EstFilesPlot + "/B /A-D>" + UdaplotSetupPath + "UDA_TEMP.LST" END IF IF LEFT$(PathFilesPlot, 1) = CHR$(34) THEN PathFilesPlot = RIGHT$(PathFilesPlot, LEN(PathFilesPlot) - 1) IF RIGHT$(PathFilesPlot, 1) = CHR$(34) THEN PathFilesPlot = LEFT$(PathFilesPlot, LEN(PathFilesPlot) - 1) IF FlagNetPath = 0 AND RIGHT$(PathFilesPlot, 1) <> "\" AND PathFilesPlot <> "" THEN PathFilesPlot = PathFilesPlot + "\" OPEN UdaplotSetupPath + "UDA_TEMP.LST" FOR INPUT AS #1 OPEN UdaplotSetupPath + "UDA_TEMP.LS$" FOR OUTPUT AS #2 DO IF NOT EOF(1) THEN LINE INPUT #1, NomeFileProcessato Iteratore = CercaSostituisci(NomeFileProcessato, PathFilesPlot, "") IF MID$(NomeFileProcessato, 2, 1) = ":" THEN IF LEFT$(PathFilesPlot, 2) <> "\\" THEN NomeFileProcessato = RIGHT$(NomeFileProcessato, LEN(NomeFileProcessato) - 2) END IF IF RIGHT$(PathFilesPlot, 1) <> "\" THEN PathFilesPlot = PathFilesPlot + "\" NomeFileProcessato = PathFilesPlot + NomeFileProcessato PRINT #2, NomeFileProcessato END IF LOOP UNTIL EOF(1) CLOSE #1 CLOSE #2 SHELL "DEL " + UdaplotSetupPath + "UDA_TEMP.LST>NUL" SHELL "COPY " + UdaplotSetupPath + "UDA_TEMP.LS$ " + UdaplotSetupPath + "UDA_TEMP.LST>NUL" SHELL "DEL " + UdaplotSetupPath + "UDA_TEMP.LS$>NUL" END IF ' Se Š attiva la Configurazione di rete Apre il file temporaneo ... IF RTRIM$(LTRIM$(UCASE$(ModalitaServer))) = "S" THEN NetLockServerPath = "C:\" END IF ' Se il percorso della Directory di Spooling risulta essere un Percorso di Rete ' il file UDA_TEMP.LST deve essere elaborato togliendo il PATH dei files ed ' aggiungendo quello del percorso di rete; questo a causa di un bug del sistema ' operativo DOS. IF LEFT$(PathFilesPlot, 2) = "\\" THEN IF ExistFile(UdaplotSetupPath + "UDA_TEMP.LST") THEN IF RIGHT$(PathFilesPlot, 1) = "\" THEN PathFilesPlot = LEFT$(PathFilesPlot, LEN(PathFilesPlot) - 1) OPEN UdaplotSetupPath + "UDA_TEMP.LST" FOR INPUT AS #1 OPEN UdaplotSetupPath + "UDA_TEMP.LS$" FOR OUTPUT AS #2 DO IF NOT EOF(1) THEN LINE INPUT #1, NomeFileProcessato Iteratore = CercaSostituisci(NomeFileProcessato, LEFT$(PercorsoEXE, LEN(PercorsoEXE) - 1), "") PRINT #2, NomeFileProcessato LOOP UNTIL EOF(1) CLOSE #1 CLOSE #2 SHELL "DEL " + UdaplotSetupPath + "UDA_TEMP.LST>NUL" SHELL "COPY " + UdaplotSetupPath + "UDA_TEMP.LS$ " + UdaplotSetupPath + "UDA_TEMP.LST>NUL" SHELL "DEL " + UdaplotSetupPath + "UDA_TEMP.LS$>NUL" END IF END IF CALL InterfaceDraw(1) IF Initializing(UdaplotSetupPath + "UDA_TEMP.LST") = 0 OR NumeroLineeInizializzate < 1 THEN ElaborazioneInCorso = "N" Risposta$ = Looping$(0) CALL InterfaceDraw(1) COLOR 15, 3: LOCATE 19, 40 - (INT(LEN(UdaplotSetupPath + "Configurazione attiva: ") / 2)): PRINT "Configurazione attiva: " + UdaplotSetupPath ELSE ' Cattura la Coda di Stampa appena possibile ... IF CaptureQueue(1, NumSecCaptQueue, NetLockServerName, NetLockServerState) = 0 THEN CALL Restart CALL RemoveTempFile GOTO 20 END IF ElaborazioneInCorso = "S" COLOR 15, 3: LOCATE 19, 40 - (INT(LEN(UdaplotSetupPath + "Configurazione attiva: ") / 2)): PRINT "Configurazione attiva: " + UdaplotSetupPath CALL DlgBoxMessaggioAllaRiga("Plottaggio su " + NomePortaPlot + " dei files con estensione ." + EstFilesPlot + ".", 6) FOR Iteratore = 1 TO NumeroLineeInizializzate StatoPlottaggio = 1 ' Version 1.4 ' Verifica ulteriormente l'avvenuta Cattura della Coda di Stampa; se non Š riuscita ' deve resettare il sistema NumeroFileElaborato = Iteratore IF CaptureQueue(0, NumSecCaptQueue, NetLockServerName, NetLockServerState) = 0 THEN CALL RemoveTempFile RUN END IF ' Inizializza la variabile 'NomeFileProcessato' affinche' contenga il nome del file ' corrispondente all'attuale locazione dell'array puntato. NomeFileProcessato = LineaInizializzata(Iteratore) ' Dopo la Copia dall'Array alla Variabile Locale e' necessario modificare comunque il database perche' ' anche quest'ultimo verra' utilizzato e quindi e' indispensabile che i nomi di files che contiene vengano ' opportunamente modificati affinche' siano compatibili con i "Percorsi Lunghi" di Windows 32. FOR ciclo = 1 TO LEN(LineaInizializzata(Iteratore)) ' Version 1.52 IF MID$(LineaInizializzata(Iteratore), ciclo, 1) = " " AND Windows95Detected = 1 THEN ciclo = LEN(LineaInizializzata(Iteratore)) IF LEFT$(LineaInizializzata(Iteratore), 1) <> CHR$(34) AND RIGHT$(LineaInizializzata(Iteratore), 1) <> CHR$(34) THEN LineaInizializzata(Iteratore) = CHR$(34) + LineaInizializzata(Iteratore) + CHR$(34) END IF END IF NEXT ciclo IF ExistFile(NomeFileProcessato) = 0 THEN CALL InterfaceDraw(1) CALL DlgBoxMessaggioAllaRiga("ERRORE GRAVE - FILE DI PLOTTAGGIO NON TROVATO", 6) CALL PrintMsg("Errore DOS004", 7) CALL DlgBoxMessaggioAllaRiga("ATTENZIONE! Impossibile trovare:" + RIGHT$(LineaInizializzata(Iteratore), 40), 10) CALL DlgBoxMessaggioAllaRiga("Stato coda di stampa: " + STR$(INT(100 / (NumeroLineeInizializzate / Iteratore))) + "% - File:" + STR$(Iteratore) + " di" + STR$(NumeroLineeInizializzate), 15) CALL Beeper(1) CALL Pausa(1) ELSE ' Verifica dei nomi di files lunghi contemporaneamente alle procedure, eventuali, di eliminazione Percorso ed Estensione. ' Version 1.52 ' A seconda del flag 'EliminazioneEstensione' viene eliminata o meno l'estensione del file IF UCASE$(LEFT$(EliminazioneEstensione, 1)) = "S" THEN FOR X3 = LEN(NomeFileProcessato) TO 1 STEP -1 IF MID$(NomeFileProcessato, X3, 1) = "." THEN NomeFileProcessato = LEFT$(NomeFileProcessato, X3 - 1) X3 = 1 END IF NEXT X3 END IF IF UCASE$(LEFT$(EliminazionePercorso, 1)) = "S" THEN FOR X3 = LEN(NomeFileProcessato) TO 1 STEP -1 IF MID$(NomeFileProcessato, X3, 1) = "\" THEN NomeFileProcessato = RIGHT$(NomeFileProcessato, LEN(NomeFileProcessato) - X3) X3 = 1 END IF NEXT X3 END IF IF Windows95Detected = 1 THEN IF LEFT$(NomeFileProcessato, 1) <> CHR$(34) THEN IF RIGHT$(NomeFileProcessato, 1) = CHR$(34) THEN NomeFileProcessato = CHR$(34) + NomeFileProcessato END IF END IF IF RIGHT$(NomeFileProcessato, 1) <> CHR$(34) THEN IF LEFT$(NomeFileProcessato, 1) = CHR$(34) THEN NomeFileProcessato = NomeFileProcessato + CHR$(34) END IF END IF END IF FlagFileBatchEnviron = SetEnvironment(ComandoPlottaggio, LEFT$(NomeFileProcessato, LEN(NomeFileProcessato))) IF INKEY$ = CHR$(27) THEN CALL FineProgramma CALL PrintMsg("Stato coda di stampa: " + STR$(INT(100 / (NumeroLineeInizializzate / Iteratore))) + "%", 12) CALL DlgBoxMessaggioAllaRiga("Plotting File: " + LineaInizializzata(Iteratore), 10) CALL PrintMsg(" ", 18) IF NomePortaPlot = "\" THEN CALL PrintMsg(LEFT$(ComandoPlottaggio + NomeFileProcessato + " Running", 74), 18) CALL PrintMsg(LEFT$(ComandoPlottaggio + NomeFileProcessato + " " + ParamPlot + " Ok ", 74), 18) SHELL ComandoPlottaggio + NomeFileProcessato + " " + ParamPlot ELSE CALL PrintMsg(LEFT$(ComandoPlottaggio + NomeFileProcessato + ">" + NomePortaPlot + " Running", 74), 18) CALL PrintMsg(LEFT$(ComandoPlottaggio + NomeFileProcessato + " " + ParamPlot + ">" + NomePortaPlot + " Ok ", 74), 18) SHELL ComandoPlottaggio + NomeFileProcessato + " " + ParamPlot + ">" + NomePortaPlot END IF Risposta = Looping$(0) ' Salva sul file di LOG OPEN UdaplotSetupPath + "UDAPLOT.LOG" FOR APPEND AS #23 PRINT #23, LineaInizializzata(Iteratore) REM Non viene pi— inserita la PrintMsgRiga vuota per evitare errori in un rename del file .LOG REM IF StopLoopCounter = 0 AND StopLoopStep = 1 THEN PRINT #23, "" CLOSE 23 IF UCASE$(EliminazioneFiles) = "S" THEN CALL PrintMsg("Eliminazione Files Attiva!", 7) ELSE CALL PrintMsg("Eliminazione Files Disattiva!", 7) END IF CALL DlgBoxMessaggioAllaRiga("Plotted File: " + LineaInizializzata(Iteratore), 15) IF StopLoopCounter <= 0 AND Iteratore < NumeroLineeInizializzate THEN GOSUB 10000 ' V… nella subrutine per il Calcolo dell'interruzione CALL InterfaceDraw(0) IF FlagFileBatchEnviron = 1 THEN CALL PrintMsg("Creato File Batch: " + UdaplotSetupPath + "UPLOTENV.BAT", 12) END IF COLOR 15, 3: LOCATE 19, 40 - (INT(LEN(UdaplotSetupPath + "Configurazione attiva: ") / 2)): PRINT "Configurazione attiva: " + UdaplotSetupPath CALL DlgBoxMessaggioAllaRiga("Plottaggio su " + NomePortaPlot + " dei files con estensione ." + EstFilesPlot + ".", 6) IF UCASE$(EliminazioneFiles) = "S" THEN CALL PrintMsg("Eliminazione Files Attiva!", 7) ELSE CALL PrintMsg("Eliminazione Files Disattiva!", 7) END IF CALL DlgBoxMessaggioAllaRiga("Stato coda di stampa: " + STR$(INT(100 / (NumeroLineeInizializzate / Iteratore))) + "% - Plottati" + STR$(Iteratore) + " di" + STR$(NumeroLineeInizializzate) + " files.", 10) CALL PrintMsg(" ", 18) IF NomePortaPlot = "\" THEN CALL PrintMsg(LEFT$(ComandoPlottaggio + NomeFileProcessato + " " + ParamPlot + " Ok ", 74), 18) ELSE CALL PrintMsg(LEFT$(ComandoPlottaggio + NomeFileProcessato + " " + ParamPlot + ">" + NomePortaPlot + " Ok ", 74), 18) END IF CALL DlgBoxMessaggioAllaRiga("Plotted File: " + LineaInizializzata(Iteratore), 15) DO IF NumeroBeep > 0 THEN CALL Beeper(INT(NumeroBeep)) Risposta = Looping$(NumeroSecondiAttesa) IF Risposta = CHR$(27) THEN CALL FineProgramma LOOP UNTIL Risposta = CHR$(13) OR NumeroBeep = 0 CALL InterfaceDraw(1) COLOR 15, 3: LOCATE 19, 40 - (INT(LEN(UdaplotSetupPath + "Configurazione attiva: ") / 2)): PRINT "Configurazione attiva: " + UdaplotSetupPath CALL DlgBoxMessaggioAllaRiga("Plottaggio su " + NomePortaPlot + " dei files con estensione ." + EstFilesPlot + ".", 6) IF Risposta <> CHR$(27) AND UCASE$(EliminazioneFiles) = "S" THEN ' Effettua una piccola pausa in modo tale che l'utente possa decidere se ' interrompere ora la procedura, prima che vengano elaborati i successivi ' files. CALL InterfaceDraw(3) CALL DlgBoxMessaggioAllaRiga(" ", 10) CALL DlgBoxMessaggioAllaRiga(" ", 11) CALL PrintMsg(CHR$(186) + " Premere il tasto [ R ] se si desidera RIPETERE l'eleborazione degli " + CHR$(186), 10) CALL PrintMsg("ultimi " + LTRIM$(STR$(NumeroFilesInterruzione + 1)) + " files. ESC per uscire prima di elaborare i prossimi. ", 11) CALL Cornice(15, 22, 17, 38) Risposta$ = Looping$(5) IF UCASE$(Risposta$) = "R" THEN Iteratore = Iteratore - NumeroFilesInterruzione - 1 ELSE FOR X2 = Iteratore - NumeroFilesInterruzione TO Iteratore CALL DlgBoxMessaggioAllaRiga("Eliminazione di: " + LineaInizializzata(X2), 10) IF ExistFile(LineaInizializzata(X2)) THEN SHELL "DEL " + LineaInizializzata(X2) + ">NUL" NumeroFilesEliminati = NumeroFilesEliminati + 1 NEXT X2 IF Risposta$ = CHR$(27) THEN CALL FineProgramma END IF END IF ELSE ' Decremenata lo StopLoopCounter in modo che si fermi quando arriva al numero di files da elaborare StopLoopCounter = StopLoopCounter - StopLoopStep END IF IF Risposta <> CHR$(27) AND UCASE$(EliminazioneFiles) = "S" AND StopLoopStep = 0 THEN CALL DlgBoxMessaggioAllaRiga("Eliminazione di: " + LineaInizializzata(Iteratore), 10) SHELL "DEL " + LineaInizializzata(Iteratore) + ">NUL" NumeroFilesEliminati = NumeroFilesEliminati + 1 END IF Risposta = CHR$(97) END IF NEXT Iteratore CALL InterfaceDraw(0) COLOR 15, 3: LOCATE 19, 40 - (INT(LEN(UdaplotSetupPath + "Configurazione attiva: ") / 2)): PRINT "Configurazione attiva: " + UdaplotSetupPath END IF IF UCASE$(BackGroundTSR) = "S" THEN IF CaptureQueue(0, NumeroSecondiAttesa, NetLockServerName, NetLockServerState) = 0 THEN GOTO 1000 END IF IF ExistFile(UdaplotSetupPath + "UDAPLOT.LST") AND ListaFilesPlottare = 1 THEN KILL UdaplotSetupPath + "UDAPLOT.LST" CALL DlgBoxMessaggioAllaRiga("Nessuna Coda di Stampa rilevata nel Sistema di Rete.", 10) CALL DlgBoxMessaggioAllaRiga("Plottaggio su " + NomePortaPlot + " dei files con estensione ." + EstFilesPlot + ".", 6) CALL DlgBoxMessaggioAllaRiga("UDAPLOT Š in Modalit… Background TSR", 15) CALL PrintMsg(" UDAPLOT Š in attesa di verificare la presenza di nuovi files da Elaborare", 18) IF UCASE$(EliminazioneFiles) = "S" AND StopLoopStep = 1 AND NumeroFilesEliminati < NumeroLineeInizializzate THEN CALL PrintMsg("Sono rimasti files da Eliminare", 14) END IF Risposta = Looping$(NumeroSecondiAttesa) IF Risposta = CHR$(27) THEN CALL FineProgramma GOSUB 10000 ' V… nella subrutine per il Calcolo dell'interruzione IF UCASE$(EliminazioneFiles) = "S" AND StopLoopStep = 1 AND NumeroFilesEliminati < NumeroLineeInizializzate THEN ' Effettua una piccola pausa in modo tale che l'utente possa decidere se ' interrompere ora la procedura, prima che vengano elaborati i successivi ' files. CALL InterfaceDraw(3) CALL DlgBoxMessaggioAllaRiga(" ", 10) CALL DlgBoxMessaggioAllaRiga(" ", 11) CALL PrintMsg(CHR$(186) + " Premere il tasto [ R ] se si desidera RIPETERE l'eleborazione degli " + CHR$(186), 10) CALL PrintMsg("ultimi " + LTRIM$(STR$(NumeroLineeInizializzate - NumeroFilesEliminati)) + " files. ESC per uscire prima di elaborare i prossimi. ", 11) CALL Cornice(15, 22, 17, 38) Risposta$ = Looping$(5) IF UCASE$(Risposta$) <> "R" THEN FOR X2 = NumeroFilesEliminati + 1 TO NumeroLineeInizializzate CALL DlgBoxMessaggioAllaRiga("Eliminazione di: " + LineaInizializzata(X2), 10) IF ExistFile(LineaInizializzata(X2)) THEN SHELL "DEL " + LineaInizializzata(X2) + ">NUL" NEXT X2 NumeroFilesEliminati = 0 IF Risposta$ = CHR$(27) THEN CALL FineProgramma ELSE OPEN UdaplotSetupPath + "UDAPLOT.LST" FOR APPEND AS #22 FOR X2 = NumeroFilesEliminati + 1 TO NumeroLineeInizializzate CALL DlgBoxMessaggioAllaRiga("Ristampa di: " + LineaInizializzata(X2), 10) IF ExistFile(LineaInizializzata(X2)) THEN PRINT #22, LineaInizializzata(X2) NEXT X2 CLOSE #22 NumeroFilesEliminati = 0 END IF END IF IF StatoPlottaggio = 1 THEN IF CaptureQueue(0, NumeroSecondiAttesa, NetLockServerName, NetLockServerState) THEN StatoPlottaggio = 0 CALL KillQueue(0) ELSE CALL DlgBoxMessaggioAllaRiga("ERRORE - CODA DI STAMPA RUBATA!", 6) CALL PrintMsg("Errore DOS013", 7) CALL DlgBoxMessaggioAllaRiga("Un'altro Task di UDAPLOT ha rubato la Coda di stampa !", 15) CALL DlgBoxInput("Vuoi continuare ugualmente l'esecuzione di questa sessione (s/N) ?", 3) CALL Beeper(2) Risposta = INPUT$(1) IF Risposta = CHR$(13) OR Risposta = CHR$(27) OR UCASE$(Risposta) = "N" THEN COLOR 7, 0 CLS CALL FineProgramma END IF END IF END IF GOTO 1000 ELSE IF StatoPlottaggio = 1 THEN CALL DlgBoxMessaggioAllaRiga("Attendere la Chiusura di UDAPLOT", 10) CALL PrintMsg(" ", 18) CALL DlgBoxMessaggioAllaRiga(" Eliminazione files Residui ", 15) CALL DlgBoxMessaggioAllaRiga("UDAPLOT non Š in Modalit… Background TSR e quindi verr… terminato.", 6) Risposta = Looping$(NumeroSecondiAttesa) IF UCASE$(EliminazioneFiles) = "S" AND StopLoopStep = 1 AND NumeroFilesEliminati <= NumeroLineeInizializzate THEN FOR X2 = NumeroFilesEliminati + 1 TO NumeroLineeInizializzate CALL DlgBoxMessaggioAllaRiga("Eliminazione di: " + LineaInizializzata(X2), 10) IF ExistFile(LineaInizializzata(X2)) THEN SHELL "DEL " + LineaInizializzata(X2) + ">NUL" NEXT X2 NumeroFilesEliminati = 0 END IF IF CaptureQueue(0, NumeroSecondiAttesa, NetLockServerName, NetLockServerState) THEN StatoPlottaggio = 0 CALL KillQueue(0) ELSE CALL DlgBoxMessaggioAllaRiga("ERRORE - CODA DI STAMPA RUBATA!", 6) CALL PrintMsg("Errore DOS013", 7) CALL DlgBoxMessaggioAllaRiga("Un'altro Task di UDAPLOT ha rubato la Coda di stampa !", 15) CALL DlgBoxInput("Vuoi continuare ugualmente l'esecuzione di questa sessione (s/N) ?", 3) CALL Beeper(2) Risposta = INPUT$(1) IF Risposta = CHR$(13) OR Risposta = CHR$(27) OR UCASE$(Risposta) = "N" THEN COLOR 7, 0 CLS CALL FineProgramma END IF END IF END IF END IF ElaborazioneInCorso = "N" CALL FineProgramma 10000 ' Calcolo del Contatore Interruzione IF UCASE$(StopLoopMode) = "M" THEN StopLoopCounter = 1 StopLoopStep = 0 ELSEIF UCASE$(StopLoopMode) = "S" THEN StopLoopCounter = 0 StopLoopStep = 0 ELSE StopLoopCounter = NumeroFilesInterruzione StopLoopStep = 1 END IF RETURN SUB BackgroundDraw CLS FOR PrintMsgRiga = 3 TO 23 COLOR 15, 6: LOCATE PrintMsgRiga, 1: PRINT STRING$(80, 176) NEXT PrintMsgRiga END SUB SUB Beeper (NumBeep AS INTEGER) FOR x = 1 TO NumBeep SOUND 100, 2 SOUND 200, 2 SOUND 400, 2 NEXT x END SUB FUNCTION CaptureQueue (CaptureMode AS INTEGER, NumSecAttCaptQueue AS INTEGER, NetLockServerName AS STRING, NetLockServerState AS STRING) STATIC NetLockTaskCode AS STRING ' E' il Codice del Task che, correntemente, ha catturato la Coda di Stampa STATIC VersioneTaskAttivo AS STRING ' Versione del Task che ha catturato la Coda di stampa STATIC NomeServerCodaAttiva AS STRING STATIC NumSecAttesaTaskAttivo AS INTEGER STATIC CodiceStato AS INTEGER STATIC x AS INTEGER ' Inizializza le variabili NetLockTaskCode = "" VersioneTaskAttivo = "" NomeServerCodaAttiva = "" NumSecAttesaTaskAttivo = 0 x = 0 CodiceStato = 0 CaptureQueue = 0 ' Verifica la presenza del File di NetLock e, se esiste, lo apre, legge il ' contenuto e stabilisce se la Coda di Stampa ha delle anomalie. COLOR 15, 3: LOCATE 19, 40 - (INT(LEN(UdaplotSetupPath + "Configurazione attiva: ") / 2)): PRINT "Configurazione attiva: " + UdaplotSetupPath IF ExistFile(NetLockServerPath + "UDAPLOT.NET") THEN ' Il file di NetLock esiste e quindi: ' - Apre il file in Lettura Condivisa e ne legge il contenuto; se il ' file risulta appartenere ad una release errata chiama l'opportuna ' routine di avvertimento. OPEN NetLockServerPath + "UDAPLOT.NET" FOR INPUT SHARED AS #77 INPUT #77, VersioneTaskAttivo IF VersioneTaskAttivo <> "Version_1.52" THEN CALL VersioneErrata INPUT #77, NetLockServerName INPUT #77, NetLockServerState INPUT #77, NetLockNomeTask INPUT #77, NetLockTaskCode INPUT #77, NumSecAttesaTaskAttivo CLOSE #77 ' - Se il programma si trova in Stato di Plottaggio ... IF StatoPlottaggio = 1 THEN ' ... verifica che la Coda di Stampa appartenga ' effettivamente al Task in esecuzione. IF UCASE$(NetLockServerName) = UCASE$(NomeServerTask) AND UCASE$(NetLockNomeTask) = UCASE$(UdaplotSetupPath) AND VAL(NetLockTaskCode) = NumeroIdentificazione THEN ' La Coda di Stampa Appartiene al Task. ' Aggiorna il File di Lock. ' Apertura del file temporaneo di Rete OPEN NetLockServerPath + "UDAPLOT.NET" FOR OUTPUT SHARED AS #77 PRINT #77, "Version_1.52" PRINT #77, NomeServerTask PRINT #77, (NumeroLineeInizializzate - NumeroFileElaborato) PRINT #77, UdaplotSetupPath PRINT #77, NumeroIdentificazione PRINT #77, NumeroSecondiAttesa CLOSE #77 CaptureQueue = 1 ELSE ' La Coda di Stampa NON Appartiene al Task. ' E' sintomo che la Coda di Stampa e' stata "rubata" da un altro ' task e quindi e' necessario uscire dal ciclo con errore. CaptureQueue = 0 END IF ELSE ' ... verifica che la Coda di Stampa NON appartenga al ' Task in esecuzione perche' altrimenti significa che c'e' ' qualcosa che non va. IF UCASE$(NetLockServerName) <> UCASE$(NomeServerTask) OR UCASE$(NetLockNomeTask) <> UCASE$(UdaplotSetupPath) THEN ' Il Programma non risulta in Fase di Stampa; cio' significa che si e' ' tentato solo di Catturare la Coda di Stampa ma questo non ' implica che sia avvenuto. ' Inoltre, sembra che la Coda di Stampa NON appartenga all'attuale Task ' in esecuzione e quindi e' necessario attendere che venga liberata. IF CaptureMode = 0 OR NumSecAttCaptQueue > 0 THEN CodiceStato = 3 ELSE CaptureQueue = 0 END IF ELSE ' Il programma non risulta in stato di plottaggio nonostante la ' Coda di Stampa gli appartenga. ' Se il numero di linee inizializzate dall'ultimo file caricato ' sono piu' di 0 (zero) e' sintomo che e' in atto una Cattura della ' Coda di Stampa, altrimenti, e' sicuramente presente una Coda di ' Stampa Fantasma. IF NumeroLineeInizializzate > 0 AND VAL(NetLockTaskCode) = NumeroIdentificazione THEN CaptureQueue = 1 ELSE CodiceStato = 2 END IF END IF END IF ELSE ' Il file di NetLock NON esiste e quindi ... IF CaptureMode = 1 THEN ' ... se lo scopo della chiamata a questa routine era quello di catturare ' la Coda di stampa procede di conseguenza. ' Imposta la variabile "CodiceStato" ad 1 che corrisponde all'esecuzione della ' Procedura di Cattura della Coda di Stampa. CodiceStato = 1 ELSE ' ... se lo scopo della chiamata a questa routine era quello di verificare ' l'avvenuta cattura della coda di stampa e ... IF StatoPlottaggio = 1 THEN ' ... la stampa doveva risultare catturata dal task in esecuzione, ' esce con errore. CaptureQueue = 0 ELSE ' ... la stampa NON deve risultare catturata dal task in esecuzione, ' esegue il ciclo di attesa. CaptureQueue = 1 END IF END IF END IF SELECT CASE CodiceStato CASE 0 ' Nessuna operazione da svolgere CASE 1 ' Apertura del file temporaneo di Rete OPEN NetLockServerPath + "UDAPLOT.NET" FOR OUTPUT SHARED AS #77 PRINT #77, "Version_1.52" PRINT #77, NomeServerTask PRINT #77, NumeroLineeInizializzate PRINT #77, UdaplotSetupPath PRINT #77, NumeroIdentificazione PRINT #77, NumeroSecondiAttesa CLOSE #77 ' Attende qualche secondo ElaborazioneInCorso = "C" CALL InterfaceDraw(1) CALL DlgBoxMessaggioAllaRiga("Intercettati nuovi files da Elaborare .....", 10) CALL PrintMsg("Premere ESC per Uscire - INVIO per Continuare", 17) CALL DlgBoxMessaggioAllaRiga(".... Cattura della Coda di Stampa nel Sistema di Rete in corso .....", 15) Risposta$ = Looping$(INT(RND * 10) + 1) IF Risposta$ = CHR$(27) THEN CALL FineProgramma ElaborazioneInCorso = "S" ' Per verificare che la Coda di Stampa e' stata effettivamente catturata chiama ' ricorsivamente se stessa (CaptureQueue). ErrCoda = 0 CaptureQueue = CaptureQueue(0, NumSecAttCaptQueue, NetLockServerName, NetLockServerState) NumeroControlliCodaCatturata = 0 CASE 2 ' Presenza di una Coda di Stampa Fantasma CALL InterfaceDraw(0) CALL DlgBoxMessaggioAllaRiga("ERRORE GRAVE - SISTEMA DI RETE DANNEGGIATO", 6) CALL PrintMsg("Errore DOS006", 7) COLOR 14, 1 CALL Cornice(10, 5, 17, 70) COLOR 14, 1 CALL PrintMsg("Rilevato Errore nella Coda di Stampa di UDAPLOT", 10) CALL PrintMsg("E' possibile che sul Server di Rete siano presenti ", 11) CALL PrintMsg("Code di Stampa fantasma, che impediscono a questo Task un ", 12) CALL PrintMsg("corretto funzionamento. Se su questo PC NON Š attivo nessun'altra ", 13) CALL PrintMsg("copia di UDAPLOT Š necessario procedere al Ripristino dei ", 14) CALL PrintMsg("meccanismi che regolano la Coda di Stampa in Rete. Prima di ", 15) CALL PrintMsg("procedere, assicurarsi che su nessun PC siano attivi altri UDAPLOT", 16) CALL PrintMsg("Posso procedere al Ripristino della Coda di Stampa ?", 17) CALL Beeper(2) CALL Pausa(1) CALL InterfaceDraw(2) CALL KillQueue(0) CaptureQueue = 0 NumeroControlliCodaCatturata = 0 CASE 3 ' Se la Coda di Stampa risulta catturata per un tempo superiore a quello ' previsto dalla configurazione e l'attuale Task deve catturare la coda ' di stampa, quest'ultima viene forzatamente liberata dopo averne fatta ' esplicita richiesta all'utente, il quale, puo' decidere se lasciarla ' o meno. IF NumeroSecondiAttesa <= 0 THEN NumeroSecondiAttesa = 1 IF NetLockServerStatePrevious = NetLockServerState AND CaptureMode = 1 THEN IF ErrCoda = 0 THEN NumeroControlliCodaCatturata = 0 NumContrCodaCattMax = (NumeroControlliCodaCatturata + INT(NumSecAttesaTaskAttivo / NumSecAttCaptQueue)) * 2 ErrCoda = 1 END IF ELSE ErrCoda = 0 NumContrCodaCattMax = 1 NumeroControlliCodaCatturata = 0 END IF IF NumContrCodaCattMax <= NumeroControlliCodaCatturata AND CaptureMode = 1 THEN ' Presenza di una Coda di Stampa Fantasma CALL InterfaceDraw(0) CALL DlgBoxMessaggioAllaRiga("ERRORE - CODA DI STAMPA BLOCCATA", 6) CALL PrintMsg("Errore DOS014", 7) COLOR 14, 1 CALL Cornice(10, 5, 17, 70) COLOR 14, 1 CALL PrintMsg("Rilevato probabile errore nella Coda di Stampa di UDAPLOT", 10) CALL PrintMsg("E' possibile che sul Server di Rete sia presente una Coda ", 11) CALL PrintMsg("di Stampa appartenente ad un Task bloccato o comunque in stato di ", 12) CALL PrintMsg("pausa. Questa situazione impedisce che UDAPLOT possa Catturare ", 13) CALL PrintMsg("la Coda di Stampa al fine di procedere all'elaborazione dei files ", 14) CALL PrintMsg("contenuti nella Directory di Plottaggio. Se si desidera eseguire ", 15) CALL PrintMsg("l'elaborazione e' quindi necessario Eliminare la Coda Bloccata. ", 16) CALL PrintMsg("Posso procedere al Ripristino della Coda di Stampa ?", 17) CALL Beeper(2) CALL PrintMsg("INVIO per Ripristinare la Coda - un tasto qualsiasi per Continuare l'Attesa", 20) Risposta$ = INPUT$(1) IF Risposta$ = CHR$(13) THEN CALL InterfaceDraw(2) CALL KillQueue(0) CaptureQueue = 0 ErrCoda = 0 EXIT FUNCTION ELSE CALL InterfaceDraw(2) NumeroControlliCodaCatturata = 0 END IF ELSE IF CaptureMode = 0 THEN NumeroControlliCodaCatturata = 0 NumContrCodaCattMax = 1 END IF NetLockServerStatePrevious = NetLockServerState END IF IF NumeroControlliCodaCatturata >= 32765 THEN NumeroControlliCodaCatturata = 0 ' Attesa della Liberazione della Coda di Stampa ' Calcola il Nome del Server senza il codice di riconoscimento CALL InterfaceDraw(2) FOR x = 1 TO LEN(NetLockServerName) IF MID$(NetLockServerName, x, 1) = "$" THEN NomeServerCodaAttiva = LEFT$(NetLockServerName, x - 1) x = 32766 END IF NEXT x ' Incrementa il contatore dei controlli NumeroControlliCodaCatturata = NumeroControlliCodaCatturata + 1 CALL DlgBoxMessaggioAllaRiga("Plottaggio su " + NomePortaPlot + " dei files con estensione ." + EstFilesPlot + ".", 6) CALL DlgBoxMessaggioAllaRiga("ATTENZIONE!!! Un altro utente ha gi… Catturato la periferica di Output.", 10) IF CaptureMode = 1 THEN CALL PrintMsg("Numero Controlli:" + STR$(NumeroControlliCodaCatturata) + " di" + STR$(NumContrCodaCattMax) + " [" + STR$(FRE(-2)) + "]", 11) CALL PrintMsg("Intercettati files da Elaborare", 7) END IF CALL DlgBoxMessaggioAllaRiga("Attendere che la Coda di Stampa sia Libera.", 15) CALL PrintMsg(" ", 18) CALL PrintMsg("Coda di Stampa catturata da " + LEFT$(NomeServerCodaAttiva, 30) + " per " + NetLockServerState + " files.", 18) Risposta$ = Looping$(NumSecAttCaptQueue) IF Risposta$ = CHR$(27) THEN CALL FineProgramma ' Per verificare che la Coda di Stampa e' stata effettivamente liberata chiama ' ricorsivamente se stessa (CaptureQueue). ' Se la Memoria a disposizione dello Stack risulta esaurita esce dal Ciclo IF FRE(-2) > 0 THEN IF CaptureMode = 1 THEN CaptureQueue = CaptureQueue(1, NumSecAttCaptQueue, NetLockServerName, NetLockServerState) END IF ELSE OPEN UdaplotSetupPath + "UDAPLOT.MEM" FOR OUTPUT AS #74 PRINT #74, NumContrCodaCattMax PRINT #74, NumeroControlliCodaCatturata PRINT #74, NetLockServerStatePrevious CLOSE #74 END IF CASE ELSE ' Situazione errata !! PRINT "CaptureQueue() : Errore interno al programma !!" PRINT "Per cortesia, segnalare questo errore alla UDA'Software." PRINT "Code: CPTRQ#V152#145" STOP END SELECT END FUNCTION FUNCTION Cerca (StringaSorgente AS STRING, StringaCampione AS STRING) IF LEN(StringaCampione) <= LEN(StringaSorgente) THEN FOR x = 1 TO LEN(StringaSorgente) - LEN(StringaCampione) + 1 IF UCASE$(StringaCampione) = UCASE$(MID$(StringaSorgente, x, LEN(StringaCampione))) THEN Cerca = 1 EXIT FUNCTION END IF NEXT x END IF Cerca = 0 END FUNCTION FUNCTION CercaSostituisci (StringaSorgente AS STRING, StringaCampione AS STRING, StringaSostituzione AS STRING) DIM Sostituito AS INTEGER Sostituito = 0 IF LEN(StringaCampione) <= LEN(StringaSorgente) THEN FOR x = 1 TO LEN(StringaSorgente) - LEN(StringaCampione) + 1 IF UCASE$(StringaCampione) = UCASE$(MID$(StringaSorgente, x, LEN(StringaCampione))) THEN IF LEN(StringaCampione) = LEN(StringaSorgente) THEN StringaSorgente = StringaSostituzione Sostituito = 1 ELSEIF x = (LEN(StringaSorgente) - LEN(StringaCampione) + 1) THEN StringaSorgente = LEFT$(StringaSorgente, x - 1) + StringaSostituzione Sostituito = 1 ELSE StringaSorgente = LEFT$(StringaSorgente, x - 1) + StringaSostituzione + RIGHT$(StringaSorgente, LEN(StringaSorgente) - LEN(StringaCampione) - x + 1) Sostituito = 1 END IF END IF NEXT x END IF CercaSostituisci = Sostituito END FUNCTION SUB Cornice (PrintMsgRigai AS INTEGER, colonnai AS INTEGER, PrintMsgRigaf AS INTEGER, colonnaf AS INTEGER) colonnaf = colonnaf + colonnai ' riquadro IF PrintMsgRigai < 1 THEN PrintMsgRigai = 1 IF PrintMsgRigaf > 23 THEN PrintMsgRigaf = 23 IF colonnai < 1 THEN colonnai = 1 IF colonnaf > 78 THEN colonnaf = 78 LOCATE PrintMsgRigai, colonnai PRINT CHR$(201) FOR Y = colonnai + 1 TO colonnaf - 1 LOCATE PrintMsgRigai, Y: PRINT CHR$(205) NEXT Y LOCATE PrintMsgRigai, colonnaf: PRINT CHR$(187) FOR x = PrintMsgRigai + 1 TO PrintMsgRigaf - 1 LOCATE x, colonnai: PRINT CHR$(186) LOCATE x, colonnaf: PRINT CHR$(186) LOCATE x, colonnai + 1: PRINT STRING$(((colonnaf - 1) - (colonnai)), " ") NEXT x LOCATE PrintMsgRigaf, colonnai PRINT CHR$(200) FOR x = colonnai + 1 TO colonnaf - 1 LOCATE PrintMsgRigaf, x: PRINT CHR$(205) NEXT x LOCATE PrintMsgRigaf, colonnaf: PRINT CHR$(188) FOR Y = PrintMsgRigai + 1 TO PrintMsgRigaf + 1 COLOR 2, 0: LOCATE Y, colonnaf + 1: PRINT CHR$(SCREEN(Y, colonnaf + 1)): LOCATE Y, colonnaf + 2: PRINT CHR$(SCREEN(Y, colonnaf + 2)) NEXT Y FOR x = colonnai + 1 TO colonnaf + 2 LOCATE PrintMsgRigaf + 1, x: PRINT CHR$(SCREEN(PrintMsgRigaf + 1, x)) NEXT x END SUB SUB DlgBoxInput (DlgBoxInputMessaggio AS STRING, DlgBoxInputNumeroMassimoCaratteriInput AS INTEGER) DIM NumeroCarattereColonnaInizio AS INTEGER DIM NumeroCaratteriMessaggio AS INTEGER IF DlgBoxInputNumeroMassimoCaratteriInput <= 1 THEN DlgBoxInputNumeroMassimoCaratteriInput = 4 ELSEIF DlgBoxInputNumeroMassimoCaratteriInput > 74 THEN DlgBoxInputNumeroMassimoCaratteriInput = 71 END IF IF LEN(DlgBoxInputMessaggio) + DlgBoxInputNumeroMassimoCaratteriInput > 77 THEN DlgBoxInputMessaggio = LEFT$(DlgBoxInputMessaggio, 71 - DlgBoxInputNumeroMassimoCaratteriInput) + "..." END IF NumeroCaratteriMessaggio = LEN(DlgBoxInputMessaggio) + DlgBoxInputNumeroMassimoCaratteriInput + 2 NumeroCarattereColonnaInizio = 40 - (INT(NumeroCaratteriMessaggio / 2)) COLOR 14, 1 CALL Cornice(9, NumeroCarattereColonnaInizio, 11, NumeroCaratteriMessaggio) COLOR 14, 1 LOCATE 10, NumeroCarattereColonnaInizio + 1 PRINT DlgBoxInputMessaggio COLOR 14, 1 LOCATE 10, NumeroCaratteriMessaggio - DlgBoxInputNumeroMassimoCaratteriInput - 1 PRINT STRING$(DlgBoxInputNumeroMassimoCaratteriInput, 176) LOCATE 10, NumeroCaratteriMessaggio - DlgBoxInputNumeroMassimoCaratteriInput - 1 COLOR 14, 2 END SUB SUB DlgBoxMessaggioAllaRiga (DlgBoxMessaggioPrintMsgRiga AS STRING, DlgBoxPrintMsgRigaOutput AS INTEGER) IF LEN(DlgBoxMessaggioPrintMsgRiga) > 75 THEN DlgBoxMessaggioPrintMsgRiga = LEFT$(DlgBoxMessaggioPrintMsgRiga, 72) + "..." NumeroCaratteriMessaggio = LEN(DlgBoxMessaggioPrintMsgRiga) NumeroCarattereColonnaInizio = 40 - (INT(NumeroCaratteriMessaggio / 2)) COLOR 14, 1 CALL Cornice(DlgBoxPrintMsgRigaOutput - 1, NumeroCarattereColonnaInizio - 1, DlgBoxPrintMsgRigaOutput + 1, NumeroCaratteriMessaggio + 1) COLOR 14, 1 LOCATE DlgBoxPrintMsgRigaOutput, NumeroCarattereColonnaInizio: PRINT DlgBoxMessaggioPrintMsgRiga LOCATE 23, 1 END SUB SUB DrawMenu COLOR 15, 3 CALL Cornice(21, 6, 22, 68) COLOR 15, 3 LOCATE 21, 7: PRINT CHR$(181): LOCATE 21, 73: PRINT CHR$(198) IF Windows95Detected = 1 THEN LOCATE 21, 7 PRINT CHR$(180) LOCATE 21, 73 PRINT CHR$(195) END IF CALL PrintMsg("INVIO->Continua - P->Pausa - H->Help - L->Visione LOG - ESC->Esce", 21) END SUB SUB ErroreFataleMsg (CodiceErrore AS STRING) CALL InterfaceDraw(1) CALL DlgBoxMessaggioAllaRiga("ERRORE FATALE - IMPOSSIBILE CONTINUARE", 6) CALL PrintMsg(CodiceErrore, 7) END SUB FUNCTION ExistDir (ExistDirPathToFind AS STRING) ' controllo dell' esistenza della directory ' Version 1.4 ' Dato che, utilizzando un nome di file e una locazione, di quest'ultimo, ' sempre uguale, si verifica spesso un Errore di Accesso Š necessario ' implementare un meccanismo che eviti il problema; ' Verr… creato un file Temporaneo avente Nome Casuale e, a differenza di ' tutte le altre routine, verr… eliminato all'interno di questa stessa ' funzione. DIM NomeFileTempRnd AS STRING ' L'inizializzazione del RANDOMIZE Š gi… stata fatta nel Main quindi si procede ' alla conversione della variabile/funzione RND in stringa NomeFileTempRnd = LTRIM$(RTRIM$(STR$(INT(RND * 32767)))) + ".DIR" ' Il percorso passato come parametro deve essere opportunamente elaborato ' affinche' la sua sintass sia corretta. DIM Result AS INTEGER Result = CercaSostituisci(ExistDirPathToFind, CHR$(34), "") DIM NomeDirectoryOriginale AS STRING NomeDirectoryOriginale = ExistDirPathToFind IF LEFT$(NomeDirectoryOriginale, 1) = CHR$(34) THEN NomeDirectoryOriginale = RIGHT$(NomeDirectoryOriginale, LEN(NomeDirectoryOriginale) - 1) IF RIGHT$(NomeDirectoryOriginale, 1) = CHR$(34) THEN NomeDirectoryOriginale = LEFT$(NomeDirectoryOriginale, LEN(NomeDirectoryOriginale) - 1) ExistDirPathToFind = NomeDirectoryOriginale IF LEN(ExistDirPathToFind) < 4 AND MID$(ExistDirPathToFind, 2, 1) = ":" THEN SHELL "dir " + LEFT$(ExistDirPathToFind, 2) + ">" + NomeFileTempRnd ELSE IF MID$(NomeDirectoryOriginale, 2, 1) = ":" AND MID$(NomeDirectoryOriginale, 3, 1) <> "\" THEN NomeDirectoryOriginale = LEFT$(NomeDirectoryOriginale, 2) + "\" + RIGHT$(NomeDirectoryOriginale, LEN(NomeDirectoryOriginale) - 2) ExistDirPathToFind = NomeDirectoryOriginale END IF IF LEFT$(ExistDirPathToFind, 2) = "\\" THEN SHELL "dir " + CHR$(34) + ExistDirPathToFind + "\.." + CHR$(34) + " /B /AD>" + NomeFileTempRnd FOR ciclo = LEN(ExistDirPathToFind) TO 1 STEP -1 IF MID$(NomeDirectoryOriginale, ciclo, 1) = "\" THEN NomeDirectoryOriginale = RIGHT$(NomeDirectoryOriginale, LEN(NomeDirectoryOriginale) - ciclo) ciclo = 0 END IF NEXT ciclo ELSE SHELL "dir " + CHR$(34) + ExistDirPathToFind + "\.." + CHR$(34) + " /B /S /AD>" + NomeFileTempRnd END IF END IF FOR ciclo = 1 TO LEN(ExistDirPathToFind) IF MID$(ExistDirPathToFind, ciclo, 1) = " " AND Windows95Detected = 1 THEN ciclo = LEN(ExistDirPathToFind) IF LEFT$(ExistDirPathToFind, 1) <> CHR$(34) AND RIGHT$(ExistDirPathToFind, 1) <> CHR$(34) THEN ExistDirPathToFind = CHR$(34) + ExistDirPathToFind + CHR$(34) END IF END IF NEXT ciclo OPEN NomeFileTempRnd FOR INPUT AS #101 IF EOF(101) THEN ExistDir = 0 CLOSE #101 SHELL "DEL " + NomeFileTempRnd + ">NUL" EXIT FUNCTION END IF DO LINE INPUT #101, Stringa$ IF Cerca(UCASE$(Stringa$), UCASE$(NomeDirectoryOriginale)) THEN ExistDir = 1 CLOSE #101 SHELL "DEL " + NomeFileTempRnd + ">NUL" EXIT FUNCTION END IF LOOP UNTIL EOF(101) CLOSE #101 ExistDir = 0 SHELL "DEL " + NomeFileTempRnd + ">NUL" END FUNCTION FUNCTION ExistFile! (ExistFilePath AS STRING) FOR ciclo = 1 TO LEN(ExistFilePath) IF MID$(ExistFilePath, ciclo, 1) = " " AND Windows95Detected = 1 THEN ciclo = LEN(ExistFilePath) IF LEFT$(ExistFilePath, 1) <> CHR$(34) AND RIGHT$(ExistFilePath, 1) <> CHR$(34) THEN ExistFilePath = CHR$(34) + ExistFilePath + CHR$(34) END IF END IF NEXT ciclo SHELL "dir " + ExistFilePath + " /B>" + UdaplotSetupPath + "uda_temp.$$$" IF ErroreNomeFile = 1 THEN ErroreNomeFile = 0 IF LEFT$(ExistFilePath, 1) = CHR$(34) THEN SHELL "dir " + LEFT$(ExistFilePath, 98) + "*" + CHR$(34) + " /B>" + UdaplotSetupPath + "uda_temp.$$$" ELSE SHELL "dir " + LEFT$(ExistFilePath, 98) + "*" + " /B>" + UdaplotSetupPath + "uda_temp.$$$" END IF END IF OPEN UdaplotSetupPath + "uda_temp.$$$" FOR INPUT AS #100 IF EOF(100) THEN ExistFile! = 0 CLOSE #100 EXIT FUNCTION ELSE LINE INPUT #100, Stringa$ IF LEN(Stringa$) <= 2 THEN ExistFile! = 0 CLOSE #100 EXIT FUNCTION END IF IF LEFT$(ExistFilePath, 1) = CHR$(34) THEN ExistFile! = 2 ELSE ExistFile! = 1 END IF CLOSE #100 END IF END FUNCTION SUB FineProgramma ' fine programma ' Se UDAPLOT non ha terminato di eliminare eventuali files residui lo comunica all'utente IF ElaborazioneInCorso = "S" THEN CALL InterfaceDraw(1) CALL DlgBoxMessaggioAllaRiga("Attenzione !", 6) CALL DlgBoxMessaggioAllaRiga("UDAPLOT non ha terminato di elaborare tutti i files.", 15) CALL DlgBoxInput("Vuoi terminare ugualmente l'esecuzione di questa sessione (s/N) ?", 3) CALL Beeper(2) IF UCASE$(INPUT$(1)) <> "S" THEN EXIT SUB CALL KillQueue(0) ELSEIF ElaborazioneInCorso = "C" THEN CALL KillQueue(0) END IF CLOSE IF StatoPlottaggio = 1 THEN IF ExistFile(NetLockServerPath + "UDAPLOT.NET") THEN SHELL "DEL " + NetLockServerPath + "UDAPLOT.NET>NUL" END IF ' Elimina eventuali files temporanei IF ExistFile(UdaplotSetupPath + "UDAPLOT.MEM") THEN KILL UdaplotSetupPath + "UDAPLOT.MEM" CALL RemoveTempFile CALL InterfaceDraw(1) 'CALL PrintMsg("Stampa dei files di plottaggio completata.", 12) CALL DlgBoxMessaggioAllaRiga("UDAPLOT.EXE Terminato - UDA'Software Copyright 1999,INC.", 10) COLOR 7, 0 LOCATE 23.1 END END SUB SUB HelpProgramma IF ExistFile(PathFileDat + "UDAPLOT.DAT") THEN VisualizzaTestoEsterno (PathFileDat + "UDAPLOT.DAT") ELSE CALL InterfaceDraw(1) CALL DlgBoxMessaggioAllaRiga("Il file UDAPLOT.DAT non e' presente nella directory di UDAPLOT.", 10) CALL PrintMsg(RIGHT$(PathFileDat, 60), 11) CALL Beeper(1) CALL Pausa(2) END IF CALL InterfaceDraw(0) COLOR 14, 6 LOCATE 8, 13: PRINT "La UDA'Software declina ogni responsibilit… in caso di" LOCATE 9, 13: PRINT "danni provocati dall'uso di questo programma. " LOCATE 10, 13: PRINT "UDA'Software non Š un marchio registrato, e su " LOCATE 11, 13: PRINT "UDAPLOT.EXE non vige nessun diritto riservato. " LOCATE 12, 13: PRINT "Chiunque pu• usare e distribuire questo programma. " LOCATE 13, 13: PRINT "" LOCATE 14, 13: PRINT " UDA'Software 1999 " LOCATE 15, 13: PRINT "" LOCATE 16, 32: PRINT "uda@freemail.it" LOCATE 17, 30: PRINT "uda.software@iol.it" LOCATE 18, 17: PRINT "http://www.GeoCities.com/SiliconValley/Bay/2165" COLOR 14, 5 LOCATE 20, 27: PRINT "Premere INVIO per continuare" DO LOOP UNTIL INKEY$ = CHR$(13) END SUB FUNCTION Initializing (TestoEsternoPath AS STRING) REM inizializzazione file dati DIM byte AS INTEGER ' controlla da quante linee Š composto il file install.lst COLOR 14, 5 CALL DlgBoxMessaggioAllaRiga("Inizializzazione di " + TestoEsternoPath + "...", 10) byte = 0 IF ExistFile!(TestoEsternoPath) THEN OPEN TestoEsternoPath FOR INPUT AS #2 NumeroLineeInizializzate = 0 WHILE NOT EOF(2) LINE INPUT #2, LINEA$ IF NumeroLineeInizializzate < 32766 THEN NumeroLineeInizializzate = NumeroLineeInizializzate + 1 WEND CLOSE #2 COLOR 14, 1 Passo = NumeroLineeInizializzate / 100 ' inizializza le variabili presenti nel file IF NumeroLineeInizializzate <= 1000 THEN REDIM LineaInizializzata(NumeroLineeInizializzate) AS STRING ELSE CALL ErroreFataleMsg("Errore DOS012") CALL DlgBoxMessaggioAllaRiga("Impossibile Inizializzare piu' di 1.000 files correttamente !", 10) CALL Beeper(2) CALL Pausa(2) CALL FineProgramma END IF CALL DlgBoxMessaggioAllaRiga(" ", 10) OPEN TestoEsternoPath FOR INPUT AS #2 FOR indice% = 1 TO NumeroLineeInizializzate ErroreNomeFile = 0 LINE INPUT #2, LineaInizializzata(indice%) IF ErroreNomeFile = 1 THEN CALL ErroreFataleMsg("Errore DOS016") CALL DlgBoxMessaggioAllaRiga("Impossibile inizializzare correttamente il file UDAPLOT.LST .", 10) CALL DlgBoxMessaggioAllaRiga("Il file risulta troppo grande per UDAPLOT.", 15) CALL Beeper(2) CALL Pausa(2) CALL FineProgramma END IF byte = byte + LEN(LineaInizializzata(indice%)) IF byte >= (FRE("") - 256) THEN 'CALL InterfaceDraw(0) CALL PrintMsg("Inizializzazione di " + RIGHT$(TestoEsternoPath, 41) + " al " + STR$(INT(indice% / Passo)) + "%", 10) CALL DlgBoxMessaggioAllaRiga("File troppo grande! Non posso inizializzare oltre!", 15) CALL Beeper(2) CALL Pausa(1) NumeroLineeInizializzate = indice% indice% = 32766 END IF CALL PrintMsg("Inizializzazione di " + RIGHT$(TestoEsternoPath, 41) + " al " + STR$(INT(indice% / Passo)) + "%", 10) NEXT indice% CLOSE #2 ELSE Initializing = 0 NumeroLineeInizializzate = 0 EXIT FUNCTION END IF Initializing = 1 END FUNCTION SUB InterfaceDraw (InterfaceDrawTipologia AS INTEGER) IF tipoInterfaceDraw = 0 THEN COLOR 14, 0 CALL BackgroundDraw COLOR 15, 3 CALL Cornice(4, 2, 20, 75) COLOR 15, 3 LOCATE 4, 8: PRINT CHR$(181): LOCATE 4, 73: PRINT CHR$(198) IF Windows95Detected = 1 THEN LOCATE 4, 8 PRINT CHR$(180) LOCATE 4, 73 PRINT CHR$(195) LOCATE 20, 33: PRINT "32 Bit Detected" LOCATE 20, 32 PRINT CHR$(180) LOCATE 20, 48 PRINT CHR$(195) END IF COLOR 14, 1 LOCATE 4, 9: COLOR 11, 8: PRINT "UDAPLOT.EXE Version 1.52 --- By UDA'Software Copyright 1999, INC" PRINT ELSEIF tipoInterfaceDraw = 1 THEN COLOR 15, 3 CALL Cornice(4, 2, 20, 75) COLOR 15, 3 LOCATE 4, 8: PRINT CHR$(181): LOCATE 4, 73: PRINT CHR$(198) IF Windows95Detected = 1 THEN LOCATE 4, 8 PRINT CHR$(180) LOCATE 4, 73 PRINT CHR$(195) LOCATE 20, 33: PRINT "32 Bit Detected" LOCATE 20, 32 PRINT CHR$(180) LOCATE 20, 48 PRINT CHR$(195) END IF COLOR 14, 1 LOCATE 4, 9: COLOR 11, 8: PRINT "UDAPLOT.EXE Version 1.52 --- By UDA'Software Copyright 1999, INC" PRINT ELSEIF tipoInterfaceDraw = 2 THEN COLOR 15, 3 FOR InterfaceDrawTipologia = 5 TO 19 LOCATE tipoInterfaceDraw!, 3: PRINT " " NEXT InterfaceDrawTipologia COLOR 14, 1 PRINT ELSEIF tipoInterfaceDraw = 3 THEN COLOR 15, 3 LOCATE 9, 3: PRINT " " LOCATE 10, 3: PRINT " " LOCATE 11, 3: PRINT " " LOCATE 12, 3: PRINT " " COLOR 14, 1 PRINT END IF END SUB SUB KillQueue (Mode AS INTEGER) CLOSE IF Mode = 1 THEN CALL InterfaceDraw(0) CALL DlgBoxMessaggioAllaRiga("ELIMINAZIONE DELLA CODA DI STAMPA", 6) CALL PrintMsg("Operazione Pericolosa !!", 7) CALL DlgBoxMessaggioAllaRiga("Posso procedere al Ripristino della Coda di Stampa ?", 10) CALL DlgBoxMessaggioAllaRiga("Prima di procedere chiudere eventuali UDAPLOT attivi su tutti i PC in rete.", 15) COLOR 15, 3: LOCATE 19, 40 - (INT(LEN(UdaplotSetupPath + "Configurazione attiva: ") / 2)): PRINT "Configurazione attiva: " + UdaplotSetupPath CALL Beeper(2) CALL Pausa(1) END IF ' Elimina la Coda si stampa IF ExistFile(NetLockServerPath + "UDAPLOT.NET") THEN SHELL "DEL " + NetLockServerPath + "UDAPLOT.NET" ' Verifica se e' riuscito ad eliminare la coda di stampa. IF ExistFile(NetLockServerPath + "UDAPLOT.NET") THEN CALL ErroreFataleMsg("Errore DOS012") CALL DlgBoxMessaggioAllaRiga("Impossibile Eliminare la Coda di Stampa !!", 10) CALL DlgBoxMessaggioAllaRiga("Eliminare Manualmente il file: " + NetLockServerPath + "UDAPLOT.NET", 15) CALL Beeper(2) CALL Pausa(2) CALL FineProgramma END IF IF Mode = 1 THEN CALL InterfaceDraw(1) CALL DlgBoxMessaggioAllaRiga("Coda di Stampa eliminata con successo.", 10) CALL Pausa(3) CALL FineProgramma END IF ELSE IF Mode = 0 THEN EXIT SUB CALL InterfaceDraw(1) CALL DlgBoxMessaggioAllaRiga("Attenzione!! Probabile Errore di Valutazione.", 6) CALL DlgBoxMessaggioAllaRiga("Non sono state rilevate Code di Stampa 'Fantasma' quindi ...", 10) CALL DlgBoxMessaggioAllaRiga("... si consiglia di chiudere tutti i Task UDAPLOT e riprovare !", 15) CALL Beeper(2) CALL Pausa(3) ElaborazioneInCorso = "N" CALL FineProgramma END IF END SUB FUNCTION LoadSetup (LoadMode AS INTEGER) STATIC NumVerConfigCaricata AS INTEGER ' Versione della Configurazione in fase di caricamento IF ExistFile(UdaplotSetupPath + "UDAPLOT.SET") = 0 THEN LoadSetup = 0 IF LoadMode = 1 THEN EXIT FUNCTION CALL ErroreFataleMsg("Errore DOS007") CALL DlgBoxMessaggioAllaRiga("Il file UDAPLOT.SET non Š stato trovato in " + LEFT$(UdaplotSetupPath, LEN(UdaplotSetupPath) - 1), 10) CALL DlgBoxMessaggioAllaRiga("Lanciare UDAPLOT con il comando SETUP per generarne uno.", 15) CALL Beeper(2) CALL Pausa(2) CALL FineProgramma ELSE ' Inizializza il file UDAPLOT.SET IF Initializing(UdaplotSetupPath + "UDAPLOT.SET") = 0 OR NumeroLineeInizializzate < 16 THEN CALL ErroreFataleMsg("Errore DOS009") CALL DlgBoxMessaggioAllaRiga("Il file UDAPLOT.SET Š stato danneggiato! E' necessario ricrearlo.", 10) CALL DlgBoxMessaggioAllaRiga("Vuoi Sovrascrivere la Configurazione Corrotta con una Nuova ?", 15) CALL Beeper(2) CALL Pausa(1) CALL Setup(UdaplotSetupPath) ELSE NumeroLineeInizializzate = 0 IF "Version_1.52" <> RTRIM$(LTRIM$(LineaInizializzata(1))) AND NumVerConfigCaricata = 0 THEN CALL ErroreFataleMsg("Errore DOS010") CALL DlgBoxMessaggioAllaRiga("Configurazione appartenente ad una release diversa di UDAPLOT !", 10) CALL DlgBoxMessaggioAllaRiga("Vuoi Sovrascrivere la Configurazione Corrotta con una Nuova ?", 15) CALL Beeper(2) CALL Pausa(1) ' Se la versione in fase di caricamento risulta compatibile, si tenta il ' caricamento dei parametri di default. NumVerConfigCaricata = VAL(MID$(RTRIM$(LTRIM$(LineaInizializzata(1))), 9, 1) + RIGHT$(RTRIM$(LTRIM$(LineaInizializzata(1))), 2)) IF NumVerConfigCaricata < 151 OR NumVerConfigCaricata > 152 THEN NumVerConfigCaricata = -2 CALL Setup(UdaplotSetupPath) END IF ELSEIF NumVerConfigCaricata = -2 THEN NumVerConfigCaricata = 0 LoadSetup = 0 EXIT FUNCTION END IF NomePortaPlot = RTRIM$(LTRIM$(UCASE$(LineaInizializzata(2)))) EstFilesPlot = RTRIM$(LTRIM$(UCASE$(LineaInizializzata(3)))) EliminazionePercorso = RTRIM$(LTRIM$(LineaInizializzata(4))) EliminazioneEstensione = RTRIM$(LTRIM$(LineaInizializzata(5))) ComandoPlottaggio = RTRIM$(LTRIM$(UCASE$(LineaInizializzata(6)))) + " " ParamPlot = RTRIM$(LTRIM$(UCASE$(LineaInizializzata(7)))) IF RTRIM$(LTRIM$(UCASE$(LineaInizializzata(8)))) = "M" THEN StopLoopMode = "M" StopLoopCounter = 1 StopLoopStep = 0 ELSEIF UCASE$(LineaInizializzata(8)) = "S" THEN StopLoopMode = "S" StopLoopCounter = 0 StopLoopStep = 0 ELSE NumeroFilesInterruzione = VAL(RTRIM$(LTRIM$(LineaInizializzata(8)))) - 1 StopLoopCounter = NumeroFilesInterruzione StopLoopStep = 1 END IF EliminazioneFiles = RTRIM$(LTRIM$(LineaInizializzata(9))) NumeroBeep = VAL(RTRIM$(LTRIM$(LineaInizializzata(10)))) NumeroSecondiAttesa = VAL(RTRIM$(LTRIM$(LineaInizializzata(11)))) IF RTRIM$(LTRIM$(UCASE$(LineaInizializzata(12)))) <> "CORRENTE" THEN PathFilesPlot = RTRIM$(LTRIM$(UCASE$(LineaInizializzata(12)))) BackGroundTSR = RTRIM$(LTRIM$(LineaInizializzata(13))) ModalitaServer = RTRIM$(LTRIM$(LineaInizializzata(14))) NetLockServerPath = RTRIM$(LTRIM$(LineaInizializzata(15))) IF RIGHT$(NetLockServerPath, 1) <> "\" THEN NetLockServerPath = NetLockServerPath + "\" NomeServerTask = RTRIM$(LTRIM$(LineaInizializzata(16))) END IF CLOSE END IF LoadSetup = 1 IF NumVerConfigCaricata > 0 THEN NumVerConfigCaricata = -1 CALL Setup(UdaplotSetupPath) ELSE NumVerConfigCaricata = 0 END IF END FUNCTION FUNCTION Looping$ (NumSecLoop AS INTEGER) ' Rende Assoluto il Numero delle Iterazioni da eseguire DIM OraIniziale AS DOUBLE DIM TempoTrascorso AS DOUBLE DIM Uscita AS INTEGER DIM LocXEnd AS INTEGER OraIniziale = TIMER Uscita = 0 CALL DrawMenu Risposta$ = INKEY$ IF Risposta$ = CHR$(27) THEN CALL FineProgramma ELSEIF UCASE$(Risposta$) = "P" THEN CALL DrawMenu CALL PrintMsg("INVIO->Continua - P->PAUSA ---------------------------- ESC->Esce", 21) DO Risposta$ = INPUT$(1) LOOP UNTIL Risposta$ = CHR$(13) OR Risposta$ = CHR$(27) CALL DrawMenu CALL PrintMsg("INVIO->Continua - P->Pausa - H->Help - L->Visione LOG - ESC->Esce", 21) END IF IF NumSecLoop <= 0 THEN EXIT FUNCTION DO TempoIniziale = TIMER CALL PrintMsg(" Attesa al " + STR$(INT(TempoTrascorso / (NumSecLoop / 100))) + "% - " + STR$(INT(TIMER - OraIniziale)) + " Sec di " + STR$(NumSecLoop) + " ", 16) ' COLOR 14, 14: LOCATE 18, 3 + (73 * (INT(TempoTrascorso / (NumSecLoop / 100)))) / 100: PRINT CHR$(SCREEN(18, 3 + (73 * (INT(TempoTrascorso / (NumSecLoop / 100)))) / 100)) LocXEnd = 3 + (73 * (INT(TempoTrascorso / (NumSecLoop / 100)))) / 100 COLOR 14, 14 FOR LocX = 3 TO LocXEnd LOCATE 18, LocX PRINT CHR$(SCREEN(18, LocX)) NEXT LocX Risposta$ = INKEY$ IF Risposta$ = CHR$(13) THEN Uscita = 1 ELSEIF Risposta$ = CHR$(27) THEN Uscita = 1 ELSEIF UCASE$(Risposta$) = "P" THEN CALL DrawMenu CALL PrintMsg("INVIO->Continua - P->PAUSA ---------------------------- ESC->Esce", 21) TempoTrascorso = TIMER DO Risposta$ = INPUT$(1) LOOP UNTIL Risposta$ = CHR$(13) OR Risposta$ = CHR$(27) IF Risposta$ = CHR$(27) THEN Uscita = 1 OraIniziale = OraIniziale + TIMER - TempoTrascorso CALL PrintMsg("INVIO->Continua - P->Pausa - H->Help - L->Visione LOG - ESC->Esce", 21) ELSEIF UCASE$(Risposta$) = "H" THEN TempoTrascorso = TIMER CALL HelpProgramma CALL InterfaceDraw(1) CALL DrawMenu CALL DlgBoxMessaggioAllaRiga(" ", 16) OraIniziale = OraIniziale + TIMER - TempoTrascorso ELSEIF UCASE$(Risposta$) = "L" THEN TempoTrascorso = TIMER IF ExistFile(UdaplotSetupPath + "UDAPLOT.LOG") THEN CALL VisualizzaTestoEsterno(UdaplotSetupPath + "UDAPLOT.LOG") CALL InterfaceDraw(1) CALL DrawMenu CALL DlgBoxMessaggioAllaRiga(" ", 16) OraIniziale = OraIniziale + TIMER - TempoTrascorso ELSEIF UCASE$(Risposta$) = "R" THEN IF NumSecLoop = 5 THEN Uscita = 1 END IF TempoTrascorso = TIMER - OraIniziale LOOP UNTIL (TempoTrascorso >= NumSecLoop OR Uscita = 1) Looping$ = Risposta$ END FUNCTION FUNCTION NomeExeFile$ DIM posiz AS INTEGER, Nome AS STRING, BCSeg AS INTEGER in.ax = &H62 * 256 CALL interruptx(&H21, in, ou) 'Legge segmento PSP BCSeg = ou.bx DEF SEG = BCSeg DEF SEG = PEEK(45) * 256 + PEEK(44) posiz = 0 DO posiz = posiz + 1 IF PEEK(posiz) = 0 THEN posiz = posiz + 1 LOOP UNTIL PEEK(posiz) = 0 DO: posiz = posiz + 1: LOOP UNTIL PEEK(posiz) = 0: posiz = posiz + 1 DO Nome = Nome + CHR$(PEEK(posiz + x%)) posiz = posiz + 1 LOOP UNTIL PEEK(posiz) = 0 posiz = LEN(Nome) 'FOR puntatore! = 1 TO LEN(Nome) ' IF MID$(Nome, puntatore!, 1) = "\" THEN posiz = puntatore! 'NEXT puntatore! 'NomeExeFile$ = LEFT$(Nome, posiz) NomeExeFile$ = Nome END FUNCTION SUB NuovaFinestraHelpProgramma COLOR 14, 5 LOCATE 20, 10: PRINT "Premere INVIO per continuare o un tasto qualsiasi per uscire" DO diskinst$ = INKEY$ IF diskinst$ <> "" THEN esci = 1 LOOP UNTIL esci = 1 IF diskinst$ <> CHR$(13) THEN CALL FineProgramma CALL InterfaceDraw(2) COLOR 14, 6 END SUB SUB Pausa (tipo!) IF tipo! = 0 THEN LOCATE 12, 26: PRINT "Premere un tasto per continuare." WHILE INKEY$ = "": WEND ELSEIF tipo! = 1 THEN CALL PrintMsg("Premere INVIO per continuare - un tasto qualsiasi per USCIRE", 20) DO diskinst$ = INKEY$ IF diskinst$ <> "" THEN esci = 1 LOOP UNTIL esci = 1 IF diskinst$ <> CHR$(13) THEN CALL FineProgramma esci = 0 ELSE CALL PrintMsg("Premere INVIO per continuare", 20) DO LOOP UNTIL INKEY$ = CHR$(13) END IF END SUB SUB PrintMsg (PrintMsgMessaggio AS STRING, PrintMsgRiga AS INTEGER) IF LEN(PrintMsgMessaggio) < 1 THEN EXIT SUB IF LEN(PrintMsgMessaggio) > 75 THEN PrintMsgMessaggio = LEFT$(PrintMsgMessaggio, 71) + "..." NumeroCaratteriMessaggio = LEN(PrintMsgMessaggio) NumeroCarattereColonnaInizio = 40 - (INT(NumeroCaratteriMessaggio / 2)) COLOR 14, 1 LOCATE PrintMsgRiga, NumeroCarattereColonnaInizio: PRINT PrintMsgMessaggio LOCATE 23, 1 END SUB SUB RemoveTempFile ' Rimuove i files temporanei SHELL "dir *. /b>" + UdaplotSetupPath + "uda_temp.$$$" SHELL "dir *. /b>" + UdaplotSetupPath + "UDA_TEMP.LST" SHELL "dir *. /b>" + UdaplotSetupPath + "UPLOTENV.BAT" SHELL "del " + UdaplotSetupPath + "uda_temp.$$$>NUL" SHELL "del " + UdaplotSetupPath + "UDA_TEMP.LST>NUL" SHELL "del " + UdaplotSetupPath + "UPLOTENV.BAT>NUL" END SUB SUB Restart ' Nel caso si verifichi qualche conflitto con altri Task di UDAPLOT caricati nel sistema, ' si Resetta quello attuale e si procede al riavvio sperando che vada meglio !! CLOSE IF StatoPlottaggio = 1 THEN IF ExistFile(NetLockServerPath + "UDAPLOT.NET") THEN SHELL "DEL " + NetLockServerPath + "UDAPLOT.NET>NUL" IF ExistFile(NetLockServerPath + "UDAPLOT.NET") THEN CALL ErroreFataleMsg("Errore DOS012") CALL DlgBoxMessaggioAllaRiga("Impossibile Eliminare la Coda di Stampa !!", 10) CALL DlgBoxMessaggioAllaRiga("Eliminare Manualmente il file: " + NetLockServerPath + "UDAPLOT.NET", 15) CALL Beeper(2) CALL Pausa(2) CALL FineProgramma END IF END IF END IF END SUB FUNCTION SetEnvironment% (StrComando AS STRING, StrNomeFile AS STRING) ' Function: SetEnvironment ' Questa funzione ha il compito di impostare la Variabile d'Ambiente DOS ' UDAPLOT_FILE con il Nome del File Elaborato, nel caso in cui, il Comando ' incaricato di Elaborarlo sia un File Batch. IF Cerca(StrComando, ".BAT") THEN IF LEFT$(StrNomeFile, 1) = CHR$(34) THEN StrNomeFile = RIGHT$(StrNomeFile, LEN(StrNomeFile) - 1) END IF IF RIGHT$(StrNomeFile, 1) = CHR$(34) THEN StrNomeFile = LEFT$(StrNomeFile, LEN(StrNomeFile) - 1) END IF OPEN UdaplotSetupPath + "UPLOTENV.BAT" FOR OUTPUT AS #88 PRINT #88, "@ECHO OFF" PRINT #88, "SET UDAPLOT_FILE=" + StrNomeFile CLOSE #88 SetEnvironment% = 1 ' Restituisce un valore positivo - Successo EXIT FUNCTION END IF SetEnvironment% = 0 ' Restituisce un valore negativo - Fallimento END FUNCTION SUB Setup (PathSetupStr AS STRING) DIM StopLoopModeStr AS STRING DIM RisultatoLoadSetup AS INTEGER DIM x AS INTEGER ' Version 1.4 ' Per facilitare la Modifica della configurazione Š opportuno dare all'utente ' la possibilit… di sceglere Opzioni di Default prese da una gi… esistente. IF (NumeroSecondiAttesa >= 0 AND NumeroBeep >= 0 AND StopLoopCounter >= 0) THEN RisultatoLoadSetup = LoadSetup(1) IF RisultatoLoadSetup = 0 THEN ' Inizializza le Variabili nel caso non ci sia un Setup NomePortaPlot = "LPT1" EstFilesPlot = "PLT" EliminazionePercorso = "N" EliminazioneEstensione = "N" ComandoPlottaggio = "TYPE" ParamPlot = "\" StopLoopMode = "M" StopLoopModeStr = "M/s/#" EliminazioneFiles = "S" NumeroBeep = 1 NumeroSecondiAttesa = 15 PathFilesPlot = "corrente" BackGroundTSR = "N" ' ModalitaServer NetLockServerPath = "\" NomeServerTask = "Server" END IF CALL InterfaceDraw(0) CALL DlgBoxMessaggioAllaRiga("Setup di UDAPLOT.EXE - Rigenerazione di UDAPLOT.SET", 6) ' Settagio del nome della porta CALL STPMsgPortaPlot CALL DlgBoxInput("Nome della Porta di Plottaggio <" + NomePortaPlot + ">", 28) LINE INPUT PortadiPlottaggio$ IF PortadiPlottaggio$ = "" THEN PortadiPlottaggio$ = NomePortaPlot END IF CALL InterfaceDraw(3) CALL DlgBoxMessaggioAllaRiga("Setup di UDAPLOT.EXE - Rigenerazione di UDAPLOT.SET", 6) ' Settagio dell'estensione dei files di plottaggio CALL STPMsgEstFilesPlot CALL DlgBoxInput("Estensione dei Files di Plottaggio <" + EstFilesPlot + ">", 26) LINE INPUT EstFilesPlotStr$ IF EstFilesPlotStr$ = "" THEN EstFilesPlotStr$ = EstFilesPlot ELSEIF EstFilesPlotStr$ = "\" THEN EstFilesPlotStr$ = " " END IF IF LEFT$(EstFilesPlotStr$, 1) = "." THEN EstFilesPlotStr$ = RIGHT$(EstFilesPlotStr$, LEN(EstFilesPlotStr$) - 1) CALL InterfaceDraw(1) CALL STPMsgDeletePathFile CALL DlgBoxMessaggioAllaRiga("Setup di UDAPLOT.EXE - Rigenerazione di UDAPLOT.SET", 6) ' Settagio dell'eliminazione del Percorso dei files passati come Parametri IF UCASE$(EliminazionePercorso) = "S" THEN CALL DlgBoxInput("Devo Eliminare il Percorso dal Nome dei files (S/n)", 2) ELSE CALL DlgBoxInput("Devo Eliminare il Percorso dal Nome dei files (s/N)", 2) END IF DeletePathStr$ = INPUT$(1) IF DeletePathStr$ = CHR$(13) THEN DeletePathStr$ = EliminazionePercorso END IF CALL InterfaceDraw(1) CALL STPMsgDeleteExtensionFile CALL DlgBoxMessaggioAllaRiga("Setup di UDAPLOT.EXE - Rigenerazione di UDAPLOT.SET", 6) ' Settagio dell'eliminazione dell'Estensione dei files passati come Parametri IF UCASE$(EliminazioneEstensione) = "S" THEN CALL DlgBoxInput("Devo Eliminare l'Estensione dal Nome dei files (S/n)", 2) ELSE CALL DlgBoxInput("Devo Eliminare l'Estensione dal Nome dei files (s/N)", 2) END IF DeleteExtensionStr$ = INPUT$(1) IF DeleteExtensionStr$ = CHR$(13) THEN DeleteExtensionStr$ = EliminazioneEstensione END IF CALL InterfaceDraw(1) CALL DlgBoxMessaggioAllaRiga("Setup di UDAPLOT.EXE - Rigenerazione di UDAPLOT.SET", 6) ' Settagio comando di plottaggio CALL STPMsgCmdPlot CALL PrintMsg("<" + ComandoPlottaggio + ">", 12) CALL DlgBoxInput("Comando di Plottaggio", 50) LINE INPUT ComandoPlottaggioStr$ IF ComandoPlottaggioStr$ = "" THEN ComandoPlottaggioStr$ = ComandoPlottaggio END IF CALL InterfaceDraw(1) ' Settagio Parametri IF ParamPlot = "" THEN ParamPlot = "\" CALL DlgBoxMessaggioAllaRiga("Parametri di Plottaggio ...", 6) CALL DlgBoxMessaggioAllaRiga("... da aggiungere dopo il Nome del File (\ + INVIO per Nessuno).", 15) CALL PrintMsg("<" + ParamPlot + ">", 12) CALL DlgBoxInput("", 72) LINE INPUT ParamPlotStr$ IF ParamPlotStr$ = "" THEN IF ParamPlot = "\" THEN ParamPlot = "" ParamPlotStr$ = ParamPlot ELSEIF ParamPlotStr$ = "\" AND LEN(ParamPlotStr$) = 1 THEN ParamPlotStr$ = "" END IF CALL InterfaceDraw(1) CALL DlgBoxMessaggioAllaRiga("Setup di UDAPLOT.EXE - Rigenerazione di UDAPLOT.SET", 6) ' Settagio del numero di files da stampare prima di interrompere IF UCASE$(StopLoopMode) = "M" THEN ' Calcola il default StopLoopModeStr = "M/s/#" ELSEIF UCASE$(StopLoopMode) = "S" THEN StopLoopModeStr = "m/S/#" ELSE StopLoopModeStr = "m/s/" + LTRIM$(RTRIM$(STR$(StopLoopCounter + 1))) END IF ' Interruzione Elaborazione Files CALL STPMsgInterruzioneMode CALL DlgBoxInput("Interruzione Comando: Mai, Sempre o Numero Files (" + StopLoopModeStr + ")", 10) LINE INPUT StopLoopStepStr$ IF StopLoopStepStr$ = "" THEN IF UCASE$(StopLoopMode) = "M" THEN ' Calcola il default StopLoopStepStr$ = "M" ELSEIF UCASE$(StopLoopMode) = "S" THEN StopLoopStepStr$ = "S" ELSE StopLoopStepStr$ = LTRIM$(RTRIM$(STR$(StopLoopCounter + 1))) END IF END IF CALL InterfaceDraw(1) CALL DlgBoxMessaggioAllaRiga("Setup di UDAPLOT.EXE - Rigenerazione di UDAPLOT.SET", 6) ' Settagio dell'eliminazione dei files dopo averli stampati IF UCASE$(EliminazioneFiles) = "S" THEN CALL DlgBoxInput("Devo Eliminare i files dopo averli Elaborati (S/n)", 2) ELSE CALL DlgBoxInput("Devo Eliminare i files dopo averli Elaborati (s/N)", 2) END IF DeleteFilesStr$ = INPUT$(1) IF DeleteFilesStr$ = CHR$(13) THEN DeleteFilesStr$ = EliminazioneFiles END IF CALL InterfaceDraw(3) CALL DlgBoxMessaggioAllaRiga("Setup di UDAPLOT.EXE - Rigenerazione di UDAPLOT.SET", 6) ' Settagio del numero di Beep di segnale DO CALL DlgBoxMessaggioAllaRiga("Digitare 0 (Zero) per lo Spooling Automatico dopo l'attesa.", 15) CALL DlgBoxInput("Quanti avvisi a fine plottaggio <" + STR$(NumeroBeep) + ">", 2) AvvisiPlottaggio$ = INPUT$(1) IF AvvisiPlottaggio$ = CHR$(13) THEN AvvisiPlottaggio$ = LTRIM$(RTRIM$(STR$(NumeroBeep))) END IF LOOP WHILE (ASC(AvvisiPlottaggio$) < 48 OR ASC(AvvisiPlottaggio$) > 57) CALL InterfaceDraw(2) CALL DlgBoxMessaggioAllaRiga("Setup di UDAPLOT.EXE - Rigenerazione di UDAPLOT.SET", 6) ' Settagio timer CALL STPMsgTimer CALL DlgBoxInput("Quanti Secondi di Pausa devo attendere <" + STR$(NumeroSecondiAttesa) + ">", 10) LINE INPUT TimerPlottaggio$ IF TimerPlottaggio$ = "" THEN TimerPlottaggio$ = LTRIM$(RTRIM$(STR$(ABS(NumeroSecondiAttesa)))) END IF TimerPlottaggio$ = LTRIM$(RTRIM$(STR$(VAL(TimerPlottaggio$)))) CALL InterfaceDraw(2) CALL DlgBoxMessaggioAllaRiga("Setup di UDAPLOT.EXE - Rigenerazione di UDAPLOT.SET", 6) ' Settagio della directory di lavoro CALL STPMsgJobDirectory CALL PrintMsg("<" + PathFilesPlot + ">", 12) CALL DlgBoxInput("Directory di Lavoro", 48) LINE INPUT PercorsoLavoroPlottaggio$ IF PercorsoLavoroPlottaggio$ = "" THEN PercorsoLavoroPlottaggio$ = PathFilesPlot ELSEIF LEFT$(PercorsoLavoroPlottaggio$, 1) = "!" THEN PercorsoLavoroPlottaggio$ = "corrente" END IF CALL InterfaceDraw(1) CALL DlgBoxMessaggioAllaRiga("Setup di UDAPLOT.EXE - Rigenerazione di UDAPLOT.SET", 6) ' Configurazione per l'esecuzione in Background TSR DO CALL STPMsgBackgroundMode IF UCASE$(BackGroundTSR) = "N" THEN CALL DlgBoxInput("Devo rimanere caricato in Background TSR (s/N)", 2) ELSE CALL DlgBoxInput("Devo rimanere caricato in Background TSR (S/n)", 2) END IF BackGroundTSRStr$ = INPUT$(1) IF BackGroundTSRStr$ = CHR$(13) THEN BackGroundTSRStr$ = BackGroundTSR END IF LOOP UNTIL (UCASE$(BackGroundTSRStr$) = "S" OR UCASE$(BackGroundTSRStr$) = "N") CALL InterfaceDraw(1) CALL DlgBoxMessaggioAllaRiga("Setup di UDAPLOT.EXE - Rigenerazione di UDAPLOT.SET", 6) ' Configurazione di Rete IF LEFT$(UCASE$(NetLockServerPath), 1) = "\" AND LEN(NetLockServerPath) = 1 THEN CALL DlgBoxInput("La periferica di Output Š fisicamente collegata a questo PC (S/n)", 2) PerifericaCollegata$ = INPUT$(1) IF PerifericaCollegata$ = CHR$(13) THEN PerifericaCollegata$ = "S" ELSE CALL DlgBoxInput("La periferica di Output Š fisicamente collegata a questo PC (s/N)", 2) PerifericaCollegata$ = INPUT$(1) IF PerifericaCollegata$ = CHR$(13) THEN PerifericaCollegata$ = "N" END IF IF UCASE$(PerifericaCollegata$) = "S" THEN PerifericaCollegata$ = "S" PathServerStr$ = "\" ELSE PerifericaCollegata$ = "N" CALL InterfaceDraw(3) CALL PrintMsg("<" + NetLockServerPath + ">", 12) CALL DlgBoxMessaggioAllaRiga("Setup di UDAPLOT.EXE - Rigenerazione di UDAPLOT.SET", 6) CALL DlgBoxMessaggioAllaRiga("Specificare il percorso del disco C: del Server Centrale", 15) CALL DlgBoxInput("(\\NomeComputer\PercorsoRootDiscoC / ?:\)", 26) LINE INPUT PathServerStr$ IF PathServerStr$ = "" THEN PathServerStr$ = NetLockServerPath IF RIGHT$(PathServerStr$, 1) = "\" THEN PathServerStr$ = LEFT$(PathServerStr$, LEN(PathServerStr$) - 1) IF PathServerStr$ = "" OR ExistFile(PathServerStr$ + "\*.*") = 0 THEN CALL ErroreFataleMsg("Errore DOS011") CALL STPMsgNetError CALL Pausa(2) CALL FineProgramma END IF END IF CALL InterfaceDraw(1) CALL DlgBoxMessaggioAllaRiga("Setup di UDAPLOT.EXE - Rigenerazione di UDAPLOT.SET", 6) ' Settagio del nome del PC CALL STPMsgPCName ' Calcola il Nome del Server senza il codice di riconoscimento FOR x = 1 TO LEN(NomeServerTask) IF MID$(NomeServerTask, x, 1) = "$" THEN NomeServerTask = LEFT$(NomeServerTask, x - 1) x = 32766 END IF NEXT x CALL DlgBoxInput("Nome del computer <" + NomeServerTask + ">", 30) LINE INPUT NomeServerStr$ IF NomeServerStr$ = "" THEN NomeServerStr$ = NomeServerTask END IF CALL InterfaceDraw(0) CALL DlgBoxMessaggioAllaRiga("Setup di UDAPLOT.EXE - Rigenerazione di UDAPLOT.SET", 6) ' Salvataggio Settagio della stampa CALL DlgBoxMessaggioAllaRiga("Setup:" + RIGHT$(PathSetupStr, 50) + "UDAPLOT.SET", 15) CALL DlgBoxInput("Posso salvare la nuova configurazione (S/n)", 2) Salvare$ = INPUT$(1) IF UCASE$(Salvare$) <> "N" THEN CALL InterfaceDraw(3) CALL DlgBoxMessaggioAllaRiga("Salvataggio della configurazione in UDAPLOT.SET.", 10) OPEN PathSetupStr + "UDAPLOT.SET" FOR OUTPUT AS #12 PRINT #12, "Version_1.52" PRINT #12, RTRIM$(LTRIM$(PortadiPlottaggio$)) PRINT #12, RTRIM$(LTRIM$(EstFilesPlotStr$)) PRINT #12, RTRIM$(LTRIM$(DeletePathStr$)) PRINT #12, RTRIM$(LTRIM$(DeleteExtensionStr$)) PRINT #12, RTRIM$(LTRIM$(ComandoPlottaggioStr$)) PRINT #12, RTRIM$(LTRIM$(ParamPlotStr$)) PRINT #12, RTRIM$(LTRIM$(StopLoopStepStr$)) PRINT #12, RTRIM$(LTRIM$(DeleteFilesStr$)) PRINT #12, RTRIM$(LTRIM$(AvvisiPlottaggio$)) PRINT #12, RTRIM$(LTRIM$(TimerPlottaggio$)) IF PercorsoLavoroPlottaggio$ <> "" THEN PRINT #12, RTRIM$(LTRIM$(PercorsoLavoroPlottaggio$)) ELSE PRINT #12, "CORRENTE" END IF PRINT #12, RTRIM$(LTRIM$(BackGroundTSRStr$)) PRINT #12, RTRIM$(LTRIM$(PerifericaCollegata$)) PRINT #12, RTRIM$(LTRIM$(PathServerStr$)) PRINT #12, RTRIM$(LTRIM$(NomeServerStr$)) + "$" + STR$(NumeroIdentificazione) CLOSE #12 END IF CALL InterfaceDraw(3) CALL FineProgramma END SUB SUB STPMsgBackgroundMode COLOR 14, 1 CALL Cornice(12, 5, 19, 70) COLOR 14, 1 CALL PrintMsg("Modalit… di funzionamento in 'BackgroundDraw' (o Background)", 12) CALL PrintMsg("E' possibile stabilire se si desidera lasciare costantemente in ", 14) CALL PrintMsg("esecuzione il programma anche quando non ci sono files da ", 15) CALL PrintMsg("elaborare, oppure se si deve Lanciare il programma ogni volta che", 16) CALL PrintMsg("files di Plottaggio devono essere Elaborati (default). ", 17) END SUB SUB STPMsgCmdPlot COLOR 14, 1 CALL Cornice(13, 5, 19, 70) COLOR 14, 1 CALL PrintMsg("Inserimento Comando di Plottaggio", 13) CALL PrintMsg("Pu• essere un Comando del Sistema Operativo, un Programma o un file ", 14) CALL PrintMsg("batch; in ogni caso, UDAPLOT, provveder… a Lanciare suddetto Comando ", 15) CALL PrintMsg("per Ogni file da elaborare (contenuto nella Directory di Plottaggio) ", 16) CALL PrintMsg("passandoglielo sempre come Primo Parametro. ", 17) END SUB SUB STPMsgDeleteExtensionFile COLOR 14, 1 CALL Cornice(14, 5, 18, 70) COLOR 14, 1 CALL PrintMsg("Eliminazione Estensione Parametri File", 14) CALL PrintMsg("Se si desidera che il Nome del File da Elaborare passato come", 15) CALL PrintMsg("Parametri venga privato dell'Estensione (3 caratteri) ", 16) CALL PrintMsg("rispondere con S . ", 17) END SUB SUB STPMsgDeletePathFile COLOR 14, 1 CALL Cornice(14, 5, 18, 70) COLOR 14, 1 CALL PrintMsg("Eliminazione Percorso Parametri File", 14) CALL PrintMsg("Se si desidera che il Nome del File da Elaborare passato come", 15) CALL PrintMsg("Parametri venga privato del Percorso che ne identifica la ", 16) CALL PrintMsg("posizione assoluta rispondere S . ", 17) END SUB SUB STPMsgEstFilesPlot COLOR 14, 1 CALL Cornice(12, 5, 19, 70) COLOR 14, 1 CALL PrintMsg("Legenda Parametri da Aggiungere dopo l'Estensione", 12) CALL PrintMsg("/on -> Ordina per Nome - /oe -> Ordina per Estensione", 14) CALL PrintMsg("/od -> Ordina per Data - /os -> Ordina per Dimensione", 15) CALL PrintMsg("/S -> Verifica i files di Plottaggio anche nelle subdirectory", 16) CALL PrintMsg("Inserire il carattere \ ed INVIO per nessuna Estensione", 17) END SUB SUB STPMsgInterruzioneMode COLOR 14, 1 CALL Cornice(12, 5, 19, 70) COLOR 14, 1 CALL PrintMsg("Interruzione Comando di Plottaggio", 12) CALL PrintMsg("E' possibile fare in modo che il programma elabori i files senza ", 14) CALL PrintMsg("chiedere conferma per Ognuno o per Tutti o dopo un certo numero ", 15) CALL PrintMsg("di files; in quest'ultima ipotesi (inserire un numero intero) il ", 16) CALL PrintMsg("software andr… in stato di pausa dopo aver elaborato # files. ", 17) END SUB SUB STPMsgJobDirectory COLOR 14, 1 CALL Cornice(13, 5, 19, 70) COLOR 14, 1 CALL PrintMsg("Inserimento Percorso Directory di Lavoro", 13) CALL PrintMsg("Inserire il Percorso completo della Directory adibita a contenere", 14) CALL PrintMsg("i files che UDAPLOT dovr… Elaborare; il programma li cercher… in ", 15) CALL PrintMsg("suddetta directory, altrimenti, inserendo il carattere ! verranno", 16) CALL PrintMsg("cercati in quella Corrente durante l'esecuzione del programma. ", 17) END SUB SUB STPMsgNetError COLOR 15, 3: LOCATE 10, 4: PRINT "Per un corretto funzionamento di UDAPLOT in Rete Š necessario " COLOR 15, 3: LOCATE 11, 4: PRINT "Individuare il Percorso di Rete del Disco C: sul Server al quale Š " COLOR 15, 3: LOCATE 12, 4: PRINT "connessa la periferica (Plotter, Stampante, ecc..). " COLOR 15, 3: LOCATE 13, 4: PRINT "Se il disco C: del Server al quale Š collegata la periferica di output " COLOR 15, 3: LOCATE 14, 4: PRINT "NON Š stata condivisa Š impossibile utilizzare UDAPLOT con una configura-" COLOR 15, 3: LOCATE 15, 4: PRINT "-zione di rete, altrimenti, Š possibile specificare o il Percorso di rete" COLOR 15, 3: LOCATE 16, 4: PRINT ", che ha una sintassi del tipo: \\NomeComputer\NomePerifericaCondivisa " COLOR 15, 3: LOCATE 17, 4: PRINT "(ex: \\PC1\DISCO_C) oppure indicando la Lettera del drive corrispondente," COLOR 15, 3: LOCATE 18, 4: PRINT "nel caso sia stata creata una Connessione con L'unit… di Rete (Ex: H:\) " END SUB SUB STPMsgPCName COLOR 14, 1 CALL Cornice(12, 5, 19, 70) COLOR 14, 1 CALL PrintMsg("Nome di Identificazione di questo Computer in Rete", 12) CALL PrintMsg("AffinchŠ UDAPLOT possa lavorare correttamente in un sistema di ", 14) CALL PrintMsg("rete Š necessario assegnare al Task che utilizzer… questa ", 15) CALL PrintMsg("configurazione un Nome Univoco che nessun altro UDAPLOT in ", 16) CALL PrintMsg("esecuzione su un altro Computer della Rete deve possedere. ", 17) END SUB SUB STPMsgPortaPlot COLOR 14, 1 CALL Cornice(14, 5, 17, 70) COLOR 14, 1 CALL PrintMsg("Legenda Parametri Opzionali", 14) CALL PrintMsg("Inserire il carattere \ ed INVIO per nessuna.", 15) CALL PrintMsg("Inserire NUL per non visualizzare a Monitor l'Output.", 16) END SUB SUB STPMsgTimer COLOR 14, 1 CALL Cornice(14, 5, 18, 70) COLOR 14, 1 CALL PrintMsg("Secondi di Pausa da Attendere", 14) CALL PrintMsg("E' il numero di secondi che il programma deve attendere prima di ", 15) CALL PrintMsg("procedere all'elaborazione di altri files o all'Intercettazione ", 16) CALL PrintMsg("di quelli eventualmente nuovi. ", 17) END SUB SUB VersioneErrata CALL InterfaceDraw(0) CALL DlgBoxMessaggioAllaRiga("ERRORE GRAVE - INTERCETTATA VERSIONE UDAPLOT ERRATA", 6) CALL PrintMsg("Errore DOS005", 7) CALL DlgBoxMessaggioAllaRiga("Intercettata nel Sistema di Rete una Versione Precedente di UDAPLOT!", 10) CALL DlgBoxMessaggioAllaRiga("Aggiornare tutte le copie di UDAPLOT e tutte le Configurazioni presenti.", 17) CALL DlgBoxMessaggioAllaRiga("Per evitare conflitti Š necessario Eliminare la Coda si Stampa.", 14) CALL Beeper(2) CALL Pausa(3) CALL KillQueue(1) END SUB SUB VisualizzaTestoEsterno (TestoEsternoPath AS STRING) OPEN TestoEsternoPath FOR INPUT AS #10 DIM PrintMsgRigaOutput AS INTEGER DIM PrintMsgRigaOffSet AS INTEGER DIM SaltaInput AS INTEGER PrintMsgRigaOutput = 6 PrintMsgRigaOffSet = 0 SaltaInput = 0 CALL InterfaceDraw(0) WHILE (NOT EOF(10) OR SaltaInput = 1) COLOR 14, 3 IF SaltaInput = 0 THEN LINE INPUT #10, Stringa$ IF LEFT$(Stringa$, 3) = ">$<" AND LEN(Stringa$) > 3 THEN PrintMsgRigaOffSet = 38 - (INT(LEN(Stringa$) / 2)) Stringa$ = RIGHT$(Stringa$, LEN(Stringa$) - 3) IF LEN(Stringa$) > 75 THEN PrintMsgRigaOffSet = PrintMsgRigaOffSet + 3 END IF LOCATE PrintMsgRigaOutput, 3 + PrintMsgRigaOffSet IF LEN(Stringa$) < 75 THEN PRINT Stringa$ ELSE LOCATE PrintMsgRigaOutput, 3 IF SaltaInput = 0 THEN PRINT LEFT$(Stringa$, 74) PrintMsgRigaOutput = PrintMsgRigaOutput + 1 END IF SaltaInput = 0 LOCATE PrintMsgRigaOutput, 3 IF PrintMsgRigaOutput < 20 THEN PRINT RIGHT$(RIGHT$(Stringa$, LEN(Stringa$) - 74), 74) ELSE SaltaInput = 1 END IF END IF PrintMsgRigaOutput = PrintMsgRigaOutput + 1 PrintMsgRigaOffSet = 0 IF PrintMsgRigaOutput >= 20 THEN COLOR 14, 5 LOCATE 20, 10: PRINT "Premere INVIO per continuare o un tasto qualsiasi per uscire" esci = 0 DO diskinst$ = INKEY$ IF diskinst$ <> "" THEN esci = 1 LOOP UNTIL esci = 1 IF diskinst$ <> CHR$(13) THEN CALL FineProgramma esci = 0 PrintMsgRigaOutput = 6 CALL InterfaceDraw(1) END IF WEND CLOSE #10 IF PrintMsgRigaOutput <> 6 THEN COLOR 14, 5 LOCATE 20, 10: PRINT "Premere INVIO per continuare o un tasto qualsiasi per uscire" esci = 0 DO diskinst$ = INKEY$ IF diskinst$ <> "" THEN esci = 1 LOOP UNTIL esci = 1 IF diskinst$ <> CHR$(13) THEN CALL FineProgramma esci = 0 END IF END SUB FUNCTION WINDOWS95 ' Intercetta la versione del sistema operativo corrente. ' Se si tratta di Windows 95 o successiva ritorna 1 SHELL "VER >" + UdaplotSetupPath + "UDAVER.DAT" OPEN UdaplotSetupPath + "UDAVER.DAT" FOR INPUT AS #199 IF EOF(199) THEN WINDOWS95 = 1 ELSE INPUT #199, Versione$ INPUT #199, Versione$ IF LEFT$(Versione$, 6) = "MS-DOS" THEN WINDOWS95 = 0 ELSE WINDOWS95 = 1 END IF CLOSE #199 SHELL "DEL " + UdaplotSetupPath + "UDAVER.DAT" END FUNCTION