Groups | Search | Server Info | Login | Register


Groups > soc.culture.asian.american > #6018

The CompuBBS

Date 2026-02-27 09:36 -0500
Newsgroups soc.culture.asian.american, soc.culture.indian, soc.culture.usa
From SPP <sppopuri@gmail.com>
Subject The CompuBBS
Message-ID <TqKdndyq-NZnNjz0nZ2dnZfqnPednZ2d@giganews.com> (permalink)

Cross-posted to 3 groups.

Show all headers | View raw


CompuBBS

--------------------------------------------------------------------------------
readme.txt
--------------------------------------------------------------------------------

The CompuBBS code : please use it to communicate :-)
Satya P. Popuri
Bachelors in Computer Science

Silence is death. The need for an open source bulletin board system is 
vital for communication to prosper across this earth planet. In my 
travels I have discovered certain tools that help many to research and 
develop with ease while maintaining a sound and cogent system toward 
such an end. This CompuBBS is an open source version of the NYUNET 
bulletin board system I discovered while mistakenly studying and working 
there in my quest for enlightenment. As fate would have it, I chanced 
upon certain tools that I now present with an assortment of other tools 
I have discovered in my triste with death while working in the I.T. 
industry.

Indeed, such tools have helped me here and there to maintain a 
consistent understanding of not only Unix fundamentals but also a feel 
good experience that is second to none. These tools represent the love 
affair that never quit. Not only has it valorized and inundated across 
this earth planet but has been the aims and means of my reason for living.

Man needs a proper meditation of the heart and this tool list is one of 
the things I have used to be able to better understand myself and 
others. It was during the college years that I was exposed to such tools 
in over 3 universities and 11 years of employment here and there. They 
just work. Given the level of complexity the graphical user interface 
engenders, it is refreshing to fall back on a tool base that is time 
immemorial. So please feel free to use them and contribute toward the 
open source endeavor to foster freedom of speech and religion.

For me prayer works but without a means of communication that is 
uninhibited and unmoderated we are at a loss for words. That is the 
shear beauty of the traditional tools as in tin of the USENET NEWS 
servers; as well as the irssi of the IRC servers. It goes on. The list 
of tools I mention are as follows based on over 20 years of experience 
with the UNIX pragma.

