?section :marks:codes:^delta DELTA futemp$ hxtemp$ 4fttemp$ hk mtemp$ fotemp$ ?section :marks:codes:^esc ROUTINE #result [#delta/commands :marks:codes:^delta/27i@i//] ?section :marks:codes:screen:^bell ROUTINE #result [#delta/commands :marks:codes:^delta/7i@i//] ?section :marks:codes:screen:^rev^blink ROUTINE #result [:marks:codes:^esc]6&& ?section :marks:codes:screen:^rev^dim ROUTINE #result [:marks:codes:^esc]6% ?section :marks:codes:screen:^blink^dim ROUTINE #result [:marks:codes:^esc]6# ?section :marks:codes:screen:^bright^text ROUTINE #result [:marks:codes:^esc]6@ ?section :marks:codes:screen:^dim^text ROUTINE #result [:marks:codes:^esc]6@ ?section :marks:codes:screen:^normal ROUTINE #result [:marks:codes:^esc]6 [#delta/commands ^delta/11i] ?section :marks:codes:screen:^cls ROUTINE #result [#delta/commands ^delta/27I73I] ?section :marks:codes:screen:backspace ROUTINE #result [#delta/commands ^delta/8i@i//] ?section :marks:codes:screen:horiz^tab ROUTINE #result [#delta/commands ^delta/9i@i//] ?section :marks:codes:screen:vert^tab ROUTINE #result [#delta/commands ^delta/11i@i//] ?section :marks:codes:screen:shift^out ROUTINE #result [#delta/commands ^delta/14i@i//] ?section :marks:codes:screen:shift^in ROUTINE #result [#delta/commands ^delta/15i@i//] ?section :marks:codes:screen:del ROUTINE #result [#delta/commands ^delta/127i@i//] ?section :marks:codes:screen:NUL ROUTINE #result [#delta/commands ^delta/0i@i//] ?section :marks:codes:screen:SOH ROUTINE #result [#delta/commands ^delta/1i@i//] ?section :marks:codes:screen:ENQ ROUTINE #result [#delta/commands ^delta/5i@i//] ?section :marks:codes:screen:ACK ROUTINE #result [#delta/commands ^delta/6i@i//] ?section :marks:codes:screen:BEL ROUTINE #result [#delta/commands ^delta/7i@i//] ?section :marks:codes:screen:backspace ROUTINE #result [#delta/commands ^delta/8i@i//] ?section :marks:codes:screen:BS ALIAS :marks:codes:screens:backspace ?section :marks:codes:screen:horiztab ROUTINE #result [#delta/commands ^delta/9i@i//] ?section :marks:codes:screen:HT ALIAS :marks:codes:screens:horiztab ?section :marks:codes:screen:LF ROUTINE #result [#delta/commands ^delta/10i@i//] ?section :marks:codes:screen:VT ROUTINE #result [#delta/commands ^delta/11i@i//] ?section :marks:codes:screen:FF ROUTINE #result [#delta/commands ^delta/12i@i//] ?section :marks:codes:screen:CR ROUTINE #result [#delta/commands ^delta/13i@i//] ?section :marks:codes:screen:SO ROUTINE #result [#delta/commands ^delta/14i@i//] ?section :marks:codes:screen:SI ROUTINE #result [#delta/commands ^delta/15i@i//] ?section :marks:codes:screen:NAK ROUTINE #result [#delta/commands ^delta/21i@i//] ?section :marks:codes:screen:SYN ROUTINE #result [#delta/commands ^delta/22i@i//] ?section :marks:codes:screen:ESC ALIAS :marks:codes:^esc ?section :marks:codes:screen:cursor^set^addr^extended ROUTINE #result [:marks:codes:screen:ESC]D ?section :marks:codes:screen:colormap^table^set ROUTINE #result [:marks:codes:screen:ESC]q ?section :marks:codes:screen:color^config^set ROUTINE #result [:marks:codes:screen:ESC]t ?section :marks:codes:screen:color^config^read ROUTINE #result [:marks:codes:screen:ESC]u ?section :marks:codes:screen:colormap^table^read ROUTINE #result [:marks:codes:screen:ESC]v ?section :marks:codes:screen:print^screen ROUTINE #result [:marks:codes:screen:ESC]0 ?section :marks:codes:screen:set^tab ROUTINE #result [:marks:codes:screen:ESC]1 ?section :marks:codes:screen:clear^tab ROUTINE #result [:marks:codes:screen:ESC]2 ?section :marks:codes:screen:clear^ALL^tabs ROUTINE #result [:marks:codes:screen:ESC]3 ?section :marks:codes:screen:set^video^attrib ROUTINE #result [:marks:codes:screen:ESC]6 ?section :marks:codes:screen:cursor^up ROUTINE #result [:marks:codes:screen:ESC]A ?section :marks:codes:screen:cursor^right ROUTINE #result [:marks:codes:screen:ESC]C ?section :marks:codes:screen:cursor^home^down ROUTINE #result [:marks:codes:screen:ESC]F ?section :marks:codes:screen:cursor^home ROUTINE #result [:marks:codes:screen:ESC]H ?section :marks:codes:screen:clear^mem^to^spaces ROUTINE #result [:marks:codes:screen:ESC]I ?section :marks:codes:screen:erase^to^end^page ROUTINE #result [:marks:codes:screen:ESC]J ?section :marks:codes:screen:erase^to^end^of^line ROUTINE #result [:marks:codes:screen:ESC]K ?section :marks:codes:screen:conv^roll^up ROUTINE #result [:marks:codes:screen:ESC]S ?section :marks:codes:screen:conv^roll^down ROUTINE #result [:marks:codes:screen:ESC]T ?section :marks:codes:screen:conv^page^down ROUTINE #result [:marks:codes:screen:ESC]U ?section :marks:codes:screen:conv^page^up ROUTINE #result [:marks:codes:screen:ESC]V ?section :marks:codes:screen:cursor^read^address ROUTINE #result [:marks:codes:screen:ESC]a ?section :marks:codes:screen:unlock^kbd ROUTINE #result [:marks:codes:screen:ESC]b ?section :marks:codes:screen:lock^kbd ROUTINE #result [:marks:codes:screen:ESC]c ?section :marks:codes:screen:function^key^simulate ROUTINE #result [:marks:codes:screen:ESC]d ?section :marks:codes:screen:write^to^status^line ROUTINE #frame #push :msg [#if [#argument/value :msg/text]] #output [:marks:codes:screen:ESC]o[:msg] . #unframe ?section :marks:codes:screen:colours:load_colour_map MACRO #frame == Replace the client PC's colour map table with one we want == to be able to use. [#def get_hexval routine |body| #frame #push :xx :res [#if [#argument/value :xx/text]] [#case [:xx] | 0001 | #set :res 1 | 0010 | #set :res 2 | 0011 | #set :res 3 | 0100 | #set :res 4 | 0101 | #set :res 5 | 0110 | #set :res 6 | 0111 | #set :res 7 | 1000 | #set :res 8 | 1001 | #set :res 9 | 1010 | #set :res A | 1011 | #set :res B | 1100 | #set :res C | 1101 | #set :res D | 1110 | #set :res E | 1111 | #set :res F |otherwise| #set :res 0 ] #result [:res] #unframe ] [#def make_hex routine |body| #frame #push :num :abit :bbit [#if [#argument/value :num/text]] #set :abit [#charget :num 1 for 4] #set :bbit [#charget :num 5 for 4] #result [get_hexval [:abit]][get_hexval [:bbit]] #unframe ] #push :x1 :x2 :x3 :x4 :x5 :x6 :x7 :x8 == #set :x1 [:make_hex 00000001] == EXCLAM - black on blue == #set :x2 [:make_hex 00000010] == DUNQUOT - black on green == #set :x3 [:make_hex 00000011] == HASH - black on cyan == #set :x4 [:make_hex 00000100] == DOLLAR - black on red == #set :x5 [:make_hex 00000101] == PERCENT - black on magenta == #set :x6 [:make_hex 00000110] == AMPHER - black on yellow/brown == #set :x7 [:make_hex 00000111] == SINGQUOT - black on white == #set :x8 [:make_hex 01000111] == nothing ?, all rest yellow underline == #set :x1 [:make_hex 00010000] == NORMAL - blue == #set :x2 [:make_hex 00100000] == EXCLAM - green == #set :x3 [:make_hex 00110000] == DUBQUOT - cyan == #set :x4 [:make_hex 01000000] == HASH - red == #set :x5 [:make_hex 01010000] == DOLLAR - magenta == #set :x6 [:make_hex 01100000] == PERCENT - yellow/brown == #set :x7 [:make_hex 01110000] == AMPHER - white == #set :x8 [:make_hex 01110100] == SINGQUOT - white == Use these !. #set :x1 [:make_hex 01110000] == NORMAL - white dim #set :x2 [:make_hex 10100000] == EXCLAM - green bright #set :x3 [:make_hex 10110000] == DUBQUOT - cyan bright #set :x4 [:make_hex 11000000] == HASH - red bright #set :x5 [:make_hex 11010000] == DOLLAR - magenta bright #set :x6 [:make_hex 11100000] == PERCENT - yellow #set :x7 [:make_hex 11110000] == AMPHER - white bright #set :x8 [:make_hex 10010000] == SINGQUOT - blue bright == All reverse colours now black on black, give up. == #set :x9 [:make_hex 00000100] == LEFT BRACKET - black on red #output [:marks:codes:^esc]-0;0;31 q [:x1]& [:x2][:x3][:x4][:x5][:x6][:x7][:x8]E0E0& E0E0E0E0E0E0E0E0E0E0& E0E0E0E0E0E0E0E0E0E0& E0E0 == need the full 32 #unframe ?section :marks:codes:screen:colours:reset_colour_map MACRO == Back to the default colours for the client #output [:marks:codes:^esc]-1 q ?section :marks:codes:screen:colours:text_colour ROUTINE #frame == Change the current text colour. All text after the screen control == byte position will be affected. #push :usecolour [#if [#argument/value :usecolour/keyword/wordlist BLUE GREEN CYAN RED MAGENTA YELLOW WHITE WHITEDIM NORMAL/]] [#if [#match [:usecolour] WHITEDIM] |then| #set :usecolour NORMAL] [#case [:usecolour] | GREEN | #result [:marks:codes:^esc]6!~_ | CYAN | #result [:marks:codes:^esc]6"~_ | RED | #result [:marks:codes:^esc]6#~_ | MAGENTA | #result [:marks:codes:^esc]6$~_ | YELLOW | #result [:marks:codes:^esc]6%~_ | WHITE | #result [:marks:codes:^esc]6&~_ | BLUE | #result [:marks:codes:^esc]6'~_ | NORMAL | #result [:marks:codes:^esc]6 ~_ ] #unframe ?section :marks:codes:screen:colours:test_colours MACRO == Test all the colours we have setup. :marks:codes:screen:colours:load_colour_map #output [:marks:codes:screen:colours:text_colour GREEN]GREEN #output [:marks:codes:screen:colours:text_colour CYAN]CYAN #output [:marks:codes:screen:colours:text_colour RED]RED #output [:marks:codes:screen:colours:text_colour MAGENTA]MAGENTA #output [:marks:codes:screen:colours:text_colour YELLOW]YELLOW #output [:marks:codes:screen:colours:text_colour WHITE]WHITE #output [:marks:codes:screen:colours:text_colour BLUE]BLUE #output [:marks:codes:screen:colours:text_colour NORMAL]NORMAL #push :xx #set :xx [#input USE-ENTER] #pop :xx :marks:codes:screen:colours:reset_colour_map #output Should be back to what you had origionally. ?section :marks:codes:screen:colours:write_text_in_colour ROUTINE #frame == Write a single line of text in the colour requested. == Colour is returned to our (not the clients default, our) normal == after the write, saves the user having to change the colour back == themselves. #push :colour :textline [#if [#argument/value :colour/keyword/wordlist BLUE GREEN CYAN RED MAGENTA YELLOW WHITE WHITEDIM NORMAL/]] [#if [#argument/value :textline/text]] #output [:marks:codes:screen:colours:text_colour [:colour]][:textline]& [:marks:codes:screen:colours:text_colour NORMAL] . #unframe ?section :marks:codes:screen:colours:build_text_in_colour ROUTINE #frame == Build a single line of text in the colour requested, reverting back == to the normal coulour at the end of it. == This allows a colour string to be built, but lets the caller do the == screen placement. #push :colour :textline [#if [#argument/value :colour/keyword/wordlist BLUE GREEN CYAN RED MAGENTA YELLOW WHITE WHITEDIM NORMAL/]] [#if [#argument/value :textline/text]] #result [:marks:codes:screen:colours:text_colour [:colour]][:textline]& [:marks:codes:screen:colours:text_colour NORMAL] . #unframe ?section :marks:codes:printer:^formfeed ROUTINE #result [#delta/commands ^delta/12i@i//] ?section :marks:codes:printer:^linefeed ROUTINE #result [#delta/commands ^delta/10i@i//] ?section :marks:codes:printer:carriage^rtn ROUTINE #result [#delta/commands ^delta/13i@i//] ?section :marks:codes:printer:backspace ROUTINE #result [#delta/commands ^delta/8i@i//] ?section :marks:codes:printer:horiz^tab ROUTINE #result [#delta/commands ^delta/9i@i//] ?section :marks:codes:printer:vert^tab ROUTINE #result [#delta/commands ^delta/11i@i//] ?section :marks:codes:printer:shift^out ROUTINE #result [#delta/commands ^delta/14i@i//] ?section :marks:codes:printer:shift^in ROUTINE #result [#delta/commands ^delta/15i@i//] == ******************************************************************* == Compatibility Tools. == ******************************************************************* ?SECTION :marks:utils:compat:_execute ROUTINE == This is called if the directory is invoked as a macro [#def :data_buffer text |body| ******************************************************************************** ** ** ** COMPAT DIRECTORY ** ** ** ******************************************************************************** * * * This directory is used to contain commands from various platforms I work * * on that I have ported across to the Tandem. This is to prevent me from * * getting confused as I keep moving between machines. * * * It will change periodically. * * ******************************************************************************** ] {end data_buffer} #outputv :data_buffer pop :data_buffer =============================================================================== == == == MS-DOS COMPATIBILITY == == == == MS_DOS commands mapped onto the Tandem commands to stop me from getting == == horribly confused and lots of syntax errors. == == == =============================================================================== ?SECTION :marks:utils:compat:del ALIAS scrap ?SECTION :marks:utils:compat:cd MACRO == Standard cd (volume) but allowing for cd \ == Modified to handle unix dir '/' also on 22/07/94. #FRAME #push :x^ :y^ :z^ #set :x^ %*% [#def :parse_slash routine |body| [#if [#argument /value :z^/ word]] [#if [#argument slash]] [#case [#argument /value :y^/ word end] | 1 | #result $[:z^].[:y^] |otherwise| #result [:z^] ] ] { kill any leading / or \ } [#if [#match \* [:x^]] |then| #set :x^ [#charget :x^ 2 for [#compute [#charcount :x^] - 1]] ] [#if [#match /* [:x^]] |then| #set :x^ [#charget :x^ 2 for [#compute [#charcount :x^] - 1]] ] { replace any middle \ or / } #set :y^ [#charfind :x^ 1 \] [#if [#compute ([:y^] > 0)] |then| #set :z^ [#charget :x^ 1 for [#compute ([:y^] - 1)]] #set :x^ [#charget :x^ [#compute ([:y^] + 1)] for [#compute ([#charcount :x^] - [:y^])]] #set :x^ $[:z^].[:x^] ] #set :y^ [#charfind :x^ 1 /] [#if [#compute ([:y^] > 0)] |then| #set :x^ [:parse_slash [:x^]] ] :marks:utils:guesses:v [:x^] #UNFRAME ?SECTION :marks:utils:compat:dir ALIAS variables =============================================================================== == == == PRIME COMPATIBILITY: == == == == Prime commands mapped onto the Tandem ones to stop me getting == == horibly confused and lots of syntax errors. == == == =============================================================================== ?SECTION :marks:utils:compat:lo ALIAS logoff ?SECTION :marks:utils:compat:login ALIAS [#if [#variableinfo/existence/ :saying] |then| saying] logon ?SECTION :marks:utils:compat:ld ALIAS i ?SECTION :marks:utils:compat:slist ALIAS type =============================================================================== == == == UNIX COMPATIBILITY == == == == Unix commands mapped onto the Tandem commands to stop me getting == == horribly confused and lots of syntax errors. == == == == Notes: the unix cd is implemented under the dos section where the dos == == cd has been altered to allow '/' as well as '\'. == == == =============================================================================== ?SECTION :marks:utils:compat:ls ROUTINE #FRAME #push :x^ :cmd^flag :file^mask #outformat #set #outformat PRETTY [#def :syntax_error macro |body| #output syntax: ls ~[-~] ~[filemask~] #output switch may be -l, -la, -lt or -ltr; the most usfull unix switches ] [#def :DO_CMD macro |body| [#if [#emptyv :cmd^flag] |then| filenames [:file^mask] |else| [#case [:cmd^flag] | -l | fileinfo [:file^mask] | -la | fileinfo [:file^mask] | -lt | :marks:utils:files_by_modtime [:file^mask] DESCENDING | -ltr | :marks:utils:files_by_modtime [:file^mask] ASCENDING ] ] ] [#case [#argument /value :x^/ keyword/wordlist -l -la -lt -ltr/ template end text] | 1 | #set :cmd^flag [:x^] [#case [#argument /value :x^/ template end text] | 1 | #set :file^mask [:x^] [#case [#argument end] | 1 | :DO_CMD |otherwise| :syntax_error ] | 2 | #set :file^mask [#defaults/current/].* :DO_CMD |otherwise| :syntax_error ] { end case } | 2 | #set :file^mask [:x^] [#case [#argument end] | 1 | :DO_CMD |otherwise| :syntax_error ] | 3 | #set :file^mask [#defaults/current/].* :DO_CMD |otherwise| :syntax_error ] { end case } #UNFRAME ?SECTION :marks:utils:compat:cp ROUTINE #FRAME #push :x1^ :x2^ [#if [#argument/value :x1^/ filename]] [#if [#argument/value :x2^/ filename/syntax/]] FUP DUP [:x1^],[:x2^],SAVEALL #UNFRAME ?SECTION :marks:utils:compat:mv ROUTINE #FRAME #push :x1^ :x2^ [#if [#argument/value :x1^/ filename]] [#if [#argument/value :x2^/ filename/syntax/]] rename [:x1^],[:x2^] #UNFRAME ?SECTION :marks:utils:compat:rm ROUTINE #FRAME #push :x^ :r^ [#if [#argument/value :x^/ filename]] #set :r^ [#input Remove [:x^] ?] [#if [#emptyv :r^] |then| #set :r^ N] [#if [#match Y* [:r^]] |then| purge [:x^]] #UNFRAME ?SECTION :marks:utils:compat:date MACRO #frame == Unix date command produces output as below == Tue Jan 18 12:28:16 NZDT 2005 #push :y :m :d :hr :mn :sec :mname :dname :jul_day #setmany :y :m :d :hr :mn :sec _, [#contime [#timestamp]] [#if [#compute ([:d] < 10)] |then| #set :d 0[:d] ] [#if [#compute ([:hr] < 10)] |then| #set :hr 0[:hr] ] [#if [#compute ([:mn] < 10)] |then| #set :mn 0[:mn] ] [#if [#compute ([:sec] < 10)] |then| #set :sec 0[:sec]] [#case [:m] | 1 | #set :mname Jan | 2 | #set :mname Feb | 3 | #set :mname Mar | 4 | #set :mname Apr | 5 | #set :mname May | 6 | #set :mname Jun | 7 | #set :mname Jul | 8 | #set :mname Aug | 9 | #set :mname Sep | 10 | #set :mname Oct | 11 | #set :mname Nov | 12 | #set :mname Dec |otherwise| #set :mname *ERR* ] == end case #setmany jul_day, [#COMPUTEJULIANDAYNO [:y] [:m] [:d]] #set jul_day [#compute [jul_day] - ([jul_day] / 7 * 7)] [#case [jul_day] |0| #set :dname Mon |1| #set :dname Tue |2| #set :dname Wed |3| #set :dname Thu |4| #set :dname Fri |5| #set :dname Sat |6| #set :dname Sun |otherwise| #result **ERR** ] == Tue Jan 18 12:28:16 NZDT 2005 #output [:dname] [:mname] [:d] [:hr]:[:mn]:[:sec] NZDT [:y] #unframe ?SECTION :marks:utils:compat:df MACRO #FRAME #push :disk^id #set :disk^id %1% [#if [#emptyv :disk^id] |then| dsap *,short |else| dsap [:disk^id],short ] #UNFRAME ?SECTION :marks:utils:compat:ps MACRO #FRAME #push :command^data #set :command^data %*% [#if [#emptyv :command^data] |then| status *,user |else| status [:command^data] ] #UNFRAME == ?SECTION :marks:utils:compat:clear ALIAS == This upsets the clear all assign/param commands == cls ?SECTION :marks:utils:compat:whoami Macro #FRAME #push :user^id :user^name :system^name #set :user^id [#processinfo/paid/] #set :user^name [#username [:user^id]] ([:user^id]) #set :system^name [#mysystem] #output System-id : [:system^name] (node [#systemnumber [:system^name]]) #output Terminal-id: [#myterm] #output User-name : [:user^name] #UNFRAME ?SECTION :marks:utils:compat:more alias type ?SECTION :marks:utils:compat:cat routine #frame #push :filename [#if [#argument/value :filename/filename]] FUP COPY [:filename] #unframe ?SECTION :marks:utils:compat:vi ROUTINE #FRAME #push :x1^ :y1^ [#def :vi_all routine |body| [#loop |while| [#more] |do| [#if [#argument /value :y1^/ filename/syntax/]] tedit [:y1^] ] ] [#case [#argument/value :x1^/ word end] | 1 | :vi_all [#filenames [:x1^]] |otherwise| #output A filename (or mask) must be provided ] #UNFRAME ?SECTION :marks:utils:compat:top alias F8 ?SECTION :marks:utils:compat:sesu macro #output ------------------------------------------------ #output There is no need to SESU on a Tandem, no ETrust. #output ------------------------------------------------ =============================================================================== == == == OTHER COMPATIBILITIES == == == =============================================================================== ?SECTION :marks:utils:compat:k ALIAS cls ?section :marks:utils:guesses:assist_help text ************************************************************************ . . ASSIST TOOLS . There are various macros in some of Marks libraries that will attempt to determine the command you were trying to enter should you make a typing mistake. . While these are in general benificial and time saving, in some cases you may wish to turn it off in certain circumstances. . To turn it off use the command "ASSIST OFF". It can be re-enabled with the "ASIST ON" command. . ************************************************************************ ?section :marks:utils:guesses:assist_on text TRUE ?section :marks:utils:guesses:use_assist routine [#if [#match TRUE [:marks:utils:guesses:assist_on]] |then| #result 1 |else| #result 0 ] ?section :marks:utils:guesses:assist routine #push :testval [#case [#argument/value :testval/keyword/wordlist ON OFF HELP/ end text] | 1 | [#case [:testval] |of| | HELP | #outputv :marks:utils:guesses:assist_help | OFF | #set :marks:utils:guesses:assist_on FALSE | ON | #set :marks:utils:guesses:assist_on TRUE ] | 2 | #outputv :marks:utils:guesses:assist_help |otherwise| #output You must enter one of ON, OFF or HELP to the ASSIST command. ] #pop :testval ?section :assist alias :marks:utils:guesses:assist ?section :marks:utils:guesses:guess_volume routine #frame #push :testvol [#if [#argument/value :testvol/word]] #output I have no idea what volume [:testvol] is, shall we take a guess. #output ...(Mark was here) #output [#case [:testvol] |of| |$ATM1 $AT01 $AM01 $TM01| #set :testvol $ATM01 |$ATM2 $AT02 $AM02 $TM02| #set :testvol $ATM02 |$ATM3 $AT03 $AM03 $TM03| #set :testvol $ATM03 |$ATM4 $AT04 $AM04 $TM04| #set :testvol $ATM04 |$ATM5 $AT05 $AM05 $TM05| #set :testvol $ATM05 |$ATM6 $AT06 $AM06 $TM06| #set :testvol $ATM06 |$ATM7 $AT07 $AM07 $TM07| #set :testvol $ATM07 |$ATM8 $AT08 $AM08 $TM08| #set :testvol $ATM08 |$ADIT $AUDT $AUDI $ADT| #set :testvol $AUDIT |$DSMSC $DMSCM $DSM| #set :testvol $DSMSCM |$SYTEM $SYSTM $YSTEM $SYSTE $SYSEM| #set :testvol $SYSTEM |otherwise| #set :marks:utils:guesses:guesslist $ATM01 $ATM02 $ATM03 & $ATM04 $ATM05 $ATM06 $ATM07 $ATM08 & $AUDIT $DSMSCM $SYSTEM #set :testvol [:marks:utils:guesses:get_guess [:marks:utils:guesses:guesslist]] ] [#if [#match [:marks:utils:guesses:ignore^command] [:testvol]] |then| #set :testvol |else| #output Lets try [:testvol] then. ] #result [:testvol] #unframe ?section :marks:utils:guesses:v routine #push :system :vol :subvol :parms [#case [#argument/value :parms/subvol end] | 1 | [#if NOT [:marks:utils:guesses:use_assist] |then| volume [:parms] #pop :system :vol :subvol :parms #return ] #set :system [#fileinfo/system/[:parms].A] #set :vol [#fileinfo/volume/[:parms].A] #set :subvol [#fileinfo/subvol/[:parms].A] [#if NOT [#fileinfo/existence/[:vol].safe.guard] |then| #set :vol [:marks:utils:guesses:guess_volume [:vol]] [#if NOT [#emptyv :system] |then| #set :system [:system].] volume [:system][:vol].[:subvol] |else| volume [:parms] ] |otherwise| volume ] #pop :system :vol :subvol :parms ?section :marks:utils:guesses:guesslist text GLOBAL ?section :marks:utils:guesses:parameters text GLOBAL ?section :marks:utils:guesses:command text GLOBAL ?section :marks:utils:guesses:last_guess text GLOBAL ?section :marks:utils:guesses:ignore^command text XXX ?section :marks:utils:guesses:check_number routine #frame #push :marks:utils:guesses:testnum :marks:utils:guesses:defaultnum [#case [#argument/value :marks:utils:guesses:testnum/number text end] | 1 | #result [:marks:utils:guesses:testnum] |otherwise| [#case [#argument/value :marks:utils:guesses:defaultnum/number text end] | 1 | #result [:marks:utils:guesses:defaultnum] |otherwise| #result 99 ] ] #unframe ?section :marks:utils:guesses:get_guess routine #frame #push :counter^ :maxcount^ :pending^ #set :pending^ 0 #set :counter^ 0 [#loop |while| [#more] |do| #push :cmdoption^[:counter^] [#if [#argument /value :cmdoption^[:counter^]/word]] #set :counter^ [#compute [:counter^] + 1] ] #set :maxcount^ [:counter^] #output I don't know what you mean ?. Did you want... #output #set :counter^ 0 [#loop |while| [#compute ([:counter^] < [:maxcount^])] |do| #output /width 5,hold/ [:counter^] #output /width 33,hold/ [:cmdoption^[:counter^]] [#if [:pending^] |then| #output #set :pending^ 0 |else| #set :pending^ 1 ] #set :counter^ [#compute [:counter^] + 1] ] #output #output X - Quit Guessing #output #set :marks:utils:guesses:last_guess [#input Pick a number or X to eXit ?] [#if [#emptyv :marks:utils:guesses:last_guess] #set :marks:utils:guesses:last_guess X] #set :marks:utils:guesses:last_guess [:marks:utils:guesses:check_number [:marks:utils:guesses:last_guess] 99] [#if [#compute ([:marks:utils:guesses:last_guess] < [:maxcount^])] |then| #result [:cmdoption^[:marks:utils:guesses:last_guess]] |else| #result [:marks:utils:guesses:ignore^command] ] #unframe ?section :marks:utils:guesses:check_assumption routine #frame #push :x^ #set :x^ [#input What ?, did you mean [:marks:utils:guesses:command] (Y/N) ?] [#if [#match Y* [:x^]] |then| #result 1 |else| #output Skipped. #result 0 ] #unframe ?section :marks:utils:guesses:exec_guess macro [#if NOT [#match [:marks:utils:guesses:ignore^command] [:marks:utils:guesses:command]] |then| #output [:marks:utils:guesses:command] [:marks:utils:guesses:parameters] [:marks:utils:guesses:command] [:marks:utils:guesses:parameters] ] ?section :marks:utils:guesses:sf macro [#if [:marks:utils:guesses:use_assist] |then| #set :marks:utils:guesses:guesslist SCF SV #set :marks:utils:guesses:parameters %*% #set :marks:utils:guesses:command [:marks:utils:guesses:get_guess [:marks:utils:guesses:guesslist]] :marks:utils:guesses:exec_guess ] ?section :marks:utils:guesses:cup macro [#if [:marks:utils:guesses:use_assist] |then| #set :marks:utils:guesses:guesslist PUP COUP #set :marks:utils:guesses:parameters %*% #set :marks:utils:guesses:command [:marks:utils:guesses:get_guess [:marks:utils:guesses:guesslist]] :marks:utils:guesses:exec_guess ] ?section :marks:utils:guesses:passwd macro [#if [:marks:utils:guesses:use_assist] |then| #set :marks:utils:guesses:guesslist PASSWORD #set :marks:utils:guesses:parameters %*% #set :marks:utils:guesses:command [:marks:utils:guesses:get_guess [:marks:utils:guesses:guesslist]] :marks:utils:guesses:exec_guess ] ?section :marks:utils:guesses:tedt macro [#if [:marks:utils:guesses:use_assist] |then| #set :marks:utils:guesses:guesslist TEDIT EDIT #set :marks:utils:guesses:parameters %*% #set :marks:utils:guesses:command [:marks:utils:guesses:get_guess [:marks:utils:guesses:guesslist]] :marks:utils:guesses:exec_guess ] ?section :marks:utils:guesses:edt alias :marks:utils:guesses:tedt ?section :marks:utils:guesses:tedut alias :marks:utils:guesses:tedt ?section :marks:utils:guesses:tediy alias :marks:utils:guesses:tedt ?section :marks:utils:guesses:tedir alias :marks:utils:guesses:tedt ?section :marks:utils:guesses:fyp macro [#if [:marks:utils:guesses:use_assist] |then| #set :marks:utils:guesses:guesslist FUP FIP FAP #set :marks:utils:guesses:parameters %*% #set :marks:utils:guesses:command [:marks:utils:guesses:get_guess [:marks:utils:guesses:guesslist]] :marks:utils:guesses:exec_guess ] ?section :marks:utils:guesses:td macro [#if [:marks:utils:guesses:use_assist] |then| #set :marks:utils:guesses:guesslist TDE EDIT TEDIT #set :marks:utils:guesses:parameters %*% #set :marks:utils:guesses:command [:marks:utils:guesses:get_guess [:marks:utils:guesses:guesslist]] :marks:utils:guesses:exec_guess ] ?section :marks:utils:guesses:checkenv macro [#if [:marks:utils:guesses:use_assist] |then| #set :marks:utils:guesses:command MSGCMD CHECKENV [#if [:marks:utils:guesses:check_assumption] |then| [:marks:utils:guesses:command] ] ] ?section :marks:utils:files_by_modtime routine #frame == ------------------------------------------------------------------ == List files by date modified time == == The files modified most recently will be at the top of the listing == unless the sort order is overridden with the ASCENDING flag == ------------------------------------------------------------------ #push :filemask :filename :code :eof :modtime :owner :perms #push :bufferlist :bufferline :work :sorttype #set :sorttype DESCENDING == 1. Get the filename mask to use, nothing is fine, also check to == see if sort order is being overridden. [#case [#argument/value :work/keyword/wordlist ASCENDING DESCENDING/ word end] | 1 | [#if [#argument/value :filemask/ word end]] #set :sorttype [:work] | 2 | [#if [#argument/value :sorttype/keyword/wordlist ASCENDING DESCENDING/ end]] #set :filemask [:work] [#if [#emptyv :sorttype] |then| == set to empty if end #set :sorttype DESCENDING ] |otherwise| ] == 2. Get the info and sort it == Get only the timestamp and filename for the file, thsi gives us == less to parse out later (as the string for sort can have no spaces) == We will get the rest of the details after we have sorted everything. == Result: a sorted list of modtime_filename [#def :getinfo routine |body| [#loop |while| [#more] |do| [#if [#argument/value :filename/filename]] #set :modtime [#fileinfo/modification/[:filename]] #set :bufferline [:modtime]_[:filename] #append :bufferlist [:bufferline] ] == loop #set :bufferline [#sort /[:sorttype]/ [:bufferlist]] == OUTPUT IS ONE STRING ] == end of getinfo :getinfo [#filenames [:filemask]] == Split out the output now [#def :rebuild_buffer routine |body| [#loop |while| [#more] |do| [#if [#argument/value :work/word]] #append :bufferlist [:work] ] == loop ] == end of rebuild_buffer #pop :bufferlist #push :bufferlist :rebuild_buffer [:bufferline] == 3. Process the sorted list, extract the filename part, lookup == the required details, format and output the line. [#def :formattime routine |body| #frame #push :y :m :d :hr :mn :x [#if [#argument/value :x/text]] #setmany :y :m :d :hr :mn, [:x] [#case [:m] |of| | 1 | #set :m JAN | 2 | #set :m FEB | 3 | #set :m MAR | 4 | #set :m APR | 5 | #set :m MAY | 6 | #set :m JUN | 7 | #set :m JUL | 8 | #set :m AUG | 9 | #set :m SEP | 10 | #set :m OCT | 11 | #set :m NOV | 12 | #set :m DEC |otherwise| #set :m XXX ] [#if [#compute ([:hr] < 10)] |then| #set :hr 0[:hr]] [#if [#compute ([:mn] < 10)] |then| #set :mn 0[:mn]] #result [:d][:m][:y] [:hr]:[:mn] #unframe ] [#if NOT [#emptyv :bufferlist] |then| #output ~_~_~_~_~_~_~_~_~_~_~_CODE EOF LAST MODIFIED OWNER RWEP ] [#loop |while| NOT [#emptyv :bufferlist] |do| #set :bufferline [#extract :bufferlist] == find the _ and strip out the filename part #set :work [#charfind :bufferline 1 _] #set :filename [#charget :bufferline [#compute ([:work] + 1)] for [#charcount :bufferline]] #setmany :code :eof :modtime :owner :perms, & [#fileinfo/code,eof,modification,owner,security/[:filename]] #set :filename [#fileinfo/file/[:filename]] #set :modtime [:formattime [#contime [:modtime]]] #output /hold, width 9/[:filename] #output /hold, width 6,justify right/[:code] #output /hold, width 10,justify right/[:eof] #output /hold, width 16, justify right/[:modtime] #output /hold, width 8,justify right/[:owner] #output /width 7,justify right/[:perms] ] == end of loop #unframe ?section :marks:help_lib:_execute macro :marks:help_lib:about_library ?section :marks:help_lib:author routine #result Mark Dickinson ?section :marks:help_lib:implemented_list text X25AM SORT GUARDIAN ?section :marks:help_lib:contents routine == ******************************************************************* == Return the list of help subsystems we know about. == IMPORTANT: do not add anything in here without changing... == changing --- :marks:help_lib:errors:help_processor == adding --- :marks:help_lib:errors::help_processor == even if its just a not implemented yet. DO NOT be lazy and put == the help does not exist in a mainline call, always put it in == the appropriate subsystem directory !. == ******************************************************************* #result GUARDIAN SORT X25AM TACL SQL MSGCMD ?section :marks:help_lib:about_library macro #frame #push :aliascount #set :aliascount 0 == ******************************************************************* == Show a brief help screen. == ******************************************************************* #output ----------------------------------------------------------------------------- #output #output /justify center/ Help Library, Version 1.0.0 #output /justify center/ Created by [:marks:help_lib:author] #output #output ~_~_This library is a collection of error numbers from various Tandem products. #output ~_~_Currently configured : [#sort [:marks:help_lib:contents]] COMMAND #output ~_~_Currently implemented: [#sort [:marks:help_lib:implemented_list]] #output #output ~_~_Syntax: #output ~_~_~_~_~_~_~_~_~_HELP ERROR ~[~] ~[~] #output ~_~_~_~_~_~_or HELP #output #output ~_~_You may also obtain help on the with... #output ~_~_~_~_~_~_~_~_~_HELP #output ~_~_~_~_~_~_ie:HELP X25AM #output #output ~_~_Aliases added to your session for ease of use... [#if [#variableinfo/existence/:x25err] |then| #output ~_~_x25err : (ie: "x25err 41 reset" rather than "help error x25am 41 reset") #set :aliascount [#compute [:aliascount] + 1] ] [#if [#variableinfo/existence/:global:sorterr] |then| #output ~_~_sorterr: (ie: "sorterr 1001" rather than "help error sort 1001") #set :aliascount [#compute [:aliascount] + 1] ] [#if [#compute ([:aliascount] = 0)] |then| #output ~_~_NONE !. You have no aliases loaded. ] #output #output ----------------------------------------------------------------------------- #unframe ?section :help alias :marks:help_lib:help_processor ?section :x25err routine #frame == ******************************************************************* == Easy to use user friendly interface to HELP X25AM == ******************************************************************* #push :rest^of^string [#if [#argument/value :rest^of^string/text end]] :marks:help_lib:help_processor ERROR X25AM [:rest^of^string] #unframe ?section :marks:help_lib:subsys_keyword_check routine #frame == ******************************************************************* == Compare the command being issues against the list of == subsystems we know about. If it matches return the command. == If it doesnt match return COMMAND on the assumption the user == wants help on a command. == ******************************************************************* #push :cmd [#case [#argument /value :cmd/ keyword/wordlist [:marks:help_lib:contents]/ word end] |of| | 1 | #result [:cmd] |otherwise| #result COMMAND ] #unframe ?section :marks:help_lib:help_processor routine #frame == ******************************************************************* == The main entry point to the help library. == == If a number is passed, assume its a request for the standard == tandem 'error nnn' and an operator didn't know better so just == pass it along. == == Otherwise check if it's a known subsystem. If it is call the help == for that subsystem and let it do all the work. == == If its not a known subsystem then assume help has been requested == for a command, and pass that off to the commands subsystem to == sort out. == ******************************************************************* #push :cmd :cmdstring :keyword #output #output [#case [#argument /value :cmd/ number word end] |of| | 1 | == If only a number is passed assume they want a guardian error [#case [#argument /value :cmdstring/ number text end] |of| | 1 | #set :cmd GUARDIAN |otherwise| #set :cmd XXXXXX ] | 2 | [#if [#match [:cmd] ERROR] |then| [#case [#argument /value :cmdstring/ number word end] |of| | 1 | == #set :cmd GUARDIAN | 2 | == assume HELP ERROR == Set the subsys keyword #set :cmd [:cmdstring] [#if [#argument/value :cmdstring/text end]] |otherwise| == cmdstring string is empty, ok ] |else| == assume HELP == assume :cmd has subsys keyword [#if [#argument/value :cmdstring/text end]] ] |otherwise| :marks:help_lib:about_library #unframe #return ] [#case [:marks:help_lib:subsys_keyword_check [:cmd]] |of| |GUARDIAN | #output Querying $SYSTEM.SYSTEM.ERROR #output #output The Tandem definition of error [:cmdstring] is... RUN $SYSTEM.SYSTEM.ERROR [:cmdstring] #output |SQL | :marks:help_lib:errors:sql_errors:help_processor [:cmdstring] |X25AM | :marks:help_lib:errors:x25am_errors:help_processor [:cmdstring] |SORT | #output SORTERR provided by Databank Systems programming. #output Error numbers are based on B41, help last updated 1987 #output :GLOBAL:SORTERR [:cmdstring] |TACL | :marks:help_lib:errors:tacl_errors:help_processor [:cmdstring] |MSGCMD | [#if [#variableinfo/existence/:msgcmd] |then| :MSGCMD HELP [:cmdstring] |else| #output The MSGCMD libraries are not loaded for your session. ] |COMMAND | :marks:help_lib:commands:help_processor [:cmd] [:cmdstring] |otherwise| == Bad return result !. :marks:help_lib:about_library ] #unframe ?section :marks:help_lib:commands:_execute routine :marks:help_lib:about_library ?section :marks:help_lib:commands:third_party_commands text XCOM TDE DRNET DRCOM BASE24 GOAFT ?section :marks:help_lib:commands:third_party routine #frame #push :cmd [#case [#argument /value :cmd/ keyword/wordlist [:marks:help_lib:commands:third_party_commands]/ word end] |of| | 1 | #result 1 |otherwise| #result 0 ] #unframe ?section :marks:help_lib:commands:tandem_commands text EDIT TEDIT FUP PERUSE SPOOLCOM TACL VIEWPT VIEWPOINT OMF BATCHCOM NETBATCH ?section :marks:help_lib:commands:tandem routine #frame #push :cmd [#case [#argument /value :cmd/ keyword/wordlist [:marks:help_lib:commands:tandem_commands]/ word end] |of| | 1 | #result 1 |otherwise| #result 0 ] #unframe ?section :marks:help_lib:commands:help_processor routine #frame == ******************************************************************* == called with command and text string == :marks:help_lib:commands:help_processor [:cmd] [:cmdstring] == ******************************************************************* #output ----------------------------------------------------------------------------- #output #output No help has been provided for the common Tandem commands. #output Please refer to the cd-rom manuals (which operations DO have a copy of). #output #output Cd-rom manuals have been provided to Operations and Tandev. #output If ops or Tandev have lost or misplaced them that is a management #output isuue, don't expect help from this library. #output #output ----------------------------------------------------------------------------- #output #push :cmd :cmdtext [#if [#argument /value :cmd/ word end]] [#if [#argument /value :cmdtext/ text end]] [#if [#emptyv :cmd] |then| == no action |else| [#if [:marks:help_lib:commands:third_party [:cmd]] |then| #output Help has not yet been implemented for [#shiftstring/up/[:cmd]] |else| [#if [:marks:help_lib:commands:tandem [:cmd]] |then| #output For help on [#shiftstring/up/[:cmd]] refer to the Tandem Manuals on cd-rom. |else| #output If you don't know how to use [#shiftstring/up/[:cmd]] then it is #output probably a command you should not be using. Stop playing now #output before you break something. ] ] ] #unframe ?section :marks:help_lib:errors:_execute routine :marks:help_lib:about_library ?section :marks:help_lib:errors:sql_errors:_execute routine :marks:help_lib:about_library ?section :marks:help_lib:errors:sql_errors:help_processor routine #frame == ******************************************************************* == ******************************************************************* == called with text provided after SQL keyword #output ----------------------------------------------------------------------------- #output Help for SQL errors has not yet been built into the IBM help library. #output #output OPERATIONS: The only system applications using SQL are the tape libraries. #output ~_~_If a backup has failed contact Tec Tan. #output #output TANDEV: WestpacTrust is not licensed to use SQL in application programs !. #output ~_~_So STOP !. IBM will not allow application code into production that #output ~_~_uses SQL as WestpacTrust has not purchased SQL licenses. #output ----------------------------------------------------------------------------- #unframe ?section :marks:help_lib:errors:tacl_errors:_execute routine :marks:help_lib:about_library ?section :marks:help_lib:errors:tacl_errors:help_processor routine #frame == ******************************************************************* == called with text provided after TACL keyword == ******************************************************************* #output ----------------------------------------------------------------------------- #output Help for TACL errors has not yet been built into the IBM help library. #output ----------------------------------------------------------------------------- #output #unframe ?section :marks:help_lib:errors:x25am_errors:_execute routine :marks:help_lib:about_library ?section :marks:help_lib:errors:x25am_errors:syntax_help text ------------------------------------------------------------------------------ The X25AM section provides descriptions on X25AM Clear, Reset and Restart diagnostic codes. . The syntax is: HELP X25AM CLEAR|RESET|RESTART if you have the X25ERR alias loaded you could also use: X25ERR CLEAR|RESET|RESTART . example: to obtain the text description for X25AM Restart code 41. use "HELP X25AM 41 RESTART" . **CAUTION**: X25AM traces provide codes as /. This library currently expects you to enter the DECIMAL disgnostic code value. ------------------------------------------------------------------------------ ?section :marks:help_lib:errors:x25am_errors:help_processor routine #frame == ******************************************************************* == called with text provided after X25AM keyword == ******************************************************************* #push :errnum :subtype == 1) store the error code == if no error code was just help x25am so show the x25am help == 2) store the type == if no typeshow the syntax error == 3) if a help variable exists for type^error display it == if not display there is no help for it. [#case [#argument/value :errnum/number text end] |of| | 1 | [#case [#argument /value :subtype/ keyword/wordlist RESET RESTART CLEAR/ end text] |of| | 1 | :marks:help_lib:errors:x25am_errors:help_processor_resolve [:subtype] [:errnum] |otherwise| #outputv :marks:help_lib:errors:x25am_errors:syntax_help ] |otherwise| #outputv :marks:help_lib:errors:x25am_errors:syntax_help ] #unframe ?section :marks:help_lib:errors:x25am_errors:help_processor_resolve routine #frame == ******************************************************************* == Called with Diagnostic Type and Diagnostic Code to lookup. == ******************************************************************* == Currently assumes user has used a decimal number. == This interface will later be changed to check if matches == exist for hex and dec and prompt to resolve. If no dec match == found show the hex one. == #push :subtype :errnum [#if [#argument/value :subtype/ keyword/wordlist RESET RESTART CLEAR/]] [#if [#argument /value :errnum/number]] [#if [#variableinfo/existence/:marks:help_lib:errors:x25am_errors:[:subtype]^error^[:errnum]] |then| #outputv :marks:help_lib:errors:x25am_errors:[:subtype]^error^[:errnum] #output CAUTION: The diagnostic code entered was expected to be a decimal number. #output . If typing in a number from a trace be aware the trace returns the #output . disgnostic code as (HEX/DEC). Ensure you entered the later. |else| #output [:errnum] IS NOT A DOCUMENTED [:subtype] CODE. ] #unframe ?section :marks:help_lib:errors:x25am_errors:clear^error^0 text ------------------------------------------------------------------------------ Clear 0/0 (Hex/Dec) ------------------------------------------------------------------------------ Applies to the three below situations... 1) CPU or CIU switch while in state P2, P3, P5, P6 or P7 (call setup in progress). 2) PTP mode 2 user tries to write an invalid Call Accepted packet. 3) Application cleared the call using CONTROL 12 but did not set a clear diagnostic. ------------------------------------------------------------------------------ ?section :marks:help_lib:errors:x25am_errors:clear^error^20 text ------------------------------------------------------------------------------ Clear 14/20 (Hex/Dec) ------------------------------------------------------------------------------ Call Accepted, Clear Confirmation, Reset, Reset Confirmation, Interrupt, Interrupt Confirmation, Data, RR, or RNR packet while in state P1. ------------------------------------------------------------------------------ ?section :marks:help_lib:errors:x25am_errors:clear^error^21 text ------------------------------------------------------------------------------ Clear 15/21 (Hex/Dec) ------------------------------------------------------------------------------ Clear Confirmation, Reset, Reset Confirmation, Interrupt, Interrupt Confirmation, Data, RR, or RNR packet while in state P2. ------------------------------------------------------------------------------ ?section :marks:help_lib:errors:x25am_errors:clear^error^22 text ------------------------------------------------------------------------------ Clear 16/22 (Hex/Dec) ------------------------------------------------------------------------------ Call Accepted, Clear Confirmation, Reset, Reset Confirmation, Interrupt, Interrupt Confirmation, Data, RR, or RNR packet while in state P3. ------------------------------------------------------------------------------ ?section :marks:help_lib:errors:x25am_errors:clear^error^23 text ------------------------------------------------------------------------------ Clear 17/23 (Hex/Dec) ------------------------------------------------------------------------------ Clear Confirmation, Call Request, or Call Accepted packet while in state P4. ------------------------------------------------------------------------------ ?section :marks:help_lib:errors:x25am_errors:clear^error^24 text ------------------------------------------------------------------------------ Clear 18/24 (Hex/Dec) ------------------------------------------------------------------------------ Clear Confirmation, Call Request, Call Accepted (DCE only), Reset, Reset Confirmation, Interrupt, Interrupt Confirmation, data, RR or RNR while in state P5. ------------------------------------------------------------------------------ ?section :marks:help_lib:errors:x25am_errors:clear^error^25 text ------------------------------------------------------------------------------ Clear 19/25 (Hex/Dec) ------------------------------------------------------------------------------ Clear Confirmation, Call Request, Call Accepted (DCE only), Reset, Reset Confirmation, Interrupt, Interrupt Confirmation, Data, RR or RNR while in state P6 (DCE only). ------------------------------------------------------------------------------ ?section :marks:help_lib:errors:x25am_errors:clear^error^26 text ------------------------------------------------------------------------------ Clear 1A/26 (Hex/Dec) ------------------------------------------------------------------------------ Clear Confirmation, Call Request, Call Accepted (DCE only), Reset, Reset Confirmation, Interrupt, Interrupt Confirmation, Data, RR or RNR while in state P7 (DTE only). ------------------------------------------------------------------------------ ?section :marks:help_lib:errors:x25am_errors:clear^error^33 text ------------------------------------------------------------------------------ Clear 21/33 (Hex/Dec) ------------------------------------------------------------------------------ Unknown Packet type while in state P1, P2, P3, P5, P6 (DCE), or P7 (DTE). ------------------------------------------------------------------------------ ?section :marks:help_lib:errors:x25am_errors:clear^error^34 text ------------------------------------------------------------------------------ Clear 22/34 (Hex/Dec) ------------------------------------------------------------------------------ Call Request received but line is configured for outgoing calls only. ------------------------------------------------------------------------------ ?section :marks:help_lib:errors:x25am_errors:clear^error^38 text ------------------------------------------------------------------------------ Clear 26/38 (Hex/Dec) ------------------------------------------------------------------------------ Diagnostic code hex 26 (dec 38) is one of the following... 1) Clear packet is too short (left than 4) 2) Call Request packet without address and/or facilities (less than 5). Call accepted packet is shorter than required (called/calling addresses would go beyond end of packet). 3) Facilities length less than 64 but would go beyond the end of the packet. ------------------------------------------------------------------------------ ?section :marks:help_lib:errors:x25am_errors:clear^error^39 text ------------------------------------------------------------------------------ Clear 27/39 (Hex/Dec) ------------------------------------------------------------------------------ Diagnostic code hex 27 (dec 39) is one of the following... 1) Clear packet is too long (greater than 5). 2) Too much user data in Call Accepted packet (greater than 16 or greater than 128). 3) Too much user data in Call Request packet (greater than 16 or greater than 128). ------------------------------------------------------------------------------ ?section :marks:help_lib:errors:x25am_errors:clear^error^41 text ------------------------------------------------------------------------------ Clear 29/41 (Hex/Dec) ------------------------------------------------------------------------------ Restart or Restart Confirmation packet with LCN less than or greater than 0 while in state P1, P2, P3, P5, P6 (DCE), or P7 (DTE). ------------------------------------------------------------------------------ ?section :marks:help_lib:errors:x25am_errors:clear^error^48 text ------------------------------------------------------------------------------ Clear 30/48 (Hex/Dec) ------------------------------------------------------------------------------ T23 / T13 timeout occurred. ------------------------------------------------------------------------------ ?section :marks:help_lib:errors:x25am_errors:clear^error^49 text ------------------------------------------------------------------------------ Clear 31/49 (Hex/Dec) ------------------------------------------------------------------------------ T21 / T11 timeout occurred. ------------------------------------------------------------------------------ ?section :marks:help_lib:errors:x25am_errors:clear^error^50 text ------------------------------------------------------------------------------ Clear 32/50 (Hex/Dec) ------------------------------------------------------------------------------ T23 / T13 timeout occurred waiting for incoming calls clear indication. ------------------------------------------------------------------------------ ?section :marks:help_lib:errors:x25am_errors:clear^error^64 text ------------------------------------------------------------------------------ Clear 40/64 (Hex/Dec) ------------------------------------------------------------------------------ Diagnostic code hex 40 (dec 64) is one of the following... 1) Facilities length greater than 63. 2) Facilities field extends beyond the end of the packet. 3) Facility extends beyong the end of the facilities field. ------------------------------------------------------------------------------ ?section :marks:help_lib:errors:x25am_errors:clear^error^66 text ------------------------------------------------------------------------------ Clear 42/66 (Hex/Dec) ------------------------------------------------------------------------------ Invalid packet size (less than 64 or greater than 4096), invalid window size, or invalud throughput value. ------------------------------------------------------------------------------ ?section :marks:help_lib:errors:x25am_errors:clear^error^67 text ------------------------------------------------------------------------------ Clear 43/67 (Hex/Dec) ------------------------------------------------------------------------------ Diagnostic code hex 43 (dec 67) is one of the following... 1) DATEX-P NETID with line address less than 8 digits. 2) Port number greater than 4 digits 3) Non-decimal digit in called address. ------------------------------------------------------------------------------ ?section :marks:help_lib:errors:x25am_errors:clear^error^69 text ------------------------------------------------------------------------------ Clear 45/69 (Hex/Dec) ------------------------------------------------------------------------------ Invalid facility / registration length. ------------------------------------------------------------------------------ ?section :marks:help_lib:errors:x25am_errors:clear^error^128 text ------------------------------------------------------------------------------ Clear 80/128 (Hex/Dec) ------------------------------------------------------------------------------ Memory for packet buffers could not be allocated. ------------------------------------------------------------------------------ ?section :marks:help_lib:errors:x25am_errors:clear^error^129 text ------------------------------------------------------------------------------ Clear 81/129 (Hex/Dec) ------------------------------------------------------------------------------ No subdevice would or could accept the call (fast select calls can be answered only by PTP mode 2 subdevice with a READ). Possible causes are... 1) No circuit assigned to SU that was mapped to the locical circuit number (LCN) in the Call Request packet. examples: control 11 not posted to SU for PTP mode 2 no READ posted. 2) A circuit was assigned but: X25AM expects an address extension and local address ext. missing X25AM expects an address extension and local address ext. recieved does not match the local address X25AM expects. X25AM expects no address extension and local address extension is present in the Call Request packet. The Call Request port does not match the port set for the SU. 3) Receipt of a data packet or interrupt packet containing an LCN that maps to a SU 0. 4) Reverse charges specified but accept charges. 5) For SOX protocol, ID not equal to C3. ------------------------------------------------------------------------------ ?section :marks:help_lib:errors:x25am_errors:clear^error^130 text ------------------------------------------------------------------------------ Clear 82/130 (Hex/Dec) ------------------------------------------------------------------------------ CPU or CLB switch, LCN in any state but P4. ------------------------------------------------------------------------------ ?section :marks:help_lib:errors:x25am_errors:clear^error^132 text ------------------------------------------------------------------------------ Clear 84/132 (Hex/Dec) ------------------------------------------------------------------------------ PTP mode 2 application tries to write an invalid Call Accepted or Clear packet. C0/192 state table error. ------------------------------------------------------------------------------ ?section :marks:help_lib:errors:x25am_errors:clear^error^254 text ------------------------------------------------------------------------------ Clear FE/254 (Hex/Dec) ------------------------------------------------------------------------------ Expand line handler is down. Also reported in a SNAX-over-X.25 (SOX) line when all logical devices (LUs) have been detached. ------------------------------------------------------------------------------ ?section :marks:help_lib:errors:x25am_errors:clear^error^255 text ------------------------------------------------------------------------------ Clear FF/255 (Hex/Dec) ------------------------------------------------------------------------------ Expand line idle. ?section :marks:help_lib:errors:x25am_errors:reset^error^0 text ------------------------------------------------------------------------------ Reset 0/0 (Hex/Dec) ------------------------------------------------------------------------------ CPU or CIU switch while in state P4. ?section :marks:help_lib:errors:x25am_errors:reset^error^1 text ------------------------------------------------------------------------------ Reset 1/1 (Hex/Dec) ------------------------------------------------------------------------------ Invalid P(S). ------------------------------------------------------------------------------ ?section :marks:help_lib:errors:x25am_errors:reset^error^2 text ------------------------------------------------------------------------------ Reset 2/2 (Hex/Dec) ------------------------------------------------------------------------------ Invalid P(R). ------------------------------------------------------------------------------ ?section :marks:help_lib:errors:x25am_errors:reset^error^27 text ------------------------------------------------------------------------------ Reset 1B/27 (Hex/Dec) ------------------------------------------------------------------------------ Reset conformation packet while in state D1. ------------------------------------------------------------------------------ ?section :marks:help_lib:errors:x25am_errors:reset^error^28 text ------------------------------------------------------------------------------ Reset 1C/28 (Hex/Dec) ------------------------------------------------------------------------------ Packet is invalid for state D2 (DCE). The DTE did a reset then sent data or some other invalid packet type. ------------------------------------------------------------------------------ ?section :marks:help_lib:errors:x25am_errors:reset^error^29 text ------------------------------------------------------------------------------ Reset 1D/29 (Hex/Dec) ------------------------------------------------------------------------------ Packet is invalid for state D3 (DTE). The DCE did a reset then sent data or some other invalid packet type. ------------------------------------------------------------------------------ ?section :marks:help_lib:errors:x25am_errors:reset^error33 text ------------------------------------------------------------------------------ Reset 21/33 (Hex/Dec) ------------------------------------------------------------------------------ Unknown packet while in state D1. ------------------------------------------------------------------------------ ?section :marks:help_lib:errors:x25am_errors:reset^error^35 text ------------------------------------------------------------------------------ Reset 23/35 (Hex/Dec) ------------------------------------------------------------------------------ Packet type not allowed on a PVC. ------------------------------------------------------------------------------ ?section :marks:help_lib:errors:x25am_errors:reset^error^38 text ------------------------------------------------------------------------------ Reset 26/38 (Hex/Dec) ------------------------------------------------------------------------------ Reset packet to short (less than 4 bytes). ------------------------------------------------------------------------------ ?section :marks:help_lib:errors:x25am_errors:reset^error^39 text ------------------------------------------------------------------------------ Reset 27/39 (Hex/Dec) ------------------------------------------------------------------------------ This reset dosgnostic is generated for one of the following conditions... 1) Data packet too long (data greater than packet size). 2) Reset packet to long (greater than 5 bytes). 3) Interrupt packet too long (greater than 4 bytes) 4) Interrupt conformation packet too long (greater than 3) ------------------------------------------------------------------------------ ?section :marks:help_lib:errors:x25am_errors:reset^error^41 text ------------------------------------------------------------------------------ Reset 29/41 (Hex/Dec) ------------------------------------------------------------------------------ Restart or Restart Confirmation packet with LCN less than or greater than 0 while in state D1, D2 (DCE), or D3 (DTE). ------------------------------------------------------------------------------ ?section :marks:help_lib:errors:x25am_errors:reset^error^43 text ------------------------------------------------------------------------------ Reset 2B/43 (Hex/Dec) ------------------------------------------------------------------------------ Unauthorised Interrupt Confirmation (interrupt confirmation but no unacknowledges interrupt has been transmitted). ------------------------------------------------------------------------------ ?section :marks:help_lib:errors:x25am_errors:reset^error^44 text ------------------------------------------------------------------------------ Reset 2C/44 (Hex/Dec) ------------------------------------------------------------------------------ Unauthorised Interrupt (second interrupt, but first interrupt has not been acknowledged). ------------------------------------------------------------------------------ ?section :marks:help_lib:errors:x25am_errors:reset^error^48 text ------------------------------------------------------------------------------ Reset 30/48 (Hex/Dec) ------------------------------------------------------------------------------ Reset timeout occurred ( T22 / T12) ------------------------------------------------------------------------------ ?section :marks:help_lib:errors:x25am_errors:reset^error^51 text ------------------------------------------------------------------------------ Reset 33/51 (Hex/Dec) ------------------------------------------------------------------------------ T22 / T12 timeout occurred waiting for reset indication. ------------------------------------------------------------------------------ ?section :marks:help_lib:errors:x25am_errors:reset^error^83 text ------------------------------------------------------------------------------ Reset 53/83 (Hex/Dec) ------------------------------------------------------------------------------ Inconsistent Q-bit setting ------------------------------------------------------------------------------ ?section :marks:help_lib:errors:x25am_errors:reset^error^130 text ------------------------------------------------------------------------------ Reset 82/130 (Hex/Dec) ------------------------------------------------------------------------------ CPU or CLB switch, LCN in state P4. ------------------------------------------------------------------------------ ?section :marks:help_lib:errors:x25am_errors:reset^error^131 text ------------------------------------------------------------------------------ Reset 83/131 (Hex/Dec) ------------------------------------------------------------------------------ Data or Interrupt recieved on an out-of-order PVC, LCN is restored to operational status. 85/133 NAM pseudo call. ------------------------------------------------------------------------------ ?section :marks:help_lib:errors:x25am_errors:reset^error^133 text ------------------------------------------------------------------------------ Reset 85/133 (Hex/Dec) ------------------------------------------------------------------------------ NAM pseudo call (on SVC back in-order). See Reset code 83. ------------------------------------------------------------------------------ ?section :marks:help_lib:errors:x25am_errors:reset^error^134 text ------------------------------------------------------------------------------ Reset 86/134 (Hex/Dec) ------------------------------------------------------------------------------ NAM pseudo clear. ------------------------------------------------------------------------------ ?section :marks:help_lib:errors:x25am_errors:reset^error^192 text ------------------------------------------------------------------------------ Reset C0/192 (Hex/Dec) ------------------------------------------------------------------------------ State table error. ------------------------------------------------------------------------------ ?section :marks:help_lib:errors:x25am_errors:restart^error^0 text ------------------------------------------------------------------------------ Restart 0/0 (Hex/Dec) ------------------------------------------------------------------------------ Line was restarted with SCF start. ------------------------------------------------------------------------------ ?section :marks:help_lib:errors:x25am_errors:restart^error^7 text ------------------------------------------------------------------------------ Restart 7/7 (Hex/Dec) ------------------------------------------------------------------------------ *** THIS IS NOT DOCUMENTED *** However...I've seen it happen so it's in the help file as below... The only time I have seen this occur is on a 'dirty' line where line quality messages are coming out regularly. The line quality messages have nothing to do with the problem, they just report the stats. SCF traces taken in that case show intermittent error 140s that are not reported to EMS as error 140s as the restart recovers the line OK. Its not a line problem so mush as the signal quality across the line being so bad CTS/RTS start dropping. The SCF trace will also (normally) show a SABM being kicked around about the restart time as the X25 software tries to find out if anything is actually there. So check the line if the symptoms match. ------------------------------------------------------------------------------ ?section :marks:help_lib:errors:x25am_errors:restart^error^17 text ------------------------------------------------------------------------------ Restart 11/17 (Hex/Dec) ------------------------------------------------------------------------------ Restart confirmation packet while in state R1. ------------------------------------------------------------------------------ ?section :marks:help_lib:errors:x25am_errors:restart^error^18 text ------------------------------------------------------------------------------ Restart 12/18 (Hex/Dec) ------------------------------------------------------------------------------ Restart confirmation packet while in state R2 (DCE). Call Accepted, Call request, Data, Data Interrupt, Interrupt Confirmation, Clear, Clear Confirmation, Reset Confirmation, RR, RNR, or reject packet with LCN less than or greater than 0 while in state R2 (DCE). ------------------------------------------------------------------------------ ?section :marks:help_lib:errors:x25am_errors:restart^error^19 text ------------------------------------------------------------------------------ Restart 13/19 (Hex/Dec) ------------------------------------------------------------------------------ Caused by one of... 1) Restart confirmation packet while in state R3 (DTE). 2) Call Accepted, Call request, Data, Data Interrupt, Interrupt Confirmation, Clear, Clear Confirmation, Reset Confirmation, RR, RNR, or reject packet with LCN less than or greater than 0 while in state R3 (DTE). ------------------------------------------------------------------------------ ?section :marks:help_lib:errors:x25am_errors:restart^error^33 text ------------------------------------------------------------------------------ Restart 21/33 (Hex/Dec) ------------------------------------------------------------------------------ Unknown packet with LCN less than or greater than 0 while in state R3 (DTE) or R2 (DCE). ------------------------------------------------------------------------------ ?section :marks:help_lib:errors:x25am_errors:restart^error^38 text ------------------------------------------------------------------------------ Restart 26/38 (Hex/Dec) ------------------------------------------------------------------------------ Reset or Restart Confirmation packet too short while restarting the line in state R2 (DTE) oor state R3 (DCE). ------------------------------------------------------------------------------ ?section :marks:help_lib:errors:x25am_errors:restart^error^39 text ------------------------------------------------------------------------------ Restart 27/39 (Hex/Dec) ------------------------------------------------------------------------------ Reset or Restart Confirmation packet too long while restarting the line in state R2 (DTE) oor state R3 (DCE). ------------------------------------------------------------------------------ ?section :marks:help_lib:errors:x25am_errors:restart^error^41 text ------------------------------------------------------------------------------ Restart 29/41 (Hex/Dec) ------------------------------------------------------------------------------ Reset or Restart Confirmation packet with LCN less than or greater than 0 while in state R3 (DTE) or R2 (DCE). ------------------------------------------------------------------------------ ?section :marks:help_lib:errors:x25am_errors:restart^error^48 text ------------------------------------------------------------------------------ Restart 30/48 (Hex/Dec) ------------------------------------------------------------------------------ T20/T10 timeout occurred. ------------------------------------------------------------------------------ ?section :marks:help_lib:errors:x25am_errors:restart^error^52 text ------------------------------------------------------------------------------ Restart 34/52 (Hex/Dec) ------------------------------------------------------------------------------ T20/T10 timeout occurred waiting for restart indication. ------------------------------------------------------------------------------ ?section :marks:help_lib:errors:x25am_errors:restart^error^192 text ------------------------------------------------------------------------------ Restart C0/192 (Hex/Dec) ------------------------------------------------------------------------------ State table errors. ------------------------------------------------------------------------------ == ######################################################################## == == SAYINGS SUPPORT MACROS: == == Mark Dickinson, 1994 == == == Function: == Display a randomly selected quote to the caller. == == == Compilation instructions: == #push ^x #home == #def :quips DIRECTORY PRIVATE $..QUOTELIB == #set #home :quips == #set ^x [#load /keep 1/ QUOTESRC] == #pop #home == #pop :quips ^x == == == Useage Instructions: == { to display one saying then release the library } == [#if not [#variableinfo /existence/ :quips] == |then| [#if [#fileinfo /existence/ $SYSTEM.TECHSERV.QUOTELIB] == |then| #DEF :quips DIRECTORY SHARED $SYSTEM.TECHSERV.QUOTELIB == show_saying == #POP :quips == ] == ] == == == Maintenance Instructions: == o The max^entries text variable is used to define the number of sayings == that area available within the database. == o There must be a joke^line^ of type text for every possible number == in the range 1 to max^entries. == o Currently only 999 sayings are supported, to change this to 9999 == add an extra zero in the find_offset routine divide/multiple == calculation, each 0 is an extra digit kept. == == ######################################################################## == ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ == Install a user interface to turn jokes on and off. == ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ?section :marks:jokes alias :marks:jokelib:jokes ?section :marks:jokelib:jokes routine [#if NOT [#variableinfo/existence/:joke^flag] |then| #push :joke^flag ] [#if NOT [#variableinfo/existence/:work^flag] |then| #push :work^flag ] [#IF [#ARGUMENT /value :work^flag/ KEYWORD/WORDLIST ON OFF/]] [#IF [#MATCH ON [:work^flag]] |THEN| [#IF NOT [#MATCH ON [:joke^flag]] |THEN| #output #output *** WARNING:JOKES ENABLED, USE "JOKES OFF" TO DISABLE ***** [#def :showjoke routine |body| :marks:jokelib:show_saying ] #set :joke^flag ON :showjoke |ELSE| #output Joke library is already switched on. ] |ELSE| [#IF [#MATCH ON [:joke^flag]] |THEN| #pop :showjoke #set :joke^flag OFF #output Joke library has been switched off. |ELSE| #output Joke library is already switched off. ] ] == ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ == Define the number of sayings we have defined to the library. == ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ?section :marks:jokelib:max^entries text 358 == ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ == Find the number of the saying we wish to display to the caller. == ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ?section :marks:jokelib:find_offset routine #frame #push :xx^ :max^num [#if [#argument /value :max^num/ number]] #set :xx^ [#timestamp] #set :xx^ [#compute [:xx^] - (([:xx^] / 10000) * 10000)] [#loop |while| [#compute ([:xx^] > [:max^num])] |do| #set :xx^ [#compute [:xx^] - [:max^num]] ] #result [:xx^] #unframe == ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ == Display a randomly selected saying to the caller. == ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ?section :marks:jokelib:show_saying routine #frame #push :x^ #set :x^ [:marks:jokelib:find_offset [:marks:jokelib:max^entries]] [#if [#variableinfo/existence/:marks:jokelib:data:joke^line^[:x^]] |then| #output #output --------------------------------------<<>>-------------------------------------- #outputv /justify center/ :marks:jokelib:data:joke^line^[:x^] #output --------------------------------------<<>>-------------------------------------- #output ] #unframe == ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ == ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ == The data text of the sayings to be displayed. Each text item must be == of the form 'joke^line^'. == ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ == ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ?section :marks:jokelib:data:joke^line^0 text q. What's the difference between an Irish wedding and an Irish funeral? a. One less drunk. ?section :marks:jokelib:data:joke^line^1 text q. What do you call a blonde with 2 brain cells? a. Pregnant. ?section :marks:jokelib:data:joke^line^2 text q. How do you brainwash a blonde? a. Give her a douche and shake her upside down. ?section :marks:jokelib:data:joke^line^3 text q. Why aren't blondes good cattle herders? a. Because they can't even keep two calves together! ?section :marks:jokelib:data:joke^line^4 text q. What did the blonde's right leg say to the left leg? a. Nothing. They've never met. ?section :marks:jokelib:data:joke^line^5 text q. Why do blondes wash their hair in the sink? a. Because, that's where you're supposed to wash vegetables! ?section :marks:jokelib:data:joke^line^6 text q. Why didn't the blonde want a window seat on the plane? a. She'd just dried her hair and she didn't want it blown around too much ?section :marks:jokelib:data:joke^line^7 text q. Why is it good to have a blonde passenger? a. You can park in the handicap zone. ?section :marks:jokelib:data:joke^line^8 text q. What's a blonde's favorite nursery rhyme? a. Humpme Dumpme. ?section :marks:jokelib:data:joke^line^9 text q. How do blondes pierce their ears? a. They put tacks in their shoulder pads. ?section :marks:jokelib:data:joke^line^10 text q. Why don't blondes eat bananas? a. They can't find the zipper. ?section :marks:jokelib:data:joke^line^11 text q. How can you tell if a blonde has been in your refrigerator? a. By the lipstick on your cucumbers. ?section :marks:jokelib:data:joke^line^12 text q. Why don't blondes use vibrators? a. They chip their teeth. ?section :marks:jokelib:data:joke^line^13 text q. What do blondes do for foreplay? a. Remove their underwear. ?section :marks:jokelib:data:joke^line^14 text q. Why don't blondes in San Francisco wear short black mini skirts? a. Cause their balls show! ?section :marks:jokelib:data:joke^line^15 text q. What's the mating call of the blonde? a. "I'm *sooo* drunk!" q. What is the mating call of the ugly blonde? a. (Screaming) "I said: I'm drunk!" ?section :marks:jokelib:data:joke^line^16 text q. Why do blondes drive BMWs? a. Because they can spell it. ?section :marks:jokelib:data:joke^line^17 text q. What is 74 to a blonde? a. 69 plus G.S.T. ?section :marks:jokelib:data:joke^line^18 text q. Why do blondes have TGIF on their shirts? a. Tits Go In Front. ?section :marks:jokelib:data:joke^line^19 text q. What do you call a brunette with a blonde on either side? a. An interpreter. ?section :marks:jokelib:data:joke^line^20 text q. What do you call a blonde between two brunettes? a. A mental block. ?section :marks:jokelib:data:joke^line^21 text q. What do blondes do with their arseholes in the morning? a. Pack their lunch and send them to work. ?section :marks:jokelib:data:joke^line^22 text q. Why do blondes like tilt steering? a. More head room. ?section :marks:jokelib:data:joke^line^23 text q. Why do blondes drive cars with sunroofs? a. More leg room. ?section :marks:jokelib:data:joke^line^24 text q. What do blondes say after sex? a. "Thanks, Guys!" a. Who were all those guys? ?section :marks:jokelib:data:joke^line^25 text q. Why is a blonde like a door knob? a. Because everybody gets a turn. ?section :marks:jokelib:data:joke^line^26 text q. Why is a blonde like railroad tracks? a. Because she's been laid all over the country. ?section :marks:jokelib:data:joke^line^27 text q. What important question does a blonde ask her mate before having sex? a. Do you want this by the hour, or the flat rate? ?section :marks:jokelib:data:joke^line^28 text q. How do you tell when a blonde reaches orgasm? a. Who cares? a. She says, "Next". a. The next person in the queue taps you on the shoulder. ?section :marks:jokelib:data:joke^line^29 text q. What is it called when a blonde blows in another blonde's ear? a. Data transfer. ?section :marks:jokelib:data:joke^line^30 text q. Why do blondes use tapons with extra long strings? a. So the crabs can go bungee-jumping. ?section :marks:jokelib:data:joke^line^31 text q. How can you tell which blonde is the waitress? a. She is the one with the tampon behind her ear, wondering what she did with her pencil. ?section :marks:jokelib:data:joke^line^32 text q. What did the blonde customer say to the buxom waitress (reading her nametag) ? a. "'Debbie'...that's cute. What did you name the other one ?" ?section :marks:jokelib:data:joke^line^33 text q. Why do blondes have more fun? a. They are easier to keep amused. ?section :marks:jokelib:data:joke^line^34 text q. How many blondes does it take to change a lightbulb? a. One. She holds the bulb and the world revolves around her. ?section :marks:jokelib:data:joke^line^35 text q. What do you call a basement full of blondes? a. A wine cellar. ?section :marks:jokelib:data:joke^line^36 text q. Why are there no dumb brunettes? a. Peroxide. ?section :marks:jokelib:data:joke^line^37 text q. Why does NASA hire peroxide blondes? a. They're doing research on black holes. ?section :marks:jokelib:data:joke^line^38 text q. What does a peroxide blonde and a 747 have in common? a. They both have a black box. a. Both have a cockpit. ?section :marks:jokelib:data:joke^line^39 text q. Santa Claus, the Tooth Fairy, a dumb blonde, and a smart blonde are walking down the street when they spot a $10 bill. Who picks it up? a. The dumb blonde! because, there is no such thing as Santa Claus, the tooth fairy, or a smart blonde. a. None of them. There is no such thing as Santa Claus, the Tooth Fairy or a smart blonde and the dumb blonde thought it was a gum wrapper. ?section :marks:jokelib:data:joke^line^40 text q. Why do blondes take the pill? a. So they know what day of the week it is. ?section :marks:jokelib:data:joke^line^41 text q. Why did the blonde stop using the pill? a. Because it kept falling out. ?section :marks:jokelib:data:joke^line^42 text q. What happens when a blonde gets Alzheimers disease? a. Her IQ goes up! ?section :marks:jokelib:data:joke^line^43 text q. Whats the difference between a blonde and a Porsche? a. You don't lend the Porsche out to your friend. ?section :marks:jokelib:data:joke^line^44 text q. What is the difference between butter and a blonde? a. Butter is difficult to spread. ?section :marks:jokelib:data:joke^line^45 text q. What is the difference between a smart blonde and Bigfoot? a. Bigfoot has been spotted. ?section :marks:jokelib:data:joke^line^46 text q. What's the difference between a blonde and a telephone? a. It costs 30 cents to use a telephone. ?section :marks:jokelib:data:joke^line^47 text q. What's the difference between a blonde and a guy? a. The blonde has the higher sperm count. ?section :marks:jokelib:data:joke^line^48 text q. What is the difference between a blonde and the Grand Old Duke of York? a. The Grand Old Duke of York only 'had' 10000 men. ?section :marks:jokelib:data:joke^line^49 text q. What does a blonde and a beer bottle have in common? a. They're both empty from the neck up. ?section :marks:jokelib:data:joke^line^50 text q. What do blondes and spaghetti have in common? a. They both wriggle when you eat them. ?section :marks:jokelib:data:joke^line^51 text q. What do peroxide blondes and black men have in common? a. They both have black roots. ?section :marks:jokelib:data:joke^line^52 text q. What do you call a blonde with a bag of sugar on her head? a. Sweet Fuck All... ?section :marks:jokelib:data:joke^line^53 text q. Why do blondes find it difficult to marry? a. Because you don't have to marry them for sex! ?section :marks:jokelib:data:joke^line^54 text q. What is the irritating part around a blonde's vagina? a. The other guys waiting their turn. ?section :marks:jokelib:data:joke^line^55 text q. How do you describe a blonde, surrounded by drooling idiots? a. Flattered. ?section :marks:jokelib:data:joke^line^56 text q. What do you call 20 blondes in a freezer? a. Frosted Flakes. ?section :marks:jokelib:data:joke^line^57 text q. What's the difference between a blonde having her period and a terrorist? a. You can negotiate with a terrorist. ?section :marks:jokelib:data:joke^line^58 text q. Why do blondes have two more brain cells than a cow? a. So they don't shit everywhere when you pull their tits. ?section :marks:jokelib:data:joke^line^59 text q. Why did God create blondes? a. Because sheep can't bring beer from the fridge. q. Why did God create brunettes? a. Neither could the blondes. ?section :marks:jokelib:data:joke^line^60 text q. Why do blondes have see-through lunch box lids? a. So they know if it is morning or afternoon. a. So, when on the train they know if they're going to work or coming home. ?section :marks:jokelib:data:joke^line^61 text q. Why are dumb blonde jokes so short? a. So brunettes can remember them. a. Because blondes are so SHALLOW a long joke wouldn't fit. ?section :marks:jokelib:data:joke^line^62 text q. Why wasn't the Virgin Mary a blonde? a. She wouldn't have been old enough to bear children! ?section :marks:jokelib:data:joke^line^63 text q. What do you call a smart blonde? a. A golden retriever. a. An albino gorilla. ?section :marks:jokelib:data:joke^line^64 text q. Why did they call the blonde "twinkie"? a. She liked to be filled with cream. ?section :marks:jokelib:data:joke^line^65 text q. Why are blondes like cornflakes? a. Because they're simple, easy and they taste good. Cheap too. ?section :marks:jokelib:data:joke^line^66 text q. How does a blonde hold her liquor? a. By the ears. ?section :marks:jokelib:data:joke^line^67 text q. What do you call a blonde skeleton in the closet? a. Last year's hide and seek champ. ?section :marks:jokelib:data:joke^line^68 text q. What's the difference between a blonde and your job? a. Your job still sucks after 6 months. ?section :marks:jokelib:data:joke^line^69 text q. What's the difference between a blonde and a trampoline? a. You take off your shoes before using a trampoline. ?section :marks:jokelib:data:joke^line^70 text q. Difference between a prostitute, a nymphomaniac and a blonde? a. The prostitute says, "Aren't you done yet?" The nympho says, "Are you done already?" The blonde says, "Beige...I think I'll paint the ceiling beige." ?section :marks:jokelib:data:joke^line^71 text q. How do you get a blonde to marry you? a. Tell her she's pregnant. q. What will she ask you? a. "Is it mine?" ?section :marks:jokelib:data:joke^line^72 text q. What do you call a dumb blonde behind a steering wheel? a. An air bag. ?section :marks:jokelib:data:joke^line^73 text q. Why are there lip stick stains on the steering wheel after a blonde drives a car? a. Cause she blows the horn! ?section :marks:jokelib:data:joke^line^74 text q. What goes VROOM, SCREECH,VROOM, SCREECH,VROOM, SCREECH? a. A blonde going through a flashing red light. ?section :marks:jokelib:data:joke^line^75 text q. Why did the blonde tattoo her zip code on her stomach? a. So her male would get delivered to the right box. ?section :marks:jokelib:data:joke^line^76 text q. Did you hear about the blonde couple that were found frozen to death in their car at a drive-in movie theater? a. They went to see "Closed for the Winter". ?section :marks:jokelib:data:joke^line^77 text q. How can you tell when a blonde is dating? a. By the buckle print on her forehead. ?section :marks:jokelib:data:joke^line^78 text q. What is the blonde's chronic speech impediment? a. She can't say "No". ?section :marks:jokelib:data:joke^line^79 text q. What did they name the offspring of a blonde and a Puerto Rican? a. Totalli Retardo. ?section :marks:jokelib:data:joke^line^80 text q. What do you call a blonde in an institution of higher learning? a. A visitor. ?section :marks:jokelib:data:joke^line^81 text q. How can you tell if a blonde works in an office? a. A bed in the stockroom and huge smiles on all the bosses' faces. ?section :marks:jokelib:data:joke^line^82 text q. Why was the blonde upset when she got her Driver's License? a. Because she got an F in sex. ?section :marks:jokelib:data:joke^line^83 text q. What do you call two nuns and a blonde? a. Two tight ends and a wide receiver. ?section :marks:jokelib:data:joke^line^84 text Three blondes are attempting to change a light bulb. One of them decides to call 111: Blonde: We need help. We're three blondes changing a light bulb. Operator: Hmmmmm. You put in a fresh bulb? Blonde: Yes. Operator: The power in the house in on? Blonde: Of course. Operator: And the switch is on? Blonde: Yes, yes. Operator: And the bulb still won't light up? Blonde: No, it's working fine. Operator: Then what's the problem? Blonde: We got dizzy spinning the ladder and we all fell and got hurt. ?section :marks:jokelib:data:joke^line^85 text What about the blond guy whose wife gave birth to twins? He wanted to know who the other man was... ?section :marks:jokelib:data:joke^line^86 text There were three people stranded on an island, a brunette, a redhead, and a blonde. The brunette looked over the water to the mainland and estimated about 20 miles to shore. So she announced, "I'm going to try to swim to shore." So she swam out five miles, and got really tired. She swam out ten miles from the island, and she was too tired to go on, so she drowned. The second one, the redhead, said to herself, "I wonder if she made it." I guess it's better to try to get to the mainland than stay here and starve." So she attempts to swim out. The redhead had a lot more endurance than the brunette, as she swam out 10 miles before she even got tired. After 15 miles, she was too tired to go on, so she drowned. So the blonde thought to herself, "I wonder if they made it! I think I'd better try to make it, too." So she swam out 5 miles, ten miles, 15 miles, NINETEEN miles from the island. The shore was just in sight, but she said, "I'm too tired to go on!" So she swam back. ?section :marks:jokelib:data:joke^line^87 text This blonde and her boyfriend were sitting in a hot tub when the blonde said to her boyfriend, "Is it true that if you pull you finger out, I'll sink?" ?section :marks:jokelib:data:joke^line^88 text Two blondes were walking through the woods when one looked down and said "Oh, look at the deer tracks." The other blonde looks and says, "Those aren't deer tracks, those are wolf tracks." "No. Those are deer tracks." They keep arguing, and arguig, and one half hour later they were both killed by a train. ?section :marks:jokelib:data:joke^line^89 text The blonde came running downstairs, crying. Her mother asked what was wrong and the blonde said her boyfriend had just dropped her. Her mother (a blonde) nodded wisely and proceeded to tell her about the birds and the bees and the blonde said: "No ma. I can fuck and suck with the best of them. But he says I can't cook." ?section :marks:jokelib:data:joke^line^90 text HUMAN: "THINK about it!": BLONDE: "I don't have to think - I'm blonde!" ?section :marks:jokelib:data:joke^line^91 text A government study has shown that blondes do have more fun - they just don't remember who with. ?section :marks:jokelib:data:joke^line^92 text q. What's the difference between a blonde and an ironing board? a. It's difficult to open the legs of an ironing board. ?section :marks:jokelib:data:joke^line^93 text q. What is foreplay for a blonde? a. Thirty minutes of begging. ?section :marks:jokelib:data:joke^line^94 text q. What does the Bermuda Triangle and blondes have in common? a. They've both swallowed a lot of semen. ?section :marks:jokelib:data:joke^line^95 text q. Why did god give blonds 2% more brains than horses? a. Because he didn't want them shitting in the streets during parades. ?section :marks:jokelib:data:joke^line^96 text q. What do you call a blonde with ESP and PMS? a. A know-it-all bitch. ?section :marks:jokelib:data:joke^line^97 text q. What do you get when you cross a blonde and a lawyer? a. Something that when it gives you a blow job, it won't stop until it gets blood. ?section :marks:jokelib:data:joke^line^98 text q. What's the disease that paralyzes blondes below the waist? a. Marriage. ?section :marks:jokelib:data:joke^line^99 text q. How did the blonde burn her nose? a. Bobbing for french fries. ?section :marks:jokelib:data:joke^line^100 text q. What's the difference between a pit bull and a blonde with PMS? a. Lipstick. ?section :marks:jokelib:data:joke^line^101 text q. What do you call five blondes at the bottom of the pool? a. Air bubbles. ?section :marks:jokelib:data:joke^line^102 text q. What do you call 4 blondes lying on the ground? a. An air mattress. ?section :marks:jokelib:data:joke^line^103 text q. What is the definition of the perfect woman? a. A deaf and dumb blonde nymphomaniac whose father owns a pub. ?section :marks:jokelib:data:joke^line^104 text q. What's a blonde's idea of safe sex? a. Locking the car door. ?section :marks:jokelib:data:joke^line^105 text q. Why did the blonde keep failing her driver's test? a. Because every time the door opened, she jumped into the back seat. ?section :marks:jokelib:data:joke^line^106 text A painting contractor was speaking with a woman about her job. In the first room she said she would like a pale blue. The contractor wrote this down and went to the window, opened it, and yelled out "GREEN SIDE UP!" In the second room she told the painter she would like it painted in a soft yellow. He wrote this on his pad, walked to the window, opened it, and yelled "GREEN SIDE UP!" The lady was somewhat curious but she said nothing. In the third room she said she would like it painted a warm rose color. The painter wrote this down, walked to the window, opened it and yelled "GREEN SIDE UP!" The lady then asked him, "Why do you keep yelling 'green side up'?" "I'm sorry," came the reply. "But I have a crew of blondes laying sod across the street. ?section :marks:jokelib:data:joke^line^107 text Did you hear about the blonde who: 1) had more on her body than on her mind? 2) took an hour to cook Minute Rice? 3) got into the taxi, and the driver kept the "Vacant" sign up? 4) was an M.D. - Mentally Deficient? 5) had a terrific stairway, but nothing upstairs? 6) thought nitrates was cheaper than day rates? 7) was told she was a silly puss, but insisted she didn't have a crazy cat? 8) went to a nudist camp for a game of strip poker? ?section :marks:jokelib:data:joke^line^108 text Two brunettes and a blonde are in the hospital awaiting the arrival of their first children. The 1st brunette says, "I just know I'm going to have a girl, 'cuz I conceived while I was on my back". The 2nd brunette says, "Mine's going to be a boy, 'cuz I was on top during conception". The blonde says, "Uh-oh! I'm going to have a puppy!" ?section :marks:jokelib:data:joke^line^109 text Did you hear the one about the blonde who thought that "love handles" referred to her ears? ?section :marks:jokelib:data:joke^line^110 text Confucious say; blonde who fly upside down have crack up. ?section :marks:jokelib:data:joke^line^112 text At a carwash in Burbank, there were two identical Hondas coming out at the same time. A beautiful blond woman jumps into one and takes off, leaving its owner rather perplexed. About three minutes latter, she reappears at the car wash yelling, "who ripped off my car phone!" ?section :marks:jokelib:data:joke^line^113 text This guy just started at his new job, working at a porno shop. His boss comes out to tell him he has to leave for a while, and asks "can you handle it?" The new employee is somewhat reluctant, but with the boss's positive comments he finally agrees. A blonde goes into the drug store to buy some rubbers (so she can practice safe sex). She walks up to the pharmicist and asks "How much for a box of rubbers?" "They're $1 for a box of 3," he replied, "Plus 6 cents for the tax." "Oh," said the blonde, "I wondered how they kept them on." ?section :marks:jokelib:data:joke^line^114 text A blonde goes into a store. She goes over to the deodorant display and tells the clerk "I need to buy some deodorant for my husband." "Does he use the ball kind?" enquired the clerk. "No," replied the blonde, "The kind for under his arms." ?section :marks:jokelib:data:joke^line^115 text Another blonde in the porno shop: The blonde asks, "How much for the white dildo?" Sales Boy: "$35." Blonde: "How much for the black one?" Sales Boy: "$35 for the black one, $35 for the white one." Blonde: "I think I'll take the black one. I've never had a black one before." She pays him, and off she goes. A little bit later a black woman comes in and asks "How much for the black dildo?" Sales Boy: "$35." Black Woman: "How much for the white one?" Sales Boy: "$35 for the white one, $35 for the black one." Black Woman: "Hmmm...I think I'll take the white one. I've never had a white one before..." She pays him, and off she goes. About an hour later a young blonde woman comes in and asks, "How much are your dildos?" Sales Boy: "$35 for the white, $35 for the black." Blonde: "Hmmmmm....how much is that plaid one on the shelf?" Sales Boy: "Well, that's a very special dildo...it'll cost you $165." Blonde: "I think I'll take the plaid one, I've never had a plaid one before...." She pays him, and off she goes. Finally, the guy's boss returns and asks, "How did you do while I was gone?" To which the salesman responded, "I did really good, I sold one white dildo, one black dildo, and I sold your thermos for $165!" ?section :marks:jokelib:data:joke^line^116 text q. What does a blonde say after multiple orgasms? a. Way to go team! ?section :marks:jokelib:data:joke^line^117 text q. What do you call a blonde with a runny nose? a. Full. ?section :marks:jokelib:data:joke^line^118 text q. How many blondes does it take to make a circuit? a. Two, One to stand in the bathtub, and another to pass her the blow dryer! ?section :marks:jokelib:data:joke^line^119 text q. What's the first thing a blonde does in the morning? a. Introduces herself. q. The second thing? a. Goes home. ?section :marks:jokelib:data:joke^line^120 text q. Why do blondes have more fun? a. They don't know any better. ?section :marks:jokelib:data:joke^line^121 text q. What do you call a blonde with a dollar bill on top of her head? a. All you can eat - under a buck. ?section :marks:jokelib:data:joke^line^122 text q. What do a blonde and a computer have in common? a. You don't know how much either means to you until they go down on you. ?section :marks:jokelib:data:joke^line^123 text q. Why did the blonde only change her baby's diapers monthly? a. The box said "For 20 pounds." ?section :marks:jokelib:data:joke^line^124 text q. What's the difference between a blonde and the titanic? a. They know how many men went down on the titanic. ?section :marks:jokelib:data:joke^line^125 text q. Why was the blonde proud to finish her jigsaw-puzzle in 6 months? a. Because the box said 2-4 years. ?section :marks:jokelib:data:joke^line^126 text q. How does a blonde interpret 6.9? a. A 69 interrupted by a period. ?section :marks:jokelib:data:joke^line^127 text q. What did the blonde think of the new computer? a. She didn't like it because she couldn't get channel 3! ?section :marks:jokelib:data:joke^line^128 text q. How do you tell that a blonde has been using the computer? a. There's twink on the screen. ?section :marks:jokelib:data:joke^line^129 text q. How does a blonde like her eggs in the morning? a. Unfertilized. ?section :marks:jokelib:data:joke^line^130 text q. Why did the blonde have a sore navel? a. Because her boyfriend was also a blonde. ?section :marks:jokelib:data:joke^line^131 text q. Why is a washing machine better than a blonde? a. Because you can drop your load in a washing machine, and it won't follow you around for a week ?section :marks:jokelib:data:joke^line^132 text q. How do you make a blonde's eyes light up? a. Shine a torch in her ear. ?section :marks:jokelib:data:joke^line^133 text q. Why do blondes wear knickers? a. To keep their ankles warm. ?section :marks:jokelib:data:joke^line^134 text q. Why did the blonde have square boobs? a. She forgot to take the tissues out of the box. ?section :marks:jokelib:data:joke^line^135 text q. Why do blondes wash their hair in the sink? a. That's where they wash all the vegetables. ?section :marks:jokelib:data:joke^line^136 text q. Why do blondes have one more brain cell than a cow? a. So when you pull their tits, they don't shit on the floor. ?section :marks:jokelib:data:joke^line^137 text q. How do you get to see a blonde in perpetual motion? a. Write PTO on both sides of a blank sheet of paper. ?section :marks:jokelib:data:joke^line^138 text q. What do you say to a blonde with no arms and no legs? a. "Nice tits!" ?section :marks:jokelib:data:joke^line^139 text q. What do you call a blonde in a tree with a briefcase? a. Branch Manager. ?section :marks:jokelib:data:joke^line^140 text A blonde and a brunette wre discussing their boyfriends : Brunette: Last night I had three orgasms in a row! Blonde: That's nothing; last night I had over a hundred. Brunette: Oh my god! I had no idea he was that good. Blonde (looking shocked) Oh you mean with one guy! ?section :marks:jokelib:data:joke^line^141 text A blonde was driving down the highway to Disneyland when she saw a sign that said "DISNEYLAND LEFT". After thinking for a minute she said to herself "oh well !" and turned around and drove home. ?section :marks:jokelib:data:joke^line^142 text On her way home the same blonde passed another sign that said "CLEAN RESTROOMS 8 MILES". By the time she drove eight miles, she had cleaned 43 restrooms! ?section :marks:jokelib:data:joke^line^143 text A policeman pulled a blonde over after she'd been driving the wrong way on a one-way street. Cop: Do you know where you are going? Blonde: No, but it must be bad, 'cause the people are all leaving. ?section :marks:jokelib:data:joke^line^144 text A gaye goes to the proctologist for a routine examination. When the doctor gets him into position, he's quite surprised to find a piece of string dangling from the man's ass. He pulls gently on the string and out pops a lovely bouquet of flowers. "Do you know I pulled a dozen roses out of your rectum?" asks the astonished doctor. "Is that so?" said the patient. "Who're they from?" ?section :marks:jokelib:data:joke^line^145 text q. Did you hear about the queer burglar? a. He couldn't blow the safe so he went down on the elevator. ?section :marks:jokelib:data:joke^line^146 text q. Did you hear about the queer indian? a. He jumped into his canoe, took three strokes and shot across the river. ?section :marks:jokelib:data:joke^line^147 text Two fags were walking down the street and the first one said, "Hold it a second, I smell fresh cock" "No, you don't," said his companion. "I just burped." ?section :marks:jokelib:data:joke^line^148 text q. What's the definition of a hermaphrodite? a. Self-Sufficient. ?section :marks:jokelib:data:joke^line^149 text Two gayes were having a drink at the bar when an attractive woman walked by. "Mmmmmmmm....." said one appreciatively, eyeing her up and down. "Oh, Tom!" shrieked his horrified friend. "Don't tell me you're going straight!" "Nothing like that," said Tom musingly. "It's just that sometimes I can't help wishing I'd been born a lesbian..." ?section :marks:jokelib:data:joke^line^150 text q. Why did the Lesbian cut short her overseas trip? a. She missed her native tongue. ?section :marks:jokelib:data:joke^line^151 text A fag was brushing his teeth when his gums started bleeding. "Thank God," he mumbled, "safe for another month." ?section :marks:jokelib:data:joke^line^152 text q. How do you tell a Homo Church service? a. Only half the congregation is kneeling. ?section :marks:jokelib:data:joke^line^153 text q. Why was the Gay fired from the sperm bank? a. He was caught drinking on the job. ?section :marks:jokelib:data:joke^line^154 text q. What's the definition of a lesbian? a. Just another damn woman trying to to do a man's job. ?section :marks:jokelib:data:joke^line^155 text q. What's the definition of tender love. a. A pair of homosexuals with hemorroids. ?section :marks:jokelib:data:joke^line^156 text Gay man to Whore: "Prostitute!" Whore to Gay man: "Substitute!" ?section :marks:jokelib:data:joke^line^157 text q. Why don't Italians eat fleas? a. Because they cam't get their little legs apart. ?section :marks:jokelib:data:joke^line^158 text q. How do you recognise a plane in the Italian airline? a. By the hair under its wings. ?section :marks:jokelib:data:joke^line^159 text q. Why's a car like an Italian girl? a. On a cold morning when you really need it, it won't turn over. ?section :marks:jokelib:data:joke^line^160 text q. What's the definition of a Maniac? a. An Italian in a whorehouse with a credit card. ?section :marks:jokelib:data:joke^line^161 text q. Why do Italian men have Moustaches? a. So they can look like their mothers? ?section :marks:jokelib:data:joke^line^162 text First Guy" "Hey, those are nice shoes. What kind are they?" Second Guy: "They're Italian shoes." First Guy: "Italian shoes?" Second Guy: "Yeah. Wherever I go, Dago" ?section :marks:jokelib:data:joke^line^163 text q. How can you tell Italian women are embarrassed by their long black hair? a. Because they wear long black gloves to cover it up. ?section :marks:jokelib:data:joke^line^164 text q. What about the Irish parachutist who pulled the wrong cord? a. She bled to death ?section :marks:jokelib:data:joke^line^165 text A man entered a pub, and trying to be sociable called out "Hey, I've got some great Irish jokes." "Before you start," said a big bloke in the corner, "I'm warning you, I'm Irish." "Don't worry," said the newcomer, "I'll tell them slowly." ?section :marks:jokelib:data:joke^line^166 text POEM: The Labour Party Prayer ----------------------------- Lange is my shepherd, I shalt not work He maketh me to lie down on park benches, He leadeth me beside the still factories, He restoreth my faith in the Nationals and N.Z. Party, He guideth me in the paths of unemployment, Yes, though I walk through the valley of the soup kitchens, I shall still be hungry. I feel evil for they are against me, Douglas has annointed my income with Taxes, My expenses over-runneth my salary, Surely poverty and hard living shall follow me all the days of the Labour administration 5000 years ago Moses said "pick up your shovel, mount your ass or camel, and I will lead you to the promised land!" 5000 years later Knox said "lay down your shovel, sit on your ass, light up a camel, this is the promised land" Now if you don't watch out Lange will take your shovel, sell your camel kick your ass, and take away the promised land. I am glad that I am a Kiwi, glad that I am free, I wish I was a little dog, and Lange was a tree. ?section :marks:jokelib:data:joke^line^167 text A policeman of Paddington Junction, Whose organ had ceased to function, All the days of his life, Deceived his poor wife, With the dexterous use of his trucheon. ?section :marks:jokelib:data:joke^line^168 text Mary had a little sheep, But when dear Mary went to sleep, the sheep turned out to be a ram, so Mary had a little lamb. ?section :marks:jokelib:data:joke^line^169 text POEM ALERT:... The work is hard, the pay is small. so take your time and sod 'em all. ?section :marks:jokelib:data:joke^line^170 text Roses are red, pansies are gay, If it weren't for women, We'd all be that way. ?section :marks:jokelib:data:joke^line^171 text Mrs. Jones was startled when her six-year-old son barged into the bathroom just as she was stepping out of the shower. She hastily covered up, but not before the little boy pointed right at her crotch and asked, "What's that?" "Oh," she said, thinking fast, "that's where I got hit with an axe." "Got you right in the cunt, didn't it?" ?section :marks:jokelib:data:joke^line^172 text q. Why do female paratroopers wear jockstraps? a. so they don't whistle on the way down. ?section :marks:jokelib:data:joke^line^173 text q. What do you call the useless piece of skin around a cunt? a. the Woman. ?section :marks:jokelib:data:joke^line^174 text q. What do you call the useless piece of skin around the penis? a. The Woman. ?section :marks:jokelib:data:joke^line^175 text A man arrives home after work and shouts, "Darling, I'm home." There's no answer and his wife is nowhere to be seen. He wanders upstairs to the bedroom and there's his wife throwing all her clothes into a suitcase. Somewhat surprised, he asks "What're you doing?" "I'm leaving you," she replies tartly, "I'm going to Los Angeles where I'll get paid $400 a time for doing what I've been doing with you for free for years." The man appears stunned for a moment, then grabs an empty suitcase and starts packing his own clothes. "What the hell do you think you're doing?" yells his wife. "I'm going to Los Angeles with you," he says, "I want to watch you try to live on $800 a year." ?section :marks:jokelib:data:joke^line^176 text q. How can you tell a macho woman? a. She rolls her own tampons. ?section :marks:jokelib:data:joke^line^177 text q. What do women and dog-shit have in common? a. The older they get the easier they are to pick up. ?section :marks:jokelib:data:joke^line^178 text q. Why are pregnant women like defective typewriters? a. They skip their periods. ?section :marks:jokelib:data:joke^line^179 text q. Why do women have cunts? a. So men will talk to them. ?section :marks:jokelib:data:joke^line^180 text This guy screwed a hooker and spent his last dime on her. Only at the end did he realize he was penniless, so he asked if he could borrow the dime so he could get home on the bus. "Sure," she said, "if you eat it out of my cunt." So the man got down on his hands and knees and went to work, and after a few minutes he said, "I got it. See ya." A little while later his bus pulled up, and he dropped his fare in the token box and sat down. The bus driver turned around and hollered, "Hey, buddy, how far do you think you're gonna get on that scab?" ?section :marks:jokelib:data:joke^line^181 text q. What's a lap dog? a. An ugly woman who gives head. ?section :marks:jokelib:data:joke^line^182 text q. Why are Women like screen doors? a. Once they've been banged a few times, they tend to loosen up. ?section :marks:jokelib:data:joke^line^183 text q. Why don't they let women go swimming in the surf? a. Because they can't get the smell out of the fish. ?section :marks:jokelib:data:joke^line^184 text The gynaecologist stuck up his head after completing his examination. "I'm sorry, Miss," he said, "but removing that vibrator is going to involve a very lengthy and delicate operation." "I'm not sure I can afford it," sighed the young woman on the examining table. "Well why don't you just replace the batteries?" ?section :marks:jokelib:data:joke^line^185 text q. Why is a woman like a Bank? a. Because you always lose interest when you withdraw your assets. ?section :marks:jokelib:data:joke^line^186 text q. Did you hear about the woman who shaved her legs and rectum? ?section :marks:jokelib:data:joke^line^187 text q. Who are the six most important men in a womans life? a. 1) The Doctor : He says, "Take your clothes off." 2) The Dentist : He says, "Open wide." 3) The Hairdresser : He says, "Do you want it teased or blown?" 4) The Decorator : He says, "You'll like it once it's in." 5) The Milkman : He says, "Do you want it in front or in back?" 6) The Banker : He says, "If you take it out, you'll lose interest." ?section :marks:jokelib:data:joke^line^188 text q. What Happened to the girl who went fishing with the boys? a. She came home with a red Snapper. ?section :marks:jokelib:data:joke^line^189 text q. What are the three best things about being a woman? a. 1) You can bleed without cutting yourself. 2) You can bury a bone without digging a hole. 3) And you can make a man come without calling him. ?section :marks:jokelib:data:joke^line^190 text This guy is out on a date with a girl, and they end up back at his apartment on the couch with the lights off. Suddenly, to his horror his hairpiece falls off and he begins to grope around in the dark for it. Not realizing what's happened, his date begins cooing passionately. "That's it honey," she whispers, "right there. You've got it... you've got it now..." "No, I don't," he says, sitting up at looking at her. "My rug isn't parted in the middle." ?section :marks:jokelib:data:joke^line^191 text q. What's a female Taurus? a. A Clitaurus, of course. ?section :marks:jokelib:data:joke^line^192 text q. Did you hear about the woman who injected herself with a mixture of chicken and rabbit hormones? Now she can cluck like a bunny! ?section :marks:jokelib:data:joke^line^193 text q. If god made the top half of a woman, who made the bottom half? a. A black, who else would give it Big lips, kinky hair, and a catfish smell? ?section :marks:jokelib:data:joke^line^194 text q. Why did the girl call her dog Herpes? a. Because he wouldn't heel. ?section :marks:jokelib:data:joke^line^195 text Three black women decided to share an apartment, and by coincidence they all had boyfriends named Leroy. After a week, things got so confusing that they decided to give each man a nickname from a brand of soda. The first woman said, "I'll name mine Mountian Dew, because he lives on a mountain and he loves to do, do, do!" "I'll name mine Seven-Up," spoke up the second, "because he's seven inches long and he's always up." The third woman thought for a while, then said, "I'll name mine Jack Daniel's" "That's not a soda," pointed out her roommates, "that's a liquor." She smiled. "That's my Leroy." ?section :marks:jokelib:data:joke^line^196 text q. Why do women have more trouble with Haemorroids than men? a. Because God made men the perfect arsehole. ?section :marks:jokelib:data:joke^line^197 text q. What's the difference between a pregnant woman and a lightbulb? a. You can unscrew a lightbulb. ?section :marks:jokelib:data:joke^line^198 text q. What's the difference between a woman and a terrorist? a. You can negotiate with a terrorist. ?section :marks:jokelib:data:joke^line^199 text q. What's the difference betwen a sewing machine and a lady jogger? a. A sewing machine only has one bobbin. ?section :marks:jokelib:data:joke^line^200 text One night little Johnny walked in on his parents while they were screwing. "Daddy," he cried, "what are you and Mommy doing?" "Uh...We're making a little sister for you to play with," stammered his father. "Oh neat," said Johnny, and went back to bed. The next day his dad came home to find the little boy sobbing his eyes out on the front porch. "What's wrong, Johnny?" he asked, picking him up. "You know the little sister you and Mommy made me?" "Yes," said his father, blushing. The little boy wailed, "today the milkman ate it." ?section :marks:jokelib:data:joke^line^201 text q. What's a corporate virgin? a. Someone who's new to the firm. ?section :marks:jokelib:data:joke^line^202 text q. Why did God invent women? a. Because sheep can't cook. ?section :marks:jokelib:data:joke^line^203 text One summer evening in New York a pretty girl was walking across Broadway and was hit by a truck. The impact was so strong that she flew up into the air, and by the time she hit the ground all her clothes had been stripped away. As a crowd started to gather, a passing priest who had witnessed the accident rushed over and placed his hat over the victims crotch so as to preserve a little decency. Soon a drunkard, wondering what was going on, staggered through the crowd and caught sight of the naked girl lying in the street, covered only by the priest's hat. "Oh, Christ," he mumbled, "first thing we have to do is get that man out of there." ?section :marks:jokelib:data:joke^line^204 text q. Why do women have trouble telling distances? a. Because they are constantly told that a six inch penis is really a foot. ?section :marks:jokelib:data:joke^line^205 text q. What do you get when you cross a cunt with a silicon chip? a. A cunt that knows everything. ?section :marks:jokelib:data:joke^line^206 text q. What do you get if you cross a prostitute with a computer? a. A fuckin' know-all! ?section :marks:jokelib:data:joke^line^207 text q. Why did god give women legs? a. So they can walk between the kitchen and the bedroom. ?section :marks:jokelib:data:joke^line^208 text q. Why is virginity like a balloon. a. One prick and it's gone! ?section :marks:jokelib:data:joke^line^209 text It ain't easy being a Dick! I've got a head I can't think with, An eye I can't see with! I have to hang around all the time with nothing but a couple of nuts. My closest neighbour is an asshole. If I get errected, my owner beats me all the time! My best friend is a pussy. And cause of AIDS, I have to wear a rubber-suit and throw up all over myself!!! ?section :marks:jokelib:data:joke^line^210 text Two gayes (We'll call them Jon and Paul) were walking down a city street, when Jon turned to Paul and said, "see the guy over there, he's a really good fuck." Paul turned back and said "No shit" Jon shrugged and said, "well, hardly any" ?section :marks:jokelib:data:joke^line^211 text Q: Why do ducks have webbed feet? A: To stamp out forest fires! Q: Why do elephants have flat feet? A: To stamp out burning ducks! ?section :marks:jokelib:data:joke^line^212 text Q: Why do elephants have wrinkled knees? A: From playing marbles! ?section :marks:jokelib:data:joke^line^213 text Q: What's the similarity between a plum and an elephant? A: They are both purple, except for the elephant!! ?section :marks:jokelib:data:joke^line^214 text Q: Why do elephants have squinting eyes? A: From reading the small print on peanut packages!! ?section :marks:jokelib:data:joke^line^215 text Q: Why did the elephant fall out of a palm tree? A: A hippoptamus pushed him out!!! ?section :marks:jokelib:data:joke^line^216 text Q: Why do elephants have round feet!! A: To walk on the lily pads!! Q: Why do elephants step on the lily pads? A: The water won't hold them up!! ?section :marks:jokelib:data:joke^line^217 text Q: Why do elephants wear glasses? A: To make sure they don't stand on other elephants!! ?section :marks:jokelib:data:joke^line^218 text Q: Why do elephants have flat feet? A: From jumping out of palm trees!! Q: Why is it dangerous to go into the jungle between 2 and 4 in the afternoon? A: Because that's when elephants are jumping out of trees!! Q: Why are pygmies so small? A: They went into the jungle between 2 and 4 in the afternoon! ?section :marks:jokelib:data:joke^line^219 text DEFINITION: Jewish Foreplay -Two hours of begging. ?section :marks:jokelib:data:joke^line^220 text q. Why did the Jewish mother have herself entombed at Bloomingdale's? a. So her Daughter would visit at least twice a week. ?section :marks:jokelib:data:joke^line^221 text q. Why are Jewish men circumcised? a. Because Jewish women won't accept anything without a 20% discount. ?section :marks:jokelib:data:joke^line^222 text q. If Tarzan and Jane were Jewish what would Cheetah be? a. A fur coat. ?section :marks:jokelib:data:joke^line^223 text Reuben and Meyer were both gin rummy addicts. One day they met in the card room at the country club, and it just happened to be the day after Reuben's wife had been discovered in bed with Meyer. "Look," said Reuben, "I know you've been screwing my wife, but I still love her, so let's settle this in a civilised way. We'll play a game of gin and the winner gets to keep her." "Okay," agreed Meyer, "but just to make it interesting, let's play for a penny a point." ?section :marks:jokelib:data:joke^line^224 text q. What do you call a group of Mexicans holding hands around a house? a. A spicket Fence. ?section :marks:jokelib:data:joke^line^225 text q. Why are Mexicans buying all the Cabbage patch dolls? a. to get birth certificates. ?section :marks:jokelib:data:joke^line^226 text q. Why do scientists breed Mexicans instead of rats for experiments? a. They breed faster and you don't get attached to them. ?section :marks:jokelib:data:joke^line^227 text q. What do you get if you cross a Mexican and a Vietnamese? a. A car thief that can't drive. ?section :marks:jokelib:data:joke^line^228 text q. Did you here about the two Mexicans on That's Incredible? a. One had car insurance and the other only one child. ?section :marks:jokelib:data:joke^line^229 text q. What did the Mexican do with his first 50 cent piece? a. He married her. ?section :marks:jokelib:data:joke^line^230 text q. Why do Mexicans eat refried beans? a. Ever seen a Mexican who didn't fuck things up the first time. ?section :marks:jokelib:data:joke^line^231 text q. Why do Mexican cars have such small steering wheels? a. So they can drive with handcuffs on. ?section :marks:jokelib:data:joke^line^232 text q. What's the most useless thing on a Mexican womens body? a. A Mexican man. ?section :marks:jokelib:data:joke^line^233 text A tourist visiting Mexico for the first time got off the train at a hot, dusty little town. Immediately wondering when the next train out would be along, he went over and asked the time of a scroungy old man who was leaning against a wall next to his donkey. The old guy appeared to fondle his donkey's balls, then answered, "It's five minutes past eleven." "That's amazing!" said the tourist. "How do you do it?" "Not much to it," explained the Mexican. "There's a clock on the wall over there and my donkeys balls are in the way." ?section :marks:jokelib:data:joke^line^234 text q. Did you hear about the Mexican who was killed in a pie-eating contest? a. He died when a cow stepped on his head ?section :marks:jokelib:data:joke^line^235 text q. Why don't polish mothers let their children play in the sand? a. Because the cats keep trying to bury them. ?section :marks:jokelib:data:joke^line^236 text q. Hear about the famous polish doctor? a. He performed the first successful Hemorrhoid transplant. ?section :marks:jokelib:data:joke^line^237 text q. Did you hear about the pole who couln't count to twenty-one unless he was naked? ?section :marks:jokelib:data:joke^line^238 text q. Did you hear about the Pole who put Odor-Eaters in his shoes, walked three steps, and disappeared? ?section :marks:jokelib:data:joke^line^239 text q. How does a Pole keep his dinner warm? a. put tinfoil up his nose. ?section :marks:jokelib:data:joke^line^240 text q. Hear about the Pole who bought a Trans-AM? a. It took him a month to realize he could drive it at night. ?section :marks:jokelib:data:joke^line^241 text q. How can you spot a level-headed Pole? a. He drools from both sides of his mouth. ?section :marks:jokelib:data:joke^line^242 text q. How do you know Batman's Polish? a. He wears his Jockey shorts over his leotards. ?section :marks:jokelib:data:joke^line^243 text q. What's a Polish Birth certificate? a. A refund from the Trojan rubber Company. ?section :marks:jokelib:data:joke^line^244 text I once knew a Pole who tried to write "Happy Birthday" on a cake, But he ruined it getting it into the typewriter. ?section :marks:jokelib:data:joke^line^245 text q. How can you Tell a Pole with a weak Bladder? a. Rusty Zipper and Yellow socks. ?section :marks:jokelib:data:joke^line^246 text q. Did you hear about the Polish Abortion Clinic? There's a year long waiting list. ?section :marks:jokelib:data:joke^line^247 text q. Did you hear how the Polish Ice-Hockey team drowned? Spring training. ?section :marks:jokelib:data:joke^line^248 text q. Why do they play on artificial turf in Poland? a. To stop the Cheerleaders from grazing. ?section :marks:jokelib:data:joke^line^249 text q. Why did the polish woman stop breast feeding her baby? a. It hurt too much when she boiled her nipples. ?section :marks:jokelib:data:joke^line^250 text q. What do a polish girl and a hockey player have in common. a. They both wear their pads for three periods. ?section :marks:jokelib:data:joke^line^251 text A Pole goes shopping for a new coat for his wife Pole : "I want a coat for my wife." Furrier: "Mink?" Pole : "She's got one." Furrier: "Sable?" Pole : "She's got one." Furrier: "Skunk?" Pole : "Skunk!" Furrier: "Why not? It's just a pussy that smells bad." Pole : "Oh, she's got one of those too." ?section :marks:jokelib:data:joke^line^252 text A pole was driving along a country road when he spied an unusual sight. Off to the side, a farmer was pulling frantically at a calf's leg protruding from a pregnant cow. Seeing that the farmer could use some help, the Pole stopped his car and ran over, grabbed on the calf's other leg, and yanked with all his might. Finally after much struggling, they managed safely to extract the baby cow. "Thank you kindly, neighbour," said the farmer, wiping the sweat off his forehead. "How much do I owe you for the help?" "You don't owe me a thing, but please answer one question, "responded the Pole. "Just how fast was that calf running when it hit that cow's ass?" ?section :marks:jokelib:data:joke^line^253 text Two Poles were walking down the street. "Hey," said one to the other, "look at that dead bird!" His friend looked up in the sky and asked, "Where?" ?section :marks:jokelib:data:joke^line^254 text Then there were two Poles speeding down the highway at one hundred miles per hour. "Hey," asked the driver, "see any cops following us?" "Yup." "Shit. Are his flashers on?" His passenger turned back, thought it over, and answered, "Yup...nope...yup...nope...yup..." ?section :marks:jokelib:data:joke^line^255 text Two Polish carpenters were putting siding on a house when one looked over at the other and asked, "Why the hell are you throwing away those nails?" "Oh", replied the second Pole, "These nails have the heads on the wrong end." "You dummy," the first Pole cried, "those are for the other side of the house!" ?section :marks:jokelib:data:joke^line^256 text Police Captain: "He got away? Didn't I tell you to cover all of the exits?" Polish Cop: "Yes sir, I did, sir. But he must have left through one of the Entrances." ?section :marks:jokelib:data:joke^line^257 text Two Poles went deer hunting and managed to shoot a big buck. Each grabbed a hind leg, and they were pulling it through the woods when they happened across a game warden. After making sure their hunting licenses were in order, the warden said, "If you don't mind a suggestion, fellas, you'll have an easier time pulling that deer along if you hold its antlers instead of the feet." The Poles decided he probably knew what he was talking about, so they each took hold of an antler and started off again. "He was right," commented one a few minutes later. "This really is easier." "Yeah," said his buddy, "but we're getting farther from the truck." ?section :marks:jokelib:data:joke^line^258 text q. How do Catholics make money during the hot summer months? a. They freeze the holy water and sell it as Popesicles. ?section :marks:jokelib:data:joke^line^259 text q. Who was the first computer operator? a. Eve, she had an Apple in one hand and a Joystick in the other. ?section :marks:jokelib:data:joke^line^260 text q. What do you do with a worn-out bra? a. Use it as a skullcap for Siamese-twin rabbis. ?section :marks:jokelib:data:joke^line^261 text "Someone stole my bike," complained a priest to his minister friend. "Bring up the ten comandments in your sermon tomorrow, and as soon as you mention 'thou shalt not steal' the guilty party will come forward," the minister said confidently. The next day the priest visited the minister and happily reported he's found his bike. "Yes," he went on, "when I came to 'thou shalt not commit adultery,' I remembered where I'd left it." ?section :marks:jokelib:data:joke^line^262 text q. What's black and white and black and white and black and white? a. A priest and a nun screwing. ?section :marks:jokelib:data:joke^line^263 text q. What do you call a nun in a blender? a. Twisted sister. ?section :marks:jokelib:data:joke^line^264 text q. What's white, spotted, and gooey and rains down from the sky? a. The coming of the lord. ?section :marks:jokelib:data:joke^line^265 text Little Johnny was going down the sidewalk when his wagon got caught in the mud. He was cussing up a storm when the neighbourhood policeman came by and told him he'd better cut it out. When Johnny wanted to know why, the cop explained that God was everywhere. "Even in the back of my wagon?" asked the little boy. "Even in the back of your wagon, son," the cop assured him. "Well then," said Johnny, "tell him to get off his ass and help push!" ?section :marks:jokelib:data:joke^line^266 text Three men die and go to heaven. One by one they are interviewed by Saint Peter, who asks the first man how many times he's had sex. "Never, I'm a virgin," is the first guys answer. Saint Peter gives a him a Mercedes Benz to get around in, and poses the same question to the second man. "Only once," he says, "on my wedding night." Giving him the keys to a Toyota, Saint Peter turns and asks the third man how often he's had sex in his life. "I've gotten laid so many times I've lost count," the fellow confesses. And Saint Peter gives him a bicycle. Not too much later the first man is tooling around in his Mercedes Benz when he sees something so extraordinary that he turns his head to look, something so shocking that he is unable to avert his gaze. He crashes headlong into a tree, and when he comes to, in Heaven hospital, the angel doctors and police are standing by his bedside, waiting to find out what caused the accident. "It was shocking... Simply shocking," whispers the poor man. "I... I... I saw Pope John Paul on roller skates!" ?section :marks:jokelib:data:joke^line^267 text "Sister Bernadette, aren't you putting on a little weight?" inquired Father Flanagan during his visit to the convent, suspiciously eyeing her bulging stomach. "Why no, Father," answered the nun demurely, "it's just a little gas." A few months later Father Flanagan put the same question to the nun, noticing that her habit barely fit across her belly. "Oh, just a bit of gas," said Sister Bernadette, blushing a bit. On his next visit Father Flanagan was walking down the corridor when he passed Sister Bernadette wheeling a baby carriage. Looking in, the priest observed, "Cute little fart." ?section :marks:jokelib:data:joke^line^268 text After many unbroken years of service to the priest of the parish, an old nun decided to take a vacation at the seaside. Wanting to make sure the priest was looked after as well as possible, she instructed a young sister on each aspect of his care. When the yound nun came in on the first morning with the priest's breakfast, he told her he had a key between his legs and she had a lock between hers. "If I put my key in your lock," he explained to the girl, "it will open the gates to heaven." She thought that sounded like a fine idea, and they did it many times before the old nun came back to resume her duties. On her return she asked how things had worked out, and the young sister eagerly explained about the gates of heaven. "Why, that lying old bastard!" shrieked the nun. "Thirty years ago he told me that was Gabriel's horn, and I've been blowing it ever since!" ?section :marks:jokelib:data:joke^line^269 text ALL THE BIG WOMEN DIE YOUNG, THAT'S WHY WE'RE LEFT WITH LITTLE OLD LADIES ?section :marks:jokelib:data:joke^line^270 text KEEP AUSTRALIA GREEN. have sex with a frog. ?section :marks:jokelib:data:joke^line^271 text IF GOD EXISTS THAT'S HIS PROBLEM. ?section :marks:jokelib:data:joke^line^272 text Don't complain about the beer, you'll be old and weak yourself one day. ?section :marks:jokelib:data:joke^line^273 text Love is 3 minutes of squelching noises ?section :marks:jokelib:data:joke^line^274 text More deviation, Less population. ?section :marks:jokelib:data:joke^line^275 text There is nothing so over-rated as a bad fuck. And nothing so under-rated as a good shit. ?section :marks:jokelib:data:joke^line^276 text I am Bi-sexual. If I can't get it I buy it. ?section :marks:jokelib:data:joke^line^277 text YOUR FAMILYS FUTURE IS IN YOUR HANDS. ;written in gents lavatory. ?section :marks:jokelib:data:joke^line^278 text Join the Marines - intervene in the country of your choice. ?section :marks:jokelib:data:joke^line^279 text Masturbation is a waste of FUCKING time ?section :marks:jokelib:data:joke^line^280 text WHEN I GROW UP I SHALL GRAFFITI THE CEILING ;written on gents lavatory door. ?section :marks:jokelib:data:joke^line^281 text Make your MP work - don't re-elect him. ?section :marks:jokelib:data:joke^line^282 text I used to dress off the peg, but now the neighbours take their washing in at nite. ?section :marks:jokelib:data:joke^line^283 text Power Corrupts - absolute power is even more fun. ?section :marks:jokelib:data:joke^line^284 text Life is like a pubic hair on a toilet seat - eventually you get pissed off. ?section :marks:jokelib:data:joke^line^285 text Drivers- Don't pull out to avoid a child - you might fall off the bed. ?section :marks:jokelib:data:joke^line^286 text Sex Appeal - please give generously. ?section :marks:jokelib:data:joke^line^287 text If sex is a pain in the ass, you're doing it wrong. ?section :marks:jokelib:data:joke^line^288 text If girls are made of sugar and spice, how come they taste like tuna fish. ?section :marks:jokelib:data:joke^line^289 text Two's company, three's a deformity. ?section :marks:jokelib:data:joke^line^290 text Sex is like the game of 500 - if you've got a good hand, you may as well go it alone. ?section :marks:jokelib:data:joke^line^291 text Contraceptives should be used at every conceivable occasion. ?section :marks:jokelib:data:joke^line^292 text Virginity is not something to be ashamed of, just cured. ?section :marks:jokelib:data:joke^line^293 text It is better to have loved and lost, than to have paid for it and not liked it. ?section :marks:jokelib:data:joke^line^294 text A cock is like a sock - if it's too small it's of no use, if it's too big it sags down your leg. ?section :marks:jokelib:data:joke^line^295 text Panties may not be the best thing in the world, but they're the next thing to it. ?section :marks:jokelib:data:joke^line^296 text Be kind to a beaver - plant a post in its habitat. ?section :marks:jokelib:data:joke^line^297 text Puberty is when a girls voice changes from "No" to "Yes." ?section :marks:jokelib:data:joke^line^298 text Fighting for peace is like fucking for virginity. ?section :marks:jokelib:data:joke^line^299 text Graffiti from a public toilet... BEAM ME UP, SCOTTIE! -I canna do it, cap'n. You're surrounded by steamy vapours that are causin' a disengagement of the transmitter ray. -Any ideas, Spock? -Try another stall, and this time don't fart. ?section :marks:jokelib:data:joke^line^300 text Living on earth is expensive, but it does include a free trip around the sun. ?section :marks:jokelib:data:joke^line^301 text Every day is the dawn of a new error. ?section :marks:jokelib:data:joke^line^302 text Life is a sexually transmitted disease. ?section :marks:jokelib:data:joke^line^303 text Death is hereditary. ?section :marks:jokelib:data:joke^line^304 text Constipation is the thief of time. -Diarrhoea waits for no man. ?section :marks:jokelib:data:joke^line^305 text The union is my shepherd, I shall not work! ?section :marks:jokelib:data:joke^line^306 text When in doubt - mumble. ?section :marks:jokelib:data:joke^line^307 text MAKE LOVE, NOT WAR! -Marry and do both. ?section :marks:jokelib:data:joke^line^308 text Innocence is asking three others to join you in foreplay. ?section :marks:jokelib:data:joke^line^309 text q. Why aren't there any black snow-skiers? a. Because their lips explode above 1000ft. ?section :marks:jokelib:data:joke^line^310 text q. Why do blacks wear wide-brimmed hats? a. To keep the birds from shitting on their lips. ?section :marks:jokelib:data:joke^line^311 text q. Why do blacks wear platform shoes? a. To keep their knuckles from dragging on the ground. ?section :marks:jokelib:data:joke^line^312 text q. Hear about the Aggie who was majoring in animal husbandry? a. They caught him at it. ?section :marks:jokelib:data:joke^line^313 text q. What did God say when he made the first Black? a. "Oh, shit!" ?section :marks:jokelib:data:joke^line^314 text q. Why are Black men hung better than white men? a. Because little white boys had toys to play with. ?section :marks:jokelib:data:joke^line^315 text q. Why do Blacks keep their fists closed when making the black power sign? a. If they held out an open palm, they'd fall out of the trees. ?section :marks:jokelib:data:joke^line^316 text q. What's the African mating call? a. "Here I is!" ?section :marks:jokelib:data:joke^line^317 text q. Why Don't Blacks take Aspirin? a. They're too proud to pick the cotton out of the bottle. ?section :marks:jokelib:data:joke^line^318 text q. What do you call a black with no arms? a. Trustworthy. ?section :marks:jokelib:data:joke^line^319 text q. Why don't blacks like blow jobs? a. They don't like any job. ?section :marks:jokelib:data:joke^line^320 text q. How do you make a black person nervous? a. Take him to an Auction. ?section :marks:jokelib:data:joke^line^321 text q. Why did God invent the climax? a. So niggers would know when to stop fucking. ?section :marks:jokelib:data:joke^line^322 text q. What's the definition of worthless? a. A 7ft nigger with a small dick who can't play basketball. ?section :marks:jokelib:data:joke^line^323 text q. What's black and shines in the dark? a. Porirua. ?section :marks:jokelib:data:joke^line^324 text q. Why do blacks wear white gloves? a. So they know when they've finished their Moro bar. ?section :marks:jokelib:data:joke^line^325 text q. Why do niggers have big nostrils? a. 'Cos they have fat fingers. ?section :marks:jokelib:data:joke^line^326 text q. What do you call a black who's had 12 abortions? a. A crime prevention officer. ?section :marks:jokelib:data:joke^line^327 text q. What do you call an Abo who marries an Irishman? a. A social climber. ?section :marks:jokelib:data:joke^line^328 text q. Why do they call Aboriginals Boongs? a. That's the noise they make when you hit them with a landrover. ?section :marks:jokelib:data:joke^line^329 text A white man walks into a bar wearing a button that says, "I hate niggers," and sits down at the bar. "Listen buddy, some people won't appreciate that button. You'd better take it off," warns the bartender. "I don't care", says the man. "I hate niggers. They're dumb, stupid and smelly. I just hate 'em." Shaking his head, the bartender goes to serve another customer. Five minutes later a big black man walks in and sits down next tothe man with the button. "Hey," says the black man, spying the button for the first time. "I don't like that. Take it off or I'll take it off for you." "Hell no," replies the white man, "I hate niggers. They're dumb and stupid. I hate them." "Then I'll have to remove it for you," yells the black man. "Let's go outside." Both men go out to the alley behind the bar, and the black man whips out a huge switchblade. "See, see how stupid you niggers are," the white man chuckles, "bringing a knife to a gunfight." ?section :marks:jokelib:data:joke^line^330 text An exciting black woman calls her husband at work to give him some good news about their son, Leroy. "Honey," she squeals, "Leroy done said his first half word!" "His first half word?" repeated the father. "Yeah, he done gone an said 'Mother'!" ?section :marks:jokelib:data:joke^line^331 text q. Know why carmakers in Detroit aren't putting seat belts into any cars bought by blacks? a. They thought it would be safer to put velcro on the headrests. ?section :marks:jokelib:data:joke^line^332 text A schoolteacher announced to her third-grade class that the subject for the day was farm animals. "Can anybody tell me what sound a chicken makes?" she asked. "Cluck, cluck, cluck," Tommy answered proudly. "That's correct, Tommy," the teacher said. "Does anyone know what a cow says?" Sally's hand shot up as she yelled, "Mooooo!" "Very good, Sally. Now, who knows what a pig sounds like?" she queried. From the back of the class, little Rasmus shouted, "FREEZE, MOTHERFUCKER!" ?section :marks:jokelib:data:joke^line^333 text In school one day, a black kid walks up to his white classmate and says, "My dad has a new car, and the horn goes 'Honkey, honkey.'" The white kid laughs and responds, "That's nothing, my pop just got a new chainsaw and when he pulls the cord, it goes, 'R-R-Runnigger-nigger-nigger.'" ?section :marks:jokelib:data:joke^line^334 text q. Who were the three most famous women in black history? a. Aunt Jemima, Diana Ross, and Mother Fucker. ?section :marks:jokelib:data:joke^line^335 text q. Did you hear about the two Irish men on that's incredible? One could read and write and the other just liked hanging around with intellectuals. ?section :marks:jokelib:data:joke^line^336 text q. What do you do if an Irishman throws a hand-grenade at you? a. Pull the pin and throw it back. q. What do you do if an Irishman throws a pin at you? a. RUN - he's probably got the hand-grenade in his teeth. ?section :marks:jokelib:data:joke^line^337 text q. What is the smallest room in Ireland? a. The Irish Hall of fame. ?section :marks:jokelib:data:joke^line^338 text q. In what section of the paper do they print Irish obituaries? a. Under civil improvement. ?section :marks:jokelib:data:joke^line^339 text q. Why does an Irishman wear a hat when he's having a shit? a. So he knows what end to wipe. ?section :marks:jokelib:data:joke^line^340 text q. What did Hitler say before he sent his men to Ireland? a. Don't shit in the street, we're trying to defeat them, not feed them. ?section :marks:jokelib:data:joke^line^341 text At an international medical symposium it was decided that some research should be devoted to the matter of the male penis with particular interest centring on why it was shaped with a knobbed end. Funds were set aside and three teaching hospitals were elected to investigate. Royal Edinburgh was the first to report. In a 96 page document doctors distilled the results of tests conducted on over 6000 subjects and questionnaires received from a further 4000 respondents at a cost of $50000. Their findings showed conclusively that the broader extremity of the member was to give additional pleasure to the male during sexual intercourse. The Paris Hospital du Sacre Coeur presented it's findings soon after. It's report appeared at a cost of three million francs and it's 74 pages outlined the positive responses from 5000 countrymen. The French declared categorically that the glorious, retrousqe shape of the penis gave added pleasure to the female partner during lovemaking. St Patrick's, Dublin,was a little slower in presenting it's report. Conducted one sample of five at a cost of 5 pounds it was nevertheless a serious document, one paragraph in length. "The knob at the end of the 'ould feller'," it concluded, "was to stop the hand from slipping off." ?section :marks:jokelib:data:joke^line^342 text There is a story about the Irishman who drowned while he was digging a grave for a friend. He'd wanted to be buried at sea. ?section :marks:jokelib:data:joke^line^343 text Paddy was in America. He was patiently waiting, and watching the traffic cop on a busy street crossing. The cop stopped the flow of traffic, and shouted, "Okay, pedestrians." Then he'd allow the traffic to pass. He'd done this several times, and Paddy still stood on the sidewalk. After the cop had shouted "Pedestrians" for the tenth time, Paddy went over to him and said, "Is it not about toime ye let Catholics cross?" ?section :marks:jokelib:data:joke^line^344 text The Irish attempt at Mount Everest was a valiant effort, but it failed: they ran out of scaffolding. ?section :marks:jokelib:data:joke^line^345 text And then there was the Irishman who sued the local baker for forging his signature on a hot cross bun. ?section :marks:jokelib:data:joke^line^346 text Did you hear about how Paddy ripped off the railway? He bought a return ticket and never came back. ?section :marks:jokelib:data:joke^line^347 text A woman telephoned an airline office in Dublin and asked, "How long does it take to fly to London?" The clerk said, "Just a minute." "Thank you," the womam said as she hung up. ?section :marks:jokelib:data:joke^line^348 text q. What's the difference between an Irishman and a ham sandwich? a. The ham sandwich is only half as thick. ?section :marks:jokelib:data:joke^line^349 text q. Why do Arabs have oil and the Irish have potatoes? a. The Irish had first choice. ?section :marks:jokelib:data:joke^line^350 text q. Why did the Irish stop making ice blocks? a. The old lady who knew the recipe died. ?section :marks:jokelib:data:joke^line^351 text q. What has an IQ of 180? a. Ireland. ?section :marks:jokelib:data:joke^line^352 text q. What's the definition of gross ignorance? a. 144 Irishman. ?section :marks:jokelib:data:joke^line^353 text q. Why is the suicide rate low among Irishman? a. It's hard to kill yourself jumping out of a basement. ?section :marks:jokelib:data:joke^line^354 text q. What do you call an Irishman with half a brain? a. Lucky. ?section :marks:jokelib:data:joke^line^355 text q. Did you hear about the Irishman who had an arsehole transplant? a. The arsehole rejected him seven days later. ?section :marks:jokelib:data:joke^line^356 text q. Why are the Irish so stupid? a. Because when God was handing out brains, the Irishman said, "That's okay, an IOU will be fine." ?section :marks:jokelib:data:joke^line^357 text q. Did you hear about the Irish lesbian? a. She loved men. ?section :marks:jokelib:data:joke^line^358 text q. What about the Irishman who bought a pool table? He sent it back because the water kept running out of the pockets. == ******************************************************************* == Utility tools == ******************************************************************* ?section :marks:utils:loadquiet macro #push :dummy #set :dummy [#load /keep 1/ %*%] #pop :dummy ?section :marks:utils:stripuse routine #frame == Strip the : entries and non-existent directories from the uselist. #push :dirlist :dirname #set :dirlist [#loop |while| [#more] |do| [#if [#argument/value :dirname/word]] [#if NOT [#match : [:dirname]] |then| [#if [#variableinfo/existence/[:dirname]] |then| [#if [#match DIRECTORY [#variableinfo/type/[:dirname]]] |then| #set :dirlist [:dirlist] [:dirname] ] ] ] ] #result [:dirlist] #unframe ?section :marks:utils:adduse routine #push :newdir :allnewdir #set :allnewdir [#loop |while| [#more] |do| [#if [#argument/value :newdir/word]] [#if [#variableinfo/existence/[:newdir]] |then| [#if [#match DIRECTORY [#variableinfo/type/[:newdir]]] |then| #set :allnewdir [:allnewdir] [:newdir] |else| #output [:newdir] is not a directory ! ] |else| #output [:newdir] does not exist ! ] ] [#if NOT [#emptyv :allnewdir] |then| #set #uselist : [:marks:utils:stripuse [:allnewdir] [#uselist]] |else| #output There were no new directories to add. ] #pop :newdir :allnewdir ?section :marks:utils:get_variable_dir routine #frame #push :data^ :dir^ :var^ :pos^ :version^starts [#if [#argument/value :data^/text]] #set :pos^ 1 [#loop |while| [#compute ([:pos^] > 0)] |do| #set :pos^ [#charfind :data^ 1 :] [#if [#compute ([:pos^] > 0)] |then| #set :dir^ [:dir^][#charget :data^ 1 for [:pos^]] #set :data^ [#charget :data^ [#compute ([:pos^] + 1)] for 100] #set :version^starts [#charfind :dir^ 1 .] [#if [#compute ([version^starts] > 0)] |then| #set :dir^ [#charget :dir^ 1 for [#compute [:version^starts] - 1]]: ] |else| #set :var^ [:data^] #set :version^starts [#charfind :var^ 1 .] [#if [#compute ([version^starts] > 0)] |then| #set :var^ [#charget :var^ 1 for [#compute [:version^starts] - 1]] ] ] ] [#if [#emptyv :dir^] |then| #set :dir^ :] #result [:dir^] [:var^] #unframe ?section :marks:utils:find_vars routine #frame == Syntax: findvars fred* wal?y* etc [#def :marks:utils:parse_var_list routine |body| #frame #push :var^mask :var^name :var^results :version^starts :junk^ [#if [#argument/value :var^mask/word]] [#loop |while| [#more] |do| == == == The variable test puts the full directory path and == level in, ie: fred in dir mark becomes :mark.1:fred.1 == We must strip out the variable == [#if [#argument/value :var^name/variable]] == #setmany :junk^ :var^name, [:marks:utils:get_variable_dir [:var^name]] == == Changed for speed, assume only a bare variable with no level. == This proc calls us this way. If this procedure is ever made == standalone have to use the two lines above which really slows == us down. [#if [#argument/value :var^name/word]] == then check [#if [#match [:var^mask] [:var^name]] |then| #set :var^results [:var^results] [:var^name] ] ] #result [:var^results] #unframe ] #push :test^mask :test^dir :variable^list [#if [#argument/value :test^mask/ word]] [#if NOT [#emptyv :test^mask] |then| #setmany :test^dir :test^mask, [:marks:utils:get_variable_dir [:test^mask]] [#if [#compute ([#charcount :test^dir] > 1)] == more than just : |then| #set :test^dir [#charget :test^dir 1 for [#compute [#charcount :test^dir] - 1]] ] #push #home #set #home [:test^dir] #set :variable^list [:marks:utils:parse_var_list [:test^mask] [#variables]] #pop #home ] #result [:variable^list] #unframe ?section :marks:utils:delvar macro #frame [#def :pop_list routine |body| #frame #push :dir^ :var^ [#if [#argument/value :dir^/word]] [#loop |while| [#more] |do| [#if [#argument/value :var^/word]] #pop [:dir^][:var^] #output POPPED [:dir^][:var^] ] #unframe ] [#def :var_del_shell routine |body| #frame #push :var^mask :var^dir :var^buffer [#loop |while| [#more] |do| [#if [#argument /value :var^mask/ word]] #setmany :var^dir :var^mask, [:marks:utils:get_variable_dir [:var^mask]] #set :var^buffer [:marks:utils:find_vars [:var^dir][:var^mask]] [#if NOT [#emptyv :var^buffer] |then| :pop_list [:var^dir] [:var^buffer]] ] #unframe ] #push :var^mask2 #set :var^mask2 %*% [#if NOT [#emptyv :var^mask2] |then| :var_del_shell [var^mask2]] #unframe == ******************************************************************* == == O S S I n t e r f a c e s == == ******************************************************************* ?section :marks:osstools:lib:valid_oss_guardian_prefixes routine == ALL Three character prefixes of subvols that contain or may contain == OSS files should be added here. All reoutines in this section use == this list rather than assuming only ZYQ, so if other prefixes do start == appearing then to include them in processing is simply a case of == extending the result line (ie: #result ZYQ ZYR ZYS) #result ZYQ ?section :marks:osstools:lib:count_oss_files macro #frame == Count number of files, and space used, for files we have determined == are OSS files (so far). == == This is pass 1. Later maybe check filetypes as well ?. == == Put all the work into one routine, this is in case == we identify other subvolume masks we will need to == use later. [#def :scan_all_for_mask routine |body| #frame == Variables needed #push :ossprefix :ossmask :filecount :sizecount :previous :donenow == Initialise variables [#if [#argument/value :ossprefix/word]] #set :ossmask $*.[:ossprefix]*.* #set :filecount 0 #set :sizecount 0 #set :donenow 0 == Little helper to increment the totals [#def :increment_totals macro |body| #set :filecount [#compute [:filecount] + 1] #set :sizecount [#compute [:sizecount] + [#fileinfo/eof/[:previous]]] ] == Loop for all the files matching the mask #set :previous [#filenames/maximum 1/[:ossmask]] :increment_totals [:previous] [#loop |while| [#match 0 [:donenow]] |do| #set :previous [#filenames/maximum 1,previous [:previous]/[:ossmask]] [#if [#emptyv :previous] |then| #set :donenow 1 |else| :increment_totals [:previous] ] ] { end of loop while donenow = 0 } == Display the resuls #output #set :sizecount [#compute ([:sizecount] / 1024000)] #output Results for [:ossmask] : [:filecount] files, [:sizecount]MB used #unframe ] { end of routine scan_all_for_mask } == Call the routine for each prefix we are looking for. #output Working... #push :useasprefix [#def :for_all_prefixes routine |body| [#loop |while| [#more] |do| [#if [#argument/value :useasprefix/word]] :scan_all_for_mask ZYQ ] ] :for_all_prefixes [:marks:osstools:lib:valid_oss_guardian_prefixes] == Done #unframe ?section :marks:osstools:lib:may_be_oss routine #frame == Check to see if a filename passed could possible be == the guardian name of an oss file. #push :fname :subvname :resultvalue :posfound :scanlist #set :resultvalue 0 [#case [#argument/value :fname/filename text end] | 1 | #set :subvname [#fileinfo/subvol/[:fname]] #set :subvname [#charget :subvname 1 for 3] #set :scanlist [:marks:osstools:lib:valid_oss_guardian_prefixes] #set :posfound [#charfind :scanlist 1 [:subvname]] [#if [#match 0 [:posfound]] |then| #set :resultvalue 0 |else| #set :resultvalue -1 ] |otherwise| #set :resultvalue 0 ] #result [:resultvalue] #unframe ?section :marks:osstools:lib:valid_oss_full_filename routine #frame == == Expects to be passed an OSS file name. It will check what it is == passed to ensure it is a full OSS filename including the leading /. == Note that if it ends in a trailing / it is not legal. == == Returns RESULT FILENAME == where RESULT will be -1 is filename is OK, 0 if an invalid filename == and FILENAME is the amount of filename parsed before an error was found == or the full filename if there were no errors. == #push :resultvar :parmdata :slashneeded #set :slashneeded -1 == full oss file paths start with a slash == start with empty parmdata #set :parmdata #set :resultvar -1 == default is all ok [#loop |while| [#more] |do| [#case [#argument/value :parmvalue/word slash comma text end] | 1 | [#if NOT [:slashneeded] |then| #set :parmdata [:parmdata][:parmvalue] #set :slashneeded -1 == slash needed next |else| #set :resultvar 0 ] | 2 | [#if [:slashneeded] |then| #set :parmdata [:parmdata]/ #set :slashneeded 0 == word needed next |else| #set :resultvar 0 ] |otherwise| ] ] == Sanity checks [#if [#emptyv :parmdata] |then| #set :resultvar 0] == no data passed [#if NOT [:slashneeded] |then| #set :resultvar 0] == cannot end on a slash #result [:resultvar] [:parmdata] #unframe ?section :marks:osstools:gname macro #frame == If passed an OSS filename, identify the associated guardian filename. #push :parmvalue :parmisok #setmany :parmisok :parmvalue, [:marks:osstools:lib:valid_oss_full_filename %1%] [#if [#match 0 [:parmisok]] |then| #output *ERROR* Provide the full path with the OSS file name #output ~_~_~_~_~_~_~_~_ie: gname /usr/local/bin/test #output GOT: [:parmvalue] |else| #output System : [#mysystem] osh -c "/bin/gname [:parmvalue]" ] #unframe ?section :marks:osstools:pname routine #frame == Identify the OSS filename used by a guardian file. == Needs to call the OSS services via OSH. #push :guardian_name :guardian_sysname [#case [#argument/value :guardian_name/filename keyword/wordlist help/] | 1 | == filename will have been expanded but we need to == ensure we are only looking at local files, and to == put a \ before the $ so oss doesn't treat the filename == as a variable name. #set :guardian_sysname [#fileinfo/system/[:guardian_name]] [#if [#emptyv :guardian_sysname] |then| #set :guardian_sysname [#mysystem]] #set :guardian_name [#fileinfo/volume/[:guardian_name]].[#fileinfo/subvol/[:guardian_name]].[#fileinfo/file/[:guardian_name]] [#if [#match [:guardian_sysname] [#mysystem]] |then| [#if [:marks:osstools:lib:may_be_oss [:guardian_name]] |then| #output System : [:guardian_sysname] osh -c "/bin/pname \[:guardian_name]" |else| #output *ERROR* Doesn't appear to be an OSS naming standard. ] |else| #output *ERROR* You can only lookup files on the local system !. ] | 2 | #output pname: #output This invokes the OSS pname command to show the OSS path and filename #output associated with a guardian filename. #output Example: pname $AUDIT.ZYQ00000.Z00001V7 |otherwise| #output *ERROR* Expecting the guardian filename of an OSS file or "HELP". ] #unframe ?section :marks:osstools:countoss alias :marks:osstools:lib:count_oss_files ?section :marks:osstools:index macro == Show whats in here #output #output /justify center/ Index of OSSTOOLS #output /justify center/ ================= #output countoss - Count the number of OSS files in the guardian filesystem. #output ~_~_~_~_~_~_~_~_~_~_~_ie: countoss #output gname - When provided with an OSS filename will list the associated #output ~_~_~_~_~_~_~_~_~_~_~_Guardian filename. #output ~_~_~_~_~_~_~_~_~_~_~_ie: gname /home/m124260/test.ksh #output pname - when provided with a Guardian filename that is a valid file #output ~_~_~_~_~_~_~_~_~_~_~_name for an OSS entry will display the OSS filename for that #output ~_~_~_~_~_~_~_~_~_~_~_file. #output ~_~_~_~_~_~_~_~_~_~_~_ie: pname $ATM08.ZYQ00001.Z00003FL #output ?section :marks:osstools:_execute routine == Invoked if anyone tries to execute the directory :marks:osstools:index ?section :marks:osstools:lib:_execute routine == Invoked if anyone tries to execute the directory :marks:osstools:index ?section :marks:osstools:osstools alias == A link to the index thats easy to remember :marks:osstools:index == ******************************************************************* == == Usefull stuff. == == ******************************************************************* ?section :marks:misc:tlog routine #frame == Syntax: == tlog [ days in past | specific date as yymmdd ] == ie: == tlog == tlog 3 == tlog 030726 #push :y^ :m^ :d^ :filename^ :daysback^ :datetouse^ [#case [#argument/value :daysback^/number end] |of| | 1 | == daysback is set with value |otherwise| #set :daysback^ 0 ] == If number passed > 3 bytes assume a date. [#if [#compute ([#charcount :daysback^] > 3)] |then| == use yymmdd provided #set :datetouse^ [:daysback^] [#loop |while| [#compute ([#charcount :datetouse^] < 6)] |do| #set :datetouse^ 0[:datetouse^] ] == What if user entered yyyymmdd ? [#if [#compute ([#charcount :datetouse^] > 6)] |then| #push :len :copystart #set :len [#charcount :datetouse^] #set :copystart [#compute [:len] - 6] #set :len [#compute [:len] - [:copystart]] #set :copystart [#compute [:copystart] + 1] #set :datetouse^ [#charget :datetouse^ [:copystart] for [:len]] ] |else| == Else subtract daysback from the time [#if [#compute ([:daysback^] > 0)] |then| #set :daysback^ [#compute [:daysback^] * 8640000] ] #setmany :y^ :m^ :d^ _, [#contime [#compute [#timestamp] - [:daysback^]]] #set :y^ [#charget :y^ 3 for 2] [#if [#compute ([:m^] < 10)] |then| #set :m^ 0[:m^]] [#if [#compute ([:d^] < 10)] |then| #set :d^ 0[:d^]] #set :datetouse^ [:y^][:m^][:d^] ] == Show what we are going to use #set :filename^ $SYSTEM.TACLLOG.T[:datetouse^] #output Log file [:filename^] [#if [#fileinfo/existence/[:filename^]] |then| ESDS [:filename^] |else| #output The requested file is not available. #output Files available are... filenames $system.tacllog.t* ] #unframe == ***************************************************************************** == ** == MENU LIBRARY TOOLS ** == Needs the colour libraries defined in this file ** == ** == ***************************************************************************** ?section :marks:utils:menus:cls macro == Ensure we have a clear screen function available to us. #output [#delta/commands :marks:codes:^delta/27I73I] ?section :marks:utils:menus:error_message routine #frame == --------------------------------------------------------------------------- == :marks:utils:menus:error_message == Display an error message in red at the bottom of the screen area. == Input parms: the error text to display == --------------------------------------------------------------------------- #push :errtext [#if [#argument/value :errtext/text]] #output [cursor^home^down][cursor^up][text_colour RED][:errtext] #unframe ?section :marks:utils:menus:is_pfk_key routine #frame == --------------------------------------------------------------------------- == :marks:utils:menus:is_pfk_key == Check to see if the input value passed could have come from a PFK key. == Result will be empty if it is not a PFK key, or it will have the name of == PFK key that was pressed. == We only returnthe lowercase PFK key values, as the shifted ones are the == same, but in lower case, so we can't distinguish between the two as TACL == is case insensitive. == --------------------------------------------------------------------------- #push :valtotest :resultstr :maybe #set :resultstr #set :maybe NO == default is NOT a PFK [#if [#argument/value :valtotest/word end]] [#if NOT [#emptyv :valtotest] |then| == PFK codes are a control byte then three data bytes [#if [#compute ([#charcount :valtotest] = 4)] |then| #set :maybe YES] == BUGGER, within high frame levels can be control byte and two data bytes [#if [#compute ([#charcount :valtotest] = 3)] |then| #set :maybe YES] [#if [#match YES [:maybe]] |then| == get char after the control byte, should be unique == NOTE: Shifted keys have lowecase chars, that are the == same as the uppercase chars of the unshifted == keys, so we can't distinguish between them. == As such, we will just return the F1-F16 values #set :valtotest [#charget :valtotest 2 for 1] [#case [:valtotest] | @ | #set :resultstr F1 | A | #set :resultstr F2 | B | #set :resultstr F3 | C | #set :resultstr F4 | D | #set :resultstr F5 | E | #set :resultstr F6 | F | #set :resultstr F7 | G | #set :resultstr F8 | H | #set :resultstr F9 | I | #set :resultstr F10 | J | #set :resultstr F11 | K | #set :resultstr F12 | L | #set :resultstr F13 | M | #set :resultstr F14 | N | #set :resultstr F15 | O | #set :resultstr F16 |otherwise| #set :resultstr ] ] == charcount test ] == emptyv test #result [:resultstr] #unframe ?section :marks:utils:menus:get_reply macro == --------------------------------------------------------------------------- == :marks:utils:menus:get_reply == Prompt for, and get a reply, at the static field position the menus == use for command input. == Output: global variable :opt is updated == --------------------------------------------------------------------------- #output [cursor^home][LF][LF][cursor^right][cursor^right][cursor^right]& [cursor^right][cursor^right][cursor^right]& [cursor^right][cursor^right][cursor^right] #set :opt [#input [text_colour YELLOW]OPTION=>[text_colour NORMAL]] #push :xx #set :xx [:marks:utils:menus:is_pfk_key [:opt]] [#if NOT [#emptyv :xx] |then| [#if [#match F3 [:xx]] |then| #set :xx x] == F3 is ExIT #set :opt [:xx] ] #pop :xx ?section :marks:utils:menus:menu_create routine == --------------------------------------------------------------------------- == :marks:utils:menus:menu_create == DO NOT FRAME == Uses the text-type menu list provided as the parameter to build == a useable menu system. == returns 1=OK, 0=failure == on failure all variables created are deletd == on sucess there will be a :menu_list, menu_var_list and menu_title created, == the caller must pop these when going back a level == --------------------------------------------------------------------------- #push :menu_list :menu_var_list :menu_title == a new recursed menu level #push :optchar :desc :command :xx :linetype :menu_table :work1 :work2 [#if [#argument/value :work2/variable]] #appendv :menu_table [:work2] == don't work on the orgional or as we == extract off the lib variables are erased #set :menu_title [#extract :menu_table] == text vars have a blank line [#if [#emptyv :menu_title] |then| == if created with a DEF so we #set :menu_title [#extract :menu_table] == may need to do this again ] [#loop |while| NOT [#emptyv :menu_table] |do| #set :work1 [#extract :menu_table] #set :xx [#charfind :work1 1 ,] [#if [#compute ([:xx] = 0)] |then| [#loop |while| NOT [#emptyv :menu_var_list] |do| #set :xx [#extract :menu_var_list] #pop [:xx] ] #pop :menu_list :menu_var_list :menu_title #pop :optchar :desc :command :xx :linetype :menu_table :work1 :work2 #result 0 #return ] #set :work2 [#charget :work1 1 for [#compute ([:xx] - 1)]] #setmany :linetype :optchar _, [:work2] [#if [#match HELP [:optchar]] |then| #set :optchar F1] == help key #set :work1 [#charget :work1 [#compute ([:xx] + 1)] for [#charcount :work1]] #set :xx [#charfind :work1 1 ,] [#if [#compute ([:xx] = 0)] |then| [#loop |while| NOT [#emptyv :menu_var_list] |do| #set :xx [#extract :menu_var_list] #pop [:xx] ] #pop :menu_list :menu_var_list :menu_title #pop :optchar :desc :command :xx :linetype :menu_table :work1 :work2 #result 0 #return ] #set :xx [#compute ([:xx] + 1)] #set :command [#charget :work1 [:xx] for [#charcount :work1]] #set :xx [#compute ([:xx] - 2)] #set :desc [#charget :work1 1 for [:xx]] [#if [#emptyv :desc] |then| [#loop |while| NOT [#emptyv :menu_var_list] |do| #set :xx [#extract :menu_var_list] #pop [:xx] ] #pop :menu_list :menu_var_list :menu_title #pop :optchar :desc :command :xx :linetype :menu_table :work1 :work2 #result 0 #return ] [#if [#emptyv :command] |then| [#loop |while| NOT [#emptyv :menu_var_list] |do| #set :xx [#extract :menu_var_list] #pop [:xx] ] #pop :menu_list :menu_var_list :menu_title #pop :optchar :desc :command :xx :linetype :menu_table :work1 :work2 #result 0 #return ] [#if NOT [#match F1 [:optchar]] |then| == help doesn't display on menu #append :menu_list [text_colour CYAN] [:optchar]. [text_colour GREEN][:desc] ] #append :menu_var_list :menu_command_[:optchar] #push :menu_command_[:optchar] #set :menu_command_[:optchar] [:linetype],[:command] ] == end loop #pop :optchar :desc :command :xx :linetype :menu_table :work1 :work2 == If the user hasn't created a help screen then we will supply our == default one for use with F1. [#if NOT [#variableinfo/existence/:menu_command_F1] |then| #push :menu_command_F1 #set :menu_command_F1 F,:marks:utils:menus:doc:default_F1_screen #append :menu_var_list :menu_command_F1 ] #result 1 ?section :marks:utils:menus:menu_run routine == --------------------------------------------------------------------------- == :marks:utils:menus:menu_run == DO NOT FRAME == Runs the menu built by menu_create == need to clear all the variables listed in menu_var_list and then == pop :menu_list, :menu_var_list and :menu_title when exiting. == --------------------------------------------------------------------------- #push :opt :errmsg :tempbuf :templine :cmdtype :cmdname :xx #set :opt Z #set :errmsg [#loop |while| NOT [#match [:opt] x] |do| :marks:utils:menus:cls #output /justify center/ [text_colour WHITE][:menu_title] #output /justify center/ [text_colour NORMAL]& User [#shiftstring /down/ [#username [#processinfo/paid/[#mypid]]]] #output #output #appendv :tempbuf :menu_list [#loop |while| NOT [#emptyv :tempbuf] |do| #set :templine [#extract :tempbuf] #output [:templine] ] #output #output [text_colour CYAN] X. [text_colour GREEN]EXIT MENU [#if NOT [#emptyv :errmsg] |then| :marks:utils:menus:error_message [:errmsg] ] :marks:utils:menus:get_reply [#if NOT [#match x [:opt]] |then| [#if [#variableinfo/existence/:menu_command_[:opt]] |then| #set :xx [#charfind :menu_command_[:opt] 1 ,] #set :cmdtype [#charget :menu_command_[:opt] 1 for [#compute ([:xx] - 1)]] #set :cmdname [#charget :menu_command_[:opt] [#compute ([:xx] + 1)] for [#charcount :menu_command_[:opt]]] [#if [#match [:cmdtype] M] |then| [#if [#compute ([:marks:utils:menus:menu_create [:cmdname]] = 1)] |then| :marks:utils:menus:menu_run ] |else| == L or F :marks:utils:menus:cls == needed for L, no harm for F [:cmdname] ] [#if [#match [:cmdtype] L] |then| #set :cmdname [#input [text_colour CYAN]USE ENTER TO CONTINUE] ] |else| #set :errmsg OPTION [:opt] IS INVALID ] ] ] == while loop == delete all the variables, including those created by the menu build #set :opt Z == if not present main menus fall out (even though we pop) #pop :opt :errmsg :tempbuf :templine [#loop |while| NOT [#emptyv :menu_var_list] |do| #set :xx [#extract :menu_var_list] #pop [:xx] ] #pop :menu_list :menu_var_list :menu_title :cmdtype :cmdname :xx #return ?section :marks:utils:menus:_execute macro == Make it easier to start the menus == Customised for each system now as MQ is different, and others == may be customised later also. Default will now be a generic menu. [#case [#mysystem] | \NS | :marks:utils:menus:runme :marks:utils:menus:menus:menu_default_NS | \TD | :marks:utils:menus:runme :marks:utils:menus:menus:menu_default_TD |OTHERWISE| :marks:utils:menus:runme ] ?section :marks:utils:menus:runme routine == --------------------------------------------------------------------------- == This will invoke the main entry script in this library to run the default == menu system. == --------------------------------------------------------------------------- [#case [#exception] |of| | _call | #frame #filter _break _error == If a overide menu is provided, use it. Otherwise use the default #push :menu_to_use [#case [#argument/value :menu_to_use/variable end] | 1 | |otherwise| #set :menu_to_use :marks:utils:menus:menus:menu_default ] == 1. Change uselist to add (and place first) the screen code libraries. #push #uselist #set #uselist :marks:codes:screen :marks:codes:screen:colours [#uselist] == 2. Some global variables we require #push :work1 :work2 :opt :clear == 3. Load the colour map, override the users client emulator settings load_colour_map #output == 4. Start running the default menu [#if [#compute ([:marks:utils:menus:menu_create [:menu_to_use]] = 1)] |then| :marks:utils:menus:menu_run ] == 5. Clear the screen and restore the clients default colour settings :marks:utils:menus:cls reset_colour_map #output Menu ended by user request. #unframe | _break | :marks:utils:menus:cls reset_colour_map #output Menu system exited due to BREAK request. #unframe | _error | #push :junk^ #errortext/capture :junk^/ == reset_colour_map #output Menu system exited due to ERROR (get Mark to fix it) #outputv :junk^ #unframe ] ?section :marks:utils:menus:doc:default_F1_screen macro == --------------------------------------------------------------------------- == :marks:utils:menus:cmdscripts:default_F1_screen == If the invoker does not provide a help screen for the menu (via the keyword == HELP (or F1) as a menu option this default help screen will be inserted == by the menu_create routine. == --------------------------------------------------------------------------- :marks:utils:menus:cls #output /justify center/ [text_colour WHITE]TACL MENU LIBRARY SYSTEM #output /justify center/ [text_colour RED](c)Mark Dickinson, 2005 #output #output #output #output [text_colour NORMAL]No help screen was provided for the menu you are currently using. This #output ~_~_catch-all has been inserted for your convenience. This menu & library is #output [text_colour YELLOW]NOT[text_colour NORMAL]available & for general use. Please refrain from copying. #output #output ~_~_As a general rule,& [text_colour GREEN]F1[text_colour NORMAL] will display a help screen,& and[text_colour GREEN]F3[text_colour NORMAL]or[text_colour CYAN]x #output [text_colour NORMAL]always take you back to the previous menu you were on, or exit the menu #output ~_~_system if you are on the top level menu. #output #output ~_~_Any other menu options displayed on the menu will have been created by the #output ~_~_application author. If they are not descriptive enough contact the #output ~_~_application author and demand they create a help screen. #output #output ~_~_To exit this default help screen, just depress enter. :marks:utils:menus:get_reply #set :opt z ?section :marks:utils:menus:doc:menu_about macro :marks:utils:menus:cls #output /justify center/ [text_colour WHITE]ABOUT THE TACL MENU LIBRARY SYSTEM #output /justify center/ [text_colour RED](c)Mark Dickinson, 2005 #output #output #output [text_colour GREEN] #output This library displays and manages a full screen menu system. The menus are #output built from TEXT type variables making implementation extremely easy. #output The menus make use of my colour library to display the menus in the colours #output I choose, overiding any client emulator settings. #output #output You may involke the library to use your own menu panels rather than the #output supplied, this is covered in how to run the library. #output #output To exit this help screen, just depress enter. :marks:utils:menus:get_reply #set :opt z ?section :marks:utils:menus:doc:menu_design routine :marks:utils:menus:cls #output /justify center/ [text_colour WHITE]MENU DESIGN INFORMATION #output /justify center/ [text_colour RED](c)Mark Dickinson, 2005 #output #output #output [text_colour GREEN] #output The menus are TEXT variables tables. Each table is expected to contain as the #output first line a menu header, the remaining lines are menu control lines. #output #output The format of each TEXT table control line is as below #output ~_~_~_~_~_~_k n,description,command #output where #output ~_~_k is F(ullscrren), L(inemode) or M(enu to be run) #output ~_~_n is the number or character to be entered to trigger the option #output ~_~_~_~_or the keyword F1 or HELP to indicate a hidden F1 option for #output ~_~_~_~_a help macro #output ~_~_description is self explanatory #output ~_~_command is the command to be run, this may be a TACL macro or any #output ~_~_legal tacl command #output #output [text_colour CYAN]Use ENTER to see a sample and additional notes, or X to exit :marks:utils:menus:get_reply [#if [#match X [:opt]] |then| #set :opt z #return ] :marks:utils:menus:cls #output /justify center/ [text_colour WHITE]MENU DESIGN INFORMATION #output /justify center/ [text_colour RED](c)Mark Dickinson, 2005 #output #output #output [text_colour GREEN] #output EXAMPLE OF A MENU DEFINITION #output #output ~[#def :test_menu text ~|body~| #output TEST MENU TITLE #output F 1,TEDIT,TEDIT #output L 2,RUN A MACRO,:a_macro_name #output M T,TESTING,:marks:utils:menus:menus:menu_test #output F HELP,DUMMY,:macro_to_show_help_screen #output ~] #output #output [text_colour CYAN]Use ENTER to see additional notes, or X to exit :marks:utils:menus:get_reply [#if [#match X [:opt]] |then| #set :opt z #return ] :marks:utils:menus:cls #output /justify center/ [text_colour WHITE]MENU DESIGN INFORMATION #output /justify center/ [text_colour RED](c)Mark Dickinson, 2005 #output #output #output [text_colour GREEN] #output NOTE: If type L is used when the command is finsihed the user is prompted to #output depress ENTER to continue, to avoid the results of the line command being #output immediately cleared off the screen by the next menu redraw. All other types #output will have the menu immediately redrawn when the command completes. #output #output NOTE: A menu option of HELP or F1 is not displayed on the menu. The TACL macro #output defined on that entry is run for the menu when the user depresses F1. #output #output To exit this help screen, just depress enter. :marks:utils:menus:get_reply #set :opt z ?section :marks:utils:menus:doc:menu_running macro :marks:utils:menus:cls #output /justify center/ [text_colour WHITE]INVOKING THE MENU SYSTEM #output /justify center/ [text_colour RED](c)Mark Dickinson, 2005 #output #output #output [text_colour GREEN] #output To use the default menus use the command #output ~_~_~_~_~_~_~_:marks:utils:menus:runme #output #output To start running it with your own base menu #output ~_~_~_~_~_~_~_:marks:utils:menus:runme :your_textvar_name #output #output To exit this help screen, just depress enter. :marks:utils:menus:get_reply #set :opt z ?section :marks:utils:menus:doc:menuMQ_F1_screen macro == --------------------------------------------------------------------------- == :marks:utils:menus:doc:menuMQ_F1_screen == The help screen for the MQ menu == --------------------------------------------------------------------------- :marks:utils:menus:cls #output /justify center/ [text_colour WHITE]MQ MENU SCREEN #output /justify center/ [text_colour RED](c)Mark Dickinson, 2005 #output #output #output #output [text_colour NORMAL]This screen provides access to all the MQ queue managers defined on #output ~_~_the Tandem. #output #output ~_~_Select the option for the Pathway system you are interested in, and the #output ~_~_appropriate mqmc will be run for the pathway system you have chosen. #output #output [text_colour CYAN]To exit this default help screen, just depress enter. :marks:utils:menus:get_reply #set :opt z ?section :marks:utils:menus:cmdscripts:splcheck macro [#if [#processexists $SPLD] |then| #output --[text_colour YELLOW]DEVELOPMENT SPOOLER[text_colour NORMAL]-- -- SPOOLCOM $SPLD;COLLECT;EXIT #output $SYSTEM.TECHSERV.SPLCHECK $SPLD #output ] #output #output --[text_colour YELLOW]PRODUCTION SPOOLER[text_colour NORMAL]-- SPOOLCOM $SPLS;COLLECT;EXIT #output $SYSTEM.TECHSERV.SPLCHECK #output ?section :marks:utils:menus:cmdscripts:i2ms macro [#if [#processexists $I2MS] |then| $SYSTEM.TACLLIB.I2MS |else| #output --[text_colour YELLOW]I2MS IS NOT RUNNING[text_colour NORMAL]-- -- #output #output I2MS only runs on the active production system. #output Please check what system you have logged onto. #output You are currently logged onto [#mysystem], is that what you expect. #output #output #push :xx #set :xx [#input [text_colour CYAN]Depress ENTER to return to the menu] #pop :xx ] ?section :marks:utils:menus:menus:menu_MQ_TD text MQ-SERIES MENU FOR DEV/DRP F 1,$MQPW - QZTDM1 - PRODUCTION,PATHCOM $MQPW;RUN MQMC F 2,$MQC1 - QZTDMC - SYSTEM TEST,PATHCOM $MQC1;RUN MQMC F 3,$MQT1 - QZTDMT - TEST(DEV),PATHCOM $MQT1;RUN MQMC F 4,$MQU1 - QZTDMU - USER TEST,PATHCOM $MQU1;RUN MQMC F 5,$MQN1 - QZTDMN - INTEGRATION REGION,PATHCOM $MQN1;RUN MQMC F 6,$MQP1 - QZTDMP - PERFORMANCE TEST,PATHCOM $MQP1;RUN MQMC F HELP,HELP,:marks:utils:menus:doc:menuMQ_F1_screen ?section :marks:utils:menus:menus:menu_MQ_NS text MQ-SERIES MENU FOR PRODUCTION F 1,$MQPW - PRODUCTION,PATHCOM $MQPW;RUN MQMC F HELP,HELP,:marks:utils:menus:doc:menuMQ_F1_screen ?section :marks:utils:menus:menus:menu_documents text DOCUMENTATION MENU F 1,ABOUT THE LIBRARY,:marks:utils:menus:doc:menu_about F 2,CREATING MENUS,:marks:utils:menus:doc:menu_design F 3,RUNNING THE MENUS,:marks:utils:menus:doc:menu_running ?section :marks:utils:menus:menus:menu_sysmon text SYSTEM MONITORING MENU F 2,VIEWSYS,F7 F 3,I2MS (Base24 Link Monitor),:marks:utils:menus:cmdscripts:i2ms ?section :marks:utils:menus:menus:menu_utilities text UTILITY MENU L 1,SHOW WHO IS LOGGED ON, WHOSON L 2,SHOW CURRENT SPOOL USAGE,:marks:utils:menus:cmdscripts:splcheck F 3,VIEW TODAYS TACL LOG FILE,tlog L 4,SHOW HOW MANY DAYS EACH CPU HAS BEEN UP,$SYSTEM.TOOLBOX.UPTIME L 5,RUN XCOM QUEUE MANAGER (XCOMQM),$SYSTEM.TACLLIB.XCOMQM L 6,SHOW ACTIVE/QUEUED XCOM TRANSFERS,XCOMINFO L 7,DISPLAY A USERS TACL SCREEN,:marks:utils:menus:cmdscripts:ENQ ?section :marks:utils:menus:menus:menu_default text TANDEM DEFAULT MAIN MENU (GENERIC) M 1,DEV/DRP ( \TD ) MENUS,:marks:utils:menus:runme :marks:utils:menus:menus:menu_default_TD M 2,PRODUCTION ( \NS ) MENUS,:marks:utils:menus:runme :marks:utils:menus:menus:menu_default_NS ?section :marks:utils:menus:menus:menu_default_TD text TANDEM DEFAULT MAIN MENU (DEV/DRP) F 1,NONSTOP NET/MASTER,NNM M 2,SYSTEM MONITORING,:marks:utils:menus:menus:menu_sysmon M 3,UTILITY MENU,:marks:utils:menus:menus:menu_utilities M M,MQ-SERIES APPLICATIONS,:marks:utils:menus:menus:menu_MQ_TD L I,INSTALLED IPM LOOKUP, :marks:utils:menus:cmdscripts:lookup_ipm M E,ERROR MESSAGES,:marks:utils:menus:menus:menu_HELPFE M D,DOCUMENTATION MENU,:marks:utils:menus:menus:menu_documents ?section :marks:utils:menus:menus:menu_default_NS text TANDEM DEFAULT MAIN MENU (PRODUCTION) F 1,NONSTOP NET/MASTER,NNM M 2,SYSTEM MONITORING,:marks:utils:menus:menus:menu_sysmon M 3,UTILITY MENU,:marks:utils:menus:menus:menu_utilities M M,MQ-SERIES APPLICATIONS,:marks:utils:menus:menus:menu_MQ_NS M E,ERROR MESSAGES,:marks:utils:menus:menus:menu_HELPFE M D,DOCUMENTATION MENU,:marks:utils:menus:menus:menu_documents ?section :menu alias :marks:utils:menus:_execute ?section :ispf alias == Make it easier to start the menus :marks:utils:menus:_execute == == Three procedures to interface with the online help macros == that need to be command line driven. == ?section :marks:utils:menus:menus:menu_HELPFE text ERROR MESSAGE QUERY SECTION L 1,GUARDIAN ERROR NUMBERS,:marks:utils:menus:cmdscripts:helpfe GUARDIAN L 2,SORT ERROR NUMBERS,:marks:utils:menus:cmdscripts:helpfe SORT L 3,X25AM ERROR NUMBERS,:marks:utils:menus:cmdscripts:helpfe X25 ?section :marks:utils:menus:cmdscripts:helpfe routine #frame #push :helpfe_type [#case [#argument/value :helpfe_type/ keyword/wordlist X25 SORT GUARDIAN/] | 1 | [#case [:helpfe_type] | SORT | :marks:utils:menus:cmdscripts:helpfe_default SORT | GUARDIAN| :marks:utils:menus:cmdscripts:helpfe_default GUARDIAN | X25 | :marks:utils:menus:cmdscripts:helpfe_x25 |OTHERWISE| == not possible but needed ] |OTHERWISE| == ignore it ] #unframe ?section :marks:utils:menus:cmdscripts:helpfe_x25 macro #frame #push :helpfe_errnum :helpfe_errtype cls #output #output /justify center/ [text_colour WHITE]FRONT END TO X25ERR MACRO #output [text_colour GREEN] #set :helpfe_errnum [#input ENTER ERROR NUMBER:] [#if NOT [#emptyv :helpfe_errnum] |then| #output #set :helpfe_errtype [#input ENTER ERROR TYPE (CLEAR, RESET OR RESTART):] cls [#case [:helpfe_errtype] | CLEAR | HELP X25AM [:helpfe_errnum] CLEAR | RESET | HELP X25AM [:helpfe_errnum] RESET | RESTART | HELP X25AM [:helpfe_errnum] RESTART |OTHERWISE| #output Invalid error type ([:helpfe_errtype]), no action ] |else| cls #output No error number provided, no action ] #unframe ?section :marks:utils:menus:cmdscripts:helpfe_default routine #frame #push :helpfe_errnum :helpfe_type [#if [#argument/value :helpfe_type/ keyword/wordlist GUARDIAN SORT/]] cls #output #output /justify center/ [text_colour WHITE]FRONT END TO HELP MACRO[text_colour GREEN] #output [text_colour GREEN] #set :helpfe_errnum [#input ENTER [:helpfe_type] ERROR NUMBER:] cls [#if NOT [#emptyv :helpfe_errnum] |then| HELP [:helpfe_type] [:helpfe_errnum] |else| #output No error number provided, no action ] #unframe ?section :marks:utils:menus:cmdscripts:lookup_ipm routine #frame #push :search_text cls #output #output /justify center/ [text_colour WHITE]IPM SEARCH SCREEN[text_colour GREEN] #output [text_colour GREEN] #set :search_text [#input ENTER SEARCH TEXT:] #output [text_colour WHITE] cls #output [text_colour WHITE] [#if NOT [#emptyv :search_text] |then| $DSMSCM.MARK.IPMINFO [:search_text] |else| #output No search text provided, no action ] #unframe ?section :marks:utils:menus:cmdscripts:ENQ macro == --------------------------------------------------------------------------- == Enquire on the screen buffer of a TACL process == --------------------------------------------------------------------------- :marks:utils:menus:cls #output /justify center/ [text_colour WHITE]TACL SCREEN BUFFER ENQUIRY #output #output #output [text_colour NORMAL]ENter the TACL process name of a logged on TACL process. #output The current screen the user is seeing will then be displayed on your terminal. #output #output If you do not enter a process name you will just exit this screen. #output #set :opt Z [#loop |while| [#match Z [:opt]] |do| #set :opt [#input [text_colour CYAN]Enter TACL process name:[text_colour NORMAL]~_] [#if NOT [#emptyv :opt] |then| [#if [#processexists [:opt]] |then| [#if [#match [#fileinfo/file/[#processinfo/programfile/[:opt]]] TACL] |then| #output x :marks:utils:menus:cls enquiry [:opt] |else| #output [text_colour RED][:opt] IS NOT A TACL PROGRAM[text_colour NORMAL]. #set :opt Z ] |else| #output [text_colour RED]PROCESS [:opt] DOES NOT EXIST[text_colour NORMAL]. #set :opt Z ] |else| #set :opt Y == nothing entered, just exit ] ]