DECLARE SUB cornice (rigai!, colonnai!, rigaf!, colonnaf!) DECLARE SUB EXIST (NOMEFILE$) DECLARE SUB fineprg () DECLARE SUB GetParam (Comando AS STRING, NumeroParametro AS INTEGER, Parametro AS STRING) DECLARE SUB INITIALIZING () DECLARE SUB inputmess (messaggio$, carric!) DECLARE SUB MESSAGGI (messaggio$) DECLARE SUB MESSAGGInt (messagg$) DECLARE SUB messaggiy (messaggio$, riga!) DECLARE SUB nesub () DECLARE SUB neval () DECLARE SUB pausa (fineciclo!) DECLARE SUB SOTTOFONDO () DECLARE FUNCTION GetNumeroCicli! (StringaNumeroCicli AS STRING) DECLARE FUNCTION makescript (ParamRipetizioneVariabili AS INTEGER, ParamNumeroCicli AS INTEGER, ParamNomeFileScript AS STRING) COMMON SHARED byte COMMON SHARED carattere$ COMMON SHARED codicecarattere COMMON SHARED EXISTREPORT COMMON SHARED lineasub$() COMMON SHARED lineasub2$() COMMON SHARED MODIFICAUTM COMMON SHARED NUMERORIGHESUB% COMMON SHARED numerovariabili% COMMON SHARED saltare COMMON SHARED VARIABILE$() DIM lcNumeroCicli AS STRING DIM lcRipetizioneVariabili AS STRING DIM ParamNomeFileScript AS STRING DIM ParamNumeroCicli AS INTEGER DIM ParamRipetizioneVariabili AS INTEGER CLEAR ' Gestione errori ON ERROR GOTO 10 GOTO 20 10 IF ERR = 7 THEN ELSEIF ERR = 70 THEN CALL SOTTOFONDO CALL messaggiy("Accesso al disco negato!!", 10) CALL fineprg ELSEIF ERR = 75 THEN CALL SOTTOFONDO CALL messaggiy("Errore di accesso al percorso file!! Unit… CD-ROM.", 10) CALL fineprg ELSEIF ERR = 76 THEN CALL SOTTOFONDO CALL messaggiy("File " + NomeFileScript$ + " errato.", 10) CALL fineprg ELSEIF ERR = 64 THEN CALL SOTTOFONDO CALL messaggiy("Nome di file Errato!!", 10) CALL fineprg ELSEIF ERR = 61 THEN CALL SOTTOFONDO CALL messaggiy("Spazio su disco insufficiente!!", 10) CALL fineprg ELSEIF ERR = 6 THEN CALL SOTTOFONDO CALL messaggiy("Overflow!! -- Numero troppo elevato per USFM.EXE", 10) CALL fineprg ELSE CALL SOTTOFONDO CALL messaggiy("ERRORE FATALE!! Non posso continuare.", 10) CALL fineprg END IF RESUME NEXT 20 ' Disegna lo sfondo del programma CALL SOTTOFONDO ' Se Š stato invocato l'Help informa sulla sintassi da usare per lanciare il sw con Parametri IF RIGHT$(COMMAND$, 1) = "?" THEN CALL MESSAGGI("USFM [NumeroCicli] [NumeroRipetizioneVariabile] [NomeFileScript]") CALL fineprg END IF ' Verifica la presenza del file Subrutine CALL EXIST("USFM.SUB") IF EXISTREPORT = 0 THEN CALL MESSAGGI("ATTENZIONE! FILE USFM.SUB NON TROVATO"): MODIFICAUTM = 1: CALL nesub: CALL fineprg ' Verifica la presenza del file Variabili CALL EXIST("USFM.VAL") IF EXISTREPORT = 0 THEN CALL MESSAGGI("ATTENZIONE! FILE USFM.VAL NON TROVATO"): MODIFICAUTM = 1: CALL neval: CALL fineprg ' Inizializza il file Subrutine ed il file Variabili CALL INITIALIZING ' Intercetta le Variabile eventualmente passate come Parametri CALL GetParam(COMMAND$, 1, lcNumeroCicli) ParamNumeroCicli = GetNumeroCicli(lcNumeroCicli) IF LEN(lcNumeroCicli) > 0 THEN CALL GetParam(COMMAND$, 2, lcRipetizioneVariabili) IF LEN(lcRipetizioneVariabili) = 0 THEN lcRipetizioneVariabili = "1" ParamRipetizioneVariabili = VAL(lcRipetizioneVariabili) CALL GetParam(COMMAND$, 3, ParamNomeFileScript) IF LEN(ParamNomeFileScript) = 0 THEN ParamNomeFileScript = "Script.bat" END IF ' Lancia il Generatore Script EXISTREPORT = makescript(ParamNumeroCicli, ParamRipetizioneVariabili, ParamNomeFileScript) ' Esce dal programma CALL fineprg SUB cornice (rigai, colonnai, rigaf, colonnaf) colonnaf = colonnaf + colonnai ' riquadro LOCATE rigai, colonnai PRINT CHR$(201) FOR y = colonnai + 1 TO colonnaf - 1 LOCATE rigai, y: PRINT CHR$(205) NEXT y LOCATE rigai, colonnaf: PRINT CHR$(187) FOR x = rigai + 1 TO rigaf - 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 rigaf, colonnai PRINT CHR$(200) FOR x = colonnai + 1 TO colonnaf - 1 LOCATE rigaf, x: PRINT CHR$(205) NEXT x LOCATE rigaf, colonnaf: PRINT CHR$(188) FOR y = rigai + 1 TO rigaf + 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 rigaf + 1, x: PRINT CHR$(SCREEN(rigaf + 1, x)) NEXT x END SUB SUB EXIST (NOMEFILE$) SHELL "dir " + NOMEFILE$ + "/B>c:\uda_temp.$$$" OPEN "c:\uda_temp.$$$" FOR INPUT AS #100 IF EOF(100) THEN CLOSE #100: EXISTREPORT = 0: CLOSE #100: EXIT SUB ELSE EXISTREPORT = 1: CLOSE #100 END SUB SUB fineprg ' fine programma MESS$ = "FINE UDA SCRIPT FILE MAKER -- By UDA'Software 1998": CALL messaggiy(MESS$, 15) CLOSE SHELL "dir *.*>c:\uda_temp.$$$" SHELL "del c:\uda_temp.$$$>nul" COLOR 7, 0 END END SUB FUNCTION GetNumeroCicli (StringaNumeroCicli AS STRING) DIM NumeroCicliDefault AS INTEGER DIM NumeroCicli AS INTEGER NumeroCicliDefault = numerovariabili% IF LEFT$(StringaNumeroCicli, 1) = "#" THEN NumeroCicli = NumeroCicliDefault IF LEN(StringaNumeroCicli) > 1 THEN IF MID$(StringaNumeroCicli, 2, 1) = "+" THEN NumeroCicli = NumeroCicli + VAL(RIGHT$(StringaNumeroCicli, LEN(StringaNumeroCicli) - 2)) ELSEIF MID$(StringaNumeroCicli, 2, 1) = "-" THEN NumeroCicli = NumeroCicli - VAL(RIGHT$(StringaNumeroCicli, LEN(StringaNumeroCicli) - 2)) ELSEIF MID$(StringaNumeroCicli, 2, 1) = "*" THEN NumeroCicli = NumeroCicli * VAL(RIGHT$(StringaNumeroCicli, LEN(StringaNumeroCicli) - 2)) ELSEIF MID$(StringaNumeroCicli, 2, 1) = "/" THEN NumeroCicli = NumeroCicli / VAL(RIGHT$(StringaNumeroCicli, LEN(StringaNumeroCicli) - 2)) ELSE CALL MESSAGGI("ATTENZIONE! Operatore non valido, consultare la Guida."): MODIFICAUTM = 1: CALL neval: CALL fineprg END IF END IF ELSE NumeroCicli = VAL(StringaNumeroCicli) END IF GetNumeroCicli = NumeroCicli END FUNCTION SUB GetParam (Comando AS STRING, NumeroParametro AS INTEGER, Parametro AS STRING) DIM LineaComando AS STRING DIM NumeroParametroIntercettato AS INTEGER DIM InizioParametro AS INTEGER IF LEN(Comando) = 0 THEN EXIT SUB LineaComando = Comando + " " InizioParametro = 1 FOR x = 1 TO LEN(LineaComando) IF MID$(LineaComando, x, 1) = " " THEN NumeroParametroIntercettato = NumeroParametroIntercettato + 1 IF NumeroParametroIntercettato = NumeroParametro THEN Parametro = RTRIM$(LTRIM$(MID$(LineaComando, InizioParametro, x - InizioParametro))) x = LEN(LineaComando) END IF InizioParametro = x END IF NEXT x END SUB SUB INITIALIZING REM inizializzazione file dati COLOR 14, 1 CLOSE OPEN "USFM.VAL" FOR INPUT AS #1 WHILE NOT EOF(1) LINE INPUT #1, LINEA$ numerovariabili% = numerovariabili% + 1 WEND CLOSE COLOR 14, 3: CALL cornice(8, 25, 20, 45): COLOR 14, 1 passo = numerovariabili% / 100 REDIM VARIABILE$(numerovariabili%) CALL cornice(16, 30, 18, 20): COLOR 14, 1 CALL cornice(11, 30, 13, 35): COLOR 14, 1 COLOR 14, 4 OPEN "USFM.VAL" FOR INPUT AS #1 FOR indice = 1 TO numerovariabili% LINE INPUT #1, VARIABILE$(indice) byte = byte + LEN(VARIABILE$(indice)): COLOR 14, 1: LOCATE 17, 31: PRINT "Byte: ", byte IF byte >= (FRE("") - 100) THEN CALL MESSAGGI("File troppo grande! Non posso inizializzare oltre " + STR$(byte) + " Byte"): CALL fineprg LOCATE 12, 31: PRINT "Inizializzazione USFM.VAL", INT(indice / passo); " % " NEXT indice CLOSE LOCATE 12, 47: PRINT ".....Fatto!" FOR x = 0 TO 1000 WHILE INKEY$ = "s": x = 5000: WEND NEXT x REM inizializzazione file subrutine COLOR 14, 1 OPEN "USFM.SUB" FOR INPUT AS #1 WHILE NOT EOF(1) LINE INPUT #1, LINEA$ NUMERORIGHESUB% = NUMERORIGHESUB% + 1 WEND CLOSE passo = NUMERORIGHESUB% / 100 REDIM lineasub$(NUMERORIGHESUB%) COLOR 14, 1 OPEN "USFM.SUB" FOR INPUT AS #1 FOR indice = 1 TO NUMERORIGHESUB% LINE INPUT #1, lineasub$(indice) byte = byte + LEN(lineasub$(indice)): COLOR 14, 1: LOCATE 17, 31: PRINT "Byte: ", byte IF byte >= (FRE("") - 100) THEN CALL MESSAGGI("File troppo grande! Non posso inizializzare oltre " + STR$(byte) + " Byte"): CALL fineprg LOCATE 12, 31: PRINT "Inizializzazione USFM.SUB", INT(indice / passo); " % " NEXT indice CLOSE LOCATE 12, 47: PRINT ".....Fatto!" FOR x = 0 TO 1000 WHILE INKEY$ = "s": x = 5000: WEND NEXT x MODIFICAUTM = 0 END SUB SUB inputmess (MESSI$, carric) NCARATTERI = LEN(MESSI$) + carric colonnainizio = 40 - (INT(NCARATTERI / 2)) COLOR 14, 1 CALL cornice(9, colonnainizio - 1, 11, NCARATTERI + 5) COLOR 14, 1 LOCATE 10, colonnainizio: PRINT MESSI$ COLOR 4, 3 LOCATE 10, NCARATTERI + colonnainizio + 1 - carric: PRINT STRING$(carric + 2, " ") LOCATE 10, NCARATTERI + colonnainizio + 1 - carric END SUB FUNCTION makescript (ParamNumeroCicli AS INTEGER, ParamRipetizioneVariabili AS INTEGER, ParamNomeFileScript AS STRING) ' Verifica se deve Chiedere l'Input o meno IF ParamRipetizioneVariabili > 0 AND ParamNumeroCicli > 0 AND ParamNomeFileScript$ <> "" THEN ConsideraVal% = ParamRipetizioneVariabili cicliexe! = ParamNumeroCicli NomeFileScript$ = ParamNomeFileScript ELSE CALL messaggiy("Quante volte una variabile deve essere sostituita consecutivamente.", 15) messaggio$ = "QUANTE VOLTE DEVO CONSIDERARE LA VARIABILE?<1>": CALL inputmess(messaggio$, 5) INPUT "", ConsideraVal$: IF ConsideraVal$ = "" THEN ConsideraVal% = 1 ELSE ConsideraVal% = VAL(ConsideraVal$) CALL SOTTOFONDO CALL messaggiy("Il numero di sostituzioni da effettuare. Per default il numero di variabili", 15) messaggio$ = "QUANTI CICLI DEVO ESEGUIRE?<" + STR$(numerovariabili%) + ">": CALL inputmess(messaggio$, 5) INPUT "", cicliexe$ IF cicliexe$ = "" THEN cicliexe! = numerovariabili% ELSE cicliexe! = GetNumeroCicli(cicliexe$) END IF CALL SOTTOFONDO CALL messaggiy("Il nome del file da generare.", 15) CALL inputmess("INSERISCI IL NOME DEL FILE SCRIPT?", 14) INPUT "", NomeFileScript$: IF NomeFileScript$ = "" THEN NomeFileScript$ = "SCRIPT.BAT" END IF contaConsideraVal% = 1 OPEN NomeFileScript$ FOR OUTPUT AS #3 CALL SOTTOFONDO REM COMPILAZIONE FILE SCRIPT passo = 100 / cicliexe! CALL messaggiy(" ", 10) indice% = 1 FOR CICLONUMEROVARIABILI! = 1 TO cicliexe! FOR ciclonumerorighesub% = 1 TO NUMERORIGHESUB% FOR puntatore% = 1 TO LEN(lineasub$(ciclonumerorighesub%)) IF INKEY$ = CHR$(27) THEN CICLONUMEROVARIABILI! = cicliexe! ciclonumerorighesub% = NUMERORIGHESUB% END IF IF MID$(lineasub$(ciclonumerorighesub%), puntatore%, 1) = "$" THEN IF indice% > numerovariabili% THEN indice% = 1 StampaStringa$ = StampaStringa$ + VARIABILE$(indice%) IF contaConsideraVal% = ConsideraVal% THEN contaConsideraVal% = 1 indice% = indice% + 1 ELSE contaConsideraVal% = contaConsideraVal% + 1 END IF ELSE StampaStringa$ = StampaStringa$ + MID$(lineasub$(ciclonumerorighesub%), puntatore%, 1) END IF NEXT puntatore% PRINT #3, StampaStringa$ StampaStringa$ = "" NEXT ciclonumerorighesub% NCARATTERI = LEN(StampaStringa$) IF NCARATTERI > 75 THEN NCARATTERI = 75 colonnainizio = 40 - (INT(NCARATTERI / 2)) LOCATE 10, 3: PRINT " " LOCATE 10, colonnainizio: PRINT LEFT$(StampaStringa$, 75) LOCATE 9, 38: PRINT STR$(INT(CICLONUMEROVARIABILI! * passo) - 1) + "%" StampaStringa$ = "" NEXT CICLONUMEROVARIABILI! ' CALL SOTTOFONDO LOCATE 9, 38: PRINT "100%" CALL messaggiy("File " + NomeFileScript$ + " compilato con successo.", 19) END FUNCTION SUB MESSAGGI (messagg$) NCARATTERI = LEN(messagg$) colonnainizio = 40 - (INT(NCARATTERI / 2)) COLOR 14, 1 CALL cornice(9, colonnainizio - 1, 11, NCARATTERI + 1) COLOR 14, 1 LOCATE 10, colonnainizio: PRINT messagg$ CALL messaggiy("Premi un tasto per continuare.", 15) CALL pausa(30) END SUB SUB MESSAGGInt (messagg$) NCARATTERI = LEN(messagg$) colonnainizio = 40 - (INT(NCARATTERI / 2)) COLOR 14, 1 CALL cornice(9, colonnainizio - 1, 11, NCARATTERI + 1) COLOR 14, 1 LOCATE 10, colonnainizio: PRINT messagg$ END SUB SUB messaggiy (messaggioy$, riga) NCARATTERI = LEN(messaggioy$) IF NCARATTERI > 75 THEN NCARATTERI = 75 colonnainizio = 40 - (INT(NCARATTERI / 2)) COLOR 14, 1 CALL cornice(riga - 1, colonnainizio - 1, riga + 1, NCARATTERI + 1) COLOR 14, 1 LOCATE riga, colonnainizio: PRINT LEFT$(messaggioy$, 75) END SUB SUB nesub COLOR 11, 4: CALL cornice(17, 2, 20, 76): COLOR 14, 4 LOCATE 18, 3: PRINT "Il file USFM.SUB deve contenere la routine all'interno della quale" LOCATE 19, 3: PRINT "saranno sostituiti i caratteri jolly -$- con i valori del file USFM.VAL" END SUB SUB neval COLOR 11, 4: CALL cornice(17, 2, 20, 76): COLOR 14, 4 LOCATE 18, 3: PRINT "Il file USFM.VAL deve contenere il valore/i che dovr… sostituire il" LOCATE 19, 3: PRINT "carattere/i jolly -$- all'interno del file USFM.SUB" END SUB SUB pausa (fineciclo) WHILE INKEY$ = "": WEND END SUB SUB SOTTOFONDO COLOR 14, 0 CLS FOR riga = 3 TO 23 COLOR 11, 5: LOCATE riga, 1: PRINT STRING$(80, 176) NEXT riga COLOR 10, 11 CALL cornice(5, 2, 21, 75) COLOR 14, 1: CALL cornice(4, 14, 6, 51): COLOR 14, 1 LOCATE 5, 15: PRINT "USFM.EXE V1.7 By UDA'Software Copyright 1998, INC" PRINT LOCATE 4, 30: PRINT "UDA SCRIPT FILE MAKER" END SUB