$! ------------------ CUT HERE ----------------------- $ v='f$verify(f$trnlnm("SHARE_VERIFY"))' $! $! This archive created by VMS_SHARE Version 7.1-004 3-AUG-1989 $! On 5-JUL-1993 11:06:45.78 By user CCC_ONAS (Bernd Onasch) $! $! This VMS_SHARE Written by: $! Andy Harper, Kings College London UK $! $! Acknowledgements to: $! James Gray - Original VMS_SHARE $! Michael Bednarek - Original Concept and implementation $! $! TO UNPACK THIS SHARE FILE, CONCATENATE ALL PARTS IN ORDER $! AND EXECUTE AS A COMMAND PROCEDURE ( @name ) $! $! THE FOLLOWING FILE(S) WILL BE CREATED AFTER UNPACKING: $! 1. MAKE.COM;1025 $! 2. INSTALL.COM;1025 $! 3. [.NEWS$SRC]ANALYZE.C;1025 $! 4. [.NEWS$SRC]CMDCONF.C;1025 $! 5. [.NEWS$SRC]CMDDEF.CLD;1025 $! 6. [.NEWS$SRC]CMDPOST.C;1025 $! 7. [.NEWS$SRC]CMDSHOW.C;1025 $! 8. [.NEWS$SRC]CMDSTARTUP.CLD;1025 $! 9. [.NEWS$SRC]CMDSYS.C;1025 $! 10. [.NEWS$SRC]COMMAND.C;1025 $! 11. [.NEWS$SRC]CONSTANTS.C;1025 $! 12. [.NEWS$SRC]DATA.C;1025 $! 13. [.NEWS$SRC]DESCRIP.MMS;1025 $! 14. [.NEWS$SRC]DESCRIP.TEMPLATE;1025 $! 15. [.NEWS$SRC]ERRORS.MSG;1025 $! 16. [.NEWS$SRC]HEADER.H;1025 $! 17. [.NEWS$SRC]HELPFILE.HLP;1025 $! 18. [.NEWS$SRC]NET_DECNET.C;1025 $! 19. [.NEWS$SRC]NEWS.C;1025 $! 20. [.NEWS$SRC]SMG.C;1025 $! 21. [.NEWS$SRC]STARTUP.C;1025 $! 22. [.NEWS$SRC]TALK.C;1025 $! 23. [.NEWS$SRC]TCP_ANET.C;1025 $! 24. [.NEWS$SRC]TCP_CMU.C;1025 $! 25. [.NEWS$SRC]TCP_DUMMY.C;1025 $! 26. [.NEWS$SRC]TCP_EXOS.C;1025 $! 27. [.NEWS$SRC]TCP_HEADER.H;1025 $! 28. [.NEWS$SRC]TCP_PSC.C;1025 $! 29. [.NEWS$SRC]TCP_TGV.C;1025 $! 30. [.NEWS$SRC]TCP_UCX.C;1025 $! 31. [.NEWS$SRC]TCP_WIN.C;1025 $! 32. [.NEWS$SRC]VERSION.H;1025 $! 33. [.NEWS$EXE]NEWS.CLD;1025 $! 34. [.NEWS$EXE]NEWS_CONFIG.DAT;1025 $! 35. [.NEWS$EXE]NEWS_DEFAULT.RC;1025 $! 36. [.NEWS$EXE]NEWS_RFC1036.DAT;1025 $! 37. [.NEWS$EXE]NEWS_RFC977.DAT;1025 $! 38. [.NEWS$UTIL]AAAREADME.LIS;1025 $! 39. [.NEWS$UTIL]ANNOUNCE.LIS;1025 $! 40. [.NEWS$UTIL]BATCH.COM;1025 $! 41. [.NEWS$UTIL]BUGREPORT.LIS;1025 $! 42. [.NEWS$UTIL]CALLEDIT.COM;1025 $! 43. [.NEWS$UTIL]EXAMPLE.NEWS;1025 $! 44. [.NEWS$UTIL]FILES.LIS;1025 $! 45. [.NEWS$UTIL]HISTORY.LIS;1025 $! 46. [.NEWS$UTIL]SWITCHES.LIS;1025 $! 47. [.NEWS$UTIL]USERGUIDE.OLD;1025 $! 48. [.NEWS$DOC]1NEWS$DOC.README;1025 $! 49. [.NEWS$DOC]ABOUT_NEWS.TEX;1025 $! 50. [.NEWS$DOC]ARTICLE.TEX;1025 $! 51. [.NEWS$DOC]BOTTOM.TEX;1025 $! 52. [.NEWS$DOC]CANCEL.TEX;1025 $! 53. [.NEWS$DOC]CONFIGURATION.TEX;1025 $! 54. [.NEWS$DOC]DEFINE.TEX;1025 $! 55. [.NEWS$DOC]DEREGISTER.TEX;1025 $! 56. [.NEWS$DOC]DICTIONARY.TEX;1025 $! 57. [.NEWS$DOC]DIRECTORY.TEX;1025 $! 58. [.NEWS$DOC]DOC_EXTRACT.COM;1025 $! 59. [.NEWS$DOC]DOWN.TEX;1025 $! 60. [.NEWS$DOC]EDIT.TEX;1025 $! 61. [.NEWS$DOC]ENTER.TEX;1025 $! 62. [.NEWS$DOC]EXIT.TEX;1025 $! 63. [.NEWS$DOC]EXTRACT.TEX;1025 $! 64. [.NEWS$DOC]FIND_WAY.TEX;1025 $! 65. [.NEWS$DOC]FOLLOWUP.TEX;1025 $! 66. [.NEWS$DOC]GO.TEX;1025 $! 67. [.NEWS$DOC]GROUP.TEX;1025 $! 68. [.NEWS$DOC]HELP.TEX;1025 $! 69. [.NEWS$DOC]INSTALL.TEX;1025 $! 70. [.NEWS$DOC]KILL.TEX;1025 $! 71. [.NEWS$DOC]LAST.TEX;1025 $! 72. [.NEWS$DOC]LIST.TEX;1025 $! 73. [.NEWS$DOC]MAIL.TEX;1025 $! 74. [.NEWS$DOC]MARK.TEX;1025 $! 75. [.NEWS$DOC]NEWS$DOC.TEX;1025 $! 76. [.NEWS$DOC]NEXT.TEX;1025 $! 77. [.NEWS$DOC]POST.TEX;1025 $! 78. [.NEWS$DOC]POST_ART.TEX;1025 $! 79. [.NEWS$DOC]PREFACE.TEX;1025 $! 80. [.NEWS$DOC]PRINT.TEX;1025 $! 81. [.NEWS$DOC]QUICKREF.TEX;1025 $! 82. [.NEWS$DOC]QUIT.TEX;1025 $! 83. [.NEWS$DOC]REGISTER.TEX;1025 $! 84. [.NEWS$DOC]REPLY.TEX;1025 $! 85. [.NEWS$DOC]REREAD.TEX;1025 $! 86. [.NEWS$DOC]ROT13.TEX;1025 $! 87. [.NEWS$DOC]ROTATE.TEX;1025 $! 88. [.NEWS$DOC]SAVE.TEX;1025 $! 89. [.NEWS$DOC]SCAN.TEX;1025 $! 90. [.NEWS$DOC]SET.TEX;1025 $! 91. [.NEWS$DOC]SHOW.TEX;1025 $! 92. [.NEWS$DOC]SKIP.TEX;1025 $! 93. [.NEWS$DOC]SPAWN.TEX;1025 $! 94. [.NEWS$DOC]START_NEWS.TEX;1025 $! 95. [.NEWS$DOC]SUBSCRIBE.TEX;1025 $! 96. [.NEWS$DOC]TALK.TEX;1025 $! 97. [.NEWS$DOC]TOP.TEX;1025 $! 98. [.NEWS$DOC]UNSUBSCRIBE.TEX;1025 $! 99. [.NEWS$DOC]UP.TEX;1025 $! 100. [.NEWS$DOC]USENET.TEX;1025 $! 101. [.NEWS$DOC]VERSION.TEX;1025 $! $set="set" $set symbol/scope=(nolocal,noglobal) $f=f$parse("SHARE_TEMP","SYS$SCRATCH:.TMP_"+f$getjpi("","PID")) $e="write sys$error ""%UNPACK"", " $w="write sys$output ""%UNPACK"", " $ if f$trnlnm("SHARE_LOG") then $ w = "!" $ if f$getsyi("version") .ges. "V4.4" then $ goto START $ e "-E-OLDVER, Must run at least VMS 4.4" $ v=f$verify(v) $ exit 44 $UNPACK: SUBROUTINE ! P1=filename, P2=checksum $ if f$search(P1) .eqs. "" then $ goto file_absent $ e "-W-EXISTS, File ''P1' exists. Skipped." $ delete/nolog 'f'* $ exit $file_absent: $ if f$parse(P1) .nes. "" then $ goto dirok $ dn=f$parse(P1,,,"DIRECTORY") $ w "-I-CREDIR, Creating directory ''dn'." $ create/dir 'dn' $ if $status then $ goto dirok $ e "-E-CREDIRFAIL, Unable to create ''dn'. File skipped." $ delete/nolog 'f'* $ exit $dirok: $ w "-I-PROCESS, Processing file ''P1'." $ define/user sys$output nl: $ EDIT/TPU/NOSEC/NODIS/COM=SYS$INPUT 'f'/OUT='P1' PROCEDURE Unpacker ON_ERROR ENDON_ERROR;SET(FACILITY_NAME,"UNPACK");SET( SUCCESS,OFF);SET(INFORMATIONAL,OFF);f:=GET_INFO(COMMAND_LINE,"file_name"); buff:=CREATE_BUFFER(f,f);p:=SPAN(" ")@r&LINE_END;POSITION(BEGINNING_OF(buff)) ;LOOP EXITIF SEARCH(p,FORWARD)=0;POSITION(r);ERASE(r);ENDLOOP;POSITION( BEGINNING_OF(buff));g:=0;LOOP EXITIF MARK(NONE)=END_OF(buff);x:= ERASE_CHARACTER(1);IF g = 0 THEN IF x="X" THEN MOVE_VERTICAL(1);ENDIF;IF x= "V" THEN APPEND_LINE;MOVE_HORIZONTAL(-CURRENT_OFFSET);MOVE_VERTICAL(1);ENDIF; IF x="+" THEN g:=1;ERASE_LINE;ENDIF;ELSE IF x="-" THEN g:=0;ENDIF;ERASE_LINE; ENDIF;ENDLOOP;p:="`";POSITION(BEGINNING_OF(buff));LOOP r:=SEARCH(p,FORWARD); EXITIF r=0;POSITION(r);ERASE(r);COPY_TEXT(ASCII(INT(ERASE_CHARACTER(3)))); ENDLOOP;o:=GET_INFO(COMMAND_LINE,"output_file");WRITE_FILE(buff,o); ENDPROCEDURE;Unpacker;EXIT; $ delete/nolog 'f'* $ CHECKSUM 'P1' $ IF CHECKSUM$CHECKSUM .eqs. P2 THEN $ EXIT $ e "-E-CHKSMFAIL, Checksum of ''P1' failed." $ ENDSUBROUTINE $START: $ create/nolog 'f' X$ TYPE sys$input X!*************************************************************************** V**** X!* X!* VMS NEWS Makefile v1.1 (including MMS description file creator) X!* X!* Copyright 1992 by Bernd Onasch (University of Karlsruhe) X!* 1993 by Bernd Onasch (E-MAIL: uranus@pilhuhn.ka.sub.org) X!* (international preferred: bernd@rzsun2.rz.uni-karlsruhe.de V) X!* X!*************************************************************************** V**** X XEnter a question mark (?) at any time for help. X X$ HeaderFiles = "header,tcp_header,version" X$ SourceFiles = "analyze,startup,command,cmdshow,cmdconf,cmdpost,cmdsys" + - X`009`009",data,news,smg,net_decnet,constants,cmdstartup,cmddef,errors" X$ SET PROTECTION=(s:rwed,o:rwed,g,w)/DEFAULT X$ Path = F$TRNLNM("sys$disk")+F$DIRECTORY() X$ Proc = F$ENVIRONMENT("PROCEDURE") X$ Proc = F$EXTRACT(0,F$LOCATE("`093",Proc),Proc) + ".news$src`093" X$ SET DEFAULT 'Proc X$! X$ CALL CheckCompilers X$ IF MAKE$FATAL .EQS. "TRUE" X$ THEN X$ DELETE/SYMBOL/GLOBAL MAKE$FATAL X$ SET DEFAULT 'Path X$ EXIT X$ ELSE X$ DELETE/SYMBOL/GLOBAL MAKE$FATAL X$ ENDIF X$! X$ CALL HelpMode X$ CALL GetTCP X$ IF MAKE$TCP .EQS. "***" X$ THEN X$ SET DEFAULT 'Path X$ EXIT X$ ENDIF X$ CALL CheckHeader "''HeaderFiles',''SourceFiles',tcp_''MAKE$TCP',talk" X$ IF MAKE$TCP .EQS. "***" X$ THEN X$ SET DEFAULT 'Path X$ EXIT X$ ENDIF X$ CALL GetMMS X$ CALL GetLSE X$ CALL GetMail X$ CALL GetSpecials X$ CALL GetVersion X$ CALL OptionFile X$ CALL GetLocalNodename X$ CALL GetServerNodename X$ CALL GetServerPort X$ CALL GetServerSoftware X$ CALL GetMailTransport X$ CALL GetTimezone X$ CALL GetOrganisation X$ CALL CreateConfiguration X$ IF MAKE$MMSpres .EQS. "YES" X$ THEN X$ CALL CreateMMS X$ TYPE sys$input XCreated all MMS depending files - now starting compilation... X X*** No further questions will be asked *** X$! MMS clean X$ MMS news X$ MMS talk X$ ELSE X$ TYPE sys$input XCreated all further required files - now starting compilation... X X*** No further questions will be asked *** X X$ CALL HelpFile helpfile news_help X$ MAKE$TalkMode :== "NO" X$ CALL CompileFile analyze X$ CALL CompileFile startup X$ CALL CompileFile command X$ CALL CompileFile cmdsys X$ CALL CompileFile cmdshow X$ CALL CompileFile cmdconf X$ CALL CompileFile cmdpost X$ CALL CompileFile data X$ CALL CompileFile constants X$ CALL CompileFile news X$ CALL CompileFile smg X$ CALL CompileFile net_decnet X$ CALL CompileFile tcp_'MAKE$TCP' X$ CALL CldFile cmddef X$ CALL CldFile cmdstartup X$ CALL MsgFile errors X$ CALL LinkFiles 'SourceFiles',tcp_'MAKE$TCP' NEWS X$ MAKE$LSE :== "NO" X$ MAKE$NEWmail :== "NO" X$ MAKE$TalkMode :== "YES" X$ CALL CompileFile talk X$ CALL CompileFile tcp_'MAKE$TCP' X$ CALL LinkFiles talk,tcp_'MAKE$TCP',errors TALK X$ RENAME `091-.news$exe`093talk.exe `091-.news$util`093 X$ ENDIF X$ CALL SetProtections X$ CALL ShowLicense X$ CALL CleanupSymbols X$ SET DEFAULT 'Path X$ EXIT X! X! X! X$!************************************************************************** V**** X$CheckCompilers:`009!Returns global variable MAKE$FATAL`091TRUE,FALSE`093 X$!************************************************************************** V**** X$ SUBROUTINE X$ MAKE$FATAL == "FALSE" X$!IF F$EXTRACT(0,1,F$GETSYI("version")) .NES. "V" X$!THEN X$! MAKE$FATAL == "TRUE" X$! WRITE sys$output "%MAKE-F-SYSTEM, NEWS MAKE requires a regular VAX/VMS s Vystem (no ""A"" versions)." X$! EXIT X$!ENDIF X$!IF F$GETSYI("version") .LTS. "V5.0" X$ IF F$EXTRACT(1,100,F$GETSYI("version")) .LTS. "5.0" X$ THEN X$ MAKE$FATAL == "TRUE" X$ WRITE sys$output "%MAKE-F-SYSTEM, NEWS MAKE requires a VAX/VMS system ve Vrsion of V5.0 or newer." X$ EXIT X$ ENDIF X$ IF F$TRNLNM("lmf$dec_c","lmf$license_table") .EQS. "" X$ THEN X$ MAKE$FATAL == "TRUE" X$ WRITE sys$output "%MAKE-F-SOFTWARE, NEWS MAKE requires a standard VAX C V compiler." X$ ENDIF X$ EXIT X$ ENDSUBROUTINE X! X! X! X$!************************************************************************** V**** X$HelpMode:`009`009!Returns global variable MAKE$HelpMode `091FULL,BRIEF`093 X$!************************************************************************** V**** X$ SUBROUTINE X$RegetHelpMode: X$ INQUIRE/NOPUNCT i "* Display questions in brief or full size ? `091BRIEF`0 V93 " X$ IF i .EQS. "?" X$ THEN X$ CALL PerformHelp "AUTOHELP" X$ GOTO RegetHelpMode X$ ENDIF X$ IF i .EQS. "" THEN i = "BRIEF" X$ IF (i .NES. "BRIEF") .AND. (i .NES. "FULL") THEN GOTO RegetHelpMode X$ MAKE$HelpMode == i X$ EXIT X$ ENDSUBROUTINE X! X! X! X$!************************************************************************** V**** X$GetMMS:`009`009!Returns global variable MAKE$MMSpres `091YES,NO`093 X$!************************************************************************** V**** X$ SUBROUTINE X$ MAKE$MMSpres == "NO" X$ IF F$SEARCH("sys$system:mms.exe") .NES. "" THEN MAKE$MMSpres == "YES" X$ IF MAKE$HelpMode .EQS. "FULL" THEN CALL PerformHelp "MMS" X$CheckMMS: X$ IF MAKE$MMSpres .EQS. "YES" X$ THEN X$ INQUIRE/NOPUNCT I_MMS "* MMS found - Shall I use the MMS utility for com Vpilation ? `091YES`093 " X$ IF "''I_MMS'" .EQS. "?" X$ THEN X$ CALL PerformHelp "MMS" X$ GOTO CheckMMS X$ ENDIF X$ ENDIF X$ IF "''I_MMS'" .NES. "" THEN MAKE$MMSpres == I_MMS X$ IF (MAKE$MMSpres .NES. "YES") .AND. (MAKE$MMSpres .NES. "NO") X$ THEN X$ MAKE$MMSpres == "YES" X$ GOTO CheckMMS X$ ENDIF X$ EXIT X$ ENDSUBROUTINE X! X! X! X$!************************************************************************** V**** X$GetLSE:`009`009!Returns global variable MAKE$LSE `091YES,NO`093 X$!************************************************************************** V**** X$ SUBROUTINE X$ MAKE$LSE == "NO" X$ IF F$SEARCH("sys$share:lseshr.exe") .NES. "" THEN MAKE$LSE == "YES" X$ IF MAKE$HelpMode .EQS. "FULL" THEN CALL PerformHelp "LSE" X$CheckLSE: X$ IF MAKE$LSE .EQS. "YES" X$ THEN X$ INQUIRE/NOPUNCT I_LSE "* LSESHR found - shall I add the callable LSE edi Vtor ? `091YES`093 " X$ IF "''I_LSE'" .EQS. "?" X$ THEN X$ CALL PerformHelp "LSE" X$ GOTO CheckLSE X$ ENDIF X$ ENDIF X$ IF "''I_LSE'" .NES. "" THEN MAKE$LSE == I_LSE X$ IF (MAKE$LSE .NES. "YES") .AND. (MAKE$LSE .NES. "NO") THEN GOTO CheckLSE X$ EXIT X$ ENDSUBROUTINE X! X! X! X$!************************************************************************** V**** X$GetMail:`009`009!Returns global variable MAKE$NEWmail `091YES,NO,NEVER`093 X$!************************************************************************** V**** X$ SUBROUTINE X$ IF MAKE$HelpMode .EQS. "FULL" THEN CALL PerformHelp "MAIL_1" X$TestMail: X$ nm = "YES" X$ INQUIRE/NOPUNCT i "* Do you have a MAILER supporting TCP/IP MAIL ? `091YES V`093 " X$ IF i .EQS. "?" X$ THEN X$ CALL PerformHelp "MAIL_1" X$ GOTO TestMail X$ ENDIF X$ IF i .NES. "" THEN nm = i X$ IF (nm .NES. "YES") .AND. (nm .NES. "NO") .AND. (nm .NES. "NEW") THEN GOTO V TestMail X$ IF nm .EQS. "YES" X$ THEN X$ IF MAKE$HelpMode .EQS. "FULL" THEN CALL PerformHelp "MAIL_2" X$CheckMail: X$ MAKE$NEWmail == "NO" X$ INQUIRE/NOPUNCT i "* Is callable MAIL supported as proposed by VMS 5.0 ? V `091NO`093 " X$ IF i .EQS. "?" X$ THEN X$ CALL PerformHelp "MAIL_2" X$ GOTO CheckMail X$ ENDIF X$ IF i .NES. "" THEN MAKE$NEWmail == i X$ IF (MAKE$NEWmail .NES. "YES") .AND. (MAKE$NEWmail .NES. "NO") THEN GOTO V CheckMail X$ ELSE X$ IF nm .EQS. "NEW" X$ THEN X$ MAKE$NEWmail == "YES" X$ ELSE X$ MAKE$NEWmail == "NEVER" X$ ENDIF X$ ENDIF X$ EXIT X$ ENDSUBROUTINE X! X! X! X$!************************************************************************** V**** X$GetSpecials:`009`009!Returns global variable MAKE$Specials X$!************************************************************************** V**** X$ SUBROUTINE X$ IF MAKE$HelpMode .EQS. "FULL" THEN CALL PerformHelp "CLI" X$TestCLI: X$ cli = "NO" X$ INQUIRE/NOPUNCT i "* Shall a restrictive CLI handler be used ? `091NO`093 V " X$ IF i .EQS. "?" X$ THEN X$ CALL PerformHelp "CLI" X$ GOTO TestCLI X$ ENDIF X$ IF i .NES. "" THEN cli = i X$ IF (cli .NES. "YES") .AND. (cli .NES. "NO") THEN GOTO TestCLI X$ IF MAKE$HelpMode .EQS. "FULL" THEN CALL PerformHelp "LOGGING" X$TestLogging: X$ log = "NO" X$ INQUIRE/NOPUNCT i "* Shall the local user logging be enabled ? `091NO`093 V " X$ IF i .EQS. "?" X$ THEN X$ CALL PerformHelp "LOGGING" X$ GOTO TestLogging X$ ENDIF X$ IF i .NES. "" THEN log = i X$ IF (log .NES. "YES") .AND. (log .NES. "NO") THEN GOTO TestLogging X$ MAKE$Specials :== "" X$ IF cli .EQS. "YES" THEN MAKE$Specials == MAKE$Specials + ",STRICT_CLI" X$ IF log .EQS. "YES" THEN MAKE$Specials == MAKE$Specials + ",LOGGING" X$ EXIT X$ ENDSUBROUTINE X! X! X! X$!************************************************************************** V**** X$GetTCP:`009`009!Returns variables MAKE$(TCP,Transport,Device,Include) X$`009`009`009!MAKE$TCP `091short name of software - used for filename`093 X$`009`009`009!MAKE$Transport `091text string representing transport`093 X$`009`009`009!MAKE$Device `091string of TCP/IP generic device`093 X$`009`009`009!MAKE$Include `091list of include directories required`093 X$!************************************************************************** V**** X$ SUBROUTINE X$! X$ CMUdevice := "IP:" X$ WINdevice := "INET:" X$ UCXdevice := "BG:" X$ PSCdevice := "TCP:" X$ EXOSdevice := "EX:" X$ ANETdevice := "ANB:" X$ Cnt = 0 X$ cmu := "***" X$ win := "***" X$ ucx := "***" X$ psc := "***" X$ exos := "***" X$ anet := "***" X$ multinet := "***" X$ decnet := "***" X$ Message = F$ENVIRONMENT("MESSAGE") X$ SET MESSAGE/NOTEXT/NOSEVERITY/NOIDENTIFICATION/NOFACILITY X$ cmu = F$GETDVI(CMUdevice,"DEVNAM") X$ win = F$GETDVI(WINdevice,"DEVNAM") X$ ucx = F$GETDVI(UCXdevice,"DEVNAM") X$ psc = F$GETDVI(PSCdevice,"DEVNAM") X$ exos = F$GETDVI(EXOSdevice,"DEVNAM") X$ anet = F$GETDVI(ANETdevice,"DEVNAM") X$ SET MESSAGE'Message' X$ IF (cmu .NES. "***") .AND. (F$TRNLNM(CMUdevice-":") .NES. "") THEN cmu V := "***" X$ IF (win .NES. "***") .AND. (F$TRNLNM(WINdevice-":") .NES. "") THEN win V := "***" X$ IF (ucx .NES. "***") .AND. (F$TRNLNM(UCXdevice-":") .NES. "") THEN ucx V := "***" X$ IF (psc .NES. "***") .AND. (F$TRNLNM(PSCdevice-":") .NES. "") THEN psc V := "***" X$ IF (exos .NES. "***") .AND. (F$TRNLNM(EXOSdevice-":") .NES. "") THEN exos V := "***" X$ IF (anet .NES. "***") .AND. (F$TRNLNM(ANETdevice-":") .NES. "") THEN anet V := "***" X$ IF F$TRNLNM("multinet") .NES. "" THEN multinet := "TRUE" X$DetectTCPIP: X$ IF cmu .NES. "***" !----- CMU -------------------------------------------- V---- X$ THEN X$ Cnt = Cnt + 1 X$ MAKE$Transport == "CMU/tek" X$ MAKE$Device == CMUdevice X$ MAKE$TCP == "CMU" X$ MAKE$Include == "sys$library" X$ ENDIF X$ IF win .NES. "***" !----- WIN -------------------------------------------- V---- X$ THEN X$ Cnt = Cnt + 1 X$ MAKE$Transport == "Wollongong (TWG)" X$ MAKE$Device == WINdevice X$ MAKE$TCP == "WIN" X$ MAKE$Include == "sys$library,"+ - X "twg$tcp:`091netdist.include`093,"+ - X "twg$tcp:`091netdist.include.sys`093,"+ - X "twg$tcp:`091netdist.include.vms`093,"+ - X "twg$tcp:`091netdist.include.netinet`093,"+ - X "twg$tcp:`091netdist.include.arpa`093" X$ ENDIF X$ IF ucx .NES. "***" !----- UCX -------------------------------------------- V---- X$ THEN X$ Cnt = Cnt + 1 X$ MAKE$Transport == "UCX (DEC)" X$ MAKE$Device == UCXdevice X$ MAKE$TCP == "UCX" X$ MAKE$Include == "sys$library" X$ ENDIF X$ IF psc .NES. "***" !----- PSC -------------------------------------------- V---- X$ THEN X$ Cnt = Cnt + 1 X$ MAKE$Transport == "Process Software" X$ MAKE$Device == PSCdevice X$ MAKE$TCP == "PSC" X$ MAKE$Include == "sys$library,tcpip_root,tcpware_include" X$ ENDIF X$ IF multinet .NES. "***" !----- Multinet ---------------------------------- V---- X$ THEN X$ Cnt = Cnt + 1 X$ MAKE$Transport == "MultiNet (TGV)" X$ MAKE$Device == WINdevice X$ MAKE$TCP == "TGV" X$ MAKE$Include == "sys$library,"+ - X "multinet_root:`091multinet.include`093,"+ - X "multinet_root:`091multinet.include.sys`093,"+ - X "multinet_root:`091multinet.include.arpa`093,"+ - X "multinet_root:`091multinet.include.netinet`093,"+ - X "multinet_root:`091multinet.include.vms`093" X$ ENDIF X$ IF exos .NES. "***" !----- EXOS ------------------------------------------ V---- X$ THEN X$ Cnt = Cnt + 1 X$ MAKE$Transport == "EXOS" X$ MAKE$Device == EXOSdevice X$ MAKE$TCP == "EXOS" X$ MAKE$Include == "sys$library" X$ ENDIF X$ IF anet .NES. "***" !----- ANET ------------------------------------------ V---- X$ THEN X$ Cnt = Cnt + 1 X$ MAKE$Transport == "ANET+" X$ MAKE$Device == ANETdevice X$ MAKE$TCP == "ANET" X$ MAKE$Include == "anetp$lib,sys$library" X$ ENDIF X$ IF decnet .NES. "***" !----- DECNET -------------------------------------- V---- X$ THEN X$ Cnt = Cnt + 1 X$ MAKE$Transport == "DECnet" X$ MAKE$Device == "NL:" X$ MAKE$TCP == "DUMMY" X$ MAKE$Include == "sys$library" X$ ENDIF X$ IF (cnt .GT. 1) .OR. (cnt .EQ. 0) !----- Unknown ------------------------- V---- X$ THEN X$ IF MAKE$HelpMode .EQS. "FULL" THEN CALL PerformHelp "TCPIP" X$SelectTCPIP: X$ WRITE sys$output "Detected devices supporting the following TCP/IP imple Vmentations:" X$ IF cmu .NES. "***" THEN WRITE sys$output " `091C`093 CMU/tek V (device ''CMUdevice')" X$ IF ucx .NES. "***" THEN WRITE sys$output " `091U`093 UCX (DEC) V (device ''UCXdevice')" X$ IF win .NES. "***" THEN WRITE sys$output " `091W`093 Wollongong ( VTWG) (device ''WINdevice')" X$ IF psc .NES. "***" THEN WRITE sys$output " `091P`093 Process Soft Vware (device ''PSCdevice')" X$ IF multinet .NES. "***" THEN WRITE sys$output " `091M`093 MultiNet (TG VV) (device ''WINdevice')" X$ IF exos .NES. "***" THEN WRITE sys$output " `091E`093 EXOS V (device ''EXOSdevice')" X$ IF anet .NES. "***" THEN WRITE sys$output " `091A`093 ANET+ V (device ''ANETdevice')" X$ WRITE sys$output " `091D`093 DECnet objec Vt (no special device)" X$ WRITE sys$output " `091X`093 Exit MAKEFIL VE creation" X$ INQUIRE/NOPUNCT line "Which one shall I use for compilation ? " X$ IF (line .EQS. "?") THEN CALL PerformHelp "TCPIP" X$ IF (line .NES. "C") .AND. (line .NES. "U") .AND. (line .NES. "W") .AND. V - X (line .NES. "P") .AND. (line .NES. "M") .AND. (line .NES. "E") .AND. V - X (line .NES. "A") .AND. - X (line .NES. "D") .AND. (line .NES. "X") THEN GOTO SelectTCPIP X$ Cnt = 0 X$ cmu := "***" X$ win := "***" X$ ucx := "***" X$ psc := "***" X$ exos := "***" X$ anet := "***" X$ multinet := "***" X$ decnet := "***" X$ IF (line .EQS. "C") THEN cmu=CMUdevice X$ IF (line .EQS. "U") THEN ucx=UCXdevice X$ IF (line .EQS. "W") THEN win=WINdevice X$ IF (line .EQS. "P") THEN psc=PSCdevice X$ IF (line .EQS. "M") THEN multinet="TRUE" X$ IF (line .EQS. "E") THEN exos=EXOSdevice X$ IF (line .EQS. "A") THEN anet=ANETdevice X$ IF (line .EQS. "D") THEN decnet="TRUE" X$ IF (line .NES. "X") THEN GOTO DetectTCPIP X$ WRITE sys$output "%MAKE-F-TCPIP, NEWS MAKE aborted due to unknown TCP/IP V software." X$ MAKE$TCP :== "***" X$ ELSE X$ WRITE sys$output "Using TCP/IP implementation of ''MAKE$Transport' with V device name ''MAKE$Device'" X$ ENDIF X$ EXIT X$ ENDSUBROUTINE X! X! X! X$!************************************************************************** V**** X$GetVersion:`009`009!Returns global variables MAKE$(Version,Major,Minor) X$`009`009`009!MAKE$Version `091text string representing version (X.YY)`093 X$`009`009`009!MAKE$Major `091major version number`093 X$`009`009`009!MAKE$Minor `091minor version number`093 X$`009`009`009!MAKE$TalkVersion `091text string of version (X.YY)`093 X$!************************************************************************** V**** X$ SUBROUTINE X$ OPEN/READ fd version.h X$ READ fd Line X$ READ fd Line X$ READ fd Line X$ READ fd Line X$ READ fd Line1 X$ READ fd Line X$ READ fd Line X$ READ fd Line X$ READ fd Line X$ READ fd Line X$ READ fd Line2 X$ CLOSE fd X$ x = F$EXTRACT(17,30,Line1) X$ MAKE$Major == F$EXTRACT(0,F$LOCATE(".",x),x) X$ MAKE$Minor == F$EXTRACT(F$LOCATE(".",x)+1,F$LOCATE("""",x)-F$LOCATE(".", Vx)-1,x) X$ MAKE$Version == MAKE$Major + "." + MAKE$Minor X$ x = F$EXTRACT(21,30,Line2) X$ TalkMajor = F$EXTRACT(0,F$LOCATE(".",x),x) X$ TalkMinor = F$EXTRACT(F$LOCATE(".",x)+1,F$LOCATE("""",x)-F$LOCATE(".",x)-1 V,x) X$ MAKE$TalkVersion == TalkMajor + "." + TalkMinor X$ EXIT X$ ENDSUBROUTINE X! X! X! X$!************************************************************************** V**** X$OptionFile:`009`009!Creates option file NEWS.OPT X$!************************************************************************** V**** X$ SUBROUTINE X$ NET = "NO" X$ IF F$SEARCH("sys$library:neterror.obj") .NES. "" THEN NET = "YES" X$ OPEN/WRITE fd news.opt X$ WRITE fd "!***********************************" X$ WRITE fd "!* VMS NEWS linker option file *" X$ WRITE fd "!***********************************" X$ WRITE fd "!" X$ WRITE fd "!VMS NEWS source files" X$ WRITE fd "!" X$ WRITE fd "news.obj, data.obj, constants.obj, startup.obj, -" X$ WRITE fd "analyze.obj, -" X$ WRITE fd "smg.obj, -" X$ WRITE fd "command.obj, cmdpost.obj, cmdconf.obj, cmdshow.obj, cmdsys.obj, V -" X$ WRITE fd "cmdstartup.obj, cmddef.obj, errors.obj, -" X$ WRITE fd "net_decnet.obj, tcp_"+ F$EDIT(MAKE$TCP,"LOWERCASE") +".obj, -" X$ WRITE fd "!" X$ WRITE fd "!Additional editors and TCP/IP depended (sharable) libraries" X$ WRITE fd "!" X$ IF NET .EQS. "YES" THEN WRITE fd "sys$library:neterror.obj, -" X$ IF MAKE$TCP .EQS. "WIN" X$ THEN X$ IF F$SEARCH("twg$tcp:`091netdist.lib`093twglib.olb") .EQS. "" X$ THEN X$ WRITE fd "twg$tcp:`091netdist.lib`093libnet.olb/LIBRARY, -" X$ WRITE fd "twg$tcp:`091netdist.lib`093libnetacc.olb/LIBRARY, -" X$ WRITE fd "twg$tcp:`091netdist.lib`093libnet.olb/LIBRARY, -" X$ ELSE X$ WRITE fd "twg$tcp:`091netdist.lib`093twglib.olb/LIBRARY, -" X$ ENDIF X$ ENDIF X$ IF MAKE$TCP .EQS. "ANET" X$ THEN X$ WRITE fd "anetp$lib:anetp_libshr.exe/SHARE, -" X$ WRITE fd "anetp$lib:anetmsg.exe/SHARE, -" X$ WRITE fd "anetp$lib:libsocket.olb/LIBRARY, -" X$ ENDIF X$ IF MAKE$TCP .EQS. "UCX" THEN WRITE fd "sys$share:ucx$ipc.olb/LIBRARY, -" X$ IF MAKE$TCP .EQS. "PSC" THEN WRITE fd "tcpip_root:socklib.olb/LIBRARY, -" X$ IF MAKE$TCP .EQS. "TGV" THEN WRITE fd "multinet:multinet_socket_library.ex Ve/SHARE, -" X$ IF MAKE$LSE .EQS. "YES" THEN WRITE fd "sys$share:lseshr.exe/SHARE, -" X$ WRITE fd "!" X$ WRITE fd "!System specific and always required (sharable) libraries" X$ WRITE fd "!" X$ WRITE fd "sys$share:tpushr.exe/SHARE, -" X$ WRITE fd "sys$share:edtshr.exe/SHARE, -" X$ WRITE fd "sys$share:tecoshr.exe/SHARE, -" X$ WRITE fd "sys$share:vaxcrtl.exe/SHARE" X$ WRITE fd "!" X$ WRITE fd "!Basic LINK options" X$ WRITE fd "!" X$ WRITE fd "NAME=""VMS_NEWS""" X$ WRITE fd "IDENTIFICATION=""''MAKE$Version'""" X$ WRITE fd "STACK=10" X$ WRITE fd "IOSEGMENT=64,P0BUFS" X$ WRITE fd "!" X$ WRITE fd "!`091end of file`093" X$ CLOSE fd X$ PURGE/NOLOG/NOCONFIRM news.opt X$ OPEN/WRITE fd talk.opt X$ WRITE fd "!***********************************" X$ WRITE fd "!* VMS TALK linker option file *" X$ WRITE fd "!***********************************" X$ WRITE fd "!" X$ WRITE fd "!VMS TALK source files" X$ WRITE fd "!" X$ WRITE fd "talk.obj, errors.obj, -" X$ WRITE fd "tcp_"+ F$EDIT(MAKE$TCP,"LOWERCASE") +".obj, -" X$ WRITE fd "!" X$ WRITE fd "!Additional TCP/IP depended (sharable) libraries" X$ WRITE fd "!" X$ IF NET .EQS. "YES" THEN WRITE fd "sys$library:neterror.obj, -" X$ IF MAKE$TCP .EQS. "WIN" X$ THEN X$ IF F$SEARCH("twg$tcp:`091netdist.lib`093twglib.olb") .EQS. "" X$ THEN X$ WRITE fd "twg$tcp:`091netdist.lib`093libnet.olb/LIBRARY, -" X$ WRITE fd "twg$tcp:`091netdist.lib`093libnetacc.olb/LIBRARY, -" X$ WRITE fd "twg$tcp:`091netdist.lib`093libnet.olb/LIBRARY, -" X$ ELSE X$ WRITE fd "twg$tcp:`091netdist.lib`093twglib.olb/LIBRARY, -" X$ ENDIF X$ ENDIF X$ IF MAKE$TCP .EQS. "ANET" X$ THEN X$ WRITE fd "anetp$lib:anetp_libshr.exe/SHARE, -" X$ WRITE fd "anetp$lib:anetmsg.exe/SHARE, -" X$ WRITE fd "anetp$lib:libsocket.olb/LIBRARY, -" X$ ENDIF X$ IF MAKE$TCP .EQS. "UCX" THEN WRITE fd "sys$share:ucx$ipc.olb/LIBRARY, -" X$ IF MAKE$TCP .EQS. "PSC" THEN WRITE fd "tcpip_root:socklib.olb/LIBRARY, -" X$ IF MAKE$TCP .EQS. "TGV" THEN WRITE fd "multinet:multinet_socket_library.ex Ve/SHARE, -" X$ WRITE fd "!" X$ WRITE fd "!System specific and always required (sharable) libraries" X$ WRITE fd "!" X$ WRITE fd "sys$share:vaxcrtl.exe/SHARE" X$ WRITE fd "!" X$ WRITE fd "!Basic LINK options" X$ WRITE fd "!" X$ WRITE fd "NAME=""VMS_TALK""" X$ WRITE fd "IDENTIFICATION=""''MAKE$TalkVersion'""" X$ WRITE fd "STACK=10" X$ WRITE fd "IOSEGMENT=64,P0BUFS" X$ WRITE fd "!" X$ WRITE fd "!`091end of file`093" X$ CLOSE fd X$ PURGE/NOLOG/NOCONFIRM talk.opt X$ EXIT X$ ENDSUBROUTINE X! X! X! X$!************************************************************************** V**** X$CreateMMS:`009`009!Creates MMS description file DESCRIP.MMS X$!************************************************************************** V**** X$ SUBROUTINE X$ IF MAKE$LSE .EQS. "YES" X$ THEN X$ LSEDIT = ",LSE" X$ ELSE X$ LSEDIT = "" X$ ENDIF X$ IF MAKE$NEWmail .EQS. "YES" THEN CALLABLE = ",CALLABLE_MAIL" X$ IF MAKE$NEWmail .EQS. "NO" THEN CALLABLE = "" X$ IF MAKE$NEWmail .EQS. "NEVER" THEN CALLABLE = ",NO_MAIL" X$ OPEN/WRITE fd descrip.tmp X$ WRITE fd "!" X$ WRITE fd "!=============================================================== V================" X$ WRITE fd "! Data generated automatically by MAKE.COM" X$ WRITE fd "!=============================================================== V================" X$ WRITE fd "!" X$ WRITE fd "TCPIP = ''MAKE$TCP'" X$ WRITE fd "TRANSPORT = ''MAKE$Transport'" X$ WRITE fd "DEVICE = ''MAKE$Device'" X$ WRITE fd "LSE = ''LSEDIT'" X$ WRITE fd "CALLABLE = ''CALLABLE'" X$ WRITE fd "SPECIALS = ''MAKE$Specials'" X$ WRITE fd "CC_INCLUDE = ''MAKE$Include'" X$ WRITE fd "MAJOR = ''MAKE$Major'" X$ WRITE fd "MINOR = ''MAKE$Minor'" X$ CLOSE fd X$ CREATE descrip.mms X$ DEFINE sys$error NL: X$ DEFINE sys$output NL: X$ APPEND descrip.tmp,descrip.template descrip.mms X$ DEASSIGN sys$error X$ DEASSIGN sys$output X$ PURGE/NOLOG/NOCONFIRM descrip.mms X$ DELETE/NOLOG/NOCONFIRM descrip.tmp;* X$ EXIT X$ ENDSUBROUTINE X! X! X! X$!************************************************************************** V**** X$CheckHeader:`009`009!Scan through source .C and .H files for #includes X$`009`009`009!On error (e.g. missing headerfile) set termination flag X$!************************************************************************** V**** X$ SUBROUTINE X$ WRITE sys$output "Now scanning through all source files for headerfile che Vck." X$ IF F$SEARCH("sys$scratch:scanall.tmp") .NES. "" THEN DELETE/NOCONFIRM/NOL VOG sys$scratch:scanall.tmp;* X$ IF F$SEARCH("sys$scratch:scanfile.tmp") .NES. "" THEN DELETE/NOCONFIRM/NOL VOG sys$scratch:scanfile.tmp;* X$ CREATE sys$scratch:scanall.tmp X$ Num = 0 X$CheckLoop: X$ File = F$ELEMENT(Num,",",P1) X$ IF File .EQS. "," THEN GOTO CheckLoopEnd X$ Ext = ".c" X$ IF F$SEARCH("''File'''Ext'") .EQS. "" THEN Ext = ".h" X$ IF F$SEARCH("''File'''Ext'") .EQS. "" THEN GOTO CheckIgnore X$ Message = F$ENVIRONMENT("MESSAGE") X$ SET MESSAGE/NOTEXT/NOSEVERITY/NOIDENTIFICATION/NOFACILITY X$ SEARCH 'File''Ext' "#include <"/OUTPUT=sys$scratch:scanhead.tmp X$ SET MESSAGE'Message' X$ APPEND sys$scratch:scanhead.tmp sys$scratch:scanall.tmp X$CheckIgnore: X$ Num = Num + 1 X$ GOTO CheckLoop X$CheckLoopEnd: X$ DELETE/NOCONFIRM/NOLOG sys$scratch:scanhead.tmp;* X$ OPEN/READ FRead sys$scratch:scanall.tmp X$ OPEN/WRITE FWrite sys$scratch:scanfile.tmp X$CheckLoop2: X$ READ/END_OF_FILE=CheckLoopEnd2 FRead Line X$ Start = F$LOCATE("<",Line) X$ Finish = F$LOCATE(">",Line) X$ Header = F$EXTRACT(Start+1,Finish-Start-1,Line) X$ WRITE FWrite Header X$ GOTO CheckLoop2 X$CheckLoopEnd2: X$ CLOSE FWrite X$ CLOSE FRead X$ SORT/NODUPLICATE sys$scratch:scanfile.tmp sys$scratch:scanfile.tmp X$ DELETE/NOCONFIRM/NOLOG sys$scratch:scanall.tmp;* X$ PURGE/NOCONFIRM/NOLOG sys$scratch:scanfile.tmp X$ OPEN/READ FRead sys$scratch:scanfile.tmp X$CheckLoop3: X$ READ/END_OF_FILE=CheckLoopEnd3 FRead Line X$ IF F$LOCATE(":",Line) .EQS. F$LENGTH(Line) X$ THEN X$ FullLine = "vaxc$include:" + Line X$ ELSE X$ FullLine = Line X$ ENDIF X$ DEFINE/NOLOG/USER vaxc$include 'MAKE$Include X$ IF (F$SEARCH(FullLine) .EQS. "") X$ THEN X$ WRITE sys$output "Missing header file: ''Line'" X$ MAKE$TCP :== "***" X$ ENDIF X$ GOTO CheckLoop3 X$CheckLoopEnd3: X$ CLOSE FRead X$ DELETE/NOCONFIRM/NOLOG sys$scratch:scanfile.tmp;* X$ IF MAKE$TCP .EQS. "***" X$ THEN X$ WRITE sys$output "%MAKE-F-HEADER, NEWS MAKE aborted because required hea Vderfiles are missing." X$ ELSE X$ WRITE sys$output "Passed headerfile check successfully." X$ ENDIF X$ EXIT X$ ENDSUBROUTINE X! X! X! X$!************************************************************************** V**** X$HelpFile:`009`009!Compiles VMS HELP file X$`009`009`009!P1 contains the filename of the source X$`009`009`009!P2 contains the filename of the library X$!************************************************************************** V**** X$ SUBROUTINE X$ P2 = "`091-.news$exe`093''P2'" X$ IF F$SEARCH("''P2'.HLB") .NES. "" X$ THEN X$ IF F$CVTIME(F$FILE_ATTRIBUTES("''P2'.HLB","RDT")) .GTS. - X F$CVTIME(F$FILE_ATTRIBUTES("''P1'.HLP","RDT")) X$ THEN X$ WRITE sys$output "Conversion of existing ''P1'.HLP skipped" X$ GOTO HlpEnd X$ ENDIF X$ ENDIF X$ Len=F$FILE_ATTRIBUTE("''P1'.HLP","EOF") X$ WRITE sys$output "Converting ''P1'.HLP (''Len' blocks)..." X$ LIBRARIAN/HELP/CREATE 'P2' 'P1' X$ PURGE/NOLOG/NOCONFIRM 'P1'.hlp X$ PURGE/NOLOG/NOCONFIRM 'P2'.hlb X$ SET FILE/TRUNCATE 'P2'.hlb X$HlpEnd: X$ EXIT X$ ENDSUBROUTINE X! X! X! X$!************************************************************************** V**** X$CldFile:`009`009!Compiles VMS CLD file X$`009`009`009!P1 contains the filename of the source X$!************************************************************************** V**** X$ SUBROUTINE X$ IF F$SEARCH("''P1'.OBJ") .NES. "" X$ THEN X$ IF F$CVTIME(F$FILE_ATTRIBUTES("''P1'.OBJ","RDT")) .GTS. - X F$CVTIME(F$FILE_ATTRIBUTES("''P1'.CLD","RDT")) X$ THEN X$ WRITE sys$output "Translation of existing ''P1'.CLD skipped" X$ GOTO CldEnd X$ ENDIF X$ ENDIF X$ Len=F$FILE_ATTRIBUTE("''P1'.CLD","EOF") X$ WRITE sys$output "Translating ''P1'.CLD (''Len' blocks)..." X$ SET COMMAND/OBJECT 'P1'.CLD X$CldEnd: X$ EXIT X$ ENDSUBROUTINE X! X! X! X$!************************************************************************** V**** X$MsgFile:`009`009!Compiles VMS MESSAGE file X$`009`009`009!P1 contains the filename of the source X$!************************************************************************** V**** X$ SUBROUTINE X$ IF F$SEARCH("''P1'.OBJ") .NES. "" X$ THEN X$ IF F$CVTIME(F$FILE_ATTRIBUTES("''P1'.OBJ","RDT")) .GTS. - X F$CVTIME(F$FILE_ATTRIBUTES("''P1'.MSG","RDT")) X$ THEN X$ WRITE sys$output "Translation of existing ''P1'.MSG skipped" X$ GOTO MsgEnd X$ ENDIF X$ ENDIF X$ Len=F$FILE_ATTRIBUTE("''P1'.MSG","EOF") X$ WRITE sys$output "Translating ''P1'.MSG (''Len' blocks)..." X$ MESSAGE/OBJECT 'P1'.MSG X$MsgEnd: X$ EXIT X$ ENDSUBROUTINE X! X! X! X$!************************************************************************** V**** X$CompileFile:`009`009!Compiles VMS C source file X$`009`009`009!P1 contains the filename of the source X$!************************************************************************** V**** X$ SUBROUTINE X$ IF F$SEARCH("''P1'.OBJ") .NES. "" X$ THEN X$ IF F$CVTIME(F$FILE_ATTRIBUTES("''P1'.OBJ","RDT")) .GTS. - X F$CVTIME(F$FILE_ATTRIBUTES("''P1'.C","RDT")) X$ THEN X$ IF F$EXTRACT(0,4,P1) .EQS. "TCP_" X$ THEN X$ DELETE/NOCONFIRM/NOLOG tcp_'MAKE$TCP'.obj;* X$ ELSE X$ WRITE sys$output "Compilation of existing ''P1'.C skipped" X$ GOTO CompileEnd X$ ENDIF X$ ENDIF X$ ENDIF X$ DefOpt = "" X$ IF MAKE$LSE .EQS. "YES" THEN DefOpt = DefOpt + ",LSE" X$ IF MAKE$NEWmail .EQS. "YES" THEN DefOpt = DefOpt + ",CALLABLE_MAIL" X$ IF MAKE$TalkMode .EQS. "YES" THEN DefOpt = DefOpt + ",FLUSH_LINES" X$ Len=F$FILE_ATTRIBUTE("''P1'.C","EOF") X$ WRITE sys$output "Compiling ''P1'.C (''Len' blocks)..." X$ DEFINE/NOLOG/USER vaxc$include 'MAKE$Include X$ CC 'P1'.C/DEFINE=(TRANSPORT="""''MAKE$Transport'""",DEVICE="""''MAKE$Devic Ve'"""'DefOpt') X$CompileEnd: X$ EXIT X$ ENDSUBROUTINE X! X! X! X$!************************************************************************** V**** X$LinkFiles:`009`009!Links source together X$`009`009`009!P1 contains a list of object files (without .OBJ in it) X$`009`009`009!P2 contains the executable image name X$!************************************************************************** V**** X$ SUBROUTINE X$ Num = 0 X$ Len = 0 X$LinkLoop: X$ File = F$ELEMENT(Num,",",P1) X$ IF File .EQS. "," THEN GOTO LinkLoopEnd X$ Len = Len + F$FILE_ATTRIBUTE("''File'.OBJ","EOF") X$ Num = Num + 1 X$ GOTO LinkLoop X$LinkLoopEnd: X$ IF F$SEARCH("sys$library:neterror.obj") .NES. "" X$ THEN X$ Len = Len + F$FILE_ATTRIBUTE("sys$library:neterror.obj","EOF") X$ ENDIF X$ WRITE sys$output "Linking ''P2'.EXE (objects have ''Len' blocks)..." X$ IF F$SEARCH("''P2'.err") .NES. "" THEN DELETE/NOCONFIRM/NOLOG 'P2'.err;* X$ DEFINE/NOLOG sys$error 'P2'.err X$ DEFINE/NOLOG sys$output NL: X$ LINK/EXE=`091-.news$exe`093'P2'.exe/SYMBOL='P2'.stb/NOTRACE/MAP='P2'.map/F VULL - X 'P2'.opt/OPTION X$ DEASSIGN sys$output X$ DEASSIGN sys$error X$LinkEnd: X$ PURGE/NOLOG/NOCONFIRM `091-...`093*.exe X$ PURGE/NOLOG/NOCONFIRM `091-...`093*.opt X$ PURGE/NOLOG/NOCONFIRM `091-...`093*.stb X$ PURGE/NOLOG/NOCONFIRM `091-...`093*.obj X$ PURGE/NOLOG/NOCONFIRM `091-...`093*.hlb X$ PURGE/NOLOG/NOCONFIRM `091-...`093*.err X$ PURGE/NOLOG/NOCONFIRM `091-...`093*.map X$ EXIT X$ ENDSUBROUTINE X! X! X! X$!************************************************************************** V**** X$GetLocalNodename:`009!Returns global variable MAKE$Address X$!************************************************************************** V**** X$ SUBROUTINE X$ IF MAKE$TCP .EQS. "CMU" THEN Default = F$TRNLNM("INTERNET_HOST_NAME") X$ IF MAKE$TCP .EQS. "WIN" THEN Default = F$TRNLNM("ARPANET_HOST_NAME") X$ IF MAKE$TCP .EQS. "UCX" THEN Default = F$TRNLNM("UCX$INET_HOST") X$ IF MAKE$TCP .EQS. "PSC" THEN Default = "***" X$ IF MAKE$TCP .EQS. "TGV" THEN Default = "***" X$ IF MAKE$TCP .EQS. "EXOS" THEN Default = "***" X$ IF MAKE$TCP .EQS. "ANET" THEN Default = "***" X$ IF MAKE$TCP .EQS. "DUMMY" THEN Default = F$GETSYI("NODENAME") X$ TYPE sys$input XNow setting up the minimum configuration of VMS NEWS: X$ IF MAKE$HelpMode .EQS. "FULL" THEN CALL PerformHelp "NODENAME" X$RegetLocalNodename: X$ inp = "" X$ INQUIRE/NOPUNCT inp "* Local Nodename ? `091''Default'`093 " X$ IF inp .EQS. "?" X$ THEN X$ CALL PerformHelp "NODENAME" X$ GOTO RegetLocalNodename X$ ENDIF X$ IF inp .EQS. "" THEN inp = Default X$ IF inp .EQS. "***" THEN GOTO RegetLocalNodename X$ MAKE$Address == inp X$ EXIT X$ ENDSUBROUTINE X! X! X! X$!************************************************************************** V**** X$GetServerNodename:`009!Returns global variable MAKE$Servername X$!************************************************************************** V**** X$ SUBROUTINE X$ inp = "" X$ IF MAKE$HelpMode .EQS. "FULL" THEN CALL PerformHelp "NNTPSERVER" X$RegetServerNodename: X$ INQUIRE/NOPUNCT inp "* NNTP server name? " X$ IF inp .EQS. "?" X$ THEN X$ CALL PerformHelp "NNTPSERVER" X$ GOTO RegetServerNodename X$ ENDIF X$ IF inp .EQS. "" THEN GOTO RegetServerNodename X$ MAKE$Servername == inp X$ EXIT X$ ENDSUBROUTINE X! X! X! X$!************************************************************************** V**** X$GetServerSoftware:`009!Returns global variable MAKE$Servertype X$!************************************************************************** V**** X$ SUBROUTINE X$ inp = "" X$ IF MAKE$HelpMode .EQS. "FULL" THEN CALL PerformHelp "NNTPTYPE" X$RegetServerSoftware: X$ INQUIRE/NOPUNCT inp "* NNTP server software ? `091CNEWS`093 " X$ IF inp .EQS. "?" X$ THEN X$ CALL PerformHelp "NNTPTYPE" X$ GOTO RegetServerSoftware X$ ENDIF X$ IF inp .EQS. "" THEN inp="CNEWS" X$ MAKE$Servertype == inp X$ EXIT X$ ENDSUBROUTINE X! X! X! X$!************************************************************************** V**** X$GetServerPort:`009`009!Returns global variable MAKE$Serverport X$!************************************************************************** V**** X$ SUBROUTINE X$ IF MAKE$TCP .EQS. "DUMMY" X$ THEN X$ Default = "NNTP=" X$ ELSE X$ Default = "119" X$ ENDIF X$ IF MAKE$HelpMode .EQS. "FULL" THEN CALL PerformHelp "NNTPPORT" X$ReGetServerPort: X$ inp = "" X$ INQUIRE/NOPUNCT inp "* NNTP server port ? `091''Default'`093 " X$ IF inp .EQS. "?" X$ THEN X$ CALL PerformHelp "NNTPPORT" X$ GOTO ReGetServerPort X$ ENDIF X$ IF inp .EQS. "" THEN inp = Default X$ MAKE$Serverport == inp X$ EXIT X$ ENDSUBROUTINE X! X! X! X$!************************************************************************** V**** X$GetMailTransport:`009!Returns global variable MAKE$MailTrans X$!************************************************************************** V**** X$ SUBROUTINE X$ inp = "" X$ IF MAKE$HelpMode .EQS. "FULL" THEN CALL PerformHelp "MAILTRANS" X$RegetMailTransport: X$ INQUIRE/NOPUNCT inp "* Default MAIL transport? " X$ IF inp .EQS. "?" X$ THEN X$ CALL PerformHelp "MAILTRANS" X$ GOTO RegetMailTransport X$ ENDIF X$ IF inp .EQS. "" THEN GOTO RegetMailTransport X$ MAKE$MailTrans == inp X$ EXIT X$ ENDSUBROUTINE X! X! X! X$!************************************************************************** V**** X$GetOrganisation:`009!Returns global variable MAKE$Organisation X$!************************************************************************** V**** X$ SUBROUTINE X$ inp = "" X$ IF MAKE$HelpMode .EQS. "FULL" THEN CALL PerformHelp "ORGANISATION" X$RegetOrganisation: X$ INQUIRE/NOPUNCT inp "* Local organisation text? " X$ IF inp .EQS. "?" X$ THEN X$ CALL PerformHelp "ORGANISATION" X$ GOTO RegetOrganisation X$ ENDIF X$ IF inp .EQS. "" THEN GOTO RegetOrganisation X$ MAKE$Organisation == inp X$ EXIT X$ ENDSUBROUTINE X! X! X! X$!************************************************************************** V**** X$GetTimezone:`009`009!Returns global variable MAKE$Timezone X$!************************************************************************** V**** X$ SUBROUTINE X$ inp = "" X$ IF MAKE$HelpMode .EQS. "FULL" THEN CALL PerformHelp "TIMEZONE" X$RegetTimezone: X$ INQUIRE/NOPUNCT inp "* Local Timezone? " X$ IF inp .EQS. "?" X$ THEN X$ CALL PerformHelp "TIMEZONE" X$ GOTO RegetTimezone X$ ENDIF X$ IF inp .EQS. "" THEN GOTO RegetTimezone X$ MAKE$Timezone == inp X$ EXIT X$ ENDSUBROUTINE X! X! X! X$!************************************************************************** V**** X$CreateConfiguration:`009!Updates configuration file NEWS_CONFIG.DAT X$!************************************************************************** V**** X$ SUBROUTINE X$ WRITE sys$output "Updating configuration file NEWS_CONFIG.DAT..." X$ CREATE sys$scratch:config.tmp X$ OPEN/APPEND fd sys$scratch:config.tmp X$ WRITE fd """''MAKE$Address'""" X$ WRITE fd """''MAKE$Organisation'""" X$ WRITE fd """''MAKE$Timezone'""" X$ WRITE fd """''MAKE$Serverport'""" X$ WRITE fd """''MAKE$Servername'""" X$ WRITE fd """''MAKE$Servertype'""" X$ WRITE fd """''MAKE$MailTrans'""" X$ CLOSE fd X$ Mess = F$ENVIRONMENT("MESSAGE") X$ SET MESSAGE/NOFACILITY/NOSEVERITY/NOIDENTIFICATION/NOTEXT X$ EDIT/TPU/NOSECTION/NODISPLAY/COMMAND=sys$input sys$scratch:config.tmp X!--------------------------------------------------------------------------- V---- XPROCEDURE DO_TOP() X ON_ERROR X RETURN; X ENDON_ERROR; X MOVE_VERTICAL(-10000); XENDPROCEDURE; X!--------------------------------------------------------------------------- V---- XPROCEDURE DO_SEARCH(XPatt,NewPatt) XLOCAL XLine,XRest; X ON_ERROR X Found_Range := 0; X RETURN; X ENDON_ERROR; X Found_Range := SEARCH(XPatt,FORWARD,EXACT); X POSITION(Found_Range); X ERASE_LINE; X COPY_TEXT(XPatt + " " + NewPatt); X SPLIT_LINE; X MOVE_VERTICAL(1); XENDPROCEDURE; X!--------------------------------------------------------------------------- V---- XSET(SUCCESS,OFF); Xinfo_buf := CREATE_BUFFER("`123info`125",GET_INFO(COMMAND_LINE,"FILE_NAME")) V; Xwork_buf := CREATE_BUFFER("`123work`125","`091-.news$exe`093news_config.dat" V); XPOSITION(info_buf); XLocalAddr := CURRENT_LINE; MOVE_VERTICAL(1); XLocalOrg := CURRENT_LINE; MOVE_VERTICAL(1); XLocalTime := CURRENT_LINE; MOVE_VERTICAL(1); XNNTPport := CURRENT_LINE; MOVE_VERTICAL(1); XNNTPserver := CURRENT_LINE; MOVE_VERTICAL(1); XNNTPtype := CURRENT_LINE; MOVE_VERTICAL(1); XMAILsoft := CURRENT_LINE; MOVE_VERTICAL(1); XPOSITION(work_buf); XDO_SEARCH("Address:",LocalAddr); DO_TOP(); XDO_SEARCH("Organisation:",LocalOrg); DO_TOP(); XDO_SEARCH("Timezone:",LocalTime); DO_TOP(); XDO_SEARCH("Serverport:",NNTPport); DO_TOP(); XDO_SEARCH("Servername:",NNTPserver); DO_TOP(); XDO_SEARCH("ServerType:",NNTPtype); DO_TOP(); XDO_SEARCH("Mail_Trans:",MAILsoft); XWRITE_FILE(work_buf); XQUIT; XEXIT; X!--------------------------------------------------------------------------- V---- X$ SET MESSAGE'Mess X$ DELETE/NOLOG/NOCONFIRM sys$scratch:config.tmp;* X$ PURGE/NOLOG/NOCONFIRM `091-.news$exe`093news_config.dat X$ EXIT X$ ENDSUBROUTINE X! X! X! X$!************************************************************************** V**** X$SetProtections:`009!Sets file protections X$!************************************************************************** V**** X$ SUBROUTINE X$ TYPE sys$input XSetting required file protections for package... X$ i = MAKE$Major*1000+MAKE$Minor X$ SET DEFAULT `091-.news$exe`093 X$ IF F$SEARCH("NEWS.EXE") .NES. "" X$ THEN X$ SET PROT=(S:RWED,O:RWED,G,W:RE) news.exe X$ RENAME news.exe news.exe;'i' X$ ENDIF X$ IF F$SEARCH("NEWS_CONFIG.DAT") .NES. "" X$ THEN X$ SET PROT=(S:RWED,O:RWED,G,W:R) news_config.dat X$ RENAME news_config.dat news_config.dat;'i' X$ ENDIF X$ IF F$SEARCH("NEWS_HELP.HLB") .NES. "" X$ THEN X$ SET PROT=(S:RWED,O:RWED,G,W:R) news_help.hlb X$ RENAME news_help.hlb news_help.hlb;'i' X$ ENDIF X$ IF F$SEARCH("NEWS_RFC977.DAT") .NES. "" X$ THEN X$ SET PROT=(S:RWED,O:RWED,G,W:R) news_rfc977.dat X$ RENAME news_rfc977.dat news_rfc977.dat;'i' X$ ENDIF X$ IF F$SEARCH("NEWS_RFC1036.DAT") .NES. "" X$ THEN X$ SET PROT=(S:RWED,O:RWED,G,W:R) news_rfc1036.dat X$ RENAME news_rfc1036.dat news_rfc1036.dat;'i' X$ ENDIF X$ IF F$SEARCH("NEWS_DEFAULT.RC") .NES. "" X$ THEN X$ SET PROT=(S:RWED,O:RWED,G,W:R) news_default.rc X$ RENAME news_default.rc news_default.rc;'i' X$ ENDIF X$ IF F$SEARCH("TALK.EXE") .NES. "" THEN SET PROT=(S:RWED,O:RWED,G,W:RE) talk V.exe X$ SET DEFAULT `091-.news$src`093 X$ EXIT X$ ENDSUBROUTINE X! X! X! X$!************************************************************************** V**** X$ShowLicense:`009`009!Displays the copyright message X$!************************************************************************** V**** X$ SUBROUTINE X$ INQUIRE/NOPUNCT dummy "Press to continue... " X$ TYPE sys$input X X +-------------------------------------------------------------------------- V--+ X `124 VMS NEWS 1.25, distribution version V `124 X `124 Copyright 1990,1991,1992 by Bernd Onasch (University of Karlsruhe) V `124 X `124 Copyright 1993 by Bernd Onasch (University of Ulm) V `124 X `124 V `032 V `124 X `124 VMS TALK 0.92 V `124 X `124 Copyright 1992 by Bernd Onasch (University of Karlsruhe) V `124 X `124 V `032 V `124 X `124 Permission is granted to any individual or institution to use, copy, V `124 X `124 or redistribute this software as long as all of the original files are V `124 X `124 included unmodified, that it is not sold for profit, and that this cop Vy- `124 X `124 right notice is retained. If this software is modifed, then it may be V used `124 X `124 locally but shall never be copied or redistributed at all. The modifie Vd `124 X `124 version shall not be offered locally as official version or inofficial V `124 X `124 patch anywhere. V `124 X +-------------------------------------------------------------------------- V--+ X `124 Please send an E-MAIL of this installation to (I won't do it automatic Vally)`124 X `124 uranus@pilhuhn.ka.sub.org CCC_ONAS@DULRUU51.BITNET V `124 X `124 bernd@rzsun2.rz.uni-karlsruhe.de CCC_ONAS@main01.rz.uni-ulm.de V `124 X `124 onasch@askdonald.ask.uni-karlsruhe.de X +-------------------------------------------------------------------------- V--+ X$ EXIT X$ ENDSUBROUTINE X! X! X! X$!************************************************************************** V**** X$CleanupSymbols:`009!Removes local symbols again X$!************************************************************************** V**** X$ SUBROUTINE X$ DELETE/SYMBOL/GLOBAL MAKE$MMSpres X$ DELETE/SYMBOL/GLOBAL MAKE$LSE X$ DELETE/SYMBOL/GLOBAL MAKE$NEWmail X$ DELETE/SYMBOL/GLOBAL MAKE$Specials X$ DELETE/SYMBOL/GLOBAL MAKE$TCP X$ DELETE/SYMBOL/GLOBAL MAKE$Transport X$ DELETE/SYMBOL/GLOBAL MAKE$Device X$ DELETE/SYMBOL/GLOBAL MAKE$Include X$ DELETE/SYMBOL/GLOBAL MAKE$Version X$ DELETE/SYMBOL/GLOBAL MAKE$Major X$ DELETE/SYMBOL/GLOBAL MAKE$Minor X$ DELETE/SYMBOL/GLOBAL MAKE$TalkVersion X$ DELETE/SYMBOL/GLOBAL MAKE$Address X$ DELETE/SYMBOL/GLOBAL MAKE$Organisation X$ DELETE/SYMBOL/GLOBAL MAKE$Timezone X$ DELETE/SYMBOL/GLOBAL MAKE$Serverport X$ DELETE/SYMBOL/GLOBAL MAKE$Servername X$ DELETE/SYMBOL/GLOBAL MAKE$HelpMode X$ EXIT X$ ENDSUBROUTINE X! X! X! X$!************************************************************************** V**** X$PerformHelp:`009`009!Displays a brief help text X$!************************************************************************** V**** X$ SUBROUTINE X$ IF MAKE$HelpMode .EQS. "FULL" THEN WRITE sys$output " " X$ IF P1 .EQS. "AUTOHELP" X$ THEN X$ TYPE sys$input X This MAKE procedure supports VMS INSTALL like help facilities. X Entering BRIEF, you only get the brief questions and can ask for X futher information. Entering FULL, you will get the additional X informations by default. X$ ENDIF X$ IF P1 .EQS. "TCPIP" X$ THEN X$ TYPE sys$input X This program to compile VMS NEWS requires the knowledge which TCP/IP X package you have installed on your system. Because it detected more X than one device that is known as TCP/IP device it has to ask you for X the proper TCP/IP software product. X You have to use the same TCP/IP product everywhere where you use this X version on VMS NEWS because it is linked against the TCP/IP libraries X that have to be present always. X$ ENDIF X$ IF P1 .EQS. "MMS" X$ THEN X$ TYPE sys$input X You can use the VAX/VMS make utility called MMS when answering "YES". X Answering "NO" forces me to not use the MMS utility and to emulate the X facilities VAX MMS has. X$ ENDIF X$ IF P1 .EQS. "LSE" X$ THEN X$ TYPE sys$input X You can add the possible use of LSEDIT here. Answering "YES" inserts the X callback functions to VMS NEWS (and requires then always when running a X LSEDIT on the system). Answering "NO" disables the feature of callable LSE V. X$ ENDIF X$ IF P1 .EQS. "MAIL_1" X$ THEN X$ TYPE sys$input X Here you have to tell the installation if your host has Internet Mail or X not. Answering "NO" disables Internet Mail at all within VMS NEWS. Answeri Vng X "YES" enables the Internet Mailing facilities of VMS NEWS. "NEW" specifies X that you Internet Mailer is able to perform callable MAIL as provided sinc Ve X VMS 5.0. X$ ENDIF X$ IF P1 .EQS. "MAIL_2" X$ THEN X$ TYPE sys$input X Here you have to tell the installation if your Internet Mailer is able to X perform callable MAIL (answer "YES") or not (answer "NO"). If you do not X know exactly, the answer "NO" is the better choice. X$ ENDIF X$ IF P1 .EQS. "CLI" X$ THEN X$ TYPE sys$input X To prevent misleading startup tries of VMS NEWS, you may disable the X possibility of starting NEWS with "RUN" or within a symbol using "$". X Answering with "YES" disables VMS NEWS startup via "RUN" and "$". Answerin Vg X "NO" forces VMS NEWS to accept every calling mechanism and try to guess X how it's called. X$ ENDIF X$ IF P1 .EQS. "LOGGING" X$ THEN X$ TYPE sys$input X On sites with real security interests it seems to be necessary to log X every users news access. NEWS is able to log every users newsgroups X access (but not to every article access). X It is recommended to use this option ONLY on such sites - otherwise X it may run into problems of privacy and freedom of information! X Answering "YES" enables logging to a hardcoded file in the system X managers directory. X$ ENDIF X$ IF P1 .EQS. "NODENAME" X$ THEN X$ TYPE sys$input X Insert here the local E-MAIL address of your host. Normally this name X is the same as the Internet Domain Name Service name of your host. X On VAXclusters the E-MAIL address is sometimes the same on the whole X cluster and differs from the Internet name. X The variable $NODE instead of the host entry inserts on run-time the X DECnet name as hostname (e.g. $NODE.domain.edu) X The variable $LOGICAL inserts the logical name translation of X NNTP_LOCALHOST (e.g. $LOGICAL.edu or just $LOGICAL) X$ ENDIF X$ IF P1 .EQS. "NNTPSERVER" X$ THEN X$ TYPE sys$input X Insert your favorite NNTP server here. If you do not know where the X next NNTP server is, try asking your network administrator. There is X no way beyond knowing to find NNTP servers. X When you access NNTP over DECnet, then insert here the DECnet nodename X or nodenumber (without "::"). X If your host has problems with Domain Name Resolving then better enter X the Internet Address Number here. X$ ENDIF X$ IF P1 .EQS. "NNTPTYPE" X$ THEN X$ TYPE sys$input X Insert the software type of your NNTP server here. If you do not know, X use the default CNEWS - that is till today the most common server software V. X Because of incompatible new NNTP server software (thanks to Richard Salz X and INND) you have to know the software of the server to initiate a X correct and usable client-server-connection. X Valid NNTP server types are ANUNEWS, BNEWS, CNEWS and INND. X$ ENDIF X$ IF P1 .EQS. "NNTPPORT" X$ THEN X$ TYPE sys$input X Insert the port of the above given NNTP server here. By default, Internet X NNTP servers use port 119. When accessing NNTP over DECnet, you have to X enter the DECnet object name or number (including the "=" at the end) here V. X$ ENDIF X$ IF P1 .EQS. "MAILTRANS" X$ THEN X$ TYPE sys$input X Insert the VMS MAIL prefix used by your Internet Mailer here. You have to X encapsule the whole prefix in quotes ("...") to keep the required ones in X mind of DCL. X SMTP over DECnet should look like """NODE::" X DEC's UCX Mailer uses by default "smtp%""" X MX (from Joe Madison) uses by default "mx%""" X PMDF (from InnoSoft) uses by default "in%""" X$ ENDIF X$ IF P1 .EQS. "ORGANISATION" X$ THEN X$ TYPE sys$input X Insert a text string that represents you local organisation name (e.g. X "University of Kansas, Comp. Sci. Dept.") X$ ENDIF X$ IF P1 .EQS. "TIMEZONE" X$ THEN X$ TYPE sys$input X Insert the timezone code of your site here. (e.g. MET, CET, GMT+01) X This character string has to be one that is understood by the NNTP server X you want to use (unfortunately the format is not standardizied). X$ ENDIF X$ EXIT X$ ENDSUBROUTINE X! X! X! X$!************************************************************************** V**** X$!`091end of file`093 X$!************************************************************************** V**** $ CALL UNPACK MAKE.COM;1025 350381989 $ create/nolog 'f' X$ TYPE sys$input X!*************************************************************************** V**** X!* X!* VMS NEWS Installer v1.0 X!* X!* Copyright 1992 by Bernd Onasch (University of Karlsruhe) X!* 1993 by Bernd Onasch (E-MAIL: uranus@pilhuhn.ka.sub.org) X!* X!*************************************************************************** V**** X X$ INST$PRIVMASK :== "" X$ Path = F$TRNLNM("sys$disk")+f$DIRECTORY() X$ Proc = F$ENVIRONMENT("PROCEDURE") X$ Proc = F$EXTRACT(0,F$LOCATE("`093",Proc),Proc) + ".news$src`093" X$ SET DEFAULT 'Proc X$! X$ CALL CheckPrivileges X$ IF INST$PRIVMASK .EQS. "" X$ THEN X$ SET DEFAULT 'Path X$ EXIT X$ ENDIF X$ CALL AddSystemHelp X$ CALL AddSystemCLI X$ CALL CopyFiles X$ x = F$SETPRV(INST$PRIVMASK) X$ DELETE/SYMBOL/GLOBAL INST$PRIVMASK X$ SET DEFAULT 'Path X$ EXIT X! X! X! X$!************************************************************************** V**** X$CheckPrivileges: X$!************************************************************************** V**** X$ SUBROUTINE X$ OldPriv = F$SETPRV("CMKRNL,SYSPRV") X$ IF F$PRIVILEGE("CMKRNL") .EQS. "FALSE" X$ THEN X$ x = F$SETPRV(OldPriv) X$ EXIT 10244 X$ ENDIF X$ IF F$PRIVILEGE("SYSPRV") .EQS. "FALSE" X$ THEN X$ x = F$SETPRV(OldPriv) X$ EXIT 10468 X$ ENDIF X$ TYPE sys$input XThis Procedure replaces the command NEWS in the systemwide DCLTABLES and Xalso replaces NEWS in the systemwide help library HELPLIB. X X$ReCheckPrivileges: X$ i = "" X$ INQUIRE/NOPUNCT i "Continue anyway `091YES`093 ? " X$ IF i .EQS. "" THEN i = "YES" X$ IF (i .EQS. "NO") .OR. (i .EQS. "N") X$ THEN X$ x = F$SETPRV(OldPriv) X$ EXIT 44 X$ ENDIF X$ IF (i .NES. "YES") .AND. (i .NES. "Y") THEN GOTO ReCheckPrivileges X$ INST$PRIVMASK == OldPriv X$ EXIT X$ ENDSUBROUTINE X! X! X! X$AddSystemHelp: X$!************************************************************************** V**** X$ SUBROUTINE X$ Mess = F$ENVIRONMENT("MESSAGE") X$ SET MESSAGE/NOFACILITY/NOSEVERITY/NOIDENTIFICATION/NOTEXT X$ EDIT/TPU/NOSECTION/NODISPLAY/COMMAND=sys$input helpfile.hlp X!--------------------------------------------------------------------------- V---- XPROCEDURE DO_TOP() X ON_ERROR X RETURN; X ENDON_ERROR; X MOVE_VERTICAL(-10000); XENDPROCEDURE; X!--------------------------------------------------------------------------- V---- XPROCEDURE DO_SEARCH(XPatt,NewPatt) XLOCAL XLine,XRest; X ON_ERROR X Found_Range := 0; X RETURN; X ENDON_ERROR; X Found_Range := SEARCH(XPatt,FORWARD,EXACT); X POSITION(Found_Range); X XLine := SUBSTR(CURRENT_LINE,1,INDEX(CURRENT_LINE,XPatt)-1); X XRest := SUBSTR(CURRENT_LINE,INDEX(CURRENT_LINE,XPatt)+LENGTH(XPatt),99); X IF (XLine = "") X THEN X ERASE_LINE; X! MESSAGE(NewPatt + "*" + XRest); X COPY_TEXT(XLine + NewPatt + XRest); X SPLIT_LINE; X MOVE_VERTICAL(1); X ELSE X! MESSAGE(Xline + "*" + XPatt + "*" + XRest); X MOVE_VERTICAL(1); X ENDIF; XENDPROCEDURE; X!--------------------------------------------------------------------------- V---- XSET(SUCCESS,OFF); Xwork_buf := CREATE_BUFFER("`123work`125",GET_INFO(COMMAND_LINE,"FILE_NAME")) V; XPOSITION(work_buf); XLOOP X DO_SEARCH("6 ","7 "); X EXITIF Found_Range = 0; XENDLOOP; XDO_TOP(); XLOOP X DO_SEARCH("5 ","6 "); X EXITIF Found_Range = 0; XENDLOOP; XDO_TOP(); XLOOP X DO_SEARCH("4 ","5 "); X EXITIF Found_Range = 0; XENDLOOP; XDO_TOP(); XLOOP X DO_SEARCH("3 ","4 "); X EXITIF Found_Range = 0; XENDLOOP; XDO_TOP(); XLOOP X DO_SEARCH("2 ","3 "); X EXITIF Found_Range = 0; XENDLOOP; XDO_TOP(); XLOOP X DO_SEARCH("1 ","2 "); X EXITIF Found_Range = 0; XENDLOOP; XDO_TOP(); XLOOP X DO_SEARCH("2 HELP","1 NEWS"); X EXITIF Found_Range = 0; XENDLOOP; XDO_TOP(); XLOOP X DO_SEARCH("2 NEWS","2 Startup"); X EXITIF Found_Range = 0; XENDLOOP; XWRITE_FILE(work_buf,"__HELP.HLP"); XQUIT; XEXIT; X!--------------------------------------------------------------------------- V---- X$ SET MESSAGE'Mess X$ WRITE sys$output "Adding NEWS to systemwide HELP file..." X$ LIBRARY/HELP/REPLACE sys$help:helplib __help X$ DELETE/NOLOG/NOCONFIRM __help.hlp;* X$ EXIT X$ ENDSUBROUTINE X! X! X! X$!************************************************************************** V**** X$AddSystemCLI: X$!************************************************************************** V**** X$ SUBROUTINE X$ Mess = F$ENVIRONMENT("MESSAGE") X$ SET MESSAGE/NOFACILITY/NOSEVERITY/NOIDENTIFICATION/NOTEXT X$ EDIT/TPU/NOSECTION/NODISPLAY/COMMAND=sys$input `091-.news$exe`093news.cld X!--------------------------------------------------------------------------- V---- XPROCEDURE DO_SEARCH(XPatt,NewPatt) XLOCAL XLine,XRest; X ON_ERROR X Found_Range := 0; X RETURN; X ENDON_ERROR; X Found_Range := SEARCH(XPatt,FORWARD,EXACT); X POSITION(Found_Range); X XLine := SUBSTR(CURRENT_LINE,1,INDEX(CURRENT_LINE,XPatt)-1); X XRest := SUBSTR(CURRENT_LINE,INDEX(CURRENT_LINE,XPatt)+LENGTH(XPatt),99); X ERASE_LINE; X! MESSAGE(XLine + "*" + NewPatt + "*" + XRest); X COPY_TEXT(XLine + NewPatt + XRest); X SPLIT_LINE; X MOVE_VERTICAL(1); XENDPROCEDURE; X!--------------------------------------------------------------------------- V---- XSET(SUCCESS,OFF); Xwork_buf := CREATE_BUFFER("`123work`125",GET_INFO(COMMAND_LINE,"FILE_NAME")) V; XPOSITION(work_buf); XDO_SEARCH("news$data:",""); XWRITE_FILE(work_buf,"__NEWS.CLD"); XQUIT; XEXIT; X!--------------------------------------------------------------------------- V---- X$ SET MESSAGE'Mess X$ WRITE sys$output "Adding NEWS to systemwide DCLTABLES..." X$ SET COMMAND/REPLACE __news/TABLE=sys$common:`091syslib`093dcltables.exe - X /OUTPUT=sys$common:`091syslib`093dcltables.exe X$ MCR INSTALL /COMMAND X REPLACE sys$share:dcltables.exe X EXIT X$ DELETE/NOLOG/NOCONFIRM __news.cld;* X$ EXIT X$ ENDSUBROUTINE X! X! X! X$!************************************************************************** V**** X$CopyFiles: X$!************************************************************************** V**** X$ SUBROUTINE X$ TYPE sys$input XThe following files are new by this installation: X SYS$SHARE:DCLTABLES.EXE `091modified`093 X SYS$HELP:HELPLIB.HLB `091modified`093 X SYS$SYSTEM:NEWS.EXE `091new`093 X SYS$SYSTEM:NEWS_CONFIG.DAT `091new`093 X SYS$SYSTEM:NEWS_DEFAULT.RC `091new`093 X SYS$SYSTEM:NEWS_HELP.HLB `091new`093 X SYS$SYSTEM:NEWS_RFC977.DAT `091new`093 X SYS$SYSTEM:NEWS_RFC1036.DAT `091new`093 X$ COPY/NOLOG/NOCONF/PROT=(s:rwed,o:rwed,g:rwed,w:re) `091-.news$exe`093news. Vexe sys$common:`091sysexe`093 X$ COPY/NOLOG/NOCONF/PROT=(s:rwed,o:rwed,g:rwed,w:re) `091-.news$exe`093news_ V*.* sys$common:`091sysexe`093 X$ PURGE/NOLOG/NOCONFIRM sys$system:news.exe X$ PURGE/NOLOG/NOCONFIRM sys$system:news_*.* X$ EXIT X$ ENDSUBROUTINE X! X! X! X$!************************************************************************** V**** X$!`091end of file`093 X$!************************************************************************** V**** $ CALL UNPACK INSTALL.COM;1025 889614425 $ create/nolog 'f' X/*************************************************************************** V*** X * X * VMS NEWS (part ANALYZE) X * X * Copyright 1990 by Bernd Onasch (University of Karlsruhe) X * 1993 by Bernd Onasch (E-MAIL: uranus@pilhuhn.ka.sub.org) X * X *************************************************************************** V*** X * X * HELP display handling X * ------------------------------------------------------------------------- V--- X * read_help(char *file) X * help_show_lines(int screen) X * help_keylines() X * help_redraw(int pos) X * int help_up(int screen, int num) X * int help_down(int screen, int num) X * help_handle() X * help_end() X * X * Analyzer for NNTP communications X * ------------------------------------------------------------------------- V--- X * analyze_article(char *text) X * analyze_xhdr(char *text) X * analyze_newsgroups(char *text) X * char *analyze_filter(char *text) X * analyze_newgroups(char *text) X * analyze_line(char *text) X * X *************************************************************************** V***/ X X#module ANALYZE "NNTP V1.25" X#include "header.h" X X/*************************************************************************** V***/ X Xstatic char *keypad`091`093=`123 X" ", X"VMS NEWS KeyPad", X"======== ======", X" ", X"Ctrl-A Ins<->Owr", X"Ctrl-H Start Line", X"Ctrl-E End of Line", X"Ctrl-X Delete Line", X"Ctrl-U Delete Line", X"Ctrl-C Interrupt", X"Ctrl-Y Interrupt", X" ", X"Ctrl-Z Exit", X"Ctrl-R Quit", X"Ctrl-W Redraw", X"Ctrl-L Redraw", X" ", X"F10 Exit", X" ", X"", X"@" X`125; X X/*************************************************************************** V***/ X Xread_help(filename) Xchar *filename; X`123 X FILE *fd; X char tmp`091256`093,*tp; X int i; X globalvalue int NEWS$_IVHLPFIL; X X help_lines=0; X if (!*filename) `123 X i=0; while (*keypad`091i`093!='@') `123 X strcpy(help`091help_lines++`093=malloc(strlen(keypad`091i`093)+1),keyp Vad`091i`093); X i++; X `125 X `125 else `123 X if (fd=fopen(filename,"r")) `123 X while (fgets(tmp,255,fd)) `123 X tp=tmp; while (*tp) if (*tp=='\n' `124`124 *tp=='\r') *tp='\0'; else V tp++; X if (help_linesanz) pos=anz; X per=(100*pos)/anz; X if (pos==anz) inp_comment(""); X else inp_comment("",pos,anz,per); X`125 X X/*-------------------------------------------------------------------------- V--*/ X Xhelp_keylines() X`123 X int i,x,y; X char *tp,*tp2,txt`091256`093; X X stop_smg_update(); X for (i=0;i=24) help_keylines(); X`125 X X/*-------------------------------------------------------------------------- V--*/ X Xint help_up(screen,num) Xint screen,num; X`123 X int i; X X for (i=0;ixCOLS) `123 X strncpy(t,text,xCOLS-1); t`091xCOLS-1`093='`124'; t`091xCOLS`093=' V\0'; X text+=xCOLS-1; X strcpy(article_text`091article_lines++`093=malloc(strlen(t)+1),t); X `125 X strcpy(article_text`091article_lines++`093=malloc(strlen(text)+1),te Vxt); X `125 else fprintf(save_fd,"%s\n",text); X break; X `125 X`125 X X/*************************************************************************** V***/ X Xanalyze_xhdr(text) Xchar *text; X`123 X int num; X char *tp; X globalvalue int NEWS$_XHDRSRV,NEWS$_TOOMANYART; X X if (articleanz>MAXARTICLES) `123 X if (articleanz==MAXARTICLES+1) `123 X inp_comment("`091Received XHDR data up to #%d`093",MAXARTICLES); X geterror(fac,NEWS$_TOOMANYART); X `125 X articleanz++; X return; X `125 X num=atoi(text); X while(*text!=' ') text++; text++; X switch (do_articlelist) `123 X case 1: X tp=PTR_SUBJECT; strcpy(fao,c$asc(tp)); X articles`091articleanz`093.number=num; X articles`091articleanz`093.unread=TRUE; X articles`091articleanz`093.lines= -1; X articles`091articleanz`093.from=NIL; X articles`091articleanz`093.date=NIL; X articles`091articleanz`093.keywords=NIL; X articles`091articleanz`093.summary=NIL; X articles`091articleanz`093.message_id=NIL; X articles`091articleanz`093.references=NIL; X strcpy(articles`091articleanz++`093.subject=malloc(strlen(text)+1),tex Vt); X break; X case 2: X tp=PTR_LINES; strcpy(fao,c$asc(tp)); X if (articles`091articleanz`093.number==num) articles`091articleanz++`0 V93.lines=atoi(text); X else `123 X geterror(fac,NEWS$_XHDRSRV,fao,num); X while (articles`091articleanz`093.number!=num) articleanz++; X articles`091articleanz++`093.lines=atoi(text); X `125 X break; X case 3: X tp=PTR_FROM; strcpy(fao,c$asc(tp)); X if (articles`091articleanz`093.number==num) strcpy(articles`091article Vanz++`093.from=malloc(strlen(text)+1),text); X else `123 X geterror(fac,NEWS$_XHDRSRV,fao,num); X while (articles`091articleanz`093.number!=num) articleanz++; X strcpy(articles`091articleanz++`093.from=malloc(strlen(text)+1),text V); X `125 X break; X case 4: X tp=PTR_KEYWORDS; strcpy(fao,c$asc(tp)); X if (articles`091articleanz`093.number==num) strcpy(articles`091article Vanz++`093.keywords=malloc(strlen(text)+1),text); X else `123 X geterror(fac,NEWS$_XHDRSRV,fao,num); X while (articles`091articleanz`093.number!=num) articleanz++; X strcpy(articles`091articleanz++`093.keywords=malloc(strlen(text)+1), Vtext); X `125 X break; X case 5: X tp=PTR_SUMMARY; strcpy(fao,c$asc(tp)); X if (articles`091articleanz`093.number==num) strcpy(articles`091article Vanz++`093.summary=malloc(strlen(text)+1),text); X else `123 X geterror(fac,NEWS$_XHDRSRV,fao,num); X while (articles`091articleanz`093.number!=num) articleanz++; X strcpy(articles`091articleanz++`093.summary=malloc(strlen(text)+1),t Vext); X `125 X break; X case 6: X tp=PTR_DATE; strcpy(fao,c$asc(tp)); X if (articles`091articleanz`093.number==num) strcpy(articles`091article Vanz++`093.date=malloc(strlen(text)+1),text); X else `123 X geterror(fac,NEWS$_XHDRSRV,fao,num); X while (articles`091articleanz`093.number!=num) articleanz++; X strcpy(articles`091articleanz++`093.date=malloc(strlen(text)+1),text V); X `125 X break; X case 7: X tp=PTR_MESSAGE_ID; strcpy(fao,c$asc(tp)); X if (articles`091articleanz`093.number==num) strcpy(articles`091article Vanz++`093.message_id=malloc(strlen(text)+1),text); X else `123 X geterror(fac,NEWS$_XHDRSRV,fao,num); X while (articles`091articleanz`093.number!=num) articleanz++; X strcpy(articles`091articleanz++`093.message_id=malloc(strlen(text)+1 V),text); X `125 X break; X case 8: X tp=PTR_REFERENCES; strcpy(fao,c$asc(tp)); X if (!strcmp(text,"(none)") `124`124 !strcmp(text,PTR_none)) `123 artic Vleanz++; break; `125 X if (articles`091articleanz`093.number==num) strcpy(articles`091article Vanz++`093.references=malloc(strlen(text)+1),text); X else `123 X geterror(fac,NEWS$_XHDRSRV,fao,num); X while (articles`091articleanz`093.number!=num) articleanz++; X strcpy(articles`091articleanz++`093.references=malloc(strlen(text)+1 V),text); X `125 X break; X `125 X if (articleanz%10==0) inp_comment("`091Receiving %s data (%d)`093",tp,arti Vcleanz); X`125 X X/*************************************************************************** V***/ X Xanalyze_newsgroups(text) Xchar *text; X`123 X char *textp,*lp,txt`091256`093,mod,nam`091256`093; X globalvalue int NEWS$_TOOMANYGRPS; X X if (groupanz>MAXGROUPS) `123 X if (groupanz==MAXGROUPS+1) `123 X inp_comment("`091Received LIST data up to #%d`093",MAXGROUPS); X geterror(fac,NEWS$_TOOMANYGRPS); X `125 X groupanz++; X return; X `125 X textp=text; X lp=nam; tillspace(textp,lp); X lp=txt; whilespace(textp); tillspace(textp,lp); groups`091groupanz`093.fin Vish=atoi(txt); X lp=txt; whilespace(textp); tillspace(textp,lp); groups`091groupanz`093.sta Vrt=atoi(txt); X whilespace(textp); groups`091groupanz`093.mode= *textp; X mod=groups`091groupanz`093.mode; X groups`091groupanz`093.registered=FALSE; X if (mod==NEWS_GRP_MODERATED `124`124 mod==NEWS_GRP_CROSSREF `124`124 X mod==NEWS_GRP_POSTING `124`124 mod==NEWS_GRP_NOPOSTING) X strcpy(groups`091groupanz++`093.name=malloc(strlen(nam)+1),nam); X if (groupanz%50==0) inp_comment("`091Receiving LIST data (%d)`093",groupan Vz); X`125 X X/*************************************************************************** V***/ X Xchar *analyze_filter(text) Xchar *text; X`123 X char *lp,result`0911024`093; X unsigned char tmp; X X if (do_getarticle && !strcmp(text,"\f")) `123 strcpy(result,text); return( Vresult); `125 X lp=text; while (*lp) `123 X tmp=(unsigned char)*lp; X if (tmp<32 `124`124 (tmp>127 && tmp<160)) switch (*lp) `123 X case 5: /* BEL */ X case 9: /* HT */ X break; X default: X *lp='.'; break; X `125 X lp++; X `125 X strcpy(result,text); X return(result); X`125 X X/*************************************************************************** V***/ X Xanalyze_newgroups(text) Xchar *text; X`123 X int i; X uword key=0; X bool flag; X char tmp`091256`093,*ptr; X X if ((ptr=strchr(text,' '))!=NULL) *ptr='\0'; X ngroups++; X if (ngroups==1) `123 X set_cursor(text_id,xROWS-4,1); X put_text(text_id,"List of new newsgroups follows:",0,0,TRUE); X if (!noscr) `123 X put_text(text_id,PTR_1SPC,0,0,TRUE); X put_text(text_id,"`091Enter 'Y' to register`093",0,0,TRUE); X put_text(text_id,"`091Enter 'N' to skip registration`093",0,0,TRUE); X put_text(text_id,"`091Enter 'A' to register all following`093",0,0,TRU VE); X put_text(text_id,"`091Enter 'Q' to skip registration on all following` V093",0,0,TRUE); X put_text(text_id,PTR_1SPC,0,0,TRUE); X put_text(text_id,PTR_1SPC,0,0,TRUE); X set_cursor(text_id,xROWS-4,1); X `125 else do_queryngroups=NEWS_NG_REJECTALL; X `125 X strcpy(tmp,text); strcat(tmp," `091(Y)es, (N)o`093 ? "); X flag=FALSE; do `123 X switch (do_queryngroups) `123 X case NEWS_NG_QUERY: key=read_key(kbd_id,tmp,text_id); break; X case NEWS_NG_ACCEPTALL: key=SMG$K_TRM_UPPERCASE_A; break; X case NEWS_NG_REJECTALL: key=SMG$K_TRM_UPPERCASE_Q; break; X `125 X switch (key) `123 X case SMG$K_TRM_UPPERCASE_A: X case SMG$K_TRM_LOWERCASE_A: X if (do_queryngroups==NEWS_NG_QUERY) do_queryngroups=NEWS_NG_ACCEPTAL VL; X else key=0; X case SMG$K_TRM_UPPERCASE_Y: X case SMG$K_TRM_LOWERCASE_Y: X i=0; while (iMAXGROUPS) `123 X geterror(fac,NEWS$_GRPSKIPPED,groupanz-MAXGROUPS); X groupanz=MAXGROUPS; X `125 X if (do_articlelist && articleanz>MAXARTICLES) `123 X geterror(fac,NEWS$_ARTSKIPPED,articleanz-MAXARTICLES); X articleanz=MAXARTICLES; X `125 X if (!noscr && do_ngroups && do_queryngroups==NEWS_NG_REJECTALL) `123 X put_text(text_id,PTR_1SPC,0,0,TRUE); X strcpy(tmp,"`091Press any key to continue`093"); X key=read_key(kbd_id,tmp,text_id); X `125 X in_text_mode=FALSE; xhdr_mode=FALSE; do_ngroups=FALSE; X do_newsgroups=FALSE; do_articlelist=FALSE; do_getarticle=FALSE; X if (do_savearticle) `123 do_savearticle=FALSE; fclose(save_fd); `125 X `125 X `125 else `123 X num=atoi(text); X if (posting==POSTING_UNKNOWN) posting=POSTING_RUNDOWN; X switch (num) `123 X case RPL_HELLO_POSTING_OK: X posting=(posting=POSTING_CMDSTART) `123 X switch (posting) `123 X case POSTING_CMDSTART: posting=POSTING_RUNDOWN; break; X case POSTING_CMD_ALLOWED: posting=POSTING_ALLOWED; break; X case POSTING_CMD_DISABLED: posting=POSTING_DISABLED; break; X `125 X break; X `125 X case RPL_COMMAND_UNKNOWN: X case RPL_COMMAND_SYNTAX: X case RPL_NO_GROUP: X case RPL_NO_ARTICLE: X case RPL_NNTP_RESTRICTION: X case RPL_NNTP_FAULT: X sprintf(l,"%s\r\n",PTR_QUIT); do_send(l); nntp_data.quit++; X show_error(text); break; X case RPL_ARTICLE_INVNUM: X case RPL_ARTICLE_NOTFOUND: X if (do_savearticle) `123 do_savearticle=FALSE; fclose(save_fd); `125 X header_lines= -1; X show_error(text); break; X case RPL_LIST_FOLLOWS: X do_newsgroups=TRUE; in_text_mode=TRUE; X break; X case RPL_NEWGROUPS: X ngroups=0; do_ngroups=TRUE; in_text_mode=TRUE; X break; X case RPL_GROUP_SELECTED: X groups`091grouppos`093.articles=atoi(text+4); X groups`091grouppos`093.start=atoi(lp=strchr(text+4,' ')); X groups`091grouppos`093.finish=atoi(strchr(lp+1,' ')); X break; X case RPL_ARTICLE_REQUEST: X sprintf(l,"%s %d\r\n",PTR_HEAD,atoi(text+4)); do_send(l); X nntp_data.head++; X sprintf(l,"%s %d\r\n",PTR_BODY,atoi(text+4)); do_send(l); X nntp_data.body++; X break; X case RPL_ARTICLE_HEAD: X if (xhdr_mode) `123 X in_text_mode=TRUE; X text+=4; lp=l; tillspace(text,lp); X if (!strcmp(l,PTR_SUBJECT)) do_articlelist=1; X if (!strcmp(l,PTR_LINES)) do_articlelist=2; X if (!strcmp(l,PTR_FROM)) do_articlelist=3; X if (!strcmp(l,PTR_KEYWORDS)) do_articlelist=4; X if (!strcmp(l,PTR_SUMMARY)) do_articlelist=5; X if (!strcmp(l,PTR_DATE)) do_articlelist=6; X if (!strcmp(l,PTR_MESSAGE_ID)) do_articlelist=7; X if (!strcmp(l,PTR_REFERENCES)) do_articlelist=8; X `125 else `123 X do_getarticle=1; in_text_mode=TRUE; X `125 X break; X case RPL_ARTICLE_BODY: X do_getarticle=2; in_text_mode=TRUE; X break; X case RPL_ARTICLE_FULL: X do_getarticle=TRUE; in_text_mode=TRUE; X break; X case RPL_POST_ARTICLE: X post_status=NEWS_POST_READY; X show_error(text); break; X case RPL_POST_DISALLOWED: X post_status=NEWS_POST_DISALLOWED; X show_error(text); break; X case RPL_POST_FAILED: X post_status=NEWS_POST_FAILED; X show_error(text); break; X case RPL_POST_READY: X post_status=NEWS_POST_FINISHED; X show_error(text); break; X default: X show_error(text); break; X `125 X `125 X`125 X X/*************************************************************************** V***/ $ CALL UNPACK [.NEWS$SRC]ANALYZE.C;1025 1298086890 $ create/nolog 'f' X/*************************************************************************** V*** X * X * VMS NEWS (part CMDCONF) X * X * Copyright 1990 by Bernd Onasch (University of Karlsruhe) X * 1993 by Bernd Onasch (E-MAIL: uranus@pilhuhn.ka.sub.org) X * X *************************************************************************** V*** X * X * Internal COMMAND file (CONFIGURATION FILES) X * ------------------------------------------------------------------------- V--- X * display_config(int num) X * display_default(int num) X * insert_fkey(int num,char *txt,bool mode) X * add_default(int num,char *txt,bool temp) X * write_default(int num,FILE *fd) X * add_config(int num,char *txt,bool temp) X * write_config(int num,FILE *fd) X * read_configuration() X * write_configuration() X * cmd_set_profile() X * cmd_show_profile() X * cmd_show_default() X * X *************************************************************************** V***/ X X#module CMDCONF "CMD V1.25" X#include "header.h" X X/*************************************************************************** V***/ X Xdisplay_config(num) Xint num; X`123 X int i; X char *t,tmp`091256`093,mask`091256`093,attr; X X switch (num) `123 X case NEWS_NUM_ADDRESS:`009t="Internet addr:";`009break; X case NEWS_NUM_SERVER:`009t="NEWS server:";`009break; X case NEWS_NUM_SERVERTYPE:`009t="NEWS software:";`009break; X case NEWS_NUM_PORT:`009`009t="NEWS port:";`009`009break; X case NEWS_NUM_ORGANISATION:`009t=PTR_COL_Organization;`009break; X case NEWS_NUM_TIMEZONE:`009t="Timezone:";`009`009break; X case NEWS_NUM_DISTRIBUTION:`009t=PTR_COL_Distribution;`009break; X case NEWS_NUM_EDITOR:`009t="Default editor:";`009break; X case NEWS_NUM_PERSONAL_NAME:t="Personal name:";`009break; X case NEWS_NUM_USERNAME:`009t="Username:";`009`009break; X case NEWS_NUM_SIGNATURE:`009t="Signature file:";`009break; X case NEWS_NUM_MARKER:`009t="REPLY marker:";`009break; X case NEWS_NUM_HEADERDISPLAY:t="Article header:";`009break; X case NEWS_NUM_NEWSENTRY:`009t="NEWS entry cmd:";`009break; X case NEWS_NUM_GROUPENTRY:`009t="Group entry cmd:";`009break; X case NEWS_NUM_SORTGROUP:`009t="Group sorted:";`009break; X case NEWS_NUM_GROUPAUTHORS:`009t="Article authors:";`009break; X case NEWS_NUM_GROUPLINES:`009t="Article lines:";`009break; X case NEWS_NUM_GROUPDATE:`009t="Article date:";`009break; X case NEWS_NUM_DUMPTERM:`009t="VT graphics dis.:";`009break; X case NEWS_NUM_MAILER:`009t="MAIL Transport:";`009break; X case NEWS_NUM_BROADCASTS:`009t="Broadcasts:";`009break; X case NEWS_NUM_AUTOSAVE:`009t="Update news.rc:";`009break; X case NEWS_NUM_PRINT:`009t="Default Printer:";`009break; X case NEWS_NUM_CLOCK:`009t="Display Clock:";`009break; X case NEWS_NUM_GROUPMODE:`009t="Group entry mode:";`009break; X case NEWS_NUM_KILLFILE:`009t="Kill-file usage:";`009break; X case NEWS_NUM_SAVEDIRECTORY:t="Def. SAVE-dir:";`009break; X `125 X switch (conf`091num`093.mode) `123 X case NEWS_MODE_NOVALUE: X sprintf(tmp,"%-18s",t); X put_text(text_id,tmp,0,0,TRUE); X break; X case NEWS_MODE_DEFAULT: X sprintf(tmp,"%-18s%s",t,conf`091num`093.text); X put_text(text_id,tmp,0,0,TRUE); X break; X case NEWS_MODE_USER: X case NEWS_MODE_TEMPORARY: X attr=(conf`091num`093.mode==NEWS_MODE_TEMPORARY)?SMG$M_BLINK:SMG$M_BOL VD; X sprintf(tmp,"%-18s%s",t,(conf`091num`093.text`0910`093)?conf`091num`09 V3.text:""); X if (conf`091NEWS_NUM_DUMPTERM`093.value) `123 X attr=SMG$M_NOATTR; X strcat(tmp,conf`091num`093.mode==NEWS_MODE_TEMPORARY?" `091temp`093" V:" `091user`093"); X `125 X for (i=0;i=18)?attr:SMG$M_NOATTR; X mask`091strlen(tmp)`093='\0'; X put_multi(text_id,tmp,mask,0,TRUE); X break; X `125 X`125 X X/*-------------------------------------------------------------------------- V--*/ X Xdisplay_default(num) Xint num; X`123 X int i; X char *t,tmp`091256`093,mask`091256`093,attr; X X switch (num) `123 X case DEFAULT_NUM_NEWSGROUPS:`009t=PTR_COL_Newsgroups;`009break; X case DEFAULT_NUM_SUBJECT:`009`009t=PTR_COL_Subject;`009break; X case DEFAULT_NUM_DISTRIBUTION:`009t=PTR_COL_Distribution;`009break; X case DEFAULT_NUM_REPLY_TO:`009`009t=PTR_COL_Reply_To;`009break; X case DEFAULT_NUM_FOLLOWUP_TO:`009t=PTR_COL_Followup_To;`009break; X case DEFAULT_NUM_SUMMARY:`009`009t=PTR_COL_Summary;`009break; X case DEFAULT_NUM_KEYWORDS:`009`009t=PTR_COL_Keywords;`009break; X case DEFAULT_NUM_EXPIRE:`009`009t=PTR_COL_Expires;`009break; X case DEFAULT_NUM_CONTROL:`009`009t=PTR_COL_Control;`009break; X case DEFAULT_NUM_APPROVED:`009`009t=PTR_COL_Approved;`009break; X case DEFAULT_NUM_USER_NAME_1:`009t="User header 1:";`009break; X case DEFAULT_NUM_USER_TEXT_1:`009t="User text 1:";`009break; X case DEFAULT_NUM_USER_NAME_2:`009t="User header 2:";`009break; X case DEFAULT_NUM_USER_TEXT_2:`009t="User text 2:";`009break; X `125 X switch (userdefault`091num`093.mode) `123 X case NEWS_MODE_NOVALUE: X sprintf(tmp,"%-20s",t); X put_text(text_id,tmp,0,0,TRUE); X break; X case NEWS_MODE_DEFAULT: X sprintf(tmp,"%-20s%s",t,userdefault`091num`093.text); X put_text(text_id,tmp,0,0,TRUE); X break; X case NEWS_MODE_USER: X case NEWS_MODE_TEMPORARY: X attr=(userdefault`091num`093.mode==NEWS_MODE_TEMPORARY)?SMG$M_BLINK:SM VG$M_BOLD; X sprintf(tmp,"%-20s%s",t,(userdefault`091num`093.text`0910`093)?userdef Vault`091num`093.text:""); X if (conf`091NEWS_NUM_DUMPTERM`093.value) `123 X attr=SMG$M_NOATTR; X strcat(tmp,userdefault`091num`093.mode==NEWS_MODE_TEMPORARY?" `091te Vmp`093":" `091user`093"); X `125 X for (i=0;i=20)?attr:SMG$M_NOATTR; X mask`091strlen(tmp)`093='\0'; X put_multi(text_id,tmp,mask,0,TRUE); X break; X `125 X`125 X X/*-------------------------------------------------------------------------- V--*/ X Xinsert_fkey(num,txt,mode) Xint num; Xchar *txt; Xbool mode; X`123 X char *tp,*tp2; X X tp=tp2=txt+1; while (*tp && *tp!='"') tp++; *tp++ ='\0'; X strcpy(fkeys`091num`093.command,tp2); X while (*tp && *tp!='"') tp++; tp2= ++tp; X while (*tp && *tp!='"') tp++; *tp='\0'; X strcpy(fkeys`091num`093.helptext,tp2); X fkeys`091num`093.mode=mode; X`125 X X/*-------------------------------------------------------------------------- V--*/ X Xadd_default(num,txt,mode) Xint num; Xchar *txt; Xbool mode; X`123 X if (*txt=='"') `123 *(txt+strlen(txt)-1)='\0'; txt++; `125 X strcpy(userdefault`091num`093.text,txt); X if (mode!=NEWS_MODE_TEMPORARY) strcpy(userdefault`091num`093.orig,txt); X userdefault`091num`093.mode=mode; X`125 X X/*-------------------------------------------------------------------------- V--*/ X Xwrite_default(num,fd) Xint num; XFILE *fd; X`123 X char *t,txt`091256`093; X X switch (num) `123 X case DEFAULT_NUM_NEWSGROUPS:`009t=PTR_CNF_NEWSGROUPS;`009break; X case DEFAULT_NUM_SUBJECT:`009`009t=PTR_CNF_SUBJECT;`009break; X case DEFAULT_NUM_DISTRIBUTION:`009t=PTR_CNF_DISTRIBUTION;`009break; X case DEFAULT_NUM_REPLY_TO:`009`009t=PTR_CNF_REPLY_TO;`009break; X case DEFAULT_NUM_FOLLOWUP_TO:`009t=PTR_CNF_FOLLOWUP_TO;`009break; X case DEFAULT_NUM_SUMMARY:`009`009t=PTR_CNF_SUMMARY;`009break; X case DEFAULT_NUM_KEYWORDS:`009`009t=PTR_CNF_KEYWORDS;`009break; X case DEFAULT_NUM_EXPIRE:`009`009t=PTR_CNF_EXPIRE;`009break; X case DEFAULT_NUM_CONTROL:`009`009t=PTR_CNF_CONTROL;`009break; X case DEFAULT_NUM_APPROVED:`009`009t=PTR_CNF_APPROVED;`009break; X case DEFAULT_NUM_USER_NAME_1:`009t=PTR_CNF_USER_NAME_1;`009break; X case DEFAULT_NUM_USER_TEXT_1:`009t=PTR_CNF_USER_TEXT_1;`009break; X case DEFAULT_NUM_USER_NAME_2:`009t=PTR_CNF_USER_NAME_2;`009break; X case DEFAULT_NUM_USER_TEXT_2:`009t=PTR_CNF_USER_TEXT_2;`009break; X `125 X if (userdefault`091num`093.mode==NEWS_MODE_USER) fprintf(fd,"DEFAULT_%s: % Vs\n",t,userdefault`091num`093.orig); X`125 X X/*-------------------------------------------------------------------------- V--*/ X Xadd_config(num,txt,mode) Xint num; Xchar *txt; Xbool mode; X`123 X int i; X X if (*txt=='"') `123 *(txt+strlen(txt)-1)='\0'; txt++; `125 X strcpy(conf`091num`093.text,txt); X if (mode!=NEWS_MODE_TEMPORARY) strcpy(conf`091num`093.orig,txt); X if ((i=atoi(txt))>0) conf`091num`093.value=i; X if (num==NEWS_NUM_AUTOSAVE) `123 X if (!strcmp(txt,"ON_EXIT")) conf`091num`093.value=0; X if (!strcmp(txt,"PERIODIC")) conf`091num`093.value=1; X `125 X if (num==NEWS_NUM_BROADCASTS) `123 X if (!strcmp(txt,"DISABLED")) conf`091num`093.value=0; X if (!strcmp(txt,"VISIBLE")) conf`091num`093.value=1; X `125 X if (num==NEWS_NUM_HEADERDISPLAY) `123 X if (!strcmp(txt,PTR_SHORT)) conf`091num`093.value=0; X if (!strcmp(txt,PTR_FULL)) conf`091num`093.value=1; X `125 X if (num==NEWS_NUM_CLOCK `124`124 num==NEWS_NUM_GROUPLINES `124`124 X num==NEWS_NUM_KILLFILE `124`124 num==NEWS_NUM_GROUPDATE `124`124 X num==NEWS_NUM_DUMPTERM) `123 X if (!strcmp(txt,PTR_NO)) conf`091num`093.value=0; X if (!strcmp(txt,PTR_YES)) conf`091num`093.value=1; X `125 X if (num==NEWS_NUM_GROUPAUTHORS) `123 X if (!strcmp(txt,PTR_NO)) conf`091num`093.value=0; X if (!strcmp(txt,PTR_YES)) conf`091num`093.value=1; X if (!strcmp(txt,PTR_FULL)) conf`091num`093.value=2; X `125 X if (num==NEWS_NUM_SORTGROUP) `123 X if (!strcmp(txt,PTR_NUMBER)) conf`091num`093.value=0; X if (!strcmp(txt,PTR_SUBJECT)) conf`091num`093.value=1; X if (!strcmp(txt,"THREAD")) conf`091num`093.value=2; X `125 X if (num==NEWS_NUM_NEWSENTRY) `123 X if (!strcmp(txt,"UNREAD/USED")) conf`091num`093.value=7; X if (!strcmp(txt,PTR_UNREAD)) conf`091num`093.value=6; X if (!strcmp(txt,"REGISTERED/USED")) conf`091num`093.value=3; X if (!strcmp(txt,PTR_REGISTERED)) conf`091num`093.value=2; X if (!strcmp(txt,PTR_USED)) conf`091num`093.value=1; X if (!strcmp(txt,PTR_ALL)) conf`091num`093.value=0; X `125 X if (num==NEWS_NUM_GROUPENTRY) `123 X if (!strcmp(txt,"TOP/READ")) conf`091num`093.value=3; X if (!strcmp(txt,PTR_TOP)) conf`091num`093.value=2; X if (!strcmp(txt,"BOTTOM/READ")) conf`091num`093.value=1; X if (!strcmp(txt,PTR_BOTTOM)) conf`091num`093.value=0; X `125 X if (num==NEWS_NUM_GROUPMODE) `123 X if (!strcmp(txt,PTR_ALL)) conf`091num`093.value=0; X if (!strcmp(txt,PTR_NEW)) conf`091num`093.value=1; X if (!strcmp(txt,PTR_SELECTED)) conf`091num`093.value=2; X `125 X conf`091num`093.mode=mode; X`125 X X/*-------------------------------------------------------------------------- V--*/ X Xwrite_config(num,fd) Xint num; XFILE *fd; X`123 X char *t,txt`091256`093; X X switch (num) `123 X case NEWS_NUM_EDITOR:`009t=PTR_CNF_EDITOR;`009break; X case NEWS_NUM_MARKER:`009t=PTR_CNF_MARKER;`009break; X case NEWS_NUM_SIGNATURE:`009t=PTR_CNF_SIGNATURE;`009break; X case NEWS_NUM_ORGANISATION:`009t=PTR_CNF_ORGANISATION;`009break; X case NEWS_NUM_PERSONAL_NAME:t=PTR_CNF_PERSONAL_NAME;break; X case NEWS_NUM_HEADERDISPLAY:t=PTR_CNF_HEADERDISPLAY;break; X case NEWS_NUM_NEWSENTRY:`009t=PTR_CNF_NEWSENTRY;`009break; X case NEWS_NUM_GROUPENTRY:`009t=PTR_CNF_GROUPENTRY;`009break; X case NEWS_NUM_SORTGROUP:`009t=PTR_CNF_SORTGROUP;`009break; X case NEWS_NUM_GROUPLINES:`009t=PTR_CNF_GROUPLINES;`009break; X case NEWS_NUM_GROUPDATE:`009t=PTR_CNF_GROUPDATE;`009break; X case NEWS_NUM_DUMPTERM:`009t=PTR_CNF_DUMPTERM;`009break; X case NEWS_NUM_GROUPAUTHORS:`009t=PTR_CNF_GROUPAUTHORS;`009break; X case NEWS_NUM_GROUPMODE:`009t=PTR_CNF_GROUPMODE;`009break; X case NEWS_NUM_BROADCASTS:`009t=PTR_CNF_BROADCASTS;`009break; X case NEWS_NUM_AUTOSAVE:`009t=PTR_CNF_AUTOSAVE;`009break; X case NEWS_NUM_PRINT:`009t=PTR_CNF_PRINT;`009break; X case NEWS_NUM_CLOCK:`009t=PTR_CNF_CLOCK;`009break; X case NEWS_NUM_KILLFILE:`009t=PTR_CNF_KILLFILE;`009break; X case NEWS_NUM_SAVEDIRECTORY:t=PTR_CNF_SAVEDIRECTORY;break; X `125 X if (conf`091num`093.mode==NEWS_MODE_USER) fprintf(fd,"%s: %s\n",t,conf`091 Vnum`093.orig); X`125 X X/*-------------------------------------------------------------------------- V--*/ X Xread_configuration() X`123 X char image`091256`093,filename`091256`093,*ptr,tmp`091256`093; X FILE *fd; X bool vflag=FALSE; X int i; X globalvalue int NEWS$_NOCNF,NEWS$_OLDCNF,NEWS$_CNFTXT,NEWS$_CNFKEY; X X display_order(); X for (i=0;i=0) `123 X display_config(disp_order`091i`093); X if ((i+1)%(xROWS-7)==0 && disp_order`091i+1`093>=0) `123 X set_cursor(text_id,xROWS-4,1); X put_text(text_id,PTR_Press_RET,SMG$M_BOLD,0,TRUE); X while (key!=SMG$K_TRM_NOKEY) `123 X key=read_key(kbd_id,PTR_NEWS_PROMPT,input_id); X switch (key) `123 X case SMG$K_TRM_CTRLW: X case SMG$K_TRM_CTRLL: X redraw_screen(paste_id); break; X case SMG$K_TRM_CTRLR: X cmd_quit(); break; X case SMG$K_TRM_CTRLZ: X case SMG$K_TRM_F10: X cmd_exit(); break; X case SMG$K_TRM_CR: X case SMG$K_TRM_ENTER: X key=SMG$K_TRM_NOKEY; break; X `125 X `125 X key=0; X clear_display(text_id); X set_cursor(text_id,2,1); X `125 X i++; X `125 X set_cursor(text_id,xROWS-4,1); X put_text(text_id,PTR_Press_RET,SMG$M_BOLD,0,TRUE); X while (key!=SMG$K_TRM_NOKEY) `123 X key=read_key(kbd_id,PTR_NEWS_PROMPT,input_id); X switch (key) `123 X case SMG$K_TRM_CTRLW: X case SMG$K_TRM_CTRLL: X redraw_screen(paste_id); break; X case SMG$K_TRM_CTRLR: X cmd_quit(); break; X case SMG$K_TRM_CTRLZ: X case SMG$K_TRM_F10: X cmd_exit(); break; X case SMG$K_TRM_CR: X case SMG$K_TRM_ENTER: X key=SMG$K_TRM_NOKEY; break; X `125 X `125 X switch (internal_mode&STS_HANDLE_BITS) `123 X case STS_HANDLE_GROUPS: X newsgroups_header(TRUE); X break; X case STS_HANDLE_SUBJECTS: X group_header(); X group_redraw(subjectscreen,articlepos,TRUE); X break; X case STS_HANDLE_ARTICLE: X article_header(); X article_redraw(articlescreen); X break; X `125 X`125 X X/*-------------------------------------------------------------------------- V--*/ X Xcmd_show_default() X`123 X int i; X uword key=0; X char txt`091256`093; X globalvalue int NEWS$_IVCMD; X X if (noscr) `123 geterror(fac,NEWS$_IVCMD); return; `125 X clear_display(text_id); X strcpy(txt,flag_description()); X show_header("%s%s - Defaults for user %s%s",PTR_NEWS_NAME,PTR_NEWS_VERSION V,conf`091NEWS_NUM_USERNAME`093.text,txt); X set_cursor(text_id,2,1); X i=0; while(i X Xchar phdr`091NEWS_MAX_PHDR`093`0911024`093,rhdr`091NEWS_MAX_RHDR`093`0911024 V`093; Xglobalref int news_table; X X/*************************************************************************** V***/ X Xchar *get_text(text) Xchar *text; X`123 X while (*text && *text!=' ' && *text!='\t') text++; X while (*text && (*text==' ' `124`124 *text=='\t')) text++; X return(text); X`125 X X/*-------------------------------------------------------------------------- V--*/ X Xpost_header(flag) Xbool flag; X`123 X char tmp`0911024`093; X X set_cursor(text_id,4,1); X put_text(text_id,PTR_COL_From,0,0,TRUE); X put_text(text_id,PTR_COL_Newsgroups,0,0,TRUE); X put_text(text_id,PTR_COL_Subject,0,0,TRUE); X put_text(text_id,PTR_COL_Date,0,0,TRUE); X put_text(text_id,PTR_COL_Distribution,0,0,TRUE); X put_text(text_id,PTR_COL_Organization,0,0,TRUE); X put_text(text_id,PTR_COL_X_News_Reader,0,0,TRUE); X if (flag&1) `123 X put_text(text_id,PTR_COL_Summary,0,0,TRUE); X put_text(text_id,PTR_COL_Reply_To,0,0,TRUE); X put_text(text_id,PTR_COL_Followup_To,0,0,TRUE); X put_text(text_id,PTR_COL_Keywords,0,0,TRUE); X put_text(text_id,PTR_COL_Expires,0,0,TRUE); X `125 X if (flag&2) `123 X put_text(text_id,PTR_COL_In_Reply_To,0,0,TRUE); X `125 X if (flag&4) `123 X put_text(text_id,PTR_COL_Control,0,0,TRUE); X put_text(text_id,PTR_COL_Approved,0,0,TRUE); X `125 X if (userdefault`091DEFAULT_NUM_USER_NAME_1`093.text`0910`093 && X userdefault`091DEFAULT_NUM_USER_TEXT_1`093.text`0910`093) `123 X sprintf(tmp,"X-%s: %s",userdefault`091DEFAULT_NUM_USER_NAME_1`093.text,u Vserdefault`091DEFAULT_NUM_USER_TEXT_1`093.text); X put_text(text_id,tmp,0,0,TRUE); X `125 X if (userdefault`091DEFAULT_NUM_USER_NAME_2`093.text`0910`093 && X userdefault`091DEFAULT_NUM_USER_TEXT_2`093.text`0910`093) `123 X sprintf(tmp,"X-%s: %s",userdefault`091DEFAULT_NUM_USER_NAME_2`093.text,u Vserdefault`091DEFAULT_NUM_USER_TEXT_2`093.text); X put_text(text_id,tmp,0,0,TRUE); X `125 X`125 X X/*-------------------------------------------------------------------------- V--*/ X Xpost_redraw(flag,num,txt) Xbool flag; Xint num; Xchar *txt; X`123 X char erg`091256`093,*t; X int i=0; X X switch (num) `123 X case NEWS_PHDR_FROM:`009t=PTR_COL_From;`009`009break; X case NEWS_PHDR_NEWSGROUP:`009t=PTR_COL_Newsgroups;`009break; X case NEWS_PHDR_SUBJECT:`009t=PTR_COL_Subject;`009break; X case NEWS_PHDR_DATE:`009t=PTR_COL_Date;`009`009break; X case NEWS_PHDR_DISTRIBUTION:t=PTR_COL_Distribution;`009break; X case NEWS_PHDR_ORGANISATION:t=PTR_COL_Organization;`009break; X case NEWS_PHDR_SOFTWARE:`009t=PTR_COL_X_News_Reader;break; X case NEWS_PHDR_SUMMARY:`009t=PTR_COL_Summary;`009break; X case NEWS_PHDR_REPLY_TO:`009t=PTR_COL_Reply_To;`009break; X case NEWS_PHDR_FOLLOWUP_TO:`009t=PTR_COL_Followup_To;`009break; X case NEWS_PHDR_KEYWORDS:`009t=PTR_COL_Keywords;`009break; X case NEWS_PHDR_EXPIRE:`009t=PTR_COL_Expires;`009break; X case NEWS_PHDR_IN_REPLY_TO:`009t=PTR_COL_In_Reply_To;`009break; X case NEWS_PHDR_CONTROL:`009t=PTR_COL_Control;`009break; X case NEWS_PHDR_APPROVED:`009t=PTR_COL_Approved;`009break; X `125 X if (!(flag&1) && num>=NEWS_PHDR_IN_REPLY_TO) i=5; X if (flag&4 && num>=NEWS_PHDR_CONTROL) i+=2; X set_cursor(text_id,4+num-i,1); X sprintf(erg,PTR_2s,t,txt); X put_text(text_id,erg,0,0,TRUE); X`125 X X/*-------------------------------------------------------------------------- V--*/ X Xbool post_check_group(grp) Xchar *grp; X`123 X int i=0; X X while (i31) return(FALSE); X if (atoi(ptr)>9) `123 X if (!*ptr `124`124 !isdigit(*ptr)) return(FALSE); ptr++; X `125 X if (!*ptr `124`124 !isdigit(*ptr)) return(FALSE); ptr++; X if (!*ptr `124`124 *ptr!=' ') return(FALSE); ptr++; X strncpy(tmp,ptr,3); tmp`0913`093='\0'; ptr+=3; X if (strlen(tmp)!=3) return(FALSE); X if (strcmp(tmp,PTR_Jan) && strcmp(tmp,PTR_Feb) && strcmp(tmp,PTR_Mar) && X strcmp(tmp,PTR_Apr) && strcmp(tmp,PTR_May) && strcmp(tmp,PTR_Jun) && X strcmp(tmp,PTR_Jul) && strcmp(tmp,PTR_Aug) && strcmp(tmp,PTR_Sep) && X strcmp(tmp,PTR_Oct) && strcmp(tmp,PTR_Nov) && strcmp(tmp,PTR_Dec)) X return(FALSE); X if (!*ptr `124`124 *ptr!=' ') return(FALSE); ptr++; X if (!*ptr `124`124 !isdigit(*ptr)) return(FALSE); ptr++; X if (!*ptr `124`124 !isdigit(*ptr)) return(FALSE); ptr++; X if (!*ptr `124`124 *ptr!=' ') return(FALSE); ptr++; X if (atoi(ptr)>23) return(FALSE); X if (!*ptr `124`124 !isdigit(*ptr)) return(FALSE); ptr++; X if (!*ptr `124`124 !isdigit(*ptr)) return(FALSE); ptr++; X if (!*ptr `124`124 *ptr!=':') return(FALSE); ptr++; X if (atoi(ptr)>59) return(FALSE); X if (!*ptr `124`124 !isdigit(*ptr)) return(FALSE); ptr++; X if (!*ptr `124`124 !isdigit(*ptr)) return(FALSE); ptr++; X if (!*ptr `124`124 *ptr!=':') return(FALSE); ptr++; X if (atoi(ptr)>59) return(FALSE); X if (!*ptr `124`124 !isdigit(*ptr)) return(FALSE); ptr++; X if (!*ptr `124`124 !isdigit(*ptr)) return(FALSE); ptr++; X if (!*ptr) return(TRUE); X if (*ptr!=' ') return(FALSE); ptr++; X if (strcmp(ptr,conf`091NEWS_NUM_TIMEZONE`093.text)) return(FALSE); X return(TRUE); X`125 X X/*-------------------------------------------------------------------------- V--*/ X Xpost_preset(flag) Xbool flag; X`123 X clear_display(text_id); X set_cursor(text_id,2,1); X put_text(text_id,"Generating ARTICLE header :-",SMG$M_BOLD,0,TRUE); X strcpy(phdr`091NEWS_PHDR_DATE`093,get_date()); X sprintf(phdr`091NEWS_PHDR_SOFTWARE`093,"%s%s",&PTR_NEWS_NAME`0911`093,PTR_ VNEWS_VERSION); X sprintf(phdr`091NEWS_PHDR_FROM`093,"%s@%s (%s)",conf`091NEWS_NUM_USERNAME` V093.text,conf`091NEWS_NUM_ADDRESS`093.text,conf`091NEWS_NUM_PERSONAL_NAME`09 V3.text); X post_header(flag); X post_redraw(flag,NEWS_PHDR_DATE,phdr`091NEWS_PHDR_DATE`093); X post_redraw(flag,NEWS_PHDR_SOFTWARE,phdr`091NEWS_PHDR_SOFTWARE`093); X post_redraw(flag,NEWS_PHDR_FROM,phdr`091NEWS_PHDR_FROM`093); X post_redraw(flag,NEWS_PHDR_ORGANISATION,conf`091NEWS_NUM_ORGANISATION`093. Vtext); X if (flag&2) post_redraw(flag,NEWS_PHDR_IN_REPLY_TO,phdr`091NEWS_PHDR_IN_RE VPLY_TO`093); X if (*phdr`091NEWS_PHDR_SUBJECT`093) post_redraw(flag,NEWS_PHDR_SUBJECT,phd Vr`091NEWS_PHDR_SUBJECT`093); X if (flag&8) `123 X post_redraw(flag,NEWS_PHDR_NEWSGROUP,phdr`091NEWS_PHDR_NEWSGROUP`093); X post_redraw(flag,NEWS_PHDR_SUBJECT,phdr`091NEWS_PHDR_SUBJECT`093); X post_redraw(flag,NEWS_PHDR_DISTRIBUTION,phdr`091NEWS_PHDR_DISTRIBUTION`0 V93); X post_redraw(flag,NEWS_PHDR_CONTROL,phdr`091NEWS_PHDR_CONTROL`093); X post_redraw(flag,NEWS_PHDR_APPROVED,phdr`091NEWS_PHDR_APPROVED`093); X `125 X`125 X X/*-------------------------------------------------------------------------- V--*/ X Xpost_send_header(flag) Xbool flag; X`123 X char t`0911024`093; X X if (flag&2) `123 sprintf(t,"Path: %s!%s\r\n",conf`091NEWS_NUM_ADDRESS`093. Vtext,conf`091NEWS_NUM_USERNAME`093.text); do_send(t); `125 X sprintf(t,PTR_2sCRLF,PTR_COL_From,phdr`091NEWS_PHDR_FROM`093); do_send(t); X sprintf(t,PTR_2sCRLF,PTR_COL_Newsgroups,phdr`091NEWS_PHDR_NEWSGROUP`093); V do_send(t); X if (*phdr`091NEWS_PHDR_SUBJECT`093) `123 sprintf(t,PTR_2sCRLF,PTR_COL_Subj Vect,phdr`091NEWS_PHDR_SUBJECT`093); do_send(t); `125 X if (flag&1) `123 sprintf(t,PTR_2sCRLF,PTR_COL_Date,phdr`091NEWS_PHDR_DATE` V093); do_send(t); `125 X if (*phdr`091NEWS_PHDR_REPLY_TO`093) `123 sprintf(t,PTR_2sCRLF,PTR_COL_Rep Vly_To,phdr`091NEWS_PHDR_REPLY_TO`093); do_send(t); `125 X if (*phdr`091NEWS_PHDR_FOLLOWUP_TO`093) `123 sprintf(t,PTR_2sCRLF,PTR_COL_ VFollowup_To,phdr`091NEWS_PHDR_FOLLOWUP_TO`093); do_send(t); `125 X sprintf(t,PTR_2sCRLF,PTR_COL_Distribution,phdr`091NEWS_PHDR_DISTRIBUTION`0 V93); do_send(t); X if (*conf`091NEWS_NUM_ORGANISATION`093.text) `123 sprintf(t,PTR_2sCRLF,PTR V_COL_Organization,conf`091NEWS_NUM_ORGANISATION`093.text); do_send(t); `125 X sprintf(t,PTR_2sCRLF,PTR_COL_X_News_Reader,phdr`091NEWS_PHDR_SOFTWARE`093) V; do_send(t); X if (*phdr`091NEWS_PHDR_KEYWORDS`093) `123 sprintf(t,PTR_2sCRLF,PTR_COL_Key Vwords,phdr`091NEWS_PHDR_KEYWORDS`093); do_send(t); `125 X if (*phdr`091NEWS_PHDR_SUMMARY`093) `123 sprintf(t,PTR_2sCRLF,PTR_COL_Summ Vary,phdr`091NEWS_PHDR_SUMMARY`093); do_send(t); `125 X if (*phdr`091NEWS_PHDR_EXPIRE`093) `123 sprintf(t,PTR_2sCRLF,PTR_COL_Expir Ves,phdr`091NEWS_PHDR_EXPIRE`093); do_send(t); `125 X if (*phdr`091NEWS_PHDR_CONTROL`093) `123 sprintf(t,PTR_2sCRLF,PTR_COL_Cont Vrol,phdr`091NEWS_PHDR_CONTROL`093); do_send(t); `125 X if (*phdr`091NEWS_PHDR_APPROVED`093) `123 sprintf(t,PTR_2sCRLF,PTR_COL_App Vroved,phdr`091NEWS_PHDR_APPROVED`093); do_send(t); `125 X if (*phdr`091NEWS_PHDR_IN_REPLY_TO`093) `123 sprintf(t,PTR_2sCRLF,PTR_COL_ VIn_Reply_To,phdr`091NEWS_PHDR_IN_REPLY_TO`093); do_send(t); `125 X if (*phdr`091NEWS_PHDR_REFERENCES`093) `123 sprintf(t,PTR_2sCRLF,PTR_COL_R Veferences,phdr`091NEWS_PHDR_REFERENCES`093); do_send(t); `125 X if (userdefault`091DEFAULT_NUM_USER_NAME_1`093.text`0910`093 && X userdefault`091DEFAULT_NUM_USER_TEXT_1`093.text`0910`093) `123 X sprintf(t,"X-%s: %s\r\n",userdefault`091DEFAULT_NUM_USER_NAME_1`093.text V,userdefault`091DEFAULT_NUM_USER_TEXT_1`093.text); X do_send(t); X `125 X if (userdefault`091DEFAULT_NUM_USER_NAME_2`093.text`0910`093 && X userdefault`091DEFAULT_NUM_USER_TEXT_2`093.text`0910`093) `123 X sprintf(t,"X-%s: %s\r\n",userdefault`091DEFAULT_NUM_USER_NAME_2`093.text V,userdefault`091DEFAULT_NUM_USER_TEXT_2`093.text); X do_send(t); X `125 X do_send("\r\n"); X`125 X X/*-------------------------------------------------------------------------- V--*/ X Xpost_send_body(filename,flg) Xchar *filename; Xbool flg; X`123 X bool flag; X char tmp`0911024`093,t`0911024`093; X FILE *fd; X X fd=fopen(filename,"r"); X while (fgets(tmp,1024,fd)) X if (*tmp=='.') `123 sprintf(t,".%s",tmp); do_send(t); `125 X else do_send(tmp); X fclose(fd); X if (!flg && *conf`091NEWS_NUM_SIGNATURE`093.text) `123 X if (fd=fopen(conf`091NEWS_NUM_SIGNATURE`093.text,"r")) `123 X do_send("\r\n"); X while (fgets(tmp,1024,fd)) X if (*tmp=='.') `123 sprintf(t,".%s",tmp); do_send(t); `125 X else do_send(tmp); X `125 X fclose(fd); X `125 X do_send(".\r\n"); X flag=TRUE; while (post_status==NEWS_POST_READY) `123 X if (flag) `123 flag=FALSE; inp_comment("`091Article posted, being filed V at server`093"); `125 X wait_sync(); X `125 X`125 X X/*-------------------------------------------------------------------------- V--*/ X Xchar *get_newsgroups() X`123 X bool flag; X uword retlen; X char t`091256`093,*tp,tmp`091256`093="\0"; X globalvalue int NEWS$_NOSUCHGRP; X X flag=FALSE; while (!flag) `123 X flag=(cli$get_value(c$dsc(PTR_NEWSGROUPS),c$ldsc(t,256),&retlen)!=CLI$_C VOMMA); X t`091retlen`093='\0'; tp=t; if (*tp=='"') `123 t`091strlen(t)-1`093='\0' V; tp++; `125 X if (post_check_group(tp)) `123 strcat(tmp,tp); strcat(tmp,","); `125 X else `123 strcpy(fao,c$asc(tp)); geterror(fac,NEWS$_NOSUCHGRP,fao); `125 X `125 X if (strlen(tmp)) tmp`091strlen(tmp)-1`093='\0'; X tp=tmp; while (*tp) `123 *tp=locase(*tp); tp++; `125 X return (tmp); X`125 X X/*-------------------------------------------------------------------------- V--*/ X Xget_references() X`123 X bool flag,flag2; X uword retlen; X int i; X char tmp`0911024`093,fp`0911024`093,t`0911024`093,t1`0911024`093,*tp; X FILE *fd,*fd2; X X i=JPI$_PID; X c$cks(lib$getjpi(&i,0,0,0,c$ldsc(tmp,10),&retlen)); tmp`091retlen`093='\0' V; X sprintf(fp,"sys$scratch:news_reply_%s.tmp",tmp); X sprintf(t1,"sys$scratch:news_%s.tmp",tmp); X sprintf(t,PTR_SAVE_x,fp); X cli$dcl_parse(c$dsc(t),&news_table,0,0,0); cli$dispatch(); X fd=fopen(fp,"r"); fd2=fopen(t1,"w"); X flag=TRUE; flag2=FALSE; X while (fgets(tmp,1024,fd)) `123 X while (tmp`091strlen(tmp)-1`093=='\r' `124`124 tmp`091strlen(tmp)-1`093= V='\n') tmp`091strlen(tmp)-1`093='\0'; X if (flag) `123 X if (!*tmp) `123 X flag=FALSE; X sprintf(phdr`091NEWS_PHDR_IN_REPLY_TO`093,"%s's message of %s",rhdr` V091NEWS_RHDR_FROM`093,rhdr`091NEWS_RHDR_DATE`093); X sprintf(phdr`091NEWS_PHDR_REFERENCES`093,PTR_2s,rhdr`091NEWS_RHDR_RE VFERENCES`093,rhdr`091NEWS_RHDR_MESSAGE_ID`093); X if (*rhdr`091NEWS_RHDR_FOLLOWUP_TO`093 && stricmp(rhdr`091NEWS_RHDR_ VFOLLOWUP_TO`093,PTR_poster)) X strcpy(phdr`091NEWS_PHDR_NEWSGROUP`093,rhdr`091NEWS_RHDR_FOLLOWUP_ VTO`093); X else strcpy(phdr`091NEWS_PHDR_NEWSGROUP`093,rhdr`091NEWS_RHDR_NEWSGR VOUP`093); X fprintf(fd2,"In %s %s writes:\n",rhdr`091NEWS_RHDR_MESSAGE_ID`093,rh Vdr`091NEWS_RHDR_FROM`093); X fprintf(fd2,"\n"); X `125 else `123 X if (!strncmp(tmp,PTR_COL_References,11)) `123 X flag2=TRUE; strcpy(rhdr`091NEWS_RHDR_REFERENCES`093,get_text(tmp)) V; X `125 else if ((*tmp==' ' `124`124 *tmp=='\t') && flag2) `123 X strcat(rhdr`091NEWS_RHDR_REFERENCES`093,PTR_1SPC); strcat(rhdr`091 VNEWS_RHDR_REFERENCES`093,get_text(tmp)); X `125 else flag2=FALSE; X if (!strncmp(tmp,PTR_COL_Date,5)) strcpy(rhdr`091NEWS_RHDR_DATE`093, Vget_text(tmp)); X if (!strncmp(tmp,PTR_COL_Subject,8)) `123 X strcpy(rhdr`091NEWS_RHDR_SUBJECT`093,get_text(tmp)); X if (strlen(rhdr`091NEWS_RHDR_SUBJECT`093)>xCOLS-10) rhdr`091NEWS_R VHDR_SUBJECT`093`091xCOLS-10`093='\0'; X `125 X if (!strncmp(tmp,PTR_COL_From,5)) `123 X strcpy(rhdr`091NEWS_RHDR_FROM`093,get_text(tmp)); X if ((tp=strchr(rhdr`091NEWS_RHDR_FROM`093,'<'))!=NULL) `123 X tp++; strcpy(t,tp); strcpy(rhdr`091NEWS_RHDR_FROM`093,t); X if ((tp=strchr(rhdr`091NEWS_RHDR_FROM`093,'>'))!=NULL) *tp='\0'; X `125 else if (tp=strchr(rhdr`091NEWS_RHDR_FROM`093,' ')) *tp='\0'; X `125 X if (!strncmp(tmp,PTR_COL_Reply_To,9)) `123 X strcpy(rhdr`091NEWS_RHDR_REPLY_TO`093,get_text(tmp)); X if (tp=strchr(rhdr`091NEWS_RHDR_REPLY_TO`093,' ')) *tp='\0'; X `125 X if (!strncmp(tmp,PTR_COL_Newsgroups,11)) strcpy(rhdr`091NEWS_RHDR_NE VWSGROUP`093,get_text(tmp)); X if (!strncmp(tmp,PTR_COL_Followup_To,12)) strcpy(rhdr`091NEWS_RHDR_F VOLLOWUP_TO`093,get_text(tmp)); X if (!strncmp(tmp,"Message-ID:",11)) strcpy(rhdr`091NEWS_RHDR_MESSAGE V_ID`093,get_text(tmp)); X `125 X `125 else `123 X sprintf(t,PTR_2sCR,conf`091NEWS_NUM_MARKER`093.text,tmp); fputs(t,fd2) V; X `125 X `125 X fclose(fd2); fclose(fd); delete(fp); X if (!strincmp(rhdr`091NEWS_RHDR_SUBJECT`093,"Re: ",4) `124`124 X !strincmp(rhdr`091NEWS_RHDR_SUBJECT`093,"Re`094",3)) X strcpy(phdr`091NEWS_PHDR_SUBJECT`093,rhdr`091NEWS_RHDR_SUBJECT`093); X else sprintf(phdr`091NEWS_PHDR_SUBJECT`093,"Re: %s",rhdr`091NEWS_RHDR_SUBJ VECT`093); X`125 X X/*-------------------------------------------------------------------------- V--*/ X Xget_managed_file() X`123 X int i; X uword retlen; X char t1`0911024`093,t2`0911024`093,tmp`0911024`093; X FILE *fd,*fd2; X X i=JPI$_PID; c$cks(lib$getjpi(&i,0,0,0,c$ldsc(tmp,10),&retlen)); tmp`091ret Vlen`093='\0'; X sprintf(t1,"sys$scratch:news_%s.tmp",tmp); X sprintf(t2,"sys$scratch:news_temp_%s.tmp",tmp); X if (fd=fopen(t1,"r")) `123 X if (fd2=fopen(t2,"w")) while (fgets(tmp,1024,fd)) fputs(tmp,fd2); X fclose(fd2); X `125 X fclose(fd); X delete(t1); X sprintf(phdr`091NEWS_PHDR_FROM`093,"%s@%s (%s)",conf`091NEWS_NUM_USERNAME` V093.text,conf`091NEWS_NUM_ADDRESS`093.text,conf`091NEWS_NUM_PERSONAL_NAME`09 V3.text); X strcpy(phdr`091NEWS_PHDR_DATE`093,get_date()); X if (!*phdr`091NEWS_PHDR_NEWSGROUP`093) strcpy(phdr`091NEWS_PHDR_NEWSGROUP` V093,groups`091grouppos`093.name); X if (!*phdr`091NEWS_PHDR_FOLLOWUP_TO`093) strcpy(phdr`091NEWS_PHDR_FOLLOWUP V_TO`093,groups`091grouppos`093.name); X if (!*phdr`091NEWS_PHDR_REPLY_TO`093) sprintf(phdr`091NEWS_PHDR_REPLY_TO`0 V93,"%s@%s",conf`091NEWS_NUM_USERNAME`093.text,conf`091NEWS_NUM_ADDRESS`093.t Vext); X if (!*phdr`091NEWS_PHDR_DISTRIBUTION`093) strcpy(phdr`091NEWS_PHDR_DISTRIB VUTION`093,"local"); X strcpy(phdr`091NEWS_PHDR_ORGANISATION`093,conf`091NEWS_NUM_ORGANISATION`09 V3.text); X sprintf(phdr`091NEWS_PHDR_SOFTWARE`093,"%s%s",&PTR_NEWS_NAME`0911`093,PTR_ VNEWS_VERSION); X fd=fopen(t1,"w"); X fprintf(fd,PTR_2sCR,PTR_COL_From,phdr`091NEWS_PHDR_FROM`093); X fprintf(fd,PTR_2sCR,PTR_COL_Date,phdr`091NEWS_PHDR_DATE`093); X fprintf(fd,PTR_2sCR,PTR_COL_Newsgroups,phdr`091NEWS_PHDR_NEWSGROUP`093); X fprintf(fd,PTR_2sCR,PTR_COL_Subject,phdr`091NEWS_PHDR_SUBJECT`093); X fprintf(fd,PTR_2sCR,PTR_COL_Followup_To,phdr`091NEWS_PHDR_FOLLOWUP_TO`093) V; X fprintf(fd,PTR_2sCR,PTR_COL_Expires,phdr`091NEWS_PHDR_EXPIRE`093); X fprintf(fd,PTR_2sCR,PTR_COL_Reply_To,phdr`091NEWS_PHDR_REPLY_TO`093); X fprintf(fd,"Sender: %s\n",phdr`091NEWS_PHDR_FROM`093); X fprintf(fd,PTR_2sCR,PTR_COL_References,phdr`091NEWS_PHDR_REFERENCES`093); X fprintf(fd,PTR_2sCR,PTR_COL_Control,phdr`091NEWS_PHDR_CONTROL`093); X fprintf(fd,PTR_2sCR,PTR_COL_Distribution,phdr`091NEWS_PHDR_DISTRIBUTION`09 V3); X fprintf(fd,PTR_2sCR,PTR_COL_Keywords,phdr`091NEWS_PHDR_KEYWORDS`093); X fprintf(fd,PTR_2sCR,PTR_COL_Summary,phdr`091NEWS_PHDR_SUMMARY`093); X fprintf(fd,PTR_2sCR,PTR_COL_Approved,phdr`091NEWS_PHDR_FROM`093); X fprintf(fd,"Lines: \n"); X fprintf(fd,PTR_2sCR,PTR_COL_Organization,conf`091NEWS_NUM_ORGANISATION`093 V.text); X fprintf(fd,PTR_2sCR,PTR_COL_X_News_Reader,phdr`091NEWS_PHDR_SOFTWARE`093); X fprintf(fd,"\n"); X if (fd2=fopen(t2,"r")) while (fgets(tmp,1024,fd2)) fputs(tmp,fd); X fclose(fd2); X fclose(fd); X delete(t2); X`125 X X/*-------------------------------------------------------------------------- V--*/ X Xget_verify_newsgroups(flg) Xbool flg; X`123 X bool flag; X char t`091256`093,tmp`091256`093,*tp,*tp2; X X flag=FALSE; while (!flag) `123 X if (!*phdr`091NEWS_PHDR_NEWSGROUP`093) `123 X if (userdefault`091DEFAULT_NUM_NEWSGROUPS`093.text`0910`093) strcpy(ph Vdr`091NEWS_PHDR_NEWSGROUP`093,userdefault`091DEFAULT_NUM_NEWSGROUPS`093.text V); X else strcpy(phdr`091NEWS_PHDR_NEWSGROUP`093,groups`091grouppos`093.nam Ve); X `125 X if (!post_check_group(phdr`091NEWS_PHDR_NEWSGROUP`093)) phdr`091NEWS_PHD VR_NEWSGROUP`093`0910`093='\0'; X strcpy(tmp,read_string(kbd_id,"Newsgroups ? ",input_id,phdr`091NEWS_PHDR V_NEWSGROUP`093)); X redraw_lines(paste_id,xROWS-1,2); X flag=(strlen(tmp)==0); t`0910`093='\0'; tp=tmp; while (*tp) `123 X tp2=strchr(tp,','); if (tp2!=NULL) *tp2++ ='\0'; X if (post_check_group(tp)) `123 strcat(t,tp); strcat(t,","); `125 X if (tp2!=NULL) tp=tp2; else *tp='\0'; X `125 X t`091strlen(t)-1`093='\0'; if (strlen(t)) strcpy(phdr`091NEWS_PHDR_NEWSG VROUP`093,t); X flag=(flag?strlen(phdr`091NEWS_PHDR_NEWSGROUP`093):strlen(t)); X `125 X post_redraw(flg,NEWS_PHDR_NEWSGROUP,phdr`091NEWS_PHDR_NEWSGROUP`093); X`125 X X/*-------------------------------------------------------------------------- V--*/ X Xget_verify_subject(flg) Xbool flg; X`123 X if (!*phdr`091NEWS_PHDR_SUBJECT`093) `123 X if (*rhdr`091NEWS_RHDR_SUBJECT`093) strcpy(phdr`091NEWS_PHDR_SUBJECT`093 V,rhdr`091NEWS_RHDR_SUBJECT`093); X if (userdefault`091DEFAULT_NUM_SUBJECT`093.text`0910`093) strcpy(phdr`09 V1NEWS_PHDR_SUBJECT`093,userdefault`091DEFAULT_NUM_SUBJECT`093.text); X `125 X if (strlen(phdr`091NEWS_PHDR_SUBJECT`093)>60) phdr`091NEWS_PHDR_SUBJECT`09 V3`09160`093='\0'; X post_redraw(flg,NEWS_PHDR_SUBJECT,phdr`091NEWS_PHDR_SUBJECT`093); X strcpy(phdr`091NEWS_PHDR_SUBJECT`093,read_string(kbd_id,"Subject ? ",input V_id,phdr`091NEWS_PHDR_SUBJECT`093)); X redraw_lines(paste_id,xROWS-1,2); X post_redraw(flg,NEWS_PHDR_SUBJECT,phdr`091NEWS_PHDR_SUBJECT`093); X`125 X X/*-------------------------------------------------------------------------- V--*/ X Xget_verify_distribution(flg) Xbool flg; X`123 X bool flag; X char t`091256`093,tmp`091256`093,*tp,*tp2; X X if (!*phdr`091NEWS_PHDR_DISTRIBUTION`093) `123 X if (userdefault`091DEFAULT_NUM_DISTRIBUTION`093.text`0910`093) strcpy(ph Vdr`091NEWS_PHDR_DISTRIBUTION`093,userdefault`091DEFAULT_NUM_DISTRIBUTION`093 V.text); X else strcpy(phdr`091NEWS_PHDR_DISTRIBUTION`093,"local"); X `125 X flag=FALSE; while (!flag) `123 X strcpy(tmp,read_string(kbd_id,"Distribution ? ",input_id,phdr`091NEWS_PH VDR_DISTRIBUTION`093)); X redraw_lines(paste_id,xROWS-1,2); X flag=(strlen(tmp)==0); t`0910`093='\0'; tp=tmp; while (*tp) `123 X tp2=strchr(tp,','); if (tp2!=NULL) *tp2++ ='\0'; X if (post_check_dist(tp,phdr`091NEWS_PHDR_NEWSGROUP`093)) `123 strcat(t V,tp); strcat(t,","); `125 X if (tp2!=NULL) tp=tp2; else *tp='\0'; X `125 X t`091strlen(t)-1`093='\0'; if (strlen(t)) strcpy(phdr`091NEWS_PHDR_DISTR VIBUTION`093,t); X flag=strlen(phdr`091NEWS_PHDR_DISTRIBUTION`093); X `125 X post_redraw(flg,NEWS_PHDR_DISTRIBUTION,phdr`091NEWS_PHDR_DISTRIBUTION`093) V; X`125 X X/*-------------------------------------------------------------------------- V--*/ X Xget_verify_reply_to(flg) Xbool flg; X`123 X char t`091256`093; X X if (!*phdr`091NEWS_PHDR_REPLY_TO`093) `123 X if (userdefault`091DEFAULT_NUM_REPLY_TO`093.text`0910`093) strcpy(phdr`0 V91NEWS_PHDR_REPLY_TO`093,userdefault`091DEFAULT_NUM_REPLY_TO`093.text); X else sprintf(phdr`091NEWS_PHDR_REPLY_TO`093,"%s@%s",conf`091NEWS_NUM_USE VRNAME`093.text,conf`091NEWS_NUM_ADDRESS`093.text); X `125 X strcpy(phdr`091NEWS_PHDR_REPLY_TO`093,read_string(kbd_id,"Reply-To ? ",inp Vut_id,phdr`091NEWS_PHDR_REPLY_TO`093)); X redraw_lines(paste_id,xROWS-1,2); X sprintf(t,"%s@%s",conf`091NEWS_NUM_USERNAME`093.text,conf`091NEWS_NUM_ADDR VESS`093.text); X if (!stricmp(phdr`091NEWS_PHDR_REPLY_TO`093,t)) *phdr`091NEWS_PHDR_REPLY_T VO`093='\0'; X post_redraw(flg,NEWS_PHDR_REPLY_TO,phdr`091NEWS_PHDR_REPLY_TO`093); X`125 X X/*-------------------------------------------------------------------------- V--*/ X Xget_verify_followup_to(flg) Xbool flg; X`123 X bool flag; X char t`091256`093,*tp,*tp2; X X if (!*phdr`091NEWS_PHDR_FOLLOWUP_TO`093) `123 X if (userdefault`091DEFAULT_NUM_FOLLOWUP_TO`093.text`0910`093) strcpy(phd Vr`091NEWS_PHDR_FOLLOWUP_TO`093,userdefault`091DEFAULT_NUM_FOLLOWUP_TO`093.te Vxt); X else strcpy(phdr`091NEWS_PHDR_FOLLOWUP_TO`093,groups`091grouppos`093.nam Ve); X `125 X flag=FALSE; while (!flag) `123 X strcpy(phdr`091NEWS_PHDR_FOLLOWUP_TO`093,read_string(kbd_id,"Followup-To V ? ",input_id,phdr`091NEWS_PHDR_FOLLOWUP_TO`093)); X redraw_lines(paste_id,xROWS-1,2); X t`0910`093='\0'; flag=TRUE; tp=phdr`091NEWS_PHDR_FOLLOWUP_TO`093; X if (stricmp(phdr`091NEWS_PHDR_FOLLOWUP_TO`093,PTR_poster)) while (*tp) ` V123 X tp2=strchr(tp,','); if (tp2!=NULL) *tp2++ ='\0'; X if (post_check_group(tp)) `123 strcat(t,tp); strcat(t,","); `125 X else flag=FALSE; X if (tp2!=NULL) tp=tp2; else *tp='\0'; X `125 else sprintf(t,"%s,",PTR_poster); X t`091strlen(t)-1`093='\0'; strcpy(phdr`091NEWS_PHDR_FOLLOWUP_TO`093,t); X `125 X if (!strcmp(phdr`091NEWS_PHDR_FOLLOWUP_TO`093,phdr`091NEWS_PHDR_NEWSGROUP` V093)) *phdr`091NEWS_PHDR_FOLLOWUP_TO`093='\0'; X post_redraw(flg,NEWS_PHDR_FOLLOWUP_TO,phdr`091NEWS_PHDR_FOLLOWUP_TO`093); X`125 X X/*-------------------------------------------------------------------------- V--*/ X Xget_verify_summary(flg) Xbool flg; X`123 X if (!*phdr`091NEWS_PHDR_SUMMARY`093 && userdefault`091DEFAULT_NUM_SUMMARY` V093.text`0910`093) X strcpy(phdr`091NEWS_PHDR_SUMMARY`093,userdefault`091DEFAULT_NUM_SUMMARY` V093.text); X strcpy(phdr`091NEWS_PHDR_SUMMARY`093,read_string(kbd_id,"Summary ? ",input V_id,phdr`091NEWS_PHDR_SUMMARY`093)); X redraw_lines(paste_id,xROWS-1,2); X post_redraw(flg,NEWS_PHDR_SUMMARY,phdr`091NEWS_PHDR_SUMMARY`093); X`125 X X/*-------------------------------------------------------------------------- V--*/ X Xget_verify_keywords(flg) Xbool flg; X`123 X if (!*phdr`091NEWS_PHDR_KEYWORDS`093 && userdefault`091DEFAULT_NUM_KEYWORD VS`093.text`0910`093) X strcpy(phdr`091NEWS_PHDR_KEYWORDS`093,userdefault`091DEFAULT_NUM_KEYWORD VS`093.text); X strcpy(phdr`091NEWS_PHDR_KEYWORDS`093,read_string(kbd_id,"Keywords ? ",inp Vut_id,phdr`091NEWS_PHDR_KEYWORDS`093)); X redraw_lines(paste_id,xROWS-1,2); X post_redraw(flg,NEWS_PHDR_KEYWORDS,phdr`091NEWS_PHDR_KEYWORDS`093); X`125 X X/*-------------------------------------------------------------------------- V--*/ X Xget_verify_expire(flg) Xbool flg; X`123 X bool flag; X X if (!*phdr`091NEWS_PHDR_EXPIRE`093 && userdefault`091DEFAULT_NUM_EXPIRE`09 V3.text`0910`093) X strcpy(phdr`091NEWS_PHDR_EXPIRE`093,userdefault`091DEFAULT_NUM_EXPIRE`09 V3.text); X flag=FALSE; while (!flag) `123 X strcpy(phdr`091NEWS_PHDR_EXPIRE`093,read_string(kbd_id,"Expires ? ",inpu Vt_id,phdr`091NEWS_PHDR_EXPIRE`093)); X redraw_lines(paste_id,xROWS-1,2); X flag=post_check_expire(phdr`091NEWS_PHDR_EXPIRE`093); X `125 X post_redraw(flg,NEWS_PHDR_EXPIRE,phdr`091NEWS_PHDR_EXPIRE`093); X`125 X X/*-------------------------------------------------------------------------- V--*/ X Xget_verify_control(flg) Xbool flg; X`123 X bool flag; X X if (!*phdr`091NEWS_PHDR_CONTROL`093 && userdefault`091DEFAULT_NUM_CONTROL` V093.text`0910`093) X strcpy(phdr`091NEWS_PHDR_CONTROL`093,userdefault`091DEFAULT_NUM_CONTROL` V093.text); X flag=FALSE; while (!flag) `123 X strcpy(phdr`091NEWS_PHDR_CONTROL`093,read_string(kbd_id,"Control ? ",inp Vut_id,phdr`091NEWS_PHDR_CONTROL`093)); X redraw_lines(paste_id,xROWS-1,2); X if (!strncmp(phdr`091NEWS_PHDR_CONTROL`093,"cancel ",7)) flag=TRUE; X if (!strncmp(phdr`091NEWS_PHDR_CONTROL`093,"ihave ",6)) flag=TRUE; X if (!strncmp(phdr`091NEWS_PHDR_CONTROL`093,"sendme ",7)) flag=TRUE; X if (!strncmp(phdr`091NEWS_PHDR_CONTROL`093,"newgroup ",9)) flag=TRUE; X if (!strncmp(phdr`091NEWS_PHDR_CONTROL`093,"rmgroup ",8)) flag=TRUE; X if (!strcmp(phdr`091NEWS_PHDR_CONTROL`093,"sendsys")) flag=TRUE; X if (!strcmp(phdr`091NEWS_PHDR_CONTROL`093,"version")) flag=TRUE; X `125 X post_redraw(flg,NEWS_PHDR_CONTROL,phdr`091NEWS_PHDR_CONTROL`093); X`125 X X/*-------------------------------------------------------------------------- V--*/ X Xget_verify_approved(flg) Xbool flg; X`123 X char t`091256`093; X X if (!*phdr`091NEWS_PHDR_APPROVED`093) `123 X if (userdefault`091DEFAULT_NUM_APPROVED`093.text`0910`093) strcpy(phdr`0 V91NEWS_PHDR_APPROVED`093,userdefault`091DEFAULT_NUM_APPROVED`093.text); X else sprintf(phdr`091NEWS_PHDR_APPROVED`093,"%s@%s",conf`091NEWS_NUM_USE VRNAME`093.text,conf`091NEWS_NUM_ADDRESS`093.text); X `125 X strcpy(phdr`091NEWS_PHDR_APPROVED`093,read_string(kbd_id,"Approved ? ",inp Vut_id,phdr`091NEWS_PHDR_APPROVED`093)); X redraw_lines(paste_id,xROWS-1,2); X sprintf(t,"%s@%s",conf`091NEWS_NUM_USERNAME`093.text,conf`091NEWS_NUM_ADDR VESS`093.text); X post_redraw(flg,NEWS_PHDR_APPROVED,phdr`091NEWS_PHDR_APPROVED`093); X`125 X X/*-------------------------------------------------------------------------- V--*/ X Xcmd_followup() X`123 X uword retlen; X char t`091256`093,tmp`091256`093; X globalvalue int NEWS$_IVFLWUP,NEWS$_IVCMD; X `032 X if (noscr) `123 geterror(fac,NEWS$_IVCMD); return; `125 X if (internal_mode==STS_HANDLE_GROUPS) `123 geterror(fac,NEWS$_IVFLWUP); re Vturn; `125 X cli$get_value(c$dsc("$LINE"),c$ldsc(t,256),&retlen); t`091retlen`093='\0'; X sprintf(tmp,"%s/%s",PTR_POST,t); X cli$dcl_parse(c$dsc(tmp),&news_table,0,0,0); cli$dispatch(); X`125 X X/*-------------------------------------------------------------------------- V--*/ X Xcmd_post() X`123 X bool header,reply,managed,control,nodate,nopath,dflag,flag,keep=FALSE; X uword retlen,key=0; X int i; X char file`091256`093="\0",t`0911024`093="\0",tmp`0911024`093,tmp2`0911024` V093,*tp; X FILE *fd,*fd2; X globalvalue int NEWS$_NOPSTNG,NEWS$_IVFLWUP,NEWS$_IVCMD, X NEWS$_NEWSMGR,NEWS$_ABORT,NEWS$_RESTRICT; X#ifdef NO_MAIL X globalvalue int NEWS$_NOMAIL; X#endif X X if (restricted) `123 geterror(fac,NEWS$_RESTRICT); return; `125 X for(i=0;i to abor Vt`093 ? ",input_id); X if (key==SMG$K_TRM_UPPERCASE_Y `124`124 key==SMG$K_TRM_LOWERCASE_Y `12 V4`124 X key==SMG$K_TRM_CR `124`124 key==SMG$K_TRM_ENTER) key=1; X else if (key!=SMG$K_TRM_CTRLZ) key=0; X `125 X `125 X if (key!=SMG$K_TRM_CTRLZ) `123 X if (control && !managed) `123 X sprintf(tmp,"%s\r\n",PTR_POST); do_send(tmp); nntp_data.post++; X flag=TRUE; while (post_status==NEWS_POST_OK) `123 X if (flag) `123 flag=FALSE; inp_comment("`091Asking server for post a Vccess`093"); `125 X wait_sync(); X `125 X if (post_status==NEWS_POST_READY) `123 X post_send_header((nodate?1:0)+(nopath?2:0)); X do_send("\r\n"); X do_send(".\r\n"); X flag=TRUE; while (post_status==NEWS_POST_READY) `123 X if (flag) `123 flag=FALSE; inp_comment("`091Control message posted V, being filed at server`093"); `125 X wait_sync(); X `125 X `125 X post_status=NEWS_POST_OK; X `125 else `123 X i=JPI$_PID; c$cks(lib$getjpi(&i,0,0,0,c$ldsc(tmp,10),&retlen)); tmp`09 V1retlen`093='\0'; X sprintf(t,"sys$scratch:news_%s.tmp",tmp); X if (*file) `123 X if (fd=fopen(file,"r")) `123 fd2=fopen(t,"a+"); while (fgets(tmp,102 V4,fd)) fputs(tmp,fd2); fclose(fd2); `125 X fclose(fd); X `125 X if (managed && *conf`091NEWS_NUM_SIGNATURE`093.text) `123 X if (fd=fopen(conf`091NEWS_NUM_SIGNATURE`093.text,"r")) `123 X fd2=fopen(t,"a+"); fprintf(fd2,"\n"); X while (fgets(tmp,1024,fd)) fputs(tmp,fd2); fclose(fd2); X `125 X fclose(fd); X `125 X#ifdef NO_MAIL X if (reply && !stricmp(rhdr`091NEWS_RHDR_FOLLOWUP_TO`093,PTR_poster)) ` V123 X geterror(fac,NEWS$_NOMAIL); X `125 else `123 X i=call_editor(t); X if (i==1) tp="Post article `091(Y)es, (N)o, to abort`093 ? V "; X else tp="Do not post this article `091(Y)es to abort, (S)end`093 ? " V; X do key=read_key(kbd_id,tp,input_id); X while (key!=SMG$K_TRM_UPPERCASE_Y && key!=SMG$K_TRM_LOWERCASE_Y && X key!=SMG$K_TRM_UPPERCASE_N && key!=SMG$K_TRM_LOWERCASE_N && X key!=SMG$K_TRM_CR && key!=SMG$K_TRM_ENTER && X key!=SMG$K_TRM_UPPERCASE_S && key!=SMG$K_TRM_LOWERCASE_S && X key!=SMG$K_TRM_CTRLZ) ; X if ((i==1 && (key==SMG$K_TRM_UPPERCASE_Y `124`124 key==SMG$K_TRM_LOW VERCASE_Y `124`124 X key==SMG$K_TRM_CR `124`124 key==SMG$K_TRM_ENTER)) `124 V`124 X (i!=1 && (key==SMG$K_TRM_UPPERCASE_S `124`124 key==SMG$K_TRM_LOW VERCASE_S))) `123 X sprintf(tmp,"%s\r\n",PTR_POST); do_send(tmp); nntp_data.post++; X flag=TRUE; while (post_status==NEWS_POST_OK) `123 X if (flag) `123 flag=FALSE; inp_comment("`091Asking server for po Vst access`093"); `125 X wait_sync(); X `125 X if (post_status==NEWS_POST_READY) `123 X if (!managed) post_send_header((nodate?1:0)+(nopath?2:0)); X post_send_body(t,managed); X `125 X if (post_status!=NEWS_POST_FINISHED) keep=TRUE; X post_status=NEWS_POST_OK; X `125 else keep=TRUE; X `125 X#else X i=call_editor(t); X if (reply && !stricmp(rhdr`091NEWS_RHDR_FOLLOWUP_TO`093,PTR_poster)) ` V123 X if (i==1) tp="Send article as MAIL `091(Y)es, (N)o, to abor Vt`093 ? "; X else tp="Do not send this article as MAIL `091(Y)es to abort, (S)end V`093 ? "; X do key=read_key(kbd_id,tp,input_id); X while (key!=SMG$K_TRM_UPPERCASE_Y && key!=SMG$K_TRM_LOWERCASE_Y && X key!=SMG$K_TRM_UPPERCASE_N && key!=SMG$K_TRM_LOWERCASE_N && X key!=SMG$K_TRM_CR && key!=SMG$K_TRM_ENTER && X key!=SMG$K_TRM_UPPERCASE_S && key!=SMG$K_TRM_LOWERCASE_S && X key!=SMG$K_TRM_CTRLZ) ; X if ((i==1 && (key==SMG$K_TRM_UPPERCASE_Y `124`124 key==SMG$K_TRM_LOW VERCASE_Y `124`124 X key==SMG$K_TRM_CR `124`124 key==SMG$K_TRM_ENTER)) `124 V`124 X (i!=1 && (key==SMG$K_TRM_UPPERCASE_S `124`124 key==SMG$K_TRM_LOW VERCASE_S))) X send_mail(t,*rhdr`091NEWS_RHDR_REPLY_TO`093?rhdr`091NEWS_RHDR_REPL VY_TO`093:rhdr`091NEWS_RHDR_FROM`093,phdr`091NEWS_PHDR_SUBJECT`093,""); X `125 else `123 X if (i==1) tp="Post article `091(Y)es, (N)o, to abort`093 ? V "; X else tp="Do not post this article `091(Y)es to abort, (S)end`093 ? " V; X do key=read_key(kbd_id,tp,input_id); X while (key!=SMG$K_TRM_UPPERCASE_Y && key!=SMG$K_TRM_LOWERCASE_Y && X key!=SMG$K_TRM_UPPERCASE_N && key!=SMG$K_TRM_LOWERCASE_N && X key!=SMG$K_TRM_UPPERCASE_S && key!=SMG$K_TRM_LOWERCASE_S && X key!=SMG$K_TRM_CR && key!=SMG$K_TRM_ENTER && X key!=SMG$K_TRM_CTRLZ) ; X if ((i==1 && (key==SMG$K_TRM_UPPERCASE_Y `124`124 key==SMG$K_TRM_LOW VERCASE_Y `124`124 X key==SMG$K_TRM_CR `124`124 key==SMG$K_TRM_ENTER)) `124 V`124 X (i!=1 && (key==SMG$K_TRM_UPPERCASE_S `124`124 key==SMG$K_TRM_LOW VERCASE_S))) `123 X sprintf(tmp,"%s\r\n",PTR_POST); do_send(tmp); nntp_data.post++; X flag=TRUE; while (post_status==NEWS_POST_OK) `123 X if (flag) `123 flag=FALSE; inp_comment("`091Asking server for po Vst access`093"); `125 X wait_sync(); X `125 X if (post_status==NEWS_POST_READY) `123 X if (!managed) post_send_header((nodate?1:0)+(nopath?2:0)); X post_send_body(t,managed); X `125 X if (post_status!=NEWS_POST_FINISHED) keep=TRUE; X post_status=NEWS_POST_OK; X `125 else keep=TRUE; X `125 X#endif X `125 X `125 X i=JPI$_PID; c$cks(lib$getjpi(&i,0,0,0,c$ldsc(tmp,10),&retlen)); tmp`091ret Vlen`093='\0'; X sprintf(t,"sys$scratch:news_%s.tmp",tmp); X if (keep) `123 X strcpy(tmp,read_string(kbd_id,"Keep file `091enter filename or `093 V ? ",input_id,0)); X if (*tmp) `123 X if (strchr(tmp,':')==NULL && strchr(tmp,'>')==NULL && strchr(tmp,'`093 V')==NULL) strcpy(tmp2,"sys$disk:`091`093"); X else if (strchr(tmp,':')==NULL) strcpy(tmp2,"sys$disk:"); X if (*tmp2) strcat(tmp2,tmp); X else strcpy(tmp2,tmp); X rename(t,tmp2); X `125 X `125 X delete(t); delete(t); X switch (internal_mode&STS_HANDLE_BITS) `123 X case STS_HANDLE_GROUPS: X newsgroups_redraw(groupscreen,grouppos,TRUE); X break; X case STS_HANDLE_SUBJECTS: X group_redraw(subjectscreen,articlepos,TRUE); X break; X case STS_HANDLE_ARTICLE: X article_redraw(articlescreen); X break; X `125 X`125 X X/*************************************************************************** V***/ X Xcmd_cancel() X`123 X bool flag,dflag,nodate,nopath; X int i; X uword retlen,key; X char tmp`0911024`093,t`0911024`093; X globalvalue int NEWS$_IVCMD,NEWS$_IVCNCL,NEWS$_RESTRICT,NEWS$_NOPSTNG, X NEWS$_NOTYOUROWN; X X if (noscr) `123 geterror(fac,NEWS$_IVCMD); return; `125 X if (internal_mode==STS_HANDLE_GROUPS) `123 geterror(fac,NEWS$_IVCNCL); ret Vurn; `125 X if (restricted) `123 geterror(fac,NEWS$_RESTRICT); return; `125 X nodate=(cli$present(c$dsc(PTR_DATE))==CLI$_NEGATED); X nopath=(cli$present(c$dsc(PTR_PATH))==CLI$_NEGATED); X for(i=0;i to abort V`093 ? ",input_id); X if (key==SMG$K_TRM_UPPERCASE_Y `124`124 key==SMG$K_TRM_LOWERCASE_Y `124`12 V4 X key==SMG$K_TRM_CR `124`124 key==SMG$K_TRM_ENTER) `123 X sprintf(tmp,"%s\r\n",PTR_POST); do_send(tmp); nntp_data.post++; X flag=TRUE; while (post_status==NEWS_POST_OK) `123 X if (flag) `123 flag=FALSE; inp_comment("`091Asking server for post acc Vess`093"); `125 X wait_sync(); X `125 X if (post_status==NEWS_POST_READY) `123 X post_send_header((nodate?1:0)+(nopath?2:0)); X do_send("\r\n"); X do_send(".\r\n"); X flag=TRUE; while (post_status==NEWS_POST_READY) `123 X if (flag) `123 flag=FALSE; inp_comment("`091Control message posted, V being filed at server`093"); `125 X wait_sync(); X `125 X `125 X post_status=NEWS_POST_OK; X `125 X i=JPI$_PID; c$cks(lib$getjpi(&i,0,0,0,c$ldsc(tmp,10),&retlen)); tmp`091ret Vlen`093='\0'; X sprintf(t,"sys$scratch:news_%s.tmp",tmp); X delete(t); delete(t); X switch (internal_mode&STS_HANDLE_BITS) `123 X case STS_HANDLE_GROUPS: X newsgroups_redraw(groupscreen,grouppos,TRUE); X break; X case STS_HANDLE_SUBJECTS: X group_redraw(subjectscreen,articlepos,TRUE); X break; X case STS_HANDLE_ARTICLE: X article_redraw(articlescreen); X break; X `125 X`125 X X/*************************************************************************** V***/ $ CALL UNPACK [.NEWS$SRC]CMDPOST.C;1025 659392121 $ create/nolog 'f' X/*************************************************************************** V*** X * X * VMS NEWS (part CMDSHOW) X * X * Copyright 1990 by Bernd Onasch (University of Karlsruhe) X * 1993 by Bernd Onasch (E-MAIL: uranus@pilhuhn.ka.sub.org) X * X *************************************************************************** V*** X * X * Internal COMMAND file (SET/SHOW/DEFINE) X * ------------------------------------------------------------------------- V--- X * cmd_set_header() X * cmd_set_news() X * cmd_set_group() X * cmd_set_error() X * cmd_show_keypad() X * cmd_show_header() X * cmd_show_version() X * cmd_show_kills() X * cmd_show_connection() X * cmd_define() X * cmd_define_key() X * cmd_define_default() X * X *************************************************************************** V***/ X X#module CMDSHOW "CMD V1.25" X#include "header.h" X Xglobalref int news_table; X X/*************************************************************************** V***/ X Xcmd_set_header() X`123 X bool flag=2,temp; X globalvalue int NEWS$_HDRMODE,NEWS$_IVCMD; X X if (noscr) `123 geterror(fac,NEWS$_IVCMD); return; `125 X temp=(cli$present(c$dsc(PTR_TEMPORARY))==CLI$_PRESENT); X if (cli$present(c$dsc(PTR_ENABLE))==CLI$_PRESENT) flag=TRUE; X if (cli$present(c$dsc(PTR_DISABLE))==CLI$_PRESENT) flag=FALSE; X if (flag==2) flag= !conf`091NEWS_NUM_HEADERDISPLAY`093.value; X if (conf`091NEWS_NUM_HEADERDISPLAY`093.value==flag) return; X add_config(NEWS_NUM_HEADERDISPLAY,flag?PTR_FULL:PTR_SHORT,temp?NEWS_MODE_T VEMPORARY:NEWS_MODE_USER); X strcpy(fao,c$asc(flag?PTR_FULL:PTR_SHORT)); geterror(fac,NEWS$_HDRMODE,fao V); X switch (conf`091NEWS_NUM_HEADERDISPLAY`093.value) `123 X case 3: X if (articlescreen<0) articlescreen=ARTICLE_TOP; X article_redraw(articlescreen); break; X case 2: X case 1: X break; X `125 X if (!temp) write_configuration(); X`125 X X/*************************************************************************** V***/ X Xcmd_set_news() X`123 X bool temp,all,used,reg,unread; X char tmp`091256`093,*ptr; X globalvalue int NEWS$_IVCMD,NEWS$_NEWSMODE; X X if (noscr) `123 geterror(fac,NEWS$_IVCMD); return; `125 X temp=(cli$present(c$dsc(PTR_TEMPORARY))==CLI$_PRESENT); X all=(cli$present(c$dsc(PTR_ALL))==CLI$_PRESENT); X used=(cli$present(c$dsc(PTR_USED))==CLI$_PRESENT); X reg=(cli$present(c$dsc(PTR_REGISTERED))==CLI$_PRESENT); X unread=(cli$present(c$dsc(PTR_UNREAD))==CLI$_PRESENT); X if (unread) reg=FALSE; X sprintf(tmp,"%s%s%s%s",all?PTR_ALL:"",unread?"/UNREAD":"",reg?"/REGISTERED V":"",used?"/USED":""); X ptr=(tmp`0910`093=='/')?&tmp`0911`093:tmp; X if (strcmp(ptr,conf`091NEWS_NUM_NEWSENTRY`093.text) && (all`124`124used`12 V4`124reg`124`124unread)) `123 X add_config(NEWS_NUM_NEWSENTRY,ptr,temp?NEWS_MODE_TEMPORARY:NEWS_MODE_USE VR); X strcpy(fao,c$asc(ptr)); geterror(fac,NEWS$_NEWSMODE,fao); X if (!temp) write_configuration(); X `125 X`125 X X/*************************************************************************** V***/ X Xcmd_set_group() X`123 X bool top,bottom,read,sorted=2,authors=2,temp,fullauthors=FALSE,lines=2, X date=2,mode=2,mode2=2,thread=2; X char tmp`091256`093; X globalvalue int NEWS$_GRPMODE,NEWS$_GRPDSPL,NEWS$_GRPAUTH,NEWS$_GRPLIN,NEW VS$_IVCMD, X NEWS$_GRPMOD,NEWS$_GRPDAT; X X if (noscr) `123 geterror(fac,NEWS$_IVCMD); return; `125 X temp=(cli$present(c$dsc(PTR_TEMPORARY))==CLI$_PRESENT); X if (cli$present(c$dsc(PTR_SORTED))==CLI$_PRESENT) sorted=TRUE; X if (cli$present(c$dsc(PTR_SORTED))==CLI$_NEGATED) sorted=FALSE; X if (cli$present(c$dsc(PTR_THREADED))==CLI$_PRESENT) thread=TRUE; X if (cli$present(c$dsc(PTR_THREADED))==CLI$_NEGATED) thread=FALSE; X if (cli$present(c$dsc(PTR_AUTHORS))==CLI$_PRESENT) authors=TRUE; X if (cli$present(c$dsc(PTR_AUTHORS))==CLI$_NEGATED) authors=FALSE; X if (cli$present(c$dsc(PTR_LINES))==CLI$_PRESENT) lines=TRUE; X if (cli$present(c$dsc(PTR_LINES))==CLI$_NEGATED) lines=FALSE; X if (cli$present(c$dsc(PTR_DATE))==CLI$_PRESENT) date=TRUE; X if (cli$present(c$dsc(PTR_DATE))==CLI$_NEGATED) date=FALSE; X if (cli$present(c$dsc(PTR_FULLAUTHORS))==CLI$_PRESENT) fullauthors=TRUE; X if (cli$present(c$dsc(PTR_ALL))==CLI$_PRESENT) mode=FALSE; X if (cli$present(c$dsc(PTR_NEW))==CLI$_PRESENT) mode=TRUE; X if (cli$present(c$dsc(PTR_SELECTED))==CLI$_PRESENT) mode2=TRUE; X if (cli$present(c$dsc(PTR_SELECTED))==CLI$_NEGATED) mode2=FALSE; X top=(cli$present(c$dsc(PTR_TOP))==CLI$_PRESENT); X bottom=(cli$present(c$dsc(PTR_BOTTOM))==CLI$_PRESENT); X read=(cli$present(c$dsc(PTR_READ))==CLI$_PRESENT); X sprintf(tmp,"%s%s",top?"TOP":"BOTTOM",read?"/READ":""); X if (strcmp(tmp,conf`091NEWS_NUM_GROUPENTRY`093.text) && (top`124`124bottom V`124`124read)) `123 X add_config(NEWS_NUM_GROUPENTRY,tmp,temp?NEWS_MODE_TEMPORARY:NEWS_MODE_US VER); X strcpy(fao,c$asc(tmp)); geterror(fac,NEWS$_GRPMODE,fao); X if (!temp) write_configuration(); X `125 X if (sorted!=conf`091NEWS_NUM_SORTGROUP`093.value && sorted!=2) `123 X add_config(NEWS_NUM_SORTGROUP,sorted?PTR_SUBJECT:PTR_NUMBER,temp?NEWS_MO VDE_TEMPORARY:NEWS_MODE_USER); X strcpy(fao,c$asc(conf`091NEWS_NUM_SORTGROUP`093.text)); geterror(fac,NEW VS$_GRPDSPL,fao); X if (!temp) write_configuration(); X `125 X if (thread!=conf`091NEWS_NUM_SORTGROUP`093.value && thread!=2) `123 X add_config(NEWS_NUM_SORTGROUP,thread?"THREAD":PTR_NUMBER,temp?NEWS_MODE_ VTEMPORARY:NEWS_MODE_USER); X strcpy(fao,c$asc(conf`091NEWS_NUM_SORTGROUP`093.text)); geterror(fac,NEW VS$_GRPDSPL,fao); X if (!temp) write_configuration(); X `125 X if (fullauthors && conf`091NEWS_NUM_GROUPAUTHORS`093.value!=2) `123 X add_config(NEWS_NUM_GROUPAUTHORS,PTR_FULL,temp?NEWS_MODE_TEMPORARY:NEWS_ VMODE_USER); X strcpy(fao,c$asc(" FULL ")); geterror(fac,NEWS$_GRPAUTH,fao); X if (!temp) write_configuration(); X `125 X if (authors!=conf`091NEWS_NUM_GROUPAUTHORS`093.value && authors!=2) `123 X add_config(NEWS_NUM_GROUPAUTHORS,authors?PTR_YES:PTR_NO,temp?NEWS_MODE_T VEMPORARY:NEWS_MODE_USER); X strcpy(fao,c$asc(authors?PTR_1SPC:PTR_do_not)); geterror(fac,NEWS$_GRPAU VTH,fao); X if (!temp) write_configuration(); X `125 X if (lines!=conf`091NEWS_NUM_GROUPLINES`093.value && lines!=2) `123 X add_config(NEWS_NUM_GROUPLINES,lines?PTR_YES:PTR_NO,temp?NEWS_MODE_TEMPO VRARY:NEWS_MODE_USER); X strcpy(fao,c$asc(lines?PTR_1SPC:PTR_do_not)); geterror(fac,NEWS$_GRPLIN, Vfao); X if (!temp) write_configuration(); X `125 X if (date!=conf`091NEWS_NUM_GROUPDATE`093.value && date!=2) `123 X add_config(NEWS_NUM_GROUPDATE,date?PTR_YES:PTR_NO,temp?NEWS_MODE_TEMPORA VRY:NEWS_MODE_USER); X strcpy(fao,c$asc(date?PTR_1SPC:PTR_do_not)); geterror(fac,NEWS$_GRPDAT,f Vao); X if (!temp) write_configuration(); X `125 X if (mode!=conf`091NEWS_NUM_GROUPMODE`093.value && mode!=2) `123 X add_config(NEWS_NUM_GROUPMODE,mode?PTR_NEW:PTR_ALL,temp?NEWS_MODE_TEMPOR VARY:NEWS_MODE_USER); X strcpy(fao,c$asc(mode?"ONLY NEW":PTR_ALL)); geterror(fac,NEWS$_GRPMOD,fa Vo); X if (!temp) write_configuration(); X `125 X if (mode2!=2 && (mode2<<1)!=conf`091NEWS_NUM_GROUPMODE`093.value) `123 X add_config(NEWS_NUM_GROUPMODE,mode2?"SELECTED":PTR_ALL,temp?NEWS_MODE_TE VMPORARY:NEWS_MODE_USER); X strcpy(fao,c$asc(mode2?"ONLY UNREAD":PTR_ALL)); geterror(fac,NEWS$_GRPMO VD,fao); X if (!temp) write_configuration(); X `125 X`125 X X/*************************************************************************** V***/ X Xcmd_set_error() X`123 X int enable,disable; X globalvalue int NEWS$_ERRTYP; X X enable = (cli$present(c$dsc(PTR_FACILITY))==CLI$_PRESENT?SYSMSG_FACILITY:0 V)+ X (cli$present(c$dsc(PTR_SEVERITY))==CLI$_PRESENT?SYSMSG_SEVERITY:0 V)+ X (cli$present(c$dsc(PTR_IDENTIFICATION))==CLI$_PRESENT?SYSMSG_ID:0 V)+ X (cli$present(c$dsc(PTR_TEXT))==CLI$_PRESENT?SYSMSG_TEXT:0)+ X (cli$present(c$dsc(PTR_NUMBER))==CLI$_PRESENT?16:0); X disable = (cli$present(c$dsc(PTR_FACILITY))==CLI$_NEGATED?SYSMSG_FACILITY: V0)+ X (cli$present(c$dsc(PTR_SEVERITY))==CLI$_NEGATED?SYSMSG_SEVERITY: V0)+ X (cli$present(c$dsc(PTR_IDENTIFICATION))==CLI$_NEGATED?SYSMSG_ID: V0)+ X (cli$present(c$dsc(PTR_TEXT))==CLI$_NEGATED?SYSMSG_TEXT:0)+ X (cli$present(c$dsc(PTR_NUMBER))==CLI$_NEGATED?16:0); X fac=(fac`124enable)&(31`094disable); X geterror(fac,NEWS$_ERRTYP,fac); X`125 X X/*************************************************************************** V***/ X Xcmd_show_keypad() X`123 X int i; X uword key; X char tmp`091256`093; X globalvalue int NEWS$_IVCMD; X X if (noscr) `123 geterror(fac,NEWS$_IVCMD); return; `125 X if (cli$present(c$dsc(PTR_DEFINITIONS))!=CLI$_PRESENT) `123 X cli$dcl_parse(c$dsc("HELP/KEYPAD"),&news_table,0,0,0); cli$dispatch(); X `125 else `123 X clear_display(text_id); X strcpy(tmp,flag_description()); X show_header("%s%s - Keypad definitions of user %s%s",PTR_NEWS_NAME,PTR_N VEWS_VERSION,conf`091NEWS_NUM_USERNAME`093.text,tmp); X set_cursor(text_id,2,1); X i=0; while (i>8,tcp_data.local_port&0xff); X sprintf(buff`0915`093,"Remote host name: %s",tcp_data.foreign_host); X sprintf(buff`0916`093,"Remote IP number: %u.%u.%u.%u",tcp_data.foreign_i Vp`0910`093,tcp_data.foreign_ip`0911`093,tcp_data.foreign_ip`0912`093,tcp_dat Va.foreign_ip`0913`093); X sprintf(buff`0917`093,"Remote port: %u (%u.%u)",tcp_data.foreign_po Vrt,tcp_data.foreign_port>>8,tcp_data.foreign_port&0xff); X `125 X strcpy(buff`0918`093,PTR_1SPC); X sprintf(buff`0919`093,"Data transfered: Send bytes: %8.8u Received byte Vs: %8.8u",tcp_data.send_bytes,tcp_data.received_bytes); X sprintf(buff`09110`093," Send packets:%8.8u Received pac Vkets:%8.8u",tcp_data.send_packets,tcp_data.received_packets); X strcpy(buff`09111`093,PTR_1SPC); X sprintf(buff`09112`093,"Commands send: GROUP: %8.8u L VIST: %8.8u",nntp_data.group,nntp_data.list); X sprintf(buff`09113`093," ARTICLE: %8.8u NEWGRO VUPS: %8.8u",nntp_data.article,nntp_data.newgroups); X sprintf(buff`09114`093," HEAD: %8.8u X VHDR: %8.8u",nntp_data.head,nntp_data.xhdr); X sprintf(buff`09115`093," BODY: %8.8u Q VUIT: %8.8u",nntp_data.body,nntp_data.quit); X sprintf(buff`09116`093," POST: %8.8u",nntp_data.pos Vt); X clear_display(text_id); X strcpy(tmp,flag_description()); X show_header("%s%s - NNTP connection statistics of user %s%s",PTR_NEWS_NAME V,PTR_NEWS_VERSION,conf`091NEWS_NUM_USERNAME`093.text,tmp); X set_cursor(text_id,2,1); X i=0; while (i<17) `123 X put_text(text_id,buff`091i`093,0,0,TRUE); X if ((i+1)%(xROWS-7)==0 && i<16) `123 X set_cursor(text_id,xROWS-4,1); X put_text(text_id,PTR_Press_RET,SMG$M_BOLD,0,TRUE); X while (key!=SMG$K_TRM_NOKEY) `123 X key=read_key(kbd_id,PTR_NEWS_PROMPT,input_id); X switch (key) `123 X case SMG$K_TRM_CTRLW: X case SMG$K_TRM_CTRLL: X redraw_screen(paste_id); break; X case SMG$K_TRM_CTRLR: X cmd_quit(); break; X case SMG$K_TRM_CTRLZ: X case SMG$K_TRM_F10: X cmd_exit(); break; X case SMG$K_TRM_CR: X case SMG$K_TRM_ENTER: X key=SMG$K_TRM_NOKEY; break; X `125 X `125 X key=0; X clear_display(text_id); X set_cursor(text_id,2,1); X `125 X i++; X `125 X set_cursor(text_id,xROWS-4,1); X put_text(text_id,PTR_Press_RET,SMG$M_BOLD,0,TRUE); X while (key!=SMG$K_TRM_NOKEY) `123 X key=read_key(kbd_id,PTR_NEWS_PROMPT,input_id); X switch (key) `123 X case SMG$K_TRM_CTRLW: X case SMG$K_TRM_CTRLL: X redraw_screen(paste_id); break; X case SMG$K_TRM_CTRLR: X cmd_quit(); break; X case SMG$K_TRM_CTRLZ: X case SMG$K_TRM_F10: X cmd_exit(); break; X case SMG$K_TRM_CR: X case SMG$K_TRM_ENTER: X key=SMG$K_TRM_NOKEY; break; X `125 X `125 X switch (internal_mode&STS_HANDLE_BITS) `123 X case STS_HANDLE_GROUPS: X newsgroups_header(TRUE); X break; X case STS_HANDLE_SUBJECTS: X group_header(); X group_redraw(subjectscreen,articlepos,TRUE); X break; X case STS_HANDLE_ARTICLE: X article_header(); X article_redraw(articlescreen); X break; X `125 X`125 X X/*************************************************************************** V***/ X Xcmd_define() X`123 X globalvalue int NEWS$_NOQUAL,NEWS$_IVCMD; X X if (noscr) `123 geterror(fac,NEWS$_IVCMD); return; `125 X geterror(fac,NEWS$_NOQUAL); X`125 X X/*************************************************************************** V***/ X Xcmd_define_key() X`123 X uword retlen; X int i; X bool flag=FALSE; X char tmp`091256`093,*tp,key`091256`093,command`091256`093,helptext`091256` V093; X globalvalue int NEWS$_IVKEY,NEWS$_KEYDEF,NEWS$_IVKEYHLP,NEWS$_IVCMD; X X if (noscr) `123 geterror(fac,NEWS$_IVCMD); return; `125 X cli$get_value(c$dsc(PTR_Key),c$ldsc(tmp,256),&retlen); tmp`091retlen`093=' V\0'; X tp=tmp; if (tmp`0910`093=='"') tp++; X if (tmp`091strlen(tmp)-1`093=='"') tmp`091strlen(tmp)-1`093='\0'; X strcpy(key,tp); X cli$get_value(c$dsc(PTR_Command),c$ldsc(tmp,256),&retlen); tmp`091retlen`0 V93='\0'; X tp=tmp; if (tmp`0910`093=='"') tp++; X if (tmp`091strlen(tmp)-1`093=='"') tmp`091strlen(tmp)-1`093='\0'; X strcpy(command,tp); X cli$get_value(c$dsc(PTR_Helptext),c$ldsc(tmp,256),&retlen); tmp`091retlen` V093='\0'; X tp=tmp; if (tmp`0910`093=='"') tp++; X if (tmp`091strlen(tmp)-1`093=='"') tmp`091strlen(tmp)-1`093='\0'; X strcpy(helptext,tp); X for (i=0;i15 && helptext`09115`093=='`124' && strlen(helptext V)<30) flag=TRUE; X `125 else if (i==30) `123 /* ENTER */ X if (strlen(helptext)<8) flag=TRUE; X if (strlen(helptext)>7 && helptext`0917`093=='`124' && strlen(helptext)< V16) flag=TRUE; X if (strlen(helptext)>15 && helptext`0917`093=='`124' && helptext`09115`0 V93=='`124' && X strlen(helptext)<24) flag=TRUE; X if (strlen(helptext)>23 && helptext`0917`093=='`124' && helptext`09115`0 V93=='`124' &&`032 X helptext`09123`093=='`124' && strlen(helptext)<32) flag=TRUE; X if (strlen(helptext)>31 && helptext`0917`093=='`124' && helptext`09115`0 V93=='`124' &&`032 X helptext`09123`093=='`124' && helptext`09131`093=='`124' && strlen(h Velptext)<40) flag=TRUE; X `125 else `123 /* all other keys */ X if (strlen(helptext)<8) flag=TRUE; X if (strlen(helptext)>7 && helptext`0917`093=='`124' && strlen(helptext)< V16) flag=TRUE; X `125 X if (flag) `123 X strcpy(fkeys`091i`093.command,command); X strcpy(fkeys`091i`093.helptext,helptext); X fkeys`091i`093.mode=NEWS_MODE_USER; X strcpy(fao,c$asc(key)); strcpy(fao2,c$asc(command)); X geterror(fac,NEWS$_KEYDEF,fao,fao2); X write_configuration(); X `125 else `123 strcpy(fao,c$asc(key)); geterror(fac,NEWS$_IVKEYHLP,fao); ` V125 X`125 X X/*************************************************************************** V***/ X Xcmd_define_default() X`123 X uword retlen; X int i,j; X bool temp; X char tmp`091256`093,*tp,option`091256`093,text`091256`093; X globalvalue int NEWS$_IVCMD,NEWS$_DEFAULT,NEWS$_IVDEFAULT; X X if (noscr) `123 geterror(fac,NEWS$_IVCMD); return; `125 X temp=(cli$present(c$dsc(PTR_TEMPORARY))==CLI$_PRESENT); X cli$get_value(c$dsc(PTR_Option),c$ldsc(tmp,256),&retlen); tmp`091retlen`09 V3='\0'; X tp=tmp; if (tmp`0910`093=='"') tp++; X if (tmp`091strlen(tmp)-1`093=='"') tmp`091strlen(tmp)-1`093='\0'; X strcpy(option,tp); X cli$get_value(c$dsc(PTR_TEXT),c$ldsc(tmp,256),&retlen); tmp`091retlen`093= V'\0'; X tp=tmp; if (tmp`0910`093=='"') tp++; X if (tmp`091strlen(tmp)-1`093=='"') tmp`091strlen(tmp)-1`093='\0'; X strcpy(text,tp); X i= -1; j=strlen(option); X if (!strincmp(option,PTR_CNF_NEWSGROUPS,j)) `123 i=DEFAULT_NUM_NEWSGROUPS; V tp=PTR_CNF_NEWSGROUPS; `125 X if (!strincmp(option,PTR_CNF_SUBJECT,j)) `123 i=DEFAULT_NUM_SUBJECT; tp=PT VR_CNF_SUBJECT; `125 X if (!strincmp(option,PTR_CNF_DISTRIBUTION,j)) `123 i=DEFAULT_NUM_DISTRIBUT VION; tp=PTR_CNF_DISTRIBUTION; `125 X if (!strincmp(option,PTR_CNF_REPLY_TO,j)) `123 i=DEFAULT_NUM_REPLY_TO; tp= VPTR_CNF_REPLY_TO; `125 X if (!strincmp(option,PTR_CNF_FOLLOWUP_TO,j)) `123 i=DEFAULT_NUM_FOLLOWUP_T VO; tp=PTR_CNF_FOLLOWUP_TO; `125 X if (!strincmp(option,PTR_CNF_SUMMARY,j)) `123 i=DEFAULT_NUM_SUMMARY; tp=PT VR_CNF_SUMMARY; `125 X if (!strincmp(option,PTR_CNF_KEYWORDS,j)) `123 i=DEFAULT_NUM_KEYWORDS; tp= VPTR_CNF_KEYWORDS; `125 X if (!strincmp(option,PTR_CNF_EXPIRE,j)) `123 i=DEFAULT_NUM_EXPIRE; tp=PTR_ VCNF_EXPIRE; `125 X if (!strincmp(option,PTR_CNF_CONTROL,j)) `123 i=DEFAULT_NUM_CONTROL; tp=PT VR_CNF_CONTROL; `125 X if (!strincmp(option,PTR_CNF_APPROVED,j)) `123 i=DEFAULT_NUM_APPROVED; tp= VPTR_CNF_APPROVED; `125 X if (!strincmp(option,PTR_CNF_USER_NAME_1,j)) `123 i=DEFAULT_NUM_USER_NAME_ V1; tp=PTR_CNF_USER_NAME_1; `125 X if (!strincmp(option,PTR_CNF_USER_TEXT_1,j)) `123 i=DEFAULT_NUM_USER_TEXT_ V1; tp=PTR_CNF_USER_TEXT_1; `125 X if (!strincmp(option,PTR_CNF_USER_NAME_2,j)) `123 i=DEFAULT_NUM_USER_NAME_ V2; tp=PTR_CNF_USER_NAME_2; `125 X if (!strincmp(option,PTR_CNF_USER_TEXT_2,j)) `123 i=DEFAULT_NUM_USER_TEXT_ V2; tp=PTR_CNF_USER_TEXT_2; `125 X if (i>=0 && strchr(text,':')==NULL) `123 X add_default(i,text,temp?NEWS_MODE_TEMPORARY:NEWS_MODE_USER); X strcpy(fao,c$asc(tp)); strcpy(fao2,c$asc(text)); X geterror(fac,NEWS$_DEFAULT,fao,fao2); X if (!temp) write_configuration(); X `125 else `123 strcpy(fao,c$asc(option)); geterror(fac,NEWS$_IVDEFAULT,fao V); `125 X`125 X X/*************************************************************************** V***/ $ CALL UNPACK [.NEWS$SRC]CMDSHOW.C;1025 1465217532 $ create/nolog 'f' X!*************************************************************************** V**** X!* X!* VMS NEWS (part CMDSTARTUP) X!* X!* Copyright 1990 by Bernd Onasch (University of Karlsruhe) X!* 1993 by Bernd Onasch (uranus@pilhuhn.ka.sub.org) X!* X!*************************************************************************** V**** X! XMODULE news_startup XIDENT "CLD V1.25" X!*************************************************************************** V**** XDEFINE`009TYPE server_type X`009KEYWORD`009`009anunews`009`009,NONNEGATABLE X`009KEYWORD`009`009bnews`009`009,NONNEGATABLE X`009KEYWORD`009`009cnews`009`009,NONNEGATABLE X`009KEYWORD`009`009innd`009`009,NONNEGATABLE X`009KEYWORD`009`009cmd`009`009,NONNEGATABLE X`009`009`009`009`009,VALUE(REQUIRED,TYPE=$quoted_string) X!--------------------------------------------------------------------------- V---- XDEFINE`009VERB news X`009ROUTINE cmd_startup X`009NOPARAMETERS X`009QUALIFIER`009screen`009`009,NEGATABLE,PLACEMENT=GLOBAL X`009QUALIFIER`009newgroups`009,NEGATABLE,PLACEMENT=GLOBAL X`009QUALIFIER`009help`009`009,NONNEGATABLE,PLACEMENT=GLOBAL X`009QUALIFIER`009license`009`009,NONNEGATABLE,PLACEMENT=GLOBAL X`009QUALIFIER`009report`009`009,NONNEGATABLE,PLACEMENT=GLOBAL X`009QUALIFIER`009convert`009`009,NONNEGATABLE,PLACEMENT=GLOBAL X`009`009`009`009`009,VALUE(REQUIRED,TYPE=$quoted_string) X`009QUALIFIER`009server`009`009,NONNEGATABLE,PLACEMENT=GLOBAL X`009`009`009`009`009,VALUE(REQUIRED,TYPE=$quoted_string) X`009QUALIFIER`009type`009`009,NONNEGATABLE,PLACEMENT=GLOBAL X`009`009`009`009`009,VALUE(REQUIRED,TYPE=server_type) X`009QUALIFIER`009port`009`009,NONNEGATABLE,PLACEMENT=GLOBAL X`009`009`009`009`009,VALUE(REQUIRED,TYPE=$quoted_string) X`009QUALIFIER`009register`009,NONNEGATABLE,PLACEMENT=GLOBAL X`009`009`009`009`009,VALUE(REQUIRED,TYPE=$infile) X`009DISALLOW`009ANY2(help,convert,license,report) X`009DISALLOW`009(help OR convert OR license OR report) AND X`009`009`009(screen OR newgroups OR server OR port OR register) X!--------------------------------------------------------------------------- V---- $ CALL UNPACK [.NEWS$SRC]CMDSTARTUP.CLD;1025 1416563635 $ create/nolog 'f' X/*************************************************************************** V*** X * X * VMS NEWS (part CMDSYS) X * X * Copyright 1990 by Bernd Onasch (University of Karlsruhe) X * 1993 by Bernd Onasch (E-MAIL: uranus@pilhuhn.ka.sub.org) X * X *************************************************************************** V*** X * X * Internal COMMAND file (OS/system dependend calls) X * ------------------------------------------------------------------------- V--- X * char *get_uaf_entry() X * char *get_local_hostname(bool flag) X * call_editor(char *infile) X * send_mail(char *file,char *addr,char *subj,char *cc) X * print_file(char *file,char *queue) X * (optional) write_logging(char *text) X * hlp_redraw(int pos) X * int hlp_up(int pos,int num) X * int hlp_down(int pos,int num) X * char hlp_handle() X * hlp_output(struct dsc$descriptor *out_str) X * hlp_input(struct dsc$descriptor *inp_str,*prompt,uword *outlen V) X * hlp_help(char *filename,char *param) X * cmd_help() X * cmd_version() X * cmd_list() X * cmd_kill() X * cmd_spawn() X * cmd_reply() X * cmd_mail() X * cmd_print() X * cmd_coffee() X * X *************************************************************************** V***/ X X#module CMDSYS "CMD V1.25" X#include "header.h" X#include X#include X#include X#include X#include X#include X#include X#define UAI$M_RESTRICTED`0098 X#define UAI$M_CAPTIVE`009`00965536 X#include X#include X Xglobalref int news_table; X X/*************************************************************************** V***/ X Xchar *get_uaf_entry() X`123 X char uaf_owner`09140`093,loc_username`09113`093,t`09140`093,*usrptr,txt`09 V1256`093; X int i,pos; X uword retlen; X ulong cntxt=0,uic,flags,right; X quad id; X struct ItemList getuai_itmlist`091`093 = `123 X `123 sizeof(uaf_owner), UAI$_OWNER, &uaf_owner`0910`093, 0 `125, X `123 sizeof(uic), UAI$_UIC, &uic, 0 `125, X `123 sizeof(flags), UAI$_FLAGS, &flags, 0 `125, X `123 0, 0, 0, 0 `125 X `125; X X usrptr=getenv("USER"); strcpy(loc_username,usrptr); X for (i=strlen(loc_username);i<12;++i) loc_username`091i`093=' '; X loc_username`09112`093='\0'; X c$cks(sys$getuai(0,0,c$dsc(loc_username),getuai_itmlist,0,0,0)); X uaf_owner`091uaf_owner`0910`093+1`093='\0'; X sprintf(t,"%s",&uaf_owner`0911`093); X restricted=flags&(UAI$M_RESTRICTED`124UAI$M_CAPTIVE); X newsmgr=FALSE; right=uic; X id.l1=right; id.l2=0; right=0; X while (sys$find_held(&id,&right,0,&cntxt)!=SS$_NOSUCHID) `123 X c$cks(sys$idtoasc(right,&retlen,c$ldsc(txt,256),0,0,0)); X txt`091retlen`093='\0'; X if (!strcmp(txt,NEWSMGR_RIGHT)) newsmgr=TRUE; X `125 X sys$finish_rdb(&cntxt); X return(t); X`125 X X/*************************************************************************** V***/ X Xchar *get_local_hostname(flag) Xbool flag; X`123 X char nodename`09116`093,tmp`09132`093; X ulong area,number,nodelen; X struct ItemList getsyi_itmlist`091`093 = `123 X `123 sizeof(nodename), SYI$_NODENAME, &nodename`0910`093, &nodelen V `125, X `123 sizeof(area), SYI$_NODE_AREA, &area, 0 `125, X `123 sizeof(number), SYI$_NODE_NUMBER, &number, 0 `125, X `123 0, 0, 0, 0 `125 X `125; X X c$cks(sys$getsyi(0,0,0,getsyi_itmlist,0,0,0)); X sprintf(tmp,"%d.%d",area,number); X if (flag) return(nodename); X else return(tmp); X`125 X X/*************************************************************************** V***/ X X#define TPU_QUIT 0x13f2af59 X#define TPU_EXIT 0x13f2af01 X#define LSE_QUIT 0x13f2af59 X#define LSE_EXIT 0x13f2af01 X Xcall_editor(infile) /* 2=quit, 1=exit, 0=unknown */ Xchar *infile; X`123 X char tpucallstr`091100`093; X int status; X long substatus; X X save_smg_contents(); X restore_smg_update(); X clear_pasteboard(paste_id); X stop_smg_update(); X if (!strcmp(conf`091NEWS_NUM_EDITOR`093.text,"TECO") && !restricted) `123 X sprintf(tpucallstr,"%s",infile); X status=teco$edit(c$dsc(tpucallstr)); X status=0; X `125 else if (!strcmp(conf`091NEWS_NUM_EDITOR`093.text,"EDT")) `123 X sprintf(tpucallstr,"%s",infile); X status=edt$edit(c$dsc(tpucallstr),0,0,0,0,0,0,0); X status=0; X `125 else if (!strcmp(conf`091NEWS_NUM_EDITOR`093.text,"TPU")) `123 X sprintf(tpucallstr,"TPU %s",infile); X if ((status=tpu$tpu(c$dsc(tpucallstr)))==TPU_QUIT) status=2; X else if (status==TPU_EXIT) status=1; X else status=0; X `125 else if (*conf`091NEWS_NUM_EDITOR`093.text=='@' && !restricted) `123 X sprintf(tpucallstr,PTR_2s,conf`091NEWS_NUM_EDITOR`093.text,infile); X restore_smg_update(); X cursor_mode(TRUE); X disable_broadcasts(); X status=lib$spawn(c$dsc(tpucallstr),0,0,0,0,0,&substatus,0,0,0,c$dsc(PTR_ VNEWS_QUERY),0); X if (status<0 `124`124 status>2) status=0; X enable_broadcasts(); X cursor_mode(FALSE); X stop_smg_update(); X `125 else `123 X#ifdef LSE X sprintf(tpucallstr,"LSEDIT %s",infile); X if ((status=lse$lse(c$dsc(tpucallstr)))==LSE_QUIT) status=2; X else if (status==LSE_EXIT) status=1; X else status=0; X#else X sprintf(tpucallstr,"TPU %s",infile); X if ((status=tpu$tpu(c$dsc(tpucallstr)))==TPU_QUIT) status=2; X else if (status==TPU_EXIT) status=1; X else status=0; X#endif X `125 X restore_smg_contents(); X return(status); X`125 X X/*************************************************************************** V***/ X Xsend_mail(file,addr,subj,cc) Xchar *file,*addr,*subj,*cc; X`123 X#ifndef NO_MAIL X int send_context=0,user_context=0,cc_prompt; X char to_user`091256`093,cc_user`091256`093,filename`091256`093,subject`091 V256`093,tmp`091256`093, X t1`091256`093,t2`091256`093; X long to_user_len=0,cc_user_len=0,filename_len=0,subject_len=0; X uword to_type=MAIL$_TO; X char enbflg=1,*al,*dp; X quad prv=`123PRV$M_SYSPRV,0`125; X ulong sysprv_flag=SS$_NOTALLPRIV,status; X extern establish(); X struct ItemList X nulllist`091`093=`123 `1230,0,0,0`125 `125, X address_itm`091`093=`123 `123sizeof(to_user),MAIL$_SEND_USERNAME,to_user V,&to_user_len`125, X `123sizeof(to_type),MAIL$_SEND_USERNAME_TYPE,&to_type,0` V125, X `1230,0,0,0`125 `125, X body_itm`091`093=`123 `123sizeof(filename),MAIL$_SEND_FILENAME,filename, V&filename_len`125, X `1230,0,0,0`125 `125, X attrib_itm`091`093=`123 `123sizeof(to_user),MAIL$_SEND_TO_LINE,to_user,& Vto_user_len`125, X `123sizeof(subject),MAIL$_SEND_SUBJECT,subject,&subject_l Ven`125, X `1230,0,0,0`125 `125, X user_itm`091`093=`123 `1230, MAIL$_USER_USERNAME,0,0`125,`1230,0,0,0`125 V `125, X out_itm`091`093=`123 `123sizeof(cc_prompt),MAIL$_USER_CC_PROMPT,&cc_prom Vpt,0`125, X `1230,0,0,0`125 `125; X globalvalue int NEWS$_MAILSUB,NEWS$_MAILCALL; X X user_itm`0910`093.buffer_length =strlen(conf`091NEWS_NUM_USERNAME`093.text V); X user_itm`0910`093.buffer_address=conf`091NEWS_NUM_USERNAME`093.text; X c$cks(mail$user_begin(&user_context,&nulllist,&nulllist)); X c$cks(mail$user_get_info(&user_context,user_itm,out_itm)); X c$cks(mail$user_end(&user_context,&nulllist,&nulllist)); X strcpy(to_user,read_string(kbd_id,"To: ",input_id,addr)); X to_user_len=strlen(to_user); redraw_lines(paste_id,xROWS-1,2); X if (cc_prompt `124`124 *cc) `123 X strcpy(cc_user,read_string(kbd_id,"CC: ",input_id,cc)); X cc_user_len=strlen(cc_user); redraw_lines(paste_id,xROWS-1,2); X `125 X strcpy(subject,read_string(kbd_id,"Subject: ",input_id,subj)); X subject_len=strlen(subject); X set_cursor(input_id,1,1); redraw_lines(paste_id,xROWS-1,2); X strcpy(filename,file); filename_len=strlen(filename); X if ((strchr(to_user,'@')!=NULL `124`124 strchr(to_user,'%')!=NULL) X && strincmp(to_user,conf`091NEWS_NUM_MAILER`093.text,strlen(conf`091NE VWS_NUM_MAILER`093.text))) X if (*conf`091NEWS_NUM_MAILER`093.text=='"') `123 X sprintf(t1,"%s%s\"",conf`091NEWS_NUM_MAILER`093.text,to_user); X strcpy(t2,t1); X `125 else `123 X sprintf(t1,"%s%s\"",conf`091NEWS_NUM_MAILER`093.text,to_user); X sprintf(t2,"%s\"\"%s\"\"\"",conf`091NEWS_NUM_MAILER`093.text,to_user); X `125 X else `123 strcpy(t1,to_user); strcpy(t2,to_user); `125 X#ifndef CALLABLE_MAIL X dp=strchr(t1,':'); al=strchr(t1,'%'); if (al==NULL) al=strchr(t1,'@'); X if (al!=NULL) X if (dp!=NULL && *(dp+1)==':' && dpdsc$a_pointer; strcpy(txt,tp); X txt`091out_str->dsc$w_length`093='\0'; X if (help_lines>=MAXHELP-1) `123 X free(help`0910`093); X for (i=1;idsc$a_pointer + 2; strcpy(txt,tp); X txt`091prompt->dsc$w_length - 2`093='\0'; X if (noscr) `123 printf("%s",txt); gets(inp); `125 X else `123 X cursor_mode(FALSE); X put_text(input_id,txt,0,0,TRUE); X val=hlp_handle(); X inp`0910`093=val; inp`0911`093='\0'; X strcpy(txt2,txt); X cursor_mode(TRUE); X if (val=='\n' `124`124 val=='\r') tp=inp; X else strcpy(inp,tp=read_string(kbd_id,txt,input_id,inp)); X `125 X if (!*tp && *(tp+1)=='*') `123 inp`0910`093=SMG$K_TRM_CTRLZ; inp`0911`093= V'\0'; `125 X inp_str->dsc$w_length = strlen(inp); X inp_str->dsc$b_dtype = DSC$K_DTYPE_T; X inp_str->dsc$b_class = DSC$K_CLASS_S; X strcpy(inp_str->dsc$a_pointer,inp); X *outlen = strlen(inp); X if (!noscr) `123 X if (help_lines>=MAXHELP-1) `123 X free(help`0910`093); X for (i=1;i>1),1+((xCOLS-62)>>1),SMG$M V_BORDER,SMG$M_BOLD); X for (i=0;i<16;i++) `123 X if (i==6) sprintf(t,copyright`091i`093,PTR_NEWS_VERSION); X else if (i==11) sprintf(t,copyright`091i`093,MOD_TIME); X else if (i==12) `123 X if (decnet) strcpy(t," and uses DECnet objects for communications."); X else sprintf(t,copyright`091i`093,TRANSPORT); X `125 else strcpy(t,copyright`091i`093); X if (i>0 && i<7) `123 X for(j=0;j38 && i<6))?SMG$M_BL VINK:SMG$M_NOATTR; X mask`091strlen(t)`093='\0'; X put_multi(disp,t,mask,0,TRUE); X `125 else put_text(disp,t,0,0,TRUE); X `125 X key=read_key(kbd_id,PTR_NEWS_PROMPT,input_id); X close_display(disp); X`125 X X/*************************************************************************** V***/ X Xcmd_list() X`123 X bool grps,subj,body; X int start,finish,cnt,i; X char t`09116`093; X globalvalue int NEWS$_IVCMDINT,NEWS$_IVLIST,NEWS$_IVARTNUM; X X if (!noscr) `123 geterror(fac,NEWS$_IVCMDINT); return; `125 X grps=(cli$present(c$dsc(PTR_GROUPS))==CLI$_PRESENT); X subj=(cli$present(c$dsc(PTR_SUBJECTS))==CLI$_PRESENT); X body=(cli$present(c$dsc(PTR_ARTICLE))==CLI$_PRESENT); X if (internal_mode==STS_HANDLE_GROUPS && body) `123 geterror(fac,NEWS$_IVLI VST); return; `125 X if (!grps && !subj && !body) `123 X grps=(internal_mode==STS_HANDLE_GROUPS); X body=(internal_mode==STS_HANDLE_SUBJECTS); X `125 X if (grps) `123 X start=newsgroups_last(grouppos,10); if (start<0) start=newsgroups_next(- V1,1); X finish=newsgroups_next(start,20); X if (finish<0) `123 X finish=groupanz-1; X start=newsgroups_last(finish,20); if (start<0) start=newsgroups_next(- V1,1); X `125 X cnt=start; while(cnt<=finish && cnt>=0) `123 X i=newsgroups_diff(newsgroups_next(-1,1),cnt)+1; X switch (groups`091cnt`093.mode) `123 X case NEWS_GRP_MODERATED: strcpy(t,"(moderated) "); break; X case NEWS_GRP_POSTING: strcpy(t,posting==POSTING_ALLOWED?"":"(disa Vllowed) "); break; X case NEWS_GRP_NOPOSTING: strcpy(t,"(disallowed) "); break; X case NEWS_GRP_CROSSREF: strcpy(t,"(cross-ref.) "); break; X `125 X printf("%s %4d %s %swith %d article(s)\n",(cnt==grouppos?PTR_Arrow:PTR V_3SPC), X i,groups`091cnt`093.name,t,groups`091cnt`093.articles); X cnt=newsgroups_next(cnt,1); X `125 X `125 X if (subj) `123 X start=articlepos-10; if (start<0) start=0; X finish=start+20; if (finish>=articleanz) finish=articleanz-1; X if (finish>=20) start=finish-20; X cnt=start; while (cnt<=finish) `123 X printf("%s %6d %s\n",(cnt==articlepos?PTR_Arrow:PTR_3SPC), X articles`091cnt`093.number,articles`091cnt`093.subject); X cnt++; X `125 X `125 X if (body) `123 X if (!article_start(articles`091articlepos`093.number)) `123 X article_end(); geterror(fac,NEWS$_IVARTNUM); X `125 else `123 X if (conf`091NEWS_NUM_HEADERDISPLAY`093.value) `123 X i=0; while (i')) *tp2='\0'; X `125 else if (tp2=strchr(r_from,' ')) *tp2='\0'; `125 X if (!strncmp(tmp,PTR_COL_Reply_To,9)) `123 strcpy(r_repl,get_tex Vt(tmp)); X if (tp2=strchr(r_repl,' ')) *tp2='\0'; `125 X `125 X `125 X `125 else `123 sprintf(t,PTR_2sCR,conf`091NEWS_NUM_MARKER`093.text,tmp V); fputs(t,fd2); `125 X `125 X fclose(fd2); fclose(fd); delete(fp); X `125 X if (*conf`091NEWS_NUM_SIGNATURE`093.text && !forward) `123 X if (fd=fopen(conf`091NEWS_NUM_SIGNATURE`093.text,"r")) `123 X fd2=fopen(t1,"a"); fprintf(fd2,"\n"); X while (fgets(t,1024,fd)) fputs(t,fd2); X fclose(fd2); X `125 X fclose(fd); X `125 X if (fd=fopen(file,"r")) `123 X fd2=fopen(t1,"w"); while (fgets(tmp,1024,fd)) fputs(tmp,fd2); fclose(fd2 V); X `125 X fclose(fd); X if (!forward) i=call_editor(t1); X if (forward) `123 i=1; tp="Forward MAIL `091(Y)es, (N)o, to abort V`093 ? "; `125 X else if (i==1) tp="Send MAIL `091(Y)es, (N)o, to abort`093 ? "; X else tp="Do not send MAIL `091(Y)es to abort, (S)end`093 ? "; X do key=read_key(kbd_id,tp,input_id); X while (key!=SMG$K_TRM_UPPERCASE_Y && key!=SMG$K_TRM_LOWERCASE_Y && X key!=SMG$K_TRM_UPPERCASE_N && key!=SMG$K_TRM_LOWERCASE_N && X key!=SMG$K_TRM_UPPERCASE_S && key!=SMG$K_TRM_LOWERCASE_S && X key!=SMG$K_TRM_CR && key!=SMG$K_TRM_ENTER && X key!=SMG$K_TRM_CTRLZ) ; X if ((i==1 && (key==SMG$K_TRM_UPPERCASE_Y `124`124 key==SMG$K_TRM_LOWERCASE V_Y `124`124 X key==SMG$K_TRM_CR `124`124 key==SMG$K_TRM_ENTER)) `124`124 X (i!=1 && (key==SMG$K_TRM_UPPERCASE_S `124`124 key==SMG$K_TRM_LOWERCASE V_S))) X send_mail(t1,*r_repl?r_repl:r_from,subj,cc); X delete(t1); delete(t1); X#endif X`125 X X/*************************************************************************** V***/ X Xcmd_print() X`123 X bool hold; X uword retlen; X quad tim; X char queue`091256`093,file`091256`093,tmp`091256`093,t`091256`093; X globalvalue int NEWS$_IVPRNT,NEWS$_IVCMD; X X if (noscr) `123 geterror(fac,NEWS$_IVCMD); return; `125 X if (internal_mode==STS_HANDLE_GROUPS) `123 geterror(fac,NEWS$_IVPRNT); ret Vurn; `125 X if (cli$present(c$dsc(PTR_Queue))==CLI$_PRESENT) `123 X cli$get_value(c$dsc(PTR_Queue),c$ldsc(queue,256),&retlen); queue`091retl Ven`093='\0'; X `125 else strcpy(queue,conf`091NEWS_NUM_PRINT`093.text); X hold=(cli$present(c$dsc(PTR_HOLD))==CLI$_PRESENT); X c$cks(sys$gettim(&tim)); X if (hold) strcpy(file,"sys$scratch:news_hold.tmp"); X else sprintf(file,"sys$scratch:news_%08x%08x.tmp",tim.l2,tim.l1); X sprintf(t,PTR_SAVE_x,file); X cli$dcl_parse(c$dsc(t),&news_table,0,0,0); cli$dispatch(); X if (!hold) print_file(file,queue); X else print_flag=TRUE; X`125 X X/*************************************************************************** V***/ X Xcmd_coffee() X`123 X char tmp`09164`093; X uword retlen; X int i,status; X globalvalue int NEWS$_IVCOFFEE,NEWS$_COFFEE; X X i=DVI$_DEVNAM; X status=lib$getdvi(&i,0,c$dsc("COF0:"),0,c$ldsc(tmp,64),&retlen); X if (status==SS$_NORMAL) geterror(fac,NEWS$_COFFEE); X else geterror(fac,NEWS$_IVCOFFEE); X return; X`125 X X/*************************************************************************** V***/ $ CALL UNPACK [.NEWS$SRC]CMDSYS.C;1025 1265092501 $ create/nolog 'f' X/*************************************************************************** V*** X * X * VMS NEWS (part COMMAND) X * X * Copyright 1990 by Bernd Onasch (University of Karlsruhe) X * 1993 by Bernd Onasch (E-MAIL: uranus@pilhuhn.ka.sub.org) X * X *************************************************************************** V*** X * X * Internal COMMAND file X * ------------------------------------------------------------------------- V--- X * cmd_up() X * cmd_down() X * cmd_top() X * cmd_bottom() X * cmd_go() X * cmd_group() X * cmd_article() X * cmd_scan() X * cmd_exit() X * cmd_quit() X * cmd_reread() X * cmd_dir() X * cmd_register() X * cmd_deregister() X * cmd_next() X * cmd_last() X * cmd_rotate() X * bool do_save(int num,char *filename) X * bool do_check_equal(char *txt,char *pattern,bool sensitive) X * int search_article(int num) X * cmd_save() X * cmd_edit() X * cmd_mark() X * cmd_enter() X * X *************************************************************************** V***/ X X#module COMMAND "CMD V1.25" X#include "header.h" X#include X Xglobalref int news_table; Xglobalvalue unsigned STR$_MATCH; X X/*************************************************************************** V***/ X Xcmd_up() X`123 X char result`091256`093; X uword retlen; X int num,i; X globalvalue int NEWS$_IVVAL; X X if (cli$present(c$dsc(PTR_NUMBER))==CLI$_ABSENT) num=noscr?1:xROWS-4; X else `123 X c$cks(cli$get_value(c$dsc(PTR_NUMBER),c$ldsc(result,256),&retlen)); X result`091retlen`093='\0'; num=atoi(result); X if (num<=0) `123 geterror(fac,NEWS$_IVVAL); return; `125 X `125 X switch (internal_mode&STS_HANDLE_BITS) `123 X case STS_HANDLE_GROUPS: X if (num=0)?i:newsgroups_next(-1,1); X newsgroups_redraw(groupscreen,grouppos,FALSE); `125 X break; X case STS_HANDLE_SUBJECTS: X if (numarticlepos)?0:articlepos-num; X group_redraw(subjectscreen,articlepos,FALSE); `125 X break; X case STS_HANDLE_ARTICLE: X if (numarticlescreen-ARTICLE_TOP)?ARTICLE_TOP:articlescr Veen-num; X article_redraw(articlescreen); `125 X break; X `125 X`125 X X/*************************************************************************** V***/ X Xcmd_down() X`123 X char result`091256`093; X uword retlen; X int num,i; X globalvalue int NEWS$_IVVAL; X X if (cli$present(c$dsc(PTR_NUMBER))==CLI$_ABSENT) num=noscr?1:xROWS-4; X else `123 X c$cks(cli$get_value(c$dsc(PTR_NUMBER),c$ldsc(result,256),&retlen)); X result`091retlen`093='\0'; num=atoi(result); X if (num<=0) `123 geterror(fac,NEWS$_IVVAL); return; `125 X `125 X switch (internal_mode&STS_HANDLE_BITS) `123 X case STS_HANDLE_GROUPS: X if (num=0)?i:newsgroups_last(groupanz,1); X groupscreen=newsgroups_last(grouppos,xROWS-5); X newsgroups_redraw(groupscreen,grouppos,FALSE); `125 X break; X case STS_HANDLE_SUBJECTS: X if (num=articleanz)?articleanz-1:articlepos+num; X subjectscreen=(articlepos<=xROWS-4)?0:articlepos-xROWS+5; X group_redraw(subjectscreen,articlepos,FALSE); `125 X break; X case STS_HANDLE_ARTICLE: X if (num=article_lines-xROWS+4)?article_lin Ves-xROWS+5:articlescreen+num; X article_redraw(articlescreen); `125 X break; X `125 X`125 X X/*************************************************************************** V***/ X Xcmd_top() X`123 X bool top; X int i; X X top=(cli$present(c$dsc(PTR_READ))==CLI$_PRESENT); X switch (internal_mode&STS_HANDLE_BITS) `123 X case STS_HANDLE_GROUPS: X groupscreen=grouppos=newsgroups_next(-1,1); X newsgroups_redraw(groupscreen,grouppos,FALSE); X break; X case STS_HANDLE_SUBJECTS: X subjectscreen=articlepos=0; X if (top && groups`091grouppos`093.registered) `123 X i=0; while (i=0) `123 if (!articles`091i`093.unread) bre Vak; i--; `125 X i++; if (i0 && num<=i+1) `123 X grouppos=newsgroups_next(-1,num); X groupscreen=(num==1)?grouppos:newsgroups_last(grouppos,xROWS-5); X newsgroups_redraw(groupscreen,grouppos,FALSE); X `125 else geterror(fac,NEWS$_IVNUM); X break; X case STS_HANDLE_SUBJECTS: X i=0; while(i=xROWS-5 `124`124 j<0)?grouppos:newsgroups_last(grouppos,xR VOWS-5-j); X newsgroups_redraw(groupscreen,grouppos,FALSE); X if (noscr) internal_mode`124=STS_ARTICLEHEADER; X`125 X X/*************************************************************************** V***/ X Xcmd_article() X`123 X char result`091256`093,txt`091256`093; X bool keywords,summary,casesense=FALSE; X uword retlen; X int i,j; X globalvalue int NEWS$_IVART,NEWS$_NOARTHD,NEWS$_NOSUCHART; X X keywords = (cli$present(c$dsc(PTR_KEYWORDS))==CLI$_PRESENT); X summary = (cli$present(c$dsc(PTR_SUMMARY))==CLI$_PRESENT); X if (internal_mode!=STS_HANDLE_SUBJECTS) `123 geterror(fac,NEWS$_IVART); re Vturn; `125 X if (cli$present(c$dsc(PTR_ArtName))==CLI$_ABSENT) `123 geterror(fac,NEWS$_ VNOARTHD); return; `125 X c$cks(cli$get_value(c$dsc(PTR_ArtName),c$ldsc(txt,255),&retlen)); X if (*txt=='"') casesense=TRUE; X txt`091retlen`093='\0'; if (txt`091retlen-1`093=='"') txt`091retlen-1`093= V'\0'; X strcpy(result,&txt`091(*txt=='"')?1:0`093); X if (keywords && articles`0910`093.keywords==NIL) xhdr_call(PTR_KEYWORDS,0, V0); X if (summary && articles`0910`093.summary==NIL) xhdr_call(PTR_SUMMARY,0,0); X i=articlepos+1; X while (i=STS_HANDLE_SUBJECTS && X groups`091grouppos`093.registered) group_save_parser(grouppos,""); X if (write_resource(0)) `123 X strcpy(txt,get_file()); strcat(txt,"_tmp"); X delete(txt); delete(txt); delete(txt); X printf("\n"); X do_exit(); X `125 X`125 X X/*************************************************************************** V***/ X Xcmd_quit() X`123 X uword key; X X key=read_key(kbd_id,"Really Quit `091(Y)es, (N)o, e(X)it`093 ?",input_id); X if (key==SMG$K_TRM_UPPERCASE_N `124`124 key==SMG$K_TRM_LOWERCASE_N) return V; X if (key==SMG$K_TRM_UPPERCASE_X `124`124 key==SMG$K_TRM_LOWERCASE_X) cmd_ex Vit(); X do_exit(); X`125 X X/*************************************************************************** V***/ X Xcmd_reread() X`123 X bool flag; X char tmp`091256`093; X globalvalue int NEWS$_REREAD; X X geterror(fac,NEWS$_REREAD); X if (internal_mode!=STS_HANDLE_GROUPS) `123 X saveflag=FALSE; X if (groups`091grouppos`093.registered) group_save_parser(grouppos); X `125 X write_resource(1); X strcpy(tmp,actual_time); flag=newgr; newgr=FALSE; X groupanz=0; oldgroup`0910`093='\0'; X news_start(TRUE); X strcpy(actual_time,tmp); newgr=flag; X groupscreen=grouppos=newsgroups_next(-1,1); X internal_mode`124=STS_ROLLBACK; X`125 X X/*************************************************************************** V***/ X Xcmd_dir() X`123 X bool grps,articles,reg,all,used,unread,patt=2; X int i,j; X uword retlen; X char result`091256`093,*tp; X extern bool do_check_equal(); X globalvalue int NEWS$_IVDIRQL,NEWS$_IVDIRGRP,NEWS$_IVDIRART,NEWS$_IVDIRUNR V, X NEWS$_IVDIRPATT; X X grps =(cli$present(c$dsc(PTR_GROUPS))==CLI$_PRESENT); X articles=(cli$present(c$dsc(PTR_ARTICLES))==CLI$_PRESENT); X reg =(cli$present(c$dsc(PTR_REGISTERED))==CLI$_PRESENT); X all =(cli$present(c$dsc(PTR_ALL))==CLI$_PRESENT); X used =(cli$present(c$dsc(PTR_USED))==CLI$_PRESENT); X unread =(cli$present(c$dsc(PTR_UNREAD))==CLI$_PRESENT); X if (cli$present(c$dsc(PTR_Pattern))==CLI$_PRESENT) patt=TRUE; X if (cli$present(c$dsc("NOPATTERN"))==CLI$_PRESENT) patt=FALSE; X if (unread) reg=TRUE; X if (reg `124`124 all `124`124 used `124`124 unread `124`124 patt!=2) grps= VTRUE; X if (!grps && !articles) internal_mode`124=STS_ROLLUP; X if (grps) internal_mode`124=STS_ROLLBACK; X if (articles) switch (internal_mode&STS_HANDLE_BITS) `123 X case STS_HANDLE_GROUPS: X geterror(fac,NEWS$_IVDIRQL); break; X case STS_HANDLE_SUBJECTS: X group_redraw(subjectscreen,articlepos,TRUE); break; X case STS_HANDLE_ARTICLE: X internal_mode`124=STS_ROLLUP; break; X `125 X if (reg `124`124 used `124`124 unread `124`124 patt!=2) `123 X j=newsgroups_diff(groupscreen,grouppos); X if (patt==FALSE) pattern_mode=FALSE; X if (patt==TRUE) `123 X pattern_mode=TRUE; X c$cks(cli$get_value(c$dsc(PTR_Pattern),c$ldsc(result,256),&retlen)); X result`091retlen`093='\0'; if (result`091retlen-1`093=='"') result`091 Vretlen-1`093='\0'; X strcpy(grp_pattern,&result`091(*result=='"')?1:0`093); X tp=grp_pattern; while (*tp) `123 *tp=toupper(*tp); tp++; `125 X if (!strlen(grp_pattern)) `123 pattern_mode=FALSE; geterror(fac,NEWS$_ VIVDIRPATT); `125 X `125 X if (reg) registered_mode=TRUE; X if (used) allgroups_mode=FALSE; X if (unread) unreadonly_mode=TRUE; X if (( registered_mode && !groups`091grouppos`093.registered) `124`124 X (!allgroups_mode && groups`091grouppos`093.articles==0) `124`124 X ( unreadonly_mode && groups`091grouppos`093.unread==0) `124`124 X ( pattern_mode && !do_check_equal(groups`091grouppos`093.name,grp V_pattern,FALSE))) `123 X i=newsgroups_next(grouppos,1); if (i<0) i=newsgroups_last(grouppos,1); X `125 else i=grouppos; X if (i>=0) `123 X if (groups`091grouppos`093.registered `124`124 grouppos!=i) `123 X group_save_parser(grouppos); X if (conf`091NEWS_NUM_AUTOSAVE`093.value) write_resource(1); X saveflag=FALSE; X `125 X grouppos=i; X groupscreen=(j<=0)?grouppos:newsgroups_last(grouppos,j); X if (groupscreen<0) groupscreen=grouppos; X `125 else `123 X if (reg) `123 registered_mode=FALSE; geterror(fac,NEWS$_IVDIRGRP); `12 V5 X if (used) `123 allgroups_mode=TRUE; geterror(fac,NEWS$_IVDIRART); `125 X if (unread) `123 unreadonly_mode=TRUE; geterror(fac,NEWS$_IVDIRUNR); ` V125 X if (patt) `123 pattern_mode=FALSE; geterror(fac,NEWS$_IVDIRPATT); `125 X `125 X `125 X if (all) `123 X i=newsgroups_diff(groupscreen,grouppos); X registered_mode=FALSE; allgroups_mode=TRUE; unreadonly_mode=FALSE; X groupscreen=(i==0)?grouppos:newsgroups_last(grouppos,i); X `125 X`125 X X/*************************************************************************** V***/ X Xcmd_register() X`123 X char result`091256`093,txt`091256`093,*ptr,*tp; X uword retlen,key; X int i,matches=0; X struct dsc$descriptor *desc1,*desc2; X X if (cli$present(c$dsc(PTR_GroupName))==CLI$_ABSENT) `123 X if (!groups`091grouppos`093.registered) matches++; X groups`091grouppos`093.registered=TRUE; X if (internal_mode==STS_HANDLE_GROUPS) groups`091grouppos`093.unread=grou Vps`091grouppos`093.articles; X else groups`091grouppos`093.unread=articleanz; X result`0910`093='\0'; X `125 else `123 X c$cks(cli$get_value(c$dsc(PTR_GroupName),c$ldsc(result,256),&retlen)); X result`091retlen`093='\0'; X if (strchr(result,'*')) `123 X sprintf(txt,"Select really all '%s' `091(Y)es, (N)o`093 ?",result); X key=read_key(kbd_id,txt,input_id); X if (key==SMG$K_TRM_UPPERCASE_N `124`124 key==SMG$K_TRM_LOWERCASE_N) re Vturn; X `125 X inp_comment("`091Searching the list of newsgroups`093"); X desc1=c$dsc(txt); desc2=c$dsc(result); X for(i=0;idsc$w_length=strlen(txt); X if (str$match_wild(desc1,desc2)==STR$_MATCH `124`124 !strcmp(txt,resul Vt)) `123 X if (!groups`091i`093.registered) matches++; X groups`091i`093.registered=TRUE; X if (internal_mode==STS_HANDLE_GROUPS) groups`091grouppos`093.unread= Vgroups`091grouppos`093.articles; X else groups`091grouppos`093.unread=articleanz; X `125 X `125 X `125 X inp_comment("`091Subscribed to %d new newsgroups`093",matches); X switch (internal_mode&STS_HANDLE_BITS) `123 X case STS_HANDLE_GROUPS: X if (registered_mode) `123 X if (newsgroups_diff(groupscreen,grouppos)>xROWS-5) `123 X groupscreen=newsgroups_last(grouppos,xROWS-5); X if (groupscreen<0) groupscreen=grouppos; X `125 X newsgroups_header(FALSE); X `125 else `123 X newsgroups_header(FALSE); X sprintf(result,PTR_DOWN_x,1); X cli$dcl_parse(c$dsc(result),&news_table,0,0,0); cli$dispatch(); X `125 X break; X case STS_HANDLE_SUBJECTS: X group_redraw(subjectscreen,articlepos,FALSE); break; X case STS_HANDLE_ARTICLE: X break; X `125 X`125 X X/*************************************************************************** V***/ X Xcmd_deregister() X`123 X char result`091256`093,txt`091256`093,*ptr,*tp; X uword retlen,key; X int i,matches=0; X bool all; X struct dsc$descriptor *desc1,*desc2; X globalvalue int NEWS$_DEREGALL; X X if (all=(cli$present(c$dsc(PTR_ALL))==CLI$_PRESENT)) strcpy(result,"*"); X if (!all && cli$present(c$dsc(PTR_GroupName))==CLI$_ABSENT) `123 X if (groups`091grouppos`093.registered) matches++; X groups`091grouppos`093.registered=FALSE; X groups`091grouppos`093.unread=groups`091grouppos`093.articles; X `125 else `123 X if (!all) `123 X c$cks(cli$get_value(c$dsc(PTR_GroupName),c$ldsc(result,256),&retlen)); X result`091retlen`093='\0'; X `125 X if (strchr(result,'*')) `123 X sprintf(txt,"Remove really all '%s' `091(Y)es, (N)o`093 ?",result); X key=read_key(kbd_id,txt,input_id); X if (key==SMG$K_TRM_UPPERCASE_N `124`124 key==SMG$K_TRM_LOWERCASE_N) re Vturn; X `125 X inp_comment("`091Searching the list of newsgroups`093"); X desc1=c$dsc(txt); desc2=c$dsc(result); X for(i=0;idsc$w_length=strlen(txt); X if (str$match_wild(desc1,desc2)==STR$_MATCH `124`124 !strcmp(txt,resul Vt)) `123 X if (groups`091i`093.registered && groups`091i`093.read_art!=NIL) `12 V3 free(groups`091i`093.read_art); groups`091i`093.read_art=NIL; `125 X if (groups`091i`093.registered) matches++; X groups`091i`093.registered=FALSE; X groups`091i`093.read_art=NIL; X groups`091i`093.unread=groups`091i`093.articles; X `125 X `125 X `125 X inp_comment("`091Unsubscribed from %d newsgroups`093",matches); X switch (internal_mode&STS_HANDLE_BITS) `123 X case STS_HANDLE_GROUPS: X if (registered_mode && newsgroups_next(-1,1)<0) `123 X registered_mode=FALSE; geterror(fac,NEWS$_DEREGALL); X groupscreen=(grouppos==0)?0:newsgroups_last(grouppos,xROWS-5); X `125 X if (registered_mode) `123 X if (!groups`091grouppos`093.registered) `123 X i=newsgroups_next(grouppos,1); X grouppos=(i>=0)?i:newsgroups_last(grouppos,1); X `125 X if (newsgroups_diff(groupscreen,grouppos)>xROWS-5 `124`124 !groups`0 V91groupscreen`093.registered) `123 X groupscreen=newsgroups_last(grouppos,xROWS-5); X if (groupscreen<0) groupscreen=grouppos; X `125 X newsgroups_header(TRUE); X `125 else `123 X newsgroups_header(FALSE); X sprintf(result,PTR_DOWN_x,1); X cli$dcl_parse(c$dsc(result),&news_table,0,0,0); cli$dispatch(); X `125 X break; X case STS_HANDLE_SUBJECTS: X group_redraw(subjectscreen,articlepos,FALSE); break; X case STS_HANDLE_ARTICLE: X break; X `125 X`125 X X/*************************************************************************** V***/ X Xcmd_next() X`123 X bool follow,author,unread; X int value; X char t`091256`093,t2`091256`093,*tp; X globalvalue int NEWS$_NOFLWUP,NEWS$_IVFLWAUTH,NEWS$_NOFLWAUTH,NEWS$_IVNXT, VNEWS$_LASTART; X X follow=(cli$present(c$dsc(PTR_FOLLOWUP))==CLI$_PRESENT); X author=(cli$present(c$dsc(PTR_AUTHOR))==CLI$_PRESENT); X unread=(cli$present(c$dsc(PTR_UNREAD))==CLI$_PRESENT); X if (unread) `123 internal_mode`124=STS_ARTICLESCAN; return; `125 X if ((follow `124`124 author) && internal_mode!=STS_HANDLE_GROUPS) `123 X if (follow) `123 X strcpy(tp=t,articles`091articlepos`093.subject); X while (TRUE) `123 X if (strlen(tp)<3) break; X if (upcase(*tp)=='R' && upcase(*(tp+1))=='E' && X (*(tp+2)==':' `124`124 *(tp+2)=='`094')) `123 X tp+=3; while (*tp && *tp!=' ') tp++; whilespace(tp); X `125 else break; X `125 X sprintf(t2,"*%s",tp); value=articlepos+1; X while (valuexROWS-5) subjectscreen+=value; X article_end(); X article_header(); X if(!article_start(articles`091articlepos`093.number)) `123 X cli$dcl_parse(c$dsc(PTR_DIR),&news_table,0,0,0); cli$dispatch(); X return; X `125 X articlescreen=ARTICLE_TOP; X article_redraw(articlescreen); X `125 else geterror(fac,NEWS$_LASTART); X break; X `125 X`125 X X/*************************************************************************** V***/ X Xcmd_last() X`123 X int i; X bool rd; X char tmp`091256`093; X globalvalue int NEWS$_IVLST,NEWS$_FRSTART,NEWS$_NOLST; X X rd = (cli$present(c$dsc(PTR_READ))==CLI$_PRESENT); X switch (internal_mode&STS_HANDLE_BITS) `123 X case STS_HANDLE_GROUPS: X geterror(fac,NEWS$_IVLST); break; X case STS_HANDLE_SUBJECTS: X if (old_read== -1 && rd) `123 geterror(fac,NEWS$_NOLST); break; `125 X if (rd) `123 X sprintf(tmp,PTR_GO_x,old_read); X old_read= -1; X cli$dcl_parse(c$dsc(tmp),&news_table,0,0,0); X `125 else cli$dcl_parse(c$dsc("UP 1"),&news_table,0,0,0); X cli$dispatch(); X break; X case STS_HANDLE_ARTICLE: X if (rd) `123 X if (old_read== -1) `123 geterror(fac,NEWS$_NOLST); break; `125 X i=0; while (articles`091i`093.number!=old_read) i++; X articlepos=i; old_read= -1; X if (articlepossubjectscreen) subjectscreen=articlepos-xROWS V-4; X article_end(); X article_header(); X if(!article_start(articles`091articlepos`093.number)) `123 X cli$dcl_parse(c$dsc(PTR_DIR),&news_table,0,0,0); cli$dispatch(); X return; X `125 X articlescreen=ARTICLE_TOP; X article_redraw(articlescreen); X `125 X if (articlepos) `123 X articlepos--; if (articlepos' && *(tp+1)==' ') `124`124 (*tp=='-' && *(tp+1)=='-')) V) `123 X tp+=2; while (*tp && *tp!=' ') tp++; whilespace(tp); X `125 else if (upcase(*tp)=='R' && upcase(*(tp+1))=='E' && X (*(tp+2)==':' `124`124 *(tp+2)=='`094')) `123 X tp+=3; while (*tp && *tp!=' ') tp++; whilespace(tp); X `125 else break; X `125 X sprintf(t,"*%s",tp); X `125 else if (author) `123 X if (articles`091articlepos`093.from==NIL) `123 geterror(fac,NEWS$_IVSK VPAUTH); return; `125 X strcpy(tp=auth,articles`091articlepos`093.from); X while (*tp && *tp!=' ') tp++; if (*tp) *tp='\0'; X `125 else `123 X all=(cli$present(c$dsc(PTR_ALL))==CLI$_PRESENT); X if (all) `123 start=articles`0910`093.number; fin=articles`091articlea Vnz-1`093.number; `125 X else start=fin=articles`091articlepos`093.number; X `125 X `125 else `123 X c$cks(cli$get_value(c$dsc(PTR_Area),c$ldsc(result,256),&retlen)); X result`091retlen`093='\0'; tp=result; X if (!strcmp(result,"-")) `123 geterror(fac,NEWS$_IVMRKRNG); return; `125 X while (*tp && (isdigit(*tp) `124`124 *tp=='-' `124`124 *tp=='*')) tp++; X if (*tp) `123 geterror(fac,NEWS$_IVMRKCHR); return; `125 X if (tp=strchr(result,'-')) if (strchr(tp+1,'-')) `123 geterror(fac,NEWS$ V_IVMRKCHR); return; `125 X if (tp=strchr(result,'*')) if (strchr(tp+1,'*')) `123 geterror(fac,NEWS$ V_IVMRKCHR); return; `125 X tp=result; X if (result`0910`093=='-') `123 start=articles`0910`093.number; ch='-'; t Vp++; `125 X else if (!strncmp("*-",result,2)) `123 start=articles`091articlepos`093. Vnumber; ch='-'; tp+=2; `125 X else `123 X while (*tp && *tp!='-') tp++; X ch= *tp; *tp='\0'; start=atoi(result); *tp=ch; X if (*tp) tp++; X `125 X if (ch=='-' && *tp=='*') fin=articles`091articlepos`093.number; X else if (ch=='-' && *tp) fin=atoi(tp); X else fin=articles`091articleanz-1`093.number; X `125 X switch (internal_mode&STS_HANDLE_BITS) `123 X case STS_HANDLE_GROUPS: X if (*result) `123 geterror(fac,NEWS$_IVMRK); return; `125 X if (all) `123 X key=read_key(kbd_id,"MARK really all groups `091(Y)es, (N)o`093 ?",i Vnput_id); X if (key==SMG$K_TRM_UPPERCASE_N `124`124 key==SMG$K_TRM_LOWERCASE_N) V break; X `125 X for(i=0;i=groups`091i`093.use_start && mark) `12 V3 X strcpy(groups`091i`093.read_art=malloc(strlen(txt)+1),txt); X groups`091i`093.unread=0; X `125 else `123 X groups`091i`093.read_art=NIL; X groups`091i`093.unread=groups`091i`093.articles; X `125 X `125 X `125 X i=newsgroups_next(grouppos,1); X if (i<0) `123 X if (unreadonly_mode) i=newsgroups_last(grouppos,1); X else i=grouppos; X `125 X if (i<0) `123 X if (unreadonly_mode) unreadonly_mode=FALSE; X groupscreen=grouppos=newsgroups_next(-1,1); X `125 else `123 X if (groupscreen>grouppos) groupscreen=i; X j=newsgroups_next(groupscreen,xROWS-5); X if (j>=0 && j=start) `124`124 X (conf`091NEWS_NUM_SORTGROUP`093.value!=0 && articles`091i`093.nu Vmber==start)) X started=TRUE; X if ((conf`091NEWS_NUM_SORTGROUP`093.value==0 && articles`091i`093.nu Vmber>fin) `124`124 X (conf`091NEWS_NUM_SORTGROUP`093.value!=0 && articles`091i==0?i:i V-1`093.number==fin)) X finished=TRUE; X if ((started && !finished) `124`124 X (*pattern && do_check_equal(articles`091i`093.subject,pattern,ca Vsesense)) `124`124 X (author && !strincmp(articles`091i`093.from,auth,strlen(auth))) V `124`124 X (subject && (!strcmp(&t`0911`093,articles`091i`093.subject) `124 V`124 X str$match_wild(c$dsc(articles`091i`093.subject),c$dsc(t))==STR$ V_MATCH))) `123 X if (articles`091i`093.unread==mark) j++; articles`091i`093.unread= V !mark; `125 X `125 X geterror(fac,NEWS$_MRKD,j); X group_redraw(subjectscreen,articlepos,FALSE); X subjectscreen=group_down(subjectscreen,1); X break; X case STS_HANDLE_ARTICLE: X for(i=0;i=start) `124`124 X (conf`091NEWS_NUM_SORTGROUP`093.value!=0 && articles`091i`093.nu Vmber==start)) X started=TRUE; X if ((conf`091NEWS_NUM_SORTGROUP`093.value==0 && articles`091i`093.nu Vmber>fin) `124`124 X (conf`091NEWS_NUM_SORTGROUP`093.value!=0 && articles`091i==0?i:i V-1`093.number==fin)) X finished=TRUE; X if ((started && (!finished `124`124 start==fin)) `124`124 X (*pattern && do_check_equal(articles`091i`093.subject,pattern,ca Vsesense)) `124`124 X (author && !strincmp(articles`091i`093.from,auth,strlen(auth))) V `124`124 X (subject && (!strcmp(&t`0911`093,articles`091i`093.subject) `124 V`124 X str$match_wild(c$dsc(articles`091i`093.subject),c$dsc(t))==STR$ V_MATCH))) `123 X if (articles`091i`093.unread==mark) j++; articles`091i`093.unread= V !mark; `125 X `125 X geterror(fac,NEWS$_MRKD,j); X break; X `125 X`125 X X/*************************************************************************** V***/ X Xcmd_enter() X`123 X bool new; X globalvalue NEWS$_IVENT; X X if (internal_mode!=STS_HANDLE_GROUPS) `123 geterror(fac,NEWS$_IVENT); retu Vrn; `125 X new=(cli$present(c$dsc(PTR_NEW))==CLI$_PRESENT); X if (conf`091NEWS_NUM_GROUPMODE`093.value) new=TRUE; X if (cli$present(c$dsc(PTR_NEW))==CLI$_NEGATED) new=FALSE; X internal_mode2=(new?STS_ENTER_OPTIMIZE:STS_ENTER_FORCE); X`125 X X/*************************************************************************** V***/ $ CALL UNPACK [.NEWS$SRC]COMMAND.C;1025 1897695369 $ create/nolog 'f' X/*************************************************************************** V*** X * X * VMS NEWS (part CONSTANTS) X * X * Copyright 1990 by Bernd Onasch (University of Karlsruhe) X * 1993 by Bernd Onasch (E-MAIL: uranus@pilhuhn.ka.sub.org) X * X *************************************************************************** V***/ X X#ifdef _HEADER_ X#define defPTR(param) globalref char *PTR_/**/param; X#define defSTR(p1,p2) globalref char *PTR_/**/p1; X#else X#module CONSTANTS "SYS V1.25" X#include "version.h" X#define defPTR(param) globaldef char *PTR_/**/param="param"; X#define defSTR(p1,p2) globaldef char *PTR_/**/p1=p2; X#endif X X/*************************************************************************** V*** X * String constants needed for command parser X *************************************************************************** V***/ X XdefPTR(ALL) XdefPTR(APPEND) XdefPTR(Area) XdefPTR(ARTICLE) XdefPTR(ARTICLES) XdefPTR(ArtName) XdefPTR(AUTHOR) XdefPTR(AUTHORS) XdefPTR(AUTOSAVE) XdefPTR(BOTTOM) XdefPTR(BROADCASTS) XdefPTR(CASE_SENSITIVE) XdefPTR(CC) XdefPTR(CLOCK) XdefPTR(Command) XdefPTR(COMMANDS) XdefPTR(CONTROL) XdefPTR(CONVERT) XdefPTR(DATE) XdefPTR(DEFAULT) XdefPTR(DEFINITIONS) XdefPTR(DISABLE) XdefPTR(EDITOR) XdefPTR(ENABLE) XdefPTR(FACILITY) XdefPTR(Filename) XdefPTR(FOLLOWUP) XdefPTR(FORMAT) XdefPTR(FORWARD) XdefPTR(FULLAUTHORS) XdefPTR(GroupName) XdefPTR(GROUP) XdefPTR(GROUPS) XdefPTR(HEADER) XdefPTR(HELP) XdefPTR(Helptext) XdefPTR(HOLD) XdefPTR(IDENTIFICATION) XdefPTR(Key) XdefPTR(KEYPAD) XdefPTR(KEYWORDS) XdefPTR(KILLFILE) XdefPTR(LICENSE) XdefPTR(LINES) XdefPTR(MANAGED) XdefPTR(MARKER) XdefPTR(Name) XdefPTR(NEW) XdefPTR(NEWGROUPS) XdefPTR(NEWSGROUPS) XdefPTR(NUMBER) XdefPTR(Option) XdefPTR(ORGANISATION) XdefPTR(PATH) XdefPTR(Pattern) XdefPTR(PERSONAL_NAME) XdefPTR(PORT) XdefPTR(PRINTER) XdefPTR(PROFILE) XdefPTR(PROTOCOL) XdefPTR(Queue) XdefPTR(READ) XdefPTR(REGISTER) XdefPTR(REGISTERED) XdefPTR(REMOVE) XdefPTR(REPORT) XdefPTR(SAVEDIRECTORY) XdefPTR(SCREEN) XdefPTR(SELECTED) XdefPTR(SERVER) XdefPTR(SEVERITY) XdefPTR(SIGNATURE) XdefPTR(SORTED) XdefPTR(SUBJECT) XdefPTR(SUBJECTS) XdefPTR(SUMMARY) XdefPTR(TEMPORARY) XdefPTR(TEXT) XdefPTR(THREADED) XdefPTR(TOP) XdefPTR(TYPE) XdefPTR(UNREAD) XdefPTR(USED) XdefPTR(VTTERM) X X/*************************************************************************** V*** X * String constants used to resolve configuration text strings X *************************************************************************** V***/ X XdefSTR(CNF_ADDRESS,"Address") XdefSTR(CNF_SERVER,"Servername") XdefSTR(CNF_PORT,"Serverport") XdefSTR(CNF_ORGANISATION,"Organisation") XdefSTR(CNF_TIMEZONE,"Timezone") XdefSTR(CNF_DISTRIBUTION,"Distribution") XdefSTR(CNF_EDITOR,"Editor") XdefSTR(CNF_PERSONAL_NAME,"Persname") XdefSTR(CNF_USERNAME,"Username") XdefSTR(CNF_SIGNATURE,"Signature") XdefSTR(CNF_MARKER,"Marker") XdefSTR(CNF_HEADERDISPLAY,"Showheader") XdefSTR(CNF_GROUPENTRY,"Groupentry") XdefSTR(CNF_SORTGROUP,"Groupsort") XdefSTR(CNF_MAILER,"Mail_Trans") XdefSTR(CNF_BROADCASTS,"Broadcasts") XdefSTR(CNF_GROUPAUTHORS,"Groupauthors") XdefSTR(CNF_AUTOSAVE,"RC_Update") XdefSTR(CNF_PRINT,"PrintQueue") XdefSTR(CNF_CLOCK,"Clock") XdefSTR(CNF_GROUPLINES,"Grouplines") XdefSTR(CNF_NEWSENTRY,"Newsentry") XdefSTR(CNF_GROUPMODE,"Groupmode") XdefSTR(CNF_KILLFILE,"Killfile") XdefSTR(CNF_GROUPDATE,"Groupdate") XdefSTR(CNF_DUMPTERM,"NonVTterm") XdefSTR(CNF_SAVEDIRECTORY,"SaveDir") XdefSTR(CNF_SERVERTYPE,"ServerType") XdefSTR(CNF_NEWSGROUPS,"Newsgroups") XdefSTR(CNF_SUBJECT,"Subject") XdefSTR(CNF_REPLY_TO,"Reply_To") XdefSTR(CNF_FOLLOWUP_TO,"Followup_To") XdefSTR(CNF_SUMMARY,"Summary") XdefSTR(CNF_KEYWORDS,"Keywords") XdefSTR(CNF_EXPIRE,"Expire") XdefSTR(CNF_CONTROL,"Control") XdefSTR(CNF_APPROVED,"Approved") XdefSTR(CNF_USER_NAME_1,"Userheader_1") XdefSTR(CNF_USER_TEXT_1,"Usertext_1") XdefSTR(CNF_USER_NAME_2,"Userheader_2") XdefSTR(CNF_USER_TEXT_2,"Usertext_2") X X/*************************************************************************** V*** X * NNTP commands X *************************************************************************** V***/ X X/* defPTR(ARTICLE)`009`009`009/* ARTICLE `091number`093 */ XdefPTR(BODY)`009`009`009`009/* BODY `091number`093 */ X/* defPTR(GROUP)`009`009`009/* GROUP */ XdefPTR(HEAD)`009`009`009`009/* HEAD `091number`093 */ X/* defPTR(HELP) */ X/* defPTR(IHAVE) */ X/* defPTR(LAST) */ XdefPTR(LIST)`009`009`009`009/* LIST */ XdefPTR(MODE)`009`009`009`009/* MODE `091reader`124server`093 */ X/* defPTR(NEWGROUPS)`009`009`009/* NEWGROUPS