%ì VAX-11 Librarian V04-00`>F™p”Ày~⤗"™˜˜"(ÁeAMORTBINTODECÀDECTOBINÐEDT$EDITfKWOTAS LAST_LOGIN>LOGINS(LOOKAl LOOK_COMMONEÒOWNERNÖPWS,PW_LISTXvUSERDIR_–USERLIST­à2AÉ1 ! ! B I N T O D E C !10 DECLARE STRING BIN_STR DECLARE LONG DEC_VAL DECLARE LONG BIN_STR_LEN DECLARE LONG ISTAT8 EXTERNAL LONG FUNCTION OTS$CVT_TB_L( STRING BY DESC, & LONG BY REF, & LONG BY VALUE, & LONG BY VALUE) INPUT "Binary String ";BIN_STR BIN_STR_LEN = LEN(BIN_STR)520 ISTAT = OTS$CVT_TB_L(BIN_STR,DEC_VAL,BIN_STR_LEN,) PRINT DEC_VAL 32767 ENDww­èaDÉ1 ! ! D E C T O B I N !10 DECLARE STRING BIN_STR DECLARE LONG DEC_VAL DECLARE LONG DEC_VAL_LEN DECLARE LONG ISTAT5 EXTERNAL LONG FUNCTION OTS$CVT_L_TB( LONG BY REF, & STRING BY DESC, & LONG BY VALUE, & LONG BY VALUE) INPUT "Decimal Value ";DEC_VAL" DEC_VAL_LEN = LEN(NUM1$(DEC_VAL))> BIN_STR = " "520 ISTAT = OTS$CVT_L_TB(DEC_VAL,BIN_STR,DEC_VAL_LEN,) PRINT EDIT$(BIN_STR,2%) 32767 ENDww­€K²GÉ1 ! ! E D T $ E D I T ! OPTION TYPE = EXPLICIT"2 EXTERNAL LONG FUNCTION EDT$EDIT EXTERNAL LONG EDT$FILEIO EXTERNAL LONG EDT$WORKIO EXTERNAL LONG LES$XLATE5 DECLARE LONG ISTAT DECLARE LONG PASSFILE(1) DECLARE LONG PASSWORK(1) DECLARE LONG PASSXLATE(1) DECLARE STRING IN_FILE!10 PASSFILE(0) = LOC(EDT$FILEIO) PASSWORK(0) = LOC(EDT$WORKIO) PASSXLATE(0) = LOC(LES$XLATE) 15 INPUT "File to Edit ";IN_FILE GOTO 100 IF IN_FILE = ""620 ISTAT = EDT$EDIT(IN_FILE,,'ESICOM:EDTINI.EDT',,, & PASSFILE() BY REF, & PASSWORK() BY REF, & PASSXLATE() BY REF) IF (ISTAT AND 1%) = 0% THEN CALL LIB$STOP(ISTAT BY VALUE) END IF100 END*200 FUNCTION LONG LES$XLATE(STRING OPTSTR) OPTION TYPE = EXPLICIT( EXTERNAL INTEGER FUNCTION LIB$GET_INPUT DECLARE INTEGER ISTAT DECLARE INTEGER OPTSTR_LEN PRINT OPTSTR7210 ISTAT = LIB$GET_INPUT(OPTSTR,'Option? ',OPTSTR_LEN) IF (ISTAT AND 1%) = 0% THEN CALL LIB$STOP(ISTAT BY VALUE) END IF" OPTSTR = "I" + OPTSTR + CHR$(13%)298 LES$XLATE = ISTAT FUNCTIONENDww­ îÌIÉ00001 ! & ! K W O T A S & ! $00010 ON ERROR GOTO 900000014 DECLARE LONG ISTAT DECLARE WORD OUTPUT_QUOTAS DECLARE STRING SYS$SYSDEVICE SYS$SYSDEVICE = "$2$DUA0:" THRESH% = 90%.00015 EXTERNAL LONG FUNCTION LIB$SPAWN, & SYS$ASCTIM, & GET_DISK_QUOTA, & LIB$GET_FOREIGN( EXTERNAL LONG CONSTANT SS$_NORMAL, & SS$_NODI SKQUOTA, & SS$_QFNOTACT 00016 MAP (X) LONG USAGE, & LONG PERMQUOTA, & LONG OVERDRAFT.00020 MAP (UAFMAP) STRING U_UAFREC = 1412 &$\ MAP (UAFMAP) STRING FILL = 4, & STRING U_USERNAME = 31, & BYTE FILL, & LONG U_UIC, & STRING FILL = 12, & STRING U_ACCOUNT = 32, & STRING U_OWNER = 32, & BYTE FILL, & STRING U_DEVICE = 15, & STRING FILL = 17, & STRING U_DIRECTORY = 31, & BYTE FILL, &  STRING FILL = 32, &" STRING U_COMMANDFILE = 63, & BYTE FILL, & STRING U_CLI = 31, & BYTE FILL, & STRING U_TABLES = 31 &%\ MAP (UAFMAP) STRING FILL = 36, & WORD U_MEM, & WORD U_GRP*00021 MAP (UAFMAP) STRING FILL = 340, & STRING PASSWORD = 8, & STRING PASSWORD2 = 8, & WORD W_LGIFAILS, & WORD W_SALT, & BYTE B_ENCRYPT, & BYTE B_ENCRYPT2, & WORD B_PWD_LENGTH, & STRING Q_EXPIRATION = 8 , &! STRING Q_PWD_LIFETIME = 8, & STRING Q_PWD_DATE = 8, & STRING Q_PWD2_DATE = 8, & STRING Q_LASTLOGIN_I = 8, & STRING Q_LASTLOGIN_N = 8, & STRING Q_PRIV = 8, & STRING Q_DEF_PRIV = 8, & STRING MIN_CLASS = 20, & STRING MAX_CLASS = 20, & LONG LOGIN_FLAGS*00022 MAP (UAFMAP) STRING FILL = 472, &% STRING B_NETWORK_ACCESS_P = 3, &% STRING B_NETWORK_ACCESS_S = 3, &# STRING B_BATCH_ACCESS_P = 3, &# STRING B_BATCH_ACCE SS_S = 3, &# STRING B_LOCAL_ACCESS_P = 3, &# STRING B_LOCAL_ACCESS_S = 3, &$ STRING B_DIALUP_ACCESS_P = 3, &$ STRING B_DIALUP_ACCESS_S = 3, &$ STRING B_REMOTE_ACCESS_P = 3, &$ STRING B_REMOTE_ACCESS_S = 3, & STRING FILL = 13, & BYTE B_PRIMEDAYS, & BYTE B_PRI, & BYTE B_QUEPRI, & WORD W_MAXJOBS, & WORD W_MAXACCTJOBS, & WORD W_MAXDETACH, & WORD W_PRCCNT, & WORD W_BIOLM, & WORD W_DIOLM, & W ORD W_TQCNT, & WORD W_ASTLM, & WORD W_ENQLM, & WORD W_FILLM, & WORD W_SHRFILLM, & LONG L_WSQUOTA, & LONG L_DFWSCNT, & LONG L_WSEXTENT, & LONG L_PGFLQUOTA, & LONG L_CPUTIM, & LONG L_BYTLM, & LONG L_PBYTLM, & LONG L_JTQUOTA, & WORD W_PROXY_LIM, & WORD W_PROXIES, & WORD W_ACCOUNT_LIM, & WORD W_ACCOUNTS'00023 MAP (LOGMAP) LONG LAST_DATE, & LONG LAST_TIME &#\ MAP (LOGMAP) STRING LASTLOGIN = 8!00025 MAP (WRKMAP) LONG UIC &!\ MAP (WRKMAP) WORD UIC_MEM, & WORD UIC_GRP &\ MAP (X) STRING TIMBUF = 23-00030 OPEN "SYSUAF" FOR INPUT AS FILE 1, &% ORGANIZATION INDEXED VARIABLE, & ACCESS READ, & ALLOW MODIFY, & MAP UAFMAP, &% DEFAULTNAME "SYS$SYSTEM:.DAT", & RECORDTYPE NONE800040 OPEN "QUOTA_DANGER.LIS" FOR OUTPUT AS FILE 2%, & RECORDSIZE 132%"00045 ISTAT = LIB$GET_FOREIGN(YN$) IF YN$ <> "" THEN ISTAT = INSTR(1%,YN$," ") IF ISTAT = 0% THEN GOTO 51 ELSE" THRESH% = VAL(RIGHT(YN$,ISTAT)) YN$ = LEFT(YN$,ISTAT) GOTO 51 END IF END IF/00050 INPUT "Output Quotas To the Screen "; YN$#00051 YN$ = LEFT(EDIT$(YN$,32%),1%) GOTO 900 IF YN$ = "" IF YN$ = "Y" THEN OUTPUT_QUOTAS = -1% END IF00090 EDITS% = 2% + 4% + 128%00100 WHILE -1 00110 GET #1&00120 USER$ = EDIT$(U_USERNAME,EDITS%)! DEVICE$ = EDIT$(U_DEVICE,EDITS%)$ DIRECT$ = EDIT$(U_DIRECTORY,EDITS%)B CALL LIB$SYS_FAO("[!OW,!OW]",,UIC$,U_GRP BY VALUE,U_MEM BY VALUE)% IF INSTR(1%,DEVICE$,"SYS$SYSDEVICE") THEN DEVICE$ = SYS$SYSDEVICE END IF 500130 ISTAT = GET_DISK_QUOTA(U_GRP,U_MEM,DEVICE$, &* LEN(DEVICE$),USAGE,PERMQUOTA,OVERDRAFT) IF (ISTAT <> SS$_NORMAL) THEN0 ISTAT = GET_DISK_QUOTA(U_GRP,U_MEM,DEVICE$, &* LEN(DEVICE$),USAGE,PERMQUOTA,OVERDRAFT) IF (ISTAT <> SS$_NORMAL) THEN0 ISTAT = GET_DISK_QUOTA(U_GRP,U_MEM,DEVICE$, &+ LEN(DEVICE$),USAGE,PERMQUOTA,OVERDRAFT)/ IF ((ISTAT <> SS$_NORMAL) AND OUTPUT_QUOTAS) THEN, PRINT TAB(10%);"***********************"( PRINT TAB(10%);"No Quota For ";USER$ PRINT GOTO 198 END IF END IF END IF IF PERMQUOTA = 0 THEN GOTO 198 END IF)00140 PERCENT = (USAGE * 100) / PERMQUOTA/ USED$ = FORMAT$(USAGE," Usage = ###,###,###")3 PERM$ = FORMAT$(PERMQUOTA," Quota = ###,###,###")- PRCNT$ = FORMAT$(PERCENT," ###.### Percent") IF OUTPUT_QUOTAS THEN, PRINT USER$;TAB(31%);DEVICE$;TAB(46%);UIC$ PRINT USED$; PERM$; PRCNT$  PRINT END IF IF PERCENT >= THRESH% THEN/ PRINT #2%,USER$;TAB(31%);DEVICE$;TAB(46%); & USED$;PERM$;PRCNT$ END IF USER$ = "" DEVICE$ = "" USAGE = 0 PERMQUOTA = 0 PERCENT = 0 00198 NEXT00899 ! & ! C L O S E F I L E & ! $00900 CLOSE 1,200998 GOTO 3276708999 ! & ! E R R O R T R A P & ! $#09000 IF (ERR = 11) AND (ERL = 110) THEN RESUME 900 END IF09098 RESUME 3250032499 ! &# ! E R R O R M E S S A G E S & ! $32500 E% = ERR &.\ E$ = SYS(CHR$(6%) + CHR$(9%) + CHR$(E%)) &#\ E$ = EDIT$(RIGHT(E$,3%),4%) &"\ E$ = E$ + " on line" + NUM$(ERL)32590 PRINT &>\ PRINT "**************************************************" &>\ PRINT "* *" &>\ PRINT "* JOB ABORTED *" &>\ PRINT "*  *" &>\ PRINT "*"; E$; TAB(49%); "*" &>\ PRINT "* *" &<\ PRINT "**************************************************" 32767 ENDww­ ?òKÉ00001 ! & ! L A S T _ L O G I N & ! $00010 ON ERROR GOTO 900000014 DECLARE LONG ISTAT.00015 EXTERNAL LONG FUNCTION LIB$SPAWN, & SYS$ASCTIM00016 MAP (X) JOB.NO$ = 8%.00020 MAP (UAFMAP) STRING U_UAFREC = 1412 &$\ MAP (UAFMAP) STRING FILL = 4, & STRING U_USERNAME = 31, & BYTE FILL, & LONG U_UIC, & STRING FILL = 12, & STRING U_ACCOUNT = 32, & STRING U_OWNER = 32, & BYTE FILL, & STRING U_DEVICE = 15, & STRING FILL = 17, & STRING U_DIRECTORY = 31, & BYTE FILL, & STRING FILL = 32, &" STRING U_COMMANDFILE = 63, & BYTE FILL, & STRING U_CLI = 31, & BYTE FILL, & STRING U_TABLES = 31 &%\ MAP (UAFMAP) STRING FILL = 36, & WORD U_MEM, & WORD U_GRP*00021 MAP (UAFMAP) STRING FILL = 340, & STRING PASSWORD = 8, & STRING PASSWORD2 = 8, & WORD W_LGIFAILS, & WORD W_SALT, & BYTE B_ENCRYPT, & BYTE B_ENCRYPT2, & WORD B_PWD_LENGTH, & STRING Q_EXPIRATION = 8, &! STRING Q_PWD_LIFETIME = 8, & STRING Q_PWD_DATE = 8, & STRING Q_PWD2_DATE = 8, & STRING Q_LASTLOGIN_I = 8, & STRING Q_LASTLOGIN_N = 8, & STRING Q_PRIV = 8, & STRING Q_DEF_PRIV = 8, & STRING MIN_CLASS = 20, & STRING MAX_CLASS = 20, & LONG LOGIN_FLAGS*00022 MAP (UAFMAP) STRING FILL = 472, &% STRING B_NETWORK_ACCESS_P = 3, &% STRING B_NETWORK_ACCESS_S = 3, &# STRING B_BATCH_ACCESS_P = 3, &# STRING B_BATCH_ACCESS_S = 3, &# STRING B_LOCAL_ACCESS_P = 3, &# STRING B_LOCAL_ACCESS_S = 3, &$ STRING B_DIALUP_ACCESS_P = 3, &$ STRING B_DIALUP_ACCESS_S = 3, &$ STRING B_REMOTE_ACCESS_P = 3, &$ STRING B_REMOTE_ACCESS_S = 3, & STRING FILL = 13, & BYTE B_PRIMEDAYS, & BYTE B_PRI, & BYTE B_QUEPRI, & WORD W_MAXJOBS, & WORD W_MAXACCTJOBS, & WORD W_MAXDETACH, & WORD W_PRCCNT, & WORD W_BIOLM, & WORD W_DIOLM, & WORD W_TQCNT, & WORD W_ASTLM, & WORD W_ENQLM, & WORD W_FILLM, & WORD W_SHRFILLM, & LONG L_WSQUOTA, & LONG L_DFWSCNT, & LONG L_WSEXTENT, & LONG L_PGFLQUOTA, & LONG L_CPUTIM, & LONG L_BYTLM, & LONG L_PBYTLM, & LONG L_JTQUOTA, & WORD W_PROXY_LIM, & WORD W_PROXIES, & WORD W_ACCOUNT_LIM, & WORD W_ACCOUNTS'00023 MAP (LOGMAP) LONG LAST_DATE, & LONG LAST_TIME &#\ MAP (LOGMAP) STRING LASTLOGIN = 8!00025 MAP (WRKMAP) LONG UIC &!\ MAP (WRKMAP) WORD UIC_MEM, & WORD UIC_GRP &\ MAP (X) STRING TIMBUF = 23-00030 OPEN "SYSUAF" FOR INPUT AS FILE 1, &% ORGANIZATION INDEXED VARIABLE, & ACCESS READ, & ALLOW MODIFY, & MAP UAFMAP, &% DEFAULTNAME "SYS$SYSTEM:.DAT", & RECORDTYPE NONEA00040 OPEN "LAST_LOGIN.LIS" FOR OUTPUT AS FILE 2, RECORDSIZE 132%00100 WHILE -1 00110 GET #1000115 CALL LIB$SYS_FAO(" [!OB,!OB] ",,Z0$, & U_GRP BY VALUE, & U_MEM BY VALUE)00116 LASTLOGIN = Q_LASTLOGIN_I*00120 USER$ = EDIT$(U_USERNAME,128%) &(\ DEVICE$ = EDIT$(U_DEVICE,4%+128%) &&\ DIRECT$ = EDIT$(U_DIRECTORY,4%+128%)700125 ISTAT = SYS$ASCTIM(,TIMBUF,Q_LASTLOGIN_I BY REF,),00126 IF Q_LASTLOGIN_I = STRING$(8%,0%) & THEN & TIMBUF = " "%00130 PRINT #2, USER$;TAB(30%);TIMBUF 00198 NEXT00899 ! & ! C L O S E F I L E & ! $00900 CLOSE 1,200999 ! &! ! S O R T T H E F I L E & ! $01000 CALL GETPID(JOB.NO$)(01010 TMPFIL$ = "UAF" + JOB.NO$ + ".TMP")01020 OPEN TMPFIL$ FOR OUTPUT AS FILE 12%"01025 PRINT #12%, "$ SET NOVERIFY"301030 PRINT #12%, "$ !RUN SYS$SYSTEM:SORTMERGE" &4\ PRINT #12%, "$ SORT/KEY=(POSITION:1,SIZE:25)-" &&\ PRINT #12%, " LAST_LOGIN.LIS"; &%\ PRINT #12%, " LAST_LOGIN.LIS" &&\ PRINT #12%, "$ PURGE LAST_LOGIN.LIS"01050 CLOSE 12$01060 ISTAT = LIB$SPAWN("@"+TMPFIL$)01070 IF ISTAT <> 1% & THEN & PRINT "Error in Spawn to Sort"01098 GOTO 3276708999 ! & ! E R R O R T R A P & ! $'09000 IF ERR = 11 ! On End of File & THEN ! Then... &" RESUME 900 ! Go Close the File09098 RESUME 3250032499 ! &# ! E R R O R M E S S A G E S & ! $32500 E% = ERR &.\ E$ = SYS(CHR$(6%) + CHR$(9%) + CHR$(E%)) &#\ E$ = CVT$$(RIGHT(E$,3%),4%) &"\ E$ = E$ + " on line" + NUM$(ERL)32590 PRINT &>\ PRINT "**************************************************" &>\ PRINT "* *" &>\ PRINT "*  JOB ABORTED *" &>\ PRINT "* *" &>\ PRINT "*"; E$; TAB(49%); "*" &>\ PRINT "* *" &<\ PRINT "**************************************************" 32767 ENDww­À ÜMÉ00001 ! & ! L O G I N S & ! $00010 ON ERROR GOTO 900000014 DECLARE LONG ISTAT.00015 EXTERNAL LONG FUNCTION LIB$SPAWN, & SYS$ASCTIM00016 MAP (X) JOB.NO$ = 8%.00020 MAP (UAFMAP) STRING U_UAFREC = 1412 &$\ MAP (UAFMAP) STRING FILL = 4, & STRING U_USERNAME = 31, & BYTE FILL, & LONG U_UIC, & STRING FILL = 12, & STRING U_ACCOUNT = 32, & STRING U_OWNER = 32, & BYTE FILL, & STRING U_DEVICE = 15, & STRING FILL = 17, & STRING U_DIRECTORY = 31, & BYTE FILL, & STRING FILL = 32, &" STRING U_COMMANDFILE = 63, & BYTE FILL, & STRING U_CLI = 31, & BYTE FILL, & STRING U_TABLES = 31 &%\ MAP (UAFMAP) STRING FILL = 36, & WORD U_MEM, & WORD U_GRP*00021 MAP (UAFMAP) STRING FILL = 340, & STRING PASSWORD = 8, & STRING PASSWORD2 = 8, & WORD W_LGIFAILS, & WORD W_SALT, & BYTE B_ENCRYPT, & BYTE B_ENCRYPT2, & WORD B_PWD_LENGTH, & STRING Q_EXPIRATION = 8, &! STRING Q_PWD_LIFETIME = 8, & STRING Q_PWD_DATE = 8, & STRIN!G Q_PWD2_DATE = 8, & STRING Q_LASTLOGIN_I = 8, & STRING Q_LASTLOGIN_N = 8, & STRING Q_PRIV = 8, & STRING Q_DEF_PRIV = 8, & STRING MIN_CLASS = 20, & STRING MAX_CLASS = 20, & LONG LOGIN_FLAGS*00022 MAP (UAFMAP) STRING FILL = 472, &% STRING B_NETWORK_ACCESS_P = 3, &% STRING B_NETWORK_ACCESS_S = 3, &# STRING B_BATCH_ACCESS_P = 3, &# STRING B_BATCH_ACCESS_S = 3, &# STRING B_LOCAL_ACCESS_P = 3, &# STRING B_LOCAL_ACCESS_S = 3", &$ STRING B_DIALUP_ACCESS_P = 3, &$ STRING B_DIALUP_ACCESS_S = 3, &$ STRING B_REMOTE_ACCESS_P = 3, &$ STRING B_REMOTE_ACCESS_S = 3, & STRING FILL = 13, & BYTE B_PRIMEDAYS, & BYTE B_PRI, & BYTE B_QUEPRI, & WORD W_MAXJOBS, & WORD W_MAXACCTJOBS, & WORD W_MAXDETACH, & WORD W_PRCCNT, & WORD W_BIOLM, & WORD W_DIOLM, & WORD W_TQCNT, & WORD W_ASTLM, & WORD W_ENQLM, & WORD W_FILLM,# & WORD W_SHRFILLM, & LONG L_WSQUOTA, & LONG L_DFWSCNT, & LONG L_WSEXTENT, & LONG L_PGFLQUOTA, & LONG L_CPUTIM, & LONG L_BYTLM, & LONG L_PBYTLM, & LONG L_JTQUOTA, & WORD W_PROXY_LIM, & WORD W_PROXIES, & WORD W_ACCOUNT_LIM, & WORD W_ACCOUNTS'00023 MAP (LOGMAP) LONG LAST_DATE, & LONG LAST_TIME &#\ MAP (LOGMAP) STRING LASTLOGIN = 8!00025 MAP (WRKMAP) LONG UIC &!\ MAP (WRKMAP) WORD UIC_$MEM, & WORD UIC_GRP &\ MAP (X) STRING TIMBUF = 23-00030 OPEN "SYSUAF" FOR INPUT AS FILE 1, &% ORGANIZATION INDEXED VARIABLE, & ACCESS READ, & ALLOW MODIFY, & MAP UAFMAP, &% DEFAULTNAME "SYS$SYSTEM:.DAT", & RECORDTYPE NONEA00040 OPEN "LAST_LOGIN.LIS" FOR OUTPUT AS FILE 2, RECORDSIZE 132%00100 WHILE -1 00110 GET #1*00120 USER$ = EDIT$(U_USERNAME,128%) &(\ DEVICE$ = EDIT$(U_DEVICE,4%+128%) &&\ DIRECT$ = EDIT$(U_DIRECTORY,4%+128%%)D00130 PRINT #2, USER$;TAB(31%);DEVICE$;DIRECT$;TAB(80);Q_LASTLOGIN_I 00198 NEXT00199 ! &! ! S O R T T H E F I L E & ! $00200 CALL GETPID(JOB.NO$)(00210 TMPFIL$ = "UAF" + JOB.NO$ + ".TMP")00220 OPEN TMPFIL$ FOR OUTPUT AS FILE 12%"00225 PRINT #12%, "$ SET NOVERIFY"300230 PRINT #12%, "$ !RUN SYS$SYSTEM:SORTMERGE" &:\ PRINT #12%, "$ SORT/KEY=(POSITION:81,SIZE:8,BINARY)-" &&\ PRINT #12%, " LAST_LOGIN.LIS"; &%\ PRINT #12%, " LAST_LOGIN.LIS" &&\ PRINT &#12%, "$ PURGE LAST_LOGIN.LIS"00250 CLOSE 12$00260 ISTAT = LIB$SPAWN("@"+TMPFIL$)00270 IF ISTAT <> 1% & THEN & PRINT "Error in Spawn to Sort"00299 ! & ! P R I N T R E P O R T & ! $@00300 OPEN "LAST_LOGIN.LIS" FOR INPUT AS FILE 1, RECORDSIZE 132; OPEN "LAST_LOGIN.LIS" FOR OUTPUT AS FILE 2, RECORDSIZE 13200305 WHILE -100310 INPUT LINE #1, REC$&00315 Q_LASTLOGIN_I = MID(REC$,81%,8%) REC$ = EDIT$(REC$,4%) DIRECT$ = MID(REC$,32%,48) USER$ =' LEFT(REC$,30%)00316 LASTLOGIN = Q_LASTLOGIN_I700325 ISTAT = SYS$ASCTIM(,TIMBUF,Q_LASTLOGIN_I BY REF,),00326 IF Q_LASTLOGIN_I = STRING$(8%,0%) & THEN & TIMBUF = " ".00330 PRINT #2%, USER$;TIMBUF;TAB(60%);DIRECT$ 00398 NEXT00899 ! & ! C L O S E F I L E & ! $00900 CLOSE 1,200998 GOTO 3276708999 ! & ! E R R O R T R A P & ! $#09000 IF (ERR = 11) AND (ERL = 110) THEN CLOSE 1,2 RESUME 200 END IF#09010 IF (ER(R = 11) AND (ERL = 310) THEN RESUME 900 END IF09098 RESUME 3250032499 ! &# ! E R R O R M E S S A G E S & ! $32500 E% = ERR &.\ E$ = SYS(CHR$(6%) + CHR$(9%) + CHR$(E%)) &#\ E$ = EDIT$(RIGHT(E$,3%),4%) &"\ E$ = E$ + " on line" + NUM$(ERL)32590 PRINT &>\ PRINT "**************************************************" &>\ PRINT "* *" &>\ PRINT "* JOB ABORTED *" &)>\ PRINT "* *" &>\ PRINT "*"; E$; TAB(49%); "*" &>\ PRINT "* *" &<\ PRINT "**************************************************" 32767 ENDww­`=¡OÉ1 ! ! L O O K ! ! BASIC LOOK) ! LINK LOOK,SYS$SYSTEM:SYSDEF.STB/SELECT ! DECLARE LONG I_WANTED! EXTERNAL LONG FUNCTION LIB$SPAWN %INCLUDE "LOOK_COMMON.BAS" ON ERROR GOTO TRAP_INTERRUPT* Y% = CTRLC C_NULLS = STRING$(25%,0%)' OPEN "SYS$INPUT" FOR INPUT AS FILE #1% JPI(0)::MAKEUP::LNGTH = 12% JPI(0)::MAKEUP::CODE = JPI$_TERMINAL' JPI(0)::MAKEUP::PTR1 = LOC(C_TERMINAL)' JPI(0)::MAKEUP::PTR2 = LOC(L_TERMINAL) JPI(1)::MAKEUP::LNGTH = 15# JPI(1)::MAKEUP::CODE = JPI$_PRCNAM% JPI(1)::MAKEUP::PTR1 = LOC(C_PRCNAM)% JPI(1)::MAKEUP::PTR2 = LOC(L_PRCNAM) JPI(2)::MAKEUP::LNGTH = 128% JPI(2)::MAKEUP::CODE = JPI$_IMAGNAME' JPI(2)::MAKEUP::PTR1 = LOC(C_IMAGNAME+)' JPI(2)::MAKEUP::PTR2 = LOC(L_IMAGNAME) JPI(3)::MAKEUP::LNGTH = 4 JPI(3)::MAKEUP::CODE = JPI$_PID" JPI(3)::MAKEUP::PTR1 = LOC(I_PID)" JPI(3)::MAKEUP::PTR2 = LOC(L_PID) JPI(4)::MAKEUP::LNGTH = 12% JPI(4)::MAKEUP::CODE = JPI$_USERNAME' JPI(4)::MAKEUP::PTR1 = LOC(C_USERNAME)' JPI(4)::MAKEUP::PTR2 = LOC(L_USERNAME) JPI(5)::MAKEUP::LNGTH = 4 JPI(5)::MAKEUP::CODE = JPI$_STS" JPI(5)::MAKEUP::PTR1 = LOC(I_STS)" JPI(5)::MAKEUP::PTR2 = LOC(L_STS) JPI(6)::TERMINATE::QUIT = 0, I = LIB$ERASE_PAGE(1%,1%) I = SYS$ASCTIM(J, C_NOW,,); F = "'LLLLLLLLL 'LLLLLLLLLLLL 'LLLLLLLLLLLLL 'LLLLLLL 'E" PRINT5 PRINT "____________________________________________" PRINT "LOOK at : "; C_NOW PRINT5 PRINT "Use process deletion *******CAREFULLY*******"5 PRINT "--------------------------------------------" PRINT- I = SYS$GETJPIW(6% BY VALUE, , ,JPI(0), , ,), MY_TERMINAL = SEG$(C_TERMINAL,1,L_TERMINAL) MY_PID = I_PID DO_DELETE = "N" MENU% = 0%AGAIN: P-RINT IF MENU% THEN' PRINT "D: Disable process deletion"& PRINT "E: Enable process deletion"+ PRINT "S: Show status of deletion flag"$ PRINT "T: Toggle menu off or on"7 PRINT "&: SPAWN to DCL. LOGOUT returns to program" PRINT* PRINT " 1: Delete all interactive jobs") PRINT " 2: Delete interactive/confirm" PRINT( PRINT " 3: List all interactive jobs": PRINT " 4: List interactives continuously until CTRL/C" PRINT " 5: List Batch jobs" PRINT " 6: Li.st Network jobs"6 PRINT " 7: List jobs that match user search string"( PRINT " 8: List interactive dial-ins" PRINT "99: Exit -- " END IF IF MENU% THEN PRINT "Make your selection "; ELSE; PRINT "Make your selection: (T toggles menu on ): "; END IFIGNORE: CALL GET_INPUT(C$) IF C$ = "" THEN! GOTO IGNORE IF MY_TERMINAL = "" GOTO AGAIN END IF PRINT IF C$ = "T" THEN MENU% = MENU% XOR 1% GOTO AGAIN END IF IF SEG$(C$,1%,1%) =/ "&" THEN L = LEN(C$) C$ = SEG$(C$,2%,L)' I = LIB$SPAWN(C$,,,,,,J,,,,"Spawn>",) PRINT PRINT: PRINT "LIB$SPAWN has finished. Back to program control" PRINT GOTO AGAIN END IF IF C$ = "D" THEN DO_DELETE = "N"* PRINT "--------------------------------"$ PRINT "Process deletion disabled."( PRINT "DO_DELETE flag is: "; DO_DELETE* PRINT "--------------------------------" PRINT "Hit RETURN to go on: "; CALL GET_INPUT(C$) GOTO AGAIN END IF IF C$ =0 "E" THEN DO_DELETE = "Y"' PRINT "-----------------------------"' PRINT "** Enabling Process Deletion.") PRINT "DO_DELETE flag is : "; DO_DELETE' PRINT "-----------------------------" PRINT "Hit RETURN to go on: "; CALL GET_INPUT(C$) GOTO AGAIN END IF IF C$ = "S" THEN. PRINT "------------------------------------" IF DO_DELETE = "Y" THEN8 PRINT "** Process Deletion Enabled please be careful" ELSE$ PRINT "Process Deletion Disabled" END IF. PRINT "---1---------------------------------" PRINT "Hit RETURN to go on: "; CALL GET_INPUT(C$) GOTO AGAIN END IF I_WANTED = VAL%(C$) SELECT I_WANTED CASE 99% CALL LIB$ERASE_PAGE(1%,1%) PRINT PRINT "User Selected EXIT" CALL SYS$EXIT(1% BY VALUE) CASE 1% CALL DELETE("MASS") CASE 2% CALL DELETE("CONFIRM") CASE 3% CALL LISTER("REGULAR",0%) CASE 4%- PRINT "How long between list in seconds: "; CALL GET_INPUT(C$) II% = VAL%(C$) IF C$ <> "" IF II% <= 20% THEN. PRINT "Bad value....substituting 5 seconds" II% = 5% SLEEP (II%) END IF CALL LISTER("REPEAT",II%) CASE 5% CALL LIST_TYPES(1%) CASE 6% CALL LIST_TYPES(2%) CASE 7%! PRINT "Input string segment: "; CALL GET_INPUT(SEGMENT$) CALL SEARCH_JOBS(SEGMENT$) CASE 8% CALL LISTER("DIALIN",0%) CASE ELSE PRINT "Invalid selection" END SELECT GOTO AGAINTRAP_INTERRUPT: SELECT ERR CASE 11% CALL LIB$ERASE_PAGE(1%,1%) PRINT$ PRINT "<3CTRL/Z> from the keyboard"" PRINT "User terminated normally" CALL SYS$EXIT(1% BY VALUE) CASE 28% CALL LIB$ERASE_PAGE(1%,1%) PRINT+ PRINT " from the user is trapped" PRINT RESUME AGAIN CASE 52% PRINT, PRINT "Invalid entry entered. Try again." RESUME AGAIN CASE ELSE CALL LIB$ERASE_PAGE(1%,1%) PRINT PRINT "Error number is: ";ERR% PRINT "SYSTEM error report follows" ON ERROR GOTO 0 END SELECT END500 SUB DELETE(STRING WHICH) %4INCLUDE "LOOK_COMMON.BAS"REDO: CALL PRINT_IT(1%) WILD_PID = -1% WHILE -1% CALL FETCH_JPI(I,"INTERACTIVE") IF I = SS$_NOMOREPROC THEN GOTO REDO IF CHOICE = "Y" SUBEXIT END IF GOTO SKIP_IT IF MY_PID = I_PID& GOTO SKIP_IT IF C_USERNAME = "SYSTEM"% GOTO SKIP_IT IF C_USERNAME = "SYSOP" IF WHICH = "MASS" THEN! CALL DEL_PRCNAM(I_PID,I_RESULT) ELSE PRINT CALL PRINT_IT(0%)) PRINT "Delete this user (Y/N ) "; CALL GET_INPUT(C$) C$ = "N" IF C$ 5 = " "- CALL DEL_PRCNAM(I_PID,I_RESULT) IF C$ = "Y" PRINT IF C$ <> "Y" END IFSKIP_IT: NEXT SUBEND0600 SUB LISTER(STRING WHICH, LONG SLEEP_SECONDS) %INCLUDE "LOOK_COMMON.BAS"REDO: CALL PRINT_IT(1%) WILD_PID = -1% WHILE -1% CALL FETCH_JPI(I,"INTERACTIVE") IF I = SS$_NOMOREPROC THEN IF WHICH = "REPEAT" THEN SLEEP (SLEEP_SECONDS) GOTO REDO ELSE GOTO REDO IF CHOICE = "Y" SUBEXIT END IF END IF IF WHICH = "DIALIN" THEN! CALL!6 CHECK_DIAL(C_TERM,RESULT%) GOTO SKIP_IT IF RESULT% <> 1% END IF CALL PRINT_IT(0%)SKIP_IT: NEXT SUBEND700 SUB LIST_TYPES(LONG I_TYPE) %INCLUDE "LOOK_COMMON.BAS"REDO: CALL PRINT_IT(1%) WILD_PID = -1% P% = PCB$V_BATCH IF I_TYPE = 1%! P% = PCB$V_NETWRK IF I_TYPE = 2% WHILE -1% CALL FETCH_JPI(I,"ALL") IF I = SS$_NOMOREPROC THEN GOTO REDO IF CHOICE = "Y" SUBEXIT END IF K% = LIB$EXTZV(P%,1%,I_STS) CALL PRINT_IT(0%) IF K% = 1% N7EXT SUBEND800 SUB SEARCH_JOBS(SEGMENT$) %INCLUDE "LOOK_COMMON.BAS"REDO: CALL PRINT_IT(1%) WILD_PID = -1% WHILE -1% CALL FETCH_JPI(I,"ALL") IF I = SS$_NOMOREPROC THEN GOTO REDO IF CHOICE = "Y" SUBEXIT END IF0 X$ = C_TERMINAL + C_USERNAME + C_PRCNAM + C_PID' X$ = X$ + SEG$(C_TRIMMED,1%,L_TRIMMED) X% = POS(X$,SEGMENT$,1%) CALL PRINT_IT(0%) IF X% > 0% NEXT SUBEND)900 SUB DEL_PRCNAM(LONG VV_PID, I_RESULT) %INCLUDE "LOOK_COMMON.BAS"8 SUBEXIT IF VV_PID = 0% IF DO_DELETE <> "Y" THEN C_TRIMMED = "Not Deleted" L_TRIMMED = 11% CALL PRINT_IT(0%) SUBEXIT END IF IF DO_DELETE = "Y" THEN I% = SYS$DELPRC(VV_PID,)5 CALL FAIL("Sub DEL_PRCNAM ",I%) IF I% <> SS$_NORMAL C_TRIMMED = "** Deleted **" L_TRIMMED = 13% CALL PRINT_IT(0%) SUBEXIT END IF SUBEND$1000 SUB FAIL(STRING C_TYPE, LONG I) MAP (XX1) STRING DST_STR = 100& EXTERNAL LONG FUNCTION LIB$SYS_GETMSG DECLARE LONG 9MSG_ID DECLARE LONG FLAGS DECLARE LONG ISTAT DECLARE WORD MSG_LEN DECLARE BYTE OUT_ARR(4%) PRINT3 PRINT C_TYPE + " Failed ... examine message below" CALL HEX(I,H_OUT$)< ISTAT = LIB$SYS_GETMSG(I,MSG_LEN,DST_STR,FLAGS,OUT_ARR(1%)) PRINT SEG$(DST_STR,1%,MSG_LEN)< PRINT "Decimal error code = ";I;" Hex error code = ";H_OUT$9 PRINT "************************************************" PRINT SUBEND#1100 SUB HEX(LONG I, STRING C_TYPE) MAP (XX1) STRING H_OUT = 8$: EXTERNAL LONG FUNCTION OTS$CVT_L_TZ& J = OTS$CVT_L_TZ(I,H_OUT,8% BY VALUE) C_TYPE = H_OUT SUBEND01200 SUB FETCH_JPI(LONG I_RESULT, STRING C_TYPE) %INCLUDE "LOOK_COMMON.BAS" DECLARE LONG SANITY_COUNTER SANITY_COUNTER = 0SKIP_IT:* I_RESULT = SYS$GETJPIW( 6% BY VALUE, & WILD_PID, , & JPI(0), , , )% SUBEXIT IF I_RESULT = SS$_NOMOREPROC: IF I_RESULT = SS$_NORMAL OR I_RESULT = SS$_SUSPENDED THEN IF C_TYPE <> "ALL" THEN# GOTO SKIP_IT IF L_TERMINAL ;<= 0% END IF CALL HEX(I_PID,PID$) C_PID = PID$" IF I_RESULT = SS$_SUSPENDED THEN IF L_TERMINAL = 0% THEN L_TERMINAL = 1% C_TERMINAL = "S" ELSE* C_TERMINAL = "S " + SEG$(C_TERMINAL, & 1%,L_TERMINAL) L_TERMINAL = L_TERMINAL + 2% END IF C_IMAGNAME = "** Suspended **" L_IMAGNAME = 15% END IF CALL SET_VARIABLES IF L_IMAGNAME > 0% THEN CALL SNIP ELSE C_TRIMMED = "" L_TRIMMED = 0% END IF SUBEXIT END IF$ CAL<L FAIL("MAIN GETJPIW",I_RESULT)% SANITY_COUNTER = SANITY_COUNTER + 1% IF SANITY_COUNTER > 10% THEN PRINT PRINT "Too many JPI failures" CALL SYS$EXIT(1% BY VALUE) END IF PRINT "Process=";C_PRCNAM GOTO SKIP_IT SUBEND11300 SUB CHECK_DIAL(STRING C_DEVICE, LONG RESULT) %INCLUDE "LOOK_COMMON.BAS" DECLARE LONG T(3) DECLARE LONG I_DEVDEPEND DECLARE LONG L_DEVDEPEND DECLARE LONG K1 DECLARE WORD IOSB(3) DECLARE STRING C_HOLD RESULT = 0%% T(0%) == DVI$_DEVDEPEND *2%**16% + 4% T(1%) = LOC(I_DEVDEPEND) T(2%) = LOC(L_DEVDEPEND) T(3%) = 0% C_HOLD = TRM$(C_DEVICE) K1 = POS(C_HOLD,":",1%)" C_HOLD = C_HOLD + ":" IF K1 <= 0%. I% = SYS$GETDVIW(,,C_HOLD,T(0%),,IOSB(0%),,,) IF I <> SS$_NORMAL THEN, CALL FAIL("Sub CHECK_DIAL SYS$GETDVIW",I) PRINT "Device = ";C_HOLD END IF! K1 = I_DEVDEPEND AND TT$M_REMOTE RESULT = 1% IF K1 = TT$M_REMOTE SUBEXIT SUBEND1400 FUNCTION STRING CHOICE! EXTERNAL LONG FUNCTION LIB$>SPAWN PRINT9 PRINT "& : SPAWN to DCL command level. LOGOUT returns"/ PRINT "&DCL_COMMAND : SPAWN a command, return" RE_QUESTION:. PRINT "Redo (Y/N) / (& DCL_COMMAND) "; CALL GET_INPUT(C$) IF SEG$(C$,1%,1%) = "&" THEN L = LEN(C$) C$ = SEG$(C$,2%,L)( I = LIB$SPAWN(C$,,,,,,J,,,,"SPAWN> ",) PRINT PRINT; PRINT "LIB$SPAWN has finished. Back to program control." PRINT GOTO RE_QUESTION END IF C$ = "N" IF C$ = "" IF C$ <> "N" AND C$ <> "Y" TH?EN PRINT PRINT C$= PRINT "The above command is an invalid choice. Try again." GOTO RE_QUESTION END IF CHOICE = C$ EXIT FUNCTION END FUNCTION1500 SUB SET_VARIABLES %INCLUDE "LOOK_COMMON.BAS" IF L_PRCNAM <= 0% THEN C_PRCNAM = " " ELSE' C_PRCNAM = SEG$(C_PRCNAM,1%,L_PRCNAM) END IF IF L_TERMINAL <= 0% THEN C_TERMINAL = " " ELSE' TEMP$ = SEG$(C_TERMINAL,1,L_TERMINAL) C_TERM = TEMP$ IF TEMP$ = MY_TERMINAL THEN C_TERMINAL = "* " + T@EMP$ ELSE( IF SEG$(C_TERMINAL,1%,1%) <> "S" THEN C_TERMINAL = " " + TEMP$ END IF END IF END IF IF L_IMAGNAME <= 0% THEN C_IMAGNAME = "" ELSE- C_IMAGNAME = SEG$(C_IMAGNAME,1%,L_IMAGNAME) END IF IF L_USERNAME <= 0% THEN C_USERNAME = " " ELSE- C_USERNAME = SEG$(C_USERNAME,1%,L_USERNAME) END IF1 IF C_USERNAME = SEG$(C_NULLS,1%,L_USERNAME) THEN C_USERNAME = " " END IF SUBEND1600 SUB PRINT_IT(LONG FLAG) %INCLUDE "LOOK_COMMON.BASA" IF FLAG THEN CALL LIB$ERASE_PAGE(1%,1%) PRINT: PRINT USING F,"TERMINAL ","USER NAME","PROCESS NAME", & " PID ","IMAGE": PRINT USING F,"----------","---------","------------", & "--------","-----" SUBEXIT END IF PRINT USING F, & C_TERMINAL, & C_USERNAME, & C_PRCNAME, & C_PID, & SEG$(C_TRIMMED,1%,L_TRIMMED) SUBEXIT SUBEND1700 SUB GET_INPUT( C$ ) C$ = "" LINPUT #1%, C$ K = POS(C$,"!"B",1%) C$ = SEG$(C$,1%,K-1%) IF K > 0% C$ = TRM$(C$) CALL STR$UPCASE(C$,C$) PRINT SUBEXIT SUBEND 1800 SUB SNIP %INCLUDE "LOOK_COMMON.BAS"AGAIN: K = POS(TEMP$,"]",1%) IF K > 0% THEN% TEMP$ = SEG$(TEMP$,K+1%,L_IMAGNAME) GOTO AGAIN END IF L_TRIMMED = LEN(TEMP$) C_TRIMMED = TEMP$ SUBEXIT SUBENDww­àÌÀRÉ EXTERNAL STRING FUNCTION CHOICE# EXTERNAL LONG FUNCTION SYS$CANCEL! EXTERNAL LONG FUNCTION SYS$EXIT# EXTERNAL LONG FUNCCTION SYS$DELPRC# EXTERNAL LONG FUNCTION SYS$ASCTIM$ EXTERNAL LONG FUNCTION SYS$GETJPIW# EXTERNAL LONG FUNCTION SYS$WAITFR$ EXTERNAL LONG FUNCTION SYS$GETDVIW" EXTERNAL LONG FUNCTION LIB$EXTZV' EXTERNAL LONG FUNCTION LIB$ERASE_PAGE# EXTERNAL LONG CONSTANT SS$_NORMAL' EXTERNAL LONG CONSTANT SS$_NOMOREPROC& EXTERNAL LONG CONSTANT SS$_SUSPENDED$ EXTERNAL LONG CONSTANT JPI$_PRCNAM! EXTERNAL LONG CONSTANT JPI$_PID& EXTERNAL LONG CONSTANT JPI$_IMAGNAME& EXTERNAL LONG CONDSTANT JPI$_TERMINAL& EXTERNAL LONG CONSTANT JPI$_USERNAME! EXTERNAL LONG CONSTANT JPI$_STS% EXTERNAL LONG CONSTANT PCB$V_NETWRK$ EXTERNAL LONG CONSTANT PCB$V_BATCH' EXTERNAL LONG CONSTANT DVI$_DEVDEPEND$ EXTERNAL LONG CONSTANT TT$M_REMOTE DECLARE LONG I, J, K, L, M, N RECORD JPI_SET VARIANT CASE GROUP MAKEUP( WORD LNGTH ! Buffer Length Available WORD CODE ! What To Do) WORD PTR1 ! Pointer to Returned Info.* WORD PTR2 ! Pointer to Returned LengthE END GROUP MAKEUP CASE GROUP TERMINATE LONG QUIT END GROUP TERMINATE END VARIANT END RECORD JPI_SET- COMMON (ENDURE1) STRING C_TERMINAL = 12, & C_PRCNAM = 16, & C_PID = 9, & C_IMAGNAME=128, & C_TRIMMED=128& COMMON (ENDURE2) STRING F = 55, & C_TERM = 10, & C_NOW = 23, & MY_TERMINAL = 10, & C_USERNAME = 12, & DO_DELETE = 1, & & LONG I_PID, WILD_PID, & I_STS, MY_FPID, & & WORD L_TERMINAL, L_PRCNAM, & L_IMAGNAME, L_USERNAME, & L_PID, L_STS, & L_TRIMMED, & JPI_SET JPI(6)% COMMON (ENDURE3) STRING C_NULLS = 25ww­€óHTÉ 1 ! & ! O W N E R & ! $10 ON ERROR GOTO 900014 DECLARE LONG ISTAT715 EXTERNAL LONG FUNCTION SYS$ASCTIM, LIB$GET_FOREIGN&20 MAP (UAFMAP) STRING U_UAFREC = 1412# MAP (UAFMAP) STRING FILL = 4, & STRING U_USERNAME = 31, & BYTE FILL, G & LONG U_UIC, & STRING FILL = 12, & STRING U_ACCOUNT = 32, & STRING U_OWNER = 32, & BYTE FILL, & STRING U_DEVICE = 15, & STRING FILL = 17, & STRING U_DIRECTORY = 31, & BYTE FILL, & STRING FILL = 32, &" STRING U_COMMANDFILE = 63, & BYTE FILL, & STRING U_CLI = 31, & BYTE FILL, & STRING U_TABLES = 31$ MAP (UAFMAP) STRING FILL = 36, & WORD U_MEM, & WORD U_GRP'21 MAP (UAFMHAP) STRING FILL = 340, & STRING PASSWORD = 8, & STRING PASSWORD2 = 8, & WORD W_LGIFAILS, & WORD W_SALT, & BYTE B_ENCRYPT, & BYTE B_ENCRYPT2, & WORD B_PWD_LENGTH, & STRING Q_EXPIRATION = 8, &! STRING Q_PWD_LIFETIME = 8, & STRING Q_PWD_DATE = 8, & STRING Q_PWD2_DATE = 8, & STRING Q_LASTLOGIN_I = 8, & STRING Q_LASTLOGIN_N = 8, & STRING Q_PRIV = 8, & STRING Q_DEF_PRIV = 8, & STRING MIN_CLASS I= 20, & STRING MAX_CLASS = 20, & LONG LOGIN_FLAGS'22 MAP (UAFMAP) STRING FILL = 472, &% STRING B_NETWORK_ACCESS_P = 3, &% STRING B_NETWORK_ACCESS_S = 3, &# STRING B_BATCH_ACCESS_P = 3, &# STRING B_BATCH_ACCESS_S = 3, &# STRING B_LOCAL_ACCESS_P = 3, &# STRING B_LOCAL_ACCESS_S = 3, &$ STRING B_DIALUP_ACCESS_P = 3, &$ STRING B_DIALUP_ACCESS_S = 3, &$ STRING B_REMOTE_ACCESS_P = 3, &$ STRING B_REMOTE_ACCESS_S = 3, & STRING FILLJ = 13, & BYTE B_PRIMEDAYS, & BYTE B_PRI, & BYTE B_QUEPRI, & WORD W_MAXJOBS, & WORD W_MAXACCTJOBS, & WORD W_MAXDETACH, & WORD W_PRCCNT, & WORD W_BIOLM, & WORD W_DIOLM, & WORD W_TQCNT, & WORD W_ASTLM, & WORD W_ENQLM, & WORD W_FILLM, & WORD W_SHRFILLM, & LONG L_WSQUOTA, & LONG L_DFWSCNT, & LONG L_WSEXTENT, & LONG L_PGFLQUOTA, & LONG L_CPUTIM, & LONG L_KBYTLM, & LONG L_PBYTLM, & LONG L_JTQUOTA, & WORD W_PROXY_LIM, & WORD W_PROXIES, & WORD W_ACCOUNT_LIM, & WORD W_ACCOUNTS% MAP (UAFMAP) STRING FILL = 578, & STRING S_CPUTIM = 8$23 MAP (LOGMAP) LONG LAST_DATE, & LONG LAST_TIME" MAP (LOGMAP) STRING LASTLOGIN = 825 MAP (WRKMAP) LONG UIC MAP (WRKMAP) WORD UIC_MEM, & WORD UIC_GRP# MAP (X) STRING LOGIN_I = 23, & STRING LOGIN_N = 23, & STRING USERNAME = 31, & L STRING EXPIRES = 23, & STRING PWDLIFE = 23, & STRING PWDCHNG = 23, & STRING CPUTIM = 11, & STRING QUAD_TIME = 1630 ISTAT = LIB$GET_FOREIGN(Z$) EDIT_OUT% = 2% + 4% + 128% Z$ = EDIT$(Z$,EDIT_OUT%)*40 OPEN "SYSUAF" FOR INPUT AS FILE 1, &% ORGANIZATION INDEXED VARIABLE, & ACCESS READ, & ALLOW MODIFY, & MAP UAFMAP, &% DEFAULTNAME "SYS$SYSTEM:.DAT", & RECORDTYPE NONE 100 WHILE -1 110 GET #1%120 OWNER$ = EDIT$(U_OWNER,EDIMT_OUT%) IF Z$ = "" THEN GOTO 125 ELSE IF INSTR(1%,OWNER$,Z$) THEN GOTO 125 ELSE GOTO 198 END IF END IF'125 USER$ = EDIT$(U_USERNAME,EDIT_OUT%)$ DEVICE$ = EDIT$(U_DEVICE,EDIT_OUT%)' DIRECT$ = EDIT$(U_DIRECTORY,EDIT_OUT%)(130 PRINT USER$, OWNER$, DEVICE$;DIRECT$198 NEXT900 GOTO 327678999 ! & ! E R R O R T R A P & ! $&9000 IF ERR = 11 ! On End of File & THEN ! Then... &" RESUME 900 ! Go Close the File9098 R NESUME 3250032499 ! &# ! E R R O R M E S S A G E S & ! $32500 E% = ERR &.\ E$ = SYS(CHR$(6%) + CHR$(9%) + CHR$(E%)) &#\ E$ = CVT$$(RIGHT(E$,3%),4%) &"\ E$ = E$ + " on line" + NUM$(ERL)32590 PRINT &>\ PRINT "**************************************************" &>\ PRINT "* *" &>\ PRINT "* JOB ABORTED *" &>\ PRINT "* *" &O>\ PRINT "*"; E$; TAB(49%); "*" &>\ PRINT "* *" &<\ PRINT "**************************************************" 32767 ENDww­ z¹kp”1 ! ! P W _ M A I N T !5 OPTION TYPE=EXPLICIT10 ON ERROR GOTO 9000(20 EXTERNAL LONG FUNCTION LIB$FIND_FILE& EXTERNAL LONG FUNCTION LIB$GET_INPUT& EXTERNAL LONG FUNCTION STR$TRANSLATE" EXTERNAL LONG CONSTANT SS$_NORMAL DECLARE LONG ISTAT DECLARE LONG F_LPEN DECLARE WORD ITS_AN_UPDATE DECLARE WORD ILEN DECLARE WORD E% DECLARE STRING E$ DECLARE STRING FILENAME DECLARE STRING FRET DECLARE STRING TRANSL_FR DECLARE STRING TRANSL_TO DECLARE STRING USER DECLARE STRING PASS MAP (X) STRING PW_INDEX = 256$ MAP (X) STRING USERNAME = 31, & PASSWORD = 31, & PRIVS = 8, & LOGGEDON = 1, & LOGDNODS = 20, & EXCLNODS = 20, & TMP_NODS = 20$ MAP (X) STRING USERPASS = 62, Q & LONG PRIVS_1, & LONG PRIVS_250 FILENAME = "PASS:PW.IDX"!70 OPEN FILENAME AS FILE 1, &" ORGANIZATION INDEXED FIXED, & RECORDSIZE 256, & PRIMARY KEY USERPASS, & ALLOW MODIFY, & MAP X80 INPUT "Username ";USER" GOTO 32767 IF EDIT$(USER,2%) = "" INPUT "Password ";PASS" GOTO 32767 IF EDIT$(PASS,2%) = ""! USERNAME = USER + STRING$(32,32)! PASSWORD = PASS + STRING$(32,32) ITS_AN_UPDATE = -1% LOGGEDON = CHR$(0%) LOGDNODS = STRINGR$(20%,32%) EXCLNODS = STRING$(20%,32%)82 GET #1, KEY #0% EQ USERPASS PRINT "Bit Value 1 ";PRIVS_1 PRINT "Bit Value 2 ";PRIVS_285 INPUT "Bit Value 1 ";PRIVS_1 INPUT "Bit Value 2 ";PRIVS_290 IF ITS_AN_UPDATE THEN PRINT "Updating" UPDATE #1 ELSE PUT #1 END IF 900 CLOSE 1998 GOTO 327678999 ! ! E R R O R T R A P !$9000 IF ERR = 11 ! On End of File THEN ! Then..." RESUME 900 ! Go Close the File END IF&9010 IF ERL = 82 ! If Error on ReSad THEN ! Then... PRINT "New Record" ! ) ITS_AN_UPDATE = 0 ! It aint an update," RESUME 85 ! Must be new record END IF9098 RESUME 3250032499 ! ! E R R O R M E S S A G E S !32500 E% = ERR) E$ = SYS(CHR$(6%) + CHR$(9%) + CHR$(E%)) E$ = CVT$$(RIGHT(E$,3%),4%)! E$ = E$ + " on line" + NUM$(ERL) 32590 PRINT; PRINT "**************************************************"; PRINT "* *"; PRINT "* JOB ATBORTED *"; PRINT "* *"; PRINT "*"; E$; TAB(49%); "*"; PRINT "* *"; PRINT "**************************************************" 32767 ENDww­À¢pp”1 ! ! P W _ M A I N T !5 OPTION TYPE=EXPLICIT10 ON ERROR GOTO 9000(20 EXTERNAL LONG FUNCTION LIB$GET_INPUT" EXTERNAL LONG CONSTANT SS$_NORMAL DECLARE LONG ISTAT DECLARE LONUG F_LEN DECLARE WORD ILEN DECLARE WORD E% DECLARE STRING E$ DECLARE STRING FILENAME DECLARE STRING FRET DECLARE STRING QUOTE MAP (X) STRING PW_INDEX = 256$ MAP (X) STRING USERNAME = 31, & STRING PASSWORD = 31, & STRING PRIVS = 8, & STRING LOGGDON = 1, & STRING LOGDNODS = 20, & STRING EXCLNODS = 20, & STRING TMP_NODS = 20$ MAP (X) STRING USERPASS = 62, & LONG PRIVS_1, & LONG PRIVS_2$ MAP (X) STRING FILL = 3V1, & STRING EMPNO = 4 FILENAME = "PASS:PW.IDX"*70 OPEN FILENAME FOR INPUT AS FILE 1, &" ORGANIZATION INDEXED FIXED, & RECORDSIZE 256, & PRIMARY KEY USERPASS, & ACCESS READ, & ALLOW MODIFY, & MAP X QUOTE = CHR$(34) 100 WHILE -1 110 GET #1*120 PRINT "Username ";QUOTE;USERNAME;QUOTE' PRINT "Password ";QUOTE;PASSWORD;QUOTE$ PRINT "Employee ";QUOTE;EMPNO;QUOTE0121 PRINT "LoggedIn ";QUOTE;ASCII(LOGGDON);QUOTE*122 PRINT "Nodes On ";QUWOTE;LOGDNODS;QUOTE' PRINT "Exclude ";QUOTE;EXCLNODS;QUOTE' PRINT "Tmp Node ";QUOTE;TMP_NODS;QUOTE PRINT "Privs ";PRIVS_1 PRINT "Privs ";PRIVS_2198 NEXT 900 CLOSE 1998 GOTO 327678999 ! ! E R R O R T R A P !$9000 IF ERR = 11 ! On End of File THEN ! Then..." RESUME 900 ! Go Close the File END IF+9010 IF ERL = 121 ! Bad number of logins THEN ! then... PRINT "Error on LOGINS Number" RESUME 122 END IF9098 RESUME 3250032499 ! ! E R R XO R M E S S A G E S !32500 E% = ERR) E$ = SYS(CHR$(6%) + CHR$(9%) + CHR$(E%)) E$ = CVT$$(RIGHT(E$,3%),4%)! E$ = E$ + " on line" + NUM$(ERL) 32590 PRINT; PRINT "**************************************************"; PRINT "* *"; PRINT "* JOB ABORTED *"; PRINT "* *"; PRINT "*"; E$; TAB(49%); "*"; PRINT "* Y *"; PRINT "**************************************************" 32767 ENDww­ aWVÉ00001 ! & ! U S E R D I R & ! $00010 ON ERROR GOTO 9000700015 EXTERNAL LONG FUNCTION LIB$SPAWN, LIB$FIND_FILE00016 MAP (X) JOB.NO$ = 8%.00020 MAP (UAFMAP) STRING U_UAFREC = 1412 &$\ MAP (UAFMAP) STRING FILL = 4, & STRING U_USERNAME = 31, & BYTE FILL, & LONG U_UIC, & STRING FILL = 12, & STRING U_ZACCOUNT = 32, & STRING U_OWNER = 32, & BYTE FILL, & STRING U_DEVICE = 15, & STRING FILL = 17, & STRING U_DIRECTORY = 31, & BYTE FILL, & STRING FILL = 32, &" STRING U_COMMANDFILE = 64, & STRING U_CLI = 32, & STRING U_TABLES = 32 &%\ MAP (UAFMAP) STRING FILL = 36, & WORD U_MEM, & WORD U_GRP!00025 MAP (WRKMAP) LONG UIC &!\ MAP (WRKMAP) WORD UIC_MEM, & WORD UIC_GRP( MAP (DIRNAM) STRING FILESPE[C = 31, & STRING RSLTSPEC = 31, & LONG CONTEXT700026 INPUT "Print on Printer, or Screen (P,S)";PS$ &\ GOTO 26 IF PS$ = "" &%\ PS$ = LEFT(EDIT$(PS$,32%),1%) &)\ GOTO 26 IF INSTR(1%,"PS",PS$) = 0% &$\ TYPE.ON.SCREEN% = -1% IF PS$ = "S"#00027 IF NOT TYPE.ON.SCREEN% & THEN & WHILE FORM$ = "" &)\ INPUT "Form To Print On <1>";FORM$ &!\ FORM$ = "1" IF FORM$ = "" &\ NEXT-00030 OPEN "SYSUAF" FOR INPUT AS FILE 1, &% ORGANIZATI\ON INDEXED VARIABLE, & ACCESS READ, & ALLOW MODIFY, & MAP UAFMAP, &% DEFAULTNAME "SYS$SYSTEM:.DAT", & RECORDTYPE NONE>00040 OPEN "USERDIR.LIS" FOR OUTPUT AS FILE 2, RECORDSIZE 132%00100 WHILE -1 00110 GET #1000115 CALL LIB$SYS_FAO(" [!OW,!OW] ",,Z0$, & U_GRP BY VALUE, & U_MEM BY VALUE)*00120 USER$ = EDIT$(U_USERNAME,128%) &(\ DEVICE$ = EDIT$(U_DEVICE,4%+128%) &&\ DIRECT$ = EDIT$(U_DIRECTORY,4%+128%)00130 700180 PRINT #2, USER$;TA]B(30%);Z0$;" ";DEVICE$;DIRECT$ 00198 NEXT00899 ! & ! C L O S E F I L E & ! $00900 CLOSE 1,200999 ! &! ! S O R T T H E F I L E & ! $01000 CALL GETPID(JOB.NO$)(01010 TMPFIL$ = "UIC" + JOB.NO$ + ".TMP")01020 OPEN TMPFIL$ FOR OUTPUT AS FILE 12%(01025 PRINT #12%, "$ SET NOVERIFY" &#\ PRINT #12%, "$ PURGE USERDIR.LIS"#01040 IF NOT TYPE.ON.SCREEN% & THEN &1 PRINT #12%, "$ PRINT/FORM=";FORM$;" USERDIR" & ELSE ^ && PRINT #12%, "$ SET TERM/WI=132" &$\ PRINT #12%, "$ TYPE USERDIR" &!\ PRINT #12%, "$ SET TERM/WI=80"01050 CLOSE 12$01060 ISTAT = LIB$SPAWN("@"+TMPFIL$)01070 IF ISTAT <> 1% & THEN & PRINT "Error in Spawn to Sort"01098 GOTO 3276708999 ! & ! E R R O R T R A P & ! $'09000 IF ERR = 11 ! On End of File & THEN ! Then... &" RESUME 900 ! Go Close the File09098 RESUME 3250032499 ! &# ! E R R O R M E S S A G E S _ & ! $32500 E% = ERR &.\ E$ = SYS(CHR$(6%) + CHR$(9%) + CHR$(E%)) &#\ E$ = CVT$$(RIGHT(E$,3%),4%) &"\ E$ = E$ + " on line" + NUM$(ERL)32590 PRINT &>\ PRINT "**************************************************" &>\ PRINT "* *" &>\ PRINT "* JOB ABORTED *" &>\ PRINT "* *" &>\ PRINT "*"; E$; TAB(49%); "*" &`>\ PRINT "* *" &<\ PRINT "**************************************************" 32767 ENDww­ ÕXÉ00001 ! & ! U S E R L I S T & ! $00010 ON ERROR GOTO 9000.00020 MAP (UAFMAP) STRING U_UAFREC = 1412 &$\ MAP (UAFMAP) STRING FILL = 4, & STRING U_USERNAME = 31, & BYTE FILL, & LONG U_UIC, & STRING FILL = 12, & STRING U_ACCOUNT = 32, & BYTE FILL, & STRING U_aOWNER = 31 &%\ MAP (UAFMAP) STRING FILL = 36, & WORD U_MEM, & WORD U_GRP-00030 OPEN "SYSUAF" FOR INPUT AS FILE 1, &% ORGANIZATION INDEXED VARIABLE, & ACCESS READ, & ALLOW MODIFY, & MAP UAFMAP, &% DEFAULTNAME "SYS$SYSTEM:.DAT", & RECORDTYPE NONE.00040 OPEN "USERLIST.LIS" FOR OUTPUT AS FILE 200100 WHILE -1 00110 GET #100115 GOTO 110 IF U_GRP = 1%00125 USER$ = EDIT$(U_USERNAME,128%)00130 PRINT #2, USER$ 00198 NEXT00899 ! b & ! C L O S E F I L E & ! $00900 CLOSE 1,200998 GOTO 3276700999 ! &% ! D E T E R M I N E I F W E &! ! S K I P T H I S O N E & ! $01000 SKIP.IT% = 0%/01010 SKIP.IT% = -1% IF USER$ = "BUSINESS" &&\ SKIP.IT% = -1% IF USER$ = "CAI" &)\ SKIP.IT% = -1% IF USER$ = "CENTER" &+\ SKIP.IT% = -1% IF USER$ = "CLINICAL" &*\ SKIP.IT% = -1% IF USER$ = "CSTORES" &(\ SKIP.IT% = -1% IF USER$ = "DECUS" &*\ SKIP.IT% = -1% IF cUSER$ = "DEFAULT" &)\ SKIP.IT% = -1% IF USER$ = "JLOOSE" &-\ SKIP.IT% = -1% IF USER$ = "PRECLINICAL" &.\ SKIP.IT% = -1% IF USER$ = "PRINT_SERVER" &&\ SKIP.IT% = -1% IF USER$ = "REG" &*\ SKIP.IT% = -1% IF USER$ = "STUDENT" &+\ SKIP.IT% = -1% IF USER$ = "STUDENT2" &*\ SKIP.IT% = -1% IF USER$ = "SYSSOFT" &+\ SKIP.IT% = -1% IF USER$ = "VICEPRES" &&\ SKIP.IT% = -1% IF USER$ = "SBR" &\ SKIP.IT% = -1% IF OWNER$ = "" 01098 RETURN08999 ! & ! E R R O R d T R A P & ! $'09000 IF ERR = 11 ! On End of File & THEN ! Then... &" RESUME 900 ! Go Close the File09098 RESUME 3250032499 ! &# ! E R R O R M E S S A G E S & ! $32500 E% = ERR &.\ E$ = SYS(CHR$(6%) + CHR$(9%) + CHR$(E%)) &#\ E$ = CVT$$(RIGHT(E$,3%),4%) &"\ E$ = E$ + " on line" + NUM$(ERL)32590 PRINT &>\ PRINT "**************************************************" &>\ PRINT "*  *" &>\ PRINT "* JOB ABORTED *" &>\ PRINT "* *" &>\ PRINT "*"; E$; TAB(49%); "*" &>\ PRINT "* *" &<\ PRINT "**************************************************" 32767 ENDwwf­Ày~⤠1 ! & ! A M O R T . B A S & ! $.5 ON ERROR GOTO 19000 ! STANDARD ON ERROR & !!10 EXTERNAL LONG FUNCTION & SMG$CREATE_PASTEBOARD, &# SMG$CREATE_VIRTUAL_DISPLAY, &$ SMG$CREATE_VIRTUAL_KEYBOARD, & SMG$ERASE_DISPLAY, & SMG$ERASE_LINE, & SMG$ERASE_PASTEBOARD, & SMG$HOME_CURSOR, &" SMG$PASTE_VIRTUAL_DISPLAY, & SMG$PUT_CHARS, & SMG$READ_FROM_DISPLAY, & SMG$READ_STgRING, & SMG$RETURN_CURSOR_POS, & SMG$SET_CURSOR_ABS, & SMG$SET_PHYSICAL_CURSOR, & UTL_FILE_SCAN, & LIB$SPAWN!15 EXTERNAL LONG CONSTANT & SS$_NORMAL, & SS$_CANCEL, & SMG$_INVPAS_ID, & SMG$_INVDIS_ID, & SMG$_INVCOL, & SMG$_INVROW, & SMG$_EOF, & SMG$_INVKBD_ID, & SMG$_INVKTB_ID, & SMG$_ILLBATFNC, & SMG$_INVMAXLEN, & SMG$_WRONUMARG, & LhIB$_INVSTRDES, & LIB$_INSVIRMEM<20 DECLARE LONG DISPLAY1, ROWS, COLS, BORDER, ISTAT, NEW_PID?21 DECLARE LONG ROW, COL, HEIGHT, WIDTH, JD, JA, HOME, KEYBOARD22 DECLARE STRING RET_STR40 BORDER = 0 &\ ROWS = 24 &\ COLS = 80 &\ HOME = 1 &\ CR$ = CHR$(13%) &\ BELL$ = CHR$(7%) &+\ ERRLINE$ = "Error calling routine " &8\ ISTAT = SMG$CREATE_PASTEBOARD(NEW_PID,,ROWS,COLS,) &$\ ISLIN = 40 ! The line number &!\ GOTO 200 IF ISTA iT <> 1% &>\ ISTAT = SMG$CREATE_VIRTUAL_DISPLAY(ROWS,COLS,DISPLAY1,,,) &!\ GOTO 205 IF ISTAT <> 1% &6\ ISTAT = SMG$CREATE_VIRTUAL_KEYBOARD(KEYBOARD,,,) &\ GOTO 255 IF ISTAT <> 1%645 CALL SMG$GET_DISPLAY_ATTR(DISPLAY1,HEIGHT,WIDTH,,,)50 DIM INFO$(75%,3%), &+ AMT(75%,5%) ! ARRAYS FOR STORING INFO &/\ FOR I%=1% TO 75% ! LOOP TO EXTEND STRING &2\ INFO$(I%,1%)=SPACE$(20%) ! ...ARRAY ELEMENTS &!\ INFO$(I%,2%)=SPACE$(4%) &!\ INFO$(I%,3%)=SPACE$(9%) j&\ NEXT I% & !7100 OPEN 'TT:' AS FILE 1% ! OPEN KEYBOARD ON ONE &, \ OPEN 'AMORT.LIS' ! OPEN LISTING FILE &1 FOR OUTPUT AS FILE 8% ! ...ON CHANNEL EIGHT &$ \ M0$='##>' ! MASK FOR SCREEN &2 \ M1$= SPACE$(7%) + '###' + ! MASK FOR REPORT & SPACE$(7%) + '###.##' + &" SPACE$(7%) + '##,###.##' + &" SPACE$(7%) + '##,###.##' + & SPACE$(7%) + '##,###.##' & \ M2$='$##,###.##' &, \ HEADER$='* Amortization Schedule *' &/ \ ERRMS$=CHR$k(7%)+'?ERR?' ! ERROR MESSAGE &7 \ MESS$='End current page' ! MESSAGE FOR DATA ENTRY &$ \ NOT.DONE%=-1% ! SET SWITCH &- \ PAGE%,LN.ITM%=1% ! INITALIZE COUNTERS &# \ GOSUB 10000 ! DRAW MASQUE &% \ GOSUB 1000 ! ENTER LOAN DATA &( \ GOSUB 2000 ! GENERATE PRINT OUT &! \ GOTO 9000 ! GOTO END OF JOB199 ! & ! S M G $ E R R O R S & ! $E200 PRINT ERRLINE$;"SMG$CREATE_PASTEBOARD";ISTAT;" ON LINE ";ISLIN & \ GOTO 32767I205 PRINT ERRLINE$ l;"SMG$CREATE_VIRTUAL_DISPLAY";ISTAT; "ON LINE ";ISLIN & \ GOTO 32767@210 PRINT ERRLINE$;"SMG$ERASE_DISPLAY";ISTAT;"ON LINE ";ISLIN & \ GOTO 9000F215 PRINT ERRLINE$;"SMG$PASTE_VIRTUAL_DISPLAY";ISTAT;"ON LINE";ISLIN & \ GOTO 9000@220 PRINT ERRLINE$;"SMG$SET_CURSOR_ABS";ISTAT;"ON LINE";ISLIN & \ GOTO 9000C225 PRINT ERRLINE$;"SMG$RETURN_CURSOR_POS";ISTAT;"ON LINE";ISLIN & \ GOTO 9000=230 PRINT ERRLINE$;"SMG$ERASE_LINE";ISTAT;"ON LINE";ISLIN & \ GOTO 9000B235 PRINT ERRLINE$;"SMG$ER mASE_PASTEBOARD";ISTAT;"ON LINE";ISLIN & \ GOTO 9000<240 PRINT ERRLINE$;"SMG$PUT_CHARS";ISTAT;"ON LINE";ISLIN & \ GOTO 9000>245 PRINT ERRLINE$;"SMG$HOME_CURSOR";ISTAT;"ON LINE";ISLIN & \ GOTO 9000E250 PRINT ERRLINE$;"SMG$SET_PHYSICAL_CURSOR";ISTAT;"ON LINE";ISLIN & \ GOTO 9000H255 PRINT ERRLINE$;"SMG$CREATE_VIRTUAL_KEYBOARD";ISTAT;"ON LINE";ISLIN & \ GOTO 32767>260 PRINT ERRLINE$;"SMG$READ_STRING";ISTAT;"ON LINE";ISLIN & \ GOTO 9000C265 PRINT ERRLINE$;"SMG$READ_FROM_DISPLAY";InSTAT;"ON LINE";ISLIN & \ GOTO 90001000 ! & ! LOOP TO GET PAGES & ! &; WHILE NOT.DONE% AND PAGE% <=5% ! MAXIMUM OF FIVE PAGES &\ ROW = 5 &\ COL = 1 &;\ ISTAT = SMG$ERASE_DISPLAY(DISPLAY1,ROW,COL,ROWS,COLS) &-\ ISLIN = 1000 ! Set program line number &!\ GOTO 210 IF ISTAT <> 1% &\ COL = 70 &<\ PAGE$ = "Page " + NUM1$(PAGE%) ! Set Page Number String &<\ X = FNPUTCHARS(HOME,COL,PAGE$) ! Print New Page Number &B\ ISTA oT = SMG$PASTE_VIRTUAL_DISPLAY(DISPLAY1,NEW_PID,HOME,HOME) &!\ GOTO 215 IF ISTAT <> 1% &8 \ L.STRT%=(PAGE%-1%)*15%+1% ! LINE ITEM TO START WITH &/ \ L.STP%=PAGE%*15% ! LINE ITEM TO END WITH &, \ GOSUB 1100 ! GOSUB TO GET INFORMATION &. \ GOSUB 1200 ! GOSUB TO MAKE ANY CHANGES &7 UNLESS LN.ITM%=L.STRT% ! ...UNLESS THEY ENDED ON &% ! ...THE FIRST LINE OF SCREEN &- \ PAGE%=PAGE%+1% ! INCREMENT PAGE COUNT & \ NEXT ! AND REPEAT & \ RETURN & !1100 !p &0 ! LOOP TO GET (MAX) 15 LINE ITEMS PER PAGE & ! &I WHILE NOT.DONE% AND LN.ITM% <= L.STP% ! MAX FIFTEEN ENTRIES PER PAGE &; \ CD%=LN.ITM%-(PAGE%-1%)*15%+4% ! ROW POSITION ON SCREEN &' \ GOSUB 1300 ! GET LINE ITEM INFO &D \ LN.ITM%=LN.ITM%+1% IF NOT.DONE% ! ...IF NOT DONE THEN INCR CNTR & \ NEXT ! AND REPEAT & \ RETURN & !1200 ! &' ! MAKE CHANGES TO CURRENT SCREEN & ! & MESS$='End loan entry' &3 IF NOT.DONE%=0% qOR LN.ITM%=75% ! LAST SCREEN? &2\ SAVE.ITM%=LN.ITM% ! RETAIN LINE ITEM COUNTER &;\ X = FNPUTCHARS(24%,1%,CHR$(7%)+MESS$) ! Print Message &\ YN%=-1% &)\ WHILE YN% ! WHILE THERE IS A VALUE &?\ YN%=FNANYCHG%(L.STRT%,SAVE.ITM%-1%) ! ANY LINES TO CHANGE? &;\ IF YN% THEN LN.ITM%=YN% ! IF SO, SET LINE ITEM NUMBER &@\ CD%=LN.ITM%-(PAGE%-1%)*15%+4% ! FIGURE CURSOR DOWN POSITION &\ X$ = FNC$(CD%,1%) ! &*\ X$ = FNC2$ ! Clear line from screen &$\ LSET INFO$(LN.ITM%,r1%) = "" &$\ LSET INFO$(LN.ITM%,2%) = "" &$\ LSET INFO$(LN.ITM%,3%) = "" &/\ AMT(LN.ITM%,G%) = 0.0 FOR G% = 0% TO 5% &"\ GOSUB 1300 ! Make Changes & \ GOTO 12091208 GOTO 12101209 NEXT ! AND REPEAT61210 LN.ITM%=SAVE.ITM% ! RESET LINE ITEM COUNTER &. \ SAVE.ITM%=0% ! RESET SAVE ITEM TO ZERO & \ IF NOT.DONE% & THEN &2 X = FNPUTCHARS(21%,35%,CHR$(7%)+"New Page?") &( \ YN$=FNKB.GET$(21%,45%,1%,1%,4%) &\ X$ = FNC$(21%,35%) &s\ X$ = FNC2$ & \ NOT.DONE%=0% IF YN$='N'1220 RETURN ! AND OUT & !1300 ! &2 ! GET INFORMATION ABOUT ONE LOAN FROM SCREEN & ! &"\ A$ = FORMAT$(LN.ITM%,M0$) &\ X = FNPUTCHARS(CD%,1%,A$)+1310 A$ = FNKB.GET$(CD%,5%,21%,1%,5%) &/\ IF A$=STRING$(LEN(A$),48%) AND SAVE.ITM% & THEN & X$ = FNC$(CD%,5%) &\ X$ = FNC2$ &B\ X = FNPUTCHARS(CD%,5%,BELL$+"Entry required while changing!") &\ SLEEP 4% &\ X$ = FNtC$(CD%,5%) &\ X$ = FNC2$ & \ GOTO 131091312 IF A$ = STRING$(LEN(A$),48%) AND SAVE.ITM% = 0% & THEN & X$ = FNC$(CD%,1%) &\ X$ = FNC2$ &\ NOT.DONE% = 0% & \ RETURN%1314 LSET INFO$(LN.ITM%,1%)=A$ & !+1315 A$ = FNKB.GET$(CD%,29%,9%,2%,5%) &1\ GOTO 1300 IF LEFT(EDIT$(A$,32%),2%) = "/B" &\ ON ERROR GOTO 1316 &\ X = VAL(A$) &$\ LSET INFO$(LN.ITM%,3%) = A$ & \ GOTO 13201316 RESUME 1317 1317 ON ERuROR GOTO 19000 &'\ X = FNPUTCHARS(CD%,29%,ERRMS$) &\ SLEEP 3% & \ GOTO 1315 1320 !>>>>>>>> LOAN TYPE & ! &' A$ = FNKB.GET$(CD%,41%,4%,1%,5%) &1\ GOTO 1315 IF LEFT(EDIT$(A$,32%),2%) = "/B" &"\ LSET INFO$(LN.ITM%,2%)=A$ & !$1330 !>>>>>>>> INTEREST RATE & ! &) A$ = FNKB.GET$(CD%,48%,4%,3%,202%) &1\ GOTO 1320 IF LEFT(EDIT$(A$,32%),2%) = "/B" &\ IF VAL(A$) <= 0.0 & THEN && X = FNPUTCHARS(CD%,48%,EvRRMS$) &\ SLEEP 3% & \ GOTO 1330$1332 AMT(LN.ITM%,1%)=VAL(A$) & ! 1340 !>>>>>>>> PRINCIPAL & ! &' A$=FNKB.GET$(CD%,57%,7%,3%,202%) &1\ GOTO 1330 IF LEFT(EDIT$(A$,32%),2%) = "/B" &\ IF VAL(A$) <= 0.0 & THEN && X = FNPUTCHARS(CD%,57%,ERRMS$) &\ SLEEP 3% & \ GOTO 1340$1342 AMT(LN.ITM%,2%)=VAL(A$) & !%1350 ! >>>>>>> NUMBER OF YEARS & ! && A$=FNKB.GET$(CD%,70%,2%,0%,1%) &1\ GOTO 1340 wIF LEFT(EDIT$(A$,32%),2%) = "/B" &!\ GOTO 1370 IF VAL(A$)=0.0 &\ IF VAL(A$) < 0.0 & THEN && X = FNPUTCHARS(CD%,70%,ERRMS$) &\ SLEEP 3% &\ GOTO 1350 & !$1352 AMT(LN.ITM%,3%)=VAL(A$) &\ AMT(LN.ITM%,0%)=1 & !01360 ! >>>>>>> NUMBER OF PAYMENTS PER YEAR & ! && A$=FNKB.GET$(CD%,76%,2%,1%,1%) &1\ GOTO 1350 IF LEFT(EDIT$(A$,32%),2%) = "/B" &'\ IF VAL(A$) < 1 OR VAL(A$) > 12 & THEN && X = FNxPUTCHARS(CD%,76%,ERRMS$) &\ SLEEP 3% & \ GOTO 1360$1362 AMT(LN.ITM%,4%)=VAL(A$) &\ GOTO 1399 & !1370 ! &/ ! HERE TO SPECIFY MONTHLY PAYMENT INSTEAD & ! OF LOAN PERIOD. & ! & SAVED% = 0%1371 AMT(LN.ITM%,0%)=2 &\ ISLIN = 1371 &F\ ISTAT = SMG$READ_FROM_DISPLAY(DISPLAY1,SAVLIN$,,CD%) IF NOT SAVED% &!\ GOTO 265 IF ISTAT <> 1% &\ X$ = FNC$(CD%,55%) &\ X$ = FNC2$ &\ ISLIN = 1371.8 &A\ yISTAT = SMG$READ_STRING(KEYBOARD,A$,"Desired Monthly Pymt?", & "6"L,,,,,,DISPLAY1,) &&\ GOTO 9000 IF ISTAT = SMG$_EOF &!\ GOTO 260 IF ISTAT <> 1% &1\ GOTO 1360 IF LEFT(EDIT$(A$,32%),2%) = "/B" &\ IF INSTR(1%,A$,".") & THEN & SAVED% = -1% & \ GOTO 13711373 IF VAL(A$) < 1.00 & THEN && X = FNPUTCHARS(CD%,73%,ERRMS$) &\ SAVED% = -1% & \ GOTO 1371%1374 AMT(LN.ITM%,5%) = VAL(A$) & !1375 ! & z IT=AMT(LN.ITM%,1%)*1E-4 &!\ PA=AMT(LN.ITM%,5%)*1E-2 &\ PR=AMT(LN.ITM%,2%)*1E-221376 X = FNPUTCHARS(CD%,1%,LEFT(SAVLIN$,54%)) &"\ A$ = FORMAT$(PA,"###.##") &\ X = FNPUTCHARS(CD%,74%,A$)>1380 IT1=FIX(LOG(1.-((PR*IT)/(12.*PA)))/LOG(12./(12.+IT))) & \ AMT(LN.ITM%,3%)=IT1/12 &\ AMT(LN.ITM%,4%)=12% &/\ ITMP%=AMT(LN.ITM%,3%)*AMT(LN.ITM%,4%)+1% &\ IF ITMP% > 120% & THEN &% X = FNPUTCHARS(21%,10%,BELL$+ &0 "Calculated payback e{xceeds ten years (" + &* "total of"+NUM$(ITMP%)+"payments)") &\ X$ = FNC$(22%,52%) &B\ ISTAT = SMG$READ_STRING(KEYBOARD,XT$,"Accept this schedule?", & "6"L,,,,,,DISPLAY1,) &\ ISLIN = 1380 &&\ GOTO 9000 IF ISTAT = SMG$_EOF &!\ GOTO 260 IF ISTAT <> 1% &\ X$ = FNC$(21%,1%) &\ X$ = FNC2$ &&\ XT$ = EDIT$(LEFT(XT$,1%),32%) &\ IF XT$ = "N" & THEN & X$ = FNC$(CD%,1%) &\ X$ = FNC2$ & \ GOTO 1300|1382 GOTO 1399M1390 X=FNPUTCHARS(21%,19%,BELL$+"Unable to calculate at designated payback")&\ SLEEP 4% &\ X$ = FNC$(CD%,1%) &\ X$ = FNC2$ & \ GOTO 13001399 RETURN & !2000 ! & ! PRINT REPORTS & ! &" CALL LIB$ERASE_PAGE(1%,1%) &2\ X = FNPUTCHARS(1%,1%,"Loan Entry Complete") &+\ X = FNPUTCHARS(2%,1%,"Number of copies?"))2010 A$=FNKB.GET$(2%,19%,1%,1%,1%) &\ NCOPY%=VAL(A$) &&\ IF NCOPY% < 1% OR NCOP}Y% > 5% & THEN &% X = FNPUTCHARS(2%,19%,ERRMS$) &\ SLEEP 3% &\ X$ = FNC$(2%,19%) &\ X$ = FNC2$ & \ GOTO 2010.2020 X = FNPUTCHARS(3%,1%,"Paper Type?") &(\ A$ = FNKB.GET$(3%,13%,1%,1%,1%) &#\ IF INSTR(1%,'1\3\8',A$)=0% & THEN &% X = FNPUTCHARS(3%,13%,ERRMS$) &\ SLEEP 3% &\ X$ = FNC$(3%,13%) &\ X$ = FNC2$ & \ GOTO 2020"2030 PAPER.TYPE% = VAL(A$) & \ PRINT #1% &/~ \ PRINT #1%, 'Begin schedule generation'; & TAB(50%); TIME$(0%) & \ PRT.HDR$=HEADER$ & \ HEADER$='' &/ \ HEADER$=HEADER$+MID(PRT.HDR$,I%,1%)+' ' &" FOR I%=1% TO LEN(PRT.HDR$) &5 \ LN.ITM%=LN.ITM%-1% ! GET OUT OF ROUTINE 1 HIGH & !2050 ! & ! LOOP TO PRINT SCHEDULE & ! &3 FOR I%=1% TO LN.ITM% ! REPEAT FOR EACH LOAN & \ NPAY%,PAGE%=0% & \ LN.CNT%=66% &+ \ T%=AMT(I%,0%) ! TYPE OF CALCULATION & \ GOSUB 2100 & \ NEXT I% ! AND REPEAT2060 RETURN & !2100 ! &$ AMT(I%,1%)=AMT(I%,1%)*1E-4 &" \ A, PRINC=AMT(I%,2%)*1E-2 & \ J=AMT(I%,1%) & \ ANNINT=J*1E2 &' \ N,TOTNUM=AMT(I%,3%)*AMT(I%,4%) & \ I=J/AMT(I%,4%) & \ B=1+I & \ R=A*I/(1-1/B**N) & \ TOTINT=R*N-A & \ TOTPAY=PRINC+TOTINT & \ B=A & \ PAYMNT=FNRND(R) & \ IF AMT(I%,0%)=2% THEN & PAYMNT,R=AMT(I%,5%)*1E-2 &€ \ JB=B & \ JLT=0 & \ FOR JI%=1% TO N & \ JL=JB*I & \ JP=R-JL & \ JB=JB-JP & \ JLT=JLT+JL & \ NEXT JI% & \ TOTINT=JLT+FNRND(JB*I) & \ TOTPAY=PRINC+TOTINT & \ TOTNUM=TOTNUM+12105 GOSUB 24002110 L=B*I & \ P=R-L & \ B=B-P & \ NPAY%=NPAY%+1% & \ PRT1=NPAY% & \ PRT2=L & \ PRT3=P & \ PRT4=PAYMNT & \ PRT5=B & \ GOSUB 2300  & \ GOTO 2110 IF B>=R & \ PRT1=NPAY%+1% & \ PRT2=FNRND(B*I) & \ PRT3=FNRND(R-B*I) & \ PRT4=FNRND(B*I+B) &' \ PRT3=FNRND(B) IF AMT(I%,0%)=2 &' \ PRT4=PRT2+PRT3 IF AMT(I%,0%)=2 &3 \ PRINT #8% USING MID(M1$,1%,55%)+' *FINAL*', & PRT1, PRT2, PRT3, PRT4 & \ RETURN & !2300 ! & ! PRINT DETAIL LINE & ! &% GOSUB 2500 IF LN.CNT% > 50% &5 \ PRINT #8% USING M1$, PRT1,PRT2,PRT3,PRT4,PRT5 &‚ \ LN.CNT%=LN.CNT%+1% & \ RETURN & !2400 ! & ! PRINT HEADER SHEET & ! & PRINT #8%, CHR$(12%); &&\ PRINT #8%, FOR CNT%=1% TO 14% &%\ PRINT #8%, TAB(17%); HEADER$ &\ PRINT #8%, TAB(17%); &$ STRING$(LEN(HEADER$)-1%,45%) &'\ PRINT #8%, CHR$(13%);CHR$(10%) &\ PRINT #8%, TAB(25%); &' 'REQUESTED FOR - '; INFO$(I%,1%) &\ PRINT #8% &0\ PRINT #8%, TAB(23%);"SOCIAL SECURITY - "; &; LEFT(INFO$(I%,ƒ3%),3%);"-";MID(INFO$(I%,3%),4%,2%);"-"; & MID(INFO$(I%,3%),6%,4%) &\ PRINT #8% &\ PRINT #8%, TAB(29%); &$ 'LOAN TYPE - '; INFO$(I%,2%) &\ PRINT #8% &\ PRINT #8%, TAB(29%); & 'PRINCIPAL - '; &#\ PRINT #8% USING M2$, PRINC &\ PRINT #8% &\ PRINT #8%, TAB(18%); &" 'ANNUAL INTEREST RATE - '; &(\ PRINT #8% USING '##.##%', ANNINT &\ PRINT #8% &\ PRINT #8%, TAB(14%); && 'TOTAL NUMBER OF PAYMENTS „- '; &&\ PRINT #8% USING '###', TOTNUM &\ PRINT #8% &\ PRINT #8%, TAB(21%); & 'TOTAL OF PAYMENTS - '; &$\ PRINT #8% USING M2$, TOTPAY &\ PRINT #8% &\ PRINT #8%, TAB(24%); & 'TOTAL INTEREST - '; &$\ PRINT #8% USING M2$, TOTINT &\ PRINT #8% &\ PRINT #8%, TAB(30%); & 'RUN DATE - '; DATE$(0%) 2498 RETURN2500 ! &" ! PAGE HEADER FOR SCHEDULE & ! & PAGE%=PAGE%+1% & \ PRINT #8%…, CHR$(12%); &7 \ PRINT #8%, TIME$(0%); TAB(40%-LEN(PRT.HDR$)/2%); &) PRT.HDR$; TAB(70%); 'PAGE '; PAGE% & \ PRINT #8% &- \ PRINT #8%, TAB(7%); 'PAY'; TAB(17%); & 'APP TO'; TAB(33%); & 'APP TO'; TAB(47%); & 'PAYMENT';TAB(63%); & 'BALANCE' &" \ PRINT #8%, TAB(8%); '#'; & TAB(18%); 'INT'; & TAB(34%); 'PRIN' & \ PRINT #8% & \ LN.CNT%=0% & \ RETURN & !9000 ! & ! END OF JOB † & ! &< PRINT #8%, CHR$(12%);CHR$(26%) ! PUT OUT FRM FD AND TOF & \ CLOSE 1%,8% ! CLOSE IT UP9005 IF ISTAT <> 1% & THEN & GOSUB 9500 &\ PRINT ERMSG$<9006 ISTAT = UTL_FILE_SCAN("AMORT",".LIS",FILNAM$,FILLEN%,,)+9007 FILNAM$ = "AMORT.LIS" IF FILLEN% <= 0%9010 PRINT &"\ PRINT 'Schedules created' &*\ PRINT FILNAM$;" Submitted to be printed")9015 SPOOLIT$ = "PRINT " + FILNAM$ &' + "/FORM=" + NUM1$(PAPER.TYPE%) & + ‡ "/COPIES=" + NUM1$(NCOPY%) 9020 ISTAT = LIB$SPAWN(SPOOLIT$) 9098 GOTO 32760 ! AND END & !>9500 ERMSG$ = "Invalid Display-Id" IF ISTAT = SMG$INVDIS_ID &5\ ERMSG$ = "Invalid Column" IF ISTAT = SMG$INVCOL &3\ ERMSG$ = "Invalid Row" IF ISTAT = SMG$INVROW &=\ ERMSG$ = "Invalid Pasteboard-Id" IF ISTAT = SMG$INVPAS_ID &A\ ERMSG$ = "Wrong Number of Arguments" IF ISTAT = SMG$WRONUMARG &A\ ERMSG$ = "Invalid String Descriptor" IF ISTAT = LIB$INVSTRDES &C\ ERMSG$ = "Insufficient virtuˆal memory" IF ISTAT = LIB$INSVIRMEM &\ RETURN10000 ! & ! PAINT MASK & ! &.\ ISLIN = 10000 ! Set program line number &/\ ISTAT = SMG$ERASE_DISPLAY(DISPLAY1,,,,) &!\ GOTO 210 IF ISTAT <> 1% &\ ROW = 1 &\ COL = 1 &7\ ISTAT = SMG$PUT_CHARS(DISPLAY1,TIME$(0%),ROW,COL) &!\ GOTO 240 IF ISTAT <> 1% &\ COL = 27 &6\ ISTAT = SMG$PUT_CHARS(DISPLAY1,HEADER$,ROW,COL) &!\ GOTO 240 IF ISTAT <> 1% &\ ROW = 2 ‰ &E\ ISTAT = SMG$PUT_CHARS(DISPLAY1,STRING$(LEN(HEADER$),45%),ROW,COL) &\ ISLIN = 10000.13 &!\ GOTO 240 IF ISTAT <> 1% &B\ ISTAT = SMG$PASTE_VIRTUAL_DISPLAY(DISPLAY1,NEW_PID,HOME,HOME) &&\ X = FNPUTCHARS(4%,15%,"Name") &(\ X = FNPUTCHARS(3%,30%,"Social") &)\ X = FNPUTCHARS(4%,30%,"Security") &&\ X = FNPUTCHARS(4%,42%,"Type") &%\ X = FNPUTCHARS(4%,50%,"Int") &(\ X = FNPUTCHARS(4%,60%,"Amount") &#\ X = FNPUTCHARS(3%,72%,"#") &%\ X = ŠFNPUTCHARS(4%,71%,"Yrs") &%\ X = FNPUTCHARS(3%,77%,"Pay") &%\ X = FNPUTCHARS(4%,77%,"/Yr") &B\ ISTAT = SMG$PASTE_VIRTUAL_DISPLAY(DISPLAY1,NEW_PID,HOME,HOME) &\ ISLIN = 10000.26 &!\ GOTO 215 IF ISTAT <> 1% &\ RETURN & !13000 ! & ! ANY CHANGE ROUTINE & ! & DEF* FNANYCHG%(J%,J1%) & !13002 J0%=0% &+\ PRINT #1%, CHR$(7%); FNC$(21%,35%); & 'Any change?'; &'\ J$=FNKB.GET$(21%,47%,1%,1%,4%) ‹ &\ GOTO 13010 IF J$='N',13004 PRINT #1%, FNC$(21%,35%);FNC2$; & 'Line item'; &2\ J$=FNKB.GET$(21%,45%,LEN(NUM1$(J1%)),1%,1%) &\ J0% = VAL(J$) &&\ IF J0% < J% OR J0% > J1% THEN &' PRINT #1%, FNC$(21%,18%);FNC2$; &( CHR$(7%); 'Entry out of range..'; &' 'select'; J%; 'through'; J1% &\ SLEEP 3% &(\ PRINT #1%, FNC$(21%,18%); FNC2$; & \ GOTO 13002,13010 PRINT #1%, FNC$(21%,35%);FNC2$; &\ FNANYCHG%=J0% &\ FNEND Œ & !14000 ! &) DEF* FNRND(JJ)=FIX(JJ*1E2+.5)*1E-2 & !N19000 ! >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>><<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< &I ! >>>>>>>>>>>>>>>>>>>>>>>>>>>> ERROR HANDLER <<<<<<<<<<<<<<<<<<<<<<<<< &I ! >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>><<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< & ! &+ RESUME 19001 ! RESUME BELOW TO RESET & !!19001 ON ERROR GOTO 19000 & !-19010 IF ERR=53 AND ERL=1380 THEN RESUME 1390-19020 IF ERR=52 AND ERL=1373 THEN RESUME 1371-19030 IF ERR=52 AND ERL=1315 THEN RESUME 1315/19040 RESUME 1340 IF ERR=52 AND ERL=1340 &+\ RESUME 1350 IF ERR=52 AND ERL=1350 &+\ RESUME 1360 IF ERR=52 AND ERL=1360 &+\ RESUME 2010 IF ERR=52 AND ERL=2010 &+\ RESUME 2020 IF ERR=52 AND ERL=2030 &&\ RESUME 13004 IF ERR=52 AND ERL=13004>19099 PRINT CHR$(7%); 'Unexpected error number'; ERR; '('; &5 RIGHT(SYS(CHR$(6%)+CHR$(9%)+CHR$(ERR)),3%);')'; & ' at line'; ERL &!\ GOTO 9000 IF ISTAT <> 1 Ž & \ GOTO 32767N21701 ! >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>><<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< &I ! >>>>>>>>>>>>>>>>>>> STANDARD KEYBOARD ENTRY ROUTINE <<<<<<<<<<<<<<<< &I ! >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>><<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< & ! &: DEF* FNKB.GET$(LONG KBY,LONG KBX,LONG KBM,KBN,KBT) & ! & ! ARGUMENTS: KBY = ROW & ! KBX = COLUMN &/ ! KBM = MAXIMUM NUMBER OF INPUT CHARACTERS &/ ! KBN = MINIMUM NUMBER OF INPUT CHARACTERS &) ! KBT = TYPE OF DATUM TO BE ENTERED &0 ! + 100*NUMBER OF IMPLIED DECIMAL PLACES & ! &' ! LEGAL DATUM TYPES: 1 = INTEGER & ! 2 = FLOATING POINT &% ! 3 = DATE IN MMDDYY FORMAT & ! 4 = Y OR N ONLY &! ! 5 = ASCII STRING DATA & ! &2 ! ADDING 5 TO DATUM SPECIFICATION TYPE ALLOWS &! ! ENTRY OF 'END' IN FIELD & ! &1 ! EXAMPLE: X$=FNKB.GET$(10%,10%,7%,1%,202%) & ! &4 ! EXAMPLE ALLOWS ENTRY OF FLOATING POINT NUMBER &* ! IN RANGE OF PLUS OR MINUS 9,999.99 & ! & \ CCJMP%,KBP%,KBZ%=0% &% \ KBZ%=1% IF KBT=4% OR KBT=9% & \ KBD%=KBT/100% & \ KBT=KBT-(KBD%*100%) & \ KBP%=1% IF KBT=1% & OR KBT=2% & OR KBT=6% & OR KBT=7% & \ KBS%=KBM + KBP% & \ KBS%=KBS%+1% IF KBD% &% \ KBS%=8% IF KBT=3% OR KBT=8% &$ \ KJL%=(KBM-KBD%)/3% IF KBP% &0 \ KJL%=KJL%-1% IF KJL%*3%=KBM-KBD% IF KBP% &$ \ KJL%=KBM-KBD%‘+KJL% IF KBP% &7 \ KBE$=MID('###,###,###,###',16%-KJL%,15%) IF KBP% &6 \ KBE$=KBE$+'.'+STRING$(KBD%,35%) IF KBD% IF KBP% & \ KBE$=KBE$+'-' IF KBP% & \ KBS%=LEN(KBE$) IF KBP% &\ X$ = FNC$(KBY,KBX) &\ RESUME 21702 & !!21702 ON ERROR GOTO 21703 &\ GOTO 21704 IF CCJMP% &3\ X = FNPUTCHARS(KBY,KBX,"["+SPACE$(KBS%)+"]") &\ X$ = FNC$(KBY,KBX+1) &H\ ISTAT = SMG$READ_STRING(KEYBOARD,RET_STR,,KBM,,,,REC_LEN,,DISPLAY1,) &\ ISLIN = 2170’2 &&\ GOTO 9000 IF ISTAT = SMG$_EOF &!\ GOTO 260 IF ISTAT <> 1% &\ CCN$ = RET_STR + "" &4\ GOTO 21705 IF LEFT(EDIT$(CCN$,32%),2%) = "/B" &\ GOTO 21703 IF KBZ% &(\ GOTO 21703 IF INSTR(1%,CCN$,'.') & IF KBP% &&\ GOTO 21703 IF LEN(CCN$) < KBN & OR LEN(CCN$) > KBM &#\ GOTO 21703 IF LEN(CCN$)=3% & AND CCN$='END' &!\ CCN%=VAL(CCN$) IF KBT=1% & OR KBT=6% &!\ CCN=VAL(CCN$) IF KBT=2% & “OR KBT=3% & OR KBT=7% & OR KBT=8% &,\ CCN=CCN/(10%**KBD%) IF KBD% IF KBT=2% & OR KBT=7% &+\ X = FNPUTCHARS(KBY,KBX,"[") IF KBP% &5\ OS$ = FORMAT$(CCN, KBE$) IF KBT = 2 OR KBT = 7 &4\ OS$ = FORMAT$(CCN%,KBE$) IF KBT = 1 OR KBT = 6 &9\ X = FNPUTCHARS(KBY,KBX+1,OS$) IF KBT = 1 OR KBT = 6 & OR KBT = 2 OR KBT = 7 &!\ GOTO 21704 IF ((CCN=0.) & AND (KBT=3% & OR KBT=8%)) & \ GOTO 21703 IF ((KBT=3% & ” OR KBT=8%) & AND (CCN < 10100 & OR CCN > 123199)) &#\ CCN$='0' + CCN$ IF KBT<>0% & AND KBT<>5% & AND LEN(CCN$)=5% &'\ CCNDATE$ = LEFT(CCN$,2%) + "/" & + MID(CCN$,3%,2%) + "/" & + RIGHT(CCN$,5%) &=\ X = FNPUTCHARS(KBY,KBX+1,CCNDATE$) IF KBT = 3 OR KBT = 8 &\ GOTO 21704 & !H21703 CCJMP%=3% IF KBT> 4% AND EDIT$(CCN$,32%)='END' AND LEN(CCN$) =3% &&\ CCJMP%=1% IF KBZ% IF CCN$='Y' &&\ CCJMP%=2•% IF KBZ% IF CCN$='N' &*\ CCN$=STRING$(KBM,48%) IF CCJMP%=3% & \ RESUME 21702 IF CCJMP% &1\ X = FNPUTCHARS(KBY,KBX+1,"?ERR?"+CHR$(7%)) &\ SLEEP 1% &,\ X = FNPUTCHARS(KBY,KBX+1,SPACE$(5%)) &\ RESUME 21702 & !21704 RESUME 21705!21705 ON ERROR GOTO 19000 &\ FNKB.GET$=CCN$ &\ FNEND & ! & !N21800 ! >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>><<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< &I ! >>>>>>>>>>>>>>>>>>>>>> STANDARD CURSOR ROUT –INES <<<<<<<<<<<<<<<<<<<< &G ! >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>><<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<21820 ! &9 DEF* FNC$(LONG JD,LONG JA) ! DIRECT CURSOR ADDRESS & ! &1\ ISTAT = SMG$SET_CURSOR_ABS(DISPLAY1,JD,JA) &.\ ISLIN = 21820 ! SET PROGRAM LINE NUMBER &!\ GOTO 220 IF ISTAT <> 1% &B\ ISTAT = SMG$PASTE_VIRTUAL_DISPLAY(DISPLAY1,NEW_PID,HOME,HOME) &\ FNEND & !921825 DEF* FNPUTCHARS(LONG JD, LONG JA, STRING JSTR) &1\ ISTAT = SMG$PUT_CH—ARS(DISPLAY1,JSTR,JD,JA) &\ ISLIN = 21825 &!\ GOTO 240 IF ISTAT <> 1% &\ FNEND21830 ! &* DEF* FNC2$ ! ERASE TO END OF LINE & ! &6\ ISTAT = SMG$RETURN_CURSOR_POS(DISPLAY1,ROW,COL) &.\ ISLIN = 21830 ! SET PROGRAM LINE NUMBER &!\ GOTO 225 IF ISTAT <> 1% &/\ ISTAT = SMG$ERASE_LINE(DISPLAY1,ROW,COL) &!\ GOTO 230 IF ISTAT <> 1% &\ FNEND & !032760 PRINT "Finished";TAB(50%); TIME$(0%) & \ X$=SYS(CHR$(9%))  & ! 32767 ENDwwº«€  â¤ STOCKTON AMORT