INSTALLATION: To install this PPE, unzip the file into a subdirectory called \PCB\PPE that was created by the INSTALL program. Then, go to PCBSetup, File Locations, New User/Logon/off Questionnaires, to the screen that looks like this: Name/Loc of New Reg Questionnaire : Name/Loc of Answers to New Reg. : Name/Loc of Logon Script Quest. : Name/Loc of Logon Script Answers : Name/Loc of Logoff Script Quest. : Name/Loc of Logoff Script Answers : Put this drive/path and filename of this PPE in the Name/Loc of New Reg Questionnaire field. Make ABSOLUTELY SURE you delete all information from the Name/Loc of Logoff Script Answers field. Your screen would look something like this when you're done (assuming you have it installed on drive C: in a subdrectory called \PCB) Name/Loc of New Reg Questionnaire : C:\PCB\PPE\MESSAGE.PPE Name/Loc of Answers to New Reg. : Name/Loc of Logon Script Quest. : Name/Loc of Logon Script Answers : Name/Loc of Logoff Script Quest. : Name/Loc of Logoff Script Answers : That's really all there is to it. PPEs have become the preferred method for PCBoard System Operators (Sysops) to add new functions and features to PCBoard, just because they're so simple to install and maintain. **************************************************************************** EXPLAINING THE CODE: This file explains the code you saw in the MESSAGE.PPS file. I know from first hand experience how intimidating it can look. I started out using the PPL Compiler with no programming skills at all. I still can't program in any "real" language, but this has gotten to be very simple. If you have any questions about any of the statements used in these examples, please call us voice at 801-261-1686 Monday through Friday 9am till 4pm, Mountain Time Zone =========================================================================== Let's look at this example line-by-line: STRING ANSWER1,ANSWER2 This line Declares your variables (these are defined as strings, so they hold text) GETUSER Here, we get the current caller's information from memory IF (CURSEC() = READLINE(PCBDAT(),149)) THEN Now we Compare the current caller's security level to the level you've specified in PCBSetup|Security Levels|User Commands|Level Given to Users Who Agree to Register. If the security level is the same, do the things written in between the "IF" beginning and the "ENDIF" ending INPUTSTR "How did you hear about this system",ANSWER1,0Eh,40,MASK_ASCII(),LFAFTER + FIELDLEN INPUTSTR "Would you like to subscribe",ANSWER2,0Eh,1,"YN",LFAFTER + FIELDLEN + UPCASE To ask a question - in this case, "How did you hear about this system", and put their answer in the variable "ANSWER1", we use INPUTSTR. This INPUTSTR statement means, literally, "let the user input a string in response to a question asked", then the question is specified. It's in quotes because we want it printed on the screen exactly the same way its written here. The question mark is automatically appended. Then you tell it the name of the variable the information should go to. After that, you tell it the color you want the question displayed in. This example uses bright yellow on a black background. The next field tells the program how many characters the caller can type for a response. Then you use a "Mask", basically a filter to tell the program what characters will be accepted as an answer. The first line uses MASK_ASCII(), which doesn't limit any characters. The second directly filters for the characters "Y" and "N". If the caller tries to type anything but those two characters, the input will be ignored. The last item on the line is the "Flags", they tell the program how the question should be printed on the caller's screen. The LFAFTER flag says automatically put an "Enter" key after the question is printed. This will keep more than one question being printed on the same line. The "FIELDLEN" says to print "(" and ")" parentheses around the input field. This will let your callers know how much room they have to type in. The "UPCASE" says to automatically put their answer into upper case letters, whether they type it in like that or not. FCREATE 1,"TEMP.MSG",O_RW,S_DN Now we create a new file on the hard drive called "TEMP.MSG". This is a temporary file to hold the information until we can put it in the message base as a message to the Sysop. The first field, "1", tells the program which "channel" to write the information out to. There are 8 different channels you can write through, so a very complex program could write to 8 different files at once. Next you tell it the name of the file you want to create. As in the previous statements, the file name is in quotes, since we want it to be created exactly as it's shown here. Next, you're telling the program to create the file in Read/Write mode, meaning you can both read from the file and write information to it. And finally, the end statement says to have it in "Share/Deny None" mode, which means more than one application can write to the file at one time. FPUTLN 1,"Heard about system from: "+ANSWER1+CHR(13)+"Subscriber: "+ANSWER2 As we get close to the end of the program, we write the information to the file we just created. Since just putting the information in there could be confusing, we include additional information to explain what's there. Normally, this would be written out in two statements, but I cheated a little to keep this program under the demo version's limit of 10 lines of code. What will show up in the file is: Heard about system from: (answer) Subscriber: (yes or no answer) FCLOSE 1 Here, the file gets closed. Because of the way DOS handles files, the file has to be closed before we can use it to create the message. The only thing you specify here is the channel the file is open on. MESSAGE 0,READLINE(PCBDAT(),2),U_NAME(),"New Caller","R",0,0,0,"TEMP.MSG" Finally, create the message. The command line used here says to put the message in conference #0 - the Main Board. It will (again) read the PCBOARD.DAT file to find out what was put in PCBSetup|Sysop Information| Sysop's Name (when NOT using Real Name) entry. It will address the message to this name. It will put the new caller's name as the "From" in the message, with a subject of "New Caller". The message will be a Receiver only message (private), so no one but the System Operator will be able to read it. The three zeros are all a short way of saying "false", they say the message should have no automatic pack-out date, should not be echoed (e-mail) and should not generate a return receipt (a return message to the caller saying when you read the message). Finally, we tell it the file to use to create the actual "body" of the message. ENDIF And this is the closing statement. Since there's nothing after this, if the caller's security level is NOT equal to the entry we talked about at the beginning of the file, nothing else will hapen, and the PPE will stop.