DataMuseum.dk

Presents historical artifacts from the history of:

Jet Computer Jet80

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about Jet Computer Jet80

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - download

⟦25971491f⟧ TextFile

    Length: 7680 (0x1e00)
    Types: TextFile
    Names: »READCMD.P«

Derivation

└─⟦dd59903ef⟧ Bits:30005887 Klub diskette for udveksling af software
    └─ ⟦this⟧ »READCMD.P« 

TextFile

   PROCEDURE readcmd(VAR arg: wrdarray; VAR numargs: byte);
æ  
         +------------------------------------------------------------+
         øWRITTEN FOR ZUG USE.                  PASCAL Z, version 4.0 ø
         øBY       Clif Kinne                   DATE:  12/15/82       ø
         ø                                                            ø
         øPURPOSE  This procedure was designed to read and parse the  ø
         ø         command tail on a program call.                    ø
         ø                                                            ø
         øCALL:    Readcmd(name,nargs)   - typical.                   ø
         ø                                                            ø
         øINPUT    Reads a string, LINE, of up to 80 characters from  ø
         øDATA           from the console.                            ø
         ø                                                            ø
         øRETURNS: 1. The words from LINE in an array, ARGÆ1..maxargsÅø
         ø         2.  NARGS, the actual number of words found.       ø
         ø         3.  Dummy 1-character arguments to pad out the     ø
         ø              array from numargs to maxargs.                ø
         ø                                                            ø
         øGLOBALS  CONST maxword  = Max. no. of characters in a word  ø
         øREQUIRED       maxargs  = Max. no. of arguments allowed     ø
         ø               maxline  = 80;                               ø
         ø                                                            ø
         ø         TYPE  wrdtype  = string maxword;                   ø
         ø               wrdarray = ARRAYÆ1..maxargsÅ OF wrdtype;     ø
         ø               byte     = 0..255;                           ø
         ø                                                            ø
         ø         VAR   <argname>: wrdarray;                         ø
         ø                                                            ø
         øFEATURES 1.  Truncates long words to MAXWORD characters.    ø
         ø         2.  If command tail is empty, invites operator to  ø
         ø              enter arguments, continue without arguments,  ø
         ø              or quit.                                      ø
         ø         3.  Trailing dummy arguments can signal calling    ø
         ø              program it has asked for unavailable argument.ø
         ø         4.  Can have up to 5 14-character or 38 1-characterø
         ø              arguments, or any mixture up to 77 characters.ø
         ø         5.  Even though MAXARGS arguments are allowed, any ø
         ø             lesser no. of arguments, including none, may beø
         ø             entered. If none are needed, the command shouldø
         ø             be followed by 2 spaces to avoid the reminder. ø
         ø                                                            ø
         øBUGS     Does not handle tab characters satisfactorily.     ø
         +------------------------------------------------------------+
.paå
    CONST   blank     = ' ';
            dummy     = 'Ø';

    TYPE    linetype  = string maxline;
            string0   = string 0;                         
            string255 = string 255;                       

    VAR     pos,i     : byte;
            line      : linetype;

    FUNCTION length(x: string255): INTEGER; external;  

    PROCEDURE reminder; 

æ           +------------------------------------------------------+
            øThis procedure is intended for use with the procedure,ø
            øREADCMD. It can be made external to READCMD so that itø
            ømay be tailored to the calling program.               ø
            +------------------------------------------------------+
å
      BEGIN æ----------------------------reminder-----------------------------å

        WRITELN(margin,
            'You neglected to include any arguments with the program call.'); 
        WRITELN; WRITELN(margin,
               'Please enter them now (or enter "Q" to quit, or RETURN to');
        WRITELN; WRITELN(margin,'continue without arguments).'); 
        WRITELN; WRITELN; WRITE(margin,'===> ')
  
      END;  æ----------------------------reminder-----------------------------å

    PROCEDURE linetoolong;

      BEGIN æ---------------------------linetoolong---------------------------å

        WRITELN(margin,'Command line is too long.'); WRITELN;
        WRITELN(margin,'Reenter arguments here.  Do not exceed',
                        (maxline - 3):3,' characters.');
        WRITELN; READLN(line)

      END;  æ---------------------------linetoolong---------------------------å
æ.p.aå
    PROCEDURE getword(VAR word: string0; VAR line: linetype; VAR pos: byte);
            
æ         +----------------------------------------------------------+
          øThis procedure receives a string, LINE, and a character   ø
          øposition, POS.                                            ø
          øIt extracts the first group of non-space characters after ø
          øPOS, and returns it to the calling program as WORD.       ø
          øLong words will be truncated at MAXWORD characters.       ø
          øPOS is returned to the calling program so that additional ø
          øwords may be extracted.                                   ø
          +----------------------------------------------------------+
å
      CONST   blank = ' ';
  
      PROCEDURE setlength(VAR x: string0; y: INTEGER); external;
  
      BEGIN æ-----------------------------getword-----------------------------å
  
        WHILE ((lineÆposÅ = blank) OR (lineÆposÅ= CHR(9))) AND (pos<maxline) DO
          pos := pos+1; æSKIPBLANKSå
        setlength(word,0);                 æINITIALIZES word TO A NULL STRING.å
        WHILE (lineÆposÅ <> blank) AND (lineÆposÅ <> CHR(9)) AND 
              (length(word) < maxword) DO
          BEGIN
            APPEND(word,lineÆposÅ);        æBUILDS THE STRING, word.          å
            pos := pos + 1
          END;
        WHILE (lineÆposÅ <> blank) AND (lineÆposÅ <> CHR(9)) DO 
          pos := pos + 1    æSKIPS OVER ANY EXTRA NON-BLANK CHARACTERS IN wordå
      END;  æ-----------------------------getword-----------------------------å

    BEGIN æ-------------------------------readcmd-----------------------------å

      pos := 1;
      IF EOLN THEN reminder;         æREPORT NO COMMAND LINE ARGUMENTS AT ALL å
      READLN(line); WRITELN;
      WHILE length(line) > (maxline - 3) DO linetoolong;
      APPEND(line,blank);            æAPPEND DUMMY ARGUMENT TO SIGNIFY NO MOREå
      APPEND(line,dummy);            æARGUMENTS IN THE COMMAND LINE           å
      FOR i := length(line) TO maxline - 1 DO append(line,blank);
                      æNEEDED SO THAT getword WILL BEHAVE AFTER DUMMY ARGUMENTå
      numargs := 0;
      REPEAT                         æGET ACTUAL ARGUMENTS IN ARRAY, arg, AND å
        numargs := numargs + 1;      æTHE COUNT OF THE ARGUMENTS IN numargs:  å
        getword(argÆnumargsÅ,line,pos)
      UNTIL (argÆnumargsÅ = dummy) OR (numargs = maxargs);  
      FOR i := numargs + 1 TO maxargs DO argÆiÅ := dummy;  æPAD ARGUMENT LIST å
                                          æOUT TO maxargs WITH DUMMY ARGUMENTSå
      IF argÆnumargsÅ = dummy THEN numargs := numargs - 1;     æADJUST numargså
      
    END;  æ-----------------------------readcmd ------------------------------å

   «eof»