About
Docs
Files
Support
Index

Essentials
AutoDocs
Library functions
Cooperate
Process mastering
Debug
Own debugging kit
FGE
Smart modeid pick
Loader
Shared lib. loader
Macros
Helper macros
Structs
All the structures
Logs
Library changelogs
Tools
Progs baked inside

API
crt_createargv()A
crt_destroyargv()A
crt_initmethod()A
crt_exitmethod()A
crt_newinstance()A
crt_freeinstance()A
ctl_clipath()A
ctl_devmount()A
ctl_devunmount()A
ctl_diskreqoff()A
ctl_diskreqon()A
ctl_haltidcmp()A
ctl_newshell()A
ctl_rearrangecon()A
ctl_relabel()A
ctl_setclistack()A
ctl_swapbackpen()A
ctl_udirassign()A
ctl_addbartrigger()A
ctl_pokebartrigger()A
ctl_rembartrigger()A
ctl_addconlogo()A
ctl_swapconlogo()A
ctl_remconlogo()A
ctl_addconlogof()A
ctl_remconlogof()A
ctl_setconlogof()A
ctl_openconscreen()A
ctl_closeconscreen()A
ctl_doconswitch()A
ctl_undoconswitch()A
ctl_addidcmphandler()A
ctl_remidcmphandler()A
ctl_findscreensafe()A
ctl_lockscreensafe()A
ctl_unlockscreensafe()A
ctl_addviewctrl()A
ctl_remviewctrl()A
ctl_zoomifycon()A
ctl_setsmparams()A
dev_getdiskcmdset()A
dev_opendiskdev()A
dev_closediskdev()A
dev_getdiskgeo()A
dev_freediskgeo()A
dev_getdiskrdb()A
dev_freediskrdb()A
dmt_mountcb()A
dos_addfdrelay()A
dos_ctrlfdrelay()A
dos_dopacket()A
dos_getpacket()A
dos_qflink()A
dos_qfopen()A
dos_qfwait()A
dos_qfispending()A
dos_qfsetmode()A
dos_qfsetintsig()A
dos_qfsetfctwait()A
dos_qfread()A
dos_qfwrite()A
dos_qfseek()A
dos_qfabort()A
dos_qfclose()A
dos_remfdrelay()A
dos_addlinkpoint()A
dos_dclinkpoint()A
dos_remlinkpoint()A
dos_devbymsgport()A
dos_makedevice()A
dos_checkdevice()A
dos_killdevice()A
dos_getfmfdrelay()A
dos_freefmfdrelay()A
dos_replypacket()A
dos_swapmpfdrelay()A
dos_waitpacket()A
han_binaryifh()A
han_rollifh()A
han_rwifh()A
han_termifh()A
mem_allocbmapthere()A
mem_cooperate()A
mem_dosynctask()A
mem_dosynctasks()A
mem_freepentab()A
mem_getwbstartup()A
mem_grabqarea()A
mem_iloadseg()A
mem_uniloadseg()A
mem_iloadseg2()A
mem_uniloadseg2()A
mem_initemptybmap()A
mem_remapbitmap()A
mem_remapbitmap2()A
mem_signalsafe()A
mem_makebmapfromimg()A
mem_addexhandler()A
mem_remexhandler()A
mem_attachhotvec()A
mem_attachrelhotvec()A
mem_detachhotvec()A
mem_resolvehotvec()A
mem_obtainhotvec()A
mem_obtainrelhotvec()A
mem_openifh()A
mem_closeifh()A
mem_convimgtobmap()A
mem_copyitnimage()A
mem_freeitnimage()A
mem_setaddrjtslot()A
mem_setdatajtslot()A
mem_allocjumptable()A
mem_freejumptable()A
mem_swapjumptable()A
mem_filljumptable()A
mem_importjumptable()A
mem_growpenholder()A
mem_freepenholder()A
mem_loadpicture()A
mem_freepicture()A
mem_alloclfvec()A
mem_freelfvec()A
mem_checklfvec()A
mem_allocvecpooled()A
mem_freevecpooled()A
mem_setvecpooled()A
mem_allocmemregion()A
mem_freememregion()A
mem_attachsniffer()A
mem_detachsniffer()A
mem_allocterm()A
mem_fixterm()A
mem_freeterm()A
mem_maketokenlist()A
mem_freetokenlist()A
mod_codereloc()A
mod_codefree()A
mod_codefind()A
mod_findktpresby()A
mod_getmemlist()A
mod_kicktaglink()A
mod_kicktagunlink()A
mod_ktpresunlink()A
mod_ktprescount()A
mod_addmodule()A
mod_delmodule()A
mod_adddiskmodule()A
mod_deldiskmodule()A
nfo_devvercmp()A
nfo_findgfxentry()A
nfo_findgfxrange()A
nfo_findgfxreso()A
nfo_findgfxsm()A
nfo_fsquery()A
nfo_fssmvalid()A
nfo_getcmcolors()A
nfo_getconioreq()A
nfo_getconunit()A
nfo_getscparams()A
nfo_getdrimap()A
nfo_getviscount()A
nfo_getvisstate()A
nfo_getwinaddr()A
nfo_grepml()A
nfo_idcmptoindex()A
nfo_isblitable()A
nfo_ischildofproc()A
nfo_isdev64bit()A
nfo_isdirectory()A
nfo_isinstack()A
nfo_isonmemlist()A
nfo_isonlistofml()A
nfo_ispdev64bit()A
nfo_issegremote()A
nfo_istask()A
nfo_iswindow()A
nfo_ktm()A
nfo_libvercmp()A
nfo_m68kcputype()A
nfo_modeidcount()A
nfo_scanlist()A
nfo_scanturbo()A
nfo_screencount()A
nfo_stackreport()A
nfo_stackvalid()A
nfo_typeofgfxmem()A
nfo_waitback()A
nfo_whichchipset()A
nfo_getargsource()A
nfo_freeargsource()A
ctl_clirun()P
ctl_makedir()P
ctl_getsmparams()P
mem_addrfrombase()P
mem_findinfile()P
mem_findinfileq()P
mem_lzwcompress()P
mem_lzwdecompress()P
mem_lzwfree()P
mem_scanfile()P
mem_scanlbl()P
mem_allocarray()P
mem_accessarray()P
mem_freearray()P
mem_alloccluster()P
mem_freecluster()P
mem_getmemcluster()P
mem_freememcluster()P
mem_copysmlcb()P
mem_freesmlcb()P
mem_readsrcimage()P
mem_freesrcimage()P
nfo_getsystime()P
nfo_scanml()P
txt_debugprintf()P
txt_strboth()P
txt_strpat()P
cnv_ALtoULONG()I
cnv_AtoULONG()I
cnv_ULONGtoA()I
cnv_ULONGtoBITS()I
ctl_relocdrimap()I
dev_sizeingigs()I
dos_bcopydevice()I
mem_addrfromlvo()I
mem_csumchs32()I
mem_csumeor32()I
mem_csumint32()I
mem_fnv128hash()I
mem_fnv64hash()I
mem_pjw64hash()I
nfo_isconsole()I
nfo_ismode15khz()I
nfo_isprime()I
nfo_nearestprime()I
nfo_numdivisors()I
txt_bstrncat()I
txt_bstrnpcat()I
txt_strnvacat()I
txt_datdat()I
txt_fixquotes()I
txt_fnv128hash()I
txt_fnv64hash()I
txt_iniparse()I
txt_memcmp()I
txt_memfill()I
txt_needslash()I
txt_noansi()I
txt_nocomment()I
txt_parseline()I
txt_pjw64hash()I
txt_psnprintf()I
txt_quickhash()I
txt_skipcc()I
txt_strchr()I
txt_strcmp()I
txt_strcspn()I
txt_stripansi()I
txt_strlen()I
txt_strncat()I
txt_strnpcat()I
txt_strspn()I
txt_strstr()I
txt_strtok()I
txt_tokenify()I
txt_vcbpsnprintf()I
txt_vpsnprintf()I



