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 / BDOS / DOSPLS25.ARK / DOSPLUS.DOC < prev    next >
Text File  |  1986-12-07  |  25KB  |  494 lines

  1.  
  2.                       D O S +   system documentation
  3.                                  86/12/07
  4.                              by C.B. Falconer
  5.  
  6.  
  7. DOS+  is  a  complete  replacement system  for  CPM2.2  (Copyright  Digital
  8. Research).    DOS+  provides  many  CPM3  features,   and  several   unique
  9. capabilities.   It also supplies many ZCPR features,  without requiring any
  10. extra memory assignments.  DOS+ operates on Z80 CPUs only.
  11.  
  12. DOS+, CCP+, DDTZ, INITDIR, FDATE, MOVDOS+, SETFLAGS,  XJOB,  TIME and their
  13. associated documentation are Copyright (c) 1986 by:
  14.      C.B. Falconer, 680 Hartford Tpk, Hamden CT 06517,
  15.      Tel (203) 281-1438.                     all rights reserved.
  16.  
  17. They may be freely copied and distributed provided no charges are made, and
  18. that  they are not included with other items for sale.  For commercial per-
  19. mission contact C.B. Falconer.
  20.  
  21. Contributions are solicited.  All contributions of $20 or over will receive
  22. notices of available updates and/or revisions.   $50 or over is  considered
  23. registration,  and  major revisions (on Kaypro 4 or IBMPC format disks,  as
  24. desired) will be made for 1 year, with source code.
  25.  
  26.  
  27.                         Features Added over CPM2.2
  28.                         ==========================
  29.  
  30. 1.   DOS+  will  process files of up to 262,143 records  (like  CPM3),
  31.      i.e. of over 3 megabytes.
  32.  
  33. 2.   DOS+ allows for time-stamping of all files, for creation, modify,
  34.      and access.   Creation records only the date,  others record both
  35.      date and time.  DOS+ may be configured to NOT do access stamping,
  36.      thus  allowing for the use of write-protected disks.   Note  that
  37.      the time stamps are NOT identical with CPM3 (DOS+ maintains three
  38.      values), but are compatible in that the file system will function
  39.      correctly  under either CPM2 or CPM3.   Time stamping occurs only
  40.      on drives with the correctly formatted directory (see INITDIR.COM
  41.      to  initialize disks with/or without files already stored),  when
  42.      the timer operation is enabled.   If the file is marked read-only
  43.      no access time will be  maintained.   The FDATE utility acts much
  44.      like DIR (except that some file  or drive specification  must  be
  45.      entered) to show the stored time stamps.   Dates are shown in ISO
  46.      standard format (year/month/day).
  47.  
  48. 3.   DOS+  has compatible DCIO (function 6,  direct console  i/o)  and
  49.      other  console  calls.   DCIO  can now return a  null,  by  first
  50.      checking  status (argument 0fdh in register e).   Buffered  input
  51.      characters will be available to the application with mixed calls.
  52.      DCIO with argument (in E register) 0fdh performs wait_for_console
  53.      input (as does CPM3), and with argument 0fch returns a look-ahead
  54.      console character, i.e.  the  value which will be accessed by the
  55.      next console input call (provided the console status is 'ready').
  56.      For this argument register H (and register B) returns the current
  57.      console column,  as recorded by DOS+.   In addition,  if the bios
  58.      supports it, this call (function 6,  argument less than 0fch  for
  59.      direct console output) returns the current screen x-y position as
  60.      a value in hl.  This is whatever value the bios returns in hl. As
  61.      a standard,  this should be the  line in h,  and the column in l,
  62.      each with an offset of 020h added. i.e. 02020h is 0,0, top left.
  63.  
  64. 4.   DOS+ will always pause (on console output) when a CTL-S (DC3)  is
  65.      entered,  EXCEPT  for DCIO calls.   Thus an accidental  keystroke
  66.      will no longer leave a program running indefinitely.   However an
  67.      interrupt driven bios with its own buffer may delay the pause.
  68.  
  69. 5.   DOS+ can be interrupted at any BDOS call (if so configured).  The
  70.      "break"  key is configurable (default a NUL,  i.e.  CTL-@ on most
  71.      systems).   If enabled,  DCIO calls can be separately enabled  or
  72.      disabled.   When a "break" occurs the question "Resume (y/N)?" is
  73.      asked,  and  a "y" (or "Y") will resume the application  program.
  74.      Any other key aborts to a  warm  boot.   If  breaks  are disabled
  75.      the CTL-C character will not abort the application program.  This
  76.      allows programs to ensure they retain control.
  77.  
  78. 6.   DOS+  errors show the calling function,  and the file name (if  a
  79.      file  is involved).   All such errors other than disk i/o errors,
  80.      exit to a warm boot when a <cr> is entered.   For disk i/o errors 
  81.      options to retry, ignore, or abort are available.  Provisions are
  82.      made for application programs to intercept and handle any errors.
  83.  
  84. 7.   DOS+ implements the CPM3 calls 104 and 105 (set/get time), when a
  85.      suitable  timer mechanism is configured.   This mechanism may  be
  86.      either  a reserved memory area (5 bytes) to hold the time,  or  a
  87.      routine may be called (which should return such a pointer).   The
  88.      DE register points to the application array (see definition below
  89.      of the array) which is filled (1st 4 bytes) on call 105  (seconds
  90.      are returned in the A register), or used to set (call 104),  when
  91.      the system seconds value is forced to 0.
  92.  
  93. 8.   DOS+ setuser call (32 = 020h) echoes the user # set.
  94.  
  95. 9.   DOS+ implements a search path, stored in a configurable dedicated
  96.      memory  area.   TO USE the bios MUST initialize the path at power
  97.      on (cold-boot).   A single 0 byte at the head of the path  string
  98.      suffices.    The   path  (like  ZCPR)  consists  of  byte  pairs,
  99.      specifying  drive  and user,  with '$' specifying  the  defaults.
  100.      Unlike  ZCPR, the user value specifies under which user the drive
  101.      search will be made, and only  the current user area is searched.
  102.      Thus  "A$" causes the A drive to be searched on all  user  areas,
  103.      and  "B3C2" causes the B drive search under user 3,  C under user
  104.      2,  etc.  Thus the path string can be thought of as an intermixed
  105.      set of paths for the various user areas.   The default drive will
  106.      not  be searched twice.   The path must be terminated with a zero
  107.      byte.  The path applies only when a file is opened with a default
  108.      drive specification,  and if a path entry is applied the  callers
  109.      FCB is marked with the actual drive on which the file was  found.
  110.      The current default drive is always searched first.
  111.  
  112. 10.  DOS+ makes all $SYS files,  on user area 0,  visible to all users
  113.      for read.  They may not be written to, nor erased from other user
  114.      areas.  Thus common utilities and files can be made public.   All
  115.      $SYS files are treated as read-only, however they may  be  erased
  116.      from their "home" user area.
  117.  
  118. 11.  DOS+  maintains  the $ARC bit,  resetting it whenever a  file  is
  119.      modified.  This can co-operate with archiving programs.  This can
  120.      fail  if  a program performs random writes and fails to close the
  121.      file.
  122.  
  123. 12.  DOS+ can maintain an exact byte count for a file,  using the same
  124.      methods  as CPM3.   When a file is opened,  if the current record
  125.      byte (offset 32 = 020h in the FCB) is set to 0ffh,  the count  of
  126.      unused  bytes  in the last record will be  returned  there.   The
  127.      count  may be set with function call 30 (set file attributes)  by
  128.      setting  the F6 (interface attribute) bit,  and placing the count
  129.      in  the  current  record  byte.   This  count  is  normally  zero
  130.      (indicating no unused bytes), and can range up to 07fh = 127.  F6
  131.      interface bit will be reset when function 30 is complete.
  132.  
  133. 13.  DOS+  scans user area 0 for any file names beginning with '$'  on
  134.      the disk reset call (not the current user, as in CPM2).  This co-
  135.      operates with CCP+,  JOB,  and other utilities so that batch jobs
  136.      can  switch  user areas and continue  functioning.   It  is  only
  137.      compatible with SUBMIT and earlier versions of JOB, //IF, //SKIP,
  138.      ZCPR, etc. when the default user is 0.
  139.  
  140. 14.  Like  CPM3,  the  F5  thru  F8 attribute bits  are  reserved  for
  141.      internal and interface use.  F1 thru F4 are available.
  142.  
  143. 15.  DOS+  returns version number 2.5,  thus avoiding  confusion  with
  144.      CPM3,  and signalling compatibility with CPM2.2.   Later releases
  145.      will return 2.6 up, but less than 3.0.   The  "compatibility bit"
  146.      (see below) can force a 2.2 return value.
  147.  
  148. 16.  DOS+ maintains the entry jump, and the error vectors, in the same
  149.      locations  as  CPM2.2,   for  compatibility  with  programs  that
  150.      intercept errors or follow an RSX chain to find the BDOS module.
  151.  
  152. 17.  DOS+ call #210 (0d2h), with suitable arguments in the E register,
  153.      returns system information.  For version 2.5, the arguments are:
  154.                0      Return base address for BDOS module.
  155.                       Used for dynamic reconfiguration.
  156.                1      Return the current DMA setting.
  157.                2.     Flush any console input pending, emptying
  158.                       all buffers.  Returns 0.
  159.                3.     Returns list device status (ready/not ready)
  160.                4.     Returns punch   "     "          "
  161.                5      Returns reader  "     "          "
  162.      Arguments 3 thru 5 represent ready as 0ffh,  not ready as 0.   If
  163.      no  custom installation for  punch/reader device status  has been
  164.      made (see -INSTALL.DOC) their status  is returned 0  (not ready). 
  165.      Other arguments return 0.
  166.  
  167. 18.  DOS+ call #211 (0d3h) outputs the value in the DE register as  an
  168.      unsigned 16  bit value,  in decimal,  to the console with leading
  169.      zero suppression.
  170.  
  171. 19.  DOS+ can be set in "compatibility" mode, which forces the version
  172.      number call (12 = 0ch) to return 2.2, and eliminates the 0fch and
  173.      0fdh arguments from the DCIO call (#6). This avoids most problems
  174.      with existing programs.
  175.  
  176. 20.  DOS+ maintains  the  "list echo" flag as the 1 (lsb)  bit  in the
  177.      option byte at offset 18h (from the start of BDOS).   This allows
  178.      application programs to dynamically control such echos as well as
  179.      other features (such as breaks, access time stamping, etc).  Call
  180.      #210 with a 0 argument (above) returns a pointer to this area.
  181.  
  182.  
  183.                               C C P +  system
  184.                               ===============
  185.  
  186. CCP+  replaces  the CPM2 CCP and ZCPR.   It is  designed  for  installation
  187. without re-assembly,  supports DU addressing,  wheel byte, du restrictions,
  188. and  is generally suitable for both general use and RCPM use.   CCP+ may be
  189. used  with standard CPM2.2 if desired.   It is incorporated in the  MOVDOS+
  190. DOS+  installation program,  with search options set for use of DOS+ paths.
  191. For details on installation options, read -INSTALL.DOS.
  192.  
  193. The CPM "user" command is eliminated,  in favor of DU addressing.  To login
  194. to drive b,  user 3,  enter "b3:" for example.   To login to user area 2 on
  195. the current drive, enter "2:", etc.  ":" alone as a du specification stands
  196. for all defaults.
  197.  
  198. 1.   DIR  command accepts options "s" (for system files also) and  "o"
  199.      (for  only  system  files)  following  the  file   specification.
  200.      Multiple dir arguments may be entered,  using the ";" to separate
  201.      the sections.  "dir a:;b: o" shows a:, and system files on b:. DU
  202.      specification may be used.   Areas visible may be different under
  203.      wheel and non-wheel states.  The number of entries shown per line
  204.      can be configured at installation time.
  205.  
  206. 2.   The SAVE size argument may have a "+" appended,  to save an extra
  207.      1/2  page (or single record).   "SAVE 3 blah" keeps a 3 page =  6
  208.      record  file,  while "SAVE 3+ blah" keeps a 3 1/2 page = 7 record
  209.      file.  0+ saves 1 record only.
  210.  
  211. 3.   GO command re-executes whatever program is already loaded.   Such
  212.      a program should be self-initializing.
  213.  
  214. 4.   KILL command halts any executing batch job (created by SUBMIT  or
  215.      JOB).   It is intended for conditional use in batch jobs, guarded
  216.      by //IF statements.
  217.  
  218. 5.   CAPS command is a toggle,  and allows lower case command lines to
  219.      be passed to applications.   When executed it reports the current
  220.      status.   This  is useful for command line driven  programs  that
  221.      need lower case arguments (such as Software Tools TRANSLIT).
  222.  
  223. 6.   Extra  blanks are generally acceptable in command lines,  but may
  224.      create  problems when command lines are passed  to  applications.
  225.      Thus  "dir  a:" and "dir       a:" are equivalent.   This  avoids
  226.      nuisance errors.
  227.  
  228. 7.   A configurable option allows the automatic search of A:  whenever
  229.      the file for a transient (.COM) or TYPE command is not found. For
  230.      DOS+ this is normally disabled,  and the path is used.   For CPM2
  231.      this provides most of the abilities of a path.
  232.  
  233. 8.   Whenever a transient application is not found,  the file CCPXTEND
  234.      (.SYS)  is  automatically loaded and passed the complete  command
  235.      line.  This  implements  further searches,  in particular  for  a
  236.      component of COMMAND.LBR,  and can continue to other systems when
  237.      failure  occurs (such as RUNPCD for Pascal,  or MBASIC for  basic
  238.      programs,  or JOB for automatic batch execution).   See  CCPXTEND
  239.      documentation.
  240.  
  241. 9.   Drives  accessible  can  be  configured,  with  individual  drive
  242.      selection,  for  both  wheel and non-wheel status.   This  avoids
  243.      drive  selection error aborts on typing  errors.   Similarly  the
  244.      maximum user areas are configurable.
  245.  
  246. 10.  Individual  commands may be disabled under non-wheel  conditions.
  247.      Any such will attempt to access a transient.  If prefixed by a DU
  248.      specification  any  built-in  name may access a  transient  (i.e.
  249.      "a:dir" will attempt to run a:dir.com,   while "dir" will execute
  250.      the built-in command).
  251.  
  252. 11.  The $$$.SUB file is always on drive A, user 0.   A submit job may
  253.      include commands  to change user areas  and continue functioning.
  254.      The versions of JOB, //IF, //SKIP, XJOB included follow this con-
  255.      vention.   The KILL command avoids creating long  instructions to
  256.      abort jobs when an error is detected.
  257.  
  258.  
  259.                       CCPXTEND.SYS usage (automatic)
  260.                       ==============================
  261.  
  262. This is intended to eliminate any syntactical difference between  execution
  263. of  programs stored in libraries,  and those that reside as files on  disk.
  264. The  available  program names will not appear in a DIR listing (but can  be
  265. shown by SD, a public domain program).
  266.  
  267.  
  268. Use  with  CCP+ results in the following syntax at the CCP level.
  269.  
  270. B>name [command tail]               executes name as a .COM on any
  271.                                     drive specified in the path, or
  272.                                     as a component of COMMAND.LBR
  273.                                     on any drive on the path.
  274.  
  275. B>-d: name [command tail]           Executes name as a component
  276.                                     of d:COMMAND.LBR only.
  277.  
  278. B>-lbrname name [command tail]      Executes name as a component of
  279.                                     lbrname.LBR on drives on the path.
  280.  
  281. B>-d:lbrname name [command tail]    Executes name as a component of
  282.                                     d:lbrname.LBR only
  283.  
  284. B>-d:lbrname.ext name [command tail] Executes name as a component
  285.                                     of d:lbrname.ext only.
  286.  
  287. Overall, the search path for a command without disk spec. is:
  288.       1. default drive, current user (normal CPM stops here)
  289.       2. path drives, current user
  290.       3. default drive, current user, in COMMAND.LBR
  291.       4. path drives, current user, in COMMAND.LBR
  292.       5. Whatever final system is patched into CCPXTEND.SYS
  293.  
  294. (remembering that $SYS files on user area 0 are available at each step)
  295.  
  296. NOTE that if a file -nnn.COM exists it can be executed by CCP+ before  this
  297. CCPXTEND system is reached.
  298.  
  299. CAVEAT:  the  normal SYSGEN program expects to be loaded without disturbing
  300. memory  from 0900h up through about 237fh (varies with system).   Even  the
  301. 0900h  may be invalid for some systems (this is where the  bootstrap  image
  302. goes).   To  use SYSGEN from COMMAND.LBR without taking special precautions
  303. (for altering systems,  e.g. installing CCP+) this program must not disturb
  304. this area. This version (LRUN 2.0.4 or CCPXTEND 1.4) does not disturb 0880h
  305. up, except for the 128 bytes below the CCP.
  306.  
  307. My  personal  usage is to install virtually all utilities  in  COMMAND.LBR,
  308. because my system uses a minimun disk allocation of 2k bytes.  Thus, on the
  309. average,  each  installed program saves 1k bytes of disk space,  and  small
  310. programs even more.  The following should NOT be installed in libraries:
  311.  
  312.         WordStar        because the "Run" command within WordStar
  313.                         must be able to find the file to reload.
  314.                         If you never use this command WordStar may
  315.                         be installed in a library.
  316.         WSxxx.OVR       WordStar cannot find its overlays in a
  317.                         library.
  318.         CCPXTEND.SYS    This program itself MUST be directly
  319.                         available.
  320.  
  321. and, where my Pascal system is installed:
  322.  
  323.         PASCALP.PCD     needs to be available as a file for TUNE
  324.                         to set it's code versus data space usage.
  325.                         If you never compile large programs and
  326.                         want to leave it at some setting, go ahead
  327.                         and install it in PCDS.LBR.  RUNPCD has a
  328.                         build in library search.
  329.  
  330. In  general it is useless to install a program that takes an exact multiple
  331. of the disk allocation unit, except to conserve on directory entries.
  332.  
  333. Using these techniques my normal system disk (390k,  with 64 max  directory
  334. entries)  holds  about  110  programs,  and uses only  about  20  directory
  335. entries.  LRUN is constructed as an "ALIAS" entry for CCPXTEND (or you  may
  336. consider it the reverse if you prefer).  I have a compiler, 4 assemblers, 3
  337. linkers,  editor, BBS system, modem program, foreign disk drivers, spooler,
  338. unspooler,  PCD interpreter,  batch system with conditionals, find and sort
  339. utilities,  library  utilities,  squeeze/unsqueezers,  cross-referance  for
  340. Pascal,  Zilog,  Intel  8080,  8086 assemblers,  and much more  immediately
  341. available.  I virtually never have to change the system disk.
  342.  
  343.  
  344.                         JOB (v. 1.5) Documentation
  345.                         ==========================
  346.  
  347. JOB  is an improved submit facility for CP/m systems,  evolved from  public
  348. domain SUPERSUB by Ron Fowler.  JOB is copyright (c) 1983, 1984, 1986 by:
  349.  
  350.      C.B. Falconer,  680 Hartford Tpk, Hamden, CT 06517. (203) 281-1438
  351.  
  352. JOB may be executed interactively (by "job /") or completely from  the com-
  353. mand line (by "job / instruction").  Entering "JOB" with no parameters will
  354. give a short summary. 
  355.  
  356. JOB allows parameters to be terminated by commas,  thus a pair (i.e.  ",,")
  357. can  specify  a  null parameter.  In addition,  parameters can  be  "quoted
  358. strings", to allow any input whatsoever. In a quoted string a quote must be
  359. represented  by two quotes.  JOB also accepts empty input lines  (e.g.  PIP
  360. exit command).
  361.  
  362. JOB creates the $$$.SUB file on drive A,  (user 0 as of JOB15) and thus can
  363. be executed with any setting of the default drive. In addition JOB searches
  364. both the default and A drives for the .JOB file when no drive is  specified
  365. in  the  command  line,  and (ver 1.4) if no .JOB file has yet  been  found
  366. searches default and system disks for a component of JOBS.LBR file.
  367.  
  368. Thus  a  set of small .JOB files can be packed into JOBS.LBR  and  executed
  369. directly.  When many .JOB files are used this can significantly reduce disk
  370. storage
  371.  
  372. An  initial line in the .JOB file beginning with ";;"  (double  semi-colon)
  373. signifies that the line specifies a default set of parameters ($0 thru $9).
  374. These  are  only  used  when the execution command  line  does  not  supply
  375. parameters.
  376.  
  377. JOB does not arbitrarily upshift anything,  however an unmodified CCP  will
  378. probably upshift all input lines. CCP+ can be set to avoid this upshifting.
  379.  
  380. JOB  will accept most files created for SUBMIT,  unless supplied parameters
  381. include commas and quotes.  Since the reverse is not true JOB expects  its'
  382. input files to be of type .JOB.
  383.  
  384. JOB15  up is organized to co-operate with CCP+/DOS+ and execute  jobs  thru
  385. changes in user number.
  386.  
  387. A  test file to demonstrate JOB parameter handling appears below (note null
  388. line, and use of initial ";" so that lines are comments to CCP+):
  389.  
  390.      ;;testingjob parm1, "parm2",, parm4 parm5, ," parm ""7"", "
  391.      ; null defaults for parm3, parm6, parm8, parm9
  392.      ;$1;
  393.  
  394.      ;$2;
  395.      ;$3,$4,$5,$6;
  396.      ;$7;
  397.      ;$8;
  398.      ;$9;
  399.      ;$0; <<end of test file>>
  400.  
  401. try A>JOB TESTJOB
  402.                       where testjob is the above file from the ";;"
  403. This simply shows a set of comment commands on the console.
  404.  
  405.  
  406.                        Conditional batch operations
  407.                        ============================
  408.  
  409. These  are  handled by //IF and //SKIP programs,  which are  documented  in
  410. IFSKIP.DOC (.DZC) separate file.  When combined with the facilities of JOB,
  411. XJOB, CCP+, and DOS+ an extremely powerful batch capability results.
  412.  
  413.  
  414.                                DDTZ debugger
  415.                                =============
  416.  
  417. DDTZ is documented in the separate file DDTZ.DOC (.DZC)
  418.  
  419.  
  420.                                  Utilities
  421.                                  =========
  422.  
  423. All utilities give a short synopsis of their commands when executed with no
  424. parameters, or with '?' parameter. MOVDOS+, //IF and //SKIP are exceptions.
  425.  
  426.  
  427. INITDIR  allows re-organization of existing disks (or hard drives) for time
  428. stamping.  Files and directories are preserved.  Directories are sorted.
  429.  
  430. FDATE allows examination of file time stamps, similar to DIR.
  431.  
  432. MOVDOS+ allows generation of various sized system images. See -INSTALL.DOS.
  433.  
  434. JOB, //IF, and //SKIP are discussed above.  XJOB replaces XSUB and is docu-
  435. mented in a separate file, and makes programmed console input feasible.
  436.  
  437. ENSPOOL (ENSPOL10) allows all  lister output  to be spooled  to a specified
  438. disk file.  To initialize do "enspool filename.typ".  Output echoed  to the
  439. list device (by CTL-P) will not be spooled, nor will output via direct bios
  440. calls.  ENSPOOL is removed by executing it again.   Note that until this is
  441. done the output file is open, and the appropriate disk must NOT be changed.
  442.  
  443. UNSPOOL (UNSPOL42) unspools a disk file to the list device.   It is started
  444. by "unspool filename.typ".
  445.  
  446. CCPXTEND.SYS is necessary for automatic access to files in COMMAND.LBR.
  447.  
  448. SETFLAGS allows dynamic re-configuration of  some DOS+ parameters,  in par-
  449. ticular use of breaks, file access time stamping, and  compatibility  mode.
  450. Executing SETFLAGS with no parameters shows the command syntax.   When SET-
  451. FLAGS completes it does not reboot, so that the altered configuration  will
  452. be in effect for the next program run.   Unless RSX's  are  mounted  (which
  453. includes ENSPOOL and UNSPOOL) the next reboot will reset the configuration.
  454.  
  455. FCOPY copies files across user areas.  Unlike PIP it purges the destination
  456. file first, allowing copying to full disks.  However disk failures can then
  457. lose a file.  The default destination name is the source name if on a diff-
  458. erent drive or user (or both).  -v flag causes verification.
  459.  
  460. FDIFF does a binary comparison between files.  The default "destination" is
  461. the "source" name, on a different drive or user (or both).
  462.  
  463. TIME allows setting and  interrogation of  the system time.   Note that the
  464. timer provisions are usable without any real-time-clock, by manual  setting
  465. of the timer.  "time ?" gives help,  "time" reports,  "time yy/mm/dd hh-mm"
  466. sets the system time.  Note use of ISO standard date format,  and that "hh"
  467. is 24 hour (0..23) time.  Punctuate as shown.
  468.  
  469.  
  470. Acknowledgement
  471. ===============
  472.  
  473. DOS+ builds heavily on the earlier P2DOS created by H.A.J. Ten Brugge,
  474. Molenstraat 33, NL-7491 BD Delden, The Netherlands.  Tel..31-5407-1980
  475. Contributions by Gary Novasielski, Ron Fowler, and many others have been
  476. shamelessly incorporated into the system.
  477.  
  478.  
  479. The timer string and routine
  480. ============================
  481.  
  482. The timer address should point to a byte array, where
  483.  
  484.        byte 0 = low byte  } of DR format date, an integer count of
  485.        byte 1 = high byte } days since 78/1/1   (78/1/1 = 1)
  486.        byte 2 = hour, 0..23 (in BCD)
  487.        byte 3 = minute, 0..59 (in BCD)
  488.        byte 4 = second, 0..59 (in BCD).
  489.  
  490. If the timer address is a routine it should return hl a pointer to the
  491. above array.  If the (bc) register is non zero on entry the time is to
  492. be set, and the bc register points to the array to  set (4 bytes only,
  493. the seconds byte should be set to zero).
  494. º