home *** CD-ROM | disk | FTP | other *** search
-
- >>>>>>>>>>>>>>>>>>>>> CP/M-Net News <<<<<<<<<<<<<<<<<<<<<<<<
-
- ============================================================
- Number 4 April, 1981 Volume 4, Issue 4
- ============================================================
-
- In This Issue
- =============
-
- Programming Style Comparisons:
- Digital Research PL/I-80 and Microsoft BASIC
- by: Michael J. Karas
-
- Installing a Computer Bulletin Board Program
- by: Ben Bronson
-
- CP/M-Net "Tip-of-the-Month"
- Changes Required to XMODEM and TAG When Using MP/M
- by: Richard Rodman
-
-
- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
- >>>>> SPECIAL NOTICE <<<<<
-
- The following information was "down-loaded" from
- CBBS/Detroit on March 1, 1981. Please pass this around to
- any other CBBS, RCPM or ABBS that you use.
-
- "Sunday, 22 February 1981: A.B.S Computer Services in
- Olympia Washington was robbed and its owners, Henry and
- Laverne Rumburger, were killed."
-
- "The following is a partial list of items stolen with
- serial numbers. Note especially the Apple III! With few of
- them around, it might easier to find."
-
- "If you discover any of these items, contact Detective
- Jones, Olympia, Washington Police, (206)-753-8300."
-
- The stolen items are:
-
- Apple III (128k) #001065
- Apple II (A2M030) #11892
- Apple II (48k/A2SA) #152415
- Apple II (48k) #95802
- Disk II (with controller) #215227
- BMC Monitor #65101709
- Sony KB1216 television #503527
- Centronics 737 printer #12349
-
- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-
- Programming Style Comparisons:
- ==============================
-
- Digital Research PL/I-80 and Microsoft BASIC
- ============================================
-
- by: Michael J. Karas
-
- I recently purchased a copy of a newly introduced
- applications programming development system that is a
- microprocessor oriented implementation of the PL/I
- programming language. This language, developed by Digital
- Research Inc., Pacific Grove, CA, is a powerful, structured
- compiler that is based upon the ANSII Standard PL/I Subset
- G. Gary Kildall of DRI has made this package compatible with
- the CP/M operating system for use on 8080/8085/Z80 types of
- microprocessors. The machine code developed by the compiler
- is also compatible with the above family of microprocessors.
-
- PL/I was originally developed by IBM as a large system
- language that was to be the last answer for programming
- languages in that it contained capabilities similar to
- FORTRAN, COBOL, ALGOL, and PASCAL. Over the years since its
- introduction PL/I has gained a reputation and a "following".
- The reputation has been that the compiler is huge and that
- the machine code modules produced are also huge. (ie many
- many bytes of memory are needed to run the compiler and the
- resulting programs). The "following" is a growing number of
- systems and applications programmers that have come to know
- the power of PL/I, ease of developing programs, degree of
- self documentation within programs, structure, and ease of
- maintaining programs. As the language gained popularity
- several manufacturers of minicomputers (including DEC)
- developed subset implementations of PL/I for their machines.
- Somewhere along the line a committee was formed to develop
- an ANSII standard PL/I subset to permit program
- transportability. Note that the idea of developing a PL/I
- subset was not to remove power or to limit capability of the
- language. Instead, much redundancy and feature overlap was
- removed to make the compiler requirements smaller and
- manageable in "minicomputer amounts of memory".
-
- About three years ago Gary Kildall of Digital Research saw
- that there would be a need and a market place for a good
- compiler type language for microprocessors. He decided that
- PL/I in a subset form would be the way to go. The results of
- his (and I'm sure also that of others at Digital) efforts is
- PL/I-80. This compiler, in my opinion, is the best thing to
- happen to the microprocessor field in several years. For
- those people who are serious applications programmers trying
- to develop sophisticated applications packages, the PL/I-80
- system is the way to go. The reasons are multitude, some of
- which were mentioned in the previous paragraphs. In using
- PL/I-80 for several months now I have to say that the
- programs made in PL/I are blessed with the following
- advantages:
-
- a) Structure is inherent in the programming style.
-
- b) Programs are extremely self documenting.
-
- c) The compiler is fast!... and makes efficient code that
- also runs fast!
-
- d) Linkage of programs to assembly language or the CP/M
- operating system is really easy!
-
- e) The linkage capability includes an easy to use and
- powerful library and overlay generation capability.
-
- f) Data types included in the language are comprehensive.
-
- The PL/I-80 system has some small disadvantages that I'll
- mention just to set things straight for all those people who
- are hung up on other languages for various good reasons.
- Being a compiler the development time from coding to running
- code is much longer that an intrepreted language like BASIC.
- The program development time for the inexperienced PL/I
- programmer will generally be about 5 times as great as
- programming in BASIC. I have found that as I gained
- familiarity with the PL/I-80 features and had the use of a
- good screen mode video editor that program development time
- was some what less than twice that of BASIC.
-
- Also small programs seem to turn in to awful large .COM
- files. (small programs that do any I/O get large fast due to
- included device and file interface code.) The real
- efficiency of the generated code is felt when source code
- programs start to get up into the hundreds of lines. Small
- programs will typically be 60 to 100 lines and will generate
- 9 to 15 k bytes of machine code. Once large portions of the
- runtime library become utilized by the programs logical
- contents then each additional 20 to 30 lines of code may
- only add a portion of a "Kbyte" to the .COM file.
-
- Program checkout also tends to be harder if you desire to
- be a "seat of the pants" programmer. Small editing and logic
- mistakes cause a lot of time to be consumed in re-editing,
- re-compiling, and re-linking the program that is under
- development. Most BASIC programmers I know, including
- myself, tend to design and kludge programs right at the
- console due to immediate testing convenience offered by an
- interpretive language. A more serious programmer will tend
- to "design and conceptualize" a program ahead of the coding
- process. This makes a better, more structured, well thought
- out, and logically correct program. (For additional thoughts
- on design and conceptualization see Greg Williams editorial
- on page 6 of the March 1981 BYTE Magazine). When I make a
- PL/I program it tends to be developed by the latter process.
- The linking capability also allows programs to be developed
- in modules so that editing and manipulation of programs is
- done in small pieces.
-
- I often get asked the question, 'What is PL/I-80 like?'. In
- an attempt to answer that the remainder of this article will
- present a programming problem in both Microsoft BASIC and
- Digital Research PL/I-80. The aim is not to try to teach the
- reader how to write PL/I-80 programs or to demonstrate the
- full power of the language. I also want to stress that while
- this example can be implemented in either BASIC or PL/I-80,
- it should be noted that the latter language will generally
- provide a much better vehicle for implementing complex
- algorithms into a program due to the available language
- features and constructs. Obviously this cannot be
- demonstrated in a short article as this. The following
- examples are meant primarily to show one simple method of
- solving the same problem in two different computer
- languages. The comparison to BASIC was selected due to the
- fact that more readers probably know BASIC than any other
- language. This will permit the most enjoyable contrast of
- programming styles for those readers that are just now going
- to get their first glimpse of PL/I-80.
-
- The example programs are both designed to perform exactly
- the same function. The idea is to read a
- name/address/telephone number file in sequence. The data is
- then formatted to list the names and addresses in a format
- compatible with mailing labels on the printer. As each name
- is printed on its label, the name and telephone number are
- listed on the console. This example is designed for
- demonstration purposes only and may not represent an
- efficient or feasible implementation of the above name and
- address algorithm.
-
- The input data to the program is expected to exist in a
- file named "NAMES.DAT" on the default CP/M disk unit. The
- demo format for this file and some test records are shown
- below. Note that the data may have been formatted into these
- records by another program or through use of an editor. Also
- the field length is only typical and may be impractical in a
- real processing application. Field identification is as
- follows:
-
- last name, 8 bytes
- first name, 8 bytes
- middle initial, 1 byte
- address, 20 bytes
- city, 11 bytes
- state, 2 bytes
- zip code, 5 bytes
- phone number, 10 bytes
-
- Records are terminated with carriage return and line feed
- pairs.
-
- EXAMPLE INPUT DATA
- ------------------
-
- KARAS MICHAEL J2468 HANSEN CT SIMI VALLEYCA930658055277922
- SMITH KELLY S3055 WACO AVE SIMI VALLEYCA930638055270518
- JOHNSON JACOB B2793 ANDREW COURT MANKADO MN567056123424469
- ERICKSONSHIELA P454 B UNIVERSITY AVEFARGO ND581024154435523
- WILLIAMSDALE F35912 CIRCLE MTN DR DAVENPORT IW590342179657451
- HANSEN MICHAEL H2486 KARAS CT SIMI VALLEYCA930658055279355
- KARAS HANSEN J8324 MICHAEL CT SIMI VALLEYCA930658055277922
- NIXON GERALD R9355 KENNEDY BRIDGE OVER RIVER MS204312225551212
- PAULSON DEBBI Q6699 HOLLOW TREE RD ROLLING LOGIL569433984535551
- ABUSE VERBAL T23 BELOW NOSE FACE CITY NY432216589412257
- PRETTY BOY M523 TOO SHORT CT BUMMER HILLKS582344325673349
-
-
- The following program listing presents a PL/I-80
- implementation of a program to read the above data and print
- the console list and the mail labels at the printer.
- Observation of the program structure and the various PL/I-80
- constructs is left for the reader.
-
- /******************************************************************
-
- A SHORT MAILING LABEL PRINTING PROGRAM IN PL/1-80
-
- *****************************************************************/
-
- maillab:
- procedure options(main);
- dcl /* declare all variables */
- database file,
- syslist file, /* printer output name */
- nulstr char(1) varying,
- 1 record, /* a structure for data */
- 2 lastname char(8),
- 2 firstname char(8),
- 2 midinit char(1),
- 2 address char(20),
- 2 city char(11),
- 2 state char(2),
- 2 zip_code char(5),
- 2 phone_num char(10),
- 2 filler char(2), /* cr-lf filler from record */
- 1 phone_format based(p),/* overlay template for phone # */
- 2 area char(3),
- 2 prefix char(3),
- 2 line char(4),
- p pointer;
-
- open file(database) input record sequential title('names.dat');
- open file(syslist) output stream print title('$lst');
-
- /* setup what to do if we try to read the file and there is no more data */
-
- on endfile(database) begin;
- close file(database);
- put file(syslist) skip;
- stop;
- end;
-
- /* tell operator to put mail labels into printer */
-
- put edit('Put mail labels into printer.',
- 'Type "GO" when ready....')
- (skip(3),a,skip,a);
- get list(nulstr);
-
- /* set address pointer for phone format overlay template */
-
- p=addr(record.phone_num);
-
- /* read data into structure and then print the mail labels */
-
- do while('1'b); /* a forever loop!? */
-
- read file(database) into(record);
-
- /* put names and phone numbers to console */
-
- put skip edit(strip(firstname),' ',
- strip(lastname),' (',
- area,') ',prefix,'-',line)
- (3(a),col(30),6(a));
-
- /* print names to printer on mail labels */
-
- put file(syslist) edit(strip(firstname),midinit,
- '.',strip(lastname),
- strip(address),strip(city),
- state,zip_code)
- (skip(3),a,x(1),a,a,x(1),a,skip,a,
- skip,3(a,x(2)));
- end;
-
- /* function routine to return a string of varying length based upon
- input string with all trailing blanks removed */
-
- strip:
- proc(string) returns(char(50) varying);
- dcl
- string char(50) varying,
- i,j bin fixed(15);
-
- i=0;
- do i=0 repeat (i+1)
- while(substr(string,(length(string)-i),1)=' ');
- end;
- string=substr(string,1,(length(string)-i));
- return (string);
- end strip;
-
- end maillab;
- /* end of pl/i program */
-
- The following listing shows a simple Microsoft BASIC
- program to perform the same function of printing the console
- listing and mail labels upon the printer. Once again the
- program analysis is left to the reader. Note that the
- logical program structure of the BASIC program is kept
- nearly the same as the previous PL/I-80 program to
- facilitate program comparisons.
-
- 10 REM
- 20 REM A SHORT MAILING LABEL PROGRAM IN MBASIC
- 30 REM
- 40 REM
- 50 REM TELL OPERATOR TO PUT LABELS INTO PRINTER
- 60 REM
- 70 PRINT:PRINT:PRINT
- 80 PRINT "Put mail labels into printer."
- 90 INPUT "Type 'GO' when ready....",NUL$
- 100 OPEN "I",#1,"NAMES.DAT"
- 110 REM
- 120 REM SETUP FOR END OF FILE EXIT
- 130 REM
- 140 IF EOF(1)<0 THEN 470
- 150 REM
- 160 REM READ FILE RECORD AND FORMAT DATA
- 170 REM
- 180 LINE INPUT #1,REC$
- 190 STRIP$=MID$(REC$,1,8)
- 200 GOSUB 530
- 210 LN$=STRIP$
- 220 STRIP$=MID$(REC$,9,8)
- 230 GOSUB 530
- 240 FNM$=STRIP$
- 250 MI$=MID$(REC$,17,1)
- 260 STRIP$=MID$(REC$,18,20)
- 270 GOSUB 530
- 280 AD$=STRIP$
- 290 STRIP$=MID$(REC$,38,11)
- 300 GOSUB 530
- 310 CTY$=STRIP$
- 320 ST$=MID$(REC$,49,2)
- 330 ZP$=MID$(REC$,51,5)
- 340 PH$=" ("+MID$(REC$,56,3)+") "+MID$(REC$,59,3)+"-"+MID$(REC$,62,4)
- 350 REM
- 360 REM PRINT NAME AND PHONE NUMBERS TO CONSOLE
- 370 REM
- 380 PRINT FNM$;" ";LN$;TAB( 30);PH$
- 390 REM
- 400 REM PRINT NAMES ON LABELS AT PRINTER
- 410 REM
- 420 LPRINT:LPRINT
- 430 LPRINT FNM$;" ";MI$;". ";LN$
- 440 LPRINT AD$
- 450 LPRINT CTY$;" ";ST$;" ";ZP$
- 460 GOTO 140
- 470 CLOSE 1
- 480 SYSTEM
- 490 END
- 500 REM
- 510 REM SUBROUTINE TO STRIP EXCESS BLANKS OFF THE END OF A STRING
- 520 REM
- 530 IF MID$(STRIP$,LEN(STRIP$),1)<>" " THEN RETURN
- 540 STRIP$=MID$(STRIP$,1,LEN(STRIP$)-1)
- 550 GOTO 530
-
- If either of the above programs is run the output at the
- console appears as follows. <cr> indicates operator data
- entry and carriage return key depression.
-
- CONSOLE OUTPUT FROM PROGRAM
- ---------------------------
-
- Put mail labels into printer.
- Type 'GO' when ready....GO<cr>
-
-
-
- MICHAEL KARAS (805) 527-7922
- KELLY SMITH (805) 527-0518
- JACOB JOHNSON (612) 342-4469
- SHIELA ERICKSON (415) 443-5523
- DALE WILLIAMS (217) 965-7451
- MICHAEL HANSEN (805) 527-9355
- HANSEN KARAS (805) 527-7922
- GERALD NIXON (222) 555-1212
- DEBBI PAULSON (398) 453-5551
- VERBAL ABUSE (658) 941-2257
- BOY PRETTY (432) 567-3349
- A>
-
- The following listing shows the printer output from either
- program. Only a portion of the listing is shown to give the
- idea without wasting too much paper.
-
- PRINTER OUTPUT
- --------------
-
- MICHAEL J. KARAS
- 2468 HANSEN CT
- SIMI VALLEY CA 93065
-
-
- KELLY S. SMITH
- 3055 WACO AVE
- SIMI VALLEY CA 93063
-
-
- JACOB B. JOHNSON
- 2793 ANDREW COURT
- MANKADO MN 56705
-
-
- SHIELA P. ERICKSON
- 454 B UNIVERSITY AVE
- FARGO ND 58102
-
-
- DALE F. WILLIAMS
- 35912 CIRCLE MTN DR
- DAVENPORT IW 59034
-
-
- MICHAEL H. HANSEN
- 2486 KARAS CT
- SIMI VALLEY CA 93065
-
- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
- Installing a Computer Bulletin Board Program
- ============================================
-
- By: Ben Bronson
-
- If you want to put up a bulletin board or a program
- exchange system that runs under CP/M (and if you don't want
- to write all your own software from scratch) you have two
- choices: Ward Christensen's and Randy Suess's assembly-
- language CBBS and the BASIC-language RBBS written by Howard
- Moulton, Bruce Ratoff, Ron Fowler, Tim Nicholas and others.
-
- The Real CBBS
- -------------
-
- CBBS is the daddy of all bulletin board programs for micro-
- computers and as such has been imitated to some extent by
- all other public-domain and commercial BBS software. It is
- also an excellent program: fast, compact, and flexible. One
- of its best features is its sophisticated message editing
- capability. However, as its authors tell the would-be system
- operator quite plainly, installing it (not to mention
- modifying it) does require a good knowledge of assembly
- language. CBBS is written as a whole set of modules that
- have to be configured, then linked, and finally maintained
- with another set of programs.
-
- If you are good at assembly language, you should certainly
- choose it over RBBS. The cost is negligible in terms of
- what you get -- Send a check for $50 made out to Randy Suess
- to: CBBS, 5219 W Warwick, Chicago, Ill. 60641. You will
- receive a copy of the CBBS source program and files on 2
- CP/M format soft sectored 8" floppy disks.
-
- MINICBBS
- --------
-
- If you are only moderately familiar with assembler and want
- to run a system dedicated to software downloading rather
- than message interchange, there is one intermediate
- alternative that should be mentioned: Keith Petersen's
- stripped-down version called MINICBBS, which runs as a COM
- file on a CP/M system to which (as is normal with program
- downloading or RCPM setups) the caller has access. MINICBBS
- can be obtained in already assembled form from any of the
- SYSOPS (Keith himself, Dave Hardy, Calamity Cliffs or Dave
- Moritz) who use it, but (as CBBS is copyrighted and as
- MINICBBS needs several of the auxiliary and maintenance
- programs supplied on the CBBS distribution disks) they will
- only release it to those who have bought CBBS. MINICBBS
- retains the good message editingfeatures of its parent
- program and occupies only about l0K of disk space. It is a
- good deal easier to get up and running than the full CBBS.
-
- The only disadvantages of MINICBBS are (1) that making
- modifications requires greater familiarity with assembler
- and (2) that its method of storing new messages makes
- keeping these private from other users a bit complicated.
- The programs to do this are well worked out and in the
- public domain (for example, SECURITY.ASM and TAG2.ASM), but
- most MINICBBS sysops still find it necessary to keep the
- program and its messages in a very high user area and to
- move everything back down whenever they want to do some
- purging and editing.
-
- RBBS, Etc.
- ----------
-
- The main (and only) alternative to the CBBS series is RBBS
- or its two RCPM-specialized descendants, ENTERBBS and
- MINIRBBS. The RBBS programs have several shortcomings. In
- their current form they have inferior message editing
- features. They are impossibly slow when run as BAS files
- under MBASIC. And when compiled with BASCOM (which makes
- them almost as fast as CBBS or sometimes even as fast), they
- are bulky. A compiled RBBS occupies 34K of disk space and
- RAM, and a compiled MINIRBBS needs 30K all by itself,
- compared with the 10K used by MINICBBS. While most people
- have enough RAM so that size in memory is not a problem, the
- RBBS series performs noticeably worse on systems with slow
- disk drives.
-
- On the other hand, RBBS has a single great advantage: it is
- a lot easier to install. If you have a very modest
- knowledge of BASIC and own or have access to BASCOM, you can
- get a RBBS system up and running in a single evening, while
- installing CBBS takes several days for a crack assembly-
- language programmer. To the RCPM operator its use of a
- MBASIC-type sequential message file is also an advantage --
- access to messages can be controlled simply by declaring the
- MESSAGES file a $SYS file, and can easily be protected from
- XMODEMing by using TAG2.COM.
-
- RBBS is essentially self-explanatory, but a few notes might
- ease the installation process even further. Briefly, one
- becomes an RBBS SYSOP like this:
-
- Installing RBBS
- ---------------
-
- (1) Get RBSUTL22.BAS (or ASC) and RBBS24.BAS (and later,
- ENTBBS24 & MINBBS24.BAS as well) from a local RCPM system.
- As indicated earlier, you will also need to have a version
- of BYE (PMMIBY63, BYE65 and BYE67 all can load a COM file
- automatically after bringing themselves up when the
- telephone rings, so choose one of those -- the COM file in
- question will of course be RBBS.COM).
-
- (2) Try the program with MBASIC in interpreter mode. Just
- type MBASIC RBBS24 and see what happens.
-
- (3) Look at the disk directory after you have exited back to
- CP/M. You'll notice that several new files have been
- created: MESSAGES, CALLERS, USERS, COUNTERS, SUMMARY,
- LASTCALR and (if you have left yourself a comment) COMMENTS.
- These are 7/11 of the auxiliary files that a full-fledged
- RBBS can use, and 7/7 of those it absolutely has to use.
-
- (4) Now use an editor (or a word processor that does not put
- queer control characters in the file--WordStar in non-
- document mode works fine) to write four brief text files.
- Put amything you want into three of them, and call them
- INFO, BULLETIN and NEWCOM. Just that. Filenames without
- filetypes. The fourth file, PWDS, should contain only three
- words separated by commas:
-
- HONDURAS,BANANA,NOPASS
-
- These are the P1$, P2$ and P3$ you will see referred to in
- the early parts of the source code. "HONDURAS" and "BANANA"
- can be replaced with whatever you like; those are passwords
- for you, the SYSOP to use for quick entry and message-
- killing authority within the system. "NOPASS" is what you
- put in if the system is to be for unrestricted public use.
- Anything else here will become the access password for all
- users. Now return to CP/M.
-
- (5) Try the MBASIC RBBS routine again several times. Sign
- in with the same name, then with different names. Notice
- which text files are printed where when the name is new and
- when it is one the program already knows. Try signing
- yourself in with the first name SYSOP and the second name
- anything but BANANA or whatever your P2$ is. When you have
- had enough of this,
-
- (6) TYPE all the files with one-word names to see what they
- look like. If you look at them with an editor you'll notice
- that the ones created by the program rather than you all
- have fixed-length lines. Use the editor to put asterisks in
- front of a couple of the names you've invented that are
- already in the USERS file. Make sure you don't
- inadvertently make the lines with asterisks longer than the
- others, and put the asterisks at the very beginning of the
- line.
-
- (7) Go back to CP/M and do MBASIC RBBS24. Sign in with one
- of the names you have marked with an asterisk and see what
- happens. Play around with passwords a bit more. By now you
- should understand most of the program's tricks.
-
- (8) So go into RBBS24 (again with an editor or word
- processor that does not create MBASIC-incompatible conttol
- characters) and personalize the various messages that appear
- in quotation marks. Exit. Test with MBASIC. Try all
- combinations of commands and make sure they still work.
- Kill a couple of messages. Notice that you can kill the
- passworded ones if you're the SYSOP.
-
- (9) Next try RBSUTL22.BAS. Run it with MBASIC. Look at the
- menu and do what it tells you to do. Purge the file of
- killed messages. Remember to rebuild the SUMMARY file.
- Exit. Look at the directory and what has happened to the
- MESSAGES and other files. Now you know how to maintain an
- RBBS system.
-
- (10) And then compile. You'll need about 50-52K of memory
- to hold both BASCOM and RBBS. If you don't have that much,
- prevail on a friend or a local SYSOP (who is likely to be
- delighted at the idea of a new system that'll take some of
- the pressure off his) to compile it for you. Use the /X
- switch (check the manual for why if you're curious). Load
- with L80 with the /E and /N switches. And presto. You have
- a file called RBBS24.COM. Do the same with RBSUTL22.
-
- (11) Run it. Make sure it works as advertised. Notice that
- it picks up all the files created while you were trying the
- program out with MBASIC and treats those files as its own.
- Rewrite the INFO, BULLETIN and NEWCOM files so that they
- contain appriate messages. Test RBSUTL22. Note that it
- runs a good deal faster in compiled form.
-
- (12) Last, assemble BYE with the filename of whatever you
- have called RBBS24.COM (that'll work fine) in the
- appropriate place. Load it so that it too becomes a COM
- file.
-
- (13) Type BYE. Notice that it responds "COM FILE LOADED".
- Wait for the telephone to ring.
-
- (14) With any luck at all, you will find that you are now
- the proud proprietor of a Computer Bulletin Board.
-
- The rest is up to you. You'll have to decide whether you
- want public or passworded access, emphasis on messages or
- programs, and that sort of thing. If you opt for a RCPM or
- program down-loading function, RBBS will work quite nicely
- for that too, but you may care to try ENTBBS24 and MINBBS24,
- which offer less temptation to people who want to use the
- system as primarily a message service. Once you've
- succeeded in getting RBBS up, ENTERBBS & MINIRBBS will be a
- piece of cake.
-
- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-
- CP/M-Net "Tip-of-the-Month"
- ===========================
-
- Changes Required to XMODEM and TAG When Using MP/M
- ==================================================
-
- By:
-
- Richard Rodman
- Micro Research, Inc.
- 8303 Arlington Blvd
- Fairfax VA 22031
-
- While the CP/M and MP/M manuals both say that the bits f1'
- thru 4' are user-definable, it so happens that under MP/M, a
- process with bit 7=1 on the first letter of its name cannot
- be broken with Control-C or output stopped with Control-S,
- et cetera. Therefore, f1' actually is not available to the
- user. For this reason, you must move the tag bit to f2' if
- you intend to run MP/M on a remote system utilizing XMODEM
- with "tagged" files (i.e. "tagged" to prevent file transfers
- of "distribution-protected" programs OUT of the remote MP/M
- system).
-
- I have included some relevant listing portions below, from
- TAG and XMODEM, to fix the problem.
-
- from TAG:
-
- pext:
- ...
- rrc ;bit 7=0 for R, 1 for S
- ani 80h
- mov b,a ;save mask
- lxi d,dfcb+2 ;point to f2
- ldax d ;get it
- ani 7fh ;strip f2'
- ora b ;set bit if option was S
- stax d ;put it back
- dcx d
- dcx d ;Added one more
- ...
- call bdos
- nextfile:
- lda dfcb+2 ;get f2
- rlc ;isolate f2'
- ani 1
- ...
-
- from XMODEM:
-
- ;Check for distribution-protected file
- ;
- OPENOK LDA FCB+2 ;second CHAR OF FILE NAME
- ANI 80H ;CHECK BIT 7
- JZ OPENOK2 ;IT WAS OFF, FILE CAN BE SENT
- ...
-
- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++