home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD1.mdf / assemblr / library / asmlib / source.doc < prev    next >
Text File  |  1994-01-06  |  26KB  |  724 lines

  1. SOURCE.DOC Copyright (C) 1992, 1993 Douglas Herr ■ all rights reserved
  2.  
  3. ASMLIB uses a number of subroutines which are not applicable to general
  4. programming.  These subroutines include "$" in their names.  All "$"
  5. subroutines require a near call, so the calling program must be in the same
  6. segment as the called subroutine.  The segment names used by ASMLIB are:
  7.  
  8. asmtiny:  _TEXT   (assumes CS:DGROUP,  DS:DGROUP)
  9. asmsmall: _TEXT   (assumes CS:_TEXT,   DS:DGROUP)
  10. asmlib:   _MEDIUM (assumes CS:_MEDIUM, DS:DGROUP)
  11. asmhuge:  _HUGE   (assumes CS:_HUGE,   DS:DGROUP)
  12.  
  13.  
  14. ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  15.  
  16. $banks.asm:  SVGA bank-switching code
  17.  
  18.  
  19. ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  20.  
  21. $clip:        clip a line to fit within graphics view area
  22. Source:       $clip.asm ($graph.asm)
  23.  
  24. Call with:    call from ASMLIB line drawing subroutines
  25.               assumes DS:@data
  26. Returns:      x & y coordinates in DRAWLINE data area within view area
  27. Uses:         AX, BX, CX, DX, DI, flags
  28.  
  29.  
  30. ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  31.  
  32. $ega16:       update EGA/VGA/SVGA registers for given drawmode & color
  33. Source:       $ega16.asm ($graph.asm)
  34.  
  35. Call with:    no parameters
  36.               call $graph before calling $ega16
  37.               drawmode & gcolor must be current
  38. Returns:      DX = 3CEh (Graphics Controller data register address)
  39. Uses:         DX, flags
  40.  
  41.  
  42. ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  43.  
  44. $emspage:    position logical EMS page at page 0 of page frame
  45. source:      $emspage.asm
  46.  
  47. Call with:   DS:[BX] pointing to 4-byte offset into allocated EMS block
  48.              DX = EMS handle
  49. Returns:     if CF = 0, no error; AL = logical page
  50.              if CF = 1, AH = error code
  51. Uses:        AX, flags
  52.  
  53. ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  54.  
  55. $enter:       entry code for ASMLIB graphics subroutines
  56. Source:       $enter.asm ($graph.asm)
  57.  
  58. Call with:    no parameters
  59. Returns:      calls $graph
  60.               pushes flags, BX, CX, DX, DI, SI, ES, BP
  61.               BP = SP
  62.               DF = 0
  63. Uses:         AX, SP, DF
  64.  
  65.  
  66. ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  67.  
  68. $exit:        exit code for ASMLIB graphics subroutines
  69. Source:       $exit.asm
  70.  
  71. Call with:    BP = stack frame pointer
  72.               AX, flags, BX, CX, DX, DI, SI, ES, BP pushed on stack
  73. Returns:      returns to program calling the primary subroutine
  74. Uses:         flags, all registers except DS
  75.  
  76.  
  77. ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  78.  
  79. $fget:       read more data into file buffer
  80. Source:      $fget.asm
  81.  
  82. Call with:   BX = file handle
  83.              ES = buffer segment address
  84. Returns:     DF = 0
  85.              if CF = 0, AX = bytes read from file
  86.              if CF = 1, AX = DOS error code
  87. Uses:        AX, DX, SI, DS, flags
  88.  
  89. ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  90.  
  91. $gbytes:      calculate byte size of graphics screen
  92. Source:       $gbytes.asm ($graph.asm)
  93.  
  94. Call with:    no parameters
  95.               $graph must be called before calling $gbytes
  96. Returns:      DX:AX = byte size of screen
  97. Uses:         AX, DX
  98.  
  99.  
  100. ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  101.  
  102. $getdot:      determines pixel status (graphics modes)
  103. Source:       $getdot.asm ($graph.asm)
  104.  
  105. Call with:    AX = x-coordinate, BX = y-coordinate
  106.               ES = segment address of screen buffer
  107.               all $graph data must be current
  108. Returns:      AX = pixel value
  109. Uses:         AX, flags
  110.  
  111.  
  112. ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  113.  
  114. $gp00, $gp02, $gp06, $gp08, $gp10: GPrint/GPrintX code for various dottypes
  115. Source:       $gp00.asm, $gp02.asm, $gp06.asm $gp08.asm, $gp10.asm
  116.                    (banks.asm, $ytable.asm)
  117.  
  118. Call with:    called from GPrint or GPrintX subroutines
  119.               DS:[SI] -> character font definition
  120.               ES = segment address of screen buffer
  121. Returns:      nothing
  122.               prints a character on graphics screen
  123. Uses:         AX, BX, CX, DX, DI, SI, flags
  124.  
  125.  
  126. ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  127.  
  128. $gpick:      select string from fixed-field string block; graph mode
  129. Source:      $gpick.asm (heap.asm, strncpy.asm, drawbox.asm, fillbox.asm,
  130.                gprint.asm, dosalloc.asm, bitblock.asm, bbbytes.asm,
  131.                strlen.asm, gcolor.asm, a$menu.asm, $graph.asm, m$input.asm,
  132.                v$extkey.asm, m$chrn.asm, m$nkey.asm)
  133.  
  134. Call with:   ES = segment address of string list
  135.              AX = number of strings
  136.              CX = field size
  137.              BX = initial choice
  138.              DS:[DX] pointing to upper left screen coordinates
  139.              assumes DS:DGROUP
  140. Returns:     AX = returning keycode
  141.              BX = returned selection number
  142. Uses:        AX, BX, CX, DX, SI, DI, flags
  143.  
  144.  
  145. ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  146.  
  147. $graph:       set up screen parameters for all ASMLIB graphics modes
  148. Source:       $graph.asm (gcolor.asm, $ytable.asm)
  149.  
  150. Call with:    no parameters
  151.               system must be in graphics mode you intend to use
  152. Returns:      nothing
  153.               updates $graph data: view coordinates
  154.                                    x-limit
  155.                                    y-limit
  156.                                    base segment address
  157.                                    page size
  158.                                    byte width of screen
  159.                                    maximum page number
  160.                                    dot type:  0 = CGA 4-color
  161.                                               2 = monochrome
  162.                                                   (CGA, Herc, ATT, mode 11h)
  163.                                               4 = Hercules InColor
  164.                                               6 = EGA/VGA 16-color & monochrome
  165.                                                   SVGA16 (up to 800x600)
  166.                                               8 = mode 13h 256-color
  167.                                              10 = VGA13X
  168.                                              12 = SVGA16 (over 800x600)
  169.                                              14 = SVGA256
  170.  
  171.  
  172. ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  173.  
  174. $h8x8:       copies standard 8x8 character definition to 0B400:0000
  175.              for Hercules RamFont modes
  176. Source:      $h8x8.asm (f8x8.asm)
  177.  
  178. Call with:   no parameters; assumes Hercules RamFont card is installed
  179. Returns:     nothing
  180. Uses:        nothing; all registers and flags are saved
  181. Used by:     HRam9043, HRam8043
  182.  
  183.  
  184. ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  185.  
  186. $h8x12:      copies standard 8x12 character definition to 0B400:0000
  187.              for Hercules RamFont modes
  188. Source:      $h8x12.asm ($rld.asm, f8x12rle.asm)
  189.  
  190. Call with:   no parameters; assumes Hercules RamFont card is installed
  191. Returns:     nothing
  192. Uses:        nothing; all registers and flags are saved
  193. Used by:     HRam9029, HRam8029
  194.  
  195.  
  196. ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  197.  
  198. $handle:     verify handle for buffered file I/O
  199. Source:      fopen.asm
  200.  
  201. Call with:   BX = file handle
  202.              ASSUMES DS:DGROUP
  203. Returns:     if CF = 0, SI points to file handle in ASMLIB buffer data area
  204.                         segment address of buffer associated with this handle
  205.                         at 2[SI]
  206.              if CF = 1, handle in BX not managed by ASMLIB buffer system
  207. Uses:        SI, flags
  208.  
  209. ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  210.  
  211. $herc:       detects Hercules-compatible equipment; does not determine
  212.              if Hercules equipment is the default monitor (see IsHerc)
  213. Source:      $herc.asm
  214.  
  215. Call with:   no parameters
  216.              Assumes DS:@data
  217. Returns:     if CF = 1, no Hercules-compatible equipment installed
  218.              if CF = 0, AX = Hercules model
  219.                        128 = Hercules Graphics Card or compatible
  220.                        144 = Hercules Graphics Card Plus
  221.                        208 = Hercules InColor card
  222. Uses:        AX, flags
  223.  
  224.  
  225. ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  226.  
  227. $herc16:      update InColor registers for given drawmode & color
  228.               used only by dottype 4 in graphics modes
  229. Source:       $herc16.asm ($graph.asm)
  230.  
  231. Call with:    no parameters
  232.               call $graph before calling $herc16
  233.               drawmode & gcolor must be current
  234. Returns:      BX = ABS(drawmode) shl 1
  235. Uses:         BX, flags
  236.  
  237.  
  238. ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  239.  
  240. $hislope:     draw a high-slope line
  241. Source:       $hislope.asm ($ega16.asm, $herc16.asm, $vga256.asm,
  242.                           $hipatrn.asm, banks.asm, $graph.asm, dotmask.asm)
  243.  
  244. Call with:    DS:@data
  245.               ES = screen buffer segment
  246.               x0 = [BP-2]
  247.               y0 = [BP-4]
  248.               x1 = [BP-6]
  249.               y1 = [BP-8]
  250. Returns:      nothing
  251. Uses:         AX, BX, CX, DX, DI, SI, flags
  252.  
  253.  
  254. ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  255.  
  256. $horiz:       draw horizontal line
  257. Source:       $horiz.asm ($ega16.asm, $herc16.asm, $vga256.asm, $hvpatrn.asm
  258.                           banks.asm, $graph.asm, dotmask.asm)
  259.  
  260. Call with:    DS:@data
  261.               ES = screen buffer segment
  262.               x0 = [BP-2]
  263.               y0 = [BP-4]
  264.               x1 = [BP-6]
  265.               y1 = [BP-8]
  266. Returns:      nothing
  267. Uses:         AX, BX, CX, DX, DI, SI, flags
  268.  
  269.  
  270. ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  271.  
  272. $hipatrn:     draw a high-slope line with pattern
  273.               called from $hislope
  274. Source:       $hipatrn.asm
  275.  
  276. $hpattern:    draw a horizontal line with pattern
  277.               called from $horiz
  278. Source:       $hvpatrn.asm
  279.  
  280. ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  281.  
  282. a$putw:      module used by several ASMLIB text subroutines to copy
  283.              a character/attribute pair to a window of the screen;
  284.              includes snow control logic for CGA systems.
  285. Source:      a$putw.asm
  286.  
  287. Call with:   CX = column width of window
  288.              DX = 0 to disable snow control
  289.                 = 3DAh to enable snow control (COLOR monitors only!!)
  290.              SI = row height of window
  291.              ES:[DI] points to video buffer
  292.              AL = character
  293.              AH = color attribute
  294.              BX = bytes per screen row (80-column screen has 160 bytes per row)
  295.              DF = 0 (clear direction flag with CLD)
  296. Uses:        DI, SI, flags
  297.  
  298.  
  299. ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  300.  
  301. $paint:      used to change color of the screen; used by Paint and
  302.              WPaint subroutines.  Includes snow control logic for CGA
  303.              systems.
  304. Source:      $paint.asm
  305.  
  306. Call with:   ES:[DI] pointing to screen
  307.              CX = number of columns
  308.              SI = number of rows
  309.              AH = color attribute
  310.              DX = 3DAh for CGA snow control, 0 otherwise
  311.              BP = bytes per screen row
  312.  
  313.  
  314. ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  315.  
  316. $plane:      set up graphics plane for read or write
  317. Source:      $plane.asm
  318.  
  319. Call with:   AL = plane number
  320. Returns:     nothing
  321. Supports:    EGA & VGA 16-color modes
  322.              EGA monochrome
  323.              VGA13X
  324.              Hercules InColor
  325.  
  326.  
  327. ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  328.  
  329. $recolor:    replaces selected screen color; used by ReColor and
  330.              WReColor subroutines.  Includes snow control logic for CGA
  331.              systems.
  332. Source:      $recolor.asm
  333.  
  334. Call with:   ES:[DI] pointing to screen
  335.              AL = oldcolor
  336.              AH = newcolor
  337.              DX = 0 or 3DAh for snow control
  338.              SI = number of rows
  339.              CX = number of columns
  340.              BP = bytes per screen row
  341.  
  342.  
  343. ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  344.  
  345. a$wdata:     parameter manager for ASMLIB's Window subroutines.
  346. Source:      a$wdata.asm (crtinfo.asm)
  347.  
  348. Call with:   DS:[BX] pointing to widow corner data
  349.              requires 2 bytes available at [bp-2]
  350.              row0  equ  [bx]
  351.              col0  equ 2[bx]
  352.              row1  equ 4[bx]
  353.              col1  equ 6[bx]
  354. Returns:     SI = number of rows
  355.              CX = number of columns
  356.              DX = 0 if no CGA, 3DAh if CGA and "snow" control not disabled
  357.              [bp-2] = bytes per screen row
  358.              ES:[DI] -> [row0, col0] on screen
  359. Uses:        CX, DX, DI, SI, ES, [BP-2], flags
  360.  
  361.  
  362. ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  363.  
  364. $rlbytes:    calculates bytes required to decode run-length encoded data
  365. Source:      $rlbytes.asm
  366.  
  367. Call with:   DS:[SI] pointing to encoded data
  368.              CX = size of encoded data block
  369. Returns:     AX = bytes required to decode data block
  370. Uses:        AX
  371.  
  372.  
  373. ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  374.  
  375. $rld:        decodes run-length encoded data
  376. Source:      $rld.asm
  377.  
  378. Call with:   DS:[SI] pointing to encoded source data
  379.              ES:[DI] pointing to destination buffer
  380.              CX = number of encoded bytes
  381.              assumes destination buffer is large enough for decoded data
  382. Returns:     nothing
  383. Uses:        nothing
  384.  
  385.  
  386. ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  387.  
  388. $rle:        run-length encoding data compression
  389. Source:      $rle.asm
  390.  
  391. Call with:   DS:[SI] pointing to data to be encoded
  392.              ES:[DI] pointing to output buffer
  393.              CX = number of bytes to encode
  394.              assumes output buffer is at least the same size as input data
  395. Returns:     DF = 0
  396.              if CF = 0, AX = encoded data size
  397.              if CF = 1, run-length encoding will not compress file
  398.                         data in output buffer is incomplete
  399. Uses:        AX, flags
  400.  
  401. ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  402.  
  403. $strstr:     string search module used by several ASMLIB subroutines
  404. Source:      $strstr.asm
  405.  
  406. Call with:   ES:[DI] -> search string, DS:[SI] -> pattern string
  407.              BX = pattern string length, DX = search string length
  408.              $strstr searches for the first occurrance of the pattern
  409.              string in the search string
  410. Returns:     if CF = 1, no match
  411.              if CF = 0, AX = match offset from ES:[DI]
  412. Uses:        AX, BX, CX, DX, SI, DI, flags
  413.  
  414.  
  415. ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  416.  
  417. $wcopy:      copies word data from one portion of memory to another;
  418.              intended for copying to/from video memory in text mode
  419.              includes snow control logic for CGA systems.
  420. Source:      $wcopy.asm
  421.  
  422. Call with:   CX = words to copy
  423.              DS:[SI] -> source
  424.              ES:[DI] -> destination
  425.              DX = CRTC status port if CGA, else 0
  426.              DF = 0 or 1
  427. Returns:     ES:[DI] pointing past end of destination
  428.              DS:[SI] pointing past end of block
  429.              CX = 0
  430. Uses:        AX, CX, DI, SI, flags
  431. Called by:   WSave, WRestore, GetScreen, PutScreen, TCopy, VScroll, HScroll
  432.  
  433.  
  434.  
  435. ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  436.  
  437. m$putwindow:  save screen, clear window & print window frame
  438. Source:       m$putw.asm (wsize.asm, wsave.asm, dosalloc.asm, wframe.asm,
  439.                           wclear.asm)
  440.  
  441. Call with:    DS:[BX] pointing to window corner data
  442. Returns:      ES = segment address of saved screen area
  443. Uses:         ES, flags
  444. Called by:    PICKSTR
  445.  
  446.  
  447. ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  448.  
  449. $strlist:     copy group of ASCIIZ strings to block of fixed-length strings
  450. source:       $strlist.asm (dosalloc.asm, strlen.asm, m$count.asm)
  451.  
  452. Call with:    DS:[SI] pointing to first string to copy
  453.               CX = minimum field size
  454.               string group terminated with double NUL
  455.               requires sufficient free DOS memory
  456.  
  457. Returns:      if CF = 1, insufficient DOS memory available
  458.               if CF = 0:
  459.                ES = base segment address of string block
  460.                AX = number of strings
  461.                CX = string field size
  462. Uses:         AX, CX, ES, flags
  463. Called by:    PICKSTR, GPICKSTR
  464.  
  465.  
  466. ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  467.  
  468. m$count:      counts a group of ASCIIZ strings
  469. Source:       m$count.asm (strlen.asm)
  470.  
  471. Call with:    DS:[BX] pointing to first string
  472.               string group terminated with double NUL
  473. Returns:      AX = number of strings
  474.               CX = length of longest string in group
  475. Uses:         AX, BX, CX, flags
  476. Called by:    PICKSTR, PULLDOWN
  477.  
  478.  
  479.  
  480. ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  481.  
  482. m$nkey:       process normal keystroke for menu subroutines
  483. Source:       m$nkey.asm (isupper.asm, m$chr.asm)
  484.  
  485. Call with:    AL = key code
  486.               BX = initial cursor position
  487.               CX = field width
  488.               DX = number of menu choices
  489.               ES:[DI] pointing to first menu choice
  490. Returns:      BX = output position
  491.                if CF = 0, found matching character
  492.                if CF = 1, no match
  493. Uses:         AX, BX, CX, DX, DI, flags
  494. Called by:    $pick
  495.  
  496.  
  497. ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  498.  
  499. m$chr:        determines if a keycode is the first uppercase character
  500.               in a string
  501. Source:       m$chr.asm (strlen.asm)
  502.  
  503. Call with:    AX = keycode
  504.               DS:[BX] pointing to string
  505. Returns:      if CF = 1, string length = 0
  506.               if CF = 0:
  507.                 CX = 0 if no upper case characters in the string
  508.                 if CX <> 0, AH = first UCASE character
  509.                 ZF = 1 if character is first ucase in string
  510.                 DS:[BX] points to first ucase character
  511. Uses:         AX, BX, CX, flags
  512. Called by:    $pick, PULLDOWN
  513.  
  514.  
  515. ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  516.  
  517. $listwindow:  calculates window dimensions for input list; adjusts
  518.               upper left corner coordinates if required to fit on screen
  519. Source:       $listw.asm (crtinfo.asm)
  520.  
  521. Call with:    DS:[BX] pointing to 8-byte data area for window corner data
  522.               AX = number of choices in list
  523.               CX = list field width
  524.               DH = desired first screen row for list
  525.               DL = desired first column for list
  526.               $listwindow assumes that DH < total screen rows
  527. Returns:      DH = adjusted first row for $pick
  528.               DL = adjusted first column for $pick
  529.               8 bytes at DS:[BX] are updated with window corner coordinates
  530.               for WSave, WFrame, WRestore, etc.
  531. Uses:         DX; all other registers and flags are saved
  532. Called by:    PICKSTR, PICKFILE
  533.  
  534.  
  535. ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  536.  
  537. $pick:        select one string from a list of fixed-length strings
  538.               used in text-mode menu subroutines
  539. Source:       $pick.asm (crtinfo.asm, str2vbuf.asm, a$putw.asm, m$input.asm,
  540.                          m$chr.asm, m$nkey.asm, a$menu.asm, v$extkey.asm)
  541.  
  542. Call with:    ES:[DI] pointing to list of choices
  543.               AX = number of menu choices
  544.               CX = field width
  545.               BX = initial cursor position
  546.               DH = top screen row
  547.               DL = left screen column
  548.               Returns to calling program when Esc, Enter or ^C pressed
  549.  
  550. Returns:      if BreakTrap enabled:
  551.                if CF = 1, ^C or ^Break was pressed
  552.               AX = last key pressed (AX = 3 if ^C pressed)
  553.               BX = string number selected (first string = 0)
  554. Uses:         AX, BX, CF
  555. Called by:    PICKSTR, PICKFILE
  556.  
  557. ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  558.  
  559. v$extkey:     extended keycode processor for ASMLIB vertical list menus
  560.               (text and graph modes)
  561. Source:       v$extkey.asm
  562.  
  563. Call with:    AL = low word of ASMLIB extended key code
  564.               [bp-2] = field width of string list
  565.               [bp-4] = number of choices
  566.               [bp-6] = current choice
  567.               [bp-8] = first string to print (for scrolling if required)
  568.               [bp-10] = number of strings to print 
  569.                         ( = number of choices if no scrolling required)
  570.  
  571. Returns:      if CF = 0, modifies [bp-6] and [bp-8]
  572.               if CF = 1, keycode not a valid cursor movement key
  573.               valid keys: Up, Down, Home, End, PgUp, PgDown
  574.  
  575. Uses:         AX, flags
  576. Called by:    $pick, $gpick
  577.  
  578. ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  579.  
  580. FIND_CGA:     determine if color monitor is installed
  581. FIND_MDA:     determine if monochrome monitor is installed
  582. Source:       $6845.asm
  583.  
  584. Call with:    no parameters
  585. Returns:      if CF = 0, monitor is installed
  586.               if CF = 1, monitor is not installed
  587. Uses:         flags
  588.  
  589.  
  590.  
  591. ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  592.  
  593. $ytable:      calculate buffer offset for each row of screen
  594.               used to set up for dottype 0 - 4 graphics modes
  595. Source:       $ytable.asm ($herc.asm)
  596.  
  597. Call with:    AX = 0
  598.               ES:[DI] pointing to YTABLE data area
  599.               CX = ylimit+1
  600.               DF = 0
  601. Returns:      nothing
  602. Uses:         AX, BX, CX, DX, DI
  603.  
  604.  
  605.  
  606. ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  607.  
  608. a$mname:      return month or day name to calling program
  609.               used by MONTHNAME and DAYNAME
  610. Source:       a$mname.asm
  611.  
  612. Returns:      ES:[BX] -> month name string
  613.               CX = string length
  614. Uses:         ES, BX, CX
  615.  
  616.  
  617. ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  618.  
  619. $vga256:      determine color & machine code for given drawmode
  620. Source:       $vga256.asm ($graph.asm)
  621.  
  622. Call with:    no parameters
  623.               call $graph before calling $vga256
  624.               drawmode & gcolor must be current
  625. Returns:      AL = color
  626.               DL = machine code
  627.               DH = ABS(drawmode)
  628. Uses:         AX, DX, flags
  629.  
  630.  
  631.  
  632. ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  633.  
  634. $reset:       restores default hardware settings for graphics modes
  635.               used as part of exit code from ASMLIB graphics subroutines
  636. Source:       $reset.asm ($graph.asm)
  637.  
  638. Call with:    no parameters
  639. Returns:      nothing
  640. Uses:         nothing
  641.  
  642.  
  643. ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  644.  
  645. $putdot:      updates a pixel on graphics screen
  646. Source:       $putdot.asm ($graph.asm, $herc16.asm, banks.asm, dotmask.asm)
  647.  
  648. Call with:    AX = x-coordinate, BX = y-coordinate
  649.               ES = segment address of screen buffer
  650.               all $graph data must be current
  651. Returns:      nothing
  652. Uses:         flags
  653.  
  654.  
  655.  
  656. ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  657.  
  658. $rotate:      rotates character font for GPrint & GPrintX
  659. Source:       $gp.asm
  660.  
  661. Call with:    DS:[SI] pointing to unrotated font
  662. Returns:      DS:[SI] pointing to new charcter font on stack
  663.               DS:@data
  664. Uses:         DS, SI, flags
  665.  
  666.  
  667.  
  668. ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  669.  
  670. $vert:        draw vertical line
  671. Source:       $vert.asm ($ega16.asm, $herc16.asm, $vga256.asm, $hvpatrn.asm
  672.                           banks.asm, $graph.asm, dotmask.asm)
  673.  
  674. Call with:    DS:@data
  675.               ES = screen buffer segment
  676.               x0 = [BP-2]
  677.               y0 = [BP-4]
  678.               x1 = [BP-6]
  679.               y1 = [BP-8]
  680. Returns:      nothing
  681. Uses:         AX, BX, CX, DX, DI, SI, flags
  682.  
  683.  
  684. ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  685.  
  686. $loslope:     draw a low-slope line
  687. Source:       $loslope.asm ($ega16.asm, $herc16.asm, $vga256.asm,
  688.                           $lopatrn.asm, banks.asm, $graph.asm, dotmask.asm)
  689.  
  690. Call with:    DS:@data
  691.               ES = screen buffer segment
  692.               x0 = [BP-2]
  693.               y0 = [BP-4]
  694.               x1 = [BP-6]
  695.               y1 = [BP-8]
  696. Returns:      nothing
  697. Uses:         AX, BX, CX, DX, DI, SI, flags
  698.  
  699.  
  700.  
  701. ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  702.  
  703. m$input:      input module for ASMLIB menu subroutines
  704. Source:       m$input.asm (kifwait.asm, $flags.asm)
  705.  
  706. Call with:    DS:@data
  707. Returns:      AX = keycode
  708.               BX = mouse buttons pressed
  709.                mouse motion is returned as a Left, Right, Up or Down
  710.                keycode.  IsMouse must be called before the menu subroutine
  711.                to enable mouse functions.
  712. Uses:         AX, BX, flags
  713.  
  714.  
  715. ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
  716.  
  717. $lopatrn:     draw a low-slope line with pattern
  718.               called from $loslope
  719. Source:       $lopatrn.asm
  720.  
  721. $vpattern:    draw a vertical line with pattern
  722.               called from $vert
  723. Source:       $hvpatrn.asm
  724.