cdc:nos2.source:opl871:fseform
Table of Contents
FSEFORM
Table Of Contents
- [00006] - STRING FORMATTING AND OUTPUT ROUTINES.
- [00052] TTWRD - TRANSMIT ONE-WORD ACCUMULATOR TO OUTPUT.
- [00070] TTSYNS - CONDITIONALLY DRAIN ONE-WORD ACCUMULATOR.
- [00096] TTINIT - INITIALIZE ONE-WORD ACCUMULATOR.
- [00107] TTCHL - FORMAT ONE CHARACTER FROM LEFT OF PARM.
- [00136] TTCHR - FORMAT CHARACTER FROM RIGHT OF WORD.
- [00149] TTST - FORMAT STRING OF SPECIFIED LENGTH.
- [00168] TTSTR - FORMAT STRING TERMINATED BY $
- [00191] TTLCSTR - TTSTR WITH CONVERT TO LOWER-CASE ON SCREEN.
- [00217] TTBRK - FORMAT END-OF-LINE.
- [00236] TTLIN - COMBINED TTSTR AND TTBRK.
- [00251] GETNUM - FORMAT NUMBER BY RADIX.
- [00278] PUTNUM - TRANSMIT NUMS1 AS BUILT BY GETNUM.
- [00293] TTNUM - EXTERNAL INTERFACE TO ENCODE NUMBERS.
- [00310] TTDEC - ENCODE INTEGER IN DECIMAL.
- [00323] TTLPAD - LEFT PADDED ENCODE AND TRANSMIT OF INTEGER.
Source Code
- FSEFORM.txt
- PROC FSEFORM;
- BEGIN
- #
- *** FSEFORM -- STRING FORMATTING AND OUTPUT ROUTINES.
- *
- * COPYRIGHT CONTROL DATA SYSTEMS INC. 1992.
- #
- DEF LISTCON #0#;
- *IFCALL SINGLE,COMFSGL
- *IFCALL ONLY,COMFONL
- *IFCALL MULTI,COMFMLT
- *CALL COMFFSE
- # COMMON DATA #
- CONTROL IFEQ MULTI,1;
- XREF ARRAY RENTSTK [1:MAXREENT]; # SUBROUTINE STACK #
- BEGIN
- ITEM RSTK;
- END
- XREF ITEM RSTKPTR;
- CONTROL FI;
- PAGE # COMMON DATA, EXTERNALS #
- *CALL COMFDS1
- *CALL COMFVD2
- *CALL COMFDS2
- *CALL COMFTAB
- XREF
- BEGIN
- *CALL COMFXSB
- *CALL COMFXVT
- *CALL COMFXTI
- END
- XDEF
- BEGIN
- *CALL COMFXFO
- END
- PAGE PROC TTWRD;
- IOBEGIN(TTWRD)
- #
- ** TTWRD - TRANSMIT ONE-WORD ACCUMULATOR TO OUTPUT.
- *
- * ENTRY TTOWB - CONTAINS TEXT TO BE OUTPUT.
- * TTCDC - SHOWS CHARACTER COUNT IN TTOWB.
- *
- * EXIT BOTH PARAMETERS CLEARED.
- *
- * CALLS VDTWTO.
- #
- VDTWTO(TTOWB); # TRANSMIT WORD #
- TTOWB = 0; # CLEAR WORD #
- TTCBC = -1; # SHOW EMPTY #
- IOEND
- PROC TTSYNC;
- IOBEGIN(TTSYNC)
- #
- ** TTSYNS - CONDITIONALLY DRAIN ONE-WORD ACCUMULATOR.
- *
- * ENTRY TTCBC - CHARACTER COUNT IN TTOWB.
- *
- * EXIT TTCBC CLEAR, OUTPUT POSSIBLY TRANSMITTED.
- *
- * CALLS TTCHR, TTWRD.
- #
- IF TTCBC GQ 0 THEN # DRAIN PREVIOUS #
- BEGIN
- CONTROL IFEQ SINGLE,1;
- IF NOT TTYOUTPUT THEN GOTO TTSYNC2;
- CONTROL FI;
- IF TTCBC LAN 1 EQ 0 THEN TTCHR(O"00");
- TTCHR(O"00"); # CONTROL BYTE 0013B #
- TTCHR(O"13");
- TTSYNC2:
- IF TTCBC EQ 9 THEN TTWRD;
- TTWRD;
- END
- IOEND # OF TTSYNC #
- PROC TTINIT;
- BEGIN
- #
- ** TTINIT - INITIALIZE ONE-WORD ACCUMULATOR.
- *
- * EXIT TTCBC, TTOCB, TTOWB - CLEARED.
- #
- TTOWB=0;
- TTOCB=0;
- TTCBC=-1;
- END # OF TTINIT #
- PAGE PROC TTCHL(A); # CHAR (LEFT) #
- IOBEGIN(TTCHL)
- #
- ** TTCHL - FORMAT ONE CHARACTER FROM LEFT OF PARM.
- *
- * ENTRY A - WORD WITH CHARACTER IN TOP OF WORD.
- * SCREENMODE - WHETHER TO USE VIRTERM OR TTWRD.
- *
- * CALLS VDTCHR, TTWRD.
- *
- * USES TTOCB, TTCBC, TTOWB.
- #
- ITEM A;
- ITEM B;
- IF SCREENMODE THEN
- BEGIN
- B=C<0,1>A;
- B=XLTDSPXP[B];
- VDTCHR(B);
- END
- ELSE
- BEGIN
- TTOCB = A; # HOLD CHAR #
- IF TTCBC EQ 9 THEN TTWRD; # FULL WORD #
- TTCBC = TTCBC + 1; # INCREMENT POINTER #
- C<TTCBC>TTOWB = C<0>TTOCB; # CHAR TO WORD #
- END
- IOEND
- PROC TTCHR(A);
- IOBEGIN(TTCHR)
- #
- ** TTCHR - FORMAT CHARACTER FROM RIGHT OF WORD.
- *
- * ENTRY A - WORD WITH CHARACTER IN RIGHT END.
- *
- * CALLS TTCHL.
- #
- ITEM A,B;
- C<0,1>B=C<9,1>A;
- TTCHL(B);
- IOEND # OF TTCHR #
- PAGE PROC TTST(A,B);
- IOBEGIN(TTST)
- #
- ** TTST - FORMAT STRING OF SPECIFIED LENGTH.
- *
- * ENTRY A - STRING OF 6-BIT CHARACTERS.
- * B - LENGTH OF STRING.
- *
- * CALLS TTCHL.
- *
- * USES P<STR>, STL, S2.
- #
- ITEM A C (240), B;
- P<STR> = LOC(A); # SAVE PARMS #
- STL = B - 1;
- FOR S2=0 STEP 1 UNTIL STL DO TTCHL(C<S2>ST); # COPY STRING #
- IOEND
- PROC TTSTR(A);
- IOBEGIN(TTSTR)
- #
- ** TTSTR - FORMAT STRING TERMINATED BY $
- *
- * ENTRY A - STRING.
- *
- * CALLS TTST, TTBRK.
- *
- * USES S1.
- #
- ITEM A C (240);
- S1 = 0;
- WHYLE S1 LS 80 AND C<S1>A NQ "$" DO S1 = S1+1; # FIND END OF STR #
- IF S1 EQ 80 THEN
- BEGIN # ERROR #
- TTST("NO $ IN TTSTR STRING",20);
- TTBRK;
- END
- ELSE TTST(A,S1); # WRITE THE STRING #
- IOEND
- PROC TTLCSTR(A);
- IOBEGIN(TTLCSTR)
- #
- ** TTLCSTR - TTSTR WITH CONVERT TO LOWER-CASE ON SCREEN.
- *
- * ENTRY A - UPPER-CASE STRING WITH $ TERMINATOR.
- *
- * CALLS VDTCHR, MORTAL.
- *
- * USES S1, P<STR>.
- #
- ITEM A C(240);
- ITEM B I;
- IF NOT SCREENMODE THEN MORTAL(" SCREEN MODE REQUIRED.$");
- S1 = 0;
- P<STR> = LOC(A);
- WHYLE C<S1>ST NQ "$" DO
- BEGIN
- B = C<S1>ST;
- IF B GQ "A" AND B LQ "Z" THEN VDTCHR(XLTDSPXP[B]+O"40");
- ELSE VDTCHR(XLTDSPXP[B]);
- S1 = S1 + 1;
- END
- IOEND # OF TTLCSTR #
- PAGE PROC TTBRK;
- IOBEGIN(TTBRK)
- #
- ** TTBRK - FORMAT END-OF-LINE.
- *
- * ENTRY TTCBC, SCREENMODE - CONTROL NEED TO DO ANYTHING.
- *
- * CALLS TTCHL, TTWRD.
- #
- IF TTCBC GQ 0 AND NOT SCREENMODE THEN # NON-TRIVIAL #
- BEGIN
- IF C<TTCBC>TTOWB EQ 0 THEN TTCHL(" "); # BLANK AFTER COLON #
- IF TTCBC EQ 8 THEN TTCHL(" "); # NO 66-BIT EOL #
- IF TTCBC GQ 8 THEN TTWRD; # NEED EXTRA WORD #
- TTWRD; # DUMP THE EOL #
- END
- IOEND
- PROC TTLIN(A); # TTSTR + TTBRK #
- IOBEGIN(TTLIN)
- #
- ** TTLIN - COMBINED TTSTR AND TTBRK.
- *
- * ENTRY A - PARAMETER TO PASS ON TO TTSTR.
- *
- * CALLS TTSTR, TTBRK.
- #
- ARRAY A;;
- TTSTR(A); # OUTPUT STRING #
- TTBRK; # END LINE #
- IOEND
- PROC GETNUM(A,B);
- BEGIN
- #
- ** GETNUM - FORMAT NUMBER BY RADIX.
- *
- * ENTRY A - BINARY INTEGER TO ENCODE.
- * B - RADIX (BASE).
- *
- * EXIT NUMS1 - CONTAINS FORMATTED NUMBER.
- * S1, S2 - RESIDUAL VALUES LEFT FOR PUTNUM USAGE.
- *
- * MACROS MOD.
- *
- * USES S1,S2.
- #
- ITEM A,B;
- S1=ABS(A);
- S2 = -1; # COUNT DIGITS #
- WHYLE S1 GQ B DO # NOT DONE YET #
- BEGIN
- S2 = S2 + 1; # BUMP POINTER #
- C<S2>NUMS1 = MOD(S1,B) + O"33"; # GET A DIGIT #
- S1 = S1/B; # REDUCE NUMBER #
- END
- END
- PROC PUTNUM; # WRITE SET UP NUM #
- IOBEGIN(PUTNUM)
- #
- ** PUTNUM - TRANSMIT NUMS1 AS BUILT BY GETNUM.
- *
- * ENTRY NUMS1 - ENCODED NUMBER IN GETNUM FORMAT.
- * S1, S2 - AS LEFT BY GETNUM.
- *
- * EXIT S2 - DESTROYED.
- *
- * CALLS TTCHL, TTCHR.
- #
- TTCHR(S1+O"33"); # FIRST DIGIT #
- FOR S2=S2 STEP -1 UNTIL 0 DO TTCHL(C<S2>NUMS1); # REST OF DIGITS #
- IOEND
- PAGE PROC TTNUM(A,B); # NUMBER A IN RADIX B #
- IOBEGIN(TTNUM)
- #
- ** TTNUM - EXTERNAL INTERFACE TO ENCODE NUMBERS.
- *
- * ENTRY A - INTEGER TO ENCODE AND TRANSMIT.
- * B - RADIX.
- *
- * CALLS GETNUM, TTCHL, PUTNUM.
- #
- ITEM A,B;
- GETNUM(A,B); # SET UP S1,S2,NUMS1 #
- IF A LS 0 THEN TTCHL("-"); # MINUS SIGN #
- PUTNUM; # AND WRITE NUMBER #
- IOEND
- PROC TTDEC(A); # NUMBER A IN DECIMAL #
- IOBEGIN(TTDEC)
- #
- ** TTDEC - ENCODE INTEGER IN DECIMAL.
- *
- * ENTRY A - INTEGER.
- *
- * CALLS TTNUM.
- #
- TTNUM(A,10);
- IOEND
- PROC TTLPAD(A,N,C); # LEFT PAD DECIMAL NUM #
- IOBEGIN(TTLPAD)
- #
- ** TTLPAD - LEFT PADDED ENCODE AND TRANSMIT OF INTEGER.
- *
- * ENTRY A - INTEGER.
- * N - FIELD WIDTH.
- * C - PADDING CHARACTER.
- *
- * CALLS GETNUM, PUTNUM, TTCHL.
- *
- * USES S2, S3, S4.
- #
- ITEM A,N,C;
- IF A GQ 0 THEN # DON'T DO NEGATIVE #
- BEGIN
- GETNUM(A,10); # S2=WIDTH-1 #
- S3 = N - S2 - 3; # S3=PAD WIDTH-1 #
- S4 = C; # PAD CHARACTER #
- FOR S3=S3 STEP -1 UNTIL 0 DO TTCHL(S4); # WRITE PADDING #
- PUTNUM; # WRITE NUMBER #
- END
- IOEND
- END TERM
cdc/nos2.source/opl871/fseform.txt ยท Last modified: 2023/08/05 17:24 by Site Administrator