⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 iksdpy

📁 C-Kermit源码。是使用串口/Modem和网络通讯的程序
💻
字号:
#!/usr/local/bin/kermit +## i k s d p y  --  IKSD display## Active display of IKSD database.# Main screen lists all sessions, with option to switch to# a per-session detail screen.## Illustrates:# . File record i/o# . WAIT FILE and \v(kbchar)# . Arithmetic# . Hexadecimal decoding# . Single-keystroke program control# . Compact substring notation# . Rudimentary screen formatting## Requires: C-Kermit 7.0 Beta.11 or later.##   Last update: Tue Dec  7 19:19:03 1999#   Documentation: iksdb.txt## Author: F. da Cruz, Columbia University, November 1999.local \%c \%n \%p block dbfile rate dir user info; Configuration (change as needed)....rate = 4                               ; Screen refresh rate (sec)if def \%1 .dbfile := \%1               ; Database fileif not def dbfile {    if eq "\v(platform)" "32-bit_Windows" {	if not equal "\$(winbootdir)" "" .dbfile := \$(winbootdir)/iksd.db	else if not equal "\$(windir)" "" .dbfile := \$(windir)/iksd.db	else if not equal "\$(SystemRoot)" "" .dbfile := \$(SystemRoot)/iksd.db	else .dbfile = c:/iksd.db    } else {        .dbfile = /var/log/iksd.db    }}; Operating variables and settings...set case off                            ; Case matters notset quiet on                            ; No noisy messagesset sleep cancel on                     ; Allow interrupt WAIT from keyboard; Macrosdefine SHOWHELP {                       ; Main help screen    cls    echo {IKSD Display...}    echo    echo {Press:}    echo {  The Space Bar to switch between summary and detail screens.}    echo {  A digit to view a particular session, 0 through 9, or:}    echo {    X to enter a session number with two or more digits.}    echo {    M to return to the Main screen.}    echo {    N to see the Next session (cycle through sessions).}    echo {    H to see this Help message.}    echo {    Q to Quit.}    set ask-timer 0    echo    getc \%9 {Press any key to continue: }    set ask-timer \m(rate)}define SHOWRECORD {                     ; Interpret a record    .pid := \fltrim(\s(block[17:16]),0)    .flags := \fhex2n(\s(block[1:4]))    if ( (\m(flags)&1) ) { .\%v = (IN_USE) } else { .\%v = (FREE) }    if ( (\m(flags)&2) ) { .\%v := \%v(REAL_USER) }    if ( (\m(flags)&4) ) { .\%v := \%v(LOGGED_IN) }    cls                                 ; Clear screen and print detail    echo [\m(dbfile)] Session \%1: \v(time)...    echo    echo { Flags: \s(block[1:4]) \%v}    echo { AuthT: \s(block[5:4])}    echo { AuthM: \s(block[9:4])}    echo { State: \s(block[13:4])}    echo { Lhost: \fhex2ip(\s(block[41:8]))} ; 32+8+1    echo { Rhost: \fhex2ip(\s(block[57:8]))} ; 48+8+1    echo { PID:   \m(pid) (\fhex2n(\m(pid)))}    echo { Start: \s(block[66:17])}    echo { Last:  \s(block[84:17])}    echo { User:  \s(block[1025:\fhex2n(\s(block[101:4]))])}    echo { Dir:   \s(block[2049:\fhex2n(\s(block[105:4]))])}    echo { Info:  \s(block[3073:\fhex2n(\s(block[109:4]))])}    echo}define SHOWDETAIL {                     ; Show details for a session    local \%k \%v \%x    if not def \%1 return    if ( < \fcode({\%1}) 32 ) return    if eq {\%1} { } .\%1 = 0    if eq {\%1} {N} .\%1 = 0    .\%x = \%1    while true {                        ; Loop in detail screen        if def \%x switch \%x {         ; What did they type?	  :[0-9]                        ; A digit              .\%1 := \%x	      break                     ; So that's the session number.	  :H, showhelp,                 ; An 'H' so show help text.              if not num \%1 return              break	  :Q, echo Q, exit 0                     ; 'Q' for quit.          :N, .\%n ::= (\fsize(\m(dbfile))/4096) ; Check for new records              .\%1 ::= \fmod(\%1+1,\%n)          ; Go to next session              break	  :X, xecho \13                          ; Long session number	      screen cleol                       ; Clear this line	      set ask-timer 0	      ask \%1 { Enter session number: }  ; Prompt and wait for text	      set ask-timer \m(rate)             ; up to CR with no timeout.	      if not def \%1 .\%1 = 0            ; If CR only, use 0.              if not numeric \%1 {               ; Check for n-ness.                  echo Number required                  return              }	      break          :M, return                             ; Return to main screen.	  :default              echo Not a choice: "\%1"              pause 1              return        }        if ( > \%1 (\%n-1) || < \%1 0 ) { echo Out of range, pause 1, return }        .\%k ::= \%1*4096               ; Seek position for desired record        fclose \%c                      ; Close/Open to force data refresh        fopen /read /binary \%c \m(dbfile)        if fail end 1 CLOSE OPEN FAILURE	fseek \%c \%k                   ; Seek to record	if fail end 1 Seek failed.	.\%p := \f_pos(\%c)	fread /size:4096 \%c block      ; Read it	if fail end 1 Read failed.	if ( ! = \f_pos(\%c) \%p+4096 ) exit 1 FATAL - Database corrupt        showrecord \%1                  ; Show it	xecho {[0-9] (session digit), H[elp], or Q[uit]: }	wait 60 file modification \m(dbfile)	if success continue	undef \%x	if ( def \v(kbchar) ) { .\%x := \v(kbchar) } else { getc \%x }        if not def \%x continue        if eq { } {\%x} .\%x = M    }}; Main display...undef \%c                               ; Database not yet openset ask-timer \m(rate)                  ; Refresh rate controlwhile true {                            ; Main loop    cls    if ( not def \%c ) {	        ; If database not open	if exist \m(dbfile) {           ; If it exists	    fopen /read /binary \%c \m(dbfile) ; Open it	    if fail {		echo \m(dbfile) - Open failed: \f_errmsg()		sleep \m(rate)		continue	    }	} else {                        ; It doesn't exist	    echo [\m(dbfile)] - Does not exist: \v(time)...            sleep \m(rate)	    continue	}    }    echo [\m(dbfile)] \v(time)...       ; Top line - filename & time    echo    echo {    Flgs Host........... Start... Last.... (PID)(user)(dir)(what)}    .\%n = 0    frewind \%c                         ; Rewind database    if fail { undef \%c, continue }     ; On failure go gack and reopen it    while ( ! \f_eof(\%c) ) {           ; Loop to read each record        fread /size:4096 \%c block        if fail break        if ( != \fmod(\f_pos(\%c),4096) 0 ) exit 1 FATAL - Database corrupt        incr \%p 4096        .user := \ftrim(\s(block[1025:1024]))        .dir  := \ftrim(\s(block[2049:1024]))        .info := \ftrim(\s(block[3073:1024]))        .\%a := \flpad(\%n,2). \s(block[1:4]) -\frpad(\fhex2ip(\s(block[57:8])),15)\s(block[74:9])\s(block[92:9]) -(\fhex2n(\s(block[17:16])))(\m(user))(\m(dir))(\m(info))	echo \fleft(\%a,\v(cols))        incr \%n    }    echo    xecho {[0-9] (session digit), H[elp], or Q[uit]: }    wait 60 file modification \m(dbfile)    if success continue    undef \%x    if ( def \v(kbchar) ) { .\%x := \v(kbchar) } else { getc \%x }    if ( defined \%x ) showdetail {\%x}    if ( == \%n 1 ) { fclose \%c, undef \%c } ; Force refresh if only one}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -