home *** CD-ROM | disk | FTP | other *** search
/ ftp.barnyard.co.uk / 2015.02.ftp.barnyard.co.uk.tar / ftp.barnyard.co.uk / cpm / walnut-creek-CDROM / CPM / PROGRAMS / WSTAR / ANYCODE3.LBR / ANYCODE3.DZC / ANYCODE3.DOC
Text File  |  2000-06-30  |  18KB  |  407 lines

  1.  
  2.  
  3.  
  4.                                     ANYCODE3
  5.                                      - or -
  6.                   How to Lie to WordStar and Get Away With It
  7.  
  8.                               by Richard F. Binder
  9.                               31 Fairmount Street
  10.                                Nashua, NH  03060
  11.  
  12.  
  13.         1.  INTRODUCTION
  14.  
  15.         This document describes a patch for the CP/M-80 version of Word-
  16.         Star, to allow entry of an expanded set of printer control codes 
  17.         into a WordStar document.   This document contains the following 
  18.         information:
  19.  
  20.         o   Historical information on the patch and its authorship.
  21.  
  22.         o   A description of the patch and how to use it.
  23.  
  24.         o   Instructions for installing and testing the patch.
  25.  
  26.  
  27.         This  document  is  written so that  both  experienced  computer 
  28.         people  and  novices can use it.   If you can't actually do  the 
  29.         things discussed,  you can find someone more knowledgeable to do 
  30.         them for you.
  31.  
  32.  
  33.         2.  REQUIREMENTS FOR INSTALLATION
  34.  
  35.         To use ANYCODE3, you will need the following:
  36.  
  37.         o   A computer system that runs CP/M, with two disk drives.
  38.  
  39.         o   An installed and working copy of WordStar.
  40.  
  41.         o   A CP/M system disk with DDT.COM and ASM.COM on it.
  42.  
  43.         o   This document.
  44.  
  45.         o   A  copy of ANYCODE3.ASM,  the 8080 source file for the patch 
  46.             program.
  47.  
  48.  
  49.         Installation  of ANYCODE3 is a relatively simple  process,  dis-
  50.         cussed as the last part of this document.
  51.  
  52.  
  53.  
  54.  
  55.  
  56.  
  57.  
  58.         ANYCODE3.DOC                                         PAGE 1 of 7
  59.                                     HISTORY
  60.  
  61.  
  62.         3.  HISTORY
  63.  
  64.         Despite  its relative age,  WordStar remains a popular word pro-
  65.         cessing  tool,  and  it is still one of the most  powerful  word 
  66.         processors available.  You can install WordStar to use virtually 
  67.         all  of  the features of modern daisywheel printers  to  produce 
  68.         professional printed documents of exceptional quality.   You can 
  69.         also install WordStar to take advantage of many of the  features 
  70.         of  a sophisticated dot matrix printer.   But there just  aren't 
  71.         enough  WordStar codes available to let you use everything a dot 
  72.         matrix printer can do.
  73.  
  74.         It  would  be convenient if you could simply enter  the  control 
  75.         characters  you want into the file the same way you enter  codes 
  76.         that WordStar knows about,  but it isn't that simple.   WordStar 
  77.         filters  your  document as it prints it,  and  any  nonprintable 
  78.         characters that WordStar doesn't recognize are rejected.
  79.  
  80.         The  original ANYCODE was written for the Osborne by Doug Hurst, 
  81.         to circumvent this limitation.  Its function is to unlock all of 
  82.         the features of a dot-matrix printer by providing a way to  fool 
  83.         WordStar  into  transmitting those control  characters.   Doug's 
  84.         program  is a patch that is inserted logically between  WordStar 
  85.         and  the  CP/M  PRIMARY list device - if you're  not  using  the 
  86.         primary list device,  this patch isn't guaranteed to work.   The 
  87.         version under discussion here,  written by Dick Binder and named 
  88.         ANYCODE3, fixes a couple of limitations in the original ANYCODE; 
  89.         the enhancements will be pointed out later.
  90.  
  91.  
  92.         4.  WHAT ANYCODE DOES
  93.  
  94.         This section describes how ANYCODE3 works, with a little digres-
  95.         sion first, to explain some terms and coding conventions.
  96.  
  97.                                     N O T E
  98.  
  99.             In  the following discussion,  sequences  of  characters 
  100.             will  be  enclosed in quotation marks.   This method  of 
  101.             display  is merely to call your attention to  these  se-
  102.             quences;  when using ANYCODE3, you should not put quota-
  103.             tion marks in your file unless you want them to appear.
  104.  
  105.  
  106.         4.1.  The Digression
  107.  
  108.         Before  you can understand how ANYCODE3 does what it  does,  you 
  109.         need  to understand a little about the code system used to  des-
  110.         cribe  the way characters are transmitted to your  printer.   If 
  111.         you  are  an experienced programmer or  system  user,  you  will 
  112.         probably not need to read this section.
  113.  
  114.  
  115.  
  116.         ANYCODE3.DOC                                         PAGE 2 of 7
  117.                                    HEX-ASCII
  118.  
  119.  
  120.         4.1.1.  Hex-ASCII
  121.  
  122.         You  are familiar with the number system that we use every  day, 
  123.         the  decimal system.   In the computer industry,  another number 
  124.         system is usually used, called the Hexadecimal system ("hex" for 
  125.         short).   In  the  same  way that the decimal  system  uses  ten 
  126.         digits,  the hex system uses sixteen digits.   In hex,  you  can 
  127.         represent the values from zero to fifteen in a single digit, and 
  128.         you can count up to 255 in two digits.
  129.  
  130.         The  digits used in the hex system are the ordinary digits  1-9, 
  131.         plus the letters A-F.   For example,  the value 65 is written in 
  132.         hex as 41, and 195 is C3.
  133.  
  134.         If you look in the programming section of your printer's manual, 
  135.         you will find a table of the characters the printer understands.  
  136.         This table will assign a numerical value to each character;  for 
  137.         example,  the  character "A" has the value 41.   The code system 
  138.         used is called ASCII, and when it is represented in hex numbers, 
  139.         then  the combination is called hex-ASCII.   That's how "A"  be-
  140.         comes 41 - 41 is the hex value that represents "A".
  141.  
  142.  
  143.         4.1.2.  Printer Control Sequences
  144.  
  145.         If  you  explore the programming section of the manual  further, 
  146.         you  will find a list of control character sequences  to  invoke 
  147.         special  features of the printer,  such as the printing of ital-
  148.         ics.   For most printers, these sequences begin with a character 
  149.         called  ESCAPE  - sometimes it is abbreviated to ESC  or  <ESC>.  
  150.         The sequence that will cause an Epson printer to begin  printing 
  151.         italics is <ESC> followed by the character "4".   In the manual, 
  152.         this sequence will be shown something like this:
  153.  
  154.                                     <ESC> 4
  155.  
  156.         With  this digression in mind,  you can follow the discussion of 
  157.         how ANYCODE3 works.
  158.  
  159.  
  160.         4.2.  Functionality
  161.  
  162.         What ANYCODE3 does is to examine the printed stream, looking for 
  163.         either  of  two characters that are set aside for it to  use  as 
  164.         lead-in  characters.   A  "lead-in" character signifies  that  a 
  165.         special  character sequence follows,  telling ANYCODE3 to  begin 
  166.         processing.   Detection  of one of these characters  will  cause 
  167.         ANYCODE3  to transmit a control character to the  printer.   The 
  168.         control character is constructed from the next two characters in 
  169.         the file, as described in the next paragraph.
  170.  
  171.  
  172.  
  173.  
  174.         ANYCODE3.DOC                                         PAGE 3 of 7
  175.                                  FUNCTIONALITY
  176.  
  177.  
  178.         Because  WordStar refuses to transmit nonprinting characters  in 
  179.         the  file  to  the  printer,  ANYCODE3  uses  ordinary  printing 
  180.         characters  as they are passed to it by WordStar.   It  converts 
  181.         them  into  nonprinting  characters and then sends them  to  the 
  182.         printer.   For  each  special character you want to send to  the 
  183.         printer,  you  enter two characters that represent the  two  hex 
  184.         digits of the special character.   For example, to send an <ESC> 
  185.         character,  you look in the printer manual's code table and find 
  186.         that  <ESC> is assigned the hex value 1B.   That's equivalent to 
  187.         the  decimal value 27.   If you enter one of ANYCODE3's  lead-in 
  188.         characters  into your file followed by the two characters  "1B", 
  189.         ANYCODE3 will convert those two characters into a real <ESC> and 
  190.         send it to the printer.
  191.  
  192.         (One  of ANYCODE's two enhancements over the original ANYCODE is 
  193.         that  it  will accept either uppercase or lowercase  letters  as 
  194.         valid  hex-ASCII  digits - it will handle "0f" the same  way  it 
  195.         handles "0F".)
  196.  
  197.  
  198.         4.2.1.  The ANYCODE3 Lead-in Characters
  199.  
  200.         The  two characters set aside for ANYCODE3's lead-in  characters 
  201.         are  the  back-accent,  sometimes called a grave  accent  ( ` ), 
  202.         whose  hex-ASCII value is 60,  and the tilde ( ~ ),  whose  hex-
  203.         ASCII value is 7E.   There are two lead-ins instead of only one, 
  204.         so that ANYCODE3 can do some of the work for you.  The two lead-
  205.         in characters work a little differently, as follows:
  206.  
  207.         1.  Back-accent.   This character will cause a direct  transmis-
  208.             sion  of a single ASCII character;  for example,  to send an 
  209.             ASCII <SI> character, include "`0F" in your text file.
  210.  
  211.         2.  Tilde.   This character will cause transmission of an  <ESC> 
  212.             followed  by  the  character defined by your  two  hex-ASCII 
  213.             characters.   For example,  to send an ESCAPE sequence  that 
  214.             will  turn on Epson italics ( <ESC> 4 ),  include ~34 in the 
  215.             file.   The  tilde is set aside in this way because so  many 
  216.             printer control sequences begin with an <ESC> - it saves you 
  217.             a  lot  of time and typing to enter a  sequence  like  "~34" 
  218.             instead of "`1B`34".
  219.  
  220.  
  221.         From  the previous list entry,  describing how the tilde  works, 
  222.         you  can  see that it is possible to send  longer  sequences  of 
  223.         control  characters  by concatenating coded sequences  - suppose 
  224.         you  wanted  to  send the three-character sequence  <ESC>  N  08 
  225.         [where  that  08 is a BACKSPACE,  the character whose real  hex-
  226.         ASCII value is 08].  All you enter is this: ~4E`08 .
  227.  
  228.         Now  the question is bound to arise:   What do I do if I want to 
  229.         print one of the lead-in characters?   Won't ANYCODE3 see it and 
  230.  
  231.  
  232.         ANYCODE3.DOC                                         PAGE 4 of 7
  233.                         THE ANYCODE3 LEAD-IN CHARACTERS
  234.  
  235.  
  236.         process the next two characters as a control character?  Normal-
  237.         ly,  yes.   But  the second of ANYCODE3's enhancements over  the 
  238.         original  ANYCODE is that ANYCODE3 allows you to print a lead-in 
  239.         character by repeating it in your file - to print the phrase "An 
  240.         `enclosed'  word",  just enter it like  this:   "An  ``enclosed' 
  241.         word".   The  original  ANYCODE did not allow you to  print  its 
  242.         lead-in characters.
  243.  
  244.  
  245.         5.0.  USING ANYCODE3
  246.  
  247.         From  reading the previous discussion,  you have learned  almost 
  248.         all  you  need to know about using ANYCODE3.   The last  bit  of 
  249.         information you need concerns WHEN to use  ANYCODE3.   Or,  more 
  250.         accurately,  when  to  insert the ANYCODE3 sequences  into  your 
  251.         text.   Do  that after you have created the entire document  and 
  252.         have  gotten  it formatted just the way you  want  it.   Because 
  253.         ANYCODE3  sequences are "real" characters that aren't  invisible 
  254.         to WordStar,  you should set the WordStar margin release feature 
  255.         OFF  (strike ^OX) so WordStar won't surprise you by reformatting 
  256.         a line when you don't want it to change anything.  Enter all the 
  257.         ANYCODE3  sequences throughout your document,  and then you  can 
  258.         print  it.   The following figure is a sample document file  you 
  259.         can  use  to test several of ANYCODE3's  features  after  you've 
  260.         installed it.  This file will work with Epson printers that have 
  261.         Graftrax-Plus  installed,  and with many Epson-compatible  prin-
  262.         ters, such as the Mannesmann Tally Spirit-80.
  263.  
  264.  
  265.                         `0FCompressed print`12
  266.                         `0EExpanded print`14
  267.                         ~45Emphasized print~46
  268.                         ~34Italic print~35
  269.                         ~2D`01Continuous underline~2D`00
  270.                         ~53`01Sub~48~54`01script
  271.                         ~53`00Super~48~54`01script
  272.  
  273.                          Figure 1.  Sample print file.
  274.  
  275.  
  276.         6.0.  INSTALLING ANYCODE3
  277.  
  278.         First,  create  a disk with WS.COM and ANYCODE3.ASM on  it,  and 
  279.         nothing else.   Then, follow this sequence.  The patch goes into 
  280.         the  MORPAT:  area of WordStar - the start of that area is  02BB 
  281.         for  Version  3.3,  and 02DE for Versions 2.26  and  3.0.   This 
  282.         discussion  will be for Version 3.3 with notes where things  are 
  283.         different for the other versions.   In the following steps,  the 
  284.         things  you enter are in lowercase,  and the things the computer 
  285.         says are in uppercase.
  286.  
  287.         1.  Put your CP/M disk into drive A: and your work disk (the one 
  288.  
  289.  
  290.         ANYCODE3.DOC                                         PAGE 5 of 7
  291.                               INSTALLING ANYCODE3
  292.  
  293.  
  294.             with WS.COM and ANYCODE3.ASM on it) into drive B:   Use STAT 
  295.             to  find out the size of your WS.COM file  - it's  different 
  296.             for different computers.
  297.  
  298.             A>stat b:ws.com
  299.             STAT  will  respond by telling you the size of the  file  in 
  300.             Kbytes,  records,  and  extents.   You're interested in  the 
  301.             number of records.   Divide this number by two,  rounding up 
  302.             if it doesn't come out even, and write down the result.  You 
  303.             will need it later, when you save the modified WS.COM file.
  304.  
  305.         2.  Assemble ANYCODE3 using the standard CP/M assembler.
  306.  
  307.             A>asm b:anycode3.bbz
  308.  
  309.             This  command  will cause ASM to look on drive  B:  for  the 
  310.             input file,  and to place the output file,  ANYCODE3.HEX, on 
  311.             drive B:  No listing file will be generated.
  312.  
  313.         3.  Now,  using the standard CP/M debugger, you can install your 
  314.             ANYCODE3  patch into WS.COM.   The information DDT types out 
  315.             may  not be exactly the same as what is shown  here  - don't 
  316.             worry about it.
  317.  
  318.             A>ddt b:ws.com
  319.  
  320.             DDT VERS 2.2
  321.             0100 NEXT PC 4600
  322.             -d2bb
  323.  
  324.             (DDT  will display 256 bytes of data comprising part of  the 
  325.             WS.COM program.)
  326.  
  327.             If  you have WordStar Version 2.26 or 3.0,  use the  address     
  328.             2DE instead of 2BB.   The purpose of this display command is 
  329.             to  see that the MORPAT:  area is not already used;  if  the 
  330.             first  120  locations are not 00,  then you can't  use  this 
  331.             patch.   If that's the case,  just reboot CP/M and cry for a 
  332.             while.
  333.  
  334.  
  335.         4.  Next, still using the debugger, read in the ANYCODE3 file.
  336.  
  337.             -ib:anycode3.hex
  338.             -r
  339.  
  340.             DDT will take a few moments,  and then it will return to you 
  341.             for your next command.
  342.  
  343.         5.  Now  you  must install another tiny patch to  make  WordStar 
  344.             jump to ANYCODE3 instead of transferring characters directly 
  345.             to the printer.  You are still using the debugger.
  346.  
  347.  
  348.         ANYCODE3.DOC                                         PAGE 6 of 7
  349.                               INSTALLING ANYCODE3
  350.  
  351.  
  352.  
  353.             -a71c
  354.             071C  call 2bb
  355.             071F  jmp 722
  356.             0722  <RETURN>
  357.             -
  358.  
  359.             If you have Version 2.26 or 3.0, start at 071D instead, make 
  360.             the CALL instruction point at 2DE, and make the JMP instruc-
  361.             tion go to 0723.
  362.  
  363.         6.  Your patching is complete.   Now, you exit from the debugger 
  364.             by giving it a command that will reboot CP/M.   Your patched 
  365.             WS.COM file will still be in place in memory.
  366.  
  367.             -0g
  368.  
  369.         7.  Finally,  you  erase the old verion of WS.COM from your work 
  370.             disk and save the new, modified version.
  371.  
  372.             A>era b:ws.com
  373.             A>save NN b:ws.com
  374.  
  375.             The  NN in the save instruction represents the size in pages 
  376.             of  your  WS.COM  - you figured this size out  back  at  the 
  377.             beginning of this procedure.   For Apple CP/M WordStar  Ver-
  378.             sion 3.3, NN is 75.
  379.  
  380.  
  381.         That's it.   Create a test file to activate the printer features 
  382.         you'd  like to test,  and print it.   Figure 1,  earlier in this 
  383.         document, is a good starting place.
  384.  
  385.         You can use the WS.COM you've installed,  exactly as it  is,  by 
  386.         putting your regular WordStar disk in drive A:  because WordStar 
  387.         will always look on the system disk for its overlay files unless 
  388.         it  has been installed to look elsewhere.   Just enter a command 
  389.         to start WordStar like this:
  390.  
  391.             A>b:ws
  392.  
  393.  
  394.         7.0.  GOOD LUCK
  395.  
  396.         Good luck - if you have any problems, you can send mail to me at 
  397.         the  address on top of this document.   If you're on a  computer 
  398.         network, I may be at one of the following net addresses:
  399.  
  400.             DEC Easynet:  ASD::BINDER
  401.             DDN:          binder%asd.DEC@decwrl.ARPA
  402.             uucp usenet:  { decwrl, allegra, etc. }!asd.dec.com!binder
  403.  
  404.  
  405.  
  406.         ANYCODE3.DOC                                         PAGE 7 of 7
  407.