Tripcode's Personal Site!
fuckin dot png

Tripcode's Personal Site!

        Is it a trap?

Downloads Contact Info



A_Simple_Bash_Ncurses_Menu_In_C

   :   

Nov 12 05:06:17 2019

Oldest      

<-Prev      

Post list      

Next->      

Newest


This utility is actually pretty useful. I used it in part of my video editor as well as a utilities program that is still a work in progress. Also it handles scaling for windows and options up to 500 lines and 500 characters. You can change the macros and recompile if someone actually wants to use this code :D and also needs longer lines.

This is what it looks like in action

nmenu.png


>script example

#!/bin/bash
var=$(./nmenu ranger normalize all files normalize single file normalize different resolutions Subtitler start editor help quit)

if [ "$var" == "ranger" ] ; then
          ranger ;
fi

if [ "$var" == "normalize all files" ] ; then
          cd ./unprocessed
          ./framerate ;
fi

if [ "$var" == "normalize single file" ] ; then
          ./single_framerate $(ls unprocessed | ./nmenu -p) ;
fi

if [ "$var" == "normalize different resolutions" ] ; then
          cd ./unprocessedScaling/unprocessed
          ./framerate ;
fi

if [ "$var" == "Subtitler" ] ; then
          cd ./subtitle
          ./combine ;
          cd ./videomaker
          ./ImagesToVideo main 30 reverb.wav
         
fi

if [ "$var" == "start editor" ] ; then
          ./tripVideoEdit ;
fi

if [ "$var" == "help" ] ; then
          echo todo
          ./tripVideoEdit ;
fi

>nmenu c code

#include <ncurses.h>
#include <stdio.h>
#include <string.h>
#define LINE_LENGTH 500
#define MAX_LINES 500
int str_cmp(char* a, char* b){
          for(int i=0;a[i]!='0'||b[i]!='0';i++)
                    if(a[i]!=b[i]){
                              return 0;
                    }
          return 1;
}

int x,y;

int main(int argc, char* argv[]){
          char buffer[MAX_LINES][LINE_LENGTH];
          //Exits if there are no parameters          
          if(argc==0 || argc==1)
                    return -1;
          int p=0;
          for(int i=1;i<argc;i++){
                    if(str_cmp(argv[i],"-p")){
                              p=-1;
                              continue;
                    }
                    strcpy(buffer[i+p],argv[i]);
          }

          if(str_cmp(argv[1],"-p")){
                    char line[LINE_LENGTH];
                    for(int i=argc+p;i<MAX_LINES && (fscanf(stdin,"%s", line)==1);i++){
                              strcpy(buffer[i],line);
                              argc++;
                    }
          }

         
          /* Start curses mode*/
          FILE *f = fopen("/dev/tty", "r+");
          SCREEN *screen = newterm(NULL, f, f);
          set_term(screen);
          //initscr();
          noecho();
          //halfdelay(1);
          keypad(stdscr, TRUE);
          curs_set(0);

          //Creates char for input
          int select=1;
          int c=-1;
          int scroll=0;
          do{
                    clear();
                    getmaxyx(stdscr,y,x);
                    /*Warning y and x are global*/
                    if(c==KEY_DOWN){
                              if(select<argc+p-1-scroll)
                                        select++;
                              if(select>=y && select<argc+p-scroll){
                                        scroll++;
                                        select=y-1;
                              }
                    }
                    if(c==KEY_UP && select>1){
                              if(scroll>0){
                                        scroll--;
                                        select=y-1;
                              }
                              else
                                        select--;
                    }

                    /*This code handles when a selection is made*/
                    if(c==KEY_RIGHT){
                              printw("Select an option:");
                              fprintf(stdout, buffer[select+scroll]);
                              endwin();
                              return 0;
                    }
                    //This prints the files in the dialog and work box
                   
                    attroff(A_REVERSE);
                    printw("Select an option:n");
                    for(int i=1;i<y;i++){
                              if(i==select){
                                        attron(A_REVERSE);
                                        printw(buffer[i+scroll]);
                              }
                              else{
                                        attroff(A_REVERSE);
                                        printw(buffer[i+scroll]);
                              }
                              printw("n");
                    }


                    //Refresh the window
                    refresh();          
                             
          }while(c=getch());
          endwin();//End curses mode
          return 0;
}

>Compiling curses programs goes like this
>g++ (.c file name) -lncurses -o (program name)

>The program can also be used like this
          ./nmenu option_a option_b option_c
>or like this..
          cd $(./nmenu option_a option_b option_c)

Anyways I hope this code copied correctly this website is autogenerated from a C++ program I wrote. I thought this simple code was useful so I uploaded it.


A_Simple_Bash_Ncurses_Menu_In_C

   :   

Nov 12 05:06:17 2019

Oldest      

<-Prev      

Post list      

Next->      

Newest



Tripcode!q/7 Youtube channel!

Gitlab link Microsoft owns github :c

"The world is a simulation..."