PROGRAM testcmd; { +---------------------------------------------------------+ |This is a program to test and demonstrate the procedure, | |READCMD, and to illustrate pertinent global declarations.| |It also illustrates the use of the accessory procedure, | |GETNUMS, to convert numeric arguments from strings to an | |array of integers. | +---------------------------------------------------------+ } {$E+} CONST maxword = 14; {MAX NO. OF CHARACTERS AN ARGUMENT CAN HAVE } maxargs = 11; {MAX NO. OF ARGUMENTS ALLOWED IN COMMAND TAIL} maxline = 80; margin = ' '; TYPE string0 = string 0; string255 = string 255; wrdtype = string maxword; wrdarray = ARRAY[1..maxargs] OF wrdtype; numarray = ARRAY[1..maxargs] OF INTEGER; byte = 0..255; VAR source : wrdtype; key : CHAR; name : wrdarray; {IDENTIFIERS FOR THE ARGUMENTS IN THE } i, {COMMAND TAIL.} nargs, {ACTUAL NUMBER OF ARGUMENTS IN COMMAND TAIL } numct : byte; {NUMBER OF NUMERIC ARGUMENTS } num : numarray; {IDENTIFIERS FOR NUMERIC ARGUMENTS } sum : INTEGER; FUNCTION length ( source: string255 ): INTEGER; external; {$Igetnums.p } {$Ireadcmd.p } PROCEDURE arguments; VAR i : byte; BEGIN {-----------------------------arguments-----------------------------} WRITELN(' FOR i := 1 to nargs:'); FOR i := 1 TO nargs DO WRITELN(margin,'name[',i:1,'] = ',name[i]); WRITELN END; {-----------------------------arguments-----------------------------} PROCEDURE maxarguments; VAR i : byte; BEGIN {---------------------------maxarguments----------------------------} WRITELN(' FOR i := 1 to maxargs:'); FOR i := 1 TO maxargs DO WRITELN(margin,'name[',i:1,'] = ',name[i]); WRITELN; FOR i := 1 TO maxargs DO WRITELN(margin,'length(name[',i:1,']) = ',length(name[i]):2); WRITELN; END; {---------------------------maxarguments----------------------------} PROCEDURE numerics; VAR i : byte; BEGIN {-----------------------------numerics------------------------------} getnums(name,nargs,num,numct); WRITELN(' FOR i := 1 to numct:'); FOR i := 1 TO numct DO WRITELN(margin,'num[',i:1,'] =',num[i]: 5); WRITELN; sum := 0; FOR i := 1 to numct DO sum := sum + num[i]; WRITELN(margin,'Sum of numeric arguments = ',sum: 1); WRITELN END; {-----------------------------numerics------------------------------} BEGIN {-------------------------------testcmd-------------------------------} readcmd(name,nargs); IF (name[1] = 'Q') OR (name[1] = 'q') THEN WRITELN(margin,'Program aborted.') ELSE BEGIN source := name[1]; key := name[2,1]; WRITELN(margin,'The source filename is ',source,'.'); WRITELN(margin,'The key is ',key); WRITELN; IF (key = 'A') OR (key = 'a') OR (source[1] = '\') THEN arguments; IF (key = 'M') OR (key = 'm') OR (source[1] = '\') THEN maxarguments; IF (key = 'N') OR (key = 'n') OR (source[1] = '\') THEN numerics; WRITELN(margin,'The number of arguments, nargs =',nargs: 3) END END. {-------------------------------testcmd-------------------------------}