home *** CD-ROM | disk | FTP | other *** search
/ CP/M / CPM_CDROM.iso / cpm / news / cpmnet81.apr < prev    next >
Text File  |  1994-07-13  |  28KB  |  737 lines

  1.  
  2. >>>>>>>>>>>>>>>>>>>>> CP/M-Net News <<<<<<<<<<<<<<<<<<<<<<<<
  3.  
  4. ============================================================
  5. Number 4           April, 1981       Volume 4, Issue 4
  6. ============================================================
  7.  
  8.               In This Issue
  9.               =============
  10.  
  11.           Programming Style Comparisons:
  12.     Digital Research PL/I-80 and Microsoft BASIC
  13.            by: Michael J. Karas
  14.  
  15.     Installing a Computer Bulletin Board Program
  16.              by: Ben Bronson
  17.  
  18.            CP/M-Net "Tip-of-the-Month"
  19.     Changes Required to XMODEM and TAG When Using MP/M
  20.            by: Richard Rodman
  21.  
  22.  
  23. ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  24.  
  25.            >>>>> SPECIAL NOTICE <<<<<
  26.  
  27.  The    following   information   was    "down-loaded"    from
  28. CBBS/Detroit on March 1,  1981.  Please pass this around  to
  29. any other CBBS, RCPM or ABBS that you use.
  30.  
  31.  "Sunday,  22  February  1981:    A.B.S Computer    Services  in
  32. Olympia  Washington  was robbed and its  owners,  Henry  and
  33. Laverne Rumburger, were killed."
  34.  
  35.  "The  following  is  a partial list of  items    stolen    with
  36. serial numbers.  Note especially the Apple III!  With few of
  37. them around, it might easier to find."
  38.  
  39.  "If  you  discover any of these  items,  contact  Detective
  40. Jones, Olympia, Washington Police, (206)-753-8300."
  41.  
  42. The stolen items are:
  43.  
  44.      Apple III        (128k)           #001065
  45.      Apple II        (A2M030)           #11892
  46.      Apple II        (48k/A2SA)           #152415
  47.      Apple II        (48k)           #95802
  48.      Disk II        (with controller)  #215227
  49.      BMC Monitor               #65101709
  50.      Sony KB1216 television           #503527
  51.      Centronics 737 printer           #12349
  52.  
  53. ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  54.  
  55.  
  56.         Programming Style Comparisons:
  57.         ==============================
  58.  
  59.      Digital Research PL/I-80 and Microsoft BASIC
  60.      ============================================
  61.  
  62.              by: Michael J. Karas
  63.  
  64.  I   recently  purchased  a  copy  of  a  newly   introduced
  65. applications   programming  development  system  that  is  a
  66. microprocessor     oriented   implementation   of   the    PL/I
  67. programming language.  This language,  developed by  Digital
  68. Research Inc.,    Pacific Grove, CA, is a powerful, structured
  69. compiler  that is based upon the ANSII Standard PL/I  Subset
  70. G. Gary Kildall of DRI has made this package compatible with
  71. the  CP/M operating system for use on 8080/8085/Z80 types of
  72. microprocessors.  The machine code developed by the compiler
  73. is also compatible with the above family of microprocessors.
  74.  
  75.  PL/I  was  originally developed by IBM as  a  large  system
  76. language  that    was  to be the last answer  for  programming
  77. languages  in  that  it contained  capabilities  similar  to
  78. FORTRAN,  COBOL, ALGOL, and PASCAL. Over the years since its
  79. introduction PL/I has gained a reputation and a "following".
  80. The  reputation has been that the compiler is huge and    that
  81. the  machine code modules produced are also huge.  (ie    many
  82. many bytes of memory are needed to run the compiler and  the
  83. resulting programs).  The "following" is a growing number of
  84. systems  and applications programmers that have come to know
  85. the power of PL/I,  ease of developing programs,  degree  of
  86. self documentation within programs,  structure,  and ease of
  87. maintaining  programs.    As  the language  gained  popularity
  88. several   manufacturers  of  minicomputers  (including    DEC)
  89. developed subset implementations of PL/I for their machines.
  90. Somewhere  along the line a committee was formed to  develop
  91. an   ANSII   standard    PL/I  subset   to   permit   program
  92. transportability.  Note  that the idea of developing a    PL/I
  93. subset was not to remove power or to limit capability of the
  94. language.  Instead,  much redundancy and feature overlap was
  95. removed  to  make  the    compiler  requirements    smaller  and
  96. manageable in "minicomputer amounts of memory".
  97.  
  98.  About three years ago Gary Kildall of Digital Research  saw
  99. that  there  would be a need and a market place for  a    good
  100. compiler type language for microprocessors.  He decided that
  101. PL/I in a subset form would be the way to go. The results of
  102. his (and I'm sure also that of others at Digital) efforts is
  103. PL/I-80.  This compiler, in my opinion, is the best thing to
  104. happen    to  the microprocessor field in several  years.  For
  105. those people who are serious applications programmers trying
  106. to develop sophisticated applications packages,  the PL/I-80
  107. system is the way to go.  The reasons are multitude, some of
  108. which  were mentioned in the previous paragraphs.  In  using
  109. PL/I-80  for  several  months now I have  to  say  that  the
  110. programs  made    in  PL/I  are  blessed    with  the  following
  111. advantages:
  112.  
  113. a) Structure is inherent in the programming style.
  114.  
  115. b) Programs are extremely self documenting.
  116.  
  117. c)   The compiler is fast!...  and makes efficient code that
  118.    also runs fast!
  119.  
  120. d)  Linkage  of programs to assembly language  or  the    CP/M
  121.    operating system is really easy!
  122.  
  123. e)  The  linkage  capability  includes an easy    to  use  and
  124.    powerful library and overlay generation capability.
  125.  
  126. f) Data types included in the language are comprehensive.
  127.  
  128.  The  PL/I-80 system has some small disadvantages that    I'll
  129. mention just to set things straight for all those people who
  130. are  hung  up on other languages for various  good  reasons.
  131. Being a compiler the development time from coding to running
  132. code is much longer that an intrepreted language like BASIC.
  133. The  program  development  time for the  inexperienced    PL/I
  134. programmer  will  generally  be about 5 times  as  great  as
  135. programming  in  BASIC.  I  have  found  that  as  I  gained
  136. familiarity  with the PL/I-80 features and had the use of  a
  137. good screen mode video editor that program development    time
  138. was some what less than twice that of BASIC.
  139.  
  140.  Also  small  programs seem to turn in to awful  large    .COM
  141. files. (small programs that do any I/O get large fast due to
  142. included   device   and  file  interface  code.)  The    real
  143. efficiency  of the generated code is felt when    source    code
  144. programs  start to get up into the hundreds of lines.  Small
  145. programs will typically be 60 to 100 lines and will generate
  146. 9 to 15 k bytes of machine code.  Once large portions of the
  147. runtime  library  become utilized by  the  programs  logical
  148. contents  then    each additional 20 to 30 lines of  code  may
  149. only add a portion of a "Kbyte" to the .COM file.
  150.  
  151.  Program  checkout also tends to be harder if you desire  to
  152. be a "seat of the pants" programmer. Small editing and logic
  153. mistakes  cause a lot of time to be consumed in  re-editing,
  154. re-compiling,  and  re-linking    the  program that  is  under
  155. development.   Most  BASIC  programmers  I  know,  including
  156. myself,  tend  to  design and kludge programs right  at  the
  157. console  due to immediate testing convenience offered by  an
  158. interpretive language.    A more serious programmer will    tend
  159. to  "design and conceptualize" a program ahead of the coding
  160. process.  This makes a better, more structured, well thought
  161. out, and logically correct program. (For additional thoughts
  162. on design and conceptualization see Greg Williams  editorial
  163. on  page 6 of the March 1981 BYTE Magazine).  When I make  a
  164. PL/I program it tends to be developed by the latter process.
  165. The  linking capability also allows programs to be developed
  166. in  modules so that editing and manipulation of programs  is
  167. done in small pieces.
  168.  
  169.  I often get asked the question, 'What is PL/I-80 like?'. In
  170. an attempt to answer that the remainder of this article will
  171. present  a programming problem in both Microsoft  BASIC  and
  172. Digital Research PL/I-80. The aim is not to try to teach the
  173. reader    how to write PL/I-80 programs or to demonstrate  the
  174. full power of the language. I also want to stress that while
  175. this  example can be implemented in either BASIC or PL/I-80,
  176. it  should be noted that the latter language will  generally
  177. provide  a  much  better vehicle  for  implementing  complex
  178. algorithms  into  a program due to  the  available  language
  179. features   and     constructs.   Obviously  this     cannot   be
  180. demonstrated  in  a  short article as  this.  The  following
  181. examples  are meant primarily to show one simple  method  of
  182. solving   the    same  problem  in  two    different   computer
  183. languages.  The comparison to BASIC was selected due to  the
  184. fact  that  more readers probably know BASIC than any  other
  185. language.  This  will permit the most enjoyable contrast  of
  186. programming styles for those readers that are just now going
  187. to get their first glimpse of PL/I-80.
  188.  
  189.  The  example programs are both designed to perform  exactly
  190. the    same   function.    The     idea    is   to    read    a
  191. name/address/telephone number file in sequence.  The data is
  192. then  formatted to list the names and addresses in a  format
  193. compatible with mailing labels on the printer.    As each name
  194. is  printed on its label,  the name and telephone number are
  195. listed    on  the  console.   This  example  is  designed  for
  196. demonstration  purposes  only  and  may  not  represent   an
  197. efficient  or feasible implementation of the above name  and
  198. address algorithm.
  199.  
  200.  The  input  data to the program is expected to exist  in  a
  201. file  named "NAMES.DAT" on the default CP/M disk  unit.  The
  202. demo  format  for this file and some test records are  shown
  203. below. Note that the data may have been formatted into these
  204. records by another program or through use of an editor. Also
  205. the field length is only typical and may be impractical in a
  206. real  processing  application.    Field identification  is  as
  207. follows:
  208.  
  209.      last name, 8 bytes
  210.      first name, 8 bytes
  211.      middle initial, 1 byte
  212.      address, 20 bytes
  213.      city, 11 bytes
  214.      state, 2 bytes
  215.      zip code, 5 bytes
  216.      phone number, 10 bytes
  217.  
  218.  Records  are terminated with carriage return and line    feed
  219. pairs.
  220.  
  221.               EXAMPLE INPUT DATA
  222.               ------------------
  223.  
  224. KARAS    MICHAEL J2468 HANSEN CT      SIMI VALLEYCA930658055277922
  225. SMITH    KELLY    S3055 WACO AVE         SIMI VALLEYCA930638055270518
  226. JOHNSON JACOB    B2793 ANDREW COURT   MANKADO    MN567056123424469
  227. ERICKSONSHIELA    P454 B UNIVERSITY AVEFARGO    ND581024154435523
  228. WILLIAMSDALE    F35912 CIRCLE MTN DR DAVENPORT    IW590342179657451
  229. HANSEN    MICHAEL H2486 KARAS CT         SIMI VALLEYCA930658055279355
  230. KARAS    HANSEN    J8324 MICHAEL CT     SIMI VALLEYCA930658055277922
  231. NIXON    GERALD    R9355 KENNEDY BRIDGE OVER RIVER MS204312225551212
  232. PAULSON DEBBI    Q6699 HOLLOW TREE RD ROLLING LOGIL569433984535551
  233. ABUSE    VERBAL    T23 BELOW NOSE         FACE CITY    NY432216589412257
  234. PRETTY    BOY    M523 TOO SHORT CT    BUMMER HILLKS582344325673349
  235.  
  236.  
  237.  The   following   program  listing   presents     a   PL/I-80
  238. implementation of a program to read the above data and print
  239. the  console  list  and  the mail  labels  at  the  printer.
  240. Observation of the program structure and the various PL/I-80
  241. constructs is left for the reader.
  242.  
  243. /******************************************************************
  244.  
  245.     A SHORT MAILING LABEL PRINTING PROGRAM IN PL/1-80
  246.  
  247.  *****************************************************************/
  248.  
  249. maillab:
  250.     procedure options(main);
  251.     dcl                /* declare all variables */
  252.         database    file,
  253.         syslist        file,    /* printer output name */
  254.         nulstr        char(1) varying,
  255.         1 record,        /* a structure for data */
  256.           2 lastname    char(8),
  257.           2 firstname    char(8),
  258.           2 midinit    char(1),
  259.           2 address    char(20),
  260.           2 city    char(11),
  261.           2 state    char(2),
  262.           2 zip_code    char(5),
  263.           2 phone_num    char(10),
  264.           2 filler    char(2), /* cr-lf filler from record */
  265.         1 phone_format    based(p),/* overlay template for phone # */
  266.           2 area    char(3),
  267.           2 prefix    char(3),
  268.           2 line    char(4),
  269.         p        pointer;
  270.  
  271.     open file(database) input record sequential title('names.dat');
  272.     open file(syslist) output stream print title('$lst');
  273.  
  274. /* setup what to do if we try to read the file and there is no more data */
  275.  
  276.     on endfile(database) begin;
  277.                 close file(database);
  278.                 put file(syslist) skip;
  279.                 stop;
  280.                  end;
  281.  
  282. /* tell operator to put mail labels into printer */
  283.  
  284.     put edit('Put mail labels into printer.',
  285.          'Type "GO" when ready....')
  286.         (skip(3),a,skip,a);
  287.     get list(nulstr);
  288.  
  289. /* set address pointer for phone format overlay template */
  290.  
  291.     p=addr(record.phone_num);
  292.  
  293. /* read data into structure and then print the mail labels */
  294.  
  295.     do while('1'b);        /* a forever loop!? */
  296.  
  297.         read file(database) into(record);
  298.  
  299.         /* put names and phone numbers to console */
  300.  
  301.         put skip edit(strip(firstname),' ',
  302.                   strip(lastname),' (',
  303.                   area,') ',prefix,'-',line)
  304.              (3(a),col(30),6(a));
  305.  
  306.         /* print names to printer on mail labels */
  307.  
  308.         put file(syslist) edit(strip(firstname),midinit,
  309.                        '.',strip(lastname),
  310.                        strip(address),strip(city),
  311.                        state,zip_code)
  312.                 (skip(3),a,x(1),a,a,x(1),a,skip,a,
  313.                  skip,3(a,x(2)));
  314.     end;
  315.  
  316. /* function routine to return a string of varying length based upon
  317.    input string with all trailing blanks removed */
  318.  
  319. strip:
  320.     proc(string) returns(char(50) varying);
  321.     dcl
  322.         string    char(50) varying,
  323.         i,j    bin fixed(15);
  324.  
  325.     i=0;
  326.     do i=0 repeat (i+1)
  327.         while(substr(string,(length(string)-i),1)=' ');
  328.     end;
  329.     string=substr(string,1,(length(string)-i));
  330.     return (string);
  331.     end strip;
  332.  
  333.     end maillab;
  334. /* end of pl/i program */
  335.  
  336.  The  following  listing  shows  a  simple  Microsoft  BASIC
  337. program to perform the same function of printing the console
  338. listing  and  mail labels upon the printer.  Once again  the
  339. program  analysis  is  left to the  reader.  Note  that  the
  340. logical  program  structure  of the BASIC  program  is    kept
  341. nearly     the  same  as    the  previous  PL/I-80    program   to
  342. facilitate program comparisons.
  343.  
  344. 10 REM
  345. 20 REM           A SHORT MAILING LABEL PROGRAM IN MBASIC
  346. 30 REM
  347. 40 REM
  348. 50 REM     TELL OPERATOR TO PUT LABELS INTO PRINTER
  349. 60 REM
  350. 70 PRINT:PRINT:PRINT
  351. 80 PRINT "Put mail labels into printer."
  352. 90 INPUT "Type 'GO' when ready....",NUL$
  353. 100 OPEN "I",#1,"NAMES.DAT"
  354. 110 REM
  355. 120 REM  SETUP FOR END OF FILE EXIT
  356. 130 REM
  357. 140 IF EOF(1)<0 THEN 470
  358. 150 REM
  359. 160 REM   READ FILE RECORD AND FORMAT DATA
  360. 170 REM
  361. 180 LINE INPUT #1,REC$
  362. 190 STRIP$=MID$(REC$,1,8)
  363. 200 GOSUB 530
  364. 210 LN$=STRIP$
  365. 220 STRIP$=MID$(REC$,9,8)
  366. 230 GOSUB 530
  367. 240 FNM$=STRIP$
  368. 250 MI$=MID$(REC$,17,1)
  369. 260 STRIP$=MID$(REC$,18,20)
  370. 270 GOSUB 530
  371. 280 AD$=STRIP$
  372. 290 STRIP$=MID$(REC$,38,11)
  373. 300 GOSUB 530
  374. 310 CTY$=STRIP$
  375. 320 ST$=MID$(REC$,49,2)
  376. 330 ZP$=MID$(REC$,51,5)
  377. 340 PH$=" ("+MID$(REC$,56,3)+") "+MID$(REC$,59,3)+"-"+MID$(REC$,62,4)
  378. 350 REM
  379. 360 REM PRINT NAME AND PHONE NUMBERS TO CONSOLE
  380. 370 REM
  381. 380 PRINT FNM$;" ";LN$;TAB( 30);PH$
  382. 390 REM
  383. 400 REM PRINT NAMES ON LABELS AT PRINTER
  384. 410 REM
  385. 420 LPRINT:LPRINT
  386. 430 LPRINT FNM$;" ";MI$;". ";LN$
  387. 440 LPRINT AD$
  388. 450 LPRINT CTY$;"  ";ST$;"  ";ZP$
  389. 460 GOTO 140
  390. 470 CLOSE 1
  391. 480 SYSTEM
  392. 490 END
  393. 500 REM
  394. 510 REM   SUBROUTINE TO STRIP EXCESS BLANKS OFF THE END OF A STRING
  395. 520 REM
  396. 530 IF MID$(STRIP$,LEN(STRIP$),1)<>" " THEN RETURN
  397. 540 STRIP$=MID$(STRIP$,1,LEN(STRIP$)-1)
  398. 550 GOTO 530
  399.  
  400.  If  either of the above programs is run the output  at  the
  401. console  appears  as follows.  <cr> indicates operator    data
  402. entry and carriage return key depression.
  403.  
  404.          CONSOLE OUTPUT FROM PROGRAM
  405.          ---------------------------
  406.  
  407. Put mail labels into printer.
  408. Type 'GO' when ready....GO<cr>
  409.  
  410.  
  411.  
  412. MICHAEL KARAS              (805) 527-7922
  413. KELLY SMITH              (805) 527-0518
  414. JACOB JOHNSON              (612) 342-4469
  415. SHIELA ERICKSON           (415) 443-5523
  416. DALE WILLIAMS              (217) 965-7451
  417. MICHAEL HANSEN              (805) 527-9355
  418. HANSEN KARAS              (805) 527-7922
  419. GERALD NIXON              (222) 555-1212
  420. DEBBI PAULSON              (398) 453-5551
  421. VERBAL ABUSE              (658) 941-2257
  422. BOY PRETTY              (432) 567-3349
  423. A>
  424.  
  425.  The following listing shows the printer output from  either
  426. program.  Only a portion of the listing is shown to give the
  427. idea without wasting too much paper.
  428.  
  429.               PRINTER OUTPUT
  430.               --------------
  431.  
  432. MICHAEL J. KARAS
  433. 2468 HANSEN CT
  434. SIMI VALLEY  CA  93065
  435.  
  436.  
  437. KELLY S. SMITH
  438. 3055 WACO AVE
  439. SIMI VALLEY  CA  93063
  440.  
  441.  
  442. JACOB B. JOHNSON
  443. 2793 ANDREW COURT
  444. MANKADO  MN  56705
  445.  
  446.  
  447. SHIELA P. ERICKSON
  448. 454 B UNIVERSITY AVE
  449. FARGO  ND  58102
  450.  
  451.  
  452. DALE F. WILLIAMS
  453. 35912 CIRCLE MTN DR
  454. DAVENPORT  IW  59034
  455.  
  456.  
  457. MICHAEL H. HANSEN
  458. 2486 KARAS CT
  459. SIMI VALLEY  CA  93065
  460.  
  461. ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  462.  
  463.     Installing a Computer Bulletin Board Program
  464.     ============================================
  465.  
  466.              By: Ben Bronson
  467.  
  468.  If  you  want    to  put up a bulletin  board  or  a  program
  469. exchange  system that runs under CP/M (and if you don't want
  470. to  write all your own software from scratch) you  have  two
  471. choices:  Ward    Christensen's  and Randy  Suess's  assembly-
  472. language  CBBS and the BASIC-language RBBS written by Howard
  473. Moulton, Bruce Ratoff, Ron Fowler, Tim Nicholas and others.
  474.  
  475.             The Real CBBS
  476.             -------------
  477.  
  478.  CBBS is the daddy of all bulletin board programs for micro-
  479. computers  and as such has been imitated to some  extent  by
  480. all other public-domain and commercial BBS software.   It is
  481. also an excellent program: fast, compact, and flexible.  One
  482. of  its  best features is its sophisticated message  editing
  483. capability. However, as its authors tell the would-be system
  484. operator  quite  plainly,  installing  it  (not  to  mention
  485. modifying  it)    does require a good  knowledge    of  assembly
  486. language.   CBBS  is written as a whole set of modules    that
  487. have to be configured,    then linked,  and finally maintained
  488. with another set of programs.
  489.  
  490.  If you are good at assembly language,    you should certainly
  491. choose    it  over RBBS.     The cost is negligible in terms  of
  492. what you get -- Send a check for $50 made out to Randy Suess
  493. to:  CBBS,  5219 W Warwick,  Chicago,  Ill. 60641.  You will
  494. receive  a  copy of the CBBS source program and files  on  2
  495. CP/M format soft sectored 8" floppy disks.
  496.  
  497.                MINICBBS
  498.                --------
  499.  
  500.  If you are only moderately familiar with assembler and want
  501. to  run  a system dedicated to software  downloading  rather
  502. than   message    interchange,   there  is  one    intermediate
  503. alternative  that  should be  mentioned:   Keith  Petersen's
  504. stripped-down version called MINICBBS,    which runs as a  COM
  505. file  on  a CP/M system to which (as is normal with  program
  506. downloading or RCPM setups) the caller has access.  MINICBBS
  507. can  be obtained in already assembled form from any  of  the
  508. SYSOPS (Keith himself,    Dave Hardy,  Calamity Cliffs or Dave
  509. Moritz)  who  use  it,    but (as CBBS is copyrighted  and  as
  510. MINICBBS  needs  several of the  auxiliary  and  maintenance
  511. programs  supplied on the CBBS distribution disks) they will
  512. only  release it to those who have  bought  CBBS.   MINICBBS
  513. retains  the  good  message editingfeatures  of  its  parent
  514. program and occupies only about l0K of disk space.   It is a
  515. good deal easier to get up and running than the full CBBS.
  516.  
  517.  The  only  disadvantages  of MINICBBS are (1)    that  making
  518. modifications  requires greater familiarity  with  assembler
  519. and  (2)  that    its  method of storing    new  messages  makes
  520. keeping  these private from other users a  bit    complicated.
  521. The  programs  to  do this are well worked out    and  in  the
  522. public domain (for example,  SECURITY.ASM and TAG2.ASM), but
  523. most  MINICBBS    sysops still find it necessary to  keep  the
  524. program  and  its messages in a very high user area  and  to
  525. move  everything  back    down whenever they want to  do    some
  526. purging and editing.
  527.  
  528.              RBBS, Etc.
  529.              ----------
  530.  
  531.  The main (and only) alternative to the CBBS series is    RBBS
  532. or  its  two  RCPM-specialized    descendants,   ENTERBBS  and
  533. MINIRBBS.  The RBBS programs have several shortcomings.   In
  534. their  current    form  they  have  inferior  message  editing
  535. features.   They  are impossibly slow when run as BAS  files
  536. under  MBASIC.     And when compiled with BASCOM (which  makes
  537. them almost as fast as CBBS or sometimes even as fast), they
  538. are  bulky.   A compiled RBBS occupies 34K of disk space and
  539. RAM,  and  a  compiled    MINIRBBS needs 30K  all  by  itself,
  540. compared with the 10K used by MINICBBS.   While most  people
  541. have enough RAM so that size in memory is not a problem, the
  542. RBBS  series performs noticeably worse on systems with    slow
  543. disk drives.
  544.  
  545.  On the other hand, RBBS has a single great advantage: it is
  546. a  lot    easier    to  install.   If you  have  a    very  modest
  547. knowledge of BASIC and own or have access to BASCOM, you can
  548. get a RBBS system up and running in a single evening,  while
  549. installing  CBBS  takes several days for a  crack  assembly-
  550. language  programmer.    To  the RCPM operator its use  of  a
  551. MBASIC-type  sequential message file is also an advantage --
  552. access to messages can be controlled simply by declaring the
  553. MESSAGES file a $SYS file,  and can easily be protected from
  554. XMODEMing by using TAG2.COM.
  555.  
  556.  RBBS is essentially self-explanatory, but a few notes might
  557. ease the installation process even  further.   Briefly,  one
  558. becomes an RBBS SYSOP like this:
  559.  
  560.            Installing RBBS
  561.            ---------------
  562.  
  563. (1)  Get  RBSUTL22.BAS (or ASC) and RBBS24.BAS    (and  later,
  564. ENTBBS24  & MINBBS24.BAS as well) from a local RCPM  system.
  565. As  indicated earlier,    you will also need to have a version
  566. of  BYE (PMMIBY63,  BYE65 and BYE67 all can load a COM    file
  567. automatically    after  bringing  themselves  up   when     the
  568. telephone  rings,  so choose one of those -- the COM file in
  569. question will of course be RBBS.COM).
  570.  
  571. (2) Try the program with MBASIC in interpreter    mode.    Just
  572. type MBASIC RBBS24 and see what happens.
  573.  
  574. (3) Look at the disk directory after you have exited back to
  575. CP/M.    You'll    notice    that  several new  files  have    been
  576. created:   MESSAGES,   CALLERS,  USERS,  COUNTERS,  SUMMARY,
  577. LASTCALR and (if you have left yourself a comment) COMMENTS.
  578. These  are  7/11 of the auxiliary files that a    full-fledged
  579. RBBS can use, and 7/7 of those it absolutely has to use.
  580.  
  581. (4) Now use an editor (or a word processor that does not put
  582. queer  control    characters  in the  file--WordStar  in    non-
  583. document  mode works fine) to write four brief    text  files.
  584. Put  amything  you want into three of them,  and  call    them
  585. INFO,  BULLETIN and NEWCOM.   Just that.   Filenames without
  586. filetypes.  The fourth file, PWDS, should contain only three
  587. words separated by commas:
  588.  
  589.         HONDURAS,BANANA,NOPASS
  590.  
  591.  These are the P1$,  P2$ and P3$ you will see referred to in
  592. the early parts of the source code.  "HONDURAS" and "BANANA"
  593. can be replaced with whatever you like;  those are passwords
  594. for  you,  the    SYSOP  to use for quick entry  and  message-
  595. killing authority within the system.   "NOPASS" is what  you
  596. put  in if the system is to be for unrestricted public    use.
  597. Anything  else here will become the access password for  all
  598. users.    Now return to CP/M.
  599.  
  600. (5)  Try the MBASIC RBBS routine again several times.    Sign
  601. in with the same name,    then with different  names.   Notice
  602. which  text files are printed where when the name is new and
  603. when  it  is one the program  already  knows.    Try  signing
  604. yourself  in  with the first name SYSOP and the second    name
  605. anything but BANANA or whatever your P2$ is.   When you have
  606. had enough of this,
  607.  
  608. (6) TYPE all the files with one-word names to see what    they
  609. look like.  If you look at them with an editor you'll notice
  610. that  the  ones created by the program rather than  you  all
  611. have fixed-length lines.  Use the editor to put asterisks in
  612. front  of  a  couple of the names you've invented  that  are
  613. already   in   the  USERS  file.    Make  sure     you   don't
  614. inadvertently make the lines with asterisks longer than  the
  615. others,  and  put the asterisks at the very beginning of the
  616. line.
  617.  
  618. (7) Go back to CP/M and do MBASIC RBBS24.   Sign in with one
  619. of  the names you have marked with an asterisk and see    what
  620. happens.  Play around with passwords a bit more.  By now you
  621. should understand most of the program's tricks.
  622.  
  623. (8)  So  go  into  RBBS24 (again  with    an  editor  or    word
  624. processor  that does not create MBASIC-incompatible  conttol
  625. characters) and personalize the various messages that appear
  626. in  quotation  marks.    Exit.    Test with MBASIC.   Try  all
  627. combinations  of  commands and make sure  they    still  work.
  628. Kill  a  couple of messages.   Notice that you can kill  the
  629. passworded ones if you're the SYSOP.
  630.  
  631. (9) Next try RBSUTL22.BAS.  Run it with MBASIC.  Look at the
  632. menu  and  do what it tells you to do.     Purge the  file  of
  633. killed    messages.   Remember  to rebuild the  SUMMARY  file.
  634. Exit.  Look  at the directory and what has happened  to  the
  635. MESSAGES  and other files.   Now you know how to maintain an
  636. RBBS system.
  637.  
  638. (10) And then compile.     You'll need about 50-52K of  memory
  639. to hold both BASCOM and RBBS.    If you don't have that much,
  640. prevail  on  a friend or a local SYSOP (who is likely to  be
  641. delighted  at the idea of a new system that'll take some  of
  642. the  pressure off his) to compile it for you.    Use  the  /X
  643. switch    (check the manual for why if you're curious).    Load
  644. with L80 with the /E and /N switches.  And presto.  You have
  645. a file called RBBS24.COM.  Do the same with RBSUTL22.
  646.  
  647. (11) Run it.  Make sure it works as advertised.  Notice that
  648. it  picks up all the files created while you were trying the
  649. program  out with MBASIC and treats those files as its    own.
  650. Rewrite  the INFO,  BULLETIN and NEWCOM files so  that    they
  651. contain  appriate messages.   Test RBSUTL22.   Note that  it
  652. runs a good deal faster in compiled form.
  653.  
  654. (12)  Last,  assemble BYE with the filename of whatever  you
  655. have   called    RBBS24.COM  (that'll  work  fine)   in     the
  656. appropriate  place.   Load  it so that it too becomes a  COM
  657. file.
  658.  
  659. (13)  Type BYE.  Notice that it responds "COM FILE  LOADED".
  660. Wait for the telephone to ring.
  661.  
  662. (14)  With any luck at all,  you will find that you are  now
  663. the proud proprietor of a Computer Bulletin Board.
  664.  
  665.  The rest is up to you.   You'll have to decide whether  you
  666. want  public or passworded access,  emphasis on messages  or
  667. programs,  and that sort of thing.  If you opt for a RCPM or
  668. program  down-loading function,  RBBS will work quite nicely
  669. for that too, but you may care to try ENTBBS24 and MINBBS24,
  670. which  offer less temptation to people who want to  use  the
  671. system     as  primarily    a  message  service.    Once  you've
  672. succeeded in getting RBBS up,  ENTERBBS & MINIRBBS will be a
  673. piece of cake.
  674.  
  675. ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  676.  
  677.  
  678.            CP/M-Net "Tip-of-the-Month"
  679.            ===========================
  680.  
  681.     Changes Required to XMODEM and TAG When Using MP/M
  682.     ==================================================
  683.  
  684.               By:
  685.  
  686.              Richard Rodman
  687.           Micro Research, Inc.
  688.           8303 Arlington Blvd
  689.             Fairfax VA 22031
  690.  
  691.  While the CP/M and MP/M manuals both say that the bits  f1'
  692. thru 4' are user-definable, it so happens that under MP/M, a
  693. process  with bit 7=1 on the first letter of its name cannot
  694. be  broken with Control-C or output stopped with  Control-S,
  695. et cetera.   Therefore, f1' actually is not available to the
  696. user.  For this reason,  you must move the tag bit to f2' if
  697. you  intend to run MP/M on a remote system utilizing  XMODEM
  698. with "tagged" files (i.e. "tagged" to prevent file transfers
  699. of "distribution-protected" programs OUT of the remote    MP/M
  700. system).
  701.  
  702.  I have included some relevant listing portions below,    from
  703. TAG and XMODEM, to fix the problem.
  704.  
  705. from TAG:
  706.  
  707. pext:
  708.     ...
  709.     rrc            ;bit 7=0 for R, 1 for S
  710.     ani    80h
  711.     mov    b,a        ;save mask
  712.     lxi    d,dfcb+2    ;point to f2
  713.     ldax    d        ;get it
  714.     ani    7fh        ;strip f2'
  715.     ora    b        ;set bit if option was S
  716.     stax    d        ;put it back
  717.     dcx    d
  718.     dcx    d        ;Added one more
  719.     ...
  720.     call    bdos
  721. nextfile:
  722.     lda    dfcb+2        ;get f2
  723.     rlc            ;isolate f2'
  724.     ani    1
  725.     ...
  726.  
  727. from XMODEM:
  728.  
  729. ;Check for distribution-protected file
  730. ;
  731. OPENOK    LDA    FCB+2    ;second CHAR OF FILE NAME
  732.     ANI    80H    ;CHECK BIT 7
  733.     JZ    OPENOK2 ;IT WAS OFF, FILE CAN BE SENT
  734.     ...
  735.  
  736. ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  737.