home *** CD-ROM | disk | FTP | other *** search
- 1 ' signon subsystem -- USER Maintanence
- 3 VERSION$="1.4 {10/14/82}" 'initial release was 1.01
- 5 ' by dick lieber
- 7 '
- 9 DEFDRIVE$="A:"
- 10 USERFILE$="USERS"
- 15 LASTCALRFILE$="LASTCALR"
- 20 PWDFILE$="pwds"
- 50 USER0%=0
- 67 BSTRING$=CHR$(8)+" "+CHR$(8)
- 68 CRLF$=CHR$(&HA)+CHR$(&HD)
- 70 DIM ACLARRAY%(5,11)
- 71 DIM FLAGS%(14)
- 72 DIM USERS%(600,2)
- 77 ON ERROR GOTO 1000
- 80 '
- 81 ' function definition
- 82 '
- 83 ' add deliminators to time or date
- 84 DEF FNADDSEP$(DS$,DELIM$)=
- LEFT$(DS$,2)+DELIM$+MID$(DS$,3,2)+DELIM$+RIGHT$(DS$,2)
- 85 ' remove date or time deliminators
- 86 DEF FNKILLSEP$(DS$)=LEFT$(DS$,2)+MID$(DS$,4,2)+RIGHT$(DS$,2)
- 88 ' on-off function
- 90 DIM ONOFF$(3)
- 91 ONOFF$(0)="Off": ONOFF$(2)=" save "
- 92 ONOFF$(1)="On": ONOFF$(3)="delete "
- 93 DEF FNONOFF$(ONOFF%)=ONOFF$(ONOFF%)
- 94 DEF FNLINES$(NLINES%)=STRING$(NLINES%,CRLF$)
- 95 DEF FNHOURS$(TIME)=STR$(INT(TIME/60))+":"+
- RIGHT$("00"+MID$(STR$(TIME-(INT(TIME/60)*60)),2),2)
- 199 GOTO 10000
- 200 %INCLUDE 200.SSB
- 300 '
- 302 ' set user number
- 304 '
- 306 USERMD=TESTADDRESS+9
- 312 CALL USERMD(SETUSERNUMBER%)
- 345 RETURN
- 400 %INCLUDE 400500.SSB
- 700 '
- 705 ' get string into ANSWER$ then CRLF
- 710 '
- 715 GOSUB 500: PRINT: RETURN
- 1000 '
- 1004 ' Error handler
- 1008 '1.2
- 1010 IF ERR=52 AND ERL=8147 THEN RESUME NEXT 'old .UBK not found (so what)
- 1011 IF ERR=53 THEN NOFILE%=1: RESUME NEXT
- 1012 A$="Error Trap":CR%=2: GOSUB 400
- 1020 PRINT "ERR = ";ERR, "ERL = ";ERL
- 1028 ON ERROR GOTO 0
- 1100 %INCLUDE 1100.SSB
- 1300 %INCLUDE 1300.SSB
- 1400 %INCLUDE 1400.SSB
- 1600 %INCLUDE 1600.SSB
- 2500 %INCLUDE 2500.SSB
- 3100 '
- 3105 ' clear screen
- 3110 '
- 3115 A$=CLEARSCR$:CR%=1:GOSUB 400: RETURN
- 3300 '
- 3305 ' make selection
- 3310 '
- 3315 MAX%=0:GOSUB 500
- 3320 IF ANSWER$="" THEN SELECTION%=0: RETURN
- 3325 SELECTION%=ASC(ANSWER$)-64
- 3327 IF SELECTION% < 0 THEN SELECTION%=0
- 3330 RETURN
- 4700 '
- 4705 ' pause
- 4710 '
- 4715 PRINT:PRINT TAB(25);
- 4720 LINE INPUT "Press RETURN to continue."; A$
- 4725 RETURN
- 5000 '
- 5005 ' test that user is the SYSOP
- 5010 '
- 5015 OPEN "I", #1, DEFDRIVE$+LASTCALRFILE$
- 5020 INPUT #1, FRNAME$,LNAME$,ACLVL%
- 5025 CLOSE #1
- 5030 IF FRNAME$+LANME$ = "SYSOP" AND ACLVL% => 9 THEN ZRETURN%=1
- ELSE ZRETURN%=0
- 5035 RETURN
- 5100 '
- 5104 ' Subsystem Manager - Main menu
- 5108 ' 1.1
- 5112 GOSUB 3100
- 5116 PRINT
- 5120 PRINT TAB(30);"USER Maintainer"
- 5124 PRINT TAB(30);"<version ";VERSION$;">"
- 5128 PRINT
- 5156 PRINT TAB(20);"a Display the roster of users."
- 5160 PRINT TAB(20);"b Sort USER file."
- 5164 PRINT TAB(20);"c Remove deleted user's records."
- 5168 PRINT TAB(20);"d View a USER archive file."
- 5182 PRINT: PRINT TAB(20);"q Leave subsystem manager."
- 5183 PRINT TAB(20);"r Go back to subsystem manager."
- 5184 PRINT:PRINT TAB(25);"Press the letter of your selection > ";
- 5188 GOSUB 3300 'selector
- 5192 RETURN
- 5300 '
- 5304 ' exit module
- 5308 '
- 5310 SETUSERNUMBER%=0:GOSUB 300
- 5316 END
- 6000 '
- 6002 ' sort USERFILE$ by frequency of use
- 6004 '1.3
- 6006 GOSUB 3100
- 6008 PRINT TAB(20);"Sort USER file."
- 6010 PRINT FNLINES$(4);
- TAB(10);"Least number of uses to keep (default is 3) > ";
- 6012 MAX=3: GOSUB 500
- 6014 IF NKEY%=0 THEN MINIUSES=3: PRINT MINIUSES ELSE MINIUSES=VAL(ANSWER$)
- 6016 PRINT:PRINT TAB(20);"Records with zero uses are saved unless 'deleted'."
- 6018 PRINT:PRINT
- TAB(7);"Number of newest users to keep (default is 10) > ";
- 6020 MAX%=3: GOSUB 500
- 6022 IF NKEY%=0 THEN KEEPLAST=10: PRINT KEEPLAST ELSE KEEPLAST=VAL(ANSWER$)
- 6024 GOSUB 1400 ' open users
- 6026 FIELD #1, 88 AS MSTRUSER$
- 6028 SEP$="-"
- 6030 GOSUB 8600 'open user archive
- 6032 NDX%=1
- 6034 FOR REC=2 TO NEXTUSER-1
- 6036 SETUSERNUMBER%=USERNUMBER%: GOSUB 300
- 6038 GET #1,REC
- 6040 GOSUB 1300
- 6042 IF (SIGCNT = 0 OR SIGCNT => MINIUSES OR REC > NEXTUSER-KEEPLAST)
- AND DELETED%=0
- THEN GOSUB 6100: KEEP%=2
- ELSE GOSUB 8400: KEEP%=3
- 6044 PRINT FNONOFF$(KEEP%); FRNAME$;" ";LNAME$
- 6046 NEXT REC
- 6048 PRINT "Users remaining:";NDX%
- 6049 PRINT:PRINT "Sorting..."
- 6050 FOR J%=1 TO NDX%-1
- 6052 FOR K%=J%+1 TO NDX%
- 6054 IF USERS%(J%,2) >= USERS%(K%,2) THEN GOTO 6062
- 6056 SWAP USERS%(J%,1), USERS%(K%,1)
- 6058 SWAP USERS%(J%,2), USERS%(K%,2)
- 6060 PRINT ".";
- 6062 NEXT K%
- 6064 PRINT ":"
- 6066 NEXT J%
- 6068 PRINT:PRINT "Sort finished"
- 6072 GOSUB 8200 'close archive
- 6074 GOSUB 8500 'open temp file
- 6075 PRINT:PRINT "Building new USERS file."
- 6076 FOR INDEX%=1 TO NDX%-1
- 6078 GET #1, USERS%(INDEX%,1)
- 6079 PRINT ".";
- 6080 GOSUB 8300 'put into temp
- 6082 NEXT INDEX%
- 6084 GOSUB 8100 'close temp, make USERFILE$
- 6086 RETURN
- 6100 '
- 6104 ' add record to sort array
- 6108 '
- 6112 USERS%(NDX%,1)=REC
- 6116 USERS%(NDX%,2)=SIGCNT
- 6120 NDX%=NDX%+1
- 6124 RETURN
- 6200 '
- 6210 ' display sort array
- 6220 '
- 6230 FOR INDEX%=1 TO NDX%
- 6240 PRINT USERS%(INDEX%,1),USERS%(INDEX%,2)
- 6250 NEXT INDEX%
- 6260 RETURN
- 7000 '
- 7004 ' view a USERFILE archive
- 7008 '1.1
- 7012 SETUSERNUMBER%=0: GOSUB 300
- 7016 GOSUB 3100
- 7020 PRINT FNLINES$(5);"These are the USER archives:"
- 7024 PRINT
- 7028 FILES MGRDRIVE$+"????????.USR"
- 7032 PRINT FNLINES$(3);TAB(20);"Type date of file to view > ";
- 7036 MAX%=8: GOSUB 500
- 7040 IF NKEY%=0 THEN RETURN
- 7044 VIEWFILE$=ANSWER$+".USR"
- 7048 SETUSERNUMBER%=0: GOSUB 300
- 7050 NOFILE%=0
- 7052 OPEN "I", #1, MGRDRIVE$+VIEWFILE$
- 7056 CLOSE #1
- 7060 IF NOFILE%<>0 THEN
- GOSUB 3100: PRINT FNLINES$(10); TAB(20); MGRDRIVE$+VIEWFILE$;
- " does not exist.":
- GOSUB 4700:
- GOTO 7000
- 7064 GOSUB 2500
- 7068 GOTO 7000
- 7100 '
- 7105 ' back to POSYS
- 7110 '
- 7115 SETUSERNUMBER%=0: GOSUB 300
- 7120 JUMPFILE$="POSYS"
- 7125 GOSUB 7800
- 7130 RETURN
- 7800 %INCLUDE 7800.SSB
- 8000 '
- 8004 ' remove deleted records
- 8008 '1.3
- 8012 GOSUB 3100
- 8016 GOSUB 8500 'open temp USERS
- 8020 SEP$="/"
- 8024 GOSUB 8600 'open archive USERS
- 8028 GOSUB 1400 'open USERS
- 8032 FIELD #1, 88 AS MSTRUSER$
- 8036 FOR INDEX = 2 TO NEXTUSER-1
- 8040 GET #1, INDEX
- 8044 GOSUB 1300
- 8048 PRINT FNONOFF$(DELETED% + 2);FRNAME$;" ";LNAME$
- 8052 IF DELETED%=0 THEN
- GOSUB 8300 ELSE
- GOSUB 8400
- 8056 NEXT INDEX
- 8060 GOSUB 8100
- 8064 GOSUB 8200
- 8068 RETURN
- 8100 '
- 8104 ' close temp & change to new USERFILE$
- 8108 '1.1
- 8112 GOSUB 1600
- 8116 LSET TFUEXTUSER$=STR$(RECTEMP+1) 'NEXTuser
- 8120 LSET TFUSERSIG$="*"
- 8124 LSET TFUDATE$=DATE$
- 8128 LSET TFUTIME$=TIME$
- 8132 LSET TFUCRLF$=CRLF$
- 8136 SETUSERNUMBER%=USERNUMBER%: GOSUB 300
- 8140 PUT #2,1
- 8144 CLOSE #1: CLOSE #2
- 8147 KILL DEFDRIVE$+USERFILE$+".UBK"
- 8148 NAME DEFDRIVE$+USERFILE$ AS DEFDRIVE$+USERFILE$+".UBK"
- 8152 NAME DEFDRIVE$+USERFILE$+".$$$" AS DEFDRIVE$+USERFILE$
- 8156 RETURN
- 8200 '
- 8204 ' close archive user
- 8208 '
- 8212 SETUSERNUMBER%=0: GOSUB 300
- 8216 LSET AFUEXTUSER$=STR$(RECARCH+1)
- 8220 LSET AFUSERSIG$="*"
- 8224 LSET AFUDATE$=DATE$
- 8228 LSET AFUTIME$=TIME$
- 8232 LSET AFUCRLF$=CRLF$
- 8236 PUT #3,1
- 8240 CLOSE #3
- 8244 RETURN
- 8300 '
- 8304 ' put into temp
- 8308 '
- 8312 LSET MSTRTEMP$=MSTRUSER$
- 8316 RECTEMP = RECTEMP+1
- 8320 SETUSERNUMBER%=USERNUMBER%: GOSUB 300
- 8324 PUT #2, RECTEMP
- 8328 RETURN
- 8400 '
- 8404 ' put into archive
- 8408 '
- 8412 LSET MSTRARCH$=MSTRUSER$
- 8416 RECARCH = RECARCH+1
- 8420 SETUSERNUMBER%=0: GOSUB 300
- 8424 PUT #3, RECARCH
- 8428 RETURN
- 8500 '
- 8504 ' open work file of USERS
- 8508 '
- 8512 SETUSERNUMBER%=USERNUMBER%: GOSUB 300
- 8516 OPEN "R", #2, DEFDRIVE$+USERFILE$+".$$$", 88
- 8520 FIELD #2, 88 AS MSTRTEMP$
- 8524 FIELD #2,
- 5 AS TFUEXTUSER$,
- 1 AS TFUSERSIG$,
- 6 AS TFUDATE$,
- 6 AS TFUTIME$,
- 2 AS TFUCRLF$
- 8528 RECTEMP=1
- 8532 RETURN
- 8600 '
- 8604 ' open archive USERS
- 8608 '1.1
- 8612 SETUSERNUMBER%=0: GOSUB 300
- 8616 GOSUB 1600
- 8620 OPEN "R", #3, MGRDRIVE$+FNADDSEP$(DATE$,SEP$)+".USR", 88
- 8624 FIELD #3, 88 AS MSTRARCH$
- 8628 FIELD #3,
- 5 AS AFUEXTUSER$,
- 1 AS AFUSERSIG$,
- 6 AS AFUDATE$,
- 6 AS AFUTIME$,
- 2 AS AFUCRLF$
- 8632 RECARCH=1
- 8636 RETURN
- 10000 '
- 10010 ' main program starts here
- 10020 ' 1.0
- 10025 GOSUB 1100
- 10030 IF SYSOPONLY%=1 THEN GOSUB 5000 ELSE ZRETURN%=1
- 10040 IF ZRETURN%=0 THEN PRINT "USRMAINT?": END
- 10055 IF NOFILE%<> 0 THEN PRINT "Bad start - See SIGNON.DOC": END
- 10060 GOSUB 5100
- 10066 IF SELECTION%=17 THEN GOTO 5300
- 10068 IF SELECTION%=18 THEN GOTO 7100
- 10070 ON SELECTION% GOSUB 2500, 6000, 8000, 7000
- 10080 GOTO 10060
- 20000 END
-