'===========================================================================
' Subject: Create Progress Bar                Date: 12-22-02 (  :  )       
'  Author: Fred Buffington                    Code: Qbasic,QB,PDS          
'  Origin: oasys@sbcglobal.net              Packet: TEXT.ABC
'===========================================================================
'Fred Buffington
'Progress Bar
'QB, PDS
 
DECLARE SUB progressinit () 
DECLARE SUB progressupdate (perc%, fi$) 
    'WIDTH 80, 43 
    COLOR 15, 1 
    CLS 
REM -- define line draw characters    
     ulc$ = CHR$(218): urc$ = CHR$(191): v$ = CHR$(179) 
     hor$ = CHR$(196): llc$ = CHR$(192): lrc$ = CHR$(217) 
     progressinit 
REM -- progress loop 
    COLOR 7, 1 
    FOR k% = 1 TO 100 
   perc% = perc% + 1 
    
'do something here 
'your code to install/or whatever here 
'show percentage 
 'Replace fi$ WITH actual filename   
   fi$ = "File" + LTRIM$(STR$(perc%)) + ".txt" 
   progressupdate perc%, fi$ 
 
    NEXT k% 
 
    x$ = "" 
    WHILE x$ = "": x$ = INKEY$: WEND 
 
SUB progressinit 
REM -- define line draw characters 
     ulc$ = CHR$(218): urc$ = CHR$(191): v$ = CHR$(179) 
     hor$ = CHR$(196): llc$ = CHR$(192): lrc$ = CHR$(217) 
 
REM -- draw the initial box 
    
    COLOR 15, 7 
    LOCATE 12, 15 
    PRINT ulc$; STRING$(44, hor$); : COLOR 0, 7: PRINT urc$; 
    FOR k% = 1 TO 7 
   COLOR 15, 7 
   LOCATE k% + 12, 15: PRINT v$; 
   COLOR 0, 7 
   LOCATE k% + 12, 15 + 44 + 1: PRINT v$; 
    NEXT k% 
    COLOR 15, 7 
    LOCATE 20, 15: PRINT llc$; : COLOR 0, 7: PRINT STRING$(44, hor$); lrc$; 
REM ---------------- 
    COLOR 15, 1 
    LOCATE 13, 16: PRINT SPACE$(44); : LOCATE 13, 16: PRINT "Progress"; 
    COLOR 0, 7 
    FOR k% = 14 TO 19 
   LOCATE k%, 16: PRINT SPACE$(44); 
    NEXT 
 
REM -- progress box 
    COLOR 0, 7 
    LOCATE 14, 17 
    PRINT ulc$; STRING$(40, hor$); : COLOR 15, 7: PRINT urc$; 
    FOR k% = 1 TO 1 
   COLOR 0, 7 
   LOCATE k% + 14, 17: PRINT v$; 
   COLOR 15, 7 
   LOCATE k% + 14, 17 + 40 + 1: PRINT v$; 
    NEXT k% 
    COLOR 0, 7 
    LOCATE 16, 17: PRINT llc$; : COLOR 15, 7: PRINT STRING$(40, hor$); lrc$; 
 
REM -- exit button 
    LOCATE 17, 34 
    COLOR 15, 7: PRINT ulc$; : COLOR 15, 7: PRINT STRING$(5, hor$); : COLOR 0, 7: PRINT urc$; 
    COLOR 15, 7: LOCATE 18, 34: PRINT v$; : COLOR 0, 7: LOCATE 18, 40: PRINT v$; 
    LOCATE 19, 34: COLOR 15, 7: PRINT llc$; : COLOR 0, 7: PRINT STRING$(5, hor$); : COLOR 0, 7: PRINT lrc$; 
    COLOR 0, 7 
    LOCATE 18, 35: PRINT "Exit"; 
    LOCATE 18, 36: COLOR 15, 7: PRINT "x"; 
 
END SUB 
 
SUB progressupdate (perc%, fi$) 
     ulc$ = CHR$(218): urc$ = CHR$(191): v$ = CHR$(179) 
     hor$ = CHR$(196): llc$ = CHR$(192): lrc$ = CHR$(217) 
   
   boxes% = perc% * 40 / 100 
   COLOR 0, 7: LOCATE 14, 18: PRINT STRING$(40, hor$); '16: PRINT SPACE$(44); 
   LOCATE 14, (44 - LEN(fi$)) / 2 + 16: PRINT fi$ 
   COLOR 7, 1 
 
   LOCATE 15, 18 
   PRINT STRING$(boxes%, v$); 
'SLEEP 1 
 IF perc% < 100 THEN 
   IF boxes% < 19 THEN COLOR 0, 7: LOCATE 15, 36: PRINT USING "##"; perc%; 
   IF boxes% > 19 THEN COLOR 14, 1: LOCATE 15, 36: PRINT USING "##"; perc%; 
   IF boxes% = 19 THEN 
      COLOR 14, 1: LOCATE 15, 36: PRINT MID$(LTRIM$(STR$(perc%)), 1, 1); 
      'SLEEP 1 
      COLOR 0, 7: LOCATE 15, 37: PRINT MID$(LTRIM$(STR$(perc%)), 2, 1); 
      'SLEEP 1 
   END IF 
   COLOR 7, 1 
 END IF 
   '     FOR jj& = 1 TO 200000: NEXT 
 SLEEP 1 'for testing purposes only 
 
END SUB 
