REM PROGRAM LINPUT 1.0.3 REM PROGRAMMER D. ALLEN REM CREATED JUL 30, 1996 REM UPDATED MAY 20, 1998 REM COPYRIGHT (C) 1996 ' ' THE PURPOSE OF THIS PROGRAM IS TO PROMPT THE USER FOR AN ENVIROMENT ' VARIABLE. THEN IT WILL CREATE TEMP.BAT IN THE TEMP DIRECTORY, ' ALLOWING THE ENVIRONMENT VARIABLE TO BE RESET. ' ' VARIABLE TABLE: ' A,A$ - ONE CHARACTER INPUT ' D,D!,D$, - DUMMY VARIABLES ' EOL - FLAG, END OF LINE ' EX$ - EXPRESSION ARGUMENT ' ER - ERROR CODE ' ERP - FLAG, ERROR PROMPT ' FID$ - FILE ID STRING ' FLAG - FLAG, 0=FALSE,-1=TRUE ' FOUND - FLAG, 0=FALSE,-1=TRUE ' I - PTR TO CURRENT CHARACTER IN REC$ ' I.SAV - SAVED VALUE OF I ' I.SAVD - SAVED VALUE OF I.SAV ' J - LENGTH OF REC$ ' MDFLAG - FLAG, MAKE DIRECTORY ' QUOTE$ - DOUBLE QUOTE CHARACTER ' REC,REC$ - CURRENT RECORD, CURRENT RECORD DATA STRING ' S - SEARCH LOOP INDEX ' TEMP$ - ENVIRONMENT VARIABLE TEMP ' TMP - TEMPORARY FILE NUMBER ' WORD$ - VARIABLE FOUND IN REC$ ' ' DECLARATIONS. ' DEFINT A-Z DEFSNG R ' '$INCLUDE: 'EDSTR.BAS' ' DIM parm(1 TO MAXPARM) GOTO INITIALIZATION REM REM UTILITY ROUTINES SECTION. REM ' GET.NEXT.BLK: ' ' THE PURPOSE OF THIS ROUTINE IS TO SET I TO POINT TO THE NEXT ' BLANK CHARACTER IN REC$, STARTING AT I. ' ' VARIABLE TABLE: ' D$ - DUMMY STRING ' I - PTR TO CURRENT CHARACTER IN REC$ ' J - LENGTH OF REC$ ' REC$ - CURRENT RECORD DATA STRING ' D$=MID$(REC$,I,1) WHILE I <= J AND NOT (D$=" " OR D$=CHR$(9)) I=I+1 D$=MID$(REC$,I,1) WEND RETURN ' GET.NEXT.NON.BLK: ' ' THE PURPOSE OF THIS ROUTINE IS TO SET I TO POINT TO THE NEXT ' NON BLANK CHARACTER IN REC$, STARTING AT I. ' ' VARIABLE TABLE: ' D$ - DUMMY STRING ' I - PTR TO CURRENT CHARACTER IN REC$ ' J - LENGTH OF REC$ ' REC$ - CURRENT RECORD DATA STRING ' D$=MID$(REC$,I,1) WHILE I <= J AND (D$=" " OR D$=CHR$(9)) I=I+1 D$=MID$(REC$,I,1) WEND RETURN ' GET.NEXT.QUOTE: ' ' THE PURPOSE OF THIS ROUTINE IS TO SET I TO POINT TO THE NEXT ' DOUBLE QUOTE IN REC$, STARTING AT I+1. IF NOT FOUND, THE ' END OF LINE FLAG IS SET. IN ADDITION, FID$ WILL EQUAL ALL ' CHARACTERS BETWEEN QUOTES. ' ' VARIABLE TABLE: ' D$ - DUMMY STRING ' EOL - FLAG, END OF LINE ' FID$ - FILE INDENTIFICATION STRING ' I - PTR TO CURRENT CHARACTER IN REC$ ' J - LENGTH OF REC$ ' QUOTE$ - DOUBLE QUOTE CHARACTER ' REC$ - CURRENT RECORD DATA STRING ' FID$="" I=I+1 D$=MID$(REC$,I,1) WHILE I <= J AND D$ <> QUOTE$ FID$=FID$+D$ I=I+1 D$=MID$(REC$,I,1) WEND IF I > J THEN EOL=-1 : D$="" RETURN ' GET.NEXT.WORD: ' ' THE PURPOSE OF THIS ROUTINE IS TO SET WORD$ EQUAL TO THE NEXT ' VALID SET OF ALPHANUMERIC CHARACTERS IN REC$, STARTING AT I. ' ALL LOWERCASE CHARACTERS ARE CONVERTED TO UPPERCASE. I.SAV ' IS TO POINT TO WORD$ IN REC$. SUF.1 WILL CONTAIN THE ASCII ' VALUE FOR THE SUFFIX OF WORD$. THE PREVIOUS I.SAV IS SAVED ' IN I.SAVD. ' ' VARIABLE TABLE: ' D - DUMMY VARIABLE ' D$ - DUMMY STRING ' FLAG - FLAG, 0=FALSE, -1=TRUE ' I - PTR TO CURRENT CHARACTER IN REC$ ' I.SAV - SAVED VALUE OF I ' I.SAVD - SAVED VALUE OF I.SAV ' J - LENGTH OF REC$ ' PMT$ - PROMPT STRING ' REC$ - CURRENT RECORD DATA STRING ' SUF.1 - FIRST SUFFIX FOUND TO VARIABLE IN WORD$ ' WORD$ - VARIABLE FOUND IN REC$ ' I.SAVD=I.SAV : I.SAV=I SUF.1=0 WORD$="" : FLAG=-1 WHILE I <= J AND FLAG FLAG=0 D$=MID$(REC$,I,1) : D=ASC(D$) IF D=95 THEN FLAG=-1 IF D>47 AND D<58 THEN FLAG=-1 IF D>64 AND D<91 THEN FLAG=-1 IF D>96 AND D<123 THEN D=D-32 : FLAG=-1 IF FLAG THEN WORD$=WORD$+CHR$(D) : I=I+1 WEND IF I <= J THEN SUF.1=D RETURN ' ERRORS: ' ' THE PURPOSE OF THIS ROUTINE IS TO HANDLE ALL FATAL ' ERRORS. ENTRY: GOTO ERRORS\ ' D$="" IF ER=1 THEN D$="Invalid Command" IF ER=2 THEN D$="File Name Conflict" IF ER=3 THEN D$=REC$+" File Cannot be opened" IF ER=64 THEN D$="Bad File Name" IF ER=76 THEN D$="Path not found" PRINT "** ";D$ RETURN ' ERROR.HANDLER: ' ' THE PURPOSE OF THIS ROUTINE IS TO HANDLE ALL PROGRAM, AND ' SYSTEM ERRORS. ENTRY: ON ERROR GOTO ERROR.HANDLER\ ' ' VARIABLE TABLE: ' D! - DUMMY VARIABLE ' D$ - DUMMY STRING ' ER - ERROR CODE ' ERP - FLAG, ERROR PROMPT ' D$="" IF ERR<50 THEN D$="Syntax Error" IF ERR=25 THEN D$="Device not Available" IF ERR=53 THEN D$="File not Found" IF ERR=64 THEN D$="Bad File Name" IF D$="" THEN D$="Disk Error" PRINT "** ";D$;", Error#";ERR D!=ERL IF D! <> 65535 AND D!<>0 THEN PRINT "** Error Line Number";D! IF ERP THEN PRINT "Press 'C' to continue, anything to quit." D$=INPUT$(1) IF D$<>"C" AND D$<>"c" THEN STOP END IF RESUME RESUMED RESUMED: RETURN REM REM UTILITY ROUTINES EXIT. REM ' INITIALIZATION: ' ' THE PURPOSE OF THIS ROUTINE IS TO INITIALIZE PROGRAM VARIABLES ' AND TABLES. ENTRY: SYSTEM, EXIT: THE MAIN ROUTINE. ' ': ON ERROR GOTO ERROR.HANDLER : ERP = -1 REM REM MAIN ROUTINE REM ' ' THE PURPOSE OF THIS ROUTINE IS TO CONTROL THE PROGRAM. ' ENTRY: INITIALIZATION\ ' TEMP$ = LTRIM$(RTRIM$(ENVIRON$("TEMP"))) IF RIGHT$(TEMP$, 1) = "\" THEN TEMP$ = LEFT$(TEMP$, LEN(TEMP$) - 1) SHELL "if exist "+TEMP$+"\temp.bat del "+TEMP$+"\temp.bat" REC$ = LTRIM$(RTRIM$(COMMAND$)) I = 1 : J = LEN(REC$) : EOL = 0 : I.SAV = 0 IF J = 0 THEN COLOR 7,1 : CLS SYSTEM ENDIF IF INSTR(LEFT$(REC$,2),"?") > 0 THEN COLOR 7,1 : CLS PRINT "LINPUT 1.0.3 for MS-DOS" PRINT "Copyright (c) 1996-1998 by Dennis Allen" PRINT "Portions (C) Copyright" PRINT "HOMONLIB.QLB by Raymond W. Marron" PRINT "Microsoft Corp. 1987 - 1998" PRINT "All Rights Reserved" PRINT PRINT "Usage: LINPUT [/d] "+CHR$(34)+"prompt"+CHR$(34)+" xxx" PRINT PRINT " /d Create directory stored in xxx. Optional." PRINT PRINT " "+CHR$(34)+"prompt"+CHR$(34)+" Text to appear as a prompt for user input." PRINT PRINT " xxx DOS Environment variable to store user input." PRINT " A previous value of YES or NO invokes Y/N prompt." PRINT PRINT "A file called "+TEMP$+"\TEMP.BAT is created. CALL "+TEMP$+"\TEMP" PRINT "will set xxx equal to new user value. If, /d is specified, the file" PRINT "TEMP.BAT will also create directory stored in xxx." PRINT SYSTEM END IF D$ = UCASE$(MID$(REC$,I,2)) MDFLAG = 0 IF D$ = "/D" OR D$ = "-D" THEN MDFLAG = -1 GOSUB GET.NEXT.BLK : GOSUB GET.NEXT.NON.BLK END IF D$=MID$(REC$,I,1) SELECT CASE D$ CASE CHR$(34) QUOTE$=D$ CASE "'" QUOTE$=D$ CASE "[" QUOTE$="]" CASE "{" QUOTE$="}" CASE ELSE QUOTE$ = CHR$(34) END SELECT GOSUB GET.NEXT.QUOTE : PMT$ = FID$ I = I + 1 : GOSUB GET.NEXT.NON.BLK : GOSUB GET.NEXT.WORD REC$ = ENVIRON$(WORD$) COLOR 7,1 : PRINT PMT$ ; PARM(1) = CSRLIN PARM(2) = LEN(PMT$) + 1 PARM(3) = 80 - LEN(PMT$) PARM(4) = SCINS PARM(5) = 0 PARM(6) = 0 PARM(7) = 62 PARM(8) = 60 PARM(9) = 0 PARM(10) = 0 PARM(FGS) = 7 PARM(BGS) = 1 IF UCASE$(REC$) = "YES" OR UCASE$(REC$) = "NO" THEN DO D$ = UCASE$(INPUT$(1)) SELECT CASE D$ CASE CHR$(13) EXIT DO CASE CHR$(27) REC$ = CHR$(27) EXIT DO CASE "Y" REC$ = "YES" EXIT DO CASE "N" REC$ = "NO" EXIT DO CASE ELSE END SELECT LOOP REC$ = UCASE$(REC$) PRINT REC$ ELSE REC$ = EDSTR$(REC$,PARM()) PRINT END IF REC$ = LTRIM$(RTRIM$(REC$)) IF MDFLAG AND RIGHT$(REC$, 1) = "\" THEN REC$ = LEFT$(REC$, LEN(REC$) - 1) IF ASC(REC$+" ") <> 27 THEN OPEN "O", 1, TEMP$+"\TEMP.BAT" PRINT #1, "@ECHO OFF" PRINT #1, "SET " + WORD$ + "=" + REC$ IF MDFLAG THEN IF RIGHT$(REC$,1) <> "\" THEN REC$ = REC$ + "\" D = INSTR(REC$,":\") + 1 + 1 FOR I = D TO LEN(REC$) IF MID$(REC$, I, 1) = "\" THEN PRINT #1, "IF NOT EXIST "+LEFT$(REC$, I - 1)+"\*.* MD " + LEFT$(REC$, I - 1) END IF NEXT I ENDIF CLOSE #1 END IF SYSTEM END