H
A
N
_
T
E
R
M
I
F
H
(
)

SOURCE: qdev_autodocs.txt 1.163 (12/09/2014) English

                                 AMIGA - HAN_#?
 ----------------------------------------------------------------------------

   NAME

      han_termifh() - Read/write capable virtual terminal
                      handler for use with 'mem_openifh()'.



   SYNOPSIS

      osigs = han_termifh(sigs, id);

      __saveds __interrupt ULONG han_termifh(
                                register ULONG __asm("d0"),
               register struct mem_ifh_data * __asm("a1"));



   FUNCTION

      This handler emulates 'console.device' entriely in
      memory. It is the most advanced packet handler of all
      handlers in this library.



   INPUTS

      sigs - Current signals.

      id   - Handler exception data.



   RETURNS

      Returns the 'sigs' back to 'exec'.



   BASES

      SysBase



   NOTES

      This handler requires special preparation before it
      can be used. You must 'mem_allocterm()' first of the
      size you want and pass the resulting pointer in 1st
      argument of 'mem_openifh()' setting 2nd arg. to 0.

      With 'SetMode()' you can switch between DSR and the
      terminal area. So that when you need to get CPR you
      select QDEV_HAN_SMTERM_POS, but when you require to
      read terminal, QDEV_HAN_SMTERM_TERM.

      Call 'Seek()' with OFFSET_BEGINNING so you can req.
      any byte within the terminal. All counting from top
      of course. Please note that sequences may appear in
      the buffer first!

      Call 'Seek(<fd>, 0, 0);' to set cursor at the top of
      the read area and to request optimized feed. Chunks
      of text will be positioned with extra ESC[#;#H seqs.
      No need to worry about cursor position in the real
      terminal! This mode does not allow particular byte
      to be requested.



   SEE ALSO

      mem_openifh(), mem_closeifh(),
      han_rollifh(), han_binaryifh(), han_rwifh()



   EXAMPLE

      ...

      void *term;
      LONG read;
      LONG fd;
      UBYTE buf[128];

      if ((term = mem_allocterm(80, 25, -1)))
      {
        if ((fd = mem_openifh(term, 0, han_termifh)))
        {
          FPrintf(fd, "\x1B[10;10HHello World!");

          /*
           * Clear real terminal before reading virtual
           * one.
          */
          Write(Output(), "\x1B" "c", 2);

          /*
           * Request terminal area access. Normally this
           * is DSR feedback.
          */
          SetMode(fd, QDEV_HAN_SMTERM_TERM);

          /*
           * Set to the first byte. Data comming from fd
           * are full terminal dump!
          */
          Seek(fd, 0, OFFSET_BEGINNING);

          while ((read = Read(fd, buf, sizeof(buf))) > 0)
          {
            Write(Output(), buf, read);
          }

          /*
           * The very last virtual terminal byte is NULL
           * mostly thus the need for LF!
          */
          Write(Output(), "\n", 1);

          mem_closeifh(fd);
        }

        mem_freeterm(term);
      }



   BUGS

      Following sequences are not implemented because i do
      not really know how they work...
      ;
      ESCH        HTS    HORIZONTAL TABULATION SET
      ESC[#W  n   CTC    CURSOR TABULATION CONTROL
      ESC[#g  1-  TBC    TABULATION CLEAR

      Following sequences are implemented at abs. minimum:
      ;
      ESC[#n  1-  DSR    DEVICE STATUS REPORT(6/CPR)

      Most private Amiga sequences are not recognized and
      will not be implemented most probably. The only priv
      Amiga sequence implemented is:
      ;
      ESC[ s  0   aSDSS  SET DEFAULT SGR SETTINGS

      Beware there is something wrong with color handling,
      but i was not able to investigate yet. The bug shows
      up when colors were requested before cursor going to
      be put before current position. The background that
      was of certain color is destroyed...

      Interesingly or not 'console.device' V39+ has probs
      handling 'ESC[#@' sequence properly. The memory will
      be trashed and the machine may/will crash whenever
      the cursor is at the end of line and char + 1 is to
      be inserted. Use this from CLI: echo "*e[A*e[D*e[2@"
      to reproduce the bug.



 ----------------------------------------------------------------------------
    


No more fear cus pure HTML is here!
Copyright (C) 2013-2014 by Burnt Chip Dominators