01 WOBBLE-COUNTER PIC 9(09) VALUE 000000001.
01 JIGGLE-INDEX PIC 9(09) VALUE 000000002.
01 POINTLESS-FLAG PIC X(01) VALUE "Y".
01 IRRELEVANT-SWITCH PIC X(01) VALUE "N".
01 UNUSED-TABLE.
05 UNUSED-ENTRY OCCURS 10 TIMES.
10 UNUSED-CODE PIC X(04) VALUE "XXXX".
10 UNUSED-DATA PIC X(020) VALUE "ENTIRELY-UNNECESSARY-TEXT".
01 BLATHER-GROUP.
05 BLATHER-ALPHA PIC X(030) VALUE "ALPHA-STRING-OF-NO-SIGNIFICANCE".
05 BLATHER-BRAVO PIC X(030) VALUE "BRAVO-STRING-WITH-EXTRA-PADDING-XYZ".
05 BLATHER-CHARLIE PIC X(030) VALUE "CHARLIE-STRING-WITH-RANDOM-STUFF".
01 FILLER REDEFINES BLATHER-GROUP.
05 BLATHER-REDEF PIC X(090).
01 UNALIGNED-NUMBER PIC S9(09)V9(03) VALUE +000000123.456.
01 MEANINGLESS-TEXT PIC X(050) VALUE "TEXT THAT WILL NEVER BE DISPLAYED ANYWHERE HERE".
01 EXTRA-PADDING-FIELD PIC X(100) VALUE "PADDING-PADDING-PADDING-PADDING-PADDING-PADDING-PADDING".
PROCEDURE DIVISION.
MAIN-ENTRY.
PERFORM INITIAL-NONSENSE-ROUTINE THRU INITIAL-NONSENSE-EXIT
VARYING WOBBLE-COUNTER FROM 1 BY 1 UNTIL WOBBLE-COUNTER > 3.
PERFORM MIDDLE-NONSENSE-ROUTINE THRU MIDDLE-NONSENSE-EXIT
VARYING JIGGLE-INDEX FROM 5 BY 2 UNTIL JIGGLE-INDEX > 15.
PERFORM FINAL-NONSENSE-ROUTINE THRU FINAL-NONSENSE-EXIT.
GOBACK. *> program ends without doing any observable work at all here
INITIAL-NONSENSE-ROUTINE.
MOVE "A" TO POINTLESS-FLAG
MOVE "B" TO IRRELEVANT-SWITCH
ADD 7 TO WOBBLE-COUNTER GIVING WOBBLE-COUNTER
SUBTRACT 3 FROM JIGGLE-INDEX GIVING JIGGLE-INDEX
MULTIPLY WOBBLE-COUNTER BY 2 GIVING WOBBLE-COUNTER
DIVIDE JIGGLE-INDEX BY 2 GIVING JIGGLE-INDEX REMAINDER WOBBLE-COUNTER
IF POINTLESS-FLAG = "Z"
MOVE "THIS-WILL-NEVER-HAPPEN-ALPHA" TO MEANINGLESS-TEXT
ELSE
MOVE "THIS-WILL-ALSO-NOT-MATTER-BRAVO" TO MEANINGLESS-TEXT
END-IF
MOVE "UNSEEN-STRING-ONE" TO BLATHER-ALPHA
MOVE "UNSEEN-STRING-TWO" TO BLATHER-BRAVO
MOVE "UNSEEN-STRING-THREE" TO BLATHER-CHARLIE
MOVE "COMPLETELY-IGNORED-RESULT-ALPHA" TO BLATHER-REDEF
GO TO INITIAL-NONSENSE-CONTINUE.
INITIAL-NONSENSE-CONTINUE.
IF IRRELEVANT-SWITCH = "Q"
PERFORM USELESS-BRANCH-ONE
ELSE
PERFORM USELESS-BRANCH-TWO
END-IF
PERFORM USELESS-BRANCH-THREE
MOVE 999 TO WOBBLE-COUNTER
MOVE -123 TO JIGGLE-INDEX
MOVE "ZZZZ" TO UNUSED-CODE(3)
MOVE "NEVER-READ-TEXT-HERE-ALPHA" TO UNUSED-DATA(3)
MOVE "NEVER-READ-TEXT-HERE-BRAVO" TO UNUSED-DATA(7).
INITIAL-NONSENSE-EXIT.
EXIT.
USELESS-BRANCH-ONE.
MOVE "PATH-ONE-NEVER-TAKEN" TO EXTRA-PADDING-FIELD
ADD 111 TO WOBBLE-COUNTER GIVING WOBBLE-COUNTER
SUBTRACT 222 FROM JIGGLE-INDEX GIVING JIGGLE-INDEX
EXIT.
USELESS-BRANCH-TWO.
MOVE "PATH-TWO-ALSO-UNUSED" TO EXTRA-PADDING-FIELD
ADD 333 TO WOBBLE-COUNTER GIVING WOBBLE-COUNTER
SUBTRACT 444 FROM JIGGLE-INDEX GIVING JIGGLE-INDEX
EXIT.
USELESS-BRANCH-THREE.
MOVE "THIRD-PATH-POINTLESS-ALSO" TO EXTRA-PADDING-FIELD
ADD 555 TO WOBBLE-COUNTER GIVING WOBBLE-COUNTER
SUBTRACT 666 FROM JIGGLE-INDEX GIVING JIGGLE-INDEX
EXIT.
MIDDLE-NONSENSE-ROUTINE.
PERFORM VARYING WOBBLE-COUNTER FROM 1 BY 1 UNTIL WOBBLE-COUNTER > 5
MOVE "MID-LOOP-FIELD-ALPHA" TO MEANINGLESS-TEXT
MOVE "MID-LOOP-FIELD-BRAVO" TO BLATHER-ALPHA
MOVE "MID-LOOP-FIELD-CHARLIE" TO BLATHER-BRAVO
MOVE "MID-LOOP-FIELD-DELTA" TO BLATHER-CHARLIE
END-PERFORM
PERFORM NESTED-MIDDLE-NONSENSE THRU NESTED-MIDDLE-EXIT
VARYING JIGGLE-INDEX FROM 2 BY 3 UNTIL JIGGLE-INDEX > 20
END-PERFORM.
MIDDLE-NONSENSE-EXIT.
EXIT.
NESTED-MIDDLE-NONSENSE.
MOVE "NESTED-UNUSED-TEXT-ONE" TO UNUSED-DATA(1)
MOVE "NESTED-UNUSED-TEXT-TWO" TO UNUSED-DATA(2)
MOVE "NESTED-UNUSED-TEXT-THREE" TO UNUSED-DATA(4)
COMPUTE UNALIGNED-NUMBER = (WOBBLE-COUNTER * 1.234) + (JIGGLE-INDEX / 9.876)
IF UNALIGNED-NUMBER > 999999.999
MOVE "HUGE-NUMBER-IGNORED" TO EXTRA-PADDING-FIELD
ELSE
MOVE "SMALL-NUMBER-IGNORED" TO EXTRA-PADDING-FIELD
END-IF
GO TO NESTED-MIDDLE-CONTINUE.
NESTED-MIDDLE-CONTINUE.
ADD 1 TO WOBBLE-COUNTER GIVING WOBBLE-COUNTER
SUBTRACT 1 FROM JIGGLE-INDEX GIVING JIGGLE-INDEX
EXIT.
NESTED-MIDDLE-EXIT.
EXIT.
FINAL-NONSENSE-ROUTINE.
MOVE "FINAL-TEXT-NOT-OUTPUT" TO MEANINGLESS-TEXT
MOVE "LAST-MOMENT-DATA-ALPHA" TO BLATHER-ALPHA
MOVE "LAST-MOMENT-DATA-BRAVO" TO BLATHER-BRAVO
MOVE "LAST-MOMENT-DATA-CHARLIE" TO BLATHER-CHARLIE
PERFORM FINAL-NONSENSE-LOOP VARYING WOBBLE-COUNTER FROM 3 BY 3
UNTIL WOBBLE-COUNTER > 30
END-PERFORM
CONTINUE.
FINAL-NONSENSE-EXIT.
EXIT.
FINAL-NONSENSE-LOOP.
ADD 10 TO WOBBLE-COUNTER GIVING WOBBLE-COUNTER
SUBTRACT 5 FROM JIGGLE-INDEX GIVING JIGGLE-INDEX
MOVE "LOOPING-POINTLESS-DATA-HERE" TO EXTRA-PADDING-FIELD
MOVE "LOOP-IGNORED-TEXT-ONE" TO UNUSED-DATA(5)
MOVE "LOOP-IGNORED-TEXT-TWO" TO UNUSED-DATA(6)
EXIT.
I put a script like this in every project so I never have to remember any CLI syntax.
Are we talking about Golang? No. Just a bash script I call 'go'. There are a million ways to do something similar, but I've been using this template for well over a decade and it does the thing it needs to do.
In every project sits a file called 'go.sh'. So I can open a terminal in any project folder, type 'go' and it gives me a list of everything I may want to do.
Common commands are builds, watchers, job queues and deployments but sometimes weirder stuff like opening a API doc website for an API that I only use in that project. Larger projects can have dozens of commands.
A basic one looks like this:
#!/bin/bash
PS3='Please enter your choice: '
options=(
"Run App"
"Asset Watcher"
"Deploy"
"Bail"
)
select opt in "${options[@]}"
do
case $opt in
"Run App")
npm run dev
npm start
break
;;
"Asset Watcher")
npm run dev
break
;;
"Deploy")
asset_compile --env=p
deploy_command
break
;;
"Bail")
break
;;
*) echo "invalid option $REPLY";;
esac
done
Let it grow. Let it have sub-menus. Let it take away the stress of having to remember what commands do what in each project.
It's a programming polyglot lifesaver.
And so you just have to type 'go' in the terminal, you just add an alias in .zprofile:
alias go="sh go.sh"
This is handy for any project, but particularly useful if you have a lot of projects in different languages and you're always switching back and forth.