Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- IDENTIFICATION DIVISION.
- PROGRAM-ID. ATTITUDE-ASSESSMENT.
- *> Atitude Asessment
- *> Written by Sean Dennis. Converted to COBOL
- *> by Microsoft Copilot with add'l programming
- *> by Sean Dennis.
- *> (C) 2026 by Sean Dennis.
- *> Released under the MIT License.
- *> To compile this, use GNUCobol with this
- *> command line: cobc -x -free attitude.cob
- *> Written in free-format COBOL.
- ENVIRONMENT DIVISION.
- INPUT-OUTPUT SECTION.
- FILE-CONTROL.
- SELECT DOOR-SYS ASSIGN TO DROPFILE-PATH
- ORGANIZATION IS LINE SEQUENTIAL
- FILE STATUS IS DOOR-STATUS.
- DATA DIVISION.
- FILE SECTION.
- FD DOOR-SYS.
- 01 DOOR-REC PIC X(255).
- WORKING-STORAGE SECTION.
- *> ---------------------------------------------------------
- *> FILE STATUS
- *> ---------------------------------------------------------
- 01 DOOR-STATUS PIC XX VALUE "00".
- *> ---------------------------------------------------------
- *> ANSI COLOR CONSTANTS (ASCII SAFE)
- *> ---------------------------------------------------------
- 01 ANSI-RESET PIC X(4) VALUE X"1B5B306D".
- 01 ANSI-CYAN PIC X(5) VALUE X"1B5B33366D".
- 01 ANSI-BRIGHT-YELLOW PIC X(5) VALUE X"1B5B39336D".
- 01 ANSI-GREEN PIC X(5) VALUE X"1B5B33326D".
- 01 ANSI-RED PIC X(5) VALUE X"1B5B33316D".
- 01 ANSI-BOLD PIC X(4) VALUE X"1B5B316D".
- 01 ANSI-CLEAR PIC X(4) VALUE X"1B5B324A".
- 01 ANSI-HOME PIC X(3) VALUE X"1B5B48".
- *> ---------------------------------------------------------
- *> DOOR.SYS FIELDS (minimal)
- *> ---------------------------------------------------------
- 01 USER-NAME PIC X(30) VALUE "LOCAL USER".
- 01 USER-SECLEVEL PIC 9(3) VALUE 0.
- 01 NODE-NUMBER PIC 9(3) VALUE 1.
- 01 TIME-LEFT PIC 9(3) VALUE 10.
- 01 NODE-DISPLAY PIC ZZ9.
- 01 TIME-DISPLAY PIC ZZ9.
- 01 TEMP-LINE PIC X(255).
- *> ---------------------------------------------------------
- *> PROGRAM VARIABLES
- *> ---------------------------------------------------------
- 01 SCORE PIC 9(3) VALUE 0.
- 01 QUESTION-NUMBER PIC 99 VALUE 1.
- 01 USER-CHOICE PIC X VALUE SPACE.
- 01 VALID-CHOICE PIC X VALUE "N".
- 01 PROGRAM-TITLE PIC X(40)
- VALUE "Attitude Assessment (v2.8.4)".
- 01 COPYRIGHT-LINE PIC X(60)
- VALUE "(C) 2025 Sean Dennis - All Rights Reserved".
- 01 ARGUMENT-COUNT PIC 9(2).
- 01 ARGUMENT-PATH PIC X(200) VALUE SPACES.
- 01 DROPFILE-PATH PIC X(255) VALUE SPACES.
- 01 LOCAL-MODE PIC X VALUE "N".
- PROCEDURE DIVISION.
- MAIN-LOGIC.
- *> ---------------------------------------------------------
- *> COMMAND-LINE DROPFILE PATH SUPPORT
- *> ---------------------------------------------------------
- ACCEPT ARGUMENT-PATH FROM COMMAND-LINE.
- IF ARGUMENT-PATH NOT = SPACES
- STRING
- ARGUMENT-PATH DELIMITED BY SPACE
- "DOOR.SYS" DELIMITED BY SIZE
- INTO DROPFILE-PATH
- END-STRING
- ELSE
- MOVE "DOOR.SYS" TO DROPFILE-PATH
- END-IF.
- PERFORM LOAD-DOOR-SYS
- PERFORM CLEAR-SCREEN
- PERFORM SHOW-TITLE
- PERFORM SHOW-INSTRUCTIONS
- PERFORM RUN-QUIZ
- PERFORM SHOW-RESULTS
- PERFORM GOODBYE
- STOP RUN.
- *> ---------------------------------------------------------
- *> DOOR.SYS LOADER
- *> ---------------------------------------------------------
- LOAD-DOOR-SYS.
- OPEN INPUT DOOR-SYS
- IF DOOR-STATUS NOT = "00"
- IF LOCAL-MODE = "Y"
- MOVE 1 TO NODE-NUMBER
- MOVE 10 TO TIME-LEFT
- MOVE "LOCAL USER" TO USER-NAME
- END-IF
- READ DOOR-SYS INTO TEMP-LINE
- IF DOOR-STATUS = "00"
- MOVE TEMP-LINE(1:30) TO USER-NAME
- END-IF
- READ DOOR-SYS INTO TEMP-LINE
- IF DOOR-STATUS = "00"
- MOVE FUNCTION NUMVAL(TEMP-LINE) TO USER-SECLEVEL
- END-IF
- READ DOOR-SYS INTO TEMP-LINE
- IF DOOR-STATUS = "00"
- MOVE FUNCTION NUMVAL(TEMP-LINE) TO TIME-LEFT
- END-IF
- READ DOOR-SYS INTO TEMP-LINE
- IF DOOR-STATUS = "00"
- MOVE FUNCTION NUMVAL(TEMP-LINE) TO NODE-NUMBER
- END-IF
- CLOSE DOOR-SYS.
- *> ---------------------------------------------------------
- *> SCREEN HELPERS
- *> ---------------------------------------------------------
- CLEAR-SCREEN.
- DISPLAY ANSI-CLEAR ANSI-HOME.
- SHOW-TITLE.
- DISPLAY ANSI-CYAN "----------------------------------------------" ANSI-RESET
- DISPLAY ANSI-BRIGHT-YELLOW PROGRAM-TITLE ANSI-RESET
- DISPLAY ANSI-CYAN "----------------------------------------------" ANSI-RESET
- DISPLAY " "
- MOVE NODE-NUMBER TO NODE-DISPLAY
- MOVE TIME-LEFT TO TIME-DISPLAY
- DISPLAY "Welcome, " FUNCTION TRIM(USER-NAME) "."
- DISPLAY "Node: " NODE-DISPLAY
- " Time left: " TIME-DISPLAY " minutes."
- DISPLAY " ".
- SHOW-QUESTION-HEADER.
- DISPLAY " "
- DISPLAY ANSI-CYAN "Question " QUESTION-NUMBER " of 10" ANSI-RESET
- DISPLAY " ".
- *> ---------------------------------------------------------
- *> INSTRUCTIONS
- *> ---------------------------------------------------------
- SHOW-INSTRUCTIONS.
- DISPLAY ANSI-BRIGHT-YELLOW
- "Would you like instructions (Q to quit)? (Y/N/Q)"
- ANSI-RESET
- PERFORM GET-YNQ
- EVALUATE USER-CHOICE
- WHEN "Q"
- PERFORM GOODBYE
- STOP RUN
- WHEN "Y"
- PERFORM CLEAR-SCREEN
- PERFORM SHOW-TITLE
- DISPLAY ANSI-GREEN
- "Attitude Assessment is a simple personality test."
- ANSI-RESET
- DISPLAY "It consists of ten multiple-choice questions."
- DISPLAY "At the end, you will see an assessment based on your score."
- DISPLAY "You can press Q at any time during the test to quit."
- DISPLAY " "
- DISPLAY "Press ENTER to begin..."
- ACCEPT USER-CHOICE
- WHEN OTHER
- CONTINUE
- END-EVALUATE.
- *> ---------------------------------------------------------
- *> YES/NO/QUIT INPUT
- *> ---------------------------------------------------------
- GET-YNQ.
- MOVE "N" TO VALID-CHOICE
- PERFORM UNTIL VALID-CHOICE = "Y"
- ACCEPT USER-CHOICE
- MOVE FUNCTION UPPER-CASE(USER-CHOICE) TO USER-CHOICE
- IF USER-CHOICE = "Y" OR
- USER-CHOICE = "N" OR
- USER-CHOICE = "Q"
- MOVE "Y" TO VALID-CHOICE
- END-IF
- END-PERFORM.
- *> ---------------------------------------------------------
- *> QUIZ DRIVER
- *> ---------------------------------------------------------
- RUN-QUIZ.
- MOVE 0 TO SCORE
- MOVE 1 TO QUESTION-NUMBER
- PERFORM QUESTION-1
- ADD 1 TO QUESTION-NUMBER
- PERFORM QUESTION-2
- ADD 1 TO QUESTION-NUMBER
- PERFORM QUESTION-3
- ADD 1 TO QUESTION-NUMBER
- PERFORM QUESTION-4
- ADD 1 TO QUESTION-NUMBER
- PERFORM QUESTION-5
- ADD 1 TO QUESTION-NUMBER
- PERFORM QUESTION-6
- ADD 1 TO QUESTION-NUMBER
- PERFORM QUESTION-7
- ADD 1 TO QUESTION-NUMBER
- PERFORM QUESTION-8
- ADD 1 TO QUESTION-NUMBER
- PERFORM QUESTION-9
- ADD 1 TO QUESTION-NUMBER
- PERFORM QUESTION-10.
- *> ---------------------------------------------------------
- *> GENERAL CHOICE INPUT (A-G or Q)
- *> ---------------------------------------------------------
- GET-CHOICE.
- MOVE "N" TO VALID-CHOICE
- PERFORM UNTIL VALID-CHOICE = "Y"
- ACCEPT USER-CHOICE
- MOVE FUNCTION UPPER-CASE(USER-CHOICE) TO USER-CHOICE
- IF USER-CHOICE = "Q"
- PERFORM GOODBYE
- STOP RUN
- END-IF
- IF USER-CHOICE >= "A" AND USER-CHOICE <= "G"
- MOVE "Y" TO VALID-CHOICE
- END-IF
- END-PERFORM.
- *> ---------------------------------------------------------
- *> QUESTIONS 1 THROUGH 4
- *> ---------------------------------------------------------
- QUESTION-1.
- PERFORM CLEAR-SCREEN
- PERFORM SHOW-TITLE
- PERFORM SHOW-QUESTION-HEADER
- DISPLAY ANSI-CYAN "When do you feel your best?" ANSI-RESET
- DISPLAY " "
- DISPLAY " A. In the morning"
- DISPLAY " B. During the afternoon and early evening"
- DISPLAY " C. Late at night"
- DISPLAY " "
- DISPLAY "Enter your choice (A-C) or Q to quit:"
- PERFORM GET-CHOICE
- EVALUATE USER-CHOICE
- WHEN "A" ADD 2 TO SCORE
- WHEN "B" ADD 4 TO SCORE
- WHEN "C" ADD 6 TO SCORE
- END-EVALUATE.
- QUESTION-2.
- PERFORM CLEAR-SCREEN
- PERFORM SHOW-TITLE
- PERFORM SHOW-QUESTION-HEADER
- DISPLAY ANSI-CYAN "You usually walk:" ANSI-RESET
- DISPLAY " "
- DISPLAY " A. Fairly fast with long steps"
- DISPLAY " B. Fairly fast with little steps"
- DISPLAY " C. Less fast, head up, looking straight ahead"
- DISPLAY " D. Less fast, head down"
- DISPLAY " E. Very slowly"
- DISPLAY " "
- DISPLAY "Enter your choice (A-E) or Q to quit:"
- PERFORM GET-CHOICE
- EVALUATE USER-CHOICE
- WHEN "A" ADD 6 TO SCORE
- WHEN "B" ADD 4 TO SCORE
- WHEN "C" ADD 7 TO SCORE
- WHEN "D" ADD 2 TO SCORE
- WHEN "E" ADD 1 TO SCORE
- END-EVALUATE.
- QUESTION-3.
- PERFORM CLEAR-SCREEN
- PERFORM SHOW-TITLE
- PERFORM SHOW-QUESTION-HEADER
- DISPLAY ANSI-CYAN "When talking to people, you:" ANSI-RESET
- DISPLAY " "
- DISPLAY " A. Stand with your arms folded"
- DISPLAY " B. Have your hands clasped"
- DISPLAY " C. Have one or both hands on your hips"
- DISPLAY " D. Touch or push the person you are talking to"
- DISPLAY " E. Fidget (play with your ear, smooth your hair, etc.)"
- DISPLAY " "
- DISPLAY "Enter your choice (A-E) or Q to quit:"
- PERFORM GET-CHOICE
- EVALUATE USER-CHOICE
- WHEN "A" ADD 4 TO SCORE
- WHEN "B" ADD 2 TO SCORE
- WHEN "C" ADD 5 TO SCORE
- WHEN "D" ADD 7 TO SCORE
- WHEN "E" ADD 6 TO SCORE
- END-EVALUATE.
- QUESTION-4.
- PERFORM CLEAR-SCREEN
- PERFORM SHOW-TITLE
- PERFORM SHOW-QUESTION-HEADER
- DISPLAY ANSI-CYAN "When relaxing, you sit with:" ANSI-RESET
- DISPLAY " "
- DISPLAY " A. Knees bent, legs neatly side by side"
- DISPLAY " B. Legs crossed"
- DISPLAY " C. Legs stretched out or straight"
- DISPLAY " D. One leg curled under you"
- DISPLAY " "
- DISPLAY "Enter your choice (A-D) or Q to quit:"
- PERFORM GET-CHOICE
- EVALUATE USER-CHOICE
- WHEN "A" ADD 4 TO SCORE
- WHEN "B" ADD 6 TO SCORE
- WHEN "C" ADD 2 TO SCORE
- WHEN "D" ADD 1 TO SCORE
- END-EVALUATE.
- *> ---------------------------------------------------------
- *> QUESTIONS 5 THROUGH 8
- *> ---------------------------------------------------------
- QUESTION-5.
- PERFORM CLEAR-SCREEN
- PERFORM SHOW-TITLE
- PERFORM SHOW-QUESTION-HEADER
- DISPLAY ANSI-CYAN "When something really amuses you, you react with:" ANSI-RESET
- DISPLAY " "
- DISPLAY " A. A big, appreciated laugh"
- DISPLAY " B. A soft laugh"
- DISPLAY " C. A quiet chuckle"
- DISPLAY " D. A sheepish smile"
- DISPLAY " "
- DISPLAY "Enter your choice (A-D) or Q to quit:"
- PERFORM GET-CHOICE
- EVALUATE USER-CHOICE
- WHEN "A" ADD 6 TO SCORE
- WHEN "B" ADD 4 TO SCORE
- WHEN "C" ADD 3 TO SCORE
- WHEN "D" ADD 2 TO SCORE
- END-EVALUATE.
- QUESTION-6.
- PERFORM CLEAR-SCREEN
- PERFORM SHOW-TITLE
- PERFORM SHOW-QUESTION-HEADER
- DISPLAY ANSI-CYAN "When you go to a party or social gathering, you:" ANSI-RESET
- DISPLAY " "
- DISPLAY " A. Make a loud entrance so everyone notices you"
- DISPLAY " B. Make a quiet entrance, looking for someone you know"
- DISPLAY " C. Make the quietest entrance, trying to stay unnoticed"
- DISPLAY " "
- DISPLAY "Enter your choice (A-C) or Q to quit:"
- PERFORM GET-CHOICE
- EVALUATE USER-CHOICE
- WHEN "A" ADD 6 TO SCORE
- WHEN "B" ADD 4 TO SCORE
- WHEN "C" ADD 2 TO SCORE
- END-EVALUATE.
- QUESTION-7.
- PERFORM CLEAR-SCREEN
- PERFORM SHOW-TITLE
- PERFORM SHOW-QUESTION-HEADER
- DISPLAY ANSI-CYAN "You are working very hard and you are interrupted. Do you:" ANSI-RESET
- DISPLAY " "
- DISPLAY " A. Welcome the break"
- DISPLAY " B. Feel extremely irritated"
- DISPLAY " C. Vary between these two extremes"
- DISPLAY " "
- DISPLAY "Enter your choice (A-C) or Q to quit:"
- PERFORM GET-CHOICE
- EVALUATE USER-CHOICE
- WHEN "A" ADD 6 TO SCORE
- WHEN "B" ADD 2 TO SCORE
- WHEN "C" ADD 4 TO SCORE
- END-EVALUATE.
- QUESTION-8.
- PERFORM CLEAR-SCREEN
- PERFORM SHOW-TITLE
- PERFORM SHOW-QUESTION-HEADER
- DISPLAY ANSI-CYAN "Which of the following colors do you like most:" ANSI-RESET
- DISPLAY " "
- DISPLAY " A. Red or orange"
- DISPLAY " B. Black"
- DISPLAY " C. Yellow or light blue"
- DISPLAY " D. Green"
- DISPLAY " E. Dark blue or purple"
- DISPLAY " F. White"
- DISPLAY " G. Brown or gray"
- DISPLAY " "
- DISPLAY "Enter your choice (A-G) or Q to quit:"
- PERFORM GET-CHOICE
- EVALUATE USER-CHOICE
- WHEN "A" ADD 6 TO SCORE
- WHEN "B" ADD 7 TO SCORE
- WHEN "C" ADD 5 TO SCORE
- WHEN "D" ADD 4 TO SCORE
- WHEN "E" ADD 3 TO SCORE
- WHEN "F" ADD 2 TO SCORE
- WHEN "G" ADD 1 TO SCORE
- END-EVALUATE.
- *> ---------------------------------------------------------
- *> QUESTIONS 9 AND 10
- *> ---------------------------------------------------------
- QUESTION-9.
- PERFORM CLEAR-SCREEN
- PERFORM SHOW-TITLE
- PERFORM SHOW-QUESTION-HEADER
- DISPLAY ANSI-CYAN "When in bed at night, in twilight sleep, you are:" ANSI-RESET
- DISPLAY " "
- DISPLAY " A. Stretched out on your back"
- DISPLAY " B. Stretched out face down on your stomach"
- DISPLAY " C. On your side, slightly curled"
- DISPLAY " D. With your head on one arm"
- DISPLAY " E. With your head under the covers"
- DISPLAY " "
- DISPLAY "Enter your choice (A-E) or Q to quit:"
- PERFORM GET-CHOICE
- EVALUATE USER-CHOICE
- WHEN "A" ADD 7 TO SCORE
- WHEN "B" ADD 6 TO SCORE
- WHEN "C" ADD 4 TO SCORE
- WHEN "D" ADD 2 TO SCORE
- WHEN "E" ADD 1 TO SCORE
- END-EVALUATE.
- QUESTION-10.
- PERFORM CLEAR-SCREEN
- PERFORM SHOW-TITLE
- PERFORM SHOW-QUESTION-HEADER
- DISPLAY ANSI-CYAN "You often dream that you are:" ANSI-RESET
- DISPLAY " "
- DISPLAY " A. Falling"
- DISPLAY " B. Fighting or struggling"
- DISPLAY " C. Searching for something or someone"
- DISPLAY " D. Flying or floating"
- DISPLAY " E. You usually have dreamless sleep"
- DISPLAY " F. Your dreams are always pleasant"
- DISPLAY " "
- DISPLAY "Enter your choice (A-F) or Q to quit:"
- PERFORM GET-CHOICE
- EVALUATE USER-CHOICE
- WHEN "A" ADD 4 TO SCORE
- WHEN "B" ADD 2 TO SCORE
- WHEN "C" ADD 3 TO SCORE
- WHEN "D" ADD 5 TO SCORE
- WHEN "E" ADD 6 TO SCORE
- WHEN "F" ADD 1 TO SCORE
- END-EVALUATE.
- *> ---------------------------------------------------------
- *> RESULTS
- *> ---------------------------------------------------------
- SHOW-RESULTS.
- PERFORM CLEAR-SCREEN
- PERFORM SHOW-TITLE
- DISPLAY ANSI-BRIGHT-YELLOW "The result of your test is:" ANSI-RESET
- DISPLAY " "
- EVALUATE TRUE
- WHEN SCORE >= 60
- DISPLAY "Others see you as someone they should handle with care."
- DISPLAY "You are seen as vain, self-centered and extremely dominant."
- DISPLAY "Others may admire you, but they do not always trust you."
- WHEN SCORE >= 51
- DISPLAY "Others see you as exciting, volatile and impulsive."
- DISPLAY "A natural leader who is quick to make decisions."
- DISPLAY "Bold, adventurous and willing to try anything once."
- WHEN SCORE >= 41
- DISPLAY "Others see you as fresh, lively, charming and amusing."
- DISPLAY "Often the center of attention, but well-balanced."
- DISPLAY "Kind, considerate and understanding."
- WHEN SCORE >= 31
- DISPLAY "Others see you as sensible, cautious, careful and practical."
- DISPLAY "Clever and talented, but modest."
- DISPLAY "Slow to make friends, but extremely loyal."
- WHEN SCORE >= 21
- DISPLAY "Your friends see you as painstaking and fussy."
- DISPLAY "Very cautious, extremely careful and steady."
- DISPLAY "You examine everything from every angle."
- WHEN OTHER
- DISPLAY "People think you are shy, nervous and indecisive."
- DISPLAY "Someone who prefers others to make decisions."
- DISPLAY "A worrier who sees problems that may not exist."
- END-EVALUATE
- DISPLAY " "
- DISPLAY ANSI-GREEN "Thank you for taking the Attitude Assessment!" ANSI-RESET
- DISPLAY " "
- DISPLAY "Press ENTER to return to the BBS..."
- ACCEPT USER-CHOICE.
- *> ---------------------------------------------------------
- *> GOODBYE
- *> ---------------------------------------------------------
- GOODBYE.
- PERFORM CLEAR-SCREEN
- DISPLAY ANSI-CYAN "Exiting Attitude Assessment..." ANSI-RESET
- DISPLAY " "
- DISPLAY "Goodbye, " FUNCTION TRIM(USER-NAME) "."
- DISPLAY " ".
Advertisement
Add Comment
Please, Sign In to add comment