diff --git a/qterm/files/!README.1ST b/qterm/files/!README.1ST deleted file mode 100644 index 779854c..0000000 --- a/qterm/files/!README.1ST +++ /dev/null @@ -1,120 +0,0 @@ -QTERM v4.3f - Recompile of 43e including 2 files from QT43EFIX.LBR - -QTERM V4.3e is dedicated to the memory of Irv Hoff - a programmer who was -a constant insipration while I was developing QTERM. Let us never forget -the work he did for the CP/M community. - - -Files included in QTERM43F.LBR: (QTERM43E.LBR) - -!README.1YT You are -QTCHAT.DYC QTERM chat scripts documentation -*QTERM.CYM QTERM, unpatched -QTERM.DYC QTERM documentation -QTERM.FOR Quick description of what QTERM can do for you -QTERM.PYT Patch information for QTERM -*QT-PATCH.ZY Patch area source, to provide a basis to work with -WHATS.NYW Upgrade list of what's changed since V4.2g - -(* files not included in this LBR) - -Additional files here: -*************************************************************************** -Adam files: --QT-ADAM.4YF Notes on the Adam files here and using DDTZ -QTERM43F.CYM Qterm patched for the ADAM with an 80 col display - (use for replacement of the unpatched version) -QT42G-AD.PYT Adam specific patch for Qterm 4.2g (usable on 4.3f) -QT-ADAM.ZY Adam 80 Col patch for Televideo for ZSM/ZPATCH -QT-ADM40.ZY Adam 40 Col patch for ZSM/ZPATCH - --README.FYX Fix for 43E to 43F -QTZP.DYC Documentation on using ZSM and ZPATCH -ZSM.CYM Z80 assembler for .Z files -ZPATCH.CYM Hot Patcher for .Z/.O files -DDTZDDT.CYM DDTZ patched for DDT compatible commands - -I apologise to David Goodenough for changing his -README and LBR listing -and hope he approves of the changes.. since this is for the ADAM CP/M LIB -on CompuServe and ADAM users. Rob Friedman - 6/9/91 - Sysop ADAM CP/M - CompuServe Computer Club - -Note: files listed in the normal 43E not here are *'d. Also, This -set of files includes notes from the 43E-FIX Library as well as -some info. This file is set up as 43F. -************************************************************************** - - -Patch info for making QTERM work on your system is included in QTERM.PAT. -As provided, QTERM will work on a Televideo 803 (or a TPC-1), because -that's what I developed it on. Note that not all the patches are -necessary, but the more optional ones you get going, the more features -QTERM will have. QTERM.PAT also includes a reference to a "1K patch -overlay". I'm trying to collect as many of these as possible, so if you -can, try to get yours back to me, with a memo telling which computer it -works on, and which of the optional patches you have included. - - -The .?Y? files are made with the new LZH compression method, this typically -produces files 10 to 15 to 20 % smaller than CRUNCH. EXL.COM (in EXL.LBR) -is one tool that will decompress these, or CRLZH11.LBR is the original -.LBR for LZH compression. - - -For those that are interested, the name actually arose because in mid 1985 -I needed a terminal program for my CP/M machine (A Televideo 803) and -put a quick 1/2K program together in under an hour. This program has been -growing ever since, but the name Q(uick) TERM(inal) program remains. - - -I give thanks to Dave Goodman, Tom Bopp, Larry Moore, Dave Presberg, Andy -Meyer, David Douthitt, Mitch Mitchell and Jim Bianchi for all their help -in debugging and beta testing QTERM, and to all the other people who have -sent in patches and suggestions. I'd never have got it anything like -working and as full featured without all your help. - - -Credit is also due the unknown author of the UNIX Kermit implementation -that I used for the basis of the Kermit code here, and to Steve Grandi -who wrote the Xmodem program in C that provided the basis for the Xmodem -code in QTERM. - - -If you need to get hold of me for any reason (need help with patches, or -a patch file to send my way), I can be reaced at: - -UUCP: .....!wet!pallio!dg -Internet: dg%pallio.uucp@cs.sfsu.edu -GEnie: D.GOODENOUGH -Q-Link: Delta G -BBS's: DAVID GOODENOUGH on all of them - (617) 965-7046 - (707) 539-1283 - (415) 654-3798 - (415) 755-2030 - -Or log into wet.UUCP at (415) 864-0954, and send me E-mail as dg once -you get set up. - - -David Goodenough (5-3-91) - - -A few notes: - -Take a look in WHATS.NEW to see what has changed since V4.2g - -QTERM V4.2 style patches will still work with QTERM V4.3e - -VT100.TC got dropped since it's no longer needed - see WHATS.NEW for details - -Since I've had several requests over the years to release the source, it - has been released. Modify it if you want, but please check back - with me before you release a version, and let me know what changes - you made, if they're useful I may put them into the next version. - As a side note to this, if you come across a version, and you are - not sure if it's been modified, check with me and I can give you - the correct CRCK values for the original V4.3e. - \ No newline at end of file diff --git a/qterm/files/--READ.1ST b/qterm/files/--READ.1ST deleted file mode 100644 index 2f3ab3e..0000000 --- a/qterm/files/--READ.1ST +++ /dev/null @@ -1,4 +0,0 @@ -The files with the extension .?Y? are LZH Encoded. The program -UNCRLZH v2.0 or LT30 (or later version of these programs) are -required to decode them. - \ No newline at end of file diff --git a/qterm/files/-QT-ADAM.43F b/qterm/files/-QT-ADAM.43F deleted file mode 100644 index 6e2bed2..0000000 --- a/qterm/files/-QT-ADAM.43F +++ /dev/null @@ -1,73 +0,0 @@ - -NOTES ON ADAM VERSION - -Included here is the Qterm 4.3f for the Adam with an -80 col. display and an external modem. I have used -the codes for my TeleVideo 925 terminal, as they are -similar to the ADM3A that a lot of you use. To change -the screen codes is a simple matter. Use SPZ -on a COPY of the program, and go to the 3rd page . You will see a grouping of ESCape codes <1B -28, 1B 29, etc>. Using the Qterm.Pat as a guide, plug -in your screen codes in those 8 positions -Also included is the QT42-AD.PAT for using DDT or DDTZ -to install your own Qterm. See the QTERM.PAT for -installing with DDT. For DDTZDDT use the I command, and the R command. DDTZDDT -is DDTZ patched to use DDT commands. It is included here. - -Also, I've included the QT-ADAM.Z and the QT-ADM40.Z -ZSM/ZPATCH files. Be aware that the patches for 42G work -on 43F. Both are by QTERM author Dave Goodenough. The -QT-ADAM.Z is set up for a Televideo screen, so you will -have to edit it for the proper escape codes for your -own screen. QT-ADM40.Z is set up for a standard 40-col -under TDOS. See the QTZP.DOC for usage of ZSM and ZPATCH - - Rob Friedman - Sysop ADAM CP/M - CompuServe Computer Club Forum - 3-25-90 - -I can be reached nightly on Compuserve's Computer Club forum -with the User I.D. 76702,417 - - -Additional files here: -*************************************************************************** -Adam files: --QT-ADAM.4YF Notes on the Adam files here and using DDTZ -QTERM43F.CYM Qterm patched for the ADAM with an 80 col display - (use for replacement of the unpatched version) -QT42G-AD.PYT Adam specific patch for Qterm 4.2g (usable on 4.3f) -QT-ADAM.ZY Adam 80 Col patch for Televideo for ZSM/ZPATCH -QT-ADM40.ZY Adam 40 Col patch for ZSM/ZPATCH - --README.FYX Fix for 43E to 43F -QTZP.DYC Documentation on using ZSM and ZPATCH -ZSM.CYM Z80 assembler for .Z files -ZPATCH.CYM Hot Patcher for .Z/.O files -DDTZDDT.CYM DDTZ patched for DDT compatible commands - -I apologise to David Goodenough for changing his -README and LBR listing -and hope he approves of the changes.. since this is for the ADAM CP/M LIB -on CompuServe and ADAM users. Rob Friedman - 6/9/91 - Sysop ADAM CP/M - CompuServe Computer Club - -Note: files listed in the normal 43E not here are *'d. Also, This -set of files includes notes from the 43E-FIX Library as well as -some info. This file is set up as 43F. -************************************************************************** - - \ No newline at end of file diff --git a/qterm/files/-README.FIX b/qterm/files/-README.FIX deleted file mode 100644 index ef970e2..0000000 --- a/qterm/files/-README.FIX +++ /dev/null @@ -1,33 +0,0 @@ - [-READ.ME Mike Freeman 12-May-1991] -This file contains two patches, QT43EFX1.Z and QT43EFX2.Z, each of which -fixes a bug in QTERM.COM Version 43E (from QTERM43E.LBR) which caused sends -using True Ymodem protocol to fail. QT43EFX1.Z was suggested by QTERM's -author, David Goodenough and will, when patched over v43E of QTERM.COM, -correct the bug. MODEM7 batch transfers will no longer work. QT43EFX2.Z, -when patched over v43E of QTERM.COM will correct the same bug and allow -MODEM7 batch transfers to work. It uses a small fraction of QTERM's patch -area (from 0x04e0 to 0x04e7, inclusive). Thus, those who have QTERM patches -which extend into this region should use QT43EFX1.Z instead. Also included -in this archive is a corrected version of the appropriate QTERM source -module, SEND.Z. This is being done with the permission of QTERM's author, -David Goodenough. QTERM's version parameter "include-file", VERSION.I, is -also included with the revision level bumped to "F". This is in line with -Mr. Goodenough's wishes. Happy patching! --- Mike Freeman K7UIJ -- - [End of -READ.ME] - -Addition by D. Goodenough, 5/22/91 - -QT43EFX2.Z as provided by Mike Freeman needed a little work: ZPATCH gets -confused if .org's in a ZSM source file go backwards. This means that I -had to put the low code (0x04e0) first. It'll work now. - -Addition by R. Friedman, 6/9/91 - -I've renamed this little file -README.FIX and included it in a -new LBR called QTERM43F. I used the newer source modules from -Mike Freeman's FIX.LBR and the Qterm 43E source code from Dave -Goodenough's source LBR, and recompiled it to make 43F. Hence, no -need for the Fix.Z. So.. it is all better and running like a top! - - \ No newline at end of file diff --git a/qterm/files/DDTZDDT.COM b/qterm/files/DDTZDDT.COM deleted file mode 100644 index 0aec159..0000000 Binary files a/qterm/files/DDTZDDT.COM and /dev/null differ diff --git a/qterm/files/QT-ADAM.Z b/qterm/files/QT-ADAM.Z deleted file mode 100644 index a5b0887..0000000 --- a/qterm/files/QT-ADAM.Z +++ /dev/null @@ -1,253 +0,0 @@ -; QT-ADAM.Z - QTERM patch area for the Coleco ADAM -; -; Version 1.0 - -.var no 0 ; false value -.var yes 0xff ; true value - -.var datap 0x44 -.var statp 0x45 -.var baudp 0x46 -.var ctrlp 0x47 - -.var rxrdy 2 -.var txrdy 1 - -.var break 0x3f -.var dtr 0x3d -.var norm 0x37 - -.org 0x0110 ; modem input status -modist: in a,(statp) - and rxrdy - ret - -.org 0x0120 ; modem input -modin: in a,(datap) - ret - -.org 0x0130 ; modem output status -modost: in a,(statp) - and txrdy - ret - -.org 0x0140 ; modem output -modout: out (datap),a - ret - -.org 0x0150 -sbreak: ld a,break - out (ctrlp),a - ret - -.org 0x0160 -ebreak: ld a,norm - out (ctrlp),a - ret - -.org 0x0170 -dtroff: ld a,dtr - out (ctrlp),a - ret - -.org 0x0180 -dtron: ld a,norm - out (ctrlp),a - ret - -.org 0x0190 -setbd: jp finbd - -; The Baud Rate Table has entries from 38400 baud down to 300 baud. -; There are 2 bytes per entry. The second byte determines if the entry is -; enabled or disabled (ffh=enabled; 00=disabled). The first byte is passed -; as the A value to the setbd subroutine. - -.org 0x01a0 -baudtb: -b38400: db 0,no ; 38400 -b19200: db 0x3f,yes ; 19200 -b9600: db 0x3e,yes ; 9600 -b4800: db 0x3c,yes ; 4800 -b2400: db 0x3a,yes ; 2400 -b1200: db 0x37,yes ; 1200 -b600: db 0x36,yes ; 600 -b300: db 0x35,yes ; 300 - -.org 0x01b0 -setmod: jp finmod - -; Communication Mode Table. - -.org 0x01c0 ; communication mode table -modetb: -n17: db 0x4a -n18: db 0x4e -n27: db 0xca -n28: db 0xce -e17: db 0x7a -e18: db 0x7e -e27: db 0xfa -e28: db 0xfe -o17: db 0x5a -o18: db 0x5e -o27: db 0xda -o28: db 0xde - -.org 0x01cc -resrvd: db 0 ; reserved for later use - -.org 0x01cd ; protocol transfer size -xfersz: db 8 ; number of K to read/write during file xfers - ; Must be 1 / 2 / 4 / 8. Best left as 8 unless - ; disk is verrrrry slow. Drop to smaller value - ; if too many timeouts occur during "protocol" - ; file transfers (xmodem or kermit). - -.org 0x01ce ; processor speed -speed: db 4 ; cpu speed in Mhz; - -.org 0x01cf ; escape character -escape: db '\e' - -.org 0x01d0 ; signon message -signon: db 'Adam w/80col & RS232\0' - - -.org 0x01f0 ; clear screen -clrs: db 'z' & 0x1f, 0 ; clear screen string is Control-Z - -.var scrout 0x0109 ; (a routine to print to CON: the - ; character in C) -.var decout 0x010c ; (a routine to print to CON: a decimal value - ; in HL. Is available for VT100 and the like.) - -.org 0x0200 ; moveto routine -moveto: push hl ; save row,col - ld c,'\e' ; send escape - call scrout - ld c,'=' ; send = - call scrout - pop hl ; get row,col - ld de,0x2020 ; add offset - add hl,de - push hl ; and save - ld c,h ; send row+offset - call scrout - pop bc ; get col+offset - jp scrout ; send - -; Terminal Capability Bits. The eight bits stand for each of the following -; strings. They count from 01h=bright to 80h=clear-to-end-of-screen. - -.var b_brit 0b00000001 ; 0: bright -- NOT mandatory -.var b_dim 0b00000010 ; 1: dim -- NOT mandatory -.var b_ldel 0b00000100 ; 2: delete line -- important -.var b_lins 0b00001000 ; 3: insert line -- important -.var b_cdel 0b00010000 ; 4: delete character -- unused by QTERM -.var b_cins 0b00100000 ; 5: insert character -- unused by QTERM -.var b_ceol 0b01000000 ; 6: clear to end-of-line -- important -.var b_ceos 0b10000000 ; 7: clear to end-of-screen-- important - -.org 0x022f ; terminal capability bit map -tcbits: db 0xff ; ff = support all bits - -.org 0x0230 -brites: db '\e(\0' ;bright - -.org 0x0238 -dims: db '\e)\0' ;dim - -.org 0x0240 -dlstr: db '\eR\0' ;delete line - -.org 0x0248 -ilstr: db '\eE\0' ;insert line - -.org 0x0250 -dcstr: db '\eW\0' ;Delete character - -.org 0x0258 -icstr: db '\eQ\0' ;Insert character - -.org 0x0260 -ceol: db '\eT\0' ;Clear to end of line - -.org 0x0268 -ceos: db '\eY\0' ;Clear to end of screen - -; Entry and Exit hooks. These are provided to perform custom initialisation -; on startup and on exit from QTERM. They are invoked before any use is made -; of the screen or the port hardware. - -.org 0x0270 -entry: jp do_ent ; entry hook (270h .. 272h) - -.org 0x0273 -exit: jp do_exit ; exit hook (273h .. 275h) - -.org 0x0276 -user: ret ; user subroutine (276h .. 278h) - -.org 0x0279 -kbmap: ret ; keyboard map (279h .. 27bh) - -.var ilprmt 0x027c ; entry to in line prompt subroutine. - -; Extra patch area if needed. 280h .. 4ffh - -.org 0x0280 - -finbd: - ld b,a - in a,(baudp) - ld c,a - in a,(baudp) - ld a,0x22 - out (ctrlp),a - ld a,c - out (baudp),a - ld a,b - out (baudp),a - ld a,0x27 - out (ctrlp),a - ret - -finmod: - ld b,a - in a,(baudp) - in a,(baudp) - ld c,a - ld a,0x22 - out (ctrlp),a - ld a,b - out (baudp),a - ld a,c - out (baudp),a - ld a,0x27 - out (ctrlp),a - ret - -do_ent: - ld e,0x19 - ld c,2 - call 5 - in a,(baudp) - ld b,a - in a,(baudp) - ld a,b - or a - ret nz - ld a,(n18) - call setmod - ld a,(b2400) - call setbd - ret - -do_exit: - ld e,0x19 - ld c,2 - call 5 - ret - - \ No newline at end of file diff --git a/qterm/files/QT-ADM40.Z b/qterm/files/QT-ADM40.Z deleted file mode 100644 index cfa19e7..0000000 --- a/qterm/files/QT-ADM40.Z +++ /dev/null @@ -1,251 +0,0 @@ -; QT-ADM40.Z - QTERM patch for the Coleco ADAM, w/ 40 columns - -.var no 0 -.var yes ! no - -.var datap 0x44 ; data port (in/out) -.var statp 0x45 ; status port (in) -.var contlp 0x47 ; control port (out) -.var baudrp 0x46 ; baud rate port (out) -.var inmsk 2 ; 8251 RxRDY -.var outmsk 1 ; 8251 TxRDY -.var chipset 0x37 ; 8251 RTS,ER,RxE,DTR,TxEN -.var chipoff 0x35 ; 8251 RTS,ER,RxE,TxEN (no dtr) -.var break chipset | 8 ; chipset OR send break -.var freeze 0x22 -.var reset 0x27 - -; Misc variables - -.var scrout 0x0109 ; output char in (QTERM) -.var decout 0x010c ; output decimal value in (QTERM) - -; Modem input status. 110h-11fh. - -.org 0x0110 -istat: in a,(statp) - and inmsk - ret - -; Read modem character. 120h-12fh. - -.org 0x0120 -idata: in a,(datap) - ret - -; Modem output status. 130h-13fh. - -.org 0x0130 -ostat: in a,(statp) - and outmsk - ret - -; Write modem character. 140h-14fh. - -.org 0x0140 -odata: out (datap),a - ret - -; Break. Start break 150h-15fh; end break 160-16fh. - -.org 0x0150 -brkon: ld a,break - out (contlp),a - ret - -.org 0x0160 -brkoff: ld a,chipset - out (contlp),a - ret - -; Dtr. Drop dtr 170h-17fh; restore dtr 180h-18fh. - -.org 0x0170 -dtroff: ld a,chipoff - out (contlp),a - ret - -.org 0x0180 -dtron: ld a,chipset - out (contlp),a - ret - -; Baud rate. Routine 190h-19fh; table 1a0h-1afh. - -.org 0x0190 -brset: - jp finbd - -.org 0x01a0 -brtbl: -b38400: db 0,no ; 38400 -b19200: db 0x3f,yes ; 19200 -b9600: db 0x3e,yes ; 9600 -b4800: db 0x3c,yes ; 4800 -b2400: db 0x3a,yes ; 2400 -b1200: db 0x37,yes ; 1200 -b600: db 0x36,yes ; 600 -b300: db 0x35,yes ; 300 - -; Mode. Routine 1b0h-1bfh. - -.org 0x01b0 -modset: jp finmod - -; Mode. Table 1c0h-1cbh. 8251 mode byte, sets stop bits, parity, - -.org 0x01c0 -modtbl: -n71: db 0b01001010 ; 7n1 ; this table must be -n81: db 0b01001110 ; 8n1 ; exactly 12 bytes long -n72: db 0b11001010 ; 7n2 -n82: db 0b11001110 ; 8n2 -e71: db 0b01111010 ; 7e1 -e81: db 0b01111110 ; 8e1 -e72: db 0b11111010 ; 7e2 -e82: db 0b11111110 ; 8e2 -o71: db 0b01011010 ; 7o1 -o81: db 0b01011110 ; 8o1 -o72: db 0b11011010 ; 7o2 -o82: db 0b11011110 ; 8o2 - -; Miscellaneous one byte values. - -.org 0x01cc - db 0 ; reserved for future use - -.org 0x01cd - db 8 ; 1cdh - size of xfer buffer - -.org 0x01ce - db 4 ; 1ceh - cpu clock speed - -.org 0x01cf - db '\e' ; 1cfh - escape character - -; Signon message. 1d0h-1efh - -.org 0x01d0 - db '\ex9\nColeco ADAM 40 Col W/-RS232\0' - -; Clear screen string - -.org 0x01f0 - db 'z' & 0x1f, 0 - -; Moveto - move the cursor - -.org 0x0200 -moveto: push hl ; save row,col - ld c,'\e' ; send escape - call scrout - ld c,'=' ; send = - call scrout - pop hl ; get row,col - ld de,0x2020 ; add offset - add hl,de - push hl ; and save - ld c,h ; send row+offset - call scrout - pop bc ; get col+offset - jp scrout ; send - -; tcbits - what terminal capabilities are present - -.org 0x022f - db 0xff - -.org 0x0230 - db '\eq\0' - -.org 0x0238 - db '\ep\0' - -.org 0x0240 - db '\eM\0' - -.org 0x0248 - db '\eL\0' - -.org 0x0250 - db 0x97,0 - -.org 0x0258 - db 0x94,0 - -.org 0x0260 - db '\eK\0' - -.org 0x0268 - db '\eJ\0' - -.org 0x0270 - jp entry - -.org 0x0273 - jp exit - -.org 0x0276 - ret - -.org 0x0279 - ret - -.org 0x0280 -finbd: - ld b,a - in a,(baudrp) - ld c,a - in a,(baudrp) - ld a,freeze - out (contlp),a - ld a,c - out (baudrp),a - ld a,b - out (baudrp),a - ld a,reset - out (contlp),a - ret - -finmod: - ld b,a - in a,(baudrp) - in a,(baudrp) - ld c,a - ld a,freeze - out (contlp),a - ld a,b - out (baudrp),a - ld a,c - out (baudrp),a - ld a,reset - out (contlp),a - ret - -entry: - ld e,0x1a - ld c,2 - call 5 - in a,(baudrp) - ld b,a - in a,(baudrp) - ld a,b - or a - ret nz - ld a,0x4e - call 0x01b0 - ld a,0x37 - call 0x0190 - ret - -exit: - ld e,0x19 - ld c,2 - call 5 - ld c,9 - ld de,exitstr - jp 5 - -exitstr: - db 'z' & 0x1f, '\ey9$' - \ No newline at end of file diff --git a/qterm/files/QT42G-AD.PAT b/qterm/files/QT42G-AD.PAT deleted file mode 100644 index 72341dd..0000000 Binary files a/qterm/files/QT42G-AD.PAT and /dev/null differ diff --git a/qterm/files/QTCHAT.DOC b/qterm/files/QTCHAT.DOC deleted file mode 100644 index d4668fc..0000000 --- a/qterm/files/QTCHAT.DOC +++ /dev/null @@ -1,650 +0,0 @@ -QTERM chat scripts -================== - -A chat script is a means for getting QTERM to automatically send and -receive text, this can be used to auto-dial, connect to remote systems, -log in to them, and do whatever else is wanted. In addition, chat scripts -have a number of commands available, to do such things as protocol sends -and receives, transfer of text files, and many other things. - -There are two ways of invoking a chat script. Firstly when QTERM is -executed from CP/M, a chat script and parameters can be provided there: - - A>QTERM SCRIPT 1200 - -would be an example, alternatively the ^\ X command will prompt for a -filename, the response can be exactly the same: - - Filename: SCRIPT 1200 - -will have the same effect. - -QTERM will look in several places to try to find the script. The first -thing it will do is to take the filename as given (subject to the -current default drive/user, which may have been changed by the !n or -^\ N commands). If this is not successful, QTERM then searches the -drive/user area that was active when it first started. It should be -noted that if the entry subroutine includes BDOS calls to change either -the drive or user, then the values rememberd by QTERM will be those on -return from the entry subroutine. This provides a mechanism for setting -up a default script area, a place where QTERM will always try to find -scripts. In addition, if it can't find the script as a file in the -default script area, QTERM will look for a .LBR file /QTERM.LBR and -see if this library contains the script. The reason behind this is that -scripts tend be fairly small, and it is far more efficient to keep them -all together in one .LBR, since this saves disk space. It goes without -saying that QTERM cannot deal with squeezed or crunched scripts, they -must be saved in the .LBR as uncompressed ASCII text files. - -When a chat script is running it can be terminated prematurely by typing -^X on the keyboard: this will return to normal terminal mode. - -There are two types of lines in a chat script: send/expect lines, and -command lines. Command lines are always started with a '!' character, -any other character starts a send/expect line. - -Looking first at send/expect lines, they can contain up to six fields, -and the first two must be provided, even if they are empty. An example -of such a line is: - - -AT\r-OK\r\n-3-2-3-0- - -In this example the '-' (first character) is the delimiter used to -separate fields. Any character can be used except for '!', but whatever -character is chosen cannot appear in the strings. Also note that -chosing a delimiter from the characters above 'z' in the ASCII character -set (i.e. '{', '|', '}', and '~') has a special effect, which is explained -below. Taking the fields in order they are SEND, EXPECT, TIME, TRIES, -SUCCESS, and FAIL. SEND is a string that is transmitted by QTERM, so in -the example above QTERM would transmit 'AT'. As was noted -above, delimiters above 'z' have a special effect: they cause the SEND -string to be written out slowly: there is a tenth of a second delay -after each character. EXPECT is a string that QTERM is looking for in -response to it's SEND string: so in the above example, QTERM would be -looking for the 'OK' that a Hayes compatible -modem would respond with, when presented with 'AT'. - -The remining four fields are all decimal numbers, and can be omitted -as QTERM will provide default values. TIME is the number of seconds -to wait before assuming failure, if not given it defaults to 15. TRIES -is the number of times to retry on failure, so taking our first example, -TRIES is 2. If QTERM matched the EXPECT string on the first sending of -SEND, all is well, but on the first failure it would resend the SEND string -and look for the EXPECT string a second time. If it failed on this second -attempt, only then would it consider this line to have failed. SUCCESS -specifies the line number to transfer to in the chat script if it matched -the EXPECT string. The default for this is the line following the current -line. FAIL is the line to transfer to if the EXPECT string is not -matched. This can be a line in the chat script, or as shown above 0 is -allowed, which terminates the script immediately. - -In the example above, the success and fail values are given as simple -line numbers, it is also possible to use labels in chat scripts, see !: -below for an explanation of how to define a label. If a label is being -used, the line might look like this: - - -ATDT5551234\r-CONNECT-30--`connect-`fail- - -In this case, the `connect and `fail are label usages, and cause transfer -to wherever the corresponding label is. Label useage is introduced with the -backquote character `, which must be followed by the label itself, with no -intervening white space: -` connect- will not work. Using an undefined label -does not directly cause an error, but the substitution of the non-existant -label will usually create a line that cannot be parsed, thus flagging the -error. - -In another example, if the first line were: - - -AT\r-OK\r\n--5- - -since TIME is empty, it defaults to 15, but as TRIES is 5, this line -would try five times before giving up. Note also from this example -that there are two ways of causing QTERM to default a value: an empty -field (TIME) or end of the string (SUCCESS and FAIL). Note that the -closing '-' after the 5 for TRIES is necessary. On the basis of this, -the absulute minimum line is: - - -send-expect- - -This uses all four defaults: 15 seconds timeout, 1 try, success goes to -the next line, failure terminates the script. The idea behind these -defaults is that a collection of simple send/expect lines like the above -allow a "conversation" to be held with the remote system. - -It is possible that either of SEND or EXPECT can be empty: an empty SEND -causes nothing to be sent, but the EXPECT must be matched to continue; -an empty EXPECT automatically matches. Note that if both are empty then -the chat script will terminate when it reaches that line, so a line like: - - --- - -will serve as a means to terminate a chat script, returning to terminal -mode. - -Command lines in chat scripts start with '!', and following the '!' is -a command letter. If input is needed (e.g. for a '!b' or '!s' line) -it should be placed after the command letter: - - !b 1200 8n1 -5 30 500 +\x13\x11 - -As is shown in the above example, spaces are permitted after the command -letter, but not before. - -Several of the ! commands correspond to ^\ commands available from terminal -mode: the !b above would set the baud rate etc., just like the corresponding -^\ B command would. - -Commands available in this group are: - -!, hangup -!. break -!B set baud rate -!E set local echo -!H set half duplex -!J toggle junking of control characters -!L set linefeed send for 'P' -!M set bit 7 mask -!N select new drive/user -!O toggle output to the printer -!V toggle VT100 emulation -!W toggle split window mode -!K program function key -!P print file to remote -!U invoke user function -!R protocol receive -!S protocol send -!C open catch file -!Y put catch file on hold -!Z close catch file -!X activate chat script -!Q exit QTERM - -Note also that the toggles ('!E', '!H', '!J', '!L', '!M', '!O', '!V' and '!W') -behave a little differently. Since the state of these toggles is not defined -when a chat script starts, with one exception (!W) there are three ways of -invoking these. Using '!H' as an example: - - !h - -behaves as would an 'H' in normal operation, i.e. it toggles -the half duplex switch. However, if the following is given: - - !h 1 - -the trailing '1' forces half duplex to be enabled, irrespective of -it's original state, and: - - !h 0 - -guarantees to turn half duplex off. The other toggles work in the same -manner: a trailing '0' always disables, and a trailing '1' always -enables. !W is a little different, in that there are three possibilities: -window mode off, window mode on with big receive, and on with small. Also -allowing a pure toggle could have undefined results, since if window mode -were toggled on, there would be no indication what size was wanted. As -a result of this, there are three forms for the !W command in a script: - - !w 0 - -forces window mode off, - - !w b - -forces it on with a big receive window, and: - - !w s - -forces it on, but with a small window. With all these toggles (!h etc. and -!w) the options above are guaranteed, using any other option letters will -have undefined results. - -The 'X' command to activate a chat script can be used to chain scripts -together: when an 'X' is encountered the specified chat script is -invoked, however the current script is lost: it is overwritten by the -new one. - -There are other commands that are not normally available are as follows: - - -!: - Define a label. Label usage was described above: the '`' character -introduces a label usage. NOTE that this is the BACKQUOTE character, not -the usual single quote character. To define a label, simply include a -line of the form: - -!: connect - -in the script. A few comments may make labels easier to use, firstly -they cannot be longer than seven characters, and where they are defined -there should be no trailing blanks. When a label is used, it is done by -means of a simple text substitution: after seeing a '`' character, QTERM -tries to match the following text with a label in the script, and it -stops at the first match. So if you have two labels one of which is a -prefix of the other, the results can be unpredictable. As a byproduct -of this, undefined labels do not generate an error (they just become -line zero), but the text substitution doesn't remove the label, so the -resulting line usually generates an error. In the event that a '`' -character is needed as part of a send or expect string, it can be -escaped by preceeding it with a $, so the line: - - .send.exp$`ect. - -will look for exp`ect, whereas: - - .send.exp`ect. - -will not work, it would try to look for and substitute the label 'ect'. -Since '$' is used to escape '`', it must also be used to escape itself, -so to match the string XXX$YYY, the script line would need to be: - - .send.XXX$$YYY. - -Labels should always be used to transfer control in a script: when a -script is being read in, comments and blank lines are stripped very -early in the process. This means that a given line in the script file -may have a different line number as far as QTERM is concerned. Labels -bypass this problem, so their usage is highly recommended. - - -The commands !@ and !# can be used for variable manipulation. Their -main purpose is to prevent infinite loops in chat scripts. In the -following example: - - !: reset - .AT\r.OK\r\n.5.5. - .ATDT5551212\r.CONNECT.30..`connect.`reset. - !: connect - . ........ - -if the system being called is off line and not answering, QTERM will -loop here for ever. The !@ and !# provide the ability to keep count and -terminate the loop after some specified number of tries. - - !@ var term +/- term - -is the form of an @ line. var is a single letter variable (there are 26 -available: a through z), and term is either a number or a variable. This -is very simplistic, in that two terms must be present: to set a variable -simply say something like: - - !@ a 5 + 0 - -the operator can be either + or - and they act as you would expect. so: - - !@ a a - 1 - -will subtract 1 from a, or: - - !@ a a + b - -will add b to a, etc. etc. Note that variables are recognised in either -upper or lower case: - - !@ A a + B - -would have exactly the same effect as the line above. Note that these are -single bytes, so there is some risk of working with values above 255. - -!# tests variables: the general syntax is: - - !# var operator term line - -where var is a variable letter, term is a variable or a number, and the -operator can be '=' to test for equality, '#' to test for inequality, '<' -to check for less than and '>' to test for greater than. line is simply -the line number in the script to go to is the test succedes. Note that this -also provides a goto capability: - - !# a = a `doit - -will always go to doit, since a is always equal to itself. - -All variables are initialized to zero when the first script in a series is -invoked, but values are retained when a !x command chains from one script -to another. - - -In addition to !@ and !# which set and test numeric variables, there are two -corresponding commands which set and test string variables. !$ and !% will -set and test strings. A line like: - - !$ a This is a string - -will put 'This is a string' into string variable a. Note that when a script -is started, or chained to with a !x command, the first nine parameters -become strings $1 through $9. These can be assigned to only if they are not -set when the script is invoked. The reason behind this is that if the -command line parameters are set with default values at the top of the script, -then missing parameters can be dealt with. An example might be a script -where the first parameter provides the baud rate, if it's invoked as: - - SCRIPT 1200 - -then $1 will contain '1200', however if the following line appears in the -script: - - !$ 1 2400 - -this will not disturb the 1200 in the case above, however if the script -is invoked with no parameters, then $1 will be empty initially, and the -assignment will put 2400 into it. String variables are used simply by -naming them, so to use $1 in this case, a line like: - - !b $1 8n1 - -would set the baud rate as needed. In a similar manner, numeric variables -can be used simply by naming them: - - -Send @a\r-expect- - -would have the @a expanded to whatever the current value in variable a is. - -As is done with labels, $a string use and @a variable use is handled by -simple text substitution, so a little care will make their use easier. -As was described above, '$' is used to escape '`' characters in strings, -it is also used to escape itself, and it can also be used to escape an -'@' character in a string. So, to actually place a '$' character in a -string say '$$', so that: - - .send.exp$$ect. - -would look for the string 'exp$ect'. There are only three things that -can follow a '$' sign: either '$' or '`' for escaping purposes, -and '1' through '9' and 'a' through 'z' for string substitution. -Placing any other character after a '$' will have an undefined result. - -To test a string variable the !% line can be used: there are three forms -this line takes: - - !% = .string1.string2. `label - !% _ .string1.string2. `label - !% # .string1.string2. `label - -The first one will jump to label if the two strings are equal, so to test -a string, a line like: - - !% = .$a.exit. `doexit - -would jump to label doexit if string variable a contained 'exit'. The second -case is identical, except that the test is done ignoring case, so if _ were -used instead of = in the example above, 'exit', 'Exit', 'EXIT', and 'eXiT' -would all test as equal. The last case jumps to the label if the two strings -are different. - - -Two commands exist to manipulate the appearance of chat scripts: - - !> This is a line of text\r\n - -!> simply prints the text, after processing '\' escapes. Note that -leading and trailing spaces are ignored, so the above case would start -with the 'T' of 'This'. In order to start or end with a with a space, -\x20 can be used. - - !& - -This command is actually three different commands rolled into one: -!& o manipulates the echoing of characters received from the modem -while the script is running: - - !& o 1 - -forces modem echo on, - - !& o 0 - -forces it off, and: - - !& o - -simply switches state. In the same manner, !& m controls printout of -the 'Match: OK' messages that are printed when QTERM matches the expect -string in a send/expect line, and the 'Fail' and 'Retry' messages as -well. These two are initially on when a script starts, the third case -is !% l which controls printout of 'Looking for: ' messages. When this -option is turned on, these messages are printed when QTERM starts -looking for the expect string. - - -As a complement to !>, the !< command can be used to take keyboard input, -and make decisions based on what happens. This includes two subcommands -altogether: - - !< - variable - -The '-' causes QTERM to prompt for a line of input using CP/M's BDOS -buffered command. The line is then in the named variable, and can later -be tested with !% lines. - -This allows for such things as multiple choice: - - !> \r\nSelect system to call\r\n - !> 1. System 1 ..... \r\n - !> 2. System 2 ..... \r\n - !> 3. System 3 ..... \r\n - !: prompt - !> Enter 1, 2 or 3:\x20 - !< - a - !% = .$a.1. `sys1 - !% = .$a.2. `sys2 - !% = .$s.3. `sys3 - !> Error, invalid input\r\n - !# a = a `prompt - -Where the first 4 lines print a menu, the next line defines a label. Then -comes a prompt, followed by an input command. After this, the line is -checked against 1, 2 and 3, and a jump is made to the appropriate label. -If there is no match an error message is printed, and the !# a = a line -is used as a goto, since a is always equal to a. - -In a similar manner, '!< . a' will provide a "hot key" input - this reads -a single keystroke from the keyboard, and saves the numeric value of the -key pressed in the named variable, where it can be tested with a !# line. - - -The ![ command provides a similar function to the !< command, but it -works on text coming from the modem. There are several different -sub-commands available: - - ![ - - -reads text from the modem. In this instance there are two ways that -reading can end: - - ![ - 15 - -would simply read text for 15 seconds. This numeric timeout must be -provided, but in addition up to four extra strings can be provided: - - ![ - 5 .string1.string2.string3.string4. - -in which case input will terminate when 5 seconds have elapsed, or one -of the four strings is read. In this line, the '.' following the 5 is a -delimiter, this serves to separate the strings exactly like the delimiter -in a send / expect line. Not all four strings need to be there: - - ![ - 5 .OK.ERROR. - -is acceptable, but the trailing delimiter must be there after the last -string. In addition to scanning for the four lines, QTERM keeps the last -sixty-four characters seen in a buffer, these can then be inspected with -![ =, ![ +, and ![ _ lines. - - ![ : 20 - -watches the data arriving from the modem, and only stops when 20 seconds -of silence are detected. This can prove useful when !C has opened a file, -and you want to capture the incoming text until a period of silence. -In addition, the last 64 characters are saved, just like with ![ - and -they can be tested with the same three commands. - -The three commands that test are: - - ![ = string `label - ![ + string `label - ![ _ string `label - -These are all very similar in that they all jump to label if the string is -found in the "last 64 character buffer", however the exact nature of the -test varies. Also note that during the search for the expect string in a -normal send/expect line, the last 64 characters seen are also saved in -this buffer, and can be tested using these commands. - - ![ = string `label - -searches the saved text for the string, which in this case can include -\ escapes. If string occured anwhere in the last 64 characters, control -goes to label. ![ + looks exactly the same, but the difference is whether -the test is done on seven or eight bit data: ![ = just compares the least -significant seven bits, ignoring the parity bit, whereas ![ + compares -all eight. Note also that the strings provided in the ![ - line are only -checked in seven bit mode. ![ _ also does a seven bit test, but in addition -it ignores case. - -Since spaces are used as the delimiter on a ![ = line, it is necessary to -escape a space: to match the 'CONNECT 1200' string that might be received -from a modem, it would be necessary to do something like this: - - ![ = CONNECT\x201200 `con1200 - -where the \x20 is an encoded space. Consult QTERM.DOC for a discourse on -\ escapes in strings. - -Finally: - - ![ ^ a XY - -allows a string to be extracted from the 64 character buffer and copied -into a variable. a is the variable name in this case (only letter variables -are allowed), and XY are two characters that delimit the string. If they -are left off, they both default to zero (NUL character, not '0' which is -ascii 0x30), which matches any white space. X and Y can be \ escapes, and -note that \0 (i.e. a NUL) has the special effect mentioned. The exact -algorithm used to determine the text to be saved is: - -1. Scan backwards from the end of the buffer (last characters received), till -a 'Y' is seen, then skip over any adjacent duplicates. Then scan back to the -next 'X', and take all characters between, not including the X or Y. So if -the tail of the buffer holds: - - ..... YYY XXThis is a stringYY hello X world X - -the string that would be extracted is 'This is a string'. As always, a little -care and attention will help in chosing the correct way of getting a buffer -of 64 characters, and then some care in chosing the delimiters will ensure -the correct string is extracted into the variable. - - -The !~ command has been added for rudimentary file manipulation -during chat script operation. Four options exist: - - !~ - file - -will erase a file. Note that QTERM will silently ignore this command -if the file doesn't exist, or if it is write protected. As with all -filenames, a drive/user can be given: - - !~ - d15:foo.bar - -does like you'd expect. - - !~ = newname = oldname - -renames a file: note that if a drive/user is given on oldname, it will -be ignored: newname completely defines where the action will happen. -This will fail silently if newname already exists, or if old name doesn't, -or if oldname does exist but is write protected. - - !~ + newname = oldname - -copies a file. In this case a file can be copied to a different -drive / user, so if needed a drive / user spec should be attached to -oldname. This will fail silently if newname exists or if oldname doesn't. -These can be used to good effect when QTERM is sending text files as -messages to a BBS, after sending the file with a !P command, a !~ - will -erase it, or files can be erased after uploading, or a file might be -renamed after a batch download. - -The last options don't change any files, but allow QTERM to conditionally -alter script execution depending on whether a file exists or not: - - !~ Y filename line - !~ N filename line - -This simply transfers control to line if filename exists. As always line can -be a label. If needed, filename can be a wildcard: - - !~ Y A17:*.TXT `sendtxt - -will go to label sendtxt only if there are any files on A17: matching the -*.TXT wildcard. - - -Two commands exist to allow strings to be saved during a script run, for -possible reloading during a later script run. The commands are: - - !( r a 7 - -to read, and: - - !( w b 3 - -to write. The r or w specifies read or write, following this is a single -letter that tells which string variable to read or write, and finally a -file position to use. QTERM uses the file /QTERM.STR in the default chat -drive/user area as the file that holds thee saved strings, the last parameter -specifies which record will be used. '0' uses the first record, and up to a -certain point, the file can be made as large as is needed: ten records -would provide '0' through '9', however the file can be made larger to hold -records 'A' through 'Z', or even 'a' through 'z' if needed. To create a -record with a given index, simply use the !( w command to write to it, -so if a file containing just ten empty is desired, the following ten line -script would create it: - - !( a 0 - !( a 1 - !( a 2 - !( a 3 - !( a 4 - !( a 5 - !( a 6 - !( a 7 - !( a 8 - !( a 9 - -This would set all the saved strings to empty, since string a will be -initially empty when the script starts. Note that while QTERM can add -records to an already existing file, the file must exist in order for -QTERM to access it. Several means exist for creating it: - - A>SAVE 0 /QTERM.STR - -under CP/M 2.2 will work, or using a text editor to create an empty -file, or even using the C command under QTERM to open a catch -file, and then immediately closing it with an Z command. - -This function can be used to good effect when a script is used to -call a BBS, and you want to use a catch file to capture new messages. -If the BBS can't do this for you, then the ![ - and ![ : lines can -be used to catch the high message number in the 64 character buffer, -then the ![ ^ line can be used to pluck it out into a string, from -where it can be saved in the file. Then next time the script is -running, it can read the previous high message number back into a -string, and use it in a line line: - - .read new $a\r.. - -to send it back to the BBS as the first message number required. - - -As a final note, any other command character is silently ignored, -this can be put to use to introduce comments. At this stage, !; is -not in use, and this is the official comment entry, it is guaranteed -that !; will never be used for a command line function in a QTERM -chat script. Further, when a script is being read in by QTERM, blank -lines and lines starting with !; are discarded fairly early. This has -two side effects, it means that comments can be used freely without -using up any of the 4K space available for saving scripts, but it -also means that line numbers should not be used in scripts as the -targets of jumps (i.e. the last two fields of a send / expect line) -since the target line number may well change. Use labels instead. - \ No newline at end of file diff --git a/qterm/files/QTERM.DOC b/qterm/files/QTERM.DOC deleted file mode 100644 index e1ab283..0000000 --- a/qterm/files/QTERM.DOC +++ /dev/null @@ -1,457 +0,0 @@ -QTERM -===== - -If QTERM is invoked with no arguments, it starts up, and after signing -on, you are immediately connected with the modem. If an argument file -is provided, then it is assumed to be a chat script (see 'X'), and the -chat script is immediately activated. With this file as with all others -that can be entered, user numbers can be included in the filespecification: -B3:CHAT.XYZ will look for the file in user area 3 on drive B: Either the -drive or the user alone can be given: A:FOO.FOO and 7:BAZ.BAR are both -acceptable, anything not given defaults to the current values. On -completion of the chat script, command passes to normal connected -operation. All special actions are initiated by typing the escape -character, what happens next is determined by the next character typed. -Note that while all letters here are shown in upper case, lower case works -equally well: so b also activates the code to set the baud rate. -As delivered, the escape character is set to control backslash, however it -can be changed by patching QTERM: see QTERM.PAT for details, so to print -help type '^\' '?', etc. In all the descriptions that follow, references to -the escape character refer to this (i.e. '^\' and not the ESC key - '^[') - -At several places in QTERM it is necessary to be able to encode control -characters and other "non-printing" characters in a visible mode, to -do this a special escape mechanism is used. To start one of these escape -sequences a backslash '\' is used, followed by one or more characters to -define the desired character. The following are provided: '\r' carriage -return (0x0d), '\n' linefeed (0x0a), '\t' tab (0x09), '\b' backspace -(0x08), '\e' escape (0x1b), '\k' break, and '\d' delay. '\k' causes a -break to be sent if this string is subsequently sent to the modem (as in -a chat script), and '\d' causes a delay of one second when used in a -chat script. In addition a backslash can be followed by up to three -octal digits to send the character with that representation: so '\177' -would send a delete, and '\003' or '\3' would send a control C; this can -also be done for hexadecimal representations: in this case '\x' is the -leadin, and it is followed by up to two hexadecimal digits: so '\x7f' -would again send a delete, and '\xd' could be used in place of '\r' to -send a carriage return. The rule for determining how many characters are -used when scanning an octal or hex number is as follows: octal has a -maximum of three, hex a maximum of two (not including the \ or \x -respectively): use at most that many characters, or stop early if an -inappropriate character is encountered. - -Retyping the escape character (i.e. typing it twice) sends a single copy -of the escape character to the remote system. - -Other characters and what they do are: - -? - Print help - QTERM provides a brief synopsis of the available commands. - - -. - Send a break - If QTERM has been patched to do it, this will transmit -a 3/10th second break. - - -, - Hang up modem - This is done by deactivating DTR for a short time, which -causes most modems to hang up. Again QTERM has to be patched to do this. -Alternatively, if your modem doesn't respond to DTR, it is possible to -have QTERM transmit a string to cause a hangup: for example the: - - ' +++ ATH0' - -as required by a HAYES compatible modem. See the patch documentatin for -details. - - -B - Change baud rate and mode - This will first prompt you, your response -must look like the following: - - nnnn - nnnn mmm - * mmm - nnnn mmm -3 20 500 +AB - -where 'nnnn' is a number specifying the baud rate. Up to eight options -are available: 300 600 1200 2400 4800 9600 19200 and 38400, although not -all of these may be enabled. 'mmm' is a byte format specifier made up -of three characters. The first must be '7 ' or '8' to specify the number -of data bits; the second 'E', 'O', or 'N' for even, odd, or no parity; -and the third '1' or '2' for the number of stop bits. The * in the third -example is used as a place holder when the mode is to be changed, but -not the baud rate. So, for example: '1200' would change to 1200 baud -leaving the mode as is; '300 8n1' would switch to 300 baud, and select -8 data bits, no parity, and 1 stop bit; and '* 7E2' would change the -format to 7 data bits, even parity, and 2 stop bits, while leaving the -baud rate alone. Two other options can be added to this line: the '-' -option is a way of specifying three delays that can be set, and the '+' -option can set the characters used to enable and disable character -transmission from the remote system. - -If both the '-' and '+' options are used, then the '+' must follow the '-' -(as above in the example). - -The '+' option changes the characters that QTERM will use for flow -control. When a system is sending text to QTERM, which is being saved -in a file, QTERM needs to be able to stop the remote system from -sending when it writes to disk. Most of the time ^S and ^Q are -recognised, but for the few systems that use other characters, this -option allows them to be changed. Following the '+' should be exactly two -characters ('A' and 'B' in the example), the first becomes the "stop" -character, and the second the "start" character. These characters can -be '\' escapes if needed. - -If the '-' option is used, it should be followed by up to three numbers. -The first is a delay in seconds after the "stop" character is sent. -Since some systems take longer to respond to the "stop" character than -others, the delay time can be changed. QTERM starts up with one second -of delay, but by specifying -3 or -6 or whatever, this delay can be -changed. -0 is possible, but not recommended unless your remote system -responds instantly. The second number is a delay in milliseconds between -character sends in 'P' transmits (see below). Note that this time is -the time between the start of each character transmission, rather than -a time between the end of one and the start of the next. So if this -delay was set to 15 milliseconds at 1200 BPS, where each character -takes about 8 milliseconds to transmit, there would be 8 milliseconds -spent sending the character, and then 7 milliseconds of idle time: the -total being 15. As an addition to this, if a non-numeric character -precedes the number (as in .20), "echo-check" pacing will be used for -printable characters. What that means is that when a printable character -is sent, i.e. between space: ' ' (20H) and tilde '~' (07EH) inclusive, -the next will be sent either when the delay runs out, or when a copy of -the sent character is seen returning from the remote system. This can be -useful when the delay would normally need fine tuning for maximum -performance, by using "echo-check" pacing the throughput becomes close -to optimal. The third number is the delay at the end of a line in 'P' -transmission: this is also a count of milliseconds, and this delay occurs -after transmission of a carriage return. As with the character delay, a -non-numeric character can precede the number, this is a "new-line prompt" -character that will terminate the wait early. So if 'P' transmission -is being used to upload text to a BBS that prompts for each line with -a string like ' 23:', then by giving the number as :300, that would -provide a 300 millisecond delay, but when a ':' was seen after sending -a new line, transmission would begin again immediately. So, in that -case, a string like: - - -2 .20 :300 - -would get close to optimal throughput for 'P' transmission. Note that it -is possible to selectively set these values: if a '*' is entered as a place -holder then the delay value for that position will not be changed, i.e. - - -* 20 - -would leave the stop delay alone, set the character delay to 20 -milliseconds, and leave the end of line delay alone. - -Although QTERM always claims to have made the changes to the baud rate -and communication mode, they will only happen if the necessary patches -are applied. Note that for the second character of the mode specifier, -both lower and upper case are accepted. - - -C - Open an input catch file - This prompts for a filename, and then opens -that file for output. All subsequent data received up the line from the -modem port will be written to the file. - - -Y - Put catch file on hold - This keeps the output file open, but temporarily -disables transfer of data. A second 'Y' will re-enable capture -of data. - - -Z - Close a catch file - This closes the output file, and disables data -capture until another catch file is opened. - - -D - Display local directory - This prompts for a single CP/M wildcard -file specificier, and then lists all files that match. Note that an -empty filename is assumed to be '*.*'. When the files are being printed, -QTERM will stop after each screenful (23 lines), hitting return will -print a single line, any other key will print a full page. - - -E - Toggle remote echo - This toggles echo to the remote system. This will -most likely be used when the remote system is a terminal or another -computer running a terminal program. It causes all characters received -from the modem to be re-transmitted back to the modem, creating the -impression that the far end is running in half duplex mode. Caution -should be used to make sure that you don't set up an 'infinite loop' -where the remote system is also echoing: because then the first -character that returns will be sent out again by QTERM, to be returned -by the remote, to be sent out again by QTERM ..... - - -H - Toggle half duplex - This simply causes all keyboard input to be -echoed to the screen. - - -I - Print status information - This prints a summary of QTERM's current -state, showing the state of the various toggles, delays, what the -current drive and user are, etc. - - -J - Junk control characters - This causes QTERM to discard all control -characters received from the remote system that are not considered -important. Important control characters are: carriage return (0x0d); -linefeed (0x0a); backspace (0x08); and tab (0x09). In this mode, if -the remote system is sending characters with the MSB set, and bit 7 -masking is not enabled (see 'M'), then all characters with bit 7 set -will also be discarded. - - -L - Toggle linefeed transmit for 'P' - When 'P' is used to send a file -to a remote system, it normally transmits all useful characters: i.e. -all printable ascii characters from ' ' to '~', tabs, and carriage -returns. This toggle ensables the transmission of line feeds, for -cases where it is needed. Note that when QTERM starts, this is off, -i.e. the default is not to transmit linefeeds. - - -M - Toggle bit 7 mask - When this is enabled, all characters received from -the remote have the most significant bit stripped. This may be useful -when QTERM is running in 8n1 mode, but the remote is transmitting in -7e1 mode - the top bit will contain parity, and this strips it off. - - -N - New default drive and user. This will prompt, and allow entry of a drive -user specification (i.e 'A7:' or 'B14:' or 'C:' or '9:'), this then -becomes the default for all file operations. Note that it is possible -to user the CP/M BDOS functions to set drive and user during the entry -hook code (see QTERM.PAT), so if the entry code selects D2:, and all -scripts are on D2: just entering QTERM SCRIPT at the CCP prompt would -find SCRIPT on D2:. Also note that after the entry hook code, QTERM makes -a note of where it is (i.e. in the above case D2: ) When a chat script -is invoked with the 'X' command, QTERM will first look at the drive -given, or on the default if no drive is specified. If that fails, then -QTERM will take a second look in the drive/user area as saved after the -entry hook. The rationale behind this is to place all chat scripts in -one place: these can subsequently move the default around (see the '!' -section of chat scripts), or 'N' commands can be used to move around. -However it does not matter what the current default drive/user is, QTERM -can always find the scripts by lookng back at the area it noted. - - -O - Toggle output to the printer - This simply toggles a switch that causes -all data received to be transmitted to the printer. - - -P - Print a file to remote - This prompts for a filename, and then transmits -that file to the remote system. While this transfer is in progress, the -keyboard is ignored, except that typing control 'X' will cancel the -transfer. Note that the 'L' command may come in useful with this command, -check how your remote system behaves. - - -T - Type a local file - This also prompts for a filename, and then prints that -file to the screen locally. While this is in progress, a control 'X' will -cancel it, Output can also be paused by typing control 'S', which will -halt until another character is typed. If this character is control 'X' -the output will be aborted, any other continues the printout. - - -U - Invoke user function - QTERM can be patched to include a user defined -function, this is the command to call it. This subroutine can be used for -any purpose required, for example keyboard mapping can be enabled, or some -special screen sequence can be printed, or whatever is needed. The patch -documentation provides information on how to patch this into QTERM, and -also explains how it is possible to prompt for information from within -this subroutine. - - -V - Toggle VT100 emulation - This function requires the following screen -abilities be specified for full operation (see QTERM.PAT for details): -clear to end of line, clear to end of screen, insert and delete line. -If only the first two are available (partial screen clears), then all -functions will work, except for reverse index (scroll backwards), and -scrolling regions. Note that the VT100 emulation is as complete as it -can be, however the alternate character sets are not recognised, and all -the display attribute commands are mapped to the single highlight mode -encoded in the patch area. Also note that QTERM does not check if a -screen capability is present, so if insert and delete line are missing, -QTERM will still try to emulate a scrolling region, probably causing -somewhat confusing output. As a final comment, (especially for people -without interrupt drivers), try to set the delays after the special -functions as big as you can: to do some operations (like odd things -with scrolling regions, and some of the partial screen clears) require -sending a collection of screen codes that'd probably make you lose your -lunch if you saw them. In particular, ^[[1J - clear from start of screen -to current position will take forever if you're at the bottom of the -screen or towards the right margin. Caveat Emptor! - - -W - Toggle split window mode - This requires either the insert line and -delete line screen abilities be specified, or it can also function with -just clear to end of line. (see QTERM.PAT for details). It puts QTERM -into a mode where send and receive text are shown in two separate windows. -This can be useful when using QTERM to communicate with another communication -program running in terminal mode, because it keeps what is typed on the -keyboard separate from what is received from the remote system. After -selecting window mode, QTERM prompts for window size: there are two options, -'b' or 's' (big or small). This refers to the receive window: when small, the -screen is split exactly in half: 11 lines for both send and receive. Big mode -makes the receive window 18 lines deep, the send window is only 4 lines: this -will be useful when far more text is being received than is being sent. - - -R - Receive a file using protocol - This option prompts for a mode and -optional receive file information. Xmodem and Kermit are both supported. -Respond with 'k' to go into Kermit receive, or 'x' to go into Xmodem -receive. Normally files are received on the current default drive, -however by entering a drive or a user (e.g. 'k b7:') files will be -received in the specified location. In addition, if Xmodem is not -being used in batch mode, a filename can be given here. Non-batch -Xmodem has a default filename, this can be used to override it. Note -that a space MUST be present between the k or the x and the -filename / drive specification for proper operation. While the transfer -is in progress, a control 'X' will abort it. - -Options can be given by adding them right after the 'k' or 'x' protocol -specifier, before the space that precedes the filename. Some options are -applicable to both protocols: - -'a': Normally QTERM is silent, however if this option is given, QTERM -will alert on termination of transfer by ringing the terminal bell. - -'q': QTERM normally keeps the screen active, displaying the status of -a transfer, however by using one or two 'q' characters, the amount of -output can be reduced. A single 'q' just turns off the packet count -and the data transfer count (how many K have been received), whereas -two 'q's turn off everything. - -Xmodem only has one receive option: - -'c': Xmodem starts by trying CRC mode, and will switch automatically -to Checksum if CRC fails. However some very naive implementations will -work better if QTERM starts in checksum mode, this option causes QTERM -to do so. Note that information for Xmodem 1K, Ymodem, Modem7 batch etc. -need not be given for a receive (in fact QTERM ignores any such options -on an Xmodem receive), instead QTERM determines what the transfer type is -by inspecting the data received from the remote, and it then acts as -appropriate. - -Kermit receive recognises the following options: - -'b': binary file transfer - by default QTERM treats files as text files -when doing a Kermit transfer, this causes files to received as binary, -useful when transferring an executable program. - -'8': try full 8 bit data transfer - normally QTERM tries to negotiate the -use of 8th bit prefixing with the remote, however if both ends can handle -8 bit transfers, this considerably improves throughput. - -'x': use extended packet size - if not given QTERM will use the standard -maximum packet size (about 90 characters), this allows the packet size to -increase to about 1K, thereby providing a performance boost. - -'g': request files from a server - a typical use might be: - - kg a3:*.txt - -This will request a server to send all files that match *.txt, and they will -be received on a3: - - -S - Send a file using protocol - This also prompts, the response should be -'k filelist ....' or 'x filelist ....' where 'filelist ....' is a list -of CP/M filespecifiers: wildcards are permitted. Single filespecifiers -are separated from one another by spaces, and as with receive, there must -be a space between the 'x' / 'k' / options, and the first filespecifier. -As with receive, a control 'X' will abort the transfer. - -Options are given right after the 'x' or 'k', the following are available: - -'a' and 'q' work for both Xmodem and Kermit, and in the same manner as in -a receive. - -Xmodem takes these options: - -'b': use Xmodem batch (AKA Modem7 batch mode) - -'y': use Ymodem batch mode - -'k': use 1K packets. - -So 'xyk a12:*.com' would send all .COM files on drive A:, user area 12, -using Ymodem batch mode and 1K packets. To match names to various -combinations: xyk will give true Ymodem (known sometimes as ymodem batch), -xk gives Xmodem 1K (sometimes incorrectly called ymodem), xy gives Ymodem -batch, but forces 128 byte packets, xbk will use Modem7 batch mode, but with -1K packets. - -For Kermit, the options available are: - -'b': Kermit usually sends files in text mode, i.e. 0x1a is taken as -end of file. If you want to transfer a binary file, specify the mode as -'kb filename.com'. - -'2': when Kermit is sending data, it will ask for type 3 block checks -during the Send-Init negotiation. Unfortunately, the only fall back from -a type 3 request is to type 1 (i.e. if the receiver does not agree to use -type 3). This means that if QTERM is trying to send to a system that can -do type 1 and type 2, but not type 3 checks, it'll be limited to type 1. -However, if the '2' option is used, Kermit will attempt to negotiate type 2 -block checks, thus allowing it to communicate with a remote using type 2 -checks. It should be noted that this is only useful when sending: when -receiving Kermit data, QTERM will see the remote's Send-Init request first, -and will agree to whatever the remote asks for. - -'8': this will cause QTERM to send data with the high bit set as is, on the -assumption that the data channel can transfer full 8 bit data. Use this only -if the remote Kermit can also handle 8 bit transfers. If the '8' option is -not given QTERM will try to negotiate high bit prefixing to send 8 bit data. - -'x': allow extended packets, this is the same as for receive. - -The last two send options are used to issue server requests: - -'f': finish the server, - -'l': finish server operations and logoff. - -These two do not need filename, and they should not be used with any other -options, i.e. the response to the 'Mode?' prompt from QTERM should simply -be 'kf' or 'kl'. - - -K - Program a function key - This prompts for a key number and a string -to be loaded under that key. The first character entered may be an -'s' to specify the string should be sent slowly. Normally function -key strings are transmitted at full speed, however the 's' creates -a tenth second delay between characters. Following the 's' (if given) -or as the first character if no 's' is given, must be a digit between -'0' and '9': this specifies the key number. Finally comes the string -that will be loaded under the key. Maximum string length is 14 -characters, longer strings are truncated. Backslash escape sequences -are permitted, see the description in the section on chat scripts -for a full explanation of what is available. As a few examples: - - s2hello\r - -would program function key 2 to send 'hello ' slowly, and: - - 3userid = 17\e - -would program function key 3 to send 'userid = 17 ' at full speed. - - -0-9 - Send function key string - After 'K' has been used to load -strings into the function keys, '0' etc. will activate the -function key, causing the string it contains to be sent. Note that if a -function key string contains the QTERM character, it will not -invoke the function in question. So loading \x1c,\x1cq -( , q) under a key cannot be used to provide a -"hangup and exit" from QTERM. - - -X - Activate a chat script - This prompts for a filename, then it reads -the file, and does the chat script given. Following the filename can be -parameters for use in the script, much as SUBMIT.COM allows parameters -to be passed to a .SUB file. If a chat script is given to QTERM as a -command line argument when it is invoked from the CCP, then the following -command line arguments will become the parameters to the chat script. - -A chat script is a means for getting QTERM to automatically send and -receive text, this can be used to auto-dial, connect to remote systems, -log in to them, and do whatever else is wanted. A companion file -QTCHAT.DOC explains the workings of chat scripts. - \ No newline at end of file diff --git a/qterm/files/QTERM.FOR b/qterm/files/QTERM.FOR deleted file mode 100644 index f522933..0000000 --- a/qterm/files/QTERM.FOR +++ /dev/null @@ -1,13 +0,0 @@ -QTERM is a terminal program which provides the following: - - Capture of text files - Send text files to remote - Xmodem / Modem7 / Ymodem protocol transfer - Kermit protocol transfer - VT100 emulation - Split screen mode to separate typed and received text - Script mechanism for automatic dialing and automation of - other operations - Transfer of text to printer - Full user area support - \ No newline at end of file diff --git a/qterm/files/QTERM.PAT b/qterm/files/QTERM.PAT deleted file mode 100644 index 8972463..0000000 --- a/qterm/files/QTERM.PAT +++ /dev/null @@ -1,333 +0,0 @@ -Patching QTERM for your system. - -This explains the patches in QTERM, and can be used to patch QTERM -directly (it is written as if being used in that manner), however -it also provides an explanation of the subroutines that would be -needed if a QT-?????.Z patch source were to be written, based on the -template QT-PATCH.Z provided. - -The first thing to do is to back QTERM up, and then invoke DDT, SID, ZSID, -Z8E, or whatever your local patch utility is, in the following way: - -A>DDT QTERM.COM - -DDT (etc.) will read in QTERM, and then prompt. The following is a list of -patch areas where QTERM should be changed to reflect your system. Some of -these are mandatory (i.e. QTERM won't work without them), whereas others -can be changed to null subroutines or empty data without preventing QTERM -from working, it just won't have all the features available. - - -1. Modem input status: 0110 - 011F - -QTERM calls here to check modem input status. Return with the zero flag -set if no character is available, or with the zero flag clear if a char -is available. Generally this can be an input from the usart / sio / dart -status port followed by an 'and'. - -2. Read modem character: 0120 - 012F - -This gets a character from the modem input port once the input status has -decided it's there. Return the character in the a register. Generally this -can be an input from the usart / sio / dart data port. - -3. Modem output status: 0130 - 013F - -Check if the modem output port can accept another character. Return with the -zero flag set if the output port can't receive a character, or with the zero -flag clear if the output port is ready. Generally this can be an input from -the usart / sio / dart status port followed by an 'and'. - -4. Write modem character: 0140 - 014F - -Send the character in the a register to the modem output port. This will only -be called after the output status routine has returned a non-zero status. -Generally this can be an output to the usart / sio / dart data port. - -These first four patches are all necessary for QTERM to work. The next few -are not necessary, but they will be useful. - -5. Start break: 0150 - 015F - End break: 0160 - 016F - -The start break subroutine at 0150 should initiate a break condition on -the modem output line, and 0160 should clear the break condition. If these -are to be omitted, then just put return (C9) instructions at 0150 and 0160. -Note that the Start Break routine need not check that the transmit buffer -is empty, since there will always be a 1/10th. second delay after the last -character is sent, before calling this subroutine. - -6. Drop DTR: 0170 - 017F - Restore DTR: 0180 - 018F - -The drop DTR subroutine causes DTR to be made inactive, and restore DTR -returns DTR to an active state. If your modem does not respond to DTR, but -can be made to hang up by sending a string, then put a return (C9) at 0170. -Use the space from 0171 to 018F to contain the string, with the following -notes: at 0171 should be the length of the string, to transmit a break, -use an 0FFH byte, to cause a two second delay use an 0FEH byte. Hence the -following could be used to hang up a Hayes compatible: - -0C FE FE 2B 2B 2B FE FE 41 54 48 30 0D - -0C - length: 12 bytes follow -FE - delay (twice) -2B - '+' sent three times -FE - delay (twice) -41 54 48 30 0D - ATH0 - -If neither DTR nor a string is to be used, then place a return (C9) at -0180 and 0171, and a nop (00) at 0170. The string is used only if a C9 -is found at 0170, so by placing the C9 at 0171 the string print is -inhibited. - -7. Baud rate setting: 0190 - 019F - Baud rate table: 01A0 - 01AF - -These two patch areas work together to allow QTERM to change the baud rate -of the modem port. The baud rate table holds pairs of bytes for setting the -baud rate to eight different values: 38400, 19200, 9600, 4800, 2400, 1200, -600 and 300, in that order. In these pairs, the first byte will be passed -to the subroutine at 0190, and the second byte is used to enable that baud -rate: an 0FFH in the second byte enables the rate, and a zero disables. -So if your system only went up to 9600, (using a value of 1 to get 9600) -the first six bytes in the table would be: - - 00 00 no value for 38400: disable by the 00 - 00 00 no value for 19200: disable by the 00 - 01 FF 01 is the value for 9600: enable by the FF - -In all cases of enabled baud rates, the subroutine at 0190 gets the -appropriate value in the a register and should use it to set the baud rate. -If this is to be omitted, then just put a return (C9) instruction at 0190, -and fill the table from 01A0 to 01AF with 00's. - -8. Communication mode setting: 01B0 - 01BF - Communication mode table: 01C0 - 01CB - -These two patch areas work together to allow QTERM to change the -communications format of the modem port. The mode table holds bytes for -setting 12 different formats, selecting number of data bits (7 or 8) -parity (odd, even, or none) and number of stop bits (1 or 2). In order -the 12 values are for 7n1, 8n1, 7n2, 8n2, 7e1, 8e1, 7e2, 8e2, 7o1, 8o1, -7o2, and 8o2. The subroutine at 01B0 gets one of these values in the a -register and should use it to set the communications mode. If this is to -be omitted, then just put a return (C9) instruction at 01B0. - -9. Reserved for later use: 01CC - -This byte is reserved for later expansion, and should not be used. - -10. Protocol transfer size: 01CD - -During protocol transfers, disk reads and writes take place every 8K. This -is normally possible without causing a timeout, and reduces disk access to -a minimum. However if your disk is slow, you can drop this to 4, 2 or even -1 to reduce the size of transfer, and hence prevent timeouts. - -11. Processor speed: 01CE - -This is the speed in Mhz that your Z80 runs at: 4, 6 or whatever. For -a 2.5Mhz cpu, use 3. - -12. Escape character: 01CF - -All special functions of QTERM are activated by the use of escape sequences. -At 01CF is the byte used for the escape character (the default is ^\). Any -byte can be used, but a little used value is best selected, also using a -printable character (' ' thru '~') may have undesirable results. Note that to -transmit the escape value itself, just type it twice. - -These previous three are necessary. - -13. Signon message: 01D0 - 01EF - -This must be a string that identifies your system / terminal. It must be -present, and is printed when QTERM first starts. It should be composed of -printable characters, and terminated by a zero byte. - -14. Clear screen: 01F0 - 01FF - -This must be a string that clears the terminal screen, and leaves the -cursor in the top left hand corner. This should also be terminated by a -zero byte. - -15. Moveto: 0200 - 022E - -QTERM requires the ability to move the cursor around the screen. It calls -this subroutine with the required coordinates in hl: where h is the row, -and l the column to move to. The top left hand corner of the screen is 0,0; -and the bottom right corner is 23,79. This subroutine will have to do -terminal output: at 0109H is a routine that prints a character in the c -register, and at 010CH is a routine to print a decimal number in hl (mainly -for the use of vt100 and vt220 compatibles). Note that the above two -subroutines may destroy all registers, so appropriate action should be -taken if needed. - -16. Teminal capability bit map: 022F - -This byte contains one bit set for each of the following terminal -capabilities: - -bit 0: (01H) end highlight mode -bit 1: (02H) start highlight mode -bit 2: (04H) delete line -bit 3: (08H) insert line -bit 4: (10H) delete character -bit 5: (20H) insert character -bit 6: (40H) clear to end of line -bit 7: (80H) clear to end of screen - -17. Terminal capability strings: 0230 - 026F - -In this area are eight strings, each of which can be at most seven characters -long. They are the strings to be printed to perform the terminal capabilities -mentioned above. Each one of them should be terminated by a zero byte. Hence -at 0230 is the string for end highlight, at 0238 is the string for start -highlight, etc., with 0268 being the string for clear to end of screen. -Programs that use these will check the terminal capability bitmap at 022F -before using them, to determine if they are available. - -18. Entry subroutine: 0270 - 0272 - -Upon entry to QTERM, this subroutine will be called. If it is not needed -then a return instruction (0C9H) should be placed at 0270, otherwise there -is enough space to put in a jump to code that is to be executed when QTERM -starts. This can be used for several purposes: if custom initialisation is -needed to enable communications, or select a particular baud rate, or -whatever, this can be done here. In addition, if all chat scripts and disk -access is to be done on a specific drive, then by using the CP/M BDOS -functions to set drive (and set user if desired), QTERM can be made to -automatically be in the correct place to find scripts. This is explained -in QTCHAT.DOC - -19. Exit subroutine: 0273 - 0275 - -After an Q has been issued to exit QTERM, this subroutine will -be called immediately before exiting back to CP/M. As with the entry -subroutine, if not needed, a return instruction (0C9H) should be placed at -0273H, otherwise any termination code can be added. - -20. User subroutine: 0276 - 0278 - -The U command from terminal mode, and !U in chat scripts cause -a call to this location. This can be used to do whatever is wanted, -enabling special features, selecting different ports for communication -whatever. Note that at 027C is a jump to ilprmt: an inline prompt -subroutine. If the user subroutine is invoked from terminal mode, then -calling this subroutine will prompt, and read a line of text into the -buffer at 0080, it is terminated with a zero byte. If invoked with a !u -from a chat script, then the remaining text on the line will be moved -to the buffer, creating the impression it had just come from the -keyboard. Following the call to ilprmt should be a prompt message, -terminated by a null byte. NOTE: if no prompt is required, then two zero -bytes are needed. - - call ilprmt - db 'Prompt message\0' - - call ilprmt - db 0,0 - -are examples. This subroutine should only be called once per invocation of -the user subroutine, since a second call when used in a chat script may -have unpredictable results. - -21. Keyboard map: 0279 - 027B - -All keystrokes read from the keyboard are passed through the keyboard map -subroutine, so that actions like mapping arrow keys to VT100 escape -sequences can be performed. When this is called, the value of the key -just pressed is in the a register, and the b register is zero. On exit -the value in b determines what action is to be taken. If b is zero, then -the value passed on to QTERM is whatever vaule is in the a register, so -that placing a 'RET' instruction at 0279H causes no effect at all. If b -contains 1, then QTERM will assume that the keyboard map routine "swallowed" -the character, and instead of passing it on, QTERM immediately polls the -keyboard for another character. If b contains 2, then QTERM takes this -to mean that the keyboard map routine wishes to output another character -without further input from the keyboard. In this case, QTERM passes the -current value in a along, then calls straight into the keyboard map routine -again, without polling the keyboard. To provide some examples: - -A. Assume that your system has some function keys that send the following -strings: - -^A 1, ^A 2, ^A 3, ^A 4, - -and you wish to map those keys to ^H ^J ^K and ^L, with ^A followed by -any other character being mapped to just the second character. The -keyboard map would start by looking for ^A, if it saw any other character, -it would return it unchanged with b equal to zero. On getting a ^A, it -wants to see the next character from the keyboard without sending anything -on, so it sets b to 1, and is at liberty to return any value in a. QTERM -immediately gets the next key value, and passes it to the keyboard map. If -it's one of 1, 2, 3, or 4, then the keyboard map sets a to ^H, ^J, ^K, or -^L as appropriate, and returns with zero in b, otherwise it simply returns -the value in a, again with b holding zero. - -B. Assume you want to do the reverse mapping: ^H ^J ^K and ^L to ^A 1, ^A 2 -etc. Here, the keyboard map is looking for ^H ^J etc., passing all other -characters unchanged, with b zero. Assume it sees a ^H, which is to be -mapped to ^A 1. It sets b to 2 (to say that there is more to come) and -returns a ^A in the a register. QTERM will pass the ^A on, and then call -te map again, at which point it would return 1, with b set to zero this -time: this is because there are no more characters to be sent. - -C. In the most complex case, assume that ^E followed by any other character -is to be mapped to two copies of the character, followed by ^A. In this -case, all characters save ^E are passed unchanged, with zero in b. When a -^E is detected, b is returned with 1, to say that the ^E was swallowed, -and when the next character is passed to the map, it should be saved, but -also returned, however b should be 2. QTERM will process the character, -then since b was 2, it will call the map subroutine. The map routine -returns the character again, with b set to 2 a second time. On the third -call to the map routine, it should return the terminating ^A, with b equal -to zero to say all the work is done. - -22. ILPRMT subroutine jump: 027C - 027E - -These three bytes are reserved to hold a jump to the in line prompt -subroutine, and should not be overwritten by the patch. - -23. Patch area: 0280 - 04FF - -Since the area provided for the above patches is limited, it may be necessary -to use more space. The block of memory from 0280 to 04FF is set aside for -custom patches, this can be used if the individual spaces are not big enough. - - -Once all the patches have been made, exit the patch program (usually by -typing ^C), and finish up by saving a new copy of QTERM: - -A>SAVE 69 QTERMNEW.COM - -In addition, the patch area only can be saved as follows: - -A>SAVE 4 QTERMPAT.XXX - -Which will create a 1K file containing all the patches needed to make this -particular version of QTERM work. By doing this, when a new release of QTERM -needs to be patched, all that is necessary is to read in the new unpatched -version with DDT or whatever, then overlay the patch area. This is typically -done by typing: - -IQTERMPAT.XXX - -to DDT, SID, ZSID etc. to set up the command line to read QTERMPAT.XXX, then -follow this with a: - -R - -to read it. This should overlay the saved patch area on the new version, -hence doing all the patches at once. Then exit DDT with ^C, and do the -first save shown above to save the new working version. - - -NOTE: With V4.2 and later, the patch area has grown yet again, so again the -overlaying of earlier patches will not work. By and large, overlaying patches -in this manner is not recommended, it is far easier to work with the patch -sources available, applying them with ZSM and ZPATCH as needed. However, the -V4.3 patch area is the same as the V4.2 patch area, so no changes are needed -to convert from V4.2 to V4.3 - \ No newline at end of file diff --git a/qterm/files/QTERM43F.COM b/qterm/files/QTERM43F.COM deleted file mode 100644 index a4e9334..0000000 Binary files a/qterm/files/QTERM43F.COM and /dev/null differ diff --git a/qterm/files/QTZP.DOC b/qterm/files/QTZP.DOC deleted file mode 100644 index 2785a42..0000000 --- a/qterm/files/QTZP.DOC +++ /dev/null @@ -1,16 +0,0 @@ -These two files: ZSM and ZPATCH are needed to apply QTERM patches (such -as QT-ALB.ZY etc.). To apply a patch to QTERM enter: - -A>ZSM QT-ALB.Z - -which will create QT-ALB.O. Then enter: - -A>ZPATCH QTERM.COM QT-ALB.O - -which applies the patch to QTERM. This can be used with other programs, -WANDERER, ROGUE, and several programs in the UUCP21B.LBR library will -need this done to them. - -To decompress the two programs in here, EXL.LBR or CRLZH11.LBR will both -provide tools to do the job. - \ No newline at end of file diff --git a/qterm/files/WHATS.NEW b/qterm/files/WHATS.NEW deleted file mode 100644 index 068530d..0000000 --- a/qterm/files/WHATS.NEW +++ /dev/null @@ -1,74 +0,0 @@ -What's new in QTERM for V4.3 - in no particular order: - -^\ P sends have some more sophisticated flow control, for both individual -character transmission, and line breaks, based on echo of characters -back from the remote system. - -When QTERM is in local echo mode characters receivced are expanded to - / pairs, and if half duplex or split screen is invoked as well -as local echo, locally typed 's also get expanded in the same manner. -This makes local echo a bit more useful since it means that neither the -local user nor someone talking remotely will need to add a after -their 's - QTERM does it as needed. - -'q' option to make protocol transfers quiet - -'c' option to get Xmodem receive to start in Checksum mode - -Major overhaul of Kermit - the bugs in the 4.2g implementation have been -fixed, and several extensions added: extended block checks, long packets, -and server operation. - -!% m and !% o have become !& m and !& o, and a third option has been added: -!& l to turn on and off "Looking for" logging. m and o are initially on, -and l is off: !& l 0 forces it off, !& m 1 forces it on, and !& o switches -to the other state. - -!@ and !# (numeric variable manipulation) have gained two counterparts: -!$ and !% to set and test string variables (these include the parameters -of the script) - -It is now possible to "type" through a waiting script: while a script is -waiting for a match in a normal /send/expect/ line, or a ![ - or ![ : -line, characters typed at the keyboard are sent to the modem, and two -^\ escapes are recognised: ^\ . to send a break, and ^\ , to hang up. - -When expect string is matching (or not) in a .send.expect. line, -the last 64 characters received from the modem are kept in the buffer -used by the ![ - command, so that tests can be made later with ![ = -(etc.) commands, this buffer is also used by the ![ : "wait for silence" -command. - -!< - and !< . (read buffered from keyboard and read single character from -keyboard) now take a variable name (i.e. a single letter). For !< -, the -letter is the target string variable that will receive the input text, -for !< . the numeric variable receives the value of the character typed. -This means that !< = and !< , are no longer needed: !% and !# will permit -testing keyboard input. - -Strings and variables can be used in lines: giving $a anywhere in a script -line gets substituted by string variable a (and $1 becomes the first -parameter to the script), similarly @a anywhere on a script line gets -replaced by the numeric value of variable a. - -The VT100 emulation code has been almost totally re-written, and does a -far better job than the 4.2 code. There are limits - double size characters -can't be done, nor can alternate character sets, and some operations will -take a long time (i.e. set up lots of delay). However, the special VT100.TC -termcap file is no longer needed, since a standard VT100 termcap will -suffice. However read QTERM.DOC for comments on how it behaves when certain -screen codes are missing - -!~ ? to test the existance of a file has been split into two commands: -!~ Y filename `label jumps if the file does exist, and !~ N filename `label -jumps if the file doesn't exist - The second is most useful in a script -when you only want to do something if a file exists (e.g. upload it, ^\ P -it or whatever), that way !~ N allows a jump over the code if the file is -not there. - -The ^\ D code has stopped using the BIOS to read the directory, instead -it uses BDOS calls 17 and 18. The bad news is that the statistics line -is not shown (maybe something will be put in for the next version), however -the good news is that it will work under CP/M 3.0, and also this change -has reduced QTERM's memory requirement by about 5 to 6 K. - \ No newline at end of file diff --git a/qterm/files/ZPATCH.COM b/qterm/files/ZPATCH.COM deleted file mode 100644 index 291a9b0..0000000 Binary files a/qterm/files/ZPATCH.COM and /dev/null differ diff --git a/qterm/files/ZSM.COM b/qterm/files/ZSM.COM deleted file mode 100644 index c39c208..0000000 Binary files a/qterm/files/ZSM.COM and /dev/null differ diff --git a/qterm/qt-cpm3.z b/qterm/qt-cpm3.z deleted file mode 100644 index 4bedb05..0000000 --- a/qterm/qt-cpm3.z +++ /dev/null @@ -1,155 +0,0 @@ -; QT-CPM3.Z - QTerm patch for CP/M 3 AUX: device -; -; August 2020, Anna Christina Nass -; -.var BDOS 5 - -.var RDY 0xF0 - -.org 0x0110 ; modem input status -; ZERO flag if no char is available -modist: ld c, 7 - call BDOS - and RDY - ret - -.org 0x0120 ; modem input -modin: ld c, 3 - call BDOS - ret - -.org 0x0130 ; modem output status -; ZERO flag if output is busy -modost: ld c, 8 - call BDOS - and RDY - ret - -.org 0x0140 ; modem output -modout: ld e, a - ld c, 4 - call BDOS - ret - -.org 0x0150 ; start break -sbreak: ret - -.org 0x0160 ; stop break -ebreak: ret - -.org 0x0170 ; drop DTR -dtroff: ret - db 0x0c ;length of modem hang up string - db 0xfe,0xfe ;two delays - db 0x2b,0x2b,0x2b ;+++ - db 0xfe,0xfe ;two delays - db 'ATH0',0x0d ;ATH0 - -.org 0x0180 ; restore DTR -dtron: ret - -.org 0x0190 ; set baud rate -setbd: ret - -.org 0x01a0 ; baud rate table -baudtb: - db 0,0,0,0,0,0,0,0 - db 0,0,0,0,0,0,0,0 - -.org 0x01b0 ; set communication mode -setmod: ret - -.org 0x01c0 ; communication mode table -modetb: - db 0,0,0,0,0,0,0,0 - db 0,0,0,0 - -.org 0x01cc -resrvd: db 0 ; reserved for later use - -.org 0x01cd ; protocol transfer size -xfersz: db 8 - -.org 0x01ce ; processor speed -speed: db 8 ; cpu speed in Mhz; - -.org 0x01cf ; escape character -escape: db 0x19 ; 0x19: ^Y - -.org 0x01d0 ; signon message -signon: db 'CP/M 3 by @acn128\0' - -.org 0x01f0 ; clear screen -clrs: db '\e[2J' - db '\e[1;1H\0' - -.var scrout 0x0109 ; print character in C -.var decout 0x010c ; print string of value in HL - -.org 0x0200 ; moveto routine -moveto: push HL - ld C,'\e' - call scrout - ld C,'[' - call scrout - pop HL - push HL - ld L,H - ld H,00 - inc L - call decout - ld C,';' - call scrout - pop HL - ld H,00 - inc L - call decout - ld C,'H' - jp scrout - -.org 0x022f -tcbits: db 0b00000011 ;terminal capabilities - -.org 0x0230 -;brites: db '\e[1m\0' ;bright -brites: db '\0' ;bright - -.org 0x0238 -;dims: db '\e[0m\0' ;dim -dims: db '\0' ;dim - -.org 0x0240 -dlstr: db '\0' ;delete line - -.org 0x0248 -ilstr: db '\0' ;insert line - -.org 0x0250 -dcstr: db '\0' ;Delete character - -.org 0x0258 -icstr: db '\0' ;Insert character - -.org 0x0260 -ceol: db '\e[K\0' ;Clear to end of line - -.org 0x0268 -ceos: db '\e[J\0' ;Clear to end of screen - -.org 0x0270 ;entry subroutine -entry: jp init - -.org 0x0273 ;exit subroutine -exit: jp uninit - -.org 0x0276 ;user subroutine -user: ret - -.org 0x0279 ;keyboard map subroutine -kbmap: ret - -.org 0x0280 ;user patch area -init: ret -uninit: ret - - \ No newline at end of file diff --git a/qterm/qt-rc82.z b/qterm/qt-rc82.z deleted file mode 100644 index 8c731b5..0000000 --- a/qterm/qt-rc82.z +++ /dev/null @@ -1,172 +0,0 @@ -; QT2014.Z - QTerm patch for RC2014 with VT 100 terminal -; -; September 2019, Anna Christina Nass -; based on IMSAI8080 patch: September 2019, Udo Munk -; -.var SIOC 0x82 ;sio control port (2nd port) -.var SIOD 0x83 ;sio data port (2nd port) -.var SDEV 1 ;RomWBW device number -;.var SIOC 0x84 ;sio control port (3rd port) -;.var SIOD 0x85 ;sio data port (3rd port) -;.var SDEV 2 ;RomWBW device number - -.var RXRDY 1 ;receiver ready -.var TXRDY 4 ;transmitter ready - -.org 0x0110 ; modem input status -modist: in a,(SIOC) - and RXRDY - ret - -.org 0x0120 ; modem input -modin: in a,(SIOD) - ret - -.org 0x0130 ; modem output status -modost: in a,(SIOC) - and TXRDY - ret - -.org 0x0140 ; modem output -modout: out (SIOD),a - ret - -.org 0x0150 ; start break -sbreak: ret - -.org 0x0160 ; stop break -ebreak: ret - -.org 0x0170 ; drop DTR -dtroff: ret - db 0x0c ;length of modem hang up string - db 0xfe,0xfe ;two delays - db 0x2b,0x2b,0x2b ;+++ - db 0xfe,0xfe ;two delays - db 'ATH0',0x0d ;ATH0 - -.org 0x0180 ; restore DTR -dtron: ret - -.org 0x0190 ; set baud rate -setbd: ret - -.org 0x01a0 ; baud rate table -baudtb: - db 0,0,0,0,0,0,0,0 - db 0,0,0,0,0,0,0,0 - -.org 0x01b0 ; set communication mode -setmod: ret - -.org 0x01c0 ; communication mode table -modetb: - db 0,0,0,0,0,0,0,0 - db 0,0,0,0 - -.org 0x01cc -resrvd: db 0 ; reserved for later use - -.org 0x01cd ; protocol transfer size -xfersz: db 8 - -.org 0x01ce ; processor speed -speed: db 8 ; cpu speed in Mhz; - -.org 0x01cf ; escape character -escape: db 0x19 ; 0x19: ^Y - -.org 0x01d0 ; signon message -signon: db 'RC2014 SIO/2 - VT100\0' - -.org 0x01f0 ; clear screen -clrs: db '\e[2J' - db '\e[1;1H\0' - -.var scrout 0x0109 ; print character in C -.var decout 0x010c ; print string of value in HL - -.org 0x0200 ; moveto routine -moveto: push HL - ld C,'\e' - call scrout - ld C,'[' - call scrout - pop HL - push HL - ld L,H - ld H,00 - inc L - call decout - ld C,';' - call scrout - pop HL - ld H,00 - inc L - call decout - ld C,'H' - jp scrout - -.org 0x022f -tcbits: db 0b11000011 ;terminal capabilities - -.org 0x0230 -;brites: db '\e[1m\0' ;bright -brites: db '\0' ;bright - -.org 0x0238 -;dims: db '\e[0m\0' ;dim -dims: db '\0' ;dim - -.org 0x0240 -dlstr: db '\0' ;delete line - -.org 0x0248 -ilstr: db '\0' ;insert line - -.org 0x0250 -dcstr: db '\0' ;Delete character - -.org 0x0258 -icstr: db '\0' ;Insert character - -.org 0x0260 -ceol: db '\e[K\0' ;Clear to end of line - -.org 0x0268 -ceos: db '\e[J\0' ;Clear to end of screen - -.org 0x0270 ;entry subroutine -entry: jp init - -.org 0x0273 ;exit subroutine -exit: jp uninit - -.org 0x0276 ;user subroutine -user: ret - -.org 0x0279 ;keyboard map subroutine -kbmap: ret - -.org 0x0280 ; user patch area -init: ld hl,SIOINI - ld B,9 - ld C,SIOC - otir - ret -SIOINI: db 0b00011000 ; Wr0 Channel reset - db 0b00010100 ; Wr0 Pointer R4 + reset ex st int - db 0b11000100 ; Wr4 /64, async mode, no parity - db 0b00000011 ; Wr0 Pointer R3 - db 0b11000001 ; Wr3 Receive enable, 8 bit - db 0b00000101 ; Wr0 Pointer R5 - db 0b11101010 ; Wr5 Transmit enable, 8 bit, flow ctrl - db 0b00010001 ; Wr0 Pointer R1 + reset ex st int - db 0b00000000 ; Wr1 No Tx interrupts -uninit: ld B,4 ; HBIOS CIOINIT function 0x04 - ld C,SDEV ; device number (0,1,2,3) - ld DE,-1 ; "Reset with current settings" - rst 8 ; do it - ret ; not initialized, so no un-initialize - - diff --git a/qterm/qt-rc84.z b/qterm/qt-rc84.z deleted file mode 100644 index d7f7d10..0000000 --- a/qterm/qt-rc84.z +++ /dev/null @@ -1,172 +0,0 @@ -; QT2014.Z - QTerm patch for RC2014 with VT 100 terminal -; -; September 2019, Anna Christina Nass -; based on IMSAI8080 patch: September 2019, Udo Munk -; -;.var SIOC 0x82 ;sio control port (2nd port) -;.var SIOD 0x83 ;sio data port (2nd port) -;.var SDEV 1 ;RomWBW device number -.var SIOC 0x84 ;sio control port (3rd port) -.var SIOD 0x85 ;sio data port (3rd port) -.var SDEV 2 ;RomWBW device number - -.var RXRDY 1 ;receiver ready -.var TXRDY 4 ;transmitter ready - -.org 0x0110 ; modem input status -modist: in a,(SIOC) - and RXRDY - ret - -.org 0x0120 ; modem input -modin: in a,(SIOD) - ret - -.org 0x0130 ; modem output status -modost: in a,(SIOC) - and TXRDY - ret - -.org 0x0140 ; modem output -modout: out (SIOD),a - ret - -.org 0x0150 ; start break -sbreak: ret - -.org 0x0160 ; stop break -ebreak: ret - -.org 0x0170 ; drop DTR -dtroff: ret - db 0x0c ;length of modem hang up string - db 0xfe,0xfe ;two delays - db 0x2b,0x2b,0x2b ;+++ - db 0xfe,0xfe ;two delays - db 'ATH0',0x0d ;ATH0 - -.org 0x0180 ; restore DTR -dtron: ret - -.org 0x0190 ; set baud rate -setbd: ret - -.org 0x01a0 ; baud rate table -baudtb: - db 0,0,0,0,0,0,0,0 - db 0,0,0,0,0,0,0,0 - -.org 0x01b0 ; set communication mode -setmod: ret - -.org 0x01c0 ; communication mode table -modetb: - db 0,0,0,0,0,0,0,0 - db 0,0,0,0 - -.org 0x01cc -resrvd: db 0 ; reserved for later use - -.org 0x01cd ; protocol transfer size -xfersz: db 8 - -.org 0x01ce ; processor speed -speed: db 8 ; cpu speed in Mhz; - -.org 0x01cf ; escape character -escape: db 0x19 ; 0x19: ^Y - -.org 0x01d0 ; signon message -signon: db 'RC2014 SIO/2 - VT100\0' - -.org 0x01f0 ; clear screen -clrs: db '\e[2J' - db '\e[1;1H\0' - -.var scrout 0x0109 ; print character in C -.var decout 0x010c ; print string of value in HL - -.org 0x0200 ; moveto routine -moveto: push HL - ld C,'\e' - call scrout - ld C,'[' - call scrout - pop HL - push HL - ld L,H - ld H,00 - inc L - call decout - ld C,';' - call scrout - pop HL - ld H,00 - inc L - call decout - ld C,'H' - jp scrout - -.org 0x022f -tcbits: db 0b11000011 ;terminal capabilities - -.org 0x0230 -;brites: db '\e[1m\0' ;bright -brites: db '\0' ;bright - -.org 0x0238 -;dims: db '\e[0m\0' ;dim -dims: db '\0' ;dim - -.org 0x0240 -dlstr: db '\0' ;delete line - -.org 0x0248 -ilstr: db '\0' ;insert line - -.org 0x0250 -dcstr: db '\0' ;Delete character - -.org 0x0258 -icstr: db '\0' ;Insert character - -.org 0x0260 -ceol: db '\e[K\0' ;Clear to end of line - -.org 0x0268 -ceos: db '\e[J\0' ;Clear to end of screen - -.org 0x0270 ;entry subroutine -entry: jp init - -.org 0x0273 ;exit subroutine -exit: jp uninit - -.org 0x0276 ;user subroutine -user: ret - -.org 0x0279 ;keyboard map subroutine -kbmap: ret - -.org 0x0280 ; user patch area -init: ld hl,SIOINI - ld B,9 - ld C,SIOC - otir - ret -SIOINI: db 0b00011000 ; Wr0 Channel reset - db 0b00010100 ; Wr0 Pointer R4 + reset ex st int - db 0b11000100 ; Wr4 /64, async mode, no parity - db 0b00000011 ; Wr0 Pointer R3 - db 0b11000001 ; Wr3 Receive enable, 8 bit - db 0b00000101 ; Wr0 Pointer R5 - db 0b11101010 ; Wr5 Transmit enable, 8 bit, flow ctrl - db 0b00010001 ; Wr0 Pointer R1 + reset ex st int - db 0b00000000 ; Wr1 No Tx interrupts -uninit: ld B,4 ; HBIOS CIOINIT function 0x04 - ld C,SDEV ; device number (0,1,2,3) - ld DE,-1 ; "Reset with current settings" - rst 8 ; do it - ret ; not initialized, so no un-initialize - - diff --git a/qterm/qterm43f.lbr b/qterm/qterm43f.lbr deleted file mode 100644 index feab3fe..0000000 Binary files a/qterm/qterm43f.lbr and /dev/null differ diff --git a/qterm/qterm82.com b/qterm/qterm82.com deleted file mode 100644 index 43400da..0000000 Binary files a/qterm/qterm82.com and /dev/null differ diff --git a/qterm/qterm84.com b/qterm/qterm84.com deleted file mode 100644 index c80e568..0000000 Binary files a/qterm/qterm84.com and /dev/null differ diff --git a/qterm/qtermc3.com b/qterm/qtermc3.com deleted file mode 100644 index 6c92e12..0000000 Binary files a/qterm/qtermc3.com and /dev/null differ