|
|
DataMuseum.dkPresents historical artifacts from the history of: DKUUG/EUUG Conference tapes |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about DKUUG/EUUG Conference tapes Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - downloadIndex: T o
Length: 9046 (0x2356)
Types: TextFile
Names: »options.c«
└─⟦a0efdde77⟧ Bits:30001252 EUUGD11 Tape, 1987 Spring Conference Helsinki
└─⟦this⟧ »EUUGD11/euug-87hel/sec1/elm/src/options.c«
/** options.c **/
/** This set of routines allows the alteration of a number of paramaters
in the Elm mailer, including the following;
calendar-file <where to put calendar entries>
display pager <how to page messages>
editor <name of composition editor>
folder-dir <folder directory>
sort-by <how to sort mailboxes>
savefile <file to save outbound message copies to>
printmail <how to print messages>
full_username <your full user name for outgoing mail>
arrow-cursor <on or off>
menu-display <on or off>
user-level <BEGINNER|INTERMEDIATE|EXPERT>
names-only <on or off>
And others as they seem useful.
(C) Copyright 1986, Dave Taylor
**/
#include "headers.h"
#undef onoff
#define onoff(n) (n == 1? "ON ":"OFF")
char *one_liner_for(), *level_name();
unsigned long sleep();
options()
{
/** change options... **/
char ch;
display_options();
do {
ClearLine(LINES-4);
Centerline(LINES-4,
"Select first letter of Option line, '>' to Save, or R)eturn");
PutLine0(LINES-2, 0, "Command: ");
ch = tolower(ReadCh());
clear_error(); /* remove possible "sorting" message etc... */
one_liner(one_liner_for(ch));
switch (ch) {
case 'c' : optionally_enter(calendar_file, 2, 23, FALSE); break;
case 'd' : optionally_enter(pager, 3, 23, FALSE); break;
case 'e' : optionally_enter(editor, 4, 23, FALSE); break;
case 'f' : optionally_enter(folders, 5, 23, FALSE); break;
case 's' : change_sort(6,23); break;
case 'o' : optionally_enter(savefile, 7, 23, FALSE); break;
case 'p' : optionally_enter(printout, 8, 23, FALSE); break;
case 'y' : optionally_enter(full_username, 9, 23, FALSE); break;
case 'a' : on_or_off(&arrow_cursor, 12, 23); break;
case 'm' : on_or_off(&mini_menu, 13, 23);
headers_per_page = LINES - (mini_menu ? 13 : 8); break;
case 'u' : switch_user_level(&user_level,15, 23); break;
case 'n' : on_or_off(&names_only, 16, 23); break;
case '?' : options_help();
PutLine0(LINES-2,0,"Command: "); break;
case '>' : printf("Save options in .elmrc...");
fflush(stdout); save_options(); break;
case 'x' :
case 'r' :
case ctrl('M'):
case ctrl('J'): return;
case ctrl('L'): display_options(); break;
default: error("Command unknown!");
}
} while (ch != 'r');
}
display_options()
{
/** Display all the available options.. **/
char *sort_name();
ClearScreen();
Centerline(0,"-- Elm Options Editor --");
#ifdef ENABLE_CALENDAR
PutLine1(2, 0, "C)alendar file : %s", calendar_file);
#endif
PutLine1(3, 0, "D)isplay mail using : %s", pager);
PutLine1(4, 0, "E)ditor : %s", editor);
PutLine1(5, 0, "F)older directory : %s", folders);
PutLine1(6, 0, "S)orting criteria : %s", sort_name(FULL));
PutLine1(7, 0, "O)utbound mail saved : %s", savefile);
PutLine1(8, 0, "P)rint mail using : %s", printout);
PutLine1(9, 0, "Y)our full name : %s", full_username);
PutLine1(12,0, "A)rrow cursor : %s", onoff(arrow_cursor));
PutLine1(13,0, "M)enu display : %s", onoff(mini_menu));
PutLine1(15,0, "U)ser level : %s", level_name(user_level));
PutLine1(16,0, "N)ames only : %s", onoff(names_only));
}
on_or_off(var, x, y)
int *var, x,y;
{
/** 'var' field at x.y toggles between on and off... **/
char ch;
PutLine0(x, y+6,
"(use <space> to toggle, any other key to leave)");
MoveCursor(x,y+3); /* at end of value... */
do {
ch = ReadCh();
if (ch == SPACE) {
*var = ! *var;
PutLine0(x,y, onoff(*var));
}
} while (ch == SPACE);
MoveCursor(x,y+4); CleartoEOLN(); /* remove help prompt */
}
switch_user_level(ulevel, x, y)
int *ulevel, x, y;
{
/** step through possible user levels... **/
PutLine0(x, y+20, "<space> to change");
MoveCursor(x,y); /* at end of value... */
while (ReadCh() == ' ') {
*ulevel = (*ulevel == 2? 0 : *ulevel + 1);
PutLine1(x,y, "%s", level_name(*ulevel));
}
MoveCursor(x,y+20); CleartoEOLN(); /* remove help prompt */
}
change_sort(x, y)
int x,y;
{
/** change the sorting scheme... **/
int last_sortby, /* so we know if it changes... */
sign = 1; /* are we reverse sorting?? */
char ch; /* character typed in ... */
last_sortby = sortby; /* remember current ordering */
PutLine0(x, COLUMNS-29, "(SPACE for next, or R)everse)");
sort_one_liner(sortby);
MoveCursor(x, y);
do {
ch = tolower(ReadCh());
switch (ch) {
case SPACE : if (sortby < 0) {
sign = -1;
sortby = - sortby;
}
else sign = 1; /* insurance! */
sortby = sign * ((sortby + 1) % (STATUS+1));
if (sortby == 0) sortby = sign; /* snicker */
PutLine0(x, y, sort_name(PAD));
sort_one_liner(sortby);
MoveCursor(x, y);
break;
case 'r' : sortby = - sortby;
PutLine0(x, y, sort_name(PAD));
sort_one_liner(sortby);
MoveCursor(x, y);
}
} while (ch == SPACE || ch == 'r');
MoveCursor(x, COLUMNS-30); CleartoEOLN();
if (sortby != last_sortby) {
error("resorting mailbox...");
sleep(1);
sort_mailbox(message_count, 0);
}
ClearLine(LINES-2); /* clear sort_one_liner()! */
}
one_liner(string)
char *string;
{
/** A single-line description of the selected item... **/
ClearLine(LINES-4);
Centerline(LINES-4, string);
}
sort_one_liner(sorting_by)
int sorting_by;
{
/** A one line summary of the particular sorting scheme... **/
ClearLine(LINES-2);
switch (sorting_by) {
case -SENT_DATE : Centerline(LINES-2,
"This sort will order most-recently-sent to least-recently-sent"); break;
case -RECEIVED_DATE : Centerline(LINES-2,
"This sort will order most-recently-received to least-recently-received");
break;
case -SENDER : Centerline(LINES-2,
"This sort will order by sender name, in reverse alphabetical order"); break;
case -SIZE : Centerline(LINES-2,
"This sort will order messages by longest to shortest"); break;
case -SUBJECT : Centerline(LINES-2,
"This sort will order by subject, in reverse alphabetical order"); break;
case -STATUS : Centerline(LINES-2,
"This sort will order by reverse status - Deleted through Tagged..."); break;
case SENT_DATE : Centerline(LINES-2,
"This sort will order least-recently-sent to most-recently-sent"); break;
case RECEIVED_DATE : Centerline(LINES-2,
"This sort will order least-recently-received to most-recently-received");
break;
case SENDER : Centerline(LINES-2,
"This sort will order by sender name"); break;
case SIZE : Centerline(LINES-2,
"This sort will order messages by shortest to longest");
break;
case SUBJECT : Centerline(LINES-2,
"This sort will order messages by subject"); break;
case STATUS : Centerline(LINES-2,
"This sort will order by status - Tagged through Deleted..."); break;
}
}
char *one_liner_for(c)
char c;
{
/** returns the one-line description of the command char... **/
switch (c) {
case 'c' : return(
"This is the file where calendar entries from messages are saved.");
case 'd' : return(
"This is the program invoked to display individual messages (try 'builtin')");
case 'e' : return(
"This is the editor that will be used for sending messages, etc.");
case 'f' : return(
"This is the folders directory used when '=' (etc) is used in filenames");
case 'm' : return(
"This determines if you have the mini-menu displayed or not");
case 'n' : return(
"Whether to display the names and addresses on mail, or names only");
case 'o' : return(
"This is where copies of outbound messages are saved automatically.");
case 'p' : return(
"This is how printouts are generated. \"%s\" will be replaced by the filename.");
case 's' : return(
"This is used to specify the sorting criteria for the mailboxes");
case 'y' : return(
"When mail is sent out, this is what your full name will be recorded as.");
case 'a' : return(
"This defines whether the ELM cursor is an arrow or a highlight bar.");
case 'u' : return(
"The level of knowledge you have about the Elm mail system.");
default : return(""); /* nothing if we don't know! */
}
}
options_help()
{
/** help menu for the options screen... **/
char c, *ptr;
Centerline(LINES-3,
"Enter the key you want help on, '?' for a list, or '.' to exit help");
lower_prompt("Key : ");
while ((c = tolower(ReadCh())) != '.') {
if (c == '?') {
display_helpfile(OPTIONS_HELP);
display_options();
return;
}
if ((ptr = one_liner_for(c)) != NULL)
error2("%c = %s", c, ptr);
else
error1("%c isn't used in this section", c);
lower_prompt("Key : ");
}
}
char *level_name(n)
int n;
{
/** return the 'name' of the level... **/
switch (n) {
case 0 : return("Beginning User ");
case 1 : return("Intermediate User");
default: return("Expert User ");
}
}