DECLARE FUNCTION ctrlutm! () DECLARE SUB MAKEUTM () DECLARE SUB RAPPORTO () DECLARE SUB spostamento (indiceselezione!, inizio!, fine!, strdef$(), indice!) DECLARE SUB MARCHIATURE () DECLARE SUB ikey () DECLARE SUB SHELLDOS () DECLARE SUB MESSAGGInt (messagg$) DECLARE SUB sottofondo () DECLARE SUB DEFAULTUTM () DECLARE SUB calcolotempiutm (bCode!) DECLARE SUB messaggiy (messaggio$, riga!) DECLARE SUB initializing () DECLARE SUB PERCORSONFU () DECLARE SUB pausa (fineciclo!) DECLARE SUB CALCOLOTEMPOLAVORO () DECLARE SUB caricadefcom () DECLARE SUB Gestorecommesse () DECLARE SUB menuiniziale () DECLARE SUB fineprg () DECLARE SUB inputmess (messaggio$, carric!) DECLARE SUB messaggi (messaggio$) REM questo programma serve per gestire il file dei tempi di Andrea Orlando DECLARE SUB cornice (rigai!, colonnai!, rigaf!, colonnaf!) COMMON SHARED PERCORSO$ COMMON SHARED nfu$ COMMON SHARED nomut$ COMMON SHARED lCostoOraLavorativa AS DOUBLE COMMON SHARED stringalavoro$ COMMON SHARED FILEUTM$() COMMON SHARED byteutm COMMON SHARED recordutm COMMON SHARED centrodicosto$ COMMON SHARED codicecommessa$ COMMON SHARED DESCRIZIONELAVORO$ COMMON SHARED tempo$ COMMON SHARED prfcfg$ COMMON SHARED MODIFICAUTM COMMON SHARED carattere$ COMMON SHARED codicecarattere COMMON SHARED saltare COMMON SHARED oretotali AS INTEGER CLEAR ' Gestione errori ON ERROR GOTO 1 GOTO 2 1 IF ERR = 7 THEN ELSEIF ERR = 54 THEN CALL messaggi("Modalit… di accesso al file errata!!") CALL fineprg ELSEIF ERR = 70 THEN CALL messaggi("Accesso al disco negato!!") CALL fineprg ELSEIF ERR = 75 THEN CALL messaggiy("Errore di accesso al percorso file!! Unit… CD-ROM.", 10) CALL fineprg ELSEIF ERR = 76 THEN CALL messaggi("Directory errata.") CALL fineprg ELSEIF ERR = 61 THEN CALL messaggi("Spazio su disco insufficiente!!") CALL fineprg ELSE CALL messaggi("ERRORE FATALE!! Non posso continuare.") CALL fineprg END IF RESUME NEXT 2 MODIFICAUTM = 0 5 IF saltare = 0 THEN CALL PERCORSONFU IF ERRNECFG = 1 THEN GOTO 150 6 IF ctrlutm = 1 THEN GOTO 400 ELSE CALL initializing menuiniziale: CALL menuiniziale IF indiceselezione = 0 THEN CALL fineprg prfcfg$ = "" IF saltare = 1 THEN GOTO 450 IF saltare = 2 THEN GOTO 650 IF saltare = 3 THEN GOTO 672 10 IF ERRNECFG = 1 THEN GOTO 150 ELSE 40 REM controllo esistenza file dei tempi IF ctrlutm = 1 THEN GOTO 400 REM messaggio di inizializzazione IF MODIFICAUTM = 1 THEN CALL initializing IF errneutm = 1 THEN GOTO 400 ELSE COLOR 0, 2: CALL sottofondo: COLOR 14, 1 CALL cornice(3, 18, 8, 50): COLOR 14, 1 REM stampa caratteristiche utente LOCATE 4, 20: PRINT "Percorso file dei tempi: " + LEFT$(PERCORSO$, 23) LOCATE 5, 20: PRINT "Nome file dei tempi: " + nfu$ + ".UTM" LOCATE 6, 20: PRINT "Proprietario: " + nomut$ LOCATE 7, 20: PRINT "Dimensioni: "; byteutm; " Caratteri" PRINT PRINT PRINT REM men— CALL cornice(9, 18, 12, 36): COLOR 14, 1 LOCATE 10, 20: PRINT "Inizi o Finisci di lavorare :" LOCATE 11, 20: PRINT "Premere ESC per terminare" LOCATE 11, 48: CALL ikey: iof$ = carattere$: CALL CALCOLOTEMPOLAVORO IF codicecarattere = 27 GOTO menuiniziale ELSE IF iof$ = "i" OR iof$ = "I" THEN GOTO 100 ELSE IF iof$ = "" GOTO 450 ELSE 45 COLOR 14, 1: CALL cornice(14, 18, 16, 38): COLOR 14, 1: LOCATE 15, 20: PRINT "lavoro interno o Commessa (I/c) ": CALL ikey: RISP$ = carattere$ IF RISP$ = "C" THEN GOTO 160 IF RISP$ = "c" THEN GOTO 160 CLOSE REM inizializzazione default commesse interne GOSUB 310 CALL sottofondo: OPEN PERCORSO$ + nfu$ + ".utm" FOR APPEND AS #1 PRINT #1, "Lavoro svolto: " 50 MESS$ = "Lavoro svolto: <" + LEFT$(lav$, 50) + ">": CALL messaggiy(MESS$, 5): COLOR 14, 1 CALL messaggiy(STRING$(70, " "), 15): COLOR 14, 4: LOCATE 15, 6: INPUT lav1$ IF lav1$ <> "" THEN PRINT #1, "- " + LEFT$(lav1$, 75) ELSE PRINT #1, "- " + LEFT$(lav$, 75) END IF 'Scrittura File Default Interna OPEN PERCORSO$ + "def-int.$$$" FOR OUTPUT AS #17 IF lav1$ <> "" THEN PRINT #17, LEFT$(lav1$, 75) ELSE PRINT #17, LEFT$(lav$, 75) CLOSE #17 60 CALL cornice(14, 4, 20, 50): COLOR 14, 1 PRINT #1, "e ha finito alle ore " + TIME$ LOCATE 15, 5: PRINT "Oggi " + DATE$ + " hai iniziato " + stringalavoro$ LOCATE 16, 5: PRINT ; "e ha finito alle ore " + TIME$ LOCATE 17, 5: PRINT ; "quante ore hai lavorato: <"; tempol; ">": LOCATE 18, 5: INPUT orelav$: IF orelav$ = "" THEN orelav$ = STR$(tempol) PRINT #1, ">Il giorno " + DATE$ + " sono state svolte " + orelav$ + " ore di lavoro" CLOSE #1: MODIFICAUTM = 1 COLOR 0, 2: CALL sottofondo: GOSUB 155 SHELL "type " + PERCORSO$ + nfu$ + ".utm" MESS$ = "Vuoi salvare l'archivio anche da un'altra parte(s/N)": CALL inputmess(MESS$, 2): COLOR 14, 1: CALL ikey: s1$ = carattere$ IF codicecarattere = 27 GOTO menuiniziale IF s1$ <> "S" AND s1$ <> "s" THEN GOTO 450 CALL inputmess("indicare il percorso ", 30): INPUT percorso2$ SHELL "COPY " + PERCORSO$ + nfu$ + ".UTM " + percorso2$ MODIFICAUTM = 1: GOTO 450 100 REM marchiatura inizio file dei tempi con controllo CLOSE OPEN PERCORSO$ + nfu$ + ".utm" FOR INPUT AS #8 110 IF EOF(8) THEN GOTO 120 INPUT #8, in$: GOTO 110 120 IF LEFT$(in$, 10) = "alle ore: " THEN MESS$ = "ATTENZIONE!!ERRORE BESTIALE: non puoi iniziare 2 volte imbecille": CALL messaggi(MESS$): COLOR 14, 1: GOTO 600 CLOSE #8 OPEN PERCORSO$ + nfu$ + ".in$" FOR OUTPUT AS #8: CLOSE #8: REM azzeramento file inizio tmp CLOSE : OPEN PERCORSO$ + nfu$ + ".utm" FOR APPEND AS #2 PRINT #2, "Oggi " + DATE$ + " l'operatore " + nomut$ + " ha iniziato a lavorare" PRINT #2, "alle ore: " + TIME$ CLOSE #2 GOTO 600 150 MESS$ = "INDICARE IL PERCORSO DI RICERCA ": CALL inputmess(MESS$, 30): INPUT prfcfg$: COLOR 14, 1 IF prfcfg$ = "" THEN MESS$ = "SEI UN'UOMO FINITO!!": CALL messaggi(MESS$): CALL fineprg IF RIGHT$(prfcfg$, 1) <> "\" THEN prfcfg$ = prfcfg$ + "\" ERRNECFG = 0: GOTO 5 155 OPEN PERCORSO$ + nfu$ + ".in$" FOR OUTPUT AS #10 PRINT #10, "alle ore: " + TIME$: CLOSE #10 RETURN GOTO 600 160 CLOSE : CALL caricadefcom CALL sottofondo CALL caricadefcom CALL Gestorecommesse GOTO 60 310 REM inizializzazione default commesse interne SHELL "dir " + PERCORSO$ + "def-int.$$$/b>dirt" OPEN "dirt" FOR INPUT AS #6 IF EOF(6) THEN CLOSE : RETURN CLOSE #6: CLOSE : OPEN PERCORSO$ + "def-int.$$$" FOR INPUT AS #7 INPUT #7, lav$ CLOSE #7: RETURN REM intestazione file dei tempi 400 CLOSE ' Creazione del file UTM se risulta vuoto. CALL MAKEUTM errneutm = 0: GOTO 6 450 REM conteggio ore di lavoro svolte IF MODIFICAUTM = 1 THEN CALL initializing: CALL calcolotempiutm(1) ELSE CALL calcolotempiutm(1) 600 CLOSE SHELL "del dirt" GOTO menuiniziale IF indiceselezione = 0 THEN CALL fineprg 650 REM estrapolazione commesse CLOSE SHELL "dir " + PERCORSO$ + nfu$ + "./b>dirt" OPEN "dirt" FOR INPUT AS #13 aggsovr = 0 IF EOF(13) THEN GOTO 651 ELSE CALL messaggiy("ATTENZIONE!!! Il file COMMESSE esiste gi…!!", 3): CALL inputmess("vuoi Aggiungere o Sovrascrivere (a/S)", 3): CALL ikey: aggsovr$ = carattere$: CLOSE IF codicecarattere = 27 THEN GOTO menuiniziale ELSE IF aggsovr$ = "A" OR aggsovr$ = "a" THEN aggsovr = 1 651 OPEN PERCORSO$ + nfu$ + ".utm" FOR INPUT AS #15 IF aggsovr = 0 THEN OPEN PERCORSO$ + nfu$ FOR OUTPUT AS #16: PRINT #16, "* Distinta delle commesse svolte dall'operatore " + nomut$ IF aggsovr = 1 THEN OPEN PERCORSO$ + nfu$ FOR APPEND AS #16 660 IF EOF(15) GOTO 670 LINE INPUT #15, stringacommesse$: REM ricerca linea interessata IF LEFT$(stringacommesse$, 1) <> "#" THEN GOTO 660 NCARATTERIcom = LEN(stringacommesse$): REM estrapolazione ora commessa$ = RIGHT$(stringacommesse$, NCARATTERIcom - 1) PRINT #16, commessa$ GOTO 660 670 CLOSE CLS SHELL "type " + PERCORSO$ + nfu$ + "|more" PRINT PRINT "Premere ESC per Continuare..." DO LOOP UNTIL INKEY$ = CHR$(27) '27 Š il codice ASCII di Esc. CALL sottofondo COLOR 14, 1: CALL cornice(4, 9, 9, 60): COLOR 14, 1 LOCATE 5, 10: PRINT "Hai appena eseguito la distinta delle COMMESSE" LOCATE 6, 10: PRINT "Si suppone che tu voglia Marchiare le COMMESSE del file " LOCATE 7, 10: PRINT nfu$ + ".UTM" LOCATE 8, 10: COLOR 14, 4: PRINT "MARCHIARE (S/n)": CALL ikey: marchiare$ = carattere$ IF codicecarattere = 27 THEN GOTO menuiniziale ELSE IF marchiare$ = "n" OR marchiare$ = "N" THEN GOTO 600 672 REM marchiatura commesse file dei tempi CLOSE : dimstr = 0: OPEN PERCORSO$ + nfu$ + ".utm" FOR INPUT AS #15 675 IF EOF(15) THEN CLOSE : GOTO 680 LINE INPUT #15, stringa$ dimstr = dimstr + 1 GOTO 675 680 REDIM stringareg$(dimstr): indice = 1: OPEN PERCORSO$ + nfu$ + ".utm" FOR INPUT AS #15 COLOR 14, 1: CALL messaggiy(STRING$(70, " "), 3): COLOR 14, 1 685 IF EOF(15) THEN CLOSE : GOTO 690 LINE INPUT #15, stringareg$(indice) IF LEFT$(stringareg$(indice), 1) = "#" THEN LOCATE 3, 6: COLOR 14, 4: PRINT STRING$(69, " "): LOCATE 3, 6: PRINT LEFT$(stringareg$(indice), 67): stringareg$(indice) = "@" + stringareg$(indice) indice = indice + 1 GOTO 685 690 OPEN PERCORSO$ + nfu$ + ".utm" FOR OUTPUT AS #15 FOR indice = 1 TO dimstr PRINT #15, stringareg$(indice) NEXT indice CLOSE CALL messaggi("MARCHIATURA ESEGUITA") GOTO menuiniziale 9999 END SUB calcolotempiutm (bCode!) REM inizializzazione variabili oretotali = 0 NCARATTERI = 0 nrecord = 0 CLOSE OPEN PERCORSO$ + nfu$ + ".$tm" FOR OUTPUT AS #5 PRINT #5, " FILE: " + PERCORSO$ + nfu$ + ".$tm" PRINT #5, " DISTINTA BASE DELLE ORE GIORNALIERE DI LAVORO SVOLTE DA: " PRINT #5, nomut$ 530 CLOSE #2 FOR indice = 1 TO recordutm IF LEFT$(FILEUTM$(indice), 1) = ">" THEN NCARATTERI = LEN(FILEUTM$(indice)) - 54: REM estrapolazione ora IF LEFT$(FILEUTM$(indice), 1) = ">" THEN orelavoro = VAL(MID$(FILEUTM$(indice), 41, NCARATTERI)): LOCATE 1, 1 REM accumulazione IF LEFT$(FILEUTM$(indice), 1) = ">" THEN oretotali = oretotali + orelavoro NEXT indice 590 PRINT #5, "" PRINT #5, "" PRINT #5, "LE ORE DI LAVORO SVOLTE DALL'OPERATORE SONO : "; oretotali PRINT #5, "PER UN TOTALE DI "; INT(oretotali / 8); " GIORNATE LAVORATIVE" CLOSE OPEN PERCORSO$ + nfu$ + ".$tm" FOR INPUT AS #5 COLOR 14, 4: CALL sottofondo: COLOR 14, 1: CALL cornice(9, 10, 18, 60): COLOR 14, 1 594 IF EOF(5) THEN GOTO 595 ELSE INPUT #5, stringone$: LOCATE 10 + incr, 12: PRINT stringone$: incr = incr + 1 GOTO 594 595 LOCATE 13, 10: PRINT CHR$(204) + STRING$(59, CHR$(205)) + CHR$(185) LOCATE 18, 30: PRINT "Premere INVIO per uscire" IF bCode! = 1 THEN DO LOOP UNTIL INKEY$ = CHR$(13) '27 Š il codice ASCII di Esc. END IF END SUB SUB CALCOLOTEMPOLAVORO SHARED tempol ' SUBRUTINE PER IL CALCOLO DELL DIFFERENZA DI TEMPO TRASCORSO DA UN TEMPO INIZIALE E UNO FINALE 200 REM inizializzazione ora inizio lavoro SHELL "dir " + PERCORSO$ + nfu$ + ".in$/b>dirt" OPEN "dirt" FOR INPUT AS #9 IF EOF(9) THEN CLOSE : GOSUB 250: EXIT SUB CLOSE OPEN PERCORSO$ + nfu$ + ".in$" FOR INPUT AS #9 IF EOF(9) THEN GOTO 205 LINE INPUT #9, stringalavoro$: CLOSE #9: GOSUB 220: EXIT SUB 205 CLOSE : OPEN PERCORSO$ + nfu$ + ".utm" FOR INPUT AS #5 210 IF EOF(5) THEN CLOSE #5: EXIT SUB LINE INPUT #5, stringalavoro$ IF LEFT$(stringalavoro$, 10) = "alle ore: " THEN GOSUB 220: GOTO 210 GOTO 210 220 orainizio = VAL(MID$(stringalavoro$, 11, 2)) minutiinizio = VAL(MID$(stringalavoro$, 14, 2)) orai = INT((orainizio * 60) * (1 / 60)) minutii = minutiinizio * (1 / 60) tempoi = minutii + orai stringa$ = TIME$ orafine = VAL(LEFT$(stringa$, 2)) minutifine = VAL(MID$(stringa$, 4, 2)) oraf = INT((orafine * 60) * (1 / 60)) minutif = minutifine * (1 / 60) tempof = minutif + oraf tempol = INT(10 * (tempof - tempoi)) tempol = tempol / 10 minutilavoro = tempol / (1 / 60) IF minutilavoro < 1 THEN orelavoro = 0: GOTO 250 ELSE orelavoro = INT(minutilavoro / 60) 250 minuti = INT(minutilavoro - (orelavoro * 60)) orelavoro$ = STR$(orelavoro) prendicaratteri = LEN(orelavoro$) - 1 orelavoro$ = RIGHT$(orelavoro$, prendicaratteri) minuti$ = STR$(minuti) prendicaratteri = LEN(minuti$) - 1 minuti$ = RIGHT$(minuti$, prendicaratteri) IF LEN(minuti$) = 1 THEN minuti$ = "0" + minuti$ tempo$ = orelavoro$ + "h" + minuti$ + "m" RETURN END SUB SUB caricadefcom REM inizializzazione default commesse SHELL "dir " + PERCORSO$ + "def-com.$$$/b>dirt" OPEN "dirt" FOR INPUT AS #6 IF EOF(6) THEN CLOSE : EXIT SUB CLOSE #6: CLOSE : OPEN PERCORSO$ + "def-com.$$$" FOR INPUT AS #7 INPUT #7, centrodicosto$ INPUT #7, codicecommessa$ INPUT #7, DESCRIZIONELAVORO$ CLOSE #7 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 FUNCTION ctrlutm SHELL "dir " + PERCORSO$ + nfu$ + ".utm" + "/b>dirt" OPEN "dirt" FOR INPUT AS #13 IF EOF(13) THEN CLOSE : ctrlutm = 1: EXIT FUNCTION ctrlutm = 0 CLOSE END FUNCTION SUB DEFAULTUTM DIM recordstrdef AS INTEGER recordstrdef = 0 riga = 6 COLOR 14, 1: CALL cornice(5, 5, 16, 70): COLOR 14, 1: LOCATE 5, 7: PRINT "CODICE": LOCATE 5, 20: PRINT "DESCRIZIONE" FOR indice = 1 TO recordutm IF LEFT$(FILEUTM$(indice), 1) = "#" THEN recordstrdef = recordstrdef + 1 NEXT indice DIM strdef$(recordstrdef): indice2 = 1 FOR indice = 1 TO recordutm IF LEFT$(FILEUTM$(indice), 1) = "#" THEN strdef$(indice2) = MID$(FILEUTM$(indice), 7, 6) + MID$(FILEUTM$(indice), 32, 60): indice2 = indice2 + 1 NEXT indice inizio = 1 fine = 10 IF recordstrdef < 10 THEN fine = recordstrdef riga = 6 selezione: FOR indice = inizio TO fine LOCATE riga, 6: PRINT strdef$(indice): riga = riga + 1 NEXT indice CALL messaggi("Routine incompleta"): EXIT SUB DO a$ = INKEY$ IF a$ <> "" THEN IF LEN(a$) >= 2 THEN a = ASC(RIGHT$(a$, 1)) ELSE a = ASC(a$) SELECT CASE a CASE IS = 72: indiceselezione = indiceselezione - 1: IF indiceselezione <= 0 THEN indiceselezione = ciclo: CALL spostamento(indiceselezione, inizio, fine, strdef$(), indice) CASE IS = 77: indiceselezione = indiceselezione - 1: IF indiceselezione <= 0 THEN indiceselezione = ciclo: CALL spostamento(indiceselezione, inizio, fine, strdef$(), indice) CASE IS = 75: indiceselezione = indiceselezione + 1: IF indiceselezione <= 0 THEN indiceselezione = ciclo: CALL spostamento(indiceselezione, inizio, fine, strdef$(), indice) CASE IS = 80: indiceselezione = indiceselezione + 1: IF indiceselezione <= 0 THEN indiceselezione = ciclo: CALL spostamento(indiceselezione, inizio, fine, strdef$(), indice) CASE IS = 13: GOTO selezioneavvenuta CASE IS = 27: CALL fineprg CASE ELSE END SELECT END IF LOOP WHILE (1) RETURN spostamento: COLOR 14, 1: CALL cornice(19, 24, 22, 31): COLOR 14, 1 LOCATE 20, 25: PRINT "premere per confermare" LOCATE 21, 25: PRINT "premere per uscire" RETURN selezioneavvenuta: END SUB SUB fineprg ' fine programma CALL sottofondo CLOSE SHELL "del dirt>nul" COLOR 7, 0 CLS SHELL "dir" CALL messaggiy("FINE GESTIONE TEMPI! USCITA DAL PROGRAMMA", 15) CALL MESSAGGInt("Sistema UTM V 3.2 ripristinato") END END SUB SUB Gestorecommesse CALL inputmess("DEFAULT DA FILE .UTM (s/N)", 3) CALL ikey: RISP$ = carattere$ IF RISP$ = "S" OR RISP$ = "s" OR RISP$ = "" THEN CALL DEFAULTUTM ' sub per la gestione delle commesse COLOR 14, 4: CALL sottofondo: COLOR 14, 1: CALL cornice(4, 4, 20, 70): COLOR 14, 1 LOCATE 5, 5: PRINT "Descrizione lavoro <" + LEFT$(DESCRIZIONELAVORO$, 47) + ">": LOCATE 6, 5: : INPUT descrizionelavoro2$ IF descrizionelavoro2$ <> "" THEN DESCRIZIONELAVORO$ = descrizionelavoro2$ LOCATE 7, 5: PRINT "inserisci il centro di costo <" + centrodicosto$ + ">": LOCATE 8, 5: INPUT centrodicosto2$ IF centrodicosto2$ <> "" THEN centrodicosto$ = centrodicosto2$ LOCATE 9, 5: PRINT "inserisci il codice commessa <" + codicecommessa$ + ">": LOCATE 10, 5: INPUT codicecommessa2$ IF codicecommessa2$ <> "" THEN codicecommessa$ = codicecommessa2$ data$ = DATE$: data$ = MID$(data$, 4, 2) + "/" + LEFT$(data$, 2) + "/" + RIGHT$(data$, 2): data$ = data$ + "|" LOCATE 11, 5: PRINT "Oggi " + DATE$ + " hai iniziato " + stringalavoro$ LOCATE 13, 5: PRINT "SONO LE ORE: "; TIME$ LOCATE 14, 5: PRINT "inserisci il tempo <" + tempo$ + ">": LOCATE 15, 5: LOCATE 15, 5: INPUT tempo2$ IF tempo2$ <> "" THEN tempo$ = tempo2$ OPEN PERCORSO$ + "def-com.$$$" FOR OUTPUT AS #11 PRINT #11, centrodicosto$ PRINT #11, codicecommessa$ PRINT #11, DESCRIZIONELAVORO$ CLOSE #11 spaziatura = 6 - LEN(centrodicosto$) centrodicosto$ = LEFT$(centrodicosto$, 6) + SPACE$(spaziatura) + "|" spaziatura = 8 - LEN(codicecommessa$) codicecommessa$ = LEFT$(codicecommessa$, 8) + SPACE$(spaziatura) + "|" spaziatura = 5 - LEN(tempo$) tempo$ = LEFT$(tempo$, 5) + "|" DESCRIZIONELAVORO$ = LEFT$(DESCRIZIONELAVORO$, 80) OPEN PERCORSO$ + nfu$ + ".utm" FOR APPEND AS #1 PRINT #1, "#"; centrodicosto$ + codicecommessa$ + data$ + tempo$ + DESCRIZIONELAVORO$ END SUB SUB ikey carattere$ = "" DO carattere$ = INKEY$ IF carattere$ <> "" THEN IF LEN(carattere$) >= 2 THEN codicecarattere = ASC(RIGHT$(carattere$, 1)) ELSE codicecarattere = ASC(carattere$) END IF IF carattere$ <> "" THEN EXIT SUB LOOP WHILE (1) END SUB SUB initializing recordutm = 0 SHARED errneutm byteutm = 0 COLOR 0, 2: CALL sottofondo: COLOR 14, 1 CALL cornice(4, 22, 9, 48): COLOR 14, 1 LOCATE 5, 23: PRINT "UTM.EXE V3.0 By UDA'Software Copyright 1996,INC" PRINT LOCATE 6, 34: PRINT "UDA TIMES MANAGER" OPEN PERCORSO$ + nfu$ + ".utm" FOR INPUT AS #13 IF EOF(13) THEN PRINT "ATTENZIONE!!! file dei tempi inesistente!!!": CLOSE : errneutm = 1: EXIT SUB DO LINE INPUT #13, stringa$ recordutm = recordutm + 1 LOOP UNTIL EOF(13) CLOSE PASSO = recordutm / 100 OPEN PERCORSO$ + nfu$ + ".utm" FOR INPUT AS #13 REDIM FILEUTM$(recordutm) MESS$ = STRING$(70, " "): CALL messaggiy(MESS$, 15): COLOR 14, 1 FOR indice = 1 TO recordutm LINE INPUT #13, FILEUTM$(indice): LOCATE 15, 6: IF velocizza = 0 THEN PRINT STRING$(69, " "): LOCATE 15, 6: PRINT LEFT$(FILEUTM$(indice), 68) + STRING$(68 - (LEN(LEFT$(FILEUTM$(indice), 68))), " ") byteutm = byteutm + LEN(FILEUTM$(indice)) IF byteutm >= (FRE("") - 100) THEN CALL messaggi("File troppo grande! Non posso inizializzare oltre!"): indice = recordutm LOCATE 8, 31: PRINT "Initializing", INT(indice / PASSO); " % " REM FOR p = 0 TO 1000: NEXT p IF INKEY$ = "s" THEN IF velocizza = 1 THEN indice = recordutm: CALL messaggi("Inizializzazione interrotta!!!") ELSE velocizza = 1 NEXT indice CLOSE LOCATE 8, 31: PRINT ".......Fatto!" FOR x = 0 TO 5000 WHILE INKEY$ = "s": x = 5000: WEND NEXT x MODIFICAUTM = 0 END SUB SUB INIZCFG SHARED ERRNECFG SHELL "dir " + prfcfg$ + "utm.cfg/b>dirt" OPEN "dirt" FOR INPUT AS #4 IF EOF(4) THEN MESS$ = "ERRORE MORTALE:IL FILE DI CONFIGURAZIONE NON ESISTE": CALL messaggi(MESS$): CLOSE #4: : ERRNECFG = 1: EXIT SUB CLOSE #4: OPEN prfcfg$ + "utm.cfg" FOR INPUT AS #3 INPUT #3, PERCORSO$ IF EOF(3) THEN CLOSE : CALL fineprg INPUT #3, nfu$: IF LEN(nfu$) > 8 THEN CLOSE : PRINT "File di configurazione sbagliato": CALL fineprg IF EOF(3) THEN CLOSE : CALL fineprg INPUT #3, nomut$ IF NOT EOF(3) THEN INPUT #3, lCostoOraLavorativa CLOSE #3 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 SUB MAKEUTM CALL messaggiy("Attenzione, file dei tempi vuoto! Inizializzazione", 15): PRINT LOCATE 17, 30 PRINT "Premere ESC per uscire" OPEN PERCORSO$ + nfu$ + ".utm" FOR OUTPUT AS #12 PRINT #12, " File dei tempi: " + PERCORSO$ + nfu$ + ".utm" PRINT #12, " Appartenente a: " + nomut$ PRINT #12, "******************************************************************************" CLOSE DO LOOP UNTIL INKEY$ = CHR$(27) '27 Š il codice ASCII di Esc. END SUB SUB MARCHIATURE CALL messaggiy("MARCIATURE FILE DEI TEMPI", 3): CALL inputmess("Vuoi Mettere o Togliere (M/t)", 3): CALL ikey: aggsovr$ = carattere$ IF codicecarattere = 27 THEN saltare = 1 EXIT SUB ELSE MODIFICAUTM = 1 IF aggsovr$ = "M" OR aggsovr$ = "m" OR codicecarattere = 13 THEN saltare = 3: EXIT SUB ELSE END IF REM Demarchiatura commesse file dei tempi CLOSE : dimstr = 0: OPEN PERCORSO$ + nfu$ + ".utm" FOR INPUT AS #15 WHILE NOT EOF(15) LINE INPUT #15, stringa$ dimstr = dimstr + 1 WEND CLOSE REDIM stringareg$(dimstr): indice = 1: OPEN PERCORSO$ + nfu$ + ".utm" FOR INPUT AS #15 COLOR 14, 1: CALL messaggiy(STRING$(70, " "), 3): COLOR 14, 1 WHILE NOT EOF(15) LINE INPUT #15, stringareg$(indice) IF LEFT$(stringareg$(indice), 1) = "@" THEN LOCATE 3, 6: COLOR 14, 4: PRINT STRING$(69, " "): LOCATE 3, 6: PRINT LEFT$(stringareg$(indice), 67): stringareg$(indice) = RIGHT$(stringareg$(indice), (LEN(stringareg$(indice)) - 1)) indice = indice + 1 WEND CLOSE OPEN PERCORSO$ + nfu$ + ".utm" FOR OUTPUT AS #15 FOR indice = 1 TO dimstr PRINT #15, stringareg$(indice) NEXT indice CLOSE CALL messaggi("DEMARCHIATURA ESEGUITA") saltare = 1 END SUB SUB menuiniziale DO COLOR 14, 8: CLS CALL sottofondo COLOR 14, 3 CALL cornice(6, 3, 22, 74): COLOR 14, 1 SHARED indiceselezione REM menu estendibile 700 CALL cornice(2, 17, 5, 48): COLOR 14, 1 LOCATE 3, 18: PRINT "UTM.EXE V3.2 By UDA'Software Copyright 1996,INC" PRINT LOCATE 5, 34: PRINT "UDA TIMES MANAGER" REDIM rigacomando$(7) rigacomando$(1) = "GESTIONE TEMPI" rigacomando$(2) = "CALCOLO ORE LAVORATIVE" rigacomando$(3) = "ESTRAPOLAZIONE COMMESSE" rigacomando$(4) = "MARCHIARE FILE DEI TEMPI" rigacomando$(5) = "CREAZIONE RAPPORTO" rigacomando$(6) = "SHELL DI MS-DOS" rigacomando$(7) = "USCIRE DA UDA TIMES MANAGER" ciclo = 7 indice = 1 indiceselezione = 0 705 CALL cornice(8, 21, ciclo + 14, 40): COLOR 14, 1 COLOR 14, 1: FOR indice = 1 TO ciclo: LOCATE 9 + indice, 25: PRINT rigacomando$(indice): NEXT indice LOCATE 10 + indice, 25: PRINT "premere per confermare" LOCATE 11 + indice, 25: PRINT "premere per uscire" DO a$ = INKEY$ IF a$ <> "" THEN IF LEN(a$) >= 2 THEN a = ASC(RIGHT$(a$, 1)): GOSUB 720 ELSE a = ASC(a$): GOSUB 720 END IF LOOP WHILE (1) 720 SELECT CASE a CASE IS = 72: indiceselezione = indiceselezione - 1: IF indiceselezione <= 0 THEN indiceselezione = ciclo: GOSUB 725 ELSE GOSUB 725 CASE IS = 77: indiceselezione = indiceselezione - 1: IF indiceselezione <= 0 THEN indiceselezione = ciclo: GOSUB 725 ELSE GOSUB 725 CASE IS = 75: indiceselezione = indiceselezione + 1: IF indiceselezione <= 0 THEN indiceselezione = ciclo: GOSUB 725 ELSE GOSUB 725 CASE IS = 80: indiceselezione = indiceselezione + 1: IF indiceselezione <= 0 THEN indiceselezione = ciclo: GOSUB 725 ELSE GOSUB 725 CASE IS = 13: GOTO 730 CASE IS = 27: CALL fineprg CASE ELSE END SELECT RETURN 725 COLOR 14, 1: CALL cornice(8, 21, ciclo + 14, 40): COLOR 14, 1 LOCATE 10 + indice, 25: PRINT "premere per confermare" LOCATE 11 + indice, 25: PRINT "premere per uscire" COLOR 14, 1: FOR indice = 1 TO ciclo: LOCATE 9 + indice, 25: PRINT rigacomando$(indice): NEXT indice IF indiceselezione = ciclo + 1 THEN indiceselezione = 1 IF indiceselezione = 0 THEN indiceselezione = ciclo LOCATE indiceselezione + 9, 22: FOR col = 22 TO 59: COLOR 14, 4: LOCATE indiceselezione + 9, col: PRINT CHR$(SCREEN(indiceselezione + 9, col)): NEXT col RETURN 730 IF indiceselezione = 0 THEN EXIT SUB IF indiceselezione = 1 THEN saltare = 0: EXIT SUB IF indiceselezione = 2 THEN saltare = 1: EXIT SUB IF indiceselezione = 3 THEN saltare = 2: EXIT SUB IF indiceselezione = 4 THEN CALL MARCHIATURE: EXIT SUB IF indiceselezione = 5 THEN CALL RAPPORTO IF indiceselezione = 6 THEN CALL SHELLDOS IF indiceselezione = 7 THEN CALL fineprg LOOP WHILE (2) END SUB 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 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$) 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$ END SUB SUB pausa (fineciclo) WHILE INKEY$ = "": WEND END SUB SUB PERCORSONFU SHARED ERRNECFG IF saltare = 0 THEN GOSUB controllocfg COLOR 0, 2 LOCATE 12, 16 PRINT "Inserisci il percorso -- Premi INVIO per proseguire" LOCATE 5, 1 IF LEN(PERCORSO$) > 34 THEN MESS$ = LEFT$(PERCORSO$, 14) + "...." + RIGHT$(PERCORSO$, 14) ELSE MESS$ = PERCORSO$ END IF CALL inputmess("<" + MESS$ + ">:", LEN(MESS$)) INPUT prc2$ IF RTRIM$(LTRIM$(prc2$)) = "" THEN GOTO 30 ELSE IF RIGHT$(prc2$, 1) <> "\" THEN PERCORSO$ = prc2$ + "\": EXIT SUB ELSE PERCORSO$ = prc2$: EXIT SUB 30 IF RIGHT$(PERCORSO$, 1) = "\" THEN EXIT SUB ELSE PERCORSO$ = PERCORSO$ + "\" EXIT SUB controllocfg: SHELL "dir " + prfcfg$ + "utm.cfg/b>dirt" OPEN "dirt" FOR INPUT AS #4 IF EOF(4) THEN MESS$ = "ERRORE MORTALE:IL FILE DI CONFIGURAZIONE NON ESISTE": CALL messaggi(MESS$): CLOSE #4: : ERRNECFG = 1: EXIT SUB CLOSE #4: OPEN prfcfg$ + "utm.cfg" FOR INPUT AS #3 INPUT #3, PERCORSO$ IF EOF(3) THEN CLOSE : CALL fineprg INPUT #3, nfu$: IF LEN(nfu$) > 8 THEN CLOSE : PRINT "File di configurazione sbagliato": CALL fineprg IF EOF(3) THEN CLOSE : CALL fineprg INPUT #3, nomut$ IF NOT EOF(3) THEN INPUT #3, lCostoOraLavorativa CLOSE #3 RETURN END SUB SUB RAPPORTO DIM sStringaDati AS STRING * 255 DIM sCostoOraLavorativaTmp AS STRING * 10 DIM lCostoTotale AS DOUBLE ' Creazione file .$tm CALL calcolotempiutm(0) ' Richiesta di immissione del costo ora lavorativa COLOR 14, 4: CALL sottofondo: COLOR 14, 1: COLOR 14, 1 CALL inputmess("Inserire il costo di un'ora lavorativa <" + STR$(lCostoOraLavorativa) + ">", 6) INPUT sCostoOraLavorativaTmp IF sCostoOraLavorativaTmp <> " " THEN lCostoOraLavorativa = VAL(sCostoOraLavorativaTmp) IF ctrlutm = 1 THEN CALL MAKEUTM CALL initializing CALL calcolotempiutm(0) EXIT SUB ELSEIF MODIFICAUTM = 1 THEN CALL initializing CALL calcolotempiutm(0) END IF REM SHELL "COPY " + nfu$ + ".UTM *.REP /y>NUL" ' Aggiunta di una separazione di Asterischi ** OPEN nfu$ + ".REP" FOR OUTPUT AS #125 PRINT #125, STRING$(80, 42) PRINT #125, STRING$(80, 42) CLOSE #125 ' Accodamento del rapporto finale OPEN nfu$ + ".REP" FOR APPEND AS #125 PRINT #125, " RAPPORTO DEI COSTI" PRINT #125, "" PRINT #125, "" PRINT #125, "File: " + PERCORSO$ + nfu$ + ".REP" PRINT #125, "Creato il: " + DATE$ PRINT #125, "Alle ore: " + TIME$ PRINT #125, "" PRINT #125, " L'operatore " + nomut$ + " ha lavorato Nø " + STR$(oretotali) + " ore," PRINT #125, "per un totale di œ " + STR$(lCostoOraLavorativa * oretotali) + "." PRINT #125, STRING$(80, 42) CLOSE #125 ' Sgrossatura delle informazione del file .UTM OPEN nfu$ + ".UTM" FOR INPUT AS #126 OPEN nfu$ + ".REP" FOR APPEND AS #125 WHILE NOT EOF(126) INPUT #126, sStringaInput$ IF LEFT$(sStringaInput$, 1) = "-" THEN PRINT #125, sStringaInput$ IF LEFT$(sStringaInput$, 1) = "#" THEN PRINT #125, " {Commessa esterna:": PRINT #125, sStringaInput$ + "}" IF LEFT$(sStringaInput$, 2) = "@#" THEN PRINT #125, " {Commessa esterna marchiata:": PRINT #125, sStringaInput$ + "}" IF LEFT$(sStringaInput$, 1) = ">" THEN PRINT #125, " " + MID$(sStringaInput$, 41, (LEN(sStringaInput$) - 54)) + " ore.": PRINT #125, "" WEND PRINT #125, CHR$(12) CLOSE ' Visualizzazione dati rapporto COLOR 14, 4: CALL sottofondo: COLOR 14, 1: CALL cornice(9, 10, 17, 60): COLOR 14, 1 LOCATE 9, 33: PRINT "RAPPORTO DEI COSTI" LOCATE 11, 12: PRINT "File: " + PERCORSO$ + nfu$ + ".REP" LOCATE 12, 12: PRINT "Creato il: " + DATE$ LOCATE 13, 12: PRINT "Alle ore: " + TIME$ LOCATE 14, 12: PRINT " L'operatore " + nomut$ + " ha lavorato Nø " + STR$(oretotali) + " ore," lCostoTotale = lCostoOraLavorativa * oretotali LOCATE 15, 12: PRINT "per un totale di œ " + STR$(lCostoTotale) + "." LOCATE 17, 26: PRINT "Premi un Tasto per continuare" CALL pausa(0) MESS$ = "Vuoi STAMPARE il File Rapporto(s/N)": CALL inputmess(MESS$, 2): COLOR 14, 1: CALL ikey: s1$ = carattere$ IF s1$ <> "S" AND s1$ <> "s" THEN MESS$ = "Vuoi ELIMINARE il File dei Tempi(s/N)": CALL inputmess(MESS$, 2): COLOR 14, 1: CALL ikey: s1$ = carattere$ IF s1$ = "S" OR s1$ = "s" THEN SHELL "DEL " + nfu$ + ".UTM>NUL" MODIFICAUTM = 1 saltare = 1 EXIT SUB END IF MODIFICAUTM = 0 saltare = 1 EXIT SUB ELSE CALL inputmess("Indicare il nome della Porta della stampante", 5): INPUT percorso2$ CALL messaggiy("Stampa in corso....", 15) SHELL "TYPE " + PERCORSO$ + nfu$ + ".REP>" + percorso2$ END IF MESS$ = "Vuoi ELIMINARE il File dei Tempi(s/N)": CALL inputmess(MESS$, 2): COLOR 14, 1: CALL ikey: s1$ = carattere$ IF s1$ = "S" OR s1$ = "s" THEN SHELL "DEL " + nfu$ + ".UTM>NUL" MODIFICAUTM = 1 saltare = 1 END IF END SUB SUB SHELLDOS SHELL "del dirt>nul" COLOR 7, 0 CLS CALL MESSAGGInt("DIGITARE - EXIT + INVIO - PER TORNARE IN UTM V3.2") PRINT PRINT SHELL MODIFICAUTM = 1 END SUB SUB sottofondo CLS FOR riga = 3 TO 23 COLOR 14, 6: LOCATE riga, 1: PRINT STRING$(80, 176) NEXT riga END SUB SUB spostamento (indiceselezione, inizio, fine, strdef$(), indice) COLOR 14, 1: FOR indice = inizio TO fine: LOCATE 9 + indice, 25: PRINT strdef$(indice): NEXT indice IF indiceselezione = fine + 1 THEN indiceselezione = 1 IF indiceselezione = 0 THEN indiceselezione = fine LOCATE indiceselezione + 9, 22: FOR col = 22 TO 59: COLOR 14, 4: LOCATE indiceselezione + 9, col: PRINT CHR$(SCREEN(indiceselezione + 9, col)): NEXT col END SUB