Skip to content

Instantly share code, notes, and snippets.

@zobar
Last active August 29, 2015 14:13
Show Gist options
  • Select an option

  • Save zobar/60d22dc85e1608676b27 to your computer and use it in GitHub Desktop.

Select an option

Save zobar/60d22dc85e1608676b27 to your computer and use it in GitHub Desktop.
Sample program from Applesoft BASIC Programmer's Reference Manual
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