Last active
August 29, 2015 14:13
-
-
Save zobar/60d22dc85e1608676b27 to your computer and use it in GitHub Desktop.
Sample program from Applesoft BASIC Programmer's Reference Manual
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 10 REM POSTAGE RATES | |
| 20 : | |
| 30 REM DETERMINES POSTAGE FEES | |
| 40 REM FOR EXPRESS, FIRST CLASS, | |
| 50 REM AND PRIORITY MAIL | |
| 60 REM V29/01/82 | |
| 70 REM BY JOHN SCRIBBLEMONGER | |
| 100 REM MENU OF POSTAGE CLASSES | |
| 110 HOME | |
| 120 TITLE$ = "POSTAGE RATES" | |
| 130 PRINT | |
| 140 HTAB 21-LEN (TITLE$) / 2 | |
| 150 PRINT TITLE$ | |
| 160 VTAB 6 | |
| 170 PRINT "1. EXPRESS" | |
| 180 PRINT "2. FIRST CLASS" | |
| 190 PRINT "3. PRIORITY" | |
| 200 PRINT | |
| 210 PRINT "4. END THE PROGRAM" | |
| 300 REM GET CLASS OF MAIL | |
| 310 VTAB 14 | |
| 320 PRINT "Press the number of your choice:"; | |
| 330 GET C$ | |
| 335 REM CHECK FOR VALIDITY | |
| 340 IF C$ = "4" THEN END | |
| 350 IF VAL (C$) > 0 AND VAL (C$) < 4 THEN 380 | |
| 360 PRINT CHR$ (7); CHR$ (7); | |
| 370 GOTO 330 | |
| 380 PRINT C$ | |
| 390 C = VAL (C$) | |
| 500 REM GET WEIGHT OF ITEM | |
| 505 VTAB 16 | |
| 510 PRINT "Please enter the WEIGHT - a number plus an O (for ounces) or a P (for pounds) - and press the RETURN key: "; | |
| 520 CALL -868 | |
| 530 INPUT ""; W$ | |
| 540 W1$ = RIGHT$ (W$, 1) | |
| 550 W = VAL (W$) | |
| 555 REM WAS ENTERED WEIGHT VALID? | |
| 560 IF W > 0 AND (W1$ = "O" OR W1$ = "P") THEN 710 | |
| 570 PRINT CHR$ (7); CHR$ (7) | |
| 580 GOTO 500 | |
| 700 REM CHECK CONSISTENCY | |
| 710 ON C GOSUB 10000, 11000, 12000 | |
| 720 IF NOT EFLAG THEN 910 | |
| 730 GOSUB 60000 : REM KEYSTALL | |
| 740 EFLAG = 0 | |
| 750 CLEAR | |
| 760 GOTO 100 | |
| 900 REM FIND APPROPRIATE CODE FOR PROCESSING | |
| 910 ON C GOSUB 1000, 2000, 3000 | |
| 920 GOSUB 61000 : REM FORMATTER | |
| 930 PRINT | |
| 935 REM DISPLAY RESULTS | |
| 940 PRINT "POSTAGE NEEDED: $"; T$ | |
| 950 GOSUB 60000 : REM KEYSTALL | |
| 960 CLEAR | |
| 970 GOTO 100 | |
| 999 REM SUBROUTINES BEGIN HERE | |
| 1000 REM EXPRESS MAIL CALCULATION | |
| 1010 W = INT (W + .99) | |
| 1020 T = R (W) | |
| 1030 RETURN | |
| 2000 REM FIRST CLASS CALCULATION | |
| 2010 T = .20 + INT (W + .99 - 1) * .17 | |
| 2020 RETURN | |
| 3000 REM PRIORITY MAIL CALCULATION | |
| 3010 W = INT (W + .99) | |
| 3020 IF W > 10 THEN 3160 | |
| 3025 REM PRIORITY RATES TO 10 POUNDS | |
| 3030 IF W <= 1 THEN T = 2.24 | |
| 3040 IF W > 1 AND W <= 1.5 THEN T = 2.30 | |
| 3050 IF W > 1.5 AND W <= 2 THEN T = 2.54 | |
| 3060 IF W > 2 AND W <= 2.5 THEN T = 2.78 | |
| 3070 IF W > 2.5 AND W <= 3 THEN T = 3.01 | |
| 3072 IF W > 3 AND W <= 3.5 THEN T = 3.25 | |
| 3078 IF W > 3.5 AND W <= 4 THEN T = 3.49 | |
| 3080 IF W > 4 AND W <= 4.5 THEN T = 3.73 | |
| 3090 IF W > 4.5 AND W <= 5 THEN T = 3.97 | |
| 3100 IF W > 5 AND W <= 6 THEN T = 4.44 | |
| 3110 IF W > 6 AND W <= 7 THEN T = 4.92 | |
| 3120 IF W > 7 AND W <= 8 THEN T = 5.39 | |
| 3130 IF W > 8 AND W <= 9 THEN T = 5.87 | |
| 3140 IF W > 9 THEN T = 6.35 | |
| 3150 GOTO 3240 | |
| 3160 REM PRIORITY RATES FOR OVER 10 POUNDS | |
| 3170 T1 = INT (W / 5 - 1) * 2.38 + 3.97 | |
| 3180 W1 = W - INT (W / 5) * 5 | |
| 3190 IF W1 = 1 THEN T2 = .47 | |
| 3200 IF W1 = 2 THEN T2 = .95 | |
| 3210 IF W1 = 3 THEN T2 = 1.42 | |
| 3220 IF W1 = 4 THEN T2 = 1.90 | |
| 3230 T = T1 + T2 | |
| 3240 RETURN | |
| 10000 REM EXPRESS MAIL CONSISTENCY CHECK | |
| 10010 DATA 9.35, 9.35, 9.55, 9.90, 10.30, 10.65, 11.00, 11.40, 11.75, 0 | |
| 10020 X = 0 | |
| 10030 X = X + 1 | |
| 10040 READ R (X) | |
| 10050 IF R (X) = 0 THEN 10070 | |
| 10060 GOTO 10030 | |
| 10070 X = X - 1 | |
| 10080 IF W1$ = "P" THEN 10100 | |
| 10090 W = W / 16 | |
| 10100 IF W <= X THEN 10140 | |
| 10110 PRINT | |
| 10120 PRINT CHR$ (7); CHR$ (7); "TOO HEAVY FOR MY TABLES - PLEASE CALL THE POST OFFICE" | |
| 10130 EFLAG = 1 | |
| 10140 RETURN | |
| 11000 REM FIRST CLASS CONSISTENCY CHECK | |
| 11010 IF W1$ = "O" AND W < 12.01 THEN 11060 | |
| 11020 PRINT | |
| 11030 PRINT CHR$ (7); CHR$ (7); "TOO HEAVY FOR FIRST CLASS" | |
| 11040 PRINT "TRY PRIORITY MAIL" | |
| 11050 EFLAG = 1 | |
| 11060 RETURN | |
| 12000 REM PRIORITY MAIL CONSISTENCY CHECK | |
| 12010 IF W1$ = "P" THEN 12090 | |
| 12020 IF W > 12 THEN 12080 | |
| 12030 PRINT | |
| 12040 PRINT CHR$ (7); CHR$ (7); "TOO LIGHT FOR PRIORITY MAIL -" | |
| 12050 PRINT "TRY FIRST CLASS" | |
| 12060 EFLAG = 1 | |
| 12070 GOTO 12150 | |
| 12080 W = W / 16 | |
| 12090 IF W <= 70 THEN 12150 | |
| 12100 PRINT | |
| 12110 PRINT CHR$ (7); CHR$(7); "TOO HEAVY FOR PRIORITY MAIL -" | |
| 12120 PRINT "TRY ONE OF THE AIR EXPRESS COMPANIES" | |
| 12130 EFLAG = 1 | |
| 12150 RETURN | |
| 59999 REM UTILITY ROUTINES | |
| 60000 REM KEYSTALL | |
| 60010 VTAB 24 | |
| 60020 INVERSE | |
| 60030 PRINT "PRESS RETURN TO GO ON..."; | |
| 60040 GET A$ | |
| 60050 NORMAL | |
| 60060 RETURN | |
| 61000 REM MONEY FORMATTER | |
| 61010 T$ = STR$ (T) | |
| 61020 IF T = INT (T) THEN T$ = T$ + ".00" | |
| 61030 IF ASC (RIGHT$ (T$,2)) = 46 THEN T$ = T$ + "0" | |
| 61040 RETURN |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment