home *** CD-ROM | disk | FTP | other *** search
/ ARM Club 1 / ARM_CLUB_CD.iso / contents / apps / print / progs / printdiary / !PrntDiary / PrintDiary (.txt) < prev   
Encoding:
RISC OS BBC BASIC V Source  |  1994-03-08  |  26.1 KB  |  816 lines

  1.  >Desk_diary
  2.  Provides a printed Desk-diary with personalised anniversary-dates, calculated-ages etc
  3.  (C) A H Evans 1993
  4.  First written on a BBC Model B and used successfully for 5 years
  5.  Rewritten (1992) in Basic 5 on an A3000 and suitable for Archimedes computers
  6.  This is version 2.10 of September 1993
  7.  There is a Full Data Description at the End of the Program
  8.  This program has no GOTO instructions; it was developed using DeskEdit.
  9.  The program controls the printer directly ie: no driver is needed.
  10.  It was tested on an Epson FX-80.
  11.  To change fonts or adjust for incompatible printers, alter the Print
  12.  Procedures at the end. Refer to corresponding control codes for your
  13.  own printer. Note that a pitch of 12 lines/inch is set-up instead
  14.  of the default 6 lines/inch. Vertical tabulation is set to give a
  15.  half-page tab and one allowing printing just below the perforations.
  16.  Reversing is also necessary.
  17.  11 inch x 241 mm fanfold paper is normally used.
  18.  Follow Set-up Procedure Below to adjust for each year:
  19.  1. Set year, and variable holidays in Diary-dates Data at End of Program
  20.  2. Other items are controlled when the program is run eg:
  21.  3. Set opt%=0 & 1 for Previews to check raw data, messages, and dates
  22.  4. Then Set opt%=4 for Final Print which takes about 50 minutes
  23.  5. opt%=3 will give a partial print if your printer fouls up (my Epson never has)
  24.  6. For a detailed screen-only preview, use a printing option but
  25.        reply N (=NO) when asked to confirm that the printer is on
  26. $;"  ";
  27. )(first%=
  28. :change_year%=
  29. :endofdata%=
  30.  mstart%(15)
  31.  month_list%(200),date_list%(200),condition_list%(200),message_list$(200)
  32.  i%=0 
  33.  15: mstart%(i%)=-1:
  34. :i%=0
  35.  Read Diary-dates data: First item is Diary-year
  36.  yr%: year%=
  37. (yr%) 
  38. 1-year$=
  39. year%:
  40. (year$)<2 year$="0"+year$
  41.  year%>=51 fullyear%=1900+year% 
  42.  fullyear%=2000+year%
  43.  year%= 0 lastyear%=99 
  44.  lastyear%=year%-1
  45. 4Alastyear$=
  46. lastyear%:
  47. (lastyear$)<2 lastyear$="0"+lastyear$
  48.  year%=99 nextyear%= 0 
  49.  nextyear%=year%+1
  50. 6Anextyear$=
  51. nextyear%:
  52. (nextyear$)<2 nextyear$="0"+nextyear$
  53.  Read Diary-dates data in order:  Month, Date, Condition, Message
  54.  first% 
  55.  month%:previous_month%=month%:mstart%(month%)=i%:first%=
  56.  month%: 
  57.  Read and test first data-item (Month)
  58.  month%>13 
  59.   lastdatum%=month%
  60. @K  endofdata%=
  61. :month_list%(i%)=999: 
  62.  Stop reading at Month >13 say 999
  63.  month%<0 
  64.  month%<previous_month% 
  65. C;    
  66. '" Data-list Error:    Month (";i%;")= ";month%
  67. DD    
  68. '" Month number must rise from 0 (or more) to 13 (or less)"
  69. E        
  70.  endofdata% 
  71.  date%: 
  72.  Read and test second data-item (Date)
  73.  date%<1 
  74.  date%>31 
  75. K9    
  76. '" Data-list Error:    Date (";i%;")= ";date%
  77. L=    
  78. '" Date number must be between 1 and 31 inclusive":
  79.  Input rest of data-line: Condition & Message-string
  80.  endofdata% 
  81.  condition_list%(i%),message_list$(i%)
  82.   month_list%(i%)=month%
  83.  month%>previous_month% mstart%(month%)=i%:previous_month%=month%
  84. U.  date_list%(i%)=date%:entries%=i%:i%=i%+1
  85.  endofdata%
  86.  Mainprog Start; Select option
  87. first%=TRUE
  88.  'Until False' at end; Loops progam until QUIT option taken
  89.  Loops options until satisfied
  90. ^C        
  91.  change_year is set True again if CHANGE  option taken
  92. _Astart%=0:finish%=56:preview_lines%=0:adjust%=
  93. :diary_print%=
  94. `?printer_on%=
  95.  FALSE allows printer output to screen only
  96.  change_year% 
  97. '" Diary-year can be any year from 1951 to 2050"
  98. '" Year is specified by two digits or less  eg:"
  99. '" Enter 93 for 1993; enter 94 for 1994 etc up to 99 for 1999"
  100. '" Enter  0 for 2000; enter  1 for 2001 etc up to 50 for 2050"
  101. ''" Enter number from 0 to 99 for Diary-year: ";
  102. ""year%:year$=
  103. year%:
  104. (year$)<2 year$="0"+year$
  105.  year%>=51 fullyear%=1900+year% 
  106.  fullyear%=2000+year%
  107.  year%>=0 
  108.  year%<=99
  109.  year%= 0 lastyear%=99 
  110.  lastyear%=year%-1
  111. nC  lastyear$=
  112. lastyear%:
  113. (lastyear$)<2 lastyear$="0"+lastyear$
  114.  year%=99 nextyear%= 0 
  115.  nextyear%=year%+1
  116. pC  nextyear$=
  117. nextyear%:
  118. (nextyear$)<2 nextyear$="0"+nextyear$
  119. :change_year%=
  120.  Emerge with Year
  121. '" Choose: Preview         Data-list          (option 0)"
  122.  "         Preview         Diary messages     (option 1)"
  123.  "         Preview & print Diary messages     (option 2)"
  124.  "         Print part-year Diary              (option 3)"
  125.  "         Print full-year Diary              (option 4)"
  126. '"         Change Diary-year (now "+
  127. fullyear%+")       (option C)"
  128. '"         Terminate program (Quit)           (option Q)   :";
  129. :key$=
  130. "01234cCqQ",key$)<>0:opt%=
  131.  key$="c" 
  132.  key$="C" opt%=-1:change_year%=
  133.  key$="q" 
  134.  key$="Q" 
  135.  Emerge with Option opt% or Quit
  136.  opt%=0 
  137.  Data-list check below
  138. FORi%=0 TO 15:PRINT mstart%(i%);:NEXT:PRINTentries%: PROCanykey(1,1)
  139. "        First item on Data-list = ";yr%
  140. i%=0 
  141.  entries%
  142.  month_list%(i%),date_list%(i%),condition_list%(i%),"   ";message_list$(i%)
  143. (i%+1) 
  144.  4=0 
  145. (i%+1) 
  146.  8=0 
  147. anykey(0,1)
  148. "        Last item on Data-list = ";lastdatum%
  149. anykey(1,0)
  150. opt%=3 
  151. ''" Enter Week Number for Start  of print (0 - 50): "start%
  152.  start%>=0 
  153.  start%<=50
  154. ' " Enter Week Number for Finish of print (1 - 56): "finish%
  155.  finish%>start% 
  156.   finish%<=56
  157.  finish%-start%>=50 opt%=4:adjust%=
  158.  Emerge with new values for start% and finish%
  159. opt%>=1 
  160. '" Choose: Include special dates (option I )"
  161. '"         Exclude special dates (option X )   :";
  162. :key$=
  163. "iIxXeE",key$)<>0:special%=key$="i"
  164. key$="I"
  165.  Emerge with value for special%
  166. opt%>=3 
  167. '" Check that your requirements are: "
  168. opt%=3 
  169. 24"Print Diary from Wk ";start%;" to Wk ";finish%
  170. opt%=4 
  171. 24"Print Diary for the full year"
  172. special% 
  173. %    
  174. 24"Include Special dates"'
  175. 24"Exclude Special dates"'
  176. adjust%
  177. ''" NB Prints of 50 weeks or more are changed to full year"'
  178.  Emerge with values displayed for confirmation below
  179. opt%>=3 
  180. confirm(" Confirm these are your requirements   (Y/N):",0) opt%=-1
  181. opt%>=2 
  182. confirm(" Confirm printer is on for printed diary (Y/N):",0) 
  183.     printer_on%=
  184.  opt%>=1: 
  185.  Matches CHANGE Repeat at top
  186.  Initialise before print-loop
  187.  PROCsunday_start must be first, certainly before PROCadjust_printer
  188. sunday_start:
  189.  Sets Left (l) & Right (r): sundate, date, month, week
  190.  Printer can remain on throughout Opt2
  191. opt%=2 
  192.  printer_on% 
  193.  Printer cannot remain on throughout Opt3
  194.  If printer is not confirmed-on, printer procedures have no action
  195.  Skipped weeks are bypassed through preview section which must not print
  196. opt%>=3 
  197. adjust_printer: 
  198.  Incl VDU2/3; Printer off
  199.  Print-loop follows
  200. @ Print-loop increases lweek%  by 2 at end
  201.  Daily and Weekly increments are at Loop-end
  202. Gdiary_print%=(opt%=3 
  203.  lweek%+2>start% 
  204.  lweek% <=finish%) 
  205.  opt%=4
  206.  diary_print% 
  207.  Preview skips this printing section
  208. lmonth%=0 lmonthyr$=lmonth$+" "+lastyear$
  209. rmonth%=0 rmonthyr$=rmonth$+" "+lastyear$
  210. lmonth%>=1
  211. lmonth%<=12 lmonthyr$=lmonth$+" "+year$
  212. rmonth%>=1
  213. rmonth%<=12 rmonthyr$=rmonth$+" "+year$
  214. lmonth%=13 lmonthyr$=lmonth$+" "+nextyear$
  215. rmonth%=13 rmonthyr$=rmonth$+" "+nextyear$
  216.  Print Month+Year Heading; Line in Rem identifies Printout-line
  217. month_font: 
  218.  Incl VDU2; Printer on
  219. i%=1 
  220. 20);:
  221. vline:
  222.  Lines 1-3
  223. "       "+lmonthyr$;
  224. 20);:
  225. vline:
  226. ;"       "+rmonthyr$
  227. i%=1 
  228. 20);:
  229. vline:
  230.  Lines 5,6
  231. hline:
  232.  Line 7
  233.  Printer off
  234.  Preview enters this section
  235. # Loop for 7 days
  236.  day%=0 
  237. get_day
  238. message("L",lmonth%,ldate%): 
  239. message("R",rmonth%,rdate%)
  240.  diary_print% 
  241.  Preview skips this printing section
  242.  Line 0=Blank,  Line 1=Day: Sun Mon Tue etc
  243. day_font: 
  244.  Incl VDU2; Printer on & left on
  245. 40);:
  246. vline:
  247.  Line 0
  248.  day$+"  "+lmessage$;
  249. 40);:
  250. vline:
  251.  Line 1L
  252. ;"  "+day$+"  "+rmessage$:
  253.  Line 1R
  254.  Lines 2,3=Blank,  Line 4=Date,  Line 5=Blank
  255. date_font: 
  256.  Incl VDU2; Printer still on
  257. i%=1 
  258. 20);:
  259. vline:
  260.  Lines 2,3
  261. ldate%<10 
  262. ldate%;
  263. 20);:
  264. vline:
  265.  Line 4L
  266. rdate%<10 
  267. ;" ";
  268. ;" "+
  269. rdate%:
  270.  Line 4R
  271. 20);:
  272. vline:
  273.  Line 5
  274.  Line 6=Week on Mon, otherwise Blank;  Line 7=Hline
  275. week_font: 
  276.  Incl VDU2; Printer still on
  277. day%=1 
  278. /    
  279.  Week number is printed on Monday only
  280. %    lweek$=
  281. lweek%:rweek$=
  282. rweek%
  283. )    
  284.  lweek%>=1 
  285.  lweek%<=week5253% 
  286. -      
  287. "Week "+lweek$;
  288. 40);:
  289. vline:  
  290. 0    
  291. 40);:
  292. vline:              
  293.  6L Blank
  294.         
  295. )    
  296.  rweek%>=1 
  297.  rweek%<=week5253% 
  298. 3      
  299. ;"  Week "+rweek$:                  
  300. 6    
  301. :                                
  302.  6R Blank
  303.         
  304. +    
  305.  Continue Tue day%=2 to Sat day%=6
  306. /    
  307. 40);:
  308. vline:
  309. :             
  310.  6  Blank
  311. hline:
  312. 3:      
  313.  Stop printer        REM 7
  314. $ Preview Routine;  Preview enters this section
  315. lmessage$+rmessage$<>"" 
  316.     space$=" "
  317. ldate%<10 space$="  "
  318. lmessage$<>"" 
  319. C      
  320. preview_lines%>=5 preview_lines%=0:
  321.  opt%=1 
  322. anykey(1,1)
  323. )      preview_lines%=preview_lines%+1
  324. ?      
  325. '" "+lmonth$+space$+
  326. ldate%+"  "+day$+"  "+lmessage$
  327.             
  328.     space$=" "
  329. rdate%<10 space$="  "
  330. rmessage$<>"" 
  331. D      
  332. preview_lines%>=5  preview_lines%=0:
  333.  opt%=1 
  334. anykey(1,1)
  335. )      preview_lines%=preview_lines%+1
  336. A      
  337. (30);rmonth$+space$+
  338. rdate%+"  "+day$+"  "+rmessage$
  339.         
  340. % Daily Increments
  341. #ldate%=ldate%+1:rdate%=rdate%+1
  342. ldate%>monthend% lmonth%=lmonth%+1:ldate%=1:
  343. get_month("L",
  344. rdate%>monthend% rmonth%=rmonth%+1:rdate%=1:
  345. get_month("R",
  346.  End of day%=0 TO 6 Loop
  347.  Weekly Increments; Set starting values for new Left-week
  348. #lmonth%=rmonth%:lmonth$=rmonth$
  349. *lsundate%=rdate%:rsundate%=lsundate%+7
  350. rsundate%>monthend% 
  351. G  rmonth%=rmonth%+1:rsundate%=rsundate%-monthend%:
  352. get_month("R",
  353. %ldate%=lsundate%:rdate%=rsundate%
  354.  #lweek%=lweek%+2:rweek%=rweek%+2
  355.  diary_print% 
  356.  printer_on% 
  357. vtab: 
  358.  Incl VDU2/3; Printer off
  359.  New half-page if printing; see note below
  360.  To help keep most of one month on display when diary page is open,
  361.  LWk35 (Start=-1) or LWk 36 (Start=0) is moved to the top of a page
  362.  diary_print% 
  363.  (lweek%=35 
  364.  lweek%=36) 
  365.  lweek%>finish%
  366.   opt% =2  
  367.  printer_on% 
  368. 3:               printer_on%=
  369.   opt%>=3  
  370.  printer_on% 
  371. restore_printer:printer_on%=
  372.  opt%>=3  Ends at Top-of-Form with Printer off (VDU3)
  373. fold%=
  374. :prfold%=
  375.  opt%=1 
  376. 4B  fold%= 
  377. confirm(" Do you want folding instructions (Y/N)",1)
  378.  opt%=2 
  379. 6D    fold%= 
  380. confirm(" Do you want folding instructions (Y/N)",1)
  381. 7M    prfold%=
  382. confirm(" Do you want printed folding instructions (Y/N)",1)
  383.  prfold% fold%=
  384.  fold% 
  385.  prfold% 
  386.  fold% 
  387. ''" Place the stack of fanfolded paper on a covered table"
  388. '" The table should be covered to protect it from glue"
  389. '" Remove the tractor-strips but do not separate the pages"
  390. '" Ensure that the words 'TOP' are in view on top"
  391.  fold% 
  392. anykey(3,1):
  393. ''" Fold the top sheet exactly in half by folding down its"
  394. "    top edge to lie exactly along its bottom edge"
  395. '" The words 'TOP' are now out-of-sight inside"
  396.  fold% 
  397. anykey(3,1):
  398. ''" Make a SHARP crease EXACTLY along the half-page line"
  399. '" The accuracy and quality of this crease are important"
  400.  fold% 
  401. anykey(3,1):
  402. ''" Hold the folded first page and the next page together"
  403. '" Open pages 2 & 3 out flat to reveal the front of page 2"
  404.  fold% 
  405. anykey(3,1):
  406. ''" Again, fold top-edge down to bring the top and bottom"
  407. "    perforated edges of page 2 together"
  408. '" Crease at the mid-line of the second page"
  409.  fold% 
  410. anykey(3,1):
  411. ''" Hold the stack of folded pages together"
  412. '" Fold them underneath the top half of the next page"
  413. '" Crease again at the mid-line of the next page"
  414.  fold% 
  415. anykey(3,1):
  416. ''" Continue this folding cycle until you have a neat fanfold"
  417. '" Ensure that all the creases are SHARP"
  418. '" Fanfold can be opened anywhere to reveal four diary weeks"
  419.  fold% 
  420. anykey(3,1):
  421. ''" Apply a non-crinkle paste-glue such as Prittstick"
  422. "    to a band about 1/2 inch (1 cm) wide between"
  423. "    each of the folds which are in the middle of a page"
  424. '"  NB: GLUE LINE IS NOT AT THE PERFORATIONS"
  425.  fold% 
  426. anykey(3,1):
  427. ''" The glued surfaces are all blank back-surfaces"
  428. '" Torn perforations will not cause this diary to fall apart"
  429.  fold% 
  430. anykey(3,1) 
  431. 1,12:
  432. & ***** DAY/DATE FINDING PROCS BELOW: *****
  433. sunday_start: 
  434.  Sets Left & Right (l/r): sundate, date, month, week
  435.  year%
  436. 4=0 leap%=
  437.  leap%=
  438.  2000 DIV400=0 therfore Leap
  439.  year%>=50 lsundate%=129-year%-(year%- 1)
  440.  Calc for 1950 -1999
  441.  year% <50 lsundate%= 29-year%-(year%+99)
  442.  Calc for 2000 -2049
  443. lsundate%<19 lsundate%=lsundate%+7:
  444.  lsundate%>=19
  445. lsundate%>25 lsundate%=lsundate%-7:
  446.  lsundate%<=25
  447. wDrsundate%=lsundate%+7:
  448. rsundate%=32 rsundate%=1:
  449.  NB Max lsun=25
  450. x%ldate%=lsundate%:rdate%=rsundate%
  451. y(lmonth%=0:lmonth$="Dec":monthend%=31
  452. lsundate%=25 rmonth%=1:rmonth$="Jan" 
  453.  rmonth%=0:rmonth$="Dec"
  454. lsundate%=22 
  455.  leap% 
  456.  lsundate%=21 week5253%=53 
  457.  week5253%=52
  458. lsundate%<=20 lweek%=-1:rweek%=0 
  459.  lweek%=0:rweek%=1
  460. get_month(side$,endofmonth%):
  461.  month%,m$
  462.  side$="L" month%=lmonth% 
  463.  month%=rmonth%
  464.  month% 
  465.  0, 12: m$="Dec"
  466.  1, 13: m$="Jan"
  467.  2: m$="Feb"
  468.  3: m$="Mar"
  469.  4: m$="Apr"
  470.  5: m$="May"
  471.  6: m$="Jun"
  472.  7: m$="Jly"
  473.  8: m$="Aug"
  474.  9: m$="Sep"
  475.  10: m$="Oct"
  476.  11: m$="Nov"
  477.  endofmonth% 
  478.   monthend%=31
  479.  month%=2 monthend%=28:
  480.  leap% monthend%=29
  481.  month%=4 
  482.  month%=6 
  483.  month%=9 
  484.  month%=11 monthend%=30
  485.  monthend must never change when rsundate is updated by lsundate+7
  486. K      
  487.  even if rsundate=1; monthend% must always wait for daily update
  488.  side$="L" lmonth$=m$ 
  489.  rmonth$=m$
  490. get_day: 
  491.  day% 
  492.  0: day$=" Sun"
  493.  1: day$=" Mon"
  494.  2: day$=" Tue"
  495.  3: day$=" Wed"
  496.  4: day$=" Thu"
  497.  5: day$=" Fri"
  498.  6: day$=" Sat"
  499. anykey(lbefore,lafter)
  500.  lbefore>0 
  501.  lbefore>1 
  502.  lbefore>2 
  503. " Anykey to continue ";:key%=
  504.  lafter>0 
  505.  lafter>1 
  506.  lafter>2 
  507. confirm(string$,line%)
  508. 'string$;:
  509. line%>0 
  510. line%>1 
  511. line%>2 
  512. :key$=
  513. key$="y"
  514. key$="Y"
  515. key$="n"
  516. key$="N"
  517. =key$="y"
  518. key$="Y"
  519.  ***** MESSAGE PROCS (FN) BELOW: *****
  520. message(side$,month%,date%)
  521.  adjustment%,i%,message$: message$=""
  522.  Finds a Message to  match a date
  523. *Note:
  524.  If two messages coincide ie are due to appear on the same date
  525.  The message lower in Data-list will overwrite the higher message
  526. Hadjustment%=0: 
  527.  month%=0 adjustment%=-1 
  528.  month%=13 adjustment%=1
  529. $adjusted_year%=year%+adjustment%
  530.  adjusted_year%= -1 adjusted_year%=99
  531.  adjusted_year%=100 adjusted_year%= 0
  532. i%=mstart%(month%)
  533.  i%>=0 
  534.  i%<=entries% 
  535.  date%=date_list%(i%) 
  536. F    cond%=condition_list%(i%):abscond%=
  537. (cond%):positive%=cond%>=0
  538. 6    checkyear%=abscond%<=99:addage%=abscond%>=1000
  539. "    
  540.  (positive% 
  541.  special%) 
  542.       
  543.  checkyear% 
  544. @        
  545.  adjusted_year%=abscond% message$=message_list$(i%)
  546.       
  547.         
  548.  addage% 
  549. J          message$=message_list$(i%)+
  550. (fullyear%+adjustment%-abscond%)
  551. (        
  552.  message$=message_list$(i%)
  553.         
  554.       
  555.         
  556. '  i%=i%+1:
  557.  month_list%(i%)>month%:
  558.  Repeat loop ends when a new Month-number is encountered
  559.  side$="L" lmessage$=message$ 
  560.  rmessage$=message$
  561. ( ***** PRINT PROCS BELOW: *****  NB No action if printer_on%=FALSE
  562. adjust_printer: 
  563.  Adjust printer line-space, VFU etc
  564.  printer_on% 
  565. 1,27:
  566. 1,64:       
  567.  Initialise:             ESC "@"    page3-64
  568. 1,27:
  569. 1,79:
  570.  Cancel skip-over perforations: ESC "O"    page3-87
  571. 1,27:
  572. 1,51:
  573. 1,18:
  574.  Line-space=18/216 inch ESC "3" 18 page3-24
  575. 1,27:
  576. 1,98:
  577. 1,56:
  578. 1,122:
  579.  Set Vertical Format Unit channel 0:  ESC "b" 0 56 122 0   page3-98
  580.  Vtabs go to Lines 56 to print at middle, 122 to print at top,
  581.   then they go to top of form 132 to print at normal position
  582.  Use one or two Vtabs together (56, 122) only from top half
  583.  Use only one Vtab from bottom half (122, avoid 132)
  584. "  ";:
  585.  i%= 1 
  586.  15: 
  587. ;" Top ";:
  588. vtab: 
  589.  Pr off
  590.  opt%=3 
  591.  start%>=35 
  592. <    
  593.     ((start%-lweek%)
  594. 2 =0 
  595. vtab:   
  596.  Late  start
  597.  ((start%-lweek%)
  598. 2 =1 
  599. vtab:   
  600.  Early start
  601.  matches page-starts for Start= -1 or 0 before and after Wk35/36
  602.  Starts-up and finishes with printer off due to Vtab
  603. restore_printer: 
  604.  Restore printer to normal and cease output
  605.  printer_on% 
  606. 1,12:                
  607.  Form Feed                   "      page3-12
  608. 1,27:
  609. 1,64:        
  610.  Initialise:             ESC "@"    page3-64
  611.  Starts-up and finishes with printer off
  612. vtab:            
  613.  Vertical Tab code 11 page 3-11
  614.  printer_on% 
  615. 1,11:
  616.  Starts-up and finishes with printer off
  617. vline:           
  618.  ESC "L" 2 0 255 255 page 3-81
  619.  printer_on% 
  620. 1,27:
  621. 1,76:
  622. 1,255:
  623. 1,255: 
  624.  Dual Bit-image
  625.  Leaves printer on
  626. hline:           
  627.  Underline ESC "-" 0=off 1=on page 3-55
  628.  printer_on% 
  629. week_font
  630. 1,27:
  631. 1,45:
  632. 1,1: 
  633.  Underline on
  634. " ";:
  635. 1,27:
  636. 1,76:
  637. 1,255:
  638. 1,255: 
  639.  Vline
  640. i%=41
  641. ;" ";:
  642. 1,27:
  643. 1,45:
  644. 1,0: 
  645.  Underline off
  646.  Leaves printer on
  647. month_font:      
  648.  ESC "!" 56 page 3-32
  649.  printer_on% 
  650. 1,27:
  651. 1,33:
  652. 1,56:
  653.  Enlarged Double-strike Emphasised: 5 ch/in
  654.  Leaves printer on
  655. day_font:        
  656.  ESC "!" 24 page 3-32
  657.  printer_on% 
  658. 1,27:
  659. 1,33:
  660. 1,24:
  661.          Double-strike Emphasised: 10 ch/in
  662.  Leaves printer on
  663. week_font:       
  664.  ESC "!"  8 page 3-32
  665.  printer_on% 
  666. 1,27:
  667. 1,33:
  668. 1,8 :
  669.                        Emphasised: 10 ch/in
  670.  Leaves printer on
  671. date_font:       
  672.  ESC "!" 56 page 3-32 NB as month_font
  673.  printer_on% 
  674. 1,27:
  675. 1,33:
  676. 1,56:
  677.  Enlarged Double-strike Emphasised: 5 ch/in
  678.  Leaves printer on
  679. ) ***** YEAR/MONTH/DATE DATA BELOW: *****
  680.  This Data-list is correct for 1993
  681.  Those dates already decided for 1994 are included with condition-numbers which will
  682.    activate them when Diary-year 1994 is selected
  683.  Dates for 1992 have been left in as examples; they can be removed now
  684.  You will need to replace my Birthdays and other Anniversaries with events that
  685.    you need to remember; it takes some effort but it lasts for years when you've done it
  686.  The program initialises the printer to suit itself and restores it to normal on exit
  687.  The printer will reverse-step over the perforations and the initialisation is for a
  688.    page which is only half-a-page in length. This will be cancelled when a print ends
  689.    normally but a paper foul-up will leave the printer wondering where it is
  690.  Read the following notes and experiment in one of the non-printing preview modes
  691.  Then print a summary of the special dates and check it thoroughly again and again
  692.  Leave it overnight in case you have any more bright ideas
  693.  You can print replacement sections but its better to go for one good print only
  694.  Ensure that you have at least 13 sheets of fanfold and a good ribbon before the full
  695.    printout
  696.  The Data-list is headed by the Diary-year number in long or short form
  697.  93 or 1993,  0 or 00 or 2000,  7 or 2007,  29 or 2029
  698.  Thereafter the data is read in sets of 3 integers followed by a string
  699.  The order is: Month,  Date,  Condition,  Message-string
  700.  Comments following the string to the line-end will be ignored
  701.   providing that they are alpha-only
  702.   TAKE CARE WITH COMMENTS OR AVOID THEM
  703.  After the Year-number, the First-number is the Month-number:
  704.  Month-number must rise from 0 (or more) to 13 (or less)
  705.  0  means Dec of year before Diary-year, 1 is Jan of Diary-year
  706.  13 means Jan of year after Diary-year
  707.  A Month-number can be missed out but not inserted out of order
  708.  Second-number is Date-number:
  709.  This is checked to be in range 0 - 31 only
  710.  Dates do not have to be in ascending order or any order
  711.  A message could be set against Feb 30 but it would never be printed
  712.  Third-number is Condition-number (let's call it C)
  713.  Absolute values of C greater than say 2000 will probably not be useful
  714.  The effect of C depend upon how many digits it has and its sign
  715.  Consider +ve values of C:
  716.  From 0 to 99 (1 or 2 digits), message is printed in matching year only
  717.    eg If C=94 message printed in Diary-year 1994 only
  718.       If C= 6 message printed in Diary-year 2006 only
  719.       If C=28 message printed in Diary-year 2028 only
  720.  From 100 to 999 (3 digits), the message is printed in any Diary-year
  721.  All 3-digit numbers have the same effect; choose one and stick to it
  722.  I use 111; its easy to type
  723.  From 1000 upwards (4+ digits), the message is printed in any Diary-year
  724.  immediately followed by an integer number calculated by the program
  725.  The number makes sense if thought of as the 'age' of a person (or item)
  726.  For this to be useful the value of C will be either:
  727.    the year-of-birth of the person whose birthday is marked by the message
  728.    or the year-of-acquisition of the item whose anniversary is marked
  729.  Example 1
  730.  If Sarah was born on Aug 24th 1982, the following data might be suitable:
  731.  DATA  8,  24, 1982,   "Sarah is "
  732.  In the Diary for 1994 (say), this would print the reminder: Sarah is 12
  733.    for the appropriate date ie Aug 24th
  734.  Example 2
  735.  If your car (or dog) was acquired (born) on Dec 29th 1988, consider:
  736.  DATA 12,  29, 1988,   "Rover is "
  737.  In the Diary for 1994 (say), this would print the reminder: Rover is 6
  738.  To include a corresponding message in the December of the outgoing year
  739.    (the overlapping month called Month 0 at the start of the diary),
  740.    you could add:
  741.  DATA  0,  29, 1988,   "Rover is "
  742.  Now Consider -ve values of C:
  743.  Negative values of C mark dates as 'Special dates'
  744.  Special dates included in the data-list, can be excluded from the your
  745.   print-out by an option at run-time
  746.  You may want to prevent personal messages from being included in a diary
  747.    printed for a friend
  748.  The action of C depends on its size, just the same as for +ve values
  749.  Calculate the value of C required normally, then precede it by '-'
  750.  Example
  751.  The dates above are made special and put in order:
  752.  DATA  0,  29, -1988,   "Rover is "
  753.  DATA  8,  24, -1982,   "Sarah is "
  754.  DATA 12,  29, -1988,   "Rover is "
  755.  Finally, End the Data-list with any Month-number greater than 13 eg: 999
  756.  The rest of the line can be blank or can contain comment
  757.   0,  25,   111,   "Christmas"       Dec of year before Diary year
  758.   0,  26,   111,   "Boxing"
  759.   0,  29, -1977,   "Rover is "       Program adjusts age to year before
  760.   0,  21,   111,   "Shortest Day"
  761.   1,   1,   111,   "New Year"        Jan
  762.   1,   1,    92,   "New Leap Year"
  763.   1,   1,    96,   "New Leap Year"
  764.   1,   3,    94,   "Holiday"
  765.   1,   2,    95,   "Holiday"
  766.   2,  14,   111,   "Valentine"
  767.   2,  20, -1987,   "Little Joe will be "
  768.   2,  23,    93,   "Shrove/Pancake"
  769.   2,  15,    94,   "Shrove/Pancake"
  770.   3,   3,    92,   "Shrove/Pancake"  Mar
  771.   3,  10,  -111,   "Fido's Birthday"
  772.   3,  20,   111,   "Spring Equinox"
  773.   3,  28,    92,   "Clocks Forward"
  774.   3,  27,    93,   "Clocks Forward"  Provisional date
  775.   3,  26,    94,   "Clocks Forward"  Provisional date
  776.   3,  29,    92,   "Mothers Day"
  777.   3,  21,    93,   "Mothers Day"
  778.   3,  13,    94,   "Mothers Day"
  779.   4,  17,    92,   "Good Friday"     Apr
  780.   4,   9,    93,   "Good Friday"
  781.   4,   1,    94,   "Good Friday"
  782.   4,  19,    92,   "Easter"
  783.   4,  20,    92,   "Easter"
  784.   4,  11,    93,   "Easter"
  785.   4,  12,    93,   "Easter"
  786.   4,   3,    94,   "Easter"
  787.   4,   4,    94,   "Easter"
  788.   5,   4,    92,   "Mayday"
  789.   5,   3,    93,   "Mayday"
  790.   5,   2,    94,   "Mayday"
  791.   5,  25,    92,   "Spring"
  792.   5,  31,    93,   "Spring"
  793.   5,  30,    94,   "Spring"
  794.   6,  21,   111,   "Longest Day"
  795.   8,  31,    92,   "Late Summer"
  796.   8,  30,    93,   "Late Summer"
  797.   8,  29,    94,   "Late Summer"
  798.   9,  22,    92,   "Autumn Equinox"
  799.   9,  23,    93,   "Autumn Equinox"
  800.   9,  23,    94,   "Autumn Equinox"
  801.  10,  24,    92,   "Clocks Back"
  802.  10,  30,    93,   "Clocks Back"     Provisional date
  803.  10,  31,    94,   "Clocks Back"     Provisional date
  804.  11,   5,   111,   "Bonfire"         Nov
  805.  12,  21,   111,   "Shortest Day"    Dec
  806.  12,  25,   111,   "Christmas"
  807.  12,  26,   111,   "Boxing"
  808.  12,  28,    92,   "Holiday"
  809.  12,  28,    93,   "Holiday"
  810.  12,  27,    93,   "Holiday"
  811.  12,  27,    94,   "Holiday"
  812.  12,  29, -1977,   "Rover is "
  813.  13,   1,   111,   "New Year"        Jan of year following Diary year
  814.  13,   1,    96,   "New Leap Year"
  815.  999                                 End of Data
  816.