home *** CD-ROM | disk | FTP | other *** search
/ CP/M / CPM_CDROM.iso / jsage / znode3 / uploads / gst03.lbr / LINE.ZZ0 / LINE.Z80
Encoding:
Text File  |  1993-06-07  |  3.8 KB  |  164 lines

  1. ;********************************************************************
  2. ;
  3. ;    LINE: A ZCPR 3.3+ compatible routine, using the version 4
  4. ;        libraries, to place a graphics line on the screen
  5. ;        for use in alias scripts.
  6. ;
  7. ; Version 3.0D (July 7, 1990) - Updated and re-linked based upon 
  8. ;  VLIB4D and version 4 libraries.  Assembled with SLR's Z80ASM and 
  9. ;  linked with DRI's LINK.  Thanks go to Dave Ramsey for producing
  10. ;  an excellent set of command-level graphics tools.   Bob Dean
  11. ;   
  12. ;
  13. ; Author: Dave Ramsey            Date: May 25, 1989
  14. ;  Versions 1.0 and 2.0.    
  15. ;
  16. ;********************************************************************
  17. ;
  18. ; VLIB/Z3LIB/SYSLIB references:
  19. ;
  20.     ext    gz3init,tinit,dinit,drhorz,drvert,vpstr
  21.     ext    eval10,argv
  22. ;
  23. ; Constants defined:
  24. ;
  25. VERSION    equ     3
  26. MONTH    equ     7
  27. DAY    equ     5
  28. YEAR    equ    90
  29. ;
  30. DOS    equ     5
  31. BUFFER    equ    080h
  32. CR    equ    13
  33. LF    equ    10
  34. ARGCNT    equ     5
  35. start:
  36.     jp    main
  37.     db    'Z3ENV'
  38.     db    1
  39. z3eadr:    ds    2
  40. main:
  41.     ld    hl,(z3eadr)
  42.     call    gz3init        ; check for presence of extended TCAP
  43.     and    a,0fh
  44.     jr    nz,stack    ; if present, proceed
  45.     ld    hl,oldtcpmsg    ; else tell user
  46.     call    vpstr        ; and exit
  47.     ret
  48. ;
  49. ; setup stack...
  50. ;
  51. stack:
  52.     ld    hl,0
  53.     add    hl,sp
  54.     ld    (oldsp),hl    ; save old stack pointer
  55.     ld    hl,(DOS+1)
  56.     ld    l,0
  57.     ld    a,h
  58.     add    a,-8
  59.     ld    h,a        ; set stack below CCP
  60.     ld    sp,hl
  61. ;
  62. ; Get command line parms, there should be 5, and store results
  63. ;
  64.     ld    a,0ffh        ; null terminate argument strings
  65.     ld    hl,BUFFER+1
  66.     ld    de,tokentbl
  67.     call    argv
  68.     ld    a,(numtok)
  69.     cp    a,ARGCNT    ; did the user get it right?
  70.     jp    nz,gethelp    ; nope, tell him how to call us.
  71. ;
  72. ; Else, store parm results directly inline for the drbox call and execute
  73. ;
  74.     ld    hl,(parm1)
  75.     call    eval10
  76.     ld    (type),a
  77.     ld    hl,(parm2)
  78.     call    eval10
  79.     ld    (hrow),a    ; save row number
  80.     ld    hl,(parm3)
  81.     call    eval10
  82.     ld    (col),a        ; save column number
  83.     ld    hl,(parm4)
  84.     call    eval10
  85.     ld    (length),a    ; save height
  86.     ld    hl,(parm5)
  87.     call    eval10
  88.     ld    (direct),a    ; save width
  89. ;
  90. ; else... init terminal as per V4 lib conventions
  91. ;
  92.     call    tinit
  93.     ld    a,(type)
  94.     or    a,a
  95.     jr    z,drawhline    ; if a=0, draw horizontal line else
  96.     ld    bc,4
  97.     ld    de,vrow
  98.     ld    hl,hrow
  99.     ldir            ; get arguments
  100.     call    drvert        ; draw vertical line
  101. vrow    ds    4
  102.     jp    fini
  103. ;
  104. ; Call DRBOX routine to draw the box.
  105. ;
  106. drawhline:
  107.     call    drhorz        ; draw horizontal line
  108. hrow:    db    0
  109. col:    db    0
  110. length: db    0
  111. direct:    db    0
  112.  
  113. ;
  114. ; deinit terminal and restore stack
  115. ;
  116. fini:
  117.     call    dinit
  118. ;
  119. fini2:
  120.     ld    hl,(oldsp)
  121.     ld    sp,hl
  122.     ret
  123. ;
  124. ;
  125. gethelp:
  126.     ld    hl,helpmsg
  127.     call    vpstr
  128.     jp    fini2
  129.  
  130. ;
  131. oldsp:    ds    2
  132. ;
  133. tokentbl:
  134. maxtok: db    ARGCNT    ; I don't want to see more than 5 arguments,
  135. numtok: db    0    ; but how many were there really?
  136. parm1:    ds    2    ; address arg 1 - line type
  137. parm2:    ds    2    ; address arg 2 - row
  138. parm3:    ds    2    ; address arg 3 - col
  139. parm4:    ds    2    ; address arg 4 - length
  140. parm5:    ds    2    ; address arg 5 - direction
  141. ;
  142. type:    db    0    ; flag for type of LINE to draw
  143. ;
  144. helpmsg:
  145.     db    'LINE, Version ',VERSION/10+'0','.',VERSION MOD 10+'0',CR,LF
  146.     db    'LINE - Draws a LINE on the screen.',CR,LF
  147.     db    'Syntax:',CR,LF
  148.     db    '     LINE <type> <row> <col> <height> <width>',CR,LF
  149.     db    'Where:',CR,LF
  150.     db    '     <type> is an integer 0 for horizontal lines or',CR,LF
  151.     db    '            an integer 1 for vertical lines;',CR,LF
  152.     db    '     <row>  is the start row of the line on the screen;',CR,LF
  153.     db    '     <col>  is the start column on the screen;',CR,LF
  154.     db    '     <length> is the length of the line;',CR,LF
  155.     db    '     <direct> is the direction of the line, where:',CR,LF
  156.     db    '            0 = left-to-right OR top-to-bottom; and',CR,LF
  157.     db    '            1 = right-to-left OR bottom-to-top.',CR,LF,0
  158. ;
  159. oldtcpmsg:
  160.     db    'Extended TCAP not present.',CR,LF,0
  161. ;
  162.     end
  163.