home *** CD-ROM | disk | FTP | other *** search
/ World of Shareware - Software Farm 2 / wosw_2.zip / wosw_2 / CPROG / CEXPRESS.ZIP / GRAPHIC.ASM / CHRLINE.ASM < prev    next >
Assembly Source File  |  1989-05-03  |  2KB  |  77 lines

  1. ;void  char_line(ch,dir,col,row,length,color);
  2. ;  unsigned char  ch,dir,col,row,length,color;
  3.  
  4.  
  5.     EXTRN  _memory_model:byte
  6.     EXTRN  _video_buffer:word
  7.     EXTRN  _snow_protect:byte
  8.  
  9. _TEXT    SEGMENT  BYTE PUBLIC 'CODE'
  10.     ASSUME  CS:_TEXT
  11.     PUBLIC _char_line
  12. _char_line proc near
  13.     push bp            ;
  14.     mov  bp,sp        ;set stack frame
  15.     push di            ;
  16.     push si            ;
  17.     cmp  _memory_model,0    ;near or far?
  18.     jle  begin        ;jump if near
  19.     inc  bp            ;else add 2 to BP
  20.     inc  bp            ;
  21. begin:    cld            ;set direction flag
  22.     mov  ax,_video_buffer    ;fetch _video_buffer
  23.     mov  es,ax        ;shift to ES
  24.     sub  ax,ax        ;
  25.     mov  al,[bp+10]        ;get ROW value
  26.     dec  ax            ;count from 0
  27.     cmp  ax,24        ;is the row in range?
  28.     ja   L5            ;quit if not
  29.     mov  dl,160        ;160 bytes per line
  30.     mul  dl            ;times number rows
  31.     sub  bx,bx        ;
  32.     mov  bl,[bp+8]        ;get COL value
  33.     mov  di,bx        ;
  34.     dec  di            ;count from 0
  35.     cmp  di,79        ;is the col in range?
  36.     ja   L5            ;quit if not
  37.     shl  di,1        ;double for attri bytes
  38.     add  di,ax        ;now ES:DI pts to 1st pos
  39.     sub  cx,cx        ;
  40.     mov  cl,[bp+12]        ;string length in CX
  41.     jcxz L5            ;quit if zero
  42.     mov  ah,[bp+14]        ;attribute in AH
  43.     mov  al,[bp+4]        ;char in AL
  44.     mov  bl,[bp+6]        ;get direction param
  45.     mov  si,158        ;SI added to scrn ptr
  46.     cmp  bl,'V'        ;write vertically?
  47.     je   L1            ;jump ahead if so
  48.     cmp  bl,'v'        ;test small 'v' also
  49.     je   L1            ;jump if small 'v'
  50.     sub  si,si        ;add 0 to ptr if horzntl
  51. L1:    cmp  _snow_protect,0    ;protect against snow?
  52.     je   L4            ;jump ahead if not
  53.     mov  dx,3dah        ;status byte address
  54.     mov  bx,ax        ;save AX contents
  55. L2:    in   al,dx        ;get status byte
  56.     test al,1        ;test bit
  57.     jnz  L2            ;loop till 0
  58.     cli            ;disable interrupts
  59. L3:    in   al,dx        ;get status byte
  60.     test al,1        ;test bit
  61.     jz   L3            ;loop till 1
  62.     mov  ax,bx        ;restore AX contents
  63. L4:    stosw            ;write char
  64.     add  di,si        ;add offset to ptr
  65.     loop L1            ;go write next
  66. L5:    sti            ;reenable interrupts
  67.     pop  si            ;
  68.     pop  di            ;
  69.     pop  bp            ;
  70.     cmp  _memory_model,0    ;quit
  71.     jle  quit        ;
  72.     db   0CBh        ;RET far
  73. quit:    ret            ;RET near
  74. _char_line endp
  75. _TEXT    ENDS
  76.     END
  77.