; SELECT ; ; DESCRIPTION ; ALLOWS THE USER TO SPECIFY A SET OF "ACCEPTABLE" COMMANDS ; WHICH A USER COULD SELECT, AND THEN HANDLES ALL THE OVERHEAD ; OF REJECTING ILLEGAL CHARACTERS AND RESPONSES UNTIL A ; VALID AND UNIQUE STRING HAS BEEN TYPED BY THE USER. THE ; NUMBER OF THE OPTION STRING SELECTED IS THEN RETURNED TO ; THE CALLING PROGRAM. ; USAGE ; CALL SELECT(IOPT,IDFLT,'...PROMPT STRING...', ; + '...OPTION STRING #1...', ; + '...OPTION STRING #2...', ; + ... ; + '...OPTION STRING #N...') ; RESTRICTIONS ; 1. MAXIMUM OF 50 OPTIONS ALLOWED. ; PARAMETERS ; IOPT (RETURNED) THE OPTION STRING # THAT THE USER HAS ; SELECTED DURING THIS CALL TO SELECT. THIS NUMBER ; WILL BE IN THE RANGE 1 (ONE) TO N+1, WHERE THE ; USER HAS SUPPLIED "N" OPTION STRINGS. THE "N+1" ; VALUE OCCURS IF THE USER TYPES A CONTROL-Z (THIS ; EXIT IS ALWAYS POSSIBLE). ; IDFLT (SUPPLIED) THE NUMBER OF THE OPTION STRING THAT IS ; TO BE CONSIDERED AS THE "DEFAULT" OPTION STRING. ; THIS NUMBER WOULD BE IN THE RANGE OF 1 (ONE) TO "N" ; IF A DEFAULT OPTION IS DESIRED, AND EQUAL TO 0 (ZERO) ; IF A DEFAULT IS NOT DESIRED. THIS OPTION CAN ALSO ; BE "NULLED" OUT BY USING TWO CONSECUTIVE COMMAS AT ; THE APPROPRIATE PLACE IN THE CALLING PARAMETER LIST ; (EG, CALL SELECT(IOPT,,'...PROMPT STRING...',) ; ; *** 7/7/78 ENHANCED FEATURE *** ; ; IF THE VALUE OF IDFLT IS NEGATIVE (EG "-5"), THE ; COMPLETE OPTION LIST IS PRINTED ON INITIAL ENTRY TO ; THE SELECT ROUTINE AND BEFORE THE FIRST PROMPT. IF ; THE USER DOESN'T WANT A DEFAULT AND THEREFORE WANTS ; TO CHOOSE ZERO FOR THIS PARAMETER AND YET WANTS TO ; SEE THE COMPLETE SET OF OPTIONS IN THIS MANNER, ENTER ; A LARGE NEGATIVE NUMBER GREATER THAN THE HIGHEST OPTION ; NUMBER FOR THIS CALL (EG, "-999"). ; STRINGS (SUPPLIED) THE PROMPT STRING, AND THE OPTION STRINGS, ; HAVE THE SAME FORMAT--HOLLERITH LITERAL STRINGS IN ; EITHER THE FORM ; NHABCD... ; 'ABCD...' ; IBUF ; WHERE THE LAST IS AN ARRAY NAME, WITH THE LAST BYTE ; OF THE STRING BEING A ZERO (OR A ZERO WORD). THIS ; ARGUMENT CAN ALSO BE "NULLED" BY LEAVING IT OUT IF ; NO PROMPT STRING IS DESIRED. ; OPTION STRINGS CAN'T BE LEFT OUT, AND ARE NUMBERED IN ; ORDER OF THEIR APPEARANCE IN THE ARGUMENT LIST (WITH ; THE FIRST BEING #1). THE UTILITY OF THE OPTION STRINGS ; CAN BE ENHANCED BY INCLUDING "NOISE WORDS" IN ; PARENTHESES FOLLOWING THE ACTUAL CHOICE...THIS WAY, THE ; NOISE WORDS WILL APPEAR IF THE USER TYPES AN ESCAPE ; TO TERMINATE A UNIQUELY DEFINED OPTION, TO FURTHER ; EXPLAIN THE OPTION'S FUNCTION. ; SELTBL ; ; DESCRIPTION ; SELTBL IS AN ALTERNATE ENTRY POINT FOR THE SELECT PACKAGE WHICH ; ALLOWS THE USER TO SPECIFY A TWO-DIMENSIONAL TABLE OF OPTION ; STRINGS INSTEAD OF LISTING THEM INDIVIDUALLY. THE MAJOR ADVAN- ; TAGE OF THIS ENTRY IS THAT THE STRINGS CAN BE CHANGED DYNAMICALLY ; AT EXECUTION TIME (FOR INSTANCE, READ FROM A FILE) SUCH THAT ; THE SAME CALLING STATEMENT COULD BE USED FOR MULTIPLE CALLS TO ; SELECT WITH DIFFERENT OPTION STRINGS EACH TIME. ; USAGE ; CALL SELTBL(IOPT,IDFLT,'...PROMPT STRING...', ; + NOPT,NROWS,TABLE) ; PARAMETERS ; IOPT, IDFLT, AND '...PROMPT STRING...' ARE SAME AS "SELECT" ; NOPT # OF OPTION STRINGS CONTAINED IN THE TABLE ; NROWS # OF ROWS IN THE TABLE ; TABLE TWO DIMENSIONAL TABLE OF OPTION STRINGS (DIMENSIONED ; "NROW" BY AT LEAST "NOPT") ; EXAMPLE ; SUPPOSE A USER HAD AN ARRAY CALLED TABLE: ; BYTE TABLE(30,10) ; THEN THE USER COULD STORE UP TO 10 OPTION STRINGS, WHERE EACH ; OPTION STRING COULD HAVE A MAXIMUM LENGTH OF 29 CHARS (THE ; SELTBL ROUTINE WILL HAVE TO INSERT A NULL BYTE AT THE END OF ; EACH COLUMN, OR OPTION STRING, IN ORDER TO PROPERLY TERMINATE ; THE STRING). EITHER DATA STATEMENTS OR FILE READ STATEMENTS ; COULD BE USED TO INTIALIZE THIS ARRAY WITH ACTUAL STRINGS: ; DATA TABLE/'A','B',28*0,'C','D','E',27*0,'F',29*0,210*0/ ; THEN THE CALL MIGHT BE MADE LATER TO SELTBL AS FOLLOWS: ; CALL SELTBL(IOPT,1,'PROMPT: ', ; + 3,30,TABLE) ; THIS CALL WOULD RETURN IN "IOPT" THE NUMBER OF THE OPTION STRING ; SELECTED, WITH "AB" BEING THE DEFAULT OPTION TO "PROMPT: ", ; AND WITH POSSIBLE OPTION STRINGS "AB", "CDE", AND "F". ; NOTES ; 1) IF THE USER AT ANY POINT ATTEMPTS TO TYPE AN INVALID RESPONSE ; GIVEN THE OPTIONS POSSIBLE AT THAT POINT, THE CHARACTER ; WILL NEITHER BE ACCEPTED NOR PRINTED, BUT A "BELL" WILL SOUND ; AT THE USER'S TERMINAL TO TELL HIM THAT AN INVALID CHARACTER ; WAS TYPED. THIS WILL ALSO HAPPEN IF THE USER THINKS A RESPONSE ; HAS BEEN UNIQUELY QUALIFIED FOR THE NUMBER OF CHARACTERS HE ; HAS TYPED SO FAR AND HE TYPES A CARRIAGE RETURN...BUT ANOTHER ; OPTION EXISTS WHICH IS THE SAME THROUGH THE NUMBER OF CHARS ; SO FAR. THE TERMINAL WILL BEEP AND NOT ACCEPT THE CARRIAGE ; RETURN, AND THE USER WILL STILL BE INSIDE THE "SELECT" PACKAGE. ; 2) THE USER CAN TYPE AN "ESCAPE" CHARACTER AT ANY POINT, AT ; WHICH POINT THE SELECT PACKAGE WILL ATTEMPT TO "FINISH" THE ; STRING IN PROGRESS BY CHECKING WHETHER THE STRING IS UNIQUE ; COMPARED TO THE OPTIONS INITIALLY SUPPLIED. IF IT IS UNIQUE, ; THE REMAINING CHARACTERS IN THE OPTION WILL BE TYPED, AND THE ; SELECT PACKAGE WILL DO ONE OF THREE THINGS DEPENDING ON WHAT ; THE FIRST CHARACTER OF THE ORIGINAL OPTION STRING WAS: ; 1ST CHAR ACTION AFTER TYPING REMAINING CHARS ; --- ---- ------ ----- ------ --------- ----- ; # (NMBR SIGN) THE STRING "[CONFIRM]" IS TYPED, AND THE ; USER MUST EITHER CONFIRM THE OPTION BY ; TYPING A CARRIAGE RETURN, OR HE CANCELS ; THE OPTION BY TYPING ANY OTHER CHAR. IF ; HE CANCELS THE OPTION SO SELECTED, THE ; WHOLE LINE IS THROWN AWAY AND THE USER ; STARTS ON AN OPTION FROM SCRATCH. ; $ (DLR SIGN) AFTER THE TRAILING CHARACTERS OF THE OPTION ; ARE TYPED, NO CARRIAGE RETURN IS TYPED. THE ; EFFECT IS TO ALLOW A READ STATEMENT TO READ ; THE NEXT ITEM ON THE SAME LINE AS THE OPTION ; CHOSEN. ; % (PRCNT SIGN AFTER THE TRAILING CHARACTERS OF THE OPTION ; ARE TYPED, A CARRIAGE RETURN IS TYPED. IN ; THIS WAY, THE USER IS LEFT ON THE NEXT LINE ; DOWN FOR FURTHER INPUT/OUTPUT. ; NOTE THAT THE "#" LEADING CHARACTER REQUIRES ONE FURTHER LEVEL ; OF CONFIRMATION, WHILE BOTH THE "$" AND "%" LEADING CHARACTERS ; WILL IMMEDIATELY ACCEPT THE STRING IN PROGRESS (IF POSSIBLE) ; AND RETURN TO THE CALLER. ; 3) TYPING A "?" (QUESTION MARK) AT ANY POINT DURING AN OPTION WILL ; TYPE ON THE USER'S TERMINAL ALL THE OPTIONS STILL VALID AT THAT ; POINT FOR WHAT HAS BEEN TYPED SO FAR. TYPING IT AS THE FIRST ; CHARACTER OF THE OPTION RESPONSE WILL ADDITIONALLY INDICATE THAT ; "^Z" (CONTROL-Z) IS A VALID RESPONSE TO THE OPTION SELECTION. ; TYPING IT IN THE MIDDLE OF A RESPONSE WILL LIST ALL POSSIBLE ; RESPONSES VALID AT THAT POINT. ; 4) TYPING A ^Z (CONTROL-Z) AS THE 1ST CHARACTER OF THE LINE WILL ; ASK THE USER FOR CONFIRMATION, AND IF CONFIRMED, EXIT FROM ; SELECT WITH AN OPTION CODE OF "N+1", IF "N" OPTIONS WERE GIVEN. ; 5) THE STANDARD EDITING CHARACTERS OF "RUBOUT OR DEL", "^U", ; AND "^R" ARE SUPPORTED, WITH THE LAST RETYPING THE PROMPT ; STRING AS WELL AS THE CHARS TYPED SO FAR. ; 6) LOGICAL UNIT "5" IS ASSUMED FOR TERMINAL INPUT, BUT IF ; DESIRED, THIS CAN BE OVERRIDDEN. BEFORE ANY CALL TO EITHER ; "SELECT" OR "SELTBL", DO THIS: ; CALL SELECT(LUN) ; WHERE "LUN" HAS THE VALUE FOR THE LOGICAL UNIT TO BE USED FOR ; TERMINAL I/O. ; 7) THE CHARACTER THAT THE USER ENDS HIS OPTION STRING WITH CAN ; BE ACCESSED BY INCLUDING THE FOLLOWING STATEMENT IN THE ; CALLING ROUTINE: ; COMMON /SELCOM/ ENDCHR ; WHERE "ENDCHR" IS A SINGLE BYTE QUANTITY WHICH WILL CONTAIN ; EITHER: ; 13 CARRIAGE RETURN ENDED OPTION ; 26 ^Z WAS OPTION CHOSEN ; 27 ESCAPE ENDED OPTION ; 32 BLANK ENDED OPTION ; (ALL NUMBERS ABOVE ARE DECIMAL AND CORRESPOND TO THE ASCII ; VALUES THEMSELVES OF THE PARTICULAR CHARACTER)