|
|
1.1 ! root 1: #include <pads.pub> ! 2: ! 3: class Creator : public PadRcv { ! 4: void linereq(long,Attrib=0); ! 5: public: ! 6: Pad *pad; ! 7: Creator(); ! 8: char *kbd(char*); ! 9: }; ! 10: ! 11: class Journal : public PadRcv { ! 12: void linereq(long,Attrib=0); ! 13: void create(long); ! 14: public: ! 15: Pad *pad; ! 16: void cycle(); ! 17: Journal(); ! 18: }; ! 19: ! 20: class Test : public PadRcv { ! 21: void linereq(long,Attrib=0); ! 22: public: ! 23: Pad *pad; ! 24: Test(); ! 25: void err(long); ! 26: void lines(long); ! 27: void exit(); ! 28: void cycle(); ! 29: void tabs(long t) { pad->tabs(t); } ! 30: void remove(long k) { pad->removeline(k); } ! 31: char *kbd(char*); ! 32: char *help(); ! 33: void usercut(); ! 34: }; ! 35: ! 36: void Test::usercut() {} ! 37: ! 38: int sscanf(char*,char* ...); ! 39: ! 40: char *Test::kbd(char *s) ! 41: { ! 42: int i; ! 43: if( !sscanf(s,"%d",&i) || i<=0 || i>=1000 ) ! 44: return "out of range"; ! 45: linereq(i,SELECTLINE); ! 46: return 0; ! 47: } ! 48: ! 49: char *Creator::kbd(char *s) ! 50: { ! 51: int lo, hi; ! 52: if( 2 == sscanf(s, "%d %d", &lo, &hi) ) ! 53: pad->createline(lo, hi ); ! 54: return 0; ! 55: } ! 56: ! 57: char *Test::help() ! 58: { ! 59: static int i; ! 60: switch( i++%3 ){ ! 61: case 0: return 0; ! 62: case 1: return ""; ! 63: case 2: return "Test::help"; ! 64: } ! 65: } ! 66: ! 67: void Test::exit() { ::exit(); } ! 68: ! 69: void Test::cycle() ! 70: { ! 71: static i; ! 72: char *ctime(long*); ! 73: long time(long*), t; ! 74: ! 75: pad->alarm(i++/10); ! 76: time(&t); ! 77: pad->insert( 1, "%s", ctime(&t) ); ! 78: } ! 79: ! 80: Test::Test() ! 81: { ! 82: Menu m( "first 1", (Action) &Test::linereq, 1 ); ! 83: Menu sub; ! 84: Menu subsub; ! 85: pad = new Pad( (PadRcv*) this ); ! 86: pad->lines(1000); ! 87: pad->insert(1001, "one thouseand and one"); ! 88: pad->banner( "%s=%s", "Banner", "Test" ); ! 89: pad->name( "%s=%s", "name", "test" ); ! 90: pad->options(DONT_CLOSE|NO_TILDE); ! 91: pad->makecurrent(); ! 92: subsub.sort( "B", (Action) &Test::linereq, 101 ); ! 93: subsub.sort( "A", (Action) &Test::linereq, 102 ); ! 94: subsub.sort( "D", (Action) &Test::linereq, 103 ); ! 95: subsub.sort( "C", (Action) &Test::linereq, 104 ); ! 96: sub.first( subsub.index("subsub") ); ! 97: sub.last( "b", (Action) &Test::linereq, 110 ); ! 98: sub.last( "a", (Action) &Test::linereq, 120 ); ! 99: sub.last( "d", (Action) &Test::linereq, 130 ); ! 100: sub.last( "c", (Action) &Test::linereq, 140 ); ! 101: m.first( sub.index("sub") ); ! 102: m.first( "cycle", (Action) &Test::cycle ); ! 103: m.first( "tabs=1", (Action) &Test::tabs, 1 ); ! 104: m.first( "tabs=3", (Action) &Test::tabs, 3 ); ! 105: m.last( "tabs=5", (Action) &Test::tabs, 5 ); ! 106: m.last( "tabs=7", (Action) &Test::tabs, 7 ); ! 107: m.last( "tabs=0", (Action) &Test::tabs, 0 ); ! 108: m.last( "tabs=128", (Action) &Test::tabs, 128 ); ! 109: m.last( "remove 100", (Action) &Test::remove, 100 ); ! 110: m.last( NumericRange(1,10) ); ! 111: pad->menu(m.index()); ! 112: pad->alarm(); ! 113: } ! 114: ! 115: Creator::Creator() ! 116: { ! 117: pad = new Pad( (PadRcv*) this ); ! 118: pad->banner( "%s=%s", "Banner", "Creator" ); ! 119: pad->name( "%s=%s", "name", "creator" ); ! 120: pad->makecurrent(); ! 121: for( long i = 1; i <= 100; i += 10 ){ ! 122: pad->createline(i); ! 123: pad->createline(i+3, i+7); ! 124: } ! 125: } ! 126: ! 127: void Creator::linereq(long i, Attrib a) ! 128: { ! 129: pad->insert(i, a, "line\t%d\t[]", i); ! 130: } ! 131: ! 132: Journal::Journal() ! 133: { ! 134: pad = new Pad( (PadRcv*) this ); ! 135: pad->banner( "%s", "Journal" ); ! 136: pad->name( "%s", "Journal" ); ! 137: pad->makecurrent(); ! 138: pad->alarm(); ! 139: Menu m; ! 140: m.last("create one", (Action)&Journal::create, 1); ! 141: m.last("create two", (Action)&Journal::create, 2); ! 142: pad->menu(m); ! 143: } ! 144: ! 145: void Journal::create(long i) ! 146: { ! 147: while(i--) ! 148: pad->createline(10); ! 149: } ! 150: ! 151: void Journal::linereq(long i, Attrib a) ! 152: { ! 153: pad->insert(i, a, "journal %d", i); ! 154: } ! 155: ! 156: void Journal::cycle() ! 157: { ! 158: static k; ! 159: ! 160: pad->createline(++k); ! 161: if( k-20 >= 1 ) pad->removeline(k-20); ! 162: pad->alarm(); ! 163: } ! 164: ! 165: void Test::linereq(long i, Attrib a) ! 166: { ! 167: Menu m; ! 168: ! 169: switch( i%5 ){ ! 170: case 0: ! 171: pad->insert( i, a, "line\t%d\t[]", i ); ! 172: pad->banner( "banner=%d", i ); ! 173: break; ! 174: case 1: ! 175: m.last( "150", (Action)&Test::linereq, 150 ); ! 176: pad->insert( i, a|USERCUT, (PadRcv*) this, m, "line\t%d", i ); ! 177: pad->name( "name=%d", i ); ! 178: break; ! 179: case 2: ! 180: m.last("250", (Action)&Test::linereq, 250 ); ! 181: pad->insert( i, a|USERCUT, (PadRcv*) this, m, "line\t%d", i ); ! 182: break; ! 183: case 3: ! 184: m.last("exit?", (Action)&Test::exit, 0 ); ! 185: pad->insert( i, a|USERCUT, (PadRcv*) this, m, "line\t%d", i ); ! 186: break; ! 187: case 4: ! 188: pad->insert( i, a|USERCUT, "" ); ! 189: break; ! 190: } ! 191: ! 192: } ! 193: ! 194: void main(int, char **argv) ! 195: { ! 196: new long; ! 197: if( argv[1] ) ! 198: PadsInit( argv[1] ); ! 199: else ! 200: PadsInit(); ! 201: extern char *TapTo; ! 202: TapTo = ".tapto"; ! 203: new Test; ! 204: new Creator; ! 205: new Journal; ! 206: NewPadStats(); ! 207: NewHelp(); ! 208: PadsServe(); ! 209: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.