'
' Smile by Richard Copeland
'

' Sub (3) total

DECLARE SUB Face ()
DECLARE SUB Empty.Screen ()
DECLARE SUB Print.Screen ()

GOTO 2  ' Start Program at point "2"

Start:  ' Go here when told

Empty.Screen

2 ON ERROR GOTO Error1
SCREEN 2

LOCATE 23, 1:  PRINT "Z = Zoom "
LOCATE 23, 12: PRINT "P = Print "
LOCATE 23, 23: PRINT "Q = Quit "
LOCATE 23, 34: PRINT "S = Scroll "
LOCATE 23, 45: PRINT "A = Animation"
LOCATE 1, 1
 
  CIRCLE (64, 44), 25, 1
  CIRCLE (124, 44), 25, 1
  CIRCLE (64, 44), 15, 1
  CIRCLE (124, 44), 15, 1
  PAINT (64, 44), 2, 1
  PAINT (124, 44), 2, 1
  CIRCLE (95, 64), 10, 1
  LINE (64, 95)-(126, 96), 2, B
  LINE (74, 96)-(114, 98), 2, BF
  LINE (80, 97)-(108, 100), 2, BF
  LINE (82, 98)-(106, 105), 2, BF
  CIRCLE (50, 95), 12, 1
  CIRCLE (140, 95), 12, 1
  PAINT (140, 95), 2, 1
  PAINT (50, 95), 2, 1
  CIRCLE (95, 65), 104, 1
 LINE (220, 4)-(244, 3), 1, BF 'S
 LINE (221, 3)-(225, 6), 1, BF
 LINE (220, 3)-(242, 4), 1, BF
 LINE (223, 2)-(244, 4), 1, BF
 LINE (217, 5)-(220, 8), 1, BF
 LINE (218, 8)-(225, 10), 1, BF
 LINE (225, 10)-(230, 12), 1, BF
 LINE (230, 12)-(234, 18), 1, BF
 LINE (226, 16)-(230, 20), 1, BF
 LINE (213, 19)-(226, 21), 1, BF
 LINE (215, 29)-(221, 53), 1, BF 'M
 LINE (210, 50)-(220, 53), 1, BF
 LINE (229, 34)-(221, 31), 1, BF
 LINE (231, 29)-(225, 53), 1, BF
 LINE (236, 50)-(226, 53), 1, BF
 LINE (220, 59)-(226, 78), 1, BF 'I
 LINE (220, 86)-(228, 106), 1, BF 'L
 LINE (228, 103)-(236, 106), 1, BF
 LINE (220, 116)-(228, 146), 1, BF 'E
 LINE (224, 116)-(238, 120), 1, BF
 LINE (224, 128)-(236, 132), 1, BF
 LINE (224, 142)-(238, 146), 1, BF

 INPUT "(", a$

IF a$ = "Z" OR a$ = "z" THEN 3
IF a$ = "P" OR a$ = "p" THEN Print.Screen
IF a$ = "Q" OR a$ = "q" THEN CLS : PRINT "Please Wait...": CHAIN "moneycga"
IF a$ = "S" OR a$ = "s" THEN GOTO Start
IF a$ = "A" OR a$ = "a" THEN Face ELSE GOTO 2
IF a$ = " " THEN GOTO 2

3 SCREEN 1
  CIRCLE (64, 44), 25, 1
  CIRCLE (124, 44), 25, 1
  CIRCLE (64, 44), 15, 1
  CIRCLE (124, 44), 15, 1
  PAINT (64, 44), 2, 1
  PAINT (124, 44), 2, 1
  CIRCLE (95, 64), 10, 1
  LINE (64, 95)-(126, 96), 2, B
  LINE (74, 96)-(114, 98), 2, BF
  LINE (80, 97)-(108, 100), 2, BF
  LINE (82, 98)-(106, 105), 2, BF
  CIRCLE (50, 95), 12, 1
  CIRCLE (140, 95), 12, 1
  PAINT (140, 95), 2, 1
  PAINT (50, 95), 2, 1
  CIRCLE (95, 75), 85, 1
SCREEN 1
LINE (220, 4)-(244, 3), 1, BF 'S
LINE (221, 3)-(225, 6), 1, BF
LINE (220, 3)-(242, 4), 1, BF
LINE (223, 2)-(244, 4), 1, BF
LINE (217, 5)-(220, 8), 1, BF
LINE (218, 8)-(225, 10), 1, BF
LINE (225, 10)-(230, 12), 1, BF
LINE (230, 12)-(234, 18), 1, BF
LINE (226, 16)-(230, 20), 1, BF
LINE (213, 19)-(226, 21), 1, BF
LINE (215, 29)-(221, 53), 1, BF 'M
LINE (210, 50)-(220, 53), 1, BF
LINE (229, 34)-(221, 31), 1, BF
LINE (231, 29)-(225, 53), 1, BF
LINE (236, 50)-(226, 53), 1, BF
LINE (220, 59)-(226, 78), 1, BF 'I
LINE (220, 86)-(228, 106), 1, BF 'L
LINE (228, 103)-(236, 106), 1, BF
LINE (220, 116)-(228, 146), 1, BF 'E
LINE (224, 116)-(238, 120), 1, BF
LINE (224, 128)-(236, 132), 1, BF
LINE (224, 142)-(238, 146), 1, BF

LOCATE 1, 1

