?login_element?

Subversion Repositories NedoOS

Rev

Rev 407 | Blame | Compare with Previous | Last modification | View Log | Download

  1. ;SVG FILES CONVERTER (MAX LEN 255 SECTORS) done by elfh
  2. ;SCALABLE VECTOR GRAPHICS, STORED IN TXT FORM
  3. ;EXTRACTS ONLY line,polygon,path (not full)
  4.  
  5. ;SOURCE DRAWING MUST BE ALIGNED TO THE TOP LEFT CORNER OF PAGE
  6. ;DIMENSIONS 256x192 mm MAXIMUM
  7. ;LINES SHOULD NOT BE COMBINED
  8. ;LOOK house.svg AS AN EXAMPLE
  9.  
  10.  
  11. ;...WAITING FOR FUTURE DEVELOPMENTS
  12. ;+0 - LINES DATA START OFFSET
  13. ;+2 - QUANTITY OF LINES
  14. ;+4 - POLYLINES DATA START OFFSET
  15. ;+6 - QUANTITY OF POLYLINES
  16. ;+8 - POLYGONS DATA START OFFSET
  17. ;+10 - QUANTITY OF POLYGONS
  18.  
  19. ; OUTPUT: HL - ADR OF DATA
  20. ;         BC - LENGTH OF DATA
  21.  
  22. SCRADR=#4000
  23. HLJUMP=#7000 ;[512] LINE JUMPS
  24. HLTMP=HLJUMP+#200     ;[512] SCR ADRS
  25. HLBASE=HLTMP+#200     ;[#C22]
  26. COLM1=5
  27. ;READBUF EQU 0x6000;#9000
  28. FINDAT=0x6000;READBUF
  29. LINES=0xd000;#C000 ;
  30. POLYLINES=0xe000;#D000
  31. POLYGONS=0xf000;#E000
  32. STR_BUF=0x6300;#9300 ;не перекроет FINDAT?
  33.  
  34. ;TUNING PARAMETERS
  35.  
  36. SCALE=#108
  37. MINLINE=#4      ;MINIMAL LENGTH OF LINE
  38. ADDX=4          ;SCREN OFFSET
  39. ADDY=4
  40. CPLX=0  ;X MIRRORING
  41.  
  42. readsvg
  43. ;a=(iy)=first char
  44.         ;jr $
  45.         ;push af
  46.         CALL INITS
  47.         ;pop af
  48.         CALL CONVERT
  49.         ;CALL PRNREAL
  50.         CALL COMPACT
  51.         ;PUSH HL
  52.         ;push BC
  53.         CALL DRAW
  54.         ;LD A,#10
  55.         ;CALL PAG_128
  56.         ;LD HL,#4000
  57.         ;LD DE,#C000
  58.         ;LD BC,#1800
  59.         ;LDIR
  60.         ;POP BC
  61.         ;pop HL
  62.         RET
  63.  
  64. CRDINI
  65.         LD HL,(FINDAT)
  66.         LD BC,FINDAT
  67.         ADD HL,BC
  68.         LD (LS_1),HL
  69.         LD HL,FINDAT+2
  70.         LD (LQ_2),HL
  71.         LD HL,(FINDAT+4)
  72.         ADD HL,BC
  73.         LD (PLS_1),HL
  74. ;       LD (PLS1+1),HL
  75.         LD HL,FINDAT+6
  76.         LD (PLQ_2),HL
  77.         LD HL,(FINDAT+8)
  78.         ADD HL,BC
  79.         LD (PLGS_1),HL
  80. ;       LD (PLGS1_1),HL
  81.         LD HL,FINDAT+10
  82.         LD (PLGQ_2),HL
  83.         RET
  84.  
  85. POLYGONDRAW
  86. PLGQ_2=$+2
  87.         LD BC,(POLYGONS)
  88.         LD A,B
  89.         OR C
  90.         RET Z
  91. PLGS_1=$+1
  92.         LD HL,POLYGONS+2
  93.  
  94. POLYGDR2
  95.         PUSH BC
  96.         LD B,(HL)
  97.         INC HL
  98.         LD E,(HL)
  99.         INC HL
  100.         LD D,(HL)
  101.         INC HL
  102.         DEC B
  103.         PUSH DE
  104. POLYGDR1
  105.         PUSH BC
  106.         LD C,(HL)
  107.         INC HL
  108.         LD B,(HL)
  109.         INC HL
  110.  
  111.         PUSH BC
  112.         PUSH HL
  113. LC1     CALL LINE
  114.         POP HL
  115.         POP DE
  116.         POP BC
  117.         DJNZ POLYGDR1
  118.         POP BC
  119.         PUSH HL
  120. LC2     CALL LINE
  121.         POP HL
  122.         POP BC
  123.         DEC BC
  124.         LD A,B
  125.         OR C
  126.         JR NZ,POLYGDR2
  127.         RET
  128.  
  129. POLYLINEDRAW
  130. PLQ_2=$+2
  131.         LD BC,(POLYLINES)
  132.         LD A,B
  133.         OR C
  134.         RET Z
  135. PLS_1=$+1
  136.         LD HL,POLYLINES+2
  137. POLYLDR2
  138.         PUSH BC
  139.         LD B,(HL)
  140.         INC HL
  141.         LD E,(HL)
  142.         INC HL
  143.         LD D,(HL)
  144.         INC HL
  145.         DEC B
  146. POLYLDR1
  147.         PUSH BC
  148.         LD C,(HL)
  149.         INC HL
  150.         LD B,(HL)
  151.         INC HL
  152.         PUSH BC
  153.         PUSH HL
  154. LC3     CALL LINE
  155.         POP HL
  156.         POP DE
  157.         POP BC
  158.         DJNZ POLYLDR1
  159.         POP BC
  160.         DEC BC
  161.         LD A,B
  162.         OR C
  163.         JR NZ,POLYLDR2
  164.         RET
  165.  
  166.  
  167.  
  168. LINEDRAW
  169. LQ_2=$+2
  170.         LD BC,(0) ;ok
  171.         LD A,B
  172.         OR C
  173.         RET Z
  174.         LD (LINEDR4_1),BC
  175. LINEDR3
  176. LINEDR4_1=$+1
  177.         LD BC,0
  178. LS_1=$+1
  179.         LD HL,LINES+2
  180. LINEDR1
  181.         PUSH BC
  182.         LD E,(HL)
  183.         INC HL
  184.         LD D,(HL)
  185.         INC HL
  186.         LD C,(HL)
  187.         INC HL
  188.         LD B,(HL)
  189.         INC HL
  190.         PUSH HL
  191. LC4     CALL LINE
  192.         POP HL
  193.         POP BC
  194.  
  195.         DEC BC
  196.         LD A,B
  197.         OR C
  198.         JR NZ,LINEDR1
  199.         RET
  200.  
  201.  
  202.  
  203. COMPACT
  204.         ;LD A,#10
  205.         ;CALL PAG_128
  206.         LD IX,FINDAT
  207.         LD DE,FINDAT+12
  208.         LD A,D
  209.         SUB FINDAT/256
  210.         LD (IX),E       ;LINES START
  211.         LD (IX+1),A
  212.         LD HL,LINES
  213.         LD C,(HL)
  214.         INC HL
  215.         LD B,(HL)
  216.         INC HL
  217.         LD (IX+2),C     ;LINES QUANTITY
  218.         LD (IX+3),B
  219.         LD A,B
  220.         OR C
  221.         JR Z,COMPACT1
  222.         PUSH HL
  223.         LD HL,(LINES1_1)
  224.         LD BC,LINES+2
  225.         AND A
  226.         SBC HL,BC
  227.         LD B,H
  228.         LD C,L
  229.         POP HL
  230.         LDIR
  231.  
  232. COMPACT1
  233.         LD A,D
  234.         SUB FINDAT/256
  235.  
  236.         LD (IX+4),E     ;POLYLINES START
  237.         LD (IX+5),A
  238.  
  239.         LD HL,POLYLINES
  240.         LD C,(HL)
  241.         INC HL
  242.         LD B,(HL)
  243.         INC HL
  244.         LD (IX+6),C     ;POLYLINES QUANTITY
  245.         LD (IX+7),B
  246.         LD A,B
  247.         OR C
  248.         JR Z,COMPACT2
  249.  
  250.         PUSH HL
  251.         LD HL,(PATHS1+1)
  252.         LD BC,POLYLINES+2
  253.         AND A
  254.         SBC HL,BC
  255.         LD B,H
  256.         LD C,L
  257.         POP HL
  258.         LDIR
  259. COMPACT2
  260.         LD A,D
  261.         SUB FINDAT/256
  262.  
  263.         LD (IX+8),E     ;POLYGONS START
  264.         LD (IX+9),A
  265.  
  266.         LD HL,POLYGONS
  267.         LD C,(HL)
  268.         INC HL
  269.         LD B,(HL)
  270.         INC HL
  271.         LD (IX+10),C    ;POLYGONS QUANTITY
  272.         LD (IX+11),B
  273.         LD A,B
  274.         OR C
  275.         JR Z,COMPACT3
  276.         PUSH HL
  277.         LD HL,(POLYGS_1)
  278.         LD BC,POLYGONS+2
  279.         AND A
  280.         SBC HL,BC
  281.         LD B,H
  282.         LD C,L
  283.         POP HL
  284.         LDIR
  285. COMPACT3
  286.         LD HL,FINDAT
  287.         PUSH HL
  288.         EX DE,HL
  289.         AND A
  290.         SBC HL,DE
  291.         LD B,H
  292.         LD C,L
  293.         POP HL
  294.         RET
  295.  
  296. DRAW
  297.         ;LD A,#10
  298.         ;CALL PAG_128
  299.         CALL CRDINI
  300.         CALL LINEDRAW
  301.         CALL POLYGONDRAW
  302.         CALL POLYLINEDRAW
  303.         RET
  304.  
  305.  
  306. CONVERT
  307. ;a=(iy)=first char
  308.         ;LD A,#10
  309.         ;CALL PAG_128
  310.         ;LD HL,LINETXT
  311.         ;LD DE,#4000
  312.         ;CALL PRNLINE
  313.         ;LD HL,POLYLINETXT
  314.         ;LD DE,#4020
  315.         ;CALL PRNLINE
  316.         ;LD HL,POLYGONTXT
  317.         ;LD DE,#4040
  318.         ;CALL PRNLINE
  319.  
  320.         LD HL,0
  321.         LD (LINES),HL
  322.         LD (POLYGONS),HL
  323.         LD (POLYLINES),HL
  324.        
  325. SEARCH
  326.         ld a,(iy)
  327. ;a=first char
  328. ;find '<'
  329.         jr findtag_go
  330. findtag0
  331.         rdbyte
  332.         or a
  333.         ret z
  334. findtag_go
  335.         cp '<'
  336.         jr nz,findtag0
  337.        
  338.         LD DE,STR_BUF
  339. copytag0
  340.         rdbyte
  341.         LD (DE),A
  342.         INC DE
  343.         or a
  344.         ret z
  345.         CP ' '
  346.         JR z,copytagq
  347.         CP 0x0d
  348.         JR nz,copytag0
  349. copytagq
  350.         XOR A
  351.         LD (DE),A
  352.  
  353. ;compare tag
  354.  
  355.         LD DE,POLYLINETXT ;"polyline"
  356.         LD HL,STR_BUF
  357.         CALL comparetag;FINDSEQ
  358.         JP NC,POLYLSUB
  359.         LD DE,LINETXT ;"line"
  360.         LD HL,STR_BUF
  361.         CALL comparetag;FINDSEQ
  362.         JP NC,LINESUB
  363.         LD DE,POLYGONTXT ;"polygon"
  364.         LD HL,STR_BUF
  365.         CALL comparetag;FINDSEQ
  366.         JP NC,POLYGSUB
  367.         LD DE,PATHTXT ;"path"
  368.         LD HL,STR_BUF
  369.         CALL comparetag;FINDSEQ
  370.         JP NC,PATHSUB
  371.         JR SEARCH
  372.  
  373. POLYLSUB
  374.         LD DE,POINTSTXT
  375.         CALL FINDSEQ
  376.         ;LD D,H
  377.         ;ld E,L
  378.         LD HL,(PATHS1+1)
  379.         PUSH HL
  380.         INC HL
  381.         ;LD LY,#0
  382.         xor a
  383.         ld (POLYLSUB_LY),a
  384. POLYLS1
  385.         PUSH HL
  386.         ;LD H,D
  387.         ;ld L,E
  388.         CALL TAKEVALUE_usechar
  389.         POP HL
  390.         ADD A,ADDX
  391.         IF CPLX
  392.         CPL
  393.         ENDIF
  394.         LD (HL),A
  395.         INC HL
  396.         PUSH HL
  397.         ;LD H,D
  398.         ;LD L,E
  399.         LD C,','
  400.         CALL FINDCHAR
  401.         CALL TAKEVALUE
  402.         POP HL
  403.         ADD A,ADDY
  404.         LD (HL),A
  405.         INC HL
  406.         PUSH HL
  407.         ;LD H,D
  408.         ;LD L,E
  409.         LD C,' '
  410.         CALL FINDCHAR ;always space after a coordinate pair
  411.         ;push af
  412.         ;INC LY
  413. POLYLSUB_LY=$+1
  414.         ld a,0
  415.         inc a
  416.         ld (POLYLSUB_LY),a
  417.         ;pop af
  418.         ;CALL CHEKEND ;no more coordinates?
  419.          rdbyte
  420.          or a
  421.          jr z,$+4
  422.          cp 34 ;'"'
  423.         ;LD D,H
  424.         ;LD E,L
  425.         POP HL
  426.         ;JR NC,POLYLS1
  427.         jr nz,POLYLS1 ;A=char
  428.        
  429.         LD A,(POLYLSUB_LY);LY
  430.         CP 2
  431.         JR NZ,POLYLS3
  432.         POP HL
  433.         INC HL
  434.         ;PUSH DE
  435.         LD DE,(LINES1_1)
  436.         LDI
  437.         LDI
  438.         LDI
  439.         LDI
  440.         LD (LINES1_1),DE
  441.         ;POP DE
  442.         JP INCLINES ;then go to SEARCH
  443. POLYLS3
  444.         LD (PATHS1+1),HL
  445.         POP HL
  446.         LD (HL),A
  447.         LD HL,(POLYLINES)
  448.         INC HL
  449.         LD (POLYLINES),HL
  450.         ;LD H,D
  451.         ;LD L,E
  452.         JP SEARCH
  453.  
  454. ;<path
  455. ;       style="opacity:0.5;fill:#fbd18c;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.99999994000000003px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
  456. ;       d="M 277.29341,317.6659 L 273.34797,332.71054 C 261.22154,336.98064 252.44384,347.94937 243.51063,358.60706 C 236.13584,370.87482 233.6126,384.52895 230.68798,398.0684 C 228.07703,416.06618 225.69032,434.07143 228.96183,450.10806 C 230.4419,470.61379 228.50633,481.00099 228.22209,494.74869 C 241.62433,501.24807 254.04631,507.5823 269.40254,513.98611 C 277.03418,517.22393 283.63529,521.18884 290.85583,522.12501 C 298.55151,525.56769 302.87162,518.88188 307.37735,512.75292 C 310.39581,503.95065 313.11655,495.0739 313.54206,485.62327 C 313.51245,473.88189 314.88711,461.43824 317.48752,448.38162 C 324.7129,437.1143 329.17434,426.64049 332.52947,412.37314 C 334.3987,398.14383 333.52075,385.77337 331.55551,372.68269 C 328.70412,364.8855 328.86795,346.24999 322.74448,340.66065 C 315.68984,334.22137 321.89707,339.41824 313.62504,332.60726 C 310.05408,329.4694 310.21048,327.59421 310.55162,322.68856"
  457. ;       id="path3258"
  458. ;       sodipodi:nodetypes="cccccccccccccscc" />
  459. ;<path d="M1240.8016 149.5791 L1231.7411 158.9015 L1237.4938 157.9492 L1241.0413 162.5769 Z" clip-path="url(#clipPath2)" stroke="none"/>
  460. ;      <path fill="none" d="M1296.431 128.426 L1491.5957 172.0709" clip-path="url(#clipPath2)"/>
  461. PATHSUB
  462.         EXX
  463. PATHS1  LD HL,POLYLINES+2
  464.         PUSH HL ;start of path
  465.         INC HL ;there will be number of lines
  466.         EXX
  467.         LD DE,DTXT
  468.         CALL FINDSEQ
  469.         LD C,'m';"M" ;BIG and small!
  470.         CALL FINDCHAR
  471.         CALL TAKEVALUE
  472.         EXX
  473.         LD C,A
  474.         EXX
  475.         LD C,' '
  476.         ;LD H,D
  477.         ;ld L,E
  478.         CALL FINDCHAR
  479.         CALL TAKEVALUE
  480.         EXX
  481.         LD B,A
  482.         LD A,C
  483.         ADD A,ADDX
  484.         IF CPLX
  485.         CPL
  486.         ENDIF
  487.         LD (HL),A
  488.         INC HL
  489.         LD A,B
  490.         ADD A,ADDY
  491.         LD (HL),A
  492.         INC HL
  493.         EXX
  494.         ;LD LY,1
  495.         ld a,1
  496.         ld (PATHS_LY),a
  497.  
  498.         ;LD C,'l' ;letter ;or maybe 'c'???
  499.         ;LD H,D
  500.         ;ld L,E
  501.         ;INC HL
  502.         ;CALL FINDCHAR
  503.         call CHEKPATH ;skip end of number
  504. PATHS2
  505.         rdbyte
  506.         or 0x20
  507.         cp 'z'
  508.         jr z,PATHS2q
  509.         CALL TAKEVALUE_usechar
  510.         EXX
  511.         ADD A,C
  512.         LD C,A
  513.         EXX
  514.         ;LD C,' ' ;or maybe ','!!!
  515.         ;LD H,D
  516.         ;ld L,E
  517.         ;INC HL
  518.         ;CALL FINDCHAR
  519.         call CHEKPATH ;skip end of number
  520.         CALL TAKEVALUE
  521.         EXX
  522.         ADD A,B
  523.         CP #F0
  524.         JR C,$+2+1
  525.          XOR A
  526.         LD B,A
  527.         LD A,C
  528.         ADD A,ADDX
  529.         IF CPLX
  530.         CPL
  531.         ENDIF
  532.         LD (HL),A
  533.         INC HL
  534.         LD A,B
  535.         ADD A,ADDY
  536.         LD (HL),A
  537.         INC HL
  538.         EXX
  539.         ;INC LY
  540. PATHS_LY=$+1
  541.         ld a,0
  542.         inc a
  543.         ld (PATHS_LY),a
  544.         ;LD H,D
  545.         ;ld L,E
  546.         ;INC HL
  547.         CALL CHEKPATH ;skip end of number
  548.         JR Z,PATHS2 ;space after number
  549. PATHS2q
  550.   ;CONTINUOUS PATHS ARE NOT IMPLEMENTED
  551.   ;"z,m,l" AND OTHER CASES SHOULD BE CHECKED HERE
  552.         EXX
  553.         PUSH HL
  554.         EXX
  555.         POP HL
  556.         LD A,(PATHS_LY);LY
  557.         CP 2
  558.         JR NZ,PATHS3 ;more that 1 coordinate pair?
  559. ;1 coordinate pair?
  560.         POP HL ;start of path
  561.         INC HL
  562.         ;PUSH DE
  563.         LD DE,(LINES1_1)
  564.         LDI
  565.         LDI
  566.         LDI
  567.         LDI
  568.         LD (LINES1_1),DE
  569.         ;POP DE
  570.         JP INCLINES ;then go to SEARCH
  571. PATHS3
  572. ;more that 1 coordinate pair?
  573. ;TODO test!
  574.         LD (PATHS1+1),HL
  575.         POP HL ;start of path
  576.         LD (HL),A ;number of lines
  577.         LD BC,(POLYLINES)
  578.         INC BC
  579.         LD (POLYLINES),BC
  580.  
  581.         ;PUSH DE
  582.         LD B,(HL)
  583.         INC HL
  584.         LD E,(HL)
  585.         INC HL
  586.         LD D,(HL)
  587.         INC HL
  588.         DEC B
  589. POLYLD11
  590.         PUSH BC
  591.         LD C,(HL)
  592.         INC HL
  593.         LD B,(HL)
  594.         INC HL
  595.         PUSH BC
  596.         PUSH HL
  597.         CALL LINE
  598.         POP HL
  599.         POP DE
  600.         POP BC
  601.         DJNZ POLYLD11
  602.         ;POP DE
  603.         ;LD H,D
  604.         ;LD L,E
  605.         JP SEARCH
  606.  
  607.  
  608. CHEKPATH
  609. ;skip end of number
  610. ;out: Z = space, NZ = nonspace
  611. CHEKPATH0
  612.         ;LD A,(HL)
  613.         ;INC HL
  614.         rdbyte
  615.          or a
  616.          ret z
  617.         CP ' '
  618.         RET Z
  619.         cp '0'
  620.         ret c ;jr c,CHEKPATHq
  621.         CP '9'+1
  622.         JR C,CHEKPATH0
  623. ;CHEKPATHq
  624.         AND A
  625.         RET
  626.  
  627. FINDCHAR
  628. ;finds BIG and small!
  629.         ld a,(iy) ;to find a delimiter after a number (the next char after the number is already read)
  630.         jr FINDCHAR_go
  631. FINDCHAR0
  632.         rdbyte
  633.          or a
  634.          ret z
  635. FINDCHAR_go
  636.          or 0x20 ;small
  637.         CP C
  638.         JR NZ,FINDCHAR0
  639.         RET
  640.  
  641. POLYGSUB
  642.         LD DE,POINTSTXT
  643.         CALL FINDSEQ
  644.         ;LD D,H
  645.         ;ld E,L
  646. POLYGS_1=$+1
  647.         LD HL,POLYGONS+2
  648.         PUSH HL
  649.         INC HL
  650.         ;LD LY,#0
  651.         xor a
  652.         ld (POLYGSUB_LY),a
  653. POLYGS1
  654.         PUSH HL
  655.         ;LD H,D
  656.         ;ld L,E
  657.         CALL TAKEVALUE_usechar
  658.         POP HL
  659.         ADD A,ADDX
  660.         IF CPLX
  661.         CPL
  662.         ENDIF
  663.  
  664.         LD (HL),A
  665.         INC HL
  666.         PUSH HL
  667.         ;LD H,D
  668.         ;LD L,E
  669.         LD C,","
  670.         CALL FINDCHAR
  671.         CALL TAKEVALUE
  672.         POP HL
  673.         ADD A,ADDY
  674.         LD (HL),A
  675.         INC HL
  676.         PUSH HL
  677.         ;LD H,D
  678.         ;LD L,E
  679.         LD C," "
  680.         CALL FINDCHAR ;always space after a coordinate pair
  681.         ;push af
  682.         ;INC LY
  683. POLYGSUB_LY=$+1
  684.         ld a,0
  685.         inc a
  686.         ld (POLYGSUB_LY),a
  687.         ;pop af
  688.         ;CALL CHEKEND ;no more coordinates?
  689.          rdbyte
  690.          or a
  691.          jr z,$+4
  692.          cp 34 ;'"'
  693.         ;LD D,H
  694.         ;LD E,L
  695.         POP HL
  696.         ;JR NC,POLYGS1
  697.         jr nz,POLYGS1
  698.        
  699.         LD A,(POLYGSUB_LY);LY
  700.         CP 2
  701.         JR NZ,POLYGS3
  702.         POP HL
  703.         INC HL
  704.         ;PUSH DE
  705.         LD DE,(LINES1_1)
  706.         LDI
  707.         LDI
  708.         LDI
  709.         LDI
  710.         LD (LINES1_1),DE
  711.         ;POP DE
  712.         JP INCLINES ;then go to SEARCH
  713. POLYGS3
  714.         LD (POLYGS_1),HL
  715.         POP HL
  716.         LD (HL),A
  717.         LD HL,(POLYGONS)
  718.         INC HL
  719.         LD (POLYGONS),HL
  720.         ;LD H,D
  721.         ;LD L,E
  722.         JP SEARCH
  723.  
  724.         if 1==0
  725. CHEKEND
  726. ;find end of number
  727. CHEKEND1
  728.         rdbyte
  729.          or a
  730.          jr z,CHEKEND3
  731.         CP '0'-1
  732.         JR NC,CHEKEND1
  733.         CP '.'
  734.         JR Z,CHEKEND2
  735.         CP 34;'"'
  736.         JR nz,CHEKEND1
  737. CHEKEND3
  738.         SCF
  739.         RET
  740. CHEKEND2
  741.         AND A
  742.         RET
  743.         endif
  744.  
  745. LINESUB
  746.         LD DE,X1
  747.         CALL FINDSEQ
  748.         CALL TAKEVALUE
  749. LINES1_1=$+1
  750.         LD HL,LINES+2
  751.         ADD A,ADDX
  752.  
  753.         IF CPLX
  754.         CPL
  755.         ENDIF
  756.  
  757.         LD (HL),A
  758.         INC HL
  759.         PUSH HL
  760.         ;LD H,D
  761.         ;LD L,E
  762.         LD DE,Y1
  763.         CALL FINDSEQ
  764.         CALL TAKEVALUE
  765.         CP #BF
  766.         JR C,$+2+2
  767.         LD A,#BF
  768.         POP HL
  769.         ADD A,ADDY
  770.         LD (HL),A
  771.         INC HL
  772.         PUSH HL
  773.         ;LD H,D
  774.         ;LD L,E
  775.         LD DE,X2
  776.         CALL FINDSEQ
  777.         CALL TAKEVALUE
  778.         POP HL
  779.         ADD A,ADDX
  780.         IF CPLX
  781.         CPL
  782.         ENDIF
  783.  
  784.         LD (HL),A
  785.         INC HL
  786.         PUSH HL
  787.         ;LD H,D
  788.         ;LD L,E
  789.         LD DE,Y2
  790.         CALL FINDSEQ
  791.         CALL TAKEVALUE
  792.         CP #BF
  793.         JR C,$+2+2
  794.         LD A,#BF
  795.         POP HL
  796.         ADD A,ADDY
  797.         LD (HL),A
  798.         INC HL
  799.         LD (LINES1_1),HL
  800.  
  801. INCLINES
  802. ;then go to SEARCH
  803.         ;LD H,D
  804.         ;LD L,E
  805.         ;PUSH HL
  806.         LD HL,(LINES1_1)
  807.         DEC HL
  808.         LD D,(HL)
  809.         DEC HL
  810.         LD E,(HL)
  811.         DEC HL
  812.         LD B,(HL)
  813.         DEC HL
  814.         LD C,(HL)
  815.         LD A,B
  816.         CP D
  817.         JR NC,MINL1
  818.         LD A,D
  819.         SUB B
  820.         JR $+2+1
  821. MINL1
  822.         SUB D
  823.         LD H,A
  824.  
  825.         LD A,C
  826.         CP E
  827.         JR NC,MINL2
  828.         LD A,E
  829.         SUB C
  830.         JR $+2+1
  831. MINL2
  832.         SUB E
  833. ;       LD L,A
  834.         CP H
  835.         JR NC,$+2+1
  836.         LD A,H
  837.  
  838.         CP MINLINE
  839.         JR C,MINL3
  840.         CALL LINE
  841.         LD HL,(LINES)
  842.         INC HL
  843.         LD (LINES),HL
  844. MINL3
  845.         ;POP HL
  846.         JP SEARCH
  847.  
  848. TAKEVALUE_usechar
  849.         ;ld de,0 ;val
  850.         ;jr TAKEVALUEbeg_go
  851. TAKEVALUE
  852. ;out: A=value (TODO de)
  853. ;for line (not polyline) nextchar='"'
  854. ;can be space before
  855. ;may be sign
  856.         ld de,0 ;val
  857.         ld a,(iy) ;old char
  858.         jr TAKEVALUEbeg_go
  859. TAKEVALUEbeg0
  860.         rdbyte
  861.          or a
  862.          ret z
  863. TAKEVALUEbeg_go
  864.         ;cp ' '
  865.         ;jr z,TAKEVALUEbeg
  866.         ;cp 34 ;'"'
  867.         ;jr z,TAKEVALUEbeg
  868.         cp '-'
  869.         jr z,TAKEVALUEbegq
  870.         cp '0'
  871.         jr c,TAKEVALUEbeg0
  872.         cp '9'+1
  873.         jr nc,TAKEVALUEbeg0
  874. TAKEVALUEbegq
  875.         cp '-'
  876.        push af ;sign
  877.         jr nz,TAKEVALUE0_go
  878. TAKEVALUE0
  879.         rdbyte
  880. TAKEVALUE0_go
  881.         sub '0'
  882.         cp 10
  883.         jr nc,TAKEVAL5
  884. ;val=val*10+A
  885.         push hl
  886.         ld h,d
  887.         ld l,e
  888.         add hl,hl
  889.         add hl,hl
  890.         add hl,de
  891.         add hl,hl
  892.         add a,l
  893.         ld e,a
  894.         adc a,h
  895.         sub e
  896.         ld d,a
  897.         pop hl
  898.         JR TAKEVALUE0
  899. TAKEVAL5
  900. ;non-numeric char
  901.         add a,'0'
  902.         CP "."
  903.         JR nz,TAKEVAL4 ;no fraction
  904. ;fraction
  905.         rdbyte
  906.         CP "5" ;rounding up or down?
  907.         JR C,$+3
  908.         inc de ;rounding up
  909. TAKEVAL4
  910.  
  911.         LD H,e
  912.         LD L,0
  913.         LD DE,SCALE
  914.         CALL DIV
  915.        pop af ;sign (Z='-')
  916.         LD A,L
  917.         JR NZ,SIGNCH1
  918.         NEG
  919. SIGNCH1
  920.         RET
  921.  
  922.  
  923. comparetag
  924. ;A kept
  925. ;hl=string
  926. ;de=substring what we need
  927. ;CY=1: fail
  928.         push af
  929. comparetag0
  930.         ld a,(de)
  931.         or a
  932.         jr z,comparetagok
  933.         cp (hl)
  934.         inc hl
  935.         inc de
  936.         jr z,comparetag0
  937. comparetagfail
  938.         pop af
  939.         scf
  940.         ret
  941. comparetagok      
  942.         pop af
  943.         or a
  944.         ret
  945.  
  946. FINDSEQ
  947. ;de=substring to find
  948. ;out:
  949. ;(first char after match is not read)
  950. ;CY=1 - fail
  951. ;TODO a=first char
  952. FINDSEQ0
  953.         LD A,(DE)
  954.         LD C,A
  955.         rdbyte ;LD A,(HL)
  956.         or a
  957.         scf
  958.         ret z ;EOF
  959.         CP C
  960.         CALL Z,FINDS2
  961.         JR nz,FINDSEQ0
  962.         or a
  963.         RET
  964.  
  965. FINDS2
  966. ;out:
  967. ;(first char after match is not read)
  968. ;NZ - fail
  969. ;(de kept)
  970.         PUSH DE
  971. FINDS20
  972.         inc de ;first char is already checked
  973.         LD A,(DE)
  974.         or a
  975.         JR Z,FINDS2ok
  976.         ld c,a
  977.         rdbyte ;TODO check EOF
  978.         cp c
  979.         JR z,FINDS20
  980. FINDS2fail ;nz
  981. FINDS2ok ;z
  982.         POP DE
  983.         RET
  984.  
  985.  
  986.         if 1==0
  987. ;---PRINT HEX NUMBER
  988. PRNREAL
  989.         ;LD A,#10
  990.         ;CALL PAG_128
  991.         LD HL,(LINES)
  992.         PUSH HL
  993.         LD A,H
  994.         LD DE,#4010
  995.         CALL HEX_BYT
  996.         POP HL
  997.         LD A,L
  998.         CALL HEX_BYT
  999.  
  1000.         LD HL,(POLYLINES)
  1001.         PUSH HL
  1002.         LD A,H
  1003.         LD DE,#4020+#10
  1004.         CALL HEX_BYT
  1005.         POP HL
  1006.         LD A,L
  1007.         CALL HEX_BYT
  1008.  
  1009.         LD HL,(POLYGONS)
  1010.         PUSH HL
  1011.         LD A,H
  1012.         LD DE,#4040+#10
  1013.         CALL HEX_BYT
  1014.         POP HL
  1015.         LD A,L
  1016.         CALL HEX_BYT
  1017.  
  1018.  
  1019.  
  1020.         ;LD A,#10
  1021.         ;CALL PAG_128
  1022.         RET
  1023.         endif
  1024.  
  1025.  
  1026. INITS
  1027.         ;XOR A
  1028.         ;OUT (#FE),A
  1029.         ;CALL DCRHORN
  1030.         ;LD A,#15
  1031.         ;CALL PAG_128
  1032.         ;LD A,COLM1
  1033.         ;CALL SCR_FIL
  1034.         ;LD A,#17
  1035.         ;CALL PAG_128
  1036.         ;LD A,COLM1
  1037.         ;CALL SCR_FIL
  1038.         ;RET
  1039.  
  1040. ;[512] LINE JUMP TABLE ON ROW X COL Y
  1041. ;EA=PROC#*64+X*8+Y
  1042. ;LOW BYTE=(EA) HIGH BYTE=(EA+256)
  1043. ;PROC#:
  1044. ; 0-DY>DX RIGHT
  1045. ; 1-DY>DX LEFT
  1046. ; 2-DX>DY RIGHT
  1047. ; 3-DX>DY LEFT
  1048.  
  1049. ;- HORN LINE DECRUNCHING
  1050.  
  1051. DCRHORN CALL DHLTAB
  1052.         CALL DHLSEQ
  1053.         CALL DHLRMAP
  1054.  
  1055. ;LINE SCREEN ADR TABLE
  1056.  
  1057. HLSCAD  LD HL,HLTMP
  1058.         LD DE,SCRADR
  1059.         LD B,192
  1060. HLSC    LD (HL),E
  1061.         INC H
  1062.         LD (HL),D
  1063.         DEC H
  1064.         INC L
  1065.         INC D
  1066.         LD A,D
  1067.         AND 7
  1068.         JR NZ,HLSC1
  1069.         LD A,E
  1070.         ADD A,#20
  1071.         LD E,A
  1072.         JR C,HLSC1
  1073.         LD A,D
  1074.         SUB 8
  1075.         LD D,A
  1076. HLSC1   DJNZ HLSC
  1077.         RET
  1078.  
  1079. DHLSEQ  LD IX,DHLSEQD
  1080.         LD HL,HLBASE
  1081. DLSQ    LD A,(IX)
  1082.         INC IX
  1083.         OR A
  1084.         RET Z
  1085.         LD DE,DLSQ
  1086.         PUSH DE
  1087.         LD B,A
  1088.         AND #C0
  1089.         LD E,A
  1090.         LD A,B
  1091.         AND 7
  1092.         LD C,A
  1093.         BIT 5,B
  1094.         JR NZ,DLSQ1
  1095.         BIT 6,B
  1096.         JR NZ,DLSQ1
  1097.         LD A,7
  1098.         SUB C
  1099. DLSQ1   INC A
  1100.         AND 7
  1101.         RLCA
  1102.         RLCA
  1103.         RLCA
  1104.         ADD A,E
  1105.         LD E,A
  1106.         LD D,HLJUMP/256
  1107.         LD C,B
  1108.         BIT 5,B
  1109.         JP NZ,DHLX
  1110. DHLY
  1111. ;IN:C,B &7=BIT# B4/B3 FLAGS
  1112. ;   DE-JUMP PTR
  1113. ;   HL-OUTPUT CODE PTR
  1114. ;OUT:HL-OUTPUT CODE NEW PTR
  1115.         LD A,C
  1116.         AND 7
  1117.         RLCA
  1118.         RLCA
  1119.         RLCA
  1120.         OR #C6
  1121.         LD C,A
  1122.         PUSH DE
  1123.         LD DE,#023E
  1124.         BIT 4,B
  1125.         JR Z,$+4
  1126.         INC E
  1127.         DEC D
  1128.         PUSH BC
  1129.         LD B,7
  1130. DHLY1   LD (HL),#CB
  1131.         INC HL
  1132.         LD (HL),C
  1133.         INC HL
  1134.         LD (HL),#24
  1135.         INC HL
  1136.         LD (HL),#93
  1137.         INC HL
  1138.         LD (HL),#38
  1139.         INC HL
  1140.         LD (HL),E
  1141.         INC HL
  1142.         LD A,E
  1143.         SUB D
  1144.         LD E,A
  1145.         DJNZ DHLY1
  1146.         LD (HL),#CB
  1147.         INC HL
  1148.         LD (HL),C
  1149.         INC HL
  1150.         EX DE,HL
  1151.         LD HL,DHLDAT
  1152.         LD BC,DHLDAT1-DHLDAT
  1153.         LDIR
  1154.         EX DE,HL
  1155.         POP BC
  1156.         LD C,#80
  1157.         BIT 4,B
  1158.         JR Z,DHLY1A
  1159.         LD C,#2C
  1160.         BIT 3,B
  1161.         JR Z,$+3
  1162.         INC C
  1163. DHLY1A  LD B,8
  1164.         POP DE
  1165. DHLY2   LD (HL),#82
  1166.         INC HL
  1167.         BIT 7,C
  1168.         JR NZ,$+4
  1169.         LD (HL),C
  1170.         INC HL
  1171.         LD (HL),#C3
  1172.         INC HL
  1173.         LD A,(DE)
  1174.         INC D
  1175.         LD (HL),A
  1176.         INC HL
  1177.         LD A,(DE)
  1178.         DEC D
  1179.         INC E
  1180.         LD (HL),A
  1181.         INC HL
  1182.         DJNZ DHLY2
  1183.         RET
  1184.  
  1185. DHLX    PUSH DE
  1186.         LD A,C
  1187.         AND 7
  1188.         LD DE,#002D
  1189.         CP 7
  1190.         JR NZ,$+5
  1191.         LD DE,#0C3A
  1192.         PUSH BC
  1193.         LD B,8
  1194. DHLX1   LD (HL),#CB
  1195.         INC HL
  1196.         LD A,B
  1197.         DEC A
  1198.         BIT 6,C
  1199.         JR Z,$+5
  1200.         LD A,8
  1201.         SUB B
  1202.         RLCA
  1203.         RLCA
  1204.         RLCA
  1205.         OR #C6
  1206.         LD (HL),A
  1207.         INC HL
  1208.         LD (HL),#93
  1209.         INC HL
  1210.         LD A,C
  1211.         AND 7
  1212.         CP 7
  1213.         JR Z,DHLX1A
  1214. DHLX1C  LD (HL),#38
  1215.         INC HL
  1216.         LD (HL),E
  1217.         INC HL
  1218.         LD A,E
  1219.         ADD A,D
  1220.         LD E,A
  1221.         JR DHLX1B
  1222. DHLX1A  LD A,B
  1223.         CP 2
  1224.         JR NZ,DHLX1C
  1225.         PUSH DE
  1226.         push HL
  1227.         LD DE,#84
  1228.         ADD HL,DE
  1229.         EX DE,HL
  1230.         POP HL
  1231.         LD (HL),#DA
  1232.         INC HL
  1233.         LD (HL),E
  1234.         INC HL
  1235.         LD (HL),D
  1236.         INC HL
  1237.         POP DE
  1238. DHLX1B  DJNZ DHLX1
  1239.         DEC HL
  1240.         DEC HL
  1241.         DEC HL
  1242.         LD A,#2C
  1243.         BIT 3,C
  1244.         JR Z,$+3
  1245.         INC A
  1246.         LD (HL),A
  1247.         INC HL
  1248.         EX DE,HL
  1249.         LD HL,DHLDAT1
  1250.         LD BC,DHLDAT2-DHLDAT1
  1251.         LDIR
  1252.         EX DE,HL
  1253.         POP BC
  1254.         pop DE
  1255.         LD A,C
  1256.         AND 7
  1257.         CP 7
  1258.         LD A,#D3
  1259.         JR NZ,$+3
  1260.         DEC A
  1261.         LD (HL),A
  1262.         INC HL
  1263.         LD B,8
  1264. DHLX2   LD (HL),#82
  1265.         INC HL
  1266.         LD (HL),#24
  1267.         INC HL
  1268.         LD A,C
  1269.         AND 7
  1270.         CP 7
  1271.         JR NZ,DHLX3
  1272.         PUSH DE
  1273.         push BC
  1274.         EX DE,HL
  1275.         LD HL,DHLDAT3
  1276.         LD BC,DHLDAT4-DHLDAT3
  1277.         LDIR
  1278.         EX DE,HL
  1279.         POP BC
  1280.         pop DE
  1281. DHLX3   LD (HL),#C3
  1282.         INC HL
  1283.         LD A,(DE)
  1284.         INC D
  1285.         LD (HL),A
  1286.         INC HL
  1287.         LD A,(DE)
  1288.         DEC D
  1289.         INC E
  1290.         LD (HL),A
  1291.         INC HL
  1292.         DJNZ DHLX2
  1293.         RET
  1294.  
  1295. ;CREATE HL JUMP TABLES
  1296. DHLTAB  LD IX,HLJUMP
  1297.         LD HL,HLBASE
  1298.         LD A,2
  1299. DHLT0   EXA
  1300.         LD C,8
  1301. DHLT1   LD B,8
  1302.         ld DE,6
  1303.         CALL DHLT
  1304.         LD E,48
  1305.         ADD HL,DE
  1306.         DEC C
  1307.         JR NZ,DHLT1
  1308.         LD E,8
  1309.         ADD HL,DE
  1310.         EXA
  1311.         DEC A
  1312.         JR NZ,DHLT0
  1313.         LD A,2
  1314. DHLT2   EXA
  1315.         LD C,7
  1316. DHLT3   LD B,8
  1317.         ld E,5
  1318.         CALL DHLT
  1319.         LD E,45
  1320.         ADD HL,DE
  1321.         DEC C
  1322.         JR NZ,DHLT3
  1323.         LD B,7
  1324.         ld E,5
  1325.         CALL DHLT
  1326.         INC HL
  1327.         LD B,1
  1328.         LD E,146
  1329.         CALL DHLT
  1330.         EXA
  1331.         DEC A
  1332.         JR NZ,DHLT2
  1333.         RET
  1334.  
  1335. DHLT    LD (IX+0),L
  1336.         INC HX
  1337.         LD (IX+0),H
  1338.         DEC HX
  1339.         INC LX
  1340.         ADD HL,DE
  1341.         DJNZ DHLT
  1342.         RET
  1343.  
  1344. DHLRMAP ;HL TABLES REMAP
  1345.         LD HL,HLJUMP
  1346.         LD DE,HLTMP
  1347.         PUSH HL
  1348.         push DE
  1349.         LD BC,512
  1350.         LDIR
  1351.         POP HL
  1352.         pop DE
  1353.         LD E,#40
  1354.         LD C,8
  1355. DHRM    LD A,C
  1356.         ADD A,A
  1357.         ADD A,A
  1358.         ADD A,A
  1359.         ADD A,#38
  1360.         LD L,A
  1361.         LD B,8
  1362. DHRM0   LD A,(HL)
  1363.         INC H
  1364.         LD (DE),A
  1365.         INC D
  1366.         LD A,(HL)
  1367.         DEC H
  1368.         INC L
  1369.         LD (DE),A
  1370.         DEC D
  1371.         INC E
  1372.         DJNZ DHRM0
  1373.         DEC C
  1374.         JR NZ,DHRM
  1375.         LD HX,D
  1376.         LD LX,#C0
  1377.         LD C,0
  1378. DHRM1   LD B,8
  1379. DHRM2   LD A,8
  1380.         SUB B
  1381.         ADD A,A
  1382.         ADD A,A
  1383.         ADD A,A
  1384.         ld (DHRM_HY),a ;LD HY,A
  1385.         ADD A,#80
  1386.         add A,C
  1387.         LD L,A
  1388.         LD A,(HL)
  1389.         INC H
  1390.         LD (DE),A
  1391.         INC D
  1392.         LD A,(HL)
  1393.         DEC H
  1394.         LD (DE),A
  1395.         DEC D
  1396.         INC E
  1397.         LD A,7
  1398.         SUB C
  1399.         ;ADD A,HY
  1400. DHRM_HY=$+1
  1401.          add a,0
  1402.         add A,#C0
  1403.         LD L,A
  1404.         LD A,(HL)
  1405.         INC H
  1406.         LD (IX),A
  1407.         INC HX
  1408.         LD A,(HL)
  1409.         DEC H
  1410.         LD (IX),A
  1411.         DEC HX
  1412.         INC LX
  1413.         DJNZ DHRM2
  1414.         INC C
  1415.         LD A,C
  1416.         CP 8
  1417.         JR NZ,DHRM1
  1418.         RET
  1419.  
  1420.  
  1421. DHLSEQD ;HORNLINE DCR SEQUENCE DATA
  1422. ;#00-END
  1423. ;+0 B76-PROC#
  1424. ;   B5-AXIS DY>DX=0 DX>DY=1
  1425. ;   B4-ADD INC/DEC
  1426. ;   B3-INC L/DEC L #2C/#2D
  1427. ;   B2-0 BIT# (0-7)
  1428.  
  1429.         DB #07,#06,#05,#04
  1430.         DB #03,#02,#01,#10
  1431.         DB #40,#41,#42,#43
  1432.         DB #44,#45,#46,#5F
  1433.         DB #B0,#B1,#B2,#B3
  1434.         DB #B4,#B5,#B6,#B7
  1435.         DB #F8,#F9,#FA,#FB
  1436.         DB #FC,#FD,#FE,#FF
  1437.         DB 0
  1438.  
  1439. DHLDAT  DEC B
  1440.         CALL Z,HLTRAP
  1441.         INC H
  1442. DHLDAT3 EXA
  1443.         LD A,L
  1444.         ADD A,#20
  1445.         LD L,A
  1446.         JR C,$+6
  1447.         LD A,H
  1448.         SUB 8
  1449.         LD H,A
  1450.         EXA
  1451. DHLDAT4 SUB E
  1452.         DB #30,-#40;JR NC,START OF ROW
  1453. DHLDAT1 DEC B
  1454.         CALL Z,HLTRAP
  1455.         SUB E
  1456.         DB #30; ,#D3-JR/#D2-JP
  1457. DHLDAT2
  1458.  
  1459.  
  1460. ;HORN LINE 1    Idea&Coding Dark/X-Trade
  1461. ;FIRST VERSION OF MATRIX 8X8 ALGHORITHM
  1462. ;--------------------------------------
  1463. ;DRAW LINE BETWEEN POINTS
  1464. ;(X1,Y1)-(X2,Y2) (C,B)-(E,D)
  1465.  
  1466. LINE    LD A,D
  1467.         SUB B
  1468.         LD H,A; DY
  1469.         JR NC,LINE_1
  1470.         NEG
  1471.         LD H,A
  1472.         LD A,D
  1473.         ld D,B
  1474.         ld B,A; SWAP 1,2
  1475.         LD A,C
  1476.         ld C,E
  1477.         ld E,A
  1478. LINE_1  LD A,E
  1479.         SUB C
  1480.         LD L,A
  1481.         LD A,0
  1482.         JR NC,LINE1A
  1483.         SUB L
  1484.         LD L,A; DX
  1485.         LD A,#08
  1486. LINE1A  EXA
  1487.         LD A,H
  1488.         CP L
  1489.         JR NC,LINE2
  1490.         LD H,L
  1491.         ld L,A;SWAP DX,DY
  1492.         EXA
  1493.         OR #10
  1494.         EXA ;SET MARK DY<DX
  1495.         LD A,H
  1496. LINE2   OR L
  1497.         RET Z
  1498.         PUSH HL
  1499.         EXA
  1500.         LD H,A
  1501.         XOR E
  1502.         AND #18
  1503.         XOR E
  1504.         RLCA
  1505.         RLCA
  1506.         RLCA
  1507.         XOR D
  1508.         AND #F8
  1509.         XOR D
  1510.         LD (HLTRAP0),A
  1511.         RLA
  1512.         JR C,LINE3
  1513.         EXA
  1514.         LD A,B
  1515.         AND #F8
  1516.         LD L,A
  1517.         LD A,D
  1518.         AND #F8
  1519.         SUB L
  1520.         CALL Z,HLTRAP
  1521.         JR LINE4
  1522. LINE3   LD A,E
  1523.         AND #F8
  1524.         LD L,A
  1525.         LD A,C
  1526.         AND #F8
  1527.         SUB L
  1528.         CALL Z,HLTRAP
  1529.         JR NC,LINE4
  1530.         NEG
  1531. LINE4   RRCA
  1532.         RRCA
  1533.         RRCA
  1534.         LD E,A
  1535. ;E=size in chrs
  1536.         LD A,H
  1537.         XOR C
  1538.         AND #18
  1539.         XOR C
  1540.         RLCA
  1541.         RLCA
  1542.         RLCA
  1543.         XOR B
  1544.         AND #F8
  1545.         XOR B
  1546.         LD H,HLJUMP/256
  1547.         LD L,A
  1548.         LD A,(HL)
  1549.         INC H
  1550.         LD H,(HL)
  1551.         LD L,A
  1552.         LD (LINEJP_1),HL
  1553.         LD H,HLTMP/256
  1554.         LD L,B
  1555.         LD A,(HL)
  1556.         INC H
  1557.         LD H,(HL)
  1558.         LD L,A
  1559.         LD A,C
  1560.         AND 31<<3
  1561.         RRCA
  1562.         RRCA
  1563.         RRCA
  1564.         ADD A,L
  1565.         LD L,A
  1566.         LD B,E
  1567.         POP DE
  1568.         LD A,D
  1569.         SRL A
  1570. LINEJP_1=$+1
  1571.         CALL 0
  1572.         LD HL,0
  1573. LINETA  EQU $-2
  1574.         LD (HL),0
  1575. LINETD  EQU $-1
  1576.         RET
  1577.  
  1578. ;HORN LINE TRAP CODE
  1579. ; PUT RET AFTER SET X,(HL)
  1580.  
  1581. HLTRAP  EXA
  1582.         EXX
  1583.         LD HL,HLJUMP
  1584. HLTRAP0 EQU $-2
  1585.         LD A,(HL)
  1586.         INC H
  1587.         LD H,(HL)
  1588.         LD L,A
  1589.         INC HL,HL
  1590.         LD (LINETA),HL
  1591.         LD A,(HL)
  1592.         LD (LINETD),A
  1593.         LD (HL),#C9
  1594.         EXA
  1595.         EXX
  1596.         RET
  1597.        
  1598.         if 1==0
  1599. SCR_FIL
  1600.         LD      HL,#C000
  1601.         LD      DE,#C001
  1602.         LD      BC,#1800
  1603.         LD      (HL),L
  1604.         LDIR
  1605.         LD      (HL),A
  1606.         LD      BC,#2FF
  1607.         LDIR
  1608.         RET
  1609.         endif
  1610.  
  1611. ;+-----------------------+
  1612. ;|      HL = HL/DE       |
  1613. ;+-----------------------+
  1614. ;OUTPUT: HL = HL/DE
  1615. ;spoils DE,HL,A
  1616.  
  1617. DIV     LD      A,D
  1618.         OR      E
  1619.         RET     Z
  1620.         PUSH    DE
  1621.         PUSH    BC
  1622.         LD      A,1
  1623. DIV_0   PUSH    HL
  1624.         SBC     HL,DE
  1625.         JP      C,HL0
  1626.         SBC     HL,DE
  1627.         JP      C,DIV_1
  1628. DIV_01  INC     A
  1629.         SLA     E
  1630.         RL      D
  1631.         POP     HL
  1632.         JP      DIV_0
  1633. DIV_1   POP     HL
  1634.         LD      BC,0
  1635. DIV_2   AND     A
  1636.         JP      NZ,DIV_3
  1637.         LD      H,B
  1638.         LD      L,C
  1639.         POP     BC
  1640.         POP     DE
  1641.         RET
  1642. DIV_3   SBC     HL,DE
  1643.         JP      NC,DIV_4
  1644.         ADD     HL,DE
  1645. DIV_4   CCF
  1646.         RL      C
  1647.         RL      B
  1648.         SRL     D
  1649.         RR      E
  1650.         DEC     A
  1651.         JP      DIV_2
  1652. HL0     CP      1
  1653.         JP      NZ,DIV_01
  1654.         POP     HL
  1655.         POP     BC
  1656.         POP     DE
  1657.         LD      HL,0
  1658.         RET
  1659.  
  1660. PRNLINE
  1661. PRNLINE1
  1662.         LD A,(HL)
  1663.         AND A
  1664.         RET Z
  1665.         INC HL
  1666.         PUSH HL
  1667.         CALL PRNSYMBOL
  1668.         POP HL
  1669.         JR PRNLINE1
  1670.  
  1671. PRNSYMBOL
  1672.         LD L,A
  1673.         LD H,0
  1674.         ADD HL,HL
  1675.         ADD HL,HL
  1676.         ADD HL,HL
  1677.         LD BC,#3C00
  1678.         ADD HL,BC
  1679.         PUSH DE
  1680.         DUP 3
  1681.         LD A,(HL)
  1682.         LD (DE),A
  1683.         INC L
  1684.         INC D
  1685.         LD A,(HL)
  1686.         LD (DE),A
  1687.         INC L
  1688.         INC D
  1689.         EDUP
  1690.         LD A,(HL)
  1691.         LD (DE),A
  1692.         INC L
  1693.         INC D
  1694.         LD A,(HL)
  1695.         LD (DE),A
  1696.         POP DE
  1697.         INC E
  1698.         RET
  1699.  
  1700. HEX_BYT
  1701.         PUSH AF
  1702.         RRA
  1703.         RRA
  1704.         RRA
  1705.         RRA
  1706.         CALL OUT_H
  1707.         POP AF
  1708. OUT_H
  1709.         AND #F
  1710.         CP #A
  1711.         JR C,O_H1
  1712.         ADD A,7
  1713. O_H1
  1714.         ADD A,48
  1715.         CALL PRNSYMBOL
  1716.         RET
  1717.  
  1718.  
  1719. POLYLINETXT
  1720.         DB "polyline",0
  1721. LINETXT
  1722.         DB "line",0
  1723. POLYGONTXT
  1724.         DB "polygon",0
  1725. POINTSTXT
  1726.         DB "points=",0
  1727. PATHTXT
  1728.         DB "path",0
  1729. DTXT
  1730.         DB " d=",0
  1731.  
  1732. X1
  1733.         DB "x1=",0
  1734. X2
  1735.         DB "x2=",0
  1736. Y1
  1737.         DB "y1=",0
  1738. Y2
  1739.         DB "y2=",0
  1740.  
  1741.         if 1==0
  1742. PAG_128
  1743.         LD      BC,#7FFD
  1744. PAG1281 OR      0
  1745.         OUT     (C),A
  1746.         RET
  1747.         endif
  1748.  
  1749.             ;123456789AB
  1750. FILENAME DB "house   svg"
  1751.