home *** CD-ROM | disk | FTP | other *** search
/ CP/M / CPM_CDROM.iso / beehive / utilitys / swdemo15.arc / SWFTNS1.ME < prev    next >
Text File  |  1991-08-11  |  18KB  |  691 lines

  1.                      SWIND Windowing Library
  2.                           Eugene Nolan
  3.                Copyright 1989, All Rights Reserved
  4.  
  5. Version 1.1 - Please see those items marked with a *** for changes
  6.           from version 1.0
  7.  
  8.  
  9.   This document provides a description of the different entry 
  10. points available in the SWIND windowing library and their associated
  11. parameters.
  12.  
  13. All references to 'Returns:' are valid if the full error check version
  14. of the library are used, otherwise all are void (none) if not.
  15.  
  16. --------------------------------------------------------------------
  17. Function:      WINIT
  18. Purpose:       Initialize the internal data base.
  19. Parameters:    None
  20.  
  21. Calling proc:
  22.            C          Z80 assem      80XX(X) assem
  23.  
  24.            void winit();      ld   hl,2
  25.                   call winit##      call winit
  26.  
  27. Returns:    None
  28.  
  29.  
  30. --------------------------------------------------------------------
  31. Function:      WOPEN
  32. Purpose:       Create a window
  33. Parameters:    Window ID, Min X,Y Max X,Y, Border character and 
  34.                attribute for border, default X,Y cursor position, Flags
  35.            to use for window (see 'Window Flags' below)
  36. Calling proc:
  37.         C          Z80 assem      80XX(X) assem
  38.  
  39.            int wopen(pnt);      ld   hl,pnt      mov   ax,offset pnt
  40.            int *pnt;      push hl      push  ax
  41.                   ld   hl,4      call  wopen
  42.                   call wopen##      add   sp,2
  43.  
  44. Returns:    0 = Success      in HL          in AX
  45.         1 = Bad ID
  46.         2 = Exists
  47.  
  48.  
  49. Example: *** for MSDOS and CPM no business graphics
  50.  
  51. int *pnt,wind1[]={1,    /* window ID */
  52.          10,    /* Min X */
  53.          10,    /* Min Y */
  54.          20,    /* Max X */
  55.          20,    /* Max Y */
  56.          0x7C2D,    /* Border character vertical line high byte = '|'
  57.                Border character horizontal line low byte = '-'
  58.                set both bytes 0 for no border */
  59.          0x2B07,    /* Border character for corners high byte = '+'
  60.                border attribute low byte */
  61.           0,    /* Defualt X cursor position */
  62.           0,    /* Default Y cursor position */
  63.           0x21    /* Window flags */
  64.           };
  65.     pnt=(int *)wind1;
  66.  
  67.     pnt: dw 1,10,10,20,20,7c2dh,2b07h,0,0,21h
  68.  
  69.     pnt  dw 1,10,10,20,20,7c2dh,2b07h,7,0,0,21h
  70.  
  71. Example: *** CPM business graphics with new TCAP
  72.  
  73. int *pnt,wind1[]={1,    /* window ID */
  74.          10,    /* Min X */
  75.          10,    /* Min Y */
  76.          20,    /* Max X */
  77.          20,    /* Max Y */
  78.               1,    /* Non zero to display borders, 0 for no borders */
  79.            0x10,    /* Bit 4 set to enable business graphics    
  80.           0,    /* Default X cursor position */
  81.           0,    /* Default Y cursor position */
  82.           0x21    /* Window flags */
  83.           };
  84.     pnt=(int *)wind1;
  85.  
  86.     pnt: dw 1,10,10,20,20,1,10h,0,0,21h
  87.  
  88. --------------------------------------------------------------------
  89. Function:      WINDEL ( *** Renamed from WDELET )
  90. Purpose:       Delete a window from the data base, freeing it up 
  91.                for a subsequent new WOPEN. Will remove from 
  92.                display all visible parts of the window.
  93. Parameters:    Window ID
  94. Calling proc:
  95.         C          Z80 assem      80XX(X) assem
  96.  
  97.            int wdelet(id);      ld   hl,id      mov   ax,id
  98.            int id;          push hl      push  ax
  99.                   ld   hl,4      call  wdelet
  100.                   call wdelet##      add   sp,2
  101.  
  102. Returns:    0 = Success      in HL          in AX
  103.         1 = Bad ID
  104.         2 = Not exist
  105.  
  106.  
  107.  
  108. --------------------------------------------------------------------
  109. Function:      WSELCT
  110. Purpose:       Make the given window the object of output that
  111.                follows. Selected window will be in exact state as
  112.                it was in before ( cursor will be positioned and
  113.                attributes set accordingly).
  114. Parameters:    Window ID
  115. Calling proc:
  116.         C          Z80 assem      80XX(X) assem
  117.  
  118.            int wselct(id);      ld   hl,id      mov   ax,id
  119.            int id;          push hl      push  ax
  120.                   ld   hl,4      call  wselct
  121.                   call wselct##      add   sp,2
  122.  
  123. Returns:    0 = Success      in HL          in AX
  124.         1 = Bad ID
  125.         2 = Not Exist
  126.  
  127.  
  128. --------------------------------------------------------------------
  129. Function:      WHIDE
  130. Purpose:       Disconnect window from display preference list, 
  131.                remove all displayable portions from screen.
  132. Parameters:    Window ID
  133. Calling proc:
  134.         C          Z80 assem      80XX(X) assem
  135.  
  136.            int whide(id);      ld   hl,id      mov   ax,id
  137.            int id;          push hl      push  ax
  138.                   ld   hl,4      call  whide
  139.                   call whide##      add   sp,2
  140.  
  141. Returns:    0 = Success      in HL          in AX
  142.         1 = Bad ID
  143.         2 = Not Exist
  144.  
  145. --------------------------------------------------------------------
  146. Function:      WUNHID
  147. Purpose:       Reconnect window to top of display preference 
  148.                list. This window will now be on 'top' and 'selected'.
  149. Parameters:    Window ID
  150. Calling proc:
  151.         C          Z80 assem      80XX(X) assem
  152.  
  153.            int wunhid(id);      ld   hl,id      mov   ax,id
  154.            int id;          push hl      push  ax
  155.                   ld   hl,4      call  wunhid
  156.                   call wunhid##      add   sp,2
  157.  
  158.  
  159. Returns:    0 = Success      in HL          in AX
  160.         1 = Bad ID
  161.         2 = Not Exist
  162.  
  163. --------------------------------------------------------------------
  164. Function:      WRESIZ
  165. Purpose:       Redefine the Min X,Y Max X,Y for window. Reconnect
  166.                window to top of display preference list. Now on 
  167.                'top' and selected.
  168. Parameters:    Window ID, New Min X,Y Max X,Y.
  169. Calling proc:
  170.         C
  171.  
  172.            int wresiz(id,xmin,ymin,xmax,ymax)
  173.            int id,xmin,xmax,xmax,ymax;
  174.  
  175.         Z80 assem
  176.  
  177.         ld    hl,ymax
  178.         push    hl
  179.         ld    hl,xmax
  180.         push    hl
  181.         ld    hl,ymin
  182.         push    hl
  183.         ld    hl,xmin
  184.         push    hl
  185.         ld    hl,id
  186.         push    hl
  187.         ld    hl,0ch
  188.         call    wresiz##
  189.  
  190.          80XX(X) assem
  191.  
  192.         push    ymax
  193.         push    xmax
  194.         push    ymin
  195.         push    xmin
  196.         push    id
  197.         call    wresiz
  198.         add    sp,0ah
  199.  
  200.  
  201. Returns:    0 = Success      in HL          in AX
  202.         1 = Bad ID
  203.         2 = Not Exist
  204.  
  205.  
  206. --------------------------------------------------------------------
  207. Function:      WSBCHR  ( *** renamed from WBCHR )
  208. Purpose:       Redefine the character and attributes used for the 
  209.                border. May be defined to 'none'.
  210. Parameters:    Window ID, Border character/attribute.
  211. Calling proc:
  212.         C
  213.  
  214.            int wbchr(id,chr,att)    /* *** Chr and att as defined above
  215.                        under WOPEN */
  216.            int id,chr,att;
  217.  
  218.         Z80 assem
  219.  
  220.         ld    hl,att
  221.         push    hl
  222.         ld    hl,chr
  223.         push    hl
  224.         ld    hl,id
  225.         push    hl
  226.         ld    hl,08h
  227.         call    wbchr##
  228.  
  229.          80XX(X) assem
  230.  
  231.         push    att
  232.         push    chr
  233.         push    id
  234.         call    wresiz
  235.         add    sp,06h
  236.  
  237. Returns:    0 = Success      in HL          in AX
  238.         1 = Bad ID
  239.         2 = Not Exist
  240.  
  241. --------------------------------------------------------------------
  242. Function:      WSFLAG *** ( renamed from WSATTS )
  243. Purpose:       Set the 'flags' for given window.
  244. Parameters:    Window ID, flags
  245. Calling proc:
  246.         C
  247.  
  248.            int wsflag(id,flag)
  249.            int id,flag;
  250.  
  251.         Z80 assem
  252.  
  253.         ld    hl,flag
  254.         push    hl
  255.         ld    hl,id
  256.         push    hl
  257.         ld    hl,06h
  258.         call    wsflag##
  259.  
  260.          80XX(X) assem
  261.  
  262.         push    flag
  263.         push    id
  264.         call    wsflag
  265.         add    sp,04h
  266.  
  267. Returns:    0 = Success      in HL          in AX
  268.         1 = Bad ID
  269.         2 = Not Exist
  270.  
  271. --------------------------------------------------------------------
  272. Function:      WSATTS - *** New funtion
  273. Purpose:       Set the attributes used for character display in a given window.
  274. Parameters:    Window ID, attributes
  275. Calling proc:
  276.         C
  277.  
  278.            int wsatts(id,atts)
  279.            int id,atts;
  280.  
  281.         Z80 assem
  282.  
  283.         ld    hl,atts
  284.         push    hl
  285.         ld    hl,id
  286.         push    hl
  287.         ld    hl,06h
  288.         call    wsatts##
  289.  
  290.          80XX(X) assem
  291.  
  292.         push    atts
  293.         push    id
  294.         call    wsatts
  295.         add    sp,04h
  296.  
  297. Returns:    0 = Success      in HL          in AX
  298.         1 = Bad ID
  299.         2 = Not Exist
  300.  
  301. --------------------------------------------------------------------
  302. Function:      WCURPO
  303. Purpose:       Set the current window cursor position. Operation
  304.                dependent upon windows 'flags'.
  305. Parameters:    X,Y
  306. Calling proc:
  307.         C
  308.  
  309.            void wcurpo(x,y)
  310.            int  x,y;
  311.  
  312.         Z80 assem
  313.  
  314.         ld    hl,y
  315.         push    hl
  316.         ld    hl,x
  317.         push    hl
  318.         ld    hl,06h
  319.         call    wcurpo##
  320.  
  321.          80XX(X) assem
  322.  
  323.         push    y
  324.         push    x
  325.         call    wcurpo
  326.         add    sp,04h
  327.  
  328. Returns:    None
  329.  
  330. --------------------------------------------------------------------
  331. Function:      WGCURP
  332. Purpose:       Get the current window cursor position. Operation
  333.                dependent upon windows 'flags'.
  334. Parameters:    Address to place position
  335. Calling proc:
  336.         C
  337.  
  338.            void wgcurp(pnt)
  339.            int  *pnt, xy[2];
  340.            pnt=xy;
  341.            wgcurp(pnt);
  342.  
  343.         Z80 assem
  344.  
  345.     pnt:    dw    0,0
  346.  
  347.         ld    hl,pnt
  348.         push    hl
  349.         ld    hl,04h
  350.         call    wgcurp##
  351.  
  352.          80XX(X) assem
  353.  
  354.     pnt    dw    0,0
  355.  
  356.         mov    si,offset pnt
  357.         push    si
  358.         call    wgcurp
  359.         add    sp,02h
  360.  
  361. Returns:    None
  362.  
  363. --------------------------------------------------------------------
  364. Function:      WPUTCH
  365. Purpose:       Display the given character at current cursor 
  366.                position, using current attributes. Cursor 
  367.                position will be updated dependent upon windows
  368.                flags.
  369. Parameters:    Character
  370. Calling proc:
  371.            C          Z80 assem      80XX(X) assem
  372.  
  373.            void wputch(chr);  ld   hl,chr      push  chr
  374.            int chr;          push hl      call  wputch
  375.                   ld   hl,4      add   sp,2
  376.                   call wputch##
  377.  
  378. Returns:    None
  379.  
  380. --------------------------------------------------------------------
  381. Function:      WVINIT ( in dependence routine )
  382. Purpose:       Initialize anything required to use the video
  383.                output.
  384. Parameters:    None
  385. Calling proc:
  386.            C          Z80 assem      80XX(X) assem
  387.  
  388.            int wvinit();      ld   hl,2      call wvinit
  389.                   call wvinit##
  390.  
  391. Returns:    0 = Success      in HL          in AX
  392.         1 = Failure
  393.  
  394. --------------------------------------------------------------------
  395. Function:      WCLRSC ( in dependence routine )
  396. Purpose:       Clear the video display. This is a raw output and
  397.                is outside the windowing system control.
  398.            All data bases remain intact, physical display altered.
  399.  
  400. Parameters:    None
  401. Calling proc:
  402.            C          Z80 assem      80XX(X) assem
  403.  
  404.            void wclrsc();      ld   hl,2      call wclrsc
  405.                   call wclrsc##
  406.  
  407. Returns:    None
  408.  
  409. --------------------------------------------------------------------
  410. Function:      WGOXY  ( in dependence routine )
  411. Purpose:       Position the cursor to given screen position. This 
  412.                is a 'raw' move, and is outside the windowing 
  413.                system control.
  414.            All data bases remain intact, physical display altered.
  415. Parameters:    X,Y
  416. Calling proc:
  417.         C
  418.  
  419.            void wgoxy(x,y)
  420.            int  x,y;
  421.  
  422.         Z80 assem
  423.  
  424.         ld    hl,y
  425.         push    hl
  426.         ld    hl,x
  427.         push    hl
  428.         ld    hl,06h
  429.         call    wgoxy##
  430.  
  431.          80XX(X) assem
  432.  
  433.         push    y
  434.         push    x
  435.         call    wgoxy
  436.         add    sp,04h
  437.  
  438. Returns:    None
  439.  
  440. --------------------------------------------------------------------
  441. Function:      WCOUT  ( in dependence routine )
  442. Purpose:       Display the given character with given attribute. 
  443.                This is a 'raw' output and is outside the 
  444.                windowing system control.
  445.            All data bases remain intact, physical display altered.
  446. Parameters:    Character in low byte, Attribute in high byte.
  447. Calling proc:
  448.            C          Z80 assem      80XX(X) assem
  449.  
  450.            void wcout(chr);   ld   hl,chr      push  chr
  451.            int chr;          push hl      call  wcout
  452.                   ld   hl,4      add   sp,2
  453.                   call wcout##
  454.  
  455. Returns:    None
  456.  
  457.  
  458. --------------------------------------------------------------------
  459. Function:      WGOXYC  ( in dependence routine )
  460. Purpose:       Position the cursor and draw given character with 
  461.                given attribute. This is a 'raw' output and is 
  462.                outside the windowing system control.
  463.            All data bases remain intact, physical display altered.
  464. Parameters:    X,Y, character in low byte, attribute in high 
  465.                byte.
  466. Calling proc:
  467.         C
  468.  
  469.            void wgoxyc(x,y,chr)
  470.            int x,y,chr;
  471.  
  472.         Z80 assem
  473.  
  474.         ld    a,atts
  475.         ld    h,a
  476.         ld    a,chr
  477.         ld    l,a
  478.         push    hl
  479.         ld    hl,y
  480.         push    hl
  481.         ld    hl,x
  482.         push    hl
  483.         ld    hl,08h
  484.         call    wgoxyc##
  485.  
  486.          80XX(X) assem
  487.  
  488.         mov    ah,atts
  489.         mov    al,chr
  490.         push    ax
  491.         push    y
  492.         push    x
  493.         call    wgoxyc
  494.         add    sp,06h
  495.  
  496. Returns:    None
  497.  
  498. --------------------------------------------------------------------
  499.  
  500. Function:    WCONOF  *** ( in dependence routine )
  501. Purpose:    Turn cursor display on/off
  502. Parameters:    0 = off, non-zero = on
  503.  
  504. Note:        Only available under CPM proposed TCAP version
  505.  
  506. Calling proc:
  507.         C
  508.         void wconof(onoff);
  509.         int onoff;
  510.  
  511.         Z80 assem
  512.  
  513.         ld    hl,onoff
  514.         push    hl
  515.         ld    hl,4
  516.         call    wconof
  517.  
  518. --------------------------------------------------------------------
  519.  
  520. Function:    WWAIT  *** ( in dependence routine )
  521. Purpose:    Wait a specified amount of time
  522. Parameters:    Number of milli-seconds to wait
  523.  
  524. Note:        Only available under CPM version with exact timings,
  525.         MS-DOS version get approximate timings
  526.  
  527. Calling proc:
  528.         C
  529.         void wwait(wtime);
  530.         int wtime;
  531.  
  532.         Z80 assem
  533.  
  534.         ld    hl,wtime
  535.         push    hl
  536.         ld    hl,4
  537.         call    wwait
  538.  
  539.          80XX(X) assem
  540.         
  541.         MOV    ax,wtime
  542.         push    ax
  543.         call    wwait
  544.         add    sp,2
  545.  
  546. --------------------------------------------------------------------
  547.  
  548. Function:      WDOCHR
  549. Purpose:       Call to the 'virtual' terminal processing routine.
  550. Parameters:    Character
  551.  
  552. Calling proc:
  553.         C
  554.         
  555.         p="\033G\001\001\033F\001Hello World\033F";
  556.         while(*p) wdochr(*p++);
  557.         wdochr(*p);
  558.  
  559.         Z80 assem
  560.  
  561.     t:    db    1bh,'G',1,1    ; position the cursor to 1,1
  562.         db    1bh,'F',1    ; Turn highlighting on
  563.         db    'Hello World'
  564.         db    1bh,'F',0    ; turn highlighting off
  565.     t1    equ $-t
  566.  
  567.         ld    hl,t        ; Point to data to output
  568.         ld    b,t1        ; Number of bytes to output
  569.     next:    ld    e,(hl)        ; get data byte
  570.         push    hl
  571.         push    bc
  572.         push    de        ; Put data on stack
  573.                     ; High byte don't care
  574.         ld    hl,4        ; "C" required
  575.         call    wdochr##    ; Do it
  576.                     ; "C" return procedure has taken
  577.                     ; care of DE on the stack
  578.         pop    bc
  579.         pop    hl
  580.         inc    hl
  581.         djnz    next
  582.  
  583.          80XX(X) assem
  584.  
  585.     t    db    1bh,'G',1,1    ; position the cursor to 1,1
  586.         db    1bh,'F',1    ; Turn highlighting on
  587.         db    'Hello World'
  588.         db    1bh,'F',0    ; turn highlighting off
  589.     t1    equ $ - offset t
  590.  
  591.         mov    si,offset t    ; Point to data to output
  592.         mov    cx,t1        ; Number of bytes to output
  593.     next:    push    si
  594.         push    cx
  595.         push    [si]
  596.         call    wdochr        ; Do it
  597.         add    sp,2
  598.         pop    cx
  599.         pop    si
  600.         inc    si
  601.         loop    next
  602.  
  603. Returns:    None
  604.  
  605.  
  606. --------------------------------------------------------------------
  607. Window 'flags':
  608.  
  609.      Each window defined to the system has the 
  610.      following flag bits available:
  611.  
  612.      Bit       Use
  613.  
  614.      0        If Reset, Border area is allowed to be written upon.
  615.               Otherwise visible area is set to Min X+1,Y+1 Max X-1,Y-1
  616.  
  617.      1        Reserved, set to 0.
  618.  
  619.      2        Reserved, set to 0.
  620.  
  621.      3        Reserved, set to 0.
  622.  
  623.      4        If set, and X surpasses max X boundary, cursor will
  624.         be positioned at min X boundary and Y incremented. If
  625.         Y surpasses max Y boundary, a scroll up is performed
  626.         with Y set to max Y boundary.
  627.  
  628.      5        Wrap to min X boundary if max X boundary surpassed.
  629.         Wrap to min Y boundary if max Y boundary surpassed.
  630.  
  631.         Note: If bits 4 & 5 both 0, clip at max X boundary
  632.  
  633.      6        If Set, window boundaries are set to the full physical
  634.         display    size, with the portion visible under control of 
  635.         Min X,Y Max X,Y as defined in the previous
  636.         WOPEN or WRESIZ.
  637.         If reset, window boundaries are set according to
  638.         Min X,Y Max X,Y as defined in previous WOPEN or WRESIZ.
  639.  
  640.      7        Reserved, not accessible to user programs.
  641.  
  642.  
  643.  
  644.  
  645. --------------------------------------------------------------------
  646. Virtual terminal 'escape' codes ( all are preceded by a 1Bh code):
  647.  
  648. Note: Left, right, top, and bottom margins are as defined in the
  649.       flag bit section above.
  650.  
  651.      Code      Use
  652.  
  653.      A         Insert line. If at top, a scroll down is performed.
  654.      B         Delete Line. All subsequent lines in the window
  655.                will be moved up and last line in window will be
  656.                cleared. If at bottom, only last line is cleared.
  657.      C         Erase from current cursor position to max X boundary.
  658.      D         Erase from min X boundary to current cursor position.
  659.      E         Clear window from min X,Y to max X,Y boundaries.
  660.            It is cleared with spaces ( 20h ), and attributes are
  661.            set to 0.
  662.      F         Position the cursor in the window. ( X,Y follows )
  663.      G         Set attributes for subsequent output. ( follows )
  664.      H         Reverse line feed. If at min Y boundary, a scroll
  665.                down will be performed in the window.
  666.      I         Move cursor right, if at max X boundary, wrap to the
  667.                min X boundary.
  668.      J         Move cursor left, if at min X boundary, wrap to the
  669.                max X boundary.
  670.      K         Move cursor up, if min Y boundary, wrap to max Y boundary.
  671.      L         Move cursor down, if at max Y boundary, wrap to min Y
  672.            boundary.
  673.  
  674.      All other codes following a 1Bh code are thrown away.
  675.  
  676. The following low level codes are also supported:
  677.  
  678.      08h       Back space, if at min X boundary, wrap to max X boundary.
  679.      09h       Tab. Fixed tab stops every eight positions from
  680.                min X boundary. Stops at max X boundary.
  681.      0Ah       Line feed. Move cursor down, if at max Y boundary,
  682.                perform a scroll up. X position remains constant.
  683.      0Dh       Carriage return, position cursor at min X boundary.
  684.      7Fh       Delete character to the left, if at min X boundary,
  685.                wrap to the max X boundary.
  686.  
  687.      All other low level codes are passed directly to the 
  688.      dependence routine, with no action or storage by the 
  689.      libraries.
  690.  
  691.