INPUT "(", a$

IF a$ = "P" OR a$ = "p" THEN Print.Screen
IF a$ = "S" OR a$ = "s" THEN GOTO Start
IF a$ = "Q" OR a$ = "q" THEN CLS : PRINT "Please Wait...": CHAIN "moneycga"
IF a$ = "A" OR a$ = "a" THEN Face ELSE GOTO 2
IF a$ = " " THEN GOTO 2


DATA 205, 5, 203 : ' int 5  retf  'Machine-language code
                                  'for printing screen.
GOTO 2

Error1:
CLS : PRINT "ERROR - You need a graphics adapter to run SMILE.BAS"
PRINT
PRINT "Please Wait...": CHAIN "MoneyCga"

SUB Empty.Screen

'
' Sub to make face scroll away
'

LOCATE 1, 1

PRINT "                                          "
PRINT "                                          "
PRINT "                                          "
PRINT "                                          "
PRINT "                                          "
PRINT "                                          "
PRINT "                                          "
PRINT "                                          "
PRINT "                                          "
PRINT "                                          "
PRINT "                                          "
PRINT "                                          "
PRINT "                                          "
PRINT "                                          "
PRINT "                                          "
PRINT "                                          "
PRINT "                                          "
PRINT "                                          "
PRINT "                                          "
PRINT "                                          "
PRINT "                                          "

SCREEN 1

'Play scale in 7 different octaves
scale$ = "CDEFGAB"
PLAY "L16"
FOR i% = 0 TO 6
    PLAY "O" + STR$(i%)
    PLAY "X" + VARPTR$(scale$)
NEXT i%
PRINT "                     "
LOCATE 1, 15: PRINT "* Smile *"
LOCATE 2, 1: PRINT "I can do all"
LOCATE 3, 1: PRINT "things through"
LOCATE 4, 1: PRINT "Christ which"
LOCATE 5, 1: PRINT "strengtheneth"
LOCATE 6, 1: PRINT "  me!"
LOCATE 7, 1: PRINT "       Phil. 4:13"
LOCATE 11, 1: PRINT "* You got a friend in Christ *"
PRINT
LOCATE 13, 1: PRINT "*L O O K  I T  U P !*"

SLEEP 10: CLS

END SUB

SUB Face

LOCATE 1, 1: PRINT "     "

DO
 LOCATE 13, 13: PRINT " "
 LOCATE 6, 9: PRINT "."
 LOCATE 6, 17: PRINT "."
SLEEP 2
  CIRCLE (64, 44), 25, 1
  CIRCLE (124, 44), 25, 1
  CIRCLE (64, 44), 15, 1
  CIRCLE (124, 44), 15, 1
  PAINT (64, 44), 2, 1
  PAINT (124, 44), 2, 1
  CIRCLE (95, 64), 10, 1
  LINE (64, 95)-(126, 96), 2, B
  LINE (74, 96)-(114, 98), 2, BF
  LINE (80, 97)-(108, 100), 2, BF
  LINE (82, 98)-(106, 105), 2, BF
  CIRCLE (50, 95), 12, 1
  CIRCLE (140, 95), 12, 1
  PAINT (140, 95), 2, 1
  PAINT (50, 95), 2, 1
  CIRCLE (95, 65), 10, 1
 LINE (220, 4)-(244, 3), 1, BF 'S
 LINE (221, 3)-(225, 6), 1, BF
 LINE (220, 3)-(242, 4), 1, BF
 LINE (223, 2)-(244, 4), 1, BF
 LINE (217, 5)-(220, 8), 1, BF
 LINE (218, 8)-(225, 10), 1, BF
 LINE (225, 10)-(230, 12), 1, BF
 LINE (230, 12)-(234, 18), 1, BF
 LINE (226, 16)-(230, 20), 1, BF
 LINE (213, 19)-(226, 21), 1, BF
 LINE (215, 29)-(221, 53), 1, BF 'M
 LINE (210, 50)-(220, 53), 1, BF
 LINE (229, 34)-(221, 31), 1, BF
 LINE (231, 29)-(225, 53), 1, BF
 LINE (236, 50)-(226, 53), 1, BF
 LINE (220, 59)-(226, 78), 1, BF 'I
 LINE (220, 86)-(228, 106), 1, BF 'L
 LINE (228, 103)-(236, 106), 1, BF
 LINE (220, 116)-(228, 146), 1, BF 'E
 LINE (224, 116)-(238, 120), 1, BF
 LINE (224, 128)-(236, 132), 1, BF
 LINE (224, 142)-(238, 146), 1, BF
LOCATE 13, 12: PRINT " "
SLEEP 1
LOOP UNTIL INKEY$ = " "
CLS

END SUB

SUB Print.Screen

DO
LOCATE 20, 1: PRINT "                   "
LOCATE 21, 1: PRINT "                   "
LOCATE 22, 1: PRINT "                   "
LOCATE 23, 1: PRINT "                                                           "
LOCATE 1, 1: PRINT "   "
'Calls routine for printing the screen to a local printer.
DIM a%(2)
DEF SEG = VARSEG(a%(0))
FOR i% = 0 TO 2
  READ d%
  POKE VARPTR(a%(0)) + i%, d%
NEXT i%

CALL ABSOLUTE(VARPTR(a%(0)))
DEF SEG
LOOP UNTIL INKEY$ = ""

EXIT SUB

END SUB

