home *** CD-ROM | disk | FTP | other *** search
/ Loadstar Extras 3 / Ex3side3.d64 / letter source < prev    next >
Encoding:
Text File  |  1990-01-01  |  30.4 KB  |  2,930 lines

  1. open =$ffc0
  2. readst =$ffb7
  3. setlfs =$ffba
  4. setnam =$ffbd
  5. setmsg =$ff90
  6. load =$ffd5
  7. getin =$ffe4
  8. input'buffer =512
  9. clrchn =$ffcc
  10. close =$ffc3
  11. chkout =$ffc9
  12. chkin =$ffc6
  13. plot =$fff0
  14. chrout =$ffd2
  15. strout = $ab1e
  16. crsr'down =17
  17. rvs'on =18
  18. home =19
  19. del =20
  20. crsr'right =29
  21. green =30
  22. blue =31
  23. lowercase =14
  24. uppercase =142
  25. rvs'off =146
  26. clr =147
  27. insert =148
  28. brown =149
  29. light'red =150
  30. dark'grey =151
  31. medium'grey =152
  32. light'green =153
  33. top'left =176
  34. top'right =174
  35. bottom'left =173
  36. bottom'right =189
  37.  
  38. forms'loc =$3300
  39. mail'merge'start =$a000
  40. ;dvo 10
  41. .org $0801
  42. .obj "@0:lettermeister"
  43.  
  44. .byt $0b,$08,$c7,$07,$9e,$32,$30,$36,$31,$00,$00,$00
  45.  
  46. setup lda #0
  47. sta 53280
  48. sta 53281
  49. sta word'index
  50. sta forms'loc
  51. lda #255
  52. sta cats'found
  53. lda #26
  54. sta 53272
  55. lda #0
  56. sta 212
  57. lda #8
  58. jsr chrout
  59. lda #11
  60. sta 649
  61.  
  62. lda #clr
  63. jsr chrout
  64.  
  65. ldx <ban'top
  66. ldy >ban'top
  67. jsr copy'parms
  68. jsr fill'box
  69. ldx <ban'middle
  70. ldy >ban'middle
  71. jsr copy'parms
  72. jsr fill'box
  73. ldx <ban'bottom
  74. ldy >ban'bottom
  75. jsr copy'parms
  76. jsr fill'box
  77.  
  78. ldy #8
  79. ldx #1
  80. clc
  81. jsr plot
  82. jsr r'patch
  83. lda #3
  84. sta 646
  85.  
  86. inc 199
  87.  
  88. lda <ban'text
  89. ldy >ban'text
  90. jsr strout
  91.  
  92. ldx #4
  93. ldy #0
  94. lda #14
  95. jsr print'framed'box
  96.  
  97. ldx #21
  98. ldy #0
  99. lda #0
  100. jsr print'framed'box
  101.  
  102. load'default lda #0
  103. jsr setmsg
  104. lda #2
  105. ldx 186
  106. cpx #8
  107. bcs +
  108. ldx #8
  109. + stx device
  110. ldy #0
  111. jsr setlfs
  112. lda #6
  113. ldx <filename
  114. ldy >filename
  115. jsr setnam
  116. load'file ldx <loading'msg
  117. ldy >loading'msg
  118. lda #23
  119. jsr show
  120.  
  121. lda #0
  122. ldx <forms'loc
  123. ldy >forms'loc
  124. inx
  125. jsr load
  126. ldy #0
  127. tya
  128. sta (174),y
  129. ldx #3
  130. jsr screen'stash
  131. jsr open'error
  132. jsr read'error
  133.  
  134. get'return ldx <getting'ret'mess
  135. ldy >getting'ret'mess
  136. lda #22
  137. jsr show
  138.  
  139. lda #8
  140. ldx <return'name+3
  141. ldy >return'name+3
  142. jsr setnam
  143. lda #2
  144. ldx device
  145. ldy #2
  146. jsr setlfs
  147. jsr open
  148. ldx #2
  149. jsr chkin
  150.  
  151. lda return'address
  152. sta 253
  153. lda return'address+1
  154. sta 254
  155.  
  156. ldy #0
  157.  
  158. - jsr getin
  159. sta (253),y
  160. iny
  161. bne -
  162.  
  163. jsr clrchn
  164. lda #2
  165. jsr close
  166.  
  167. jsr open'error
  168. jsr read'error
  169.  
  170. ldx #21
  171. ldy #0
  172. lda #0
  173. jsr print'framed'box
  174.  
  175. jsr find'categories
  176.  
  177. ldx #0
  178. jsr screen'stash
  179.  
  180. setup'menu ldx <categories'shadow
  181. ldy >categories'shadow
  182. jsr copy'parms
  183. jsr fill'box
  184.  
  185. ldx <categories'parms
  186. ldy >categories'parms
  187. jsr copy'parms
  188. jsr fill'box
  189.  
  190. ldx categories'parms+2
  191. inx
  192. ldy categories'parms
  193. iny
  194. clc
  195. jsr plot
  196. jsr r'patch
  197.  
  198. ldx #0
  199. stx 254
  200.  
  201. - lda 254
  202. asl
  203. tax
  204. lda categories,x
  205. sta 251
  206. lda categories+1,x
  207. sta 252
  208.  
  209. lda #13
  210. sta 646
  211. lda #1
  212. sta 199
  213.  
  214. ldy #0
  215. - lda (251),y
  216. jsr chrout
  217. cmp #13
  218. beq +
  219. iny
  220. bne -
  221.  
  222. + lda #9
  223. sta 211
  224. jsr 58732
  225. jsr r'patch
  226.  
  227. inc 254
  228. lda 254
  229. cmp cats'found
  230. bne --
  231.  
  232. ldx <select'prompt
  233. ldy >select'prompt
  234. lda #21
  235. jsr show
  236.  
  237. lda #8
  238. sta menux1
  239. lda #32
  240. sta menux2
  241. lda categories'parms+2
  242. clc
  243. adc #1
  244. sta menuy
  245. lda cats'found
  246. sta menu'items
  247. lda #13
  248. sta menu'text
  249. lda #1
  250. sta menu'highlight
  251.  
  252. jsr menu
  253.  
  254. lda menu'items
  255. sec
  256. sbc #3
  257. cmp menu'current
  258. bne +
  259. jsr set'return
  260. ldx #3
  261. jsr screen'restore
  262. jmp setup'menu
  263.  
  264. + clc
  265. adc #1
  266. cmp menu'current
  267. bne +
  268. jmp load'new
  269.  
  270. + lda menu'current
  271. tay
  272. iny
  273. cpy menu'items
  274. beq quit'sure
  275.  
  276. sta current'letter
  277.  
  278. clear'ram lda #0
  279. sta 251
  280. lda #$f0
  281. sta 252
  282. lda #0
  283. ldy #0
  284. - sta (251),y
  285. inc 251
  286. bne -
  287. inc 252
  288. ldx 252
  289. cpx #$fd
  290. bcc -
  291.  
  292. jmp get'letter
  293.  
  294. quit'sure lda #19
  295. ldx <sure'text
  296. ldy >sure'text
  297. jsr show
  298.  
  299. - jsr getin
  300. beq -
  301.  
  302. cmp "y"
  303. bne +
  304. jmp quit'loadstar
  305.  
  306. + cmp "n"
  307. bne -
  308.  
  309. jmp setup'menu
  310.  
  311. get'letter lda current'letter
  312. asl
  313. tax
  314. lda categories,x
  315. sta 247
  316. lda categories+1,x
  317. sta 248
  318.  
  319. find'letter'start ldy #0
  320. sty word'index
  321. sty bottom'of'letter
  322. sty bottom'of'letter+1
  323. lda edit'menu
  324. sta 249
  325. lda edit'menu+1
  326. sta 250
  327. - lda (247),y
  328. sta (249),y
  329. cmp "\"
  330. beq +
  331.  
  332. jsr bump'page
  333. inc 249
  334. bne -
  335. inc 250
  336. bne -
  337.  
  338. + lda 247
  339. sta top'of'letter
  340. lda 248
  341. sta top'of'letter+1
  342.  
  343. print'page jsr clear'window
  344. lda #0
  345. sta word'index
  346. print'page'2 ldx #5
  347. ldy #1
  348. sty reverse'flag
  349. clc
  350. jsr plot
  351. jsr r'patch
  352. lda #154
  353. jsr chrout
  354.  
  355. ldy #0
  356.  
  357. page'loop ldy #0
  358. lda 248
  359. cmp #$f0
  360. bcc +
  361. jmp blank'loop
  362.  
  363. + lda (247),y
  364. bne +
  365. lda 247
  366. sta bottom'of'letter
  367. lda 248
  368. sta bottom'of'letter+1
  369. jmp scan'wait
  370. + cmp "@"
  371. beq found'letter'bottom
  372. ldx #1
  373. stx 199
  374. cmp "\"
  375. bne +
  376. jmp fill'blank
  377. + jsr word'wrap
  378. + ldy #0
  379. ldx 214
  380. cpx #20
  381. bcs page'finished
  382. jsr bump'page
  383. jmp page'loop
  384. woah jmp get'letter
  385.  
  386. found'letter'bottom lda 247
  387. sta bottom'of'letter
  388. lda 248
  389. sta bottom'of'letter+1
  390. lda #29
  391. ldx <next'letter'msg
  392. ldy >next'letter'msg
  393. jsr show
  394. jmp scan'wait
  395.  
  396. bump'page inc 247
  397. bne +
  398. inc 248
  399. + rts
  400.  
  401. page'finished lda 211
  402. cmp #1
  403. beq +
  404. jsr print'word
  405. + jsr bump'page
  406. lda #29
  407. ldx <next'letter'msg
  408. ldy >next'letter'msg
  409. jsr show
  410.  
  411. scan'wait jsr getin
  412. beq scan'wait
  413.  
  414. cmp #crsr'down
  415.  
  416. bne +
  417.  
  418. lda bottom'of'letter+1
  419. bne back'to'letter
  420. jsr clear'window
  421. jmp print'page'2
  422.  
  423. + cmp "m"
  424. bne +
  425. jsr zero'stash
  426. ldx #1
  427. jsr screen'stash
  428. lda #255
  429. sta space'on
  430. sta menu'current
  431. jsr prompts'menu
  432. ldx #1
  433. jsr screen'restore
  434. lda #154
  435. jsr chrout
  436. jsr zero'restore
  437. lda space'on
  438. cmp " "
  439. beq back'to'letter
  440. jmp setup'menu
  441.  
  442. back'to'letter jsr zero'restore
  443. lda top'of'letter
  444. sta 247
  445. lda top'of'letter+1
  446. sta 248
  447. jsr clear'window
  448. ldy #0
  449. sty bottom'of'letter
  450. sty bottom'of'letter+1
  451. jmp print'page
  452.  
  453. + cmp " "
  454. bne scan'wait
  455.  
  456. jsr search'forward
  457. bvc +
  458. jmp get'letter
  459. + bmi +
  460. jmp get'letter
  461. + jmp find'letter'start
  462.  
  463. lda bottom'of'letter+1
  464. beq scan'wait
  465. jsr bump'page
  466. lda #0
  467. sta bottom'of'letter+1
  468. jmp find'letter'start
  469.  
  470. + jsr word'wrap
  471. lda word'index
  472. bne +
  473. jsr bump'page
  474. jmp -
  475. + jmp bump'page
  476.  
  477. exit ldx #0
  478. jsr screen'restore
  479.  
  480. quit'loadstar ldy #80
  481. lda #0
  482. - sta input'buffer,y
  483. dey
  484. bpl -
  485. jmp quit
  486.  
  487. fill'box jsr linx
  488. lda 214
  489. pha
  490. lda 211
  491. pha
  492. box'start ldx box'parameters+2
  493. ldy #0
  494. clc
  495. jsr $fff0
  496. jsr r'patch
  497. dec box'parameters
  498. inc box'parameters+3
  499.  
  500. - ldy box'parameters+1
  501. - lda box'parameters+4
  502. cmp #255
  503. beq +
  504. sta (209),y
  505. + lda box'parameters+5
  506. sta (243),y
  507. dey
  508. cpy box'parameters
  509. bne -
  510. lda 214
  511. cmp box'parameters+3
  512. beq +
  513.  
  514. inc 214
  515. jsr 58732
  516. jsr r'patch
  517. jmp --
  518. + lda #home
  519. jsr $ffd2
  520. pla
  521. sta 211
  522. pla
  523. sta 214
  524. jmp 58732
  525.  
  526. copy'parms stx 251
  527. sty 252
  528. ldy #5
  529. - lda (251),y
  530. sta box'parameters,y
  531. dey
  532. bpl -
  533. rts
  534.  
  535. print'framed'box sta number'of'lines
  536. clc
  537. jsr plot
  538. jsr r'patch
  539.  
  540. lda <box'top
  541. ldy >box'top
  542. jsr strout
  543.  
  544. lda number'of'lines
  545. - pha
  546. lda <box'middle
  547. ldy >box'middle
  548. jsr strout
  549. pla
  550. tay
  551. dey
  552. tya
  553. bpl -
  554.  
  555. lda <box'bottom
  556. ldy >box'bottom
  557. jsr strout
  558. jmp linx
  559.  
  560. linx ldy #24
  561. - lda 217,y
  562. ora #128
  563. sta 217,y
  564. dey
  565. bpl -
  566. rts
  567.  
  568. screen'stash txa
  569. and #3
  570. tax
  571. lda screens,x
  572. sta 252
  573. clc
  574. adc #4
  575. sta 254
  576. lda #0
  577. sta 253
  578. sta 251
  579.  
  580. lda #home
  581. jsr chrout
  582. jsr r'patch
  583. sei
  584. lda #0
  585. sta 1
  586.  
  587. ldx #3
  588. ldy #0
  589. - lda (209),y
  590. sta (251),y
  591. dec 1
  592. lda (243),y
  593. inc 1
  594. sta (253),y
  595. iny
  596. bne -
  597. inc 210
  598. inc 252
  599. inc 244
  600. inc 254
  601. dex
  602. bpl -
  603. lda #$77
  604. sta 1
  605. cli
  606. lda #home
  607. jmp chrout
  608.  
  609. screen'restore txa
  610. and #3
  611. tax
  612. lda screens,x
  613. sta 252
  614. clc
  615. adc #4
  616. sta 254
  617. lda #0
  618. sta 253
  619. sta 251
  620.  
  621. lda #home
  622. jsr chrout
  623. jsr r'patch
  624. sei
  625. lda #0
  626. sta 1
  627.  
  628. ldx #3
  629. ldy #0
  630.  
  631. - lda (251),y
  632. sta (209),y
  633. lda (253),y
  634. dec 1
  635. sta (243),y
  636. inc 1
  637. iny
  638. bne -
  639. inc 210
  640. inc 252
  641. inc 244
  642. inc 254
  643. dex
  644. bpl -
  645. lda #$77
  646. sta 1
  647. cli
  648. lda #home
  649. jmp chrout
  650.  
  651. find'categories lda <forms'loc
  652. sta 251
  653. lda >forms'loc
  654. sta 252
  655. inc 251
  656.  
  657. ldy #0
  658. sty cats'found
  659.  
  660. search'plus lda (251),y
  661. beq end'of'data
  662. cmp "{SHIFT-+}"
  663. beq found'category
  664.  
  665. bump'search'plus inc 251
  666. bne +
  667. inc 252
  668. + jmp search'plus
  669.  
  670. found'category lda cats'found
  671. asl
  672. tax
  673. lda 251
  674. sta categories,x
  675. lda 252
  676. sta categories+1,x
  677. inc categories,x
  678. bne +
  679. inc categories+1,x
  680. + inc cats'found
  681. jmp bump'search'plus
  682.  
  683. end'of'data lda cats'found
  684. asl
  685. tax
  686. lda <return'text
  687. sta categories,x
  688. lda >return'text
  689. sta categories+1,x
  690. inc cats'found
  691. lda cats'found
  692. asl
  693. tax
  694. lda <user'file'text
  695. sta categories,x
  696. lda >user'file'text
  697. sta categories+1,x
  698. inc cats'found
  699. lda cats'found
  700. asl
  701. tax
  702. lda <quit'text
  703. sta categories,x
  704. lda >quit'text
  705. sta categories+1,x
  706. inc cats'found
  707. rts
  708.  
  709.  
  710. menu jsr linx
  711. ldx menuy
  712. ldy #0
  713. sty menu'current
  714. clc
  715. jsr plot
  716. jsr r'patch
  717.  
  718. ldy menux1
  719. lda menu'highlight
  720. - sta (243),y
  721. iny
  722. cpy menux2
  723. beq -
  724. bcc -
  725.  
  726. menu'wait jsr getin
  727. beq menu'wait
  728.  
  729. ldx menu'current
  730. stx temp
  731.  
  732. cmp #crsr'down
  733. beq menu'down
  734.  
  735. cmp #145
  736. beq menu'up
  737.  
  738. cmp #13
  739. beq menu'select
  740.  
  741. bit space'on
  742. bpl menu'wait'loop
  743. cmp " "
  744. beq menu'select
  745.  
  746. menu'wait'loop jmp menu'wait
  747.  
  748. menu'down inc menu'current
  749. lda menu'current
  750. cmp menu'items
  751. bne highlight
  752. lda #0
  753. sta menu'current
  754. jmp highlight
  755.  
  756. menu'up dec menu'current
  757. lda menu'current
  758. cmp #255
  759. beq +
  760. jmp highlight
  761.  
  762. + ldy menu'items
  763. dey
  764. sty menu'current
  765. jmp highlight
  766.  
  767. menu'select sta space'on
  768. rts
  769.  
  770. highlight lda menuy
  771. clc
  772. adc menu'current
  773. tax
  774. ldy #0
  775. clc
  776. jsr plot
  777. jsr r'patch
  778. lda menu'highlight
  779. sta mcolor
  780. jsr paint'line
  781.  
  782. lda menuy
  783. clc
  784. adc temp
  785. tax
  786. ldy #0
  787. clc
  788. jsr plot
  789. jsr r'patch
  790. lda menu'text
  791. sta mcolor
  792. jsr paint'line
  793.  
  794. jmp menu'wait
  795.  
  796. paint'line ldy menux1
  797. lda mcolor
  798. - sta (243),y
  799. iny
  800. cpy menux2
  801. beq -
  802. bcc -
  803.  
  804. rts
  805.  
  806. erase'msg ldx #22
  807. ldy #0
  808. clc
  809. jsr plot
  810. jsr r'patch
  811. ldy #38
  812. lda #160
  813. - sta (209),y
  814. dey
  815. bne -
  816. rts
  817.  
  818. show lsr
  819. sta 251
  820. txa
  821. pha
  822. tya
  823. pha
  824. jsr erase'msg
  825.  
  826. ldx #22
  827. lda #20
  828. sec
  829. sbc 251
  830. tay
  831. clc
  832. jsr plot
  833. jsr r'patch
  834.  
  835. ldy #1
  836. lda (243),y
  837. and #15
  838. cmp #13
  839. bne +
  840. lda #3
  841. jmp ++
  842. + lda #13
  843. + sta 646
  844. ldy #38
  845. - sta (243),y
  846. dey
  847. bne -
  848.  
  849.  
  850. lda #1
  851. sta 199
  852. pla
  853. tay
  854. pla
  855. ldx #14
  856. jmp strout
  857.  
  858. get'word jsr r'patch
  859. lda 211
  860. sta orig'cursorx
  861. lda 214
  862. sta orig'cursory
  863. lda 209
  864. sta 34
  865. lda 210
  866. sta 35
  867. lda 243
  868. sta 36
  869. lda 244
  870. sta 37
  871.  
  872. lda 45
  873. sta 253
  874. lda 46
  875. sta 254
  876. inc 253
  877. bne +
  878. inc 254
  879.  
  880. + lda #0
  881. sta cursor'position
  882. sta 56328
  883. sta in'counter
  884. sta in'length
  885. jsr print'cursor
  886.  
  887. get'key jsr getin
  888. bne key'pressed
  889. lda 56328
  890. cmp in'old'time
  891. beq get'key
  892.  
  893. increment sta in'old'time
  894. inc in'counter
  895. lda in'counter
  896. cmp #3
  897. bne get'key
  898. lda #0
  899. sta in'counter
  900. lda 251
  901. beq +
  902. jsr un'print'cursor
  903. jmp get'key
  904. + jsr print'cursor
  905. jmp get'key
  906.  
  907. key'pressed sta in'temp
  908. jsr linx
  909. lda in'temp
  910. cmp #157
  911. bne +
  912. jmp move'left
  913. + cmp #29
  914. bne +
  915. jmp move'right
  916. + ldx in'limit
  917. bne +
  918. ldx in'length
  919. cpx #38
  920. bne +
  921. lda in'temp
  922. sta 631
  923. lda #1
  924. sta 198
  925. jmp un'print'cursor
  926.  
  927. + ldx cursor'position
  928. cpx in'length
  929. bcc check'valid
  930.  
  931. ldx in'length
  932. beq check'valid
  933. cpx in'limit
  934. bcc check'valid
  935.  
  936. cmp #13
  937. beq return
  938.  
  939. cmp #20
  940. beq delete
  941.  
  942. ldx in'limit
  943. beq check'valid
  944. jmp get'key
  945.  
  946. check'valid ldy #0
  947.  
  948. - lda validation'string,y
  949. cmp in'temp
  950. beq found'it
  951. iny
  952. cpy #vallength
  953. bne -
  954. jmp get'key
  955.  
  956. found'it lda in'temp
  957. cmp #13
  958. beq return
  959. cmp #20
  960. beq delete
  961.  
  962. ldx cursor'position
  963. cpx in'length
  964. bcc +
  965.  
  966. inc in'length
  967. + inc cursor'position
  968. lda in'temp
  969. ldx in'text
  970. stx 646
  971. jsr chrout
  972. jsr linx
  973. ldy #0
  974. jsr print'cursor
  975. ldy cursor'position
  976. lda in'temp
  977. sta (253),y
  978. sta word'buffer,y
  979. jmp get'key
  980.  
  981. return lda in'length
  982. sta 252
  983. jsr un'print'cursor
  984. rts
  985.  
  986. delete lda cursor'position
  987. bne +
  988. jmp get'key
  989. + cmp in'length
  990. bcs +
  991. jsr inline'delete
  992. jmp get'key
  993.  
  994. + lda in'length
  995. bne +
  996. jmp get'key
  997. + dec in'length
  998. dec cursor'position
  999. lda #157
  1000. jsr chrout
  1001. lda " "
  1002. jsr chrout
  1003. jsr chrout
  1004. lda #157
  1005. jsr chrout
  1006. jsr chrout
  1007. jsr print'cursor
  1008. jmp get'key
  1009.  
  1010. print'cursor lda #1
  1011. sta 251
  1012. lda cursor'position
  1013. clc
  1014. adc orig'cursorx
  1015. tay
  1016. lda (34),y
  1017. ora #128
  1018. sta (34),y
  1019. lda in'hilight
  1020. sta (36),y
  1021. rts
  1022.  
  1023. un'print'cursor lda #0
  1024. sta 251
  1025. lda cursor'position
  1026. clc
  1027. adc orig'cursorx
  1028. tay
  1029. lda (34),y
  1030. and #127
  1031. sta (34),y
  1032. lda in'text
  1033. sta (36),y
  1034. rts
  1035.  
  1036. move'left jsr un'print'cursor
  1037. lda cursor'position
  1038. cmp #1
  1039. bcs +
  1040. jsr print'cursor
  1041. jmp get'key
  1042.  
  1043. + dec cursor'position
  1044. jsr print'cursor
  1045. lda #157
  1046. jsr chrout
  1047. jmp get'key
  1048.  
  1049. move'right jsr un'print'cursor
  1050. lda cursor'position
  1051. cmp in'length
  1052. bcc +
  1053. jmp get'key
  1054.  
  1055. + inc cursor'position
  1056. jsr print'cursor
  1057. lda #29
  1058. jsr chrout
  1059. jmp get'key
  1060.  
  1061. inline'delete jmp get'key
  1062.  
  1063. search'forward ldy #0
  1064.  
  1065. - lda (247),y
  1066. beq that's'that
  1067. cmp "@"
  1068. beq found'next'letter
  1069. inc 247
  1070. bne -
  1071. inc 248
  1072. bne -
  1073.  
  1074. found'next'letter iny
  1075. iny
  1076. lda (247),y
  1077. dey
  1078. dey
  1079. cmp "{SHIFT-+}"
  1080. beq found'next'category
  1081. lda #128
  1082. sta temp
  1083. jmp that's'that
  1084. found'next'category lda #64
  1085. sta temp
  1086. that's'that bit temp
  1087. rts
  1088.  
  1089. search'backward ldy #0
  1090.  
  1091. - lda (247),y
  1092. beq that's'that
  1093. cmp "@"
  1094. beq found'next'letter
  1095. dec 247
  1096. lda 247
  1097. cmp #255
  1098. bne -
  1099. dec 248
  1100. bne -
  1101.  
  1102. prompts'menu ldy menu'current
  1103. bmi +
  1104. cpy #11
  1105. bcs +
  1106.  
  1107. iny
  1108. cpy #11
  1109. beq +
  1110. sty 198
  1111.  
  1112. lda #crsr'down
  1113. - sta 631,y
  1114. dey
  1115. bpl -
  1116.  
  1117. + lda #255
  1118. sta space'on
  1119. lda #0
  1120. sta mflag
  1121. lda #13
  1122. sta menu'text
  1123. lda #1
  1124. sta menu'highlight
  1125.  
  1126. ldx <prompts'shadow
  1127. ldy >prompts'shadow
  1128. jsr copy'parms
  1129. jsr fill'box
  1130.  
  1131. ldx <prompts'parms
  1132. ldy >prompts'parms
  1133. jsr copy'parms
  1134. jsr fill'box
  1135.  
  1136. ldx prompts'parms+2
  1137. ldy prompts'parms
  1138. clc
  1139. iny
  1140. inx
  1141. jsr plot
  1142. jsr r'patch
  1143.  
  1144. lda #0
  1145. sta menu'items
  1146.  
  1147. lda #light'green
  1148. jsr chrout
  1149. inc 199
  1150. lda edit'menu
  1151. sta 249
  1152. lda edit'menu+1
  1153. sta 250
  1154. sei
  1155. - ldy #0
  1156. sty 1
  1157. jsr find'equal
  1158. cmp #255
  1159. beq end'edit'menu
  1160. - ldy #0
  1161. lda (249),y
  1162. dec 1
  1163. cli
  1164. jsr chrout
  1165. sei
  1166. inc 1
  1167. cmp #13
  1168. beq +
  1169. jsr bump'eq
  1170. bne -
  1171.  
  1172. + dec 1
  1173. cli
  1174. lda prompts'parms
  1175. sta 211
  1176. inc 211
  1177. jsr 58732
  1178. jsr r'patch
  1179. sei
  1180. inc 199
  1181. inc menu'items
  1182. bne --
  1183.  
  1184. find'equal lda (249),y
  1185. cmp "\"
  1186. beq ++
  1187. cmp "="
  1188. bne +
  1189. iny
  1190. lda (249),y
  1191. dey
  1192. cmp #13
  1193. beq ++
  1194. jmp bump'eq
  1195. + jsr bump'eq
  1196. jmp find'equal
  1197. + lda #255
  1198. rts
  1199.  
  1200. bump'eq inc 249
  1201. bne +
  1202. inc 250
  1203. + rts
  1204.  
  1205. end'edit'menu lda #$77
  1206. sta 1
  1207. cli
  1208.  
  1209. ldy #0
  1210. sty temp
  1211. - lda prompts'parms
  1212. sta 211
  1213. inc 211
  1214. jsr 58732
  1215. jsr r'patch
  1216. ldy temp
  1217. - lda edit'menu'ap,y
  1218. beq +
  1219. jsr chrout
  1220. iny
  1221. sty temp
  1222. cmp #13
  1223. bne -
  1224. inc menu'items
  1225. bne --
  1226.  
  1227. + lda prompts'parms
  1228. sta menux1
  1229. lda prompts'parms+1
  1230. sta menux2
  1231. ldy prompts'parms+2
  1232. iny
  1233. sty menuy
  1234.  
  1235. ldx <menu2'mess
  1236. ldy >menu2'mess
  1237. lda #37
  1238. jsr show
  1239.  
  1240. ldx #3
  1241. jsr screen'stash
  1242. jsr menu
  1243.  
  1244. lda space'on
  1245. cmp " "
  1246. beq +++
  1247.  
  1248. lda menu'items
  1249. sec
  1250. sbc #4
  1251. cmp menu'current
  1252. bne +
  1253. jmp select'position
  1254.  
  1255. + clc
  1256. adc #1
  1257. cmp menu'current
  1258. bne +
  1259. jmp select'closing
  1260.  
  1261. + clc
  1262. adc #1
  1263. cmp menu'current
  1264. bne +
  1265. lda 653
  1266. and #4
  1267. beq regp
  1268. jsr mail'merge
  1269. jmp prompts'menu
  1270. regp jsr print'letter
  1271. jmp prompts'menu
  1272.  
  1273. + lda space'on
  1274. cmp " "
  1275. beq +
  1276. ldy menu'current
  1277. iny
  1278. cpy menu'items
  1279. beq +
  1280. jsr enter'data
  1281. ldx #1
  1282. jsr screen'restore
  1283. lda #255
  1284. sta space'on
  1285. jmp prompts'menu
  1286. + rts
  1287.  
  1288. zero'stash ldy #7
  1289. - lda 247,y
  1290. sta zero'store,y
  1291. dey
  1292. bpl -
  1293. rts
  1294.  
  1295. zero'restore ldy #7
  1296. - lda zero'store,y
  1297. sta 247,y
  1298. dey
  1299. bpl -
  1300. rts
  1301.  
  1302. word'wrap sty temp
  1303. ldy word'index
  1304.  
  1305. cmp "_"
  1306. bne +
  1307.  
  1308. lda #13
  1309.  
  1310. + cmp #13
  1311. bne +
  1312. jsr print'word
  1313. jsr car'return
  1314. rts
  1315.  
  1316. + inc word'index
  1317. sta input'buffer,y
  1318.  
  1319. cmp " "
  1320. bne +
  1321. jsr print'word
  1322. rts
  1323.  
  1324. + lda line'pos
  1325. clc
  1326. adc word'index
  1327. cmp right'limit
  1328. bcc +
  1329. jsr car'return
  1330. lda line'pos
  1331. clc
  1332. adc word'index
  1333. cmp right'limit
  1334. bcc +
  1335. jsr print'word
  1336. jsr car'return
  1337.  
  1338. + rts
  1339.  
  1340. car'return lda #13
  1341. jsr chrout
  1342. lda #29
  1343. jsr chrout
  1344. lda #0
  1345. sta line'pos
  1346. lda reverse'flag
  1347. sta 199
  1348. rts
  1349.  
  1350. print'word lda word'index
  1351. bne +
  1352. rts
  1353. + ldy #0
  1354. - lda input'buffer,y
  1355. jsr chrout
  1356. iny
  1357. inc line'pos
  1358. cpy word'index
  1359. bne -
  1360. lda #0
  1361. sta word'index
  1362. rts
  1363.  
  1364. fill'blank jsr linx
  1365. jsr bump'page
  1366. ldy #0
  1367. lda (247),y
  1368. sta temp
  1369. jsr bump'page
  1370. lda 247
  1371. sta normal'storage
  1372. lda 248
  1373. sta normal'storage+1
  1374. lda temp
  1375. sec
  1376. sbc #193
  1377. tax
  1378. lda blank'addresses,x
  1379. sta 248
  1380. ldy #0
  1381. sty 247
  1382.  
  1383. blank'loop sei
  1384. lda #$74
  1385. sta 1
  1386. lda (247),y
  1387. sta temp
  1388. lda #$77
  1389. sta 1
  1390. cli
  1391. lda temp
  1392. beq print'default
  1393. cmp #255
  1394. beq blank'end
  1395. jsr word'wrap
  1396. ldy #0
  1397. ldx 214
  1398. cpx #20
  1399. bcs +
  1400. jsr bump'page
  1401. jmp blank'loop
  1402. + jmp page'finished
  1403. blank'end lda word'index
  1404. beq no'ex
  1405. jsr print'word
  1406. no'ex lda normal'storage
  1407. sta 247
  1408. lda normal'storage+1
  1409. sta 248
  1410. ldy #0
  1411. jmp page'loop
  1412.  
  1413. print'default ldy #0
  1414. - lda blank,y
  1415. beq +
  1416. jsr word'wrap
  1417. ldy temp
  1418. iny
  1419. bne -
  1420.  
  1421. + lda normal'storage
  1422. sta 247
  1423. lda normal'storage+1
  1424. sta 248
  1425. ldy #0
  1426. jmp page'loop
  1427.  
  1428. clear'window ldx <clear'parms
  1429. ldy >clear'parms
  1430. jsr copy'parms
  1431. jmp fill'box
  1432.  
  1433. enter'data ldx menu'current
  1434. lda blank'addresses,x
  1435. sta 248
  1436. ldy #0
  1437. sty 247
  1438.  
  1439. ldx #1
  1440. jsr screen'restore
  1441.  
  1442. ldx <exit'msg
  1443. ldy >exit'msg
  1444. lda #30
  1445. jsr show
  1446.  
  1447. jsr gut'screen
  1448. lda #254
  1449. sta in'limit
  1450. jsr get'word
  1451. ldy menu'current
  1452. lda blank'addresses,y
  1453. sta 252
  1454. lda #255
  1455. sta 251
  1456. dec 252
  1457. ldy in'length
  1458. bne +
  1459. jmp zero'blank
  1460. + lda #255
  1461. iny
  1462. sta (251),y
  1463. dey
  1464. - lda (253),y
  1465. sta (251),y
  1466. dey
  1467. bne -
  1468. rts
  1469.  
  1470. zero'blank lda #0
  1471. ldy #255
  1472. - sta (251),y
  1473. dey
  1474. cpy #255
  1475. bne -
  1476. rts
  1477.  
  1478. set'return ldx #3
  1479. jsr screen'stash
  1480. ldx <return'mess
  1481. ldy >return'mess
  1482. lda #29
  1483. jsr show
  1484. lda #0
  1485. sta temp
  1486.  
  1487. enter'return jsr gut'screen
  1488. jsr linx
  1489. ldx clear2'parms+2
  1490. inx
  1491. inx
  1492. ldy clear2'parms
  1493. clc
  1494. jsr plot
  1495. jsr r'patch
  1496.  
  1497. lda #3
  1498. sta 646
  1499.  
  1500. lda <line'word
  1501. ldy >line'word
  1502. jsr strout
  1503. lda #1
  1504. sta 646
  1505. lda #0
  1506. ldx temp
  1507. inx
  1508. jsr $bdcd
  1509. lda #3
  1510. sta 646
  1511. lda ":"
  1512. jsr chrout
  1513. lda #13
  1514. sta 646
  1515.  
  1516. lda #60
  1517. sta in'limit
  1518. jsr get'word
  1519.  
  1520. jsr calc'ret
  1521. inc 253
  1522.  
  1523. ldy in'length
  1524. lda #0
  1525. sta (249),y
  1526. dey
  1527. bmi +
  1528. sta (249),y
  1529. - lda (253),y
  1530. sta (249),y
  1531. dey
  1532. cpy #255
  1533. bne -
  1534.  
  1535. + inc temp
  1536. lda temp
  1537. cmp #4
  1538. bcs show'return
  1539. jmp enter'return
  1540. rts
  1541.  
  1542. show'return jsr gut'screen
  1543. lda #0
  1544. sta temp
  1545. ldx clear2'parms+2
  1546. inx
  1547. inx
  1548. ldy clear2'parms
  1549. clc
  1550. jsr plot
  1551. jsr r'patch
  1552.  
  1553. sei
  1554. - lda #5
  1555. sta 211
  1556. jsr 58732
  1557. jsr r'patch
  1558. jsr calc'ret
  1559.  
  1560. ldy #0
  1561. - sei
  1562. lda #$74
  1563. sta 1
  1564. lda (249),y
  1565. ldx #$77
  1566. stx 1
  1567. cli
  1568. tax
  1569. beq +
  1570. jsr chrout
  1571. iny
  1572. bne -
  1573.  
  1574. + inc 214
  1575. inc temp
  1576. lda temp
  1577. cmp #5
  1578. bcc --
  1579.  
  1580. ldx <correct'mess
  1581. ldy >correct'mess
  1582. lda #22
  1583. jsr show
  1584.  
  1585. - jsr getin
  1586. beq -
  1587.  
  1588. cmp "y"
  1589. bne +
  1590. jsr save'return
  1591. rts
  1592.  
  1593. + cmp "n"
  1594. bne -
  1595. ldx #3
  1596. jsr screen'restore
  1597. jmp set'return
  1598.  
  1599. save'return ldx <disk'prompt
  1600. ldy >disk'prompt
  1601. lda #29
  1602. jsr show
  1603.  
  1604. - jsr getin
  1605. beq -
  1606.  
  1607. cmp #13
  1608. beq save'it
  1609.  
  1610. cmp "q"
  1611. bne +
  1612. rts
  1613.  
  1614. + cmp "0"
  1615. bcc -
  1616. cmp ":"
  1617. bcs -
  1618.  
  1619. sec
  1620. sbc #48
  1621. cmp #8
  1622. bcs +
  1623. clc
  1624. adc #10
  1625. + sta device
  1626.  
  1627. save'it jsr test'device
  1628. bit temp
  1629. bmi -
  1630. jsr open'error
  1631. lda #15
  1632. ldx <return'name
  1633. ldy >return'name
  1634. jsr setnam
  1635. lda #2
  1636. ldx device
  1637. ldy #1
  1638. jsr setlfs
  1639. jsr open
  1640. ldx #2
  1641. jsr chkout
  1642.  
  1643. lda return'address
  1644. sta 253
  1645. lda return'address+1
  1646. sta 254
  1647.  
  1648. ldy #0
  1649.  
  1650. - sei
  1651. ldx #$74
  1652. stx 1
  1653. lda (253),y
  1654. ldx #$77
  1655. stx 1
  1656. cli
  1657. jsr chrout
  1658. iny
  1659. bne -
  1660.  
  1661. jsr clrchn
  1662. lda #2
  1663. jsr close
  1664.  
  1665. jsr read'error
  1666.  
  1667. rts
  1668.  
  1669. calc'ret lda return'address
  1670. sta 249
  1671. lda return'address+1
  1672. sta 250
  1673.  
  1674. lda temp
  1675. cmp #4
  1676. beq date
  1677. asl
  1678. asl
  1679. asl
  1680. asl
  1681. asl
  1682. asl
  1683.  
  1684. clc
  1685. adc 249
  1686. sta 249
  1687. lda #0
  1688. adc 250
  1689. sta 250
  1690.  
  1691. rts
  1692. date lda <65152
  1693. sta 249
  1694. lda >65152
  1695. sta 250
  1696. rts
  1697.  
  1698. gut'screen ldx <clear2'parms
  1699. ldy >clear2'parms
  1700. jsr copy'parms
  1701. jsr fill'box
  1702.  
  1703. ldx clear2'parms+3
  1704. ldy #0
  1705. inx
  1706. clc
  1707. jsr plot
  1708. jsr r'patch
  1709.  
  1710. ldy #39
  1711. lda #64
  1712. - sta (209),y
  1713. dey
  1714. bpl -
  1715.  
  1716. ldx clear2'parms+2
  1717. ldy clear2'parms
  1718. clc
  1719. jsr plot
  1720. jsr r'patch
  1721.  
  1722. ldy #39
  1723. lda #64
  1724. - sta (209),y
  1725. dey
  1726. bpl -
  1727.  
  1728. lda #13
  1729. jmp chrout
  1730.  
  1731. load'new ldx #2
  1732. jsr screen'stash
  1733. ln2 ldx <load'prompt
  1734. ldy >load'prompt
  1735. lda #31
  1736. jsr show
  1737. jsr gut'screen
  1738. lda #254
  1739. sta in'limit
  1740. jsr get'word
  1741.  
  1742. lda in'length
  1743. bne +
  1744. ldx #2
  1745. jsr screen'restore
  1746. jmp setup'menu
  1747.  
  1748. + ldx <disk'prompt
  1749. ldy >disk'prompt
  1750. lda #29
  1751. jsr show
  1752.  
  1753. lda #0
  1754. sta 198
  1755.  
  1756. - jsr getin
  1757. beq -
  1758.  
  1759. cmp #13
  1760. beq load'it
  1761.  
  1762. cmp "q"
  1763. bne +
  1764. ldx #2
  1765. jsr screen'restore
  1766. jmp setup'menu
  1767.  
  1768. + cmp "0"
  1769. bcc -
  1770. cmp ":"
  1771. bcs -
  1772.  
  1773. sec
  1774. sbc #48
  1775. cmp #8
  1776. bcs +
  1777. clc
  1778. adc #10
  1779. + sta device
  1780.  
  1781. load'it jsr test'device
  1782. bit temp
  1783. bmi -
  1784. jsr open'error
  1785. lda #2
  1786. ldx device
  1787. ldy #0
  1788. jsr setlfs
  1789. lda in'length
  1790. ldx 253
  1791. ldy 254
  1792. inx
  1793. jsr setnam
  1794. jsr open
  1795. lda #2
  1796. jsr close
  1797. jsr read'error
  1798. lda error'buffer
  1799. cmp "0"
  1800. beq +
  1801. jmp ln2
  1802.  
  1803. + lda #15
  1804. jsr close
  1805. lda #2
  1806. ldx device
  1807. ldy #0
  1808. jsr setlfs
  1809. lda in'length
  1810. ldx <word'buffer+1
  1811. ldy >word'buffer+1
  1812. jsr setnam
  1813.  
  1814. ldx #2
  1815. jsr screen'restore
  1816. jmp load'file
  1817.  
  1818. select'position ldx #2
  1819.  
  1820. ldx <pos'msg
  1821. ldy >pos'msg
  1822. lda #20
  1823. jsr show
  1824.  
  1825. lda #0
  1826. sta 198
  1827.  
  1828. - jsr getin
  1829. beq -
  1830.  
  1831. cmp "l"
  1832. bne +
  1833. lda #0
  1834. sta sel'pos
  1835. jmp ++
  1836. + cmp "r"
  1837. bne -
  1838. lda #255
  1839. sta sel'pos
  1840.  
  1841. + ldx #3
  1842. jsr screen'restore
  1843. jmp prompts'menu
  1844.  
  1845. test'device lda #0
  1846. sta temp
  1847. lda #2
  1848. ldx device
  1849. ldy #2
  1850. jsr setlfs
  1851. jsr open
  1852. lda #2
  1853. jsr close
  1854. jsr readst
  1855. bpl +
  1856. dec temp
  1857. lda #8
  1858. sta device
  1859. + rts
  1860.  
  1861. open'error lda #15
  1862. jsr close
  1863. lda #15
  1864. ldx device
  1865. ldy #15
  1866. jsr setlfs
  1867. lda #0
  1868. tax
  1869. tay
  1870. jsr setnam
  1871. jmp open
  1872.  
  1873. read'error ldx #15
  1874. jsr chkin
  1875. ldy #0
  1876.  
  1877. - jsr getin
  1878. sta error'buffer,y
  1879. cmp #13
  1880. beq +
  1881. iny
  1882. cpy #80
  1883. bcc -
  1884.  
  1885. + lda #0
  1886. sta error'buffer,y
  1887. sta 198
  1888.  
  1889. sty temp
  1890.  
  1891. lda #15
  1892. jsr close
  1893. jsr clrchn
  1894.  
  1895. lda error'buffer
  1896. cmp "0"
  1897. bne +
  1898. rts
  1899.  
  1900. + ldx <error'buffer
  1901. ldy >error'buffer
  1902. lda temp
  1903. jsr show
  1904.  
  1905. - jsr getin
  1906. beq -
  1907.  
  1908. ldx #3
  1909. jmp screen'restore
  1910.  
  1911. quit lda #10
  1912. sta 649
  1913. lda #0
  1914. sta 199
  1915. lda #30
  1916. ldy #>name
  1917. ldx #<name
  1918. jsr $ffbd
  1919. lda #15
  1920. ldx #8
  1921. ldy #15
  1922. jsr $ffba
  1923. jsr $ffc0
  1924. ldx #15
  1925. jsr $ffc6
  1926. jsr $ffcf
  1927. sta input
  1928. jsr $ffcf
  1929. sta input+1
  1930.  
  1931. ldy #0
  1932. - jsr $ffcf
  1933. iny
  1934. cpy #32
  1935. bne -
  1936.  
  1937. lda #15
  1938. jsr $ffc3
  1939. jsr $ffcc
  1940.  
  1941. ldx #255
  1942. lda input
  1943. cmp #"6"
  1944. bne nope
  1945. lda input+1
  1946. cmp #"3"
  1947. bne nope
  1948.  
  1949. lda 53281
  1950. sta 646
  1951.  
  1952. ldy #0
  1953. - lda dynamic'keyboard,y
  1954. jsr $ffd2
  1955. beq +
  1956. iny
  1957. bne -
  1958.  
  1959. + lda #13
  1960. sta 631
  1961. sta 632
  1962. sta 633
  1963.  
  1964. lda #3
  1965. sta 198
  1966. rts
  1967.  
  1968. nope lda #147
  1969. jsr $ffd2
  1970. rts
  1971.  
  1972. select'closing ldx #2
  1973. jsr screen'stash
  1974. ldx <close'shadow
  1975. ldy >close'shadow
  1976. jsr copy'parms
  1977. jsr fill'box
  1978. ldx <close'parms
  1979. ldy >close'parms
  1980. jsr copy'parms
  1981. jsr fill'box
  1982.  
  1983. lda #29
  1984. ldx <closing'mess
  1985. ldy >closing'mess
  1986. jsr show
  1987.  
  1988. ldy close'parms
  1989. ldx close'parms+2
  1990. clc
  1991. inx
  1992. iny
  1993. jsr plot
  1994. jsr r'patch
  1995.  
  1996. ldy #0
  1997. lda close'parms+5
  1998. sta 646
  1999. inc 199
  2000.  
  2001. - lda closings,y
  2002. beq ++
  2003. inc 199
  2004. jsr chrout
  2005. sty temp
  2006. cmp #13
  2007. bne +
  2008. ldx close'parms
  2009. inx
  2010. stx 211
  2011. jsr 58732
  2012. jsr r'patch
  2013. + ldy temp
  2014. iny
  2015. bne -
  2016.  
  2017.  
  2018.  
  2019. + lda #9
  2020. sta menu'items
  2021. lda close'parms
  2022. sta menux1
  2023. lda close'parms+1
  2024. sta menux2
  2025. lda #7
  2026. sta menu'highlight
  2027. lda #3
  2028. sta menu'text
  2029. ldy close'parms+2
  2030. iny
  2031. sty menuy
  2032.  
  2033. jsr menu
  2034.  
  2035. ldy menu'current
  2036. tya
  2037. iny
  2038. cpy menu'items
  2039. beq define'closing
  2040.  
  2041. sta temp
  2042. jmp calc'closing
  2043.  
  2044. define'closing nop
  2045.  
  2046. dc2 lda #20
  2047. ldx <enter'close'mess
  2048. ldy >enter'close'mess
  2049. jsr show
  2050.  
  2051. jsr gut'screen
  2052. lda #37
  2053. sta in'limit
  2054. jsr get'word
  2055.  
  2056. ldx <correct'mess
  2057. ldy >correct'mess
  2058. lda #22
  2059. jsr show
  2060.  
  2061. - jsr getin
  2062. beq -
  2063.  
  2064. cmp "y"
  2065. beq +
  2066.  
  2067. cmp "n"
  2068. bne -
  2069. jmp dc2
  2070.  
  2071. + lda in'length
  2072. tay
  2073. beq +
  2074.  
  2075. inc 253
  2076. ldy #0
  2077. - lda (253),y
  2078. sta user'closing,y
  2079. iny
  2080. cpy in'length
  2081. bne -
  2082.  
  2083. + lda #0
  2084. sta user'closing,y
  2085. lda <user'closing
  2086. sta close'address
  2087. lda >user'closing
  2088. sta close'address+1
  2089.  
  2090. close'quit ldx #2
  2091. jsr screen'restore
  2092. jmp prompts'menu
  2093.  
  2094. + cmp "n"
  2095. bne -
  2096. jmp dc2
  2097.  
  2098. calc'closing lda <closings
  2099. sta close'address
  2100. lda >closings
  2101. sta close'address+1
  2102.  
  2103. lda temp
  2104. tax
  2105. beq close'quit
  2106.  
  2107. ldy #0
  2108. - lda closings,y
  2109. iny
  2110. inc close'address
  2111. bne +
  2112. inc close'address+1
  2113. + cmp #13
  2114. bne -
  2115. dex
  2116. bne -
  2117.  
  2118. jmp close'quit
  2119.  
  2120. print'letter lda #0
  2121. tax
  2122. tay
  2123. jsr setnam
  2124. lda #4
  2125. ldx #4
  2126. ldy #7
  2127. jsr setlfs
  2128. jsr open
  2129. lda #4
  2130. jsr close
  2131. jsr readst
  2132. bpl +
  2133. ldx <printer'missing
  2134. ldy >printer'missing
  2135. lda #19
  2136.  
  2137. jsr show
  2138. lda #0
  2139. sta 198
  2140. - jsr getin
  2141. beq -
  2142.  
  2143. p'abort lda #64
  2144. sta mflag
  2145. ldx #3
  2146. jmp screen'restore
  2147.  
  2148. + bit mflag
  2149. bmi pstart
  2150. ldx <printer'mess
  2151. ldy >printer'mess
  2152. lda #24
  2153.  
  2154. jsr show
  2155. lda #0
  2156. sta 198
  2157. - jsr getin
  2158. beq -
  2159.  
  2160. cmp #13
  2161. beq pstart
  2162. cmp "q"
  2163. beq p'abort
  2164. bne -
  2165.  
  2166. pstart ldx <printing
  2167. ldy >printing
  2168. lda #27
  2169.  
  2170. jsr show
  2171.  
  2172. lda #0
  2173. tax
  2174. tay
  2175. jsr setnam
  2176.  
  2177. lda #4
  2178. ldx #4
  2179. ldy #7
  2180. jsr setlfs
  2181. jsr open
  2182. ldx #4
  2183. jsr chkout
  2184.  
  2185. lda #0
  2186. sta printer'line
  2187. sta word'index
  2188. lda #9
  2189. sta line'pos
  2190.  
  2191. ldy #4
  2192. lda #13
  2193. sty temp
  2194. - jsr lfeed
  2195. dec temp
  2196. bpl -
  2197.  
  2198. print'return jsr return'tab
  2199. lda #0
  2200. sta temp
  2201. sei
  2202. - jsr calc'ret
  2203.  
  2204. ldy #0
  2205. - sei
  2206. lda #$74
  2207. sta 1
  2208. lda (249),y
  2209. ldx #$77
  2210. stx 1
  2211. cli
  2212. tax
  2213. beq +
  2214. jsr chrout
  2215. iny
  2216. bne -
  2217.  
  2218. + jsr lfeed
  2219. lda temp
  2220. cmp #4
  2221. beq +
  2222. jsr return'tab
  2223. + inc temp
  2224. lda temp
  2225. cmp #5
  2226. bcc --
  2227.  
  2228.  
  2229. ldy #0
  2230.  
  2231. lda top'of'letter
  2232. sta 247
  2233. lda top'of'letter+1
  2234. sta 248
  2235.  
  2236. print'loop ldy #0
  2237. lda 248
  2238. cmp #$f0
  2239. bcc +
  2240. jmp print'blank'loop
  2241.  
  2242. + lda (247),y
  2243. beq printed'to'bottom
  2244. cmp "@"
  2245. bne +
  2246. beq printed'to'bottom
  2247. + cmp "\"
  2248. bne +
  2249. jmp print'fill
  2250. + jsr printer'word'wrap
  2251. + ldy #0
  2252. jsr bump'page
  2253. jmp print'loop
  2254.  
  2255. printed'to'bottom jsr print'close
  2256. lda #66
  2257. clc
  2258. sbc printer'line
  2259. tax
  2260. lda #13
  2261. - jsr chrout
  2262. dex
  2263. bpl -
  2264.  
  2265. jsr clrchn
  2266. lda #4
  2267. jmp close
  2268.  
  2269. print'fill jsr bump'page
  2270. ldy #0
  2271. lda (247),y
  2272. sta temp
  2273. jsr bump'page
  2274. lda 247
  2275. sta normal'storage
  2276. lda 248
  2277. sta normal'storage+1
  2278. lda temp
  2279. sec
  2280. sbc #193
  2281. tax
  2282. lda blank'addresses,x
  2283. sta 248
  2284. ldy #0
  2285. sty 247
  2286.  
  2287. print'blank'loop sei
  2288. lda #$74
  2289. sta 1
  2290. lda (247),y
  2291. sta temp
  2292. lda #$77
  2293. sta 1
  2294. cli
  2295. lda temp
  2296. beq print'print'default
  2297. cmp #255
  2298. beq print'blank'end
  2299. jsr printer'word'wrap
  2300. ldy #0
  2301. jsr bump'page
  2302. jmp print'blank'loop
  2303. print'blank'end lda word'index
  2304. beq print'no'ex
  2305. jsr print'word
  2306. print'no'ex lda normal'storage
  2307. sta 247
  2308. lda normal'storage+1
  2309. sta 248
  2310. ldy #0
  2311. jmp print'loop
  2312.  
  2313. print'print'default lda normal'storage
  2314. sta 247
  2315. lda normal'storage+1
  2316. sta 248
  2317. ldy #0
  2318. jmp print'loop
  2319.  
  2320. printer'word'wrap sty temp
  2321. ldy word'index
  2322.  
  2323. cmp "_"
  2324. bne +
  2325. lda #13
  2326.  
  2327. + cmp #13
  2328. bne +
  2329. jsr print'word
  2330. jsr lfeed
  2331. rts
  2332.  
  2333. + inc word'index
  2334. sta input'buffer,y
  2335.  
  2336. cmp " "
  2337. bne +
  2338. jsr print'word
  2339. rts
  2340.  
  2341. + lda line'pos
  2342. clc
  2343. adc word'index
  2344. cmp #75
  2345. bcc +
  2346. jsr lfeed
  2347. lda line'pos
  2348. clc
  2349. adc word'index
  2350. cmp #75
  2351. bcc +
  2352. jsr print'word
  2353. jsr lfeed
  2354.  
  2355. + rts
  2356.  
  2357. lfeed ldy printer'line
  2358. iny
  2359. sty printer'line
  2360. cpy #56
  2361. bcc +
  2362.  
  2363. ldy #10
  2364. lda #13
  2365.  
  2366. - jsr chrout
  2367. dey
  2368. bne -
  2369.  
  2370. lda #5
  2371. sta printer'line
  2372.  
  2373. + lda #13
  2374. jsr chrout
  2375. lda " "
  2376. ldy #9
  2377. - jsr chrout
  2378. dey
  2379. bpl -
  2380. lda #9
  2381. sta line'pos
  2382. lda reverse'flag
  2383. sta 199
  2384. rts
  2385.  
  2386. print'close lda #2
  2387. sta temp
  2388. - jsr lfeed
  2389. dec temp
  2390. bpl -
  2391.  
  2392. lda close'address
  2393. sta 248
  2394. lda close'address+1
  2395. sta 249
  2396. ldy #0
  2397.  
  2398. jsr return'tab
  2399.  
  2400. - lda (248),y
  2401. beq +
  2402. cmp #13
  2403. beq +
  2404. jsr chrout
  2405. iny
  2406. bne -
  2407.  
  2408. + lda ","
  2409. jsr chrout
  2410. jsr lfeed
  2411. jsr lfeed
  2412. jsr lfeed
  2413. jsr lfeed
  2414. jsr return'tab
  2415. lda #0
  2416. sta temp
  2417. jsr calc'ret
  2418.  
  2419. ldy #0
  2420. - sei
  2421. lda #$74
  2422. sta 1
  2423. lda (249),y
  2424. ldx #$77
  2425. stx 1
  2426. cli
  2427. tax
  2428. beq +
  2429. jsr chrout
  2430. iny
  2431. bne -
  2432.  
  2433. + jmp lfeed
  2434.  
  2435.  
  2436. return'tab lda sel'pos
  2437. beq +
  2438.  
  2439. ldx #35
  2440. lda " "
  2441. - jsr chrout
  2442. dex
  2443. bne -
  2444.  
  2445. + rts
  2446.  
  2447. mail'merge lda #128
  2448. sta mflag
  2449. ldx #2
  2450. jsr screen'stash
  2451. ldx <merge'q
  2452. ldy >merge'q
  2453. lda #33
  2454. jsr show
  2455.  
  2456. - jsr getin
  2457. beq -
  2458. cmp "c"
  2459. beq mm2
  2460. cmp "s"
  2461. bne -
  2462. lda #0
  2463. sta mflag
  2464.  
  2465. mm2 ldx <mail'prompt
  2466. ldy >mail'prompt
  2467. lda #31
  2468. jsr show
  2469. jsr gut'screen
  2470. lda #254
  2471. sta in'limit
  2472. jsr get'word
  2473.  
  2474. lda in'length
  2475. bne +
  2476. ldx #2
  2477. jsr screen'restore
  2478. jmp setup'menu
  2479.  
  2480. + ldx <disk'prompt
  2481. ldy >disk'prompt
  2482. lda #29
  2483. jsr show
  2484.  
  2485. lda #0
  2486. sta 198
  2487.  
  2488. - jsr getin
  2489. beq -
  2490.  
  2491. cmp #13
  2492. beq load'mail
  2493.  
  2494. cmp "q"
  2495. bne +
  2496. ldx #3
  2497. jsr screen'restore
  2498. rts
  2499.  
  2500. + cmp "0"
  2501. bcc -
  2502. cmp ":"
  2503. bcs -
  2504.  
  2505. sec
  2506. sbc #48
  2507. cmp #8
  2508. bcs +
  2509. clc
  2510. adc #10
  2511. + sta device
  2512.  
  2513. load'mail jsr test'device
  2514. bit temp
  2515. bmi -
  2516. jsr open'error
  2517. lda #2
  2518. ldx device
  2519. ldy #2
  2520. jsr setlfs
  2521. lda in'length
  2522. ldx 253
  2523. ldy 254
  2524. inx
  2525. jsr setnam
  2526. jsr open
  2527. lda #2
  2528. jsr close
  2529. jsr read'error
  2530. lda error'buffer
  2531. cmp "0"
  2532. beq +
  2533. jmp mm2
  2534.  
  2535. + lda #15
  2536. jsr close
  2537. lda #2
  2538. jsr close
  2539. ldx <mail'mess
  2540. ldy >mail'mess
  2541. lda #24
  2542. jsr show
  2543.  
  2544. lda #2
  2545. ldx device
  2546. ldy #2
  2547. jsr setlfs
  2548. lda in'length
  2549. ldx <word'buffer+1
  2550. ldy >word'buffer+1
  2551. jsr setnam
  2552. jsr open
  2553. jsr clrchn
  2554. ldx #2
  2555. jsr chkin
  2556.  
  2557. lda <mail'merge'start
  2558. sta 247
  2559. lda >mail'merge'start
  2560. sta 248
  2561. ldy #0
  2562. sty eof
  2563.  
  2564. - jsr getin
  2565. sta temp
  2566. jsr readst
  2567. and #64
  2568. beq +
  2569. dec eof
  2570. + lda temp
  2571. sta (247),y
  2572. inc 247
  2573. bne +
  2574. inc 248
  2575. + bit eof
  2576. bpl -
  2577. tya
  2578. sta (247),y
  2579. lda #2
  2580. jsr close
  2581. jsr clrchn
  2582.  
  2583. lda <mail'merge'start
  2584. sta 247
  2585. lda >mail'merge'start
  2586. sta 248
  2587. sei
  2588. lda #$74
  2589. sta 1
  2590.  
  2591. skip'number jsr skip'field
  2592. skip'keyword sei
  2593. lda #$74
  2594. sta 1
  2595. bit mflag
  2596. bvs +
  2597. jsr skip'field
  2598. cmp #0
  2599. bne get'addressee
  2600. + lda #$77
  2601. sta 1
  2602. cli
  2603. jmp merge'out
  2604.  
  2605. get'addressee ldy #0
  2606. lda blank'addresses
  2607. sta 250
  2608. sty 249
  2609. lda blank'addresses+4
  2610. sta 254
  2611. sty 253
  2612.  
  2613. ldy #4
  2614. - lda hey'bub,y
  2615. sta (253),y
  2616. dey
  2617. bpl -
  2618.  
  2619. lda #5
  2620. clc
  2621. adc 253
  2622. sta 253
  2623. lda #0
  2624. adc 254
  2625. sta 254
  2626.  
  2627. ldy #0
  2628. - lda (247),y
  2629. cmp #13
  2630. beq eo1
  2631. sta (253),y
  2632. sta (249),y
  2633.  
  2634. inc 247
  2635. bne +
  2636. inc 248
  2637. + inc 253
  2638. bne +
  2639. inc 254
  2640. + inc 249
  2641. bne +
  2642. inc 250
  2643.  
  2644. + cmp #13
  2645. bne -
  2646.  
  2647. eo1 lda #255
  2648. sta (249),y
  2649. sta (253),y
  2650.  
  2651. - dec 253
  2652. ldx 253
  2653. cpx #255
  2654. bne +
  2655. dec 254
  2656.  
  2657. + lda (253),y
  2658. cmp " "
  2659. beq -
  2660.  
  2661. inc 253
  2662. bne +
  2663. inc 254
  2664. + lda ":"
  2665. sta (253),y
  2666.  
  2667.  
  2668. get'line'2 jsr skip'field
  2669. lda blank'addresses+1
  2670. sta 250
  2671. lda #0
  2672. sta 249
  2673.  
  2674. ldy #0
  2675. - lda (247),y
  2676. cmp #13
  2677. beq eo2
  2678. sta (249),y
  2679.  
  2680. inc 247
  2681. bne +
  2682. inc 248
  2683. + inc 249
  2684. bne +
  2685. inc 250
  2686.  
  2687. + cmp #13
  2688. bne -
  2689.  
  2690. eo2 lda #255
  2691. sta (249),y
  2692.  
  2693. get'line'3 jsr skip'field
  2694. lda blank'addresses+2
  2695. sta 250
  2696. lda #0
  2697. sta 249
  2698.  
  2699. ldy #0
  2700. - lda (247),y
  2701. cmp #13
  2702. beq eo3
  2703. sta (249),y
  2704.  
  2705. + inc 247
  2706. bne +
  2707. inc 248
  2708. + inc 249
  2709. bne +
  2710. inc 250
  2711.  
  2712. + cmp #13
  2713. bne -
  2714.  
  2715. eo3 lda #255
  2716. sta (249),y
  2717.  
  2718. get'line'4 jsr skip'field
  2719. lda blank'addresses+3
  2720. sta 250
  2721. lda #0
  2722. sta 249
  2723.  
  2724. ldy #0
  2725. - lda (247),y
  2726. cmp #13
  2727. beq eo4
  2728. sta (249),y
  2729.  
  2730. + inc 247
  2731. bne +
  2732. inc 248
  2733. + inc 249
  2734. bne +
  2735. inc 250
  2736.  
  2737. + cmp #13
  2738. bne -
  2739.  
  2740. eo4 lda #255
  2741. sta (249),y
  2742.  
  2743. jsr skip'field
  2744. jsr skip'field
  2745. lda #$77
  2746. sta 1
  2747. cli
  2748. ldx #2
  2749. jsr screen'restore
  2750.  
  2751. lda 247
  2752. sta hold'm
  2753. lda 248
  2754. sta hold'm+1
  2755. jsr print'letter
  2756. lda hold'm
  2757. sta 247
  2758. lda hold'm+1
  2759. sta 248
  2760. jmp skip'keyword
  2761. merge'out rts
  2762.  
  2763. skip'field ldy #0
  2764. - lda (247),y
  2765. beq ++
  2766. inc 247
  2767. bne +
  2768. inc 248
  2769. + cmp #13
  2770. bne -
  2771. + rts
  2772.  
  2773. r'patch lda 210
  2774. sec
  2775. sbc 648
  2776. clc
  2777. adc #$d8
  2778. sta 244
  2779. lda 209
  2780. sta 243
  2781. rts
  2782.  
  2783. name .asc "r0:hello connect=hello connect":.byt 0
  2784. input .buf 2
  2785. dynamic'keyboard .byt 147,17,17,17
  2786. .asc "load":.byt 34:.asc "hello connect"
  2787. .byt 34:.asc ",8":.byt 13,17,17,17,17
  2788. .asc "run":.byt 19,17,0
  2789. in'hilight .byt 1
  2790. in'text .byt 13
  2791. in'limit .byt 253
  2792. in'length .byt 127
  2793.  
  2794. validation'string .asc "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
  2795. .asc "  1234567890+-\!#$%&'()?*./,;:=_"
  2796. .byt 13,20
  2797. in'temp .byt 0
  2798. in'counter .byt 0
  2799. in'found .byt 0
  2800. in'pos .byt 0
  2801. in'ypos .byt 0
  2802. in'old'time .byt 0
  2803. vallength =in'temp-validation'string
  2804.  
  2805. cursor'position .byt 0
  2806. string'location .word input'buffer
  2807. orig'cursorx .byt 0
  2808. orig'cursory .byt 0
  2809.  
  2810. box'parameters =*
  2811. x1 .byt 1
  2812. x2 .byt 20
  2813. y1 .byt 1
  2814. y2 .byt 20
  2815. screen'code .byt 255
  2816. box'color .byt 1
  2817.  
  2818. ban'top .byt 0,39,0,0,228,13
  2819. ban'middle .byt 0,39,1,1,160,3
  2820. ban'bottom .byt 0,39,2,1,227,5
  2821. ban'text .asc "L e t t e r M e i s t e r":.byt 0
  2822.  
  2823. categories'shadow .byt 9,33,6,17,255,6
  2824. categories'parms .byt 8,32,5,16,160,13
  2825.  
  2826. prompts'shadow .byt 3,36,4,18,255,6
  2827. prompts'parms .byt 4,37,3,17,160,13
  2828.  
  2829. clear'parms .byt 1,38,5,18,160,14
  2830. clear2'parms .byt 0,39,8,15,32,13
  2831.  
  2832. close'shadow .byt 8,31,5,14,255,5
  2833. close'parms .byt 9,32,4,13,160,3
  2834. .scr "by JeFf JoNeS, CoPyRiGhT 1991 SoFtDiSk, InC."
  2835. menuy .byt 0
  2836. menux1 .byt 0
  2837. menux2 .byt 0
  2838. menu'items .byt 0
  2839. menu'text .byt 0
  2840. menu'highlight .byt 0
  2841. menu'current .byt 0
  2842. mcolor .byt 0
  2843. hey'bub .asc "Dear "
  2844.  
  2845. merge'q .asc "Single Sheet or Continuous? (S/C)":.byt 0
  2846. mail'mess .asc "Getting MAIL BAG File...":.byt 0
  2847. mail'prompt .asc "Please Enter MAIL BAG File Name":.byt 0
  2848. getting'ret'mess .asc "Getting Return Address":.byt 0
  2849. printing .asc "< < < P R I N T I N G > > >":.byt 0
  2850. printer'missing .asc "Printer Not Online!":.byt 0
  2851. printer'mess .asc "Set Top Of Form/RETURN/Q":.byt 0
  2852. enter'close'mess .asc "Enter Closing/RETURN":.byt 0
  2853. closing'mess .asc "Select Desired Closing/RETURN":.byt 0
  2854. pos'msg .asc "LEFT or RIGHT? (L/R)":.byt 0
  2855. return'name .asc "@0:lmreturn,s,w"
  2856. disk'prompt .asc "Insert Disk/RETURN/Q/8/9/0...":.byt 0
  2857. load'prompt .asc "Enter File Name.  RETURN Aborts":.byt 0
  2858. correct'mess .asc "Is This Correct? (Y/N)":.byt 0
  2859. user'file'text .asc "LOAD New Forms":.byt 13
  2860. return'text .asc "Setup Return Address":.byt 13
  2861. quit'text .asc "Quit To LOADSTAR":.byt 13
  2862. select'prompt .asc "CRSR/RETURN To Select":.byt 0
  2863. sure'text .asc "Are You Sure? (Y/N)":.byt 0
  2864. filename .asc "lmtext"
  2865. loading'msg .asc "Loading Form Letters...":.byt 0
  2866. menu2'mess .asc "Select Option Or SPACE Back To Letter":.byt 0
  2867. next'letter'msg .asc "SPACE Next Letter  M For Menu":.byt 0
  2868. exit'msg .asc "Press RETURN to exit edit mode":.byt 0
  2869. line'word .asc "LINE ":.byt 0
  2870. return'mess .asc "Enter Line/RETURN To Continue":.byt 0
  2871. edit'menu'ap  .byt rvs'on,light'green:.asc "Return Address Position":.byt 13
  2872. .byt rvs'on,light'green:.asc "Select Closing":.byt 13
  2873. .byt rvs'on,light'green:.asc "Print Letter/CTRL-M Mail Merge":.byt 13
  2874. .byt rvs'on,light'green:.asc "Return To Main Menu":.byt 13,0
  2875. box'top .byt 158,rvs'off,top'left
  2876. .asc "{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}"
  2877. .byt top'right,0
  2878. box'middle .byt 158,rvs'off:.asc "{SHIFT--}":.byt rvs'on,154
  2879. .asc "                                      ":.byt rvs'off,158:.asc "{SHIFT--}":.byt 0
  2880. box'bottom .byt 158,bottom'left
  2881. .asc "{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}"
  2882. .byt bottom'right,19,0
  2883. number'of'lines .byt 0
  2884. blank .asc "<<BLANK>>":.byt 0
  2885. closings .asc "Sincerely yours":.byt 13
  2886. .asc "Sincerely":.byt 13
  2887. .asc "Hope to hear from you":.byt 13
  2888. .asc "Love":.byt 13
  2889. .asc "Always":.byt 13
  2890. .asc "Yours in love":.byt 13
  2891. .asc "Happy holidays":.byt 13
  2892. .asc "Yours truly":.byt 13
  2893. .asc "Define Closing":.byt 0
  2894. user'closing .buf 39
  2895. close'address .word closings
  2896. screens .byt $d0,$d8,$e0,$e8
  2897. cats'found .byt 0
  2898. temp .byt 0
  2899. current'letter .byt 0
  2900.  
  2901. blank'addresses .byt $f0,$f1,$f2,$f3,$f4,$f5,$f6,$f7,$f8,$f9,$fa
  2902. edit'menu .word $fb00
  2903. return'address .word $fd80
  2904. categories .buf 32
  2905. top'of'letter .word 0
  2906. bottom'of'letter .word 0
  2907. next'letter .word 0
  2908. first'letter .word 0
  2909. end'of'category .word 0
  2910. space'on .byt 0
  2911. zero'store .buf 8
  2912. right'limit .byt 37
  2913. left'limit .byt 1
  2914. reverse'flag .byt 0
  2915. last'char .byt 0
  2916. word'index .byt 0
  2917. line'pos .byt 0
  2918. blank'storage .word 0
  2919. normal'storage .word 0
  2920. device .byt 0,0
  2921. sel'pos .byt 255
  2922. printer'line .byt 255
  2923. spacing .byt 0
  2924. error'buffer .buf 60
  2925. word'buffer .buf 255
  2926. eof .byt 0
  2927. mflag .byt 0
  2928. hold'm .buf 2
  2929.  
  2930.