' Dichiarazione subroutine DECLARE SUB Beeper (NumBeep AS INTEGER) DECLARE SUB InsertVariableDirSorg (Directory$) DECLARE SUB VisualizzaTestoEsterno (Percorso$) DECLARE SUB InsertVariableDirInst (Directory$) DECLARE SUB makeinst () DECLARE SUB help () DECLARE SUB interfaccia (tipointerfaccia!) DECLARE SUB creadir (PATH$) DECLARE SUB copiafile (filesorg$) DECLARE SUB MESSAGGInt (messagg$) DECLARE SUB SOTTOFONDO () DECLARE SUB messaggiy (messaggio$, riga!) DECLARE SUB initializing (Percorso$) DECLARE SUB Pausa (fineciclo!) DECLARE SUB fineprg () DECLARE SUB inputmess (messaggio$, carric!) DECLARE SUB messaggi (messaggio$) DECLARE SUB cornice (rigai!, colonnai!, rigaf!, colonnaf!) DECLARE SUB HelpWindows95 () DECLARE FUNCTION WINDOWS95! () ' Dichiarazione funzioni DECLARE FUNCTION NomeExeFile$ () DECLARE FUNCTION PercorsoExeFile$ () DECLARE FUNCTION existfile! (NomeDelFile$) DECLARE FUNCTION existdir! (nomedelladirectory$) DECLARE FUNCTION existdisk! (nomedisk$) DECLARE FUNCTION spacedisk! (nomedisk$, spaziori) DECLARE FUNCTION bytefile! (nomefile$) ' Dichiarazione variabili globali COMMON SHARED byte COMMON SHARED filedest$ COMMON SHARED numerovariabili% COMMON SHARED variabile$() COMMON SHARED Errore% COMMON SHARED Percorso$ COMMON SHARED Windows95Detected AS INTEGER COMMON SHARED ErroreNomeFile AS INTEGER ' Dichiarazione variabili intere DIM ciclo AS INTEGER ' Dichiarazione variaili locali DIM DiscoCorrente AS INTEGER DIM DiscoSuccessivo 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 ' Gestione errori ON ERROR GOTO 10 GOTO 20 10 IF ERR = 7 THEN ELSEIF ERR = 0 OR ERR = 5 THEN CALL interfaccia(0) ErroreNomeFile = 1 ELSEIF ERR = 70 THEN CALL interfaccia(0) CALL messaggiy("Accesso al disco negato!!", 10) CALL fineprg ELSEIF ERR = 75 THEN CALL interfaccia(0) CALL messaggiy("Errore di accesso al percorso file!! Unit… CD-ROM.", 10) CALL fineprg ELSEIF ERR = 76 THEN CALL interfaccia(0) CALL messaggiy("Directory " + diskinst$ + dirinst$ + " errata.", 10) CALL fineprg ELSEIF ERR = 61 THEN CALL interfaccia(0) CALL messaggiy("Spazio su disco insufficiente!!", 10) CALL fineprg ELSE CALL interfaccia(0) CALL messaggiy("ERRORE FATALE Nř" + STR$(ERR) + "!! Non posso continuare.", 10) CALL fineprg END IF RESUME NEXT 20 IF WINDOWS95 THEN Windows95Detected = 1 ELSE Windows95Detected = 0 CALL HelpWindows95 END IF esci = 0 diskinst$ = "" dirinst$ = "" Errore% = 1 prompt$ = COMMAND$ 'prompt$ = "/help" 'prompt$ = "/m" IF RIGHT$(prompt$, 1) = "?" OR LCASE$(RIGHT$(prompt$, 1)) = "p" THEN CALL help ELSE IF LCASE$(RIGHT$(prompt$, 1)) = "m" THEN CALL makeinst END IF ' disegna lo sfondo del programma CALL interfaccia(0) Percorso$ = "" ' inizializza il file install.lst CALL initializing(Percorso$) IF RIGHT$(Percorso$, 1) <> "\" THEN Percorso$ = Percorso$ + "\" IF MID$(variabile$(2), 2, 1) = ":" THEN variabile$(2) = RIGHT$(variabile$(2), LEN(variabile$(2)) - 2) END IF IF LEFT$(variabile$(2), 1) = "\" THEN variabile$(2) = RIGHT$(variabile$(2), LEN(variabile$(2)) - 1) END IF ' Visualizzazione del file di testo esterno IF variabile$(2) <> "none" THEN IF existfile(Percorso$ + variabile$(2)) THEN CALL VisualizzaTestoEsterno(Percorso$ + variabile$(2)) ELSE CALL interfaccia(0) CALL messaggi("File " + LEFT$(Percorso$ + variabile$(2), 50) + " non trovato!") CALL messaggiy("Impossibile visualizzare il contenuto del file di testo ASCII", 15) 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 fineprg END IF END IF esci = 0 ' imposta il disco di installazione ' disegna lo sfondo del programma CALL interfaccia(0) CALL messaggiy("Disco destinazione -- premi INVIO per proseguire -- ESC per uscire", 6) CALL inputmess("In quale disco vuoi installare (Inserire Lettera) ", 2) DO diskinst$ = INKEY$ IF diskinst$ <> "" THEN esci = 1 LOOP UNTIL esci = 1 IF diskinst$ = CHR$(13) THEN diskinst$ = "C:" ELSEIF diskinst$ = CHR$(27) THEN CALL fineprg ELSE diskinst$ = LEFT$(diskinst$, 1) + ":" END IF CALL interfaccia(0) CALL messaggiy("Disco destinazione: " + diskinst$, 6) ' controlla se il disco destinazione esiste IF existdisk!(diskinst$) = 1 THEN ' ridisegna lo sfondo del programma CALL interfaccia(0) CALL messaggiy("Disco destinazione: " + diskinst$, 6) ELSE ' se il disco non esiste non procede CALL interfaccia(0) CALL messaggi("Disco non valido -- Impossibile continuare") CALL fineprg END IF ' controlla se sul disco destinazione si pu• scrivere OPEN diskinst$ + "uda_temp.$$$" FOR OUTPUT AS #107 CLOSE #107 KILL diskinst$ + "uda_temp.$$$" 'controlla se lo spazio disponibile su disco e sufficiente spacediskre = VAL(variabile$(3)) diskinst$ = LEFT$(diskinst$, 2) 'titolo$ = LEFT$(variabile$(4), 50) titolo$ = variabile$(4) IF titolo$ <> "none" THEN CALL messaggiy(titolo$, 6) IF variabile$(3) <> "none" THEN CALL messaggi("Check-up del disco " + UCASE$(diskinst$)) spazio! = spacedisk!(diskinst$, spacediskre) IF spazio! = 0 THEN CALL interfaccia(1) ' se il disco non Š sufficientemente capiente IF spacediskre < 1000000 THEN misura$ = "KByte" spacediskre = spacediskre / 1000 ELSEIF spacediskre < 1000000000 THEN misura$ = "MByte" spacediskre = spacediskre / 1000000 ELSE misura$ = "GByte" spacediskre = spacediskre / 1000000000 END IF CALL messaggi("Disco " + UCASE$(diskinst$) + " difettoso o spazio insufficiente -- Sono richiesti" + STR$(INT(spacediskre)) + " " + misura$) CALL fineprg ELSEIF spazio! = -1 THEN CALL interfaccia(1) CALL inputmess("Impossibile eseguire un check-up del disco! Continuare (s/N)", 1) continuare$ = INPUT$(1) IF UCASE$(continuare$) <> "S" THEN CALL fineprg END IF END IF END IF dirinst$ = variabile$(1) CALL messaggiy("Premere INVIO per confermare oppure specificare il percorso.", 16) CALL messaggiy("La Directory di installazione di default Š " + RIGHT$(dirinst$, 35), 13) CALL inputmess("", 75) INPUT ; dirinst$ IF dirinst$ = "" THEN dirinst$ = variabile$(1) ELSE IF MID$(dirinst$, 2, 1) = ":" THEN dirinst$ = RIGHT$(dirinst$, LEN(dirinst$) - 2) END IF IF LEFT$(dirinst$, 1) <> "\" THEN dirinst$ = "\" + dirinst$ END IF END IF ' Per compatibilit… con il comando MKDIR di MS-DOS 6.x e successiva Š ' necessario che non siano state inserite directory con nomi contenenti ' spazi. Nell'eventualit… verr… troncato il nome al primo spazio riscontrato. FOR ciclo = 1 TO LEN(dirinst$) IF MID$(dirinst$, ciclo, 1) = " " AND Windows95Detected = 0 THEN dirinst$ = MID$(dirinst$, 1, ciclo - 1) ciclo = LEN(dirinst$) CALL interfaccia(1) CALL messaggi("Attenzione! Il percorso Š stato troncato a " + RIGHT$(dirinst$, 35)) CALL Pausa(0) END IF NEXT ciclo ' ridisegna lo sfondo del programma CALL interfaccia(0) IF titolo$ <> "none" THEN CALL messaggiy(titolo$, 6) ' crea la directory di installazione 'Imposta la directory corrente(quella di installazione) CALL interfaccia(2) CALL messaggi("Inizializzazione del disco " + UCASE$(diskinst$)) CALL creadir(diskinst$ + dirinst$) IF existdir(diskinst$ + dirinst$) = 0 THEN CALL interfaccia(0) CALL messaggi("Attenzione!! Directory di installazione non valida: " + dirinst$) CALL fineprg END IF IF Windows95Detected = 0 THEN dirinst$ = CHR$(34) + RIGHT$(dirinst$, LEN(dirinst$) - 1) + CHR$(34) ' Scrive sul file UINST.BAT la directory di installazione CALL interfaccia(0) OPEN "C:\UINST.BAT" FOR OUTPUT AS #20 PRINT #20, "@ECHO OFF" PRINT #20, diskinst$ PRINT #20, "CD\" + RIGHT$(dirinst$, LEN(dirinst$) - 1) CLOSE ELSE ' Scrive sul file UINST.BAT la directory di installazione CALL interfaccia(0) OPEN "C:\UINST.BAT" FOR OUTPUT AS #20 PRINT #20, "@ECHO OFF" PRINT #20, diskinst$ PRINT #20, "CD" + CHR$(34) + dirinst$ + CHR$(34) CLOSE END IF ' Sostituzione della variabile _DirInst$ IF Windows95Detected = 0 THEN CALL InsertVariableDirInst(diskinst$ + dirinst$) ELSE CALL InsertVariableDirInst(CHR$(34) + diskinst$ + "\" + RIGHT$(dirinst$, LEN(dirinst$) - 1)) END IF ' Sostituzione della variabile _DirSorg$ CALL InsertVariableDirSorg(LEFT$(Percorso$, LEN(Percorso$) - 1)) ' inizia il ciclo di inserimento dischi e copia dei files DiscoCorrente = 1 FOR ciclo = 5 TO numerovariabili% IF MID$(variabile$(ciclo), 3, 1) = ">" THEN ' Version 2.0 ' Per qualche ragione ignota, nella release precedente, ' veniva inizializzata la variabile DiscoCorrente allo ' stesso volore di DiscoSuccessivo; nella R2.0 viene ' assegnata sempre a 1. ' DiscoCorrente = VAL(LEFT$(variabile$(ciclo), 2)) DiscoSuccessivo = VAL(LEFT$(variabile$(ciclo), 2)) ciclo = numerovariabili% END IF NEXT ciclo IF titolo$ <> "none" THEN CALL messaggiy(titolo$, 6) FOR ciclo = 5 TO numerovariabili% ' CALL interfaccia(3) IF MID$(variabile$(ciclo), 3, 1) = ">" THEN IF DiscoSuccessivo <> DiscoCorrente THEN CALL interfaccia(1) CALL messaggi("Inserire il" + STR$(DiscoSuccessivo) + "ř disco e Premere INVIO per continuare o ESC per terminare") CALL Beeper(3) tastopremuto$ = UCASE$(INPUT$(1)) IF tastopremuto$ = CHR$(27) THEN CALL fineprg DiscoCorrente = DiscoSuccessivo CALL interfaccia(0) IF titolo$ <> "none" THEN CALL messaggiy(titolo$, 6) END IF 'controllo del file lunghezza = LEN(variabile$(ciclo)) ' toglie l'intestazione della stringa dove Š contenuto il numero del disco filesorg$ = RIGHT$(variabile$(ciclo), lunghezza - 3) IF RIGHT$(Percorso$, 1) = "\" AND LEFT$(filesorg$, 1) = "\" THEN filesorg$ = Percorso$ + RIGHT$(filesorg$, lunghezza - 4) END IF IF Percorso$ = "" AND LEFT$(filesorg$, 1) = "\" THEN filesorg$ = RIGHT$(filesorg$, lunghezza - 1) END IF IF MID$(filesorg$, 2, 1) <> ":" THEN filesorg$ = Percorso$ + filesorg$ END IF IF bytefile(filesorg$) = 0 THEN CALL interfaccia(0) ' ridisegna lo sfondo del programma IF titolo$ <> "none" THEN CALL messaggiy(titolo$, 6) CALL messaggiy("File " + LEFT$(filesorg$, 32) + " non trovato -- Disco errato!", 10) DiscoCorrente = DiscoCorrente - 1 CALL messaggiy("Premere INVIO per continuare o ESC per saltare il file non trovato", 15) tastopremuto$ = UCASE$(INPUT$(1)) IF tastopremuto$ = CHR$(13) THEN ciclo = ciclo - 1 ELSEIF tastopremuto$ = CHR$(27) THEN IF ciclo + 1 <= numerovariabili% THEN IF MID$(variabile$(ciclo + 1), 3, 1) = ">" THEN DiscoSuccessivo = VAL(LEFT$(variabile$(ciclo + 1), 2)) END IF END IF END IF CALL interfaccia(1) IF titolo$ <> "none" THEN CALL messaggiy(titolo$, 6) ELSE ' copia il file nella directory di installazione CALL copiafile(filesorg$) IF ciclo + 1 <= numerovariabili% THEN IF MID$(variabile$(ciclo + 1), 3, 1) = ">" THEN DiscoSuccessivo = VAL(LEFT$(variabile$(ciclo + 1), 2)) END IF END IF END IF ELSE IF LEFT$(variabile$(ciclo), 1) <> CHR$(124) AND LEFT$(variabile$(ciclo), 1) <> CHR$(59) THEN IF MID$(variabile$(ciclo), 3, 1) <> ">" THEN CALL interfaccia(0) CALL messaggiy("Probabile errore di sintassi nel file INSTALL.LST alla riga" + STR$(ciclo) + " di" + STR$(numerovariabili%) + ".", 10) CALL fineprg END IF END IF IF LEFT$(variabile$(ciclo), 1) = ";" THEN IF ciclo + 1 <= numerovariabili% THEN IF MID$(variabile$(ciclo + 1), 3, 1) = ">" THEN DiscoSuccessivo = VAL(LEFT$(variabile$(ciclo + 1), 2)) END IF END IF ELSEIF MID$(variabile$(ciclo), 2, 1) = "$" THEN ' Variazione della Release 2.0 ' E' stata introdotta la possibilit… di Scrivere o Leggere ' all'interno di file, in modo da Impostare Variabili d'Ambiente o ' similari, come la path, i SET, ecc.. ELSE IF ciclo + 1 <= numerovariabili% THEN IF MID$(variabile$(ciclo + 1), 3, 1) = ">" THEN DiscoSuccessivo = VAL(LEFT$(variabile$(ciclo + 1), 2)) END IF END IF lunghezza = LEN(variabile$(ciclo)) IF MID$(variabile$(ciclo), 2, 1) = ">" THEN comando$ = RIGHT$(variabile$(ciclo), lunghezza - 2) ELSE comando$ = RIGHT$(variabile$(ciclo), lunghezza - 1) END IF IF MID$(variabile$(ciclo), 2, 1) <> ">" THEN CALL messaggiy("Lancio procedura: " + comando$, 10) ELSE CALL messaggiy("Procedura esterna in corso. Attendere prego.", 10) comando$ = comando$ + ">nul" END IF SHELL comando$ END IF END IF NEXT ciclo CALL fineprg SUB Beeper (NumBeep AS INTEGER) FOR x = 1 TO NumBeep SOUND 100, 2 SOUND 200, 2 SOUND 400, 2 NEXT x END SUB FUNCTION bytefile! (nomefile$) REM viene controllato se il file esiste, e di quanti byte Š byte = 0 IF existfile(nomefile$) = 0 THEN bytefile! = 0 EXIT FUNCTION END IF FOR ciclo = 1 TO LEN(nomefile$) IF MID$(nomefile$, ciclo, 1) = " " AND Windows95Detected = 1 THEN ciclo = LEN(nomefile$) IF LEFT$(nomefile$, 1) <> CHR$(34) AND RIGHT$(nomefile$, 1) <> CHR$(34) THEN nomefile$ = CHR$(34) + nomefile$ + CHR$(34) END IF END IF NEXT ciclo SHELL "dir " + nomefile$ + ">c:\uda_temp.$$$" IF ErroreNomeFile = 1 THEN ErroreNomeFile = 0 IF LEFT$(NomeDelFile$, 1) = CHR$(34) THEN SHELL "dir " + LEFT$(nomefile$, 100) + "*" + CHR$(34) + ">c:\uda_temp.$$$" ELSE SHELL "dir " + LEFT$(nomefile$, 100) + "*" + ">c:\uda_temp.$$$" END IF END IF OPEN "c:\uda_temp.$$$" FOR INPUT AS #100 FOR riga = 1 TO 5 IF EOF(100) THEN bytefile! = 0 CLOSE #100 EXIT FUNCTION ELSE LINE INPUT #100, bytedelfile$ END IF NEXT riga bytefile! = 1 byte$ = MID$(bytedelfile$, 18, 9) byte = VAL(MID$(bytedelfile$, 18, 1) + MID$(bytedelfile$, 20, 3) + MID$(bytedelfile$, 24, 3)) ' controllo di un eventuale errore: se byte Š uguale a 0 IF byte = 0 THEN IF NOT EOF(100) THEN LINE INPUT #100, bytedelfile$ byte$ = MID$(bytedelfile$, 18, 9) byte = VAL(MID$(bytedelfile$, 18, 1) + MID$(bytedelfile$, 20, 3) + MID$(bytedelfile$, 24, 3)) END IF CLOSE #100 END FUNCTION SUB copiafile (filesorg$) ' copia un file dal disco di installazione a - dirinst$ - per - byte - byte ' il controllo del file Š gi… stato eseguito ' dimensiona il vettore di spostamento DIM FileDestinazione AS STRING ' V.2.1 - Identifica il solo Nome del fie Destinazione per la verifica. CALL interfaccia(3) IF LEN(filesorg$) + LEN(STR$(byte)) > 35 THEN CALL messaggiy("copia di " + LEFT$(filesorg$, 20) + "...." + RIGHT$(filesorg$, 40) + " per " + STR$(byte) + " byte", 10) ELSE CALL messaggiy("copia di " + filesorg$ + " per " + STR$(byte) + " byte", 10) END IF CALL messaggiy("Attendere che l'operazione sia terminata o Premere ESC per Uscire ", 15) IF INKEY$ = CHR$(27) THEN CALL interfaccia(1) CALL messaggiy("Installazione interrotta dall'utente!", 10) CALL fineprg END IF IF RIGHT$(filesorg$, 1) <> "\" OR RIGHT$(filesorg$, 2) = "\" + CHR$(34) THEN SHELL "COPY " + filesorg$ + " /V>NUL" ELSE CALL interfaccia(1) CALL messaggiy("Impossibile Copiare un'intera directory! Specificare un solo file.", 10) CALL messaggiy("Verificare che nel file INSTALL.LST non siano presenti errori.", 15) CALL Pausa(0) END IF IF ErroreNomeFile = 1 THEN ErroreNomeFile = 0 IF LEFT$(filesorg$, 1) = CHR$(34) THEN SHELL "COPY " + LEFT$(filesorg$, 100) + "*" + CHR$(34) + " /V>NUL" ELSE SHELL "COPY " + LEFT$(filesorg$, 100) + "*" + " /V>NUL" END IF ELSE ' Version 2.20 - Verifica che il file sia stato effettivamente ' copiato,altrimenti, segnala opportuno messaggio di errore. ' La procedura viene eseguita solo nel caso il percorso non superi ' i 100 caratteri per evitare incompatibilit…. ' Prima di procedere Š necessario intercettare il solo nome del file; ' E' anche necesario eliminare eventuali " per evitare errori. IF RIGHT$(filesorg$, 1) = CHR$(34) THEN filesorg$ = LEFT$(filesorg$, LEN(filesorg$) - 1) FOR x = 1 TO LEN(filesorg$) IF MID$(filesorg$, x, 1) = "\" THEN FileDestinazione = RIGHT$(filesorg$, LEN(filesorg$) - x) NEXT x IF existfile(FileDestinazione) = 0 THEN CALL interfaccia(0) CALL messaggi("File " + LEFT$(FileDestinazione, 50) + " non trovato!") CALL messaggiy("Impossibile copiare il file - Verificare che il disco sia Accessibile", 15) COLOR 14, 5 CALL Beeper(3) 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 fineprg CALL interfaccia(1) END IF END IF END SUB SUB cornice (rigai, colonnai, rigaf, colonnaf) colonnaf = colonnaf + colonnai ' riquadro IF rigai < 1 THEN rigai = 1 IF rigaf > 23 THEN rigaf = 23 IF colonnai < 1 THEN colonnai = 1 IF colonnaf > 78 THEN colonnaf = 78 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 creadir (PATH$) ' crea la directory continuare$ = "n" directoricreata% = 0 DIM DirectoryCompleta$ DIM DirectoryTrovata$ DirectoryTrovata$ = "" DirectoryCompleta$ = "" disco$ = LEFT$(PATH$, 2) + "\" Directory$ = RIGHT$(PATH$, LEN(PATH$) - 3) + "\" ' controllo dell' esistenza della directory SHELL disco$ SHELL "CD\" ' questa routine crea una directory a patto che non esista ' Š necessario che questo comando venga lanciato con il disco in oggetto ' gi… corrente FOR puntatore% = 1 TO LEN(Directory$) IF MID$(Directory$, puntatore%, 1) <> "\" THEN directorycreata% = 0 DirectoryTrovata$ = DirectoryTrovata$ + MID$(Directory$, puntatore%, 1) ELSE directoricreata% = 1 SHELL "dir /b>c:\uda_temp.$$$" OPEN "c:\uda_temp.$$$" FOR INPUT AS #100 directorycreata% = 0 IF EOF(100) THEN IF Windows95Detected = 1 THEN DirectoryTrovata$ = CHR$(34) + DirectoryTrovata$ + CHR$(34) SHELL "MD " + DirectoryTrovata$ SHELL "CD " + DirectoryTrovata$ DirectoryCompleta$ = DirectoryCompleta$ + "\" + DirectoryTrovata$ DirectoryTrovata$ = "" directorycreata% = 1 ELSE DirectoryCompleta$ = DirectoryCompleta$ + "\" + DirectoryTrovata$ DO LINE INPUT #100, Stringa$ IF UCASE$(Stringa$) = UCASE$(DirectoryTrovata$) THEN IF existdir(LEFT$(disco$, 2) + DirectoryCompleta$) = 1 THEN ' disegna lo sfondo del programma IF LEN(DirectoryTrovata$) > 27 THEN CALL inputmess("La directory " + LEFT$(UCASE$(DirectoryTrovata$), 24) + "... esiste gi…!! Continuare (S/n)", 1) ELSE CALL inputmess("La directory " + UCASE$(DirectoryTrovata$) + " esiste gi…!! Continuare (S/n)", 1) END IF continuare$ = INPUT$(1) IF continuare$ = CHR$(110) OR continuare$ = CHR$(78) THEN CALL fineprg END IF CALL interfaccia(3) CALL messaggi("Inizializzazione del percorso " + UCASE$(PATH$)) IF Windows95Detected = 1 THEN DirectoryTrovata$ = CHR$(34) + DirectoryTrovata$ + CHR$(34) END IF SHELL "CD " + DirectoryTrovata$ directorycreata% = 1 ELSE CALL interfaccia(0) CALL messaggiy("Attenzione!! Esiste un file con lo stesso nome della directory.", 6) CALL messaggiy("Non posso continuare", 10) CALL fineprg END IF END IF LOOP UNTIL EOF(100) CLOSE #100 IF directorycreata% = 0 THEN IF Windows95Detected = 1 THEN DirectoryTrovata$ = CHR$(34) + DirectoryTrovata$ + CHR$(34) SHELL "MD " + DirectoryTrovata$ SHELL "CD " + DirectoryTrovata$ CALL interfaccia(0) DirectoryTrovata$ = "" ELSE DirectoryTrovata$ = "" END IF END IF END IF CLOSE #100 NEXT puntatore% END SUB FUNCTION existdir (nomedelladirectory$) ' controllo dell' esistenza della directory SHELL "dir \ /AD /S /B>c:\uda_temp.dir" OPEN "c:\uda_temp.dir" FOR INPUT AS #101 IF EOF(101) THEN existdir = 0 CLOSE #101 EXIT FUNCTION END IF DO LINE INPUT #101, Stringa$ IF UCASE$(Stringa$) = UCASE$(nomedelladirectory$) THEN existdir = 1 CLOSE #101 EXIT FUNCTION END IF LOOP UNTIL EOF(101) CLOSE #101 existdir = 0 END FUNCTION FUNCTION existdisk! (nomedisk$) nomedisk$ = nomedisk$ + "\" SHELL "dir " + nomedisk$ + ">c:\uda_temp.$$$" OPEN "c:\uda_temp.$$$" FOR INPUT AS #100 IF EOF(100) THEN CLOSE #100 existdisk! = 0 CLOSE #100 EXIT FUNCTION ELSE CLOSE #100 existdisk! = 1 EXIT FUNCTION END IF END FUNCTION FUNCTION existfile! (NomeDelFile$) FOR ciclo = 1 TO LEN(NomeDelFile$) IF MID$(NomeDelFile$, ciclo, 1) = " " AND Windows95Detected = 1 THEN ciclo = LEN(NomeDelFile$) IF LEFT$(NomeDelFile$, 1) <> CHR$(34) AND RIGHT$(NomeDelFile$, 1) <> CHR$(34) THEN NomeDelFile$ = CHR$(34) + NomeDelFile$ + CHR$(34) END IF END IF NEXT ciclo SHELL "dir " + NomeDelFile$ + " /B>c:\uda_temp.$$$" IF ErroreNomeFile = 1 THEN ErroreNomeFile = 0 IF LEFT$(NomeDelFile$, 1) = CHR$(34) THEN SHELL "dir " + LEFT$(NomeDelFile$, 98) + "*" + CHR$(34) + " /B>c:\uda_temp.$$$" ELSE SHELL "dir " + LEFT$(NomeDelFile$, 98) + "*" + " /B>c:\uda_temp.$$$" END IF END IF OPEN "c:\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$(NomeDelFile$, 1) = CHR$(34) THEN existfile! = 2 ELSE existfile! = 1 END IF CLOSE #100 END IF END FUNCTION SUB fineprg ' fine programma CLOSE ' Elimina eventuali files temporanei SHELL "dir *. /b>c:\uda_temp.$$$" SHELL "dir *. /b>c:\uda_temp.chk" SHELL "dir *. /b>c:\uda_temp.dir" SHELL "dir *. /b>c:\uda_temp.fil" SHELL "dir *. /b>c:\uda_temp.lst" SHELL "del c:\uda_temp.$$$>NUL" SHELL "DEL c:\uda_temp.chk>NUL" SHELL "DEL c:\uda_temp.dir>NUL" SHELL "DEL c:\uda_temp.fil>NUL" SHELL "DEL c:\uda_temp.lst>NUL" 'CALL interfaccia(0) CALL messaggiy("Installazione terminata -- UDA'Software Copyright 1998,INC", 14) CALL messaggiy("Premere INVIO per uscire", 19) DO LOOP UNTIL INKEY$ = CHR$(13) COLOR 7, 0 CLS END END SUB SUB help CALL interfaccia(0) COLOR 14, 6 LOCATE 6, 13: PRINT "Install.exe Š un programma utile per creare dischi di" LOCATE 7, 13: PRINT "installazione in modo facile e rapido. " LOCATE 8, 13: PRINT "Per creare i dischi di installazione Š necessario " LOCATE 9, 13: PRINT "procedere come segue:" LOCATE 10, 13: PRINT "" LOCATE 11, 13: PRINT "1- Valutare quanti dischetti occorreranno.(usando " LOCATE 12, 13: PRINT "compattatori tipo ARJ o PKZIP i file vengono compatta" LOCATE 13, 13: PRINT "ti circa del 60-70%). Sull'ultimo disco deve esserci " LOCATE 14, 13: PRINT "sufficiente spazio per copiare anche INSTALL.EXE. " LOCATE 15, 13: PRINT "3- Copiare i files che si devono installare sui " LOCATE 16, 13: PRINT " dischi facendo attenzione che sull'ultimo disco " LOCATE 17, 13: PRINT " rimanga sufficiente spazio per il file dati che " LOCATE 18, 13: PRINT " verr… creato successivamente da INSTALL.EXE ,cioŠ " LOCATE 19, 13: PRINT " INSTALL.LST (Almeno 5000 Byte). " 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 fineprg CALL interfaccia(2) COLOR 14, 6 LOCATE 6, 13: PRINT "4- inserire il dischetto dove Š contenuto INSTALL.EXE" LOCATE 7, 13: PRINT " e procedere con la precompilazione del file " LOCATE 8, 13: PRINT " INSTALL.LST ,contenente i dati per eseguire " LOCATE 9, 13: PRINT " l'installazione ,usando la seguente sintassi dal " LOCATE 10, 13: PRINT " PROMPT di MS-DOS: " LOCATE 11, 13: PRINT " install /m + [INVIO] " LOCATE 12, 13: PRINT " Il programma chieder… in successione i seguenti " LOCATE 13, 13: PRINT " input: " LOCATE 14, 13: PRINT " a) Directory di installazione di default. " LOCATE 15, 13: PRINT " All'atto dell'installazione il programma " LOCATE 16, 13: PRINT " chieder… in quale directory si vuole installare " LOCATE 17, 13: PRINT " e proporr… come default quella dichiarata. " LOCATE 18, 13: PRINT " L'utente potr… per• inserirne una a sua scelta " LOCATE 19, 13: PRINT " purchŠ sia corretta. Se quest'ultima dovesse gi…" 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 fineprg CALL interfaccia(2) COLOR 14, 6 LOCATE 6, 13: PRINT " esistere ,lo segnaler… e chieder… se vuole " LOCATE 7, 13: PRINT " proseguire (il programma accetta anche " LOCATE 8, 13: PRINT " subdirectory), altrimenti nel malaugurato caso " LOCATE 9, 13: PRINT " che esista un file avente lo stesso nome della " LOCATE 10, 13: PRINT " directory di installazione ,il programma lo " LOCATE 11, 13: PRINT " segnaler… abortendo. " LOCATE 12, 13: PRINT " La directory di default viene scritta nella " LOCATE 13, 13: PRINT " prima linea del file INSTALL.LST " LOCATE 14, 13: PRINT " " LOCATE 15, 13: PRINT " b) Il file di testo da visualizzare. " LOCATE 16, 13: PRINT " Prima di chiedere qualsiasi cosa INSTALL " LOCATE 17, 13: PRINT " visualizzer… il file specificato, che si deve " LOCATE 18, 13: PRINT " trovare nel percorso indicato. " LOCATE 19, 13: PRINT " Il file deve contenere esclusivamente caratteri" 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 fineprg CALL interfaccia(2) COLOR 14, 6 LOCATE 6, 13: PRINT " ASCII, altrimenti non Š garantita una corretta " LOCATE 7, 13: PRINT " visualizzazione del suo contenuto. " LOCATE 8, 13: PRINT " Visualizzare un testo esterno Š utile per dare " LOCATE 9, 13: PRINT " consigli all'utente prima di installare. " LOCATE 10, 13: PRINT " " LOCATE 11, 13: PRINT " c) Il titolo dell'installazione. " LOCATE 12, 13: PRINT " Si tratta di una stringa che compare a monitor " LOCATE 13, 13: PRINT " durante tutta la fase dell'installazione. " LOCATE 14, 13: PRINT " Il titolo viene scritto nella terza riga del " LOCATE 15, 13: PRINT " file INSTALL.LST (INVIO - none - per nessuno) " LOCATE 16, 13: PRINT " " LOCATE 17, 13: PRINT " d) Lo spazio disponibile su disco. " LOCATE 18, 13: PRINT " Si tratta di un numero espresso in byte ,che " LOCATE 19, 13: PRINT " viene scritto nella quarta riga (none per " 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 fineprg CALL interfaccia(2) COLOR 14, 6 LOCATE 6, 13: PRINT " nessuno). " LOCATE 7, 13: PRINT " Se si vuole che all'atto dell'installazione " LOCATE 8, 13: PRINT " venga controllato ,ovviamente prima di " LOCATE 9, 13: PRINT " procedere alla copia ,se il disco destinazione " LOCATE 10, 13: PRINT " Š esente da difetti (ad esempio cluster persi) " LOCATE 11, 13: PRINT " e spazio sufficiente per contenere i file " LOCATE 12, 13: PRINT " che verranno copiati ,Š necessrio inserire " LOCATE 13, 13: PRINT " il quantitativo di spazio espresso in byte. " LOCATE 14, 13: PRINT " Se alla domanda: " LOCATE 15, 13: PRINT " Vuoi includere tutti i files contenuti nella " LOCATE 16, 13: PRINT " directory corrente e in tutte le subdirectory? " LOCATE 17, 13: PRINT " si risponde SI verr… proposto un numero " LOCATE 18, 13: PRINT " corrispondente alla somma delle dimensioni di " LOCATE 19, 13: PRINT " tutti i files contenuti nella directory " 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 fineprg CALL interfaccia(2) COLOR 14, 6 LOCATE 6, 13: PRINT " corrente e in tutte le subdirectory. " LOCATE 7, 13: PRINT " Se alla domanda precedente si risponde " LOCATE 8, 13: PRINT " negativamente ,non verr… proposto nessun numero." LOCATE 9, 13: PRINT " Per creare dischi di installazione in modo pi— " LOCATE 10, 13: PRINT " rapido e sicuro ,consiglio di non scegliere " LOCATE 11, 13: PRINT " quest'ultima possibilit…; " LOCATE 12, 13: PRINT " il programma chieder… se si vuole fare un' " LOCATE 13, 13: PRINT " installazione multivolume (cioŠ con pi— " LOCATE 14, 13: PRINT " dischetti) ,e quanti dischetti sono utilizzati. " LOCATE 15, 13: PRINT " In questo modo tutti i file contenuti nei " LOCATE 16, 13: PRINT " dischetti verranno copiati ,dato che INSTALL.EXE" LOCATE 17, 13: PRINT " chieder… di inserire i vari dischetti in " LOCATE 18, 13: PRINT " successione per poterne copiare il contenuto " LOCATE 19, 13: PRINT " nella directory di installazione ,e verr… " 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 fineprg CALL interfaccia(2) COLOR 14, 6 LOCATE 6, 13: PRINT " calcolato lo spazio consigliato su disco " LOCATE 7, 13: PRINT " destinazione per effettuare una corretta " LOCATE 8, 13: PRINT " installazione. " LOCATE 9, 13: PRINT " " LOCATE 10, 13: PRINT "5- Verificare che il file INSTALL.LST ,contenuto " LOCATE 11, 13: PRINT " sul primo disco sia stato compilato correttamente. " LOCATE 12, 13: PRINT " " LOCATE 13, 13: PRINT " SINTASSI DA USARE NEL FILE INSTALL.LST " LOCATE 14, 13: PRINT " " LOCATE 15, 13: PRINT "Nelle prime quattro righe devono essere scritti " LOCATE 16, 13: PRINT "rispettivamente i seguenti dati: " LOCATE 17, 13: PRINT "- Directory di installazione di default. " LOCATE 18, 13: PRINT "- File di Testo esterno. (- none - per nessuno) " LOCATE 19, 13: PRINT "- Titolo dell'installazione.(- none - per nessuno) " 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 fineprg CALL interfaccia(2) COLOR 14, 6 LOCATE 6, 13: PRINT "- Lo spazio disponibile su disco destinazione espresso" LOCATE 7, 13: PRINT " in byte. (- none - per nessun controllo) " LOCATE 8, 13: PRINT "Dalla sesta riga ,compresa ,in poi si possono avere " LOCATE 9, 13: PRINT "le seguenti varianti. " LOCATE 10, 13: PRINT "- File da copiare. - ##>nome_file_da_copiare - " LOCATE 11, 13: PRINT " ## indicano il numero del disco di installazione " LOCATE 12, 13: PRINT " dal quale copiare nome_file_da_copiare ,ad esempio: " LOCATE 13, 13: PRINT "01>\INSTALL.EXE " LOCATE 14, 13: PRINT "02>\MIOFILE.BAT " LOCATE 15, 13: PRINT "- Procedure esterne. - |procedura_esterna -" LOCATE 16, 13: PRINT " Ad esempio: " LOCATE 17, 13: PRINT "|DEL MIOFILE.* " LOCATE 18, 13: PRINT " Per far si che la procedura esterna non si manifesti" LOCATE 19, 13: PRINT " a video si pu• usare anche - |> - ,come ad esempio: " 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 fineprg CALL interfaccia(2) COLOR 14, 6 LOCATE 6, 13: PRINT "|>DEL MIOFILE.* " LOCATE 7, 13: PRINT "- Righe di commento. - ; commento -" LOCATE 8, 13: PRINT " Dopo il punto e virgola - ; - si pu• ,solo sulla " LOCATE 9, 13: PRINT " stessa riga, scrivere qualsiasi cosa. " LOCATE 10, 13: PRINT " " LOCATE 11, 13: PRINT "ESEMPIO DI FILE INSTALL.LST " LOCATE 12, 13: PRINT " " LOCATE 13, 13: PRINT "\MIADIR " LOCATE 14, 13: PRINT "MIOTESTO.TXT " LOCATE 15, 13: PRINT "Installazione del mio programma. " LOCATE 16, 13: PRINT "1000000 " LOCATE 17, 13: PRINT "01>\MIOFILE.EXE " LOCATE 18, 13: PRINT "01>\MIOFILE.TXT " LOCATE 19, 13: PRINT "|TYPE MIOFILE.TXT|MORE " 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 fineprg CALL interfaccia(2) COLOR 14, 6 LOCATE 6, 13: PRINT "|>DEL MIOFILE.TXT " LOCATE 7, 13: PRINT "02>\ALTROFIL.DAT " LOCATE 8, 13: PRINT "; Commento: l'ordine dei dischi pu• essere qualsiasi. " LOCATE 9, 13: PRINT "04>\IMMAGINE.BMP " LOCATE 10, 13: PRINT "03>\DIRETORY\IMMAGINE.TGA " LOCATE 11, 13: PRINT "++++++++++++++++++++++NOTA++++++++++++++++++++++++++++" LOCATE 12, 13: PRINT "Prima di iniziare a copiare i files nella directory " LOCATE 13, 13: PRINT "destinazione ,INSTALL.EXE provvede a scrivere un file " LOCATE 14, 13: PRINT "nella root del disco C: di nome UINST.BAT che serve, " LOCATE 15, 13: PRINT "lanciandolo, per rendere corrente la directory " LOCATE 16, 13: PRINT "destinazione in caso che durante l'installazione un " LOCATE 17, 13: PRINT "qualche comando l'abbia cambiata. Ricordo a tal " LOCATE 18, 13: PRINT "proposito che INSTALL provvede a copiare i files di " LOCATE 19, 13: PRINT "installazione nella directory corrente, che per " 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 fineprg CALL interfaccia(2) COLOR 14, 6 LOCATE 6, 13: PRINT "default Š quella impostata dall'utente. " LOCATE 7, 13: PRINT "Se dovesse sorgere la necessit… di reperire la " LOCATE 8, 13: PRINT "directory di installazione all'interno del file " LOCATE 9, 13: PRINT "INSTALL.LST, magari da passare come parametro a " LOCATE 10, 13: PRINT "qualche programma esterno, Š possibile utilizzare la " LOCATE 11, 13: PRINT "parola chiave _DirInst$. " LOCATE 12, 13: PRINT "Questa 'variabile' verr… sostituita da INSTALL all' " LOCATE 13, 13: PRINT "atto dell'installazione con il percorso completo " LOCATE 14, 13: PRINT "(disco + directory) della directory di installazione. " LOCATE 15, 13: PRINT "Per sostituire invece,allo stesso modo,il percorso del" LOCATE 16, 13: PRINT "disco sorgente, quello contenente i files da copiare, " LOCATE 17, 13: PRINT "Š necessario usare la parola chiave _DirSorg$. " LOCATE 18, 13: PRINT "" LOCATE 19, 13: PRINT "" 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 fineprg CALL interfaccia(2) COLOR 14, 6 LOCATE 6, 13: PRINT " Incompatibilit… riscontrate verso i sistemi operativi" LOCATE 7, 13: PRINT "" LOCATE 8, 13: PRINT " Nella procedura per la creazione Automatica dei " LOCATE 9, 13: PRINT "dischi di installazione (Parametro /M) vengono inclusi" LOCATE 10, 13: PRINT "nel file INSTALL.LST, anche le directory ed i files " LOCATE 11, 13: PRINT "con nomi Lunghi (Ex: Windows 95 arriva a ~250 caratt.)" LOCATE 12, 13: PRINT "causando una totale Incompatibilit… con MS-DOS 6.22 o " LOCATE 13, 13: PRINT "versione precedente. I files aventi nome di lunghezza " LOCATE 14, 13: PRINT "superiore al formato 8 + 3 o comunque contenenti spazi" LOCATE 15, 13: PRINT "verranno ignorati in fase di installazione, qualora " LOCATE 16, 13: PRINT "INSTALL.EXE dovesse ritenere il sistema operativo " LOCATE 17, 13: PRINT "corrente, incompatibile! INSTALL V2.20 rimane comunque" LOCATE 18, 13: PRINT "compatibile con Windows95 per quanto riguarda i nuovi " LOCATE 19, 13: PRINT "limiti nella creazione dei nomi di files e directory. " 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 fineprg CALL interfaccia(1) 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 "INSTALL.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 1998 " LOCATE 15, 13: PRINT "" COLOR 14, 5 LOCATE 20, 27: PRINT "Premere INVIO per continuare" DO LOOP UNTIL INKEY$ = CHR$(13) END END SUB SUB HelpWindows95 CALL interfaccia(0) COLOR 14, 6 LOCATE 6, 13: PRINT " ATTENZIONE!!! " LOCATE 7, 13: PRINT " " LOCATE 8, 13: PRINT "Il sistema operativo corrente non risulta essere: " LOCATE 9, 13: PRINT " " LOCATE 10, 13: PRINT " Windows95 - Windows95 NT - MS-DOS 7 - Nashville " LOCATE 11, 13: PRINT " " LOCATE 12, 13: PRINT "Probabilmente si tratta di MS-DOS 6.x e questo " LOCATE 13, 13: PRINT "comporta una parziale incompatibilit… con INSTALL.EXE" LOCATE 14, 13: PRINT "Non Š garantito che suddetto programma riesca a " LOCATE 15, 13: PRINT "svolgere correttamente tutte le operazioni di " LOCATE 16, 13: PRINT "installazione. Se sui dischi di installazione sono " LOCATE 17, 13: PRINT "presenti delle Directory o dei File con nomi LUNGHI " LOCATE 18, 13: PRINT "non saranno copiati nella destinazione. Per ulteriori" LOCATE 19, 13: PRINT "informazioni consultare l'help con il comando - /? -." 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 fineprg END SUB SUB initializing (Percorso$) REM inizializzazione file dati ' controlla da quante linee Š composto il file install.lst COLOR 14, 5 CLOSE IF Errore% = 1 THEN Percorso$ = PercorsoExeFile$ END IF byte = 0 IF RIGHT$(Percorso$, 1) <> "\" THEN Percorso$ = Percorso$ + "\" IF existfile!(Percorso$ + "install.lst") = 1 THEN Errore% = 1 OPEN Percorso$ + "install.lst" FOR INPUT AS #1 WHILE NOT EOF(1) LINE INPUT #1, LINEA$ numerovariabili% = numerovariabili% + 1 WEND CLOSE COLOR 14, 5: CALL cornice(8, 25, 16, 45): COLOR 14, 1 passo = numerovariabili% / 100 IF numerovariabili% < 4 THEN CALL interfaccia(0) CALL messaggi("Errore di sintassi nel file INSTALL.LST") CALL fineprg END IF REDIM variabile$(numerovariabili%) ' inizializza le variabili presenti nel file CALL cornice(11, 29, 13, 38): COLOR 14, 1 LOCATE 12, 30: PRINT "Inizializzazione INSTALL.LST " OPEN Percorso$ + "install.lst" FOR INPUT AS #1 FOR indice% = 1 TO numerovariabili% LINE INPUT #1, variabile$(indice%) byte = byte + LEN(variabile$(indice%)) IF byte >= (FRE("") - 100) THEN CALL messaggi("File troppo grande! Non posso inizializzare oltre!") CALL fineprg END IF LOCATE 12, 59: PRINT INT(indice% / passo) LOCATE 12, 63: PRINT " % " NEXT indice% CLOSE LOCATE 12, 59: PRINT "...Fatto" ELSE CALL interfaccia(0) IF Errore% = 2 THEN CALL messaggiy("Impossibile continuare! Assicurarsi dell'esistenza del file INSTALL.LST", 6) CALL messaggiy("Per informazioni digitare al prompt di MS-DOS: install /?", 10) CALL fineprg END IF Errore% = Errore% + 1 CALL messaggiy("Attenzione! File Install.lst non trovato.", 15) CALL messaggiy("Premi INVIO per accettare il disco di default", 6) CALL inputmess("Inserisci il percorso del file INSTALL.LST ", 20) INPUT Percorso$ IF Percorso$ = "" THEN Percorso$ = "A:" CALL initializing(Percorso$) ELSE IF LEN(Percorso$) = 1 THEN Percorso$ = LEFT$(Percorso$, 1) + ":" CALL initializing(Percorso$) END IF END IF IF Percorso$ = "\" THEN SHELL "DIR >c:\uda_temp.$$$" OPEN "c:\uda_temp.$$$" FOR INPUT AS #23 IF EOF(23) THEN CALL fineprg FOR riga% = 1 TO 4 LINE INPUT #23, Stringa$ NEXT riga% Percorso$ = MID$(Stringa$, 14, 3) CLOSE #23 END IF Percorso$ = UCASE$(Percorso$) END SUB SUB inputmess (MESSI$, carric) IF carric <= 1 THEN carric = 4 ELSE IF carric > 74 THEN carric = 71 IF LEN(MESSI$) + carric > 77 THEN MESSI$ = LEFT$(MESSI$, 71 - carric) + "..." NCARATTERI = LEN(MESSI$) + carric + 2 colonnainizio = 40 - (INT(NCARATTERI / 2)) COLOR 14, 1 CALL cornice(9, colonnainizio, 11, NCARATTERI) COLOR 14, 1 LOCATE 10, colonnainizio + 1: PRINT MESSI$ COLOR 14, 1 LOCATE 10, NCARATTERI - carric - 1: PRINT STRING$(carric, 176) LOCATE 10, NCARATTERI - carric - 1 COLOR 14, 2 END SUB SUB InsertVariableDirInst (Directory$) FOR ciclo = 5 TO numerovariabili% IF LEN(variabile$(ciclo)) > 9 THEN FOR x = 1 TO LEN(variabile$(ciclo)) - 8 IF UCASE$(MID$(variabile$(ciclo), x, 9)) = "_DIRINST$" THEN IF (LEN(variabile$(ciclo)) - 9 - x) > 0 THEN Stringa$ = LEFT$(variabile$(ciclo), x - 1) + Directory$ + RIGHT$(variabile$(ciclo), LEN(variabile$(ciclo)) - 8 - x) ELSE Stringa$ = LEFT$(variabile$(ciclo), x - 1) + Directory$ END IF IF ErroreNomeFile = 1 THEN CALL fineprg variabile$(ciclo) = Stringa$ END IF NEXT x END IF NEXT ciclo END SUB SUB InsertVariableDirSorg (Directory$) FOR ciclo = 5 TO numerovariabili% IF LEN(variabile$(ciclo)) > 9 THEN FOR x = 1 TO LEN(variabile$(ciclo)) - 8 IF UCASE$(MID$(variabile$(ciclo), x, 9)) = "_DIRSORG$" THEN IF (LEN(variabile$(ciclo)) - 9 - x) > 0 THEN Stringa$ = LEFT$(variabile$(ciclo), x - 1) + Directory$ + RIGHT$(variabile$(ciclo), LEN(variabile$(ciclo)) - 8 - x) ELSE Stringa$ = LEFT$(variabile$(ciclo), x - 1) + Directory$ END IF IF ErroreNomeFile = 1 THEN CALL fineprg variabile$(ciclo) = Stringa$ END IF NEXT x END IF NEXT ciclo END SUB SUB interfaccia (tipointerfaccia!) IF tipointerfaccia = 0 THEN COLOR 14, 0 CALL SOTTOFONDO 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 "INSTALL.EXE V.2.20 -- Programma di installazione by UDA'Software" PRINT ELSEIF tipointerfaccia = 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 "INSTALL.EXE V.2.20 -- Programma di installazione by UDA'Software" PRINT ELSEIF tipointerfaccia = 2 THEN COLOR 15, 3 FOR tipointerfaccia! = 5 TO 19 LOCATE tipointerfaccia!, 3: PRINT " " NEXT tipointerfaccia! COLOR 14, 1 PRINT ELSEIF tipointerfaccia = 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 makeinst DIM Rapporto AS INTEGER DIM posiz AS INTEGER DIM FineUguaglianza AS INTEGER ' Puntatore che delimita l'ultimo carattere uguale del nome file e della root DIM NomeProgramma AS STRING DIM PercorsoRoot AS STRING DIM BiteTotali AS DOUBLE REM Correzzione della release 1.9k ' Per evitare la concatenazione dei percorsi in fase di installazione, a ' causa del fatto che viene sommato il percorso del programma di ' installazione con quello del file da installare dovuto ad una errata ' compilazione (precedente alla versione k, ovvero alla 1.9j) del file ' INSTALL.LST, verra calcolata l'attuale posizione del file programma di ' installazione stesso. ' Come prima cosa Š necessario intercettare il nome del programma che per ' default Š INSTALL.EXE, ma che per ovvi motivi, potrebbe essere anche ' diverso, poi verificare l'attuale posizione di quest'ultimo scannando il ' disco e non prendendo il percorso dalla stessa routine che restituisce il ' nome del programma a causa della possibile incompatibilit… tra il formato ' 8+3 e quello di un eventuale formato compatibile Windows© 95. NomeProgramma = NomeExeFile$ IF existfile("c:\uda_temp.ex$") THEN SHELL "DEL c:\uda_temp.ex$" SHELL "DIR " + NomeProgramma + "/s/b>c:\uda_temp.ex$" OPEN "c:\uda_temp.ex$" FOR INPUT AS #1 IF EOF(1) THEN CALL messaggiy("Attenzione! File " + NomeProgramma + " non trovato", 10): CALL fineprg ELSE INPUT #1, PercorsoRoot posiz = LEN(PercorsoRoot) FOR puntatore! = 1 TO posiz IF MID$(PercorsoRoot, puntatore!, 1) = "\" THEN posiz = puntatore! NEXT puntatore! NomeProgramma = RIGHT$(PercorsoRoot, LEN(PercorsoRoot) - posiz) PercorsoRoot = LEFT$(PercorsoRoot, posiz) END IF CLOSE #1 SHELL "DEL c:\uda_temp.ex$" CALL interfaccia(0) CALL messaggiy("Directory di default in cui verranno copiati i file di installazione", 13) CALL messaggiy("Il Percorso pu• essere cambiato in fase di installazione dall'utente.", 17) CALL inputmess("Directory ", 60) INPUT Directory$ IF Directory$ = "" THEN CALL messaggiy("Attenzione! Immissione non valida", 12): CALL fineprg IF LEFT$(Directory$, 1) <> "\" THEN Directory$ = "\" + Directory$ caratteri% = LEN(Directory$) FOR x = 2 TO caratteri% IF MID$(Directory$, x, 1) = ":" THEN CALL messaggiy("Attenzione! Immissione non valida -- Non ammesso Drive (c:,d:,ecc) ", 12): CALL fineprg NEXT x CALL interfaccia(0) CALL messaggiy("Il file di testo da visualizzare a inizio installazione - INVIO per nessuno", 13) CALL inputmess("Nome del File ", 30) INPUT NomeDelFileDiTestoEsterno$ IF NomeDelFileDiTestoEsterno$ = "" THEN NomeDelFileDiTestoEsterno$ = "none" ELSE IF MID$(NomeDelFileDiTestoEsterno$, 2, 1) = ":" THEN NomeDelFileDiTestoEsterno$ = RIGHT$(NomeDelFileDiTestoEsterno$, LEN(NomeDelFileDiTestoEsterno$) - 2) END IF END IF CALL interfaccia(0) CALL messaggiy("Il titolo dell'installazione - INVIO per nessuna", 13) CALL inputmess("Titolo ", 69) INPUT titolo$ ' titolo$ = LEFT$(titolo$, 69) IF titolo$ = "" THEN titolo$ = "none" CALL interfaccia(0) CALL messaggiy("... e in tutte le subdirectory in Automatico ?", 18) CALL messaggiy("Vuoi includere i file contenuti nella directory corrente...", 15) CALL inputmess("(S/n)", 1) risposta$ = INPUT$(1) IF risposta$ = CHR$(27) THEN CALL fineprg BiteTotali = 0 IF UCASE$(risposta$) = "N" THEN CALL interfaccia(0) CALL messaggiy("Lo spazio su disco necessario per installare - INVIO per nessuno", 13) CALL inputmess("Dimensione (solo numerica in byte) ", 30) INPUT spazio$ caratteri% = LEN(spazio$) FOR x = 2 TO caratteri% IF ASC(MID$(spazio$, x, 1)) < 48 OR ASC(MID$(spazio$, x, 1)) > 57 THEN CALL messaggiy("Attenzione! Immissione non valida -- Non ammessi caratteri", 12): CALL fineprg NEXT x IF spazio$ = "" THEN spazio$ = "none" OPEN "install.lst" FOR OUTPUT AS #2 PRINT #2, Directory$ PRINT #2, NomeDelFileDiTestoEsterno$ PRINT #2, spazio$ PRINT #2, titolo$ PRINT #2, "; Inizio Sezione Modificabile dall'utente {" ELSE DIM trovatadirectory AS INTEGER trovatadirectory = 0 CALL interfaccia(0) CALL messaggiy("Inserire quanti dischetti devo controllare (da 1 a 99)", 15) CALL inputmess("Numero dischetti di installazione <1>", 4) INPUT numerodischi! IF numerodischi! = 0 THEN numerodischi! = 1 IF numerodischi! < 1 OR numerodischi! > 99 THEN CALL messaggiy("Numero errato|", 10) CALL fineprg END IF FOR disco! = 1 TO numerodischi! CALL interfaccia(2) CALL messaggiy("Inserire il disco " + STR$(disco!) + " di " + STR$(numerodischi!) + ".", 15) COLOR 14, 5 LOCATE 20, 17 PRINT "Premere INVIO per continuare o ESC per uscire" tastopremuto$ = UCASE$(INPUT$(1)) IF tastopremuto$ = CHR$(27) THEN IF existfile("c:\uda_temp.dir") THEN SHELL "DEL c:\uda_temp.dir>NUL" IF existfile("c:\uda_temp.fil") THEN SHELL "DEL c:\uda_temp.fil>NUL" CALL fineprg END IF REM Correzzione della release 1.9k ' Prima di effettuare la scansione del disco corrente Š ' opportuno eliminare il file INSTALL.LST per evitare che ' venga incluso in se stesso. IF existfile("INSTALL.LST") THEN SHELL "DEL INSTALL.LST>NUL" CALL messaggiy("Scansione del disco corrente.", 6) IF existfile("c:\uda_temp.fil") THEN SHELL "DEL c:\uda_temp.fil" SHELL "DIR *.*/s/b/on>c:\uda_temp.fil" SHELL "DIR *.*/s/b/ad/on>c:\uda_temp.dir" CLOSE OPEN "c:\uda_temp.fil" FOR INPUT AS #1 fine = 0 DO OPEN "c:\uda_temp.dir" FOR INPUT AS #2 IF EOF(1) THEN fine = 1 ELSE LINE INPUT #1, file$ CALL messaggiy("Valutazione di " + file$ + ".", 10) END IF DO IF NOT EOF(2) THEN LINE INPUT #2, dir$ IF INKEY$ = CHR$(27) THEN SHELL "DEL c:\uda_temp.dir>NUL" SHELL "DEL c:\uda_temp.fil>NUL" CALL fineprg END IF IF file$ = dir$ THEN trovatadirectory = 1 END IF LOOP UNTIL EOF(2) CLOSE #2 IF trovatadirectory = 0 AND fine <> 1 THEN IF LEN(file$) < 100 THEN IF bytefile!(file$) = 1 THEN BiteTotali = BiteTotali + byte IF LEN(file$) > 40 THEN CALL messaggiy("Rilevato file " + LEFT$(file$, 17) + "..." + RIGHT$(file$, 20) + " per" + STR$(byte) + " byte.", 15) ELSE CALL messaggiy("Rilevato file " + file$ + " per" + STR$(byte) + " byte.", 15) END IF END IF END IF ELSE trovatadirectory = 0 END IF LOOP UNTIL fine = 1 CLOSE OPEN "c:\uda_temp.fil" FOR INPUT AS #1 OPEN "c:\uda_temp.lst" FOR APPEND AS #3 fine = 0 DO OPEN "c:\uda_temp.dir" FOR INPUT AS #2 IF EOF(1) THEN fine = 1 ELSE LINE INPUT #1, file$ END IF DO IF NOT EOF(2) THEN LINE INPUT #2, dir$ END IF IF INKEY$ = CHR$(27) THEN SHELL "DEL c:\uda_temp.dir>NUL" SHELL "DEL c:\uda_temp.fil>NUL" SHELL "DEL c:\uda_temp.lst>NUL" CALL fineprg END IF IF file$ = dir$ THEN trovatadirectory = 1 END IF LOOP UNTIL EOF(2) CLOSE #2 IF trovatadirectory = 0 AND fine <> 1 THEN IF LEN(file$) < 100 THEN Rapporto = existfile!(file$) ELSE Rapporto = 2 END IF numerodisco$ = LTRIM$(RTRIM$(STR$(disco!))) IF LEN(numerodisco$) = 1 THEN numerodisco$ = "0" + numerodisco$ END IF REM Correzzione della release 1.9k ' Per evitare che venga incluso nel file INSTALL.LST anche il programma di installazione ' viene fatto un controllo sul nome che sta per essere incluso e deventualmente lo si ' trasforma in un commento semplicemente aggiungendo il carattere - ; -. IF UCASE$(file$) = UCASE$(PercorsoRoot + NomeProgramma) THEN file$ = "; Eliminato: " + file$ PRINT #3, file$ ELSEIF LEFT$(file$, 1) = CHR$(34) AND UCASE$(MID$(file$, 2, LEN(file$) - 2)) = UCASE$(PercorsoRoot + NomeProgramma) THEN file$ = "; Eliminato: " + file$ PRINT #3, file$ ELSE REM Correzzione della release 1.9k ' Per evitare che in fase di copiatura venga sommato 2 ' volte il percorso del file, viene calcolata la root ' corrente troncando il nome del file a seconda dei caratteri ' uguali che lo accomunano con il percorso del programma. ' Per fare ci• verr… fatto un controllo di uguaglianza dei ' caratteri del percorso del file intercettato con il percorso ' del programma di installazione, troncando il nome del file ' interessato appena si verifica una disuguaglianza. REM Correzzione della release 2.0 ' Per evitare errori nella procedura implementata nell R1.9k Š ' necessario eliminare eventuali caratteri ". IF RIGHT$(file$, 1) = CHR$(34) THEN file$ = LEFT$(file$, LEN(file$) - 1) END IF IF LEFT$(file$, 1) = CHR$(34) THEN file$ = RIGHT$(file$, LEN(file$) - 1) END IF posiz = LEN(PercorsoRoot) FOR puntatore! = 1 TO posiz IF UCASE$(MID$(file$, puntatore!, 1)) = UCASE$(MID$(PercorsoRoot, puntatore!, 1)) THEN posiz = puntatore! FineUguaglianza = puntatore! ELSE puntatore! = posiz + 4 END IF NEXT puntatore! file$ = RIGHT$(file$, LEN(file$) - FineUguaglianza) FineUguaglianza = 0 IF Rapporto = 1 THEN PRINT #3, numerodisco$ + ">" + "\" + file$ CALL messaggiy("Inclusione del file " + RIGHT$(file$, 28) + " sul disco " + numerodisco$ + ".", 10) ELSEIF Rapporto = 2 THEN PRINT #3, numerodisco$ + ">" + file$ CALL messaggiy("Inclusione del file " + RIGHT$(file$, 28) + " sul disco " + numerodisco$ + ".", 10) END IF END IF END IF trovatadirectory = 0 LOOP UNTIL fine = 1 NEXT disco! CLOSE CALL interfaccia(0) CALL messaggiy("Inserire il Numero proposto tra [..] se necessario.", 7) CALL messaggiy("Lo spazio su disco necessario per installare - INVIO per nessuno", 13) CALL inputmess("Dimensione (solo numerica in byte) [" + STR$(BiteTotali) + "]", 20) INPUT spazio$ caratteri% = LEN(spazio$) FOR x = 2 TO caratteri% IF ASC(MID$(spazio$, x, 1)) < 48 OR ASC(MID$(spazio$, x, 1)) > 57 THEN CALL messaggiy("Attenzione! Immissione non valida -- Non ammessi caratteri", 12): CALL fineprg NEXT x IF spazio$ = "" THEN spazio$ = "none" DO CALL interfaccia(1) CALL messaggiy("Inserire il disco 1 di " + STR$(numerodischi!) + ".", 15) CALL messaggiy("Scrittura del file INSTALL.LST", 10) COLOR 14, 5 LOCATE 20, 17 PRINT "Premere INVIO per continuare o ESC per uscire" tastopremuto$ = UCASE$(INPUT$(1)) IF tastopremuto$ = CHR$(27) THEN SHELL "DEL c:\uda_temp.dir>NUL" SHELL "DEL c:\uda_temp.fil>NUL" CALL fineprg END IF LOOP UNTIL existfile(NomeProgramma) OPEN "c:\uda_temp.lst" FOR INPUT AS #1 OPEN "install.lst" FOR OUTPUT AS #2 PRINT #2, Directory$ PRINT #2, NomeDelFileDiTestoEsterno$ PRINT #2, spazio$ PRINT #2, titolo$ PRINT #2, "; Inizio Sezione Modificabile dall'utente {" DO LINE INPUT #1, Stringa$ PRINT #2, Stringa$ LOOP UNTIL EOF(1) SHELL "DEL c:\uda_temp.dir>NUL" SHELL "DEL c:\uda_temp.fil>NUL" SHELL "DEL c:\uda_temp.lst>NUL" END IF PRINT #2, "; Fine Sezione Modificabile dall'utente }" PRINT #2, ";" PRINT #2, "; Le righe che Iniziano con il carattere ; sono di commento." PRINT #2, ";" PRINT #2, "; Per Copiare un file Š necessario creare una riga vuota ed" PRINT #2, "; inserire il Numero del Disco di Installazione (2 cifre), il" PRINT #2, "; carattere di Maggiore '>' ed infine il Nome del File da Copiare," PRINT #2, "; come ad esempio:" PRINT #2, ";" PRINT #2, "; 01>\MIOFILE.TXT" PRINT #2, "; 02>\MIOFILE.EXE" PRINT #2, "; 03>\Directory1\Subdirectory\MIOFILE.DAT" PRINT #2, ";" PRINT #2, "; Per Lanciare una Procedura Esterna alla Shell di MS-DOS Š" PRINT #2, "; necessario creare una riga vuota, inserire il carattere | se si" PRINT #2, "; desidera che l'output venga visualizzato a schermo oppure i" PRINT #2, "; caratteri |> (non visualizzano l'output), seguiti dal" PRINT #2, "; Comando che pu• essere un comando DOS, un Programma Eseguibile" PRINT #2, "; (.EXE, .COM) o un file batch." PRINT #2, ";" PRINT #2, "; Se necessario Š possibile utilizzare le 'Variabili'" PRINT #2, "; '_DirSorg$' (per il percorso Sorgente) e '_DirInst$' (per il percorso" PRINT #2, "; Destinazione, definito dall'utente in fase di installazione) laddove" PRINT #2, "; sia necessario lanciare Procedure Esterne che lo richiedano; Le 'Variabili'" PRINT #2, "; verranno sostituite in fase di Installazione dal programma stesso" PRINT #2, "; rispettivamente con il Percorso Sorgente dei file da copiare e quello" PRINT #2, "; Destinazione scelto dall'utente." PRINT #2, "; Qui sotto sono riportate alcune righe di esempio:" PRINT #2, ";" PRINT #2, "; |type _DirInst$\MioFile.txt |more" PRINT #2, "; |pause" PRINT #2, "; |>_DirSorg$\MioProg.exe" PRINT #2, "; |>ARCHIVIO.EXE" PRINT #2, "; |del ARCHIVIO.EXE" PRINT #2, ";" PRINT #2, "; La riga sotto serve per Eliminare il file batch temporaneo." PRINT #2, "; UINST.BAT serve, se lanciato, per rendere corrente la directory" PRINT #2, "; Destinazione dichiarata dall'utente in fase di installazione." PRINT #2, "|>DEL C:\UINST.BAT" CLOSE CALL interfaccia(1) CALL messaggiy("File INSTALL.LST compilato con successo.", 10) CALL fineprg END SUB SUB messaggi (messagg$) NCARATTERI = LEN(messagg$) IF NCARATTERI >= 75 THEN NCARATTERI = 75 colonnainizio = 40 - (INT(NCARATTERI / 2)) COLOR 14, 1 CALL cornice(9, colonnainizio - 1, 11, NCARATTERI + 1) COLOR 14, 1 LOCATE 10, colonnainizio: PRINT LEFT$(messagg$, 75) LOCATE 23, 1 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$ LOCATE 23, 1 END SUB SUB messaggiy (messaggioy$, riga) IF LEN(messaggioy$) > 75 THEN messaggioy$ = LEFT$(messaggioy$, 72) + "..." NCARATTERI = LEN(messaggioy$) 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 messaggioy$ LOCATE 23, 1 END SUB 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 NomeExeFile$ = Nome ' NomeExeFile$ = "D:\UDA'SO~1\CONTAI~1\FRENGO\MATERI~1\INSTALL.EXE" END FUNCTION SUB Pausa (fineciclo) LOCATE 12, 26: PRINT "Premere un tasto per continuare." WHILE INKEY$ = "": WEND END SUB FUNCTION PercorsoExeFile$ 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! PercorsoExeFile$ = LEFT$(Nome, posiz) END FUNCTION SUB SOTTOFONDO CLS FOR riga = 3 TO 23 COLOR 15, 6: LOCATE riga, 1: PRINT STRING$(80, 176) NEXT riga END SUB FUNCTION spacedisk! (nomedisk$, spaziori) CLOSE bytedisk = 0 SHELL "chkdsk " + nomedisk$ + ">c:\uda_temp.chk" IF existfile!("c:\uda_temp.chk") = 0 THEN CALL interfaccia(2) CALL messaggiy("ATTENZIONE!! Non Š stato possibile eseguire un chek-up del disco", 10) CALL fineprg ELSE CLOSE OPEN "c:\uda_temp.chk" FOR INPUT AS #100 IF EOF(100) THEN spacedisk! = 0 CLOSE #100 EXIT FUNCTION ELSE LINE INPUT #100, bytedelfile$ END IF IF EOF(100) THEN spacedisk! = 0 CLOSE #100 EXIT FUNCTION ELSE LINE INPUT #100, bytedelfile$ LINE INPUT #100, bytedelfile$ END IF IF LEFT$(bytedelfile$, 22) = "Invece di usare CHKDSK" THEN CALL interfaccia(0) CALL messaggiy("ATTENZIONE!! Memoria insufficiente per eseguire un chek-up del disco", 10) CALL fineprg END IF END IF CLOSE OPEN "c:\uda_temp.chk" FOR INPUT AS #100 FOR riga = 1 TO 21 IF EOF(100) THEN spacedisk! = -1: CLOSE #100: EXIT FUNCTION ELSE LINE INPUT #100, bytedelfile$ IF MID$(bytedelfile$, 15, 24) = "byte disponibili su disc" OR MID$(bytedelfile$, 17, 11) = "disponibili" OR MID$(bytedelfile$, 15, 24) = "bytes available on disk" THEN bytedisk$ = MID$(bytedelfile$, 1, 13) IF RIGHT$(bytedisk$, 2) = "by" THEN bytedisk$ = LEFT$(bytedisk$, LEN(bytedisk$) - 2) bytedisk = VAL(bytedisk$) ELSE bytedisk = VAL(MID$(bytedelfile$, 1, 1) + MID$(bytedelfile$, 3, 3) + MID$(bytedelfile$, 7, 3) + MID$(bytedelfile$, 11, 3)) END IF IF spaziori < bytedisk THEN spacedisk! = 1 ELSE spacedisk! = 0 END IF CLOSE EXIT FUNCTION END IF NEXT riga CLOSE #100: spacedisk! = 0 END FUNCTION SUB VisualizzaTestoEsterno (Percorso$) OPEN Percorso$ FOR INPUT AS #10 DIM RigaOutput AS INTEGER DIM RigaOffSet AS INTEGER DIM SaltaInput AS INTEGER RigaOutput = 6 RigaOffSet = 0 SaltaInput = 0 CALL interfaccia(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 RigaOffSet = 38 - (INT(LEN(Stringa$) / 2)) Stringa$ = RIGHT$(Stringa$, LEN(Stringa$) - 3) IF LEN(Stringa$) > 75 THEN RigaOffSet = RigaOffSet + 3 END IF LOCATE RigaOutput, 3 + RigaOffSet IF LEN(Stringa$) < 75 THEN PRINT Stringa$ ELSE LOCATE RigaOutput, 3 IF SaltaInput = 0 THEN PRINT LEFT$(Stringa$, 74) RigaOutput = RigaOutput + 1 END IF SaltaInput = 0 LOCATE RigaOutput, 3 IF RigaOutput < 20 THEN PRINT RIGHT$(RIGHT$(Stringa$, LEN(Stringa$) - 74), 74) ELSE SaltaInput = 1 END IF END IF RigaOutput = RigaOutput + 1 RigaOffSet = 0 IF RigaOutput >= 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 fineprg esci = 0 RigaOutput = 6 CALL interfaccia(1) END IF WEND CLOSE #10 IF RigaOutput <> 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 fineprg 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 >C:\UDAVER.DAT" OPEN "C:\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 C:\UDAVER.DAT" END FUNCTION