' QBasic Bar Graph Program ' Author.. : PeatSoft ' Date.....: 2025 ' Note(s)..: Generates a bar graph for values less than 100. ' Rounds output to the nearest multiple of 5. ' Converted from GRAFEM.PRG (dBase) ' Graph frame and bar drawing procedures DECLARE SUB GraFrame (fRow AS INTEGER, frameC AS STRING, tRow AS INTEGER, title AS STRING, graColor AS INTEGER) DECLARE SUB BarGraph (var AS INTEGER, barWidth AS INTEGER, grafRow AS INTEGER, grafCol AS INTEGER, graflbl AS STRING, barColor AS INTEGER) ' Constants for screen handling SCREEN 0 CLS COLOR 15 ' GraFrame parameters GraFrame 19, "", 4, "* QBasic GRAPHING EXAMPLE *", 15 ' Bar Graph Data BarGraph 100, 6, 18, 16, "BAR #1", 4 BarGraph 28, 6, 18, 30, "BAR #2", 2 BarGraph 63, 6, 18, 44, "BAR #3", 10 BarGraph 82, 6, 18, 58, "BAR #4", 12 COLOR 7 END SUB BarGraph (var AS INTEGER, barWidth AS INTEGER, grafRow AS INTEGER, grafCol AS INTEGER, graflbl AS STRING, barColor AS INTEGER) DIM row AS INTEGER row = grafRow DIM grafVal AS SINGLE grafVal = 2.5 COLOR barColor LOCATE grafRow, grafCol + (barWidth \ 2) - (LEN(graflbl) \ 2) PRINT graflbl DO WHILE grafVal < 101 AND grafVal <= var IF var >= grafVal + 5 THEN LOCATE row, grafCol PRINT STRING$(barWidth, CHR$(219)); ' Full bar ELSE IF var >= grafVal THEN LOCATE row, grafCol PRINT STRING$(barWidth, CHR$(220)); ' Half bar END IF END IF grafVal = grafVal + 10 row = row - 1 LOOP END SUB SUB GraFrame (fRow AS INTEGER, frameC AS STRING, tRow AS INTEGER, title AS STRING, graColor AS INTEGER) COLOR graColor LOCATE tRow, (80 - LEN(title)) \ 2 PRINT title LOCATE fRow, 10 PRINT CHR$(205); STRING$(58, CHR$(205)) ' Draw bottom frame fRow2 = fRow ' Draw vertical lines FOR cnt = 0 TO 100 STEP 10 IF cnt MOD 20 = 0 THEN LOCATE fRow, 5 PRINT RIGHT$(" " + STR$(cnt), 3); LOCATE fRow, 9 PRINT "-"; END IF LOCATE fRow - 1, 10 PRINT CHR$(179); fRow = fRow - 1 NEXT cnt LOCATE fRow2, 10 PRINT CHR$(192); END SUB