\OPEN LPT1: IGNORE\MOVE A TO X\CLOSE LPT1:
\OPEN LPT2: IGNORE\MOVE A TO Y\CLOSE LPT2:
\OPEN LPT3: IGNORE\MOVE A TO Z\CLOSE LPT3:
\ON ERROR JUMP NEWUSER
\READ TIMEDATE.AUX
\X CURRENT_USER\READ TIMEDATE.MAC
\BLANK 0,0,320,200
\LOCATE 0,0
Gathering machine data and writing it to TIMEDATE.PRN...
\CURSOR 0,0
\CALL SETCURRDRIV\MOVE #303 TO #305
\MOVE X TO #330\MOVE Y TO #331\MOVE Z TO #332
\MOVE 100 TO G\MOVE 400 TO H\X NEXTDAY
\MOVE #G TO #H\ADD 1 TO H\ADD 1 TO G\IF G<107\JUMP NEXTDAY\ENDIF
\CLEAR ON ERROR
\CALL SET_PARTS
\OPEN TIMEDATE.PRN
\IF #101=#301 AND #102=#302\PRINT "Happy Birthday ",#300,"!"
\JUMP BIRTHDAY
\ELSE
\PRINT "Hi there ",#300,".  Welcome back. It's good to see you again."
\ENDIF
\PRINT "To-day is ",
\IF #101='01'\PRINT 'January  ', \ELSE
\IF #101='02'\PRINT 'February ', \ELSE
\IF #101='03'\PRINT 'March ',    \ELSE
\IF #101='04'\PRINT 'April ',    \ELSE
\IF #101='05'\PRINT 'May ',      \ELSE
\IF #101='06'\PRINT 'June ',     \ELSE
\IF #101='07'\PRINT 'July ',     \ELSE
\IF #101='08'\PRINT 'August ',   \ELSE
\IF #101='09'\PRINT 'September ',\ELSE
\IF #101='10'\PRINT 'October ',  \ELSE
\IF #101='11'\PRINT 'November ', \ELSE
\IF #101='12'\PRINT 'December ', \ENDIF
\PRINT #102,', ',
\IF #103<93\PRINT '20',\ELSE\PRINT '19 ',
\PRINT #104,'. '
\X BIRTHDAY
\PRINT 'The time is ',
\PRINT #105,' hours ',
\PRINT #106,' minutes.'
\MOVE K TO #320
\IF #500=0\PRINT "The P11 program TIMEDATE.TXT has never been run on this"
\PRINT "machine before, or TIMEDATE.AUX has been erased."
\JUMP FIRST_TIME\ELSE\PRINT "Your previous log on was ",
\IF #101=#401 AND #102=#402\PRINT 'to-day at ',\JUMP LAST_TIME\ENDIF
\PRINT 'on ',
\IF #401='01'\PRINT 'January  ', \ELSE
\IF #401='02'\PRINT 'February ', \ELSE
\IF #401='03'\PRINT 'March ',    \ELSE
\IF #401='04'\PRINT 'April ',    \ELSE
\IF #401='05'\PRINT 'May ',      \ELSE
\IF #401='06'\PRINT 'June ',     \ELSE
\IF #401='07'\PRINT 'July ',     \ELSE
\IF #401='08'\PRINT 'August ',   \ELSE
\IF #401='09'\PRINT 'September ',\ELSE
\IF #401='10'\PRINT 'October ',  \ELSE
\IF #401='11'\PRINT 'November ', \ELSE
\IF #401='12'\PRINT 'December ', \ENDIF
\PRINT #402,' at ',
\X LAST_TIME
\PRINT #405,' hours ',#406,' minutes. '
\PRINT "You have contacted me ",#500,' times, so far.'
\X FIRST_TIME
\PRINT 'You ',
\IF O=0\PRINT 'do not have any',\ELSE\PRINT 'have ',O,' pages of',\ENDIF\PRINT ' Expanded memory available. '
\PRINT "The computer is a ",
\IF M=45\PRINT 'Compaq of the PC type',\ELSE
\IF M=154\PRINT 'Compaq Plus of the XT type',\ELSE
\IF M=249\PRINT 'PC Convertible',\ELSE
\IF M=252\PRINT 'PC AT or better class machine',\ELSE
\IF M=253\PRINT 'PC junior',\ELSE
\IF M=254\PRINT 'PC XT',\ELSE
\IF M=255\PRINT 'PC',\ELSE\PRINT 'type code ',M,\ENDIF\PRINT '.  '
\PRINT "The monitor is a ",
\IF T=0\PRINT 'Monochrome or CGA',\ELSE
\IF T=1\PRINT 'Monochrome EGA',\ELSE
\IF T=2\PRINT 'Color EGA',\ELSE
\IF T=4\PRINT 'Color EGA',\ELSE
\IF T=5\PRINT 'Monochrome EGA',\ELSE
\IF T=7\PRINT 'Monochrome VGA',\ELSE
\IF T=8\PRINT 'Color VGA or better',\ELSE\PRINT 'unknown variety, type',T',\ENDIF
\ENDIF\PRINT '. '
\PRINT "You are running DOS version ",I,' point ',
\MOVE J TO #310\CONVERT #310
\IF J<10\PRINT '0',\ENDIF\PRINT #310[5,2],'. '
\CALL SETCURRDRIV\MOVE #303 TO #308
\PRINT 'The current default drive is ',#303,'. '
\MOVE 'DIR TIMEDATE.AUX>TIMEDATE.DAT' TO #312
\EXEC DOS>(#312)\IF A=-1\JUMP NOSPACEINFO\ENDIF
\MOVE 'bytes free' TO #201\CALLM RD_SPACEDATA\LEN #204\IF A>0\PRINT 'You have ',
\MOVE #204[4,1] TO #312\IF #312=' '\PRINT 'just ',#204,\ELSE\BUILD #204='over ',#204[1,5],'000000 bytes free'\PRINT #204,\ENDIF
\IF A>0\PRINT ' on the current drive. '\ENDIF
\X NOSPACEINFO\MOVE 3 TO K
\X SPACEFACTS\IF K=#320\ADD 1 TO K\ENDIF
\IF K>L\JUMP ONE_HARD_DRIVE\ENDIF
\BUILD #312='COPY ',#308,':\TIMEDATE.AUX ',
\CALL SETCURRDRIV
\BUILD #312=#312,#303,':\TIMEDATE.AUX>TIMEDATE.DAT',
\EXEC DOS>(#312)\IF A=-1\JUMP ONE_HARD_DRIVE\ENDIF
\MOVE 'file(s) copied' TO #201\CALLM RD_COPIED\IF Z=0\JUMP ONE_HARD_DRIVE\ENDIF
\BUILD #311='DIR ',#303,':\TIMEDATE.AUX>TIMEDATE.DAT'
\EXEC DOS>(#311)\IF A=-1\JUMP ONE_HARD_DRIVE\ENDIF
\MOVE 'bytes free' TO #201\CALLM RD_SPACEDATA\LEN #204\IF A>0\PRINT 'You have ',
\MOVE #204[4,1] TO #312\IF #312=' '\PRINT 'just ',#204,\ELSE\BUILD #204='over ',#204[1,5],'000000 bytes free'\PRINT #204,\ENDIF
\IF A>0\PRINT ' on drive ',#303,'. '\ENDIF
\IF K<L\ADD 1 TO K\JUMP SPACEFACTS\ENDIF
\X ONE_HARD_DRIVE
\BLANK 0,0,320,49
\MOUSE ?\IF A=0\PRINT 'No mouse was detected.'\ELSE
\PRINT 'There is a mouse.'\ENDIF
\JOYSTICK ?\IF A=0\PRINT 'No joystick port was detected.'\ELSE
\PRINT 'There is a joystick port.'\ENDIF
\DIGITIZER ?\IF A=0\PRINT 'No digitizing tablet was detected.'\ELSE
\PRINT 'There is a digitizing tablet.'\ENDIF
\IF #330=2\PRINT 'An LPT1 serial port was not detected.'\ELSE
\PRINT 'The status byte from LPT1 is:',#330,'. '
\MOVE #330 TO #11\CALL PRINTER_MEANING\ENDIF
\IF #331=2\PRINT 'An LPT2 serial port was not detected.'\ELSE
\PRINT 'The status byte from LPT2 is:',#331,'. '
\MOVE #331 TO #11\CALL PRINTER_MEANING\ENDIF
\IF #332=2\PRINT 'An LPT3 serial port was not detected.'\ELSE
\PRINT 'The status byte from LPT3 is:',#332,'. '
\MOVE #332 TO #11\CALL PRINTER_MEANING\ENDIF
\PRINT "If any of this information is not correct, "
\PRINT "please contact Russell Hoffman at:"
\PRINT "The Animated Software Co.  (800) 551-2726."
\PRINT "TIMEDATE.PRN was prepared by:"
\PRINT #300
\PRINT #341
\PRINT #342
\PRINT #343
\PRINT #344
\PRINT #345
\PRINT "END OF REPORT!"
\IF #300="Russell D. Hoffman"\PRINT "Hello Russell!"\ENDIF
\CLOSE TIMEDATE.PRN
\ADD 1 TO #500\BUILD #316=#305,':',
\WRITE /(#316)/TIMEDATE.AUX
\END
\X PRINTER_MEANING\MOVE 128 TO V
\X PR_STATUS
\PRINT "Bit 7: ",\IF #11>=V\SUB V FROM #11\PRINT 'a 1 means Printer Not busy.'\ELSE\PRINT 'a 0 means Printer Busy.'\ENDIF\DIVIDE V BY 2
\PRINT "Bit 6: ",\IF #11>=V\SUB V FROM #11\ENDIF\PRINT 'has not been tested.'\DIVIDE V BY 2
\PRINT "Bit 5: ",\IF #11>=V\SUB V FROM #11\PRINT 'a 1 means Out of paper.'\ELSE\PRINT 'a 0 means Not out of paper.'\ENDIF\DIVIDE V BY 2
\PRINT "Bit 4: ",\IF #11>=V\SUB V FROM #11\PRINT 'a 1 means Printer Selected.'\ELSE\PRINT 'a 0 means Printer offline.'\ENDIF\DIVIDE V BY 2
\PRINT "Bit 3: ",\IF #11>=V\SUB V FROM #11\PRINT 'a 1 means Transfer or I/O Error.'\ELSE\PRINT 'a 0 means No transmission errors.'\ENDIF\DIVIDE V BY 2
\PRINT "Bit 2: ",\IF #11>=V\SUB V FROM #11\ENDIF\PRINT 'is not used.'\DIVIDE V BY 2
\PRINT "Bit 1: ",\IF #11>=V\SUB V FROM #11\ENDIF\PRINT 'is not used.'\DIVIDE V BY 2
\PRINT "Bit 0: ",\IF #11>=V\PRINT 'a 1 means Time-out Error.'\ELSE\PRINT 'a 0 means No time out error.'\ENDIF
\RETURN
\X SET_PARTS
\MOVE TIME&DATE TO #100
\MOVE #100[1,2] TO #101
\MOVE #100[4,2] TO #102
\MOV #100[7,2] TO #103
\MOV #103 TO #104\CONVERT #103
\MOVE #100[10,2] TO #105
\MOVE #100[13,2] TO #106
\RETURN
\X NEWUSER\CALL SET_PARTS
\CALL SETCURRDRIV\MOVE #303 TO #305
\LOCATE 30,0\OVERLAY 0\WIDTH 260 DOTS 
In the following questions, please blank out the defaults (with <CTRL+END>) which appear for illustrative purposes.
\LOCATE 30,70
What is your month of birth?
\"
\"
(Use leading 0 if month <10)
\MOVE '08' TO #301 ;MY BIRTHDAY IS AUGUST 14th
\CURSOR 4,15\QUESTION #301,2
\LOCATE 30,70
What is your day of birth?
\"
\"
(Use leading 0 is day <10)
\MOVE '14' TO #302
\CURSOR 4,16\QUESTION #302,2
\LOCATE 30,70
What is your name?
\"
\"
(Up to 40 characters)
\MOVE "Russell D. Hoffman" TO #300 ;SBPRO voice reader makes Russ'll sound more like "Russell" than Russell does...
\CURSOR 4,17\QUESTION #300,40
\LOCATE 30,70
What is your EMAIL address? 
\"
\"
(Up to 40 characters)
\MOVE "RUSSELLDH@AOL.COM" TO #341
\CURSOR 4,18\QUESTION #341,40
\LOCATE 30,70
What is your phone number? 
\"
\"
(Up to 40 characters)
\MOVE "(800) 551-2726" TO #342
\CURSOR 4,19\QUESTION #342,40
\LOCATE 30,70
What is your company name, if any? 
\"
(Up to 60 characters)
\MOVE "The Animated Software Company" TO #343
\CURSOR 4,20\QUESTION #343,60
\LOCATE 30,70
What is your address? 
\"
\"
(Up to 60 characters)
\MOVE "P.O. Box 188006" TO #344
\CURSOR 4,21\QUESTION #344,60
\LOCATE 30,70
What is your city and state and zip code?  
\"
(Up to 60 characters)
\MOVE "Carlsbad, CA 92009-0801" TO #345
\CURSOR 4,22\QUESTION #345,60
\BLANK 0,0,320,200
\MOVE 0 TO #500 ;HOW MANY TIMES FOREVER...
\BUILD #316=#305,':',
\LOCATE 0,50
Writing TIMEDATE.AUX which is our data file...  
\WRITE /(#316)/TIMEDATE.AUX
\JUMP CURRENT_USER
\X SETCURRDRIV
\IF K=1\MOVE 'A' TO #303\ELSE
\IF K=2\MOVE 'B' TO #303\ELSE
\IF K=3\MOVE 'C' TO #303\ELSE
\IF K=4\MOVE 'D' TO #303\ELSE
\IF K=5\MOVE 'E' TO #303\ELSE
\IF K=6\MOVE 'F' TO #303\ELSE
\IF K=7\MOVE 'G' TO #303\ELSE
\IF K=8\MOVE 'H' TO #303\ELSE
\IF K=9\MOVE 'I' TO #303\ELSE
\IF K=10\MOVE 'J' TO #303\ELSE\MOVE 'greater than J' TO #303\ENDIF
\RETURN
