cdc:nos2.source:nam5871:lfggnt
Table of Contents
LFGGNT
Table Of Contents
- [00002] PROC LFGGNT(TOKEN,COL,LENGTH,TYPE,LINE)
- [00006] - GET NEXT TOKEN.
Source Code
- LFGGNT.txt
- *DECK LFGGNT
- PROC LFGGNT(TOKEN,COL,LENGTH,TYPE,LINE);
- BEGIN # GET NEXT TOKEN #
- *IF,DEF,IMS
- #
- ** LFGGNT -- GET NEXT TOKEN.
- *
- * D.K. ENDO 81/16/12
- *
- * LFGGNT FORMS THE NEXT TOKEN ON THE SOURCE LINE AND CLASSIFIES IT.
- * IF CHARACTER 72 IS REACHED, AN END OF CARD STATUS IS RETURNED.
- *
- * PROC LFGGNT(TOKEN,COL,LENGTH,TYPE,LINE)
- *
- * ENTRY COL = POINTER TO CURRENT CHARACTER.
- * LINE = SOURCE LINE TO BE PARSED.
- *
- * EXIT TOKEN = TOKEN FORMED.
- * COL = NEXT CHARACTER TO BEGIN SCAN.
- * LENGTH = CHARACTER COUNT OF TOKEN.
- * TYPE = CLASSIFICATION OF TOKEN.
- *
- * METHOD
- *
- * CLEAR TOKEN,COL, AND LENGTH.
- * IF COL IS GREATER THAN MAX,
- * THEN,
- * SET TYPE TO EOC.
- * OTHERWISE,
- * FOR EACH CHARACTER UNTIL EOC OR TOKEN IS FORMED,
- * SELECT CASE THAT APPLIES,
- * CASE 1(ALPHANUMERIC):
- * IF LENGTH IS NOT GREATER THAN TEN,
- * STORE CHARACTER.
- * INCREMENT LENGTH.
- * INCREMENT COL.
- * CASE 2(DELIMITER):
- * IF NAME IS BEING FORMED,
- * THEN,
- * SET TYPE TO NAME.
- * OTHERWISE,
- * STORE CHARACTER.
- * INCREMENT LENGTH AND COL.
- * SET TYPE TO DELIMITER
- * CASE 3(SPECIAL):
- * IF NAME IS BEING FORMED,
- * THEN,
- * SET TYPE TO NAME.
- * OTHERWISE,
- * STORE CHARACTER.
- * INCREMENT LENGTH AND COL.
- * SET TYPE TO UNKNOWN.
- * CASE 4(BLANK):
- * IF NAME IS BEING FORMED,
- * THEN
- * SET TYPE TO NAME.
- * OTHERWISE,
- * INCREMENT COL.
- * IF NO TOKEN WAS FORMED
- * SET TYPE TO EOC.
- *
- #
- *ENDIF
- ITEM TOKEN C(10); # FORMED TOKEN #
- ITEM COL I; # CHARACTER POINTER #
- ITEM LENGTH I; # LENGTH OF TOKEN #
- ITEM TYPE I; # CLASSIFICATION OF TOKEN #
- ARRAY LINE [0:0] S(8); # SOURCE LINE TO BE PARSED #
- BEGIN
- ITEM LINE$TEXT C(00,00,80); # SOURCE LINE TEXT #
- END
- DEF MXCOL # 72 #; # LAST CHARACTER TO BE SCANNED #
- STATUS STAT UNK, # STATUS TYPE FOR TOKEN #
- NAME,
- DELIM,
- EOC;
- ITEM CTEMP C(1); # CHARACTER TEMPORARY #
- ITEM EXIT B; # EXIT FLAG #
- ITEM I I; # SCRATCH ITEM #
- SWITCH GNTSWTCH SPECIAL, # COLON #
- ALPHANUM, # A #
- ALPHANUM, # B #
- ALPHANUM, # C #
- ALPHANUM, # D #
- ALPHANUM, # E #
- ALPHANUM, # F #
- ALPHANUM, # G #
- ALPHANUM, # H #
- ALPHANUM, # I #
- ALPHANUM, # J #
- ALPHANUM, # K #
- ALPHANUM, # L #
- ALPHANUM, # M #
- ALPHANUM, # N #
- ALPHANUM, # O #
- ALPHANUM, # P #
- ALPHANUM, # Q #
- ALPHANUM, # R #
- ALPHANUM, # S #
- ALPHANUM, # T #
- ALPHANUM, # U #
- ALPHANUM, # V #
- ALPHANUM, # W #
- ALPHANUM, # X #
- ALPHANUM, # Y #
- ALPHANUM, # Z #
- ALPHANUM, # 0 #
- ALPHANUM, # 1 #
- ALPHANUM, # 2 #
- ALPHANUM, # 3 #
- ALPHANUM, # 4 #
- ALPHANUM, # 5 #
- ALPHANUM, # 6 #
- ALPHANUM, # 7 #
- ALPHANUM, # 8 #
- ALPHANUM, # 9 #
- SPECIAL, # + #
- SPECIAL, # - #
- DELIM, # * #
- SPECIAL, # / #
- SPECIAL, # ( #
- SPECIAL, # ) #
- SPECIAL, # $ #
- SPECIAL, # = #
- BLANK, # BLANK #
- DELIM, # , #
- SPECIAL, # . #
- SPECIAL, # EQUIV #
- SPECIAL, # [ #
- SPECIAL, # ] #
- SPECIAL, # % (FOR 63 CODE SET -- COLON) #
- SPECIAL, # " #
- SPECIAL, # _ #
- SPECIAL, # ! #
- SPECIAL, # & #
- SPECIAL, # ' #
- SPECIAL, # ? #
- SPECIAL, # < #
- SPECIAL, # > #
- SPECIAL, # @ #
- SPECIAL, # \ #
- SPECIAL, # ^ #
- SPECIAL; # SEMICOLON #
- CONTROL EJECT;
- # #
- # LFGGNT CODE BEGINS HERE #
- # #
- EXIT = FALSE; # CLEAR EXIT FLAG #
- LENGTH = 0; # CLEAR LENGTH #
- TOKEN = " "; # CLEAR TOKEN #
- IF COL LS MXCOL # IF NOT END OF CARD #
- THEN
- BEGIN
- FOR I=0 WHILE NOT EXIT AND COL LS MXCOL
- DO # FOR EACH CHARACTER UNTIL EOC OR #
- BEGIN # FORMING OF TOKEN #
- CTEMP = C<COL,1>LINE$TEXT[0];
- GOTO GNTSWTCH[CTEMP]; # SWITCH BASED ON CHARACTER #
- ALPHANUM:
- IF LENGTH LS 10 # IF TOKEN IS NOT FULL #
- THEN
- BEGIN
- C<LENGTH,1>TOKEN = CTEMP; # PUT CHARACTER IN TOKEN #
- END
- LENGTH = LENGTH + 1; # INCREMENT LENGTH #
- COL = COL + 1; # POINT TO NEXT COLUMN #
- TEST I;
- DELIM:
- IF LENGTH EQ 0 # IF NOT CURRENTLY FORMING NAME #
- THEN
- BEGIN
- TOKEN = CTEMP; # PUT DELIMITER IN TOKEN #
- TYPE = STAT"DELIM"; # SET TYPE TO DELIMITER #
- COL = COL + 1; # POINT TO NEXT COLUMN #
- LENGTH = 1; # SET LENGTH #
- END
- ELSE # MUST HAVE NAME IN TOKEN #
- BEGIN
- TYPE = STAT"NAME"; # SET TYPE TO NAME #
- END
- EXIT = TRUE; # SET EXIT FLAG #
- TEST I;
- SPECIAL:
- IF LENGTH EQ 0 # IF NOT CURRENTLY FORMING NAME #
- THEN
- BEGIN
- TOKEN = CTEMP; # PUT CHARACTER IN TOKEN #
- TYPE = STAT"UNK"; # SET TYPE TO UNKNOWN #
- COL = COL + 1; # POINT TO NEXT COLUMN #
- LENGTH = 1; # SET LENGTH #
- END
- ELSE # MUST BE FORMING A NAME #
- BEGIN
- TYPE = STAT"NAME"; # SET TYPE TO NAME #
- END
- EXIT = TRUE; # SET EXIT FLAG #
- TEST I;
- BLANK:
- IF LENGTH NQ 0 # IF CURRENTLY FORMING A NAME #
- THEN
- BEGIN
- TYPE = STAT"NAME"; # SET TYPE TO NAME #
- EXIT = TRUE; # SET EXIT FLAG #
- END
- ELSE # NOTHING FORMED YET #
- BEGIN
- COL = COL + 1; # INCREMENT CHARACTER POINTER #
- END
- END
- IF LENGTH EQ 0 # IF NO TOKEN WAS FORMED #
- THEN
- BEGIN
- TYPE = STAT"EOC"; # SET TYPE TO END OF CARD #
- END
- END
- ELSE # HAVE REACHED END OF CARD #
- BEGIN
- TYPE = STAT"EOC"; # SET TYPE TO INDICATE SO #
- END
- RETURN; # **** RETURN **** #
- END # LFGGNT #
- TERM
cdc/nos2.source/nam5871/lfggnt.txt · Last modified: 2023/08/05 17:22 by Site Administrator