0. Alpine - a nice email client
1. Tin - a nice newsreader
2. Irssi - a nice internet relay chat client
3. Lynx - a nice web browser
4. Gopher - a nice ftp client
5. Nano - a nice text editor
6. Bash - a nice command prompt
7. T.I.A. - a nice programming editor [This is known as Tiny IDE 
Ada/Anything editor. I am trying to encourage the C++ programming 
language over Java.]
8. Nslookup - a nice directory service
9. Telnet - a nice remote login tool
A. Tailer - a nice monitoring tool [This I discovered at a .com I worked 
for. It simply goes to an i.p. address and searches for a string. If the 
string is not there an alert is generated. Maybe the code is out there 
in the wild blue yonder of the internet.]
B. Calc - a nice calculator tool
C. ECN - a nice day trading game [This is Josh Green's day trading 
algorithm in Python when he worked at Daytek. I posted it somewhere on 
USENET. If you are able to find it please let me know. I encourage 
learning how to deal with money because "when men and women get together 
[money] gets in the way".] That too, they say, education is about 
learning how to communicate and learning how to deal with money.
D. Tutor - a nice Unix tutorial [This tutorial I discovered at New York 
University. I wonder if there is an open source version of it.] It is a 
great way to learn the Unix operating system.
E. Bible - a nice text based bible program [Does anyone know of an old 
school Bible program that is text based and worthy of praise? Prayer to 
Jesus Christ works!]
F. Sendpage - this is a nice beeper software that helps to keep in touch 
with loved ones and others through the beeper or pager tool.
$. Exit - a simple exit to the whole compubbs tools for research and 
development.

I have forego-ed using the queue tool as it may cause some problems as 
far as managing and maintaining. The queue tool is always an issue for 
any I.T. computer lab as it is often the target of attacks by 
miscreants. There are other tools, such as 'talk', that are also good if 
you know how to use them in the code I mentioned. I refrained from 
mentioning talk because it requires input about the user and terminal to 
literally talk in using a text based interface. Maybe someone can design 
a text based form to fill out, which will allow for one to use talk and 
then go back to the main menu. The file list for this compubbs endeavor 
is as follows:

compubbs.sh
bash-menu.sh
bash-draw.sh
readme.txt

Please find the code in the following USENET newsgroups:

soc.culture.indian
soc.culture.asian.american
soc.culture.usa

Let's setup servers of this type of an unmoderated bulletin board 
system. While the internet has encouraged reciprocity or mutual respect, 
the radio has encouraged camaraderie or mutual trust. This cybermatrix 
endeavor which I am trying to contravecy is an attempt toward synergy or 
mutual success. As well, there is a need for unity or mutual purpose. 
The T.E.A.M. acronym for "together everyone accomplishes more" is worth 
encouraging.

The following are some nice networks I am encouraging toward some level 
of mutuality:

# - network - tool - industry - mutuality
----------------------------------------------------------
1 - Simulcast - radio - spiritual - comradery
2 - Internet - computer - technological - reciprocity
3 - Cybermatrix - television - financial - synergy
4 - Tektocracy - beeper(a.k.a. smartwatch) - political - unity
5 - Sneakerweb - tablet - educational - infidelity
6 - Darkring - console - architectural - ?
7 - Datatron - tracker(i.e. fitbit) - medical - ?
8 - Heliopex - watch - recreational - ?
9 - Transpace - PDA(a.k.a smartphone) - sexual - ?
10 - Stargate - controller - audiovisual - ?

Anyway, join us in this endeavor to liberate humanity from the vice grip 
of the Zen ways of life of the idiot and wrong. I pray to Jesus Christ 
that you find them useful and worthy of praise as I have. This compubbs 
is a brief history of time and space of a world so good. In a way, the 
nature of the good is to overcome and defeat the bad. So, God bless and 
God speed for Jesus Christ is God. Always a pleasure. May you and your 
loved one's in the name of Jesus Christ be well, happy, prosperous, 
peaceful, healthy, and safe.

P.S.
----
Let it be said, "[financial] frustration creates a great imbalance in 
mind and body." We need to allay our antagonizing forces so that 
universal basic income(UBI) is provided for all concerned. The UNIX may 
help with learning how to communicate but the UBI may help with learning 
how to deal with monies.

Sincerely,

Satya P. Popuri (a.k.a. Steven)

Signature:
"The nature of the good is to overcome and defeat the bad."

--------------------------------------------------------------------------------
compubbs.sh file
--------------------------------------------------------------------------------
#!/bin/bash
# Ensure we are running under bash
if [ "$BASH_SOURCE" = "" ]; then
/bin/bash "$0"
exit 0
fi

#
# Load bash-menu script
#
# NOTE: Ensure this is done before using
# or overriding menu functions/variables.
#
. "bash-menu.sh"


################################
## Example Menu Actions
##
## They should return 1 to indicate that the menu
## should continue, or return 0 to signify the menu
## should exit.
################################
actionA() {
alpine
return 1
}

actionB() {
tin -r -g freenews.netfront.net
return 1
}

actionC() {
irssi
return 1
}

actionD() {
lynx
return 1
}

actionE() {
gopher
return 1
}

actionF() {
nano
return 1
}

actionG() {
bash
return 1
}

actionH() {
tia
return 1
}

actionI() {
nslookup
return 1
}

actionJ() {
telnet
return 1
}

actionK() {
tailer
return 1
}

actionL() {
calc
return 1
}

actionM() {
ecn
return 1
}

actionN() {
bible
return 1
}

actionO() {
tutor
return 1
}

actionP() {
sendpage
return 1
}

actionX() {
return 0
}


################################
## Setup Example Menu
################################

## Menu Item Text
##
## It makes sense to have "Exit" as the last item,
## as pressing Esc will jump to last item (and
## pressing Esc while on last item will perform the
## associated action).
##
## NOTE: If these are not all the same width
## the menu highlight will look wonky
menuItems=(
"0. Alpine ----------------------- email client"
"1. Tin -------------------------- usenet news reader"
"2. Irssi ------------------------ irc network"
"3. Lynx ------------------------- web browser"
"4. Gopher ----------------------- ftp protocol"
"5. Nano ------------------------- text editor"
"6. Bash ------------------------- command prompt"
"7. T.I.A. ----------------------- programming IDE"
"8. Nslookup --------------------- directory service"
"9. Telnet ----------------------- remote login"
"A. Tailer ----------------------- monitoring tool"
"B. Calc ------------------------- calculator"
"C. ECN -------------------------- daytrading game"
"D. Tutor ------------------------ unix tutorial"
"E. Bible ------------------------ way of enlightenment"
"F. Sendpage --------------------- beeper server"
"$. Exit ------------------------- God speed :-)"
)

## Menu Item Actions
menuActions=(
actionA
actionB
actionC
actionD
actionE
actionF
actionG
actionH
actionI
actionJ
actionK
actionL
actionM
actionN
actionO
actionP
actionX
)

## Override some menu defaults
menuTitle=" CompuBBS - The nature of the good is to overcome and defeat 
the bad..."
menuFooter=" Enter=Select, Navigate via Up/Down/First number/letter - 
[Prayer works!]"
menuWidth=74
menuLeft=13
menuHighlight=$DRAW_COL_WHITE


################################
## Run Menu
################################
menuInit
menuLoop


exit 0
--------------------------------------------------------------------------------
bash-draw.sh file
--------------------------------------------------------------------------------
#!/bin/bash

#
# Public Functions:
#
# drawClear()
# drawColour(colour = DRAW_COL_DEF, bgColour = DRAW_COL_DEF)
#
# drawPlain(text, newLine = 0)
# drawSpecial(text, newLine = 0)
# drawHighlight(text, newLine = 0)
# drawPlainAt(left, top, text, newLine = 0)
# drawHighlightAt(left, top, text, newLine = 0)
#
#
# Colours
#
# DRAW_COL_DEF # Default colour
# DRAW_COL_BLACK
# DRAW_COL_WHITE
# DRAW_COL_RED
# DRAW_COL_GREEN
# DRAW_COL_YELLOW
# DRAW_COL_BLUE
# DRAW_COL_GRAY # Light gray (grey?)
#


# Ensure we are running under bash (will not work under sh or dash etc)
if [ "$BASH_SOURCE" = "" ]; then
echo "ERROR: bash-draw requires to be running under bash"
exit 1
fi


DRAW_COL_DEF=39
DRAW_COL_BLACK=30
DRAW_COL_WHITE=97
DRAW_COL_RED=31
DRAW_COL_GREEN=32
DRAW_COL_YELLOW=33
DRAW_COL_BLUE=34
DRAW_COL_GRAY=37


# drawClear()
drawClear() {
$ESC_WRITE "\033c"
}

# drawColour(colour = DRAW_COL_DEF, bgColour = DRAW_COL_DEF)
drawColour() {
local colour=$DRAW_COL_DEF
local bgColour=$((DRAW_COL_DEF+10))

if [[ ! -z "$1" && "$1" != "" ]]; then
colour="$1"
fi

if [[ ! -z "$2" && "$2" != "" ]]; then
bgColour="$2"
fi

$ESC_ECHO "\033c\033[H\033[J\033[${colour};${bgColour}m\033[J"
}

# drawPlain(text, newLine = 0)
drawPlain() {
if [[ -z "$2" || "$2" -eq 0 ]]; then
$ESC_WRITE "$1"
else
$ESC_ECHO "$1"
fi
}

# drawSpecial(text, newLine = 0)
drawSpecial() {
[[ -z "$2" ]] && newLine=0 || newLine="$2"

draw_SetDrawMode
drawPlain "$1" "$newLine"
draw_SetWriteMode
}

# drawHighlight(text, newLine = 0)
drawHighlight() {
[[ -z "$2" ]] && newLine=0 || newLine="$2"

draw_StartHighlight
drawPlain "$1" "$newLine"
draw_EndHighlight
}

# drawPlainAt(left, top, text, newLine = 0)
drawPlainAt() {
[[ -z "$4" ]] && newLine=0 || newLine="$4"

draw_MoveTo $1 $2
drawPlain "$3" "$newLine"
}

# drawHighlightAt(left, top, text, newLine = 0)
drawHighlightAt() {
[[ -z "$4" ]] && newLine=0 || newLine="$4"

draw_StartHighlight
drawPlainAt "$1" "$2" "$3" "$newLine"
draw_EndHighlight
}


# Write escape sequence with no newline
ESC_WRITE='echo -en'

# Write escape sequence adding newline
ESC_ECHO='echo -e'


# Move cursor to specified location
draw_MoveTo() {
$ESC_WRITE "\033[${1};${2}H"
}

draw_StartHighlight() {
$ESC_WRITE "\033[7m"
}

draw_EndHighlight() {
$ESC_WRITE "\033[27m"
}

draw_SetDrawMode() {
$ESC_WRITE "\033%@\033(0"
}

draw_SetWriteMode() {
$ESC_WRITE "\033(B"
}
--------------------------------------------------------------------------------
bash-menu.sh file
--------------------------------------------------------------------------------
#!/bin/bash

#
# Public Functions
#
# menuInit()
# menuLoop()
#
#
# Public Variables to Override
#
# Should these get passed into menuInit() rather than be set as global
# script variables?
#
# menuTop # Top row of menu (defaults to row 2)
# menuLeft # Left offset for menu item text (defaults to column 15)
# menuWidth # Width of menu (defaults to 42 columns)
# menuMargin # Left offset for menu border (defaults to column 4)
#
# menuColour # Colour of menu text (defaults to DRAW_COL_WHITE)
# menuHighlight # Highlight colour for menu (defaults to DRAW_COL_GREEN)
#
# menuTitle # Title of menu
# menuFooter # Footer text of menu
#
# menuItems # Array containing menu item text
# menuActions # Array containing functions to call upon menu item selection
#


# Ensure we are running under bash (will not work under sh or dash etc)
if [ "$BASH_SOURCE" = "" ]; then
echo "ERROR: bash-menu requires to be running under bash"
exit 1
fi

# Get script root (as we are sourced from another script, $0 will not be us)
declare -r menuScript=$(readlink -f ${BASH_SOURCE[0]})
menuRoot=$(dirname "$menuScript")

# Ensure we can access our dependencies
if [ ! -s "$menuRoot/bash-draw.sh" ]; then
echo "ERROR: Missing required draw.sh script"
exit 1
fi

# Load terminal drawing functions
. "$menuRoot/bash-draw.sh"


################################
# Private Variables
#
# These should not be overridden
################################
declare -a menuItems
declare -a menuActions

menuHeaderText=""
menuFooterText=""
menuBorderText=""


################################
# Setup Menu
#
# These are defaults which should
# be overridden as required.
################################

# Top of menu (row 2)
menuTop=2

# Left offset for menu items (not border)
menuLeft=15

# Width of menu
menuWidth=42

# Left offset for menu border (not menu items)
menuMargin=4

menuItems[0]="Exit"
menuActions[0]="return 0"

menuItemCount=1
menuLastItem=0

menuColour=$DRAW_COL_WHITE
menuHighlight=$DRAW_COL_GREEN

menuTitle=" Super Bash Menu System"
menuFooter=" Enter=Select, Up/Down=Prev/Next Option"


################################
# Initialise Menu
################################
menuInit() {
menuItemCount=${#menuItems[@]}
menuLastItem=$((menuItemCount-1))

# Ensure header and footer are padded appropriately
menuHeaderText=`printf "%-${menuWidth}s" "$menuTitle"`
menuFooterText=`printf "%-${menuWidth}s" "$menuFooter"`

# Menu (side) borders
local marginSpaces=$((menuMargin-1))
local menuSpaces=$((menuWidth-2))
local leftGap=`printf "%${marginSpaces}s" ""`
local midGap=`printf "%${menuSpaces}s" ""`
menuBorderText="${leftGap}x${midGap}x"
}


################################
# Show Menu
################################
menu_Display() {
local menuSize=$((menuItemCount+2))
local menuEnd=$((menuSize+menuTop+1))

drawClear
drawColour $menuColour $menuHighlight

# Menu header
drawHighlightAt $menuTop $menuMargin "$menuHeaderText" 1

# Menu (side) borders
for row in $(seq 1 $menuSize); do
drawSpecial "$menuBorderText" 1
done

# Menu footer
drawHighlightAt $menuEnd $menuMargin "$menuFooterText" 1

# Menu items
for item in $(seq 0 $menuLastItem); do
menu_ClearItem $item
done
}


################################
# Mark Menu Items
################################

# Ensure menu item is not highlighted
menu_ClearItem() {
local item=$1
local top=$((menuTop+item+2))
local menuText=${menuItems[$item]}

drawPlainAt $top $menuLeft "$menuText"
}

# Highlight menu item
menu_HighlightItem() {
local item=$1
local top=$((menuTop+item+2))
local menuText=${menuItems[$item]}

drawHighlightAt $top $menuLeft "$menuText"
}


################################
# Wait for and process user input
################################
menu_HandleInput() {
local choice=$1

local after=$((choice+1))
[[ $after -gt $menuLastItem ]] && after=0

local before=$((choice-1))
[[ $before -lt 0 ]] && before=$menuLastItem

# Clear highlight from prev/next menu items
menu_ClearItem $before
menu_ClearItem $after

# Highlight current menu item
menu_HighlightItem $choice

# Get keyboard input
local key=""
local extra=""

read -s -n1 key 2> /dev/null >&2
while read -s -n1 -t .05 extra 2> /dev/null >&2 ; do
key="$key$extra"
done

# Handle known keys
local escKey=`echo -en "\033"`
local upKey=`echo -en "\033[A"`
local downKey=`echo -en "\033[B"`

if [[ $key = $upKey ]]; then
return $before
elif [[ $key = $downKey ]]; then
return $after
elif [[ $key = $escKey ]]; then
if [[ $choice -eq $menuLastItem ]]; then
# Pressing Esc while on last menu item will trigger action
# This is a helper as we assume the last menu option is exit
key=""
else
# Jumping possibly more than 1 (next/prev) item
menu_ClearItem $choice
return $menuLastItem
fi
elif [[ ${#key} -eq 1 ]]; then
# See if we wanrt to jump to a menu item
# by entering the first character
for index in $(seq 0 $menuLastItem) ; do
local item=${menuItems[$index]}
local startChar=${item:0:1}
if [[ "$key" = "$startChar" ]]; then
# Jumping possibly more than 1 (next/prev) item
menu_ClearItem $choice
return $index
fi
done
fi

if [[ "$key" = "" ]]; then
# Notify that Enter key was pressed
return 255
fi

return $choice
}


################################
# Main Menu Loop
################################
menuLoop() {
local choice=0
local running=1

menu_Display

while [[ $running -eq 1 ]]; do
# Enable case insensitive matching
local caseMatch=`shopt -p nocasematch`
shopt -s nocasematch

menu_HandleInput $choice
local newChoice=$?

# Revert to previous case matching
$caseMatch

if [[ $newChoice -eq 255 ]]; then
# Enter pressed - run menu action
drawClear
action=${menuActions[$choice]}
$action
running=$?

# Back from action
# If we are still running, redraw menu
[[ $running -eq 1 ]] && menu_Display

elif [[ $newChoice -lt $menuItemCount ]]; then
# Update selected menu item
choice=$newChoice
fi
done

# Cleanup screen
drawClear
}
--------------------------------------------------------------------------------

Back to soc.culture.asian.american | Previous | Next | Find similar


Thread

The CompuBBS SPP <sppopuri@gmail.com> - 2026-02-27 09:36 -0500

csiph-web