]> bicyclesonthemoon.info Git - ott/aftertime/commitdiff
added epilogue loop (state=5) main
authorb <rowerynaksiezycu@gmail.com>
Sat, 14 Feb 2026 21:56:18 +0000 (22:56 +0100)
committerb <rowerynaksiezycu@gmail.com>
Sat, 14 Feb 2026 21:56:18 +0000 (22:56 +0100)
bot4.awk
frame.awk
info.awk
ong.awk
viewer.awk

index 26100008b207283fea1f2bceefd05b6756bc600c..3b81a6c1650314449a45993d69493b0a3a10ca1b 100644 (file)
--- a/bot4.awk
+++ b/bot4.awk
@@ -1,8 +1,7 @@
 #// bot4.awk
 #// The bot to post frames to the OTT
-#// 24.04.2021
 #// 
-#// Copyright (C) 2015, 2018-2019, 2021  Balthasar Szczepański
+#// Copyright (C) 2015, 2018-2019, 2021, 2025  Balthasar Szczepański
 #// 
 #// This program is free software: you can redistribute it and/or modify
 #// it under the terms of the GNU Affero General Public License as
@@ -129,10 +128,7 @@ END{
                exit 1
        }
        
-       
-       
-       if(state<2 && force=="" && f==last)
-       {
+       if (!((force != 0) || ((state ~ /^[235]$/) && (f <= last)) || ((state == 1) && (f < last)))) {
                print "Wrong state."
                exit 1
        }
index ab3d2273806df114fa476ac2b8aec2c6609d2d33..dd970e777cfc1ecd7157e4ae57bd4fa6a9feb475 100644 (file)
--- a/frame.awk
+++ b/frame.awk
@@ -1,8 +1,7 @@
 #// frame.awk\r
 #// Dynamic frame for the viewer\r
-#// 10.03.2019\r
 #// \r
-#// Copyright (C) 2015, 2018-2019  Balthasar Szczepański\r
+#// Copyright (C) 2015, 2018-2019, 2025  Balthasar Szczepański\r
 #// \r
 #// This program is free software: you can redistribute it and/or modify\r
 #// it under the terms of the GNU Affero General Public License as\r
@@ -46,139 +45,144 @@ BEGIN{
        }\r
 }\r
 {\r
-       file=1\r
+       file = 1\r
        gsub(/[\r\n]/, "", $0)\r
-       eq=index($0, "=")\r
-       \r
-       if($0 ~ /^sf-[0-9]+=/)\r
-       {\r
-               sf=1\r
-               i=int(substr($0, 4, eq-4))\r
-               if(i==f)\r
-                       this_sf= tolower(substr($0, eq+1))\r
-               if(i==f-1)\r
-                       prev_sf=tolower(substr($0, eq+1))\r
-                       \r
+       eq = index($0, "=")\r
+       ind = substr($0, 1, eq-1)\r
+       val = substr($0, eq+1)\r
+       \r
+       if ($0 ~ /^sf-[0-9]+=/) {\r
+               sf = 1\r
+               ind = "sf-"int(substr($0, 4, eq-4))\r
+               val = tolower(val)\r
        }\r
-       argtab[substr($0, 1, eq-1)]=substr($0, eq+1)\r
+       argtab[ind] = val\r
 }\r
 END{\r
        \r
        if (file=="")\r
                exit 1\r
        \r
-       if (sf=="")\r
-               s=""\r
-       else if(this_sf=="")\r
-               s=""\r
-       else if(s>this_sf && argtab["cfrt"]=="")\r
-               s=this_sf\r
-       \r
-       ongoing=int(argtab["ongoing"])\r
-       if(ongoing>0)\r
-       {\r
-               statefile= datapath argtab["story"]"/ongstate"\r
+       ongoing = int(argtab["ongoing"])\r
+       if (ongoing > 0) {\r
+               statefile = datapath argtab["story"] "/ongstate"\r
                getline temp < statefile\r
-               close(statefile)\r
+               close (statefile)\r
                \r
                split(temp, temptab, " ")\r
-               state=int(temptab[1])\r
-               last=int(temptab[2])\r
-               nextong=int(temptab[3])\r
-               ongfailcount=int(temptab[4])\r
+               state = int(temptab[1])\r
+               last = int(temptab[2])\r
+               nextong = int(temptab[3])\r
+               ongfailcount = int(temptab[4])\r
        }\r
-       else\r
-       {\r
-               last=int(argtab["last"])\r
-               state=3\r
-               nextong=0\r
-               ongfailcount=0\r
+       else {\r
+               last = int(argtab["last"])\r
+               state = 3\r
+               nextong = 0\r
+               ongfailcount = 0\r
        }\r
-       first=int(argtab["first"])\r
+       first = int(argtab["first"])\r
        \r
-       if(frame=="")\r
-       {\r
-               if(ongoing>0)\r
-               {\r
-                       f=last\r
-                       onlyframe=1\r
+       if (sf == "") {\r
+               s = ""\r
+               last_sf = ""\r
+               this_sf = ""\r
+               prev_sf = ""\r
+       }\r
+       else {\r
+               last_sf = argtab["sf-" last]\r
+               this_sf = argtab["sf-" f   ]\r
+               prev_sf = argtab["sf-"(f-1)]\r
+       }\r
+       \r
+       if (frame == "") {\r
+               if (ongoing > 0) {\r
+                       f = last\r
+                       s = last_sf\r
+                       onlyframe = 1\r
                }\r
-               else\r
-               {\r
-                       f=first\r
-                       onlyframe=""\r
+               else {\r
+                       f = first\r
+                       s = ""\r
+                       onlyframe = ""\r
                }\r
        }\r
        \r
-       if(f<first && argtab["cfrt"]=="")\r
-               f=first\r
+       cfrt = ""\r
+       invalid = ""\r
        \r
-       if(f>last && argtab["cfrt"]=="")\r
-               f=last\r
+       if (state !~ /^[1235]$/) {\r
+               cfrt = 1\r
+               invalid = 1\r
+       }\r
+       else if (f < first) {\r
+               f = first\r
+               s = ""\r
+               cfrt = 1\r
+       }\r
+       else if (f > last) {\r
+               f = last\r
+               s = last_sf\r
+               cfrt = 1\r
+       }\r
+       else if (sf != "") {\r
+               if ((s != "") && (this_sf == "")) {\r
+                       s = ""\r
+                       cfrt = 1\r
+               }\r
+               else if ((s != "") && (this_sf != "") && (s > this_sf)) {\r
+                       s = this_sf\r
+                       cfrt  =1\r
+               }\r
+       }\r
        \r
-       if(argtab["special"] != "")\r
-       {\r
-               specialfile=datapath argtab["story"]"/"sprintf(argtab["special"],f,s)\r
-               line=""\r
-               undertext=""\r
+       if (cfrt && (argtab["cfrt"] != "")) {\r
+       }\r
+       else if (invalid) {\r
+               print "Status: 404 Not Found"\r
+               print ""\r
+               exit 0\r
+       }\r
+       else if (argtab["special"] != "") {\r
+               specialfile = datapath argtab["story"] "/" sprintf(argtab["special"], f, s)\r
+               line = ""\r
+               undertext = ""\r
                \r
-               while((getline line < specialfile)>0)\r
-               {\r
+               while ((getline line < specialfile) > 0) {\r
                        gsub(/[\r\n]/, "", line)\r
                        \r
-                       if (line == "" && !undertext)\r
-                       {\r
-                               undertext=1\r
-                               argtab["text"]=""\r
+                       if ((line == "") && (!undertext)) {\r
+                               undertext = 1\r
+                               argtab["text"] = ""\r
                                continue\r
                        }\r
                        \r
-                       if (undertext)\r
-                       {\r
+                       if (undertext) {\r
                                argtab["text"] = argtab["text"] line "\n"\r
                        }\r
-                       else\r
-                       {\r
-                               \r
-                               eq=index(line, "=")\r
-                               argtab[substr(line, 1, eq-1)]=substr(line, eq+1)\r
+                       else {\r
+                               eq = index(line, "=")\r
+                               argtab[substr(line, 1, eq-1)] = substr(line, eq+1)\r
                        }\r
                }\r
                close (specialfile)\r
        }\r
        \r
-       framedir= (argtab["framedir"]!="" ? argtab["framedir"] : "/aftertime/"argtab["story"]"/")\r
-       # if(sf!="")\r
-       # {\r
-               frame= framedir sprintf(argtab["frame"(e>0 ? "-"e : "")],f,s)\r
-               if (system("[ -f " framepath frame" ]")!=0)\r
-                       frame= framedir sprintf(argtab["frame"],f,s)\r
-       # }\r
-       # else\r
-       # {\r
-               # s=""\r
-               # frame= framedir sprintf(argtab["frame"(e>0 ? "-"e : "")],f)\r
-               # if (system("[ -f " framepath frame" ]")!=0)\r
-                       # frame=framedir sprintf(argtab["frame"],f)\r
-       # }\r
-       \r
-       if(f==last && state==1)\r
-       {\r
-               print "2 "f" "nextong" "ongfailcount > statefile\r
-               close (statefile)\r
+       framedir = ((argtab["framedir"] != "") ? argtab["framedir"] : ("/aftertime/" argtab["story"]"/"))\r
+       if (cfrt && (argtab["cfrt"] != ""))\r
+               frame = framedir argtab["cfrt"]\r
+       else {\r
+               frame = framedir sprintf(argtab["frame"(e>0 ? "-"e : "")], f ,s)\r
+               if (system("[ -f " framepath frame" ]") != 0)\r
+                       frame = framedir sprintf(argtab["frame"], f , s)\r
        }\r
        \r
-       if((f>last || f<first || (this_sf!="" && s>this_sf)) || state==0 && argtab["cfrt"]!="")\r
-               frame= framedir argtab["cfrt"]\r
-       \r
-       if(state==0 && argtab["cfrt"]=="")\r
-       {\r
-               print "Status: 404 Not Found"\r
-               print ""\r
+       if ((f == last) && (state == 1)) {\r
+               print "2 " f " " nextong " " ongfailcount > statefile\r
+               close (statefile)\r
        }\r
        \r
        print "Status: 302 Temporal Relocation"\r
        print "Location: "frame\r
        print ""\r
-\r
 }\r
index 949a124a15850506fcbca961ba9613f78de9fcb3..7875681359f0105c95d9a80912f18e1c35b4d55c 100644 (file)
--- a/info.awk
+++ b/info.awk
@@ -1,8 +1,7 @@
 #// info.awk
 #// Info about an aftertime story.
-#// 10.03.2019
 #// 
-#// Copyright (C) 2015-2016, 2018-2019  Balthasar Szczepański
+#// Copyright (C) 2015-2016, 2018-2019, 2025  Balthasar Szczepański
 #// 
 #// This program is free software: you can redistribute it and/or modify
 #// it under the terms of the GNU Affero General Public License as
@@ -36,352 +35,321 @@ BEGIN{
        
        listfile = datapath "stories"
        stories=0
-       line=""
-       while((getline line < listfile)>0)
-       {
+       line = ""
+       while ((getline line < listfile) > 0) {
                gsub(/[\r\n]/,"",line)
-               eq=index(line,"=")
+               eq = index(line,"=")
                
-               storytab[stories]=substr(line, 1, eq-1)
-               storyname[stories]=substr(line, eq+1)
+               storytab[stories] = substr(line, 1, eq-1)
+               storyname[stories] = substr(line, eq+1)
                ++stories
        }
-       close(listfile)
+       close (listfile)
        
-       if(frame !~ /^[0-9]+[a-z]?$/){
-               noframe=1
+       if (frame !~ /^[0-9]+[a-z]?$/) {
+               noframe = 1
        }
-       else if(frame ~ /[a-zA-Z]$/)
-       {
-               f=int(substr(frame,1,length(frame)-1))
-               s=substr(frame, length(frame))
+       else if (frame ~ /[a-zA-Z]$/) {
+               f = int(substr(frame,1,length(frame)-1))
+               s = substr(frame, length(frame))
        }
-       else
-       {
-               f=int(frame)
-               s=""
+       else {
+               f = int(frame)
+               s = ""
+       }
+       e = int(enhance)
+       if (notice ~ /^[0-9]+$/)
+               n = int(notice)
+       else if (notice == "i") {
+               n = -1
+               noframe = ""
+               s = ""
        }
-       e=int(enhance)
-       if(notice~/^[0-9]+$/)
-               n=int(notice)
+       else
+               n = ""
+       
        timecmd | getline thistime
                close(timecmd)
        
-       lastalt=0
+       lastalt = 0
        
-       ch2num[0]=""
-       num2ch[""]=0
-       for(i=1;i<=26;++i)
-       {
-               ch=sprintf("%c",i+96)
-               num2ch[i]=ch
-               ch2num[ch]=i
+       ch2num[0] = ""
+       num2ch[""] = 0
+       for(i=1;i<=26;++i) {
+               ch = sprintf("%c",i+96)
+               num2ch[i] = ch
+               ch2num[ch] = i
        }
-       alttabsize=0
-       argtabsize=0
+       alttabsize = 0
+       argtabsize = 0
 }
 {
-       file=1
+       file = 1
        gsub(/[\r\n]/, "", $0)
-       eq=index($0, "=")
-       if($0 ~ /^[0-9]+=/)
-       {
-               i=int(substr($0, 1, eq-1))
-               alttab[alttabsize]=substr($0, eq+1)
-               alttabn[alttabsize]=i
+       eq = index($0, "=")
+       ind = substr($0, 1, eq-1)
+       val = substr($0, eq+1)
+       
+       if ($0 ~ /^[0-9]+=/) {
+               alttab [alttabsize] = val
+               alttabn[alttabsize] = int(ind)
                ++alttabsize
-               
-               # i=int(substr($0, 1, eq-1))
-               # if(f>=i && i>=lastalt)
-               # {
-                       # alt=substr($0, eq+1)
-                       # lastalt=i
-               # }
        }
-       else if($0 ~ /^sf-[0-9]+=/)
-       {
-               sf=1
-               i=int(substr($0, 4, eq-4))
-               if(i==f)
-                       this_sf= tolower(substr($0, eq+1))
-               if(i==f-1)
-                       prev_sf=tolower(substr($0, eq+1))
-                       
+       else if($0 ~ /^sf-[0-9]+=/) {
+               sf = 1
+               ind = "sf-"int(substr($0, 4, eq-4))
+               val = tolower(val)
        }
-       if (!(substr($0, 1, eq-1) in argtab))
-       {
-               argtabind[argtabsize]=substr($0, 1, eq-1)
+       if (!(ind in argtab)) {
+               argtabind[argtabsize] = ind
                ++argtabsize
        }
-       argtab[substr($0, 1, eq-1)]=substr($0, eq+1)
+       argtab[ind] = val
 }
 END{
-       
-       if (story=="" && f=="")
-       {
+       if ((story == "") && (f == "") && (n != -1)) {
                for (i=0; i<stories; ++i)
                        print storytab[i]"="storyname[i]
                exit 0
        }
        
-       
-       if (file=="")
+       if (file == "")
                exit 1
        
        ongoing=int(argtab["ongoing"])
-       if(ongoing>0)
-       {
+       if (ongoing > 0) {
                statefile= datapath argtab["story"]"/ongstate"
                getline temp < statefile
                close(statefile)
                
                split(temp, temptab, " ")
-               state=int(temptab[1])
-               last=int(temptab[2])
-               nextong=int(temptab[3])
-               ongfailcount=int(temptab[4])
+               state = int(temptab[1])
+               last = int(temptab[2])
+               nextong = int(temptab[3])
+               ongfailcount = int(temptab[4])
        }
-       else
-       {
-               last=int(argtab["last"])
-               state=3
+       else {
+               last = int(argtab["last"])
+               state = 3
+               nextong = 0
+               ongfailcount = 0
+       }
+       first = int(argtab["first"])
+       
+       if (sf == "") {
+               s = ""
+               last_sf = ""
+               this_sf = ""
+               prev_sf = ""
+       }
+       else {
+               last_sf = argtab["sf-" last]
+               this_sf = argtab["sf-" f   ]
+               prev_sf = argtab["sf-"(f-1)]
        }
-       first=int(argtab["first"])
        
-       if(noframe!=""){
-               if(ongoing>0)
-               {
-                       print "state="state
-                       print "last="last
-                       print "nextong="nextong
-                       print "ongfailcount="ongfailcount
+       if (noframe != "") {
+               if (ongoing > 0) {
+                       print "state=" state
+                       print "last=" last last_sf
+                       print "nextong=" nextong
+                       print "ongfailcount=" ongfailcount
+                       if ((state ~ /^[35]&/) && (argtab["loop"] != ""))
+                               print "loop=" argtab["loop"]
                }
-               for (i=0; i< argtabsize; ++i)
-               {
-                       if((argtabind[i] ~ /^[0-9]+$/)&&(ongoing>0))
-                       {
-                               j=int(argtabind[i])
-                               if(j<=last)
-                                       print argtabind[i]"="argtab[argtabind[i]]
+               if (state !~ /^[1235]$/)
+                       exit 0
+               for (i=0; i< argtabsize; ++i) {
+                       if ((argtabind[i] ~ /^[0-9]+$/) && (ongoing > 0)) {
+                               j = int(argtabind[i])
+                               if (j<=last)
+                                       print argtabind[i] "=" argtab[argtabind[i]]
                        }
-                       else if((argtabind[i] ~ /^sf-[0-9]+$/)&&(ongoing>0))
-                       {
-                               j=int(substr(argtabind[i],3))
-                               if(j<=last)
-                                       print argtabind[i]"="argtab[argtabind[i]]
+                       else if ((argtabind[i] ~ /^sf-[0-9]+$/) && (ongoing > 0)) {
+                               j = int(substr(argtabind[i], 4))
+                               if (j <= last)
+                                       print argtabind[i] "=" argtab[argtabind[i]]
                        }
-                       else if((argtabind[i] ~ /^(last|finalreplacetime|finalreplaceframe)$/)&&(ongoing>0))
-                       {
+                       else if ((argtabind[i] ~ /^(last|finalreplacetime|finalreplaceframe|loop)$/) && (ongoing > 0)) {
                        }
                        else
-                               print argtabind[i]"="argtab[argtabind[i]]
+                               print argtabind[i] "=" argtab[argtabind[i]]
                }
+               exit 0
        }
-       else{
-               if(f>last || f<first || (this_sf!="" && s>this_sf))
-                       exit 0
-               
-               if(this_sf=="")
-                       s=""
-               
-               if (s!="")
-               {
-                       if(argtab[s] != "")
-                               s2=argtab[s]
-                       else
-                               s2=s
-                       n=-1
-               }
+       
+       if (state !~ /^[1235]$/)
+               exit 0
                
-               if(n>0)
-               {
-                       noticepost=noticepath argtab["story"]"-"sprintf("%04u",f)"-"sprintf("%02u",n)
-                       noticetabsize=0
-                       for(j=0;(getline line < noticepost)>0;++j)
-                       {
-                               gsub(/[\r\n]/,"",line)
-                               eq=index(line,"=")
-                               noticeind=substr(line, 1, eq-1)
-                               noticeval=substr(line, eq+1)
-                               
-                               if (!(noticeind in noticetab))
-                               {
-                                       noticetabind[noticetabsize]=noticeind
-                                       ++noticetabsize
-                               }                       
-                               noticetab[noticeind]=noticeval
-                               
-                       }
-                       if(j==0)
-                               exit 0
-                       nposttime=noticetab["y"]noticetab["m"]noticetab["d"]noticetab["h"]
-                       if (thistime<nposttime)
-                               exit 0
        
-                       for(j=0; j<noticetabsize; ++j)
-                       {
-                               if(noticetabind[j] !~ /^(timenumber|key|brtext|BBHTML|BB|message|HTML|debug|username_h|subject_h|h|d|m|y)$/)
-                                       print noticetabind[j]"="noticetab[noticetabind[j]]
-                       }
-                       if("subject_h"in noticetab)
-                               print"subject="unhtml(noticetab["subject_h"])
-                       print "posttime="sprintf("%04u%02u%02u%02u00",noticetab["y"],noticetab["m"],noticetab["d"],noticetab["h"])
-                       print ""
-                       if("brtext" in noticetab)
-                       {
-                               gsub(/\[br\]/,"\n",noticetab["brtext"])
-                               print noticetab["brtext"]
-                       }
-                       else if ("BB" in noticetab)
-                               print unhtml(noticetab["BB"])
+       if (n == -1) {
+       }
+       else if ((f>last) || (f<first) || ((this_sf=="") && (s!="")) || ((this_sf!="") && (s!="") && (s>this_sf)))
+               exit 0
+       
+       if (s != "") {
+               if(argtab[s] != "")
+                       s2 = argtab[s]
+               else
+                       s2 = s
+       }
+       
+       if (n != "") {
+               if (n == -1)
+                       noticepost = noticepath argtab["story"] "-i"
+               else
+                       noticepost = noticepath argtab["story"] "-" sprintf("%04u%s",f,s) "-" sprintf("%02u",n)
+               noticetabsize = 0
+               for (j=0; (getline line < noticepost)>0; ++j) {
+                       gsub(/[\r\n]/,"",line)
+                       eq = index(line,"=")
+                       noticeind = substr(line, 1, eq-1)
+                       noticeval = substr(line, eq+1)
+                       
+                       if (!(noticeind in noticetab)) {
+                               noticetabind[noticetabsize] = noticeind
+                               ++noticetabsize
+                       }                       
+                       noticetab[noticeind] = noticeval
+                       
+               }
+               if (j == 0)
                        exit 0
+               nposttime = noticetab["y"] noticetab["m"] noticetab["d"] noticetab["h"]
+               if (thistime < nposttime)
+                       exit 0
+
+               for (j=0; j<noticetabsize; ++j) {
+                       if (noticetabind[j] !~ /^(timenumber|key|brtext|BBHTML|BB|message|HTML|debug|username_h|subject_h|h|d|m|y)$/)
+                               print noticetabind[j] "=" noticetab[noticetabind[j]]
                }
+               if ("subject_h" in noticetab)
+                       print "subject=" unhtml(noticetab["subject_h"])
+               print "posttime="sprintf("%04u%02u%02u%02u00",noticetab["y"],noticetab["m"],noticetab["d"],noticetab["h"])
+               print ""
+               if ("brtext" in noticetab) {
+                       gsub(/\[br\]/,"\n",noticetab["brtext"])
+                       print noticetab["brtext"]
+               }
+               else if ("BB" in noticetab)
+                       print unhtml(noticetab["BB"])
+               exit 0
+       }
+       
+       if (argtab["special"] != "") {
+               specialfile = datapath argtab["story"] "/" sprintf(argtab["special"], f, s)
+               line = ""
+               undertext = ""
                
-               if(argtab["special"] != "")
-               {
-                       specialfile=datapath argtab["story"]"/"sprintf(argtab["special"],f,s)
-                       line=""
-                       undertext=""
+               while ((getline line < specialfile) > 0) {
+                       gsub(/[\r\n]/, "", line)
                        
-                       while((getline line < specialfile)>0)
-                       {
-                               gsub(/[\r\n]/, "", line)
-                               
-                               if (line == "" && !undertext)
-                               {
-                                       undertext=1
-                                       argtab["text"]=""
-                                       continue
-                               }
-                               
-                               if (undertext)
-                               {
-                                       argtab["text"] = argtab["text"] line "\n"
-                               }
-                               else
-                               {
-                                       eq=index(line, "=")
-                                       argtab[substr(line, 1, eq-1)]=substr(line, eq+1)
-                               }
+                       if (line == "" && (!undertext)) {
+                               undertext = 1
+                               argtab["text"] = ""
+                               continue
                        }
-                       close (specialfile)
-               }
-               
-               ongtimefile= datapath argtab["story"]"/ongtime"
-               
-               while((getline line < ongtimefile)>0)
-               {
-                       ongind=index(line," ")
-                       ongft=substr(line,1,ongind-1)
-                       ongt=substr(line,ongind+1,4) substr(line,ongind+6,2) substr(line,ongind+9,2) substr(line,ongind+12,2) substr(line,ongind+15,2)
-                       if(ongft ~ /^[0-9]+[a-z]$/)
-                               ongf=int(substr(ongft,1,ongind-2)) substr(ongft,ongind-1,1)
-                       else
-                               ongf=int(ongft)
                        
-                       if(ongf==(f s) && ongt ~ /^[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]/)
-                               ongtime=ongt
-               }
-               close(ongtimefile)
-               
-               if ("alt" in argtab)
-                       alt=argtab["alt"]
-               else
-               {
-                       for(i=0; i<alttabsize; ++i)
-                       {
-                               if(f>=alttabn[i] && alttabn[i]>=lastalt)
-                               {
-                                       alt=alttab[i]
-                                       lastalt=alttabn[i]
-                               }
+                       if (undertext) {
+                               argtab["text"] = argtab["text"] line "\n"
+                       }
+                       else {
+                               eq = index(line, "=")
+                               argtab[substr(line, 1, eq-1)] = substr(line, eq+1)
                        }
                }
-               
-               if(argtab["number"]!="")
-                       numberformat=argtab["number"]
+               close (specialfile)
+       }
+       
+       ongtimefile = datapath argtab["story"] "/ongtime"
+       
+       while ((getline line < ongtimefile) > 0) {
+               ongind = index(line, " ")
+               ongft = substr(line, 1, ongind-1)
+               ongt = substr(line, ongind+1, 4) substr(line, ongind+6, 2) substr(line, ongind+9, 2) substr(line, ongind+12, 2) substr(line, ongind+15, 2)
+               if (ongft ~ /^[0-9]+[a-z]$/)
+                       ongf = int(substr(ongft, 1, ongind-2)) substr(ongft, ongind-1, 1)
                else
-               {
-                       # if (sf!="")
-                               numberformat="%u%s"
-                       # else
-                               # numberformat="%u"
-               }
-               
-               framedir= "/aftertime/"argtab["story"]"/"
-               # if(sf!="")
-               # {
-                       title=sprintf(argtab["title"(e>0 ? "-"e : "")],f,s2)
-                       frame=framedir sprintf(argtab["frame"(e>0 ? "-"e : "")],f,s)
-                       otherviewerurl=sprintf(argtab["otherviewerurl"], f+int(argtab["othervieweroffset"]),s2)
-               # }
-               # else
-               # {
-                       # s=""
-                       # title=sprintf(argtab["title"(e>0 ? "-"e : "")],f)
-                       # frame= framedir sprintf(argtab["frame"(e>0 ? "-"e : "")],f)
-                       # otherviewerurl=sprintf(argtab["otherviewerurl"], f+int(argtab["othervieweroffset"]))
-               # }
-               
-               if (system("[ -f " framepath frame" ]")!=0)
-                       exit 0
-               
-               print "story="argtab["story"]
-               print "f="f s
-               print "e="e
-               print "frame="frame
-               print "alt="alt
-               print "title="title
-               if(ongtime!="")
-                       print "ongtime="ongtime
-               
-               max_enhance=int(argtab["enhance"])
-               
+                       ongf = int(ongft)
                
-               if(max_enhance>0)
-               {
-                       for(i=0;i<=max_enhance;++i)
-                       {
-                               # if(sf!="")
-                                       enhancedframe = framedir sprintf(argtab["frame"(i>0?"-"i:"")],f,s)
-                               # else
-                                       # enhancedframe = framedir sprintf(argtab["frame"(i>0?"-"i:"")],f)
-                               
-                               if (system("[ -f " framepath enhancedframe" ]")==0)
-                                       print "enhance-"i"="argtab["enhance-"i]
+               if ((ongf == (f s)) && (ongt ~ /^[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]/))
+                       ongtime = ongt
+       }
+       close (ongtimefile)
+       
+       if ("alt" in argtab)
+               alt = argtab["alt"]
+       else {
+               for(i=0; i<alttabsize; ++i) {
+                       if ((f >= alttabn[i]) && (alttabn[i] >= lastalt)) {
+                               alt = alttab[i]
+                               lastalt = alttabn[i]
                        }
                }
-               
-               for(i=1; i<=99; ++i)
-               {
-                       noticepost=noticepath argtab["story"]"-"sprintf("%04u",f)"-"sprintf("%02u",i)
-                       for(j=0;(getline line < noticepost)>0;++j)
-                       {
-                               gsub(/[\r\n]/,"",line)
-                               eq=index(line,"=")
-                               noticetab[substr(line, 1, eq-1)]=substr(line, eq+1)
-                       }
-                       if(j==0)
-                               break;
-                       nposttime=noticetab["y"]noticetab["m"]noticetab["d"]noticetab["h"]
-                       if (thistime<nposttime)
-                               break;
-                       print "notice-"i"=yes"
+       }
+       
+       if (argtab["number"] != "")
+               numberformat = argtab["number"]
+       else {
+               # if (sf != "")
+                       numberformat = "%u%s"
+               # else
+                       # numberformat = "%u"
+       }
+       
+       framedir = ((argtab["framedir"] != "") ? argtab["framedir"] : ("/aftertime/" argtab["story"]"/"))
+       title = sprintf(argtab["title" (e>0 ? "-"e : "")], f, s2)
+       frame = framedir sprintf(argtab["frame"(e>0 ? "-"e : "")], f, s)
+       otherviewerurl = sprintf(argtab["otherviewerurl"], f + int(argtab["othervieweroffset"]), s2)
+       
+       if (system("[ -f " framepath frame" ]") != 0)
+               exit 0
+       
+       print "story=" argtab["story"]
+       print "f=" f s
+       print "e=" e
+       print "frame=" frame
+       print "alt=" alt
+       print "title=" title
+       if (ongtime != "")
+               print "ongtime=" ongtime
+       
+       max_enhance = int(argtab["enhance"])
+       
+       if (max_enhance>0) {
+               for (i=0; i<=max_enhance; ++i) {
+                               enhancedframe = framedir sprintf(argtab["frame"(i>0?"-"i:"")],f,s)
+                       if (system("[ -f " framepath enhancedframe" ]") == 0)
+                               print "enhance-" i "=" argtab["enhance-"i]
                }
-               
-               if(argtab["otherviewerurl"]!="")
-                       print "otherviewerurl="otherviewerurl
-               
-               if(argtab["BBHTML"]!="")
-                       print "BBHTML="argtab["BBHTML"]
-               if(argtab["HTML"]!="")
-                       print "HTML="argtab["HTML"]
-               
-               if (argtab["text"] != "")
-               {
-                       print""
-                       print argtab["text"]
+       }
+       
+       for (i=0; i<=99; ++i) {
+               noticepost = noticepath argtab["story"] "-" sprintf("%04u%s",f,s) "-" sprintf("%02u",i)
+               for(j=0; (getline line < noticepost) > 0; ++j) {
+                       gsub(/[\r\n]/,"",line)
+                       eq = index(line,"=")
+                       noticetab[substr(line, 1, eq-1)] = substr(line, eq+1)
                }
+               if (j == 0)
+                       break;
+               nposttime = noticetab["y"] noticetab["m"] noticetab["d"] noticetab["h"]
+               if (thistime < nposttime)
+                       break;
+               print "notice-" i "=yes"
+       }
+       
+       if (argtab["otherviewerurl"] != "")
+               print "otherviewerurl=" otherviewerurl
+       
+       if (argtab["BBHTML"] != "")
+               print "BBHTML=" argtab["BBHTML"]
+       if (argtab["HTML"] != "")
+               print "HTML=" argtab["HTML"]
+       
+       if (argtab["text"] != "") {
+               print ""
+               print argtab["text"]
        }
        
 }
diff --git a/ong.awk b/ong.awk
index f6dc1abf5397944a343545c041f56bc525b6d261..d60ea77ed7056d4fcf1db21fdbcd4d27cb1d1b00 100644 (file)
--- a/ong.awk
+++ b/ong.awk
@@ -1,8 +1,7 @@
 #// ong.awk\r
 #// The bot to ONG new frames to the viewer.\r
-#// 28.08.2020\r
 #// \r
-#// Copyright (C) 2015, 2018-2020  Balthasar Szczepański\r
+#// Copyright (C) 2015, 2018-2020, 2025  Balthasar Szczepański\r
 #// \r
 #// This program is free software: you can redistribute it and/or modify\r
 #// it under the terms of the GNU Affero General Public License as\r
 \r
 \r
 BEGIN{\r
-       FS=""\r
-       framepath="/eizm/www/time/"\r
-       datapath="/eizm/data/aftertime/"\r
+       FS = ""\r
+       framepath = "/eizm/www/time/"\r
+       datapath = "/eizm/data/aftertime/"\r
        \r
-       # timecmd="date +\"%H\""\r
-       timecmd2="date -u +\"%Y-%m-%d %H:%M:%S\""\r
-       timecmd3="date -u +\"%s\""\r
+       # timecmd = "date +\"%H\""\r
+       timecmd2 = "date -u +\"%Y-%m-%d %H:%M:%S\""\r
+       timecmd3= " date -u +\"%s\""\r
        \r
-       cp="/bin/cp"\r
-       mawk="/usr/bin/mawk"\r
-       bot4awk="/eizm/pro/aftertime/bot4.awk"\r
-       chmod="/bin/chmod"\r
-       npb="/eizm/pro/ong1/npb"\r
+       cp = "/bin/cp"\r
+       mawk = "/usr/bin/mawk"\r
+       bot4awk = "/eizm/pro/aftertime/bot4.awk"\r
+       chmod = "/bin/chmod"\r
+       npb = "/eizm/pro/ong1/npb"\r
        \r
        timecmd2 | getline thistime2\r
                close(timecmd2)\r
@@ -42,300 +41,313 @@ BEGIN{
                \r
        thistime3 -= thistime3%3600\r
        \r
-       for(i=0;i<256;++i)\r
-       {\r
-               ch=sprintf("%c",i)\r
-               hex=sprintf("%02X",i)\r
-               dec=sprintf("%u",i)\r
-               ch2hex[ch]=hex\r
-               ch2dec[ch]=dec\r
+       for (i=0; i<256; ++i) {\r
+               ch = sprintf("%c",i)\r
+               hex = sprintf("%02X",i)\r
+               dec = sprintf("%u",i)\r
+               ch2hex[ch] = hex\r
+               ch2dec[ch] = dec\r
        }\r
 }\r
 {\r
-       file=1\r
+       file = 1\r
        gsub(/[\r\n]/, "", $0)\r
-       eq=index($0, "=")\r
+       eq = index($0, "=")\r
        \r
-       argtab[substr($0, 1, eq-1)]=substr($0, eq+1)\r
+       argtab[substr($0, 1, eq-1)] = substr($0, eq+1)\r
 }\r
 END{\r
        \r
        print ""\r
-       print thistime2" "argtab ["story"]\r
+       print thistime2 " " argtab["story"]\r
        \r
-       if (file=="")\r
-       {\r
+       if (file == "") {\r
                print "No data."\r
                exit 1\r
        }\r
        \r
-       if(int(argtab["ongoing"])!=1)\r
-       {\r
+       if (int(argtab["ongoing"]) != 1) {\r
                print "story is not onged from here."\r
                exit 1\r
        }\r
        \r
        # # replace with actual better conditions\r
-       # if(int(thistime) % int(argtab["ongtime"]) != 0)\r
-       # {\r
+       # if (int(thistime) % int(argtab["ongtime"]) != 0) {\r
                # print "Not ongtime yet."\r
                # exit 1\r
        # }\r
        \r
-       framedir = "aftertime/"argtab["story"]"/"\r
+       framedir = "aftertime/" argtab["story"] "/"\r
        \r
-       temp=""\r
-       statefile= datapath argtab["story"]"/ongstate"\r
+       temp = ""\r
+       statefile = datapath argtab["story"] "/ongstate"\r
        getline temp < statefile\r
        close(statefile)\r
        \r
        split(temp, temptab, " ")\r
-       state=int(temptab[1])\r
-       last=int(temptab[2])\r
-       nextong=int(temptab[3])\r
-       ongfailcount=int(temptab[4])\r
-       enhance=int(argtab["enhance"])\r
+       state = int(temptab[1])\r
+       last = int(temptab[2])\r
+       nextong = int(temptab[3])\r
+       ongfailcount = int(temptab[4])\r
+       enhance = int(argtab["enhance"])\r
        \r
-       specialtab[0]=""\r
-       effectivetab[0]=""\r
+       specialtab[0] = ""\r
+       effectivetab[0] = ""\r
        \r
-       # temp=""\r
-       # updatefile= datapath argtab["story"]"/update"\r
+       # temp = ""\r
+       # updatefile = datapath argtab["story"] "/update"\r
        # getline temp < updatefile\r
        # close(updatefile)\r
        \r
-       timefile= datapath argtab["story"]"/ongtime"\r
+       timefile = datapath argtab["story"] "/ongtime"\r
        \r
-       if (state == 1 || state ==2)\r
-       {\r
-               updatefail=""\r
-               temp=""\r
-               updatefile= datapath argtab["story"]"/update"\r
-               # timefile= datapath argtab["story"]"/ongtime"\r
+       if (state == 1 || state == 2 || state == 5) {\r
+               updatefail = ""\r
+               temp = ""\r
+               updatefile = datapath argtab["story"] "/update"\r
+               # timefile = datapath argtab["story"] "/ongtime"\r
                \r
-               updated=""\r
+               updated = ""\r
                \r
-               while((getline temp < updatefile)>0)\r
-               {\r
+               while ((getline temp < updatefile)>0) {\r
                        if (temp !~ /^([0-9]+[a-z]?)|(c)$/)\r
                                continue\r
                        \r
-                       if(timeread=="")\r
-                       {\r
-                               while((getline line < timefile)>0)\r
-                               {\r
-                                       ongind=index(line," ")\r
-                                       ongft=substr(line,1,ongind-1)\r
-                                       ongt=substr(line,ongind+1)\r
+                       if (timeread == "") {\r
+                               while ((getline line < timefile) > 0) {\r
+                                       ongind = index(line," ")\r
+                                       ongft = substr(line,1,ongind-1)\r
+                                       ongt = substr(line,ongind+1)\r
                                        \r
-                                       if(ongft ~ /^[0-9]+[a-z]$/)\r
-                                               ongf=int(substr(ongft,1,ongind-2)) substr(ongft,ongind-1,1)\r
+                                       if (ongft ~ /^[0-9]+[a-z]$/)\r
+                                               ongf = int(substr(ongft,1,ongind-2)) substr(ongft,ongind-1,1)\r
                                        else\r
-                                               ongf=int(ongft)\r
+                                               ongf = int(ongft)\r
                                        \r
-                                       timetab[ongft]=ongt\r
+                                       timetab[ongft] = ongt\r
                                }\r
                                close(timefile)\r
-                               timeread=1\r
+                               timeread = 1\r
                        }\r
                        \r
-                       if(temp=="c")\r
-                       {\r
+                       if (temp == "c") {\r
                                print "Update CFRT."\r
-                               if (argtab["cfrt"]=="")\r
-                               {\r
+                               if (argtab["cfrt"] == "") {\r
                                        print "There is no cfrt frame."\r
                                        continue\r
                                }\r
-                               inframe[0]= datapath argtab["story"]"/"argtab["cfrt"]\r
+                               inframe[0] = datapath argtab["story"] "/" argtab["cfrt"]\r
                                \r
-                               frame[0]= framepath framedir argtab["cfrt"]\r
+                               frame[0] = framepath framedir argtab["cfrt"]\r
                                \r
-                               cpcmd[0] = cp" "inframe[0]" "frame[0]\r
-                               chmodcmd[0] = chmod" +r "frame[0]\r
+                               cpcmd[0] = cp " " inframe[0] " " frame[0]\r
+                               chmodcmd[0] = chmod " +r " frame[0]\r
                        }\r
-                       else\r
-                       {\r
-                               if (temp ~ /[a-z]$/)\r
-                               {\r
-                                       i=int(substr(temp,1,length(temp)-1))\r
-                                       j=substr(temp, length(temp))\r
+                       else {\r
+                               if (temp ~ /[a-z]$/) {\r
+                                       i = int(substr(temp, 1, length(temp)-1))\r
+                                       j = substr(temp, length(temp))\r
                                }\r
-                               else\r
-                               {\r
+                               else {\r
                                        i = int(temp)\r
                                        j = ""\r
                                }\r
                                \r
-                               print "Update frame "i j"."\r
+                               print "Update frame " i j "."\r
                                \r
-                               if(argtab["special"] != "")\r
-                               {\r
-                                       specialfile=datapath argtab["story"]"/"sprintf(argtab["special"],i,j)\r
-                                       readspecialfile(specialfile,argtab,specialtab,effectivetab)\r
+                               if (argtab["special"] != "") {\r
+                                       specialfile = datapath argtab["story"] "/" sprintf(argtab["special"], i, j)\r
+                                       readspecialfile(specialfile, argtab, specialtab, effectivetab)\r
                                }\r
-                               else\r
-                               {\r
-                                       readspecialfile("",argtab,specialtab,effectivetab)\r
+                               else {\r
+                                       readspecialfile("", argtab, specialtab, effectivetab)\r
                                }\r
-                               if ((i < int(argtab["first"]))||(i > last)) \r
-                               {\r
+                               if ((i < int(argtab["first"])) || (i > last)) {\r
                                        print (i j" not onged yet.")\r
                                        continue\r
                                }\r
                                \r
-                               if(j!="")\r
-                               {\r
-                                       if(argtab["sf-"i]=="")\r
-                                       {\r
+                               if (j != "") {\r
+                                       if (argtab["sf-"i] == "") {\r
                                                print (i" doesn't have meteor frames.")\r
                                                continue\r
                                        }\r
-                                       else if(j > argtab["sf-"i])\r
+                                       else if (j > argtab["sf-"i])\r
                                        {\r
-                                               print (j" is not a meteor frame of "i".")\r
+                                               print (j" is not a meteor frame of " i ".")\r
                                                continue\r
                                        }\r
-                                       \r
                                }\r
-                               for (k=0; k<=enhance; ++k)\r
-                               {\r
-                                       k2=(k>0)?("-"k):""\r
-                                       inframe[k]= datapath argtab["story"]"/"sprintf(effectivetab["inframe"k2],i,j)\r
+                               for (k=0; k<=enhance; ++k) {\r
+                                       k2 = (k>0) ? ("-"k) : ""\r
+                                       inframe[k] = datapath argtab["story"] "/" sprintf(effectivetab["inframe"k2], i, j)\r
                                        \r
-                                       frame[k]= framepath framedir sprintf(effectivetab["frame"k2],i,j)\r
-                                       npbframe[k]= framepath framedir sprintf(effectivetab["npbframe"k2],i,j)\r
+                                       frame[k] = framepath framedir sprintf(effectivetab["frame"k2], i, j)\r
+                                       npbframe[k] = framepath framedir sprintf(effectivetab["npbframe"k2], i, j)\r
                                        \r
-                                       npbcmd[k]= npb" "inframe[k]" "npbframe[k]" q"\r
-                                       cpcmd[k] = cp" "inframe[k]" "frame[k]\r
-                                       chmodcmd[k] = chmod" +r "frame[k]\r
+                                       npbcmd[k] = npb " " inframe[k] " " npbframe[k] " q"\r
+                                       cpcmd[k] = cp " " inframe[k] " " frame[k]\r
+                                       chmodcmd[k] = chmod " +r " frame[k]\r
                                }\r
-                               if (specialtab["text"]!="")\r
-                               {\r
-                                       specialtab["HTML"]=bb2html(specialtab["text"])\r
-                                       writespecialfile(specialfile,specialtab)\r
+                               if (specialtab["text"] != "") {\r
+                                       specialtab["HTML"] = bb2html(specialtab["text"])\r
+                                       writespecialfile(specialfile, specialtab)\r
                                        # print debug\r
                                }\r
                        }\r
                        \r
-                       if(temp!="c" && timetab[sprintf("%04u%s",i,j)]=="")\r
-                       {\r
-                               print sprintf("%04u%s",i,j)" "thistime2 >> timefile\r
+                       if (temp != "c" && timetab[sprintf("%04u%s",i,j)] == "") {\r
+                               print sprintf("%04u%s", i, j) " " thistime2 >> timefile\r
                                close(timefile)\r
-                               timetab[sprintf("%04u%s",i,j)]=thistime2\r
+                               timetab[sprintf("%04u%s", i, j)] = thistime2\r
                        }\r
                        \r
-                       for(k=0; k<=enhance; ++k)\r
-                       {\r
-                               k2=(k>0)?("-"k):""\r
+                       for (k=0; k<=enhance; ++k) {\r
+                               k2 = (k>0) ? ("-"k) : ""\r
                                \r
-                               if ((system("[ -f " inframe[k]" ]")!=0)&&(k>0))\r
+                               if ((system("[ -f " inframe[k]" ]") != 0) && (k > 0))\r
                                        continue\r
                                \r
-                               if((argtab["npbframe"]!="") && (temp!="c"))\r
-                               {\r
-                                       if(system(npbcmd[k])!=0)\r
-                                       {\r
-                                               print i j k2" NewpixbOTTification failed."\r
-                                               updatefail=1\r
+                               if ((argtab["npbframe"] != "") && (temp != "c")) {\r
+                                       if (system(npbcmd[k]) != 0) {\r
+                                               print i j k2 " NewpixbOTTification failed."\r
+                                               updatefail = 1\r
                                                break\r
                                        }\r
                                }\r
-                               if(system(cpcmd[k])!=0)\r
-                               {\r
+                               if (system(cpcmd[k]) != 0) {\r
                                        print i j k2" Upload failed."\r
                                        updatefail=1\r
                                        break\r
                                }\r
-                               if(system(chmodcmd[k])!=0)\r
-                               {\r
+                               if (system(chmodcmd[k])!= 0) {\r
                                        print "Chmod failed."\r
                                        updatefail=1\r
                                        break\r
                                }\r
-                               if(temp=="c")\r
-                               {\r
+                               if (temp == "c") {\r
                                        break\r
                                }\r
                        }\r
-                       if (updatefail)\r
-                       {\r
+                       if (updatefail) {\r
                                break #come up with other aproach\r
                        }\r
-                       updated=1\r
+                       updated = 1\r
                        print "Updated."\r
                }\r
                close(updatefile)\r
-               if (!updatefail && updated)\r
-               {\r
+               if (!updatefail && updated) {\r
                        print "" > updatefile\r
                        close(updatefile)\r
                }\r
        }\r
        \r
-       firstong=""\r
-       if (state==4) {\r
+       firstong = ""\r
+       \r
+       if (state == 3) {\r
+               if (argtab["last"] == "")\r
+                       state = 2\r
+               else if (int(argtab["last"]) > last)\r
+                       state = 2\r
+               else if (argtab["loop"])\r
+                       state = 5\r
+               if (state != 3) {\r
+                       if (thistime3 >= nextong)\r
+                               nextong = getnextongtime()\r
+                       print sprintf("%u %u %u 0", state, last, nextong) > statefile\r
+                       close (statefile)\r
+                       if (state == 5)\r
+                               print "Back to epilogue loop."\r
+                       else\r
+                               print "Back to onging."\r
+               }\r
+       }\r
+       if (state == 4) {\r
                print "Time to start onging."\r
                firstong=1\r
                nextong=0\r
-       }       \r
-       else if(state<1 || state>2)\r
-       {\r
+       }\r
+       else if (state != 1 && state != 2 && state != 5) {\r
                print "Onging not active."\r
                exit 1\r
        }\r
-       else if(thistime3<nextong)\r
-       {\r
+       else if (thistime3 < nextong) {\r
                print sprintf("Wait until %s.",nextong)\r
                exit 1\r
        }\r
-       else if (state==1) {\r
-               # nextong = thistime3 + int(argtab["ongtime"])*3600\r
+       else if (state == 1) {\r
                nextong = getnextongtime()\r
-               print sprintf("1 %u %u %u",last,nextong,ongfailcount) > statefile\r
-               close(statefile)\r
+               print sprintf("1 %u %u %u",last, nextong, ongfailcount) > statefile\r
+               close (statefile)\r
                print "Nobody saw frame "last" yet. Wait until "nextong"."\r
                exit 1\r
        }\r
-       \r
-       if(thistime3<nextong)\r
-       {\r
-               print sprintf("Wait until %s.",nextong)\r
-               exit 1\r
+       else if (state == 5) {\r
+               ongfailcount = 0\r
+               if (argtab["loop"]=="")\r
+                       state = 2\r
+               else if (argtab["last"]=="")\r
+                       state = 2\r
+               else if (int(argtab["last"]) > last)\r
+                       state = 2\r
+               if (state != 2) {\r
+                       nextong = getnextongtime()\r
+                       print sprintf("5 %u %u 0",last, nextong) > statefile\r
+                       close (statefile)\r
+                       print "Still looping. Wait until "nextong"."\r
+                       exit 1\r
+               }\r
+               if ((argtab["last"] != "") && (last >= argtab["last"])) {\r
+                       print "No looping; T** **d."\r
+                       print sprintf("3 %u %u 0",last, nextong) > statefile\r
+                       close (statefile)\r
+                       exit 0\r
+               }\r
+               print sprintf("2 %u %u 0",last, nextong) > statefile\r
+               close (statefile)\r
+               print "End looping; back to onging."\r
        }\r
        \r
        if (firstong)\r
                f = int(argtab["first"])\r
        else\r
-               f=last+1\r
-       if(argtab["last"]!="")\r
-       {\r
-               if (f==int(argtab["last"]))\r
-               {\r
-                       print "T** **d."\r
-                       nextstate="3"\r
+               f = last + 1\r
+       if (argtab["last"] != "") {\r
+               if (f >= int(argtab["last"])) {\r
+                       if (argtab["loop"] == "") {\r
+                               print "T** **d."\r
+                               nextstate = "3"\r
+                       }\r
+                       else if (f > int(argtab["last"])) {\r
+                               nextong = getnextongtime()\r
+                               print sprintf("5 %u %u 0", int(argtab["last"]), nextong) > statefile\r
+                               close(statefile)\r
+                               print "Epilogue loop."\r
+                               exit 1\r
+                       }\r
+                       else {\r
+                               print "Epilogue loop."\r
+                               nextstate = "2"\r
+                       }\r
                }\r
                else\r
-                       nextstate="1"\r
+                       nextstate = "1"\r
        }\r
        else\r
-               nextstate="1"\r
+               nextstate = "1"\r
        \r
-       if(firstong && argtab["cfrt"]!="")\r
-       {\r
+       if (firstong && argtab["cfrt"] != "") {\r
                inframe[0]= datapath argtab["story"]"/"argtab["cfrt"]\r
                frame[0]= framepath framedir argtab["cfrt"]\r
                \r
                cpcmd[0] = cp" "inframe[0]" "frame[0]\r
                chmodcmd[0] = chmod" +r "frame[0]\r
                \r
-               if(system(cpcmd[0])!=0)\r
-               {\r
+               if (system(cpcmd[0]) != 0) {\r
                        print "CFRT upload failed."\r
                        exit 1\r
                }\r
-               if(system(chmodcmd[0])!=0)\r
-               {\r
+               if (system(chmodcmd[0]) != 0) {\r
                        print "CFRT chmod failed."\r
                        exit 1\r
                }\r
@@ -343,43 +355,36 @@ END{
        }\r
        \r
        print "ONG frame "f"."\r
-       \r
-       if(argtab["special"] != "")\r
-       {\r
-               specialfile=datapath argtab["story"]"/"sprintf(argtab["special"],f,"")\r
-               readspecialfile(specialfile,argtab,specialtab,effectivetab)\r
+\r
+       if (argtab["special"] != "") {\r
+        specialfile = datapath argtab["story"] "/" sprintf(argtab["special"], f, "")\r
+               readspecialfile(specialfile, argtab, specialtab, effectivetab)\r
        }\r
-       else\r
-       {\r
-               readspecialfile("",argtab,specialtab,effectivetab)\r
+       else {\r
+               readspecialfile("", argtab, specialtab, effectivetab)\r
        }\r
        \r
-       for(k=0; k<=enhance; ++k)\r
-       {\r
-               k2=(k>0)?("-"k):""\r
+       for (k=0; k<=enhance; ++k) {\r
+               k2 = (k>0) ? ("-"k) : ""\r
                \r
-               inframe[k]= datapath argtab["story"]"/"sprintf(effectivetab["inframe"k2],f,"")\r
+               inframe[k]= datapath argtab["story"] "/" sprintf(effectivetab["inframe" k2], f, "")\r
                \r
-               if (system("[ -f " inframe[k] " ]")!=0)\r
-               {\r
-                       if(k>0) #we only care about missing original frame\r
-                       {\r
+               if (system("[ -f " inframe[k] " ]") != 0) {\r
+                       if (k>0) { #we only care about missing original frame\r
                                continue\r
                        }\r
                        ++ongfailcount\r
                        print "Frame "f" doesnt't exist. (#"ongfailcount")"\r
                        \r
-                       print sprintf("%u %u %u %u",state,last,nextong,ongfailcount) > statefile\r
+                       print sprintf("%u %u %u %u", state, last, nextong, ongfailcount) > statefile\r
                        close(statefile)\r
                        \r
-                       if((argtab["finalreplaceframe"]!="") && (argtab["finalreplacetime"]!=""))\r
-                       {\r
-                               if(((thistime3 - nextong) >= int(argtab["finalreplacetime"])*3600) && (ongfailcount>=int(argtab["finalreplacetime"])))\r
-                               {\r
+                       if ((argtab["finalreplaceframe"] != "") && (argtab["finalreplacetime"] != "")) {\r
+                               if (((thistime3 - nextong) >= int(argtab["finalreplacetime"]) * 3600) && (ongfailcount >= int(argtab["finalreplacetime"]))) {\r
                                        print "Time to stop trying."\r
                                        print "ONG final replacement frame."\r
-                                       inframe[0]= datapath argtab["story"]"/"argtab["finalreplaceframe"]\r
-                                       nextstate=3\r
+                                       inframe[0] = datapath argtab["story"] "/" argtab["finalreplaceframe"]\r
+                                       nextstate = 3\r
                                }\r
                                else\r
                                        exit 1\r
@@ -388,59 +393,51 @@ END{
                                exit 1\r
                }\r
                \r
-               frame[k]= framepath framedir sprintf(effectivetab["frame"k2],f,"")\r
-               npbframe[k]= framepath framedir sprintf(effectivetab["npbframe"k2],f,"")\r
+               frame[k] = framepath framedir sprintf(effectivetab["frame" k2], f, "")\r
+               npbframe[k] = framepath framedir sprintf(effectivetab["npbframe"k2],f,"")\r
                \r
                \r
-               npbcmd[k]= npb" "inframe[k]" "npbframe[k]" q"\r
-               cpcmd[k] = cp" "inframe[k]" "frame[k]\r
-               chmodcmd[k] = chmod" +r "frame[k]\r
+               npbcmd[k] = npb " " inframe[k] " " npbframe[k] " q"\r
+               cpcmd[k] = cp " " inframe[k] " " frame[k]\r
+               chmodcmd[k] = chmod " +r " frame[k]\r
        }\r
-       ongcmd = mawk" -f " bot4awk" -v story="argtab["story"]" -v frame="last" "datapath argtab["story"]"/settings"\r
-# nextong = thistime3 + int(argtab["ongtime"])*3600\r
+       ongcmd = mawk " -f " bot4awk " -v story=" argtab["story"] " -v frame=" last " " datapath argtab["story"] "/settings"\r
        nextong = getnextongtime()\r
        ### replace this with actual onging!!!\r
        # system("/eizm/pro/ong1/bot4")\r
        \r
-       if (specialtab["text"]!="")\r
-       {\r
-               specialtab["HTML"]=bb2html(specialtab["text"])\r
-               writespecialfile(specialfile,specialtab)\r
+       if (specialtab["text"] != "") {\r
+               specialtab["HTML"] = bb2html(specialtab["text"])\r
+               writespecialfile(specialfile, specialtab)\r
        }\r
        \r
-       # timefile= datapath argtab["story"]"/ongtime"\r
-       print sprintf("%04u ",f)thistime2 >> timefile\r
+       print sprintf("%04u ",f) thistime2 >> timefile\r
        close(timefile)\r
        \r
-       for(k=0; k<=enhance; ++k)\r
-       {\r
-               k2=(k>0)?("-"k):""\r
+       for (k=0; k<=enhance; ++k) {\r
+               k2 = (k>0) ? ("-"k) : ""\r
                \r
-               if ((system("[ -f " inframe[k]" ]")!=0)&&(k>0))\r
+               if ((system("[ -f " inframe[k] " ]") != 0) && (k > 0))\r
                        continue\r
                \r
-               if(argtab["npbframe"]!="")\r
-               {\r
-                       if(system(npbcmd[k])!=0)\r
-                       {\r
-                               print "NewpixbOTTification"k2" failed."\r
+               if (argtab["npbframe"] != "") {\r
+                       if (system(npbcmd[k])!= 0) {\r
+                               print "NewpixbOTTification" k2 " failed."\r
                                exit 1\r
                        }\r
                }\r
                \r
-               if(system(cpcmd[k])!=0)\r
-               {\r
-                       print "Frame"k2" upload failed."\r
+               if (system(cpcmd[k]) != 0) {\r
+                       print "Frame" k2 " upload failed."\r
                        exit 1\r
                }\r
                \r
-               if(system(chmodcmd[k])!=0)\r
-               {\r
-                       print "Frame"k2" chmod failed."\r
+               if (system(chmodcmd[k]) != 0) {\r
+                       print "Frame" k2 " chmod failed."\r
                        exit 1\r
                }\r
        }\r
-       print sprintf("%u %u %u 0",nextstate,f,nextong) > statefile\r
+       print sprintf("%u %u %u 0", nextstate, f, nextong) > statefile\r
        close(statefile)\r
        \r
        print sprintf("ONGed. Next ong %u.",nextong)\r
@@ -448,91 +445,78 @@ END{
        # add condition here.\r
        # Ok, done.\r
        \r
-       if (!firstong)\r
-       {\r
+       if (!firstong) {\r
                ongbotfile= datapath argtab["story"] "/" ((argtab["ongbot"]!="")?argtab["ongbot"]:"ongbot")\r
                if (system("[ -f " ongbotfile " ]")==0)\r
                        system(ongcmd)\r
        }\r
 }\r
 \r
-function getnextongtime(   schedulefile,temp,i)\r
-{\r
-       schedulefile= datapath argtab["story"]"/schedule"\r
+function getnextongtime(   schedulefile,temp,i) {\r
+       schedulefile = datapath argtab["story"]"/schedule"\r
        \r
-       while((getline temp < schedulefile)>0)\r
-       {\r
+       while ((getline temp < schedulefile) > 0) {\r
                if (temp !~ /^[0-9]+$/)\r
                        continue\r
                \r
                i = int(temp)\r
                # print i\r
                \r
-               if(i>thistime3)\r
-               {\r
+               if (i > thistime3) {\r
                        close(schedulefile)\r
                        print "ok"\r
                        return i\r
                }\r
        }\r
        close(schedulefile)\r
-       return thistime3 + int(argtab["ongtime"])*3600\r
+       return thistime3 + int(argtab["ongtime"]) * 3600\r
 }\r
 \r
-function readspecialfile (datafile, argtab, specialtab, effectivetab,   line,undertext,eq,i)\r
-{\r
+function readspecialfile (datafile, argtab, specialtab, effectivetab,   line,undertext,eq,i) {\r
        for (i in specialtab)\r
                delete specialtab[i]\r
        \r
        for (i in effectivetab)\r
                delete effectivetab[i]\r
        \r
-       if (datafile=="")\r
+       if (datafile == "")\r
                return\r
        \r
-       line=""\r
-       while((getline line < datafile)>0)\r
-       {\r
+       line = ""\r
+       while ((getline line < datafile) > 0) {\r
                gsub(/[\r\n]/, "", line)\r
                \r
-               if (line == "" && !undertext)\r
-               {\r
-                       undertext=1\r
-                       specialtab["text"]=""\r
+               if (line == "" && !undertext) {\r
+                       undertext = 1\r
+                       specialtab["text"] = ""\r
                }\r
-               else if (undertext)\r
-               {\r
+               else if (undertext) {\r
                        specialtab["text"] = specialtab["text"] line "\n"\r
                }\r
-               else\r
-               {\r
-                       eq=index(line, "=")\r
-                       specialtab[substr(line, 1, eq-1)]=substr(line, eq+1)\r
+               else {\r
+                       eq = index(line, "=")\r
+                       specialtab[substr(line, 1, eq-1)] = substr(line, eq+1)\r
                }\r
        }\r
        \r
        for (i in argtab)\r
-               effectivetab[i]=argtab[i]\r
+               effectivetab[i] = argtab[i]\r
        \r
        for (i in specialtab)\r
-               effectivetab[i]=specialtab[i]\r
-       \r
+               effectivetab[i] = specialtab[i]\r
        \r
        close (datafile)\r
-       \r
 }\r
 \r
-function writespecialfile (datafile, specialtab,   i)\r
-{\r
-       for (i in specialtab)\r
-       {\r
-               if (i!="text")\r
-                       print i"="specialtab[i] > specialfile\r
+function writespecialfile (datafile, specialtab,   i) {\r
+       for (i in specialtab) {\r
+               if (i != "text")\r
+                       print i "=" specialtab[i] > specialfile\r
        }\r
        \r
        print "" > specialfile\r
-       if (specialtab["text"]!="")\r
-               printf("%s",specialtab["text"]) > specialfile\r
+       if (specialtab["text"] != "")\r
+               printf("%s", specialtab["text"]) > specialfile\r
        close (specialfile)\r
 }\r
 \r
index 4857297f1d6de7c718edc51aa8a11276982bee70..ce247649d39853cf053e8c3196c6ce40735e8dc6 100644 (file)
@@ -1,7 +1,7 @@
 #// viewer.awk
 #// The viewer
 #// 
-#// Copyright (C) 2015-2021, 2023  Balthasar Szczepański
+#// Copyright (C) 2015-2021, 2023, 2025  Balthasar Szczepański
 #// 
 #// This program is free software: you can redistribute it and/or modify
 #// it under the terms of the GNU Affero General Public License as
@@ -29,394 +29,377 @@ BEGIN{
        botcastleurl="http://1190.bicyclesonthemoon.info"
        postlink="http://forums.xkcd.com/viewtopic.php?f=7"
        
-       for(i=0;i<256;++i)
-       {
-               ch=sprintf("%c",i)
-               hex=sprintf("%02X",i)
-               dec=sprintf("%u",i)
-               ch2hex[ch]=hex
-               ch2dec[ch]=dec
+       for (i=0; i<256; ++i) {
+               ch = sprintf("%c",i)
+               hex = sprintf("%02X",i)
+               dec = sprintf("%u",i)
+               ch2hex[ch] = hex
+               ch2dec[ch] = dec
        }
        
        listfile = datapath "stories"
-       stories=0
-       line=""
-       while((getline line < listfile)>0)
-       {
+       stories = 0
+       line = ""
+       while ((getline line < listfile) > 0) {
                gsub(/[\r\n]/,"",line)
-               eq=index(line,"=")
+               eq = index(line,"=")
                
-               storytab[stories]=htmlescape(substr(line, 1, eq-1),"","")
-               storyname[stories]=htmlescape(substr(line, eq+1),"","")
+               storytab[stories] = htmlescape(substr(line, 1, eq-1), "", "")
+               storyname[stories] = htmlescape(substr(line, eq+1), "" , "")
                ++stories
        }
-       close(listfile)
+       close (listfile)
        
-       if(frame ~ /[a-zA-Z]$/)
-       {
-               f=int(substr(frame,1,length(frame)-1))
-               s=substr(frame, length(frame))
+       if (frame ~ /[a-zA-Z]$/) {
+               f = int(substr(frame,1,length(frame)-1))
+               s = substr(frame, length(frame))
        }
-       else
-       {
-               f=int(frame)
-               s=""
+       else {
+               f = int(frame)
+               s = ""
        }
-       e=int(enhance)
-       n=int(notice)
-       b=int(bbcode)
+       e = int(enhance)
+       n = int(notice)
+       b = int(bbcode)
        
        timecmd | getline thistime
-               close(timecmd)
+               close (timecmd)
        
        timecmd2 | getline thistime2
-               close(timecmd2)
+               close (timecmd2)
        
        timecmd3 | getline thistime3
-               close(timecmd3)
+               close (timecmd3)
        
        timecmd4 | getline thistime4
-               close(timecmd4)
+               close (timecmd4)
                
-       thistime3=int(thistime3)
-       thistime4=int(thistime4)
+       thistime3 = int(thistime3)
+       thistime4 = int(thistime4)
        
-       lastalt=0
+       lastalt = 0
        
-       ch2num[0]=""
-       num2ch[""]=0
-       for(i=1;i<=26;++i)
-       {
-               ch=sprintf("%c",i+96)
-               num2ch[i]=ch
-               ch2num[ch]=i
+       ch2num[0] = ""
+       num2ch[""] = 0
+       for (i=1; i<=26; ++i) {
+               ch = sprintf("%c",i+96)
+               num2ch[i] = ch
+               ch2num[ch] = i
        }
-       for(i=0;i<256;++i)
-       {
-               ch=sprintf("%c",i)
-               dec=sprintf("%u",i)
-               ch2dec[ch]=dec
+       for(i=0;i<256;++i) {
+               ch = sprintf("%c",i)
+               dec = sprintf("%u",i)
+               ch2dec[ch] = dec
        }
-       alttabsize=0
+       alttabsize = 0
 }
 {
-       file=1
+       file = 1
        gsub(/[\r\n]/, "", $0)
-       eq=index($0, "=")
-       if($0 ~ /^[0-9]+=/)
-       {
-               i=int(substr($0, 1, eq-1))
-               alttab[alttabsize]=substr($0, eq+1)
-               alttabn[alttabsize]=i
+       eq = index($0, "=")
+       ind = substr($0, 1, eq-1)
+       val = substr($0, eq+1)
+       
+       if ($0 ~ /^[0-9]+=/) {
+               alttab [alttabsize] = val
+               alttabn[alttabsize] = int(ind)
                ++alttabsize
-               
-               # i=int(substr($0, 1, eq-1))
-               # if(f>=i && i>=lastalt)
-               # {
-                       # alt=substr($0, eq+1)
-                       # lastalt=i
-               # }
-       }
-       else if($0 ~ /^sf-[0-9]+=/)
-       {
-               sf=1
-               i=int(substr($0, 4, eq-4))
-               if(i==f)
-                       this_sf= tolower(substr($0, eq+1))
-               if(i==f-1)
-                       prev_sf=tolower(substr($0, eq+1))
-                       
        }
-       argtab[substr($0, 1, eq-1)]=substr($0, eq+1)
+       else if($0 ~ /^sf-[0-9]+=/) {
+               sf = 1
+               ind = "sf-"int(substr($0, 4, eq-4))
+               val = tolower(val)
+               i=int(ind)
+       }
+       argtab[ind] = val
 }
 END{
        
        if (file=="")
                exit 1
        
-       if(sf=="")
-               s=""
-       else if(this_sf=="")
-               s=""
-       else if(s>this_sf && argtab["cfrt"]=="")
-               s=this_sf
-       
        ongoing=int(argtab["ongoing"])
-       if(ongoing>0)
-       {
-               statefile= datapath argtab["story"]"/ongstate"
+       if (ongoing > 0) {
+               statefile= datapath argtab["story"] "/ongstate"
                getline temp < statefile
-               close(statefile)
+               close (statefile)
                
                split(temp, temptab, " ")
-               state=int(temptab[1])
-               last=int(temptab[2])
-               nextong=int(temptab[3])
+               state = int(temptab[1])
+               last = int(temptab[2])
+               nextong = int(temptab[3])
+               # ongfailcount = int(temptab[4])
        }
-       else
-       {
-               last=int(argtab["last"])
-               state=3
+       else {
+               last = int(argtab["last"])
+               state = 3
+               nextong = 0
+               # ongfaicount = 0
        }
-       first=int(argtab["first"])
+       first = int(argtab["first"])
        
-       ongtimefile= datapath argtab["story"]"/ongtime"
+       if (sf=="") {
+               s = ""
+               last_sf = ""
+               this_sf = ""
+               prev_sf = ""
+       }
+       else {
+               last_sf = argtab["sf-" last]
+               this_sf = argtab["sf-" f   ]
+               prev_sf = argtab["sf-"(f-1)]
+       }
        
-       if(frame=="")
-       {
-               if(ongoing>0)
-               {
-                       if (int(argtab["onlyframe"])>0)
-                       {
-                               f=last
-                               onlyframe=1
+       ongtimefile= datapath argtab["story"] "/ongtime"
+       
+       if (frame == "") {
+               if (ongoing > 0) {
+                       if (int(argtab["onlyframe"]) > 0) {
+                               f = last
+                               s = last_sf
+                               onlyframe = 1
                        }
-                       else
-                       {
-                               onlyframe=""
-                               if (int(argtab["showlatest"])>0)
-                                       f=last
-                               else
-                                       f=first
+                       else {
+                               onlyframe = ""
+                               if (int(argtab["showlatest"]) > 0) {
+                                       f = last
+                                       s = last_sf
+                               }
+                               else {
+                                       f = first
+                                       s = ""
+                               }
                        }
                }
-               else
-               {
-                       f=first
-                       onlyframe=""
-                       if (replay != "")
-                       {
+               else {
+                       f = first
+                       s = ""
+                       onlyframe = ""
+                       
+                       if (replay != "") {
                                # print "DEBUG:<br>"
-                               ongyr=0
-                               ongsy=0
-                               line=""
-                               while((getline line < ongtimefile)>0)
-                               {
-                                       ongind=index(line," ")
-                                       ongft=substr(line,1,ongind-1)
-                                       ongt=int((ongsy?(substr(line,ongind+1,4)-ongyr):0) substr(line,ongind+6,2) substr(line,ongind+9,2) substr(line,ongind+12,2) substr(line,ongind+15,2))
-                                       
+                               ongyr = 0
+                               ongsy = 0
+                               line = ""
+                               while ((getline line < ongtimefile) > 0) {
+                                       ongind = index(line, " ")
+                                       ongft = substr(line,1,ongind-1)
+                                       ongt = int((ongsy ? (substr(line,ongind+1,4)-ongyr) : 0) substr(line,ongind+6,2) substr(line,ongind+9,2) substr(line,ongind+12,2) substr(line,ongind+15,2))
                                        # printf("o.%d<br>",ongt)
-                                       
-                                       if(!ongsy)
-                                       {
-                                               ongsy=1
-                                               ongyr=substr(line,ongind+1,4)
+                                       if (!ongsy) {
+                                               ongsy = 1
+                                               ongyr = substr(line,ongind+1,4)
                                                # printf("3.%d<br>",thistime3)
-                                               if(thistime3<ongt)
-                                               {
+                                               if (thistime3 < ongt) {
                                                        thistime3 += 100000000
                                                        # printf("3.%d<br>",thistime3)
                                                }
                                        }
-                                       
-                                       if(ongt>thistime3)
-                                       {
+                                       if (ongt > thistime3) {
                                                # if(ongsm)
                                                # print"BREAK!<br>"
                                                        break;
                                        }
                                        # else
                                                # ongsm=1;
-                                       if(ongft ~ /^[0-9]+[a-z]$/)
-                                       {
-                                               f=int(substr(ongft,1,ongind-2))
-                                               s=substr(ongft,ongind-1,1)
+                                       if (ongft ~ /^[0-9]+[a-z]$/) {
+                                               f = int(substr(ongft,1,ongind-2))
+                                               s = substr(ongft,ongind-1,1)
                                        }
-                                       else
-                                       {
-                                               f=int(ongft)
-                                               s=""
+                                       else {
+                                               f = int(ongft)
+                                               s = ""
                                        }
                                        # print"f."f"."s"<br>"
                                }
-                               close(ongtimefile)
+                               close (ongtimefile)
                        }
                }
        }
        
-       if (s!="")
-       {
-               if(argtab[s] != "")
-                       s2=argtab[s]
-               else
-                       s2=s
-               # n=-1
-       }
+       cfrt = ""
+       invalid = ""
        
-       if(f<first && argtab["cfrt"]=="")
-               f=first
-       
-       if(f>last && argtab["cfrt"]=="")
-               f=last
+       if (state !~ /^[1235]$/) {
+               cfrt = 1
+               invalid = 1
+       }
+       else if (f < first) {
+               f = first
+               s = ""
+               cfrt = 1
+       }
+       else if (f > last) {
+               f = last
+               s = last_sf
+               cfrt = 1
+       }
+       else if (sf != "") {
+               if ((s != "") && (this_sf == "")) {
+                       s = ""
+                       cfrt = 1
+               }
+               else if ((s != "") && (this_sf != "") && (s > this_sf)) {
+                       s = this_sf
+                       cfrt  =1
+               }
+       }
        
-       if(argtab["special"] != "")
-       {
-               specialfile=datapath argtab["story"]"/"sprintf(argtab["special"],f,s)
-               line=""
-               undertext=""
+       if (cfrt && (argtab["cfrt"] != "")) {
+       }
+       else if (invalid) {
+               print "Status: 302 Temporal Relocation"
+               print "Location: /aftertime/viewer?story=default"
+               print ""
+               exit 0
+       }
+       else if (argtab["special"] != "") {
+               specialfile = datapath argtab["story"] "/" sprintf(argtab["special"], f, s)
+               line = ""
+               undertext = ""
                
-               while((getline line < specialfile)>0)
-               {
+               while ((getline line < specialfile) > 0) {
                        gsub(/[\r\n]/, "", line)
                        
-                       if (line == "" && !undertext)
-                       {
-                               undertext=1
-                               argtab["text"]=""
+                       if ((line == "") && (!undertext)) {
+                               undertext = 1
+                               argtab["text"] = ""
                                continue
                        }
                        
-                       if (undertext)
-                       {
+                       if (undertext) {
                                argtab["text"] = argtab["text"] line "\n"
                        }
-                       else
-                       {
-                               
-                               eq=index(line, "=")
-                               argtab[substr(line, 1, eq-1)]=substr(line, eq+1)
+                       else {
+                               eq = index(line, "=")
+                               argtab[substr(line, 1, eq-1)] = substr(line, eq+1)
                        }
                }
                close (specialfile)
        }
        
-       line=""
-       while((getline line < ongtimefile)>0)
-       {
-               ongind=index(line," ")
-               ongft=substr(line,1,ongind-1)
-               ongt=substr(line,ongind+9,2)"."substr(line,ongind+6,2)"."substr(line,ongind+1,4)", "substr(line,ongind+12,2)":"substr(line,ongind+15,2)" UTC"
-               if(ongft ~ /^[0-9]+[a-z]$/)
-                       ongf=int(substr(ongft,1,ongind-2)) substr(ongft,ongind-1,1)
+       line = ""
+       while ((getline line < ongtimefile) > 0) {
+               ongind = index(line," ")
+               ongft = substr(line,1,ongind-1)
+               ongt = substr(line,ongind+9,2) "." substr(line,ongind+6,2) "." substr(line,ongind+1,4) ", " substr(line,ongind+12,2) ":" substr(line,ongind+15,2) " UTC"
+               if (ongft ~ /^[0-9]+[a-z]$/)
+                       ongf = int(substr(ongft,1,ongind-2)) substr(ongft,ongind-1,1)
                else
-                       ongf=int(ongft)
+                       ongf = int(ongft)
                
-               if(ongf==(f s) && ongt ~ /^[0-9][0-9]\.[0-9][0-9]\.[0-9][0-9][0-9][0-9], [0-9][0-9]:[0-9][0-9] UTC$/)
-                       ongtimetext=ongt
+               if ((ongf == (f s)) && ongt ~ (/^[0-9][0-9]\.[0-9][0-9]\.[0-9][0-9][0-9][0-9], [0-9][0-9]:[0-9][0-9] UTC$/))
+                       ongtimetext = ongt
        }
-       close(ongtimefile)
+       close (ongtimefile)
                
        if ("alt" in argtab)
-               alt=htmlescape(argtab["alt"],"less","bb")
-       else
-       {
-               for(i=0; i<alttabsize; ++i)
-               {
-                       if(f>=alttabn[i] && alttabn[i]>=lastalt)
-                       {
-                               alt=htmlescape(alttab[i],"less","bb")
-                               lastalt=alttabn[i]
+               alt = htmlescape(argtab["alt"], "less", "bb")
+       else {
+               for(i=0; i<alttabsize; ++i) {
+                       if ((f >= alttabn[i]) && (alttabn[i] >= lastalt)) {
+                               alt = htmlescape(alttab[i], "less", "bb")
+                               lastalt = alttabn[i]
                        }
                }
        }
        
-       if(argtab["number"]!="")
-               numberformat=argtab["number"]
-       else
-       {
+       if (argtab["number"] != "")
+               numberformat = argtab["number"]
+       else {
                # if (sf!="")
-                       numberformat="%u%s"
+                       numberformat = "%u%s"
                # else
-                       # numberformat="%u"
-       }
-       
-       framedir= (argtab["framedir"]!="" ? argtab["framedir"] : "/aftertime/"argtab["story"]"/")
-       # if(sf!="")
-       # {
-               title=htmlescape(sprintf(argtab["title"(e>0 ? "-"e : "")],f,s2),"less","bb")
-               frame=framedir sprintf(argtab["frame"(e>0 ? "-"e : "")],f,s)
-               if (system("[ -f " framepath frame" ]")!=0)
-               {
-                       frame= framedir sprintf(argtab["frame"],f,s)
-                       title=htmlescape(sprintf(argtab["title"],f,s2),"less","bb")
-                       noenh=1
-               }
-               otherviewerurl=sprintf(argtab["otherviewerurl"], f+int(argtab["othervieweroffset"]),s2)
-       # }
-       # else
-       # {
-               # s=""
-               # title=htmlescape(sprintf(argtab["title"(e>0 ? "-"e : "")],f),"less","bb")
-               # frame= framedir sprintf(argtab["frame"(e>0 ? "-"e : "")],f)
-               # if (system("[ -f " framepath frame" ]")!=0)
-               # {
-                       # frame= framedir sprintf(argtab["frame"],f)
-                       # title=htmlescape(sprintf(argtab["title"],f,s),"less","bb")
-                       # noenh=1
-               # }
-               # otherviewerurl=sprintf(argtab["otherviewerurl"], f+int(argtab["othervieweroffset"]))
-       # }
-       
-       dynamicframe="/aftertime/frame?story="argtab["story"](max_enhance>0?"&amp;e="e:"")"&amp;f="f s
-       
-       if((f>last || f<first || (this_sf!="" && s>this_sf)) && argtab["cfrt"]!="")
-               frame= framedir argtab["cfrt"]
-       
-       border= int(argtab["border"])
-       if(argtab["width"]!="")
-               width= int(argtab["width"]) + 2*border
-       else
-               width="100%"
-       max_enhance=int(argtab["enhance"])
+                       # numberformat = "%u"
+       }
        
-       if (this_sf=="")
+       if (s != "")
        {
-               next_f= f+1
-               next_s= ""
+               if(argtab[s] != "")
+                       s2 = argtab[s]
+               else
+                       s2 = s
        }
-       else if(s=="")
-       {
-               next_f=f
-               next_s="a"
+       
+       framedir = (argtab["framedir"]!="" ? argtab["framedir"] : "/aftertime/"argtab["story"]"/")
+       title = htmlescape(sprintf(argtab["title"(e>0 ? "-"e : "")], f, s2),"less","bb")
+       if (cfrt && (argtab["cfrt"] != "")) {
+               frame = framedir argtab["cfrt"]
+               dynamicframe = frame
        }
-       else if(s>=this_sf)
-       {
-               next_f= f+1
-               next_s= ""
+       else {
+               frame = framedir sprintf(argtab["frame"(e>0 ? "-"e : "")],f,s)
+               if (system("[ -f " framepath frame" ]") !=0 ) {
+                       frame = framedir sprintf(argtab["frame"],f,s)
+                       title = htmlescape(sprintf(argtab["title"],f,s2),"less","bb")
+                       noenh = 1
+               }
+               dynamicframe = "/aftertime/frame?story=" argtab["story"] ((max_enhance>0)?("&amp;e=" e):"") "&amp;f=" f s
        }
+       otherviewerurl = sprintf(argtab["otherviewerurl"], f+int(argtab["othervieweroffset"]), s2)
+       
+       border = int(argtab["border"])
+       if (argtab["width"] != "")
+               width = int(argtab["width"]) + 2*border
        else
-       {
+               width = "100%"
+       max_enhance = int(argtab["enhance"])
+       
+       loop = ""
+       if ((state ~ /^[35]$/) && (argtab["loop"] != "") && (f == last) && ((last_sf == "") || (s == last_sf))) {
+               loop = 1
+               if (argtab["loop"] ~ /[a-zA-Z]$/) {
+                       next_f = int(substr(argtab["loop"],1,length(argtab["loop"])-1))
+                       next_ss = substr(argtab["loop"], length(argtab["loop"]))
+               }
+               else {
+                       next_f = int(argtab["loop"])
+                       next_s = ""
+               }
+       }
+       else if (this_sf == "") {
+               next_f = f+1
+               next_s = ""
+       }
+       else if (s == "") {
+               next_f = f
+               next_s = "a"
+       }
+       else if (s >= this_sf) {
+               next_f = f+1
+               next_s = ""
+       }
+       else {
                next_f = f
                next_s = num2ch[ch2num[s]+1]
        }
        
-       if(this_sf!="" && s!="")
-       {
+       if ((this_sf != "") && (s != "")) {
                prev_f = f
                prev_s = num2ch[ch2num[s]-1]
        }
-       else if(prev_sf!="")
-       {
+       else if (prev_sf != "") {
                prev_f = f-1
                prev_s = prev_sf
        }
-       else
-       {
+       else {
                prev_f = f-1
                prev_s = ""
        }
        
-       if(prev_s!=""){
-               if(argtab[prev_s]!=""){
-                       prev_s2=argtab[prev_s]
-               }
+       if (prev_s != "") {
+               if (argtab[prev_s] != "")
+                       prev_s2 = argtab[prev_s]
                else
-               {
-                       prev_s2=prev_s
-               }
+                       prev_s2 = prev_s
        }
        else
                prev_s2 = ""
-       if (next_s!="")
-       {
-               if(argtab[next_s]!=""){
-                       next_s2=argtab[next_s]
-               }
+       if (next_s != "") {
+               if (argtab[next_s] != "")
+                       next_s2 = argtab[next_s]
                else
-               {
-                       next_s2=next_s
-               }
+                       next_s2 = next_s
        }
        else
                next_s2 = ""
@@ -429,12 +412,10 @@ END{
        print "<link rel=\"stylesheet\" href=\"/css/botm.css\">"
        print "<link rel=\"index\" href=\"/aftertime/\">"
        print "<link rel=\"start\" href=\"/aftertime/viewer?story="argtab["story"](max_enhance>0?"&amp;e="e:"")"&amp;f="first"\">"
-       if(f>first)
-       {
+       if ((f > first) || ((this_sf != "") && (s != ""))) {
                print "<link rel=\"prev\" href=\"/aftertime/viewer?story="argtab["story"](max_enhance>0?"&amp;e="e:"")"&amp;f="prev_f prev_s"\">"
        }
-       if(f<last)
-       {
+       if ((f < last) || ((this_sf != "") && (s < this_sf)) || loop) {
                print "<link rel=\"next\" href=\"/aftertime/viewer?story="argtab["story"](max_enhance>0?"&amp;e="e:"")"&amp;f="next_f next_s"\">"
                print "<link rel=\"prefetch\" href=\"/aftertime/viewer?story="argtab["story"](max_enhance>0?"&amp;e="e:"")"&amp;f="next_f next_s"\">"
        }
@@ -446,72 +427,63 @@ END{
        if(onlyframe!="")
                print "<a href=\"/aftertime/viewer?story="argtab["story"](max_enhance>0?"&amp;e="e:"")"&amp;f="f s"\">"
        print "<img src=\""((ongoing>0 && state <2 && f==last)?dynamicframe:frame)"\" alt=\""title"\" title=\""alt"\" border=\""border"\">"
-       if(onlyframe!="")
+       if (onlyframe != "")
                print "</a>"
        print "</td></tr>"
        
-       if(ongoing==1)
-       {
-               # print "<tr width=\""width"\" align=\"right\"><td colspan=\"4\" width=\"100%\">"
-               if(state<3)
-               {
-                       # ongtime=int(argtab["ongtime"])
-                       # dt = (3600*ongtime - ( int(substr(thistime2,5,2)) + 60*int(substr(thistime2,3,2)) + 3600*( int(substr(thistime2,1,2))%int(argtab["ongtime"]) ) ))%(ongtime*3600)
-                       # ss=(dt>0 ? sprintf("%02u",dt%60) : "NG")
-                       # mm=sprintf("%02u",int(dt/60)%60)
-                       # hh=sprintf("%02u",int(dt/3600))
-                       dt=nextong-thistime4
-                       if (dt<-5)
-                       {
-                               ss="EE"
-                               mm="EE"
-                               hh="EE"
-                       }
-                       else if (dt>0)
-                       {
-                               ss=sprintf("%02u",dt%60)
-                               mm=sprintf("%02u",int(dt/60)%60)
-                               if ((dt/3600)>99)
-                                       hh="EE"
-                               else
-                                       hh=sprintf("%02u",int(dt/3600))
-                       }
-                       else {
-                               ss="NG"
-                               mm="00"
-                               hh="00"
-                       }
-               }
+       if (state ~ /^[35]$/) {
+               if (argtab["last"] == "")
+                       showtime = 1
+               else if (last < int(argtab["last"]))
+                       showtime = 1
                else
-               {
+                       showtime = ""
+       }
+       else if (state ~ /^[12]$/)
+               showtime = 1
+       else
+               showtime = ""
+       
+       if (showtime) {
+               # print "<tr width=\""width"\" align=\"right\"><td colspan=\"4\" width=\"100%\">"
+               dt = nextong - thistime4
+               if (dt < -5) {
                        ss="EE"
                        mm="EE"
                        hh="EE"
                }
+               else if (dt > 0) {
+                       ss=sprintf("%02u",dt%60)
+                       mm=sprintf("%02u",int(dt/60)%60)
+                       if ((dt/3600)>99)
+                               hh="EE"
+                       else
+                               hh=sprintf("%02u",int(dt/3600))
+               }
+               else {
+                       ss = "NG"
+                       mm = "00"
+                       hh = "00"
+               }
                # hh=nextong" "thistime4
-               timecolor=(state>1?"br":"ni")
+               timecolor = ((state == 1)? "ni" : ((state == 2) ? "br" : "cz"))
        
                print "<tr width=\""width"\" align=\"right\"><td colspan=\"4\" width=\"100%\"><tt><b class=\""timecolor"\">"hh"</b>:<b class=\""timecolor"\">"mm"</b>:<b class=\""timecolor"\">"ss"</b></tt></td></tr>"
        }
        
-       if(onlyframe=="")
-       {
-               if(max_enhance>0)
-               {
+       if (onlyframe == "") {
+               if (max_enhance > 0) {
                        print "<tr width=\""width"\" align=\"center\"><td colspan=\"4\" width=\"100%\">["
-                       for(i=0;i<=max_enhance;++i)
-                       {
-                               if(i!=0)
+                       for (i=0; i<= max_enhance; ++i) {
+                               if (i != 0)
                                        print "|"
                                # if(sf!="")
                                        enhancedframe = framedir sprintf(argtab["frame"(i>0?"-"i:"")],f,s)
                                # else
                                        # enhancedframe = framedir sprintf(argtab["frame"(i>0?"-"i:"")],f)
                                
-                               
-                               if (system("[ -f " framepath enhancedframe" ]")==0)
-                               {
-                                       if(i==e)
+                               if (system("[ -f " framepath enhancedframe" ]") == 0) {
+                                       if (i == e)
                                                print"<b>"argtab["enhance-"i]"</b>"
                                        else
                                                print"<a href=\"/aftertime/viewer?story="argtab["story"]"&amp;e="i"&amp;f="f s((b>0)?("&amp;b="b):"")"\">"argtab["enhance-"i]"</a>"
@@ -524,15 +496,13 @@ END{
                                
                print "<tr width=\""width"\" align=\"center\">"
                print "<td width=\"25%\"><a href=\"/aftertime/viewer?story="argtab["story"](max_enhance>0?"&amp;e="e:"")"&amp;f="first"\">|&lt; "sprintf(numberformat,first,"")"</a></td>"
-               print "<td width=\"25%\">"(f>first?"<a href=\"/aftertime/viewer?story="argtab["story"](max_enhance>0?"&amp;e="e:"")"&amp;f="prev_f prev_s"\">&lt; "sprintf(numberformat,prev_f,prev_s2)"</a>":"")"</td>"
-               print "<td width=\"25%\">"(f<last?"<a href=\"/aftertime/viewer?story="argtab["story"](max_enhance>0?"&amp;e="e:"")"&amp;f="next_f next_s"\">"sprintf(numberformat,next_f,next_s2)" &gt;</a>":"")"</td>"
+               print "<td width=\"25%\">"(((f > first) || ((this_sf != "") && (s != "")))?"<a href=\"/aftertime/viewer?story="argtab["story"](max_enhance>0?"&amp;e="e:"")"&amp;f="prev_f prev_s"\">&lt; "sprintf(numberformat,prev_f,prev_s2)"</a>":"")"</td>"
+               print "<td width=\"25%\">"(((f < last) || ((this_sf != "") && (s < this_sf)) || loop)?"<a href=\"/aftertime/viewer?story="argtab["story"](max_enhance>0?"&amp;e="e:"")"&amp;f="next_f next_s"\">"sprintf(numberformat,next_f,next_s2)" &gt;</a>":"")"</td>"
                print "<td width=\"25%\"><a href=\"/aftertime/viewer?story="argtab["story"](max_enhance>0?"&amp;e="e:"")"&amp;f="last"\">"sprintf(numberformat,last,"")" &gt;|</a></td>"
                print "</tr>"
                
-               if(ongtimetext!="")
-               {
-                       if(argtab["ID"]!="")
-                       {
+               if (ongtimetext != "") {
+                       if (argtab["ID"] != "") {
                                print "<tr width=\""width"\" align=\"right\"><td colspan=\"4\" width=\"100%\"><a href=\""postlink"&p="int(argtab["ID"])"#p"int(argtab["ID"])"\">"ongtimetext"</a></td></tr>"
                        }
                        # else if (argtab["otherviewerurl"]!="")
@@ -543,60 +513,50 @@ END{
                                print "<tr width=\""width"\" align=\"right\"><td colspan=\"4\" width=\"100%\">"ongtimetext"</td></tr>"
                }
                
-               if(argtab["HTML"]!="" && b==0)
-               {
+               if (argtab["HTML"]!="" && b==0) {
                        print "<tr width=\""width"\"><td colspan=\"4\" width=\"100%\">"argtab["HTML"]"</td></tr>"
                }
                
-               for(i=-1; i<=n+1; ++i)
-               {
+               for (i=-1; i<=n+1; ++i) {
                        # print "<!-- ######## "i"######## -->" 
                        if(i<0)
-                               noticepost=noticepath argtab["story"]"-i"
+                               noticepost = noticepath argtab["story"] "-i"
                        else
-                               noticepost=noticepath argtab["story"]"-"sprintf("%04u%s",f,s)"-"sprintf("%02u",i)
+                               noticepost = noticepath argtab["story"] "-" sprintf("%04u%s",f,s) "-" sprintf("%02u",i)
                        split("", noticetab, ":")
-                       for(j=0;(getline line < noticepost)>0;++j)
-                       {
+                       for (j=0; (getline line < noticepost)>0; ++j) {
                                gsub(/[\r\n]/,"",line)
-                               eq=index(line,"=")
-                               noticetab[substr(line, 1, eq-1)]=substr(line, eq+1)
+                               eq = index(line,"=")
+                               noticetab[substr(line, 1, eq-1)] = substr(line, eq+1)
                        }
-                       close(noticepost)
-                       if(j==0)
-                       {
-                               if(i<=0)
+                       close (noticepost)
+                       if (j == 0) {
+                               if (i <= 0)
                                        continue;
                                else
                                        break;
                        }
-                       if(i>=0)
-                       {
-                               nposttime=noticetab["y"]noticetab["m"]noticetab["d"]noticetab["h"]
+                       if (i >= 0) {
+                               nposttime = noticetab["y"] noticetab["m"] noticetab["d"] noticetab["h"]
                                if ((thistime<nposttime) && (i>0))
                                        break;
                        }
-                       if(i<=n)
-                       {
-                               if(i>=0)
+                       if (i <= n) {
+                               if (i >= 0)
                                        print "<tr width=\""width"\"><td colspan=\"4\" width=\"100%\"><i>"noticetab["subject_h"]"</i> "(noticetab["ID"]!=""?"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(<a href=\"/ott/view?p="noticetab["ID"]"#p"noticetab["ID"]"\">OTT time travel</a>)":"")"</td></tr>"
                                print"<tr width=\""width"\"><td colspan=\"4\" width=\"100%\">"((noticetab["HTML"]!="")?noticetab["HTML"]:noticetab["BBHTML"])"</td></tr>"
                        }
-                       else
-                       {
+                       else {
                                print "<tr width=\""width"\" align=\"center\"><td colspan=\"4\" width=\"100%\"><a href=\"/aftertime/viewer?story="argtab["story"](max_enhance>0?"&amp;e="e:"")"&amp;f="f s"&amp;n="i"\">"noticetab["subject_h"]"</a></td></tr>"
                        }
                }
                
-               if(b>0)
-               {
-                       if (argtab["BBHTML"]!="")
-                       {
-                               bbtext=argtab["BBHTML"]
+               if (b > 0) {
+                       if (argtab["BBHTML"] != "") {
+                               bbtext = argtab["BBHTML"]
                        }
-                       else if (argtab["text"]!="")
-                       {
-                               bbtext=htmlescape(argtab["text"],"less","bb")
+                       else if (argtab["text"] != "") {
+                               bbtext = htmlescape(argtab["text"],"less","bb")
                                gsub(/  /,"\\&nbsp; ",bbtext)
                                gsub(/  /," \\&nbsp;",bbtext)
                        }
@@ -605,38 +565,36 @@ END{
                        print"<code>[url="botcastleurl"/aftertime/viewer?story="argtab["story"](max_enhance>0?"&amp;e="e:"")"&amp;f="f s"][img]"botcastleurl frame"[/img][/url]"(bbtext!=""?"<br>"bbtext:"")(b>1 && alt!=""?"[spoiler]"alt"[/spoiler]":"")
                        print"</code></td></tr>"
                        
-                       ongbotdefined=""
-                       ongbotfile= datapath argtab["story"] "/" ((argtab["pleaseongbot"]!="")?argtab["pleaseongbot"]:"pleaseongbot")
-                       if (system("[ -f " ongbotfile " ]")==0)
-                               ongbotdefined=1
+                       ongbotdefined = ""
+                       ongbotfile = datapath argtab["story"] "/" ((argtab["pleaseongbot"]!="")?argtab["pleaseongbot"]:"pleaseongbot")
+                       if (system("[ -f " ongbotfile " ]") == 0)
+                               ongbotdefined = 1
                        
-                       if(ongbotdefined && ongoing>0 && state>0 && state<4 && f==last && b==(alt!=""?2:1))
-                       {
+                       if (ongbotdefined && ongoing>0 && state>0 && state<4 && f==last && b==(alt!=""?2:1)) {
                                print "<tr width=\""width"\" align=\"center\"><td colspan=\"4\" width=\"100%\">"
                                print "<form method=\"post\" action=\"/aftertime/pleaseongthis\">"
                                print "[<input type=\"submit\" class=\"hl\" value=\"ONG this for me\">]"
                                print "<input type=\"hidden\" name=\"story\" value=\""argtab["story"]"\">"
-                               if(e>0 && noenh=="")
+                               if (e>0 && noenh=="")
                                        print "<input type=\"hidden\" name=\"e\" value=\""e"\">"
                                print "</form></td></tr>"
                        }
-                       if(b==1 && alt!="")
+                       if (b==1 && alt!="")
                                print "<tr width=\""width"\" align=\"center\"><td colspan=\"4\" width=\"100%\">[<a href=\"/aftertime/viewer?story="argtab["story"](max_enhance>0?"&amp;e="e:"")"&amp;f="f s"&amp;b=2\">spoiler</a>]</td></tr>"
                }
                else
                        print "<tr width=\""width"\" align=\"center\"><td colspan=\"4\" width=\"100%\">[<a href=\"/aftertime/viewer?story="argtab["story"](max_enhance>0?"&amp;e="e:"")"&amp;f="f s"&amp;b=1\">bbcode</a>]</td></tr>"
                
-               if(argtab["otherviewerurl"]!="")
+               if (argtab["otherviewerurl"]!="")
                        print "<tr width=\""width"\" align=\"center\"><td colspan=\"4\" width=\"100%\">[<a href=\""otherviewerurl"\">"argtab["otherviewertext"]"</a>]</td></tr>"
                
                print "<tr width=\""width"\" align=\"center\"><td colspan=\"4\" width=\"100%\"><form method=\"get\" action=\"/aftertime/viewer\">Go to frame:"
                print "<input type=\"hidden\" name=\"story\" value=\""argtab["story"]"\">"
-               if(max_enhance>0)
+               if (max_enhance>0)
                        print "<input type=\"hidden\" name=\"e\" value=\""e"\">"
                print "<input class=\"pt\" type=\"text\" name=\"f\" size=\"4\">"
                print "<input class=\"pk\" type=\"submit\" value=\"GO\">"
-               if(ongtimetext!="" && ongoing==0)
-               {
+               if (ongtimetext!="" && ongoing==0) {
                        # print ongoing
                        # print"<form method=\"get\" action=\"/aftertime/viewer\">"
                        # print "<input type=\"hidden\" name=\"story\" value=\""argtab["story"]"\">"
@@ -650,7 +608,7 @@ END{
                print"</form></td></tr>"
                
                print "<tr width=\""width"\" align=\"center\"><td colspan=\"4\" width=\"100%\"><form method=\"get\" action=\"/aftertime/viewer\">Go to story:<select class=\"pk\" name=\"story\">"
-               for(i=0; i<stories; ++i)
+               for (i=0; i<stories; ++i)
                        print "<option value=\""storytab[i]"\""(storytab[i]==argtab["story"]?" selected":"")">"storyname[i]"</option>"
                print "</select> <input class=\"pk\" type=\"submit\" value=\"GO\"></form></td></tr>"