/*======================================================================* * New BBS Express! Professional User Editor * *======================================================================*/ #version $50 #reserve 6 #copyright "Ue.cmd Written By Stephen J. Carden Copyright 1995 K-Products" #address $7000 #define KBD 3 #define S_HANDLE 0 #define S_NAME 1 #include runtime.h #include bbs_pro.h int current_page; /* user number at top of page */ byte page_index; /* index into current page */ byte show_mode; byte valid_user [10]; /* 10 users per page */ main() { int temp; char ch, all_done; byte last_page; if (from_kbd == 0) { echose ("This command can only be executed\from the local keyboard!"); return; } plot_screen(); MIOsuspend(); if (open_ulog() > 127) { printf("Unable to open Userlog!%e"); return; } current_page= 0; last_page = 1; page_index = 0; all_done = 0; show_mode = S_HANDLE; while ( all_done = 0 ) { if (last_page != current_page) { last_page = current_page; show_current_page(); } highlight (page_index); ch = getd ( KBD ); unhighlight (page_index); case ( toupper(ch) ) { 27 : all_done = 1; '?' : { show_help_screen(); last_page = current_page + 1; } 'H' : { show_mode = S_HANDLE; last_page = current_page + 1; } 'R' : { show_mode = S_NAME; last_page = current_page + 1; } '-' : if (page_index == 0) page_index = 9; else --page_index; '=' : if (page_index > 8) page_index = 0; else ++page_index; '+' : { page_index = 0; if (current_page > 0) --current_page; else status_message("At top of data..."); } '*' : { page_index = 0; temp = current_page * 10 + 11; if (temp <= u_recsinuse) ++current_page; else { page_index = 9; status_message("At end of data..."); } } '\' : { page_index = 0; if (current_page < 6) current_page = 0; else current_page = current_page - 5; } '^' : { page_index = 0; temp = current_page * 10 + 51; if (temp <= u_recsinuse) current_page = current_page + 5; else current_page = u_recsinuse / 10; } 'E' : { if (valid_user [page_index] == 0) { status_message("Can't edit that record..."); continue; } status_message ("Loading user editor..."); close_ulog(); temp = current_page * 10 + 1 + page_index; strc (temp, instr); strcpy(parm1, "E"); strcat(parm1, instr); MIOresume(); overlay("UEDITOR"); MIOsuspend(); if (open_ulog() > 127) { printf("Unable to open Userlog!%e"); return; } last_page = current_page + 1; /* force replot */ } } } close_ulog(); MIOresume(); echo (125); } show_current_page() { int x, curuser; byte y; char outline [39]; plot_screen(); y = 12; curuser = current_page * 10; for (x = 1; x < 11; ++x, ++y) { ++curuser; strc (curuser, outline); while (length(outline) < 4) strcat (outline, " "); write_ram ( 2, y, outline); /* display user number */ if (curuser <= u_recsinuse) { if ( read_user (curuser) != OK ) strcpy (t_handle, "READ ERROR!"); } else { t_handle [0] = 0; t_name [0] = 0; } valid_user [x-1] = 1; /* assume valid user */ if ( curuser < 10 ) set_special_handle( curuser ); if (show_mode = S_HANDLE) write_ram ( 9, y, t_handle ); else write_ram ( 9, y, t_name); if (curuser > u_recsinuse) { write_ram (32, y, "Unavail"); valid_user [x-1] = 0; } else if (curuser < 10) write_ram (32, y, "System"); else { if (t_inuse == 0) write_ram (32, y, "DELETED"); else if (t_newuser) write_ram (32, y, ">-NEW-<"); else if (t_locked) write_ram (32, y, "Locked"); else write_ram (32, y, "Active"); } } status_message ("Press '?' for valid commands"); } set_special_handle (int x) { case ( x ) { 1 : strcpy (t_handle, "Visitor record"); 2 : strcpy (t_handle, "New user record"); 3 : strcpy (t_handle, "Validation mask #1"); 4 : strcpy (t_handle, "Validation mask #2"); 5 : strcpy (t_handle, "Validation mask #3"); 6 : strcpy (t_handle, "Validation mask #4"); 7 : strcpy (t_handle, "Validation mask #5"); 8 : strcpy (t_handle, "Validation mask #6"); 9 : strcpy (t_handle, "Validation mask #7"); } strcpy (t_name, t_handle); } status_message (char *s) { byte x; write_ram (1, 23, "| |"); x = 38 - s [0] / 2; write_ram ( 3 + x, 23, s ); } highlight (byte idx) { #asm { lda .idx asl tay lda 88 clc adc .ofst,y sta $a0 lda 89 adc .ofst+1,y sta $a1 ldy #1 .loop: lda ($a0),y ora #$80 sta ($a0),y iny cpy #39 bcc .loop rts .ofst: dc.w 11 * 40 dc.w 12 * 40 dc.w 13 * 40 dc.w 14 * 40 dc.w 15 * 40 dc.w 16 * 40 dc.w 17 * 40 dc.w 18 * 40 dc.w 19 * 40 dc.w 20 * 40 } } unhighlight (byte idx) { #asm { lda .idx asl tay lda 88 clc adc .ofst,y sta $a0 lda 89 adc .ofst+1,y sta $a1 ldy #1 .loop: lda ($a0),y and #$7f sta ($a0),y iny cpy #39 bcc .loop rts .ofst: dc.w 11 * 40 dc.w 12 * 40 dc.w 13 * 40 dc.w 14 * 40 dc.w 15 * 40 dc.w 16 * 40 dc.w 17 * 40 dc.w 18 * 40 dc.w 19 * 40 dc.w 20 * 40 } } plot_screen() { #asm { .atascii lda #main_screen & $ff sta .get+1 lda #main_screen / 256 sta .get+2 lda 88 sta .put+1 lda 89 sta .put+2 ldy #0 .get: lda $ffff,y cmp #-1 beq .done .put: sta $ffff,y iny bne .get inc .get+2 inc .put+2 jmp .get .done: rts main_screen: dc.b ," " dc.b ," " dc.b ," " dc.b ," " dc.b ," " dc.b ," " dc.b ,"ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿" dc.b ,"³ Express! Pro User Editor v5.0 ³" dc.b ,"³ (c) 1995 by K-Products ³" dc.b ,"ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´" dc.b ,"³ User Handle/Name Status ³" dc.b ,"³ ³" dc.b ,"³ ³" dc.b ,"³ ³" dc.b ,"³ ³" dc.b ,"³ ³" dc.b ,"³ ³" dc.b ,"³ ³" dc.b ,"³ ³" dc.b ,"³ ³" dc.b ,"³ ³" dc.b ,"ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´" dc.b ,"³ Reading data... ³" dc.b ,"ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ" dc.b -1 } } show_help_screen() { #asm { .atascii lda #.help_screen & $ff sta .get+1 lda #.help_screen / 256 sta .get+2 lda 88 sta .put+1 lda 89 sta .put+2 ldy #0 .get: lda $ffff,y cmp #-1 beq .done .put: sta $ffff,y iny bne .get inc .get+2 inc .put+2 jmp .get .done: jmp .get_a_key .help_screen: dc.b ," " dc.b ," " dc.b ," " dc.b ," " dc.b ," " dc.b ," " dc.b ,"ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿" dc.b ,"³ Express! Pro User Editor ³" dc.b ,"³ (c) 1991 K-Products ³" dc.b ,"ÃÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´" dc.b ,"³ - ³ Moves cursor up one line ³" dc.b ,"³ = ³ Moves cursor down one line ³" dc.b ,"³ + ³ Goes to previous page ³" dc.b ,"³ * ³ Goes to next page ³" dc.b ,"³ \ ³ Jump backward 50 users ³" dc.b ,"³ ^ ³ Jump forward 50 users ³" dc.b ,"ÃÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´" dc.b ,"³ E ³ Edit entry under cursor ³" dc.b ,"³ H ³ Display users by handle ³" dc.b ,"³ R ³ Display users by real name ³" dc.b ,"³ ESC ³ Exit this program ³" dc.b ,"ÃÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´" dc.b ,"³ Press any key to continue... ³" dc.b ,"ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ" dc.b -1 .get_a_key: nop } return ( getd (KBD)); } /********************* ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ Express! Pro User Editor ³ ³ (c) 1991 K-Products ³ ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´ ³ User Handle/Name Status ³ ³ 1 xx--handle-----xxxxx Active ³ ³ 2 xx--handle-----xxxxx DELETED ³ ³ 3 xx--handle-----xxxxx Active* ³ ³ 4 xx--handle-----xxxxx NEW ³ ³ 5 xx--handle-----xxxxx Active ³ ³ 6 xx--handle-----xxxxx Active ³ ³ 7 xx--handle-----xxxxx Active ³ ³ 8 xx--handle-----xxxxx Active ³ ³ 9 xx--handle-----xxxxx Active ³ ³ 10 xx--handle-----xxxxx Active ³ ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´ ³ H - Handle/real name ³ F - Find user ³ ³ E - Edit user ³ N - New users ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ *********************/